大家好,分享一个自己做了一段时间的开源项目 Mino:用 Go 从零写一个终端里的 coding agent ,同时整理成一份分章教程。
为什么做这个
用 Claude Code 、Codex 这类工具的时候,我一直好奇它们内部到底在做什么:模型每次收到的是什么?工具调用跑到一半进程被杀了怎么办?上下文满了怎么压缩?权限和沙箱怎么做?
光看文章不太过瘾,所以决定自己从零写一个,不用任何 agent 框架,只用官方 OpenAI Go SDK 调 Responses API 。边写边整理成教程,给和我一样想搞懂原理的人。
教程怎么组织
一章对应一个可运行的版本( git tag chapter-01 … chapter-15)。每章从一段能观察到的交互讲起,说明模型收到了什么、程序怎么处理返回,最后用一个小实验验证效果和边界。中英双语。
目前 15 章已经全部发布:
- 流式终端问答
- JSONL 对话历史与重启恢复
- Agent 循环 + 逐次批准的 Bash
- 中断工具调用的如实恢复(不重复执行,结果未知要用户确认)
- 多会话管理
- 上下文压缩(手动
/compact+ 自动预算检查) - 项目 Skills
- 限定在项目目录内的文件读写工具
- MCP ( HTTP / stdio )
- 安全防护:统一工具策略、受保护路径、三种权限模式
- Evals:声明式用例 + 确定性评分
- macOS Seatbelt 沙箱(限制写入、断网)
- 用户记忆
- 子 Agent (并行委派任务)
- 自定义子 Agent 角色
适合谁
- 会一点 Go (变量、函数、错误处理就够了),想搞懂 agent 原理的人
- 之前没用过模型 API 也可以,从第 01 章开始就行
base_url可以配置,只要兼容 OpenAI Responses API 的服务都能用
试用
目前只支持 macOS 13+( Apple Silicon / Intel ),一行安装:
mino_installer="$(curl --proto '=https' --tlsv1.2 -fsSL https://raw.githubusercontent.com/qshine/mino/main/install.sh)" && bash -c "$mino_installer" && export PATH="$HOME/.mino/bin:$PATH"
最后
代码刻意写得比较克制,以可读为主,没追求功能大全。哪里讲得不清楚、写错了或者缺了什么,欢迎在这里或 GitHub 上提,谢谢!