challenge-plans
Harden a plan/spec in multi-agent adversarial review before execution, to reduce rework. Slots into writing-plans → challenge-plans → executing-plans.
When to use (routing signals)
- Input is a single drafted artifact (spec/plan/diff/design doc/adr) + intent "review / find flaws / can this execute / harden / QA" → use this skill.
- An agent has finished something and is about to ask the user to decide or QA → run this first and present the cross-review recommendation.
- Input is ≥2 options to choose from → use the sibling
weigh-options(deliberation/voting), not this.
Run
# Installed from PyPI (pip install challenge-plans) — the console command is available directly:
challenge-plans doctor # check adapter login state first
challenge-plans run <artifact> --type spec --profile standard --sink markdown # review a plan/spec
challenge-plans run <artifact> --type spec --profile standard --sink markdown --lang zh # localized output
# code-diff gate: git diff > change.diff && challenge-plans run change.diff --type diff --sink markdown
# From a source checkout instead (not pip-installed): PYTHONPATH=src python3 -m challenge_plans.cli <args>
--type spec|diff|plan(decisionrubric still pending — exits 2 by design).diffreviews a rawgit diff;planreviews ANY plan (a trip, a launch, a hire — not just dev specs) with domain-neutral failure types (missing success criteria / ignored constraint / unaddressed risk / sequencing gap / unstated assumption / goal misalignment / irreversibility / no fallback) and feasibility·risk·goal-alignment lenses. All run the same verdict pipeline.--profile fast|standard|deep,--sink stdout|markdown,--enforce(non-approve verdicts exit non-zero; default advisory exits 0).--lang <code>(defaulten): write the review prose in the user's language, e.g.--lang zh. Set this from the user's language so the whole review comes back localized; JSON keys / enums /L12-15anchors stay stable. Equivalent to exportingCHALLENGE_PLANS_LANG.- Output: a 6-state verdict + surviving objections.
[sev✓]= cross-family Verifier-confirmed, may hard-gate;[sev?]= unverified, advisory only.
If no backend is ready
challenge-plans needs at least one logged-in subscription CLI (it has no model of its own and uses no API keys). If doctor shows nothing ready, don't retry blindly — ask the user, then route:
- Has a Claude or ChatGPT subscription, but the CLI is missing / logged out → walk them through the exact step
doctorprints (install it, orclaude→/login, or sign in tocodex). - No subscription yet but wants one → point them to subscribe (Claude Pro/Max or ChatGPT), then install + log in the CLI.
- No subscription and doesn't want one → explain challenge-plans cannot run without one, and stop — don't loop.
doctor already prints the per-backend fix plus this guidance; surface it to the user rather than failing silently.
Presenting to the user
Surface the verdict + surviving objections (✓ verified vs ? unverified) + missing required fields as "my cross-review recommendation", then let the user decide — rather than handing them a bare decision. See README.md for the full picture.
Composing with planning skills
- superpowers (
writing-plans → executing-plans): afterwriting-planssaves a plan file (defaultdocs/superpowers/plans/<date>-<feature>.md— read the actual path), runchallenge-plans run <plan> --type specbeforeexecuting-plans. It occupies the same pre-execution review seam as superpowers' built-inplan-document-reviewer, but as a multi-CLI cross-family pass. Route surviving objections back into the plan, then execute. - grill-me (mattpocock/skills): complementary and earlier — it interactively aligns the user while the plan forms (no file output). Run challenge-plans after a written plan/PRD exists.
- Nothing auto-invokes challenge-plans; the calling agent wires it into the seam.
--type plan/decisionrubrics are pending — use--type specfor plan-like prose today.