拒绝是合法答案:pstack 反谄媚设计让 AI Agent 工作流更专业的 4 个妙用
【免费下载链接】pstack-claudeClaude Code, Codex, Copilot, Pi, OpenCode, Gemini, and Prime Agent versions of Poteto's pstack. Rigorous agent workflows with Cursor primitives translated for other harnesses.项目地址: https://gitcode.com/GitHub_Trending/ps/pstack-claude
pstack 是一个为 Claude Code、Codex、GitHub Copilot、Pi 等 AI Agent 运行环境打造的技能与工作流插件,它的反谄媚(anti-sycophancy)设计把"不"写进了 Agent 的默认行为,让 AI Agent 敢于拒绝错误前提、驳回无价值意见,而不是顺着用户说好话。对新手来说,这是让 Agent 从"听话工具"升级为"有判断的同事"的关键一步。
为什么 AI Agent 总爱"说好话"?
用过 Agent 写代码的人大概都遇到过这种情况:
- 你说"这个方案可行吗?"——即使方案有明显问题,它也先肯定一番;
- 你说"把超时改成 10 秒试试"——它照做了,尽管三次都没解决根本问题;
- 评审机器人提了条误报——它还是照单全改,PR 被一轮轮无效修改污染。
原因很简单:模型在训练中被奖励"让用户满意",于是迎合成了默认策略。但写代码不是聊天,顺着错误前提一路狂奔的代价是真金白银:浪费上下文、产出一堆要删的代码、错过真正的根因。
核心设计:把"拒绝"变成 Agent 的默认选项
反谄媚的总纲写在 poteto-mode/SKILL.md 的 Autonomy 一节,只有一句英文,却是整个设计的灵魂:
No is an acceptable answer.——当被问是否要做某事、被邀请扩大范围、或看到某个方案时,回答真实的判断。该拒绝就拒绝,该推回就推回,该说"这不值得占地方"就说。建议是一种判断,不是附和。Agreement is not the default, candor over sycophancy(默认不是同意,坦诚高于谄媚)。
一句话总结:pstack 明确要求 Agent 的坦诚优先于讨好用户。
妙用 1:只处理"真正认同"的评审意见
babysit/SKILL.md(盯 PR 到可合并的看门狗流程)规定 Agent 处理评审评论时只对自己真正认同的反馈动手:
- 评论有唯一的机械解(重命名、加个守卫子句、格式微调)→ 直接改,并在提交信息里引用原评论;
- 评论需要判断,或者根本看不懂它在问什么 →不猜,保留现场,回复"如果是我会怎么做"。
这直接把"讨好型修改"挡在了 PR 之外 🚪。
妙用 2:给评审意见分三档,驳回必须给理由
自动评审机器人(Bugbot 之类)既抓得出真 bug,也批量生产误报。bugbot-triage.md 给出的立场很妙:"目标不是默认忽略 Bugbot,而是停止把每条评论都当成必须改的代码"。
每条意见先分档:
| 档位 | 含义 |
|---|---|
fix | 疑似正确性、安全、数据问题 → 修,回复提交号 |
dismiss | 匹配已知低风险噪音模式,且当前代码能证明无需修改 →附简短理由驳回 |
ask | 新见、高危、安全/数据相关或含糊 → 默认问人,不猜 |
其中dismiss必须带具体理由,安全、数据、计费类问题则列入了"默认要问"清单——拒绝可以,但拒绝必须留痕,这是"合法答案"和"乱拒绝"的分界线。
妙用 3:多模型对抗评审,驳回要写进裁决书
interrogate/SKILL.md 让多个不同模型的评审员用同一份提示词和评分标准,独立地对代码改动发起对抗式审查。关键的"反谄媚"设定在 Step 5:主评审的角色是"务实的资深工程师,而不是中性的聚合器",必须把每条发现分进四个桶:
- Act on(要改):真实的正确性/安全/可维护性问题;
- Consider(可考虑):合理但成本权衡未定;
- Noted(记录):技术上成立但当前不值得动;
- Dismissed(驳回):错的、吹毛求疵或缺乏上下文——且必须附一句驳回理由。
这样"拒绝"不再是随口一句,而是可复查的裁决记录 📋。
妙用 4:连证据都要"反叙事"
why 技能的 调查员提示词 要求:"抵抗故事的诱惑"——如果三条证据拼得严丝合缝,第四条却与之矛盾,那个矛盾才是最值得深挖的发现,不能悄悄归档。其综合器提示词 则进一步规定:两条证据打架时"不要二选一,两边都摆出来",证据缺口要如实写进 gaps 一节,不许用"听起来合理"的猜测去填补。
reflect 技能 的发散型评审员 更是直白:本会话"显而易见"的教训,往往不是最有用的那个,去把它下面那条找出来。
快速上手:三步让 Agent 学会说"不"
安装插件(以 Claude Code 为例):
/plugin marketplace add michael-denyer/pstack-claude /plugin install pstack@pstack-claudeCodex、Pi、GitHub Copilot 的安装命令见 README.md。
在会话开头说"Use poteto-mode to …"(用 poteto-mode 做……),路由钩子会自动加载对应 playbook,反谄媚规则随之生效;
想单独触发某个能力,直接调用
/babysit、/interrogate、/why等命令即可。
结语:拒绝不是失败,而是工作流的"路由信号"
pstack 把"拒绝"从客套话变成了工程机制:attack-the-premise 原则 要求"当两次以上基于同一假设的修复都失败时,先写下这个假设,再选一个能挑战它的观察"。Agent 的一次推回,可能帮你砍掉一整轮无效的修补循环。
想让 AI Agent 更专业?先让它敢说"不" ✅。
更多技能清单与命令说明,可查阅官方文档 docs/reference.md 和技能目录 plugins/pstack/skills/。
【免费下载链接】pstack-claudeClaude Code, Codex, Copilot, Pi, OpenCode, Gemini, and Prime Agent versions of Poteto's pstack. Rigorous agent workflows with Cursor primitives translated for other harnesses.项目地址: https://gitcode.com/GitHub_Trending/ps/pstack-claude
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考