councilUse at a genuine fork, a choice between viable options with materially different trade-offs or one costly to reverse, to get independent picks: 2–4 fresh subagents get one neutral brief (the question and options, the author's own words and the documents they name, read-only code) and each returns a
grillingGrill the user relentlessly about a plan, decision, or idea. Use when the user wants to stress-test their thinking, or uses any 'grill' trigger phrases.
light-buildLow-ceremony autonomous build: work on the current feature branch or a new isolated worktree, write a task list, implement each task itself, and run a capped review by every core lens plus the optional lenses the change matches to a single review-ready branch, plus a draft PR when the repo has CI or
principle-attack-the-premiseApply when two or more fixes that share one premise have failed the same gate. Write the premise down and test it directly before you write another fix that assumes it.
principle-boundary-disciplineApply when wiring validation, error handling, or framework adapters. Concentrate guards at system boundaries (CLI, config, network, external APIs); trust internal types and keep business logic in pure functions.
principle-build-the-leverApply to any non-trivial work, not just bulk work: edits, migrations, analyses, checks. Build the tool that does it or proves it (codemod, script, generator, or a skill your subagents follow) instead of working by hand. The tool is the artifact a reviewer can rerun.
principle-encode-lessons-in-structureApply when you catch yourself writing the same instruction a second time, or notice a recurring correction. Encode the rule as a lint, metadata flag, runtime check, or script instead of more text.
principle-exhaust-the-design-spaceApply when facing a novel UI interaction or architectural decision with no precedent in the codebase. Build 2-3 competing prototypes and compare side by side before committing.
principle-experience-firstApply when product, UX, or feature-scope tradeoffs come up. Choose user delight over implementation convenience; ship fewer polished features over more rough ones.
principle-explain-the-numberApply before you measure, and before you trust, report, or act on a number you measured: a speedup, a regression, a throughput, a latency, or an eval result. Find what limits it, and rule out that it measured something other than the work you think.
principle-fix-root-causesApply when debugging. Trace each symptom back to the first place the system went wrong and fix it there. A guard is a fix only when the state it handles is legitimate.
principle-foundational-thinkingApply before writing logic: choosing core types and data structures, sequencing scaffold-vs-feature work, asking what concurrent actors share. Get the data structures right so downstream code becomes obvious.
principle-guard-the-context-windowApply when context is filling up: large outputs, long files, repeated reads, fan-out planning. Route bulk to subagents; keep summaries in the main thread, not raw payloads.
principle-laziness-protocolApply when refactoring, evaluating diff size, or tempted to add abstractions, layers, or signal threading. Bias toward deletion and the smallest change that solves the problem.
principle-make-operations-idempotentApply when designing commands, lifecycle steps, or processing loops that run amid crashes, restarts, and retries. Converge to the same end state regardless of partial prior runs.
principle-migrate-callers-then-delete-legacy-apisApply when introducing a new internal API while old callers still exist. Migrate callers and delete the old API in the same wave instead of preserving compatibility layers.
principle-minimize-reader-loadApply when reviewing or shaping code that's hard to trace. Count layers between question and answer, and hidden state in the reader's head; collapse one-caller wrappers and shrink mutable scope.
principle-model-the-domainApply when writing stateful logic, or when code branches a lot or repeats a shape assumption across files.
principle-never-block-on-the-humanApply when tempted to ask 'should I do X?' on reversible work.
principle-outcome-oriented-executionApply during planned rewrites and migrations with explicit phase boundaries. Converge on the target architecture; don't preserve smooth intermediate states with throwaway compatibility code.
principle-prove-it-worksApply after completing a task, before 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.'
principle-redesign-from-first-principlesApply when integrating a new requirement into an existing design.
principle-separate-before-serializing-shared-stateApply when concurrent actors might write to the same file, branch, key, or state object. Eliminate the sharing first; serialize structurally only when one shared writer is a real invariant.
principle-sequence-verifiable-unitsApply to multi-step work (sweeps, migrations, runs of similar edits) and to how you stack commits and PRs. Break work into small units that each end in a verifiable state, check each before the next, and order delivery so the sequence proves itself to a reviewer.
principle-subtract-before-you-addApply when sequencing an addition, refactor, or rewrite. Remove dead code, redundant validators, and stub references first, then build on the simpler base.
principle-test-behavior-not-implementationApply when you write, change, or keep a test. Assert what the code's users can observe, so that the test fails when that behavior breaks and keeps passing when only the internals change.
principle-type-system-disciplineApply when designing types, reviewing a function signature, or writing code in any statically-typed language. Make illegal states unrepresentable, brand semantic primitives, parse external data at boundaries, exhaust variants, derive from authoritative schemas.
principlesUse to find and read, by name, one of pstack's 24 engineering principles (such as fix-root-causes or prove-it-works) or its unslop writing method, bundled in this plugin. Lists each name with when it applies and its file.
reviewUse to review a document (a spec, PRD, design or plan) against its author's own words with independent reviewer agents, fixing it yourself until every reviewer passes or the round cap. Works without a git repo, with this plugin's reviewers or a folder of your own. Pass doc=<path> requirement=<text o
to-ticketsBreak a plan, spec, or the current conversation into a set of tracer-bullet tickets, each declaring its blocking edges, published to the configured tracker (edges as text in one file per ticket locally, or native blocking links on a real tracker).
unslopCut AI tells from any writing.