dotfiles-doctor — dotfiles 整合性チェック
claude/install.ps1 がエラーなく正しく展開できる状態かを点検し、問題と修正案を報告する。
このリポジトリ専用。実行する破壊的操作はなく、読み取りと検証が中心。
チェック項目
1. hooks の .HOOK メタデータ
claude/hooks/*.ps1 を 1 つずつ確認する。
- 各ファイル先頭に
<# .HOOK { ... } #>ブロックがあるか(無いと settings.json に登録されない) - ブロック内の JSON が
ConvertFrom-Jsonでパース可能か(壊れていると install 時に WARNING) eventキーが存在するか。値が正規のイベント名か (PreToolUse / PostToolUse / SessionStart / SessionEnd / Stop / Notification / UserPromptSubmit / PreCompact 等)matcher/async/asyncRewakeを使う場合、型が妥当か(async は bool)
2. settings.template.json
- JSON として妥当か(
ConvertFrom-Jsonで読めるか) - プレースホルダは
{{CLAUDE_DIR}}のみか(未定義プレースホルダが残っていないか) - Windows パスは JSON 文字列としての
\\になっているか(\\\\は過剰エスケープ) $schema等の必須キー構成が崩れていないか
3. skills 構成
claude/skills/配下の各サブディレクトリにSKILL.mdがあるかSKILL.mdの frontmatter にnameとdescriptionがあるか- frontmatter の
nameがディレクトリ名と一致しているか - 単一ファイル形式
*.skillが混在していれば、それも認識して報告する
4. install.ps1 との突き合わせ
- hooks のうち
.HOOKブロックを持たないものは「登録対象外」として一覧化する - 同一 event × 同一 matcher の重複(install.ps1 はスキップするが意図しない重複は警告)
5. ~/.claude 側の残骸
install.ps1 はコピーのみで削除を行わないため、dotfiles から消したものが展開先に残り続ける。
~/.claude/hooks/*.ps1のうちclaude/hooks/に無いもの~/.claude/skills/*/のうちclaude/skills/に無いもの~/.claude/agents/*.mdのうちclaude/agents/に無いもの
残骸の hook は settings.json が毎回テンプレートから再生成されるため発火しないが、
残骸の skill は ~/.claude/skills/ に置かれているだけで有効になる(dotfiles を経由しない)。
skills の残骸は優先度を上げて報告する。
進め方
- 上記を読み取りで検証する(実際に install.ps1 は実行しない)
- 結果を OK / 警告 / エラー で分類して報告する
- 各指摘に「対象ファイル → 問題 → 具体的修正」を付ける
- 問題が無ければ「整合性 OK」と明言する
原則
- 検証のために設定を書き換えない。修正は提案にとどめ、依頼があってから適用する
- install.ps1 の実挙動(正規表現
(?s)<#\s*\.HOOK\s*(\{.*?\})\s*#>、matcher 重複スキップ等)を基準に判断する