3 天从零复刻 Claude Code 90% 核心功能 —— 仅 ~1400 行 Python
Claude Code 是 Anthropic 推出的 AI 编程助手 CLI,功能强大但闭源。这个项目证明:用 ~1400 行 Python + 任意开源大模型,就能复刻它 90% 的核心能力。
不依赖 Anthropic API,兼容任何 OpenAI 接口 —— DeepSeek、Qwen、Llama、Ollama、vLLM 等均可直接使用。
- Claude Code 很好用,但闭源、绑定 Anthropic API、按 token 计费
- 开源社区需要一个足够简单、可以看懂、可以改的替代方案
- 这个项目把 Claude Code 的核心架构拆解成 7 个文件,每个文件都能在 10 分钟内读完
| 天数 | 目标 | 成果 |
|---|---|---|
| Day 1 | 核心循环 | LLM 对话 + 5 个基础工具(bash/读写/搜索)+ Streaming + REPL |
| Day 2 | 进阶能力 | Edit 精确编辑 + 上下文压缩 + 多 Agent 并发 |
| Day 3 | 完整体验 | 记忆系统 + Plan 模式 + Task 管理 + Web 抓取 + Hook + 权限 + Notebook |
最终:7 个文件,~1400 行,13 个工具,20 项功能对标 Claude Code。
pip install openaicp .env.example .env编辑 .env,填入你的 API 信息:
NANO_API_KEY=your_api_key
NANO_BASE_URL=your_base_url
NANO_MODEL=your_model_name
兼容:OpenAI、DeepSeek、Qwen、vLLM、Ollama 等任何 OpenAI 兼容接口。
# 交互模式
python3 main.py
# 单次执行
python3 main.py -c "找出所有包含 TODO 的 Python 文件"
# 命令行覆盖配置
python3 main.py --model your_model --base-url https://your-api/v1 --api-key your_key核心循环非常简单:
用户输入 → LLM → 返回 tool_calls?
├─ 是 → 执行工具 → 结果喂回 LLM → 继续循环
└─ 否 → 打印回答 → 等待下一次输入
就这么简单。记忆、规划、压缩、Agent 等所有高级功能,都构建在这个循环之上。
nano-claude-code/
├── main.py # REPL + 工具循环 + 斜杠命令 (217 行)
├── client.py # OpenAI 兼容流式客户端 (93 行)
├── tools.py # 13 个工具:定义 + 执行 (625 行)
├── session.py # 消息管理 + 上下文压缩 (161 行)
├── config.py # .env 配置加载 (19 行)
├── memory.py # 跨会话持久记忆 (72 行)
└── features.py # Plan 模式 + 任务管理 + Hook 系统 (175 行)
| 工具 | 功能 |
|---|---|
bash |
执行 Shell 命令(危险命令需确认) |
read_file |
读取文件内容(支持行范围) |
write_file |
创建或覆写文件 |
edit_file |
精确字符串替换编辑(类似 Claude Code 的 Edit) |
grep |
正则搜索文件内容,返回行号 |
glob |
按模式查找文件(支持 **/*.py) |
agent |
启动子 Agent,独立会话,并行执行 |
web_fetch |
抓取 URL 内容,自动将 HTML 转为文本 |
notebook_read |
读取 Jupyter Notebook 所有 cell 和输出 |
notebook_edit |
编辑指定 Notebook cell |
memory_save |
保存信息到持久记忆(跨会话) |
memory_search |
检索或列出已保存的记忆 |
task_manage |
创建、更新、跟踪任务 |
| 功能 | Claude Code | Nano | 开发日 |
|---|---|---|---|
| LLM 驱动的工具循环 | Yes | Yes | Day 1 |
| Bash 命令执行 | Yes | Yes | Day 1 |
| 文件读写 | Yes | Yes | Day 1 |
| Grep / Glob 搜索 | Yes | Yes | Day 1 |
| Streaming 输出 | Yes | Yes | Day 1 |
| 危险命令确认 | Yes | Yes | Day 1 |
| 会话保存/加载 | Yes | Yes | Day 1 |
| 精确编辑(diff) | Yes | Yes | Day 2 |
| 上下文自动压缩 | Yes | Yes | Day 2 |
| 子 Agent(并发) | Yes | Yes | Day 2 |
| 多工具并行执行 | Yes | Yes | Day 2 |
| 记忆系统 | Yes | Yes | Day 3 |
| Plan 模式 | Yes | Yes | Day 3 |
| Task 管理 | Yes | Yes | Day 3 |
| Web 抓取 | Yes | Yes | Day 3 |
| Notebook 编辑 | Yes | Yes | Day 3 |
| Hook 系统 | Yes | Yes | Day 3 |
| 权限系统 | Yes | Yes | Day 3 |
| MCP 服务器协议 | Yes | No | — |
| IDE 集成 | Yes | No | — |
| Git Worktree 隔离 | Yes | No | — |
20 / 23 项功能已实现,覆盖约 90% 的日常编程工作流。
缺失的 3 项(MCP、IDE 插件、Worktree)属于生态层面,不影响核心编程能力。
| 命令 | 说明 |
|---|---|
/help |
显示所有命令 |
/save |
保存会话到 .nano_sessions/ |
/plan |
进入 Plan 模式 |
/plan-add <步骤> |
添加一个计划步骤 |
/plan-show |
查看当前计划 |
/plan-run |
执行计划 |
/plan-exit |
放弃计划并退出 |
/tasks |
查看任务列表 |
/memory |
列出所有记忆 |
/memory-del <key> |
删除一条记忆 |
exit / quit |
退出 |
| 变量 | 默认值 | 说明 |
|---|---|---|
NANO_API_KEY |
— | API 密钥(必填) |
NANO_BASE_URL |
https://api.openai.com/v1 |
API 地址 |
NANO_MODEL |
gpt-4o |
模型名称 |
NANO_MAX_TOKENS |
4096 |
单次回复最大 token |
NANO_MAX_ROUNDS |
50 |
单轮最大工具调用轮数 |
NANO_CONTEXT_LIMIT |
100000 |
上下文压缩触发阈值 |
{
"auto_allow": ["read_file", "glob", "grep"],
"deny": ["bash:rm -rf /"]
}{
"pre_tool": {"bash": "echo 'about to run bash'"},
"post_tool": {},
"pre_turn": "",
"post_turn": ""
}工具名填 "*" 可匹配所有工具。
- AI 编程 Agent 的工作原理 —— Claude Code、Cursor、Windsurf 背后的 tool-call 循环
- Function Calling 实战 —— OpenAI 兼容的工具 schema 定义、分发和结果处理
- 上下文窗口管理 —— 自动压缩,让长对话不会爆
- Agent 编排 —— 子 Agent 隔离会话、并行执行
- 权限与安全设计 —— 如何防止 AI 执行危险命令
推荐阅读顺序:config.py → client.py → tools.py → session.py → main.py → memory.py → features.py
欢迎 PR,以下是一些可以做的方向:
- MCP(Model Context Protocol)支持
- Web 搜索工具(Google/Bing API)
- PDF / 图片读取(多模态)
- 使用 rich/textual 的终端 UI
- 会话回放与分享
MIT