pigo
用 Go 实现的 pi 风格命令行编码智能体,能读写代码、执行命令并调用大模型完成从需求到改码的闭环。
加分:副作用工具(bash/write/edit)需逐次确认、项目信任三态持久化、--approve 不放大权限、工具黑名单 fail-closed、子 Agent 继承边界、hook payload 不含凭证、项目级 hook 仅受信任时加载(防克隆即执行)。扣分:以上均为 README 自述,未提供源码或测试佐证;SDK 模式默认等价 --approve(工具不经确认即执行)削弱默认最小权限;依赖未声明 checksum/安全策略(dependency_security 1);安装脚本 curl|sh 自更新替换二进制无签名校验说明;来源仅为 unknown 发布者的自述(source_attribution 1);bash 可执行任意命令、/rewind 不含 bash 改动回滚(部分扣分)。
加分:唯一退出路径 finish() 的两层循环描述、拼错工具名退出码 2、hook 非 0 退出码语义明确、fail-open/fail-closed 场景区分清晰。扣分:全部行为描述未经执行验证;Go 1.27rc1(候选版本)与未来依赖(charmbracelet/ultraviolet 日期为 2026-07)带来可用性风险(dependency_availability 1)。
加分:面向终端用户/脚本/CI/SDK 嵌入多场景、多 Provider 与本地 Ollama、工具边界与显式限制文档详尽(含不支持的参数级语法说明)。扣分:模型前缀推断表可能误判、环境适配(Windows 手动安装)仅简述。
加分:目录完整、安装三途径详尽、示例丰富、MIT LICENSE 全文、命名一致性(对标 pi/Claude Code 语义均有说明)。扣分:无 CHANGELOG 文件证据、版本号实际值(v0.2.0 仅作为示例出现)、维护责任仅体现在 CI/release 工作流而非明确治理声明。
加分:stream- 便于程序化消费、工具边界可精确控制、电子书与 examples/sdk 提升上手效率。扣分:npm 依赖安装路径、与 pi 生态耦合增加理解成本;实际收益需运行验证。
加分:文档中明确标注实现文件位置(internal/runtime/loop.go、prompt.go、registry.go)、区分不支持特性与支持特性、fail-open/fail-closed 语义声明具体。扣分:无第三方佐证、README 自述行为无法在静态审查中交叉验证(cross_source_corroboration 1)。
- README 声称的信任门、fail-closed 黑名单等安全属性均未经源码/测试核验,属自述,采用前应代码级复核。
- SDK 嵌入模式默认等价 --approve:工具不经确认即执行,嵌入方须显式用 WithDisallowedTools/WithoutTools 收窄。
- 安装脚本为 curl|sh 模式且自更新直接替换二进制,未见签名/checksum 校验说明,供应链风险自担。
- /rewind 回滚不含 bash 造成的文件改动,误操作可能不可恢复。
- go.mod 使用 Go 1.27rc1 候选版本及未来日期的间接依赖,构建可复现性存疑。
- hook 以当前用户权限执行任意 shell 命令,项目级 hook 虽有信任门,全局/环境级配置仍需自行审查。
这个 Agent 能做什么,适合哪些场景?
pigo(github.com/smallnest/pigo)是用 Go 复刻的 pi AI Agent,提供无头 `-p` 脚本模式与交互式 TUI/REPL 两种运行方式。其运行时核心是 `internal/runtime/loop.go` 的两层 Agent 循环:内层反复执行流式回复与工具调用,外层处理后续消息,所有终止路径汇于 `finish()`。内置 read/write/edit/grep/find/bash/todo/webfetch/websearch/memory_search/task 等工具,副作用工具受项目信任机制与 `--allowed-tools`/`--disallowed-tools` 工具级准入约束。Provider 层支持 OpenRouter(默认)、Anthropic、本地 Ollama、NVIDIA NIM 及 40 余个内置 Provider,可按模型名前缀自动推断。除 CLI 外还提供 `github.com/smallnest/pigo/agent` SDK 供嵌入 Go 程序,并配套电子书《用 Go 编写 pi Agent》。
pigo 以当前工作目录为根运行:接收 prompt 后进入 Agent 循环,通过所选 Provider 调用 LLM,模型可调用内置工具(read 按行读文件、write/edit 修改文件并返回 diff、grep/find 检索代码、bash 支持后台执行并配套 bash_output/kill_bash、webfetch 抓取网页、task 派发子 Agent)。系统提示词按 base 指令 + 环境块 + 各级 AGENTS.md + --append-system-prompt 分层组装。输出可为纯文本或 --output-format stream- 的逐行 JSON 事件(首事件携带 session_id)。支持 --resume/--continue 会话续跑、~/.agents/skills 技能斜杠命令、~/.pigo/plugins 外部插件、config. 中 9 类生命周期 Hooks(如 PreToolUse 拦截、UserPromptSubmit 注入上下文)、pigo install npm:<pkg> 包管理,以及无参 pigo update 自更新二进制。
- Go 开发者在 CI/脚本中用
pigo -p无头模式自动总结仓库、跑测试并修复失败用例 - 偏好本地推理的用户用
-m ollama/qwen2.5-coder -u http://localhost:11434/v1离线解释与修改代码 - 希望在自己的 Go 服务中嵌入编码智能体的团队,通过
agent.New(...)SDK 包构建会话并调用sess.Prompt - 需要控制风险的开发者用
--allowed-tools read,grep限制为只读分析,或用--disallowed-tools bash禁止 shell 执行 - 想定制 Agent 行为的团队用 Skills(
/skill-name)沉淀可复用 prompt,用 Hooks 在写文件后自动 gofmt 或拦截rm -rf - 使用 Anthropic、DeepSeek、通义千问、豆包等国内/第三方模型的用户按
<PROVIDER>_API_KEY约定直接切换 Provider
这个 Agent 有哪些优点和局限?
- 单一 Go 二进制,无 Node/Python 运行时依赖,可用 install.sh 或 Releases 预编译包直接部署
- Provider 覆盖极广:OpenRouter 默认,内置 40+ Provider 注册表(含 Anthropic、DeepSeek、DashScope、Volcengine、Ollama 本地),支持模型名前缀自动推断
- 安全边界细致:项目信任三态持久化、工具黑白名单(黑名单优先、子 Agent 继承、
--approve不可绕过)、Hooks 可拦截危险命令 - 既是 CLI/REPL 工具也是可导入的 Go SDK(
pigo/agent包,纯基本类型接口),并配套电子书讲解实现 - 可扩展性完整:Skills、提示词模板(带参数语法)、外部插件、9 类生命周期 Hooks、npm 生态包管理与自更新
- 要求 Go 1.27+ 才能源码构建,属于较新的工具链门槛
- 副作用工具(bash/write/edit)依赖项目信任机制把关,
--approve会跳过逐次确认,在不受信任目录使用有风险 - 工具级准入不支持参数级匹配(如
Bash(git log:*)的 Claude Code 语法),写成该形式会报错 pigo install依赖 PATH 上的 npm,包生态目前仅支持 npm: 源- 与 Claude Code 等成熟产品相比,
/rewind暂不回滚 bash 改动的文件,能力对齐仍有差距
如何安装或部署这个 Agent?
需要 Go 1.27+。源码构建:
git clone https://github.com/smallnest/pigo.git
cd pigogo build ./cmd/pigo # 或 go install ./cmd/pigo
一键脚本(Linux/macOS):
curl -fsSL https://raw.githubusercontent.com/smallnest/pigo/master/install.sh | sh可用 PIGO_VERSION、PIGO_INSTALL_DIR 环境变量覆盖默认行为。也可从 GitHub Releases 下载 Linux/macOS/Windows × amd64/arm64 预编译包(goreleaser 构建)。Windows 需手动解压 Releases 中的 .zip。
如何使用这个 Agent?
- 配置 Provider Key:
export OPENROUTER_API_KEY=sk-or-...(或ANTHROPIC_API_KEY等)。 - 无头模式:
pigo -p "读取 README 并用三句话总结";位置参数等价于-p。 - 交互式 REPL:直接运行
pigo(stdout 为终端时自动进入),内置/model、/compact、/rewind、/status等斜杠命令。 - 指定模型:
pigo -m anthropic/claude-3.5-sonnet -p "审查 foo.go 的并发安全性";本地模型:pigo -m ollama/qwen2.5-coder -u http://localhost:11434/v1 -p "..."。 - 工具边界:
pigo --allowed-tools read,grep -p "...";信任目录免确认:pigo -a -p "运行 go test ./..."。 - SDK 嵌入:
import "github.com/smallnest/pigo/agent",sess, _ := agent.New(agent.WithModel("claude-opus-4-8"), agent.WithAPIKey(os.Getenv("ANTHROPIC_API_KEY"))),然后sess.Prompt(ctx, "...")。完整示例见examples/sdk/。
这个 Agent 与同类方案有什么区别?
README 明确将 pigo 定位为 pi(pi.dev)的 Go 复刻,并在工具级准入、/rewind、提示词模板、Hooks 等多处对标 Claude Code;若你已绑定 Claude Code 生态,其参数级工具权限(如 Bash(git log:*))是 pigo 目前缺失的能力。
常见问题
必须付费使用某个模型服务吗?
<PROVIDER>_API_KEY。如何防止它执行危险的 shell 命令?
--disallowed-tools bash 直接从模型工具集移除(黑名单优先,子 Agent 继承,--approve 无法绕过);还可在 Hooks 的 PreToolUse 中用退出码 2 拦截特定命令。能嵌入到我自己的 Go 程序里吗?
github.com/smallnest/pigo/agent 是官方 SDK 接口层,导出类型全是基本类型;默认启用全部工具并自动执行(等价 --approve),可用 WithTools/WithDisallowedTools/WithoutTools 收紧,examples/sdk/ 提供 7 个可运行示例。会话可以中断后继续吗?
~/.pigo/sessions,pigo --list-sessions 列出、pigo --resume <id> 或 pigo --continue 续跑,无头与 REPL 模式均支持;上下文接近上限时自动压缩,也可 /compact 手动触发。如何升级到新版本?
pigo update 即可自更新二进制到最新 GitHub Release;进入 TUI 时也会后台异步检查新版本(24 小时缓存)并在横幅提示。注意带包名的 pigo update <pkg> 是更新已安装的 npm 包,二者按参数区分。