Claude Code の /goal 使い方: 条件達成まで自動で作業を続ける

Claude Code エンジニアリング 6分で読めます

「テストが全部通るまで直し続けて」と頼んでも、Claude は途中で区切りをつけて制御を返してくることがあります。Claude Code の /goal は、完了条件を1つ設定しておくと、各ターンの終わりに小型の高速モデルがその条件を満たしたかを判定し、まだなら Claude に次のターンを始めさせるコマンドです。毎回「続けて」と打たなくても、条件を満たすまで作業が進みます。

本記事は公式ドキュメント「Keep Claude working toward a goal」に基づき、/goal の使い方・条件の書き方・評価の仕組みを日本語で解説します。公式が挙げる向いている作業は、次のような検証できる終着点がある大きめの作業です。

/goal・/loop・Stop フックの違い

プロンプトとプロンプトの間も現在のセッションを動かし続ける方法は3つあります。選ぶ基準は「次のターンを何が始めるか」です。

方法次のターンが始まるとき止まるとき
/goal前のターンが終わったとき(対話セッションでは、アイドル時のチェックインや自動リトライの時刻が来たときも)モデルが条件の達成を確認したとき、達成不可能と判定したとき、利用者が直す必要のあるエラーでターンが失敗したとき、または /goal clear を実行したとき
/loop一定の時間間隔が経過したとき利用者が止めたとき、または Claude が作業完了と判断したとき
Stop フック前のターンが終わったとき自分で書いたスクリプトやプロンプトが判断したとき

/goal と Stop フックはどちらも毎ターンの終わりに動きます。違いはスコープで、/goal は条件を打ち込むだけで現在のセッションだけに効くショートカットです。Stop フックは設定ファイルに書くもので、そのスコープのすべてのセッションに適用され、決定的なチェックならスクリプト、モデルに判定させるならプロンプトを実行できます。

自動モード(auto mode)との関係も整理しておきます。自動モードは1ターンの中のツール呼び出しを承認しますが、新しいターンは始めません。Claude が「終わった」と判断した時点で止まります。/goal は作業しているモデルとは別の評価役を置き、完了かどうかを新しいモデルが判定する点が違います。公式は両者を補完関係と説明しており、自動モードはツールごとの確認を、/goal はターンごとの確認をなくします。

開いているセッションとは無関係に、夜間のテストや朝のトリアージを定期実行したい場合は、クラウドの Routines やデスクトップアプリのスケジュールタスクを使います(/loop とスケジュール実行の記事で比較しています)。

/goal の設定・状態確認・解除

1つのセッションで有効なゴールは1つだけです。同じ /goal コマンドが、引数によって設定・確認・解除を切り替えます。

ゴールを設定する

/goal の後ろに満たしたい条件を書きます。すでにゴールがある場合は新しいもので置き換わります。

/goal all tests in test/auth pass and the lint step is clean

設定するとその条件自体を指示としてすぐにターンが始まるので、別にプロンプトを送る必要はありません。ゴールが有効な間は ◎ /goal active という表示に経過時間が出ます。トランスクリプトには評価役が返した判定が毎回表示され、Ctrl+O でその理由を確認できます。

注意点として、ゴールは権限モードを変えません。手動(Manual)モードのままだと、許可されていないツール呼び出し(上の例ならテストコマンド)のたびに確認が入ります。無人でターンを回したい場合は、自動モードで /goal を実行します。

状態を確認する

引数なしで /goal を実行すると現在の状態が表示されます。

/goal

ゴールが有効なら、条件・経過時間・評価済みのターン数・現在のトークン消費量・評価役の直近の理由が出ます(ターン数と理由は最初の評価が終わってから表示されます)。有効なゴールが無くても、そのセッションで以前に達成したゴールがあれば、その条件と所要時間・ターン数・トークン消費量が表示されます。

ゴールを解除する

達成前にゴールを取り消すには /goal clear を実行します。

/goal clear

解除すると Goal cleared: に続けて条件が表示され、何も設定されていなければ No goal set と表示されます。clear の代わりに stop・off・reset・none・cancel も使えます。/clear で新しい会話を始めた場合も、有効なゴールは消えます。

セッションの再開と非対話実行

ゴールが有効なまま終わったセッションを再開すると、ゴールも復元されます。--continue、セッション ID・名前・トランスクリプトのパスを指定した --resume、セッションピッカーのどの経路でも同じです(v2.1.239 より前は claude --resume のピッカーだけ復元されませんでした)。条件は引き継がれますが、ターン数・タイマー・トークン消費の起点はリセットされます。達成済み・解除済みのゴールは復元されません。

/goal は非対話モード(-p)、デスクトップアプリ、Remote Control でも使えます。-p で設定すると、1回の呼び出しの中で条件を満たすまでループが回ります。

claude -p "/goal CHANGELOG.md has an entry for every PR merged this week"

既定のテキスト出力では終わるまで何も表示されず、止まっているように見えることがあります。途中経過を見たいときは --output-format stream-json --verbose を付けます。途中で止めるには Ctrl+C でプロセスを中断します。

効果的な完了条件の書き方

評価役のモデルは、Claude が会話の中に出した内容だけを見て条件を判定します。自分でコマンドを実行したりファイルを読んだりはしません。そのため条件は「Claude 自身の出力で示せること」として書く必要があります。「test/auth のテストがすべて通る」がうまく働くのは、Claude がテストを実行し、その結果がトランスクリプトに残って評価役が読めるからです。

何ターンにもわたって機能する条件には、たいてい次の3つが入っています。

条件は最大 4,000 文字まで書けます。実行時間に上限を付けたい場合は、or stop after 20 turns のようにターン数や時間の条件を含めます。Claude が毎ターンその条件に対する進み具合を報告し、評価役は会話からそれを判定します。

たとえば上の3要素を組み合わせると、次のような書き方になります(公式の例を組み合わせたものです)。

/goal all tests in test/auth pass (npm test exits 0), no other test file is modified, or stop after 20 turns

評価の仕組みとエラー時の挙動

/goal の実体は、セッション単位のプロンプト型 Stop フックのラッパーです。Claude がターンを終えるたびに、Claude Code は条件とそれまでの会話を、設定されている小型高速モデル(Claude API では既定で Haiku。サードパーティのプロバイダーでは各プロバイダーの既定)に送ります。モデルは短い理由付きで次の3つのどれかを返します。

判定その後の動き
未達成(Not yet met)Claude は作業を続け、理由を次のターンの手がかりにする
達成(Met)ゴールが解除され、トランスクリプトに達成の記録が残る
不可能(Impossible)条件は満たせないと判定。ゴールが解除され、理由とともに失敗の記録が残る(自分で解除する必要はない)

Claude が評価役に応答するだけで進まない状態(数ターン続けてツールを使わない)になると、Claude Code はループを止めて警告を出し、ゴールを設定したまま制御を利用者に返します。次にプロンプトを送ると評価が再開します。

ターンが失敗したとき

利用者が直さない限り解消しないエラーでターンが失敗すると、ゴールは解除され、Goal cleared after an unrecoverable error で始まり Run /goal again to continue で終わる警告が出ます。対象は次の4種類です。原因を直してから /goal <condition> で設定し直します。

それ以外のエラーではゴールは残ります。v2.1.269 以降の対話セッションでは原因を示す行が表示され、サーバーの過負荷や接続切れのように自然に解消しやすいものは Goal still active の通知とともに自動でリトライします(3回リトライすると一時停止に切り替わります)。API のレート制限、claude.ai の利用上限、フックによるターン終了のようにリトライしても繰り返すだけのものは Goal paused の通知で一時停止します。いつでもメッセージを送れば次のターンがすぐ始まります。

バックグラウンド作業があるとき

ターンの終わりにサブエージェントやバックグラウンドのシェルコマンドがまだ動いていると、そのターンの評価は飛ばされ、バックグラウンド作業の無い状態で終わった次のターンで評価されます。バックグラウンド作業が終わると、その結果が新しいターンとして Claude に渡されるので、プロンプトを送る必要はありません。

バックグラウンド作業で 30 分待たされるとチェックインが入り、Claude に実行中タスクの出力を読ませ、進んでいれば待ち続け、詰まっていれば直すか止めるよう促します。以降の間隔は倍々に延び、最初の間隔の4倍が上限です(既定では最初のチェックインの1時間後、その後は2時間ごと)。対話セッションではアイドル中でも自分からターンを始めてチェックインしますが、利用者のプロンプトの間に始めるアイドル時チェックインはゴールごとに最大3回です。チェックインは v2.1.234 以降、アイドル時チェックインは v2.1.236 以降で動きます。

最初の間隔は環境変数 CLAUDE_CODE_GOAL_CHECKIN_MINUTES で変えられ、以降の間隔もそれに合わせて伸縮します。0 にするとチェックインと自動リトライの両方がオフになります。

利用要件と評価モデルの変更

使えない場合

評価役はフックの仕組みの一部なので、/goal は設定ファイル内のフックと同じワークスペースの信頼ルールのもとで使えるようになります。また、設定の優先順位を適用した結果 disableAllHooks が true の場合や、管理設定で allowManagedHooksOnly が設定されている場合は使えません。いずれの場合も、黙って何もしないのではなく、コマンドが理由を表示します。

評価モデルとコスト

評価に別のモデルを使いたい場合は、環境変数 ANTHROPIC_DEFAULT_HAIKU_MODEL を設定します。ただしこの変数は /goal の評価だけでなく、小型高速モデルを使うすべての箇所で読まれます。設定すると haiku エイリアスもそのモデルを指すようになり、会話の要約などのバックグラウンド処理もそのモデルで動く点に注意してください。

評価役はセッションに設定されたプロバイダー上で動き、ツールは呼び出しません。評価のトークンはそのプロバイダーの小型高速モデルの料金で課金されますが、公式によればメインのターンの消費に比べて通常はごくわずかです。

関連記事: フックで操作を自動化する / 権限モードの選び方

本記事は Anthropic 公式ドキュメント「Keep Claude working toward a goal」に基づく非公式の日本語解説です(確認日 2026-09-30)。日本語版ドキュメントとコマンド一覧(Commands)の /goal の項とも照合しています。仕様は更新される場合があるため、利用前に公式ドキュメントをご確認ください。