☰
打造能交互的AI编程CLI:claude-code-from-scratch会话持久化与REPL命令实现解析
2026/10/1 16:05:11 网站建设 项目流程

打造能交互的AI编程CLI:claude-code-from-scratch会话持久化与REPL命令实现解析

【免费下载链接】claude-code-from-scratchBuild your own Claude Code from scratch. 🔍 Claude Code 开源了 50 万行代码,读不动?用 ~5000 行 TypeScript / Python 从零复现核心架构,11 章分步教程带你理解 coding agent 精髓项目地址: https://gitcode.com/gh_mirrors/cl/claude-code-from-scratch

想做一个能交互的 AI 编程 CLI,却不知道会话怎么保存、REPL 命令怎么写?开源教程项目 claude-code-from-scratch 用约 5000 行 TypeScript / Python 代码,从零复现了 Claude Code 的核心架构,其中「CLI 与会话」一章(第 4 章)完整演示了REPL 交互循环、Ctrl+C 优雅中断、会话持久化与 --resume 恢复的全套实现。本文带你用最少的心智负担读懂这套设计,照着写就能给自己的 AI Agent 加上"记得住对话"的能力。

一、项目是什么:读不动 50 万行,就看这 5000 行

claude-code-from-scratch 定位是分步教程:13 章内容,从 Agent Loop 讲到 MCP 集成,每章代码都能一条命令跑起来、无需 API key。本章涉及的两个核心文件非常小:

文件职责
src/cli.ts命令行入口:参数解析、REPL 循环、命令分发
src/session.ts会话持久化:保存 / 加载 / 列出会话

Python 版在 python/mini_claude/session.py 和 python/mini_claude/main.py,设计与 TS 版一一对应,适合双语言读者对照阅读。

二、CLI 入口:两种运行模式,一套参数解析

一次 for 循环解析 11 个开关

入口函数 parseArgs() 手写了一个for循环来解析参数,刻意不引 commander.js——理由很简单:参数只有十来个,零依赖更轻。它支持:

  • 权限模式:--yolo、--plan、--accept-edits、--dont-ask、--auto
  • 运行控制:--resume、--max-cost 0.50、--max-turns 20
  • 模型配置:--model、--api-base、--thinking

一个易被忽略的细节:API key 只从环境变量读取,禁止走命令行参数,避免密钥泄露到 shell history。

单次模式 vs REPL 交互模式

main() 里的分流逻辑只有一行判断:

命令行带了 prompt →单次模式(执行完即退出);没带 → 进入REPL 交互模式。

mini-claude "修复 src/app.ts 里的 bug" # 单次模式 mini-claude --resume # 恢复上次会话,进入 REPL

这正是 AI 编程 CLI 的标准形态:脚本场景走单次模式,日常开发走交互模式。

三、会话持久化:关掉终端,对话不丢失

这是本章最有价值的部分——让 Agent "记得住"。

每轮对话自动写入本地 JSON

Agent 每完成一轮chat()就会调用 autoSave(),把整个消息数组连同元数据(会话 id、模型、工作目录、开始时间、消息数)写成 JSON,落在~/.mini-claude/sessions/<id>.json。两个值得抄的设计:

  1. 静默容错:保存逻辑包在try/catch里空吞异常——磁盘满了也不该让正在进行的对话崩掉;
  2. 会话 id 用 8 位随机串(agent.ts 中randomUUID().slice(0, 8)),多个会话互不覆盖。

saveSession / loadSession 本体只有十几个函数行:writeFileSync写盘、JSON.parse读回,文件不存在就返回null。

--resume 一键恢复上次会话

getLatestSessionId() 扫描会话目录、按startTime倒排,取出最新一个;CLI 启动时--resume分支(cli.ts)把它加载回 Agent,并打印(Session restored (N messages))。

官方演示(无需 API key,本地 mock 模型驱动):

$ node steps/run.mjs 4 mini-claude Remember that my favorite color is blue. mini-claude --resume What is my favorite color? Got it — your favorite color is blue. (resumed 2 messages) Your favorite color is blue.

先记住一件事 → 关掉进程 →--resume接着问,AI 还记得。完整文档见 docs/04-cli-session.md。

💡真实 Claude Code 的差异:生产实现用JSONL 追加写入而非整体 JSON 覆盖——写入中途崩溃不会损坏整个文件,恢复时跳过末尾不完整行即可。这是一个很值得进阶研究的方向。

四、REPL 命令大全:让 AI 编程助手听话又好用

REPL 循环由 runRepl() 实现:readline读一行 → 分发命令 →agent.chat()→ 再读一行。内置命令一览:

命令作用
/clear清空对话历史,重新出发
/cost查看累计 token 用量与费用估算
/compact手动触发上下文压缩
/plan切换 Plan 模式(只读规划 ↔ 正常执行)
/goal <条件>设定目标,跨轮次持续执行直到评估器判定达成
/loop [间隔] <prompt>定时或自主节奏重跑 prompt
/memory、/skills列出已保存记忆 / 可用技能
/<技能名>直接调用技能,如/commit "fix types"

两个工程细节让这套 REPL 特别"稳":

  • Ctrl+C 双重语义:Agent 正在跑时按下 → 中断当前轮次,回到输入提示;空闲时按下 → 第一次提示"再按一次退出",第二次才退出。既防止手滑丢失会话,也让你能在 Agent 跑偏时 3 秒内叫停——中断的成本永远低于撤销的成本。
  • rl.once而非rl.on:每次只监听一行,处理完再递归注册下一行,保证严格串行,避免多个chat()并发修改消息历史。

五、为什么坚持终端原生,不做浏览器界面?

这是一个主动选择,好处很实在:

  • ✅SSH 环境可用,服务器远程开发不丢工作流
  • ✅可接管道:echo "fix the bug" | mini-claude
  • ✅tmux 多实例并行,内存开销接近零
  • ✅ 像git、grep一样自然嵌入现有命令行工作流

真实 Claude Code 在终端里跑了一整套 React/Ink 组件框架(流式 Markdown、Vim 模式、多 Tab),本质是弥补终端交互限制、让复杂 UI 可维护——这正是本项目"最小实现"与"生产实现"的分界线。

六、快速上手:安装并跑起来

git clone https://gitcode.com/gh_mirrors/cl/claude-code-from-scratch cd claude-code-from-scratch npm install && npm run build export ANTHROPIC_API_KEY="sk-ant-xxx" npm start # 进入交互式 REPL npm start -- --resume # 恢复上次会话

Python 版(3.11+):cd python && pip install -e .后运行mini-claude-py,详见 python/README.md。

不想配 key 也可以直接体验教程:node steps/run.mjs 4一条命令跑第 4 章演示,加--py换 Python 版、--diff看本章新增代码。

写在最后

会话持久化 + REPL 命令 + 优雅中断,三者加起来不过几百行代码,却是 AI 编程 CLI 从"能跑"到"好用"的关键一步。项目里 test/integration/loop-repl.test.mjs 和 test/integration/retry.test.mjs 还给出了这些行为的自动化测试写法,建议跟着 test/TEST-GUIDE.md 一起看。5000 行代码、13 章教程,足以让你彻底理解 coding agent 的会话与交互机制。

【免费下载链接】claude-code-from-scratchBuild your own Claude Code from scratch. 🔍 Claude Code 开源了 50 万行代码,读不动?用 ~5000 行 TypeScript / Python 从零复现核心架构,11 章分步教程带你理解 coding agent 精髓项目地址: https://gitcode.com/gh_mirrors/cl/claude-code-from-scratch

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询