Agent skill + CLI for multi-agent adversarial review of plans & specs before you execute them. Runs on the Claude Code / Codex subscriptions you already have — no API keys.
SaferSkills independently audited challenge-plans (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Harden a plan/spec in multi-agent adversarial review before execution, to reduce rework. Slots into writing-plans → challenge-plans → executing-plans.
--type by what the artifact is:--type spec--type plangit diff) → --type diff--type decision. Audits the choice itself: skipped alternatives, weak evidence, sunk-cost reasoning, irreversibility.weigh-options (deliberation/voting), not this. (--type decision is the opposite: one option already chosen, audited after the fact.)# Installed from PyPI (pip install challenge-plans) — the console command is available directly.
# Already installed but on an old version? update: pip install -U challenge-plans (pipx: pipx upgrade; uvx: append @latest).
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|decision. diff reviews a raw git diff; `plan` reviews 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; `decision` audits a choice already made (ignored alternative / weak evidence / unstated assumption / sunk-cost bias / unaddressed downside / irreversibility / no review trigger / misframed problem) with alternatives·evidence·reversibility-cost lenses. All run the same verdict pipeline.--profile fast|standard|deep, --sink stdout|markdown, --enforce (request_changes/inconclusive/schema_invalid exit non-zero; discuss/approve exit 0); --strict (hard gate — only a clean approve passes); default advisory exits 0.--lang <code> (default en): 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-15 anchors stay stable. Equivalent to exporting CHALLENGE_PLANS_LANG.[sev✓] = cross-family Verifier-confirmed, may hard-gate; [sev?] = unverified, advisory only.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:
doctor prints (install it, or claude → /login, or sign in to codex).doctor already prints the per-backend fix plus this guidance; surface it to the user rather than failing silently.
BYO backends (optional). The user can register extra Anthropic-compatible endpoints (GLM/Kimi/a proxy) via env: CP_BYO_<n>_BASE_URL + CP_BYO_<n>_FAMILY + CP_BYO_<n>_TOKEN (all required; _MODEL optional; _1/_2/… for several). Two caveats to relay honestly: (1) the declared family is user-declared, not verified — confirmations through it render ✓(user-declared family) and diversity built on it is flagged, so never present a BYO pairing as the verified builtin claude+gpt cross-family guarantee; (2) the token goes only into that backend's subprocess and never appears in any output — but advise the user to set it via a secrets manager / leading-space export rather than plain shell history. A backend missing one of the three vars is skipped with a warning (never a fallback to subscription auth).
A backend CLI that is logged in but out of date is a distinct failure from "logged out": login status still passes, but a real call is rejected server-side (observed: codex 400 "the model requires a newer version of Codex"), so a voter reports exit_nonzero and the run silently drops to a single family. A run can't cheaply tell this apart mid-flight — but `doctor` now can: it sends a real minimal call per backend, so a too-old codex reads unsupported_version → update Codex CLI: npm i -g @openai/codex@latest instead of a false ready.
So when a run errors, comes back single-family unexpectedly, or a voter shows exit_nonzero: run `doctor` and update any `unsupported_version` backend before retrying — don't just report the error to the user. Updating the backend CLI (npm i -g @openai/codex@latest, or update Claude Code) is part of the standard fix path, not a dead end to hand back.
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.
writing-plans → executing-plans): after writing-plans saves a plan file (default docs/superpowers/plans/<date>-<feature>.md — read the actual path), run challenge-plans run <plan> --type spec before executing-plans. It occupies the same pre-execution review seam as superpowers' built-in plan-document-reviewer, but as a multi-CLI cross-family pass. Route surviving objections back into the plan, then execute.--type from the routing signals above.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.