
/goal コマンドとループエンジニアリングの関係を整理する
/goal コマンドは、完了条件を渡すとそれを満たすまで自律実行を続ける組み込みコマンドです。Claude Code と Codex の両方に実装されていますが、内部仕様には違いがあります。この記事では、最近注目を集めている「ループエンジニアリング」の全体像の中で /goal がどこに位置するのかを整理しつつ、両ツールの実装差異や使いこなしのコツを解説します。
ループエンジニアリングとは
エージェントの作業は、本質的に同じサイクルを回し続けることで成り立っています。エージェントに作業をさせて結果を得る、その結果をもとに次の一手を決めて指示する、これをタスクが完了するまで繰り返す——従来はこの「次の一手を決める」ステップを毎回人間が担っていたため、人間がボトルネックになっていました。
ループエンジニアリングは、この人間が担っていたステップをシステムに肩代わりさせ、停止条件を満たすまで自動で回し続ける設計手法です。Google の Addy Osmani 氏が 2026 年 6 月に公開した記事(Loop Engineering)で体系的に整理され、広く知られるようになりました。
ここで重要なのは、/goal を使えばループエンジニアリングができている、というわけではないということです。/goal はあくまでループエンジニアリング全体を構成する要素の一部にすぎません。
ループの 5 つの構成要素
Osmani 氏の記事によれば、ループは以下の 5 つの構成要素で成り立っています。
1. Automation(自動化)
記事の中で「ループの心臓」と表現されている要素です。人の介入なしに作業が始まり、止まらずに回り続ける仕組みを指します。
前半の「人のトリガーなしに作業が始まる」部分は、Claude Code であれば /loop コマンド、Codex であればデスクトップアプリの自動タスク実行機能、リモート実行であれば GitHub Actions などが対応します。後半の「止まらず回り続ける仕組み」が、まさに /goal コマンドの役割です。
つまり、ループエンジニアリングにおける /goal の位置付けは、5 つの構成要素のうち「Automation」の一部を担う存在ということになります。
2. Worktree(並行作業)
git worktree のような技術を使い、複数のエージェントが互いのファイルを壊さないよう隔離された環境で並行作業を行うための仕組みです。
3. Skills(スキル)
プロンプト知識を SKILL.md として体系化し、エージェントが毎回一定の品質で作業できるようにする仕組みです。
4. Plugin / Connector(外部ツール接続)
MCP(Model Context Protocol)を使って外部ツールに接続し、ループが現実の道具を操作できるようにする要素です。
5. Sub-agent(サブエージェント)
AI は自分の成果物に対して甘い評価を下しがちです。作成役と検証役をサブエージェントで分離することで、より精度の高い評価が可能になります。
Claude Code の /goal はこの要素とも若干関係しており、後述するとおり完了判定にサブエージェント(Haiku)を使う設計になっています。
Claude Code と Codex の /goal の違い
どちらも /goal <完了条件> と入力するだけで使い始められますが、内部の仕組みにはいくつかの違いがあります。
Claude Code の /goal
Claude Code の /goal は、内部的にはセッションスコープの Stop hook として実装されています(v2.1.139 以降で利用可能)。
ターンが終わるたびに、完了条件と会話内容が__別モデルのサブエージェント__に送られ、条件を満たしたかどうかが評価されます。この評価モデルはデフォルトで Haiku が使われます。Haiku は Sonnet や Opus と比べてコストが大幅に低いため、毎ターン発火しても費用面の負担は小さく抑えられます。
ここが興味深いポイントで、本当にレベルの高い評価をさせたいなら Opus を使うという選択肢もありそうですが、実際にはコストと速度のバランスから Haiku が選ばれています。
Codex の /goal
一方、Codex の /goal は__同一のコーディングモデルがセルフチェックする__形をとっており、サブエージェントは使いません。
内部的には SQLite を使ってゴールの状態(目標テキスト・ステータス・トークン消費量など)を永続化しています。そのため、セッションを一度閉じて再開しても、設定したゴールが維持されます。/goal pause や /goal resume でゴールの一時停止・再開も可能です。
比較まとめ
| 項目 | Claude Code | Codex |
|---|---|---|
| 完了判定 | サブエージェント(Haiku) | 同一モデルのセルフチェック |
| 内部実装 | セッションスコープの Stop hook | SQLite による状態永続化 |
| セッション永続性 | セッション内のみ | セッションをまたいで維持可能 |
| 一時停止・再開 | /goal clear で解除 | /goal pause / /goal resume |
/goal と /loop は別物
Claude Code には /loop というコマンドもありますが、/goal とは役割が異なります。
/goal はタスク完了時に「条件を満たしたか」をチェックし、満たしていなければ再実行するためのコマンドです。一方 /loop は時間駆動で定期的にタスクを起動するコマンドで、cron のような役割を持ちます。
前述の 5 つの構成要素に当てはめると、/goal は Automation の「止まらず回り続ける」部分、/loop は「人のトリガーなしに作業が始まる」部分をそれぞれ担当しています。
/goal をうまく使うコツ
機械が検証できる停止条件を設計する
/goal を効果的に使うには、よい停止条件を設計することが最も重要です。具体的には、リンターやテストスイートのように機械的に合否を判定できるものが適しています。
Claude Code は Haiku によるサブエージェント評価、Codex はセルフチェックという形をとっていますが、いずれも LLM-as-Judge 的なアプローチです。「見た目がきれいになるまで」のような主観的な条件では、期待したレベルの判定が得られないことが多いです。
たとえば、ゲーム開発で「いい見た目を作ってください」というゴールを設定して実行したところ、機械的に検証できない条件だったためにうまくいかなかった——という経験もあります。
よい停止条件の例としては、以下のようなものが挙げられます。
test/auth配下の全テストがパスし、lint がクリーンであること- すべての呼び出し元が新しい API に移行されていること
- 各モジュールが指定行数以下に収まっていること
トークン上限を設定する
トークン上限を設定しないと、ループが延々と回り続けてトークンを大量消費する事故が起きます。ゴール設定時にトークンバジェットを明示するか、組織のポリシーとして上限を設けておくことを推奨します。
権限周りに注意する
/goal は自律実行が前提のため、エージェントに許可する操作範囲を事前に適切に設定しておくことが重要です。Claude Code の場合はワークスペースの信頼ダイアログを通過している必要があり、Codex の場合は --approval-mode の設定が関わってきます。
ループ化は意外と難しい
正直なところ、日常業務でループ化できるタスクを見つけるのはなかなか難しいというのが現時点での実感です。R&D やリサーチのような探索的な業務ではまだ活かしにくく、使いどころが限られるコマンドではあります。
たとえば、「Slack に連絡が来たらそれを拾って自動で対応する」ような自動化を実現したいと思っても、結局レビューを挟まないと怖いという判断になり、完全な自律ループには至らないケースが多いです。
逆に、テストスイートが充実したコードベースでのリファクタリングや、明確な完了基準がある定型作業は /goal と相性が良さそうです。うまく活用できた実例があれば、ぜひ共有していただけると嬉しいです。
まとめ
ループエンジニアリングは、プロンプトを毎回手で打つのではなく、停止条件を設計してシステムに自律的にタスクを回させるという、エージェント活用の新しいパラダイムです。
/goal はそのループの「止まらず回り続ける」部分を実現するコマンドですが、ループエンジニアリング全体のうちの一部にすぎません。Worktree・Skills・MCP・Sub-agent といった他の構成要素と組み合わせることで、初めて本格的なループが構築できます。
また、Claude Code と Codex では完了判定の仕組みが異なります。Claude Code はサブエージェント(Haiku)による独立評価、Codex は同一モデルによるセルフチェックです。どちらを使う場合でも、「機械が検証できる停止条件を設計する」ことが /goal を使いこなす鍵になります。
KDDIアイレットでは、Claude Code をはじめとする AI 駆動開発ツールの活用を社内で推進しています。AI 駆動開発に関するご相談は、お気軽に KDDIアイレットへお問い合わせください!
