Local branch had diverged from origin/master (sibling commits on the same base). Rewrote local history linearly on top of origin/master, folding in all local content: exa/hot-platform discovery hunters, leaks ledger, nightly sweep orchestrator, updated .gitignore and skill docs, plus the latest hunt output and vault state. Remote-only files (vault keys, channel scripts) were restored rather than dropped, so the resulting tree is a full union of both sides.
1 line
121 KiB
JSON
1 line
121 KiB
JSON
{"repo": "chauncygu/collection-claude-code-source-code", "files": {"docs/README.JP.MD": {"b934603b2800374b315b25061bbeffb40ab6ab26": {"t": 1786067773.2211802, "n": 22796, "h": "dad6a730f57c9a55", "c": "[English](https://github.com/SafeRL-Lab/nano-claude-code/blob/main/README.md) | [中文](https://github.com/SafeRL-Lab/nano-claude-code/blob/main/docs/README.CN.MD) |[한국어](https://github.com/SafeRL-Lab/nano-claude-code/blob/main/docs/README.KO.MD) | 日本語 | [Deutsch](https://github.com/SafeRL-Lab/nano-claude-code/blob/main/docs/README.DE.MD) | [Português](https://github.com/SafeRL-Lab/nano-claude-code/blob/main/docs/README.ES.MD)\n\n<div align=\"center\">\n <a href=\"[https://github.com/SafeRL-Lab/Robust-Gymnasium](https://github.com/SafeRL-Lab/nano-claude-code)\">\n <img src=\"https://github.com/SafeRL-Lab/nano-claude-code/blob/main/docs/logo-v1.png\" alt=\"ロゴ\" width=\"280\"> \n </a>\n\n<h1 align=\"center\" style=\"font-size: 30px;\"><strong><em>Nano Claude Code</em></strong>: あらゆるモデルをサポートする、高速で使いやすい Claude Code の Python 再実装</h1>\n<p align=\"center\">\n <a href=\"https://github.com/chauncygu/collection-claude-code-source-code\">最新の Claude Code ソース集</a>\n ·\n <a href=\"https://github.com/SafeRL-Lab/nano-claude-code/issues\">Issue</a>\n ·\n <a href=\"https://deepwiki.com/SafeRL-Lab/nano-claude-code\">概要紹介</a>\n </p>\n</div>\n\n<div align=center>\n <img src=\"https://github.com/SafeRL-Lab/nano-claude-code/blob/main/docs/demo.gif\" width=\"850\"/> \n</div>\n\n---\n\n## 🔥🔥🔥 ニュース(太平洋時間)\n- 2026年4月3日 18:00: **v3.03** — タスク管理システム(`task/` パッケージ): `TaskCreate` / `TaskUpdate` / `TaskGet` / `TaskList`、連番ID、依存関係エッジ(blocks/blocked_by)、メタデータ、`.nano_claude/tasks.json` への永続化、スレッドセーフなストア、`/tasks` REPL コマンド、37 個の新規テスト(**約 9500 行** の Python)。\n- 2026年4月3日 14:50: **v3.02** — プラグインシステム(`plugin/` パッケージ): `/plugin` CLI による install/uninstall/enable/disable/update、推薦エンジン(キーワード + タグ一致)、マルチスコープ(user/project)、git ベースのマーケットプレイス。`AskUserQuestion` ツールで、タスク途中に番号付き選択肢や自由入力を使った対話的質問が可能(**約 8500 行** の Python)。\n- 2026年4月3日 10:00: **v3.01** — MCP(Model Context Protocol)対応: `mcp/` パッケージ、stdio + SSE + HTTP トランスポート、自動ツール検出、`/mcp` コマンド、34 個の新規テスト(**約 7000 行** の Python)。\n- 2026年4月2日 12:20: **v3.0** — マルチエージェント(`multi_agent/`)、メモリ(`memory/`)、スキル(`skill/`)に加え、組み込みスキル、引数置換、fork/inline 実行、AI メモリ検索、git worktree 分離、エージェントタイプ定義を追加(**約 5000 行** の Python)。\n- 2026年4月2日 10:00: **v2.0** — コンテキスト圧縮、メモリ、サブエージェント、スキル、diff 表示、ツールプラグインシステム(**約 3400 行** の Python)。\n- 2026年4月1日 13:47: VLLM 推論をサポート(**約 2000 行** の Python)。\n- 2026年4月1日 11:30: より多くの**クローズドソース**/**オープンソース**モデルをサポート: Claude, GPT, Gemini, Kimi, Qwen, Zhipu, DeepSeek, さらに Ollama または任意の OpenAI 互換エンドポイント経由のローカル OSS モデル(**約 1700 行** の Python)。\n- 2026年4月1日 09:50: より多くの**クローズドソース**モデルをサポート: Claude, GPT, Gemini(**約 1300 行** の Python)。\n- 2026年4月1日 08:23: Nano Claude Code の初版を公開(**約 900 行** の Python)。\n\n---\n\n# Nano Claude Code\n\nNano Claude Code は、Claude, GPT, Gemini, Kimi, Qwen, Zhipu, DeepSeek、さらに Ollama や任意の OpenAI 互換エンドポイント経由のローカル OSS モデルなど、**あらゆるモデルをサポート**する、**軽量で使いやすい** Claude Code の Python 再実装です。\n\n---\n\n## 目次\n- [なぜ Nano Claude Code なのか](#なぜ-nano-claude-code-なのか)\n- [機能](#機能)\n- [対応モデル](#対応モデル)\n- [インストール](#インストール)\n- [使い方: クローズド API モデル](#使い方-クローズド-api-モデル)\n- [使い方: オープンソースモデル(ローカル)](#使い方-オープンソースモデルローカル)\n- [モデル名の形式](#モデル名の形式)\n- [CLI リファレンス](#cli-リファレンス)\n- [スラッシュコマンド(REPL)](#スラッシュコマンドrepl)\n- [API キーの設定](#api-キーの設定)\n- [権限システム](#権限システム)\n- [組み込みツール](#組み込みツール)\n- [メモリ](#メモリ)\n- [スキル](#スキル)\n- [サブエージェント](#サブエージェント)\n- [MCP](#mcp)\n- [プラグインシステム](#プラグインシステム)\n- [AskUserQuestion ツール](#askuserquestion-ツール)\n- [タスク管理](#タスク管理)\n- [コンテキスト圧縮](#コンテキスト圧縮)\n- [Diff 表示](#diff-表示)\n- [CLAUDE.md サポート](#claudemd-サポート)\n- [セッション管理](#セッション管理)\n- [プロジェクト構成](#プロジェクト構成)\n- [FAQ](#faq)\n\n## なぜ Nano Claude Code なのか\n\nClaude Code は強力な本番品質の AI コーディングアシスタントですが、そのソースコードはコンパイル済みの 12MB TypeScript/Node.js バンドル(約 1300 ファイル、約 28.3 万行)です。Anthropic API に強く結びついており、変更しづらく、ローカルモデルや他のモデルで実行することは困難です。\n\n**Nano Claude Code** は、同じコアループを、読みやすい Python 約 1 万行で再実装したものです。必要なものは残し、不要なものは削ぎ落としています。より詳細な比較は以下を参照してください(Nano Claude Code v3.03): [英語版](https://github.com/SafeRL-Lab/nano-claude-code/blob/main/docs/comparison_claude_code_vs_nano_v3.03_en.md)、[中国語版](https://github.com/SafeRL-Lab/nano-claude-code/blob/main/docs/comparison_claude_code_vs_nano_v3.03_cn.md)\n\n### ひと目でわかる比較\n\n| 項目 | Claude Code (TypeScript) | Nano Claude Code (Python) |\n|---|---|---|\n| 言語 | TypeScript + React/Ink | Python 3.8+ |\n| ソースファイル数 | 約 1,332 TS/TSX ファイル | 51 Python ファイル |\n| コード行数 | 約 283K | 約 10.2K |\n| 組み込みツール | 44+ | 21 |\n| スラッシュコマンド | 88 | 17 |\n| モデル提供元 | Anthropic のみ | 7+(Anthropic · OpenAI · Gemini · Kimi · Qwen · DeepSeek · Ollama · …) |\n| ローカルモデル | なし | あり — Ollama, LM Studio, vLLM, OpenAI 互換エンドポイント |\n| ビルド工程 | 必要(Bun + esbuild) | 不要 — `python nano_claude.py` を直接実行 |\n| 実行時拡張性 | 閉じている(コンパイル時) | 開いている — `register_tool()`、Markdown スキル、git プラグイン |\n| タスク依存グラフ | なし | あり — `task/` パッケージの `blocks` / `blocked_by` |\n\n### Claude Code が優れている点\n\n- **UI 品質** — ストリーミング表示、細かな diff 可視化、ダイアログシステムを備えた React/Ink コンポーネントツリー\n- **ツールの幅** — `NotebookEdit`、`LSP Diagnostics`、`RemoteTrigger`、`EnterWorktree` などを含む 44 以上のツール\n- **エンタープライズ機能** — MDM 管理設定、チーム権限同期、OAuth、キーチェーン保存、GrowthBook フラグ\n- **AI 主導のメモリ抽出** — `extractMemories` により、明示的なツール呼び出しなしで会話から知識を抽出\n- **本番向け信頼性** — 単一配布ファイル `cli.js`、包括的なテスト、バージョン固定リリース\n\n### Nano Claude Code が優れている点\n\n- **マルチプロバイダ** — `--model` または `/model` で Claude、GPT-4o、Gemini 2.5 Pro、DeepSeek、Qwen、ローカル Llama を即時切り替え\n- **ローカルモデル対応** — Ollama、LM Studio、vLLM ベースのモデルで完全オフライン実行\n- **読みやすいソース** — エージェントループ本体は 174 行(`agent.py`)。Python 開発者なら短時間で理解し、fork・拡張できる\n- **ビルド不要** — `pip install -r requirements.txt` 後すぐ実行可能。変更はその場で反映\n- **動的拡張性** — `register_tool(ToolDef(...))` によるランタイム登録、git URL からのスキル導入、MCP サーバ接続\n- **タスク依存グラフ** — `TaskCreate` / `TaskUpdate` が `blocks` / `blocked_by` をサポートし、構造化された複数ステップ計画が可能\n- **二層コンテキスト圧縮** — ルールベースの snip + AI 要約。`preserve_last_n_turns` で調整可能\n\n### 主要な設計上の違い\n\n**エージェントループ** — Nano は、型付きイベント(`TextChunk`, `ToolStart`, `ToolEnd`, `TurnDone`)を `yield` する Python ジェネレータを用います。ループ全体が 1 ファイルで見通せるため、フック、独自レンダラ、ロギングの追加が容易です。\n\n**ツール登録** — すべてのツールは `ToolDef(name, schema, func, read_only, concurrent_safe)` という dataclass です。任意のモジュールが import 時に `register_tool()` を呼べます。MCP サーバ、プラグイン、スキルも同じ仕組みです。\n\n**コンテキスト圧縮**\n\n| | Claude Code | Nano Claude Code |\n|---|---|---|\n| 発火条件 | 正確なトークン数 | `len / 3.5` による推定、70% で発火 |\n| レイヤー 1 | — | Snip: 古いツール出力を切り詰める(API コストなし) |\n| レイヤー 2 | AI 要約 | 古いターンを AI が要約 |\n| 制御 | システム管理 | `preserve_last_n_turns` パラメータ |\n\n**メモリ** — Claude Code の `extractMemories` はモデルが自発的に事実を取り出す方式です。Nano の `memory/` はツール主導で、モデルが明示的に `MemorySave` を呼びます。より予測しやすく、監査しやすい設計です。\n\n### Nano Claude Code を使うべき人\n\n- コーディング支援に**ローカルモデルや Anthropic 以外のモデル**を使いたい開発者\n- **エージェント型コーディングアシスタントの仕組み**を研究したい研究者\n- 独自ツール、独自権限ポリシー、特殊なエージェント種別を追加できる**ハッカブルな基盤**が必要なチーム\n- **Node.js のビルドチェーンなしで** Claude Code 的な生産性を得たい人\n\n---\n\n## 機能\n\n| 機能 | 詳細 |\n|---|---|\n| マルチプロバイダ | Anthropic · OpenAI · Gemini · Kimi · Qwen · Zhipu · DeepSeek · Ollama · LM Studio · カスタムエンドポイント |\n| 対話型 REPL | readline 履歴、Tab 補完付きスラッシュコマンド |\n| エージェントループ | ストリーミング API + 自動ツール使用ループ |\n| 21 個の組み込みツール | Read · Write · Edit · Bash · Glob · Grep · WebFetch · WebSearch · MemorySave · MemoryDelete · MemorySearch · MemoryList · Agent · SendMessage · CheckAgentResult · ListAgentTasks · ListAgentTypes · Skill · SkillList · AskUserQuestion · *(MCP + plugin ツールは起動時に自動追加)* |\n| MCP 統合 | 任意の MCP サーバ(stdio/SSE/HTTP)に接続可能。ツールは自動登録され Claude から呼び出し可能 |\n| プラグインシステム | git URL またはローカルパスから install/uninstall/enable/disable/update。user/project のマルチスコープ。推薦エンジン付き |\n| AskUserQuestion | タスクの途中で、番号付き選択肢を含む確認質問をユーザーに対して行える |\n| タスク管理 | TaskCreate/Update/Get/List、連番ID、依存関係、メタデータ、`.nano_claude/tasks.json` への保存、`/tasks` コマンド |\n| Diff 表示 | Edit と Write に対して Git 風の赤/緑 diff を表示 |\n| コンテキスト圧縮 | 長い会話をモデルの上限内に保つため自動圧縮 |\n| 永続メモリ | 4 タイプの二重スコープメモリ(user + project)、AI 検索、古さ警告 |\n| マルチエージェント | 型付きサブエージェント(coder/reviewer/researcher/...)、git worktree 分離、バックグラウンドモード |\n| スキル | 組み込み `/commit`・`/review` と、引数置換や fork/inline 実行を備えた Markdown スキル |\n| プラグインツール | `tool_registry.py` によるカスタムツール登録 |\n| 権限システム | `auto` / `accept-all` / `manual` |\n| 17 個のスラッシュコマンド | `/model` · `/config` · `/save` · `/cost` · `/memory` · `/skills` · `/agents` · … |\n| コンテキスト注入 | `CLAUDE.md`、git status、cwd、永続メモリを自動ロード |\n| セッション保存 | 会話を `~/.nano_claude/sessions/` に保存 / 読み込み |\n| Extended Thinking | ON/OFF 切り替え(Claude 系モデルのみ) |\n| コスト追跡 | トークン使用量 + 推定 USD コスト |\n| 非対話モード | スクリプト / CI 用 `--print` フラグ |\n\n---\n\n## 対応モデル\n\n### クローズドソース(API)\n\n| Provider | Model | Context | 強み | API Key Env |\n|---|---|---|---|---|\n| **Anthropic** | `claude-opus-4-6` | 200k | 最も高性能。複雑な推論向け | `ANTHROPIC_API_KEY` |\n| **Anthropic** | `claude-sonnet-4-6` | 200k | 速度と品質のバランス | `ANTHROPIC_API_KEY` |\n| **Anthropic** | `claude-haiku-4-5-20251001` | 200k | 高速・低コスト | `ANTHROPIC_API_KEY` |\n| **OpenAI** | `gpt-4o` | 128k | 強力なマルチモーダルとコーディング | `OPENAI_API_KEY` |\n| **OpenAI** | `gpt-4o-mini` | 128k | 高速・低価格 | `OPENAI_API_KEY` |\n| **OpenAI** | `o3-mini` | 200k | 強い推論性能 | `OPENAI_API_KEY` |\n| **OpenAI** | `o1` | 200k | 高度な推論 | `OPENAI_API_KEY` |\n| **Google** | `gemini-2.5-pro-preview-03-25` | 1M | 長文コンテキスト、マルチモーダル | `GEMINI_API_KEY` |\n| **Google** | `gemini-2.0-flash` | 1M | 高速、大規模コンテキスト | `GEMINI_API_KEY` |\n| **Google** | `gemini-1.5-pro` | 2M | 最大級のコンテキスト窓 | `GEMINI_API_KEY` |\n| **Moonshot (Kimi)** | `moonshot-v1-8k` | 8k | 中国語・英語 | `MOONSHOT_API_KEY` |\n| **Moonshot (Kimi)** | `moonshot-v1-32k` | 32k | 中国語・英語 | `MOONSHOT_API_KEY` |\n| **Moonshot (Kimi)** | `moonshot-v1-128k` | 128k | 長文コンテキスト | `MOONSHOT_API_KEY` |\n| **Alibaba (Qwen)** | `qwen-max` | 32k | Qwen 系で最高品質 | `DASHSCOPE_API_KEY` |\n| **Alibaba (Qwen)** | `qwen-plus` | 128k | バランス型 | `DASHSCOPE_API_KEY` |\n| **Alibaba (Qwen)** | `qwen-turbo` | 1M | 高速・低価格 | `DASHSCOPE_API_KEY` |\n| **Alibaba (Qwen)** | `qwq-32b` | 32k | 強い推論性能 | `DASHSCOPE_API_KEY` |\n| **Zhipu (GLM)** | `glm-4-plus` | 128k | GLM 系で最高品質 | `ZHIPU_API_KEY` |\n| **Zhipu (GLM)** | `glm-4` | 128k | 汎用 | `ZHIPU_API_KEY` |\n| **Zhipu (GLM)** | `glm-4-flash` | 128k | 無料ティアあり | `ZHIPU_API_KEY` |\n| **DeepSeek** | `deepseek-chat` | 64k | コーディングに強い | `DEEPSEEK_API_KEY` |\n| **DeepSeek** | `deepseek-reasoner` | 64k | chain-of-thought 推論 | `DEEPSEEK_API_KEY` |\n\n### オープンソース(Ollama 経由のローカル)\n\n| Model | Size | 強み | Pull Command |\n|---|---|---|---|\n| `llama3.3` | 70B | 汎用、強い推論 | `ollama pull llama3.3` |\n| `llama3.2` | 3B / 11B | 軽量 | `ollama pull llama3.2` |\n| `qwen2.5-coder` | 7B / 32B | **コーディングに最適** | `ollama pull qwen2.5-coder` |\n| `qwen2.5` | 7B / 72B | 中国語・英語 | `ollama pull qwen2.5` |\n| `deepseek-r1` | 7B–70B | 推論、数学 | `ollama pull deepseek-r1` |\n| `deepseek-coder-v2` | 16B | コーディング | `ollama pull deepseek-coder-v2` |\n| `mistral` | 7B | 高速・高効率 | `ollama pull mistral` |\n| `mixtral` | 8x7B | 強力な MoE モデル | `ollama pull mixtral` |\n| `phi4` | 14B | Microsoft、強い推論 | `ollama pull phi4` |\n| `gemma3` | 4B / 12B / 27B | Google のオープンモデル | `ollama pull gemma3` |\n| `codellama` | 7B / 34B | コード生成 | `ollama pull codellama` |\n\n> **注:** ツール呼び出しには function calling をサポートするモデルが必要です。推奨ローカルモデル: `qwen2.5-coder`, `llama3.3`, `mistral`, `phi4`。\n\n---\n\n## インストール\n\n```bash\ngit clone <repo-url>\ncd nano_claude_code\n\npip install -r requirements.txt\n# または手動:\npip install anthropic openai httpx rich\n```\n\n---\n\n## 使い方: クローズド API モデル\n\n### Anthropic Claude\n\nAPI キーは [console.anthropic.com](https://console.anthropic.com) で取得します。\n\n```bash\nexport ANTHROPIC_API_KEY=sk-ant-api03-...\n\npython nano_claude.py\npython nano_claude.py --model claude-sonnet-4-6\npython nano_claude.py --model claude-haiku-4-5-20251001\npython nano_claude.py --model claude-opus-4-6 --thinking --verbose\n```\n\n### OpenAI GPT\n\nAPI キーは [platform.openai.com](https://platform.openai.com) で取得します。\n\n```bash\nexport OPENAI_API_KEY=sk-...\n\npython nano_claude.py --model gpt-4o\npython nano_claude.py --model gpt-4o-mini\npython nano_claude.py --model gpt-4.1-mini\npython nano_claude.py --model o3-mini\n```\n\n### Google Gemini\n\nAPI キーは [aistudio.google.com](https://aistudio.google.com) で取得します。\n\n```bash\nexport GEMINI_API_KEY=AIza...\n\npython nano_claude.py --model gemini/gemini-2.0-flash\npython nano_claude.py --model gemini/gemini-1.5-pro\npython nano_claude.py --model gemini/gemini-2.5-pro-preview-03-25\n```\n\n### Kimi (Moonshot AI)\n\n```bash\nexport MOONSHOT_API_KEY=sk-...\n\npython nano_claude.py --model kimi/moonshot-v1-32k\npython nano_claude.py --model kimi/moonshot-v1-128k\n```\n\n### Qwen (Alibaba DashScope)\n\n```bash\nexport DASHSCOPE_API_KEY=sk-...\n\npython nano_claude.py --model qwen/Qwen3.5-Plus\npython nano_claude.py --model qwen/Qwen3-MAX\npython nano_claude.py --model qwen/Qwen3.5-Flash\n```\n\n### Zhipu GLM\n\n```bash\nexport ZHIPU_API_KEY=...\n\npython nano_claude.py --model zhipu/glm-4-plus\npython nano_claude.py --model zhipu/glm-4-flash\n```\n\n### DeepSeek\n\n```bash\nexport DEEPSEEK_API_KEY=sk-...\n\npython nano_claude.py --model deepseek/deepseek-chat\npython nano_claude.py --model deepseek/deepseek-reasoner\n```\n\n---\n\n## 使い方: オープンソースモデル(ローカル)\n\n### Option A — Ollama(推奨)\n\nOllama は追加設定なしでローカル実行できます。API キーは不要です。\n\n```bash\n# macOS / Linux\ncurl -fsSL https://ollama.com/install.sh | sh\n\nollama pull qwen2.5-coder\nollama pull qwen2.5-coder:32b\nollama pull llama3.3\nollama pull deepseek-r1\nollama serve\n\npython nano_claude.py --model ollama/qwen2.5-coder\npython nano_claude.py --model ollama/llama3.3\npython nano_claude.py --model ollama/deepseek-r1\n```\n\nローカルにあるモデル一覧:\n```bash\nollama list\n```\n\n### Option B — LM Studio\n\nLM Studio は、モデルのダウンロードと実行を GUI で行い、OpenAI 互換サーバも提供します。\n\n```bash\npython nano_claude.py --model lmstudio/<model-name>\npython nano_claude.py --model lmstudio/phi-4-GGUF\npython nano_claude.py --model lmstudio/qwen2.5-coder-7b\n```\n\n### Option C — vLLM / Self-Hosted OpenAI-Compatible Server\n\n```bash\nCUDA_VISIBLE_DEVICES=7 python -m vllm.entrypoints.openai.api_server \\\n --model Qwen/Qwen2.5-Coder-7B-Instruct \\\n --host 0.0.0.0 \\\n --port 8000 \\\n --enable-auto-tool-choice \\\n --tool-call-parser hermes\n\nexport CUSTOM_BASE_URL=http://localhost:8000/v1\nexport CUSTOM_API_KEY=none\npython nano_claude.py --model custom/Qwen/Qwen2.5-Coder-7B-Instruct\n```\n\nREPL 内では:\n\n```text\n/config custom_base_url=http://localhost:8000/v1\n/config custom_api_key=token-abc123\n/model custom/Qwen2.5-Coder-32B-Instruct\n```\n\n---\n\n## モデル名の形式\n\n以下の 3 つの形式をサポートします。\n\n```bash\npython nano_claude.py --model gpt-4o\npython nano_claude.py --model gemini-2.0-flash\npython nano_claude.py --model deepseek-chat\n\npython nano_claude.py --model ollama/qwen2.5-coder\npython nano_claude.py --model kimi/moonshot-v1-128k\n\npython nano_claude.py --model kimi:moonshot-v1-32k\npython nano_claude.py --model qwen:qwen-max\n```\n\n**自動判定ルール:**\n\n| Model prefix | Detected provider |\n|---|---|\n| `claude-` | anthropic |\n| `gpt-`, `o1`, `o3` | openai |\n| `gemini-` | gemini |\n| `moonshot-`, `kimi-` | kimi |\n| `qwen`, `qwq-` | qwen |\n| `glm-` | zhipu |\n| `deepseek-` | deepseek |\n| `llama`, `mistral`, `phi`, `gemma`, `mixtral`, `codellama` | ollama |\n\n---\n\n## CLI リファレンス\n\n```text\npython nano_claude.py [OPTIONS] [PROMPT]\n\nOptions:\n -p, --print 非対話で実行して終了\n -m, --model MODEL モデル指定\n --accept-all すべて自動承認\n --verbose thinking とトークン数を表示\n --thinking Extended Thinking を有効化\n --version バージョン表示\n -h, --help ヘルプ表示\n```\n\n**例:**\n\n```bash\npython nano_claude.py\npython nano_claude.py --model gpt-4o\npython nano_claude.py -m ollama/deepseek-r1:32b\npython nano_claude.py --print \"Write a Python fibonacci function\"\npython nano_claude.py --accept-all --print \"Initialize a Python project with pyproject.toml\"\npython nano_claude.py --thinking --verbose\n```\n\n---\n\n## スラッシュコマンド(REPL)\n\n| コマンド | 説明 |\n|---|---|\n| `/help` | 全コマンドを表示 |\n| `/clear` | 会話履歴をクリア |\n| `/model` | 現在モデルと利用可能モデル一覧 |\n| `/model <name>` | モデルを即時切替 |\n| `/config` | 現在の設定を表示 |\n| `/config key=value` | 設定を保存 |\n| `/save` | セッション保存 |\n| `/save <filename>` | 名前を付けて保存 |\n| `/load` | 保存済みセッション一覧 |\n| `/load <filename>` | セッション読み込み |\n| `/history` | 会話履歴全体を表示 |\n| `/context` | メッセージ数とトークン概算 |\n| `/cost` | トークン使用量と推定コスト |\n| `/verbose` | verbose の切替 |\n| `/thinking` | Extended Thinking の切替 |\n| `/permissions` | 権限モード表示 |\n| `/permissions <mode>` | `auto` / `accept-all` / `manual` |\n| `/cwd` | 現在ディレクトリ表示 |\n| `/cwd <path>` | 作業ディレクトリ変更 |\n| `/memory` | 永続メモリ一覧 |\n| `/memory <query>` | メモリ検索 |\n| `/skills` | スキル一覧 |\n| `/agents` | サブエージェントの状態 |\n| `/mcp` | MCP サーバとツール一覧 |\n| `/mcp reload` | 全 MCP サーバ再接続 |\n| `/mcp reload <name>` | 特定サーバ再接続 |\n| `/mcp add <name> <cmd> [args]` | stdio MCP サーバ追加 |\n| `/mcp remove <name>` | サーバ削除 |\n| `/exit` / `/quit` | 終了 |\n\n---\n\n## API キーの設定\n\n### 方法 1: 環境変数(推奨)\n\n```bash\nexport ANTHROPIC_API_KEY=sk-ant-...\nexport OPENAI_API_KEY=sk-...\nexport GEMINI_API_KEY=AIza...\nexport MOONSHOT_API_KEY=sk-...\nexport DASHSCOPE_API_KEY=sk-...\nexport ZHIPU_API_KEY=...\nexport DEEPSEEK_API_KEY=sk-...\n```\n\n### 方法 2: REPL 内で設定\n\n```text\n/config anthropic_api_key=sk-ant-...\n/config openai_api_key=sk-...\n/config gemini_api_key=AIza...\n/config kimi_api_key=sk-...\n/config qwen_api_key=sk-...\n/config zhipu_api_key=...\n/config deepseek_api_key=sk-...\n```\n\n### 方法 3: 設定ファイルを直接編集\n\n```json\n{\n \"model\": \"qwen/qwen-max\",\n \"max_tokens\": 8192,\n \"permission_mode\": \"auto\",\n \"verbose\": false,\n \"thinking\": false,\n \"qwen_api_key\": \"sk-...\"\n}\n```\n\n---\n\n## 権限システム\n\n| モード | 挙動 |\n|---|---|\n| `auto`(既定) | 読み取り専用操作は常に許可。Bash 実行や書き込み前に確認 |\n| `accept-all` | 一切確認しない |\n| `manual` | 読み取りを含むすべての操作の前に確認 |\n\n`auto` モードで自動承認される代表例: `ls`, `cat`, `head`, `tail`, `wc`, `pwd`, `echo`, `git status`, `git log`, `git diff`, `git show`, `find`, `grep`, `rg`, `python`, `node`, `pip show`, `npm list` など。\n\n---\n\n## 組み込みツール\n\n### コアツール\n\n| ツール | 説明 | 主な引数 |\n|---|---|---|\n| `Read` | 行番号付きでファイルを読む | `file_path`, `limit`, `offset` |\n| `Write` | ファイル作成 / 上書き(diff 表示) | `file_path`, `content` |\n| `Edit` | 文字列の正確な置換(diff 表示) | `file_path`, `old_string`, `new_string`, `replace_all` |\n| `Bash` | シェルコマンド実行 | `command`, `timeout` |\n| `Glob` | glob パターンでファイル検索 | `pattern`, `path` |\n| `Grep` | 正規表現検索 | `pattern`, `path`, `glob`, `output_mode` |\n| `WebFetch` | URL からテキスト取得 | `url`, `prompt` |\n| `WebSearch` | DuckDuckGo による検索 | `query` |\n\n### メモリツール\n\n| ツール | 説明 | 主な引数 |\n|---|---|---|\n| `MemorySave` | 永続メモリを保存 / 更新 | `name`, `type`, `description`, `content`, `scope` |\n| `MemoryDelete` | 名前で削除 | `name`, `scope` |\n| `MemorySearch` | キーワードまたは AI で検索 | `query`, `scope`, `use_ai`, `max_results` |\n| `MemoryList` | 全メモリ一覧 | `scope` |\n\n### サブエージェントツール\n\n| ツール | 説明 | 主な引数 |\n|---|---|---|\n| `Agent` | サブエージェント生成 | `prompt`, `subagent_type`, `isolation`, `name`, `model`, `wait` |\n| `SendMessage` | バックグラウンドエージェントにメッセージ送信 | `name`, `message` |\n| `CheckAgentResult` | 状態 / 結果確認 | `task_id` |\n| `ListAgentTasks` | アクティブ / 完了済みタスク一覧 | — |\n| `ListAgentTypes` | エージェントタイプ一覧 | — |\n\n### スキルツール\n\n| ツール | 説明 | 主な引数 |\n|---|---|---|\n| `Skill` | 名前でスキル呼び出し | `name`, `args` |\n| `SkillList` | スキル一覧表示 | — |\n\n### MCP ツール\n\nMCP ツールは設定済みサーバから自動検出され、`mcp__<server>__<tool>` の名前で登録されます。\n\n| 例 | 説明 |\n|---|---|\n| `mcp__git__git_status` | `git` サーバの `git_status` |\n| `mcp__filesystem__read_file` | `filesystem` サーバの `read_file` |\n| `mcp__myserver__my_action` | カスタムサーバのツール |\n\n---\n\n## メモリ\n\nモデルは組み込みメモリシステムによって会話をまたいで情報を記憶できます。\n\n- **ユーザースコープ**: `~/.nano_claude/memory/`\n- **プロジェクトスコープ**: `.nano_claude/memory/`\n\n`MEMORY.md` インデックス(最大 200 行 / 25KB)は保存・削除のたびに自動再生成され、システムプロンプトに注入されます。\n\n**メモリタイプ:**\n- `user`\n- `feedback`\n- `project`\n- `reference`\n\n**メモリファイル例:**\n```markdown\n---\nname: coding style\ndescription: Python formatting preferences\ntype: feedback\ncreated: 2026-04-02\n---\nPrefer 4-space indentation and full type hints in all Python code.\n```\n\n---\n\n## スキル\n\nスキルは再利用可能なプロンプトテンプレートです。組み込みスキル:\n- `/commit`\n- `/review [PR]`\n\nカスタムスキル例:\n\n```bash\nmkdir -p ~/.nano_claude/skills\n```\n\n```markdown\n---\nname: deploy\ndescription: Deploy to an environment\ntriggers: [/deploy]\nallowed-tools: [Bash, Read]\nwhen_to_use: Use when the user wants to deploy a version to an environment.\nargument-hint: [env] [version]\narguments: [env, version]\ncontext: inline\n---\n\nDeploy $VERSION to the $ENV environment.\nFull args: $ARGUMENTS\n```\n\n---\n\n## サブエージェント\n\n組み込みタイプ:\n- `general-purpose`\n- `coder`\n- `reviewer`\n- `researcher`\n- `tester`\n\nバックグラウンド実行、git worktree 分離、カスタムエージェント定義に対応しています。\n\n---\n\n## MCP\n\n`.mcp.json` または `~/.nano_claude/mcp.json` で設定します。\n\n```json\n{\n \"mcpServers\": {\n \"git\": {\n \"type\": \"stdio\",\n \"command\": \"uvx\",\n \"args\": [\"mcp-server-git\"]\n }\n }\n}\n```\n\n代表的な REPL コマンド:\n```text\n/mcp\n/mcp reload\n/mcp add git uvx mcp-server-git\n/mcp remove git\n```\n\n---\n\n## プラグインシステム\n\n```bash\n/plugin install my-plugin@https://github.com/user/my-plugin\n/plugin install local-plugin@/path/to/local/plugin\n/plugin enable my-plugin\n/plugin disable my-plugin\n/plugin update my-plugin\n/plugin uninstall my-plugin\n/plugin info my-plugin\n/plugin recommend\n/plugin recommend \"docker database\"\n```\n\n`plugin.json` 例:\n```json\n{\n \"name\": \"my-plugin\",\n \"version\": \"0.1.0\",\n \"description\": \"Does something useful\",\n \"author\": \"you\",\n \"tags\": [\"git\", \"python\"],\n \"tools\": [\"tools\"],\n \"skills\": [\"skills/my.md\"],\n \"mcp_servers\": {},\n \"dependencies\": [\"httpx\"]\n}\n```\n\n---\n\n## AskUserQuestion ツール\n\nClaude は処理を一時停止し、ユーザーに質問してから続行できます。\n\n```json\n{\n \"tool\": \"AskUserQuestion\",\n \"question\": \"Which database should I use?\",\n \"options\": [\n {\"label\": \"SQLite\", \"description\": \"Simple, file-based\"},\n {\"label\": \"PostgreSQL\", \"description\": \"Full-featured, requires server\"}\n ],\n \"allow_freetext\": true\n}\n```\n\n---\n\n## タスク管理\n\n利用可能なツール:\n- `TaskCreate`\n- `TaskUpdate`\n- `TaskGet`\n- `TaskList`\n\n状態:\n`pending` → `in_progress` → `completed` / `cancelled` / `deleted`\n\nREPL:\n```text\n/tasks\n/tasks create <subject>\n/tasks start <id>\n/tasks done <id>\n/tasks cancel <id>\n/tasks delete <id>\n/tasks get <id>\n/tasks clear\n```\n\n---\n\n## コンテキスト圧縮\n\n2 層構成:\n1. **Snip** — 古いツール出力を切り詰める\n2. **Auto-compact** — 上限の 70% を超えると古い会話を AI が要約\n\n---\n\n## Diff 表示\n\n```diff\n--- a/config.py\n+++ b/config.py\n@@ -12,7 +12,7 @@\n \"model\": \"claude-opus-4-6\",\n- \"max_tokens\": 8192,\n+ \"max_tokens\": 16384,\n```\n\n---\n\n## CLAUDE.md サポート\n\n`CLAUDE.md` を置くと、コードベースに関する永続的なコンテキストをモデルへ注入できます。\n\n```text\n~/.claude/CLAUDE.md\n/your/project/CLAUDE.md\n```\n\n---\n\n## セッション管理\n\n```bash\n/save\n/save debug_auth_bug\n\n/load\n/load debug_auth_bug\n/load session_20260401_143022.json\n```\n\n---\n\n## プロジェクト構成\n\n```text\nnano_claude_code/\n├── nano_claude.py\n├── agent.py\n├── providers.py\n├── tools.py\n├── tool_registry.py\n├── compaction.py\n├── context.py\n├── config.py\n├── multi_agent/\n├── memory/\n├── skill/\n├── mcp/\n└── tests/\n```\n\n---\n\n## FAQ\n\n**Q: MCP サーバの追加方法は?**\n```text\n/mcp add git uvx mcp-server-git\n```\n\n**Q: MCP サーバのエラーをどう調べる?**\n```text\n/mcp\n/mcp reload git\nwhich uvx\nuvx mcp-server-git\n```\n\n**Q: 認証付き MCP サーバは使える?**\nはい。HTTP/SSE の `headers` や stdio の `env` を使って設定できます。\n\n**Q: Ollama モデルで tool call が動かない**\nfunction calling 対応モデルを使用してください。推奨: `qwen2.5-coder`, `llama3.3`, `mistral`, `phi4`\n\n**Q: API コストの確認方法**\n```text\n/cost\n```\n\n**Q: 複数 API キーを同一セッションで使える?**\nはい。環境変数または `/config` で先に設定しておけば、モデル切替時に自動で対応するキーが使われます。\n\n**Q: どこからでも CLI のように使うには?**\n```bash\nalias nc='python /path/to/nano_claude_code/nano_claude.py'\npip install -e .\n```\n"}}, "docs/README.FR.MD": {"b934603b2800374b315b25061bbeffb40ab6ab26": {"t": 1786067773.3618731, "n": 62586, "h": "06c546d88d5f7552", "c": "Français | [中文](https://github.com/SafeRL-Lab/nano-claude-code/blob/main/docs/README.CN.MD) | [한국어](https://github.com/SafeRL-Lab/nano-claude-code/blob/main/docs/README.KO.MD) | [日本語](https://github.com/SafeRL-Lab/nano-claude-code/blob/main/docs/README.JP.MD) | [Deutsch](https://github.com/SafeRL-Lab/nano-claude-code/blob/main/docs/README.DE.MD) | [Español](https://github.com/SafeRL-Lab/nano-claude-code/blob/main/docs/README.ES.MD)\n\n<div align=\"center\">\n <a href=\"[https://github.com/SafeRL-Lab/Robust-Gymnasium](https://github.com/SafeRL-Lab/nano-claude-code)\">\n <img src=\"https://github.com/SafeRL-Lab/nano-claude-code/blob/main/docs/logo-v1.png\" alt=\"Logo\" width=\"280\"> \n </a>\n\n<h1 align=\"center\" style=\"font-size: 30px;\"><strong><em>Nano Claude Code</em></strong> : une réimplémentation Python rapide et facile à utiliser de Claude Code, compatible avec n’importe quel modèle</h1>\n<p align=\"center\">\n <a href=\"https://github.com/chauncygu/collection-claude-code-source-code\">La source la plus récente de Claude Code</a>\n ·\n <a href=\"https://github.com/SafeRL-Lab/nano-claude-code/issues\">Issue</a>\n ·\n <a href=\"https://deepwiki.com/SafeRL-Lab/nano-claude-code\">Brève introduction</a>\n</p>\n</div>\n\n<div align=center>\n <img src=\"https://github.com/SafeRL-Lab/nano-claude-code/blob/main/docs/demo.gif\" width=\"850\"/> \n</div>\n<div align=center>\n<center style=\"color:#000000;text-decoration:underline\"> </center>\n</div>\n\n---\n\n## 🔥🔥🔥 Actualités (heure du Pacifique)\n- 00:41, 04 avr. 2026 : **v3.05** — Saisie vocale (package `voice/`) : backends d’enregistrement `sounddevice` → `arecord` → SoX, backends STT `faster-whisper` → `openai-whisper` → API OpenAI. Extraction intelligente de termes clés à partir de la branche git + du nom du projet + des fichiers récents, injectés dans `initial_prompt` de Whisper pour améliorer la précision sur le domaine du code. Commandes REPL `/voice`, `/voice status`, `/voice lang <code>`. Fonctionne entièrement hors ligne, sans clé API. 29 nouveaux tests (**~11.6K** lignes de Python).\n- 22:29, 03 avr. 2026 : **v3.04** — Couverture des outils étendue : `NotebookEdit` (édition des cellules Jupyter `.ipynb` — remplacer/insérer/supprimer avec aller-retour JSON complet) et `GetDiagnostics` (diagnostics de style LSP via pyright/mypy/flake8/tsc/shellcheck). Correction également d’un ancien bug d’index de schéma dans `_register_builtins` en passant à une recherche par nom (**~10.5K** lignes de Python).\n- 18:00, 03 avr. 2026 : **v3.03** — Système de gestion de tâches (package `task/`) : outils `TaskCreate` / `TaskUpdate` / `TaskGet` / `TaskList` avec identifiants séquentiels, arêtes de dépendance (`blocks`/`blocked_by`), métadonnées, persistance vers `.nano_claude/tasks.json`, stockage thread-safe, commande REPL `/tasks`, 37 nouveaux tests (**~9500** lignes de Python).\n- 14:50, 03 avr. 2026 : **v3.02** — Système de plugins (package `plugin/`) : installation/désinstallation/activation/désactivation/mise à jour via la CLI `/plugin`, moteur de recommandation (correspondance mots-clés + tags), multi-portée (utilisateur/projet), marketplace basée sur git. Outil `AskUserQuestion` : invites interactives à l’utilisateur en cours de tâche, avec options numérotées et saisie libre (**~8500** lignes de Python).\n- 10:00, 03 avr. 2026 : **v3.01** — Support MCP (Model Context Protocol) : package `mcp/`, transports stdio + SSE + HTTP, découverte automatique d’outils, commande `/mcp`, 34 nouveaux tests (**~7000** lignes de Python).\n- 12:20, 02 avr. 2026 : **v3.0** — Packages multi-agent (`multi_agent/`), mémoire (`memory/`), compétences (`skill/`) avec compétences intégrées, substitution d’arguments, exécution fork/inline, recherche mémoire par IA, isolation via git worktree, définitions de types d’agents (**~5000** lignes de Python), voir la [mise à jour](https://github.com/SafeRL-Lab/nano-claude-code/blob/main/docs/update_readme_v3.0.md).\n- 10:00, 02 avr. 2026 : **v2.0** — Compression de contexte, mémoire, sous-agents, compétences, vue diff, système de plugins d’outils (**~3400** lignes de code Python).\n- 13:47, 01 avr. 2026 : prise en charge de l’inférence VLLM (**~2000** lignes de code Python).\n- 11:30, 01 avr. 2026 : prise en charge de davantage de modèles **propriétaires** et **open source** : Claude, GPT, Gemini, Kimi, Qwen, Zhipu, DeepSeek, ainsi que des modèles open source locaux via Ollama ou tout endpoint compatible OpenAI. (**~1700** lignes de code Python).\n- 09:50, 01 avr. 2026 : prise en charge de davantage de modèles **propriétaires** : Claude, GPT, Gemini. (**~1300** lignes de code Python).\n- 08:23, 01 avr. 2026 : publication de la version initiale de Nano Claude Code (**~900 lignes** de code Python).\n\n---\n\n# Nano Claude Code\n\nNano Claude Code : **une réimplémentation Python légère** et **facile à utiliser** de Claude Code **compatible avec n’importe quel modèle**, comme Claude, GPT, Gemini, Kimi, Qwen, Zhipu, DeepSeek, ainsi que des modèles open source locaux via Ollama ou tout endpoint compatible OpenAI.\n\n---\n\n## Sommaire\n * [Pourquoi Nano Claude Code](#pourquoi-nano-claude-code)\n * [Fonctionnalités](#fonctionnalités)\n * [Modèles pris en charge](#modèles-pris-en-charge)\n * [Installation](#installation)\n * [Utilisation : modèles API propriétaires](#utilisation--modèles-api-propriétaires)\n * [Utilisation : modèles open source (local)](#utilisation--modèles-open-source-local)\n * [Format du nom de modèle](#format-du-nom-de-modèle)\n * [Référence CLI](#référence-cli)\n * [Commandes slash (REPL)](#commandes-slash-repl)\n * [Configuration des clés API](#configuration-des-clés-api)\n * [Système d’autorisations](#système-dautorisations)\n * [Outils intégrés](#outils-intégrés)\n * [Mémoire](#mémoire)\n * [Compétences](#compétences)\n * [Sous-agents](#sous-agents)\n * [MCP (Model Context Protocol)](#mcp-model-context-protocol)\n * [Système de plugins](#système-de-plugins)\n * [Outil AskUserQuestion](#outil-askuserquestion)\n * [Gestion des tâches](#gestion-des-tâches)\n * [Saisie vocale](#saisie-vocale)\n * [Compression de contexte](#compression-de-contexte)\n * [Vue diff](#vue-diff)\n * [Prise en charge de CLAUDE.md](#prise-en-charge-de-claudemd)\n * [Gestion des sessions](#gestion-des-sessions)\n * [Structure du projet](#structure-du-projet)\n * [FAQ](#faq)\n\n## Pourquoi Nano Claude Code\n\nClaude Code est un assistant de codage IA puissant, prêt pour la production — mais son code source est un bundle TypeScript/Node.js compilé de 12 Mo (~1 300 fichiers, ~283K lignes). Il est étroitement couplé à l’API Anthropic, difficile à modifier, et impossible à exécuter sur un modèle local ou alternatif.\n\n**Nano Claude Code** réimplémente la même boucle centrale en ~10K lignes de Python lisible, en conservant tout ce dont vous avez besoin et en supprimant le reste. Voir ici une analyse plus détaillée (Nano Claude Code v3.03), [version anglaise](https://github.com/SafeRL-Lab/nano-claude-code/blob/main/docs/comparison_claude_code_vs_nano_v3.03_en.md) et [version chinoise](https://github.com/SafeRL-Lab/nano-claude-code/blob/main/docs/comparison_claude_code_vs_nano_v3.03_cn.md)\n\n### En un coup d’œil\n\n| Dimension | Claude Code (TypeScript) | Nano Claude Code (Python) |\n|-----------|--------------------------|---------------------------|\n| Langage | TypeScript + React/Ink | Python 3.8+ |\n| Fichiers source | ~1 332 fichiers TS/TSX | 51 fichiers Python |\n| Lignes de code | ~283K | ~11.6K |\n| Outils intégrés | 44+ | 23 |\n| Commandes slash | 88 | 18 |\n| Saisie vocale | WebSocket Anthropic propriétaire (OAuth requis) | Whisper local / API OpenAI — fonctionne hors ligne, sans abonnement |\n| Fournisseurs de modèles | Anthropic uniquement | 7+ (Anthropic · OpenAI · Gemini · Kimi · Qwen · DeepSeek · Ollama · …) |\n| Modèles locaux | Non | Oui — Ollama, LM Studio, vLLM, tout endpoint compatible OpenAI |\n| Étape de build requise | Oui (Bun + esbuild) | Non — exécution directe avec `python nano_claude.py` |\n| Extensibilité à l’exécution | Fermée (à la compilation) | Ouverte — `register_tool()` à l’exécution, compétences Markdown, plugins git |\n| Graphe de dépendances de tâches | Non | Oui — arêtes `blocks` / `blocked_by` dans le package `task/` |\n\n### Là où Claude Code l’emporte\n\n- **Qualité de l’interface** — arbre de composants React/Ink avec rendu en streaming, visualisation diff fine et systèmes de dialogue.\n- **Richesse des outils** — 44 outils, dont `RemoteTrigger`, `EnterWorktree` et davantage d’outils intégrés à l’UI.\n- **Fonctionnalités entreprise** — config gérée par MDM, synchronisation des permissions d’équipe, OAuth, stockage keychain, feature flags GrowthBook.\n- **Extraction de mémoire pilotée par IA** — le service `extractMemories` extrait proactivement des connaissances à partir des conversations sans appels d’outils explicites.\n- **Fiabilité en production** — un unique exécutable `cli.js`, couverture de tests complète, versions figées.\n\n### Là où Nano Claude Code l’emporte\n\n- **Multi-fournisseur** — basculez entre Claude, GPT-4o, Gemini 2.5 Pro, DeepSeek, Qwen ou un modèle Llama local avec `--model` ou `/model`, sans recompilation.\n- **Prise en charge des modèles locaux** — fonctionne entièrement hors ligne avec Ollama, LM Studio ou tout modèle servi via vLLM.\n- **Code lisible** — la boucle complète de l’agent fait 174 lignes (`agent.py`). Tout développeur Python peut la lire, la forker et l’étendre en quelques minutes.\n- **Zéro build** — `pip install -r requirements.txt` et c’est prêt. Les modifications prennent effet immédiatement.\n- **Extensibilité dynamique** — enregistrez de nouveaux outils à l’exécution avec `register_tool(ToolDef(...))`, installez des packs de compétences depuis des URL git, ou branchez n’importe quel serveur MCP.\n- **Graphe de dépendances de tâches** — `TaskCreate` / `TaskUpdate` prennent en charge les arêtes `blocks` / `blocked_by` pour une planification structurée en plusieurs étapes (indisponible dans Claude Code).\n- **Compression de contexte à deux couches** — découpe basée sur des règles + résumé par IA, configurable via `preserve_last_n_turns`.\n- **Édition de notebooks** — `NotebookEdit` manipule directement le JSON `.ipynb` (remplacer/insérer/supprimer des cellules) sans noyau requis.\n- **Diagnostics sans serveur LSP** — `GetDiagnostics` enchaîne pyright → mypy → flake8 → py_compile pour Python, et tsc/shellcheck pour les autres langages, sans configuration.\n- **Saisie vocale hors ligne** — `/voice` enregistre via `sounddevice`/`arecord`/SoX, transcrit avec `faster-whisper` local (sans clé API ni abonnement), puis soumet automatiquement. Les termes clés provenant de votre branche git et des fichiers du projet améliorent la précision sur le vocabulaire du code.\n\n### Différences de conception clés\n\n**Boucle agent** — Nano utilise un générateur Python qui `yield` des événements typés (`TextChunk`, `ToolStart`, `ToolEnd`, `TurnDone`). Toute la boucle est visible dans un seul fichier, ce qui facilite l’ajout de hooks, de rendus personnalisés ou de logs.\n\n**Enregistrement des outils** — chaque outil est une dataclass `ToolDef(name, schema, func, read_only, concurrent_safe)`. N’importe quel module peut appeler `register_tool()` à l’import ; les serveurs MCP, plugins et compétences utilisent tous le même mécanisme.\n\n**Compression de contexte**\n\n| | Claude Code | Nano Claude Code |\n|-|-------------|-----------------|\n| Déclenchement | Compte exact de tokens | estimation `len / 3.5`, déclenchement à 70 % |\n| Couche 1 | — | Snip : tronque les anciennes sorties d’outils (sans coût API) |\n| Couche 2 | Résumé par IA | Résumé par IA des anciens tours |\n| Contrôle | Géré par le système | paramètre `preserve_last_n_turns` |\n\n**Mémoire** — le service `extractMemories` de Claude Code fait remonter proactivement des faits par le modèle. Le package `memory/` de Nano est piloté par des outils : le modèle appelle explicitement `MemorySave`, ce qui est plus prévisible et plus auditable.\n\n### Qui devrait utiliser Nano Claude Code\n\n- Les développeurs qui veulent **utiliser un modèle local ou non-Anthropic** comme assistant de codage.\n- Les chercheurs qui étudient **le fonctionnement des assistants de codage agentiques** — tout le système tient sur un écran.\n- Les équipes qui ont besoin d’**une base hackable** pour ajouter des outils propriétaires, des politiques d’autorisation personnalisées ou des types d’agents spécialisés.\n- Toute personne qui veut la productivité de Claude Code **sans chaîne de build Node.js**.\n\n---\n\n## Fonctionnalités\n\n| Fonctionnalité | Détails |\n|---|---|\n| Multi-fournisseur | Anthropic · OpenAI · Gemini · Kimi · Qwen · Zhipu · DeepSeek · Ollama · LM Studio · endpoint personnalisé |\n| REPL interactive | historique readline, auto-complétion Tab pour les slash commands |\n| Boucle agent | API en streaming + boucle automatique d’utilisation des outils |\n| 23 outils intégrés | Read · Write · Edit · Bash · Glob · Grep · WebFetch · WebSearch · **NotebookEdit** · **GetDiagnostics** · MemorySave · MemoryDelete · MemorySearch · MemoryList · Agent · SendMessage · CheckAgentResult · ListAgentTasks · ListAgentTypes · Skill · SkillList · AskUserQuestion · TaskCreate/Update/Get/List · *(outils MCP + plugins ajoutés automatiquement au démarrage)* |\n| Intégration MCP | Connecte n’importe quel serveur MCP (stdio/SSE/HTTP), outils auto-enregistrés et appelables par Claude |\n| Système de plugins | Installer/désinstaller/activer/désactiver/mettre à jour des plugins depuis des URL git ou des chemins locaux ; multi-portée (utilisateur/projet) ; moteur de recommandation |\n| AskUserQuestion | Claude peut s’arrêter et poser une question de clarification à l’utilisateur en cours de tâche, avec options numérotées facultatives |\n| Gestion des tâches | Outils TaskCreate/Update/Get/List ; IDs séquentiels ; arêtes de dépendance ; métadonnées ; persistance vers `.nano_claude/tasks.json` ; commande REPL `/tasks` |\n| Vue diff | Affichage diff rouge/vert de style git pour Edit et Write |\n| Compression de contexte | Compactage automatique des longues conversations pour rester dans les limites du modèle |\n| Mémoire persistante | Mémoire à double portée (utilisateur + projet) avec 4 types, recherche par IA, avertissements d’obsolescence |\n| Multi-agent | Lance des sous-agents typés (coder/reviewer/researcher/…), isolation git worktree, mode arrière-plan |\n| Compétences | `/commit` · `/review` intégrées + compétences Markdown personnalisées avec substitution d’arguments et exécution fork/inline |\n| Outils plugin | Enregistrement d’outils personnalisés via `tool_registry.py` |\n| Système d’autorisations | modes `auto` / `accept-all` / `manual` |\n| 18 commandes slash | `/model` · `/config` · `/save` · `/cost` · `/memory` · `/skills` · `/agents` · `/voice` · … |\n| Saisie vocale | Enregistrer → transcrire → soumettre automatiquement. Backends : `sounddevice` / `arecord` / SoX + `faster-whisper` / `openai-whisper` / API OpenAI. Fonctionne entièrement hors ligne. |\n| Injection de contexte | Charge automatiquement `CLAUDE.md`, l’état git, le répertoire courant, la mémoire persistante |\n| Persistance des sessions | Sauvegarde / chargement des conversations dans `~/.nano_claude/sessions/` |\n| Extended Thinking | Activable/désactivable (modèles Claude uniquement) |\n| Suivi des coûts | Utilisation des tokens + coût estimé en USD |\n| Mode non interactif | drapeau `--print` pour scripts / CI |\n\n---\n\n## Modèles pris en charge\n\n### Propriétaires (API)\n\n| Fournisseur | Modèle | Contexte | Points forts | Variable d’environnement pour clé API |\n|---|---|---|---|---|\n| **Anthropic** | `claude-opus-4-6` | 200k | Le plus capable, excellent pour le raisonnement complexe | `ANTHROPIC_API_KEY` |\n| **Anthropic** | `claude-sonnet-4-6` | 200k | Bon équilibre vitesse / qualité | `ANTHROPIC_API_KEY` |\n| **Anthropic** | `claude-haiku-4-5-20251001` | 200k | Rapide, économique | `ANTHROPIC_API_KEY` |\n| **OpenAI** | `gpt-4o` | 128k | Multimodal fort et performant en code | `OPENAI_API_KEY` |\n| **OpenAI** | `gpt-4o-mini` | 128k | Rapide, peu coûteux | `OPENAI_API_KEY` |\n| **OpenAI** | `o3-mini` | 200k | Raisonnement solide | `OPENAI_API_KEY` |\n| **OpenAI** | `o1` | 200k | Raisonnement avancé | `OPENAI_API_KEY` |\n| **Google** | `gemini-2.5-pro-preview-03-25` | 1M | Long contexte, multimodal | `GEMINI_API_KEY` |\n| **Google** | `gemini-2.0-flash` | 1M | Rapide, grand contexte | `GEMINI_API_KEY` |\n| **Google** | `gemini-1.5-pro` | 2M | Plus grande fenêtre de contexte | `GEMINI_API_KEY` |\n| **Moonshot (Kimi)** | `moonshot-v1-8k` | 8k | Chinois & anglais | `MOONSHOT_API_KEY` |\n| **Moonshot (Kimi)** | `moonshot-v1-32k` | 32k | Chinois & anglais | `MOONSHOT_API_KEY` |\n| **Moonshot (Kimi)** | `moonshot-v1-128k` | 128k | Long contexte | `MOONSHOT_API_KEY` |\n| **Alibaba (Qwen)** | `qwen-max` | 32k | Meilleure qualité Qwen | `DASHSCOPE_API_KEY` |\n| **Alibaba (Qwen)** | `qwen-plus` | 128k | Équilibré | `DASHSCOPE_API_KEY` |\n| **Alibaba (Qwen)** | `qwen-turbo` | 1M | Rapide, économique | `DASHSCOPE_API_KEY` |\n| **Alibaba (Qwen)** | `qwq-32b` | 32k | Raisonnement solide | `DASHSCOPE_API_KEY` |\n| **Zhipu (GLM)** | `glm-4-plus` | 128k | Meilleure qualité GLM | `ZHIPU_API_KEY` |\n| **Zhipu (GLM)** | `glm-4` | 128k | Usage général | `ZHIPU_API_KEY` |\n| **Zhipu (GLM)** | `glm-4-flash` | 128k | Niveau gratuit disponible | `ZHIPU_API_KEY` |\n| **DeepSeek** | `deepseek-chat` | 64k | Solide en code | `DEEPSEEK_API_KEY` |\n| **DeepSeek** | `deepseek-reasoner` | 64k | Raisonnement avec chaîne de pensée | `DEEPSEEK_API_KEY` |\n\n### Open source (local via Ollama)\n\n| Modèle | Taille | Points forts | Commande de téléchargement |\n|---|---|---|---|\n| `llama3.3` | 70B | Usage général, bon raisonnement | `ollama pull llama3.3` |\n| `llama3.2` | 3B / 11B | Léger | `ollama pull llama3.2` |\n| `qwen2.5-coder` | 7B / 32B | **Meilleur pour les tâches de code** | `ollama pull qwen2.5-coder` |\n| `qwen2.5` | 7B / 72B | Chinois & anglais | `ollama pull qwen2.5` |\n| `deepseek-r1` | 7B–70B | Raisonnement, mathématiques | `ollama pull deepseek-r1` |\n| `deepseek-coder-v2` | 16B | Code | `ollama pull deepseek-coder-v2` |\n| `mistral` | 7B | Rapide, efficace | `ollama pull mistral` |\n| `mixtral` | 8x7B | Modèle MoE performant | `ollama pull mixtral` |\n| `phi4` | 14B | Microsoft, bon raisonnement | `ollama pull phi4` |\n| `gemma3` | 4B / 12B / 27B | Modèle ouvert de Google | `ollama pull gemma3` |\n| `codellama` | 7B / 34B | Génération de code | `ollama pull codellama` |\n\n> **Remarque :** l’appel d’outils nécessite un modèle prenant en charge le function calling. Modèles locaux recommandés : `qwen2.5-coder`, `llama3.3`, `mistral`, `phi4`.\n\n---\n\n## Installation\n\n```bash\ngit clone <repo-url>\ncd nano_claude_code\n\npip install -r requirements.txt\n# ou manuellement :\npip install anthropic openai httpx rich sounddevice\n```\n\n---\n\n## Utilisation : modèles API propriétaires\n\n### Anthropic Claude\n\nObtenez votre clé API sur [console.anthropic.com](https://console.anthropic.com).\n\n```bash\nexport ANTHROPIC_API_KEY=sk-ant-api03-...\n\n# Modèle par défaut (claude-opus-4-6)\npython nano_claude.py\n\n# Choisir un modèle spécifique\npython nano_claude.py --model claude-sonnet-4-6\npython nano_claude.py --model claude-haiku-4-5-20251001\n\n# Activer Extended Thinking\npython nano_claude.py --model claude-opus-4-6 --thinking --verbose\n```\n\n### OpenAI GPT\n\nObtenez votre clé API sur [platform.openai.com](https://platform.openai.com).\n\n```bash\nexport OPENAI_API_KEY=sk-...\n\npython nano_claude.py --model gpt-4o\npython nano_claude.py --model gpt-4o-mini\npython nano_claude.py --model gpt-4.1-mini\npython nano_claude.py --model o3-mini\n```\n\n### Google Gemini\n\nObtenez votre clé API sur [aistudio.google.com](https://aistudio.google.com).\n\n```bash\nexport GEMINI_API_KEY=AIza...\n\npython nano_claude.py --model gemini/gemini-2.0-flash\npython nano_claude.py --model gemini/gemini-1.5-pro\npython nano_claude.py --model gemini/gemini-2.5-pro-preview-03-25\n```\n\n### Kimi (Moonshot AI)\n\nObtenez votre clé API sur [platform.moonshot.cn](https://platform.moonshot.cn).\n\n```bash\nexport MOONSHOT_API_KEY=sk-...\n\npython nano_claude.py --model kimi/moonshot-v1-32k\npython nano_claude.py --model kimi/moonshot-v1-128k\n```\n\n### Qwen (Alibaba DashScope)\n\nObtenez votre clé API sur [dashscope.aliyun.com](https://dashscope.aliyun.com).\n\n```bash\nexport DASHSCOPE_API_KEY=sk-...\n\npython nano_claude.py --model qwen/Qwen3.5-Plus\npython nano_claude.py --model qwen/Qwen3-MAX\npython nano_claude.py --model qwen/Qwen3.5-Flash\n```\n\n### Zhipu GLM\n\nObtenez votre clé API sur [open.bigmodel.cn](https://open.bigmodel.cn).\n\n```bash\nexport ZHIPU_API_KEY=...\n\npython nano_claude.py --model zhipu/glm-4-plus\npython nano_claude.py --model zhipu/glm-4-flash # niveau gratuit\n```\n\n### DeepSeek\n\nObtenez votre clé API sur [platform.deepseek.com](https://platform.deepseek.com).\n\n```bash\nexport DEEPSEEK_API_KEY=sk-...\n\npython nano_claude.py --model deepseek/deepseek-chat\npython nano_claude.py --model deepseek/deepseek-reasoner\n```\n\n---\n\n## Utilisation : modèles open source (local)\n\n### Option A — Ollama (recommandé)\n\nOllama exécute les modèles localement sans configuration. Aucune clé API requise.\n\n**Étape 1 : installer Ollama**\n\n```bash\n# macOS / Linux\ncurl -fsSL https://ollama.com/install.sh | sh\n\n# Ou télécharger depuis https://ollama.com/download\n```\n\n**Étape 2 : télécharger un modèle**\n\n```bash\n# Meilleur pour le code (recommandé)\nollama pull qwen2.5-coder # 4.7 GB (7B)\nollama pull qwen2.5-coder:32b # 19 GB (32B)\n\n# Usage général\nollama pull llama3.3 # 42 GB (70B)\nollama pull llama3.2 # 2.0 GB (3B)\n\n# Raisonnement\nollama pull deepseek-r1 # 4.7 GB (7B)\nollama pull deepseek-r1:32b # 19 GB (32B)\n\n# Autres\nollama pull phi4 # 9.1 GB (14B)\nollama pull mistral # 4.1 GB (7B)\n```\n\n**Étape 3 : démarrer le serveur Ollama** (automatique sur macOS ; sur Linux, lancez-le manuellement)\n\n```bash\nollama serve # démarre sur http://localhost:11434\n```\n\n**Étape 4 : lancer nano claude**\n\n```bash\npython nano_claude.py --model ollama/qwen2.5-coder\npython nano_claude.py --model ollama/llama3.3\npython nano_claude.py --model ollama/deepseek-r1\n```\n\n**Lister les modèles disponibles localement :**\n\n```bash\nollama list\n```\n\nPuis utilisez n’importe quel modèle de la liste :\n\n```bash\npython nano_claude.py --model ollama/<nom-du-modèle>\n```\n\n---\n\n### Option B — LM Studio\n\nLM Studio fournit une interface graphique pour télécharger et exécuter des modèles, avec un serveur intégré compatible OpenAI.\n\n**Étape 1 :** Téléchargez [LM Studio](https://lmstudio.ai) et installez-le.\n\n**Étape 2 :** Recherchez et téléchargez un modèle dans LM Studio (format GGUF).\n\n**Étape 3 :** Allez dans l’onglet **Local Server** → cliquez sur **Start Server** (port par défaut : 1234).\n\n**Étape 4 :**\n\n```bash\npython nano_claude.py --model lmstudio/<nom-du-modèle>\n# par ex. :\npython nano_claude.py --model lmstudio/phi-4-GGUF\npython nano_claude.py --model lmstudio/qwen2.5-coder-7b\n```\n\nLe nom du modèle doit correspondre à celui affiché par LM Studio dans la barre d’état du serveur.\n\n---\n\n### Option C — vLLM / serveur auto-hébergé compatible OpenAI\n\nPour les serveurs d’inférence auto-hébergés (vLLM, TGI, serveur llama.cpp, etc.) exposant une API compatible OpenAI :\n\nDémarrage rapide pour l’option C : \nÉtape 1 : démarrer vllm :\n```bash\nCUDA_VISIBLE_DEVICES=7 python -m vllm.entrypoints.openai.api_server \\\n --model Qwen/Qwen2.5-Coder-7B-Instruct \\\n --host 0.0.0.0 \\\n --port 8000 \\\n --enable-auto-tool-choice \\\n --tool-call-parser hermes\n```\n\nÉtape 2 : démarrer nano claude :\n```bash\nexport CUSTOM_BASE_URL=http://localhost:8000/v1\nexport CUSTOM_API_KEY=none\npython nano_claude.py --model custom/Qwen/Qwen2.5-Coder-7B-Instruct\n```\n\n```bash\n# Exemple : vLLM sert Qwen2.5-Coder-32B\npython -m vllm.entrypoints.openai.api_server \\\n --model Qwen/Qwen2.5-Coder-32B-Instruct \\\n --port 8000\n\n# Puis lancez nano claude pointant vers votre serveur :\npython nano_claude.py\n```\n\nDans le REPL :\n\n```text\n/config custom_base_url=http://localhost:8000/v1\n/config custom_api_key=token-abc123 # ignorer si pas d’auth\n/model custom/Qwen2.5-Coder-32B-Instruct\n```\n\nOu via des variables d’environnement :\n\n```bash\nexport CUSTOM_BASE_URL=http://localhost:8000/v1\nexport CUSTOM_API_KEY=token-abc123\n\npython nano_claude.py --model custom/Qwen2.5-Coder-32B-Instruct\n```\n\nPour un serveur GPU distant :\n\n```bash\n/config custom_base_url=http://192.168.1.100:8000/v1\n/model custom/your-model-name\n```\n\n---\n\n## Format du nom de modèle\n\nTrois formats équivalents sont pris en charge :\n\n```bash\n# 1. Détection automatique par préfixe (fonctionne pour les modèles connus)\npython nano_claude.py --model gpt-4o\npython nano_claude.py --model gemini-2.0-flash\npython nano_claude.py --model deepseek-chat\n\n# 2. Préfixe explicite de fournisseur avec slash\npython nano_claude.py --model ollama/qwen2.5-coder\npython nano_claude.py --model kimi/moonshot-v1-128k\n\n# 3. Préfixe explicite de fournisseur avec deux-points (fonctionne aussi)\npython nano_claude.py --model kimi:moonshot-v1-32k\npython nano_claude.py --model qwen:qwen-max\n```\n\n**Règles de détection automatique :**\n\n| Préfixe du modèle | Fournisseur détecté |\n|---|---|\n| `claude-` | anthropic |\n| `gpt-`, `o1`, `o3` | openai |\n| `gemini-` | gemini |\n| `moonshot-`, `kimi-` | kimi |\n| `qwen`, `qwq-` | qwen |\n| `glm-` | zhipu |\n| `deepseek-` | deepseek |\n| `llama`, `mistral`, `phi`, `gemma`, `mixtral`, `codellama` | ollama |\n\n---\n\n## Référence CLI\n\n```text\npython nano_claude.py [OPTIONS] [PROMPT]\n\nOptions :\n -p, --print Mode non interactif : exécute le prompt puis quitte\n -m, --model MODEL Remplace le modèle (ex. gpt-4o, ollama/llama3.3)\n --accept-all Approuve automatiquement toutes les opérations (sans demande d’autorisation)\n --verbose Affiche les blocs de raisonnement et le nombre de tokens par tour\n --thinking Active Extended Thinking (Claude uniquement)\n --version Affiche la version puis quitte\n -h, --help Affiche l’aide\n```\n\n**Exemples :**\n\n```bash\n# REPL interactive avec le modèle par défaut\npython nano_claude.py\n\n# Changer de modèle au démarrage\npython nano_claude.py --model gpt-4o\npython nano_claude.py -m ollama/deepseek-r1:32b\n\n# Mode non interactif / scripting\npython nano_claude.py --print \"Write a Python fibonacci function\"\npython nano_claude.py -p \"Explain the Rust borrow checker in 3 sentences\" -m gemini/gemini-2.0-flash\n\n# CI / automatisation (sans demande d’autorisation)\npython nano_claude.py --accept-all --print \"Initialize a Python project with pyproject.toml\"\n\n# Mode debug (voir tokens + raisonnement)\npython nano_claude.py --thinking --verbose\n```\n\n---\n\n## Commandes slash (REPL)\n\nTapez `/` puis appuyez sur **Tab** pour l’auto-complétion.\n\n| Commande | Description |\n|---|---|\n| `/help` | Afficher toutes les commandes |\n| `/clear` | Effacer l’historique de conversation |\n| `/model` | Afficher le modèle courant + lister tous les modèles disponibles |\n| `/model <name>` | Changer de modèle (prend effet immédiatement) |\n| `/config` | Afficher toutes les valeurs de configuration actuelles |\n| `/config key=value` | Définir une valeur de configuration (persistée sur disque) |\n| `/save` | Sauvegarder la session (nom automatique horodaté) |\n| `/save <filename>` | Sauvegarder la session sous un nom donné |\n| `/load` | Lister toutes les sessions sauvegardées |\n| `/load <filename>` | Charger une session sauvegardée |\n| `/history` | Afficher l’historique complet de conversation |\n| `/context` | Afficher le nombre de messages et l’estimation de tokens |\n| `/cost` | Afficher l’usage des tokens et le coût estimé en USD |\n| `/verbose` | Basculer le mode verbose (tokens + raisonnement) |\n| `/thinking` | Basculer Extended Thinking (Claude uniquement) |\n| `/permissions` | Afficher le mode d’autorisation courant |\n| `/permissions <mode>` | Définir le mode d’autorisation : `auto` / `accept-all` / `manual` |\n| `/cwd` | Afficher le répertoire courant |\n| `/cwd <path>` | Changer de répertoire courant |\n| `/memory` | Lister toutes les mémoires persistantes |\n| `/memory <query>` | Rechercher des mémoires par mot-clé |\n| `/skills` | Lister les compétences disponibles |\n| `/agents` | Afficher l’état des tâches des sous-agents |\n| `/mcp` | Lister les serveurs MCP configurés et leurs outils |\n| `/mcp reload` | Reconnecter tous les serveurs MCP et rafraîchir les outils |\n| `/mcp reload <name>` | Reconnecter un seul serveur MCP |\n| `/mcp add <name> <cmd> [args]` | Ajouter un serveur MCP stdio à la config utilisateur |\n| `/mcp remove <name>` | Supprimer un serveur de la config utilisateur |\n| `/voice` | Enregistrer la voix, transcrire avec Whisper, soumettre automatiquement comme prompt |\n| `/voice status` | Afficher la disponibilité des backends d’enregistrement et STT |\n| `/voice lang <code>` | Définir la langue STT (ex. `zh`, `en`, `ja`; `auto` pour détection) |\n| `/exit` / `/quit` | Quitter |\n\n**Changer de modèle dans une session :**\n\n```text\n[myproject] ❯ /model\n Modèle courant : claude-opus-4-6 (fournisseur : anthropic)\n\n Modèles disponibles par fournisseur :\n anthropic claude-opus-4-6, claude-sonnet-4-6, ...\n openai gpt-4o, gpt-4o-mini, o3-mini, ...\n ollama llama3.3, llama3.2, phi4, mistral, ...\n ...\n\n[myproject] ❯ /model gpt-4o\n Modèle défini sur gpt-4o (fournisseur : openai)\n\n[myproject] ❯ /model ollama/qwen2.5-coder\n Modèle défini sur ollama/qwen2.5-coder (fournisseur : ollama)\n```\n\n---\n\n## Configuration des clés API\n\n### Méthode 1 : variables d’environnement (recommandé)\n\n```bash\n# Ajouter à ~/.bashrc ou ~/.zshrc\nexport ANTHROPIC_API_KEY=sk-ant-...\nexport OPENAI_API_KEY=sk-...\nexport GEMINI_API_KEY=AIza...\nexport MOONSHOT_API_KEY=sk-... # Kimi\nexport DASHSCOPE_API_KEY=sk-... # Qwen\nexport ZHIPU_API_KEY=... # Zhipu GLM\nexport DEEPSEEK_API_KEY=sk-... # DeepSeek\n```\n\n### Méthode 2 : définir dans le REPL (persisté)\n\n```text\n/config anthropic_api_key=sk-ant-...\n/config openai_api_key=sk-...\n/config gemini_api_key=AIza...\n/config kimi_api_key=sk-...\n/config qwen_api_key=sk-...\n/config zhipu_api_key=...\n/config deepseek_api_key=sk-...\n```\n\nLes clés sont enregistrées dans `~/.nano_claude/config.json` et chargées automatiquement au prochain lancement.\n\n### Méthode 3 : éditer directement le fichier de configuration\n\n```json\n// ~/.nano_claude/config.json\n{\n \"model\": \"qwen/qwen-max\",\n \"max_tokens\": 8192,\n \"permission_mode\": \"auto\",\n \"verbose\": false,\n \"thinking\": false,\n \"qwen_api_key\": \"sk-...\",\n \"kimi_api_key\": \"sk-...\",\n \"deepseek_api_key\": \"sk-...\"\n}\n```\n\n---\n\n## Système d’autorisations\n\n| Mode | Comportement |\n|---|---|\n| `auto` (par défaut) | Les opérations en lecture seule sont toujours autorisées. Demande une confirmation avant les commandes Bash et les écritures de fichiers. |\n| `accept-all` | Ne demande jamais. Toutes les opérations s’exécutent automatiquement. |\n| `manual` | Demande une confirmation avant chaque opération, y compris les lectures. |\n\n**Lorsqu’une invite apparaît :**\n\n```text\n Autoriser : Exécuter : git commit -am \"fix bug\" [y/N/a(ccept-all)]\n```\n\n- `y` — approuver cette action\n- `n` ou Entrée — refuser\n- `a` — approuver et passer en `accept-all` pour le reste de la session\n\n**Commandes toujours auto-approuvées en mode `auto` :** \n`ls`, `cat`, `head`, `tail`, `wc`, `pwd`, `echo`, `git status`, `git log`, `git diff`, `git show`, `find`, `grep`, `rg`, `python`, `node`, `pip show`, `npm list`, ainsi que les autres commandes shell en lecture seule.\n\n---\n\n## Outils intégrés\n\n### Outils principaux\n\n| Outil | Description | Paramètres clés |\n|---|---|---|\n| `Read` | Lire un fichier avec numéros de ligne | `file_path`, `limit`, `offset` |\n| `Write` | Créer ou écraser un fichier (affiche un diff) | `file_path`, `content` |\n| `Edit` | Remplacement exact de chaîne (affiche un diff) | `file_path`, `old_string`, `new_string`, `replace_all` |\n| `Bash` | Exécuter une commande shell | `command`, `timeout` (30 s par défaut) |\n| `Glob` | Trouver des fichiers par motif glob | `pattern` (ex. `**/*.py`), `path` |\n| `Grep` | Recherche regex dans les fichiers (utilise ripgrep si disponible) | `pattern`, `path`, `glob`, `output_mode` |\n| `WebFetch` | Récupérer et extraire le texte d’une URL | `url`, `prompt` |\n| `WebSearch` | Rechercher sur le web via DuckDuckGo | `query` |\n\n### Outils Notebook & diagnostics\n\n| Outil | Description | Paramètres clés |\n|---|---|---|\n| `NotebookEdit` | Modifier une cellule de notebook Jupyter (`.ipynb`) | `notebook_path`, `new_source`, `cell_id`, `cell_type`, `edit_mode` (`replace`/`insert`/`delete`) |\n| `GetDiagnostics` | Obtenir des diagnostics style LSP pour un fichier source (pyright/mypy/flake8 pour Python ; tsc/eslint pour JS/TS ; shellcheck pour shell) | `file_path`, `language` (redéfinition facultative) |\n\n### Outils mémoire\n\n| Outil | Description | Paramètres clés |\n|---|---|---|\n| `MemorySave` | Enregistrer ou mettre à jour une mémoire persistante | `name`, `type`, `description`, `content`, `scope` |\n| `MemoryDelete` | Supprimer une mémoire par nom | `name`, `scope` |\n| `MemorySearch` | Rechercher des mémoires par mot-clé (ou classement IA) | `query`, `scope`, `use_ai`, `max_results` |\n| `MemoryList` | Lister toutes les mémoires avec âge et métadonnées | `scope` |\n\n### Outils sous-agent\n\n| Outil | Description | Paramètres clés |\n|---|---|---|\n| `Agent` | Lancer un sous-agent pour une tâche | `prompt`, `subagent_type`, `isolation`, `name`, `model`, `wait` |\n| `SendMessage` | Envoyer un message à un agent en arrière-plan nommé | `name`, `message` |\n| `CheckAgentResult` | Vérifier l’état/résultat d’un agent en arrière-plan | `task_id` |\n| `ListAgentTasks` | Lister toutes les tâches d’agent actives et terminées | — |\n| `ListAgentTypes` | Lister les définitions de types d’agents disponibles | — |\n\n### Outils de compétences\n\n| Outil | Description | Paramètres clés |\n|---|---|---|\n| `Skill` | Invoquer une compétence par nom depuis la conversation | `name`, `args` |\n| `SkillList` | Lister toutes les compétences disponibles avec triggers et métadonnées | — |\n\n### Outils MCP\n\nLes outils MCP sont découverts automatiquement à partir des serveurs configurés et enregistrés sous le nom `mcp__<server>__<tool>`. Claude peut les utiliser exactement comme les outils intégrés.\n\n| Exemple de nom d’outil | Origine |\n|---|---|\n| `mcp__git__git_status` | serveur `git`, outil `git_status` |\n| `mcp__filesystem__read_file` | serveur `filesystem`, outil `read_file` |\n| `mcp__myserver__my_action` | serveur personnalisé configuré par vous |\n\n> **Ajouter des outils personnalisés :** voir le [guide d’architecture](docs/architecture.md#tool-registry) pour savoir comment enregistrer vos propres outils.\n\n---\n\n## Mémoire\n\nLe modèle peut se souvenir d’informations à travers les conversations grâce au système de mémoire intégré.\n\n**Fonctionnement :** les mémoires sont stockées sous forme de fichiers Markdown. Il existe deux portées :\n- **Portée utilisateur** (`~/.nano_claude/memory/`) — vous suit à travers tous les projets\n- **Portée projet** (`.nano_claude/memory/` dans le cwd) — spécifique au dépôt courant\n\nUn index `MEMORY.md` (≤ 200 lignes / 25 Ko) est reconstruit automatiquement à chaque sauvegarde ou suppression, puis injecté dans le prompt système afin que Claude ait toujours une vue d’ensemble.\n\n**Types de mémoire :**\n\n| Type | Usage |\n|---|---|\n| `user` | Votre rôle, vos préférences, votre contexte |\n| `feedback` | Comment vous voulez que le modèle se comporte |\n| `project` | Travail en cours, échéances, décisions |\n| `reference` | Liens vers des ressources externes |\n\n**Format d’un fichier mémoire** (`~/.nano_claude/memory/coding_style.md`) :\n```markdown\n---\nname: coding style\ndescription: Python formatting preferences\ntype: feedback\ncreated: 2026-04-02\n---\nPrefer 4-space indentation and full type hints in all Python code.\n**Why:** user explicitly stated this preference.\n**How to apply:** apply to every Python file written or edited.\n```\n\n**Exemple d’interaction :**\n\n```text\nYou: Remember that I prefer 4-space indentation and type hints in all Python code.\nAI: [calls MemorySave] Memory saved: coding_style [feedback/user]\n\nYou: /memory\n [feedback/user] coding_style (today): Python formatting preferences\n\nYou: /memory python\n [feedback/user] coding_style: Prefers 4-space indent and type hints in Python\n```\n\n**Avertissements d’obsolescence :** les mémoires âgées de plus d’un jour reçoivent une note de fraîcheur dans la sortie de `/memory`, pour vous indiquer quand les revoir ou les mettre à jour.\n\n**Recherche classée par IA :** `MemorySearch(query=\"...\", use_ai=true)` utilise le modèle pour classer les résultats par pertinence plutôt qu’avec une simple recherche par mot-clé.\n\n---\n\n## Compétences\n\nLes compétences sont des templates de prompt réutilisables qui donnent au modèle des capacités spécialisées. Deux compétences intégrées sont fournies immédiatement — sans configuration.\n\n**Compétences intégrées :**\n\n| Trigger | Description |\n|---|---|\n| `/commit` | Examiner les changements indexés et créer un commit git bien structuré |\n| `/review [PR]` | Relire du code ou un diff de PR avec un retour structuré |\n\n**Démarrage rapide — compétence personnalisée :**\n\n```bash\nmkdir -p ~/.nano_claude/skills\n```\n\nCréez `~/.nano_claude/skills/deploy.md` :\n\n```markdown\n---\nname: deploy\ndescription: Deploy to an environment\ntriggers: [/deploy]\nallowed-tools: [Bash, Read]\nwhen_to_use: Use when the user wants to deploy a version to an environment.\nargument-hint: [env] [version]\narguments: [env, version]\ncontext: inline\n---\n\nDeploy $VERSION to the $ENV environment.\nFull args: $ARGUMENTS\n```\n\nPuis utilisez-la :\n\n```text\nYou: /deploy staging 2.1.0\nAI: [deploys version 2.1.0 to staging]\n```\n\n**Substitution d’arguments :**\n- `$ARGUMENTS` — chaîne brute complète des arguments\n- `$ARG_NAME` — substitution positionnelle par argument nommé (premier mot → premier nom)\n- Les arguments manquants deviennent des chaînes vides\n\n**Modes d’exécution :**\n- `context: inline` (par défaut) — s’exécute dans l’historique de conversation courant\n- `context: fork` — s’exécute comme sous-agent isolé avec un historique vierge ; prend en charge la redéfinition de `model`\n\n**Priorité** (la plus haute gagne) : niveau projet > niveau utilisateur > intégré\n\n**Lister les compétences :** `/skills` — affiche les triggers, l’aide sur les arguments, la source et `when_to_use`\n\n**Chemins de recherche des compétences :**\n\n```text\n./.nano_claude/skills/ # niveau projet (écrase le niveau utilisateur)\n~/.nano_claude/skills/ # niveau utilisateur\n```\n\n---\n\n## Sous-agents\n\nLe modèle peut lancer des sous-agents indépendants pour traiter des tâches en parallèle.\n\n**Types d’agents spécialisés** — intégrés :\n\n| Type | Optimisé pour |\n|---|---|\n| `general-purpose` | Recherche, exploration, tâches en plusieurs étapes |\n| `coder` | Écriture, lecture et modification de code |\n| `reviewer` | Analyse de sécurité, de correction et de qualité de code |\n| `researcher` | Recherche web et consultation de documentation |\n| `tester` | Écriture et exécution de tests |\n\n**Utilisation de base :**\n```text\nYou: Search this codebase for all TODO comments and summarize them.\nAI: [calls Agent(prompt=\"...\", subagent_type=\"researcher\")]\n Sub-agent reads files, greps for TODOs...\n Result: Found 12 TODOs across 5 files...\n```\n\n**Mode arrière-plan** — lancer sans attendre, récupérer le résultat plus tard :\n```text\nAI: [calls Agent(prompt=\"run all tests\", name=\"test-runner\", wait=false)]\nAI: [continues other work...]\nAI: [calls CheckAgentResult / SendMessage to follow up]\n```\n\n**Isolation via git worktree** — les agents travaillent sur une branche isolée, sans conflits :\n```text\nAgent(prompt=\"refactor auth module\", isolation=\"worktree\")\n```\nLe worktree est automatiquement nettoyé si aucun changement n’a été effectué ; sinon, le nom de la branche est indiqué.\n\n**Types d’agents personnalisés** — créez `~/.nano_claude/agents/myagent.md` :\n```markdown\n---\nname: myagent\ndescription: Specialized for X\nmodel: claude-haiku-4-5-20251001\ntools: [Read, Grep, Bash]\n---\nExtra system prompt for this agent type.\n```\n\n**Lister les agents en cours :** `/agents`\n\nLes sous-agents ont un historique de conversation indépendant, partagent le système de fichiers et sont limités à 3 niveaux d’imbrication.\n\n---\n\n## MCP (Model Context Protocol)\n\nMCP vous permet de connecter n’importe quel serveur d’outils externe — sous-processus local ou HTTP distant — et Claude peut utiliser ses outils automatiquement. C’est le même protocole que Claude Code utilise pour étendre ses capacités.\n\n### Transports pris en charge\n\n| Transport | Config `type` | Description |\n|---|---|---|\n| **stdio** | `\"stdio\"` | Lance un sous-processus local (cas le plus courant) |\n| **SSE** | `\"sse\"` | Flux HTTP Server-Sent Events |\n| **HTTP** | `\"http\"` | POST HTTP streamable (serveurs plus récents) |\n\n### Configuration\n\nPlacez un fichier `.mcp.json` dans le répertoire de votre projet **ou** modifiez `~/.nano_claude/mcp.json` pour des serveurs globaux à l’utilisateur.\n\n```json\n{\n \"mcpServers\": {\n \"git\": {\n \"type\": \"stdio\",\n \"command\": \"uvx\",\n \"args\": [\"mcp-server-git\"]\n },\n \"filesystem\": {\n \"type\": \"stdio\",\n \"command\": \"uvx\",\n \"args\": [\"mcp-server-filesystem\", \"/tmp\"]\n },\n \"my-remote\": {\n \"type\": \"sse\",\n \"url\": \"http://localhost:8080/sse\",\n \"headers\": {\"Authorization\": \"Bearer my-token\"}\n }\n }\n}\n```\n\nPriorité de config : `.mcp.json` (projet) remplace `~/.nano_claude/mcp.json` (utilisateur) par nom de serveur.\n\n### Démarrage rapide\n\n```bash\n# Installer un serveur MCP populaire\npip install uv # uv inclut uvx\nuvx mcp-server-git --help # vérifier qu’il fonctionne\n\n# Ajouter à la config utilisateur via le REPL\n/mcp add git uvx mcp-server-git\n\n# Ou créer .mcp.json dans le répertoire du projet, puis :\n/mcp reload\n```\n\n### Commandes REPL\n\n```text\n/mcp # lister les serveurs + leurs outils + l’état de connexion\n/mcp reload # reconnecter tous les serveurs, rafraîchir la liste des outils\n/mcp reload git # reconnecter un seul serveur\n/mcp add myserver uvx mcp-server-x # ajouter un serveur stdio\n/mcp remove myserver # supprimer de la config utilisateur\n```\n\n### Comment Claude utilise les outils MCP\n\nUne fois connecté, Claude peut appeler directement les outils MCP :\n\n```text\nYou: What files changed in the last git commit?\nAI: [calls mcp__git__git_diff_staged()]\n → shows diff output from the git MCP server\n```\n\nLes noms d’outils suivent le motif `mcp__<server_name>__<tool_name>`. Tous les caractères\nnon alphanumériques ou différents de `_` sont automatiquement remplacés par `_`.\n\n### Serveurs MCP populaires\n\n| Serveur | Installation | Fournit |\n|---|---|---|\n| `mcp-server-git` | `uvx mcp-server-git` | opérations git (status, diff, log, commit) |\n| `mcp-server-filesystem` | `uvx mcp-server-filesystem <path>` | lecture/écriture/liste de fichiers |\n| `mcp-server-fetch` | `uvx mcp-server-fetch` | outil de récupération HTTP |\n| `mcp-server-postgres` | `uvx mcp-server-postgres <conn-str>` | requêtes PostgreSQL |\n| `mcp-server-sqlite` | `uvx mcp-server-sqlite --db-path x.db` | requêtes SQLite |\n| `mcp-server-brave-search` | `uvx mcp-server-brave-search` | recherche web Brave |\n\n> Parcourez le registre complet sur [modelcontextprotocol.io/servers](https://modelcontextprotocol.io/servers)\n\n---\n\n## Système de plugins\n\nLe package `plugin/` vous permet d’étendre nano-claude-code avec des outils, compétences et serveurs MCP supplémentaires depuis des dépôts git ou des répertoires locaux.\n\n### Installer un plugin\n\n```bash\n/plugin install my-plugin@https://github.com/user/my-plugin\n/plugin install local-plugin@/path/to/local/plugin\n```\n\n### Gérer les plugins\n\n```bash\n/plugin # lister les plugins installés\n/plugin enable my-plugin # activer un plugin désactivé\n/plugin disable my-plugin # désactiver sans désinstaller\n/plugin disable-all # désactiver tous les plugins\n/plugin update my-plugin # récupérer la dernière version depuis git\n/plugin uninstall my-plugin\n/plugin info my-plugin # afficher les détails du manifeste\n```\n\n### Moteur de recommandation de plugins\n\n```bash\n/plugin recommend # détection automatique à partir des fichiers du projet\n/plugin recommend \"docker database\" # recommander selon un contexte de mots-clés\n```\n\nLe moteur met en correspondance votre contexte avec une marketplace organisée (git-tools, python-linter, docker-tools, sql-tools, test-runner, diagram-tools, aws-tools, web-scraper) à l’aide d’un score basé sur tags et mots-clés.\n\n### Manifeste de plugin (plugin.json)\n\n```json\n{\n \"name\": \"my-plugin\",\n \"version\": \"0.1.0\",\n \"description\": \"Does something useful\",\n \"author\": \"you\",\n \"tags\": [\"git\", \"python\"],\n \"tools\": [\"tools\"], // Python module(s) that export TOOL_DEFS\n \"skills\": [\"skills/my.md\"],\n \"mcp_servers\": {},\n \"dependencies\": [\"httpx\"] // pip packages\n}\n```\n\nVous pouvez aussi utiliser un frontmatter YAML dans `PLUGIN.md`.\n\n### Portées\n\n| Portée | Emplacement | Config |\n|-------|----------|--------|\n| utilisateur (par défaut) | `~/.nano_claude/plugins/` | `~/.nano_claude/plugins.json` |\n| projet | `.nano_claude/plugins/` | `.nano_claude/plugins.json` |\n\nUtilisez le drapeau `--project` : `/plugin install name@url --project`\n\n---\n\n## Outil AskUserQuestion\n\nClaude peut s’arrêter en cours de tâche et vous poser une question interactive avant de continuer.\n\n**Exemple d’appel par Claude :**\n```json\n{\n \"tool\": \"AskUserQuestion\",\n \"question\": \"Which database should I use?\",\n \"options\": [\n {\"label\": \"SQLite\", \"description\": \"Simple, file-based\"},\n {\"label\": \"PostgreSQL\", \"description\": \"Full-featured, requires server\"}\n ],\n \"allow_freetext\": true\n}\n```\n\n**Ce que vous voyez dans le terminal :**\n```text\n❓ Question from assistant:\n Which database should I use?\n\n [1] SQLite — Simple, file-based\n [2] PostgreSQL — Full-featured, requires server\n [0] Type a custom answer\n\nYour choice (number or text):\n```\n\n- Sélectionnez par numéro ou tapez directement une réponse libre\n- Claude reçoit votre réponse et poursuit la tâche\n- Délai d’attente de 5 minutes (retourne `\"(no answer — timeout)\"` en cas d’absence de réponse)\n\n---\n\n## Gestion des tâches\n\nLe package `task/` fournit à Claude (et à vous) une liste structurée de tâches pour suivre un travail en plusieurs étapes au sein d’une session.\n\n### Outils disponibles pour Claude\n\n| Outil | Paramètres | Ce qu’il fait |\n|------|-----------|--------------|\n| `TaskCreate` | `subject`, `description`, `active_form?`, `metadata?` | Crée une tâche ; retourne `#id created: subject` |\n| `TaskUpdate` | `task_id`, `subject?`, `description?`, `status?`, `owner?`, `add_blocks?`, `add_blocked_by?`, `metadata?` | Met à jour n’importe quel champ ; `status='deleted'` supprime la tâche |\n| `TaskGet` | `task_id` | Retourne tous les détails d’une tâche |\n| `TaskList` | _(none)_ | Liste toutes les tâches avec icônes d’état et bloqueurs en attente |\n\n**Statuts valides :** `pending` → `in_progress` → `completed` / `cancelled` / `deleted`\n\n### Arêtes de dépendance\n\n```text\nTaskUpdate(task_id=\"3\", add_blocked_by=[\"1\",\"2\"])\n# La tâche 3 est maintenant bloquée par les tâches 1 et 2.\n# Les arêtes inverses sont définies automatiquement : les tâches 1 et 2 reçoivent la tâche 3 dans leur liste \"blocks\".\n```\n\nLes tâches terminées sont considérées comme résolues — `TaskList` masque leur effet bloquant sur les dépendants.\n\n### Persistance\n\nLes tâches sont enregistrées dans `.nano_claude/tasks.json` dans le répertoire courant après chaque mutation et rechargées au premier accès.\n\n### Commandes REPL\n\n```text\n/tasks lister toutes les tâches\n/tasks create <subject> créer rapidement une tâche\n/tasks start <id> marquer in_progress\n/tasks done <id> marquer completed\n/tasks cancel <id> marquer cancelled\n/tasks delete <id> supprimer une tâche\n/tasks get <id> afficher tous les détails\n/tasks clear supprimer toutes les tâches\n```\n\n### Workflow typique de Claude\n\n```text\nUser: implement the login feature\n\nClaude:\n TaskCreate(subject=\"Design auth schema\", description=\"JWT vs session\") → #1\n TaskCreate(subject=\"Write login endpoint\", description=\"POST /auth/login\") → #2\n TaskCreate(subject=\"Write tests\", description=\"Unit + integration\") → #3\n TaskUpdate(task_id=\"2\", add_blocked_by=[\"1\"])\n TaskUpdate(task_id=\"3\", add_blocked_by=[\"2\"])\n\n TaskUpdate(task_id=\"1\", status=\"in_progress\", active_form=\"Designing schema\")\n ... (does the work) ...\n TaskUpdate(task_id=\"1\", status=\"completed\")\n TaskList() → task 2 is now unblocked\n ...\n```\n\n---\n\n## Saisie vocale\n\nNano Claude Code v3.05 ajoute une chaîne voix-vers-prompt entièrement hors ligne. Dites votre demande à voix haute — elle est transcrite et envoyée comme si vous l’aviez tapée.\n\n### Démarrage rapide\n\n```bash\n# 1. Installer un backend d’enregistrement (choisissez-en un)\npip install sounddevice # recommandé : multiplateforme, pas de binaire supplémentaire\n# sudo apt install alsa-utils # fallback arecord sous Linux\n# sudo apt install sox # fallback SoX rec\n\n# 2. Installer un backend STT local (recommandé — hors ligne, sans clé API)\npip install faster-whisper numpy\n\n# 3. Démarrer Nano Claude Code et parler\npython nano_claude.py\n[myproject] ❯ /voice\n 🎙 Listening… (speak now, auto-stops on silence, Ctrl+C to cancel)\n 🎙 ████\n✓ Transcribed: \"fix the authentication bug in user.py\"\n[auto-submitting…]\n```\n\n### Backends STT (essayés dans cet ordre)\n\n| Backend | Installation | Remarques |\n|---|---|---|\n| `faster-whisper` | `pip install faster-whisper` | **Recommandé** — local, hors ligne, le plus rapide, GPU facultatif |\n| `openai-whisper` | `pip install openai-whisper` | Local, hors ligne, modèle original d’OpenAI |\n| API OpenAI Whisper | définir `OPENAI_API_KEY` | Cloud, nécessite Internet + clé API |\n\nRedéfinissez la taille du modèle Whisper avec `NANO_CLAUDE_WHISPER_MODEL` (par défaut : `base`) :\n\n```bash\nexport NANO_CLAUDE_WHISPER_MODEL=small # meilleure précision, plus lent\nexport NANO_CLAUDE_WHISPER_MODEL=tiny # le plus rapide, le plus léger\n```\n\n### Backends d’enregistrement (essayés dans cet ordre)\n\n| Backend | Installation | Remarques |\n|---|---|---|\n| `sounddevice` | `pip install sounddevice` | **Recommandé** — multiplateforme, natif Python |\n| `arecord` | `sudo apt install alsa-utils` | ALSA Linux, pas besoin de pip |\n| `sox rec` | `sudo apt install sox` / `brew install sox` | Détection de silence intégrée |\n\n### Renforcement par termes clés\n\nAvant chaque enregistrement, Nano extrait du vocabulaire lié au code depuis :\n- **La branche git** (ex. `feat/voice-input` → \"feat\", \"voice\", \"input\")\n- **Le nom de la racine du projet** (ex. \"nano-claude-code\")\n- **Les noms de base de fichiers source récents** (ex. `authentication_handler.py` → \"authentication\", \"handler\")\n- **Des termes globaux de programmation** : `MCP`, `grep`, `TypeScript`, `OAuth`, `regex`, `gRPC`, …\n\nCes termes sont transmis dans `initial_prompt` de Whisper afin que le moteur STT préfère les orthographes correctes des termes techniques.\n\n### Commandes\n\n| Commande | Description |\n|---|---|\n| `/voice` | Enregistrer la voix et soumettre automatiquement la transcription comme prochain prompt |\n| `/voice status` | Afficher les backends d’enregistrement et STT disponibles |\n| `/voice lang <code>` | Définir la langue de transcription (`en`, `zh`, `ja`, `de`, `fr`, … par défaut : `auto`) |\n\n### Comparaison avec Claude Code\n\n| | Claude Code | Nano Claude Code v3.05 |\n|---|---|---|\n| Service STT | WebSocket privé Anthropic (`voice_stream`) | `faster-whisper` / `openai-whisper` / API OpenAI |\n| OAuth Anthropic requis | Oui | **Non** |\n| Fonctionne hors ligne | Non | **Oui** (avec Whisper local) |\n| Indices de termes clés | paramètre Deepgram `keyterms` | `initial_prompt` de Whisper (git + fichiers + vocabulaire) |\n| Support des langues | Codes autorisés côté serveur | Toute langue prise en charge par Whisper |\n\n---\n\n## Compression de contexte\n\nLes longues conversations sont automatiquement compressées pour rester dans la fenêtre de contexte du modèle.\n\n**Deux couches :**\n\n1. **Snip** — les anciennes sorties d’outils (lectures de fichiers, résultats Bash) sont tronquées après quelques tours. Rapide, sans coût API.\n2. **Auto-compact** — quand l’usage des tokens dépasse 70 % de la limite de contexte, les anciens messages sont résumés par le modèle en un récapitulatif concis.\n\nTout cela se fait de manière transparente. Vous n’avez rien à faire.\n\n---\n\n## Vue diff\n\nLorsque le modèle modifie ou écrase un fichier, vous voyez un diff de style git :\n\n```diff\n Changes applied to config.py:\n\n--- a/config.py\n+++ b/config.py\n@@ -12,7 +12,7 @@\n \"model\": \"claude-opus-4-6\",\n- \"max_tokens\": 8192,\n+ \"max_tokens\": 16384,\n \"permission_mode\": \"auto\",\n```\n\nLes lignes vertes = ajouts, les lignes rouges = suppressions. Les créations de nouveaux fichiers affichent plutôt un résumé.\n\n---\n\n## Prise en charge de CLAUDE.md\n\nPlacez un fichier `CLAUDE.md` dans votre projet pour fournir au modèle un contexte persistant sur votre base de code. Nano Claude le trouve automatiquement et l’injecte dans le prompt système.\n\n```text\n~/.claude/CLAUDE.md # Global — s’applique à tous les projets\n/your/project/CLAUDE.md # Niveau projet — trouvé en remontant depuis le cwd\n```\n\n**Exemple de `CLAUDE.md` :**\n\n```markdown\n# Project: FastAPI Backend\n\n## Stack\n- Python 3.12, FastAPI, PostgreSQL, SQLAlchemy 2.0, Alembic\n- Tests: pytest, coverage target 90%\n\n## Conventions\n- Format with black, lint with ruff\n- Full type annotations required\n- New endpoints must have corresponding tests\n\n## Important Notes\n- Never hard-code credentials — use environment variables\n- Do not modify existing Alembic migration files\n- The `staging` branch deploys automatically to staging on push\n```\n\n---\n\n## Gestion des sessions\n\n```bash\n# Dans le REPL :\n/save # nom automatique : session_20260401_143022.json\n/save debug_auth_bug # sauvegarde nommée\n\n/load # lister toutes les sessions sauvegardées\n/load debug_auth_bug # reprendre une session\n/load session_20260401_143022.json\n```\n\nLes sessions sont stockées au format JSON dans `~/.nano_claude/sessions/`.\n\n---\n\n## Structure du projet\n\n```text\nnano_claude_code/\n├── nano_claude.py # Point d’entrée : REPL + slash commands + rendu diff\n├── agent.py # Boucle agent : streaming, dispatch d’outils, compaction\n├── providers.py # Multi-fournisseur : Anthropic, streaming compatible OpenAI\n├── tools.py # Outils principaux (Read/Write/Edit/Bash/Glob/Grep/Web/NotebookEdit/GetDiagnostics) + liaison au registre\n├── tool_registry.py # Registre des plugins d’outils : enregistrer, rechercher, exécuter\n├── compaction.py # Compression de contexte : snip + auto-résumé\n├── context.py # Générateur de prompt système : CLAUDE.md + git + mémoire\n├── config.py # Chargement/sauvegarde/valeurs par défaut de la config\n│\n├── multi_agent/ # Package multi-agent\n│ ├── __init__.py # Réexportations\n│ ├── subagent.py # AgentDefinition, SubAgentManager, helpers worktree\n│ └── tools.py # Agent, SendMessage, CheckAgentResult, ListAgentTasks, ListAgentTypes\n├── subagent.py # Shim de rétrocompatibilité → multi_agent/\n│\n├── memory/ # Package mémoire\n│ ├── __init__.py # Réexportations\n│ ├── types.py # MEMORY_TYPES et guide de format\n│ ├── store.py # save/load/delete/search, reconstruction de l’index MEMORY.md\n│ ├── scan.py # MemoryHeader, helpers âge/fraîcheur\n│ ├── context.py # get_memory_context(), troncature, recherche IA\n│ └── tools.py # MemorySave, MemoryDelete, MemorySearch, MemoryList\n├── memory.py # Shim de rétrocompatibilité → memory/\n│\n├── skill/ # Package compétences\n│ ├── __init__.py # Réexportations ; importe builtin pour enregistrer les compétences intégrées\n│ ├── loader.py # SkillDef, parse, load_skills, find_skill, substitute_arguments\n│ ├── builtin.py # Compétences intégrées : /commit, /review\n│ ├── executor.py # execute_skill(): inline ou sous-agent forké\n│ └── tools.py # Skill, SkillList\n├── skills.py # Shim de rétrocompatibilité → skill/\n│\n├── mcp/ # Package MCP (Model Context Protocol)\n│ ├── __init__.py # Réexportations\n│ ├── types.py # MCPServerConfig, MCPTool, MCPServerState, helpers JSON-RPC\n│ ├── client.py # StdioTransport, HttpTransport, MCPClient, MCPManager\n│ ├── config.py # Chargement de .mcp.json (projet) + ~/.nano_claude/mcp.json (utilisateur)\n│ └── tools.py # Découverte auto + enregistrement des outils MCP dans tool_registry\n│\n├── voice/ # Package de saisie vocale (v3.05)\n│ ├── __init__.py # API publique : check_voice_deps, voice_input\n│ ├── recorder.py # Capture audio : sounddevice → arecord → sox rec\n│ ├── stt.py # STT : faster-whisper → openai-whisper → API OpenAI\n│ └── keyterms.py # Vocabulaire coding depuis branche git + fichiers projet\n│\n└── tests/ # 239+ tests unitaires\n ├── test_mcp.py\n ├── test_memory.py\n ├── test_skills.py\n ├── test_subagent.py\n ├── test_tool_registry.py\n ├── test_compaction.py\n ├── test_diff_view.py\n └── test_voice.py # 29 tests de voix (sans matériel requis)\n```\n\n> **Pour les développeurs :** chaque package de fonctionnalité (`multi_agent/`, `memory/`, `skill/`, `mcp/`, `voice/`) est autonome. Ajoutez des outils personnalisés en appelant `register_tool(ToolDef(...))` depuis n’importe quel module importé par `tools.py`.\n\n---\n\n## FAQ\n\n**Q : Comment ajouter un serveur MCP ?**\n\nOption 1 — via le REPL (serveur stdio) :\n```text\n/mcp add git uvx mcp-server-git\n```\n\nOption 2 — créer `.mcp.json` dans votre projet :\n```json\n{\n \"mcpServers\": {\n \"git\": {\"type\": \"stdio\", \"command\": \"uvx\", \"args\": [\"mcp-server-git\"]}\n }\n}\n```\n\nEnsuite, exécutez `/mcp reload` ou redémarrez. Utilisez `/mcp` pour vérifier l’état de connexion.\n\n**Q : Un serveur MCP affiche une erreur. Comment le déboguer ?**\n\n```text\n/mcp # affiche le message d’erreur par serveur\n/mcp reload git # tenter une reconnexion\n```\n\nSi le serveur utilise stdio, assurez-vous que la commande est dans votre `$PATH` :\n```bash\nwhich uvx # doit afficher un chemin\nuvx mcp-server-git # exécuter manuellement pour voir les erreurs\n```\n\n**Q : Puis-je utiliser des serveurs MCP nécessitant une authentification ?**\n\nPour des serveurs HTTP/SSE avec un bearer token :\n```json\n{\n \"mcpServers\": {\n \"my-api\": {\n \"type\": \"sse\",\n \"url\": \"https://myserver.example.com/sse\",\n \"headers\": {\"Authorization\": \"Bearer sk-my-token\"}\n }\n }\n}\n```\n\nPour des serveurs stdio avec auth via variables d’environnement :\n```json\n{\n \"mcpServers\": {\n \"brave\": {\n \"type\": \"stdio\",\n \"command\": \"uvx\",\n \"args\": [\"mcp-server-brave-search\"],\n \"env\": {\"BRAVE_API_KEY\": \"your-key\"}\n }\n }\n}\n```\n\n**Q : Les appels d’outils ne fonctionnent pas avec mon modèle Ollama local.**\n\nTous les modèles ne prennent pas en charge le function calling. Utilisez l’un des modèles recommandés : `qwen2.5-coder`, `llama3.3`, `mistral` ou `phi4`.\n\n```bash\nollama pull qwen2.5-coder\npython nano_claude.py --model ollama/qwen2.5-coder\n```\n\n**Q : Comment me connecter à un serveur GPU distant exécutant vLLM ?**\n\n```text\n/config custom_base_url=http://your-server-ip:8000/v1\n/config custom_api_key=your-token\n/model custom/your-model-name\n```\n\n**Q : Comment vérifier mon coût API ?**\n\n```text\n/cost\n\n Input tokens: 3,421\n Output tokens: 892\n Est. cost: $0.0648 USD\n```\n\n**Q : Puis-je utiliser plusieurs clés API dans la même session ?**\n\nOui. Définissez toutes les clés nécessaires en amont (via variables d’environnement ou `/config`). Ensuite, changez librement de modèle — chaque appel utilisera la clé du fournisseur actif.\n\n**Q : Comment rendre un modèle disponible dans tous mes projets ?**\n\nAjoutez les clés dans `~/.bashrc` ou `~/.zshrc`. Définissez le modèle par défaut dans `~/.nano_claude/config.json` :\n\n```json\n{ \"model\": \"claude-sonnet-4-6\" }\n```\n\n**Q : Qwen / Zhipu renvoie du texte illisible.**\n\nAssurez-vous que votre `DASHSCOPE_API_KEY` / `ZHIPU_API_KEY` est correct et que le compte a suffisamment de quota. Les deux fournisseurs utilisent UTF-8 et gèrent bien le chinois.\n\n**Q : Puis-je pipeliner une entrée dans nano claude ?**\n\n```bash\necho \"Explain this file\" | python nano_claude.py --print --accept-all\ncat error.log | python nano_claude.py -p \"What is causing this error?\"\n```\n\n**Q : Comment l’exécuter comme un outil CLI depuis n’importe où ?**\n\n```bash\n# Ajouter un alias à ~/.bashrc ou ~/.zshrc\nalias nc='python /path/to/nano_claude_code/nano_claude.py'\n\n# Ou l’installer comme script\npip install -e . # si setup.py existe\n```\n\n**Q : Comment configurer la saisie vocale ?**\n\n```bash\n# Configuration minimale (locale, hors ligne, sans clé API) :\npip install sounddevice faster-whisper numpy\n\n# Puis dans le REPL :\n/voice status # vérifier que les backends sont détectés\n/voice # dicter votre prompt\n```\n\nLors de la première utilisation, `faster-whisper` télécharge automatiquement le modèle `base` (~150 Mo).\nUtilisez un modèle plus grand pour une meilleure précision : `export NANO_CLAUDE_WHISPER_MODEL=small`\n\n**Q : La saisie vocale transcrit mal mes mots (manque des termes de code).**\n\nLe booster de termes clés injecte déjà du vocabulaire technique à partir de votre branche git et des fichiers du projet.\nPour des termes métier persistants, mettez-les dans un fichier `.nano_claude/voice_keyterms.txt` (un terme par ligne) — il sera vérifié automatiquement à chaque enregistrement.\n\n**Q : Puis-je utiliser la saisie vocale en chinois / japonais / autres langues ?**\n\nOui. Définissez la langue avant l’enregistrement :\n\n```text\n/voice lang zh # chinois mandarin\n/voice lang ja # japonais\n/voice lang auto # revenir à la détection automatique (par défaut)\n```\n\nWhisper prend en charge 99 langues. La détection `auto` fonctionne bien, mais des codes explicites améliorent la précision pour les énoncés courts.\n"}}, "docs/README.DE.MD": {"b934603b2800374b315b25061bbeffb40ab6ab26": {"t": 1786067773.4767892, "n": 19908, "h": "205e4701bb0f355f", "c": "[English](https://github.com/SafeRL-Lab/nano-claude-code/blob/main/README.md) | [中文](https://github.com/SafeRL-Lab/nano-claude-code/blob/main/docs/README.CN.MD) |[한국어](https://github.com/SafeRL-Lab/nano-claude-code/blob/main/docs/README.KO.MD) | [日本語](https://github.com/SafeRL-Lab/nano-claude-code/blob/main/docs/README.JP.MD) | Deutsch | [Português](https://github.com/SafeRL-Lab/nano-claude-code/blob/main/docs/README.ES.MD)\n\n<div align=\"center\">\n <a href=\"[https://github.com/SafeRL-Lab/Robust-Gymnasium](https://github.com/SafeRL-Lab/nano-claude-code)\">\n <img src=\"https://github.com/SafeRL-Lab/nano-claude-code/blob/main/docs/logo-v1.png\" alt=\"Logo\" width=\"280\"> \n </a>\n\n<h1 align=\"center\" style=\"font-size: 30px;\"><strong><em>Nano Claude Code</em></strong>: Eine schnelle, leicht verständliche Python-Neuimplementierung von Claude Code mit Unterstützung für jedes Modell</h1>\n<p align=\"center\">\n <a href=\"https://github.com/chauncygu/collection-claude-code-source-code\">Neueste Claude-Code-Quellen</a>\n ·\n <a href=\"https://github.com/SafeRL-Lab/nano-claude-code/issues\">Issues</a>\n ·\n <a href=\"https://deepwiki.com/SafeRL-Lab/nano-claude-code\">Kurze Einführung</a>\n </p>\n</div>\n\n<div align=center>\n <img src=\"https://github.com/SafeRL-Lab/nano-claude-code/blob/main/docs/demo.gif\" width=\"850\"/> \n</div>\n\n---\n\n## 🔥🔥🔥 Neuigkeiten (Pazifikzeit)\n- 03. Apr 2026, 18:00: **v3.03** — Task-Management-System (`task/`): `TaskCreate` / `TaskUpdate` / `TaskGet` / `TaskList`, fortlaufende IDs, Abhängigkeitskanten (`blocks` / `blocked_by`), Metadaten, Persistenz in `.nano_claude/tasks.json`, thread-sicherer Store, `/tasks`-Befehl, 37 neue Tests (**~9500** Zeilen Python).\n- 03. Apr 2026, 14:50: **v3.02** — Plugin-System (`plugin/`): Installieren/Deinstallieren/Aktivieren/Deaktivieren/Aktualisieren über `/plugin`, Empfehlungs-Engine (Keyword + Tags), mehrere Scopes (user/project), git-basierter Marketplace. `AskUserQuestion` erlaubt interaktive Rückfragen während einer Aufgabe (**~8500** Zeilen Python).\n- 03. Apr 2026, 10:00: **v3.01** — MCP-Unterstützung: `mcp/`-Paket, stdio + SSE + HTTP, automatische Tool-Erkennung, `/mcp`, 34 neue Tests (**~7000** Zeilen Python).\n- 02. Apr 2026, 12:20: **v3.0** — Multi-Agenten (`multi_agent/`), Speicher (`memory/`), Skills (`skill/`) mit eingebauten Skills, Argumentsubstitution, fork/inline-Ausführung, KI-Speichersuche, git-worktree-Isolation, Agententypen (**~5000** Zeilen Python).\n- 02. Apr 2026, 10:00: **v2.0** — Kontextkompression, Speicher, Sub-Agenten, Skills, Diff-Ansicht, Tool-Plugin-System.\n- 01. Apr 2026, 13:47: Unterstützung für VLLM-Inferenz.\n- 01. Apr 2026, 11:30: Unterstützung für weitere Closed-Source- und Open-Source-Modelle: Claude, GPT, Gemini, Kimi, Qwen, Zhipu, DeepSeek sowie lokale Modelle via Ollama oder beliebige OpenAI-kompatible Endpunkte.\n- 01. Apr 2026, 09:50: Unterstützung für weitere Closed-Source-Modelle: Claude, GPT, Gemini.\n- 01. Apr 2026, 08:23: Erste Version von Nano Claude Code veröffentlicht.\n\n---\n\n# Nano Claude Code\n\nNano Claude Code ist eine **leichte** und **einfach zu nutzende** Python-Neuimplementierung von Claude Code, die **jedes Modell** unterstützt, darunter Claude, GPT, Gemini, Kimi, Qwen, Zhipu, DeepSeek sowie lokale Open-Source-Modelle über Ollama oder beliebige OpenAI-kompatible Endpunkte.\n\n---\n\n## Inhalt\n- [Warum Nano Claude Code](#warum-nano-claude-code)\n- [Funktionen](#funktionen)\n- [Unterstützte Modelle](#unterstützte-modelle)\n- [Installation](#installation)\n- [Verwendung: Closed-Source-API-Modelle](#verwendung-closed-source-api-modelle)\n- [Verwendung: Open-Source-Modelle (lokal)](#verwendung-open-source-modelle-lokal)\n- [Format von Modellnamen](#format-von-modellnamen)\n- [CLI-Referenz](#cli-referenz)\n- [Slash-Befehle (REPL)](#slash-befehle-repl)\n- [API-Keys konfigurieren](#api-keys-konfigurieren)\n- [Berechtigungssystem](#berechtigungssystem)\n- [Eingebaute Tools](#eingebaute-tools)\n- [Memory](#memory)\n- [Skills](#skills)\n- [Sub-Agenten](#sub-agenten)\n- [MCP](#mcp)\n- [Plugin-System](#plugin-system)\n- [AskUserQuestion-Tool](#askuserquestion-tool)\n- [Task Management](#task-management)\n- [Kontextkompression](#kontextkompression)\n- [Diff-Ansicht](#diff-ansicht)\n- [CLAUDE.md-Unterstützung](#claudemd-unterstützung)\n- [Sitzungsverwaltung](#sitzungsverwaltung)\n- [Projektstruktur](#projektstruktur)\n- [FAQ](#faq)\n\n## Warum Nano Claude Code\n\nClaude Code ist ein leistungsstarker, produktionsreifer KI-Coding-Assistent – aber der Quellcode ist ein kompiliertes 12-MB-TypeScript/Node.js-Bundle (ca. 1300 Dateien, ca. 283K Zeilen). Er ist eng an die Anthropic-API gekoppelt, schwer anzupassen und praktisch nicht mit lokalen oder alternativen Modellen nutzbar.\n\n**Nano Claude Code** implementiert dieselbe Kernschleife in etwa 10K Zeilen gut lesbarem Python neu. Alles Wichtige bleibt erhalten, Unnötiges wird weggelassen. Eine ausführlichere Analyse gibt es hier: [Englische Version](https://github.com/SafeRL-Lab/nano-claude-code/blob/main/docs/comparison_claude_code_vs_nano_v3.03_en.md) und [Chinesische Version](https://github.com/SafeRL-Lab/nano-claude-code/blob/main/docs/comparison_claude_code_vs_nano_v3.03_cn.md)\n\n### Auf einen Blick\n\n| Dimension | Claude Code (TypeScript) | Nano Claude Code (Python) |\n|---|---|---|\n| Sprache | TypeScript + React/Ink | Python 3.8+ |\n| Quelldateien | ~1.332 TS/TSX-Dateien | 51 Python-Dateien |\n| Codezeilen | ~283K | ~10.2K |\n| Eingebaute Tools | 44+ | 21 |\n| Slash-Befehle | 88 | 17 |\n| Modellanbieter | nur Anthropic | 7+ (Anthropic · OpenAI · Gemini · Kimi · Qwen · DeepSeek · Ollama · …) |\n| Lokale Modelle | Nein | Ja — Ollama, LM Studio, vLLM, OpenAI-kompatible Endpunkte |\n| Build-Schritt nötig | Ja | Nein |\n| Laufzeit-Erweiterbarkeit | Geschlossen | Offen |\n| Task-Dependency-Graph | Nein | Ja |\n\n### Wo Claude Code stärker ist\n\n- **UI-Qualität** — React/Ink mit Streaming-Rendering, feingranularer Diff-Visualisierung und Dialogsystemen\n- **Tool-Breite** — mehr als 44 Tools\n- **Enterprise-Features** — MDM, Team-Permissions, OAuth, Keychain, Feature Flags\n- **KI-gesteuerte Memory-Extraktion** — `extractMemories`\n- **Produktionszuverlässigkeit** — ein verteilbares `cli.js`, umfangreiche Tests, versionierte Releases\n\n### Wo Nano Claude Code stärker ist\n\n- **Multi-Provider** — Wechsel zwischen Claude, GPT-4o, Gemini 2.5 Pro, DeepSeek, Qwen oder lokalen Llama-Modellen über `--model` oder `/model`\n- **Lokale Modelle** — vollständig offline mit Ollama, LM Studio oder vLLM\n- **Lesbarer Quellcode** — die gesamte Agent-Schleife umfasst 174 Zeilen in `agent.py`\n- **Kein Build** — `pip install -r requirements.txt` und direkt loslegen\n- **Dynamische Erweiterbarkeit** — Tools zur Laufzeit registrieren, Skill-Pakete installieren, MCP-Server anbinden\n- **Task-Abhängigkeiten** — `TaskCreate` / `TaskUpdate` unterstützen strukturierte Abhängigkeiten\n- **Zweistufige Kontextkompression** — Snip + KI-Zusammenfassung\n\n### Zentrale Designunterschiede\n\n**Agent Loop** — Nano nutzt einen Python-Generator, der typisierte Events (`TextChunk`, `ToolStart`, `ToolEnd`, `TurnDone`) per `yield` ausgibt.\n\n**Tool Registration** — Jedes Tool ist ein `ToolDef(...)`-Dataclass. Module können bei Import `register_tool()` aufrufen. Das gleiche Muster wird für MCP, Plugins und Skills genutzt.\n\n**Kontextkompression**\n\n| | Claude Code | Nano Claude Code |\n|---|---|---|\n| Trigger | Exakte Tokenzahl | Schätzung `len / 3.5`, Auslösung bei 70 % |\n| Ebene 1 | — | Snip alter Tool-Ausgaben |\n| Ebene 2 | KI-Zusammenfassung | KI-Zusammenfassung älterer Turns |\n| Kontrolle | Systemverwaltet | `preserve_last_n_turns` |\n\n**Memory** — Claude Code extrahiert Wissen proaktiv. Nano verwendet ein explizites, tool-basiertes `MemorySave`, was vorhersehbarer und auditierbarer ist.\n\n### Für wen eignet sich Nano Claude Code?\n\n- Entwickler, die **lokale oder nicht-Anthropic-Modelle** als Coding-Assistenten verwenden möchten\n- Forschende, die verstehen möchten, **wie agentische Coding-Assistenten funktionieren**\n- Teams, die eine **gut hackbare Basis** für eigene Tools, Policies oder Agententypen brauchen\n- Alle, die Claude-Code-ähnliche Produktivität **ohne Node.js-Buildkette** möchten\n\n---\n\n## Funktionen\n\n| Funktion | Details |\n|---|---|\n| Multi-Provider | Anthropic · OpenAI · Gemini · Kimi · Qwen · Zhipu · DeepSeek · Ollama · LM Studio · Custom Endpoint |\n| Interaktive REPL | readline-History, Tab-Vervollständigung |\n| Agent Loop | Streaming API + automatische Tool-Nutzung |\n| 21 eingebaute Tools | Read, Write, Edit, Bash, Glob, Grep, WebFetch, WebSearch, MemorySave, MemoryDelete, MemorySearch, MemoryList, Agent, SendMessage, CheckAgentResult, ListAgentTasks, ListAgentTypes, Skill, SkillList, AskUserQuestion |\n| MCP-Integration | Beliebige MCP-Server (stdio/SSE/HTTP) anschließen |\n| Plugin-System | Installieren/Deinstallieren/Aktivieren/Deaktivieren/Aktualisieren von Plugins |\n| AskUserQuestion | Rückfragen mitten in der Aufgabe |\n| Task Management | TaskCreate/Update/Get/List, IDs, Abhängigkeiten, Metadaten |\n| Diff-Ansicht | Git-artige Diff-Anzeige |\n| Kontextkompression | Automatische Verdichtung langer Gespräche |\n| Persistenter Speicher | User- und Projekt-Scope |\n| Multi-Agent | Typisierte Sub-Agenten, Worktree-Isolation |\n| Skills | Eingebaute und eigene Markdown-Skills |\n| Permission-System | `auto` / `accept-all` / `manual` |\n| Session-Persistenz | Speichern/Laden von Sitzungen |\n| Kosten-Tracking | Token-Verbrauch + geschätzte USD-Kosten |\n| Nicht-interaktiver Modus | `--print` für Skripte / CI |\n\n---\n\n## Unterstützte Modelle\n\n### Closed Source (API)\n\nDie folgende Tabelle bleibt aus Genauigkeitsgründen nahe am Original:\n\n| Provider | Model | Context | Strengths | API Key Env |\n|---|---|---|---|---|\n| **Anthropic** | `claude-opus-4-6` | 200k | Most capable, best for complex reasoning | `ANTHROPIC_API_KEY` |\n| **Anthropic** | `claude-sonnet-4-6` | 200k | Balanced speed & quality | `ANTHROPIC_API_KEY` |\n| **Anthropic** | `claude-haiku-4-5-20251001` | 200k | Fast, cost-efficient | `ANTHROPIC_API_KEY` |\n| **OpenAI** | `gpt-4o` | 128k | Strong multimodal & coding | `OPENAI_API_KEY` |\n| **OpenAI** | `gpt-4o-mini` | 128k | Fast, cheap | `OPENAI_API_KEY` |\n| **OpenAI** | `o3-mini` | 200k | Strong reasoning | `OPENAI_API_KEY` |\n| **OpenAI** | `o1` | 200k | Advanced reasoning | `OPENAI_API_KEY` |\n| **Google** | `gemini-2.5-pro-preview-03-25` | 1M | Long context, multimodal | `GEMINI_API_KEY` |\n| **Google** | `gemini-2.0-flash` | 1M | Fast, large context | `GEMINI_API_KEY` |\n| **Google** | `gemini-1.5-pro` | 2M | Largest context window | `GEMINI_API_KEY` |\n| **Moonshot (Kimi)** | `moonshot-v1-8k` | 8k | Chinese & English | `MOONSHOT_API_KEY` |\n| **Moonshot (Kimi)** | `moonshot-v1-32k` | 32k | Chinese & English | `MOONSHOT_API_KEY` |\n| **Moonshot (Kimi)** | `moonshot-v1-128k` | 128k | Long context | `MOONSHOT_API_KEY` |\n| **Alibaba (Qwen)** | `qwen-max` | 32k | Best Qwen quality | `DASHSCOPE_API_KEY` |\n| **Alibaba (Qwen)** | `qwen-plus` | 128k | Balanced | `DASHSCOPE_API_KEY` |\n| **Alibaba (Qwen)** | `qwen-turbo` | 1M | Fast, cheap | `DASHSCOPE_API_KEY` |\n| **Alibaba (Qwen)** | `qwq-32b` | 32k | Strong reasoning | `DASHSCOPE_API_KEY` |\n| **Zhipu (GLM)** | `glm-4-plus` | 128k | Best GLM quality | `ZHIPU_API_KEY` |\n| **Zhipu (GLM)** | `glm-4` | 128k | General purpose | `ZHIPU_API_KEY` |\n| **Zhipu (GLM)** | `glm-4-flash` | 128k | Free tier available | `ZHIPU_API_KEY` |\n| **DeepSeek** | `deepseek-chat` | 64k | Strong coding | `DEEPSEEK_API_KEY` |\n| **DeepSeek** | `deepseek-reasoner` | 64k | Chain-of-thought reasoning | `DEEPSEEK_API_KEY` |\n\n### Open Source (lokal via Ollama)\n\n| Modell | Größe | Stärke | Pull-Befehl |\n|---|---|---|---|\n| `llama3.3` | 70B | Allgemein, starke Reasoning-Fähigkeiten | `ollama pull llama3.3` |\n| `llama3.2` | 3B / 11B | Leichtgewichtig | `ollama pull llama3.2` |\n| `qwen2.5-coder` | 7B / 32B | **Am besten für Coding** | `ollama pull qwen2.5-coder` |\n| `qwen2.5` | 7B / 72B | Chinesisch & Englisch | `ollama pull qwen2.5` |\n| `deepseek-r1` | 7B–70B | Reasoning, Mathematik | `ollama pull deepseek-r1` |\n| `deepseek-coder-v2` | 16B | Coding | `ollama pull deepseek-coder-v2` |\n| `mistral` | 7B | Schnell, effizient | `ollama pull mistral` |\n| `mixtral` | 8x7B | Starkes MoE-Modell | `ollama pull mixtral` |\n| `phi4` | 14B | Microsoft, starkes Reasoning | `ollama pull phi4` |\n| `gemma3` | 4B / 12B / 27B | Offenes Google-Modell | `ollama pull gemma3` |\n| `codellama` | 7B / 34B | Codegenerierung | `ollama pull codellama` |\n\n> **Hinweis:** Tool Calling benötigt ein Modell mit Function Calling. Empfohlen: `qwen2.5-coder`, `llama3.3`, `mistral`, `phi4`.\n\n---\n\n## Installation\n\n```bash\ngit clone <repo-url>\ncd nano_claude_code\n\npip install -r requirements.txt\npip install anthropic openai httpx rich\n```\n\n---\n\n## Verwendung: Closed-Source-API-Modelle\n\n### Anthropic Claude\n\n```bash\nexport ANTHROPIC_API_KEY=sk-ant-api03-...\n\npython nano_claude.py\npython nano_claude.py --model claude-sonnet-4-6\npython nano_claude.py --model claude-haiku-4-5-20251001\npython nano_claude.py --model claude-opus-4-6 --thinking --verbose\n```\n\n### OpenAI GPT\n\n```bash\nexport OPENAI_API_KEY=sk-...\n\npython nano_claude.py --model gpt-4o\npython nano_claude.py --model gpt-4o-mini\npython nano_claude.py --model gpt-4.1-mini\npython nano_claude.py --model o3-mini\n```\n\n### Google Gemini\n\n```bash\nexport GEMINI_API_KEY=AIza...\n\npython nano_claude.py --model gemini/gemini-2.0-flash\npython nano_claude.py --model gemini/gemini-1.5-pro\npython nano_claude.py --model gemini/gemini-2.5-pro-preview-03-25\n```\n\n### Kimi, Qwen, Zhipu, DeepSeek\n\nDie Nutzung entspricht dem Original-README und verwendet die jeweiligen Umgebungsvariablen:\n`MOONSHOT_API_KEY`, `DASHSCOPE_API_KEY`, `ZHIPU_API_KEY`, `DEEPSEEK_API_KEY`.\n\n---\n\n## Verwendung: Open-Source-Modelle (lokal)\n\n### Option A — Ollama\n\n```bash\ncurl -fsSL https://ollama.com/install.sh | sh\nollama pull qwen2.5-coder\nollama pull llama3.3\nollama serve\n\npython nano_claude.py --model ollama/qwen2.5-coder\npython nano_claude.py --model ollama/llama3.3\n```\n\n### Option B — LM Studio\n\n```bash\npython nano_claude.py --model lmstudio/<model-name>\n```\n\n### Option C — vLLM / Self-Hosted OpenAI-Compatible Server\n\n```bash\nexport CUSTOM_BASE_URL=http://localhost:8000/v1\nexport CUSTOM_API_KEY=none\npython nano_claude.py --model custom/Qwen/Qwen2.5-Coder-7B-Instruct\n```\n\n---\n\n## Format von Modellnamen\n\nUnterstützte Formen:\n\n```bash\npython nano_claude.py --model gpt-4o\npython nano_claude.py --model ollama/qwen2.5-coder\npython nano_claude.py --model kimi:moonshot-v1-32k\n```\n\nAutomatische Erkennung:\n- `claude-` → anthropic\n- `gpt-`, `o1`, `o3` → openai\n- `gemini-` → gemini\n- `moonshot-`, `kimi-` → kimi\n- `qwen`, `qwq-` → qwen\n- `glm-` → zhipu\n- `deepseek-` → deepseek\n- `llama`, `mistral`, `phi`, `gemma`, `mixtral`, `codellama` → ollama\n\n---\n\n## CLI-Referenz\n\n```text\npython nano_claude.py [OPTIONS] [PROMPT]\n\n-p, --print\n-m, --model MODEL\n--accept-all\n--verbose\n--thinking\n--version\n-h, --help\n```\n\nBeispiele:\n```bash\npython nano_claude.py\npython nano_claude.py --model gpt-4o\npython nano_claude.py --accept-all --print \"Initialize a Python project with pyproject.toml\"\npython nano_claude.py --thinking --verbose\n```\n\n---\n\n## Slash-Befehle (REPL)\n\nWichtige Befehle:\n`/help`, `/clear`, `/model`, `/config`, `/save`, `/load`, `/history`, `/context`, `/cost`, `/verbose`, `/thinking`, `/permissions`, `/cwd`, `/memory`, `/skills`, `/agents`, `/mcp`, `/exit`, `/quit`\n\n---\n\n## API-Keys konfigurieren\n\n### Methode 1: Umgebungsvariablen\n\n```bash\nexport ANTHROPIC_API_KEY=...\nexport OPENAI_API_KEY=...\nexport GEMINI_API_KEY=...\nexport MOONSHOT_API_KEY=...\nexport DASHSCOPE_API_KEY=...\nexport ZHIPU_API_KEY=...\nexport DEEPSEEK_API_KEY=...\n```\n\n### Methode 2: In der REPL\n\n```text\n/config anthropic_api_key=...\n/config openai_api_key=...\n```\n\n### Methode 3: Direkt in `~/.nano_claude/config.json`\n\n```json\n{\n \"model\": \"qwen/qwen-max\",\n \"max_tokens\": 8192,\n \"permission_mode\": \"auto\"\n}\n```\n\n---\n\n## Berechtigungssystem\n\n| Modus | Verhalten |\n|---|---|\n| `auto` | Leseoperationen immer erlaubt; Nachfrage bei Bash und Schreiboperationen |\n| `accept-all` | Nie nachfragen |\n| `manual` | Vor jeder Aktion nachfragen |\n\n---\n\n## Eingebaute Tools\n\n### Kern-Tools\n`Read`, `Write`, `Edit`, `Bash`, `Glob`, `Grep`, `WebFetch`, `WebSearch`\n\n### Memory-Tools\n`MemorySave`, `MemoryDelete`, `MemorySearch`, `MemoryList`\n\n### Sub-Agent-Tools\n`Agent`, `SendMessage`, `CheckAgentResult`, `ListAgentTasks`, `ListAgentTypes`\n\n### Skill-Tools\n`Skill`, `SkillList`\n\n### MCP-Tools\nWerden automatisch als `mcp__<server>__<tool>` registriert.\n\n---\n\n## Memory\n\nMemory wird als Markdown gespeichert:\n- User-Scope: `~/.nano_claude/memory/`\n- Project-Scope: `.nano_claude/memory/`\n\nTypen:\n- `user`\n- `feedback`\n- `project`\n- `reference`\n\n`MEMORY.md` wird automatisch neu aufgebaut und in den System-Prompt injiziert.\n\n---\n\n## Skills\n\nEingebaute Skills:\n- `/commit`\n- `/review [PR]`\n\nEigene Skills können als Markdown-Dateien in `~/.nano_claude/skills/` oder `./.nano_claude/skills/` abgelegt werden.\n\n---\n\n## Sub-Agenten\n\nEingebaute Typen:\n- `general-purpose`\n- `coder`\n- `reviewer`\n- `researcher`\n- `tester`\n\nUnterstützt Hintergrundmodus, git-worktree-Isolation und benutzerdefinierte Agententypen.\n\n---\n\n## MCP\n\nBeispiel-Konfiguration:\n\n```json\n{\n \"mcpServers\": {\n \"git\": {\n \"type\": \"stdio\",\n \"command\": \"uvx\",\n \"args\": [\"mcp-server-git\"]\n }\n }\n}\n```\n\nWichtige Befehle:\n```text\n/mcp\n/mcp reload\n/mcp add git uvx mcp-server-git\n/mcp remove git\n```\n\n---\n\n## Plugin-System\n\n```bash\n/plugin install my-plugin@https://github.com/user/my-plugin\n/plugin enable my-plugin\n/plugin disable my-plugin\n/plugin update my-plugin\n/plugin uninstall my-plugin\n/plugin recommend\n```\n\n---\n\n## AskUserQuestion-Tool\n\nClaude kann eine Aufgabe pausieren und interaktiv eine Rückfrage stellen:\n\n```json\n{\n \"tool\": \"AskUserQuestion\",\n \"question\": \"Which database should I use?\",\n \"options\": [\n {\"label\": \"SQLite\", \"description\": \"Simple, file-based\"},\n {\"label\": \"PostgreSQL\", \"description\": \"Full-featured, requires server\"}\n ],\n \"allow_freetext\": true\n}\n```\n\n---\n\n## Task Management\n\nVerfügbare Tools:\n- `TaskCreate`\n- `TaskUpdate`\n- `TaskGet`\n- `TaskList`\n\nREPL:\n```text\n/tasks\n/tasks create <subject>\n/tasks start <id>\n/tasks done <id>\n/tasks cancel <id>\n/tasks delete <id>\n/tasks get <id>\n/tasks clear\n```\n\n---\n\n## Kontextkompression\n\nZwei Ebenen:\n1. **Snip** — alte Tool-Ausgaben werden abgeschnitten\n2. **Auto-compact** — bei mehr als 70 % des Kontextlimits werden ältere Turns zusammengefasst\n\n---\n\n## Diff-Ansicht\n\n```diff\n--- a/config.py\n+++ b/config.py\n@@ -12,7 +12,7 @@\n \"model\": \"claude-opus-4-6\",\n- \"max_tokens\": 8192,\n+ \"max_tokens\": 16384,\n```\n\n---\n\n## CLAUDE.md-Unterstützung\n\nUnterstützte Orte:\n```text\n~/.claude/CLAUDE.md\n/your/project/CLAUDE.md\n```\n\n---\n\n## Sitzungsverwaltung\n\n```bash\n/save\n/save debug_auth_bug\n/load\n/load debug_auth_bug\n```\n\n---\n\n## Projektstruktur\n\n```text\nnano_claude_code/\n├── nano_claude.py\n├── agent.py\n├── providers.py\n├── tools.py\n├── tool_registry.py\n├── compaction.py\n├── context.py\n├── config.py\n├── multi_agent/\n├── memory/\n├── skill/\n├── mcp/\n└── tests/\n```\n\n---\n\n## FAQ\n\n**Wie füge ich einen MCP-Server hinzu?**\n```text\n/mcp add git uvx mcp-server-git\n```\n\n**Wie debugge ich einen MCP-Server?**\n```text\n/mcp\n/mcp reload git\nwhich uvx\nuvx mcp-server-git\n```\n\n**Kann ich MCP-Server mit Authentifizierung verwenden?**\nJa, über `headers` (HTTP/SSE) oder `env` (stdio).\n\n**Warum funktionieren Tool Calls mit meinem lokalen Ollama-Modell nicht?**\nNutze Modelle mit Function Calling, z. B. `qwen2.5-coder`, `llama3.3`, `mistral`, `phi4`.\n\n**Wie prüfe ich die API-Kosten?**\n```text\n/cost\n```\n\n**Kann ich mehrere API-Keys in derselben Sitzung verwenden?**\nJa.\n\n**Wie kann ich das Tool global als CLI nutzen?**\n```bash\nalias nc='python /path/to/nano_claude_code/nano_claude.py'\npip install -e .\n```\n"}}, "clawspring/config.py": {"b934603b2800374b315b25061bbeffb40ab6ab26": {"t": 1786067942.6129432, "n": 2872, "h": "f0c0bc008ab86714", "c": "\"\"\"Configuration management for ClawSpring (multi-provider).\"\"\"\nimport os\nimport json\nfrom pathlib import Path\n\nCONFIG_DIR = Path.home() / \".clawspring\"\nCONFIG_FILE = CONFIG_DIR / \"config.json\"\nHISTORY_FILE = CONFIG_DIR / \"input_history.txt\"\nSESSIONS_DIR = CONFIG_DIR / \"sessions\"\nDAILY_DIR = SESSIONS_DIR / \"daily\" # daily/YYYY-MM-DD/session_*.json\nSESSION_HIST_FILE = SESSIONS_DIR / \"history.json\" # master: all sessions ever\n\n# kept for backward-compat (/resume still reads from here)\nMR_SESSION_DIR = SESSIONS_DIR / \"mr_sessions\"\n\nDEFAULTS = {\n \"model\": \"ollama/gemma4:e4b\",\n \"max_tokens\": 40000,\n \"permission_mode\": \"auto\", # auto | accept-all | manual\n \"verbose\": False,\n \"thinking\": False,\n \"thinking_budget\": 10000,\n \"custom_base_url\": \"\", # for \"custom\" provider\n \"max_tool_output\": 32000,\n \"max_agent_depth\": 3,\n \"max_concurrent_agents\": 3,\n \"session_daily_limit\": 10, # max sessions kept per day in daily/\n \"session_history_limit\": 200, # max sessions kept in history.json\n # Per-provider API keys (optional; env vars take priority)\n # \"anthropic_api_key\": \"sk-ant-...\"\n # \"openai_api_key\": \"sk-...\"\n # \"gemini_api_key\": \"...\"\n # \"kimi_api_key\": \"...\"\n # \"qwen_api_key\": \"...\"\n # \"zhipu_api_key\": \"...\"\n # \"deepseek_api_key\": \"...\"\n}\n\n\ndef load_config() -> dict:\n CONFIG_DIR.mkdir(exist_ok=True)\n SESSIONS_DIR.mkdir(exist_ok=True)\n cfg = dict(DEFAULTS)\n if CONFIG_FILE.exists():\n try:\n cfg.update(json.loads(CONFIG_FILE.read_text()))\n except Exception:\n pass\n # Backward-compat: legacy single api_key → anthropic_api_key\n if cfg.get(\"api_key\") and not cfg.get(\"anthropic_api_key\"):\n cfg[\"anthropic_api_key\"] = cfg.pop(\"api_key\")\n # Also accept ANTHROPIC_API_KEY env for backward-compat\n if not cfg.get(\"anthropic_api_key\"):\n cfg[\"anthropic_api_key\"] = os.environ.get(\"ANTHROPIC_API_KEY\", \"\")\n return cfg\n\n\ndef save_config(cfg: dict):\n CONFIG_DIR.mkdir(exist_ok=True)\n # Strip internal runtime keys (e.g. _run_query_callback) before saving\n data = {k: v for k, v in cfg.items() if not k.startswith(\"_\")}\n CONFIG_FILE.write_text(json.dumps(data, indent=2))\n\n\ndef current_provider(cfg: dict) -> str:\n from providers import detect_provider\n return detect_provider(cfg.get(\"model\", \"claude-opus-4-6\"))\n\n\ndef has_api_key(cfg: dict) -> bool:\n \"\"\"Check whether the active provider has an API key configured.\"\"\"\n from providers import get_api_key\n pname = current_provider(cfg)\n key = get_api_key(pname, cfg)\n return bool(key)\n\n\ndef calc_cost(model: str, in_tokens: int, out_tokens: int) -> float:\n from providers import calc_cost as _cc\n return _cc(model, in_tokens, out_tokens)\n"}}}} |