Files
hack/tools/scripts/llm-key-hunter/results/_cache/content/bozhoudev_14days-build-claude-code-cli.json
T

1 line
30 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"repo": "bozhoudev/14days-build-claude-code-cli", "files": {"README.md": {"15a4b74143ec6f54057739289b4f889a5fddcae7": {"t": 1785674032.636771, "n": 4353, "h": "7a056333cef36d4b", "c": "# 14 天手搓 Claude Code CLI\n\n[English](./README.en.md)\n\n这个项目是一个教学版 Code Agent CLI。我们用 Python 从零实现一个 Claude Code 风格的 `agent-code`,重点学习模型外层那套 harness:CLI 运行时、Agent Loop、工具调用、权限、文件编辑、命令执行、会话记忆、hooks、skills、subagents、worktree 和 MCP 工具生态。\n\n它不是 Claude Code 的完整复刻,也不追求产品级能力。目标更简单:跟着 14 天教程,把一个能读代码、改文件、跑命令、管理上下文的代码 Agent 一步步手写出来。\n\n## 为什么做这个项目\n\n我一直想系统学 Agent Harness,但一开始不知道从哪里下手。后来有人跟我说,与其泛泛看文章,不如直接研究 Claude Code 这种真实产品是怎么设计的。\n\n正好前段时间有一份 Claude Code 源码快照公开可见,我就先让 AI 带着自己读了一遍,看看官方把哪些能力当成一等工具,哪些逻辑放在 CLI runtime,哪些逻辑放在模型外层的 harness 里。\n\n读完以后,我决定把这条学习路径重新整理成教程:不用 TypeScript 复刻官方实现,而是用学习者更容易跑起来的 Python,把核心机制拆成 14 天。每一天都能运行,每一天都能看见一个新的 harness 边界。\n\n整个过程也大量使用了 AI 协作。如果你觉得某些文案、翻译或者解释有一点 AI 味,欢迎直接提 issue 或 PR。这个项目本来就是边学边改出来的。\n\n## 你会做出什么\n\n最后的 CLI 叫 `agent-code`。它会逐步具备这些能力:\n\n- 接收一次性 prompt 或进入终端 REPL\n- 调用真实模型,并处理 `tool_use` / `tool_result`\n- 搜索、读取和总结项目文件\n- 在写文件前做安全检查和 diff preview\n- 执行 bash 命令,并通过权限系统保护危险操作\n- 保存会话,读取项目记忆,压缩上下文\n- 支持 slash commands、hooks、skills 和 subagents\n- 用 worktree 隔离任务,并通过 MCP / ToolSearch 扩展工具\n\n一句话:模型负责推理,harness 负责上下文、工具、权限、执行、状态和反馈循环。\n\n## 默认测试模型\n\n教程主线使用 Anthropic Messages API 的消息形状,也就是 `tool_use`、`tool_result` 和 `input_schema`。为了降低测试成本、让更多人能跑起来,项目默认用 DeepSeek 的 Anthropic-compatible endpoint 做真实模型测试:\n\n```bash\nexport ANTHROPIC_AUTH_TOKEN=\"sk-...\"\nexport ANTHROPIC_BASE_URL=\"https://api.deepseek.com/anthropic\"\n```\n\n教程示例默认模型以当天文档和快照代码为准,主线常用 `deepseek-v4-flash`。如果你想换成官方 Claude 或其他兼容服务,只要保留 Anthropic Messages API 的协议形状,改 token、base URL 和 `--model` 即可。\n\n## 14 天路线\n\n前 7 天先做出一个能用的单 Agent CLI,后 7 天把它升级成更完整的 Claude Code 风格 harness。\n\n| Day | 主题 | 学到的 harness 能力 |\n|---|---|---|\n| 1 | Hello Agent | CLI、REPL、MockProvider、最小 Agent Loop |\n| 2 | Real Model + Tool Calling | AnthropicProvider、`tool_use` / `tool_result` |\n| 3 | File + Web Tools | cwd 边界、文件读取、搜索、网页工具 |\n| 4 | Safe Edit | read-before-edit、字符串替换、diff preview |\n| 5 | Bash + Permission | 命令执行、权限请求、后台任务 |\n| 6 | Session + Memory | 会话 JSONL、项目记忆、memdir |\n| 7 | Slash + Hooks | slash command、hooks、cron `/loop` |\n| 8 | Interactive Shell + Plan Mode | 交互式 shell、TodoWrite、Plan Mode 审批闭环 |\n| 9 | Skills | 按需加载知识和工作流 |\n| 10 | Subagents | 子 Agent 派发和结果回填 |\n| 11 | Context Compact | 长上下文压缩、成本追踪 |\n| 12 | Agent Coordinator | 极简多 Agent 协作 |\n| 13 | Worktree + Final Demo | worktree 隔离、端到端代码任务 |\n| 14 | MCP + ToolSearch | MCP 客户端、工具发现、工具扩展 |\n\n当前仓库已经包含前 9 天的教程和参考快照。后续内容会继续在同一条路线里补齐。\n\n## 怎么开始\n\n如果你是跟教程学习,从 Day 1 文档开始,在自己的 `agent-code` 项目里持续修改:\n\n```bash\nopen docs/day-01-hello-agent.md\n```\n\n如果只想运行仓库里的完成版参考快照:\n\n```bash\ncd packages/day-01-hello-agent\nuv sync\nuv run agent-code \"用 echo 工具说 hi\"\nuv run pytest\n```\n\n测试某一天时,建议进入对应目录再跑,避免 pytest 从仓库根目录收集到多个 day 的同名测试文件:\n\n```bash\ncd packages/day-02-real-model-tool-calling\nuv run pytest\n```\n\n## 网页版\n\n这个项目还有一个网页教程版本,源码在 `agent-code-learn/`。本地预览:\n\n```bash\ncd agent-code-learn\nnpm install\nnpm run dev\n```\n\n然后打开 `http://localhost:3000`。线上站点按当前网页项目元信息使用 `buildcc.dev`,如果你访问时还没部署好,可以先用本地预览。\n\n## 教学版项目架构\n\n```mermaid\nflowchart TD\n User[\"用户输入\"] --> CLI[\"Typer CLI / REPL / Slash Router\"]\n CLI --> Agent[\"Agent Loop\"]\n Agent --> Provider[\"ModelProvider<br/>Mock / Anthropic\"]\n Provider --> Model[\"Claude 或 Anthropic-compatible API\"]\n\n Agent --> Tools[\"Tool Registry\"]\n Tools --> FileTools[\"File / Web / Safe Edit\"]\n Tools --> Bash[\"Bash Tool\"]\n Tools --> Memory[\"Session / Memory\"]\n Tools --> Ext[\"Hooks / Skills / Subagents / MCP Lite\"]\n\n FileTools --> Safety[\"cwd 边界 / diff preview / read-before-edit\"]\n Bash --> Permission[\"Permission Engine\"]\n Safety --> Workspace[\"学习者的 agent-code 项目\"]\n Permission --> Workspace\n```\n\n## 项目结构\n\n```txt\ndocs/ 14 天教程文档\npackages/day-*/ 每一天独立可运行的教学快照\ndemo/ 当前综合 demo 项目\nagent-code-learn/ 网页版教程\n\n```\n\n注意:教程读者不是每天新建一个 `packages/day-*`。这些目录是参考答案快照。真正学习时,我们是在自己的 `agent-code` 项目里从 Day 1 持续改到 Day 14。\n\n## 欢迎反馈\n\n欢迎提 issue、discussion 或 PR,尤其是这几类:\n\n- 某一步命令跑不通,或者输出和文档对不上\n- 教程里某段解释不清楚\n- Claude Code 架构理解有偏差\n- DeepSeek / Claude / 兼容 endpoint 的运行差异\n- 英文翻译不自然\n- 网页版排版、交互或代码 diff 有问题\n\n如果你也在研究 Agent Harness,欢迎把你的问题、踩坑记录和改进建议一起丢过来。这个项目最有价值的部分,不是“我写完了一个教程”,而是大家能把一个真实代码 Agent 的外层工程系统拆开看懂。\n\n## 声明\n\nThis is an educational implementation. We reference the publicly visible Claude Code source snapshot to understand its architecture, but rewrite everything in Python with teaching-friendly simplifications. It is not affiliated with Anthropic.\n\n## License\n\nMIT\n"}, "08231674cfcb59387ced02375341ef01ea65e98f": {"t": 1785763859.432778, "n": 4353, "h": "a5e1df42ce04ddea", "c": "# 14 天手搓 Claude Code CLI\n\n[English](./README.en.md)\n\n这个项目是一个教学版 Code Agent CLI。我们用 Python 从零实现一个 Claude Code 风格的 `agent-code`,重点学习模型外层那套 harness:CLI 运行时、Agent Loop、工具调用、权限、文件编辑、命令执行、会话记忆、hooks、skills、subagents、worktree 和 MCP 工具生态。\n\n它不是 Claude Code 的完整复刻,也不追求产品级能力。目标更简单:跟着 14 天教程,把一个能读代码、改文件、跑命令、管理上下文的代码 Agent 一步步手写出来。\n\n## 为什么做这个项目\n\n我一直想系统学 Agent Harness,但一开始不知道从哪里下手。后来有人跟我说,与其泛泛看文章,不如直接研究 Claude Code 这种真实产品是怎么设计的。\n\n正好前段时间有一份 Claude Code 源码快照公开可见,我就先让 AI 带着自己读了一遍,看看官方把哪些能力当成一等工具,哪些逻辑放在 CLI runtime,哪些逻辑放在模型外层的 harness 里。\n\n读完以后,我决定把这条学习路径重新整理成教程:不用 TypeScript 复刻官方实现,而是用学习者更容易跑起来的 Python,把核心机制拆成 14 天。每一天都能运行,每一天都能看见一个新的 harness 边界。\n\n整个过程也大量使用了 AI 协作。如果你觉得某些文案、翻译或者解释有一点 AI 味,欢迎直接提 issue 或 PR。这个项目本来就是边学边改出来的。\n\n## 你会做出什么\n\n最后的 CLI 叫 `agent-code`。它会逐步具备这些能力:\n\n- 接收一次性 prompt 或进入终端 REPL\n- 调用真实模型,并处理 `tool_use` / `tool_result`\n- 搜索、读取和总结项目文件\n- 在写文件前做安全检查和 diff preview\n- 执行 bash 命令,并通过权限系统保护危险操作\n- 保存会话,读取项目记忆,压缩上下文\n- 支持 slash commands、hooks、skills 和 subagents\n- 用 worktree 隔离任务,并通过 MCP / ToolSearch 扩展工具\n\n一句话:模型负责推理,harness 负责上下文、工具、权限、执行、状态和反馈循环。\n\n## 默认测试模型\n\n教程主线使用 Anthropic Messages API 的消息形状,也就是 `tool_use`、`tool_result` 和 `input_schema`。为了降低测试成本、让更多人能跑起来,项目默认用 DeepSeek 的 Anthropic-compatible endpoint 做真实模型测试:\n\n```bash\nexport ANTHROPIC_AUTH_TOKEN=\"sk-...\"\nexport ANTHROPIC_BASE_URL=\"https://api.deepseek.com/anthropic\"\n```\n\n教程示例默认模型以当天文档和快照代码为准,主线常用 `deepseek-v4-flash`。如果你想换成官方 Claude 或其他兼容服务,只要保留 Anthropic Messages API 的协议形状,改 token、base URL 和 `--model` 即可。\n\n## 14 天路线\n\n前 7 天先做出一个能用的单 Agent CLI,后 7 天把它升级成更完整的 Claude Code 风格 harness。\n\n| Day | 主题 | 学到的 harness 能力 |\n|---|---|---|\n| 1 | Hello Agent | CLI、REPL、MockProvider、最小 Agent Loop |\n| 2 | Real Model + Tool Calling | AnthropicProvider、`tool_use` / `tool_result` |\n| 3 | File + Web Tools | cwd 边界、文件读取、搜索、网页工具 |\n| 4 | Safe Edit | read-before-edit、字符串替换、diff preview |\n| 5 | Bash + Permission | 命令执行、权限请求、后台任务 |\n| 6 | Session + Memory | 会话 JSONL、项目记忆、memdir |\n| 7 | Slash + Hooks | slash command、hooks、cron `/loop` |\n| 8 | Interactive Shell + Plan Mode | 交互式 shell、TodoWrite、Plan Mode 审批闭环 |\n| 9 | Skills | 按需加载知识和工作流 |\n| 10 | Subagents | 子 Agent 派发和结果回填 |\n| 11 | Context Compact | 长上下文压缩、成本追踪 |\n| 12 | Agent Coordinator | 极简多 Agent 协作 |\n| 13 | Worktree + Final Demo | worktree 隔离、端到端代码任务 |\n| 14 | MCP + ToolSearch | MCP 客户端、工具发现、工具扩展 |\n\n当前仓库已经包含前 8 天的教程和参考快照。后续内容会继续在同一条路线里补齐。\n\n## 怎么开始\n\n如果你是跟教程学习,从 Day 1 文档开始,在自己的 `agent-code` 项目里持续修改:\n\n```bash\nopen docs/day-01-hello-agent.md\n```\n\n如果只想运行仓库里的完成版参考快照:\n\n```bash\ncd packages/day-01-hello-agent\nuv sync\nuv run agent-code \"用 echo 工具说 hi\"\nuv run pytest\n```\n\n测试某一天时,建议进入对应目录再跑,避免 pytest 从仓库根目录收集到多个 day 的同名测试文件:\n\n```bash\ncd packages/day-02-real-model-tool-calling\nuv run pytest\n```\n\n## 网页版\n\n这个项目还有一个网页教程版本,源码在 `agent-code-learn/`。本地预览:\n\n```bash\ncd agent-code-learn\nnpm install\nnpm run dev\n```\n\n然后打开 `http://localhost:3000`。线上站点按当前网页项目元信息使用 `buildcc.dev`,如果你访问时还没部署好,可以先用本地预览。\n\n## 教学版项目架构\n\n```mermaid\nflowchart TD\n User[\"用户输入\"] --> CLI[\"Typer CLI / REPL / Slash Router\"]\n CLI --> Agent[\"Agent Loop\"]\n Agent --> Provider[\"ModelProvider<br/>Mock / Anthropic\"]\n Provider --> Model[\"Claude 或 Anthropic-compatible API\"]\n\n Agent --> Tools[\"Tool Registry\"]\n Tools --> FileTools[\"File / Web / Safe Edit\"]\n Tools --> Bash[\"Bash Tool\"]\n Tools --> Memory[\"Session / Memory\"]\n Tools --> Ext[\"Hooks / Skills / Subagents / MCP Lite\"]\n\n FileTools --> Safety[\"cwd 边界 / diff preview / read-before-edit\"]\n Bash --> Permission[\"Permission Engine\"]\n Safety --> Workspace[\"学习者的 agent-code 项目\"]\n Permission --> Workspace\n```\n\n## 项目结构\n\n```txt\ndocs/ 14 天教程文档\npackages/day-*/ 每一天独立可运行的教学快照\ndemo/ 当前综合 demo 项目\nagent-code-learn/ 网页版教程\n\n```\n\n注意:教程读者不是每天新建一个 `packages/day-*`。这些目录是参考答案快照。真正学习时,我们是在自己的 `agent-code` 项目里从 Day 1 持续改到 Day 14。\n\n## 欢迎反馈\n\n欢迎提 issue、discussion 或 PR,尤其是这几类:\n\n- 某一步命令跑不通,或者输出和文档对不上\n- 教程里某段解释不清楚\n- Claude Code 架构理解有偏差\n- DeepSeek / Claude / 兼容 endpoint 的运行差异\n- 英文翻译不自然\n- 网页版排版、交互或代码 diff 有问题\n\n如果你也在研究 Agent Harness,欢迎把你的问题、踩坑记录和改进建议一起丢过来。这个项目最有价值的部分,不是“我写完了一个教程”,而是大家能把一个真实代码 Agent 的外层工程系统拆开看懂。\n\n## 声明\n\nThis is an educational implementation. We reference the publicly visible Claude Code source snapshot to understand its architecture, but rewrite everything in Python with teaching-friendly simplifications. It is not affiliated with Anthropic.\n\n## License\n\nMIT\n"}, "95e5b18fe00c0059c0a7c5d43ad4d349cd2cde49": {"t": 1785763861.119154, "n": 5132, "h": "adebccc60c624ef2", "c": "# 14 天手搓 Claude Code CLI\n\n[English](./README.en.md)\n\n这个项目是一个教学版 Code Agent CLI。我们用 Python 从零实现一个 Claude Code 风格的 `agent-code`,重点学习模型外层那套 harness:CLI 运行时、Agent Loop、工具调用、权限、文件编辑、命令执行、会话记忆、hooks、skills、subagents、worktree 和 MCP 工具生态。\n\n它不是 Claude Code 的完整复刻,也不追求产品级能力。目标更简单:跟着 14 天教程,把一个能读代码、改文件、跑命令、管理上下文的代码 Agent 一步步手写出来。\n\n## 为什么做这个项目\n\n我一直想系统学 Agent Harness,但一开始不知道从哪里下手。后来有人跟我说,与其泛泛看文章,不如直接研究 Claude Code 这种真实产品是怎么设计的。\n\n正好前段时间有一份 Claude Code 源码快照公开可见,我就先让 AI 带着自己读了一遍,看看官方把哪些能力当成一等工具,哪些逻辑放在 CLI runtime,哪些逻辑放在模型外层的 harness 里。\n\n读完以后,我决定把这条学习路径重新整理成教程:不用 TypeScript 复刻官方实现,而是用学习者更容易跑起来的 Python,把核心机制拆成 14 天。每一天都能运行,每一天都能看见一个新的 harness 边界。\n\n整个过程也大量使用了 AI 协作。如果你觉得某些文案、翻译或者解释有一点 AI 味,欢迎直接提 issue 或 PR。这个项目本来就是边学边改出来的。\n\n## 你会做出什么\n\n最后的 CLI 叫 `agent-code`。它会逐步具备这些能力:\n\n- 接收一次性 prompt 或进入终端 REPL\n- 调用真实模型,并处理 `tool_use` / `tool_result`\n- 搜索、读取和总结项目文件\n- 在写文件前做安全检查和 diff preview\n- 执行 bash 命令,并通过权限系统保护危险操作\n- 保存会话,读取项目记忆,压缩上下文\n- 支持 slash commands、hooks、skills 和 subagents\n- 用 worktree 隔离任务,并通过 MCP / ToolSearch 扩展工具\n\n一句话:模型负责推理,harness 负责上下文、工具、权限、执行、状态和反馈循环。\n\n## 默认测试模型\n\n教程主线使用 Anthropic Messages API 的消息形状,也就是 `tool_use`、`tool_result` 和 `input_schema`。为了降低测试成本、让更多人能跑起来,项目默认用 DeepSeek 的 Anthropic-compatible endpoint 做真实模型测试:\n\n```bash\nexport ANTHROPIC_AUTH_TOKEN=\"sk-...\"\nexport ANTHROPIC_BASE_URL=\"https://api.deepseek.com/anthropic\"\n```\n\n教程示例默认模型以当天文档和快照代码为准,主线常用 `deepseek-v4-flash`。如果你想换成官方 Claude 或其他兼容服务,只要保留 Anthropic Messages API 的协议形状,改 token、base URL 和 `--model` 即可。\n\n## 14 天路线\n\n前 7 天先做出一个能用的单 Agent CLI,后 7 天把它升级成更完整的 Claude Code 风格 harness。\n\n| Day | 主题 | 学到的 harness 能力 |\n|---|---|---|\n| 1 | Hello Agent | CLI、REPL、MockProvider、最小 Agent Loop |\n| 2 | Real Model + Tool Calling | AnthropicProvider、`tool_use` / `tool_result` |\n| 3 | File + Web Tools | cwd 边界、文件读取、搜索、网页工具 |\n| 4 | Safe Edit | read-before-edit、字符串替换、diff preview |\n| 5 | Bash + Permission | 命令执行、权限请求、后台任务 |\n| 6 | Session + Memory | 会话 JSONL、项目记忆、memdir |\n| 7 | Slash + Hooks | slash command、hooks、cron `/loop` |\n| 8 | TodoWrite + Plan Mode | 计划模式、任务列表、执行约束 |\n| 9 | Skills | 按需加载知识和工作流 |\n| 10 | Subagents | 子 Agent 派发和结果回填 |\n| 11 | Context Compact | 长上下文压缩、成本追踪 |\n| 12 | Agent Coordinator | 极简多 Agent 协作 |\n| 13 | Worktree + Final Demo | worktree 隔离、端到端代码任务 |\n| 14 | MCP + ToolSearch | MCP 客户端、工具发现、工具扩展 |\n\n当前仓库已经包含前 7 天的教程和参考快照。后 7 天会继续在同一条路线里补齐。\n\n## 怎么开始\n\n如果你是跟教程学习,从 Day 1 文档开始,在自己的 `agent-code` 项目里持续修改:\n\n```bash\nopen docs/day-01-hello-agent.md\n```\n\n如果只想运行仓库里的完成版参考快照:\n\n```bash\ncd packages/day-01-hello-agent\nuv sync\nuv run agent-code \"用 echo 工具说 hi\"\nuv run pytest\n```\n\n测试某一天时,建议进入对应目录再跑,避免 pytest 从仓库根目录收集到多个 day 的同名测试文件:\n\n```bash\ncd packages/day-02-real-model-tool-calling\nuv run pytest\n```\n\n## 网页版\n\n这个项目还有一个网页教程版本,源码在 `agent-code-learn/`。本地预览:\n\n```bash\ncd agent-code-learn\nnpm install\nnpm run dev\n```\n\n然后打开 `http://localhost:3000`。线上站点按当前网页项目元信息使用 `buildcc.dev`,如果你访问时还没部署好,可以先用本地预览。\n\n## 教学版项目架构\n\n```mermaid\nflowchart TD\n User[\"用户输入\"] --> CLI[\"Typer CLI / REPL / Slash Router\"]\n CLI --> Agent[\"Agent Loop\"]\n Agent --> Provider[\"ModelProvider<br/>Mock / Anthropic\"]\n Provider --> Model[\"Claude 或 Anthropic-compatible API\"]\n\n Agent --> Tools[\"Tool Registry\"]\n Tools --> FileTools[\"File / Web / Safe Edit\"]\n Tools --> Bash[\"Bash Tool\"]\n Tools --> Memory[\"Session / Memory\"]\n Tools --> Ext[\"Hooks / Skills / Subagents / MCP Lite\"]\n\n FileTools --> Safety[\"cwd 边界 / diff preview / read-before-edit\"]\n Bash --> Permission[\"Permission Engine\"]\n Safety --> Workspace[\"学习者的 agent-code 项目\"]\n Permission --> Workspace\n```\n\n## Claude Code 源码架构参考图\n\n`reference/claude-code-official/` 是公开可见源码快照的本地研究副本。我们只用它确认架构边界,不把官方 TypeScript 源码、prompt 或内部协议原样翻译进教程。\n\n```mermaid\nflowchart TD\n Main[\"src/main.tsx<br/>CLI 入口\"] --> Commands[\"src/commands/*<br/>Slash Commands\"]\n Main --> UI[\"React + Ink<br/>Terminal UI\"]\n Main --> Query[\"QueryEngine<br/>模型调用与工具循环\"]\n\n Query --> Tools[\"src/tools/*<br/>Bash / Read / Edit / MCP / Agent / Skill\"]\n Query --> Context[\"context / state / memdir<br/>上下文与记忆\"]\n Tools --> Permission[\"hooks/toolPermission<br/>权限检查\"]\n Tools --> Services[\"services/*<br/>API / MCP / Compact / LSP / Analytics\"]\n\n Main --> Bridge[\"bridge / remote / server<br/>IDE 与远程会话\"]\n Main --> Plugins[\"plugins / skills<br/>扩展系统\"]\n Query --> Coordinator[\"coordinator / tasks<br/>多 Agent 与任务系统\"]\n```\n\n## 项目结构\n\n```txt\ndocs/ 14 天教程文档\npackages/day-*/ 每一天独立可运行的教学快照\ndemo/ 当前综合 demo 项目\nagent-code-learn/ 网页版教程\n```\n\n注意:教程读者不是每天新建一个 `packages/day-*`。这些目录是参考答案快照。真正学习时,我们是在自己的 `agent-code` 项目里从 Day 1 持续改到 Day 14。\n\n## 欢迎反馈\n\n欢迎提 issue、discussion 或 PR,尤其是这几类:\n\n- 某一步命令跑不通,或者输出和文档对不上\n- 教程里某段解释不清楚\n- Claude Code 架构理解有偏差\n- DeepSeek / Claude / 兼容 endpoint 的运行差异\n- 英文翻译不自然\n- 网页版排版、交互或代码 diff 有问题\n\n如果你也在研究 Agent Harness,欢迎把你的问题、踩坑记录和改进建议一起丢过来。这个项目最有价值的部分,不是“我写完了一个教程”,而是大家能把一个真实代码 Agent 的外层工程系统拆开看懂。\n\n## 声明\n\nThis is an educational implementation. We reference the public Claude Code source snapshot under `reference/claude-code-official/` to understand its architecture, but rewrite everything in Python with teaching-friendly simplifications. It is not affiliated with Anthropic.\n\n## License\n\nMIT\n"}, "1ebe86e4bd8a5c06c315bbe28c64e5cbdfdbf017": {"t": 1785763862.71475, "n": 5199, "h": "1634bf02d4011317", "c": "# 14 天手搓 Claude Code CLI\n\n[English](./README.en.md)\n\n这个项目是一个教学版 Code Agent CLI。我们用 Python 从零实现一个 Claude Code 风格的 `agent-code`,重点学习模型外层那套 harness:CLI 运行时、Agent Loop、工具调用、权限、文件编辑、命令执行、会话记忆、hooks、skills、subagents、worktree 和 MCP 工具生态。\n\n它不是 Claude Code 的完整复刻,也不追求产品级能力。目标更简单:跟着 14 天教程,把一个能读代码、改文件、跑命令、管理上下文的代码 Agent 一步步手写出来。\n\n## 为什么做这个项目\n\n我一直想系统学 Agent Harness,但一开始不知道从哪里下手。后来有人跟我说,与其泛泛看文章,不如直接研究 Claude Code 这种真实产品是怎么设计的。\n\n正好前段时间有一份 Claude Code 源码快照公开可见,我就先让 AI 带着自己读了一遍,看看官方把哪些能力当成一等工具,哪些逻辑放在 CLI runtime,哪些逻辑放在模型外层的 harness 里。\n\n读完以后,我决定把这条学习路径重新整理成教程:不用 TypeScript 复刻官方实现,而是用学习者更容易跑起来的 Python,把核心机制拆成 14 天。每一天都能运行,每一天都能看见一个新的 harness 边界。\n\n整个过程也大量使用了 AI 协作。如果你觉得某些文案、翻译或者解释有一点 AI 味,欢迎直接提 issue 或 PR。这个项目本来就是边学边改出来的。\n\n## 你会做出什么\n\n最后的 CLI 叫 `agent-code`。它会逐步具备这些能力:\n\n- 接收一次性 prompt 或进入终端 REPL\n- 调用真实模型,并处理 `tool_use` / `tool_result`\n- 搜索、读取和总结项目文件\n- 在写文件前做安全检查和 diff preview\n- 执行 bash 命令,并通过权限系统保护危险操作\n- 保存会话,读取项目记忆,压缩上下文\n- 支持 slash commands、hooks、skills 和 subagents\n- 用 worktree 隔离任务,并通过 MCP / ToolSearch 扩展工具\n\n一句话:模型负责推理,harness 负责上下文、工具、权限、执行、状态和反馈循环。\n\n## 默认测试模型\n\n教程主线使用 Anthropic Messages API 的消息形状,也就是 `tool_use`、`tool_result` 和 `input_schema`。为了降低测试成本、让更多人能跑起来,项目默认用 DeepSeek 的 Anthropic-compatible endpoint 做真实模型测试:\n\n```bash\nexport ANTHROPIC_AUTH_TOKEN=\"sk-...\"\nexport ANTHROPIC_BASE_URL=\"https://api.deepseek.com/anthropic\"\n```\n\n教程示例默认模型以当天文档和快照代码为准,主线常用 `deepseek-v4-flash`。如果你想换成官方 Claude 或其他兼容服务,只要保留 Anthropic Messages API 的协议形状,改 token、base URL 和 `--model` 即可。\n\n## 14 天路线\n\n前 7 天先做出一个能用的单 Agent CLI,后 7 天把它升级成更完整的 Claude Code 风格 harness。\n\n| Day | 主题 | 学到的 harness 能力 |\n|---|---|---|\n| 1 | Hello Agent | CLI、REPL、MockProvider、最小 Agent Loop |\n| 2 | Real Model + Tool Calling | AnthropicProvider、`tool_use` / `tool_result` |\n| 3 | File + Web Tools | cwd 边界、文件读取、搜索、网页工具 |\n| 4 | Safe Edit | read-before-edit、字符串替换、diff preview |\n| 5 | Bash + Permission | 命令执行、权限请求、后台任务 |\n| 6 | Session + Memory | 会话 JSONL、项目记忆、memdir |\n| 7 | Slash + Hooks | slash command、hooks、cron `/loop` |\n| 8 | TodoWrite + Plan Mode | 计划模式、任务列表、执行约束 |\n| 9 | Skills | 按需加载知识和工作流 |\n| 10 | Subagents | 子 Agent 派发和结果回填 |\n| 11 | Context Compact | 长上下文压缩、成本追踪 |\n| 12 | Agent Coordinator | 极简多 Agent 协作 |\n| 13 | Worktree + Final Demo | worktree 隔离、端到端代码任务 |\n| 14 | MCP + ToolSearch | MCP 客户端、工具发现、工具扩展 |\n\n当前仓库已经包含前 7 天的教程和参考快照。后 7 天会继续在同一条路线里补齐。\n\n## 怎么开始\n\n如果你是跟教程学习,从 Day 1 文档开始,在自己的 `agent-code` 项目里持续修改:\n\n```bash\nopen docs/day-01-hello-agent.md\n```\n\n如果只想运行仓库里的完成版参考快照:\n\n```bash\ncd packages/day-01-hello-agent\nuv sync\nuv run agent-code \"用 echo 工具说 hi\"\nuv run pytest\n```\n\n测试某一天时,建议进入对应目录再跑,避免 pytest 从仓库根目录收集到多个 day 的同名测试文件:\n\n```bash\ncd packages/day-02-real-model-tool-calling\nuv run pytest\n```\n\n## 网页版\n\n这个项目还有一个网页教程版本,源码在 `agent-code-learn/`。本地预览:\n\n```bash\ncd agent-code-learn\nnpm install\nnpm run dev\n```\n\n然后打开 `http://localhost:3000`。线上站点按当前网页项目元信息使用 `buildcc.dev`,如果你访问时还没部署好,可以先用本地预览。\n\n## 教学版项目架构\n\n```mermaid\nflowchart TD\n User[\"用户输入\"] --> CLI[\"Typer CLI / REPL / Slash Router\"]\n CLI --> Agent[\"Agent Loop\"]\n Agent --> Provider[\"ModelProvider<br/>Mock / Anthropic\"]\n Provider --> Model[\"Claude 或 Anthropic-compatible API\"]\n\n Agent --> Tools[\"Tool Registry\"]\n Tools --> FileTools[\"File / Web / Safe Edit\"]\n Tools --> Bash[\"Bash Tool\"]\n Tools --> Memory[\"Session / Memory\"]\n Tools --> Ext[\"Hooks / Skills / Subagents / MCP Lite\"]\n\n FileTools --> Safety[\"cwd 边界 / diff preview / read-before-edit\"]\n Bash --> Permission[\"Permission Engine\"]\n Safety --> Workspace[\"学习者的 agent-code 项目\"]\n Permission --> Workspace\n```\n\n## Claude Code 源码架构参考图\n\n`reference/claude-code-official/` 是公开可见源码快照的本地研究副本。我们只用它确认架构边界,不把官方 TypeScript 源码、prompt 或内部协议原样翻译进教程。\n\n```mermaid\nflowchart TD\n Main[\"src/main.tsx<br/>CLI 入口\"] --> Commands[\"src/commands/*<br/>Slash Commands\"]\n Main --> UI[\"React + Ink<br/>Terminal UI\"]\n Main --> Query[\"QueryEngine<br/>模型调用与工具循环\"]\n\n Query --> Tools[\"src/tools/*<br/>Bash / Read / Edit / MCP / Agent / Skill\"]\n Query --> Context[\"context / state / memdir<br/>上下文与记忆\"]\n Tools --> Permission[\"hooks/toolPermission<br/>权限检查\"]\n Tools --> Services[\"services/*<br/>API / MCP / Compact / LSP / Analytics\"]\n\n Main --> Bridge[\"bridge / remote / server<br/>IDE 与远程会话\"]\n Main --> Plugins[\"plugins / skills<br/>扩展系统\"]\n Query --> Coordinator[\"coordinator / tasks<br/>多 Agent 与任务系统\"]\n```\n\n## 项目结构\n\n```txt\ndocs/ 14 天教程文档\npackages/day-*/ 每一天独立可运行的教学快照\ndemo/ 当前综合 demo 项目\nagent-code-learn/ 网页版教程\nreference/claude-code-official/ Claude Code 源码快照,架构参考用(需要自己 clone)\n```\n\n注意:教程读者不是每天新建一个 `packages/day-*`。这些目录是参考答案快照。真正学习时,我们是在自己的 `agent-code` 项目里从 Day 1 持续改到 Day 14。\n\n## 欢迎反馈\n\n欢迎提 issue、discussion 或 PR,尤其是这几类:\n\n- 某一步命令跑不通,或者输出和文档对不上\n- 教程里某段解释不清楚\n- Claude Code 架构理解有偏差\n- DeepSeek / Claude / 兼容 endpoint 的运行差异\n- 英文翻译不自然\n- 网页版排版、交互或代码 diff 有问题\n\n如果你也在研究 Agent Harness,欢迎把你的问题、踩坑记录和改进建议一起丢过来。这个项目最有价值的部分,不是“我写完了一个教程”,而是大家能把一个真实代码 Agent 的外层工程系统拆开看懂。\n\n## 声明\n\nThis is an educational implementation. We reference the public Claude Code source snapshot under `reference/claude-code-official/` to understand its architecture, but rewrite everything in Python with teaching-friendly simplifications. It is not affiliated with Anthropic.\n\n## License\n\nMIT\n"}}}}