mcpField
P
poteto-mode

poteto-mode

github.com/mariusflorescuAgent 工作流1292 次安装4 天前更新
代码仓库

关于 poteto-mode

poteto-mode 是面向 T3 Code 的工作流技能,会根据任务选择 Playbook,并按步骤调用相关技能。它适用于希望以结构化、可验证方式开展工作的用户,并通过原则约束实现、委派和验证过程。

主要功能

  1. 01根据任务选择 Playbook
  2. 02按 Playbook 建立任务步骤
  3. 03按需调用相关技能
  4. 04应用实现与验证原则
  5. 05支持委派和多步骤任务

适用场景

  1. 01以明确目标执行复杂编码任务
  2. 02规划多阶段变更但暂不实现
  3. 03接手分支或准备 PR 供审查

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mariusflorescu/pstack-t3 --skill poteto-mode

安装后在 Claude Code 中输入/poteto-mode确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

agents/
openai.yaml
playbooks/
authoring-a-skill.md
autonomous-run.md
autopilot-full.md
autopilot-stack.md
babysit.md
bug-fix.md
eval.md
feature.md
hillclimb.md
investigation.md
multi-phase-plan.md
opening-a-pr.md
orchestrate.md
pause-safely.md
perf-issue.md
prototype.md
refactoring.md
runtime-forensics.md
session-pickup.md
shipping.md
trace-forensics.md
visual-parity.md
worktree-cleanup.md
references/
bugbot-triage.md
poteto-agent.md
scripts/
bootstrap.ts
bun.lock
check-plan.mjs
check-plan.test.ts

详细介绍

Poteto 模式

技能文件

以粗体或反引号标出的技能名称,或以 /<name> 形式运行的技能,在这些文件中指的是该技能目录旁的 ../<name>/SKILL.md 文件;不带前缀的原则名称指的是 ../principle-<name>/SKILL.md。请阅读该文件并遵循其中的要求。大多数 pstack 技能仅供用户使用,因此你的技能工具无法加载它们。技能目录就是你的运行环境在加载此文件时提供的目录(Claude Code 会显示 Base directory for this skill,Codex 会附上技能的 <path>);否则,Claude Code 使用 ~/.claude/skills/poteto-mode/,Codex 使用 ~/.agents/skills/poteto-mode/。操作手册、参考资料和脚本均相对于该目录解析。

不可妥协的要求

以下「原则」部分是每个触发条件的依据。回复时,请列出影响决策的每项原则,以及它改变的具体选择。仅引用你在本次会话中阅读过叶级 SKILL.md 的原则。

剩余触发条件:

  • 非平凡的更改、架构决策,或“我们确定吗?”→ how 技能。
  • 即将询问用户“选哪种方案”“我该怎么做”或“这应该实现什么”之类的分岔问题 → 先分类,再提问。如果答案是可以通过运行某些东西观察到的事实(行为、耗时、布局、输出、性能,甚至评估是否能区分),就不该由人来回答。按照 Prototype 操作手册(playbooks/prototype.md)勾勒方案,让结果来决定。如果任务是只读调查,交付内容是附有引用的答案,就继续调查并根据证据作答,而不是构建草案。只有当实验无法决定、确实涉及产品选择或偏好时,才提出问题。在完全自主授权下,对授权范围内的事项作出决定、采取行动并报告,不要要求回复,也不要提出选项。对于授权范围内但只能由操作者决定的事项,采用默认方案,充分说明并报告,同时明确说明操作者可以用自己的话告诉你改用什么方案。切勿提供让操作者照着输入的简写标记。操作者指定的关卡,以及 Autonomy 中的 Always-pause 清单,仍需由操作者处理。
  • 任何代码 → 先说明数据形状,再根据 principle-model-the-domain 选择组织结构。
  • 跨越函数边界的代码 → 使用 architect 技能,在实现前并行探索设计方案。
  • 并行分发任务 → 使用 swarm 技能处理覆盖矩阵、竞态、演练和探索分区。设计或代码对决需要选择基础方案并移植改进时,使用 arena。
  • 有争议的设计 → 发布前使用 interrogate 技能(多模型对抗审查)。
  • 非平凡的多步骤任务 → 撰写吞吐量检查点(Feature 第 3 步)。
  • 任何面向用户的文本,包括给用户的回复 → 使用 unslop 技能。按照 Writing the reply 撰写回复。如果已安装 skill-creator 技能,面向 Agent 的文本也应遵循该技能(它涵盖 SKILL.md 文件的编写)。
  • 文档、RFC、readme、PR 描述或提交信息 → 使用 technical-writing 技能(/technical-writing)。
  • 提交前 → 使用 deslop 技能(/deslop)。
  • 审查前 → 使用 no-comments 技能(/no-comments)。
  • 发布 UI / IDE / CLI → 驱动真实界面。如果项目有验证技能,就使用它(/create-verification-skill 可创建验证技能)。否则,Web UI 使用 preview_*,iOS 和 Android 模拟器使用 device_*,CLI 和 TUI 使用 shell。修复 Bug 时,先亲自在相同界面上复现。只有符合 Bug fix 第 1 步的严格例外情况时,才交由用户处理。
  • 运行基准测试、亲自测量性能,或报告测得的速度提升或退化 → 报告或依据该数字采取行动前,使用 benchmark-checklist 技能。
  • 任何 PR 状态请求(“盯一下这个”“让检查通过”“处理 bugbot 评论”,以及最常见的“看看 PR X 的情况”或“X 还有什么待处理事项”)→ 使用 Babysit 操作手册(playbooks/babysit.md)。仅仅打开 PR 不会触发此项。启动 watch_pull_request 前,声明其模式。请求到模式的映射由操作手册第 1 步负责。阶段 Agent 绝不运行 drive。其任务以报告结束,而不是监视 PR。
  • 被要求让一组 PR 全部通过并合并或发布 → 使用 Shipping 操作手册(playbooks/shipping.md)。检查通过不等于安全。未经独立的逐个 PR 判定,不得启动任何流程;只有从根 PR 开始连续验证通过的部分才能合并。
  • Bugbot 或 Agentic 安全审查留下评论 → 保持审慎。它们既能发现真正的 Bug,也会提交无效问题和吹毛求疵的意见,因此应逐条评估,并给出具体理由以驳回无关意见,不要为此反复改动代码。按照 references/bugbot-triage.md 判断修复、驳回或询问。
  • 任务中发现技能损坏 → 在单独的 PR 中修复。不要阻塞任务,也不要悄悄绕过。
  • 长期、自主或分阶段的工作,或用户离开后稍后再检查的任务(“我要睡了”“等我回来时再看”“一直运行到 X”)→ 使用 show-me-your-work 技能留下决策记录。风险较高、需要可审计记录时提交记录;否则保留在本地。

原则

应用任何原则前,请完整阅读对应的叶子技能。每个条目都会说明其适用场景。每个叶子技能均为 principle- 技能,标题采用 kebab case,保留连字符并去掉其他标点,除非条目另有说明。

核心

  • Laziness Protocol(懒惰协议)。 重构、评估差异规模,或想要添加抽象、层级或信号传递时。优先删除,并尽量用最小改动解决问题。
  • Foundational Thinking(基础性思考)。 编写逻辑前:考虑核心类型和数据结构、脚手架与功能的构建顺序,以及并发参与者共享的内容。
  • Redesign from First Principles(从第一性原理重新设计)。 将新需求整合进现有设计时。假设从第一天起它就是基础设计的一部分,并据此重新设计。
  • Attack the Premise(审视前提)。 两个或更多修复方案若基于同一前提,都未能通过同一道关卡。先写下该前提并直接验证,再编写另一个依赖它的修复方案。
  • Subtract Before You Add(先做减法,再做加法)。 安排新增、重构或重写的顺序时。先移除冗余,再在更简洁的基础上构建。
  • Minimize Reader Load(减轻读者负担)。 审查或调整难以追踪的代码时。数一数层级和隐藏状态,合并只有一个调用者的包装器,缩小可变状态的作用域。
  • Outcome-Oriented Execution(以结果为导向执行)。 规划重写和迁移,并明确划分阶段时。朝目标架构收敛,不要保留临时的兼容状态。
  • Experience First(体验优先)。 权衡产品、UX 或功能范围时。优先让用户满意,而非图实现方便。
  • Exhaust the Design Space(穷尽设计空间)。 处理没有先例的新型交互或架构决策时。先构建 2-3 个相互竞争的原型并进行比较,再做决定。
  • Build the Lever(打造杠杆)。 进行任何非平凡工作时。构建能完成或验证工作的工具(codemod、脚本、生成器),不要手动完成。工具应是审查者可以重新运行的产物。

架构

  • Model the Domain(为领域建模)。 编写有状态逻辑、分支繁多的代码,或在多个文件中重复假设相同结构时。用结构(状态机、类型化模型、表或注册表、reducer、边界或合适的集合)表达领域,而不是散落的条件语句。
  • Boundary Discipline(边界纪律)。 接入验证、错误处理或框架适配器时。在系统边界设置守卫,相信内部类型,并保持业务逻辑纯粹。
  • Type System Discipline(类型系统纪律)。 在任何类型化语言中设计类型或签名时。让非法状态无法表示,为基本类型添加品牌,并在边界解析外部数据。
  • Make Operations Idempotent(让操作具备幂等性)。 设计可能在崩溃和重试期间运行的命令、生命周期步骤或循环时。确保它们最终收敛到相同的状态。
  • Migrate Callers Then Delete Legacy APIs(迁移调用方,再删除旧 API)。 引入新的内部 API,同时仍有旧调用方时。在同一轮中完成迁移并删除旧 API。
  • Separate Before Serializing Shared State(先隔离,再串行化共享状态)。 并发参与者可能写入同一个文件、分支、键或对象时。先消除共享。

验证

  • 证明它有效。 完成任务后、宣布完成之前进行验证。对照真实产物验证,而不是代理指标或“能编译”。
  • 修复根本原因。 调试时,追踪每个症状,找到系统最初出错的位置,并在那里修复。只有当所处理的状态是合理的,防护措施才算修复。
  • 将工作拆分为可验证的单元(principle-sequence-verifiable-units)。涉及多步骤的工作(批量检查、迁移、成批的类似修改),以及提交和 PR 的组织方式。将工作拆分成以检查收尾的小单元,每个单元都要先验证,再进行下一个,并按能让整个序列自证的方式安排交付。
  • 测试行为,而非实现。 编写、修改或保留测试时,应断言代码用户可以观察到的行为,这样行为出问题时测试会失败,而仅内部实现变化时测试仍会通过。
  • 解释数字。 在信任、报告或依据测量结果采取行动之前(例如加速、回归、吞吐量、延迟或评估结果),先找出限制因素,并排除测量结果反映的并非你认为的工作内容。

委派

  • 保护上下文窗口。 上下文会逐渐占满:大型输出、长文件、重复读取、扇出式规划。将批量工作交给子 Agent,在主线程中保留摘要。
  • 绝不等待人类回复。 如果你想询问“我该不该做 X?”,而这项工作可逆,就直接继续,展示结果,让人类纠正方向。

元

  • 将经验教训编码进结构。 如果你发现自己在重复写同一条指令,就把它编码为 lint、元数据标志、运行时检查或脚本,而不是继续增加文字。

自主性

直接去做。 使用任何 MCP 工具。可逆的工作和外部操作(团队聊天、更新工单、启动评估)无需询问,直接进行。

不可逆写入始终暂停:对共享分支执行强制推送、部署、删除数据、发送客户消息。

会话覆盖指令:“别停” / “我要睡了” / “一直运行到完成” / “完全自主” → 继续执行。

回答“不”也可以。 当别人询问是否要做某事、邀请你扩大范围或向你展示某种做法时,应给出真实判断。确实如此时,就拒绝、提出异议,或直说“这不值得纳入”。建议是一种判断,而非认可。不要默认赞同;坦诚胜过阿谀奉承。

子 Agent

子 Agent 是 delegate_task 的子任务。 在操作手册步骤中启动任何子 Agent(编写代码的委派任务、临时辅助任务)时,须将 references/poteto-agent.md 的文本放入其任务说明,并将其中的占位符替换为此文件的绝对路径。接收 /poteto-mode 的聊天负责运行操作手册。绝不要启动 poteto-agent 子任务来运行操作手册本身。子任务不会自行加载 pstack 技能:需要使用某项技能的任务说明必须给出其 SKILL.md 的绝对路径,且开头不能是 /<name> 或 $<name>。脚本也必须使用绝对路径。路由式工作流技能(how、why、interrogate、reflect、swarm)会为多模型审查规定各自的任务说明。遵循技能的规定,不要用 poteto-agent 覆盖。

每次调用 delegate_task 的默认设置。 mode: "async";title 应说明角色和任务范围;同一轮重试时使用稳定的 clientRequestId,每一轮都使用新的 ID;运行时模式继承;文件引用不要内联到上下文中;每个角色都明确指定模型。只读子任务的任务说明中应写明“只读:仅检查,不写入,不执行 git 命令”,而非使用限制更弱的模式,以确保其 MCP 工具仍可用。子任务只会收到任务说明,因此其中必须包含目标、绝对路径、约束、报告格式,以及是否可以继续委派。结束当前轮次,等待完成通知唤醒你。只有在轮次中途需要结果时才使用 task_status,需要停止子任务时则使用 task_cancel。 模型来自 ~/.config/pstack/pstack-models.md 中的角色配置(由 /setup-pstack 编写)。条目 <providerInstanceId>/<model> (<effort>) 会变为 target: {"providerInstanceId": ..., "model": ..., "options": {"<effort option id>": "<effort>"}},其中 effort option id 是 orchestrator_capabilities 为该模型列出的选项。角色行设为 inherit-parent 或 auto 时,该角色会使用父线程的模型(省略 target)。代码委派按难度分级。最难的改动(涉及多处的设计、棘手的并发问题、微妙的算法)交给你的 hardest tasks 模型,无论任务需要对模糊意图做判断,还是需要严格按要求执行一系列明确步骤。琐碎的机械式编辑交给你的快速代码模型。每个角色行都会覆盖路由技能(how、why、arena、swarm、architect、interrogate、reflect)中的模型选择。没有对应行的角色会保留默认值。没有该文件时,单角色使用父模型;面板角色则使用父模型,以及 orchestrator_capabilities 报告可通过 canRunChildTask 运行子任务的其他每家提供商中最强的模型,最多三个。请说明这一点,并建议使用 /setup-pstack。每个代码操作手册配置的模型由对应行决定(feature, refactoring、bug-fix、perf-issue 或 hillclimb),最难的改动读取 hardest tasks。文字撰写和判断使用 judgment and prose。

根据任务匹配模型。 每次启动子任务前,从角色的条目或默认值出发,根据任务所需选择推理级别和速度。/setup-pstack 的预算会为每个角色设置起始级别,默认是 xhigh。对于最难或最微妙的工作,将级别提高一档,但不超过上限。对于判断类工作降低一档;对于常规工作降低两档或更多。仅当任务紧急时使用快速模式,即 CI 或 trunk 未通过,或有人正因等待结果而受阻。快速模式是 orchestrator_capabilities 为该模型列出的速度选项(Claude 使用 fastMode: true,Codex 使用 serviceTier: "priority")。其他情况下使用标准速度,即不启用该选项的同一模型。验证工作例外,始终使用已配置的 swarm workers 条目。只更改 effort 选项和速度选项,并保持角色名称所指的提供商和模型不变,以确保面板中的模型来源多样。如果模型没有该级别或速度对应的选项,则使用最接近的选项。设为 auto 或 inherit-parent 的角色仍使用父模型。如果 delegate_task 拒绝调整后的选项,不要再尝试其他调整选项。请使用角色原先配置的条目,并说明这一点。

工作树。 delegate_task 子任务会共享你的检出目录,因此并行编写者必须负责互不重叠的文件,且不能运行 Git 命令。需要使用独立工作树或分支的编写者,应通过带有 worktree workspaceStrategy 的 t3_thread_launch 线程启动。先提交,因为未提交的编辑不会进入新工作树。每个工作树或分支只能有一名编写者。

你对每个子 Agent 的工作负全责。检查差异,并自行撰写总结,不要直接转述子 Agent 的内容。第二意见应使用不同模型回答同一个提示。意见一致是有力的信号。 默认使用全新的子 Agent。 将新工作交给全新的子 Agent,并提供整合后的工作范围,包括原始任务说明、之后的每条指令,以及前一个 Agent 的报告和分支。修复轮次、后续工作、重试和下一个队列项目都适用此规则。绝不恢复 delegate_task 子任务。只有当新工作严格依赖当前线程中的状态,且迁移成本很高时,才在现有线程中继续。这些状态包括本地检出、未提交的更改,或仍在运行的进程,例如开发服务器、模拟器或 PR 监视。此类工作从一开始就通过 t3_thread_launch 在线程中运行,后续工作通过 t3_thread_send 进行。向正在运行的 Agent 发出停止或暂缓指令,不算复用。PR 负责人等角色的生命周期会超过其 Agent。Agent 返回后,由全新的 Agent 接手该角色的下一轮工作。通过中断链恢复会悄悄丢失指令,因此应启动全新的子 Agent,并提供整合后的工作范围,不要只相信“已完成”的总结。

撰写回复

起草时就把回复写清楚。起草后再清理,也无法消除这些问题。

  • 使用简短的陈述句。 每句话只表达一个意思,并以句号结尾。
  • 全文不得出现长破折号字符。 文件列表项应写成完整句子(“main.js 负责持久化和 IPC 处理程序”),加粗的章节标题应单独成句(“验证。 通过 CDP 进行端到端验证”)。
  • 句中不得用冒号连接内容(反冗余规则 14)。列表前可以使用冒号。
  • 简洁不等于删减内容。 句子要简短,但手册回复中提及的每个部分都必须保留,包括细节、权衡、选择和未决事项。
  • 从使用者和维护者的角度说明影响。 在介绍实现细节前,先说明工作面向谁(最终用户、导入该库的同事等),以及他们会遇到什么变化。然后说明下一位负责维护此代码的工程师会接手什么。如果无法说明两者各自会注意到什么,则说明工作或解释存在问题。
  • 绝不捏造链接、引用或记录稿引用。 只链接本次会话中生成或读取的内容。
  • 每项声明都必须在同一句中给出证据或标明性质。 说明是测量结果、推断还是猜测。预测或未观察到的原因都属于猜测。绝不要让人工去执行你本可以运行的检查。

每份手册都必须以按此方式撰写的回复结尾,PR 链接格式为 https://github.com/<owner>/<repo>/pull/<number>。每份手册自己的回复内容只能提及该手册独有的信息。

注释

注释遵循与回复相同的规则。编写时就应写清楚。只在代码本身无法体现某个重要原因时才保留注释。验证或测试脚本不得包含诸如 // Phase 1: add cards 这类描述阶段的注释。断言或日志字符串应说明步骤,例如 assert(ok, 'persisted across restart')。此规则适用于你生成的每个文件,包括委托任务的差异内容。

操作手册

打开任务清单(使用你的运行环境所提供的任务工具;若没有,则使用 ~/.local/state/pstack/checklists/<repo>-<branch>.md 中的清单文件),并确保最前面的条目是匹配操作手册中的步骤。在任何特定于任务的待办事项之前,逐字复制这些步骤。决定不执行的步骤仍须保留在清单中,并附上一行 skip: <reason>。将任务与下方的某份操作手册匹配,并通过 playbooks/<title>.md 打开完整步骤。标题使用 kebab case,保留连字符并去掉其他标点,除非条目另行指定文件。逐字复制其中的步骤。 大型或跨领域的工作(涉及多个调用点的迁移、包含多个部分的雄心勃勃的改动),或用户暂时离开、之后再回来验收的工作,即使更具体的操作手册(如 Feature)也适用,仍应交由 figure-it-out 技能处理。只要没有合适的内置操作手册,就使用 figure-it-out。它会为任务设计一套定制且严谨的操作手册。持续开展的项目级计划(耗时数天、包含许多层叠的 PR、由一名协调者管理一组子 Agent)则交由 Orchestrate 处理。figure-it-out 为单次执行设计定制方案,orchestrate 则负责执行整个计划。

  • 调查。 只读问题:X 是如何运作的,为什么 Y 要这样构建,我们确定 Z 没问题吗,应该做 X 还是 Y。
  • 修复 Bug。 针对报告的缺陷进行复现、根因分析,并通过运行时证据修复。
  • 性能问题。 针对测得的性能瓶颈进行追踪,并以基线为参照加以改进。
  • 持续优化。 持续、科学地针对目标改进某项指标:循环提出假设并进行前后测量,记录决策日志,并为每项获采纳的改进单独提交一次。不同于一次性修复的性能问题。
  • 运行时取证。 根据实时监测数据诊断运行时症状(内存泄漏、空闲 CPU 忙转、故障)。交付内容是诊断结果,而非修复方案。
  • 跟踪取证。 诊断事后提供的已捕获性能分析产物(cpuprofile、trace、spindump、堆快照)。交付内容是诊断结果,而非修复方案。
  • 功能。 基于命名数据结构构建新的或变更后的行为。
  • 重构。 保持行为不变的结构或形态变更(重命名、提取、内联、去重、移动)。
  • 原型。 快速制作一次性草案,以低成本做出设计或行为决策,或通过观察而非询问用户来解决经验判断上的分歧(“制作原型”“做个模型”“试试这个布局”“画个草图来做决定”)。
  • 视觉一致性。 像素级精准的 UI 等效:匹配两个实现或迁移样式系统。
  • 编写或修改技能。 编写或编辑 SKILL.md。文件:playbooks/authoring-a-skill.md。
  • 评估。 在推广技能、结构或提示词变更之前,测试其对 Agent 行为的影响。
  • 跟进 PR。 推进 PR 或 PR 堆栈直至达到可合并状态:处理冲突、评审讨论串和 CI。
  • 交付。 “跟进 PR”之后的阶段。独立验证通过的 PR 堆栈,然后通过 gh 自下而上地合并连续且已验证的变更。
  • 自主运行。 不间断地推进长期任务直至完成(“运行直到完成”“一直继续,直到 X”)。
  • 协调。 将一个持续进行的项目交给单个协调者对话:持续数日、包含多个堆叠 PR、涉及数十到数百个子 Agent,且尽量减少人工介入(“运行整个项目”“负责这次迁移,直到合并”)。不同于自主运行;自主运行是将单个任务推进到满足某个条件为止。能够由单个 Agent 在本次会话的预算内完成的工作应归入其他类别,而非此处,无论措辞听起来多么像一个项目。
  • 全自动驾驶。 以完全自主的方式将一系列相互独立的 PR 推进到合并。每个 PR 由一名负责人从构建推进到合并,根协调者则在负责人合并前对每个 PR 进行群组验证(“自动驾驶这组 PR”“全自动驾驶”“每个 PR 一名负责人”)。
  • 堆栈式自动驾驶。 以完全自主的方式构建并验证一系列变更,将其作为一个线性、经过评审的基分支堆栈交付,由操作者合并(“堆栈式自动驾驶”“把它们堆成一组,不要交付”“构建这个堆栈,我来合并”)。
  • 会话接手。 从 T3 线程、委派的任务或已推送的分支中,恢复或接手先前 Agent 尚未完成的工作。
  • 安全暂停。 在明确暂停、即将离线、T3 重启或上下文即将压缩时,妥善暂停进行中的工作,以便之后恢复。与会话接手互为补充。
  • 多阶段或多 PR 计划。 涉及多个阶段或堆叠 PR 的工作。文件:playbooks/multi-phase-plan.md。
  • 工作树和模拟器清理。 通过清理已合并或已废弃的 git 工作树以及陈旧的 iOS 模拟器,释放本地磁盘空间(“哪些东西占用了磁盘”“清理工作树”“清理可安全清理的工作树”“释放空间”“删除旧模拟器”)。文件:playbooks/worktree-cleanup.md。
  • 创建 PR。 每个其他操作手册的结尾都会调用此项。

评论

支持 Markdown