Pi:不止编程,一套通用 Agent 框架

摘要

Pi 是 earendil-works 开源的 Agent 开发框架,很容易被"pi 命令行编程工具"这个第一印象带偏------它把"统一多模型 LLM API、通用 Agent 运行时、终端 UI、编程 Agent CLI"拆成四个独立又能组合使用的包,真正的通用能力在 pi-agent-core 这一层:一个带工具调用、状态管理和事件流的有状态 Agent 运行时,官方定位就是可以承载任意类型 Agent,而不是专为编程场景设计的。pi-coding-agent 只是官方基于这个运行时做出来的第一个应用;同一套底座上,官方还在做面向 Slack/聊天场景的 pi-chat,社区也在往上面装其他能力。项目本身对 npm 供应链安全下了狠功夫,并且鼓励把真实的 Agent 会话数据开源出来,反哺整个 Agent 生态。

核心优势

  • 四个包,各自独立可用,编程 CLI 只是其中一个应用pi-ai(统一多供应商 LLM API:OpenAI、Anthropic、Google 等)、pi-agent-core(通用的、带工具调用和状态管理的 Agent 运行时,不限定应用场景)、pi-tui(差分渲染的终端 UI 库)、pi-coding-agent(基于前三者搭出来的交互式编程 Agent CLI,是一个具体应用而非框架本身)------不想要完整 CLI,只用底层的 API 或运行时层完全没问题
  • 供应链安全是一等公民,不是事后补丁 :直接依赖锁定精确版本、.npmrc 设置 min-release-age=2 防止误装当天发布的新包、package-lock.json 作为唯一真相来源、CI 用 --ignore-scripts 安装并跑 npm audit signatures------这一整套机制在同类工具里相当少见
  • 权限模型诚实透明:Pi 本身不带内置的文件系统/进程/网络权限限制,官方文档直接说明"默认以启动它的用户权限运行",并给出 Gondolin 微虚拟机、纯 Docker、OpenShell 三种容器化方案供选择,而不是假装自己是安全的
  • 推动 Agent 会话数据开源 :项目明确鼓励用户通过 pi-share-hf 把真实编程会话发布到 Hugging Face,用真实工具调用、失败和修复过程来改进 Agent,而不是依赖玩具基准测试

不只是编程助手:pi-agent-core 之上能长出什么

pi-coding-agent 是官方基于 pi-agent-core 做出来的第一个应用,但不是唯一一个。同一个仓库里,官方还维护着面向 Slack/聊天场景自动化的 earendil-works/pi-chat,走的是完全不同的应用方向;社区也在往 pi-agent-core 上装其他能力,比如 pi-hermes-memory 这个扩展包,就是把 Nous Research 的 Hermes Agent 的持久记忆系统(MemoryStore 类、内容扫描器、后台审查循环、系统提示注入等设计)移植进了 Pi 生态。

顺带说清楚一个容易搞混的点:Nous Research 的 Hermes Agent 本身是一个完全独立的产品------自带终端 UI,还有 Telegram、Discord、Slack、WhatsApp、Email 等多渠道网关,支持 300+ 模型,并不是构建在 Pi 之上的,Pi 内部也不包含 Hermes 的代码。真实的关系是反过来的:pi-hermes-memory 是 Pi 社区借鉴、移植了 Hermes 的记忆系统设计,两者是各自独立、彼此借鉴的同行项目,不是谁包含谁。这个例子恰好说明 pi-agent-core 这层运行时的通用性------不同团队可以把不同来源的 Agent 能力,装进同一套底座里。

面向人群

  • 想要一个可以自行扩展的终端编程 Agent、又不想被单一厂商 CLI 绑死的开发者
  • 只需要"统一多模型调用"这一层能力、想直接复用 pi-ai 而不引入整个 Agent 框架的团队
  • 想在自己的产品里嵌入通用 Agent 运行时(不限编程场景,工具调用 + 状态管理),拿 pi-agent-core 当底座自己搭 UI 或聊天机器人的开发者
  • 关注 AI 工具供应链安全、想参考一套成熟 npm 依赖锁定/审计实践的团队

快速上手

安装并运行编程 Agent CLI:

bash 复制代码
npm install -g @earendil-works/pi-coding-agent
pi

pi 可以在任意目录下运行,进入交互式终端后直接用自然语言描述任务,Agent 会调用内置工具读写文件、执行命令。也可以从源码本地跑:

bash 复制代码
git clone https://github.com/earendil-works/pi.git
cd pi
npm install --ignore-scripts
npm run build
./pi-test.sh   # 直接跑源码里的 pi,不用先发布安装

只需要统一的多模型 LLM 调用层,不需要完整 Agent:

bash 复制代码
npm install @earendil-works/pi-ai
ts 复制代码
import { complete } from '@earendil-works/pi-ai'

// 同一套接口,换 provider 只改 model 字符串
const response = await complete({
  model: 'anthropic/claude-sonnet-4-20250514',
  messages: [{ role: 'user', content: 'Hello!' }],
})

Skill:让 Agent 自我扩展

README 里"self extensible coding agent"这句话,具体落地就是 Pi 的 Skill 机制------和 Claude Code 的 Skill 几乎是同一套设计思路:把"该怎么做某类任务"写成一份 Markdown 说明书,让 Agent 按需自己去读、自己去用,而不是把每个新能力都硬编码进核心代码。

Skill 的发现位置(放对目录,Pi 启动时自动扫描,不需要额外注册):

位置 用途
~/.pi/agent/skills/~/.agents/skills/ 全局 skill,所有项目都能用
.pi/skills/.agents/skills/ 项目级 skill(项目需先被信任)
npm 包 package.json 里的 skills/ 目录 随包分发,npm install 即带上
--skill <path> 运行时临时指定,不用挪目录

文件格式 ------一个 skill 就是一个目录,里面放一份带 YAML frontmatter 的 SKILL.md

yaml 复制代码
---
name: my-skill
description: 这个 skill 是做什么的、什么场景该用它
---
# 具体执行步骤、注意事项,Agent 会照着做

name 只能用小写字母、数字和连字符,1-64 个字符------和 npm 包名的命名限制类似,方便直接对应包名分发。

怎么被触发------两种模式:

  • 自动匹配 :所有已发现 skill 的 description 会被塞进系统提示词。用户描述任务时,Agent 判断和某个 skill 的 description 匹配,就自己去读完整的 SKILL.md 并按里面的步骤执行,不需要用户手动点名。
  • 手动调用 :想强制用某个 skill,直接 /skill:name 或带参数 /skill:name 具体参数

配合前面提到的 npm 包分发方式,一个团队可以把内部约定的操作规范(比如"怎么发布内部服务""怎么走 code review 流程")写成 skill,随 npm 包分发给所有用 Pi 的成员,效果类似"给 Agent 装插件",但门槛只是写一份 Markdown。

进阶用法

容器化隔离------Pi 默认没有权限沙箱,官方给了三种按需选择的隔离方案:

bash 复制代码
# 方案一:Gondolin ------ pi 和厂商鉴权留在宿主机,
# 内置工具与 `!` 命令路由进本地 Linux 微虚拟机
# 详见 packages/coding-agent/docs/containerization.md

# 方案二:纯 Docker ------ 整个 pi 进程跑在容器里,隔离最简单
docker run -it --rm -v "$PWD":/workspace my-pi-image pi

# 方案三:OpenShell ------ 整个 pi 进程跑在带策略控制的沙箱里

发布真实工作会话 ------用 pi-share-hf 把编程会话发布到 Hugging Face,帮助改进 Agent:

bash 复制代码
npm install -g badlogic/pi-share-hf
pi-share-hf --help   # 具体用法见该项目 README,需要 Hugging Face 账号 + CLI

供应链加固自查------项目自带的检查命令,接入自己的 CI 也适用:

bash 复制代码
npm run check   # lint、格式化、类型检查 + 已锁定依赖版本校验 + shrinkwrap 一致性
npm audit --omit=dev
npm audit signatures --omit=dev

Slack/聊天场景的自动化和工作流不在这个仓库里,单独在 earendil-works/pi-chat

相关推荐
GC_ESD8 小时前
AI芯片时代,ESD静电保护缘何成为设计刚需
人工智能·集成电路·芯片·半导体·esd设计
mftang8 小时前
TensorFlow Lite Micro:面向TinyML系统的嵌入式机器学习推理框架
人工智能·机器学习·tensorflow
kp000008 小时前
如何平衡模型输出的“有用性”和“安全性
人工智能·安全·网络安全·信息安全·ai安全
长风2308 小时前
Day 18:自动备份和恢复自定义UI —— 构建Dashboard自动恢复脚本
人工智能·安全
Token炼金师8 小时前
自主的引擎:ReAct、MCP、多 Agent、Workflow 与沙箱护栏 —— Agent 与工具六器
人工智能·深度学习·llm
XTurnV0078 小时前
codex的皮肤不用买,手把手教你让codex自己换!
人工智能
道友可好8 小时前
前端工程师的 AI 时代生存指南
前端·人工智能·后端
冬哥聊AI8 小时前
京东二面追问:你的 RAG 有几种检索路径?怎么决定走哪条?Query 路由四层框架
人工智能