Skip to content

panqiwei/pqw-skills

v0.24.1MIT

A development flow for large changes: define with the human, hand off one run at a time, let the agent deliver in slices, then verify. 25 skills plus six thinking models.

pqw-skills

把一程长活,放心交给 agent:你和它先把边界定清,一次交出一程,它按切片自主交付,你回来验收。给 Claude Code、Codex、Cursor 等 coding agent 的 25 个技能。

claude plugin marketplace add PanQiWei/pqw-skills
claude plugin install pqw-skills@pqw

Codex、Cursor、Kimi Code、DSH、Copilot、Gemini 的装法见安装。装好后问一句「这套流怎么用」,它会教你。

License: MIT Version Skills skills.sh Hosts Language

English

把一程长活,放心交给 agent。第一幕,没有它:一句话就开工,做到一半偏了,同一处修三遍,报告写全部完成,你花一天返工。第二幕,有它:定义期你主导六步,交接期定约、定程、交出一程,agent 自主按切片推进、哨兵定时回看,你回来验收,收回之后再交下一程。第三幕,你得到的六样:不白做、不猜边界、不乱想、不走偏、不自夸、不透支你。

我与 Claude Code、Codex、Cursor 等 coding agent 协作沉淀出的单会话研发流。它是一条控制回路:先在动手前把不确定性尽量消掉,再把执行放手给代理,再用固定节拍从顶层回看。你的注意力只花在定义边界和高层判断上,不花在逐行盯实现上。

什么时候用

这条流只为大改动而设。判据是影响范围:改动会触及领域边界、跨域协作或系统全局的架构时才走。

走这条流不走这条流
复杂系统新增一个领域小的缺陷修复
跨多个领域的功能纵线交付快速原型,验证一个想法
子系统重构小规模的增量接口设计与实现
较大规模的改造一处局部修改,影响范围一眼看得清

不够格的工作整条流都不走,不走缩水版,直接按各自的技能做。

有哪些东西

技能集全景:25 个技能,两条轴。横着是流程轴的 13 个环节,定义期六步由你主导,中间一段交接期,交付期七步由 agent 自主。竖着是思维轴的六个模型:拆、找差异、定形、建、证、转手,加一个对人直言的诤友。交点标出每个想法在哪一步出现。下面列出 13 个环节与交接期各回答的问题、入口与教学、写作技能、给项目的常驻卡片,以及九个自带脚本。

仓库是扁平的:一个总入口技能,13 个环节技能,一个交接期的阶段技能,六个横切的思维模型技能,一个诤友技能,加教学与写作技能。自定义的环节正文在这里,已有成熟做法的环节直接引用 pstack、ub-mode、mattpocock 的技能,不复制它们的正文。

定义期由你主导,每一步回答一个问题、产出一样东西,并且是下一步的输入,顺序不能跳。交接期像接力赛的接力区,由设计会话做,你在场:定约写这一程的 spec,定程定这一程多大、要不要分程,交出写交接信息包,包里只有这一程。交出是物理条件:没进唯一源、没过评审的边界不算定好。交出之后,你可以把注意力移开,由主代理自主推进交付;这一程交回来,你回到设计会话收回:上手验收,再交下一程。

技能

上面两张图是全貌。每个技能做什么、引用了哪些外部技能,展开下面的细目。

技能细目

总入口

  • single-session-dev-flow:判断够不够格走这条流,定阶段、顺序、交接期,把 13 个环节与交接期的四件事写进会话任务清单,指出每个环节加载哪个技能。不写环节的做法。开头一节「写代码的四条」(先做对;再做好一轮;不过度设计、不提前优化;找本质解)对一切写代码的工作适用,是这几条心智在本仓库的唯一正文。引用 in-your-own-words、poteto-mode、tdd;不够格时转 prototype、diagnosing-bugs。
  • teach-pqw-skills:教人用这套流。心智模型与哲学、每个环节人和代理各做什么、第一条提示怎么写、跑偏了怎么纠、接入自己的项目。只回答并给示例提示,不开工。

定义期,人主导

环节技能回答的问题引用
1requirement-and-invariants给用户什么能力,系统前后有什么区别;系统永远要守住什么in-your-own-words、grilling
2domain-impact-analysis哪些领域受影响,要不要新领域,谁是重点谁是连带,全局怎么摆domain-modeling、principle-model-the-domain、blast-radius
3tech-research-and-reuse有没有现成的库、相近系统或社区实现可复用,自造的论证是什么research、principle-subtract-before-you-add
4formal-guard哪些性质靠测试守不住,要靠偏函数全化、数理建模与证明create-formal-verification-skill、statechart、maintain-formal-verification-skill
5detailed-domain-design领域内部的对象、关系、仓储长什么样,I/O 与查询性能怎么定domain-modeling、codebase-design、architect、principle-type-system-discipline、principle-boundary-discipline
6formal-docs-landing哪些要长期维护写正式文档,哪些以源码为文档,落在哪一层;五类判据的确定性文档评审technical-writing、writing-for-agents

交接期,设计会话与你

  • pass-the-baton:交棒。交接从一个点变成一段接力区,夹在定义期与交付期之间,由设计会话做,你在场。四件事:定约,和你一起写这一程的 spec;定程,写切片大纲、问你的验收窗口、做尺寸核对,要分程就写路线图;交出,走交接点核对单、写交接信息包;收回,这一程交回来之后你上手验收,它记进路线图、修订后面的程,再交下一程。设计会话是编排者,路线图只归它;交付会话只知道自己这一程,不和你谈范围,包有问题就退包。一次只交出一程。设计与交付分在两个会话时,缺省用 GitHub issue 协调,项目可以换成别的工单系统,没有就退回到文件。自带交接点核对单、交接信息包模板(含切片大纲)、路线图模板与 GitHub issue 的做法一页。它不是编号的环节,不进矩阵;它的指路行登记在 design/context-map.json 的 stages,check-repo 逐处核。

交付期,代理自主

环节技能做什么引用
7spec-and-plan两个时机:交接期定约时写 spec,定目标、边界、验收标准;交付期开头写 plan,从切片大纲起步切成有序切片;自带两份模板与 check-plan.mjs(核 plan、spec 与交接信息包的结构,包可以从标准输入读)to-spec、to-tickets(读安装路径)、sharpen
8context-pack整程开工前整理上下文包并做关键环节的细化设计与技术验证;每切片前做开工包:上下文增量、技术设计与验证、细化推进方案、里程碑待办清单architect、prototype、principle-guard-the-context-window、recall
9delegate-brief主代理自己做是默认:先按两个判据(做对它用到多少说不出来的上下文、中间过程是不是又大又用完就扔)定自己做还是派,再过派发门;派时给齐目标、边界、规格文件、信息包,框住读量,档位按活定、顶档不当子代理;原始结果写进文件,报告限行带指针;一页讲钱是怎么花的;验收防作弊、升级、合回。自带 check-brief.mjspoteto-mode、swarm、principle-separate-before-serializing-shared-state
10one-lesson-rule便宜档的只读哨兵子代理常驻后台,持有 spec 与 plan,每 45 分钟自己醒来取工作树事实、判六问、发十行以内的消息;主代理在停顿点处置;子代理每 30 分钟看一次健康度recall、show-me-your-work
11slice-closeout每切片收口六步:类型检查与 lint、对照 spec 与不变式、结构读数与差分变异(只打关键位置)、去 AI slop、证明可用;全部切片收口后整程全量读数一次;确定性验收,不做对抗性评审。自带 metrics.mjs(改动函数的圈复杂度、认知复杂度、CRAP)与 mutation.mjs(热点差分变异,带预算与还原),与语言无关的模型加 TypeScript 适配器code-review、deslop、unslop、principle-prove-it-works、typescript-best-practices、ub-mode
12progress-artifacts用架构图、UML、快速 demo 等用完即弃的汇报件让人留在高层,放系统临时目录;自带目录脚本、build-report.mjs 网页汇报件生成器、demo 骨架与 demo-append.mjsketchup、prototype
13cleanup每切片清一次不必留给下一切片的中间产物;一程交付后全盘清理;只判断还要不要,不要的直接删;自带清理脚本与交付声明无

实施本身走 TDD,不过度设计,不过度优化,由 pstack:poteto-mode 与 mattpocock-skills:tdd 承载,本仓库不另写。表里的「引用」列是各 SKILL.md 当前声明的外部技能;完整的主引用与辅助引用见 design/skill-mapping.md。

思维模型,横切

流程轴回答「现在走到哪一步、产出什么」,是上面 13 个环节。思维轴回答「做这一步时怎么想」,是下面六个思维模型。两条轴互相独立:任何一步都可能用到任何一个模型,所以它们不是环节,而是随时可以单独加载的技能,不走这条流时也适用。输入 /think- 就能看到全部六个。

次序技能回答的问题三句动作的要点
拆think-orthogonal这个问题的空间怎么拆找出独立变化的轴,每条归一个拥有者;交叉成表逐格看;同一个结构在大小尺度上只设计一次
找差异think-ought-vs-is这件事的工作到底是什么它应该是什么样,它现在是什么样,两者差在哪;差异就是全部工作
定形think-model-first代码该长成什么形状状态与操作写成偏函数并全化;再翻成领域模型与对象模型,然后写代码
建think-right-then-well按什么顺序建,怎样算好做对只求验收标准逐条过;做好一轮不加能力只改实现;由读数、变异与品味核对单判
证think-evidence怎么知道它是真的每个结论带证据或标签;证据要真的检验了它声称检验的东西;证真交给证明,证伪交给测试
转手think-closed-loop这件事该由谁做,一次做多大,多久看一次转手会丢信息,做对它要用到的写不下来的上下文多就不转;回路越紧越稳;一块多大由接的一方验得完多少定

前五个是放在一件事上的自然次序。第六个闭环讲这件事在人和代理之间转手:人转给主代理,主代理转给子代理,压缩前的自己转给压缩后的自己。

两条轴交叉出下面这张上下文地图。「主」是这个环节的产出本身就是这个模型的成果;「空」是模板里有它的固定空位,填模板时自然就做了;「行」是在要用到的那一步上有一句一字不差的指路行;空白是有意不放。最后一行是 plan 进度总览里列着六个技能名的那一行,上下文压缩之后按它重新加载。唯一源是 design/context-map.json,这张表照它生成,check-repo 逐格核它在仓库里兑现了没有。

环节think-orthogonalthink-ought-vs-isthink-model-firstthink-right-then-wellthink-evidencethink-closed-loop
1 需求与不变式行主
2 领域影响主行
3 调研与复用主
4 形式化守护行主主
5 细化设计行空主行行
6 正式落盘行
交接期行主行
7 plan空
8 切片开工包行空空空行
9 派发空主主
10 哨兵回看行行主主
11 切片收口行主主
12 汇报主行
13 清理
不够格的小活行行行
压缩之后空空空空空空

接入自己的项目时,把常驻卡片原样放进项目的常驻入口文件,例如根 AGENTS.md:六个思维模型与诤友各一句,每句末尾是技能名,不走这条流的会话也看得到它们。升级之后重新同步这一段,项目不手写第二份。写法见 teach-pqw-skills 的「接到自己的项目」。

诤友,流程轴上横切

  • candid-friend:诤友,直言一次,然后听你的。别的技能防代理的失败,它防人的失败:需求不清或没有使用证据、一程大过人在一个验收窗口里验得完的量、离开前交接缺项、上一程没验就交下一程。代理用固定四行对人说一次:提醒、依据、建议、你可以;人定了就照做,不打折扣,不附加条件。四个时机都在设计会话里:接需求时问值不值得做,定程时做尺寸核对并给分程建议,交出之前做睡前交接,收回时先验再交下一程。交付期不发起和人的谈话,只做两件不问人的事:预计收尾滑出验收窗口时截程交付,收尾时列出待人验收。它不是思维模型,不进上面的矩阵;放在哪些环节由 design/context-map.json 的 crosscut 一项登记,check-repo 一样逐处核。接需求时的问法综合自 gstack(github.com/garrytan/gstack)的 office-hours、plan-ceo-review 与 ETHOS,以及 Matt 的 grilling、triage、to-questionnaire、prototype、wayfinder;gstack 只是思想来源,不加载。引用 grilling、to-questionnaire(读安装路径)、prototype。

外部依赖

技能来源版本本机名
poteto-mode、deslop、unslop、create-formal-verification-skill、statechart、maintain-formal-verification-skill、architect、sharpen、recall、show-me-your-work、ketchup、in-your-own-words、blast-radius、swarm、technical-writing、typescript-best-practices 及 principle 系列Claude Code 与 Codex 用 michael-denyer/pstack-claude;Cursor 用 cursor/plugins 的官方 pstackport 0.9.132;Cursor 0.15.20pstack:<name>
ub-modeunclebob/ub-mode,只有一份 SKILL.md,放进宿主的用户技能目录提交 3da62bfub-mode
to-spec、to-tickets、to-questionnaire、research、domain-modeling、codebase-design、code-review、tdd、prototype、diagnosing-bugs、grilling、writing-for-agentsmattpocock/skills1.3.2,提交 4ae2317mattpocock-skills:<name>

引用外部技能的环节只写本仓库的补充,正文里用「加载技能 <技能名>」指向它们,怎么加载由宿主定。例外是 Matt 的 to-spec、to-tickets 与 to-questionnaire:它们声明了 disable-model-invocation: true,宿主不让模型用 Skill 工具调用,所以按已安装路径直接读正文,并在报告里写明读取方式。表里的版本是本仓库正文核对过的版本,升级时重新核对被引用的技能有没有改名或改行为。

技能正文与脚本本身不装 npm 包。只有 slice-closeout 的差分变异有依赖(@stryker-mutator/core、@stryker-mutator/vitest-runner,版本钉在 skills/slice-closeout/scripts/package.json):它只支持用 vitest 的项目,优先用项目自己 node_modules 里的 Stryker,没有就 npm ci --prefix <该 scripts 目录> 装到技能目录;不满足时工具退出并说明。结构读数没有依赖。

维护本仓库时另用 Claude Code 的 skill-creator 插件(claude-plugins-official)审技能,用 /skill-doctor 报告量使用率。两者是宿主工具,不是本仓库引用的技能。

安装

两条路线:插件路线是只读的托管包,自动更新;skills.sh 路线把可编辑的文件复制进你的项目,手动更新。每个宿主只选一条,两条都装会让每个技能出现两次。能自动更新的宿主优先走插件路线。

本仓库自带插件市场(.claude-plugin/marketplace.json),市场名 pqw,插件名 pqw-skills。版本号在 .claude-plugin/plugin.json 里,变了才会触发托管路线重装。

宿主路线自动更新
Claude Code@pqw 市场是,默认
Codex@pqw 市场是,启动时
GitHub Copilot CLI@pqw 市场是,需一次性开 autoUpdate
VS CodeChat: Install Plugin From Source是,每天
Kimi Code/plugins install,托管副本否,重跑命令
DeepSeek Harness(DSH)复制进它的技能目录否,拉取后重新复制
Gemini CLIgemini skills install,复制文件否,重跑命令
Cursor 及其他skills.sh,复制文件否,npx skills update

Claude Code

claude plugin marketplace add PanQiWei/pqw-skills
claude plugin install pqw-skills@pqw

Codex

Codex 读仓库自带的市场清单;插件的展示信息在根 plugin.json。

codex plugin marketplace add PanQiWei/pqw-skills
codex plugin add pqw-skills@pqw

GitHub Copilot,CLI 与 VS Code

copilot plugin marketplace add PanQiWei/pqw-skills
copilot plugin install pqw-skills@pqw

然后在 ~/.copilot/settings.json 加一次:

{
  "extraKnownMarketplaces": {
    "pqw": { "source": { "source": "github", "repo": "PanQiWei/pqw-skills" }, "autoUpdate": true }
  }
}

VS Code 里运行 Chat: Install Plugin From Source,填 https://github.com/PanQiWei/pqw-skills。

Kimi Code

仓库根有 Kimi Code 的插件清单 kimi.plugin.json。在 Kimi Code 会话里输入:

/plugins install https://github.com/PanQiWei/pqw-skills

它会先问一次是否信任这个第三方插件,然后取最新的发行版,复制成托管副本;装完 /new 或 /reload 生效。技能以 /skill:pqw-skills:<名字> 出现。要固定版本,把地址换成发行页,例如 https://github.com/PanQiWei/pqw-skills/releases/tag/v0.22.2。更新时重跑同一条命令。

DeepSeek Harness(DSH)

DSH 没有安装技能的命令,它从固定的目录里发现技能:项目里的 .dsh/skills 与 .agents/skills,用户级的 ~/.dsh/skills 与 ~/.agents/skills。每个技能是这些目录下的一个直属子目录。装到用户级:

git clone https://github.com/PanQiWei/pqw-skills ~/.pqw-skills
mkdir -p ~/.dsh/skills && cp -R ~/.pqw-skills/skills/. ~/.dsh/skills/

更新时在 ~/.pqw-skills 里 git pull,再跑一次第二行。只想装进一个项目,就把目标换成项目根的 .agents/skills。只有带技能能力的 profile 会加载它们(终端界面、web、headless、acp、sdk);sdk-minimal 不加载技能。

Gemini CLI

Gemini 不读 .claude-plugin,--path 指一个目录。本仓库扁平,一条命令装全套。

gemini skills install https://github.com/PanQiWei/pqw-skills.git --path skills

更新时重跑。

Cursor、OpenCode、Windsurf、Amp 及其他

走 skills.sh。-a 预选宿主,省略则交互选择。

npx skills@latest add PanQiWei/pqw-skills -a cursor   # cursor、opencode、devin、windsurf、amp、pi

更新用 npx skills@latest update。它不会带上新增的技能,所以有新技能时重跑 add。

只装一个技能:

npx skills@latest add PanQiWei/pqw-skills --skill=<name>

本机开发

软链接进本机宿主目录,拉取后即生效:

bash scripts/link-skills.sh

外部依赖

本插件不打包 pstack、ub-mode 与 mattpocock/skills,按它们各自的说明安装。

写作技能

不属于某个环节,写文档的环节都会用到。

  • clear-writing:清晰写作。英文按 ASD-STE100,中文按不依赖语言的清晰性原则;保留含义、情态与必需结构。正文取自上游 asd-ste100-skill 0.4.0(MIT)。项目有自己的文档写作规则时从接入点读,没有时用自带的缺省规则。
  • write-agents-md:撰写与治理 AGENTS.md:创建、修订、压缩、评审或迁移,设计继承的提示作用域,判断内容归属,协调父子文件的重叠与矛盾。

仓库结构

见 STRUCTURE.md。维护规则见 AGENTS.md,本机开发与发版步骤见 DEVELOPMENT.md,参与方式见 CONTRIBUTING.md。