A collection of personal coding-agent skills - reusable workflow prompts for Claude Code, OpenAI Codex, and Pi Coding Agent.
- Claude Code CLI, OpenAI Codex CLI, and/or Pi Coding Agent installed
git clone https://github.com/pstaylor-patrick/skills.git
cd skills
./install.shThis installs skills for Claude, Codex, and Pi by default. Use --claude, --codex, or --pi to narrow scope.
It creates symlinks system-wide:
- Claude Code:
~/.claude/commands/{name}.md(file symlinks) - OpenAI Codex:
$CODEX_HOME/skills/{name}/(directory symlinks, defaults to~/.codex/skills/) - Pi Coding Agent:
$PI_HOME/skills/{safe-name}/wrapper skills (defaults to~/.pi/agent/skills/)
Pi skill names are Agent Skills-safe lower-kebab aliases. For example, pst:push installs as /skill:pst-push.
Re-run ./install.sh any time you install a new CLI to pick it up. Restart Codex after installing new skills so it reloads them.
Examples:
./install.sh
./install.sh --claude
./install.sh --codex
./install.sh --piCodex skills are not invoked as slash commands. In Codex, mention the skill name in your prompt, for example: Use pst:push to push this branch and validate the PR.
./install.sh --uninstallOr use the standalone wrapper:
./uninstall.shDefaults to removing Claude, Codex, and Pi installs. Use provider flags to narrow scope:
./install.sh --uninstall --claude
./install.sh --uninstall --codex
./install.sh --uninstall --pi
./uninstall.sh --claude
./uninstall.sh --codex
./uninstall.sh --piRemoves symlinks from ~/.claude/commands/ and/or $CODEX_HOME/skills/, plus Pi wrapper directories from $PI_HOME/skills/.
Activate Patrick's engineering doctrine as hard, standing rules for the rest of the session, portable to whatever repo or area you're operating in. Once invoked, every subsequent request is governed by: eager background-agent swarms doing the heavy lifting in isolated git worktrees (foreground stays clean), continuous tidying (prompts before pruning orphaned worktrees), PR + admin-bypass squash merge only on green CI, root-cause CI fixes over band-aids, at least one mandatory adversarial review round (with fixes implemented) before merge, and a local-Kubernetes quality gate: apps configured in the local k3s private cloud must deploy and pass adversarial E2E validation locally before any remote (e.g. AWS) promotion. Also enforces the anonymized GitHub no-reply git identity on every commit. The umbrella mode that composes the other /pst:* skills (auto, ready, sweep, adversarial-review, code-review, rebase) as its concrete tools.
/pst # turn the doctrine on for the rest of this session, then keep working
Plan a subject, hand off an adversarial review of that plan to another model, and start building in parallel. Writes three artifacts to a per-subject working dir and opens them in VS Code: a phased PLAN.md (scope, design options + recommendation, risks, acceptance criteria), a self-contained ADVERSARIAL-REVIEW-PROMPT.md to paste into Codex (it attacks the plan, edits it inline, and emits a rationale-bearing changelog), and a CHANGELOG.md stub for the reviewer to fill. Then it eagerly implements the plan on a dedicated draft PR in an isolated worktree -- foundations and low-churn pieces first -- without waiting for the review to come back. Re-run it with the returned changelog to fold the fixes into both the plan and the in-flight implementation. The mechanical, error-prone steps (slug/path/branch derivation, idempotent scaffold writes, worktree + draft-PR creation, changelog parsing) are handled by a tested helper, scripts/adversarial_review.py -- the model only does the creative work (plan body, prompt context, implementation), mirroring /plan-io's builder split.
/pst:adversarial-review "a rate limiter for the public API"
/pst:adversarial-review "migrate auth to Better Auth" --no-impl
/pst:adversarial-review "redesign the billing webhook handler" --impl-now
/pst:adversarial-review <changelog-path-or-paste> # second pass: apply returned changelog
High-autonomy orchestrator that turns rough, unstructured prompts into review-ready pull requests. Asks up to 3 clarifying questions, then runs autonomously through implementation, slop cleanup, quality gates, preflight code review, push/PR creation, QA, and a final autofix review pass. Opens the finished PR in your browser.
/pst:auto "add an org invitation flow"
/pst:auto "fix the broken dashboard filtering and get this branch ready for review"
/pst:auto "take this half-finished work and make the PR fully review-ready"
Assess the current state of your work and get one opinionated recommendation for the best next step. Reads git state, GitHub PR status, and project context to tell you THE answer, not a menu of options.
/pst:next
/pst:next --verbose
/pst:next --why
Snapshot what every active agent and initiative in this session is focused on right now. Returns a 320-char executive summary of the current goal, followed by a flat bullet list (one per agent/initiative, max 120 chars each). Present-tense only -- no recommendations.
/pst:now
Roadmap horizon view. Runs /pst:now and /pst:next in parallel, then uses an Opus background agent (high effort) to reason about second-order consequences and surface the 3-5 stages that come after the immediate next step. Returns a 320-char exec summary plus 1-5 opinionated bullets (160 chars max each).
/pst:later
Bring one or many existing open PRs to merge-ready state in a single invocation.
Single PR: rebases onto the PR's base branch, waits for CI and auto-fixes failures (up to 3 attempts per failing check, via isolated sub-agents), then loops pst:resolve-threads + pst:code-review --sweep until threads are clean and no criticals remain. Re-verifies CI one more time, refreshes the PR title and description to describe what actually shipped, auto-validates the test-plan checkboxes it can validate (posting a single validation comment and ticking the passing items), then opens the PR in the browser. Cross-repo capable (clones to a temp dir if the PR lives in a different repo than cwd); resumable via a progress file if interrupted.
Multiple PRs: pass two or more URLs and the skill dispatches each to its own background agent running the same pipeline in its own isolated git worktree. URLs spanning several repos are grouped by repo so one temp clone is shared across siblings in the same foreign repo (one temp clone per foreign repo, one worktree per PR inside). Respects --max-parallel (default 4) to avoid GitHub API throttling. One PR halting with a residual does not affect its siblings; the final matrix reports READY / BLOCKED / SKIPPED / ERROR per PR.
# Single PR
/pst:ready https://github.com/owner/repo/pull/42
/pst:ready https://github.com/owner/repo/pull/42 --dry-run
/pst:ready https://github.com/owner/repo/pull/42 --no-open
# Parallel batch, same repo
/pst:ready https://github.com/owner/repo/pull/42 https://github.com/owner/repo/pull/51
# Parallel batch across repos (one temp clone per foreign repo, worktrees per PR)
/pst:ready \
https://github.com/owner-a/repo-x/pull/42 \
https://github.com/owner-a/repo-x/pull/51 \
https://github.com/owner-b/repo-y/pull/7
# Tuning
/pst:ready <url1> <url2> <url3> --max-parallel 2
/pst:ready <url1> <url2> --open-all # open BLOCKED PRs too, not just READY
/pst:ready <url> --max-ci-attempts 5 --max-review-rounds 3
Code review with worktree-isolated fix verification. Every finding is validated by applying the suggested fix in an isolated worktree and running quality gates - findings that break the build are dropped. Supports GitHub PR reviews, local-only output, autonomous auto-fix, and multi-round sweep mode.
/pst:code-review 42
/pst:code-review https://github.com/owner/repo/pull/42
/pst:code-review --local
/pst:code-review --autofix
/pst:code-review --sweep
Generate a reusable demo/QA runbook from the current feature branch. Analyzes code changes, commits, and PR context to create a step-by-step walkthrough saved as a skill in the target repo's .agents/skills/ directory. Usable for both QA testing and stakeholder Loom demos.
/pst:demo
/pst:demo --update
/pst:demo --dry-run
Auto-commit, push the current branch, ensure a PR exists against the default branch, and refresh the PR title and description to reflect all changes on the branch. Then autonomously validate every unchecked test-plan checkbox via terminal commands (build, lint, typecheck, test) and code-level checks -- no browser automation. Posts a validation comment and checks off passing items.
/pst:push
/pst:push --dry-run
Rebase the current branch onto a base branch with automatic conflict resolution, Drizzle migration cleanup, and force-push. Infers the base branch from the current PR or falls back to the repo default. Automatically removes all Drizzle database migrations from the feature branch (you regenerate them manually via Drizzle Kit after). Asks for user input only when a conflict is genuinely ambiguous.
Includes a Pre-Push Safety Gate (Phase 6.5) that logs any theirs-unique hunks dropped by --ours auto-resolves and runs a post-rebase typecheck against a pre-rebase baseline. If the rebase introduces new typecheck errors, the push is blocked until you acknowledge, reset, or override with --yolo.
/pst:rebase
/pst:rebase main
/pst:rebase develop --no-push
/pst:rebase --dry-run
/pst:rebase --skip-typecheck # baseline/gate skipped; content-drop log still runs
/pst:rebase --yolo # downgrades gate block to a loud warning
Autonomous QA testing that synthesizes test plans from PR context and code diffs, then executes via browser automation (Playwright MCP or CDP). Auto-judges pass/fail and posts evidence to the PR. Use --guided for interactive human-driven testing.
/pst:qa 42
/pst:qa https://github.com/owner/repo/pull/42
/pst:qa --guided
/pst:qa --post-merge
Address every unresolved conversation on a GitHub PR. Fetches all review threads, top-level comments, and review summaries, then classifies each (filtering out bots, CI previews, and redundant review summaries). For actionable feedback: tests a fix in an isolated worktree, and if it passes quality gates, squash-merges it into the branch and replies confirming. For inapplicable suggestions: replies with reasoning. Resolves all threads when done. Top-level comment replies include a blockquote of the original for clarity.
/pst:resolve-threads
/pst:resolve-threads 42
/pst:resolve-threads https://github.com/owner/repo/pull/42
/pst:resolve-threads --dry-run
A personal credential drawer - somewhere to stuff API keys and tokens instead of leaving them in plaintext on the filesystem. By default secrets land in 1Password (via the op CLI); an AWS KMS+SSM SecureString backend stays available behind --aws or a config profile. Only a local pointer registry (names + where the value lives, never values) sits on disk, so list needs no unlock. Which backend a set uses is config-driven - a global catalog of your 1Password accounts/vaults plus per-project overlays produces a suggested destination, and every write confirms that destination before the value is captured through a localhost-only masked browser form, so values never enter the chat transcript or argv. Not for production/service-principal secrets - those belong in their own systems with service-role access.
The two backends trade off deliberately: 1Password is gated by the desktop app / CLI unlock state (great for day-to-day personal keys); --aws adds a live MFA session plus a KMS key policy that denies kms:Decrypt without aws:MultiFactorAuthPresent (so even leaked non-MFA credentials cannot decrypt) - use it for anything that needs the harder MFA gate.
/pst:secrets # status: doctor + list pointers
/pst:secrets set "my Linear API key" # resolve → CONFIRM destination → browser capture → 1Password
/pst:secrets set "..." --aws # same flow, AWS KMS+SSM backend
/pst:secrets get LINEAR_API_KEY # one value to stdout (capture in a var)
/pst:secrets export OPENAI_API_KEY ANTHROPIC_API_KEY
/pst:secrets list # pointers grouped by drawer (no values, no unlock)
/pst:secrets rm OLD_KEY # delete (backend item + local pointer)
/pst:secrets session start --all # materialize for 12h → autonomous, unlock-free reads
/pst:secrets session status / end # inspect / shred the session cache
/pst:secrets config # first-run setup / --refresh / doctor / --project overlay
/pst:secrets provision # AWS only: one-time KMS + MFA-deny policy setup per account
1Password needs the op CLI 2.x with desktop-app integration enabled; the optional AWS backend needs the aws CLI and an MFA session (e.g. via an /aws-mfa-style flow), configured per account in the catalog or via PST_SECRETS_PROFILE / _REGION / _KMS_KEY / _PREFIX.
Session mode (autonomy): when you'll be away from the machine or want to give the agent more rope for a single session, session start fetches the chosen secrets once and materializes them to a private, 0600, time-boxed cache under $TMPDIR; get/export then serve from it without re-prompting for TouchID/MFA. It is deliberately the one path that puts plaintext on disk, defended by a short lifetime rather than encryption: a TTL (default 12h), a detached watchdog that shreds at the deadline, a Claude Code SessionEnd hook (session install-hook), and session end on demand. Use --fresh on a get/export to bypass it.
Extract business logic from React/Next.js components into tested custom hooks. Uses Vercel react-best-practices (64+ rules) as the industry baseline, layered with opinionated architecture preferences: hooks in *.ts files, comprehensive vitest coverage, zero eslint-disable, named exports only.
/pst:react-refactor src/components/Dashboard.tsx
/pst:react-refactor --all
/pst:react-refactor --branch feature/new-dashboard
/pst:react-refactor --dry-run
Vercel react-best-practices (64+ industry rules) is installed automatically by ./install.sh via the skills CLI. The skill degrades gracefully if the external dependency is missing.
Scan for and remove common AI-generated slop from your branch changes (default) or the entire repo (--repo). Detects em dashes, excessive documentation, disabled quality gates, band-aid exclusions, over-complicated abstractions, dead code, error theater, and type safety escapes. Interactive by default - presents findings and asks before fixing.
/pst:slop
/pst:slop --repo
/pst:slop --dry-run
/pst:slop --auto
Tells Claude to pick the best approach instead of presenting options. Evaluates simplicity, reliability, scalability, maintainability, and end-user experience.
/decide-for-me
Launches an in-depth interview to build a complete implementation spec. Covers technical details, UI/UX, concerns, tradeoffs, and scope - asks non-obvious questions until the spec is ready.
/spec-gen
/spec-gen "Add org invitation flow"
Runs build, lint, typecheck, test, and test:coverage in a loop - fixing failures as it goes until all checks pass cleanly.
/validate-quality-gates