适合
对 agent、tool calling、上下文、session 还不熟,但有一点 JavaScript/TypeScript 基础的人。
任务一:规划学习路径
这是一套给新手跟学的 Pi agent 核心课程。HTML 教程走主线,Markdown 学习记录保留更深入的源码笔记。
这不是 API 文档,也不是完整源码索引。它是一条从概念到源码主线的跟学路线。
对 agent、tool calling、上下文、session 还不熟,但有一点 JavaScript/TypeScript 基础的人。
想读懂 Pi agent 源码主线,并能讲清一次 prompt 如何触发模型和工具循环的人。
第一遍就想穷尽所有 provider、TUI 细节、扩展边角和每个类型定义的人。
HTML 教程是主线;Markdown 学习记录是进阶读源码资料。第一遍先看 HTML。
不需要先读完整仓库。准备好运行环境和几个观察动作,就可以开始跟学。
能在仓库或你的安装位置跑起 pi,最好能用 JSON/print mode 观察事件流。第一遍不需要改源码。
pi --mode json -p "Read README.md"
./pi-test.sh
先按章节给出的文件读,不从随机实现文件开始。复杂链路优先画图。
packages/ai
packages/agent
packages/coding-agent
每章都要用一个行为验证理解:跑命令、看 JSON event、画 tree、解释一次 toolResult 回填。
第一遍不要追所有 UI、provider 和扩展细节。学习重点是流程、边界、状态变化。
第一遍建立 agent 核心主线;第二遍再看扩展和复用边界。
00 -> 01 -> 02 -> 03 -> 04 -> 05。先把 agent 核心跑通。
06 -> 07。再看 skill、tool、command、hook、SDK 和 RPC 如何把同一套 agent 能力扩出去。
这个仓库不是一个单包 CLI。它把模型调用、agent runtime、coding-agent 应用层和终端 UI 分开了。
packages/agent通用 agent runtime。真正的核心在这里:消息状态、上下文转换、事件流、工具执行、steering、follow-up 和停止条件。
src/agent-loop.ts
src/agent.ts
src/types.ts
packages/ai模型与 provider 抽象层。重点看统一消息格式、stream event、tool calling 和 provider payload 转换。
README.md
src/providers
packages/coding-agent把通用 agent 包装成编码助手。这里有默认工具、系统提示词、session、扩展、CLI、SDK 和 RPC。
src/core/tools
src/core/sdk.ts
packages/tui终端 UI 层。先不深入,等理解交互模式和事件订阅之后,再看它如何渲染消息和工具输出。
src/components
README.md
HTML 教程按主线学习;Markdown 学习记录用于第二遍深入源码。第一遍从 00 开始,不要跳过基础概念。
给完全小白的前置缓冲层。先把 LLM、Context、toolCall、toolResult、agent loop 和 session 的边界讲清楚。
这一节学什么
学 agent 为什么不是普通聊天:模型提出 toolCall,本地工具执行后产生 toolResult,agent loop 把结果回填上下文,再让模型继续推理。学完要能区分 Context 和 session,以及 Pi 的 packages/ai、packages/agent、packages/coding-agent 三层。
00-agent-basics-tutorial.html00-agent-basics-notes.html
这一节学什么
学 CLI 入口如何把一次用户输入送进 AgentSession.prompt(),再由 Agent.prompt() 启动一次 run,最后进入 runAgentLoop()。学完要能讲清 print/json/interactive/RPC/SDK 的区别,以及一次 prompt 为什么不是单次模型调用。
README.mdpackages/coding-agent/README.mddocs/quickstart.md./pi-test.sh 启动。
这一节学什么
学 Pi 内部的 Context 如何成为 agent/provider 边界:agent 只整理 system prompt、messages、tools,provider 再转成 OpenAI/Anthropic/Google 的具体 payload。重点理解流式 tool call 为什么要等参数完整后才能执行,以及 tool result 为什么必须回填给模型。
packages/ai/README.mdpackages/ai/src/index.tspackages/ai/src/providersContext 的结构。
这一节学什么
学 runAgentLoop() 如何反复执行“模型生成 -> 工具调用 -> 工具结果回填 -> 下一轮生成”。重点看 pending/steering 消息、assistant message 定稿、顺序/并行工具、hook、turn_end、prepareNextTurn 和停止条件。
packages/agent/src/agent-loop.tspackages/agent/src/agent.tspackages/agent/src/types.tsrunLoop 的内外循环。runLoop 画流程图。emit 的时机。
这一节学什么
学产品层 ToolDefinition 如何被 wrap 成 agent core 使用的 AgentTool。重点拆 read 的截断策略、edit 的唯一匹配、write 的文件写入队列,以及 bash 的 partial update 和最终结果回传。
src/core/tools/index.tsread.ts、edit.tswrite.ts、bash.tsfile-mutation-queue.tsread 和 bash 的风险边界。
这一节学什么
学 SessionManager 如何用 append-only JSONL 保存 user、assistant、toolResult、compaction 等历史,并把它们组织成可分支的树。重点理解 /tree 切分支后为什么还要 rebuild context 覆盖 agent.state.messages,以及 compaction 为什么只改变模型视图、不删除原始历史。
docs/session-format.mddocs/compaction.mdsrc/core/session-manager.tssrc/core/compaction/tree、/fork、/clone 的差异。pi 的设计重点是可扩展。这里学的是如何把专用能力装进 skill、prompt template、extension tool、command 和 hook。
这一节学什么 学 skill 的渐进式披露、slash command 的接管顺序、extension loader/runner 的注册与运行边界、runtime ctx 的 getter/stale 检查,以及 extension tool、hook、resources_discover 如何进入统一的工具和资源管线。
packages/coding-agent/src/core/skills.tspackages/coding-agent/src/core/extensions/loader.tspackages/coding-agent/src/core/extensions/runner.tspackages/coding-agent/src/core/agent-session.ts最后看复用边界。interactive mode 只是一个宿主,SDK 和 RPC 展示了同一套 agent 能力如何被其他进程或应用使用。
这一节学什么
学 createAgentSession() 为什么创建完整产品级 AgentSession,AgentSessionRuntime 为什么负责 new/resume/fork/switch/import 的 session replacement,以及 RPC mode 如何把同一套 agent 能力暴露成长期 JSONL 服务。
packages/coding-agent/src/core/sdk.tspackages/coding-agent/src/core/agent-session-runtime.tspackages/coding-agent/src/core/agent-session-services.tspackages/coding-agent/src/modes/rpcAgentSession。固定一个学习动作,降低复杂源码带来的混乱感。
比如:工具结果为什么要写回上下文?session 为什么用树?steering 为什么不直接打断?
先读 README 或 docs,再读 index、types、核心实现。不要从随机实现文件开始。
把函数调用、消息变化、事件发射、状态更新画出来。agent 项目最重要的是流程。
跑一个例子、加一个日志、写一个小工具或 template,看实际行为是否符合你的解释。
用户输入进入 pi,session 构造上下文,agent loop 调用模型,模型产生文本或 toolCall,工具执行后生成 toolResult,toolResult 回到上下文,模型继续直到给出最终回答。
Agent 和 AgentSession 的关系。