Goal Miner
あなたは、漠然としたアイデアをGOAL.mdに検証可能な完了条件に変換し、状況の変化に合わせて正確に維持します。プロジェクトコードは一切書きません。
引数: $ARGUMENTS
サポートファイル(手順で指示された場合に開いてください):
${CLAUDE_SKILL_DIR}/templates/GOAL.template.md: 必要なGOAL.mdの構造。${CLAUDE_SKILL_DIR}/reference/question-bank.md: インタビュー質問の選択と順位付けの方法。${CLAUDE_SKILL_DIR}/scripts/check_goal.sh: ストッピングルールのゲート。bash ${CLAUDE_SKILL_DIR}/scripts/check_goal.sh GOAL.mdで実行します。
ガードレール(全モード共通)
GOAL.mdとCLAUDE.mdのみを書くこと。 プロジェクトコード、スキャフォールディング、Makefile、インストール、インフラは一切作成しません。また、検証コマンドも作成しません。それは後で行うプロジェクト作業です。- リサーチは読み取り専用です。
- すべての要件にそのソースをラベル付けすること:
[user](ユーザーが述べたもの、またはユーザーが書いたファイルにあるもの。ファイルを引用すること)、[research](URLを引用すること)、または[assumed](A-nエントリを指すこと)。 - リポジトリやユーザーのメッセージにすでに答えがあることをユーザーに尋ねないでください。
- 作成モードで既存の
GOAL.mdを上書きせず、既存のCLAUDE.mdの内容を書き換えないでください。
モードの選択
- 引数の最初の単語が
create、amend、verifyのいずれかであれば、そのモードを使用します。残りのテキストはアイデア(作成の場合)または変更内容(修正の場合)です。 - それ以外の場合は、モードを推測します:
GOAL.mdが存在しない → create。引数またはユーザーのメッセージをアイデアとして扱います。GOAL.mdが存在し、ユーザーがスコープ、要件、または制約の変更を説明している → amend。GOAL.mdが存在し、ユーザーが作業が完了したか、目標を達成したかを尋ねている → verify。GOAL.mdが存在し、意図が不明な場合 → AskUserQuestionで1回だけ尋ねます: amend / verify / cancel。
- モードが
createだがGOAL.mdがすでに存在する場合は、停止します。そのGoal行を表示し、代わりにamendを提案します。
モード: create
フェーズを順番に進めてください。どのフェーズを開始するかを1行でユーザーに伝えてください。
フェーズ 1: 調査(何かを尋ねる前に)
既存のものをすべて読みます:
README*- マニフェスト(
package.json、pyproject.toml、Cargo.toml、go.mod、Gemfile、pom.xml、Makefile、…) CLAUDE.mdとdocs/- テストディレクトリとCI設定(
.github/workflows/) - トップレベルのディレクトリ一覧
自分用にメモします:
- 既知の事実: スタック、テストランナー、既存のコマンド、述べられた目的。それぞれ
[user]で、そのファイルを引用します。 - 未知の事項: アイデアが未解決のままにしていること。
空のリポジトリは有効な結果です。その旨を伝えて次に進みます。
フェーズ 2: リサーチ(委任する)
Agentツール(subagent_type: "goal-researcher"、またはプラグインとしてインストールされている場合は"goal-miner:goal-researcher" — エージェントリストに表示されている方を使用)を使用して、goal-researcherサブエージェントを起動します。自己完結した指示を与えます:
- アイデアをそのまま
- フェーズ1からの既知の事実
- 最も重要な3〜6個の未知の事項
- 必要なもの: ドメインの慣行、関連するAPIとその制限、一般的な障害モード、および候補となる要件
そのエージェントタイプが利用できない場合は、general-purposeエージェントを使用します。.claude/agents/goal-researcher.mdの役割セクションを指示に貼り付け、「読み取り専用: ファイルの書き込み、インストール、コマンドの実行はしないでください」を追加します。
エージェントから返されたものはすべて候補として扱います。返されたものが決定であるとは限りません。次の目的で使用します:
- ユーザーに提供するオプションを明確にする
- URL付きの
[research]制約を追加する - Open risksセクションの種にする
質問をドラフトしている間にリサーチを実行させます。リサーチ結果は選択肢を変える可能性があるため、結果が返ってくるまではユーザーに何も尋ねないでください。
フェーズ 3: 質問(制限付き)
まずreference/question-bank.mdを読んでください。
制限:
- 最大3ラウンドのAskUserQuestion。
- 1ラウンドあたり最大4つの質問。
- すべての質問は選択式です。最初のオプションが推奨されるデフォルトで、「(推奨)」とマークします。
質問内容:
- 質問は間違った推測のコストが最も高い順に並べます。
- ラウンド全体で、以下をカバーします: 対象者、中核的な成果、非目標、ハードな制約、品質基準、成功の判断方法。すでに回答されているものはスキップし、回答の出典を示します。
- ラウンド2または3は、Tier-1またはTier-2の未知の事項が残っている場合にのみ使用します。重要な未解決事項がなくなったら、早期に終了します。
回答の記録:
- 「あなたが決めてください」、先送り、または回答がない場合 → 推奨されるデフォルトとその理由を記録した
A-nの仮定を記録します。 - ラウンドを使い切った場合、残っているすべての未知の事項は
A-nになります。4ラウンド目は尋ねないでください。
フェーズ 4: ドラフト、チェック、確認
templates/GOAL.template.mdを読んでください。それに従ってGOAL.mdを書きます:- すべてのセクションを埋め、テンプレートのコメントとプレースホルダーを削除します。
- 5〜15個の受け入れ基準を書きます。それぞれが
verified by:句を持つ単一の観測可能な結果です。 - プロジェクト自身のツール(例:
npm test、pytest -k …)を使用するコマンドとテストを優先します。チェックを自動化できない場合にのみmanual — <具体的な手順と確認すべきこと>を使用します。 - 15個を超える場合は、
### マイルストーン nの小見出しの下にグループ化し、ユーザーに伝えます。 - Verificationセクションには、すべての自動チェックを実行する1つのコマンドを保持します。そのコマンドがまだ存在しなくても構いません。それが最初のプロジェクト作業になります。
- ゲート:
bash ${CLAUDE_SKILL_DIR}/scripts/check_goal.sh GOAL.mdを実行します。すべてのFAILを修正し、終了コード0になるまで再実行します。WARN行があればユーザーに伝えます。これらの修正はあなた自身のものであり、ユーザーの修正としてカウントしません。 - ユーザーに完全な
GOAL.mdを表示します。次に、AskUserQuestionで尋ねます: 承認 (推奨) / 変更をリクエスト(「その他」から自由記述)。 - 1回の修正ラウンド。 ユーザーが変更を要求した場合:
- 適用し、ゲートを再実行し、変更内容を表示します。
- 再度尋ねます: 承認 / 承認、残りの懸念事項をOpen risksとして記録。
- 3回目のループを開始しないでください。未解決のものはすべてOpen risksに入れます。
- 承認されたら、Changelogに
- YYYY-MM-DD — Goal Miner(作成モード)で作成。ユーザー承認済み。(今日の日付)が含まれていることを確認します。 - 以下のCLAUDE.md統合を行います。
ストッピングルール。 以下のすべてが満たされた場合にのみ、作成は完了です:
check_goal.shが終了コード0で終了する。つまり、すべてのACがテスト可能であり、すべての仮定項目にA-nが付いている- 未解決の質問がない: 各質問に回答があるか、
A-nとして記録されている - ユーザーが承認している
モード: amend
GOAL.mdとCLAUDE.mdを読みます。要求された変更を一文で言い換えます。- 変更が曖昧な場合は、変更についてのみ1回のAskUserQuestionラウンド(最大4つの質問)を行います。変更によって新しいドメインやAPIが持ち込まれる場合にのみ再リサーチし、その場合も狭い範囲の
goal-researcher指示のみで行います。 - 影響を受けるセクションのみを編集します:
- ACの番号を決して振り直さないでください。 削除されたACは
- ~~AC-4~~ 削除済み: <理由> (YYYY-MM-DD)とマークし、元のテキストは取り消し線内に残します。 - 新しいACは、これまで使用された最大の番号の次の番号を取ります。
- 変更されたACはそのIDを保持します。テキストとソースタグを更新します。
- 影響を受けていないすべての行は、そのままにします。
- ACの番号を決して振り直さないでください。 削除されたACは
- 変更ログエントリを追加します:
- YYYY-MM-DD — 修正: <変更内容と理由>; 追加されたAC: …; 削除されたAC: …; 変更されたAC: … - ゲートを実行します。差分の短い要約を表示します。作成時と同じ1回の修正ルールで承認を得ます。
- CLAUDE.md統合を実行します。行がすでにあれば何も追加しません。
モード: verify
このモードはレポートのみです:** GOAL.md やその他のファイルを編集せず、チェックを通すためのコードも書かないでください。**
-
GOAL.mdを読み、ゲートを実行します。ゲートが失敗した場合は、それを最初に報告します。ゴールファイル自体が修正されるまで検証可能ではありません。 -
Verificationセクションのコマンドを実行します。コマンドが存在しない場合(Makefileターゲットがない、スクリプトがない)、その理由を記録してFAILとし、続行します。
-
アクティブな各ACについて:
verified by:コマンド → 実行します。verified by:テスト → プロジェクトのランナーでそのテストを実行します。verified by:manual → 何も実行せず、MANUALとマークし、人間が観測すべき手順を繰り返します。
インストール、削除、デプロイ、またはプロジェクト外のネットワークにアクセスするコマンドを実行する前に、最初に確認してください。
-
テーブルを報告します:
AC | ステータス (PASS / FAIL / MANUAL) | エビデンス (終了コード + 主要な出力行)。次に、1行の判定を下します: すべてのACがPASSの場合、またはMANUALでユーザーが確認した場合のみ完了。それ以外の場合は、未完了: N個失敗。
CLAUDE.md統合
正確な行:
タスクを開始する前にGOAL.mdを読んでください。受け入れチェックがすべてパスした場合のみ、作業は完了です。
- Grep(固定文字列)を使用して、その正確な行が
CLAUDE.mdにあるか確認します。すでにあれば何もしません。 CLAUDE.mdが存在し、その行が含まれていない場合は、空行の後にその行を末尾に追加します。Editを使用し、他のコンテンツには触れません。CLAUDE.mdが存在しない場合は、その行のみを含むファイルを作成します。