THE AGENT PATTERN ================= User --> messages[] --> LLM --> response | stop_reason == "tool_use"? / \ yes no | | execute tools return text append results loop back -----------------> messages[] これは最小ループだ。すべての AI コーディングエージェントに必要な土台になる。 本番のエージェントには、ポリシー・権限・ライフサイクル層が追加される。
12 の段階的セッション、シンプルなループから分離された自律実行まで。 各セッションは1つのメカニズムを追加する。各メカニズムには1つのモットーがある。
s01 "One loop & Bash is all you need" — 1つのツール + 1つのループ = エージェント
s02 "ツールを足すなら、ハンドラーを1つ足すだけ" — ループは変わらない。新ツールは dispatch map に登録するだけ
s03 "計画のないエージェントは行き当たりばったり" — まずステップを書き出し、それから実行
s04 "大きなタスクを分割し、各サブタスクにクリーンなコンテキストを" — サブエージェントは独立した messages[] を使い、メイン会話を汚さない
s05 "必要な知識を、必要な時に読み込む" — system prompt ではなく tool_result で注入
s06 "コンテキストはいつか溢れる、空ける手段が要る" — 3層圧縮で無限セッションを実現
s07 "大きな目標を小タスクに分解し、順序付けし、ディスクに記録する" — ファイルベースのタスクグラフ、マルチエージェント協調の基盤
s08 "遅い操作はバックグラウンドへ、エージェントは次を考え続ける" — デーモンスレッドがコマンド実行、完了後に通知を注入
s09 "一人で終わらないなら、チームメイトに任せる" — 永続チームメイト + 非同期メールボックス
s10 "チームメイト間には統一の通信ルールが必要" — 1つの request-response パターンが全交渉を駆動
s11 "チームメイトが自らボードを見て、仕事を取る" — リーダーが逐一割り振る必要はない
s12 "各自のディレクトリで作業し、互いに干渉しない" — タスクは目標を管理、worktree はディレクトリを管理、IDで紐付け
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つのメカニズムを重ねる -- ループ自体は変わらない。
このリポジトリは、nano Claude Code-like agent を 0->1 で構築・学習するための教材プロジェクトです。 学習を優先するため、以下の本番メカニズムは意図的に簡略化または省略しています。
このリポジトリの JSONL メールボックス方式は教材用の実装であり、特定の本番内部実装を主張するものではありません。
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/s12_worktree_task_isolation.py # 全セッションの到達点
python agents/s_full.py # 総括: 全メカニズム統合
インタラクティブな可視化、ステップスルーアニメーション、ソースビューア、各セッションのドキュメント。
cd web && npm install && npm run dev # http://localhost:3000
フェーズ1: ループ フェーズ2: 計画と知識 ================== ============================== s01 エージェントループ [1] s03 TodoWrite [5] while + stop_reason TodoManager + nag リマインダー | | +-> s02 Tool Use [4] s04 サブエージェント [5] dispatch map: name->handler 子ごとに新しい messages[] | s05 Skills [5] SKILL.md を tool_result で注入 | s06 Context Compact [5] 3層コンテキスト圧縮 フェーズ3: 永続化 フェーズ4: チーム ================== ===================== s07 タスクシステム [8] s09 エージェントチーム [9] ファイルベース CRUD + 依存グラフ チームメイト + JSONL メールボックス | | s08 バックグラウンドタスク [6] s10 チームプロトコル [12] デーモンスレッド + 通知キュー シャットダウン + プラン承認 FSM | s11 自律エージェント [14] アイドルサイクル + 自動クレーム | s12 Worktree 分離 [16] タスク調整 + 必要時の分離実行レーン [N] = ツール数
learn-claude-code/ | |-- agents/ # Python リファレンス実装 (s01-s12 + s_full 総括) |-- docs/{en,zh,ja}/ # メンタルモデル優先のドキュメント (3言語) |-- web/ # インタラクティブ学習プラットフォーム (Next.js) |-- skills/ # s05 の Skill ファイル +-- .github/workflows/ci.yml # CI: 型チェック + ビルド
メンタルモデル優先: 問題、解決策、ASCII図、最小限のコード。 English | 中文 | 日本語
| セッション | トピック | モットー |
|---|---|---|
| s01 | エージェントループ | One loop & Bash is all you need |
| s02 | Tool Use | ツールを足すなら、ハンドラーを1つ足すだけ |
| s03 | TodoWrite | 計画のないエージェントは行き当たりばったり |
| s04 | サブエージェント | 大きなタスクを分割し、各サブタスクにクリーンなコンテキストを |
| s05 | Skills | 必要な知識を、必要な時に読み込む |
| s06 | Context Compact | コンテキストはいつか溢れる、空ける手段が要る |
| s07 | タスクシステム | 大きな目標を小タスクに分解し、順序付けし、ディスクに記録する |
| s08 | バックグラウンドタスク | 遅い操作はバックグラウンドへ、エージェントは次を考え続ける |
| s09 | エージェントチーム | 一人で終わらないなら、チームメイトに任せる |
| s10 | チームプロトコル | チームメイト間には統一の通信ルールが必要 |
| s11 | 自律エージェント | チームメイトが自らボードを見て、仕事を取る |
| s12 | Worktree + タスク分離 | 各自のディレクトリで作業し、互いに干渉しない |
12 セッションを終えれば、エージェントの内部構造を完全に理解している。その知識を活かす 2 つの方法:
npm i -g @shareai-lab/kode
Skill & LSP 対応、Windows 対応、GLM / MiniMax / DeepSeek 等のオープンモデルに接続可能。インストールしてすぐ使える。
GitHub: shareAI-lab/Kode-cli
公式 Claude Code Agent SDK は内部で完全な CLI プロセスと通信する -- 同時ユーザーごとに独立のターミナルプロセスが必要。Kode SDK は独立ライブラリでユーザーごとのプロセスオーバーヘッドがなく、バックエンド、ブラウザ拡張、組み込みデバイス等に埋め込み可能。
GitHub: shareAI-lab/Kode-agent-sdk
本リポジトリが教えるエージェントは 使い捨て型 -- ターミナルを開き、タスクを与え、終わったら閉じる。次のセッションは白紙から始まる。これが Claude Code のモデル。
OpenClaw は別の可能性を証明した: 同じ agent core の上に 2 つのメカニズムを追加するだけで、エージェントは「突かないと動かない」から「30 秒ごとに自分で起きて仕事を探す」に変わる:
さらにマルチチャネル IM ルーティング (WhatsApp / Telegram / Slack / Discord 等 13+ プラットフォーム)、永続コンテキストメモリ、Soul パーソナリティシステムを加えると、エージェントは使い捨てツールから常時稼働のパーソナル AI アシスタントへ変貌する。
claw0 はこれらのメカニズムをゼロから分解する姉妹教材リポジトリ:
claw agent = agent core + heartbeat + cron + IM chat + memory + soul
learn-claude-code claw0 (エージェントランタイムコア: (能動的な常時稼働アシスタント: ループ、ツール、計画、 ハートビート、cron、IM チャネル、 チーム、worktree 分離) メモリ、Soul パーソナリティ)
MIT
モデルがエージェントだ。私たちの仕事はツールを与えて邪魔しないこと。