πŸ—ƒοΈResources7
πŸ₯ž

Agentic P-stack

pstack is the skill stack Lauren Tan (poteto) uses to ship at Cursor: one mode skill that routes every non-trivial task through a playbook, a set of workflow skills it calls as steps need them, and 23 one-rule principle skills that ground every decision. Its thesis is β€œif you want to go fast, go deep first” β€” write less code, prove it works, and then parallelize with confidence. It ships as a Cursor plugin, but the skills are plain Markdown. This page is how to run all of it in any project with Claude Code, and a catalog of every skill with a link to its full instructions.

24 skills23 principles23 playbooksv0.15.5 Β· 12d587d Β· 2026-09-23source β†—llms.txt

πŸ€–For agents

Everything on this page is also served as plain Markdown at /ai/agentic-pstack/llms.txt β€” install steps, the adapter, and every skill with its raw SKILL.md URL and when to use it. Paste this into Claude Code in any project:

prompt for Claude Code
Fetch https://www.masao.site/ai/agentic-pstack/llms.txt and install pstack for Claude Code exactly as it describes: run the install steps, add the adapter block to ~/.claude/CLAUDE.md, then confirm /poteto-mode, /how and /interrogate are available.

🧭How pstack works

You rarely call the other skills yourself. You give /poteto-mode a goal and a way to check it, and the playbook supplies the rigor you didn’t type: reproduce before fixing, name the data shape before implementing, pin behavior before restructuring, profile before optimizing.

  1. 1

    You state a goal and a check

    In your own words, with what done means: /poteto-mode users get two notifications after a retry. repro first, then fix and verify.

  2. 2

    poteto-mode picks a playbook

    It reads its principles index, matches the request to one of 23 playbooks, and copies that playbook's steps verbatim into the todo list. A skipped step stays visible as skip: <reason>.

  3. 3

    Steps call the other skills

    Nontrivial change β†’ how. Code crossing a function boundary β†’ architect. Contested design β†’ interrogate. Any prose β†’ unslop. Before review β†’ no-comments. Parallel work β†’ swarm or arena, spawning poteto-agent subagents.

  4. 4

    It proves the result

    principle-prove-it-works: run the feature, read the real value, inspect the diff. With create-verification-skill the agent can drive your actual app.

  5. 5

    It replies with evidence

    Short declarative sentences, each claim marked measured, inferred or guess, the principles that shaped each decision named, and a PR opened via the Opening a PR playbook.

πŸ“¦Install in Claude Code

Claude Code discovers skills in ~/.claude/skills/ (every project) or .claude/skills/ (one repo, committed for the team), and subagents in the matching agents/ directory. Nested playbooks/, references/ and scripts/ folders come along unchanged. Three things need care; the script handles the first two and the adapter the third.

  • Every skill is user-only. pstack sets disable-model-invocation: true on all of them. Claude Code honors it: only you can run the skill, so poteto-mode could not invoke /how or /interrogate itself. The script removes the flag from the skills poteto-mode routes to and leaves it on the rest.
  • Two names aren't slash-safe. A skill's name field wins over its folder name, and Poteto Mode has a space. The script renames it to poteto-mode. Make Bot UI drives Cursor's Grok Bot and is dropped, as is setup-pstack, which writes a Cursor rule.
  • The skills speak Cursor. They name the Task tool, generalPurpose, ~/.cursor/ paths and Grok / GPT model slugs. The adapter block in ~/.claude/CLAUDE.md β€” always loaded β€” translates each one and supplies the role β†’ model table setup-pstack would have written.
install.sh β€” bash
# 1. Fetch pstack (sparse clone: only the pstack/ directory)
git clone --depth 1 --filter=blob:none --sparse \
  https://github.com/cursor/plugins.git /tmp/cursor-plugins
git -C /tmp/cursor-plugins sparse-checkout set pstack

# 2. Install for every project (use .claude/ in a repo to share with a team)
mkdir -p ~/.claude/skills ~/.claude/agents
cp -R /tmp/cursor-plugins/pstack/skills/* ~/.claude/skills/
cp /tmp/cursor-plugins/pstack/agents/*.md ~/.claude/agents/

# 3. Drop the Cursor-only skills
rm -rf ~/.claude/skills/make-bot-ui ~/.claude/skills/setup-pstack

# 4. Slash command must be kebab-case
sed -i.bak 's/^name: Poteto Mode$/name: poteto-mode/' \
  ~/.claude/skills/poteto-mode/SKILL.md

# 5. Let Claude invoke the skills poteto-mode routes to. Every pstack
#    skill ships disable-model-invocation: true, which in Claude Code
#    means only YOU can run it β€” poteto-mode could not call /how.
for s in how why teach architect arena swarm interrogate blast-radius \
         tdd typescript-best-practices no-comments unslop \
         technical-writing figure-it-out show-me-your-work; do
  sed -i.bak '/^disable-model-invocation: true$/d' \
    ~/.claude/skills/$s/SKILL.md
done
find ~/.claude/skills -name 'SKILL.md.bak' -delete

# 6. Paste the adapter block below into ~/.claude/CLAUDE.md
~/.claude/CLAUDE.md β€” append
## pstack (Cursor skills running in Claude Code)

pstack skills in ~/.claude/skills/ were written for Cursor. Translate:

- "Task tool" β†’ the Agent tool. subagent_type "generalPurpose" β†’ "general-purpose".
- "AskQuestion" β†’ AskUserQuestion. "create-skill" β†’ edit SKILL.md directly.
- ~/.cursor/projects/ β†’ ~/.claude/projects/. .cursor/skills/ β†’ .claude/skills/.
- /deslop β†’ /simplify. control-ui β†’ Playwright MCP. control-cli β†’ Bash.
- Principles (principle-*) are read, not invoked: ~/.claude/skills/<name>/SKILL.md.
- Where a skill says to read ~/.cursor/rules/pstack-models.mdc, use this table.
  A value of "inherit" means omit model. Panels spawn one subagent per entry.

feature, refactoring: sonnet
bug-fix: sonnet
perf-issue: sonnet
hillclimb: sonnet
judgment and prose: opus
hardest tasks: opus
how explorer: sonnet
how explainer: opus
why investigators: sonnet
why synthesizer: opus
reflect tooling: sonnet
reflect judgment, divergent, synthesizer: opus
arena runners: opus, sonnet, fable
arena cross-judge pool: opus, sonnet, fable
swarm workers: sonnet
architect runners: opus, sonnet, fable
interrogate reviewers: opus, sonnet, fable

What you give up. pstack’s review panels get their signal from model diversity β€” Claude, GPT and Grok disagreeing about the same diff. Claude Code runs Claude models only, so interrogate, arena and architect panels become Fable / Opus / Sonnet. Findings still come from independent contexts, but treat two-reviewer consensus as weaker evidence than it is in Cursor.

Cursor β†’ Claude Code

In pstack (Cursor)In Claude Code
/add-plugin pstackCopy skills/ and agents/ into ~/.claude/ (install script below)
~/.cursor/rules/pstack-models.mdc (always-applied rule)A pstack section in ~/.claude/CLAUDE.md (always loaded)
Task toolAgent tool
subagent_type: generalPurposesubagent_type: general-purpose
model: grok-… / gpt-… / claude-…-maxmodel: fable | opus | sonnet | haiku (Claude models only)
AskQuestionAskUserQuestion
~/.cursor/projects/ (transcripts)~/.claude/projects/<project>/*.jsonl
.cursor/skills/verify-<app>/.claude/skills/verify-<app>/
create-skill (Cursor built-in)Edit SKILL.md directly, or the skill-creator skill
/deslop (cursor-team-kit)/simplify, then /code-review
control-ui (cursor-team-kit)Playwright MCP (browser_navigate, browser_click, …)
control-cli (cursor-team-kit)Bash, or a PTY via expect/tmux
/loop (Cursor built-in)/loop (Claude Code built-in)
mode: true (sticky mode)Not supported β€” re-invoke /poteto-mode or say "stay in poteto-mode"
Isolated worktree per candidateAgent tool isolation: "worktree"

🧰Skills

All 24 workflow skills, grouped by the stage of work they serve. Each name links to its SKILL.md. The tag says how it runs under Claude Code: works as-is unchanged, adapter once the adapter is in CLAUDE.md, replaced by the adapter, skip Cursor-only.

Entry

The default entry point for any non-trivial task. Matches the request to one of 23 playbooks, copies its steps into the todo list, and routes to the other skills as steps need them.

/poteto-mode this pr has a subtle bug where the scroll drifts every 750ms even when idle. repro first, then fix and verify.

Claude Code: Rename name: Poteto Mode to poteto-mode. Not sticky in Claude Code (Cursor's mode: true is ignored), so re-invoke it or say "stay in poteto-mode". /deslop β†’ /simplify; control-ui β†’ Playwright MCP; control-cli β†’ Bash.

/figure-it-outworks as-is

No bundled playbook fits, or the work is a large migration or something you will review after stepping away. Designs a bespoke, auditable playbook and logs decisions.

/poteto-mode i'm stepping away. migrate every caller from the synchronous store to the new async one, keeping behavior identical.

Understand

/howadapter

You want a walkthrough of how a subsystem works, or where something should live and which layer owns it.

/how do we cancel runs? do we have an n+1 when we look up every run to cancel?

Claude Code: Explorer and explainer subagents: model roles via the adapter.

/whyadapter

You want to know why something was built this way. Queries every evidence source your MCPs expose (source control, tracker, docs, chat, observability, errors, analytics) in parallel and cites them.

/why is this feature flag not on yet?

Claude Code: Uses whatever MCP servers Claude Code has connected; model roles via the adapter.

/teachworks as-is

You want to actually understand a change or subsystem, not a summary. Runs how + why and builds one plain explanation diagram by diagram.

/teach me how this PR changes retries. convince me it fixes the cause and not the symptom.
/recalladapter

You are starting or resuming work and want your recent context on a topic rebuilt from your chat history and the shared record.

/recall catch me up on the export work from last week

Claude Code: Chat history lives in ~/.claude/projects/<project>/*.jsonl, not ~/.cursor/projects/.

Design

/architectadapter

You are about to write code that crosses a function boundary and want the caller's usage, types and module shape settled first.

/architect with checkpoint. stop and show me before implementing.

Claude Code: Runner panel via the adapter's architect runners line.

/arenaadapter

You want N parallel attempts at the same thing, a judge on a different model, then the best parts grafted onto one base.

/arena this, 5 candidates. the cache key format is expensive to change later.

Claude Code: Candidates run as Agent-tool subagents, each with isolation: "worktree". Model diversity is Claude-only (Fable / Opus / Sonnet).

/swarmadapter

You want N parallel workers across different slices, coverage lanes or race arms, then one aggregated PASS / ISSUES / BLOCKED report.

/swarm check every package under packages/ against its check.sh. one worker per package. one report.

Claude Code: Workers are Agent-tool subagents; swarm workers via the adapter.

You have a diff and want several models to try to break it, including a strict code-quality lens. Findings two models raise independently are the high-signal ones.

/interrogate review this pr.

Claude Code: Reviewer panel via the adapter. Without Grok/GPT the panel is one model family, so consensus is weaker evidence than in Cursor.

/blast-radiusworks as-is

A small-looking change you don't trust. Finds what else it could break and proves the one fact it's safe because of by running code.

Build & clean

/tddworks as-is

Fixing a bug with a cheap local test path. Failing test first, then the fix. Skips itself when a test would need a heavy harness.

/tdd implement

Reading or editing .ts / .tsx. Grounds type-system discipline in syntax: discriminated unions, unknown at boundaries, exhaustive variants.

Claude Code: Its paths: ["**/*.ts", "**/*.tsx"] frontmatter is honored by Claude Code.

/no-commentsworks as-is

Before review. Spawns the Comment Sicko agent, fixes accepted findings, and offers code encodings for constraints comments claimed.

Claude Code: Needs agents/comment-sicko.md in ~/.claude/agents/.

/unslopworks as-is

Cleaning up any writing: removes AI tells. Applies to every prose surface, including the agent's own reply.

/unslop the readme changes, no emdashes

Docs, RFCs, readmes, PR descriptions, commit messages. Layered standard: DiΓ‘taxis, Google developer style, STE, Global English.

/broworks as-is

You want the last message restated in plain human language, no jargon.

Verify

Your project has no scripted way to prove app behavior. Generates a project-local verify skill (Launch, Doctor, Drive, Evidence, Cleanup) plus a feature map, and proves it once end to end.

/create-verification-skill

Claude Code: Write to .claude/skills/verify-<app>/, not .cursor/skills/.

The verify skill's feature map has drifted from the app. One source reader per feature plus one live pass; ends clean, changed (one PR) or blocked.

Claude Code: Reads .claude/skills/verify-<app>/.

Long runs

Long, unattended or multi-phase work. Keeps a TSV decision trail (what, why, evidence, result) you can audit in the morning.

/show-me-your-work keep a decision trail i can review when i'm back.

Meta

/reflectadapter

A long task landed and you want the recipe captured. Three parallel reviewers read the transcript and route each learning to a concrete skill edit.

/reflect that took too long. capture what we learned so the next run doesn't repeat it.

Claude Code: Transcript in ~/.claude/projects/; skills in ~/.claude/skills/; create-skill β†’ edit SKILL.md directly or use skill-creator.

You want your own <you>-mode skill drafted from how you have actually worked, routing through pstack underneath.

/automate-me

Claude Code: Mines ~/.claude/projects/*/*.jsonl; writes to ~/.claude/skills/; AskQuestion β†’ AskUserQuestion.

Picks which model each role uses and at what reasoning budget, written as an always-applied Cursor rule.

Claude Code: Writes ~/.cursor/rules/pstack-models.mdc from Cursor's model list. Use the adapter's role table instead.

A page or dashboard whose buttons wake a Grok Bot over a webhook, including the sender-key handoff and Tailscale.

Claude Code: Specific to Cursor's Grok Bot webhooks.

πŸ“Principles

One rule per skill. They are read, not run: poteto-mode keeps an index, opens the leaf SKILL.md for any principle it applies, and names in its reply which principle changed which decision. You can steer an agent mid-task by naming one β€” β€œlaziness protocol, this diff is too big”. All work unchanged in Claude Code.

PrincipleGroupRule
laziness-protocolcoreBias toward deletion and the smallest change that solves the problem.
foundational-thinkingcoreBefore writing logic, get the core types and data structures right so downstream code becomes obvious; sequence scaffold before feature; ask what concurrent actors share.
redesign-from-first-principlescoreRedesign as if the new requirement had been a foundational assumption from day one, instead of bolting it on.
attack-the-premisecoreWhen two fixes sharing one premise fail the same gate, take a census of who holds the imbalance and question the premise instead of writing a third fix.
subtract-before-you-addcoreRemove dead code, redundant validators and stub references first, then build on the simpler base.
minimize-reader-loadcoreCount layers between question and answer and hidden state in the reader's head; collapse one-caller wrappers and shrink mutable scope.
outcome-oriented-executioncoreIn planned rewrites and migrations, converge on the target architecture; don't preserve smooth intermediate states with throwaway compatibility code.
experience-firstcoreChoose user delight over implementation convenience; ship fewer polished features over more rough ones.
exhaust-the-design-spacecoreFor a novel interaction or architecture with no precedent, build 2–3 competing prototypes and compare side by side before committing.
build-the-levercoreFor any non-trivial work, build the tool that does or proves it (codemod, script, generator, skill) instead of working by hand. The tool is what a reviewer reruns.
model-the-domainarchitectureEncode the domain in a structure (state machine, typed model, registry, reducer) instead of scattered conditionals.
boundary-disciplinearchitectureConcentrate guards at system boundaries (CLI, config, network, external APIs); trust internal types and keep business logic in pure functions.
type-system-disciplinearchitectureMake illegal states unrepresentable, brand semantic primitives, parse external data at boundaries, never lie to the compiler, exhaust variants, derive from authoritative schemas.
make-operations-idempotentarchitectureCommands, lifecycle steps and loops converge to the same end state regardless of partial prior runs, crashes and retries.
migrate-callers-then-delete-legacy-apisarchitectureWhen a new internal API replaces an old one, migrate every caller and delete the old API in the same wave.
separate-before-serializing-shared-statearchitectureWhen concurrent actors might write the same file, branch, key or object, eliminate the sharing first; serialize only when one shared writer is a real invariant.
prove-it-worksverificationBefore declaring done, verify against the real artifact (run the feature, read the actual value, inspect the diff), not a proxy, self-report or "it compiles".
fix-root-causesverificationReproduce first, ask why until you reach the root cause and fix it there; resist nil-check guards that silence crashes.
sequence-verifiable-unitsverificationBreak multi-step work into small units that each end in a verifiable state, check each before the next, and order commits so the sequence proves itself.
test-behavior-not-implementationverificationCall the code the way users do and assert what they observe against a literal. If the test still passes when every import returns undefined, rewrite or delete it.
guard-the-context-windowdelegationRoute bulk (large outputs, long files, fan-out) to subagents; keep summaries in the main thread, not raw payloads.
never-block-on-the-humandelegationOn reversible work, proceed, present the result and let the human course-correct; reserve confirmation for irreversible actions.
encode-lessons-in-structuremetaWhen you write the same instruction twice, encode it as a lint, metadata flag, runtime check or script instead of more text.

πŸ“‹Playbooks

The checklists poteto-mode copies into the todo list. They live in skills/poteto-mode/playbooks/ and travel with the skill. You don’t name them; describe the task and the router picks.

PlaybookFor
InvestigationA read-only question: how does X work, why was Y built this way, are we sure.
Bug fixReproduce a defect, root-cause it, and fix with runtime evidence.
Perf issueTrace a measured slowness and improve it against a baseline.
HillclimbSustained improvement of one metric against a target: hypothesis loop, before/after measurement, one commit per accepted win.
Runtime forensicsDiagnose a live symptom (leak, idle-CPU spin, glitch) from instrumentation.
Trace forensicsDiagnose a captured profile (cpuprofile, trace, spindump, heap snapshot).
FeatureNew or changed behavior, built from a named data shape.
RefactoringA behavior-preserving change to structure or shape.
PrototypeA throwaway sketch to settle a design or empirical fork by observing it instead of asking.
Visual parityPixel-exact UI equivalence between two implementations.
Authoring a skillWriting or editing a SKILL.md.
EvalTest, blinded, how a skill or prompt change affects agent behavior.
BabysitDrive a PR or stack to merge-ready: conflicts, review threads, CI.
ShippingIndependently verify a green stack, then land the contiguous verified run bottom-up.
Autonomous runDrive a long task to completion without stopping (pairs with /loop).
OrchestrateA standing, multi-day project for one coordinator: many stacked PRs, fleets of subagents.
Autopilot-fullRun independent PRs to merged, one owner per PR, a root swarm verdict each round.
Autopilot-stackBuild and verify one linear stack for the operator to review and land.
Session pickupResume or take over a prior agent's in-flight work.
Pause safelySuspend in-flight work cleanly so it can be resumed.
Multi-phase planWork that spans phases or stacked PRs.
Worktree cleanupReclaim disk by pruning merged or abandoned worktrees, safety-gated.
Opening a PRSmall ordered commits, conventional title, briefing-style body. Ends every other playbook.

πŸ•Agents & automations

Two subagents ship with the skills. The Benny pack is the hosted triage-and-repro agent from the talk β€” dormant files, not slash skills. In Claude Code, run its skills from a hosted trigger as described in Agentic Engineering.

poteto-agent

The subagent every playbook step spawns. Reads poteto-mode in full, principles index included, before doing anything.

Claude Code: Copy to ~/.claude/agents/; spawn with the Agent tool's subagent_type: "poteto-agent". Cursor's is_background β†’ Claude Code background: true.

Comment Sicko

A read-only comment reviewer that hunts narration, banners and workaround comments. Invoked through /no-comments.

Claude Code: Copy to ~/.claude/agents/.

setup-benny

Configures the triage and repro automations: Slack channel, tracker, repository, routing, control adapter, models, budget.

Claude Code: Cursor Automations only.

triage-issue-reports

One thread-only verdict per Slack report: classify, trace the owning layer, dedupe against the tracker, create a ticket only for a clear new bug.

Claude Code: Run from a GitHub Action or a scheduled agent instead of a Cursor Automation.

reproduce-and-fix-issues

Reproduces a triaged bug twice through the real UI, verifies existing fixes, and opens one bounded draft PR only after before-and-after proof.

Claude Code: Same: hosted trigger + Playwright MCP as the control adapter.

πŸ”Using it day to day

Say the goal, not the ceremony. A prompt needs what is wrong or wanted, what done means, and anything you already know. Short works because the playbook holds the structure β€” once context exists, β€œ/poteto-mode do it” or β€œkeep going until done” is enough. Say β€œnew task” when you switch subjects.

Understand/how do we dedupe notifications? is there an n+1 when we look up subscribers?
Understand/why was the retry limit set to five? does the reason still hold?
Design/architect design the import pipeline before writing any code. i care most about how callers use it.
Build/poteto-mode add a --json flag. text output stays byte-identical. verify both forms.
Refactor/poteto-mode move parsing into one module, zero behavior change. record the current output first and prove it's unchanged after.
Perf/poteto-mode startup takes 1.8s on this fixture. trace it, fix the measured cause, show me before and after.
Review/interrogate review this pr.
Ship/poteto-mode open the pr. small ordered commits, evidence in the description.
Overnight/poteto-mode im going to bed. migrate every caller to the new parser in a fresh worktree. done means zero old callers, all fixtures pass, old api deleted. keep a decision log. /loop until done. if truly stuck, stop and write up why.
Learn/reflect that took too long. capture what we learned so the next run doesn't repeat it.

Make it yours. poteto-mode is one person’s style. /automate-me reads your own Claude Code transcripts and drafts a <you>-mode skill that routes through pstack the way you actually work. Change skills the way you change code: through the Eval playbook, blinded, before promoting them.