关于 Pitroom
Pitroom 是用于委派有限编码任务的命令行工具和 Agent 技能套件,由主编码 Agent 保留决策权。它会核验引用的文件位置,返回差异和用量凭据,并支持通过多种工作者命令行并行执行任务。
主要功能
- 01委派研究、修复、测试和审查
- 02并行运行工作者并配置回退链
- 03核验引用的文件位置
- 04返回精确差异和用量凭据
- 05隔离变更后再应用
- 06在本地面板查看运行记录
适用场景
- 01编码时委派代码库阅读
- 02并行开展独立代码审查
- 03应用工作者补丁且不混入其他编辑
- 04跟踪工作者用量和历史运行
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
10收录的工具列表 · 更新于 3 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| dir | string | 否 | 项目目录(默认:服务端的目录)。 |
| web | boolean | 否 | 允许使用 Web 工具。 |
| link | array | 否 | 要链接到隔离副本中的忽略目录,例如 ["node_modules"]。 |
| mode | enum | 否 | read | isolate | write |
| task | string | 否 | 要执行的操作,以及工作者所需的上下文。 |
| tier | string | 否 | cheap、standard 或 capable(来自配置)。 |
| audit | boolean | 否 | 读取:让另一位工作者重新检查答案(每项任务各一位)。 |
| files | array | 否 | 要附加的文件。 |
| fresh | boolean | 否 | 读取:即使此问题已针对相同代码得到回答,也要询问工作者。 |
| group | string | 否 | 相关运行的分组名称。 |
| model | string | 否 | 该工作者使用的模型。 |
| tasks | array | 否 | 或者指定多个相互独立的任务,每个任务分配一位工作者。 |
| effort | string | 否 | low、medium、high、xhigh。 |
| verify | string | 否 | 之后运行的命令,例如 "npm test"。 |
| worker | string | 否 | 工作者 "backend[:model]",例如 "opencode"、"claude:haiku"。默认值:已配置的工作者。 |
| inPlace | boolean | 否 | 读取:读取目录本身,而不是不含疑似机密文件的快照。 |
| continue | string | 否 | 要在同一工作者会话中继续跟进的已完成运行。 |
| waitSeconds | number | 否 | 在返回 "still running" 前等待的时长(默认值为 50,最大值为 540)。 |
详细介绍
原文在翻译后有更新,译文可能不是最新。
Pitroom
为你昂贵的编码 Agent 配备免费维修团队
更省钱、更快速:把阅读、修复、测试和审查交给并行运行的工作者。决策仍由你掌握。
模型无关 · 答案经过验证 · 提供依据,不凭感觉 · 支持 OpenCode / Codex / Claude Code / Gemini CLI / Qwen Code / Kilo Code / Antigravity 工作者
快速开始 · 仪表板 · 基准测试 · 工作流 · 技能 · 命令 · 工作者 · 责任 · 编写适配器
你的 Agent 做决策 · 廉价工作者负责敲代码 · 另一个模型负责审查
pitroom dash,示例数据
为什么选择 Pitroom?
Claude Code、Codex 等工具会花费高级令牌来阅读:搜索代码、打开文件、扫描那些它们永远不会引用的代码。
Pitroom 更进一步:
你的 Agent 始终掌控全局。廉价工作者组成的维修团队并行处理杂活,而你的 Agent 继续工作;它们只会返回答案、精确差异和凭据。
用你的模型,而非我们的不硬编码任何模型。 Pitroom 使用工作者 CLI 的默认模型:免费套餐、本地 MLX/Ollama 模型,或价格低廉的付费模型。在那里切换模型,Pitroom 也会随之切换。 |
支持任意工作者 CLI支持 OpenCode、Codex CLI、Claude Code、Gemini CLI、Qwen Code、Kilo Code 和 Antigravity CLI(测试版)。 一个工作组可以混用它们,回退链也可以跨它们运行(适配器的工作原理)。 |
答案经过验证工作者引用的每个 你的 Agent 可以信任通过核实的内容,跳过重新阅读。 |
从设计上保障安全不提交、不推送、不重置,也不批量删除。Git 防护机制会阻止这些操作。 在隔离模式下,只有应用更改后,它们才会进入你的工作树。 |
另外 12 项功能
- 用数据说话,而非凭感觉。 查看工作器消耗的令牌数、返回给 Agent 的令牌数、压缩率,以及主模型可能收取的费用估算。运行
pitroom savings --card card.svg即可生成可分享的卡片。 - 工作器链自动恢复。 免费模型可能会遇到速率限制或退役。只需列出备用工作器(
fallback),运行遇到“找不到模型”、429 或配额错误时,就会自动切换到下一个模型。仍然没有硬编码模型:工作器链由你决定。 - 一支队伍,不止一个工作器。
pitroom crew可同时启动多个工作器,pitroom watch --json会在每次变更时输出一行,让 Agent 实时跟进,pitroom wait -g会收集所有答案,pitroom apply -g会按顺序应用隔离的补丁。默认最多同时运行 20 个工作器(maxParallel,上限为 30),其余进入队列;备用工作器链会应对免费层级的速率限制;不允许多个工作器并行写入。 - 不只是更便宜,也更快。 工作器在后台并行运行(最多同时 20 个),Agent 可以继续工作,不再被缓慢的阅读和审查拖住。在基准测试中,工作器耗时 470 秒的任务只用了 156 秒的实际时间,约比逐个提问快 3 倍,同时 Agent 自身的上下文也保持精简。
- 优先免费,必要时再用更贵的。 运行和计划任务默认使用
cheap层级,即 OpenCode 的免费模型;需要更强能力的任务可使用standard(Codex)和capable(Claude Code),还可以通过可选的review层级指定审查者。使用免费的 Google AI Studio 密钥,通过 Gemini CLI 还能多一个低成本工作器(每个模型每天的配额较少)。pitroom models会显示各工作器的能力、每个模型支持的工作量级别(low…xhigh)、你设定的费用(costs)和实际用量;--effort可设置每次运行的级别。详情:模型、费用和工作量级别。 - 即使工作区有未提交改动,也能精确追踪变更。 Pitroom 使用临时 Git 索引快照记录工作区(不会触碰你的索引、分支和 stash),因此只报告工作器所做的编辑,并可精确撤销:
pitroom revert <id>。 - 权限由你的 Agent 设定。 Agent 会根据任务和会话允许的范围(只读、隔离副本、原地编辑、网页访问)为每个工作器设置权限,工作器绝不会自行扩大权限。每次运行都受固定限制:不能更改 Git 历史、不能使用
sudo、不能发布内容、不能访问密钥。工作器也不能应用删除操作:除非 Agent 传入--allow-delete,否则pitroom apply会拒绝删除文件的补丁。 - 真正隔离。
--isolate会在当前状态的私有副本中运行工作器(使用独立仓库,以只读方式共享对象),包括未提交和未跟踪文件,然后交付补丁:运行pitroom apply <id>应用补丁(会先检查,发生冲突时拒绝应用),或运行pitroom discard <id>丢弃补丁。 - 不污染仓库。 不会创建
.pitroom/文件夹,不会修改.gitignore,也不会创建分支。记录存放在~/.local/state/pitroom。 - 适用于任何 Agent。 提供十四个 Agent Skills:由工作器运行的 superpowers 开发工作流,以及委派功能(
using-pitroom、pitroom-research、-crew、-implement)、CLI,还有一个 Claude Code / Codex 插件,其会话启动钩子会加载工作流。支持 Claude Code、Codex、Gemini CLI、Cursor,以及任何能运行 shell 命令的工具。 - 实时仪表板和可搜索的历史记录。
pitroom dash会打开本地页面,展示每次运行(任务、工作器逐步执行的操作、结果和差异)以及历史记录和统计信息,适用于不显示钩子或状态行的 Agent 应用;pitroom history可搜索 Pitroom 运行过的所有内容。参见仪表板。 - 轻巧。 CLI 约有 6,500 行 TypeScript,CLI 打包后约 210 KB(另有约 1.9 MB 的仪表板文件,由它提供服务,并支持十种语言的语法高亮),没有运行时依赖。
每次运行都会将工作者自身的安全机制设为相应模式(对于 OpenCode,会通过 OPENCODE_CONFIG_CONTENT 注入权限配置):禁止 commit/push/reset/checkout/stash/clean/rebase、禁止批量删除、禁止使用 sudo;文件读取工具会拒绝读取 .env 和密钥文件(OpenCode 和 Claude Code 工作者);除非传入 --web,否则不启用 Web 工具;不使用子 Agent,也不进行递归委派。规则只有 allow/deny,因此无头运行不会卡在提示词上。工作者 PATH 中的 git 防护 还会阻止 sh -c "git push"、env git reset、别名和脚本执行 commit、push、reset、stash 操作或触碰你的索引。绝不会修改你的 opencode.json。这些防护措施可以降低风险,但并不构成安全边界(请参阅责任和 SECURITY.md)。
看看它的实际效果
在免费的 OpenCode Zen 模型上进行的一次真实运行:你的 Agent 读取约 554 个 token,而不是 163,000 个。
$ pitroom run "Which function builds the read-only permission profile, and which bash commands does it allow?"
pitroom ✔ done · read · 30s · run 20260930-003902-3270
session ses_… · model opencode/muse-spark-1.3-contributor-free
SUMMARY: The read-only permission profile is built by `readProfile()` in src/profiles.ts:89.
Its bash allow-list is `READ_ONLY_BASH` in src/profiles.ts:29-46.
DETAILS:
- Allowed (src/profiles.ts:31-41): `git status*`:31, `git diff*`:32, … `rg *`:40, `wc *`:41.
- Explicit sub-denies: `rg *--pre*`:43, `git *--output*`:44, `git *--ext-diff*`:45.
FILES CHANGED: none
── receipt: worker processed 163k tokens in 6 steps (7 tool calls) · worker cost $0.000
· returned ~554 tokens, 294× compression · est. saved $0.152 vs Claude Sonnet
每次运行都会打印一张收据,pitroom savings 会汇总这些收据(--card 会生成这张可分享的卡片;此处的数字为示例数据,实际测量结果见基准测试):
仪表板
pitroom dash --detach 会输出一个实时页面的地址,位于 127.0.0.1(仅限本机;它会读取你的运行记录,除以下两个操作外不会做任何更改)。它适用于 Hook 消息和状态行无法送达的场景,例如 Claude Code 和 Codex 应用:在浏览器或应用自带的浏览器窗格中打开。技能会指示你的 Agent 启动它,并在其后台运行工作进程时将地址提供给你。
以下截图展示的是示例数据(一个虚构的 shop-api 项目),并非真实项目。
实时。 查看当前正在运行的内容和最近的运行记录。运行中的卡片会显示计时器、工作进程的最新发言,以及它的动画像素吉祥物(已完成的卡片则显示工作进程的徽标);已完成的卡片会显示结果,对于审查任务还会显示发现的问题。

卡片、审计、历史记录、统计和停止/丢弃
点击卡片,它会展开为一个面板,显示任务、工作进程逐步执行的操作(读取的文件、搜索、命令、编辑及其时间,失败的操作会标出)、结果、它更改的文件和差异,以及详细信息(模型、令牌数、费用、回退和引用检查)。

卡片上会显示审计结果和被跳过的工作进程。 由其他工作进程重新检查过的研究答案(审计)会带有 audited · agrees / partly agrees / disagrees 徽标;如果存在异议,还会显示有争议的说法。因配额用尽而被跳过的工作进程会列在详细信息中(“Skipped … cooling down until 14:05”,参见 pitroom cooldown)。

历史记录会搜索 Pitroom 运行过的所有内容(任务、答案和步骤的全文),并可按状态、模型和时间范围筛选;每条运行记录打开后都会显示与实时页相同的卡片。统计会按工作进程、模型和日期显示运行次数、成功率、耗时、令牌数和节省金额。

停止和丢弃。 正在运行的卡片上有一个停止按钮;尚未应用的已完成 --isolate 卡片上则有丢弃按钮(分别等同于 pitroom stop 和 pitroom discard;补丁文件会保留)。一个小组的卡片可以一次性对其所有运行记录执行相同操作(全部停止、全部丢弃);如果其中一些运行失败、超时或已停止,重试命令会显示用于在同一小组中重新启动这些运行的 pitroom run … --bg 命令,可复制到终端或交给你的 Agent(Windows 上的 PowerShell 命令会加引号,其他系统则适用于 POSIX Shell)。每项操作都会再次要求确认。页面无法执行其他操作:它不会启动运行,也不会应用补丁。POST 请求需要页面提供时使用的密钥(每次启动仪表板时都会更换)和页面自身的来源,因此其他网站上的网页无法触发这些操作。
仪表板是一个 React 应用,只构建一次到 dist/ui,并作为两个静态文件提供,因此 CLI 仍然没有运行时依赖。它会遵循系统的浅色或深色主题(可通过按钮切换)。
基准测试
在真实的公开代码仓库中进行测量:PI-Desktop,提交为 c2bfe35,包含 2,349 个受版本控制的文件,以及约 419,000 行 TypeScript 和 Rust 代码。使用 OpenCode 的免费模型 muse-spark-1.3-contributor-free,将 Agent 在修改代码前会提出的八个问题作为一个只读小组任务运行(pitroom crew,同时最多运行四个工作者)。
简而言之:在该代码仓库中,回答八个问题耗时 156 秒;工作者读取了 550 万个 Token,交给 Agent 的内容为 7,684 个 Token(压缩 715 倍);后续审计发现部分答案不完整。在 React、Django 和 Kubernetes 上,四种免费模型在九个范围明确的问题上与 gpt-6-sol 表现相当;在植入 Bug 的代码审查测试中,几乎所有模型都找到了几乎所有 Bug。下方的表格会说明这些结果,以及它们未能说明的内容。
PI-Desktop:八个问题、Token 节省、答案质量和一次独立改动
| 问题 | 工作时间 | 处理的 Token 数 | 返回给 Agent 的 Token 数 | 压缩比 | 已验证的引用 |
|---|---|---|---|---|---|
| 插件运行时在哪里?哪些函数会激活和停用插件? | 37 秒 | 405,380 | 767 | 529 倍 | 10/11 |
| Agent 运行时何时压缩对话?(函数和确切条件) | 90 秒 | 1,250,719 | 763 | 1,639 倍 | 17/17 |
| Rust 主机在哪里将会话状态持久化到磁盘? | 71 秒 | 854,969 | 1,426 | 600 倍 | 29/45 ¹ |
| 哪些 IPC 通道向渲染进程公开窗口管理功能? | 32 秒 | 165,180 | 716 | 231 倍 | 3/28 ¹ |
| 工具调用如何从 Agent 运行时传递到 Rust 主机? | 119 秒 | 1,818,524 | 866 | 2,100 倍 | 14/15 |
| 哪些包和应用依赖 i18n 包? | 33 秒 | 271,297 | 656 | 414 倍 | 15/16 |
| 自动更新在哪里实现?Windows 便携版目标会做出什么改变? | 29 秒 | 215,693 | 743 | 290 倍 | 20/21 |
| 哪些测试覆盖 RPC 层? | 59 秒 | 511,209 | 1,747 | 293 倍 | 6/7 |
| 全部八个问题 | 156 秒(墙上时钟时间) | 5,492,971 | 7,684 | 715 倍 | 114/160 |
工作者读取了 550 万个 Token 的代码和文档(96 个步骤、179 次工具调用),交给 Agent 的内容为 7,684 个 Token,平均每个答案约 960 个 Token。八次运行的工作者时间合计为 470 秒,但由于每次同时运行四个任务(当时的上限;默认值现在是 20),墙上时钟时间仅为 156 秒,比依次运行快约 3 倍。这是相同工作者之间的比较,并非与 Agent 单独阅读的时间对比;我没有测量后者。pitroom savings 按 Claude Sonnet 的公开定价估算,这八次运行节省了 3.86 美元。
答案正确吗? 我对照代码仓库手动检查了所有八个答案中的 46 个关键声明(引用的行及其内容),全部正确;两项完整性检查也通过了(恰好有 6 个 invoke 和 3 个 event 窗口通道;config_sync_rpc.rs 中没有测试)。i18n 答案列出了导入该包的 12 个源文件,但漏掉了同样会导入该包的 11 个测试和 fixture 文件;问题并未询问这些文件。Pitroom 自带的检查器标记为已验证的引用更少:¹ 这两个答案引用了没有路径的文件名(transcripts.rs:651),检查器无法将其解析为路径,因此将其计为未验证,尽管行号正确。
**审计发现的问题比人工检查更多。**随后,第二个免费工作者(在 space-bunny 上运行的 pitroom audit)重新检查了这 8 个答案:3 个答案一致,5 个被标记为部分正确。争议在于答案不完整或略有偏差,而不是引用的代码行有问题:遗漏内容的列表(会话状态:还有更多写入位置;i18n:还有第二种深度导入式的使用者;RPC 测试:漏掉了 14 个测试)、错误的计数,以及少数引用行与声明相隔几行。我们人工检查了其中一个,审计者是对的:RPC 的 mod tests 代码块中有 59 个测试,而答案说大约 40 个。其他答案未经人工检查,而且审计者本身也是可能出错的免费模型。因此,应把工作者提供的列表或计数视为不错的初步答案;重要时让你的 Agent 确认,这正是 --audit 的用途。
在隔离副本中进行更改:“在 resolveUpdateMode 上方添加一行注释”用时 16 秒,经过 4 个步骤(142,491 个 token)后完成。补丁只涉及一个文件和一行,注释与代码相符;应用之前,你的工作树不会受到影响。
免费模型与 React、Django 和 Kubernetes 上的 gpt-6-sol 对比
**免费模型与 gpt-6-sol 在三个大型代码库上的对比。**在固定的提交版本上,对 React(7,252 个文件)、Django(7,091 个文件)和 Kubernetes(31,353 个文件)进行同类工作。共 9 个范围明确的问题,每个代码库 3 个:定义某个函数的文件和行号、包含某个词的文件数量,以及包含该词的文件。每个答案都通过 git grep 核对,而非凭主观判断:精确的 path:line(文件正确但行号错误得半分)、精确计数,以及对列表采用 F1 分数,同时惩罚遗漏和臆造的文件。每个工作者只读运行这 9 个问题一次,不启用回退,因此无法完成任务的模型会直接失败,而不会被换成其他模型。
| 工作者和模型 | 得分 | 耗时中位数 | token 数中位数 |
|---|---|---|---|
Codex gpt-6-sol(effort medium) | 100% | 16 秒 | 50k |
Codex gpt-6-sol(effort low) | 100% | 20 秒 | 50k |
OpenCode muse-spark-1.3-contributor-free | 100% | 23 秒 | 44k |
OpenCode space-bunny-free | 100% | 35 秒 | 63k |
OpenCode mimo-v2.6-flash-free | 100% | 37 秒 | 42k |
OpenCode big-pickle | 100% | 42 秒 | 91k |
OpenRouter nemotron-3-ultra-550b-a55b:free | 89% | 27 秒 | 42k |
OpenCode longcat-2.5-preview-free | 89% | 29 秒 | 20k |
OpenCode nemotron-3-ultra-free | 89% | 35 秒 | 21k |
OpenRouter inkling:free | 83% | 14 秒 | 41k |
OpenCode nemotron-3.5-lightning-free | 72% | 377 秒 | 69k |
NVIDIA gpt-oss-20b(7 个问题) | 57% | 24 秒 | 42k |
在这些问题上,4 个免费模型的表现与 gpt-6-sol 相同。每个模型都找到了所有定义;错误出现在计数问题(数字错误),以及两个模型的列表问题上,其中一个模型加入了不属于 django/ 的 docs/ 文件。gpt-6-sol 的速度与最快的免费模型一样快,而且在此处降低其 effort 并未影响准确率。nemotron-3.5-lightning-free 在一个列表问题上输出了无关文本,并在另一个问题上触及 10 分钟时限。评分脚本和所有原始答案都在 benchmarks/multi-repo 中。
表格只列出了实际运行的工作者。无法作答的模型(遇到提供商错误,或受 OpenRouter 免费层的共享每日配额限制)不在其中;两个因提供商错误而结束的 gpt-oss-20b 运行也未列入。超时的运行则保留在表中。
审查能否发现预先埋下的 bug?
**审查能否发现预埋的 Bug?** 我们将一个 Bug 改进真实代码中(反转条件检查、调换 `&&`/`||`、翻转 `return`),分别放入 React、Django、Kubernetes 和 Pitroom 本身,然后以一个简单的 “tidy” 提交,并要求 `pitroom review` 审查该提交。共 29 个软件包(14 个仅包含该 Bug,15 个包含该 Bug 及其周围三处仅修改注释的编辑)。当一条 Critical 或 Important 级别的发现指出了被修改的文件,并且引用的行号与改动相差不超过 5 行,或点名了被修改的标识符或其函数时,就算发现了 Bug;“精确行号”是更严格的标准(相差不超过 3 行)。| 工作器和模型 | 发现 Bug | 精确行号 | 审查数 | 平均用时 | 最慢用时 |
|---|---|---|---|---|---|
OpenCode space-bunny-free | 100% | 100% | 29 次(共 29 次) | 2 分 19 秒 | 5 分 46 秒 |
OpenCode nemotron-3-ultra-free | 97% | 79% | 29 次(共 29 次) | 1 分 45 秒 | 3 分 29 秒 |
OpenCode longcat-2.5-preview-free | 83% | 83% | 29 次(共 29 次) | 2 分 53 秒 | 8 分钟(1 次超时) |
Codex gpt-6-sol | 100% | 100% | 9 次(共 29 次) | 38 秒 | 52 秒 |
OpenCode muse-spark-1.3-contributor-free | 100% | 57% | 14 次(共 29 次) | 48 秒 | 2 分 0 秒 |
OpenCode big-pickle | 100% | 92% | 13 次(共 29 次) | 2 分 28 秒 | 5 分 27 秒 |
OpenCode mimo-v2.6-flash-free | 100% | 100% | 10 次(共 29 次) | 4 分 6 秒 | 7 分 40 秒 |
几乎所有模型都找到了几乎所有 Bug,因此这项测试比较的是速度和精确度,而不是它们能否进行代码审查:muse-spark 描述出了正确的 Bug,但引用的行号经常有误(精确率为 57%);gpt-6-sol 和 muse-spark 则明显快得多。只有三个模型完成了全部 29 次审查:其余四个模型的评分基于触及服务提供商限制前完成的审查(免费层的使用限制,以及 gpt-6-sol 触及的 Codex 计划限制);其余未完成的审查不计入评分,也不算作漏报,因此它们的结果仅基于 9 到 14 次审查。每处改动只有 2 到 5 行,难度较低;我们无法计算误报率(所谓“干净”的仅修改注释软件包,最终发现其中的注释实际上有误,因此无法用来计算);而且 React、Django 和 Kubernetes 可能出现在模型的训练数据中。测试框架和所有原始审查结果都在 benchmarks/review-bugs 中。
这项测试不能说明什么
- 每个问题和模型只运行了一次,因此无法衡量结果的差异。这些问题都是范围明确、可用
grep解答的查找任务,因此无法体现模型处理设计问题或大型改动的能力;四个免费模型和gpt-6-sol均获得 100% 的成绩,只说明这项测试对顶尖模型而言很简单,并不意味着它们水平相同。 - 一项开放式任务(“在
docs/中找出最多五个拼写错误”)未能完成:运行 19 分钟后、调用工具 57 次,我们停止了任务。请为工作器分配范围明确的任务。 - “处理的 Token 数”指工作器读取和写入的 Token 数。你的 Agent 若自行完成相同的阅读工作,其耗费的 Token 数是估算值,而非实测值:节省量的计算假设它处理的 Token 数大致相同。工作器成本为 $0,是因为所用模型免费。
- 人工核查只覆盖了关键结论,并未核查每一处引文。
要在自己的代码库中复现:pitroom crew -d <repo> -g bench "<question 1>" "<question 2>" …,然后运行 pitroom wait -g bench、pitroom show <run> 和 pitroom savings --models。
平台
macOS 和 Linux 是主要平台。Windows 在 CI 中运行相同的测试套件(Windows Server、Node 22 和 24,使用模拟工作进程;工作进程 CLI 本身不会在那里运行),但有以下区别:
- Git 防护机制与其他平台一样分为两层,基于 Git for Windows 附带的
sh.exe构建:Git 自身的配置(一个拒绝所有引用更新的reference-transactionhook,以及指向无效地址的推送 URL)始终启用;git垫片(供 cmd.exe 和 PowerShell 使用的git.cmd,以及供 Git Bash 使用的git)会友好地拒绝操作,同时也会阻止add、restore、clean等命令。不通过 shell 启动 Git 的工作进程(直接调用CreateProcess)会跳过垫片,只保留配置层。pitroom doctor会说明当前生效的是哪一层。CI 中已使用 Git for Windows 验证,但尚未在真实 Windows 机器上使用工作进程 CLI 验证。 - 启动器是
pitroom.cmd(位于%USERPROFILE%\.local\bin),使用运行pitroom install的 Node,或PITROOM_NODE中指定的 Node 启动;它不会搜索其他 Node。 - 行尾。 Pitroom 按字节比较和应用补丁。请关闭
core.autocrlf(或像本仓库一样,在.gitattributes中设置eol=lf);尚未测试过对转换为 CRLF 的检出内容运行apply。 - 读取快照中的文件不会被设为只读(Windows 没有 POSIX 模式),而且
--verify命令会在cmd.exe中运行;如果命令缺失,它会报告is not recognized。
快速开始
你需要 Node.js 22.13+ 和至少一个工作进程 CLI:OpenCode v2+(默认工作进程,提供免费模型)、Codex CLI、Claude Code、Gemini CLI(测试版;需要 Google AI Studio 的 API 密钥,Google 账号登录已不再适用)、Qwen Code(测试版;可使用任何兼容 OpenAI 的提供商、DashScope 密钥或本地模型)、Kilo Code 的 CLI(测试版;npm i -g @kilocode/cli,提供 500 多种模型和提供商),或 Antigravity CLI(测试版;命令为 agy,使用 Google 账号登录)。
1. 安装:选择你的 Agent
Claude Code
claude plugin marketplace add ATASTECH/pitroom
claude plugin install pitroom@pitroom
在会话中:/plugin marketplace add ATASTECH/pitroom,然后运行 /plugin install pitroom@pitroom。
Codex
codex plugin marketplace add ATASTECH/pitroom
codex plugin add pitroom@pitroom
npm i -g pitroom
Gemini CLI
gemini extensions install https://github.com/ATASTECH/pitroom
npm i -g pitroom
Cursor
npm i -g pitroom
pitroom install --mcp --client cursor
这会将 pitroom mcp 添加到 ~/.cursor/mcp.json,并保留该文件中的其他服务;如果没有显示,请重启 Cursor。Cursor 可使用下文介绍的十个 MCP 工具。技能会链接到 ~/.agents/skills 和 ~/.claude/skills(使用 --no-skills 可跳过),而 Cursor 的文档将这两个路径都列为加载技能的位置;我们尚未在 Cursor 会话中运行过此功能,且 Cursor 论坛上的一则报告称,其 CLI(cursor-agent)不会加载 ~/.agents/skills。先运行 pitroom install --mcp --dry-run,即可查看它将进行哪些更改。
任何支持 MCP 的 Agent(包括 Claude Desktop 和上述 Agent)
Pitroom 也可以作为通过 stdio 通信的 MCP 服务:提供十个工具,而非 shell 命令和技能(pitroom_run、pitroom_wait、pitroom_show、pitroom_info、pitroom_review、pitroom_audit、pitroom_apply、pitroom_discard、pitroom_revert、pitroom_stop)、作为资源提供的运行记录,以及四个提示词。工具定义会在整个会话期间保留在客户端的上下文中,因此体积很小:约 1.9k 个 token。它在 MCP Registry 中的条目为 io.github.ATASTECH/pitroom,因此可以被浏览该注册表的客户端发现。运行 npm i -g pitroom 后,让 Pitroom 在检测到的客户端(Claude Code、Codex、Gemini CLI、Cursor、Claude Desktop)中自行注册:
pitroom install --mcp # also links the skills; add --no-skills to skip that
pitroom install --mcp --dry-run # only say what it would do
pitroom install --mcp --client cursor,claude-desktop
它会通过完整路径注册启动器(Claude Desktop 之类的应用启动时不会使用你的 PATH),使用 Claude Code、Codex 和 Gemini CLI 各自的 mcp add 命令进行配置(支持用户级配置的客户端会使用用户级配置),合并 Cursor 和 Claude Desktop 的 JSON 配置而不影响其中的其他服务(创建 .bak-pitroom 备份;如果文件不是有效的 JSON,则保持原样),跳过已注册的项,而 pitroom uninstall 会将其移除。pitroom doctor 会显示注册位置。之后重启客户端。也可以手动配置:
claude mcp add pitroom -- pitroom mcp
codex mcp add pitroom -- pitroom mcp
gemini mcp add pitroom pitroom mcp
或者用于 Cursor(~/.cursor/mcp.json)、Claude Desktop(claude_desktop_config.json)等:
{ "mcpServers": { "pitroom": { "command": "pitroom", "args": ["mcp"] } } }
每个工具都会运行对应的 pitroom 命令,因此 CLI 的所有规则均原样适用(权限配置、git 防护、隔离、读取快照)。运行最多等待 waitSeconds 秒(默认值为 50),之后会返回“仍在运行”状态以及对应的 ID,供 pitroom_wait 使用;请将等待时间设为低于客户端的工具超时时间。服务会在启动时所在的目录中运行:stdio 模式下使用客户端所在的目录,或使用 -d DIR 指定的目录(Claude Desktop 会从其他位置启动,因此请为它设置 "args": ["mcp", "-d", "/path/to/project"]);工具的 dir 参数则可为每次调用指定其他目录。
关于 MCP 服务的更多信息:进度、取消、资源、提示词、HTTP
- **实时视图。** 如果运行在几秒后仍未完成,系统会启动仪表板(如果尚未运行),并在结果中提供其地址:“每次运行的实时视图:http://127.0.0.1:7878/”。服务说明会告诉 Agent 在应用自己的浏览器窗格中打开该地址(Claude Code 和 Codex 应用都有浏览器窗格),否则就将地址提供给用户;不会打开系统浏览器。快速完成的运行不会启动仪表板。在配置中设置 `"mcpDash": false`(或设置 `PITROOM_MCP_DASH=0`)即可关闭此功能。 - **进度。** 调用等待运行期间,如果客户端发送了进度令牌,每隔几秒就会收到一条 `notifications/progress`(“running · read · 12s · 3 steps, 2 tool calls · last: …”);收到进度时会重置超时的客户端(协议允许这样做,但并非所有客户端都支持)不会因长时间运行而放弃。**取消** `pitroom_run`、`pitroom_review` 或 `pitroom_audit` 调用会停止该调用启动的运行(取消 `pitroom_wait` 只会停止等待)。 - **资源。** 最新运行会列为 `pitroom://run/`(报告);对于更改了文件的运行,还会列为 `pitroom://run//patch`(确切差异),以便客户端将其附加到对话中。客户端可以**订阅**某次运行(`resources/subscribe`),并在运行状态变化时收到通知(`notifications/resources/updated`);每当最新运行变化时,所有客户端都会收到通知(`notifications/resources/list_changed`),因此无需轮询;通过 HTTP 时,这些通知会在会话的事件流(GET)中到达。 - **提示词。** `research`、`implement`、`review` 和 `crew` 会说明如何针对相应任务使用 Pitroom(在 Claude Code 中,它们显示为 `/mcp__pitroom__research`、……);每项技能也都是同名提示词(`using-pitroom`、`pitroom-research`、……),因此没有技能的客户端也能获得相同的指导。服务说明会告知 Agent 将技能与工具配合使用。 - **不止运行:** `pitroom_run` 接受 `tasks`(并行执行的独立任务,每个任务一个工作者)和 `continue`(在同一工作者会话中继续后续操作);`pitroom_info` 会按 `topic` 提供信息,但不会更改任何内容:`runs`、`history`(再次提问前查找先前的回答)、`stats` 和 `models`(选择工作者)、`savings`、`cooldown`、`config`、`doctor`;搭配 `cooldowns` 使用 `pitroom_stop` 会重试受到速率限制的模型。 - **通过 HTTP 使用。** `pitroom mcp --http [--port N]`(默认端口为 7117)会在 `http://127.0.0.1:7117/mcp` 提供相同的工具,供通过 URL 连接的客户端使用,例如 `claude mcp add --transport http pitroom http://127.0.0.1:7117/mcp --header "Authorization: Bearer $(cat ~/.local/state/pitroom/mcp-token)"`(启动时会打印此命令)。这是一个本地服务:它只监听 127.0.0.1,需要 Bearer 令牌(首次启动时生成,保存在 `/mcp-token` 中,并仅对所有者开放权限;也可以通过 `PITROOM_MCP_TOKEN` 设置),且会拒绝非本地的 Host 或 Origin,因此网页无法使用它。任何持有令牌的人都能以你的身份运行工作者,因此请妥善保密。它会在启动时所在的目录中运行(启动时会打印该目录;如需使用其他目录,请指定 `-d DIR`)。每个客户端都有自己的会话;请求进度的调用会以事件流的形式得到响应。结束会话或停止服务只会结束等待,不会停止运行:请使用 `pitroom_wait` 或 CLI 收集结果。`pitroom install --mcp` 会注册 stdio 命令,无需令牌,也无需运行中的进程。任何其他 Agent(普通 shell)或直接使用 CLI
npm i -g pitroom
pitroom install
| 路径 | 你将获得 |
|---|---|
| Claude Code 插件 | 14 个技能、介绍 Pitroom 的会话启动钩子,以及每次执行 pitroom 命令后显示的卡片。 |
| Gemini CLI 扩展 | 14 个技能,以及介绍 Pitroom 的简短上下文文件(Gemini 会要求你确认该扩展)。Gemini CLI 也可以作为 worker 使用,这是另一种用法:请参阅Workers。 |
| MCP 服务 | 上述九个工具,适用于任何能够使用 MCP 服务的 Agent。不包含技能:工具会自我说明,服务会告知 Agent 如何启动。 |
| Codex 插件 | 14 个技能、介绍 Pitroom 的会话启动钩子(因此即使 Codex 因安装了许多技能而丢弃技能描述,它也能识别 Pitroom),以及每次执行 pitroom 命令后显示的卡片。Codex 会要求你信任该插件的钩子一次。这些钩子会调用 pitroom,它来自 npm(npm i -g pitroom)。 |
npm + pitroom install | CLI,以及链接到 ~/.agents/skills 和 ~/.claude/skills 的技能。 |
选择一种方式即可,不要同时使用多种:如果技能被重复加载,doctor 会发出警告。插件本身不会将 pitroom 加入 PATH,因此如果你想自行运行它(watch、models、savings、状态行),也请通过 npm 安装。
2. 检查设置
pitroom doctor --probe
它会检查 worker CLI、模型、权限和技能,并运行一轮实时往返。
3. 开始使用
Pitroom 是一个工具箱,而不是操作流程:Agent 会在有帮助时使用它,或者你也可以明确提出要求:
使用 pitroom 梳理会话的创建和失效方式,然后提出修复方案。 将此任务拆分为一个 pitroom 小组:检查身份验证、计费和上传功能是否缺少输入验证。
或者自行启动一个 worker 并查看其回执:
pitroom "Which files read the session cookie? Cite file:line."
pitroom -W gemini:gemini-3.8-flash "…" # the same on another worker (see Workers below)
pitroom savings # what all your runs saved so far
pitroom models # what each worker offers, what it costs you, what it used
更新和卸载
# update
claude plugin update pitroom@pitroom
codex plugin marketplace upgrade pitroom
npm i -g pitroom@latest
# uninstall
claude plugin uninstall pitroom@pitroom
codex plugin remove pitroom@pitroom
pitroom uninstall && npm rm -g pitroom
模式
| 标志 | 用途 | 工作树状态 | |
|---|---|---|---|
| read | (默认) | 调研、定位代码、审查 | 不受影响;编辑工具不可用 |
| isolate | -i | 想先审查再应用的代码更改 | 在执行 pitroom apply 前不受影响 |
| write | -w | 快速就地编辑 | 立即编辑;pitroom revert 可精确撤销 |
读取快照。 如果目录中有看起来像机密的文件,read 运行会读取项目当前状态的快照(包括未提交和未跟踪的文件),但不包含这些机密文件和被 git 忽略的文件。快照由 git 对象生成,每种状态只保留一份,供该状态下的所有 read 运行共享(二十个 worker,共用一个快照),并在三天后或执行 pitroom clean 时清理。不会复制任何内容回来:read 运行没有内容需要落地。快照文件为只读,worker 引用的路径会映射回项目中的路径。如果没有看起来像机密的文件,则不会有任何变化:worker 会就地运行。--in-place(或配置中的 "readIn": "project")会直接读取目录本身,例如适用于需要构建输出的任务;"readIn": "snapshot" 则始终使用快照。
答案缓存。 对相同代码提出相同的 read 问题,会立即返回之前的答案,不会运行 worker:pitroom ⟲ cached answer · the same question on the same code as run … · no worker ran。“相同代码”指完全一致:提交以及每个工作文件,包括未提交和未跟踪的文件(被 git 忽略的文件不算代码),因此任何编辑都会使其成为一个新问题。只有经验证可靠的答案才会复用(运行已完成、每条文件:行号引用均已核实、没有审计提出异议),且只保留 7 天(配置中的 "cacheDays",设为 0 可关闭,或使用 PITROOM_CACHE_DAYS)。后续追问、网页运行、计划任务、审查、审计、--verify 运行、并行工作(crew)和更改都不会使用缓存作答;--fresh 则会照常运行 worker(之后会复用这次运行的答案)。“相同代码”不包括:被 git 忽略的文件(构建输出、已安装的依赖项)以及作答的 worker 或模型;如果问题取决于这些内容,请使用 --fresh。
pitroom run "Find every place we build SQL strings by hand; file:line and risk"
pitroom run -i --link node_modules --verify "npm test" "Fix the off-by-one in paginate() and add a test"
pitroom run -w "Rename getUserById to findUserById in src/ and fix imports"
pitroom run --continue last "Now handle the empty-page case too"
长时间运行的任务:--bg 会立即返回;pitroom wait <id> 最多阻塞 9 分钟(专为工具限时 10 分钟的 Agent 设计;退出代码 75 表示“再次调用 wait”)。
工作流
Pitroom 提供一套完整的开发方法论,以技能的形式呈现,并根据 superpowers 改编,让它的子 Agent 成为低成本的执行者:你的 Agent 会与你一起头脑风暴并制定计划,然后按任务逐项执行计划,由执行者负责敲代码,另一个模型负责审查。
工作流逐步说明
| 步骤 | 技能 | 命令 |
|---|---|---|
| 设计 | pitroom-brainstorming | 将规范写入 docs/pitroom/specs/ |
| 计划 | pitroom-writing-plans | 将计划写入 docs/pitroom/plans/,并为每项任务指定执行者层级 |
| 实现 | pitroom-driven-development | pitroom run -i --plan PLAN --step N |
| 审查 | pitroom-review | pitroom review <run>(由另一个模型执行只读审查) |
| 修复 | pitroom-receiving-review | pitroom run --continue <run> "…"(重新审查时只会看到修复内容) |
| 合入 | pitroom-driven-development | pitroom apply <run>,运行你的测试,并提交 |
| 分支审查 | pitroom-review | pitroom review --range main..HEAD --plan PLAN |
| 收尾 | pitroom-finishing | 合并、创建拉取请求或保留更改:由你选择,绝不自动执行 |
审查包包含待审查的差异及其上下文(前后各 10 行),审查者的 CLI 会将其发送给该执行者对应的模型提供方。Pitroom 不会过滤内容:已提交到审查范围内的机密也会随之发送。
层级用于将计划任务映射到执行者:"tiers": {"cheap": "opencode", "standard": "codex", "capable": "claude"}。pitroom plan status PLAN 会根据运行记录重建计划进度(即使上下文压缩后仍然有效),而 pitroom plan note 会将完成情况和裁定记录在仓库之外。
审核
Pitroom 会检查工作器引用的每个 path:line,这只能证明该行存在,不能证明关于它的说法属实。审核会让第二个工作器根据你的项目核实答案中的关键说法,并给出 AGREE、PARTIAL 或 DISAGREE,同时指出有争议的说法。
pitroom audit <run> # now: re-check one read run (-W picks the auditor)
pitroom run --audit "…" # re-check this run's answer when it finishes (--no-audit skips it)
或者在配置中设置 "audit": 0.1(或设置 PITROOM_AUDIT=0.1),让大约十分之一的读取运行在后台接受审核,无需你的 Agent 提出请求。同一次运行始终会被纳入或排除在抽样之外。
费用、限制和判定结果的显示位置
- **费用:**默认关闭。审核会运行审核器进行一次读取,因此费用约为工作器自身令牌用量乘以审核率,使用
audit层级(否则使用cheap,即如果你的低价层级是免费模型,就使用免费模型)。它绝不会延迟运行或导致运行失败。 - **审核对象:**审核器绝不会是给出答案的工作器和模型;如果没有配置其他工作器,就不会进行任何审核(
pitroom doctor会说明这一点)。只有读取运行会接受审核:更改会使用pitroom review。 - **显示位置:**答案卡片和
pitroom show会显示判定结果及有争议的说法;统计信息标签页会按工作器统计已确认的审核答案数量。审核不计为运行,也不会保存任何内容。 - **抽样,而非保证。**审核器也是模型:它可能存在相同的盲点,而且少数几次审核不足以说明工作器的表现。将
DISAGREE视为需要查看的理由,并将AGREE视为又一条参考信号。
更正("auditFix": true,或 PITROOM_AUDIT_FIX=1;默认关闭)。如果审核结果为 PARTIAL 或 DISAGREE,并指出有争议的说法,答案会返回给给出答案的工作器:在它自己的会话中跟进(会话仍保留它读取的内容),附上有争议的说法,让它对照文件核查(审核器也可能出错),然后重新给出完整答案,并在 OPEN ISSUES 下说明它接受了哪些说法。只进行一轮:更正绝不会再次被退回。已审核运行的卡片和 pitroom show 会注明更正运行(── fix: …)。这需要工作器能够继续会话,所有内置工作器都支持此功能。
重点抽样("auditFocus": true,或 PITROOM_AUDIT_FOCUS=1;默认关闭)。设置审核率后,抽样会更倾向于审核容易发现问题的情况:对于要求列出所有内容、给出列表或计数的问题,审核率会翻倍;对于已审核答案中确认率低于一半的工作器(30 天内至少审核 3 次),审核率会再次翻倍;对于最近 5 次或更多答案全部得到确认的工作器,审核率会减半。--audit 和 --no-audit 始终不会改变;运行记录会保存其获得的概率及原因。
评测
在你自己的代码上运行自己的基准测试:提出答案已知的问题,交给你想比较的工作器,并进行评分。
pitroom eval questions.json -W opencode -W codex:gpt-6.1-sol # every question to every worker, as one group
pitroom eval questions.json --json # the same as JSON: truths, rows, a summary per worker
{
"questions": [
{ "id": "def", "kind": "definition", "task": "Which file and line define `export function loadConfig(`? The SUMMARY line must be only path:line.", "truth": { "grep": "^export function loadConfig\\(", "regex": true, "dir": "src" } },
{ "id": "count", "kind": "count", "task": "How many files under src/ contain the word effective? The SUMMARY line must be only the number.", "truth": { "grep": "effective", "word": true, "dir": "src" } },
{ "id": "list", "kind": "set", "task": "List every file under src/ that mentions node:sqlite. The SUMMARY line must be only the paths, separated by commas.", "truth": ["src/cli/commands.ts", "src/core/history.ts"] }
]
}
标准答案会被记录下来("path:line"、一个数字或路径列表),或在评测开始时通过 git grep 查找(grep,以及可选的 dir、word、regex、exclude),因此会随着代码变化而保持准确。评分方式与多仓库基准测试一致:精确匹配 path:line 的定义得 1 分,文件正确得 0.5 分;计数只有完全匹配才得分;列表按其列出的路径计算 F1 分数(取自 SUMMARY,否则取自 DETAILS)。每个工作器独立作答:不使用回退、审核或缓存答案。这些运行属于普通运行组,因此 pitroom watch -g、仪表板和历史记录都会显示它们。
团队
在这个仓库上运行的真实团队:使用免费的 OpenCode Zen 模型,同时回答四个问题:
pitroom crew -g v04-demo \
"Where does Pitroom enforce the maxParallel queue, and how does a waiting run react to pitroom stop? Cite file:line." \
"How does the git guard shim resolve git aliases? Cite file:line." \
"Which fields of OpenCode v2 events does the parser read for token usage, refused tool calls and errors? Cite file:line." \
"How does pitroom apply -g decide which patches to apply and in what order? Cite file:line."
pitroom watch -g v04-demo --json # what the primary agent follows, one line per change:
团队输出的内容:Agent 遵循的流和状态表
{"event":"started","run":"20260930-102812-a65d","mode":"read","task":"Where does Pitroom enforce the maxParallel queue, and how d…"}
{"event":"progress","run":"20260930-102812-a65d","steps":3,"tools":4,"last":"grep SIGINT|SIGTERM|stop.*queued|stopped.*queued"}
{"event":"done","run":"20260930-102812-a563","time":"21s","worker":"opencode (default model)","summary":"The shim resolves `alias.<sub>` via `real git config --get` in a loop …","refs":"5/5"}
{"event":"all-done","runs":4,"ok":4,"failed":0}
$ pitroom status -g v04-demo
RUN STATE MODE TIME STEPS WORKER NOW / RESULT
20260930-102812-0c0d done read 30s 5 opencode (default model) Parser `src/backends/opencode/events.ts` reads …
20260930-102812-7642 done read 27s 5 opencode (default model) `pitroom apply -g NAME` applies finished isolat…
20260930-102812-a563 done read 21s 2 opencode (default model) The shim resolves `alias.<sub>` via `real git c…
20260930-102812-a65d done read 39s 7 opencode (default model) maxParallel is enforced by file-based slots (`s…
用户可以通过 pitroom watch -g NAME 实时查看同一张表;pitroom wait -g NAME --brief 会为每位工作者打印一行,pitroom show <run> 则会显示完整答案。
对于变更,pitroom crew -i … 会为每位工作者提供当前状态的独立副本,而 pitroom apply -g NAME 会按顺序应用补丁,遇到第一个冲突时停止。最多同时运行 maxParallel 位工作者(默认 20,最多 30 位),其余工作者排队;每个仓库一次只允许一个 --write 运行。pitroom stop -g NAME 会停止正在运行和排队的工作者。
技能
14 项技能
| 技能 | Agent 使用它来 |
|---|---|
using-pitroom | 了解 Pitroom 提供什么,以及何时值得使用(由插件在会话开始时注入;可选) |
pitroom-brainstorming | 在编写任何代码之前,将想法转化为已批准的设计 |
pitroom-writing-plans | 编写逐项任务计划,并为每项任务指定工作者级别 |
pitroom-driven-development | 执行计划:每项任务分配一位工作者,由另一个模型审查,进行修复循环、应用并提交 |
pitroom-worktrees | 为工作创建独立分支 |
pitroom-tdd | 先编写测试,既适用于自身,也适用于它向工作者说明的任务 |
pitroom-debugging | 查找根本原因,并让工作者收集证据 |
pitroom-verification | 在声称任何工作已完成之前运行检查 |
pitroom-review | 让另一个模型审查变更、修复轮次、分支或 PR |
pitroom-receiving-review | 以严谨的技术态度评估审查意见 |
pitroom-finishing | 按用户选择合并、创建 PR 或保留分支 |
pitroom-research | 通过只读工作者查找、梳理或讲解代码 |
pitroom-implement | 在独立副本中完成一次性变更 |
pitroom-crew | 将独立工作拆分给并行工作者,并合并结果 |
命令
所有命令和退出代码
pitroom run [-r|-w|-i] [-W WORKER] [-m MODEL] [-d DIR] [-f FILE]… [-t 30m] [--verify CMD] [--link a,b] [--bg] "task"
pitroom run --continue <run|last> "follow-up"
pitroom crew [-i] [-g NAME] "task 1" "task 2" … (or --task-file with --- separators)
pitroom run -i --plan PLAN --step N [--tier T] ["notes"]
pitroom review [run | --range A..B [--plan PLAN]] [--tier T | -W T] [--bg]
pitroom audit RUN [-W worker]
pitroom eval QUESTIONS.json [-W worker]… [--json] your questions with known answers, scored per worker
pitroom mcp [-d DIR] [--http [--port N]] # serve Pitroom as MCP tools on stdio, or over HTTP on 127.0.0.1 (bearer token)
pitroom cooldown [--clear]
pitroom plan status PLAN [--json] · pitroom plan note PLAN "Task N: …"
pitroom status|wait|watch [run… | -g NAME] wait: --any --brief --timeout · watch: --json|--brief --interval
pitroom dash [--detach] [--port N] [--open] [--stop] a live page of the runs on 127.0.0.1
pitroom history [TEXT] [--model M] [--state S] [--since 30d] [--limit N] [--json] finished runs, searchable
pitroom history stats [--since 30d] · pitroom history import per worker and model · take in older runs
pitroom show [run] --patch --events --full --json
pitroom apply [run | -g NAME] · pitroom discard|revert [run] · pitroom stop [run | -g NAME]
pitroom ls [--running] [-g NAME] · pitroom clean [--days 14] [--yes]
pitroom savings [--since 7d|30d|all] [--models] [--card file.svg] [--badge]
pitroom models [worker] [--all] [--json] models, effort levels, your costs, your usage
pitroom statusline [--then CMD] · pitroom hook-card
pitroom doctor [--probe] · pitroom config · pitroom init [--model ID] [--fallback A,B] [--yes] [--force] · pitroom install [--copy] [--force] [--mcp [--client A,B] [--no-skills] [--dry-run]] · pitroom uninstall
退出代码:0 正常 · 1 工作者失败 · 2 用法错误 · 3 已拒绝/设置失败 · 4 超时 · 5 违反只读限制 · 6 验证失败 · 75 仍在运行。
历史记录
搜索历史记录
每次已完成的运行也会写入 SQLite 数据库(Pitroom 状态目录中的 history.db;使用 Node 内置的 node:sqlite,无需安装任何内容)。数据库会保留任务、工作者和模型、时间、令牌、节省量、工作者执行的步骤、答案和差异,并支持搜索:
pitroom history "login bug" # full-text search over the task, the answer and the steps
pitroom history --state problem --since 7d
pitroom history stats --since 30d # runs, success rate, average time and tokens per worker and model
运行期间,原始事件流会保存为普通文件(这是最简单且能在崩溃后保留内容的方式)。运行结束后,事件流会压缩;只有未成功的运行才会保留 stderr 日志。pitroom clean 会移除旧运行目录,但历史记录会保留这些记录:pitroom show <run> 仍会打印报告、步骤和补丁。历史记录功能出现之前的运行会由 pitroom history import 导入(首次运行 pitroom history 和 pitroom dash 时也会执行导入)。文件仍是数据来源:可以删除数据库,再通过 history import 根据仍保存在磁盘上的运行记录重建数据库。
状态行和钩子卡片(以及应用中的显示方式)
有两项设置可以显示每次委派,无论 Agent 是否提及。状态行会显示正在运行的工作进程和本周节省的开销(--then 会将你自己的状态行放在最前面);每次 Agent 运行 pitroom 命令后,每个阶段都会显示一张卡片(已启动、已完成并显示结果、已应用)。插件会自行注册卡片钩子;使用 pitroom install 时,将两项都添加到 ~/.claude/settings.json:
{
"statusLine": { "type": "command", "command": "pitroom statusline --then 'your-own-statusline'" },
"hooks": {
"PostToolUse": [{ "matcher": "Bash", "hooks": [{ "type": "command", "command": "pitroom hook-card", "timeout": 10 }] }]
}
}
Claude Code 和 Codex 应用都不会显示钩子消息或状态行。对于它们,有两种无需设置的方法:
pitroom dash --detach会打印实时仪表板的地址,其中有三个标签页:实时(将每个正在运行和最近运行的任务显示为动画卡片;点击卡片即可查看任务、工作进程逐步执行的操作、结果、差异和详细信息)、历史记录(搜索和筛选 Pitroom 运行过的所有任务;每次运行都会以相同的卡片形式打开)和 统计数据(按工作进程和模型统计成功率、耗时、令牌用量和节省的开销)。仪表板为只读,仅监听127.0.0.1,无请求一小时后会自动停止(pitroom dash --stop可提前停止)。可在浏览器或应用自带的浏览器窗格中打开。技能会指示 Agent 在后台运行工作进程时启动仪表板并向你提供地址。pitroom watch -g NAME --brief会在工作进程启动时打印一行卡片信息,在工作进程结束时再打印一行。在 Claude Code 中,Agent 会通过 Monitor 工具运行它,信息会显示在应用中;在 Codex 中,命令的输出区块会随着运行逐步填充。
工作原理
Pitroom 为每个工作进程处理的无头模式问题
Pitroom 会为每个工作进程处理以下问题:opencode run 会因 stdin 管道保持打开而一直阻塞;ask 权限会导致无头运行停滞;默认输出包含 ANSI 转义序列和横幅;在 OpenCode v2 中,普通的 run 会连接到共享后台服务,因此不会应用每次运行的权限设置和 git 防护。Pitroom 会关闭 stdin,使用仅允许/拒绝的配置文件,解析 --format json,并始终运行私有的 --standalone 服务器。
工作器
工作器由目标指定:backend[:model]。
pitroom run "…" # preferred worker (config "worker", default opencode)
pitroom run -W opencode:opencode/space-bunny-free "…" # a specific backend and model
pitroom run -W 'codex:#low' "…" # the model from config "models" (not Codex's default), low reasoning effort
pitroom run --effort high "…" # model#level (Codex, Claude Code, OpenCode; Gemini CLI has no effort option)
pitroom run -W claude:haiku "…" # Claude Code on a cheap model
pitroom run -W gemini:gemini-3.8-flash "…" # Gemini CLI (beta; needs a Google AI Studio API key)
pitroom run -W qwen:qwen3-coder-plus "…" # Qwen Code (beta; your provider from ~/.qwen/settings.json)
pitroom run -W kilo:kilo/<model> "…" # Kilo Code's CLI (beta; any model from `kilo models`)
pitroom run -i -W antigravity "…" # Antigravity CLI (beta; your Google account, models from `agy models`)
pitroom run -m nvidia/z-ai/glm-5.3 "…" # another model on the preferred worker
| 工作器 | 状态 | 只读由谁强制执行 | 收据中的费用 | 备注 |
|---|---|---|---|---|
| OpenCode (v2+) | ✅ | 每次运行的权限规则 | 已报告 | 每次运行都会启动私有的 --standalone 服务 |
| Codex CLI | ✅ | 操作系统沙箱(read-only / workspace-write) | 仅令牌 | 执行 codex login;工作器会忽略你的 ~/.codex/config.toml(其中的 MCP 服务在沙箱外运行);模型支持 #effort |
| Claude Code | ✅ | 工具允许列表(--restricted --safe-mode、dontAsk) | 已报告 | 执行 claude auth login;它通常默认使用 Opus,因此建议使用 -W claude:haiku |
| Gemini CLI | beta | --approval-mode plan 加上 Pitroom 的策略规则 | 仅令牌 | 使用 Google AI Studio 的 API 密钥(通过 gemini 登录或设置 GEMINI_API_KEY;Google 会拒绝使用 Google 账号登录);工作器在私有的 Gemini 主目录中运行,不会使用你的钩子、MCP 服务和技能;Gemini 0.62 不会强制执行机密文件规则,但读取包含疑似机密文件的运行会读取不含这些文件的干净快照;请固定模型,例如 -W gemini:gemini-3.8-flash;--continue 可用(按会话 ID;参见说明) |
| Qwen Code | beta | --approval-mode plan;仅在工作目录内编辑,其他位置的编辑会被拒绝 | 仅令牌 | 已使用脚本模型针对 Qwen Code 0.25 进行检查,尚未使用真实提供方进行检查;使用你在 ~/.qwen/settings.json 中的登录信息和模型(任何兼容 OpenAI 的提供方、DashScope、本地模型);--safe-mode 会阻止工作器使用你的 QWEN.md、钩子、技能和 MCP 服务,并阻止 CLI 写入本次运行的记忆;如有要求,会读取 .env,因此读取包含疑似机密文件的运行会读取干净快照;参见说明 |
| Kilo Code | beta | 每次运行的权限规则(OpenCode 的配置) | 已报告 | @kilocode/cli(OpenCode 的一个分支)的 CLI:通过 KILO_CONFIG_CONTENT 使用相同的 pitroom-read/pitroom-write 配置,并沿用你的登录信息和提供方;工作器使用私有状态文件夹,因此不会附加到正在运行的 kilo daemon(它会忽略这些配置);已使用脚本模型针对 Kilo 7.8.8 进行检查,尚未使用真实提供方进行检查;参见说明 |
| Antigravity CLI | beta | 每次只读运行都会使用其自身的只读快照(agy 的无头运行没有只读模式) | 仅令牌 | 已针对 agy 1.3.5(macOS)进行检查;修改时使用 -i,而不是 -w(其拒绝规则是模式,在 git 防护和隔离副本之上再加一层);每个工作区都有独立的主目录(agy 只从 ~/.gemini 读取设置),因此其命令看不到你的点文件;无答案运行(被拒绝的命令可能导致其结束当前轮次且不返回答案,并以状态码 0 退出)会被视为失败;使用你的 Google 账号登录(Gemini CLI 现在会拒绝使用该账号登录);在 agy 的终端沙箱中运行(macOS、Linux);这些工作器无法访问 Web;请提供备用方案,其配额按账号计算;参见说明 |
模型、费用与工作量
模型、费用和工作量级别
pitroom models 会列出每个工作者提供的内容(Codex 使用自身的模型缓存,Claude Code 使用其别名,OpenCode 使用 opencode models,Gemini CLI 使用内置名称)、每个模型接受的推理力度级别、你设定的费用,以及你自己的运行记录:
worker model effort (* default) cost runs avg tokens $/run in use
codex gpt-6.1-sol low*/medium/high/xhigh/max/ultra 2 20 174k - tier standard
codex gpt-6-sol low/medium*/high/xhigh/max/ultra 1 1 24k - -
claude haiku low/medium/high/xhigh/max ? - - - -
Pitroom 不知道任何供应商的价格,除非你启用 priceFeed(见配置说明),否则也不会获取价格;因此,费用由你填写:在配置中设置 "costs": {"codex:gpt-6-sol": 1, "codex:gpt-6.1-sol": 2},单位不限(这里只会进行比较;Codex 和 Gemini 收据中的美元价格需填在 workerPrices 中,见配置说明)。随后,pitroom doctor 会打印正在使用的模型费用,并在你为同一工作者中更便宜的模型定价时提示你。只指定力度的目标(codex:#low)会使用 models 中的模型;如果 Codex 或 Claude Code 工作者没有固定模型,则会收到警告,因为它会使用供应商自己的默认模型,而该模型可能会变更且费用更高。--effort LEVEL 可为单次运行设置级别;你的 Agent 会从 pitroom models 中选择模型和级别(符合要求的最便宜选项:查询使用 low,普通更改使用 medium,审查使用 high)。
备用选项可以跨后端(例如 "fallback": ["codex:#low", "opencode"]):遇到速率限制、已退出登录或缺少模型的工作者会将任务交给下一个工作者。后续操作(--continue)始终留在拥有该会话的工作者上。编写适配器:参见 docs/backends.md。如果模型提示“速率受限”(每日配额已用完或供应商过载),Pitroom 会在提示给出的时长内记住此状态,或进行估算;只要还有备用选项,后续运行就会跳过它,避免每次都等待它失败。pitroom cooldown 会列出被跳过的模型及跳过截止时间,--clear 会重新尝试,doctor 也会显示这些信息。
配置
环境变量
| Env | 默认值 | |
|---|---|---|
PITROOM_WORKER | opencode | 首选工作者目标:backend[:model] |
PITROOM_MODEL | 工作者的默认模型 | 首选工作者使用的模型 |
PITROOM_FALLBACK | 无 | 以逗号分隔的备用目标,在模型或供应商出错时切换使用 |
PITROOM_TIMEOUT | 30m | 单次运行的超时时间 |
PITROOM_MAX_PARALLEL | 20 | 同时运行的工作者数量(最多 30);超出的任务会排队 |
PITROOM_PRIMARY | sonnet | 用于节省费用估算的价格预设:sonnet、opus、haiku、gpt-5 |
PITROOM_PRICE | 自定义主模型价格,单位为每 1M 个 token 的美元价格:"in,out[,cachedIn]" | |
PITROOM_HOME | ~/.local/state/pitroom | 运行记录和账本的存放位置 |
PITROOM_NO_SECRET_WARNING | 设为 1 可关闭关于工作者目录中 .env 文件和私钥的警告 | |
PITROOM_<WORKER>_BIN | 位于 PATH 中 | 工作者 CLI 的路径,例如 PITROOM_OPENCODE_BIN |
也可以将默认值写入 ~/.config/pitroom/config.json(命令行标志和环境变量仍具有更高优先级);pitroom config 会显示每个生效值及其来源。pitroom init 会根据你安装的工作者 CLI 和 OpenCode 模型建议初始配置(由免费模型组成的备用链;安装了多个 CLI 时会建议使用不同层级),只有指定 --yes 时才会写入;它绝不会替你选择模型。对于未指定模型的目标(-W codex、"codex" 备用项),models 会为每个工作者指定默认模型;目标中指定的模型或 -m 仍具有优先级。tiers 用于为 --tier 以及计划任务中的 **Worker:** 行指定工作者:
config.json:示例及各项设置说明
{
"worker": "opencode",
"fallback": ["opencode:opencode/space-bunny-free", "codex"],
"models": { "codex": "gpt-6.1-sol", "claude": "claude-sonnet-5-5" },
"costs": { "codex:gpt-6-sol": 1, "codex:gpt-6.1-sol": 2 },
"tiers": { "cheap": "opencode", "standard": "codex", "capable": "claude", "review": "opencode:opencode/space-bunny-free" },
"timeout": "20m",
"primary": "opus",
"link": ["node_modules"],
"maxParallel": 20,
"audit": 0.1
}
常见问题
我的代码会发送到哪里? 会发送到工作器所用模型的提供商。如果代码是私密的,请让工作器使用本地模型。OpenCode 和 Claude Code 工作器的文件读取工具会拒绝读取 .env 文件和私钥;Codex 工作器没有这类限制,而且 shell 命令仍能读取这些文件,因此请勿将机密放在你委派任务的文件夹中。
“节省金额”是如何计算的? 计算时假设主 Agent 处理的令牌数与工作器处理的差不多,按主 Agent 的标价(PITROOM_PRIMARY / PITROOM_PRICE)计费,再减去工作器的费用和读取报告的费用。这只是估算值,并会标明为估算。
工作器会破坏我的仓库吗? 工作器无法修改 git 历史、引用或暂存区(通过权限配置文件和 git 防护实现),也不能批量删除文件;写入模式下的编辑可用一条命令撤销。但该防护并非操作系统级沙盒:脚本中通过绝对路径调用的 git,以及非 git 工具,都不在其保护范围内。这正是 --isolate 存在的原因:在应用更改之前,不会有任何内容进入你的工作树。
工作器能读取我的 .env 吗? 在只读运行中不能:如果目录中有看起来像机密的文件(.env、prod.env、私钥和密钥库、.netrc、credentials.json、secrets.json),工作器读取的会是项目的干净快照(见下文),这些文件不会出现在快照中,无论工作器 CLI 原本是否允许读取它们。编辑(-i、-w)和审查则有所不同:隔离副本(-i)不会包含被 git 忽略的文件,因此被 git 忽略的 .env 不会放入其中;但未被忽略的 .env 会被复制。Pitroom 检测到这类文件时会发出警告(设置 PITROOM_NO_SECRET_WARNING=1 可关闭警告)。免费模型可能由第三方托管:请勿将真实机密放在你委派任务的内容中。
如果工作器失败了怎么办? Pitroom 会以非零状态码退出,并给出实际原因(例如,默认模型已不存在),你的 Agent 则会自行继续工作。pitroom doctor 可诊断设置问题。
责任
Pitroom 按“原样”提供,遵循 MIT License,并且是一个独立项目:它与 OpenAI、Anthropic、OpenCode 或它能驱动的其他工具均无隶属关系,也不受其认可。
你需对自己的使用方式负责。 你决定委派什么任务、选择哪个模型提供商、授予工作器哪些权限,以及将哪些内容应用到项目中。工作器是 AI Agent,也可能出错:请审查其更改,并在依赖这些更改之前运行测试。Pitroom 的权限配置文件、git 防护和隔离副本可以降低风险,但不能构成抵御蓄意攻击者或恶意仓库的安全边界。请勿将机密放在你委派任务的文件夹中;对于尚未审查的更改,请优先使用隔离模式;并遵守你所连接的工作器 CLI 和模型提供商的条款。哪些内容会发送给提供商,请参阅隐私政策。
参与贡献
欢迎提交问题和拉取请求。请从 CONTRIBUTING.md 开始,其中介绍了设置、测试、dist 包和提交规范。工作器适配器是最容易上手的部分:docs/backends.md。
npm install
npm test # end-to-end tests against a fake worker CLI + adapter contract tests on recorded real streams
npm run typecheck
安全: 请按照 SECURITY.md 中的说明,通过私下渠道报告漏洞,不要在公开问题中报告。
致谢
工作流技能(头脑风暴、规划、工作器驱动开发、审查、调试、TDD、验证、工作树、收尾)改编自 Jesse Vincent 在 MIT License 下发布的 superpowers;相关声明见 THIRD_PARTY_NOTICES.md。
许可证
Pitroom 根据 MIT License 授权。详情请参阅 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。