Size the evidence to what can go wrong.
Micro keeps local work light. Standard covers ordinary engineering. Named trust, data, concurrency, installer, and irreversible risks select the full Critical path.
Portable agent delivery · MIT · v0.7.0
A portable delivery workflow for coding agents: proportional proof for each change, persistent engagement state for work that must continue, and no hooks or background runtime.
For Codex, Claude Code, Antigravity, Gemini CLI, and compatible Agent Skills hosts. Requires Git and Python 3.
MERGE(unit) is a checkpoint. The recorded engagement—not the last green signal—decides whether work may stop.
The problem
A model's attention to your standards fades across a long session and dies outright at context compaction. Nothing pushes back. The work still looks finished — tests that were never seen failing, a claim nobody tried to break, a gate quietly skipped because the session was long and the change looked small.
Hooks fight that with per-turn injection, but hooks are host-specific and don't travel. This bundle takes the other route: it moves the discipline into two places that don't decay — the host's own instructions file, which remains in session context and reloads at host-defined boundaries, and a file on disk, which survives compaction and session death.
The result is portable. The same workflow runs in Codex, Claude Code, and Antigravity, with no hooks, daemon, or host-specific runtime to maintain. Python 3 is required for the bundled CLI.
Two decisions, kept separate
Risk lane and engagement mode answer different questions. Conflating them is how a tiny task becomes process-heavy—or a large program ends after its first green pull request.
Micro keeps local work light. Standard covers ordinary engineering. Named trust, data, concurrency, installer, and irreversible risks select the full Critical path.
A passing suite, finished worker, or merged PR closes at most one unit. Finite and continuous work reconciles the remaining commitments before another stop is valid.
How it holds
Each tier applies a different amount of force. Only the third can actually refuse.
The full workflow — planning, test-first build, adversarial verification, five review modes plus an advancement gate, merge and release gates, and cross-session continuity. Invoked knowledge: it works when it's called.
Force: none — invoked knowledgeA marker-fenced block the installer writes into CLAUDE.md, AGENTS.md or GEMINI.md. The instructions remain in session context and reload at host-defined boundaries; Claude Code also re-injects root CLAUDE.md after compaction. Your edits outside the markers survive upgrades.
A dependency-free Python CLI for cross-session work, handoffs, parallel agents and external waits. It pins whether the engagement is one unit, a finite program, continuous development, or a release workflow. Continuous work stays active when its current queue empties.
Force: durable mode-aware state transitionsBe precise about what the gate is. rigor-goals records that verification evidence was named — it does not run your command or judge whether the result is true. Its closure check is structural, not independent proof. Worker-local DONE and coordinator reconciliation remain model-behavior contracts, not CI-enforced host behavior.
The loop
Micro work is inspect, change, one check and a receipt. Standard is the default for ordinary bugs and features, with RED/GREEN where applicable and focused review. Named risks — auth, money, persisted data, security, concurrency, installers, irreversible work and broad public contracts — select Critical and its full independent proof path.
Each gate is also a standalone entry point, so you can run one without the others.
Version 0.7.0 adds a deterministic verification-integrity receipt: when tampercheck is present, the Standard and Critical verification reports and the merge gate run it against the unit's diff and cite its verbatim output — exit 0 receipts that the change did not weaken the tests themselves; findings are fixed or justified in-diff, and an absent tool is disclosed rather than implied green. The skills remain hook-free and fully functional without it.
Version 0.6.0 added optional, text-first BRAINSTORM discovery before PLAN when the product problem or a consequential design choice is genuinely unresolved. Explicit invocation always activates BRAINSTORM, even when the brief is decision-complete. Without explicit invocation, a decision-complete brief skips it, and its approval authorizes planning—not building.
on red → return to the gate that owns the failure. Never route around a selected gate.
The lanes
Five review modes plus the GauntletGate advancement gate. Each is invocable on its own.
The default. A scoped diff, a slice, an end-of-unit read — one tight pass across correctness, docs, tests and runtime behavior.
$dev-rigor-stack-lite-audit-liteFive roles — principal engineer, UI/UX, technical writer, test engineer, QA — with severity-ranked findings and a punch list. For high-blast units.
$dev-rigor-stack-lite-audit-teamBlack-box newcomer truth: the installer lifecycle, every inventoried screen, control and state, then the white-box wiring behind them.
$dev-rigor-stack-lite-walkthroughYour public surfaces as a stranger meets them — every page read as rendered, every link followed and counted, published checksums verified.
$dev-rigor-stack-lite-visitor-auditAdversarial verification. Skeptics try to refute the claim; it stands only if they can't.
$dev-rigor-stack-lite-proof-gateThe release-altitude advancement gate, in lite, walkthrough and full lanes, driving unresolved release blockers to zero.
$dev-rigor-stack-lite-gauntletgateQuick start
Requirements: Git, Python 3, and either Windows PowerShell 5.1+ or a POSIX shell.
Pin to a tag so the bundle you install is the bundle that was tested.
git clone --branch v0.7.0 --depth 1 https://github.com/scottconverse/dev-rigor-stack-lite.git $Installer = (Resolve-Path ".\dev-rigor-stack-lite").Path
git clone --branch v0.7.0 --depth 1 https://github.com/scottconverse/dev-rigor-stack-lite.git
INSTALLER=$(cd dev-rigor-stack-lite && pwd -P)
Pick user scope or project scope. For a project install, change to the project first and invoke the pinned installer by its absolute path; relative targets then resolve in that project.
# User-scoped Codex install powershell -NoProfile -ExecutionPolicy Bypass -File "$Installer\install.ps1" -Target "$HOME\.codex\skills" # Project-scoped Claude install Set-Location "C:\path\to\your-project" powershell -NoProfile -ExecutionPolicy Bypass -File "$Installer\install.ps1" -Target ".claude\skills"
-ExecutionPolicy Bypass applies only to that one child process. It changes nothing for your user or machine.
# User-scoped Codex install "$INSTALLER/install.sh" "$HOME/.codex/skills" # Project-scoped Claude install cd /path/to/your-project "$INSTALLER/install.sh" .claude/skills
Run this against the pinned source. It confirms all 20 skills, matching frontmatter, a hook-free manifest, and the anchor.
# PowerShell python "$Installer\tools\validate_bundle.py" # Bash python3 "$INSTALLER/tools/validate_bundle.py" → BUNDLE_VALID: 20 skills, hook-free manifest, matching frontmatter, anchor ok, goals gate ok
Use this only across sessions, handoffs, parallel agents or external waits. Run it from the target project root so ./.rigor/ belongs to that project.
python .claude\tools\rigor_goals.py create --brief "take over development" --mode continuous_development --terminal "owner pauses, cancels, or changes mode" --goal "api::add the endpoint" python .claude\tools\rigor_goals.py next python .claude\tools\rigor_goals.py checkpoint --id G001 --status complete --evidence "test_api.py: 4 passed" --verify-cmd "pytest" --verify-evidence "4 passed"
python3 .claude/tools/rigor_goals.py create --brief "take over development" --mode continuous_development --terminal "owner pauses, cancels, or changes mode" --goal "api::add the endpoint" python3 .claude/tools/rigor_goals.py next python3 .claude/tools/rigor_goals.py checkpoint --id G001 --status complete --evidence "test_api.py: 4 passed" --verify-cmd "pytest" --verify-evidence "4 passed"
| Host | Skills target | Anchor file |
|---|---|---|
| OpenAI Codex | ~/.codex/skills | ~/.codex/AGENTS.md |
| Claude Code | .claude/skills or ~/.claude/skills | project CLAUDE.md or ~/.claude/CLAUDE.md |
| Google Antigravity | .agents/skills or ~/.gemini/config/skills | project AGENTS.md or ~/.gemini/config/AGENTS.md |
| Gemini CLI | .gemini/skills or ~/.gemini/skills | project GEMINI.md or ~/.gemini/GEMINI.md |
| Other Agent Skills hosts | any skills directory | AGENTS.md beside the target |
The anchor and rigor-goals install by default — they're part of the stack, not extras.
An off-switch exists (--no-anchor / --no-goals) and belongs to the human owner alone.
Evidence contracts
Each stage emits or consumes structured artifacts, so a handoff can't quietly lose what it was proven against. Schema 1.1 records whether the tree was clean, a hash and artifact for any uncommitted delta, dependency lockfile hashes, and the seeds of randomized runs.
A receiving stage verifies that identity and refuses stale or mismatched evidence. It may add evidence; it may not rewrite the record upstream of it.
This run-manifest schema 1.1 identifies stage evidence; it is separate from
./.rigor/goals.json plan schema 2, which stores engagement mode and queue state.
Legacy plan schema 1 migrates once to a conservative finite program; unknown schemas or modes
are refused. CLI tests and the bundle validator exercise those transitions. Worker-local
DONE and coordinator reconcile behavior remain advisory scenario contracts because
Lite has no host-level behavior harness.
The stack also consumes a deterministic-detector harness when a repository carries one — proportionally, so a typo doesn't summon a mutation run — and cites tampercheck receipts when that tool is on PATH. Everything here operates alone, or installs together with both — pinned, never mixed — as layer 1 of rigor-suite.
{
"schema_version": "1.1",
"stage": "build",
"commit": "609f413…",
"worktree_state": "clean",
"dirty_diff_sha256": null,
"dirty_diff_evidence": null,
"lockfiles": [
{ "path": "…", "sha256": "…" }
],
"seeds": [
{ "context": "randomized-suite",
"seed": "…", "evidence": "…" }
]
}
Existing 1.0 manifests stay valid — 1.1 is additive, and old evidence is never upgraded by inference.
Shipped in v0.5.0
The per-unit loop ends at MERGE. A continuing engagement does not. Version 0.5.0 records the engagement mode separately, so green CI, a passing suite, a finished worker, and a merged pull request complete at most one unit.
rigor-goals persists that mode, the terminal predicate, the queue, the selected
next unit, and attributable evidence receipts. In continuous and release modes, an empty
known queue stays visibly active. The coordinator must reconcile accepted scope, findings,
workers, pull requests, and waits before selecting the next authorized unit or naming a
valid stop.
This behavior shipped through PR #20. The tagged source and its 39-test goals suite passed CI on Windows, macOS, and Linux.
# for finite_program and continuous_development MERGE(unit) → RECONCILE queue, workers, waits, findings → SELECT NEXT next authorized unit → PLAN … MERGE the loop continues valid stops owner pause · owner/external blocker · NEEDS_SCOPE (awaiting direction) never a stop merged PR · green CI · passing suite · finished worker · polished receipt
single_unit — one bounded deliverable; may complete when accepted.finite_program — a declared sequence; completes when every outcome reconciles.continuous_development — "take over, keep going"; only the owner ends it.release_workflow — candidate/publish intent, governed by the release overlay.Status & limits
Version v0.7.0 under MIT. The installer's fresh, refusal, forced, upgrade, and removal paths are exercised in CI on Windows, Ubuntu and macOS, and the documented Windows command is executed verbatim from a fresh Restricted-policy process on every push. These are the limits worth knowing before you adopt it.
This edition has no lifecycle hooks, background runtime, or private ledger. Enforcement is the active agent following the skills, plus the anchor and the goal gate. The repository does not claim mechanical enforcement.
CI proves the bundle installs correctly on Windows, macOS and Linux. It cannot prove a given host loads the skills or that a model follows them — tool availability and adherence differ by host and model. Missing capabilities are reported as blocked or unverifiable rather than passed.
Any process that can delete files in the workspace can destroy ./.rigor/. Replacing a plan is loud, but if agents share a checkout, commit the directory or back it up.
Concurrent tasks in a single checkout will fight over ./.rigor/. Use separate worktrees for parallel work.
Clone the pinned tag, run one installer command, and let named risk select the amount of process the work needs.