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 で構築・学習するための教材プロジェクトです。 学習を優先するため、以下の本番メカニズムは意図的に簡略化または省略しています。
- 完全なイベント / Hook バス (例: PreToolUse, SessionStart/End, ConfigChange)。
s12 では教材用に最小の追記型ライフサイクルイベントのみ実装している。 - ルールベースの権限ガバナンスと信頼フロー
- セッションライフサイクル制御 (resume/fork) と高度な worktree ライフサイクル制御
- MCP ランタイムの詳細 (transport/OAuth/リソース購読/ポーリング)
このリポジトリの 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 秒ごとに自分で起きて仕事を探す」に変わる:
- ハートビート -- 30 秒ごとにシステムがエージェントにメッセージを送り、やることがあるか確認させる。なければスリープ続行、あれば即座に行動。
- Cron -- エージェントが自ら未来のタスクをスケジュールし、時間が来たら自動実行。
さらにマルチチャネル 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
モデルがエージェントだ。私たちの仕事はツールを与えて邪魔しないこと。