AIに自分でプロンプトを出させる「自走ループ」セットアップ
毎回ゼロからプロンプトを打つのをやめ、次に何をやるかをAI自身に決めさせて回す仕組みを、自分のClaude Codeに入れるためのページです。 下の「貼るだけ」プロンプトをClaude Codeに一度貼れば、Claude自身が必要なファイル一式(記憶・役割・ループ)を作り、最初の1周まで回します。 背景と考え方の解説は自走ループとはを参照してください。
先に、適用範囲をはっきりさせる
この仕組みが効くのは、コーディングのように結果を機械で検証できる作業です。 Anthropic の Claude Code 責任者が「自分はもうプロンプトを打たず、Claudeにプロンプトを出させるループを書く」と語ったのが元になっていますが、これは本人の開発ワークフローの話で、汎用チャットの話ではありません。
成立する条件は三つあります。
- 検証できること:テスト実行・ビルド・アプリ起動で、出来を機械が判定できる。
- 着手の安全なこと:最初の一手が下書き・提案・小さな修正で、いきなり壊さない。
- 歯止めがあること:反復回数とコストに上限を置き、暴走を止められる。
「3か月使ってる人の9割が損してる」式の煽りは無視してよいです。 合う作業に絞って入れるのが正解です。
そのままClaudeに貼るだけ(一括セットアップ)
次のプロンプトを丸ごとコピーし、対象プロジェクトで開いた Claude Code に一度貼り付けてください。 Claude が記憶ファイル・役割エージェント・ループ本体を作り、ゴールと検証コマンドを1問だけ確認したうえで、最初の1周を回します。 右上の「コピー」を押せば全文がクリップボードに入ります。
あなたはこのリポジトリに「自走ループ」を構築するセットアップ担当です。
次の4ファイルを作成し、最後に使い方を説明してください。各ファイルの中身は ━━━ で区切ってあります。
最初に私へ1問だけ確認してください(未回答なら例の値のまま進める):
・このループのゴールを1文で
・完了を機械で確かめる検証コマンド(テスト / ビルド / 起動確認)
━━━ ファイル1: CLAUDE.md(プロジェクト直下)━━━
# プロジェクトの前提
## 何を作っているか
(1〜2行。例:FastAPIの社内APIサーバー)
## 守ること
- 既存のコードスタイルに合わせる。勝手なリファクタはしない
- 変更は最小限。関係ないファイルに触れない
- 破壊的操作(削除・DROP・force push)は禁止
## 検証コマンド(ループの合否判定に使う)
- テスト: 例) pytest -q
- 起動確認: 例) uvicorn app.main:app --port 8999 & の後に curl -sf localhost:8999/health
## 触ってはいけない場所
- app/secrets/ 、.env 、本番設定
━━━ ファイル2: .claude/agents/planner.md ━━━
---
name: planner
description: ゴールに対して次にやる小さな独立タスクを決める係
tools: ["Read", "Grep", "Glob", "Bash(git log:*)", "Bash(git diff:*)", "Bash(ls:*)"]
model: opus
---
あなたはプランナーです。コードは書きません。
リポジトリの現状を調べ、ゴールに対して「次に着手すべき、互いに独立した小さなタスク」を最大3件選びます。
各タスクには、完了を機械で確かめる検証コマンドを必ず付けます。
すでにゴールが満たされているなら done を true にします。
━━━ ファイル3: .claude/agents/worker.md ━━━
---
name: worker
description: 1つのタスクを実装し、自分で検証してから終える係
tools: ["Read", "Edit", "Write", "Bash"]
model: sonnet
---
あなたは実装者です。渡された1タスクだけを実装します。
実装後、指定された検証コマンドを必ず実行し、失敗したら直してから終わります。
スコープ外のファイルには触りません。検証が通らないまま完了と言いません。
━━━ ファイル4: loop.sh(リポジトリ直下)━━━
#!/usr/bin/env bash
set -euo pipefail
GOAL="${1:?usage: loop.sh \"<ゴールを1文で>\"}"
MAX_ITERS="${MAX_ITERS:-8}"
BUDGET="${BUDGET:-5}"
SCHEMA='{"type":"object","properties":{"done":{"type":"boolean"},"tasks":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"prompt":{"type":"string"},"verify":{"type":"string"}},"required":["title","prompt","verify"]}}},"required":["done","tasks"]}'
for ((i=1; i<=MAX_ITERS; i++)); do
echo "---- iteration $i / $MAX_ITERS ----"
envelope=$(claude -p "ゴール: $GOAL。現状を調べ、次に着手すべき独立タスクを最大3件JSONで出せ。全部終わっていれば done:true。" --agent planner --output-format json --json-schema "$SCHEMA" --max-budget-usd "$BUDGET")
plan=$(echo "$envelope" | jq -r '.result')
[ "$(echo "$plan" | jq -r '.done')" = "true" ] && { echo "完了"; break; }
echo "$plan" | jq -c '.tasks[]' | while read -r t; do
prompt=$(echo "$t" | jq -r '.prompt'); verify=$(echo "$t" | jq -r '.verify')
echo "= $(echo "$t" | jq -r '.title')"
claude -p "次のタスクを実装せよ: $prompt 。完了後、必ずこれを実行して確認し失敗なら直せ: $verify" --agent worker --permission-mode acceptEdits --max-budget-usd "$BUDGET"
done
done
━━━ 最後に ━━━
作成した4ファイルを一覧で報告し、chmod +x loop.sh を実行してください。
そのうえで最初の1イテレーションだけを私の確認を取ってから回し、結果を見せてください。
いきなり全自動で回し続けないこと。コスト上限(--max-budget-usd)と反復上限(MAX_ITERS)は残したままにすること。
使うのはこの1回の貼り付けだけです。
この一括プロンプトは何をするか
貼り付けると、Claudeはこの文章を「指示+埋め込みファイル本体」として読み、対象プロジェクトに次の3種類を作ります。
- 記憶:
CLAUDE.md。作っているもの・守ること・検証コマンド・触らない場所を固定し、毎回の説明をなくす。 - 役割:
.claude/agents/planner.md(次の仕事を決める係)とworker.md(実装して自己検証する係)。toolsで権限を分け、plannerは読むだけ、workerだけ編集できる。 - ループ:
loop.sh。plannerに次タスクをJSONで出させ、workerに実装と検証をさせ、終わるか上限に達するまで繰り返す。
作成後、Claudeはゴールと検証コマンドを1問だけ確認し、最初の1周だけをあなたの確認付きで回します。
いきなり全自動では走りません。
本文中の ━━━ はファイルの区切り記号で、Claudeへの指示の一部です。消さずにそのまま貼ってください。
動かすのに必要なもの
- Claude Code 2.x(
claude --versionで確認) jq(loop.shがJSON処理に使う)- git管理下のプロジェクト
1周目のあと、回し続けるには
セットアップが済んだら、あとはあなたが回します。
./loop.sh "ゴールを1文で" で起動します。
反復上限 MAX_ITERS とコスト上限 BUDGET(1呼び出しのUSD上限)で歯止めをかけられます(例:MAX_ITERS=3 BUDGET=2 ./loop.sh "...")。
止めたいときは Ctrl-C。コスト上限に達した場合も自動で止まります。
仕組みと内訳(手で組む・調整する人向け)
上の一括プロンプトが作る中身を、ファイルごとに説明します。 自分の用途に合わせて手で組みたい・改造したい人はここを読んでください。
手順1:記憶を固定する(CLAUDE.md)
プロジェクト直下に CLAUDE.md を置きます。
ここに書いた前提は毎セッション自動で読まれるので、ループの各エージェントが同じ常識を共有します。
# プロジェクトの前提
## 何を作っているか
(1〜2行。例:FastAPIの社内APIサーバー)
## 守ること
- 既存のコードスタイルに合わせる。勝手なリファクタはしない
- 変更は最小限。関係ないファイルに触れない
- 破壊的操作(削除・DROP・force push)は禁止
## 検証コマンド(重要:ループの合否判定に使う)
- テスト: `pytest -q`
- 型: `mypy app/`
- 起動確認: `uvicorn app.main:app --port 8999 &` の後 `curl -sf localhost:8999/health`
## 触ってはいけない場所
- `app/secrets/`、`.env`、本番設定
「検証コマンド」を具体的に書くのが肝心です。 ここが曖昧だと、AIは「できたつもり」で先に進みます。
手順2:役割を分ける(サブエージェント)
.claude/agents/ に役割ごとのファイルを置きます。
frontmatter の tools で各役に渡す権限を絞ります(plannerは読むだけ、workerだけ書ける)。
.claude/agents/planner.md
---
name: planner
description: ゴールに対して次にやる小さな独立タスクを決める係
tools: ["Read", "Grep", "Glob", "Bash(git log:*)", "Bash(git diff:*)", "Bash(ls:*)"]
model: opus
---
あなたはプランナーです。コードは書きません。
リポジトリの現状を調べ、ゴールに対して「次に着手すべき、互いに独立した小さなタスク」を最大3件選びます。
各タスクには、完了を機械で確かめるための検証コマンドを必ず付けます。
すでにゴールが満たされているなら done を true にします。
.claude/agents/worker.md
---
name: worker
description: 1つのタスクを実装し、自分で検証してから終える係
tools: ["Read", "Edit", "Write", "Bash"]
model: sonnet
---
あなたは実装者です。渡された1タスクだけを実装します。
実装後、指定された検証コマンドを必ず実行し、失敗したら直してから終わります。
スコープ外のファイルには触りません。検証が通らないまま完了と言いません。
手順3:回す(ループ・ランナー)
plannerに次タスク群をJSONで出させ、1件ずつworkerに渡して検証まで回すスクリプトです。
done:true が返るか、上限回数に達したら止まります。
フラグはすべて Claude Code 2.x で動作確認済みのものです。
#!/usr/bin/env bash
set -euo pipefail
GOAL="${1:?usage: loop.sh \"<ゴールを1文で>\"}"
MAX_ITERS="${MAX_ITERS:-8}" # 反復上限(暴走止め)
BUDGET="${BUDGET:-5}" # 1呼び出しのコスト上限(USD)
# plannerの出力を縛るJSONスキーマ
SCHEMA='{"type":"object","properties":{
"done":{"type":"boolean"},
"tasks":{"type":"array","items":{"type":"object","properties":{
"title":{"type":"string"},
"prompt":{"type":"string"},
"verify":{"type":"string"}
},"required":["title","prompt","verify"]}}
},"required":["done","tasks"]}'
for ((i=1; i<=MAX_ITERS; i++)); do
echo "──── iteration $i / $MAX_ITERS ────"
# 1) 次にやることをAIに決めさせる(読むだけ・構造化出力)
envelope=$(claude -p "ゴール: $GOAL
現状を調べ、次に着手すべき独立タスクを最大3件、JSONで出せ。全部終わっていれば done:true。" \
--agent planner \
--output-format json \
--json-schema "$SCHEMA" \
--max-budget-usd "$BUDGET")
plan=$(echo "$envelope" | jq -r '.result') # .result に本文が入る
if [ "$(echo "$plan" | jq -r '.done')" = "true" ]; then
echo "ゴール達成。終了。"; break
fi
# 2) タスクを1件ずつ実装+検証させる
echo "$plan" | jq -c '.tasks[]' | while read -r t; do
title=$(echo "$t" | jq -r '.title')
prompt=$(echo "$t" | jq -r '.prompt')
verify=$(echo "$t" | jq -r '.verify')
echo "▶ $title"
claude -p "次のタスクを実装せよ:
$prompt
完了後、必ずこれを実行して結果を確認し、失敗なら直してから終えよ:
$verify" \
--agent worker \
--permission-mode acceptEdits \
--max-budget-usd "$BUDGET"
done
done
使い方は1行です。
chmod +x loop.sh
./loop.sh "認証まわりのテストカバレッジを80%まで上げる"
「何をやるか」を考えているのは、あなたではなくplannerです。 あなたが書くのはゴール1文と、このループだけになります。
手順4:歯止め(暴走とコストを止める)
ループは放っておくと走り続け、課金も伸びます。 三重に止めます。
- 反復上限:ランナーの
MAX_ITERS。 - コスト上限:各呼び出しの
--max-budget-usd(-p実行でのみ有効)。超えると停止します。 - 権限の壁:危険操作を
~/.claude/settings.jsonのPreToolUseフックで拒否する。終了コード2を返すとそのツール実行がブロックされます。
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{ "type": "command",
"command": "grep -qiE 'rm -rf|git push --force|drop table' <<< \"$CLAUDE_TOOL_INPUT\" && exit 2 || exit 0" }
]
}
]
}
}
worker に渡す権限も、--permission-mode acceptEdits(編集は自動・それ以外は確認)から始め、信頼できてから dontAsk や bypassPermissions に広げます。
いきなり --dangerously-skip-permissions を使わないことです。
コピペ用:指示プロンプト集
スクリプトを使わず、対話セッションの中で同じ動きを試したいときの指示文です。
プランナーに次を決めさせる
あなたはプランナーです。コードは書かないでください。
ゴール:「__ここにゴール__」
リポジトリの現状を調べ、次に着手すべき独立した小さなタスクを最大3件、
各タスクに「検証コマンド」を付けて挙げてください。
すでにゴールが満たされているなら「完了」とだけ答えてください。
ワーカーに実装+自己検証させる
次のタスクだけを実装してください(スコープ外は触らない):
__タスク__
実装が終わったら、必ず次を実行して結果を貼り、失敗していれば直してから完了と言ってください:
__検証コマンド__
1往復を自走させる(ミニループ)
これから「現状調査 → 次の1タスク決定 → 実装 → 検証」を1サイクル回してください。
検証が通ったら、次のサイクルに進んでよいか私に1行で確認してください。
コストと安全のため、1サイクルにつき変更は1つの論点に絞ってください。
まとめ
自走ループの本体は、賢い1個のプロンプトではなく、「決める・作る・確かめる」を分けて回す仕組みです。 記憶(CLAUDE.md)で前提を固定し、サブエージェントで役割を分け、ランナーで回し、上限とフックで止める。 合う作業に絞って入れれば、あなたの仕事は「ゴールを1文で書くこと」と「ループを直すこと」に変わります。