CodeT:一种 Pi-native 的智能体实践方案
项目概述
CodeT 是一个基于 Pi CodingAgent构建的、**文本驱动、插件化、渐进演进**的软件工程智能体。
目标不是"更聪明的 AI",而是"更可控的工程环境"。
CodeT 不是一个项目,也不是一个单体智能体。它是
- 一套工程哲学(Text as Truth / Evolve by Practice)
- 一套 Pi 插件命名与使用约定(codet-*)
- 一组可独立演进的 Skills + Extensions
核心哲学
一切皆文本(Text as Truth)
- *规范*:
AGENTS.md{.verbatim},RULES.md{.verbatim},TODO.md{.verbatim},PLAN.md{.verbatim} - *代码*:源码本身就是文本
- *记忆*:不依赖 SQLite / 向量库,只用 Markdown + JSONL
- *通信*:多实例之间通过文件(而非 RPC / 内存)协作
- *版本化*:所有"智能体产物"都可
git diff{.verbatim}
插件化(Pi Extension First)
- 每个能力 = 一个 Pi Extension + Skill
- 不修改 Pi 内核
- 有现成开源插件 → 直接用
- 没有 → 自己写 Skill(Markdown)+ Extension(TypeScript),
skill是内核, TypeScript内部直接调用
pi.sendUserMessage("/skill:pi-init") - 插件可独立版本、独立维护
渐进式智能体(Evolve by Practice)
- 不做"大而全"的智能体
- 从
/init{.verbatim} 开始 - 在实际项目中用 → 踩坑 → 提炼规则 → 固化到插件
- 用
/omfg{.verbatim} 式机制把 Bad Case 变成规则
AI 参与开发(AI-Assisted Construction)
- CodeT 本身由 Pi 编写
- 每个新命令、Skill、工具,都由 Pi 生成初稿
- 人工 review → 修正 → 提交
- 变更同步写入 =AGENTS.md=,形成闭环
调度边界(非常重要)
CodeT 严格遵守以下边界:
- Pi 负责:
- 命令解析
- Skill / Extension 路由
- 工具调用决策
- 上下文管理
- 多轮对话编排
- CodeT 负责:
- 定义命令语义
- 提供 Skill(提示词)
- 提供 Extension(工具封装)
- 维护 AGENTS.md / RULES.md
CodeT 永远不会:
- 实现命令间调用链
- 管理会话状态
- 编排子 Agent
- 接管 Pi 的调度权
失败边界
CodeT 遵循”显式失败”原则:
- 任何命令失败时:
- 不重试
- 不自动回滚
- 不隐藏错误
- 错误信息直接写入:
- 终端输出
- 或 STATUS.md
- 修复策略由人、或后续 Pi 会话决定
核心能力组成
Context Loader(上下文加载)
职责
- 从 cwd 向上递归查找:
AGENTS.md{.verbatim}RULES.md{.verbatim}SYSTEM.md{.verbatim} (可选)
- 按优先级合并
- 在会话开始时自动注入系统提示
设计约束
- 不缓存解析结果(每次启动重新扫描)
- 不引入数据库
- 支持全局(
~/.pi/agent/{.verbatim} )+ 项目级(./{.verbatim} )
Slash Commands(命令系统)
所有命令均以 /xxx{.verbatim} 形式存在,由 Pi 负责解析与调度,本质是
*Prompt Template + 工具调用*。
以/init为例
命令 作用 形式
/init{.verbatim} 初始化陌生项目,生成 AGENTS.md Skill(MD) + Extension(TS)
/init{.verbatim} 已落地为
Skill(=skills/pi-init/SKILL.md=,见=codet-pi-init= 包),由模型用
bash/read/write 工具扫描项目并写 AGENTS.md{.verbatim} ——完全
Pi-native,逻辑活在文本资产里。另外保留一个**薄 Extension
桥接**,让在 Pi 中可用 /init{.verbatim} 入口(内部pi.sendUserMessage("/skill:pi-init ...")=),因为 Pi 的 Skill 命令固定为 =/skill:<name>{.verbatim}
前缀;薄桥接仅为命名友好,不做扫描/生成。离线兜底:=/init –template
[<path>]= 用模板占位符(==
等)确定性生成。模板可自由改文本,不需要改代码。
Skill System(提示词资产)
- 每个 Skill = 一个目录 +
SKILL.md{.verbatim} - Skill 可被 Pi 自动发现
- Skill 内容:
- 角色设定
- 约束条件
- 输出契约
- 探索维度(模型自主决定顺序)
示例目录
1 | skills/ |
Multi-Instance Collaboration via tmux(多实例协作)
CodeT 不使用”子 Agent”概念,每个 pi{.verbatim}
实例都是平等的、独立的主 Agent。
- 用 tmux pane 启动多个
pi{.verbatim} - 通过共享文件协作:
PLAN.md{.verbatim}TODO.md{.verbatim}STATUS.md{.verbatim}
- 每个实例职责明确(backend / frontend / scripts)
约定优于机制
- 不写编排引擎
- 只在
AGENTS.md{.verbatim} 中写明协作约定
技术选型
运行时
- Pi Coding Agent(宿主)
- Node.js >= 20(Extension 运行环境)
- TypeScript(Extension 开发语言)
- tmux(多实例编排)
文本格式
- Markdown(规范、计划、待办、规则)
- Org-mode(本设计文档及后续架构文档)
- JSONL(会话日志,可选)
版本控制
- Git(所有文本产物的版本化)
- 分支策略:feature/* → develop → main
反模式清单(Anti-Patterns)
以下做法*明确禁止*,因为它们破坏"一切皆文本"的初心:
- 引入 SQLite / 向量数据库存储记忆或规则
- 用 TS 运行时状态保存会话上下文(应使用文件)
- 内置子 Agent 线程调度(应使用 tmux + 文件约定)
- 用 bitmap / 二进制格式做上下文压缩(应生成文本摘要)
- 用 hashline / 二进制 patch 做编辑校验(应
git diff{.verbatim} +lint{.verbatim} ) - 把规范藏进数据库而非
AGENTS.md{.verbatim}


























