CCPM Project Management
automazeio/ccpm
Runs a spec-driven workflow from PRD to epic to GitHub issues to parallel agents, with status, standup and blocked-work reports from bundled scripts.
A skill your agent uses when reviewing a spec, PRD, requirements doc, or design plan before implementation begins — especially when the doc feels too big, bundles unrelated features, may contradict…
$ npx skills add Ovid/paad --skill pushback -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Ovid/paad pushback --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/Ovid/paad.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/paad/skills/pushback .claude/skills/pushback && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "pushback" agent skill from https://github.com/Ovid/paad/tree/main/plugins/paad/skills/pushback into .claude/skills/pushback/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pushback", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/Ovid/paad/tree/main/plugins/paad/skills/pushbackType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add Ovid/paad --skill pushback -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Ovid/paad pushback --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Ovid/paad.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/paad/skills/pushback .agents/skills/pushback && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "pushback" agent skill from https://github.com/Ovid/paad/tree/main/plugins/paad/skills/pushback into .agents/skills/pushback/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pushback", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Ovid/paad --skill pushback -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Ovid/paad pushback --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Ovid/paad.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/paad/skills/pushback .cursor/skills/pushback && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "pushback" agent skill from https://github.com/Ovid/paad/tree/main/plugins/paad/skills/pushback into .cursor/skills/pushback/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pushback", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/Ovid/paad.git --path plugins/paad/skills/pushback--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add Ovid/paad --skill pushback -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Ovid/paad pushback --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Ovid/paad.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/paad/skills/pushback .gemini/skills/pushback && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "pushback" agent skill from https://github.com/Ovid/paad/tree/main/plugins/paad/skills/pushback into .gemini/skills/pushback/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pushback", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install Ovid/paad pushbackInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add Ovid/paad --skill pushback -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Ovid/paad.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/paad/skills/pushback .github/skills/pushback && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "pushback" agent skill from https://github.com/Ovid/paad/tree/main/plugins/paad/skills/pushback into .github/skills/pushback/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pushback", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Ovid/paad --skill pushback -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Ovid/paad pushback --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Ovid/paad.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/paad/skills/pushback .opencode/skills/pushback && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "pushback" agent skill from https://github.com/Ovid/paad/tree/main/plugins/paad/skills/pushback into .opencode/skills/pushback/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pushback", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
pushbackA skill your agent uses when reviewing a spec, PRD, requirements doc, or design plan before implementation begins — especially when the doc feels too big, bundles unrelated features, may contradict…
Pushback is an agent skill from Ovid/paad. Use when reviewing a spec, PRD, requirements doc, or design plan before implementation begins — especially when the doc feels too big, bundles unrelated features, may contradict the current codebase, or seems vague, infeasible, or thin on security and error handling. Not for cross-checking a spec against a plan — that's /alignment.
Its SKILL.md is about 5.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Product & Project Management, covering PRD writing. The repository describes itself as: The practices that made software work didn't stop working. They stopped keeping up. PAAD brings them back at AI speed. The licence is MIT.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 1c48121. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Pushback loads about 5.9k tokens when it runs. Until then it costs about 86 tokens; SKILL.md has 2,347 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from Ovid/paad at commit 1c48121, republished under its MIT licence (© Ovid). 2,347 words, ~5,863 tokens.
.claude/skills/pushback/SKILL.md (or your agent's skills folder).On invocation: announce "Running paad:pushback v1.31.0" before anything else.
Critically reviews a spec, PRD, requirements document, or design plan before work begins. Checks source control for conflicts with reality, then walks through issues one at a time in severity order so you can fix what matters most.
This skill does NOT recommend a fresh session. The conversation history may be the spec.
Input resolution and reality check:
digraph pushback {
"Has $ARGUMENTS?" [shape=diamond];
"Conversation has spec?" [shape=diamond];
"Found in common locations?" [shape=diamond];
"Git repo?" [shape=diamond];
"Source control conflicts?" [shape=diamond];
"Use that file" [shape=box];
"Confirm with user" [shape=box];
"Present candidates, ask user" [shape=box];
"ASK: what document to review?" [shape=box];
"Present conflicts, resolve first" [shape=box];
"Proceed to Scope Shape" [shape=box];
"Has $ARGUMENTS?" -> "Use that file" [label="yes"];
"Has $ARGUMENTS?" -> "Conversation has spec?" [label="no"];
"Conversation has spec?" -> "Confirm with user" [label="yes"];
"Conversation has spec?" -> "Found in common locations?" [label="no"];
"Found in common locations?" -> "Present candidates, ask user" [label="yes"];
"Found in common locations?" -> "ASK: what document to review?" [label="no"];
"Use that file" -> "Git repo?";
"Confirm with user" -> "Git repo?";
"Present candidates, ask user" -> "Git repo?";
"ASK: what document to review?" -> "Git repo?";
"Git repo?" -> "Source control conflicts?" [label="yes"];
"Git repo?" -> "Proceed to Scope Shape" [label="no"];
"Source control conflicts?" -> "Present conflicts, resolve first" [label="yes"];
"Source control conflicts?" -> "Proceed to Scope Shape" [label="no"];
"Present conflicts, resolve first" -> "Proceed to Scope Shape";
}Scope shape, critique and resolution:
digraph scope_critique_resolution {
"Proceed to Scope Shape" [shape=box];
"Unrelated features bundled?" [shape=diamond];
"User splits them out?" [shape=diamond];
"Spec large?" [shape=diamond];
"Meaningful split exists?" [shape=diamond];
"Issues found?" [shape=diamond];
"Can you name Y and Z?" [shape=diamond];
"User says good enough / stop?" [shape=diamond];
"Decision, or stop signal?" [shape=diamond];
"More issues to present?" [shape=diamond];
"Update spec, write report, or both?" [shape=diamond];
"Stopped early?" [shape=diamond];
"Unresolved issues, or user asked for a report?" [shape=diamond];
"Spec saved to a file?" [shape=diamond];
"Identify groups, recommend splitting, ask" [shape=box];
"Continue reviewing the remaining spec" [shape=box];
"Note it as a scope concern, review as-is" [shape=box];
"Suggest the split — what each piece delivers alone" [shape=box];
"Flag the size, explain why splitting isn't practical" [shape=box];
"Say nothing about size" [shape=box];
"Drop it; report it as a discard" [shape=box];
"Rank surviving findings by severity" [shape=box];
"Present one issue: problem, options best-to-worst, recommendation" [shape=box];
"Wait for the user's response" [shape=box];
"Answer it, then re-put this issue's options" [shape=box];
"ASK where to write the spec first" [shape=box];
"ASK before editing after a stop signal" [shape=box];
"Apply agreed changes; leave undiscussed requirements alone" [shape=box];
"Write paad/pushback-reviews/<date>-<spec>-pushback.md" [shape=box];
"Skip the report — conversation and diff carry it" [shape=box];
"List every file written or updated" [shape=box];
"Done" [shape=box];
"Proceed to Scope Shape" -> "Unrelated features bundled?";
"Unrelated features bundled?" -> "Identify groups, recommend splitting, ask" [label="yes"];
"Unrelated features bundled?" -> "Spec large?" [label="no"];
"Identify groups, recommend splitting, ask" -> "User splits them out?";
"User splits them out?" -> "Continue reviewing the remaining spec" [label="yes"];
"User splits them out?" -> "Note it as a scope concern, review as-is" [label="no"];
"Continue reviewing the remaining spec" -> "Spec large?";
"Note it as a scope concern, review as-is" -> "Spec large?";
"Spec large?" -> "Meaningful split exists?" [label="yes (8+ requirements, many areas, long)"];
"Spec large?" -> "Say nothing about size" [label="no"];
"Meaningful split exists?" -> "Suggest the split — what each piece delivers alone" [label="yes"];
"Meaningful split exists?" -> "Flag the size, explain why splitting isn't practical" [label="no — tightly interdependent"];
"Suggest the split — what each piece delivers alone" -> "Issues found?";
"Flag the size, explain why splitting isn't practical" -> "Issues found?";
"Say nothing about size" -> "Issues found?";
"Issues found?" -> "Can you name Y and Z?" [label="yes"];
"Issues found?" -> "Spec saved to a file?" [label="no"];
"Can you name Y and Z?" -> "Rank surviving findings by severity" [label="yes"];
"Can you name Y and Z?" -> "Drop it; report it as a discard" [label="no"];
"Drop it; report it as a discard" -> "Rank surviving findings by severity";
"Rank surviving findings by severity" -> "Present one issue: problem, options best-to-worst, recommendation";
"Present one issue: problem, options best-to-worst, recommendation" -> "Wait for the user's response";
"Wait for the user's response" -> "Decision, or stop signal?";
"Decision, or stop signal?" -> "Answer it, then re-put this issue's options" [label="no — a question, objection, or new consideration"];
"Answer it, then re-put this issue's options" -> "Wait for the user's response";
"Decision, or stop signal?" -> "User says good enough / stop?" [label="yes"];
"User says good enough / stop?" -> "Spec saved to a file?" [label="yes — remainder goes to Unresolved Issues"];
"User says good enough / stop?" -> "More issues to present?" [label="no"];
"More issues to present?" -> "Present one issue: problem, options best-to-worst, recommendation" [label="yes"];
"More issues to present?" -> "Spec saved to a file?" [label="no"];
"Spec saved to a file?" -> "Update spec, write report, or both?" [label="yes"];
"Spec saved to a file?" -> "ASK where to write the spec first" [label="no — came from conversation"];
"ASK where to write the spec first" -> "Update spec, write report, or both?";
"Update spec, write report, or both?" -> "Stopped early?" [label="update spec"];
"Update spec, write report, or both?" -> "Unresolved issues, or user asked for a report?" [label="report only"];
"Stopped early?" -> "ASK before editing after a stop signal" [label="yes"];
"Stopped early?" -> "Apply agreed changes; leave undiscussed requirements alone" [label="no"];
"ASK before editing after a stop signal" -> "Apply agreed changes; leave undiscussed requirements alone";
"Apply agreed changes; leave undiscussed requirements alone" -> "Unresolved issues, or user asked for a report?";
"Unresolved issues, or user asked for a report?" -> "Write paad/pushback-reviews/<date>-<spec>-pushback.md" [label="yes"];
"Unresolved issues, or user asked for a report?" -> "Skip the report — conversation and diff carry it" [label="no"];
"Write paad/pushback-reviews/<date>-<spec>-pushback.md" -> "List every file written or updated";
"Skip the report — conversation and diff carry it" -> "List every file written or updated";
"List every file written or updated" -> "Done";
}Resolve the document to review in this order:
$ARGUMENTS contains a file path → use that file
Conversation history contains a spec/plan/design (from brainstorming, plan writing, or the user describing what they want) → confirm with user: "I see the design we just discussed — should I review that?"
Scan common locations → look for recently modified files in:
docs/plans/, docs/specs/, and files named requirements.md, PRD.md, spec.md, or similar in the repo rootCLAUDE.md, AGENTS.md, .cursorrules, .kiro/steering/, .github/copilot-instructions.mdpaad/*-reviews/, and equivalent report directoriesIf one obvious candidate, confirm. If multiple, present the list and ask.
Nothing found → ask: "What document should I review? Give me a file path, or describe what you want to build and I'll push back on that."
Skip this phase if the project is not a git repository.
Before analyzing the spec itself, check whether recent codebase changes conflict with what the spec assumes:
git log --oneline -50. Two weeks is the usual span of interest, but the limit is 50 commits, not a date — a document written eight months ago was invalidated by commits from eight months ago, and a date window would report it clean. Widen further if the document predates what 50 commits covers.This phase surfaces showstoppers early. A spec that assumes deleted infrastructure is wrong before the analysis even starts.
Before digging into individual requirements, check whether the spec has structural problems that should be addressed first.
Do the features in this spec serve different user goals or business objectives? If the spec bundles unrelated features — things that would naturally be separate PRs — flag it.
For each group of unrelated features:
If the user splits, continue reviewing the remaining spec. If they choose to review as-is, proceed — but note it as a scope concern.
Use heuristic signals to assess whether the spec is too large to implement safely:
Requirement count is not a signal — estimate the diff instead. A spec can list a dozen requirements that are all facets of one small change.
If large AND a meaningful split exists where each piece delivers independent value: suggest the split with a brief explanation of what each piece delivers on its own.
If large BUT the features are tightly interdependent: flag the size and explain why splitting isn't practical — describe the interdependencies that make the features inseparable. The author knows it's big but also knows the bigness is inherent, not accidental.
If not large: say nothing and move on to Phase 2.
Run cohesion before size. If unrelated features are found and the user agrees to split, the size problem may resolve itself.
Analyze the spec against these categories:
| Category | What to look for |
|---|---|
| Contradictions | Requirements that conflict with each other, or with the current codebase state |
| Feasibility | Requirements that are technically difficult or impossible given the codebase as it exists today — missing infrastructure, incompatible architecture, dependencies that don't support the requirement |
| Scope imbalance | Requirements wildly disproportionate in effort relative to the rest — one bullet point that's a 2-week project next to others that are 2-hour tasks |
| Omissions | Missing requirements that are implied or necessary given context — error handling, edge cases, migration paths, rollback plans, monitoring, permissions |
| Ambiguity | Requirements that could be interpreted multiple ways — vague success criteria, undefined terms, unclear scope boundaries |
| Security concerns | Requirements that introduce or ignore security risks — auth gaps, data exposure, injection surfaces, missing rate limits, privilege escalation |
Before presenting an issue, state it to yourself in this form:
If the spec ships as written, Y happens, because Z.
If you cannot fill both, drop the finding. "This could be clearer" with no Y is an observation. A Y with no Z is a guess. Neither is pushback, and a review made of them is why spec review gets called a rubber stamp.
Writing Z is not a formatting step — you cannot fill it without going to the code, and going to the code is what kills the findings that don't survive.
An omission is a legitimate finding when Z is a divergence you can name —
"the spec permits both A and B, they produce different <concrete thing>, and
nothing in the document selects between them." That is defensible even though
the code does not exist yet. "The spec should mention error handling" is not,
unless you can say what breaks without it.
A defect outside the spec is a finding only if it makes the spec's own deliverable unreachable. If the requirements describe a command, endpoint, or path that does not exist and this spec does not create it, the document cannot be implemented as written — that is pushback. A defect that merely coexists with the spec may be a real bug, but it belongs in a one-line mention at the end, not in the severity ranking.
Missing test coverage is a finding only when you can name what ships broken.
"Requirement X has no test" is a risk. "This work edits _render, no test
executes cli.py, so a spacing change ships green" is a finding — it names the
path the work touches and what passes review anyway.
Name what would change your mind. Almost every finding's severity turns partly on something not in the repository — a roadmap item, a deadline, who consumes this API, what operators actually want. When a specific off-disk fact would move a finding's severity or dissolve it, say so in the same breath: name the fact, and say what the finding becomes if it goes the other way. Name it concretely enough to act on — "it depends on your priorities" is not one. If nothing off-disk would move it, say the finding is unconditional and stand behind it.
Say how many candidates you dropped and why. A review that reports two findings and five discards is visibly not a rubber stamp; one that reports two findings and says nothing about the rest looks like it stopped early.
A response is not a decision. An issue stays open until the user picks an option, explicitly defers it, or stops the review. A question, an objection, a counter-example, or a new consideration is the user thinking about this issue — answer it, then put the same options back, revised if your answer changed them. If their input dissolves the issue or reshapes it into a different one, say so and re-put it; that is still not the next issue.
Presenting the next issue is what tells the user the current one is closed, so never advance intending to chase the answer later. "Still need your call on [2]" appended after presenting [3] is this failure, not a mitigation for it — it splits their attention across two open issues and buries the one they were actually working on.
After all issues are addressed (or user says "good enough" / "stop"):
If the spec came from conversation history and was never saved to a file, settle that first. Ask "The spec isn't saved to a file yet. Where should I write it?" and suggest a path that fits the project (docs/plans/, docs/specs/). The question below assumes there is a file to update.
Then ask: "Would you like me to update the spec directly, write a separate pushback report, or both?"
Default to no report. If every issue was resolved and the spec was updated, the conversation and the spec diff already carry the outcome — a report restates what the user just watched happen. Write one when the user asks for it, or when issues went undiscussed. Findings the user stopped before reaching exist nowhere else once the session ends; that is what the file is for.
Write to paad/pushback-reviews/<YYYY-MM-DD>-<spec-name>-pushback.md.
Create the paad/pushback-reviews/ directory if it doesn't exist.
Report template:
# Pushback Review: <spec name or filename>
- **Date:** YYYY-MM-DD
- **Spec:** <file path or "conversation history">
- **Commit:** <current HEAD sha, or "N/A">
## Source Control Conflicts
<conflicts found, or "None — no conflicts with recent changes.">
## Issues Reviewed
### [1] <title>
- **Category:** <contradictions / feasibility / scope imbalance / omissions / ambiguity / security>
- **Severity:** <critical / serious / moderate / minor>
- **Issue:** <what's wrong>
- **Resolution:** <what the user decided>
(Repeat for each issue discussed.)
## Unresolved Issues
Issues not yet discussed (user stopped early). Listed for future reference.
### [N] <title>
- **Category:** ...
- **Severity:** ...
- **Issue:** ...
- **Suggested options:** ...
(Omit section if all issues were addressed.)
## Summary
- **Issues found:** N (plus K candidates dropped for lacking a defensible consequence)
- **Unresolved:** N - M <!-- omit this line entirely when nothing is unresolved -->
- **Status:** <one or two sentences: what has to happen before implementation
starts, and what can ride along. Not a verdict word.>End the session with the file list, always — this skill edits the developer's own spec, and an edit nobody notices is worse than no edit. One line per path, each marked new or updated, covering the spec if it was updated and the report if one was written:
Files written or updated:
updated docs/specs/checkout-prd.md
new paad/pushback-reviews/2026-08-01-checkout-pushback.mdSay it even when only one file changed, and even when the user watched you change it.
These patterns produce pushback that reads well and changes nothing. Avoid them:
| Mistake | What to do instead |
|---|---|
| Critiquing the spec without checking the codebase | Phase 1 is first for a reason. "This contradicts what already shipped" outranks every stylistic concern. |
| Listing every issue at once | One at a time, most impactful first. A wall of twenty findings gets skimmed and dismissed. |
| Treating any reply as an answer | A question is not a decision. Answer it, re-put the same options, stay on the issue. Advancing and adding "still need your call on [2]" is the failure, not a fix for it. |
| Raising a problem without options | Every issue needs concrete options, best to worst, with a recommendation. "This is ambiguous" is an observation, not pushback. |
| Raising an issue you can't state as "Y happens, because Z" | Drop it and count it as a discard. A finding you can't defend costs the user more to read than it costs you to cut. |
| Filing a bug in the surrounding code as a spec finding | One line at the end. It gets a ranked slot only when it makes the spec's own deliverable unreachable. |
| Writing a report nobody asked for after resolving everything | The conversation and the spec diff already say it. Reports exist to carry what the user never saw. |
| Editing the spec after "good enough" | The stop signal ends the review. Confirm before you touch their file. |
| Suggesting a split because the spec is long | Length isn't the test — independent value is. Split only when each piece ships something useful on its own. |
| Mistaking sequenced work for bundled features | Phases of one coherent feature belong together. Cohesion is about whether they'd be separate PRs, not whether they're separate steps. |
| Softening findings to seem agreeable | The skill's whole value is saying what a reviewer would say before the code exists. Hedged criticism is worse than none. |
| Manufacturing issues to fill all six categories | Not every spec has security concerns or contradictions. Say a category is clean and move on. |
| Continuing past "good enough" | That's the stop signal. Keep going and the user stops reading. |
| Rewriting the spec instead of critiquing it | Present issues and let the user decide. Silent rewrites replace their judgment with yours. |
© Ovid, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in plugins/paad/skills/pushback of Ovid/paad.
Open the folder on GitHubat commit 1c48121
Pushback next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Pushback this skillOvid/paad | 131 | — | ~5.9k | Automated safety check: Pass | MIT | |
| CCPM Project Managementautomazeio/ccpm | 8.4k | — | ~1.1k | Automated safety check: Pass | MIT | |
| Ralph Tui Create Beadssubsy/ralph-tui | 2.5k | 1 repos | ~2.6k | Automated safety check: Pass | MIT | |
| Trellis Brainstormanjiemo/SunnyBeach | 178 | 7 repos | ~4k | Automated safety check: Pass | Apache-2.0 | |
| Adversarial Speczscole/adversarial-spec | 556 | 1 repos | ~8.3k | Automated safety check: Notes | MIT | |
| Ralph Tui Create Beads Rustsubsy/ralph-tui | 2.5k | 1 repos | ~2.8k | Automated safety check: Pass | MIT |
automazeio/ccpm
Runs a spec-driven workflow from PRD to epic to GitHub issues to parallel agents, with status, standup and blocked-work reports from bundled scripts.
subsy/ralph-tui
Convert PRDs to beads for ralph-tui execution. An agent skill from subsy/ralph-tui.
anjiemo/SunnyBeach
Guides collaborative requirements discovery before implementation.
zscole/adversarial-spec
Iteratively refine a product spec by debating with multiple LLMs (GPT, Gemini, Grok, etc.) until all models agree.
subsy/ralph-tui
Convert PRDs to beads for ralph-tui execution using beads-rust (br CLI).
ywwynm/EverythingDone
Break a plan, spec, or PRD into independently-grabbable issues on the project issue tracker using tracer-bullet vertical slices.
Ovid/paad
A skill your agent uses when reviewing current branch for bugs before pushing or merging, when wanting a thorough multi-agent review of local changes, or when preparing work for human review.
Ovid/paad
EXPERIMENTAL. An agent skill from Ovid/paad.
Ovid/paad
A skill your agent uses when verifying that requirements/specs/PRDs and their implementation plans match — before starting work, after a spec or plan update, or when suspecting coverage gaps, scope…
Ovid/paad
EXPERIMENTAL. An agent skill from Ovid/paad.
Ovid/paad
EXPERIMENTAL. An agent skill from Ovid/paad.
Ovid/paad
A skill your agent uses when creating or updating a Makefile for a project, especially when standard targets (build, test, lint, format, etc.) are missing or when modifying targets that may already…
Categories
A skill your agent uses when reviewing a spec, PRD, requirements doc, or design plan before implementation begins — especially when the doc feels too big, bundles unrelated features, may contradict…. Pushback is an agent skill from Ovid/paad. Use when reviewing a spec, PRD, requirements doc, or design plan before implementation begins — especially when the doc feels too big, bundles unrelated features, may contradict the current codebase, or seems vague, infeasible, or thin on security and error handling.
Pushback fits situations like: reviewing a spec; requirements doc; design plan before implementation begins — especially when the doc feels too big; bundles unrelated features.
Run `npx skills add Ovid/paad --skill pushback -a claude-code`. Or copy the skill folder (plugins/paad/skills/pushback in Ovid/paad) into .claude/skills/pushback in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Ovid/paad --skill pushback -a codex`. Or copy the skill folder (plugins/paad/skills/pushback in Ovid/paad) into .agents/skills/pushback in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Ovid/paad --skill pushback -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pushback, .gemini/skills/pushback, .github/skills/pushback and .opencode/skills/pushback in your project.
Going by SKILL.md and its folder, Pushback needs the command-line tools its instructions call (git).
SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Pushback is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.9k tokens (SKILL.md is roughly 23k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Pushback: CCPM Project Management (automazeio/ccpm, 8.4k stars), Ralph Tui Create Beads (subsy/ralph-tui, 2.5k stars), Trellis Brainstorm (anjiemo/SunnyBeach, 178 stars) and Adversarial Spec (zscole/adversarial-spec, 556 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Ovid (a GitHub user) maintains it in Ovid/paad, which has 131 GitHub stars. The repository holds 16 skills in this directory. The repository was last updated on October 6, 2026.
Source: Ovid/paad on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.