Portable agent delivery · MIT · v0.7.0

Rigor for the unit. Continuity for the work.

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.

engagement controlactive
pinned mode continuous_development
G007Merge accepted unitcomplete
reconcileFindings, workers, waits, scoperequired

MERGE(unit) is a checkpoint. The recorded engagement—not the last green signal—decides whether work may stop.

Interface rendering of the v0.5.0 state model—not a product screenshot.
20 workflow skills 39 rigor-goals tests 0 third-party runtime packages No hooks or daemon Windows · macOS · Linux CI MIT

The problem

Skills alone are advice, and advice decays.

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

How much proof? And are we actually done?

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.

Per unit · risk lane

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.

MicroStandardCritical
Across units · engagement mode

Pin the terminal before completion-shaped signals arrive.

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.

single_unitfinite_program continuous_developmentrelease_workflow

How it holds

Three tiers, one of which is a program.

Each tier applies a different amount of force. Only the third can actually refuse.

1

The 20 skills

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 knowledge
2

The anchor block

A 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.

Force: a persistent reminder
3

The rigor-goals gate

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 transitions

Be 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

Routine work should not pay the Critical-work tax.

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.

Every code deliverable ends with a receipt
proved: 39 rigor-goals tests pass; BUNDLE_VALID
lane: Standard — affected checks and focused review
EVIDENCE
  • "Wrote it" is not "ran it" is not "checked it's correct."
  • A test never seen failing is not a test.
  • A check that fails twice gets reported, not silently retried.
  • Passing a gate proves readiness — it never grants permission to merge or publish.
gate 1PLANTrace the code. Define acceptance. Name the risk.
gate 2BUILDWitness applicable RED, then make the smallest change GREEN.
gate 3VERIFYTry to refute the claim at the layer where it matters.
gate 4REVIEWUse a focused or independent lane selected by risk.
gate 5MERGEA unit checkpoint—not automatically the engagement exit.

on red → return to the gate that owns the failure. Never route around a selected gate.

For finite and continuous work: MERGE → RECONCILE → SELECT NEXT UNIT.

The lanes

Review depth you choose on purpose.

Five review modes plus the GauntletGate advancement gate. Each is invocable on its own.

Quick audit

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-lite

Audit team

Five 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-team

Walkthrough

Black-box newcomer truth: the installer lifecycle, every inventoried screen, control and state, then the white-box wiring behind them.

$dev-rigor-stack-lite-walkthrough

Visitor audit

Your 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-audit

Proof gate

Adversarial verification. Skeptics try to refute the claim; it stands only if they can't.

$dev-rigor-stack-lite-proof-gate

GauntletGate

The release-altitude advancement gate, in lite, walkthrough and full lanes, driving unresolved release blockers to zero.

$dev-rigor-stack-lite-gauntletgate

Quick start

Installed and gating in about a minute.

Requirements: Git, Python 3, and either Windows PowerShell 5.1+ or a POSIX shell.

Get the pinned release

Pin to a tag so the bundle you install is the bundle that was tested.

powershell
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
bash
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)

Install into your host

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.

powershell
# 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.

bash
# User-scoped Codex install
"$INSTALLER/install.sh" "$HOME/.codex/skills"

# Project-scoped Claude install
cd /path/to/your-project
"$INSTALLER/install.sh" .claude/skills

Verify the bundle

Run this against the pinned source. It confirms all 20 skills, matching frontmatter, a hook-free manifest, and the anchor.

terminal
# 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

Open a continuity plan

Use this only across sessions, handoffs, parallel agents or external waits. Run it from the target project root so ./.rigor/ belongs to that project.

powershell
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"
bash
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"
Install targets by host
HostSkills targetAnchor file
OpenAI Codex~/.codex/skills~/.codex/AGENTS.md
Claude Code.claude/skills or ~/.claude/skillsproject CLAUDE.md or ~/.claude/CLAUDE.md
Google Antigravity.agents/skills or ~/.gemini/config/skillsproject AGENTS.md or ~/.gemini/config/AGENTS.md
Gemini CLI.gemini/skills or ~/.gemini/skillsproject GEMINI.md or ~/.gemini/GEMINI.md
Other Agent Skills hostsany skills directoryAGENTS.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

Evidence that names exactly what was tested.

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.

run-manifest.json
{
  "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

A green merge is a checkpoint, not an exit.

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.

engagement continuation — v0.5.0
# 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

Actively developed, and honest about its edges.

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.

Instructional, not mechanical

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.

Adherence varies by host

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.

The plan is a file, not a fortress

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.

One plan per working tree

Concurrent tasks in a single checkout will fight over ./.rigor/. Use separate worktrees for parallel work.

Put a gate between your agent and "done".

Clone the pinned tag, run one installer command, and let named risk select the amount of process the work needs.