- 11 sessions from basic agent loop to autonomous teams - Python MVP implementations for each session - Mental-model-first docs in en/zh/ja - Interactive web platform with step-through visualizations - Incremental architecture: each session adds one mechanism
7.6 KiB
Learn Claude Code -- AI Agent をゼロから構築する
THE AGENT PATTERN
=================
User --> messages[] --> LLM --> response
|
stop_reason == "tool_use"?
/ \
yes no
| |
execute tools return text
append results
loop back -----------------> messages[]
これだけだ。すべての AI コーディングエージェントはこのループ。
他はすべて改良に過ぎない。
11 の段階的セッション、シンプルなループから完全な自律チームまで。 各セッションは1つのメカニズムを追加する。各メカニズムには1つのモットーがある。
s01 "Bash があれば十分" — 1つのツール + 1つのループ = エージェント
s02 "ループは変わらない" — ツール追加はハンドラー追加であり、ロジック追加ではない
s03 "行動する前に計画せよ" — 可視化された計画がタスク完了率を向上させる
s04 "プロセス分離 = コンテキスト分離" — サブエージェントごとに新しい messages[]
s05 "必要な時にロード、事前にではなく" — system prompt ではなく tool_result で知識を注入
s06 "戦略的忘却" — 古いコンテキストを忘れて無限セッションを実現
s07 "状態は圧縮を生き延びる" — ファイルベースの状態はコンテキスト圧縮に耐える
s08 "撃ちっ放し" — ノンブロッキングスレッド + 通知キュー
s09 "追記で送信、排出で読取" — 永続チームメイトのための非同期メールボックス
s10 "同じ request_id、2つのプロトコル" — 1つの FSM パターンでシャットダウン + プラン承認
s11 "ポーリング、クレーム、作業、繰り返し" — コーディネーター不要、エージェントが自己組織化
コアパターン
def agent_loop(messages):
while True:
response = client.messages.create(
model=MODEL, system=SYSTEM,
messages=messages, tools=TOOLS,
)
messages.append({"role": "assistant",
"content": response.content})
if response.stop_reason != "tool_use":
return
results = []
for block in response.content:
if block.type == "tool_use":
output = TOOL_HANDLERS[block.name](**block.input)
results.append({
"type": "tool_result",
"tool_use_id": block.id,
"content": output,
})
messages.append({"role": "user", "content": results})
各セッションはこのループの上に1つのメカニズムを重ねる -- ループ自体は変わらない。
クイックスタート
git clone https://github.com/shareAI-lab/learn-claude-code
cd learn-claude-code
pip install -r requirements.txt
cp .env.example .env # .env を編集して ANTHROPIC_API_KEY を入力
python agents/s01_agent_loop.py # ここから開始
python agents/s11_autonomous_agents.py # 完全自律チーム
Web プラットフォーム
インタラクティブな可視化、ステップスルーアニメーション、ソースビューア、各セッションのドキュメント。
cd web && npm install && npm run dev # http://localhost:3000
学習パス
フェーズ1: ループ フェーズ2: 計画と知識
================== ==============================
s01 エージェントループ [1] s03 TodoWrite [5]
while + stop_reason TodoManager + nag リマインダー
| |
+-> s02 ツール [4] s04 サブエージェント [5]
dispatch map: name->handler 子ごとに新しい messages[]
|
s05 Skills [5]
SKILL.md を tool_result で注入
|
s06 Compact [5]
3層コンテキスト圧縮
フェーズ3: 永続化 フェーズ4: チーム
================== =====================
s07 タスクシステム [8] s09 エージェントチーム [9]
ファイルベース CRUD + 依存グラフ チームメイト + JSONL メールボックス
| |
s08 バックグラウンドタスク [6] s10 チームプロトコル [12]
デーモンスレッド + 通知キュー シャットダウン + プラン承認 FSM
|
s11 自律エージェント [14]
アイドルサイクル + 自動クレーム
[N] = ツール数
プロジェクト構成
learn-claude-code/
|
|-- agents/ # Python リファレンス実装 (s01-s11 + 完全版)
|-- docs/{en,zh,ja}/ # メンタルモデル優先のドキュメント (3言語)
|-- web/ # インタラクティブ学習プラットフォーム (Next.js)
|-- skills/ # s05 の Skill ファイル
+-- .github/workflows/ci.yml # CI: 型チェック + ビルド
ドキュメント
メンタルモデル優先: 問題、解決策、ASCII図、最小限のコード。 English | 中文 | 日本語
| セッション | トピック | モットー |
|---|---|---|
| s01 | エージェントループ | Bash があれば十分 |
| s02 | ツール | ループは変わらない |
| s03 | TodoWrite | 行動する前に計画せよ |
| s04 | サブエージェント | プロセス分離 = コンテキスト分離 |
| s05 | Skills | 必要な時にロード、事前にではなく |
| s06 | Compact | 戦略的忘却 |
| s07 | タスクシステム | 状態は圧縮を生き延びる |
| s08 | バックグラウンドタスク | 撃ちっ放し |
| s09 | エージェントチーム | 追記で送信、排出で読取 |
| s10 | チームプロトコル | 同じ request_id、2つのプロトコル |
| s11 | 自律エージェント | ポーリング、クレーム、作業、繰り返し |
ライセンス
MIT
モデルがエージェントだ。私たちの仕事はツールを渡して、邪魔をしないこと。