Loading...

PR技能包 · tstack

开好PR,只说一句“council”,代理就会一直改,直到三家不同公司的AI都满意

在Claude Code或Codex里开好PR后喊一声“council”,三家不同公司的AI只读代码、不动代码,按10分制打分。你自己的代理负责修改被指出的问题,再交回去审,每一轮的分数都会以表格形式留在PR描述里。council收录在Theo公开的PR技能包tstack中。我们整理了公开仅两天内,其他开发者在自己的仓库里用它跑完审查并合并的PR。这些PR里没有写tstack的名字,但从留下的评分表格式就能认出来。

2026年10月26日·3 个案例

T3 Code画面。在“Consult council to make sure this is safe. Merge it once they're happy.”这条请求下,“Council: PR #31 safety (Opus) / (Muse) / (Sol) Running”三行正在运行,代理回答说只有三位都认为安全才会合并。
这是Theo首次在X上介绍council时附上的截图。来源:Theo Browne X

10月23日,拥有57万订阅者的开发者YouTuber、T3 Code和T3 Chat背后公司的CEO Theo Browne在X上发帖:"I wrote a \"council\" skill that makes my agent argue with Opus 5.5, Muse Wonder Full and GPT-6.1 Sol before it is allowed to merge"(我写了一个council技能,让我的代理在获准合并之前,先和Opus 5.5、Muse Wonder Full、GPT-6.1 Sol争论一番)。到10月26日,这条帖子获得18万次浏览、1,714次收藏。回复里有"Give me the council skill please"(求这个技能)和"Have you released this council skill publicly?"(公开了吗?)。

第二天,Theo把自己每天在用的技能以tstack为名公开成仓库。仓库的星标从10月25日的38个涨到26日的103个。公开仅两天,就出现了其他开发者在自己的仓库里跑council、一路合并的PR。

tstack里有9个PR技能。除了council,还有盯着PR过CI和审查机器人、只修真正问题的babysit,停在可以由人来合并这一步的full stop,以及无人值守也会一路推到合并的full send,技能之间还会互相调用。可在Claude Code和Codex中运行。

council会请三家不同公司的AI担任评审。评审只读代码,按10分制打分;修改由你自己的代理负责,一直送审到三位都满意为止。反复审查期间防止PR越改越大,也是代理的任务;每一轮的分数都会以表格形式留在PR描述里。

Reference 01开发Bitwarden密码库备份工具vault-mirror的Nikita Maximilian Grimm · GitHub

备份工具的报错,现在会直接告诉你该检查什么、该传哪个参数

PR里没有写tstack这个名字,但留下的评分表格式与10月25日加入tstack council的格式相同。 这个PR改的是设置或恢复过程中出错时终端显示的提示。备份目录不存在时的报错,改动如下。

改动前:error: opening backups/run.lock for recovery; copy BACKUPS_DIR to a writable directory or retain run.lock when copying backups: No such file or directory (os error 2)
改动后:error: no backup directory at backups; check BACKUPS_DIR or pass --env-file vault-mirror.env: No such file or directory (os error 2)

现在报错除了说明备份目录不存在,还会直接指出该检查的设置(BACKUPS_DIR)和该传入的参数(--env-file)。警告和错误改为分开输出,帮助信息也改成按单词换行。

评审一开始是Claude Opus 5.5和GPT 6.1 Sol,从第4轮起加入了GPT 6 Astra。和默认的“三家不同公司”不同,这里有两个GPT。Opus的分数从8 → 9.5 → 10一路上升,到第5轮又降到8.5,原因是Nikita那时把审查范围扩大到了终端显示质量和文档。第7轮,三位评审在所有项目上都给了10分。

整个循环约59分钟结束(预设上限是150分钟)。评审只读代码,确认问题并动手修改的是主代理。256个测试实际跑过,通过23项CI后于10月26日合并。

终端输出前后对比。上方“BEFORE Hard wrapping; no corrective action”中,通知失败的警告在行尾被截断;下方“AFTER Clear continuation and next action”中,输出整齐地延续到“Check NOTIFY_SUCCESS_URL and the notification service.”
通知失败的警告。以前会在行尾被截断,现在会附上下一步该做什么:“Check NOTIFY_SUCCESS_URL and the notification service.”(请检查通知地址和通知服务)。PR中附的图是根据终端输出重新绘制的。
帮助界面前后对比。“Safety explanations split at the edge”中,选项说明在单词中间断开;“Whole words and aligned continuations”中按单词换行,续行也对齐了。
帮助信息中的选项说明。以前在单词中间断行,现在按单词换行,续行也会对齐。

Reference 02开发Hermes代理iPhone应用hermex的Uzair Ansar · GitHub

更新后卡住的iPhone应用聊天界面,经过三家公司AI的五轮审查,由代理修好了

hermex是一款用来和Hermes代理对话的iPhone应用。主机端的hermes-agent升级到0.22.3后,只要主机把Bot Chat换成新的,应用的聊天界面就会卡在"The conversation identity changed. Check this bot in Desktop."(会话标识已变更,请在桌面端检查这个机器人)。这个PR让应用跟上新的Bot Chat,并显示已变更的提示。

评审是Claude Opus 5.5、GPT-6.1 Sol和Gemini 4 Argon,三家公司的模型都坐上了评审席。五轮下来,Opus从8 → 9,GPT Sol从6 → 8,Gemini从6.5 → 10。

分数之外也做了验证。指定的234个测试全部通过,字符串目录里的2,489个键全部检查过。还把iPhone 17的构建接到真实的Hermes主机上,确认原本能用的路径依然可用。通过6项CI后于10月26日合并。

Reference 03开发方官方演示 · tstack作者Theo Browne在自家公司产品T3 Code上提交的PR

还没写代码就先问三个AI该砍什么,打开线程时加载的数据少了85%

Theo在自家产品T3 Code的PR里,还没动手写代码就先召集了council。原文把这一步写作“round 0”,要削减什么就是在这时由council定下的。council认为,线程正文数据只占打开线程时接收数据量的1~8%,而折叠行延后加载的方案不值得为此扩充协议。

据Theo公布的测量,在一份真实数据副本(325个线程)上打开7个线程,接收的数据合计从8,528KB降到1,296KB,减少85%。一个带71个子线程的线程从3,046KB降到293KB。三位评审(Claude Opus 5.5、Muse Wonder Full、GPT-6.1 Sol)的分数在4轮里从7~8分升到9~9.5分,PR于10月25日合并。

页首的截图是Theo在另一个PR(#31)里召集council的场景。一句请求就让三位评审同时开始审查,代理回答说只有三位都认为安全时才会合并。

Theo在页首截图里发出的请求

Consult council to make sure this is safe. Merge it once they're happy.

如果想自己合并,就删掉最后一句。

大家怎么说

好评

  • “Declined as scope creep after the bar was met: recolouring Python's annotation `:` / `->` cyan to match TS.”

    达标后视为范围蔓延而拒绝:把Python类型注解里的`:` / `->`改成青色,以和TS一致。

    出自用4轮council设计审查修改自己VS Code主题的那个PR正文。

    Abraham Prince · GitHubgithub.com
  • “Why not adding gemini with no weight in the decision just to make fun of his decision 😂”

    要不把Gemini也加进去,但不让它影响决定,就为了笑话它的判断 😂

    Theo回复"I hate how much I like this idea."(我讨厌自己这么喜欢这个主意),随后在自己的council里加了Gemini,作为不计分的嘉宾评审。这个嘉宾席位在公开的tstack里没有。

    Jonathan Delaire · Xx.com
  • “一个 AI code review 小习惯:别只让一个模型审。”

    介绍Theo的council时写的帖子。

    zZ · Xx.com

不足之处

  • “Scores are subjective overall quality within scope; they do not replace verification.”

    分数是对范围内整体质量的主观评估,不能代替验证。

    这是council跑完7轮、合并后在自己PR里写下的话。

    Nikita Maximilian Grimm · GitHubgithub.com
  • “Claude Opus and Gemini were satisfied by round 5. GPT Sol's last two findings were left out of scope, each a multi-step edge chain”

    Claude Opus和Gemini在第5轮就满意了。GPT Sol最后提出的两点被留在范围之外,两者都是要经过多个步骤才会出现的边界情况。

    GPT Sol停在8分,PR照样合并了。

    Uzair Ansar · GitHubgithub.com
  • “Gemini Pro was not reached: its provider is disabled in T3 Code, and the council does not substitute seats.”

    没能调用Gemini Pro:它的提供方在T3 Code里被停用了,而council不会用其他模型补位。

    所以4轮里一直只有两位评审。

    Abraham Prince · GitHubgithub.com
  • “In your council skill, do reviewers see each other's findings, or review independently first? For multi-model reviews, we're interested in whether sequential critique catches more real bugs or just amplifies the first plausible false positive.”

    在你的council技能里,评审们能看到彼此的发现,还是先各自独立审查?对多模型审查,我们想知道依次批评到底能抓到更多真bug,还是只会放大第一个看似合理的误报。

    Nex41 · Xx.com

上手方法

把下面的请求粘贴到Claude Code或Codex里就行。需要已登录GitHub CLI(gh);如果要凑齐三位评审,还需要能调用其他公司模型的环境(T3 Code或各家公司的API)。

  1. 起步提示词

    读一下 https://www.working-ref.com/zh/reference/tstack-council-2026-10 这篇文章,把 https://github.com/t3dotgg/tstack 里的技能安装到这个环境。先确认gh是否已登录、哪些模型可以作为council评审调用,然后告诉我。接着在我的仓库里提三件适合用council试试的事。我选一件就马上开始;如果没有合适的,就用当前分支的改动开一个PR,先拿去给council审查。合并我自己来,到合并前一步就停下。

分享此参考

每周一期 · 免费

这篇参考对你有帮助吗?

每周海量 AI 资讯里的 BEST
只挑 3 条,直接送到你的邮箱

Work Smarter with AI

420 人每周都在读

订阅成功 下一期起,我们在你的邮箱见。