选型指南

Pi 子代理选型:会话、并行任务与 Worktree

对比 Pi 子代理执行机制、可选 Git worktree、上下文隔离、并发限制与 Token 开销,附源码核验与示例。

概览

Pi 默认提供 read、write、edit、bash 四个工具。子代理编排通过扩展补充,由扩展调度子会话并将结果交回父会话。

选型时分别判断:子任务在哪个进程执行、继承哪些上下文、修改哪份文件。独立会话不会自动拥有独立工作目录。

按用途比较

表格可横向滚动;详细配置与来源见下方。

资源与用途介入环节依赖与 Key外发数据失败行为核验证据
@tintinweb/pi-subagents

通过 SDK 子会话提供后台队列、实时 TUI 状态与可选 Git worktree。

普通代理在宿主进程内调用 createAgentSession。后台任务先返回 ID,完成后通知父会话;worktree 隔离改变子代理工作目录。工作流脚本运行在线程 worker 中。需要 Pi ≥ 0.84.0 及已授权模型。只有 worktree 模式需要 Git、仓库和至少一个提交,普通子会话可在非 Git 目录运行。每个子代理把任务、选定上下文和工具结果发送给自己的模型供应商。inherit_context 默认 false;general-purpose 仍继承父会话系统提示词。明确要求的 worktree 创建失败会使工具调用失败,不会悄悄退回父目录。完成后的修改保存在本地 pi-agent-<id> 分支,临时目录会被移除。
Agent execution ↗
pi-subagents

专注任务的 worker、并行或串行任务,以及可观察的后台执行。

前台子代理使用父进程中的 SDK 会话;后台子代理使用承载 SDK 会话的独立 runner 进程。此包同样支持可选的托管 worktree,包括按工作流子任务隔离。需要 Pi 和已授权的子模型;npm 版 Pi 的后台任务使用独立 Node runner。托管 worktree 要求 Git 及干净的来源工作区。上游记录的独立二进制兼容边界是 Pi 0.86.1 Linux x64。任务、传入或分叉的上下文及工具输出会发送到各选定模型供应商。分叉长对话可能重复大量输入上下文。重试前检查失败记录与产物。Worktree 交接记录保留补丁和清理状态;子任务完成不代表修改已经合并。
Foreground SDK execution ↗

安装与运行边界

@tintinweb/pi-subagents

通过 SDK 子会话提供后台队列、实时 TUI 状态与可选 Git worktree。

pi install npm:@tintinweb/pi-subagents
实现机制
普通代理在宿主进程内调用 createAgentSession。后台任务先返回 ID,完成后通知父会话;worktree 隔离改变子代理工作目录。工作流脚本运行在线程 worker 中。
前置依赖
需要 Pi ≥ 0.84.0 及已授权模型。只有 worktree 模式需要 Git、仓库和至少一个提交,普通子会话可在非 Git 目录运行。
数据范围
每个子代理把任务、选定上下文和工具结果发送给自己的模型供应商。inherit_context 默认 false;general-purpose 仍继承父会话系统提示词。
失败行为
明确要求的 worktree 创建失败会使工具调用失败,不会悄悄退回父目录。完成后的修改保存在本地 pi-agent-<id> 分支,临时目录会被移除。
已知限制
后台并发默认 10,超出后排队;前台并发独立计算,默认 0 表示不限。Worktree 从已提交历史创建,看不到父目录的暂存或未提交修改。工作目录隔离不是操作系统沙箱。

已查阅源码 / 文档 ·
v0.19.0 · e955e29c51b7a6cce37e1108cd2d6c57a77e151c

pi-subagents

专注任务的 worker、并行或串行任务,以及可观察的后台执行。

pi install npm:pi-subagents
实现机制
前台子代理使用父进程中的 SDK 会话;后台子代理使用承载 SDK 会话的独立 runner 进程。此包同样支持可选的托管 worktree,包括按工作流子任务隔离。
前置依赖
需要 Pi 和已授权的子模型;npm 版 Pi 的后台任务使用独立 Node runner。托管 worktree 要求 Git 及干净的来源工作区。上游记录的独立二进制兼容边界是 Pi 0.86.1 Linux x64。
数据范围
任务、传入或分叉的上下文及工具输出会发送到各选定模型供应商。分叉长对话可能重复大量输入上下文。
失败行为
重试前检查失败记录与产物。Worktree 交接记录保留补丁和清理状态;子任务完成不代表修改已经合并。
已知限制
独立上下文不会隔离文件;不使用 worktree 时须明确分配写入责任。globalConcurrencyLimit 默认限制单次执行内同时运行 20 个子任务,maxSubagentSpawnsPerRun 另限总接纳 64 个;这些都不是 Token 预算。

已查阅源码 / 文档 ·
v0.70.1 · 1ac7b5e2652e9571164847ac2905ab4aded92791

先区分执行方式

当前 pi-subagents 的前台子任务在父进程中执行 SDK 会话,后台任务使用独立 runner。@tintinweb/pi-subagents 的普通前台和后台任务都在宿主进程中运行 SDK 会话,脚本工作流解释器另用 worker 线程。

两个包目前都支持可选 worktree。更有用的区别是生命周期与交接:Nico 的托管工作流 worktree 记录补丁及交接清单;Tintin 将完成后的修改保存在本地分支。子任务完成都不等于修改已合并。

按任务选择

并行阅读或独立审查可共用工作目录,避免 worktree 创建开销,也能看见未提交 diff。多个代理同时写代码时,应分配互不重叠的文件,或明确要求 worktree。

需要 Agent/get_subagent_result、实时组件和可中途引导的后台代理时可选 Tintin;需要 worker/reviewer 角色、链式任务、脚本工作流与独立后台产物时可选 Nico。依赖界面行为前,应在自己的 TUI 或 SDK 宿主中验证已安装版本。

Token 成本与上下文隔离

估算总用量时,要相加父会话输入输出、每个子任务的输入输出及结果汇总。N 个并行子任务可能支付 N 份相同上下文。进程或 worktree 隔离本身不会降低 Token 单价。

探查任务尽量提供明确问题和少量上下文,只有确实需要历史讨论时才分叉对话。限制工具、选择合适模型并设并发上限。用同一任务比较子代理报告的 Token 与缓存用量;本指南未做跨包 Token 基准测试。

验证第一次委派

安装选中的一个包后重启 Pi,先委派只读的仓库清点任务。确认父会话收到结果、子代理使用预期模型,并检查工作区没有变化。

下面的 Tintin Agent 调用要求后台阅读,不创建 worktree。可打开 /agents 检查子会话;确实需要独立的已提交工作区时,再添加 isolation: "worktree"。

Agent({
  subagent_type: "Explore",
  prompt: "List the test commands and their source files. Do not edit files.",
  description: "Find test commands",
  run_in_background: true
})

一手来源与核验范围

本文区分源码 / 文档核验与实际运行测试。未标注“已实测”的功能、性能和节省比例不代表本站测量结果。