Claude Code 需 2.1.292 或更高版本;第三方市场默认关闭自动更新,需在 /plugin 的 Marketplaces 标签手动开启;Copilot 不自带默认模型,首次使用会运行 setup-pstack 让你选模型;Muse 安装后需 approve 才会执行 SessionStart hook 和 agent 定义
pstack-claude
michael-denyerMIT活跃维护把 Poteto 的 pstack 严格 agent 工作流移植到 Claude Code、Codex、Copilot、Gemini 等多个编码 Agent 平台,让不同工具都能用上同一套规范化的智能体技能与代码审查流程。
Antigravity, Claude Code, Codex, Copilot, Gemini, Muse, OpenCode, Pi, and Prime Agent versions of Poteto's pstack. Rigorous agent workflows with Cursor primitives translated for other harnesses.
/plugin marketplace add michael-denyer/pstack-claude
/plugin install pstack@pstack-claudeREADME 未说明
把 Cursor 的 pstack 技能栈移植到 Claude Code、Codex、Copilot 等 agent 平台,让 agent 按固定工作流把任务做完并验证
把 Poteto 的 pstack 严格 agent 工作流移植到 Claude Code、Codex、Copilot、Gemini 等多个编码 Agent 平台,让不同工具都能用上同一套规范化的智能体技能与代码审查流程。
核心能力
- 用 poteto-mode 按目标自动路由到对应工作流
- 复现失败用例后再修复并给出通过证据
- 跨函数边界时先调用 architect 再实现
- 用 create-formal-verification-skill 对关键不变量做形式化验证
- 安装时预翻译 Cursor 技能名,省去运行时映射开销
容易踩的坑
- v0.9.1330.9.133最新正式版2026-11-07 · 2026-11-07 21:18 UTC
worktree-audit.mjsnow checks a worktree's ancestry againstrefs/remotes/origin/<trunk>. git resolves the shorthandorigin/<trunk>to a tag or local branch of that name before the remote-tracking ref. Such a ref pointing at unmerged work made the audit report the worktree merged and safe. The REMOTE column's ahead count readsrefs/remotes/origin/<branch>for the same reason. @EthanYoQ found and fixed the trunk case in #423.When a branch has several PRs, the audit now holds its worktree for an open one even when
ghlists a newer closed or merged PR first. The first record listed used to decide, so a merged record at the worktree's head marked it safe while another PR from the branch was still open. @EthanYoQ fixed this in #424.setup-pstack'sSKILL.mdnow covers the Claude Code path only, at 8,978 bytes instead of 17,690. The sheet-path table and each other runtime's step changes are inreferences/runtimes.md, whichSKILL.mdtells every other runtime to read first. Step 3 lets a role value carry an@<level>effort suffix on any runtime whose dispatch takes an effort; OpenCode 2 and Antigravity skip the effort questions, because their subagent calls have no effort field.copilot.mdlists step 10 among the steps that still apply on GitHub Copilot. @younes-io made the split in #422. - v0.9.1320.9.1322026-11-06 · 2026-11-06 13:29 UTC
查看更新说明
resume.mjsnow ignores links inside the fenced code blocks of a note saved with CRLF line endings, as its link rule says. The fence pattern's opening line ends in.*\n, and.does not match a carriage return. In a CRLF note the pattern missed each tilde fence, sopublishread the links inside it and failed withdoes not resolve (ENOENT). A leading byte order mark did the same to a fence on the note's first line.verifyLinksnow strips the mark and folds CRLF to LF before it removes code, ascheck-playbooks.mjsdoes. The recorded sha256 does not change, becausefileInfohashes the file's bytes. @wattanartongtipsukon-create found and fixed the CRLF case in #416, and a follow-up commit on that PR added the byte order mark case.The generator now writes the Platform Adaptation sentence in
poteto-mode/SKILL.mdfrom the rows ofRUNTIMESintools/runtimes.mjs(#413). It also writes each runtime mapping's list of diverse-model panel skills from thepanelroles inmodels.json(#412). A new runtime or a role change no longer needs a hand edit to either. The one shipped text change drops "CLI or app," after "GitHub Copilot" in the Platform Adaptation sentence. A test intests/runtime-packaging.test.mjsfails when a Build's copy of the routing mandate inplugins/pstack/hooks/stops matchingsession-start-context.md(#415). - v0.9.1310.9.1312026-11-06 · 2026-11-06 10:07 UTC
查看更新说明
The Model names section of every runtime mapping (
codex-tools.md,pi-tools.md,copilot-tools.md,muse-tools.md,minimax-tools.md,agy-tools.md, andgrok.md) namedhowcritics andreflectas diverse-model panels. Onlyarena,architect, andinterrogatehave a role on thepaneltier inmodels.json. The sync to upstream e8d856f (#67) retired thehow criticsrole, andreflectnever had a panel role. The mappings now name the three.tests/models.test.mjscompares each mapping's panel list with the skills that have apanelrole, so a role change that leaves the list stale fails the test.Three
grok.mdrows now match Grok Build's subagent guide (#410).spawn_subagenttakesrun_in_background, which defaults to true.send_subagent_messageexists behindGROK_ACTIVE_AGENT_MESSAGESor[features] active_agent_messages. A dispatch forgeneral-purposeorpstack:poteto-agentomitssubagent_type, because Grok cannot selectgeneral-purposeby name and runs an omitted type as general-purpose. - v0.9.1300.9.1302026-11-05 · 2026-11-05 12:36 UTC
查看更新说明
pstack now installs as a native Kimi Code CLI plugin. The root
kimi.plugin.jsonpoints Kimi at the shared skills tree and adds the routing instruction inkimi-instructions.mdto the system prompt while the plugin is enabled. This is the first release that carries the manifest, which the README's Kimi install waits for. In a fresh session, run/plugins install https://github.com/michael-denyer/pstack-claudeand/reload, and invoke a skill as/skill:pstack:poteto-mode. The newkimi-tools.mdmaps Claude tools to Kimi's, withAgentand its built-incoder,explore, andplanagents, andCronCreatefor a one-time wake-up. Kimi reads nosession hookline, so/plugins disable pstackis how to turn routing off, andsetup-pstackwrites no effort or hook lines there. On Kimi Code CLI 2.4.1 for macOS, installation and delivery of routing and skill content to a synthetic provider were verified; model compliance is untested. @donbeave added Kimi support in #394.pstack now loads as a native Grok Build plugin from a local checkout, with
grok plugin install "$PWD/plugins/pstack" --trustandgrok plugin enable pstack..grok-plugin/plugin.jsonlists the shared skills and a Grok-onlypstack-routingskill. Grok discardsSessionStarthook output, so that skill's description carries the poteto-mode hint instead. The model may not follow it, andsession hook: offdoes not turn it off; disabling the plugin does. The newgrok.mdmaps Claude tools to Grok's, withspawn_subagentforAgent.grok plugin updatedoes not refresh a local install, so the README gives the update steps. On Grok Build 1.0.70 for macOS,tests/grok-smoke.pychecked that a synthetic provider received the routing skill description and explicit skill content. @donbeave added Grok support in #398.pstack now installs as a native OMP plugin through the marketplace, with
omp plugin marketplace add michael-denyer/pstack-claudeandomp plugin install --scope user pstack@pstack-claude. The newplugins/pstack/package.jsondeclares the extension inomp/index.mjs, which adds the poteto-mode mandate before each main-agent turn and points main and subagent turns at the newomp-tools.md. It has the agent read eachpstack:<name>skill from the installed plugin's files, so the agent never picks a same-named skill from another source.session hook: offin~/.omp/pstack-models.mdturns routing off for every OMP profile, andsetup-pstackon OMP sets only that line, leaving models to OMP's ownmodelRoles. OMP 18.16.0 shares one plugin cache across scopes, so an upgrade or removal can affect other installations (OMP issue 16827). On OMP 18.16.0, installation from a local marketplace, skill access, and the routing toggle were verified with a synthetic provider; model compliance is untested. @donbeave added OMP support in #396.OpenCode 2 now has a native plugin in place of the
~/.agents/skillsinstall. Add the checkout'splugins/pstack/opencodedirectory to thepluginsarray in~/.config/opencode/opencode.jsonc, or install the Git package withopencode plugin add 'github:michael-denyer/pstack-claude#main'; the rootpackage.jsonnow exports the plugin as./server. The plugin inopencode/index.jsregisters each skill aspstack-<name>and adds the routing instruction in [session-start-opencode.md](plugins/pst - v0.9.1290.9.1292026-11-04 · 2026-11-04 15:24 UTC
查看更新说明
pstack now runs on Antigravity.
agy plugin install ./plugins/pstackinstalls all 67 skills, the 4 agents, and theSessionStartrouting hook from the new.antigravity-plugin/plugin.jsonand a roothooks.json. Antigravity reads hooks only from that root file and ignores Claude Code'shooks/hooks.json. The hook runs./hooks/session-start.sh agy. Antigravity starts hooks in the installed plugin directory and sets no plugin-root variable, so theagyarm of the shared script uses paths relative to that directory. It emits the poteto-mode mandate as aninjectStepssystem message, andsession hook: offin~/.gemini/config/pstack-models.mdturns it off. The newagy-tools.mdmaps Claude tools to Antigravity's, withinvoke_subagentand itsModelvaluesinherit,flash_lite,flash, andpro. Antigravity's native skill loader keeps only the first 24,000 bytes of a skill body, which drops the end of poteto-mode, so the mandate and the mapping tell the agent to read poteto-mode'sSKILL.mdin full withread_file.The generator checks the Antigravity manifest, the hook declaration in
hooks.json, and the hook script's execute bit.tests/agy.test.mjs, new rows intests/session-hook.test.mjs, and new cases intests/runtime-packaging.test.mjscover the mapping, the manifest, and the hook. Runs ofagy1.4.12 and 1.5.0 against a local model stub, with no Google account, showed the mandate in the model request and no mandate withsession hook: off. A signed-inagy1.5.0 session on macOS read the whole poteto-mode skill and got a reply from apoteto-agentdispatch. The hook usessh, and Windows is untested. @minatoaquaMK2 added Antigravity support in #390.
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
pstack
Lauren Tan's pstack is an opinionated Cursor skill stack that improves agent outcomes. This is a port for Claude Code, Codex, Pi, GitHub Copilot, Muse, and other agent harnesses. It tracks upstream and also carries named policy forks, each declared in tools/forks.json.
Tell poteto-mode your goal and it will invoke the correct workflow for the task. It keeps your code concise, simple and verified.
For concurrency bugs and invariants that tests cannot reach, /create-formal-verification-skill picks the riskiest property in your code, verifies it with a tool that fits, and leaves a project skill the next agent reruns. The separate agent-formal-verify plugin goes deeper on the method, with guided TLA+ model checking, Lean proofs, and Kani for Rust.
Built for Claude Code
This port translates upstream's Cursor skills for Claude Code before installation. Upstream's Claude Code install asks agents to translate Cursor names at runtime, using extra tokens and relying on them to apply the mapping correctly. This port also adds a SessionStart hook that routes tasks to poteto-mode.
Install
Run in Claude Code 2.1.292 or later:
/plugin marketplace add michael-denyer/pstack-claude
/plugin install pstack@pstack-claude
Claude Code leaves auto-update off for third-party marketplaces, so pstack stays on the version you installed. To turn it on, run /plugin, open the Marketplaces tab, select pstack-claude, and choose Enable auto-update. To update once by hand, run claude plugin update pstack@pstack-claude.
Run in your terminal:
codex plugin marketplace add michael-denyer/pstack-claude
codex plugin add pstack@pstack-claude
Invoke a skill by typing $ and its name, such as $poteto-mode or $babysit, then choosing its entry, which inserts $pstack:<name>. /skills lists every skill.
Run in your terminal:
pi install git:github.com/michael-denyer/pstack-claude
The package loads the skills and the pstack Pi extension, which adds the subagent, question, and wake-up tools the skills use, plus /loop and the routing instruction. Invoke a skill with /skill:<name>.
Run in your terminal:
copilot plugin marketplace add michael-denyer/pstack-claude
copilot plugin install pstack@pstack-claude
This installs pstack for the Copilot CLI and the GitHub Copilot app, which share ~/.copilot. Start a new session afterwards. Copilot ships no default pstack models, so the first skill that needs one runs setup-pstack to pick from the models your account lists, and later sessions reuse that choice.
The Copilot build is tested on Copilot CLI 1.0.87 through 1.0.92. On those versions the routing hook's context reaches the session alongside other plugins' session-start context. If a later version keeps only one plugin's context, setup-pstack offers a standing instruction for ~/.copilot/copilot-instructions.md instead. On 1.0.92, once the CLI caches its computer-use experiment assignment, copilot -p sessions list no plugin skills and a skill call returns "Skill not found". Interactive sessions, the hooks, and the agents are unaffected.
Run in your terminal:
git clone https://github.com/michael-denyer/pstack-claude
cd pstack-claude
muse plugins install ./plugins/pstack
muse plugins approve pstack
The first command installs the native Muse plugin bundle. The second approves its SessionStart hook and agent definitions, which Muse runs only after approval. Start a new session afterwards. Invoke a skill with /<name> (for example /poteto-mode), which Muse lists for each user-invocable skill.
Run in your terminal:
omp plugin marketplace add michael-denyer/pstack-claude
omp plugin install --scope user pstack@pstack-claude
Restart OMP after installing, disabling, or uninstalling pstack. OMP 18.16.0 shares one plugin cache across scopes, so an upgrade or removal can affect other installations; inspect their source and scope before changing them. See OMP issue 16827.
After a release containing kimi.plugin.json is published, close other Kimi sessions and install it in a fresh Kimi Code CLI session:
/plugins install https://github.com/michael-denyer/pstack-claude
/reload
To test an unreleased checkout, use /plugins install /absolute/path/to/pstack-claude instead, followed by /reload; Kimi copies the whole checkout, including Git metadata and local files, so use a clean, reviewed copy. To update, close other Kimi sessions, reinstall from the same source in a fresh session, and run /reload. Invoke a skill as /skill:pstack:poteto-mode; see the Kimi mapping for tool guidance.
git clone https://github.com/michael-denyer/pstack-claude
cd pstack-claude
grok plugin install "$PWD/plugins/pstack" --trust
grok plugin enable pstack
Start a new session and use /poteto-mode to load the skill explicitly. To update a local install, quit Grok sessions, inspect grok plugin details pstack and back up any edits in the installed copy, pull the checkout, run grok plugin uninstall pstack --keep-data, and repeat the last two commands. If pstack was disabled, disable it again before restarting. grok plugin update does not refresh a local install.
For a first install, check that ${MINIMAX_DATA_DIR:-$HOME/.minimax}/plugins/pstack does not already exist. Then run in your terminal:
git clone https://github.com/michael-denyer/pstack-claude
cd pstack-claude
mkdir -p "${MINIMAX_DATA_DIR:-$HOME/.minimax}/plugins"
cp -R plugins/pstack "${MINIMAX_DATA_DIR:-$HOME/.minimax}/plugins/pstack"
MiniMax Code loads each directory under plugins/ in its data directory as a local plugin, and reads pstack through its Claude Code reader with the skills, agents, and routing hook. mcode plugin list shows it as pstack@local. To update, record its enabled state, quit every mcode process, and move plugins/pstack to an unused path outside plugins/. Run git pull and the cp line again. Check mcode plugin list and restore the previous enabled state if needed.
Clone the repository, then add the absolute path to plugins/pstack/opencode to the existing plugins array in ~/.config/opencode/opencode.jsonc. On Windows, use a path such as C:/Users/name/pstack-claude/plugins/pstack/opencode. Restart OpenCode after checkout updates.
Alternatively, install, check, or update the native Git package:
opencode plugin add 'github:michael-denyer/pstack-claude#main'
opencode plugin check 'github:michael-denyer/pstack-claude#main'
opencode plugin update 'github:michael-denyer/pstack-claude#main'
A commit-pinned reference does not advance. If a check immediately after installation reports no package plugins, wait for the server to load it and check again.
If you previously installed pstack skills into ~/.agents/skills, inspect the links and remove only those pointing to your pstack checkout before using the plugin.
The plugin registers pstack- skill IDs and adds routing in root sessions. If routing is missing, run opencode api get /api/skill and check that each pstack- path belongs to this plugin. Resolve any conflicting skill before manually invoking that ID. Use session hook: off in the OpenCode model sheet to disable routing. To remove the plugin, remove its configured path and restart the service, or use opencode plugin remove with the exact Git specifier. OpenCode 1 is unsupported. See the OpenCode mapping.
Run in your terminal:
git clone https://github.com/michael-denyer/pstack-claude
cd pstack-claude
agy plugin install ./plugins/pstack
This installs the native Antigravity plugin bundle (skills, agents, and SessionStart routing hook) into ~/.gemini/config/plugins/pstack.
Gemini CLI, Prime Agent, and skills-only Codex installs read skills from ~/.agents/skills/. Run in your terminal:
git clone https://github.com/michael-denyer/pstack-claude
cd pstack-claude
mkdir -p ~/.agents/skills
for s in plugins/pstack/skills/*/; do
target=~/.agents/skills/"$(basename "$s")"
test -e "$target" || test -L "$target" || ln -s "$(pwd)/$s" "$target"
done
To update, run git pull in the clone, then run the for loop again to link skills added since the last run. These installs have no routing hook, so ask for poteto-mode by name or add a standing instruction to the harness's instruction file. See shared installation for per-harness notes and uninstalling.
Configure
pstack provides automatic routing on Claude Code, Codex, GitHub Copilot, Muse, MiniMax Code, Antigravity, Pi, Kimi Code CLI, OMP, and OpenCode 2. The runtimes deliver the instruction at different points: Kimi adds it while the plugin is enabled, OMP adds it before each main-agent turn, and OpenCode adds it at each model step in root sessions. Grok Build exposes a routing hint through a skill description; the model may not follow it. Codex requires hook trust through /hooks, and Muse requires muse plugins approve pstack. Other harnesses have no automatic routing.
Run setup-pstack to turn automatic routing on or off, change model defaults, or set a reasoning effort per role (arena runners: opus @xhigh, fable @max). On OMP, the session hook setting applies globally across profiles; on Kimi, enable or disable the plugin to control routing. See the routing reference.
Getting started
Use poteto-mode to fix the search filter resetting when I change pages.
For a bug, it reproduces the failure, uses how and why to investigate, delegates the fix, then reruns the failing case. If the fix crosses a function boundary, it brings in architect before implementation. You receive the fix and the failing and passing evidence.
Other playbooks cover planning, features, refactoring, performance issues, investigations, prototypes, PR maintenance, shipping, and longer projects.

Details
Data handling
pstack has no server or telemetry. Anything its skills ask your agent to read, including session transcripts, goes to your model provider. Scripts run locally, and PR tools use your GitHub CLI login.
Contributing
Thanks for helping make this port better. Bug reports, documentation fixes, and runtime improvements are welcome. See CONTRIBUTING.md for the checks and where your change belongs. Report vulnerabilities privately as described in SECURITY.md.
To support maintenance of this port, buy the maintainer a coffee.
License
This port, including its modifications and additions, is also MIT-licensed, © 2026 Michael Denyer. Original pstack © 2026 Lauren Tan; imported cursor-team-kit and thermos skills © 2026 Cursor. See LICENSE-cursor-team-kit, LICENSE-thermos, and NOTICE.md.