使用 Go 语言开发Pi coding agent, 以AI自主的方式

pigo 是一个类似pi coding agent的ai coding agent,使用Go语言开发。

你可以通过下面的命令安装它:

在配置文件配置(推荐),或者命令行中输入参数也可以:

尝试了它的功能,你一定好奇,这样一个功能完备的ai coding agent是怎么快速开发出来的?

开发这个项目主要有两个目的,而且这两个目的都达到了:

  • 为Go生态圈提供一个小巧灵活,功能强大、易于扩展的Agent, 就像 Pi agent、Claude code那样。既可以作为coding agent日常使用,也可以作为SDK方便集成到Go程序中使用
  • 通过真实的项目证明,goal-workflow这套从需求到上线这套AI时代的软件开发工程方法非常有效,可以舒舒服服的开发中小型应用,而且也适合AI主导的项目后期的维护

所以本文想从这两个方面分享从零开发这个项目的经验,同学可以各取所取,从不同的关注点了解这个过程。

pigo: Go 生态圈的 pi coding agent

pi coding agent 历史

先把 pi 的来历讲清楚,后面才好理解 pigo 在对照谁做事。pi 出自 libGDX 作者 Mario Zechner 之手,现在交给 Earendil 团队维护,创始人 Mario Zechner 加入该公司并继续负责核心技术主导。它是一个跑在终端里的极简 coding agent,也是那个一周涨了十几万 star 的 OpenClaw 背后的引擎。它的思路和别人不太一样:不堆功能,只给你一套干净的原语,让你自己拼出想要的工作流。

为什么大家都喜欢研究 pi coding agent

pi 之所以成了大家争相拆解、模仿的对象,说白了就是"代码少、结构清楚"。它把一个 coding agent 的本质——LLM 出主意、上下文当记忆、工具当手脚,三者转起一个循环——摆得明明白白。想搞懂一个 coding agent 到底是怎么运转的,读 pi 的源码大概是最快的一条路。

这也是openclaw使用它做底层 agent 运行时的原因之一。

pigo 和 pi coding agent

pigo 就是 pi 的 Go 复刻版。行为上尽量和 pi 对齐,但每个模块都用 Go 重写了一遍,吃到了类型系统、并发和清晰包边界的好处。最后编译出来是一个没有任何运行时依赖的单一二进制,既能当日常用的 coding agent,也能当 SDK 塞进自己的 Go 程序里。

pigo 主要特性展示

下面几个小节带你过一遍 pigo 现在到底能干什么。

headless、 repl 和 tui

pigo 有几种用法。headless 模式(加 -p)就是一把梭,只吐最终结果,适合写脚本、接 CI;repl 模式是一个带状态的交互式命令行,边聊边改代码;至于 tui,则有一段小小的曲折——一开始我意识到tui实现起来很复杂,所以先实现的repl模式,后来使用bubbletea + lipgloss 实现的tui, 这个谷歌的antigravity使用的框架一样,不过antigravity不开源。

tui 细节打磨

虽然大部分同学关心的是agent core的实现,但是作为一个完整的产品, tui的重要性还是不言而喻的,而且tui的代码反而可能比agent core更多。

pigo在实现 tui 那阵子踩过的坑:多行输入、图片粘贴、按终端宽度正确换行、视口滚动、主题配色、状态提示、Markdown 渲染、动词等待……。这些特性很多都是我在使用claude code过程中总结和借鉴过来了,这些细节需要一个特性一个特性的打磨。

扩展: pi packages 和 hook

怎么在不动源码的前提下长出新能力?通过扩展。扩展分四层:

  • Skills / 斜杠命令(一个带 frontmatter 的 markdown 文件就是一条 /命令)。
  • Prompt模板 类似 pi prompt模板的功能,你在pigo也可以使用 /模板名称调用此prompt。
  • Plugin(独立进程、用 JSON-RPC 通信,任何语言都能写,还天然隔离)、以及从 npm 直接装 pi 生态的包(pigo install)。
  • Hook 则是在关键节点插一脚,比如工具执行前先问一句"这个目录你信得过吗",或者在自主模式下每一轮悄悄提醒模型"别忘了目标"。

未来规划

参考 oh-my-pi 和 claude code、codex、opencode、kimi code、mimo code、qoder等coding agent优秀的特性,移植到pigo中。
增加remote control的功能,转移到手机上可以远程控制。

支持桌面版应用的支持,支持作为agent runtime更好的为应用服务。

pigo是如何从零构建出来了的?

大家也许好奇,这样一个功能强大的ai coding agent是怎么开发出来的,是不是一个团队花了好长时间才做出来的?如果说上面一部分介绍是『鱼』的话,你也许更想知道『渔』的方法。

实际上,这是我一个人花了一周的时间,我没有编写一行代码,完全让AI主导实现的。这也和当前的Claude Code、Codex开发一致。

我把每一个步骤都保存下来了,你可以回溯开发的历史:

  • tasks目录:包含每一个需求文档(使用/prd skill生成)以及部分需求文档转的spec文档(使用/prd-to-spec skill生成)
  • github issues: 根据prd文档和spec文档拆解的任务卡片
  • docs/issue#xxx.html: 实现每个任务后,本次实现的总结文档
  • docs/xxx.html: 我使用生图工具生成的架构图、agent loop流程图等

动机

为什么要折腾这么一个项目?其实就冲着两件事去的:一是想给 Go 生态圈也留一个小巧、能打的 agent;二是想拿一个真刀真枪的项目,验证 goal-workflow 这套从需求到上线的方法到底靠不靠谱。

万丈高楼平地起

一上来不是闷头堆代码,而是对着 pi 的行为先把骨架立起来——CLI 怎么装配、核心循环怎么转、Provider 层怎么抽象、工具系统怎么挂上去。这些地基打牢了,后面才盖得高。

tasks/prd-pigo-agent.md是这个项目的第一个需求文档,我通过/prd skill,让claude code借鉴pi coding agent的代码,生成一个Go语言实现的pi agent。

你可以看到这个项目最初的需求。

其中一开始的时候我让它借鉴gitlawb/zero实现tui,我发现实现的并不好,很多bug,也很粗糙,代码也很复杂混乱,所以初期的时候我把 tui特性删除了,只让它实现了一个repl的模式。

逐步打磨

地基之上,怎么一点点长成一个完整可用的 agent:上下文自动压缩、会话持久化、目录信任、子 agent 隔离……都是配合 goal-workflow 的 /prd → /goal → /review-it → /ship-it,一轮一轮迭代磨出来的。

实际实现的时候我使用/loop-it或者/graph skill让claude code 自动的批量的实现,这俩skill分别对用loop engineering和graph engineering。

其中,

  • /loop-it: 适合串行实现,这样可以避免代码有冲突
  • /graph: 拆解成图,按照wave的方式阶段性的并行实现。采用git worktree的方式并发实现一个wave中的多个issues。
    /graph 足够智能,如果它发现多个issues会并发的修改相同的代码,容易造成冲突,它会建议你修改为使用loop-it实现。

实现流程为/goal → /review-it → /note-it → /ship-it, 实现完一个 issue,会把这次实现通过/note-it总结保存下来。

几个重要的特性是怎么实现的?

挑几个有代表性的特性,钻进代码里讲讲它们具体是怎么落地的。建议你对照着源码和 commit 一起看,能清楚地看到这些设计是怎么一步步演进成现在这个样子的。

harness engineering

前段一段时间炒的比较火的harness engineering,我通过/prd 为本项目实现harness engineering就创建了需求文档:

接下来/to-issues拆解成任务卡片,/graph 交给AI实现即可。

实现类似claude code的 /btw 命令

在agent长时间运行时,你可能想问一个侧面问题。侧面问题不会影响正常执行的工作,也不会添加到对话中。如果没有问题,将重新打开您本次会话中最新的侧面问题覆盖层,以便您浏览之前的答案;如果还没有侧面问题,它将要求您输入一个。

对于这个特性,我只需/prd 实现一个类似claude code 的 /btw 斜杠命令,它就可以为你生成一个需求文档了:

接下来/to-issues拆解成任务卡片,/graph 交给AI实现即可。

生成 tui 需求文档

下面是最近添加的tui特性的需求文档,也是通过/prd 使用bubbletea + lipgloss 实现tui:

在pigo的 tasks目录下,有很多的需求文档,都是通过/prd生成的,逐步的为pigo项目生成和补足了众多特性。

而且,当前的这个开发流程非常适合开发新的特性。使用/prd先生成需求文档,使用/to-issues生成任务卡片,使用/graph实现,非常的快,只要你有足够的token就可以。

自己开发自己

添加评论
点赞收藏
点踩分享查看原文
评论
?
参与讨论