paad
Health Pass
- License — License: MIT
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Community trust — 105 GitHub stars
Code Pass
- Code scan — Scanned 12 files during light audit, no dangerous patterns found
Permissions Pass
- Permissions — No dangerous permissions requested
No AI report is available for this listing yet.
The practices that made software work didn't stop working. They stopped keeping up. PAAD brings them back at AI speed.
PAAD — Engineering-driven AI, not AI-driven engineering
PAAD (rhymes with "pad") is a set of skills for AI coding assistants. It
reviews what the AI is about to work on — the spec, the plan, the architecture, the
code — while you can still change it. That's Pushback, Alignment,
Architecture, plus the Discipline to actually run them.
Quick start
In Claude Code:
/plugin marketplace add Ovid/paad
And then:
/plugin install paad@paad
Pick a scope when the details panel opens, then /reload-plugins. Run/paad-help to see everything.
Not using Claude Code? One command installs PAAD into 70+ other agents —
Cursor, Codex, GitHub Copilot, Gemini CLI, Cline, Zed, Warp, Amp, OpenCode:
npx skills@latest add Ovid/paad
See Installation for the details, including the experimental
Pi package.
The skills
| Skill | What it does |
|---|---|
/pushback [document] |
Argues with your spec before anyone builds it |
/alignment [files...] |
Checks that the plan and the spec say the same thing |
/agentic-review [base-branch] [path] |
Six specialists review your branch before merge |
/agentic-architecture [path...] |
Five specialists find structural debt while it's cheap |
/fix-architecture [report] |
Works through those findings one at a time, test-first |
/agentic-a11y [path] |
Accessibility audit against WCAG 2.2 AA, by disability category |
/vibe [task] |
Small fixes, TDD guardrails still on |
/makefile |
Creates or updates a project Makefile |
/paad-help [skill-name] |
Lists the skills, or explains one |
Experimental skills
| Skill | What it does |
|---|---|
/agentic-dedup [scope] |
Finds duplicated meaning, not duplicated text — experimental |
/agentic-owasp [scope] |
Reviews code against the OWASP Top 10:2025 — experimental |
/rethink [topic] |
Checks whether the premises under a recommendation hold — experimental |
/test-roadmap |
Builds a test suite that catches real regressions — experimental |
/handoff [save|resume] |
Hands this session's work to a fresh one, in writing — experimental |
Full descriptions are further down. The rest of this page is why any of it is
worth your tokens.
"AI slop" is technical debt with better marketing
We have been accumulating technical debt since long before AI showed up, and
we already know how to handle it: review the requirements, review the plan,
review the architecture, review the code. Every one of those is an old,
boring, well-understood engineering skill.
What AI changed is not the nature of the debt. It's the speed it arrives at.
- Vibe coding piles up debt fast.
- Spec-driven development piles it up slowly.
- Neither piles up zero.
That's the problem and it isn't new. It's just faster than the review
habits most teams have, so the debt lands before anyone looks at it.
The model reads every line of your repository in seconds. It has never once
heard about the outage that put that validation check there.
PAAD is how you stay on top of it — the same review layers your team
already believes in, applied at the speed the assistant is working.
The four letters
Four points where the AI is about to decide something for you:
| Area | What it means |
|---|---|
| Pushback | Argues with your spec before anyone builds it |
| Alignment | Checks that the plan and the spec actually say the same thing |
| Architecture | Finds the structural debt while it's still cheap to fix |
| Discipline | Yours, not the tool's — running the first three when the deadline says don't |
The first three are reviews you run. The fourth is the one thing in the list
the assistant will never bring for you.
Your team already runs specs, tests, code review, CI, QA, and incident
response — layers that exist because mistakes are cheap to fix early and
expensive to fix late, and because humans are stochastic. AI is stochastic
too. PAAD's argument isn't that AI needs special safeguards; it's that AI
needs the same safeguards, running fast enough to keep up with it.
It doesn't replace your current AI-assisted development tools; it complements
them. You like Superpowers? Use it
with PAAD.
PAAD supports Claude Code natively, installs into 70+ other agents with onenpx command, and ships as an experimental Pi package. Hand-copying the
pre-converted Kiro/Antigravity/Cursor tree still works and is now
deprecated.
Who's driving
Most organizations adopting AI right now have it backwards. A developer tells
the AI what to do and hopes the AI can take over. The AI is happy to oblige —
it always is — and the developer finds out what it decided when the code
lands.
That's AI-driven engineering: the assistant sets the pace, and the
engineers are downstream of decisions they never saw made.
PAAD replaces it with engineering-driven AI. Same speed, opposite
direction: you see what the AI is about to do while you can still change it,
and you make the calls.
| AI-driven engineering | Engineering-driven AI | |
|---|---|---|
| The spec | Whatever you typed, unchallenged | pushback argues with it before anyone builds it |
| The plan | Assumed to match the spec | alignment checks both directions |
| The code | A green CI run | agentic-review puts six specialists on the PR |
| The structure | Discovered later, expensively | agentic-architecture finds it while it's cheap |
| The decisions | The model's | Yours, on the record |
You stay in the driver's seat. That is the point, and it's also the cost: PAAD
gives you visibility and control, not autopilot.
What PAAD can't fix
An engineer has to drive this — including knowing when the tool is wrong.
- PAAD reports; you decide. A finding is an argument, not a verdict — see
The AI sees all of your code and none of your context. - It's non-deterministic, like the assistant it's checking. Run it twice
on the same branch and you'll get overlapping, not identical, results. Run
the important ones more than once. - A report you ignore is worse than no report.
agentic-architectureon a
codebase nobody has time to change just produces a document that makes
everyone feel bad. - It can't fix a problem that isn't technical. No skill in here rescues a
project that's short on time, short on staff, or aimed at the wrong thing. - It's not a replacement for human review. It's a much stronger automated
backstop, which is a different job.
If you want the assistant to think for you, PAAD is the wrong tool. It exists
for engineers who want to stay responsible for the result and need help
keeping up.
The AI sees all of your code and none of your context
The model reads your repository faster and more patiently than any human will.
That part is real, and it's why PAAD works at all.
But the expensive decisions in software rarely turn on what's in the
repository. They turn on what isn't.
| The model sees | The engineer knows |
|---|---|
| Every line, in seconds | Which lines are load-bearing, and why |
| That the retry logic is duplicated | That the gateway already retries, so this layer is the bug |
| That a validation check looks redundant | That it was added after the outage nobody wrote up |
| That the design is internally consistent | That next quarter's volume breaks it |
| That two modules should be merged | That they belong to two teams and three release trains |
| That the data handling is convoluted | That the partner feed is malformed and the fix is a phone call |
None of the facts in the right-hand column are in the codebase. Most were never
written down anywhere. They live in the people who were there — which is what
experience actually is, once you stop treating it as a personality trait.
The failure mode isn't silence. It's confidence. An assistant missing the
right-hand column doesn't stop and say it lacks context. It produces a
thorough, well-reasoned, entirely plausible recommendation about the half it
can see. It will tidy the retry logic instead of deleting it. It will remove
the check that prevented the outage. It will hand you a tasteful list of
improvements to an architecture that should be thrown away.
That advice is not obviously wrong. It's the same shape as the good advice,
which is exactly why it survives review by anyone who doesn't already know
better.
Why this matters to whoever is paying for it
The argument for keeping engineers in charge is usually made on feelings —
trust, craft, morale. Here it's simpler than that, and it's measurable.
Seniority isn't nostalgia. It's an input the model doesn't have. The
engineer who remembers the outage is not being sentimental; they are supplying
a fact that is absent from every file the AI just read. Remove them from the
decision and you haven't made the process leaner, you've deleted critical
input and added confident output.
Which produces the line worth remembering when the reports look clean:
"the AI found no problems" is not the same as "there are no problems." It
means the AI found no problems in what it could see. Whether that's
reassuring depends entirely on how much of the decision lived outside the
repository — and only a person can answer that.
This is why PAAD reports instead of deciding, and why every skill in it ends
with a human choice rather than a merge. Not because the AI is untrustworthy in
some abstract way, but because it's working from a partial input and the
engineer is holding the rest. Engineering-driven AI is the arrangement where
those two halves actually meet. AI-driven engineering is the one where the
half that was written down wins by default.
Why people are using PAAD
The strongest early adoption has come from four skills:
pushback, which critically reviews specs before implementationalignment, which checks whether the planned work actually matches the
spec and designagentic-review, which performs a deeper pre-merge review than the
lightweight AI review tools many developers are used toagentic-architecture, which allows you to find and fix the tech debt
you're accruing over time
One user described pushback this way:
“I'm using it for every non-trivial change, and so far, I think I've argued with 2 of maybe 40 recommendations. It has improved EVERY SINGLE spec I've fed it so far.”
If English is the new programming language, pushback is the code review.
In practice, pushback consistently improves specifications, and alignment
catches gaps between the intended work and the implementation plan before
those gaps become expensive.
agentic-review serves a different but equally important role: it reviews a
working branch with multiple specialists looking for logic errors, edge cases,
security issues, and integration problems before merge. In practice, it
catches substantially more than the shallow, single-pass AI reviews now common
in tools like GitHub Copilot. It is not a replacement for human review, but it
is a much stronger automated backstop. Running it more than once is valuable.
The other skills are also valuable, especially for architecture analysis,
accessibility review, and smaller task execution with guardrails. Butpushback, alignment, and agentic-review currently form the core workflow
that delivers the most consistent day-to-day value.
What it costs you
PAAD is built to be honest about risk. If your spec is weak, your plan is
misaligned, an architectural decision is fragile, or a change introduces
problems, you hear about it early and plainly. It's for people who want the
speed and still want to be able to defend the result.
That honesty has a price, and it's tokens. A single feature will cost more
because you're paying to review the spec, review the plan, and review the code
on top of writing it. The bet is that this is cheaper than shipping the wrong
thing and rebuilding it — a good bet for software you'll maintain for years, a
bad one for a prototype you'll throw away on Friday. Spend the review on the
code you'll still be living with next year.
Workflow
There's a lot to take in with PAAD, so I've written an article to explain how
to write production-quality code with
it.
If you are new to PAAD, start with /paad-help to see the available skills and when to use them.
A typical workflow looks like this:
- Write your spec.
- Run
pushbackto critically review the spec before implementation. - Create your final implementation plan from the spec.
- Run
alignmentto verify that requirements, design, and planned work are
aligned with decisions. - Implement the change.
- Run
agentic-reviewon the working branch before merging (often more than
once).
Not sure if the AI is presenting you with the best options? Run rethink to
check whether the premises behind a recommendation actually hold.
Depending on the type of work, I also use (see below for full descriptions):
agentic-architectureto identify structural issues before they spreadagentic-a11yfor UI changes and accessibility-sensitive workvibefor small fixes that still benefit from guardrails
In practice, pushback and alignment are often worth running more than
once. They are especially useful when a spec evolves or when the
implementation plan changes during execution.
Installation
Claude Code
Install the plugin
Add the marketplace:
/plugin marketplace add Ovid/paad
Install the plugin:
/plugin install paad@paad
That opens the plugin's details rather than installing straight away — you pick
a scope there: Install for you (user scope), Install for all collaborators
on this repository (project scope), or Install for you, in this repo only
(local scope). Then run /reload-plugins to activate the skills in the
session you're in. Claude Code prompts you to do that as well, so you aren't
relying on this README to know it.
If you're not using Claude Code, see other examples below.
Updating the plugin
New skills and fixes do not arrive on their own. Claude Code disables
auto-update for third-party marketplaces by default, and PAAD is one, so you
pull updates yourself.
Open /plugin, go to the Installed tab, select paad, and choose
Update now. Then run /reload-plugins to load the new version.
That single action already refreshes the marketplace catalog from GitHub before
it looks for a new version.
To confirm which version you're on, run any skill — every skill announces its
own name and version on invocation (Running paad:vibe v<version>). This works
because Claude Code resolves the version from plugin.json and uses it as the
update-detection key; on the npx route there is no such key, the install tracksmain, and the announced version only tells you which release the sources were
last bumped to. Compare that against the version inplugins/paad/.claude-plugin/plugin.json.
If a skill documented here is missing entirely, you're on an older version —
run through the update steps above.
Every other agent — npx skills
One command, and it covers 70+ agents:
npx skills@latest add Ovid/paad
It opens a picker. Everything under Universal (.agents/skills) — Amp,
Antigravity, Cline, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode, Warp,
Zed and others — is always included. The list below that is opt-in and holds
another fifty-odd; Kiro CLI (.kiro/skills) and Claude Code are both in
there, so search for yours and select it.
npx skills@latest add Ovid/paad --list # list the skills, install nothing
npx skills@latest add Ovid/paad --skill pushback # install one skill
npx skills@latest add Ovid/paad -a cursor -a codex -y # skip the pickers
npx skills@latest add Ovid/paad --copy # real copies instead of symlinks
Three things worth knowing before you run it.
Skills refer to each other by slash command — /agentic-architecture,/pushback. If your assistant does not take slash commands, ask for the skill
by name instead: "run the pushback skill". The name is always the same; only
the way you invoke it differs.
These skills work by splitting one job across several helper agents.agentic-review, agentic-architecture, agentic-a11y, agentic-dedup,agentic-owasp, test-roadmap and rethink all work this way. If your
assistant supports helper agents, each helper gets its own separate conversation
and examines your code from one angle — security, error handling, and so on —
and they all work at the same time. If your assistant does not support them, a
single agent does every one of those passes itself, one after another, in one
conversation. The work still gets done. It is slower, and one conversation has
to hold everything it reads. Nothing errors and nothing warns you.
Two consequences are worth stating outright, because nothing surfaces them at
runtime:
- Nothing constrains what the helper agents can do to your files. In Claude
Code, PAAD's analysis helpers are dispatched through an agent definition that
grants read, grep, find, ls and bash and withholds the editing tools — bash
means it is not a read-only sandbox, but the editing tools are genuinely
absent. That agent definition lives outside the skills directory, so this
install route does not carry it, and neither does Pi's. What is left is the
instruction in the prose, and this repository's own steering file records that
control failing in practice: subagents have been observed editing source code
to test whether a finding was real. Treat an analysis run as capable of
writing, and run it on a clean branch you can throw away. test-roadmaploses a real check. One of its gates works by asking a
helper that has not seen the test to try to break it. A single agent holding
both cannot be blinded, so that gate reports success while verifying nothing.
Updates track main, and there is no pinned form. Re-run the same command
to pull the latest; there is no version argument, so the version a skill
announces on invocation is not a reliable way to tell two npx installs apart.
Renamed or deleted skills are not pruned. This release renamed help topaad-help, so an install made before it leaves a stale help directory
behind.
Check what you are deleting before you delete it. That skills root is
shared across every assistant the installer supports, help is about the most
collision-prone name a skill can have, and --copy mode leaves PAAD's copy
indistinguishable from one you wrote yourself. Confirm the directory is PAAD's
— its SKILL.md announces paad:help — and only then remove it. If it is not
PAAD's, leave it alone; a stale copy is harmless next to the renamed one.
Pi — experimental
Pi support is not settled. The package layout, the skills it exposes, and
the extension it depends on may change — or the packaging may be withdrawn — in
any release, including a patch release. The Claude Code plugin is the
supported path; if Pi is your daily driver, pin your version and please file
what breaks.
Install PAAD directly from Git:
pi install git:github.com/Ovid/paad
To try a local checkout without installing it permanently:
pi -e .
Invoke a skill with /skill:<name> or by name.
The multi-agent skills need two more pieces
agentic-review, agentic-architecture, agentic-a11y, agentic-dedup,agentic-owasp and rethink split their work across helper agents. Pi does not
support helper agents on its own, and a Pi package cannot declare them, so
neither piece ships inside the package. Without both pieces installed those
skills still run — a single agent does every pass itself, one after another, in
one conversation. You get no parallel work and no separation between passes.
Nothing errors and nothing warns you.
1. A subagent extension. Pi ships one as an
example,
not as an installable package — it is a clone-and-symlink into ~/.pi/agent/,
not pi install. Follow that example's own README.
2. The analyst agent. This repo generates a Pi copy of the analyst agent
the skills ask for. Copy it in:
cp pi/agents/paad-analyst.md ~/.pi/agent/agents/
This file is what withholds the editing tools from an analysis helper: it grantsread, grep, find, ls and bash and nothing that writes. bash means it
is not a read-only sandbox, but edit and write are genuinely absent. Skip
this step and any helper runs with whatever your setup gives it by default,
with only the prose asking it not to write — and this repository's steering file
records that asking failing in practice, with subagents editing source code to
test whether a finding was real. The npx install route has no equivalent step at
all: it resolves the skills directory and never sees pi/agents/.
rethink is degraded on Pi. The Claude Code analyst also holds WebSearch
and WebFetch, and Pi has no web tool to map those onto — its built-ins areread, bash, edit, write, grep, find, and ls. So on Pi the analyst
cannot reach a primary source outside the repository. rethink still runs and
still verifies everything the repository can settle, but a premise that needs a
vendor's documentation, a standard, or a changelog will come back Ungrounded
rather than checked. That is the correct answer given the tools, not a failure —
but it is a narrower skill than the Claude Code one.
Two known rough edges even with both installed. The skills name their subagent
type in Claude Code's syntax (subagent_type: paad:paad-analyst), which is not
how Pi's example extension dispatches — you may have to nudge the assistant
toward the paad-analyst agent by name. And that extension caps parallel work
at 8 tasks, while agentic-review asks for 12 dispatches on diffs over 500
lines; the skill has a documented two-pass fallback for exactly this case, so
say yes to it rather than accepting a half-coverage review.
Copying from kiro_and_antigravity/ — deprecated
Prefer npx skills@latest add Ovid/paad. The instructions below still work
and are not being removed this release, but they are no longer the recommended
route.
They stay for one reason: this tree has the Claude-Code-only sections stripped
and the subagent_type: fragments removed, which npx skills does not do. If
that matters more to you than a one-line install, keep copying.
These copies write reports to .reviews/, not paad/. That is deliberate
and unchanged — every other install route uses paad/. Your existing reports
do not follow you across: if you switch, move the contents of each .reviews/
folder into the matching paad/ one, or fix-architecture, test-roadmap and
the agentic-review backlog all start over. Switching also means removing the
copies you made here, so you are not loading two versions of the same skill.
Cursor
PAAD skills use the same SKILL.md format that Cursor
skills expect.
All skills (bash/zsh):
cp -r kiro_and_antigravity/skills/.kiro/skills/* .cursor/skills/
All skills (Windows):
xcopy kiro_and_antigravity\skills\.kiro\skills\* .cursor\skills\ /E /I
One skill (for example, pushback):
cp -r kiro_and_antigravity/skills/.kiro/skills/pushback .cursor/skills/
Kiro
All skills (bash/zsh):
cp -r kiro_and_antigravity/skills/.kiro/skills/* .kiro/skills/
All skills (Windows):
xcopy kiro_and_antigravity\skills\.kiro\skills\* .kiro\skills\ /E /I
One skill (for example, pushback):
cp -r kiro_and_antigravity/skills/.kiro/skills/pushback .kiro/skills/
Antigravity
Antigravity skills function as wrappers that reference Kiro skill files, so
you need both:
All skills (bash/zsh):
cp -r kiro_and_antigravity/skills/.kiro/skills/* .kiro/skills/
cp -r kiro_and_antigravity/skills/.agent/skills/* .agent/skills/
All skills (Windows):
xcopy kiro_and_antigravity\skills\.kiro\skills\* .kiro\skills\ /E /I
xcopy kiro_and_antigravity\skills\.agent\skills\* .agent\skills\ /E /I
One skill (for example, pushback):
cp -r kiro_and_antigravity/skills/.kiro/skills/pushback .kiro/skills/
cp -r kiro_and_antigravity/skills/.agent/skills/pushback .agent/skills/
Using skills outside Claude Code
However you installed them, skills are recognized automatically by your
assistant. You can simply ask the assistant to
perform the task, such as:
- “Run a pushback review on this spec”
- “Check whether this plan aligns with the requirements”
- “Analyze the architecture of the backend code”
The assistant will follow the procedures defined in the skill files.
Skill reference
Pushback
/pushback [document]
If English is the new programming language, pushback is the code review.
AI assistants rarely tell you that your spec has problems. pushback does. It
critically reviews specs, PRDs, and design plans before work begins so you do
not build on flawed assumptions — and it works the same way on any document
that makes claims about the code, such as an agent steering file (CLAUDE.md,AGENTS.md) or a generated analysis report.
- Arguments:
/pushback path/to/spec.md(specific file) or/pushback(auto-detect from conversation history, common file locations,
agent steering files, or generated reports) - Source control reality check — scans recent git history for commits that
conflict with what the spec assumes, presented before other analysis - Scope shape check — flags unrelated features bundled together and
oversized specs; suggests splits only when each piece delivers independent
value - 6 analysis categories — contradictions, feasibility, scope imbalance,
omissions, ambiguity, and security concerns - Severity-ordered review — presents the most consequential issues first,
one at a time, with concrete options and recommendations - Flexible output — update the spec in place or write a separate report to
paad/pushback-reviews/
Alignment
/alignment [files...]
AI assistants drift off-scope. alignment catches that by checking whether
requirements, design documents, and implementation plans actually match before
code gets written.
- Arguments:
/alignment(auto-detect) or/alignment requirements.md plan.md(specific files) or/alignment docs/specs/ docs/plans/(directories) - Auto-detection — scans
.kiro/,specs/(spec-kit),docs/plans/,docs/specs/, and common filenames; classifies documents as intent
(requirements) versus action (tasks) - Source control reality check — scans recent git history for conflicts
with what the documents assume - 3 alignment checks — requirements coverage, scope compliance, and design
alignment (when design docs exist) - Dependency-ordered issues — surfaces root causes before downstream
symptoms, one issue at a time - Mandatory TDD rewrite — once aligned, rewrites tasks in
red/green/refactor format for better implementation outcomes - Flexible output — update documents in place or write a separate report
topaad/alignment-reviews/
Architecture
/agentic-architecture [path...]
AI can build quickly on weak foundations. agentic-architecture identifies
those structural problems before they compound. Five specialists review the
codebase from different angles so issues do not hide behind a single
reviewer’s blind spots. This skill is diagnostic only; it does not propose
fixes.
- Arguments:
/agentic-architecture(full repo) or/agentic-architecture src/(scoped) or/agentic-architecture packages/api/ packages/shared/(multiple directories) - Parallel analysis — five specialists run simultaneously, followed by a
verification phase that filters false positives by reading code and checking
git history - 14 strength categories — including modular boundaries, cohesion,
coupling, error handling, observability, security, and testability - 34 flaw and risk types — including god objects, tight coupling, circular
dependencies, leaky abstractions, dead code, missing tests, and hard-coded
secrets - Coverage checklist — ensures every category is assessed
- Hotspots — identifies the files and directories most worth reviewing
- Report — written to
paad/architecture-reviews/
/fix-architecture [report]
Architecture analysis tells you what is wrong. fix-architecture helps you
resolve those findings one at a time with a test-first workflow. Each fix is
validated, tested, tracked, and committed so the work can continue across
multiple sessions.
- Arguments:
/fix-architecture(find most recent report) or/fix-architecture path/to/report.md(specific report) - Pre-flight checks — branch protection, report staleness detection, test
infrastructure verification, and baseline test run - Developer conversation — confirms solo versus team workflow, batch size,
auto-commit versus manual commit, flaw triage strategy, and plan
confirmation - Test-first fixes — validates that each flaw still exists, writes
safety-net tests where needed, proposes options with tradeoffs, and executes
using red/green/refactor - Status tracking — records outcomes in the report: Fixed, Won't fix,
Partially fixed, Skipped, Fixed (pre-existing), Attempted/reverted - Flaw dependency detection — flags when fixing one flaw resolves others
- Iterative workflow — designed to run across multiple sessions against
the same report
Requires a feature branch (not main or master) and an existing
architecture report.
Why sequential? Architecture fixes happen one at a time rather than in
parallel. Fixing one structural flaw often resolves others, and that
dependency can only be discovered sequentially. Worktree-based parallelism
avoids file collisions, but merging multiple structural refactors back
together is a reliable way to introduce new bugs.
Discipline
Code quality rarely degrades in one dramatic change. More often, it slips
through a series of small decisions that each seem reasonable in isolation.
/agentic-review [base-branch] [path]
Discipline means reviewing before merging, every time. agentic-review uses
multiple specialist agents to examine your branch for logic errors, edge
cases, security issues, and integration problems that lightweight AI review
tools often miss.
Where typical AI review features tend to provide shallow, opportunistic
feedback, agentic-review is designed as a deliberate pre-merge quality gate:
parallel analysis, finding verification, deduplication, and severity ranking.
- Arguments:
/agentic-review(diff againstmain) or/agentic-review develop(diff againstdevelop) or/agentic-review main src/auth/(scoped to a directory) - Parallel review — six specialists examine your branch simultaneously
(Logic & Correctness, Error Handling & Edge Cases, Contract & Integration,
Concurrency & State, Security, Spec Compliance), then findings are verified
against actual code and deduplicated - Severity ranking — Critical / Important / Suggestion
- Spec Compliance — pulls intent from PR description, plan/design docs,
recent commits, or branch name; flags missing features, deviations, and
out-of-scope additions (replaces the older Plan Alignment agent) - Out-of-scope handling — pre-existing bugs persist to
paad/code-reviews/backlog.md; out-of-scope additions are flagged for
per-PR decision (keep / split / revert) without backlog persistence - Report — written to
paad/code-reviews/
Requires a feature branch (not main or master) with committed changes.
/agentic-a11y [path]
Discipline also means accessibility is not treated as an afterthought.agentic-a11y scans your codebase for meaningful accessibility barriers and
organizes them by who they affect. Important: this skill will help
substantially, but human accessibility review of your application is still
required. Accessibility is important, but hard.
Supports web, iOS, Android, React Native, Flutter, desktop, CLI, and
games. Evaluates against WCAG 2.2 AA, applied through WCAG2ICT for non-web
platforms, with AAA noted as bonus recommendations.
- Arguments:
/agentic-a11y(full repo) or/agentic-a11y src/components/(scoped to a directory or file) - Automatic platform detection — identifies the project’s platform and
adapts checks accordingly - Specialists by disability category — dedicated reviewers for screen
reader usage, visual and color contrast, keyboard and motor interaction,
cognitive load, and multimedia - Platform-specific agent (conditional) — dispatched for
framework-specific pitfalls such as React, Vue, SwiftUI, Jetpack Compose,
Flutter, Unity, and others - Verification phase — confirms that barriers are real and not already
handled by the framework, platform, or component library - WCAG conformance checklist plus platform-specific guidance from sources
such as Apple HIG, Material Design, and Xbox Accessibility Guidelines - Impact summary by user group — explains how the codebase affects each
disability category - Quick wins — identifies the five highest-impact, lowest-effort
improvements - Report — written to
paad/a11y-reviews/
Workflow
/makefile
Creates or updates a project Makefile with standard targets such as help,all, test, cover, lint, and format. It detects your stack
automatically and never modifies an existing target without asking first.
Note: this skill might be removed in the future, or moved to a different
namespace. Let me know if you rely on it.
/vibe [task description]
Speed without recklessness. vibe supports smaller fixes and quick changes
while keeping TDD guardrails in place.
Arguments:
/vibe(prompt for the task)Pre-flight checks before writing code:
- test infrastructure exists; if not, warn and ask how to proceed
- scope check; if the change spans four or more files or crosses modules,
warn that it may not be a good vibe task - architecture smell detection; if a simple task requires too much work,
investigate deeper issues first - reusable component search; look for existing utilities before building
from scratch
Mandatory red/green/refactor — write a failing test, write the minimal
code to pass, then refactor; if the test passes or fails unexpectedly, stop
and reassessPost-fix summary — suggests relevant next steps such as
agentic-review
for security-sensitive changes,agentic-a11yfor UI changes, or
architecture review if the fix was harder than expected
/paad-help [skill-name]
Shows help for all PAAD skills or detailed help for one skill.
- Arguments:
/paad-help(overview of all skills) or/paad-help vibe
(detailed help for one skill)
Experimental skills
These skills are shipped so they get real use, but they are not settled.
Their arguments, output paths, and behavior may change — or the skill may be
withdrawn — in any release, including a patch release. The semver promise
the other skills carry does not apply to them. If you build a workflow on one,
pin your plugin version — on Claude Code and Pi you can; the npx route tracksmain and has no pinned form, so budget for the churn instead. Please file what
breaks.
/agentic-dedup [scope] — experimental
Duplication that a clone detector finds is the easy kind. The expensive kind
is two pieces of code that mean the same thing while looking nothing alike —
a validator and a schema that accept the same values, a for loop and a
stream pipeline that compute the same total, a permission check reimplemented
through a different helper chain. Those drift apart silently, and the bug
surfaces when one side is fixed and the other is not.
agentic-dedup hunts for shared meaning rather than shared text, and reports only what survives verification.
- Arguments:
/agentic-dedup(whole repo) or/agentic-dedup src/auth/(scoped) or/agentic-dedup --changed main(seeded from the
branch diff) or/agentic-dedup --type-constraints(schemas, type
aliases, validators, DB constraints) or/agentic-dedup --domain "payments"(scoped to a domain term) - Six discovery strategies — name and concept search, behavioral
fingerprints, type and constraint equivalence, control-flow normalization,
tests read as behavioral specs, and a search for an existing canonical
utility that the duplicates should have been calling - Five specialists in parallel — Semantic Equivalence, Type & Constraint
Equivalence, Domain Boundary & Intent, Divergence Risk, and Refactoring
Safety - Skeptical verification — findings based on name similarity, field-shape
similarity, or visual structure are rejected, as is anything where the
duplication is an intentional bounded-context boundary and sharing would be
the riskier change - Relationship, not just a verdict — the type and constraint table states
whether two constraints are exact, overlapping, subset, superset, or already
drifting - Rejected candidates are recorded — so the next run does not spend
context rediscovering the same false positives - Report — written to
paad/dedup-reviews/, with a persistentINDEX.md
across runs
It never refactors anything. The report is the deliverable.
/agentic-owasp [scope] — experimental
Note: this skill is experimental and may change in any release, including
a patch release. If you build a workflow on it, pin your plugin version (not
available on the npx route, which tracksmain).
Further, it is not a replacement for static security tools or human review. It
is a deeper automated backstop that can catch issues those tools miss, but it
is not a guarantee of security.At present, static security tools are still the best way to catch many
security issues.
Most security review output is pattern matching wearing a suit. A tool greps for
string concatenation near a SQL call and reports injection, without ever
checking that the ORM two lines up parameterizes by default, that the value
interpolated is an enum, or that the route is behind an admin middleware chain.
The developer reads twenty findings, confirms the first three are wrong, and
stops reading. The twenty-first was real.
agentic-owasp reviews code against the OWASP Top
10:2025 and puts every candidate finding through
an exploitability gate before it reaches the page. A finding has to name an
attacker-controlled source with a line number, trace the call path to the
dangerous operation hop by hop, and say which controls sit in that path and why
they do not hold. Findings that cannot do all three become hardening notes or
get rejected with the reason recorded — so the next run does not spend context
rediscovering them.
- Arguments:
/agentic-owasp(whole repo) or/agentic-owasp src/api/
(scoped) or/agentic-owasp --changed main(seeded from the branch diff) or/agentic-owasp --category A01(one category, orA01,A05,A07) or/agentic-owasp --deps(dependencies, lockfiles, and CI/CD only) - Breadth costs depth, and it costs it silently — a wide pass does not return
a shallower version of a narrow one, it returns a different one. Measured on
a real framework: pointed at a single module, the review found its flagship
weakness in three runs out of three; a full-repository pass over 133 files read
that same module, filed a piece of the weakness as a hardening note, and
shipped without it. The wide run reported more findings overall, which is
exactly what hides the trade. So past roughly forty source files the skill
stops and asks: narrow to the untrusted-input surface, split into separate
subsystem passes, or take the wide pass with the dilution written into the
report. Prefer several scoped runs to one sweep - Six specialists, all ten categories, none orphaned — Access Control &
Authentication (A01, A07), Injection & Untrusted Input (A05), Cryptography &
Data Protection (A04), Configuration & Supply Chain (A02, A03), Design,
Integrity & Failure Modes (A06, A08, A10), and Logging, Alerting & Detection
(A09). The 2025 list is the current one: supply chain and mishandled
exceptional conditions are new categories, and logging is now about
alerting, not just recording - A seventh specialist organized by mechanism, not by consequence — an OWASP
category names what a weakness does, so a hole in the seam between two
components that are each individually correct belongs to no category and is
owned by none of the six. The Mechanism & Round-Trip specialist hunts two
patterns instead: paired APIs that disagree on a round trip — what one renders,
the other parses back as something else — and facts the codebase stores twice,
where the security decision reads the copy the attacker writes. It files what
it finds under the category of the impact - A library's callers are applications you cannot see — "no caller in this
repository passes request data into that parameter" is true of every library
and rejects nothing. When the subject is a library or framework and its own
documentation shows the vulnerable call, the documented API is the source, and
the doc reference stands in for the in-repo one. Documentation that teaches
the unsafe call ships the defect to every downstream user - Framework defaults are read first — what the ORM, template engine, and
middleware already do decides which findings are real. Where a framework
protects by default, the finding is the opt-out, and the report names the line
it is on - A coverage table that admits what nobody looked at — all ten categories,
each marked assessed or not. "No findings in A04" and "nobody checked A04" are
different sentences, and a report that blurs them leaves you worse off than
before you ran it - Severity that means something — Critical is reachable-and-unauthenticated,
not "looks scary". Hardening notes live in their own section so they cannot be
mistaken for exploitable findings. Whether a finding was actually executed is
a separateunprovenfield and never lowers its severity: a traced smuggling
path is "High, unproven", not Medium, because a hedged rank is a claim about
impact you have not earned and the downgraded row is the one nobody fixes - A verifier that tries to break the findings — it defaults to refuted when
uncertain, and it clears a control by enumerating every caller that reaches
the value without passing through it, not by reading where the control lives.
A sanitizer on the serialization path says nothing about the sibling accessor
that skips it - Chains that cross category boundaries survive the split — specialists
covering ten categories means a weakness assembled from a default in one
category and a leak in another arrives as two harmless-looking halves that
each fail the exploitability gate alone. Specialists report what they see
outside their own categories as fragments rather than dropping it, and the
verifier — the only component holding all seven outputs — composes before it
rejects. A chain link is supposed to look harmless on its own - Every fragment reaches the page, not just a count of them — the pool is the
run's working set, and "63 fragments pooled" is not a record of it. Once the
session ends, a fragment that exists only as a number is gone, and nobody can
tell afterwards whether a sink was seen and dropped or never looked at. The
report lists each one with itspath:line, the sentence the specialist wrote,
and where it ended up — composed into a finding, left without a counterpart, or
never traced. That is also what makes a run's conclusions checkable later
instead of taken on trust - Reads by default; asks before it runs anything — no specialist and no
verifier starts the application, connects to a database, or sends a request to
any host. Where a sink is reachable in-process, it offers a proof script per
finding that exits 0 while the weakness is open, and lays out both sides
before you decide. The offer is ordered by severity, not by whichever proof
looks easiest — a run that proves its footnotes and leaves its Criticals
"reasoned from source" aimed the tool at the cheapest question. It never
executes without a yes, declining costs you nothing but theunprovenmark,
and every unproven finding says why it went unproven. Testing a deployed system is a different
job with a different authorization scope, and out of scope in every mode - It tells you what it did not find — every run ends by saying the report is
not a complete list of the weaknesses and is not evidence the rest is secure.
Zero findings means one reviewer looked once, inside ten categories, at one
scope. Business logic, race conditions, and tenant isolation are outside the
Top 10 and were never in scope. A clean report read as an all-clear leaves you
worse off than never having run it. The same closing block says why committing
the report is a bad bet even once the findings are closed — history is
permanent, the report ages into a false clearance for code that has moved, and
the severity table outlives every caveat attached to it - Credentials are reported by location, never by value — a secret pasted
into a report file is a second copy of the leak, and rotation goes to the top
of the remediation order because it is the one item that cannot wait - Report — written to
paad/owasp-reviews/, with a persistentINDEX.md
across runs
It never fixes anything. The report is the deliverable.
/handoff [save|resume] — experimental
Claude Code already has /compact, and for most of what you want it is
enough. The gap handoff fills is narrow and specific: /compact's summary is
written by the machine, lands without being read, and lives inside the
transcript where you cannot edit it. handoff writes the same kind of state to
a file you can open, correct, and hand to a genuinely fresh session.
That makes the review the point, not a courtesy. A handoff nobody reads is a
worse /compact — same summary, more ceremony — and the skill says so out loud
rather than letting it slide.
The thing it guards against isn't forgetfulness. An agent writing a handoff
unaided keeps the expensive material well: the approaches already tried and
abandoned, the reasons behind them, the constraint you mentioned once an hour
ago. What it gets wrong is the cheap material — a test's file path, which
changes are really in the last commit, a line number, who said the sentence
it's quoting. Those are settleable with a tool in seconds, and they arrive in
exactly the same confident voice as everything it got right. A fresh session
has no memory to catch them with.
- Arguments:
/handoff(infers from whether the session has history) or/handoff saveor/handoff resume - Verifies before it writes — commit, branch, dirty state, file paths, line
numbers, test names, and whether the suite actually passes are checked with
tools, not recalled. What can't be settled is marked inferred instead of
asserted - Weighted toward what a fresh session can't reconstruct — decisions and
their reasons, approaches ruled out and how far they got, constraints that
exist nowhere on disk. No architecture tour, no session narrative, nothinggit diffalready shows - Asks for the review that matters — names the two or three claims it is
least sure of, rather than a general disclaimer you'd skim - Checks for drift on the way back in — compares the recorded commit
against HEAD, confirms the files it named still exist, and reports mismatches
before acting on anything - Never deletes the handoff — it's untracked, so git can't restore it. The
next save overwrites it - Artifact —
handoff.mdin the working directory, which it suggests you
add to.gitignore
/rethink [what to re-examine] — experimental
pushback argues with a spec. rethink argues with an answer — including one
of pushback's. When options have been laid out and one has been chosen, it
goes and checks whether the premises under that choice actually hold.
The distinction it exists for: a recommendation can be correct and unsound.
The premises may hold and yet have been taken on faith from a source nobody
tested. That answer is right today and will stay right until the day it isn't,
with no one watching. rethink reports that case as its own verdict rather
than waving the recommendation through.
- Arguments:
/rethink(the most recent option set) or/rethink the caching approach(when several decisions are live) - Premise extraction — writes out everything the recommendation depends on,
including the unstated assumptions, sorted into checkable now, checkable by
experiment, and not checkable at all - Primary sources only — verifies against the software, not its
documentation; a claim sourced from a doc is checked against the thing the
doc describes - Five verdicts — Sound, Lucky (holds but unchecked), Wrong reason (false
premise, surviving conclusion), Premise false, and Ungrounded (with the
cheapest experiment that would settle it) - Evidence per premise — every claim names what was checked to reach it
- Plain-terms walkthrough — you probably ran this because you weren't sure
about the options, so it re-presents them without jargon or internal names,
with pros and cons for each, and says what verification changed about where
each one stands - A recommendation, with its reason — and where the call also turns on
something it can't see (a deadline, headcount, an unshipped roadmap) it gives
you both halves: the option the evidence supports, plus the specific missing
input and what it would flip the answer to. It goes silent only when the
evidence supports no default at all - No option list — deliberately unlike
pushback. It proposes an
alternative only when verification exposed a real defect, and then exactly
one, tied to that defect - Writes nothing — no report, no edits. The conversation is the deliverable
/test-roadmap — experimental
PAAD is risky to use with codebases without a strong test suite. This skill
builds that suite for you.
High coverage numbers lie. A line can be "covered" by a test that asserts
nothing — green forever, catching nothing. So when you finally refactor the
scary part of a legacy codebase, the suite stays quiet and the regression
ships anyway.
test-roadmap builds the suite that does not stay quiet. It pins your
code's current behavior, deliberately including the buggy parts, so that
the day you start changing things the tests break loudly and tell you exactly
what you changed.
Run it once to get a roadmap. Then keep running it — one phase of tests per
run — until the roadmap is done.
That is the whole usage model, and it is the one thing people get wrong: they
run /test-roadmap, get a plan, and stop with zero tests written. The
command does something different every time you invoke it, because it looks
for paad/test-roadmap/test-roadmap.md and routes on whether it exists:
| Invocation | What it does |
|---|---|
| 1st run — no roadmap yet | Detects your stack, grades the tests you already have, and writes a phased plan to paad/test-roadmap/test-roadmap.md. Writes no tests. |
| 2nd run | Writes Phase 1's tests, proves they catch the bug they claim to, commits them, marks the phase done. |
| 3rd run | Phase 2. |
| … | …one phase per run… |
| Final run | The last phase lands and the skill tells you the roadmap is finished. Then you stop. |
So a 14-phase roadmap takes 15 invocations. Each run ends by telling you where
you are (Phase 8 of 14 — 7 done, 6 to go) and whether to run it again. One
phase per run is deliberate: each phase gets written, verified against a
deliberately injected bug, and committed on its own, with a clean context.
Sessions don't need to be consecutive, or even the same session — the roadmap
file is the memory, so you can pick it up tomorrow, on a fresh clone, after a
squash merge, and it resumes from what has already landed.
- Arguments:
/test-roadmap(no arguments — the presence of the
roadmap file selects build mode or execute mode) - Every phase names the bug it would catch — a phase that cannot answer
"what breakage makes these tests go red?" is coverage theater, and gets
rewritten or dropped - It proves each test actually works — before a phase counts as done, it
injects the very bug the phase claims to catch and confirms the test goes
red; a passing command and a covered line are never accepted as proof - Bug injection is disposable — it happens in a throwaway
git worktree,
never in your working tree, database, or config - It grades the tests you already have — existing tests are classified
against a catalog of test theater (assertion-free, tautological,
snapshot-only, over-mocked, happy-path-only) before anything new is planned - It will not call a phase done while the run is noisy — your whole suite
runs normally and again under coverage; it fixes what is its own to fix and
surfaces the rest, and never edits your code to quiet a warning - You finish with a bug list you did not start with — contradictions found
while pinning behavior are logged with the test that proves them. It never
fixes them; that is your call - Resumable — across unrelated commits, squash merges, fresh clones, and
sessions that remember nothing about the last one
Requires a git checkout and a working branch. Started on main (or master,
or trunk), it stops and offers to create a branch first, so your primary
branch never fills up with half-built tests.
This is the only PAAD skill that writes and commits code. Every other
skill reports, advises, or edits documents; this one adds tests and commits
them, one commit per phase, onto the branch you are on.
Invoking skills
The headings above spell each skill with a leading slash — /pushback,/agentic-review — because that's the shortest thing that works. You often
don't need to type it at all.
Claude Code recognizes these skills by name in an ordinary sentence, so "run
pushback on this spec" or "review the architecture of this module" reaches the
right one. When you'd rather be explicit, the bare slash command does it:/pushback on the options you just gave me.
The fully-qualified /paad:pushback form exists for one job — disambiguation.
When a name is already taken, the paad: prefix says which one you mean.
Nothing in PAAD currently collides, so until you install a plugin that shares a
name, you can ignore it. The help skill is called paad-help rather than help
for exactly this reason: /help is Claude Code's own built-in.
Local Development
The repository carries two copies of the plugin. preview/paad/ is where all
new work goes. plugins/paad/ is the last released tree — it is what everyone
installs, and it is written only by make promote, never by hand. An edit made
there reaches main unpromoted and unbumped, ships immediately to anyone
installing fresh, and is then erased without warning by the next release, whose
first step copies preview straight over it.
Drive your changes against preview:
claude --plugin-dir ./preview/paad
Then invoke skills with /paad-help to see available commands, or try/vibe, /pushback, and the rest directly. Preview announces itself asv<version>-preview, so a transcript always says which tree ran.
After making changes, run /reload-plugins inside Claude Code to pick up
updates without restarting.
Testing
Run all checks with:
make test
This validates the marketplace and Claude plugin structure, then runs
consistency checks such as package version sync, digraph presence, help and
README coverage, and frontmatter validation. Use make help to see all
available targets.
Individual checks can also be run separately:
make check-versions # package.json ↔ marketplace.json ↔ plugin.json version sync
make check-digraphs # every skill (except paad-help) has a digraph
make check-help # every skill is documented in paad-help
make check-readme # every skill is documented in README.md
make check-skill-names # skill folder names follow the Agent Skills naming rules
make check-frontmatter # SKILL.md frontmatter, plus the internal flag across all three skill trees
make check-references # references/ dispatches resolve; no orphaned reference files
make validate # claude plugin validate on marketplace + plugins
Contributing
- Fork the repository and create a feature branch.
- Make your changes. See
CLAUDE.mdfor conventions on adding or modifying skills. - Run
make testto verify everything passes. - Open a pull request.
Key rules from CLAUDE.md:
- Every skill except
paad-helpmust include a Graphviz digraph covering its
decision points - Skill folder names must match the
namefield inSKILL.mdfrontmatter - Use
make bump-version VERSION=X.Y.Zto keep all versioned files in sync - Put new and changed skills in
preview/paad/skills/, never inplugins/paad/skills/ - Update
paad-helpandCLAUDE.mdwhen adding or changing skills. TheREADME.mdentry lands on the release branch instead — README describes what
can actually be installed, and a preview-only skill cannot be yet
Star History
License
MIT
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found