sync-pstack 是一个用于在项目中安装并同步 pstack 插件的技能。它的核心目标是通过一次访谈式设置,把 pstack 插件固定到某个标签,并在每个项目的 AGENTS.md 中维护一个共享的 overrides 块,使所有已设置的项目与上游 pstack 及共享覆盖保持一致。项目自身的规则不会被同步。
用途
该技能用于在项目中设置 pstack,或安装 pstack;同步、升级或更新 pstack(本地或全部项目);比较各项目的设置,或列出哪些项目使用 pstack、哪些已漂移;审计项目技能相对 pstack 的漂移,或判断哪些技能应被裁撤;管理评审模式(如 architect、panel 或 arena);处理会改变共享规则的教训或修正;以及添加或修改项目自己的 playbook。
主要能力
该技能把配置分为三层:上游层是固定标签的 pstack@pstack-claude 插件,位于每个项目的 .claude/settings.json、用户的 ~/.claude/settings.json 和用户的 Codex marketplace 中,由 sync --tag 和 user-pin 修改,pstack 本身从不被编辑;共享层包括 assets/block.md(渲染在每个项目 AGENTS.md 的 pstack:begin 与 pstack:end 标记之间)、assets/pstack/ 中的辅助文件(复制到 .agents/pstack/)以及 assets/pstack/rules/ 中的规则文件(渲染到 .agents/pstack/rules/),由对 dotai 检出中该技能源的编辑再同步来修改;项目层包括 .agents/pstack.json(保存访谈答案)、.agents/playbooks/ 中的项目 playbook 以及块外的所有规则(块外规则优先于块),由项目手动或通过 setup 修改。
使用方式
从任意目录运行 node <skill>/scripts/sync-pstack.mjs <command>。可用命令包括:discover <project> 以 JSON 打印访谈所需事实(只读);status [project...] 显示最新上游标签、用户固定和每个项目的固定、漂移、vendored 副本及最后源修订(只读);apply <project> 写入块、辅助文件和项目固定,支持 --tag、--dry-run、--force;check <project> 在 apply 会改变任何内容时退出 1(只读);verify <project> 在历史中键入的命令或参数提示模式不再解析、项目技能有死链、规则命名已退役技能、文档要求安装的技能依赖本项目工作流文件、check 会改变任何内容、或固定标签的 pstack 缺少覆盖或项目 playbook 所锚定的文本时退出 1(只读);sync --tag <tag> [project...] 对指定项目或所有受管项目运行 apply --tag,并列出未受管项目;playbook <project> <name> 打印项目固定下每个 pstack playbook 的编号步骤(只读);smoke <project> <prompt>... 在只读 Claude Code 会话(Opus)和只读 Codex 会话(gpt-6.1-sol)中并行运行每个提示并打印最终答案;user-pin --tag <tag> 固定用户范围的 Claude Code marketplace 并打印刷新命令;latest 打印最新上游标签。此外,node <skill>/scripts/audit.mjs <project> [--json] [--min <score>] 打印 Audit 模式判断所需事实,--min 设置句子对所需的重叠分数,默认 0.5(只读)。
适用场景
适用于需要统一管理多个项目中 pstack 插件版本和共享覆盖的场景;需要检查项目技能是否与 pstack 漂移并决定裁撤的场景;需要同步上游 pstack 变更并评估每个项目是否采纳新技能、代理或 playbook 步骤的场景;以及需要在 Claude Code 和 Codex 两个运行时中验证路由和行为的场景。
限制
锚点检查从脚本首次使用时在 ~/.cache/sync-pstack/ 创建的裸克隆读取 pstack,SYNC_PSTACK_UPSTREAM 可指向另一个克隆或 URL。apply 和 sync 会打印其渲染来源,并在 synced.source 中记录渲染所用的共享提交。verify 仅在技能或模式自 HEAD 后被裁撤时读取聊天历史,耗时数分钟,建议在最后一次 apply 后后台运行一次并将输出写入文件。smoke 的答案仅证明路由,不证明动作本身;只读冒烟无法证明实际动作。运行时会触发项目钩子,因此 Stop 钩子暂存文件也会暂存 setup 的更改。上游 VERSION 领先于最新标签时,status 会提示。合并的 VERSION 升级在标签推送前不算发布。仓库集合在 ~/.agents/config.json 中命名候选项目,而非授权。