mcpField
H
health

health

github.com/agenticnotetaking生産性3.5k46 回インストール36 週間前に更新
リポジトリ

health について

ノート保管庫をスキャンし、ノート、リンク、トピックマップ、運用ファイルを診断して、問題を分類したレポートを作成するスキルです。クイック、フル、スリースペースの各モードがあります。

主な機能

  1. 01スキーマ準拠の確認
  2. 02孤立ノートとリンク切れの検出
  3. 03説明文の品質確認
  4. 043スペース境界の確認
  5. 05日付入りヘルスレポート

活用シーン

  1. 01メタデータ不足のノートを探す
  2. 02孤立ノートやリンク切れを特定する
  3. 03ナレッジ領域の境界を点検する

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/agenticnotetaking/arscontexta --skill health

インストール後、Claude Code で/healthを入力して読み込まれたか確認します。

同梱ファイルskill.json

詳細

ランタイム設定(ステップ 0 — 処理を開始する前)

ドメイン固有の動作を設定するため、以下のファイルを読み込みます。

  1. ops/derivation-manifest.md — 用語のマッピング、フォルダー名、プラットフォームに関するヒント

    • ノートフォルダー名には vocabulary.notes を使用します
    • インボックスフォルダー名には vocabulary.inbox を使用します
    • 出力するノートの種類名には vocabulary.note を使用します
    • MOC/トピックマップの参照には vocabulary.topic_map を使用します
    • 複数形には vocabulary.topic_maps を使用します
  2. ops/config.yaml — 処理の深さ、しきい値

  3. 3空間のリファレンス — 境界ルールについては ${CLAUDE_PLUGIN_ROOT}/reference/three-spaces.md(full モードと three-space モードでのみ読み込みます)

  4. テンプレート — 検証に必要なスキーマフィールドを把握するため、テンプレートファイルを読み込みます

これらのファイルが存在しない場合(初期化前の実行または単独での使用)は、共通のデフォルト値を使用します。

  • ノートフォルダー:notes/
  • インボックスフォルダー:inbox/
  • トピックマップ:notes/ 内のトピックマップ

今すぐ実行

対象:$ARGUMENTS

呼び出しモードをすぐに判定します。

入力モード実行するカテゴリ
空または quickQuick1(スキーマ)、2(孤立ファイル)、3(リンク)
fullFull8カテゴリすべて
three-spaceThree-Space5(3空間の境界)のみ

以下の手順を実行します。

  1. 引数からモードを判定します
  2. ボルトをスキャンします — すべてのノートファイル、{vocabulary.topic_map} ファイル、インボックス項目、ops ファイルを一覧化します
  3. 該当する診断カテゴリを順番に実行します(1~8)
  4. 以下のしきい値に基づいて、各結果を PASS、WARN、FAIL に分類します
  5. 条件に基づくメンテナンスシグナルを提示します(しきい値テーブルと照合します)
  6. 具体的なファイルパス、件数、推奨アクションを含むヘルスレポートを生成します
  7. レポートを ops/health/YYYY-MM-DD-report.md に書き込みます

今すぐ開始してください。 各診断カテゴリの詳細は以下を参照してください。

プラットフォームへの適応

チェックは、プラットフォームがサポートする機能に合わせて調整されます。

  • セマンティック検索(qmd)が設定されていない場合、セマンティック検索に依存するチェックはスキップし、その旨を記録します
  • フックが利用できない場合、検証は規約のみに基づき、自動的な適用は行われないことを記録します
  • self/ ディレクトリが存在しない場合(設定で無効化されている場合)、self-space のチェックはスキップします。ただし、self-space の内容が ops/ に正しく取り込まれていることを確認します

プラットフォームにない機能ではなく、確認できる内容を報告してください。


8つの診断カテゴリ

カテゴリ 1:スキーマ準拠(quick、full)

チェック内容: {vocabulary.notes}/ および self/ が有効な場合は self/memory/ 内のすべての {vocabulary.note} に、必須フィールドを備えた有効な YAML フロントマターがあることを確認します。

確認方法:

# Find all note files (exclude topic maps)
for f in {vocabulary.notes}/*.md; do
  [[ -f "$f" ]] || continue
  # Check: YAML frontmatter exists
  head -1 "$f" | grep -q '^---$' || echo "FAIL: $f — no YAML frontmatter"
  # Check: description field present
  rg -q '^description:' "$f" || echo "WARN: $f — missing description field"
  # Check: topics field present and links to at least one topic map
  rg -q '^topics:' "$f" || echo "WARN: $f — missing topics field"
done

追加チェック:

  • ドメイン固有の列挙型フィールドに有効な値が設定されていること(テンプレートがある場合は、テンプレートの _schema ブロックと照合します)
  • description フィールドが空ではないこと(フィールドが存在するだけでは不十分です)
  • topics フィールドに少なくとも1つの Wiki リンクが含まれていること

${CLAUDE_PLUGIN_ROOT}/reference/ に validate-kernel.sh が存在する場合は、実行して結果を含めます。

しきい値:

条件レベル
YAML フロントマターのないノートが1つでもあるFAIL
description フィールドのないノートが1つでもあるWARN
topics フィールドのないノートが1つでもあるWARN
無効な列挙型の値が1つでもあるWARN
すべてのノートがすべてのチェックに合格PASS

出力形式:

[1] Schema Compliance ............ WARN
    2 notes missing description:
      - notes/example-note.md
      - notes/another-note.md
    1 note missing topics:
      - notes/orphaned-claim.md
    12/15 notes fully compliant
カテゴリ 2:孤立ファイルの検出(quick、full)

チェック内容: すべての {vocabulary.note} に、別のファイルからの Wiki リンクが少なくとも1つあることを確認します。

確認方法:

# For each note file, check if ANY other file links to it
for f in {vocabulary.notes}/*.md; do
  [[ -f "$f" ]] || continue
  basename=$(basename "$f" .md)
  # Search for [[basename]] in all other files
  count=$(rg -l "\[\[$basename\]\]" --glob '*.md' | grep -v "$f" | wc -l | tr -d ' ')
  if [[ "$count" -eq 0 ]]; then
    echo "WARN: $f — no incoming links (orphan)"
  fi
done

補足: 孤立ファイルが自動的に失敗を意味するわけではありません。今日作成され、まだ /{vocabulary.cmd_reflect} を実行していないノートが一時的に孤立しているのは想定どおりです。ファイルの作成時期を確認してください。

条件レベル
作成から24時間未満の孤立ノートINFO(想定どおり — 振り返りフェーズ待ち)
作成から1~7日の孤立ノートWARN
作成から7日を超えた孤立ノートFAIL(継続的な孤立状態への対応が必要です)
孤立ファイルが検出されないPASS

出力形式:

[2] Orphan Detection ............. WARN
    3 orphan notes detected:
      - notes/new-claim.md (created 2h ago — awaiting reflect) [INFO]
      - notes/old-observation.md (created 5d ago) [WARN]
      - notes/forgotten-insight.md (created 14d ago) [FAIL]
    Recommendation: run /reflect on forgotten-insight.md and old-observation.md
カテゴリ 3:リンクの健全性(quick、full)

チェック内容: すべてのファイル内のすべての Wiki リンク [[target]] が、既存のファイルを参照していることを確認します。

確認方法:

# Extract all wiki links from all markdown files
# For each unique link target, verify a file with that name exists
rg -oN '\[\[([^\]]+)\]\]' --glob '*.md' -r '$1' | sort -u | while read target; do
  # Search for file matching this name
  found=$(find . -name "$target.md" -not -path "./.git/*" 2>/dev/null | head -1)
  if [[ -z "$found" ]]; then
    echo "FAIL: dangling link [[${target}]] — no file found"
    # Show which files contain this dangling link
    rg -l "\[\[$target\]\]" --glob '*.md'
  fi
done

しきい値:

条件レベル
リンク切れがある(参照先が存在しない)FAIL
すべてのリンクが解決されるPASS

WARN ではなく FAIL にする理由: リンク切れは、読者への約束を破るものです。読者がたどった [[link]] がどこにもつながらないたびに、グラフへの信頼が損なわれます。すぐに修正してください。

出力形式:

[3] Link Health .................. FAIL
    2 dangling links found:
      - [[nonexistent-note]] referenced in:
        - notes/some-claim.md (line 14)
        - notes/another-claim.md (line 8)
      - [[removed-topic]] referenced in:
        - notes/old-note.md (line 22)
    Recommendation: create missing notes or remove broken links
カテゴリ 4:説明の品質(full のみ)

チェック内容: すべての {vocabulary.note} の説明に、タイトルの言い換えではない、実質的な情報が含まれていることを確認します。

確認方法:

各 {vocabulary.note} について:

  1. タイトルを読む(拡張子を除いたファイル名)
  2. YAML フロントマターの description フィールドを読む
  3. 評価する:説明に、タイトルでは触れられていない範囲、仕組み、または示唆が含まれているか?

品質の目安:

確認項目しきい値
説明の長さ50~200 文字が理想です。30 文字未満は簡潔すぎます。250 文字を超えると冗長すぎます
言い換えの検出説明でタイトルと同じ単語が 70% を超えて使われている場合は、言い換えとみなします
追加される情報説明には、タイトルにない仕組み、範囲、または示唆を含める必要があります

しきい値:

条件レベル
説明がタイトルの明らかな言い換えになっているWARN
説明が 30 文字未満WARN
説明が存在しないWARN(カテゴリ 1 でも検出されます)
説明に実質的な新情報が含まれているPASS

このチェックには判断が必要です。 文字列の一致だけでなく、意味を理解して評価してください。異なる言葉を使っていても、タイトルと同じ内容を述べている説明は、依然として言い換えです。

出力形式:

[4] Description Quality .......... WARN
    2 descriptions are restatements:
      - notes/quality-matters.md
        Title: "quality matters more than quantity"
        Description: "quality is more important than quantity in knowledge work"
        Issue: restates title without adding mechanism or implication
      - notes/structure-helps.md
        Title: "structure without processing provides no value"
        Description: "having structure without processing it is not valuable"
        Issue: exact restatement
    Recommendation: rewrite descriptions to add scope, mechanism, or implication
カテゴリ 5:3 つのスペースの境界チェック(full、three-space)

チェック内容: コンテンツが self/、{vocabulary.notes}/、ops/ の境界を守っていることを確認します。それぞれのスペースには目的があり、混同すると検索品質、ナビゲーション、信頼性が損なわれます。

このチェックを実行する前に: ${CLAUDE_PLUGIN_ROOT}/reference/three-spaces.md を読み、境界の仕様を確認してください。

検出する 6 つの混同パターン:

5a. Notes への Ops 混入(インフラの侵入)

キューの状態、健全性メトリクス、タスクファイル、処理成果物が {vocabulary.notes}/ ディレクトリに含まれている状態です。

検出方法:

# Check for ops-pattern YAML fields in notes
rg '^(current_phase|completed_phases|batch|source_task|queue_id):' {vocabulary.notes}/ --glob '*.md'
# Check for task file patterns in notes
rg '## (Create|Reflect|Reweave|Verify|Enrich)$' {vocabulary.notes}/ --glob '*.md'
検出内容レベル
{vocabulary.notes}/ 内に ops パターンのコンテンツがあるWARN
5b. Notes への Self 混入(アイデンティティの汚染)

エージェントのアイデンティティや方法論が、ユーザーのナレッジグラフに混在している状態です。エージェントの運用上の所見が、ユーザーの {vocabulary.notes}/ スペースに含まれている状態です。

検出方法:

# Check for agent-reflection patterns in notes (methodology observations, workflow assessments)
rg -i '(my methodology|I observed that|agent reflection|session learning|I learned)' {vocabulary.notes}/ --glob '*.md'
検出内容レベル
{vocabulary.notes}/ 内にエージェントの内省に関するコンテンツがあるWARN
5c. Ops への Notes 混入(閉じ込められた知識)

セッションログ、観察記録、または ops ファイル内に閉じ込められている、本来は {vocabulary.notes}/ に昇格させるべき真の知見です。

検出方法:

# Check for claim-like content in ops that could be notes
# Look for files with description fields in ops/observations/ or ops/methodology/
rg '^description:' ops/observations/*.md ops/methodology/*.md 2>/dev/null
検出内容レベル
説明とトピックのスキーマを持つ、ノートのようなコンテンツが ops/ にあるINFO(意図的な場合もありますが、レビュー対象としてフラグを立ててください)
5d. Ops への Self 混入/Self への Ops 混入

self/ に一時的な状態が保存されている(ops/ に保存すべき)状態、または ops/ にアイデンティティに関するコンテンツが保存されている(self/ に保存すべき)状態です。

検出方法:

# Check for temporal/queue content in self/
rg '^(current_phase|status|queue):' self/ --glob '*.md' 2>/dev/null
# Check for identity content in ops/
rg -i '(my identity|I am|who I am|my personality)' ops/ --glob '*.md' 2>/dev/null
5e. Self への Notes 混入

ドメイン知識が {vocabulary.notes}/ ではなく self/ に保存されている状態です。

検出方法:

# Check self/memory/ for notes that have topics linking to notes-space topic maps
rg '^topics:.*\[\[' self/memory/*.md 2>/dev/null | grep -v 'identity\|methodology\|goals\|relationships'
5f. Self スペースが存在しない場合の影響(self/ が無効な場合)

self/ が無効な場合、ops/ が self スペースのコンテンツを適切に受け入れていることを確認します。目標と引き継ぎ情報が {vocabulary.notes}/ に浮いたままではなく、ops/ に保存されていることを確認してください。

検出方法:

# If self/ doesn't exist, check that goals/handoffs are in ops/
if [[ ! -d "self/" ]]; then
  # Check for goals or handoff content in notes/
  rg -i '(my goals|current goals|handoff|session handoff)' {vocabulary.notes}/ --glob '*.md'
fi

しきい値:

条件レベル
境界違反がある(5a、5b、5d、5e)WARN
ops 内に知識が閉じ込められている(5c)INFO
Self が存在しない場合の影響(5f)WARN
すべての境界が守られているPASS

出力形式:

[5] Three-Space Boundaries ....... WARN
    1 boundary violation detected:
      Ops into Notes (infrastructure creep):
        - notes/task-tracking.md contains queue state fields (current_phase, batch)
        - Should be in ops/queue/ not notes/
    1 potential trapped knowledge:
      - ops/observations/interesting-pattern.md has note-like schema
        Consider promoting to notes/ via /reduce or direct creation
    Recommendation: move task-tracking.md to ops/queue/
カテゴリ 6: 処理スループット (full のみ)

チェック内容: インボックスとナレッジの比率。高い比率はコレクターの誤謬 (collector's fallacy) を示します。つまり、処理する以上の量を収集している状態です。

チェック方法:

# Count items in each space
INBOX_COUNT=$(find {vocabulary.inbox}/ -name '*.md' -not -path '*/archive/*' 2>/dev/null | wc -l | tr -d ' ')
NOTES_COUNT=$(find {vocabulary.notes}/ -name '*.md' 2>/dev/null | wc -l | tr -d ' ')
QUEUE_COUNT=$(find ops/queue/ -name '*.md' -not -path '*/archive/*' 2>/dev/null | wc -l | tr -d ' ')

# Calculate ratio
if [[ $((INBOX_COUNT + NOTES_COUNT)) -gt 0 ]]; then
  RATIO=$((INBOX_COUNT * 100 / (INBOX_COUNT + NOTES_COUNT)))
else
  RATIO=0
fi

echo "Inbox: $INBOX_COUNT | Notes: $NOTES_COUNT | In-progress: $QUEUE_COUNT | Ratio: ${RATIO}%"

しきい値:

条件レベル
インボックス対全体の比率 > 75% (インボックス対ノートが 3:1)FAIL
インボックス対全体の比率 > 50%WARN
インボックスの項目 > 20WARN (比率に関係なく)
インボックス対全体の比率 <= 50% かつインボックス <= 20PASS

出力形式:

[6] Processing Throughput ........ WARN
    inbox: 12 | notes: 8 | in-progress: 3 | ratio: 60%
    Inbox items outnumber processed notes — collector's fallacy risk
    Recommendation: run /reduce on oldest inbox items or /pipeline for end-to-end processing
カテゴリ 7: 古いノートの検出 (full のみ)

チェック内容: 最近変更されておらず、かつリンク密度が低いノート。古さは (低いリンク密度 + N 件の新しいノートが追加されて以降の活動がないこと) に基づく条件で判定され、純粋にカレンダーに基づくものではありません。

チェック方法:

各 {vocabulary.note} について:

  1. 最終変更日を確認する (stat または git log)
  2. 被リンク数を数える (孤立検出と同じですが、boolean ではなくカウント)
  3. 次の条件に該当するノートをフラグする: 変更が 30 日以上前 かつ 被リンク < 2
for f in {vocabulary.notes}/*.md; do
  [[ -f "$f" ]] || continue
  basename=$(basename "$f" .md)

  # Last modified (days ago)
  mod_days=$(( ($(date +%s) - $(stat -f %m "$f" 2>/dev/null || stat -c %Y "$f" 2>/dev/null)) / 86400 ))

  # Incoming link count
  incoming=$(rg -l "\[\[$basename\]\]" --glob '*.md' | grep -v "$f" | wc -l | tr -d ' ')

  if [[ $mod_days -gt 30 ]] && [[ $incoming -lt 2 ]]; then
    echo "STALE: $f — $mod_days days old, $incoming incoming links"
  fi
done

しきい値:

条件レベル
30 日より古く、被リンク < 2 のノートがあるWARN
90 日より古く、被リンク 0 のノートがあるFAIL
すべてのノートが最近であるか、十分に接続されているPASS

優先順位付け: 古いノートを次の順で並べ替えます:

  1. 経過日数 (古い順)
  2. リンク密度 (接続が少ない順)
  3. トピックの関連性 (活発なトピック領域のノートは優先度が高い)

出力形式:

[7] Stale Notes .................. WARN
    4 stale notes detected (>30d old, <2 incoming links):
      - notes/old-observation.md (92d, 0 links) [FAIL — consider archiving or reweaving]
      - notes/early-claim.md (45d, 1 link) [WARN]
      - notes/setupial-thought.md (38d, 1 link) [WARN]
      - notes/first-draft.md (31d, 0 links) [WARN]
    Recommendation: run /reweave on these notes to find connections, or archive if no longer relevant
カテゴリ 8: {vocabulary.topic_map} の一貫性 (full のみ)

チェック内容: 各 {vocabulary.topic_map} が健全な数のリンクされたノートを持ち、同じトピック領域のノートが実際にリンクされているか。

チェック方法:

各 {vocabulary.topic_map} ファイルについて:

  1. この {vocabulary.topic_map} にリンクしているノートを数える (topics フッター/フィールドにこれを持つノート)
  2. 同じトピック領域にありながら {vocabulary.topic_map} にリンクされていないノートがあるか確認する (カバレッジギャップ)
  3. Core Ideas のリンクにコンテキストフレーズが存在するか検証する (裸のリンクではないこと)
# For each topic map
for moc in {vocabulary.notes}/*.md; do
  [[ -f "$moc" ]] || continue
  # Check if this is a topic map (has type: moc in frontmatter)
  rg -q '^type: moc' "$moc" || continue

  moc_name=$(basename "$moc" .md)

  # Count notes linking to this topic map
  note_count=$(rg -l "\[\[$moc_name\]\]" {vocabulary.notes}/ --glob '*.md' | grep -v "$moc" | wc -l | tr -d ' ')

  echo "$moc_name: $note_count notes"
done

しきい値:

条件レベル
ノート < 5 の {vocabulary.topic_map}WARN (未発達 — 親への統合を検討)
ノート > 50 の {vocabulary.topic_map}WARN (過大 — サブ {vocabulary.topic_maps} への分割を検討)
ノート > 40 の {vocabulary.topic_map}INFO (しきい値に接近)
トピック領域にノートが存在するが {vocabulary.topic_map} にリンクされていないWARN (カバレッジギャップ)
すべての {vocabulary.topic_maps} が 5〜50 の範囲で、カバレッジが良好PASS

コンテキストフレーズのチェック:

# Check for bare links in topic map Core Ideas (links without context phrases)
for moc in {vocabulary.notes}/*.md; do
  rg -q '^type: moc' "$moc" || continue
  # Look for "- [[note]]" without " — " context
  rg '^\s*- \[\[' "$moc" | grep -v ' — ' | grep -v '^\s*- \[\[.*\]\].*—'
done

コンテキストフレーズのない裸のリンクは住所録の項目であり、ナビゲーションではありません。{vocabulary.topic_map} 内のすべてのリンクは、なぜそれをたどるべきかを説明する必要があります。

出力形式:

[8] MOC Coherence ................ WARN
    3 topic maps checked:
      - knowledge-work: 28 notes [PASS]
      - graph-structure: 52 notes [WARN — oversized, consider splitting]
        3 bare links without context phrases
      - agent-cognition: 3 notes [WARN — underdeveloped, consider merging]
    Recommendation: split graph-structure into sub-topic-maps; add context phrases to bare links

条件ベースのメンテナンスシグナル

該当するすべての診断カテゴリを実行した後、以下の条件ベースのトリガーを確認してください。これらは上記の8カテゴリとは別のもので、特定のスキルの呼び出しを促す横断的なシグナルです。

条件しきい値推奨事項
未処理の観察記録ops/observations/ 内に10ファイル以上/rethink の実行を検討
未解決の緊張状態ops/tensions/ 内に5ファイル以上/rethink の実行を検討
受信トレイの項目3項目以上/reduce または /pipeline を検討
未処理のセッションops/sessions/ 内に5ファイル以上/remember --mine-sessions の実行を検討
孤立したメモ永続化しているもの(> 7d)が1つでもある孤立したメモに対して /reflect を実行
リンク切れ1つでもある壊れた参照を直ちに修正
古いメモリンクが少なく、古い/reweave の実行を検討
{vocabulary.topic_map} の過大化40メモ超分割を検討
キューの停滞タスクが2セッションを超えて進捗なしに保留中ブロック中として提示
トリガーカバレッジの欠落既知のメンテナンス条件に対応するトリガーが設定されていない欠落自体を指摘

条件数の確認方法:

# Pending observations
OBS_COUNT=$(find ops/observations/ -name '*.md' 2>/dev/null | wc -l | tr -d ' ')

# Open tensions
TENSION_COUNT=$(find ops/tensions/ -name '*.md' 2>/dev/null | wc -l | tr -d ' ')

# Inbox items
INBOX_COUNT=$(find {vocabulary.inbox}/ -name '*.md' -not -path '*/archive/*' 2>/dev/null | wc -l | tr -d ' ')

# Unprocessed sessions
SESSION_COUNT=$(find ops/sessions/ -name '*.md' 2>/dev/null | wc -l | tr -d ' ')

# Queue stalled
PENDING_TASKS=$(jq '[.tasks[] | select(.status=="pending")] | length' ops/queue/queue.json 2>/dev/null || echo 0)

メタトリガー: 「トリガーカバレッジ」の確認を含めてください。既知のメンテナンス条件と、実際に確認している項目を比較します。メンテナンス条件に対応する確認項目や設定済みのトリガーがない場合、その欠落自体を指摘事項とします。これにより、メンテナンス上の負債が検知されないまま蓄積する事態を防ぎます。


出力形式

完全なヘルスレポートは、以下の構成に従います。モードにかかわらず、すべてのレポートでこの形式を使用します。

=== HEALTH REPORT ===
Mode: [quick | full | three-space]
Date: YYYY-MM-DD
Notes scanned: N | Topic maps: N | Inbox items: N

Summary: N FAIL, N WARN, N PASS

FAIL:
- [Category N]: [brief description of failure]
  [specific files and details]

WARN:
- [Category N]: [brief description of warning]
  [specific files and details]

PASS:
- [Category N]: [confirmation]

---

[1] Schema Compliance ............ PASS | WARN | FAIL
    [details — specific files, specific issues]

[2] Orphan Detection ............. PASS | WARN | FAIL
    [details — specific files, age, link count]

[3] Link Health .................. PASS | WARN | FAIL
    [details — specific dangling links, where referenced]

[4] Description Quality .......... PASS | WARN | FAIL  (full mode only)
    [details — specific files, title vs description comparison]

[5] Three-Space Boundaries ....... PASS | WARN | FAIL  (full/three-space mode)
    [details — specific boundary violations by type]

[6] Processing Throughput ........ PASS | WARN | FAIL  (full mode only)
    inbox: N | notes: N | in-progress: N | ratio: N%

[7] Stale Notes .................. PASS | WARN | FAIL  (full mode only)
    [N notes older than 30d with <2 incoming links, sorted by priority]

[8] MOC Coherence ................ PASS | WARN | FAIL  (full mode only)
    [details — note count per topic map, coverage gaps, bare links]

---

Maintenance Signals:
    [condition-based triggers from table above, if any thresholds met]
    - observations: N pending (threshold: 10) [TRIGGERED | OK]
    - tensions: N pending (threshold: 5) [TRIGGERED | OK]
    - inbox: N items (threshold: 3) [TRIGGERED | OK]
    - sessions: N unprocessed (threshold: 5) [TRIGGERED | OK]

---

Recommended Actions (top 3, ranked by impact):
1. [Most impactful action — specific command + specific file]
2. [Second priority — specific command + specific file]
3. [Third priority — specific command + specific file]
=== END REPORT ===
レポートの保存

すべてのヘルスレポートを ops/health/YYYY-MM-DD-report.md に書き込みます。同じ日に複数のレポートを実行する場合は、カウンターを追加します:YYYY-MM-DD-report-2.md。

これによりヘルスの履歴が作成され、/architect が進化を提案する際に参照できます。レポート間の傾向から、個々のレポートでは見つからない体系的なパターンを把握できます。


品質基準

具体的にする

すべての指摘事項で、該当するファイルを必ず明記してください。

悪い例:「説明がないメモがいくつかある」 良い例:「notes/example-note.md と notes/another-note.md に description フィールドがありません」

悪い例:「リンク切れがある」 良い例:「[[nonexistent-claim]] は notes/old-note.md(14行目)と notes/related.md(22行目)で参照されていますが、その名前のファイルは存在しません」

影響度に基づいて優先順位を付ける

問題の重要度はそれぞれ異なります。推奨アクションのセクションでは、影響度の高い順に記載します。

影響度例理由
最高リンク切れ、永続化した孤立メモグラフ上の約束が破られ、読者が行き止まりにぶつかります
高スキーマ違反、境界違反構造的な整合性に関わり、より大きな問題へと発展します
中説明の品質、古いメモ検索品質が低下しますが、機能しなくなるわけではありません
低{vocabulary.topic_map} のサイズ警告、スループット比メンテナンス上の負債であり、規模が大きくなると重要になります
指摘が多くなりすぎないようにする
  • 推奨アクションでは、重要度の高い上位5~10件に絞ります
  • 関連する問題はまとめます(説明がないメモが3つある場合は、3件ではなく1件の指摘とします)
  • 大規模な保管庫では、カテゴリごとの詳細を具体的なファイル10件までに制限し、その後は「...その他15件」のように要約します
FAIL と WARN を区別する
レベル意味必要な対応
FAIL構造上の問題 — 何かが壊れている問題が拡大する前に修正する
WARN改善の機会 — 最適ではない状態都合のよいときに対応する
PASSカテゴリは健全対応不要
INFO注目すべきだが、対応は不要状況を理解するための情報

FAIL の対象: リンク切れ(グラフの破損)、永続化した孤立メモ(> 7 days)、重大なスキーマ違反(frontmatter が完全に欠落)、重大な境界違反。

それ以外の最適ではない状態はすべて WARN とします。


モード固有の動作

クイックモード(デフォルト)

カテゴリ 1〜3 のみを実行します: スキーマ、孤立、リンク。

使用する場合:

  • セッション開始時のヘルスチェック
  • ボールトの整合性の簡単な確認
  • ノート作成をまとめて行った後

実行時間: ノート数 200 までのボールトでは 30 秒以内に完了するはずです。

フルモード

8 つのカテゴリすべてに加えてメンテナンスシグナルを実行します。

使用する場合:

  • 定期的な包括的ヘルスレビュー
  • ボールトに大きな変更を加えた後(大量のバッチ処理、再構築)
  • ボールトについて「何かおかしい」と感じたとき
  • /architect または /reseed セッションの前

実行時間: 説明品質の分析と {vocabulary.topic_map} の一貫性チェックのため、大きなボールトでは 1〜3 分かかることがあります。

スリースペースモード

カテゴリ 5 のみを実行します: 境界違反チェック。

使用する場合:

  • /reseed の後に境界が保たれていることを確認するとき
  • 検索結果が汚染されているように見えるとき(ナレッジのクエリに運用コンテンツが混ざる)
  • self/ を有効化または無効化するとき
  • 「なぜ自分の検索はおかしな結果を返すのか?」をデバッグするとき

実行時間: 30 秒以内に完了するはずです。


エッジケース

空のボールト

ノートが 0 件のボールトは不健全ではありません — 新しいだけです。次のように報告します:

Notes scanned: 0 | Topic maps: 0 | Inbox items: N
All categories PASS (no notes to check)
Maintenance Signal: inbox has N items — consider /reduce to start building knowledge
Self スペースが無効

self/ が存在しない場合:

  • self スペースの境界チェック(5b、5d、5e のインバウンド)をスキップします
  • ただし ops/ が self スペースのコンテンツを正しく吸収しているかは確認します(5f)
  • レポートに記載します: 「self/ は無効です — 境界チェックはそれに合わせて調整されています」
セマンティック検索なし

qmd/MCP ツールが利用できない場合:

  • セマンティック検索に依存するチェックはスキップします
  • レポートに記載します: 「セマンティック検索が利用できません — 一部のチェックをスキップしました」
  • ファイルベースのチェック(スキーマ、孤立、リンク、境界)はすべて引き続き実行されます
大きなボールト(ノート 500 件以上)
  • カテゴリごとのファイル一覧は 10 件までに制限し、その後は要約します
  • パフォーマンスが低下する場合は、チェックをバッチで実行することを検討します
  • 推奨アクションは影響の大きい項目に絞ります

他のスキルとの統合

ヘルスレポートの検出事項は他のスキルに引き継がれます:

検出事項引き継ぎ先方法
孤立ノート/reflectreflect を実行して孤立ノートのつながりを見つけます
古いノート/reweavereweave を実行して古いノートを新しいつながりで更新します
説明品質の問題/verify または手動での書き直し説明を修正して検索精度を改善します
スキーマ違反/validateバリデーションを実行して特定のスキーマ問題を修正します
境界違反手動での再構築ファイルを正しいスペースに移動します
処理スループット/reduce または /pipelineインボックス項目を処理して比率を改善します
{vocabulary.topic_map} が大きすぎる手動での分割または /architect大きすぎる {vocabulary.topic_map} をサブ {vocabulary.topic_map} に分割します
蓄積された観察/rethink観察をレビューしてトリアージします
蓄積された緊張/rethink緊張を解決または解消します

ヘルスからアクションへのループ:

/health (diagnose) -> specific findings -> specific skill invocation -> /health (verify fix)

ヘルスは診断のみです — 状態を測定するもので、変更を指示するものではありません。/architect はヘルスレポートを読み、調査に基づいて変更を提案します。この分離は重要です: ヘルスは何が問題かを伝え、architect はなぜ、どのように修正するかを伝えます。

コメント