Skip to content

Latest commit

 

History

History
401 lines (248 loc) · 61 KB

File metadata and controls

401 lines (248 loc) · 61 KB

CHANGES — applied substitutions

Mergify auto-queue is live: ready PRs to main require passing verify, Unfret and exact-head live-gate; workflow changes require operator queueing. This port applies the Cursor → Claude Code substitutions in skill bodies. Earlier drafts left them flagged; this revision resolves them. A later pass added a Codex build that shares the same skills; see Codex port below.

1.5.0 syncs to Cursor pstack 0.15.5

Open Pstack 1.5.0 tracks Cursor pstack 0.15.5 at 12d587dfb20741cafc376c42c696c5f6e2a64487. The first-run panel is now three models: claude:opus@max, codex:gpt-5.6-sol@max, and grok:grok-4.7@xhigh. Opus max takes judgment and prose, hardest tasks, and the How explainer. Grok 4.7 xhigh takes feature and refactoring work, the How explorer, and Swarm workers. Bug-fix, perf-issue, and hillclimb stay on Sol max. Why and Reflect stay on inherit-parent. Fable stays in the model matrix with its native agents, but no first-run role uses it. Setup asks about roles first, then asks efforts for and probes only the assigned families (the ordering follows PR #73 by @arjitj2). It drops and lists retired-role rows such as how critics.

Imported: the operator-neutral wording, tick status only on change, code-ready rounds with two or more audit lanes and one fix-forward, rebases at the code-ready report and at merge prep, children.tsv, the owner Babysit exception, countersign as approval, Architect reading architect runners, Swarm SHA and method briefs, Shipping build-noise lane reuse, decision-trail start rows and supersede-only corrections, the non-truncating log.sh, and the #419 cuts. Not applied: the five exclusions listed in UPSTREAM.md, the Cursor manifest, and docs/guide/. Existing sheets are not rewritten. Delete role lines and rerun setup to take the new defaults. A grok:grok-4.6 row keeps running until setup asks for its replacement. With no sheet, the new defaults apply on update.

1.4.1 syncs to Cursor pstack 0.15.1

Open Pstack 1.4.1 tracks Cursor pstack 0.15.1 at f8abeddd1862dc73704e3d719dd73df0d51b8c71. Poteto-mode now requires each claim to include its evidence or a measured, inferred, or guess label in the same sentence. Agents also run any check they can run themselves instead of handing that check to the user. No playbook, model, runtime, or dependency changed.

1.4.0 syncs to Cursor pstack 0.15.0

Open Pstack tracks Cursor pstack 0.15.0 at 71ed0d1076fec562c1b74ee353121a8d00f75382. The shared catalog contains 54 skills, including 23 principles. This sync imports the skill density and punctuation passes, the 361,140-byte logo, and the verbatim upstream README. How, Why, and Teach take the shorter explanation guidance. Reflect runs only on explicit invocation. Poteto-mode no longer requires reading the whole principle index as the first todo, but still requires reading any applied leaf and citing it truthfully. Unslop adds the mannered-prose and over-compression rules, preserving stable rule numbers. Technical-writing proposes new abstract-metaphor offenders and replacements without editing Unslop automatically.

How's critique mode and how critics role are retired, and its two review references are deleted. Architect and Investigation use explain-only How. Setup now renders 15 role rows. An old 16-row sheet's how critics row has no consumer in ordinary dispatch. Setup reports it as an unknown role before any probe or write. Remove that row before rerunning the normal validated setup flow. On Codex, the editable sheet and bounded AGENTS block must agree. Invalid state or a failed probe leaves both unchanged.

Two new leaves carry narrow local correctness corrections, also reflected in their descriptions and Poteto-mode's index. principle-test-behavior-not-implementation warns conditionally about assertions that miss relevant behavior. toBeDefined, toBeTruthy, toBeInstanceOf, and toBeGreaterThan(0) do fail on undefined, and useful negative-path, prompt/configuration, and relational contract checks remain valid. principle-attack-the-premise limits the actor census and reassignment prescription to imbalance problems. An even census is evidence against an asymmetry hypothesis, not proof that a shared premise is correct. Later syncs take upstream's equivalent corrections if they land.

Opening a PR adopts the "briefing, not the lab notebook" guidance and links detailed evidence. The "about 40 lines" squash-body cutoff is omitted. The port's required installed-version, user-action, and observed-result evidence sections remain unchanged. The PR 44 shipping rules, parent-owned provider dispatch, Sol defaults for bug-fix, perf-issue, and hillclimb, and no-fallback/no-implicit-timeout contracts remain in place. The Autopilot chooser and Multi-phase plan reference remain intact.

Existing exclusions remain: make-bot-ui, Benny automations, Cursor-only guide and sticky-mode content, Cursor-only solo-model defaults, invocation-blocking flags on How, Why, Unslop, and TypeScript best practices, and the unsupported Claude manifest logo field. Those four skills stay user-invocable and model-invocable. The principle leaves keep user-invocable: false, which hides them from the slash menu but leaves model invocation open. The Cursor manifest is not imported. Watcher and orchestrator directories, package metadata, and lockfile have no upstream changes in this range. The unrelated Grok Voice plugin remains outside this sync.

1.3.0 syncs to Cursor pstack 0.14.7

Open Pstack now tracks Cursor pstack 0.14.7 at efa2a531985e0a8084d36ff3cf87233be8a9f34b.

Forge-neutral pull request playbooks. Shipping, Babysit, Autopilot-full, Autopilot-stack, Opening a PR, and Multi-phase plan use GitHub CLI by default and Origin when its CLI can resolve the repository. Same-repository base chains and fork stacks land from the bottom one pull request at a time. Stable patch IDs decide when a rewritten head needs a new code verdict. Owners open pull requests early, follow repository draft rules until required evidence exists, keep an uncommitted decision trail, and compare load-bearing behavior and performance at trunk and head. Graphite remains only in the unchanged Orchestrate frontier tooling.

Factory panel review hardened the upstream landing flow. Shipping freezes the stack and clears every pre-existing auto-merge request and native merge-queue entry before verification. On GitHub, it confirms that both autoMergeRequest and the separate mergeQueueEntry are null. It repeats the check for the current bottom pull request and every descendant before any branch or base mutation. Both autopilots apply the same rule before rewriting an existing pull request, and Opening a PR applies it before an existing child is rebased, force-pushed, or retargeted. Autopilot-stack delivers each bottom pull request through Shipping instead of offering merge-when-ready for descendants. Same-repository heads use a base-branch chain. Fork heads keep local parent ancestry, target trunk in the base repository, and use a frozen bottom-to-top list because a fork-only parent branch cannot be a pull request base. Autopilot-full preserves the same parent ancestry in its short private-stack exception. Owners open pull requests early but leave them draft when repository instructions require live evidence before readiness.

Fork-safe rebases resolve the base fetch remote separately from the head push remote. The playbooks resolve the head push URL before fetching stack parents, worktree refreshes, and live-lane heads. Rebase and publish steps use that exact URL, binding an explicit force-with-lease to the SHA captured before the rewrite. Each verdict records its head, patch base, and stable patch ID separately from the current landing head and base. A patch-equivalent rewrite keeps the verdict, but every merge guard uses the current landing head. After a parent is squash-merged, an explicit git rebase --onto moves only the child's commits from its recorded old parent to current trunk. The rebase command terminates option parsing before passing the short branch name. Git then updates the branch instead of leaving a detached HEAD. Fork pull requests use GitHub's pull-request API with the validated head repository name, which also supports organization-owned forks. Every GitHub pull request command names the canonical base repository. The installed-plugin watcher receives its owner, repository, and pull request number explicitly.

Values returned by the forge or repository stay shell data. The imported pull request playbooks pass them as quoted arguments instead of pasting contributor-controlled branch names or other forge values into shell source.

Immediate merges require a server-enforced expected-head guard. The playbook verifies baseRefName immediately before the GitHub merge and monitors it until merge. GitHub has no expected-base guard, so Shipping uses the supported head guard and reports a safety failure if the pull request lands in another base. Server-side auto-merge also requires a SHA-scoped independent-verdict check. Without that check, the agent watches until it can issue the guarded immediate merge. Every observed head or base change disarms every pending request and returns to verification. An unarmed frontier returns to the merge step when it becomes ready. Every terminal non-passing required check ends the watch while auto-merge or a merge-queue entry is pending. UNSTABLE remains nonterminal by itself. A stale or conflicted frontier returns to the guarded rebase flow.

Origin merge commands omit GitHub's unsupported --squash flag and stop when Origin cannot provide atomic expected-head and expected-base guards. Both autopilot playbooks use the same captured-SHA lease rule. Autopilot-full routes owner merges through Shipping's current-head flow.

TypeScript boundary guidance. The TypeScript skill scopes Claude Code automatic loading to .ts and .tsx files, prefers repository-owned runtime schemas over hand-written property guards, and derives types from those schemas with helpers such as z.infer. Codex continues to invoke the same shared skill by name.

Codex presentation. The exact upstream assets/logo.png now ships in the shared plugin. The Codex manifest exposes it through interface.logo. The Claude manifest does not add a logo field because Claude Code has no schema for it.

No-op upstream revisions. Upstream moved several Fable references to a newer revision slug. Open Pstack already stores rolling claude:fable and claude:opus aliases, so those edits require no port change.

Upstream-only exclusions. make-bot-ui from 799151d and 6fecddb is not ported because it is built entirely from Cursor routine, webhook, and UI primitives. The disable-model-invocation additions from 73f8be4 are not applied to how, why, unslop, or typescript-best-practices; the flag would break poteto-mode's named invocation path on Claude Code. The 23a56e2 defaults that move bug-fix, perf-issue, and hillclimb from Sol to Fable are not applied because Fable costs much more for these frequent delegated code roles; all three stay on codex:gpt-5.6-sol@max. The Claude manifest logo field from efa2a53 is also omitted because Claude Code has no schema for it.

1.2.1 keeps Fable and Opus on their latest Claude revisions

Open Pstack now stores claude:fable@<effort> and claude:opus@<effort> in its model matrix, role defaults, and generated setup sheets. Claude Code resolves those aliases to the latest family revision. Native Claude agents and external runner calls pass the same aliases.

Runtime dispatch normalizes the provider-qualified versioned Fable and Opus descriptors written by earlier releases before it chooses a route, so an installed sheet stops pinning as soon as the plugin updates. It does not write user files and reports that setup should persist the migration. setup-pstack applies the same rule before validation, preserves roles, lane order, and effort selections, and writes only after the existing probes and confirmation. The runner rejects any version pin that reaches its boundary, records both the requested alias and Claude's concrete reported revision, and verifies that the report belongs to the requested family. Static checks reject new active version pins.

1.2.0 adds verified multi-PR plans, earlier runtime diagnostics, and shared review-bot triage

Plans with several stages now use one checklist instead of an overview and separate files for each stage. It has one ordered section for every pull request and keeps all ten ways of testing the real product, unit tests, live and performance proof, checks for how changes work together, merge rules, and supporting details in one place. A Node-based checker with no extra dependencies rejects missing or out-of-order sections, fake screenshots, empty definitions of success, incomplete performance proof, incorrectly written review checks, unsupported punctuation, and incorrect command use. Claude Code and Codex use the same installed skill and checker through their existing parent-controlled setup. If a provider fails, it is identified by name and treated as a dropout. No backup provider or hidden time limit was added.

The shared startup script now checks for Node before using features that only Bun provides. If the startup script or watcher is run with Node, it prints one clear message and exits cleanly instead of failing later because Bun does not exist. The normal Bun behavior and every existing test for runners, watchers, and orchestrators are unchanged. CI uses Node 22.23.2 so this behavior is always checked against the same known version.

The separate Babysit skill now follows the same three-choice rule as poteto-mode Babysit: fix the problem, dismiss it, or ask what to do. Both versions point to one official Bugbot policy. A check of the packaged files confirms that both links work, only one copy of the policy exists, all three choices are present, and the listed situations default to asking, so the two versions cannot quietly become different.

1.1.0 adds selectable requested effort to setup-pstack

setup-pstack asks one requested effort per frontier family (low, medium, high, xhigh, max) instead of probing a fixed default quartet. provider-dispatch.md owns the model matrix: family, upstream choice, provider, model, first-run default effort, selectable efforts, and Claude-native agent stem. Setup loads the current sheet first, folds mixed per-family efforts with an explicit operator choice, probes only the four requested pairs, and writes nothing on a failed probe. A rerun rewrites that family's @effort suffix on every assigned role and leaves customized role-to-family lanes in place. First-run defaults remain Fable max, Sol max, Grok xhigh, and Opus xhigh.

Claude-native dispatch ships Fable and Opus agents at all five efforts. Names are pstack-<stem>-<effort>. pstack-fable-max and pstack-opus-xhigh stay. The runner already mapped all five efforts; tests now cover low, medium, and high for each provider. Evidence remains requested effort and route. There is no runtime resolver, same-provider external fallback, implicit timeout, or second configuration source.

1.0.2 retries transient Grok authentication preflights

pstack-runner now waits five seconds and retries grok models once when Grok's first preflight would be classified as unauthenticated. This handles the CLI's brief contradictory output during self-update, when it can print an unauthenticated banner while exiting 0 and listing the requested model. A second failure remains terminal with exit 77. The retry shares the existing absolute deadline and cancellation latch, the receipt keeps evidence from both attempts, and model execution still runs at most once.

1.0.1 removes duplicate workflow entries

Claude Code and Codex both load the native plugins/pstack/skills/ tree. Codex 0.149.0 also converts each plugins/pstack/commands/*.md file into a generated .codex-plugin/migrated-command-skills/source-command-*/SKILL.md. The 31 same-named command trampolines therefore doubled Codex's workflow inventory. Claude's component inventory also registered both layers, although Claude Desktop visually merged the duplicate names.

This release deletes all 31 command trampolines. The native skill tree is now the only workflow source. Claude Code still supports both model-initiated Skill tool calls and user /pstack:<name> invocations through each native SKILL.md. Codex loads that same tree without generated source-command copies. The 21 principle-* leaves declare user-invocable: false; Claude hides them, while Codex 0.149.0 currently ignores that picker metadata (#8).

tests/skill-collision-repro.sh rejects any legacy command layer, checks the requested principle visibility metadata, compares the version across UPSTREAM.md and the three manifests, and preserves the default model-quad check. Its behavioral mode builds a one-skill Claude fixture and proves that both a model-initiated Skill tool call and a user /testplug:foo invocation reach SKILL-RAN.

1.0.0 — establish open-pstack

ericlitman/open-pstack becomes the canonical cross-harness distribution. Its imported baseline is 053ed78732e3b71826933170eafe7f7782dda844, synchronized to Cursor pstack v0.14.2 at 46125561306434d8a1d7745d540d8932ab0cd2a2. The repository preserves the existing history and attribution while moving marketplace identity, links, and the private tooling package to open-pstack.

Claude Code and Codex continue to share one skill tree. The parent-owned Claude/Codex/Grok provider dispatch, explicit failure receipts, no-fallback rule, and lack of an implicit runtime timeout are unchanged. UPSTREAM.md records the review-first sync procedure, and ordinary pull requests run the Bun tests, typecheck, manifest parse, and static maintenance invariants in GitHub Actions. Live provider behavior remains a release gate because CI cannot substitute for subscribed CLI execution.

0.9.12 — restore the upstream frontier panel across Claude Code and Codex

The v0.14.2 sync kept pstack's workflow structure but replaced upstream's Fable 5 / GPT-5.6 Sol / Grok 4.6 / Opus 5 panel with Claude-only choices. This release restores the upstream frontier panel from either supported parent harness without adding another orchestrator.

Parent-owned dispatch. Model configuration now uses explicit <provider>:<model>@<effort> descriptors. Claude Code keeps Fable and Opus native and launches Sol and Grok externally. Codex keeps Sol native and launches Fable, Opus, and Grok externally. The top-level parent resolves that table once; children do not inspect inherited environment markers, select providers, or reroute themselves. Same-provider external calls are rejected.

Deterministic external runner. skills/poteto-mode/scripts/runner/pstack-runner accepts an already-resolved parent, provider, model, effort, access mode, prompt file, cwd, output file, receipt file, and optional timeout. It preflights the assigned subscribed CLI, invokes it once with provider-native read-only or isolated-write controls, disables nested agent orchestration, restricts provider tools, reserves concurrent outputs exclusively, and writes a structured receipt with model proof, elapsed time, usage, cost when exposed, and bounded failure evidence. Claude uses project-only settings and an explicit tool list. Grok uses its kernel sandbox and an explicit tool list, and its terminal Messages result is persisted without progress narration. Codex receipts distinguish a provider report from an exact pinned argv instead of fabricating a reported model. Missing CLIs, authentication failures, unavailable models, explicit timeouts, cancellations, catchable post-reservation failures, non-zero exits, malformed output, and model mismatches are loud dropouts. There is no fallback. Parent harnesses launch it as resumable background work because Claude's foreground Bash path has a ten-minute ceiling. The runner and preflight impose no arbitrary default deadline; --timeout is opt-in only when the user or task provides a real external bound, and that bound starts at wrapper entry, remains one end-to-end deadline rather than a fresh allowance per child, and is armed in runtime-safe chunks without shortening long bounds. The runner is self-contained and does not enter the shared script bootstrap/re-exec path. A run-scoped cancellation latch owns SIGINT and SIGTERM from reservation through the terminal receipt, wakes the active direct child wait to send the first signal once, tolerates repeated delivery while reaping it, cancels inherited-pipe reads after child exit, keeps child exit codes distinct from launcher exit status, records only signals it actually sent to the child, clears losing timers, removes the empty output reservation, and preserves a durable terminal receipt; retries use fresh attempt paths.

Native Claude effort. pstack-fable-max and pstack-opus-xhigh agent definitions pin model plus effort for Claude-native lanes and mechanically deny nested Agent/Task dispatch. Codex passes model and reasoning_effort directly to spawn_agent.

Workflow integration. One provider-dispatch.md reference owns the route contract. setup-pstack, poteto-mode, every code-writing playbook, and the How, Why, Reflect, Arena, Swarm, Architect, and Interrogate skills resolve configured roles through it. The default code roles and four-provider panel match upstream v0.14.2. MCP-dependent Why and Reflect roles stay native through inherit-parent, because an external provider process does not inherit the parent's live MCP tool surface. The Codex mapping treats an unavailable native lane as a named dropout instead of collapsing the panel, and the README documents the external CLI requirements.

Tests. The vendored Bun suite covers exact command construction, terminal provider output parsing, multi-model usage envelopes, auth/model preflight, honest provider-report versus pinned-argv proof, missing CLI, unavailable model, authentication/model classification, wrapper-entry and shared explicit deadlines, no-timeout delayed work, runtime-safe very-long deadlines, no-spawn after preflight exhaustion, inherited-pipe deadline/cancellation, truthful receipts for post-exit and externally signalled children, bootstrap-free isolated launch, terminal post-reservation failures, prompt retained-handle exit after a losing long timer, preflight and model cancellation, repeated-signal child reaping with a race-free fixture handshake, fresh-path retry, same-provider rejection, identity cleanup, exclusive paths, and simultaneous same-provider lanes. tests/skill-collision-repro.sh compares the provider-qualified panel descriptors across the setup sheet, four panel skills, and canonical dispatch reference. Live Claude-parent and Codex-parent behavioral probes are a release gate; unit tests alone are insufficient.

0.9.11 — sync to upstream v0.14.2

Catches the port up with upstream cursor/plugins/pstack from 3fe2823 (v0.11.3) to 4612556 (v0.14.2). Skills 48 → 52, commands 27 → 31, subagents 1 → 2, plus a vendored scripts/ tree under poteto-mode/.

New skills.

  • swarm (upstream b79f8ca, 91dd7b7): fan out N parallel workers over slices or races, drain them, return one report. Upstream spawns Cursor cloud agents; Claude Code has no remote worker environment, so the port spawns local background subagents and takes isolation from a worktree or a per-worker output directory. The worker default follows the port's single-role default (claude-opus-4-8) and reads swarm workers from ~/.claude/pstack-models.md.
  • no-comments plus the comment-sicko subagent (#185): a comment-stripping review pass. Task → Agent, and upstream's agent name Comment Sicko becomes comment-sicko because a subagent_type with a space is not addressable.
  • technical-writing (#185): the layered Diátaxis / Google developer style / STE / Global English standard. No Cursor primitives, copied as-is.
  • bro (#187): restate the last message in plain language. Copied as-is.

Per the 0.9.8 invariant, all four drop upstream's skill-side disable-model-invocation: true and get command trampolines that carry it instead.

New playbooks (#185, #187), under poteto-mode/playbooks/: babysit (drive a PR or stack to merge-ready), shipping (verify each PR independently, then land the contiguous verified run), orchestrate (a standing multi-day program under one coordinator), autopilot-full and autopilot-stack (one owner per PR, swarm-verified), and worktree-cleanup (safety-gated disk reclamation). They share the new references/bugbot-triage.md rubric, which the poteto-mode review-bot trigger now points at.

Substitutions in the six: Cursor cloud agents become local background subagents isolated by worktree; control-cli / control-ui become the run / verify built-ins; Task becomes Agent; AskQuestion becomes AskUserQuestion; the Cursor agent store becomes ~/.claude/orchestrate/<slug>/, which outlives the session the way a multi-day program's store has to; a Cursor restart becomes a session restart; the Cursor dashboard becomes the background task list. Cursor's /goal has no Claude Code equivalent, so the autopilots keep the program objective in the standing orders and the todolist, and their audit tick re-reads the playbook from the installed plugin instead of git show origin/main:pstack/.... Graphite (gt) is not Cursor-specific and stays.

Babysit, skill versus playbook. Upstream v0.14.0 stopped routing PR-status requests to Cursor's built-in babysit and gave poteto-mode its own playbook. The port's bundled babysit skill (the 0.9.2 analog of that built-in) stays as the standalone /babysit entry point; inside poteto-mode the playbook supersedes it, and both files say so.

Vendored scripts. poteto-mode/scripts/ carries upstream's watch-pr (the PR watcher the Babysit and Shipping playbooks poll), orch (the orchestrate store CLI), worktree-audit.sh, and the bun bootstrap. Three edits: worktree-audit.sh reads ~/.claude/projects/ — scanning the whole projects tree, since a session run inside a worktree gets its own encoded directory — instead of ~/.cursor/projects/<slug>/agent-transcripts; it warns when jq or rg is missing, because their absence silently blanks the PR and LAST_CHAT columns and downgrades an in-use worktree to safe in the one playbook that deletes user state; and the private workspace package is renamed @pstack-claude/poteto-mode-tools in package.json and bun.lock. bun joins gh as a documented system dependency, gt only for the stack playbooks and jq/rg only for the worktree audit. node_modules/ under the scripts dir is gitignored.

Content refinements over the port's existing translation. architect gains design-it-twice, the design-red-flags.md screen, and the interface-depth comparison (#175), with the matching rationale-template and runner-prompt edits. Nine principle-* leaves, unslop, typescript-best-practices (plus 69 new lines of references/patterns.md), and lead-judgment.md take upstream's HEAD bodies verbatim; their bodies were byte-identical to upstream 3fe2823 beforehand, so the port keeps only its own frontmatter. interrogate moves its reviewer defaults into a labelled A/B/C/D table (#167). create-verification-skill points at the new feature-map-example/ and names the four required H2s (#178). automate-me learns that mode skills can live in a personal category directory (#187). opening-a-pr takes upstream's title, description, readiness, and babysit rewrite (#185, #238), and autonomous-run takes mid-run-discovery ownership (#170).

Model configuration. Upstream's slug bumps (#165, #166, #169, #210: fable / sol / grok / Opus 5) are not ported — the port keeps its own Claude quad (claude-opus-5, claude-fable-5, claude-opus-4-6, claude-sonnet-5) and its claude-opus-4-8 single-role default. What is ported is the structure: the inherit-parent / auto aliases (#163), which on Claude Code mean omitting model on the Agent call so the role runs on the parent session's model, and the config-source-first phrasing (#167) in arena, interrogate, and swarm. setup-pstack gains the aliases, the swarm workers row, and the alias-aware validation rules.

Deliberately not ported. docs/guide/ (the ten-chapter tutorial and its six screenshots, 2.3 MB) teaches pstack through Cursor's UI, sticky mode, and cloud agents, and ships no skill content; README links it upstream. is_background: true on poteto-agent is Cursor agent frontmatter with no Claude Code key. Sticky mode and Benny remain out, unchanged from the earlier reviews.

Test fix. The quad invariant in tests/skill-collision-repro.sh had been searching the panel skills for claude-sonnet-4-6, a slug the 0.9.10 panel swap removed, so the check failed on main for every skill. It now derives the anchor slug from the canonical arena runners row and reads interrogate's quad from its new reviewer table.

Verified. 52 skills / 31 commands / 2 subagents; three manifests parse at 0.9.11. Static invariants pass, including the repaired quad check. The vendored scripts pass bun install --frozen-lockfile, bun test orch watch-pr (52 tests), and bun run typecheck from their ported location. Not yet live-verified in a Claude Code or Codex session.

0.9.10 — sync to upstream v0.11.3

Catches the port up with upstream cursor/plugins/pstack from 0452e08 (v0.10.0) to 3fe2823 (v0.11.3). Skill count 44 → 48, commands 24 → 27.

New skills.

  • teach (#153): composes the how and why skills into one plain explanation. Command-paired public skill; platform note for the parallel dispatch and image-gen tool.
  • principle-model-the-domain (#147): encode the domain in a structure instead of scattered conditionals. Verbatim upstream prose, user-invocable: false per the 0.9.9 principle convention, woven into poteto-mode's data-shape trigger and Architecture index, and into the feature and refactoring playbooks.
  • create-verification-skill and maintain-verification-skill (#150, #151): generate and maintain a persistent, repo-tailored project verification skill plus feature map. A different layer from Claude's built-in run/verify per-session drivers, which they complement. Translation: .cursor/skills/ → .claude/skills/, drop disable-model-invocation (command-paired), add command trampolines and platform notes.

Content refinements (#155, #156), applied over the port's existing Cursor→Claude translation. The perf playbook's eight strategy families; interrogate "four-model" → "multi-model"; the hillclimb ground-the-workload-first rewrite; rationale one-liners across five playbooks; typescript-best-practices real-tests and structured-telemetry rows; the why databricks source SHOW TABLES note.

Model strategy (#143, #156). poteto-mode now tiers code delegates by difficulty — hardest changes to the strongest judgment model (claude-fable-5) or the strongest instruction follower, trivial edits to a fast code model, everything else claude-opus-4-8. setup-pstack gains the configurable arena cross-judge pool row. The upstream grok/gpt slugs stay substituted with claude-*.

Deliberately not ported. Sticky mode (#144) is Cursor-only frontmatter (mode/icon/color/reminder) with no Claude Code equivalent; the port's 0.9.5 SessionStart hook already auto-fires poteto-mode with the same non-trivial/trivial/opt-out logic. Benny (#137) remains out, per the earlier review.

0.9.9 — principle leaves hide from the slash menu

0.9.8 kept disable-model-invocation: true on the 20 principle-* leaves, on the reasoning that they have no command and are read by path from poteto-mode. But that flag only blocks model invocation. It does not hide a skill from the user / menu, so all 20 surfaced as bare /principle-* slash commands in every session (confirmed across projects on the desktop app). They are internal references; users should never invoke them.

Fix: swap the flag for user-invocable: false on all 20 leaves. Per the Claude Code skills docs, user-invocable: false hides a skill from the / menu and controls menu visibility only, not Skill-tool or file access — so poteto-mode reading each leaf by path (../principle-<name>/SKILL.md, the mechanism the leaves have always used) is untouched. The two flags are mutually exclusive: setting both leaves a skill neither user- nor model-invocable, so this is a swap, not an addition. The visible consequence is that the leaves become model-auto-invocable on description match — the same standing the 12 command-paired skills took in 0.9.8, and immaterial to the by-path reference the leaves actually rely on. The invariant is now: every command carries disable-model-invocation: true, no command-paired skill carries it, and every principle-* leaf carries user-invocable: false.

0.9.8 — command-paired skills drop disable-model-invocation

The 0.9.7 fix put disable-model-invocation: true on all 24 command trampolines so the Skill tool resolves a colliding name to the skill. But 12 of those skills carried the same flag in their own frontmatter (present since the initial port), and the flag on a skill makes the Skill tool refuse the invocation outright. Net effect: the 0.9.5 SessionStart mandate ("invoke pstack:poteto-mode with the Skill tool") was refused every session, five of the six direct-entry skills it lists (poteto-mode, tdd, architect, arena, interrogate; only how and why were unflagged) were model-unreachable, and every user-typed /pstack:<name> for a flagged skill expanded to a trampoline body the model then couldn't follow. 0.9.7 didn't cause the skill-side flags, but it surfaced them: before it, the same calls died in the trampoline loop instead.

Fix: remove the flag from the 12 command-paired skills that carried it (architect, arena, automate-me, blast-radius, figure-it-out, interrogate, poteto-mode, recall, reflect, show-me-your-work, tdd, thermo-nuclear-code-quality-review). The resulting invariant is symmetric: every command carries the flag, no command-paired skill does. The principle-* leaves keep it — they have no commands and are deliberately read by path from poteto-mode. Model auto-invocation on description match is now possible for the 12; that is the 0.9.5 design intent, and the same standing the other 12 always-unflagged skills (how, why, babysit, deslop, …) already had.

tests/skill-collision-repro.sh gains the mirrored static invariant (no skill with a same-named command may carry the flag) and a fourth behavioral leg preserving the repro: with the flag on the skill, the Skill tool refuses the invocation even though the command no longer shadows it.

0.9.7 — command trampolines no longer shadow their skills

Every user-facing skill ships with a same-named commands/<name>.md trampoline whose body is "Invoke the <name> skill and follow it." On Claude Code, the Skill tool resolves a colliding name to the command, not the skill — so a model-initiated invoke of pstack:<name> got the trampoline back, which told it to invoke the skill, which resolved to the trampoline again. Mutual recursion; the real SKILL.md never loaded. This hit every model-side entry path, including the 0.9.5 SessionStart mandate (whose whole job is telling the model to invoke pstack:poteto-mode), and it made each name appear twice in the model's skill list. Observed in desktop-app sessions (inline --plugin-dir loading, same path as the 0.9.3 entry); reproduced on CLI 2.1.195 with a minimal two-artifact plugin.

Fix: all 24 command files now carry disable-model-invocation: true — the flag the principle-* leaf skills already use. Verified on 2.1.195 with the same minimal plugin: the Skill tool then resolves the colliding name to the skill (its SKILL.md is what gets injected), while a user-typed /plugin:<name> still runs the command trampoline, whose "invoke the skill" body now lands on the skill instead of looping. Command bodies are unchanged, so the Codex prompts path (which reads description frontmatter and the filename, and ignores keys it doesn't know — the established name-key precedent) is untouched. Whether a full Codex plugin install still surfaces the stubs in its picker with the flag present is unverified; if it hides them, the skills themselves remain the primary Codex surface and are invocable by name. Incidental finding from the same repro, recorded for future use: ${CLAUDE_PLUGIN_ROOT} is substituted inside command markdown bodies on 2.1.195, not just in hooks and MCP configs.

The repro is preserved as tests/skill-collision-repro.sh (manual; needs the claude CLI, makes three haiku calls). It checks the static invariant (every command carries the flag) and the three behavioral legs: command wins the collision without the flag, skill wins with it, user-typed /command still runs. The first leg is a precedence detector — if it ever fails, upstream changed the undocumented resolution order and the flag should be re-evaluated, not the fix declared broken.

0.9.6 — hook hardening and duplication trims (thermo-nuclear review)

A strict maintainability review of the 0.9.3–0.9.5 range drove these:

  • hooks/session-start collapsed from 43 lines to 3: SessionStart hook stdout reaches context directly (per the hooks docs; verified end-to-end on 2.1.197), so the JSON envelope, the escape_for_json pass, and the Cursor/Copilot platform branches — dead code here, since hooks.json is the only registration — are gone. This also removes a verified failure-path bug: the old cat ... 2>&1 || echo fallback was additive, silently injecting raw cat stderr plus the fallback string into session context when the context file was unreadable; now a missing file fails the hook cleanly and injects nothing. The script is no longer adapted from superpowers (NOTICE updated; run-hook.cmd remains near-verbatim and attributed).
  • Panel-quad enumeration trimmed from the poteto-mode meta-files (SKILL.md, references/plan.md, references/codex-tools.md) — the slugs now live only in the four panel skills and the setup-pstack sheet, with a grep-identical rule added to Maintenance. This drift class already bit once (0.9.4 fixed a three-reviewers-vs-"four different models" mismatch).
  • README's desktop-app dependency-unsatisfied narrative deduplicated to a two-sentence summary linking the CHANGES 0.9.3 entry.

Upstream review through 0452e08 (v0.10.0), 2026-07-01

One upstream pstack commit landed after the e46364b sync: 0452e08 adds the dormant automations/benny/ pack (Slack issue triage plus reproduce-and-fix, built on Cursor's event-triggered automations) and bumps upstream to 0.10.0. Deliberately not ported — rationale and revisit criteria in README → What's deliberately not ported. cursor-team-kit has no commits since the sync point (its latest, 679fdaf, 2026-05-28, predates e46364b). The port's skill tree was current with upstream HEAD as of this note; the later 0.9.10 sync carries it forward to v0.11.3 (see above).

0.9.5 — poteto-mode auto-fires via SessionStart hook

plugins/pstack/hooks/ is new. hooks.json registers a SessionStart hook (matcher startup|clear|compact) that injects hooks/session-start-context.md (~0.3k tokens) as additional context — the same mechanism superpowers uses to auto-load its skill-use mandate. The injected block routes any non-trivial engineering task into pstack:poteto-mode before the first response, lists the direct-entry skills, tells dispatched subagents to ignore it, and defers to explicit user instructions. The full poteto-mode skill still loads only on invoke. run-hook.cmd (cross-platform polyglot) and the JSON-emission pattern in session-start are adapted from superpowers (MIT; see NOTICE.md and LICENSE-superpowers). Codex is unaffected — it has no plugin hook runtime; invoke poteto-mode by name there.

0.9.4 — Sonnet 5 joins the default panels

The multi-model panels (arena runners, architect runners, interrogate reviewers, how critics) grow from a triple to a quad: claude-opus-4-8, claude-sonnet-5, claude-opus-4-6, claude-sonnet-4-6 — both generations in each of two tiers. This also restores upstream's four-way interrogate split; the port had been running three reviewers under a "four different models" description. setup-pstack adds Sonnet 5 (claude-sonnet-5) to the available-family enumeration and to the four panel rows of its default sheet. Single-model delegation defaults stay claude-opus-4-8. Touched: arena, architect, interrogate, how, setup-pstack, poteto-mode (SKILL.md, references/plan.md, references/codex-tools.md), and the README substitution-table panel row. The historical Cursor→Claude mapping rows (composer-2.5-fast, gpt-5.x) are unchanged — they record what the 0.9.2 sync substituted, not current defaults.

0.9.3 — dependency declaration removed

plugin.json no longer declares dependencies: [{ "name": "plugin-dev", "marketplace": "claude-plugins-official" }], and marketplace.json drops the matching allowCrossMarketplaceDependenciesOn. The Claude Code desktop app passes every enabled plugin to the CLI as a session-only --plugin-dir, which strips marketplace identity (pstack@inline); a cross-marketplace dependency can never resolve in that mode, and the loader disables the entire plugin with dependency-unsatisfied. Result: pstack loaded in the CLI and the VS Code extension but silently vanished from desktop-app sessions. optional: true on a dependency entry passes claude plugin validate but is not honored by the loader (tested on 2.1.197). plugin-dev is now a documented manual install (README → Dependencies); skill bodies still route skill-authoring to plugin-dev:skill-development when it is present.

Codex port

pstack also ships as a Codex plugin. The skill bodies are not forked or regenerated. The same skills/ tree serves both runtimes. One mapping file does the Claude-to-Codex translation. That single-mapping-file spine is the same one the official superpowers plugin ships for Codex.

pstack diverges from superpowers in one respect, and it is deliberate. superpowers writes its skill prose in tool-neutral language ("dispatch a subagent"), so no skill names a runtime tool and no per-skill note is needed. pstack instead keeps the upstream Claude-native prose intact, to stay in lockstep with upstream sync, and adds a one-line Platform note to each skill that names a Claude primitive. The note points at the mapping. Rewriting 44 upstream skills into neutral language would fork them from upstream and was rejected for that reason.

Added.

  • plugins/pstack/.codex-plugin/plugin.json is the Codex plugin manifest (skills: ./skills/), with key-parity to the superpowers Codex manifest.
  • .agents/plugins/marketplace.json is the Codex marketplace manifest at the repo root, sourcing ./plugins/pstack the way the Claude .claude-plugin/marketplace.json does.
  • plugins/pstack/skills/poteto-mode/references/codex-tools.md is the single Claude to Codex map. It covers tool actions (Agent becomes spawn_agent / wait_agent / close_agent, AskUserQuestion becomes plain text, the todolist becomes update_plan), the multi_agent config flag, subagent policy (Codex has no poteto-agent type, so dispatch a spawn_agent told to read poteto-mode first), model slugs (claude-* becomes your configured Codex models), the Claude built-ins pstack names (run, verify, loop, plugin-dev:skill-development), and the instructions file (AGENTS.md).

Platform notes (pointer-only edits).

  • skills/poteto-mode/SKILL.md gained a "Platform Adaptation" section pointing at the mapping.
  • skills/{architect,arena,automate-me,babysit,how,interrogate,reflect,why}/SKILL.md each gained a one-line Platform note, since each names a Claude tool, a claude-* slug, or a Claude built-in. The pure-prose skills (the principle-* set, tdd, figure-it-out, and the cursor-team-kit imports) needed nothing.
  • skills/setup-pstack/SKILL.md gained a Codex branch. It writes ~/.codex/pstack-models.md referenced from ~/.codex/AGENTS.md, using Codex slugs instead of claude-*.

Commands. The 24 commands/*.md files are Codex-compatible as written, no rewrite needed. Codex command discovery reads the description frontmatter and the filename and ignores the extra name key, and each body (Invoke the <skill> skill and follow it) is a valid Codex prompt. They surface as slash commands once the full plugin is installed in Codex. For the symlink-based install, drop the same files into ~/.codex/prompts/ for loose /name shortcuts alongside the symlinked skills.

Deliberately not ported.

  • agents/poteto-agent.md. Codex has no subagent_type, so ad-hoc subagents are dispatched via spawn_agent told to read poteto-mode first. The mapping covers this.

Verified. Codex discovers the skills and namespaces them under pstack (pstack:poteto-mode and so on) in a live session. Mapping resolution mid-task and spawn_agent fan-out follow the superpowers pattern and are worth confirming per session.

Maintenance. The open-pstack version string lives in plugins/pstack/.claude-plugin/plugin.json, .claude-plugin/marketplace.json, plugins/pstack/.codex-plugin/plugin.json, and the current-version row in UPSTREAM.md. A version bump must update all four. tests/skill-collision-repro.sh checks that they match. .agents/plugins/marketplace.json carries no version field. The canonical default panel is the arena runners row of the setup-pstack first-run sheet. It is copied into the other three panel rows and into arena, architect, and interrogate. Keep those copies grep-identical when models change. The static test reads the panel from that row, and model-matrix.test.ts pins its families and checks each effort against the matrix. After a sync that touches skills/poteto-mode/scripts/, run bun install --frozen-lockfile, bun run test, and bun run typecheck from that directory. hooks/session-start-context.md restates skill one-liners. Re-verify it whenever skill names or descriptions change. The package must not contain a commands/ layer. Claude Code and Codex load the native skills/ tree directly, and a command layer duplicates that inventory. The 23 principle-* leaves carry user-invocable: false to request exclusion from the user picker while poteto-mode reads them by path. Claude honors the metadata; Codex 0.149.0 currently does not (#8). They must not carry disable-model-invocation, which would make them unreachable to the model. Re-run the behavioral mode of tests/skill-collision-repro.sh after Claude Code upgrades to check both model-initiated and user-initiated native skill invocation.

0.9.2 sync (against upstream e46364b)

Upstream pstack jumped from 0.1.0 → 0.9.2 between syncs. 30+ commits, including 11 new files.

New pstack-native skills/playbooks pulled in (Cursor refs in them re-substituted on the way in):

  • skills/blast-radius/ — find what a change could break beyond the diff.
  • skills/recall/ — reconstruct recent working context. Cursor transcript path (~/.cursor/projects/<slug>/agent-transcripts/<uuid>/<uuid>.jsonl) rewritten to Claude Code path (~/.claude/projects/<encoded-cwd>/<uuid>.jsonl).
  • skills/setup-pstack/ — model-per-role configuration. Substantially rewritten: original wrote ~/.cursor/rules/pstack-models.mdc (Cursor's .mdc always-applied-rule feature, no Claude Code analog). Replacement writes ~/.claude/pstack-models.md and instructs the user to add an @~/.claude/pstack-models.md include to ~/.claude/CLAUDE.md so the override sheet loads each session.
  • skills/principle-build-the-lever/, skills/principle-sequence-verifiable-units/ — new principles.
  • skills/poteto-mode/playbooks/{hillclimb,pause-safely,refactoring,session-pickup,trace-forensics}.md — new playbooks.
  • skills/interrogate/references/code-quality-review.md — new interrogate reference.

Re-applied substitutions across changed + new content:

  • Bulk pass through 28 files via Python regex covering all entries in the substitution table above.
  • Targeted fixes for variants the bulk pass missed:
    • recall/SKILL.md line 15 — Cursor transcript path rewrite.
    • why/SKILL.md line 100 — MCP discovery wording variant.
    • poteto-mode/SKILL.md lines 22–25 — cursor-team-kit qualifiers removed; Bugbot triage refs to babysit.
    • reflect/SKILL.md lines 37, 45, 49 — readonly/agent-mode language; Task → Agent.
    • poteto-mode/playbooks/session-pickup.md line 7 — agent-transcripts/ path.
    • poteto-agent.md description — generalPurpose → general-purpose.
  • Bumped Opus references from claude-opus-4-7 to claude-opus-4-8 (current Claude family head).
  • Multi-model panels (arena, architect, interrogate, how critics, and the setup-pstack defaults) had a duplicate claude-sonnet-4-6 in the third slot. Replaced one with claude-opus-4-6 so the panel runs three distinct models (claude-opus-4-8, claude-opus-4-6, claude-sonnet-4-6) instead of two — cross-generation diversity inside the opus tier where cross-vendor diversity isn't available.
  • All single-subagent delegation defaults bumped from claude-sonnet-4-6 to claude-opus-4-8: bug-fix, feature, perf-issue, refactoring, hillclimb (the five poteto-mode code-writing playbooks); how-explorer, why-investigators, reflect-tooling (the three multi-subagent dispatches that run the same model in parallel rather than a diverse panel). Setup-pstack override sheet updated to match. Meta-defaults in poteto-mode/SKILL.md and plan.md rephrased: "default claude-opus-4-8 for code-writing delegations" replaces the old "claude-sonnet-4-6 for code" wording. Sonnet now appears only in the diverse 3-model panels.

Command stubs added: commands/blast-radius.md, commands/recall.md, commands/setup-pstack.md.

Manifest changes:

  • plugins/pstack/.claude-plugin/plugin.json — version 0.1.0 → 0.9.2; added displayName: "pstack (Claude Code port)".
  • .claude-plugin/marketplace.json — plugin entry version bumped to 0.9.2.

Team-kit imports: unchanged. The upstream diff showed only verify-this (which we didn't import) changed in cursor-team-kit/skills/.

babysit skill: unchanged. Locally authored; not affected by upstream sync.


Substitution table

Cursor primitive Replaced with Notes
Task tool Agent tool Claude Code's Agent tool is the equivalent.
subagent_type: generalPurpose subagent_type: "general-purpose" Kebab-case in Claude Code.
subagent_type: "poteto-agent" subagent_type: "poteto-agent" Unchanged — this plugin ships that agent.
readonly: true / readonly: false (dropped; rewritten as "pick a subagent_type that retains MCP access") Claude Code controls tool/MCP access via subagent_type, not a per-call readonly flag.
AskQuestion AskUserQuestion Tool rename; semantics match.
Cursor /loop (built-in) Claude Code loop skill 1:1 replacement; available as a built-in skill.
Cursor /babysit (built-in) This plugin's babysit skill New Claude Code analog at skills/babysit/ wrapping gh + loop.
Cursor /create-skill (built-in) plugin-dev:skill-development skill Claude Code's authoring guidance for SKILL.md.
cursor-team-kit /deslop This plugin's deslop skill Ported in (only team-kit skill imported).
cursor-team-kit control-cli run skill (Claude Code built-in) Drives CLIs/TUIs.
cursor-team-kit control-ui verify skill (Claude Code built-in, VS Code extension) Drives UIs (browser/Electron).
~/.cursor/projects/*/ transcripts ~/.claude/projects/<encoded-cwd>/*.jsonl <encoded-cwd> is the workspace's working directory with / → -.
Cursor agent-transcripts/ dir ~/.claude/projects/<encoded-cwd>/ Same as above.
.cursor/skills/, ~/.cursor/skills/, ~/.cursor/plugins/ .claude/skills/, ~/.claude/skills/, ~/.claude/plugins/ Path-only translation.
Cursor mcps/ directory Tool list at top of system prompt (mcp__<server>__<name> prefixed entries), or .mcp.json, or claude mcp list Discovery surface differs.
Model: composer-2.5-fast claude-sonnet-4-6 Fast workhorse Claude.
Model: claude-opus-4-X-thinking-xhigh claude-opus-4-8 (with note "extended thinking" where it appeared in a table) Claude Code uses model IDs without the Cursor UI suffix; extended thinking is a separate knob. Originally substituted to 4-7, then bumped to 4-8 to match the current Claude family.
Model: gpt-5.3-codex-high-fast, gpt-5.5-high-fast claude-sonnet-4-6, claude-haiku-4-5 Within Claude Code, cross-vendor diversity isn't native. Skills that need a harsher pass now route to the bundled thermo-nuclear-code-quality-review skill (imported from cursor-team-kit) as the escape hatch. Different style of pressure (strict maintainability rubric), not vendor diversity.

New / imported files

  • skills/babysit/SKILL.md — Claude Code analog of Cursor's /babysit. Wraps gh pr view / gh pr checks / gh run view --log-failed plus the loop skill for pacing. Provenance: independently authored; workflow informed by Cursor's public /babysit behavior. Not a copy of Cursor's closed-source implementation.
  • commands/babysit.md — slash command routing to the babysit skill.
  • skills/thermo-nuclear-code-quality-review/SKILL.md — imported verbatim from cursor-team-kit. Used as the harsher-critique escape hatch in arena, interrogate, architect, and how (replaces the Cursor-original cross-vendor bridge).
  • commands/thermo-nuclear-code-quality-review.md — slash command stub.
  • skills/make-pr-easy-to-review/, skills/fix-ci/, skills/fix-merge-conflicts/, skills/get-pr-comments/, skills/what-did-i-get-done/ — five more skills imported verbatim from cursor-team-kit. Audited for Cursor-specific refs; none found, so no rewiring needed. They use only gh and git primitives.
  • commands/make-pr-easy-to-review.md, commands/fix-ci.md, commands/fix-merge-conflicts.md, commands/get-pr-comments.md, commands/what-did-i-get-done.md — slash command stubs.
  • .claude-plugin/marketplace.json — marketplace manifest so the repo is installable via /plugin marketplace add michael-denyer/pstack-claude. Declares allowCrossMarketplaceDependenciesOn: ["claude-plugins-official"] so the cross-marketplace dependency on plugin-dev resolves at install time.
  • plugin.json dependencies — declares plugin-dev (from claude-plugins-official marketplace) as a required dependency, since the rewiring routes skill-authoring tasks to plugin-dev:skill-development.

Per-skill changes applied

skills/poteto-mode/SKILL.md

  • Triggers section: create-skill → plugin-dev:skill-development; deslop "from cursor-team-kit" qualifier dropped; control-cli/control-ui line replaced with run/verify driver guidance; Cursor's built-in **babysit** → this plugin's babysit.
  • Subagents section: Task → Agent; composer-2.5-fast → claude-sonnet-4-6; claude-opus-4-8-thinking-xhigh → claude-opus-4-8; "agent mode (readonly strips MCP)" → "full tool access (do not pick a subagent_type that strips MCP)".

skills/poteto-mode/references/plan.md

  • AskQuestion → AskUserQuestion.
  • generalPurpose → "general-purpose"; built-in plan subagent_type → Claude Code's built-in Plan agent; both model slugs updated.
  • create-skill → plugin-dev:skill-development.
  • control-ui / control-cli lines replaced with verify / run driver skills.
  • "Cursor's built-in babysit skill" → "the babysit skill".

skills/poteto-mode/playbooks/

  • authoring-a-skill.md: create-skill → plugin-dev:skill-development.
  • autonomous-run.md: "Cursor's /loop command (a built-in, not a pstack skill)" → "Claude Code's loop skill (built-in)".
  • bug-fix.md, feature.md, perf-issue.md: composer-2.5-fast → claude-sonnet-4-6; "control skill" → "driver skill (run for CLIs/TUIs, verify for UIs)".
  • eval.md: agent-transcripts/ + ~/.cursor/projects/*/ → ~/.claude/projects/<encoded-cwd>/*.jsonl.
  • opening-a-pr.md: Task → Agent; "Cursor's built-in babysit skill" → "the babysit skill".
  • prototype.md, runtime-forensics.md, visual-parity.md: "control skill" → "driver skill" with run/verify explicit.

skills/automate-me/SKILL.md

  • Description and body: create-skill (6 places) → plugin-dev:skill-development.
  • AskQuestion (2 places) → AskUserQuestion.
  • .cursor/skills/ / ~/.cursor/skills/ → .claude/skills/ / ~/.claude/skills/.
  • agent-transcripts/ + ~/.cursor/projects/*/ → ~/.claude/projects/<encoded-cwd>/*.jsonl.

skills/reflect/SKILL.md + references/*.md

  • Transcript paths → ~/.claude/projects/<encoded-cwd>/*.jsonl.
  • Task → Agent (in SKILL.md and all three reviewer references).
  • generalPurpose → "general-purpose"; readonly: false + "agent mode" → "pick a subagent_type that retains MCP access".
  • Model slugs updated (composer-2.5-fast → claude-sonnet-4-6; claude-opus-4-8-thinking-xhigh → claude-opus-4-8).
  • create-skill (3 routing rules) → plugin-dev:skill-development.
  • Reference files: .cursor/skills/, ~/.cursor/skills/, ~/.cursor/plugins/ → .claude/..., ~/.claude/....

skills/why/SKILL.md

  • MCP discovery: Cursor environment / mcps/ directory → Claude Code tool list / .mcp.json / claude mcp list.
  • generalPurpose → "general-purpose"; readonly/agent-mode language → "pick a subagent_type that retains MCP access".
  • Model slugs updated.

skills/how/SKILL.md

  • generalPurpose → "general-purpose" (all 4 occurrences).
  • composer-2.5-fast → claude-sonnet-4-6 (replace_all).
  • claude-opus-4-8-thinking-xhigh → claude-opus-4-8 (replace_all for inline; table cell updated separately).
  • Critic model table: GPT slugs → Claude family; added note about bridging to /gsd-review for cross-vendor critique.
  • readonly: true lines dropped from subagent config blocks.

skills/interrogate/SKILL.md

  • Task tool → Agent tool.
  • Reviewer model table: claude-opus-4-8-thinking-xhigh / gpt-5.3-codex-high-fast / gpt-5.5-high-fast / composer-2.5-fast → Claude family variants.
  • generalPurpose → "general-purpose"; readonly: true dropped.
  • Added cross-vendor-bridge note (/gsd-review).

skills/arena/SKILL.md

  • Default 3 runners: GPT/composer slugs → Claude family. Added cross-vendor-bridge note.

skills/architect/SKILL.md

  • Phase B runner slugs: GPT/composer → Claude family. Added cross-vendor-bridge note.

skills/show-me-your-work/SKILL.md

  • Transcript audit path: agent-transcripts/ + ~/.cursor/projects/*/ → ~/.claude/projects/<encoded-cwd>/*.jsonl.

Deliberately not changed

  • claude-opus-4-8 model ID. Already a valid Claude model; no edit needed beyond stripping the Cursor -thinking-xhigh UI suffix. Extended thinking is configured separately, not as a model variant.
  • /loop, /deslop, /babysit slash references. These all resolve in Claude Code now (loop is a built-in skill; deslop and babysit ship in this plugin).
  • run_in_background: true. Claude Code's Agent tool supports this — kept as-is.
  • "currently open files, recent edits, the cursor location" in why/SKILL.md (line 59). "Cursor location" here means editor cursor (caret position), not the IDE; generic phrasing, no edit.
  • poteto-agent subagent ID. Plugin ships this agent; references stay.
  • Cursor's /create-skill writing style guidance referenced indirectly. Pointed at plugin-dev:skill-development which covers the same ground in Claude Code. If you want stricter parity, also install Anthropic's superpowers:writing-skills skill.

Forking note

This port now diverges from upstream pstack content. To track upstream:

# diff against the pinned commit
diff -ru /tmp/pstack-src/pstack/skills/ skills/  # caveats: ignores the babysit/ and deslop/ dirs

If you want a clean re-port (e.g. when upstream releases v0.2.0), the rebuild recipe is:

  1. Copy upstream skills verbatim.
  2. Re-apply the substitution table above (most of it is mechanical find/replace).
  3. Re-add skills/babysit/, commands/babysit.md, and the cursor-team-kit deslop import.

Provenance