Skill v1.0.0
currentAutomated scan100/100version: "1.0.0" name: da-investigate description: 変更が何に波及するかを洗い出す、または実際の動き方を追う。どこにあるか、何が依存しているか、何が壊れるかを聞かれた時に使う。決まった探索予算の中で file:line の根拠つきで答え、確かめられなかったことも明示する。読み取り専用。 argument-hint: "答えてほしい問い" allowed-tools: Task, Read, Grep, Glob, Bash(git:), Bash(rg:), Bash(gh:*) metadata: source: bwkw/dotagents
/da-investigate — 問いに答えて止まる
調査の失敗は 2 つある。もっともらしい推測で早く止まることと、境界なく読み続けて作業前にコンテキストを埋めることである。 前者は読む前に宣言するスコープ契約で、後者は答えが揃わなくても探索を終わらせる数値の予算で防ぐ。
このスキルは何も変更しない。読み取り専用で、読んで報告するだけ。
実行条件
| 条件 | 満たさない場合 | |
|---|---|---|
| 答えるべき具体的な問いがある | 止まる。「認証モジュールを調べて」は問いではない。答えが何の判断に使われるかを聞く(それが止めどきを決める) |
ワークフロー上の位置
| 上流 | このスキル | 下流 | |
|---|---|---|---|
| 問い、または計画の開始 | /da-investigate | /grilling, /writing-plans, /da-design-review |
読むファイル
常に読む
| ファイル | 理由 | |
|---|---|---|
${CLAUDE_SKILL_DIR}/reference/evidence-rules.md | 見つけたこと・見なかったことの報告の仕方 |
条件つきで読む
| ファイル | 条件 | |
|---|---|---|
CLAUDE.md, AGENTS.md | 問いが仕組みではなくプロジェクトの規約に関わる時 |
レポートはユーザーが書いている言語で書く(不明なら日本語)。パス・識別子・コマンド・コード片・ログは原文のまま残す。
Step 1. スコープ契約を宣言する(何か読む前に)
次をユーザーに示す。
- 問いを正確に言い直したもの
- 答えが使われる判断。これが「十分」の基準になる。「テナントの絞り込みはどこで掛かるか」は、セキュリティレビューなら全箇所、概観なら代表 1 箇所でよい
- 答えるために読むものと、おおよその量
- 意図して読まないもの
問いが実は複数なら、そう言ってどれが重要かを聞く。黙って全部に答えない。
Step 2. 広く安いものから探す
段を順に上げる。最も高い段から始めない。
| 段 | 道具 | 答えること | |
|---|---|---|---|
| 1 | 完全一致の文字列・シンボル・識別子を rg | この文字列はどこにあるか | |
| 2 | 構造パターンの rg、あれば ast-grep | この形のコードはどこにあるか | |
| 3 | LSP / 定義ジャンプ(環境にあれば) | 本当に誰が呼び、誰が実装しているか | |
| 4 | ファイル全体を読む | 実際どう動くか |
たいていの問いは 1〜2 段で答えが出る。ファイルを読むのは最後の段。「X はどこか」のために 5 つ目のファイルを開いているなら、悪いのは予算ではなく検索語である。
独立した部分を持つ広い問いは、部分ごとに x-codebase-explorer サブエージェントを並列で起動し(1 メッセージで同時に)、結果を統合する。各サブエージェントに予算を割り振る。読んだ中身はサブエージェント側に残り結論だけが戻るので、調査はサブエージェントの最良の使い道である。x-codebase-explorer はこのツールキットがグローバルに入れており、読み取り専用の制約と「確認済み / 推論 / 未確認」の区別を自分の定義に持つ。
否定を報告する前に、反証を試みる
「これに依存するものは無い」「呼び出し元はここだけ」「この値はどこでも使われていない」。否定は最も間違えやすく、それを根拠に変更が入るので害も最も大きい。断言する前に、別の語彙でもう一度探す。
- シンボルの別名 — エイリアス、再エクスポート、改名された import
- 間接的な到達 — 動的ディスパッチ、リフレクション、レジストリ、文字列キー、DI
- 文字列から組み立てる参照 — 連結、テンプレートリテラル、実行時に組み立てる名前
- コード以外の呼び出し元 — 設定、マイグレーション、シード、CI ワークフロー、IaC テンプレート
そのうえで試した語彙を書く。書かなければ「証拠が無い」を「無いことの証拠」として報告したことになる。追加 1 ラウンドで済み、予算の中で最も価値の高い使い方である。
Step 3. 予算を守る
ファイル読み 25 回、検索の絞り込み 3 ラウンド。サブエージェントを含めた 1 調査あたり。
使い切ったら止まって報告する。黙って続けない。未検証のものと、次の 25 回で何を読むべきかを書く。境界が分かっている部分回答は使えるが、黙って途切れた回答は使えない。
予算を上げるのはユーザーが求めた時だけで、上げたことを明示する。
Step 4. 報告する
${CLAUDE_SKILL_DIR}/reference/evidence-rules.md に従う。
## <問い>### 答え最初に、直接。2〜5 文。探した経緯の説明ではない。### 根拠| 主張 | 場所 | 確認 ||---|---|---|| テナントの絞り込みは Repository 層で掛かっている | `src/foo/bar.repository.ts:L42` | 直接読んだ || バッチの経路も同じ絞り込みを通る | `src/batch/sync.ts:L88` | 直接読んだ || 管理画面の経路も同じ | — | **未確認** —— 予算に達した |### 確認していないこと-暗に済ませず、名前を挙げる。「X は見ていない」は情報で、黙っていることは情報にならない。### 確度何が事実で、何が推論か。残りを確かめるには何が要るか。
完了条件
- [ ] 答えが最初にあり、聞かれた問いに答えている
- [ ] すべての主張に
file:lineがあるか、未確認と明示されている - [ ] 調べていない範囲が名指しされている
- [ ] 事実と推論が見て分かる形で分かれている
- [ ] すべての否定の主張に、断言前に試した語彙が書かれている
アンチパターン
網羅した気になるために読む。そのファイルがどの主張を支えるか言えないなら開かない。
聞かれたより大きな問いに答える。1 行の変更に波及範囲の地図は無駄。スコープ契約はこれを防ぐためにあるので、正直に書く。
穴をぼかした文で隠す。「絞り込みはおそらく掛かっているようだ」は「未確認: 管理画面の経路は読んでいない」より悪い。ぼかしは答えに見えて答えではない。