Status (2026-07-23, v0.13 panel focus): focus is now an explicit, always-reachable two-panel model.
h/l(arrows too) move focus between the pipeline sidebar and the tab panel on every tab; a singlepipeline_focused()predicate feeds navigation, Enter, the sidebar's bright/dim cue, and which-key, so behavior and rendering cannot disagree. The spec/plan chat gained a sidebar mode:alt+←/alt+hunfocus the input keeping draft and caret (hardcoded emergency escapes that survive[keys]rebinds, tolerant of caps lock and extra modifier bits), j/k drive the pipeline - or scroll the transcript below the 100-col threshold, an invisible panel is never driven -l/sreturn to typing, Esc semantics are unchanged, and an accidental close stashes the draft with its target for reopen. Cross-model dual review confirmed and fixed a guard bypass (finding detail opening over a live chat via the stage-detail overlay) before release.Status (2026-07-14, completeness gate): green tests never mean "done". Plans now declare a
## Deliverableschecklist; a read-onlycoverageLLM-as-Judge stage checks each against the built tree and files a gap finding per miss (ritual ticks the satisfied boxes);ritual completeauto-drives the gaps to fixes in bounded, budget-capped rounds until the judge is clean (a recurring gap goes STUCK so the rest progress);ritual complete --checkis the CI gate (exit 0 only when coverage is clean AND check.sh green AND no confirmed finding open). This closes the "reward-hacking gap" where an agent satisfies the visible tests without the real intent. Detail below.Status (2026-07-14): v0.10 extended the findings-fix loop to dual-review CODE findings -
F/Aqueue them, one headless broad-edit run fixes them all, and the fix is verified against the global context by./check.shplus an independent read-only re-review before it is accepted. The gate is content-hash verified (never blind on code the repo does not track) and fails closed on a no-op change or a straygit commit; accept is per finding (the rest stay queued with the reviewer's reason, a regression fails the batch); the attempt is always left in the working tree - git is the undo, never an auto-revert. Earlier detail below.Status (v0.9.1, 2026-07-13): v0.6–v0.9 shipped the findings-triage cycle - finding detail overlay, claude-scoped plan fix (
F) with a mechanical gate + revert, triage → one-run batch apply with per-finding ANSWERS verdicts, recommendation chips +tone-touch triage, decoded failure reasons - and the in-TUI settings editor (S: effective values + source tags, comment-preserving project-config writes, transactional live-apply). v0.9.1 made the tests-red → implement handoff deterministic: ritual pins the tests-red conversation with--session-idand implement resumes it by id (dropping the fragile--continuethat could attach to an unrelated concurrent Claude session). Per-release detail lives in the README Roadmap.Status (v0.5.0, 2026-07-12): the evidence-backed quality batch shipped: mutation-kill gate (
mutants), secrets gate (gitleaks, blocking), invariants constitution, review memory (lessons), findings snippets,costsanalytics, fallback models + retry-with-model attempts, sandbox wrapper seam (srt), CodeRabbit third reviewer (dark), OTel GenAI semconv + IETF audit-trail export, chat undo stack + reattach, parallel-run notice, bench spread stats,skills diff. Deferred to a later cycle: steerable runs (Agent SDK),ritual mcp-server, SQLite/fuzzy history, chat fork-at-turn, container worktrees, OTLP receiver/waterfall, tree-sitter repo map.v0.4.0: everything below through v0.4 is SHIPPED, except the in-app version-check note (deferred;
ritual --versioncovers it) and full session-state persistence (the load-bearing part, daemonized runs + reattach, shipped; scroll/tab restoration was judged not worth the complexity). v0.3 added the interactive spec/plan chat (+ /spec skill). v0.4 added the whole-system batch:cleanwith tamper-evident chain checkpoints, the findings lifecycle (f/d/v + CI contract), chat undo/cancel/multiline/queue
- in-place section highlight, the vendored workbench (
init --skills), hard permission-scoping for doc-chat,ps/attach,doctor, the dark consensus tier, andpr-comment. This file is kept as the design rationale for what was built.
- v0.2: redaction, budgets, reports, CI mode, repro bundles + hash chain, model routing, worktrees, daemonized runs, offline mode, bench, palette, OTLP export
- v0.3: interactive spec/plan chat (
s) +/specskill +ritual chat - v0.4:
cleanwith chain checkpoints, findings lifecycle (f/d/v + CI contract), chat undo/cancel/queue/highlight, vendored workbench, hard permission-scoping,ps/attach,doctor, consensus tier,pr-comment - v0.5: mutation + secrets gates, invariants constitution, review memory, findings snippets,
costs, fallback + retry-with-model, sandbox wrapper, CodeRabbit third reviewer, OTel GenAI semconv + IETF audit-trail export, chat undo stack + reattach - v0.6: finding detail overlay (enter), claude-scoped plan fix (
F) with a mechanical section gate + one-key revert (u), plan-step routing foro/Q,[effort]routing - v0.7: findings triage → batch-apply - answer every finding (⚑A claude / ⚑M manual / dismiss+reason), ONE run fixes them all against one plan snapshot with a union gate + per-finding ANSWERS verdicts, atomic batch revert, ⚓ anchor-lost markers, Q manual pass
- v0.8: decoded failure reasons (budget knob / tool-lock denials /
ritual attachhint), right-aligned triage state chips + recommendation ghosts,tone-touch recommended triage, prose resolutions preserved as reasons, subdir-launch root canonicalization fix - v0.9: in-TUI settings editor (
S) - effective values + source tags over the practical knobs, comment-preserving project-config writes (toml_edit), transactional live-apply with byte-exact revert - v0.9.1–.5: deterministic tests-red → implement handoff - ritual pins the tests-red session (
--session-id) and implement resumes it by id, immune to concurrent Claude sessions; since interactive--resumecan't be handed an opening message, ritual copies a ready implement prompt to the system clipboard AND primary selection (wl-copy/xclip/xsel/pbcopy, OSC 52 fallback) and shows a launch overlay with no selectable text to drag over (bare--resumepicker fallback);atakeover works for interactive stages - v0.10: LLM batch-fix for dual-review code findings -
F/Aqueue confirmed code findings, one headless broad-edit run fixes them all, verified against the global context by./check.shplus an independent re-review of the diff; a passing fix marks the findings fixed and (v0.10.1) whether it passes OR fails the attempt is always left in your working tree - git is the undo, ritual never deletes the work, and a failure names why + offersritual attach <id>(newbudget_code_fix_usd) - v0.11 · verification hardening: the code-fix re-review is now content-hash verified so it is never blind on code the repo does not track (the homeserver case), and fails closed on a no-op change or a stray
git commit/reset; accept is per finding (each confirmed-resolved finding is marked fixed, the rest requeued with the reviewer's reason; a regression fails the whole batch); the re-reviewer is strictly read-only (no shell); plan-fix marks a finding fixed only if its own section changed; the plan section-confinement gate is heading-structured (closes a decoy-copy bypass);xcancels an in-flight fix; andc/stage-launch are blocked while a fix runs - v0.11 · completeness gate: green tests never mean "done". Plans declare a
## Deliverableschecklist (concrete, pass/fail, with acceptance criteria); a read-onlycoverageLLM-as-Judge stage checks each against the actually-built tree (present? substantive, not a stub? meets criterion?) and files a gap finding per miss; ritual ticks the satisfied boxes.ritual completeauto-drives the gaps to fixes in bounded, budget-capped rounds until the judge is clean (a recurring gap is marked STUCK so the rest progress);ritual complete --checkis the CI gate - exit 0 only when coverage is clean AND check.sh green AND no confirmed finding open. Closes the "reward-hacking gap" where an agent satisfies the visible tests without the real intent - v0.11 · whole-project audit + hardening sweep:
ritual audit- blind parallel review lanes per flow (+ an always-on global-overview lane for cross-flow contracts) adjudicated by an adversarial judge with per-finding Codex verdicts, landing standard findings; then a 45-defect fix program found by auditing ritual with itself: run results attributed to the spawn-time branch (feature-peeking is safe), writer-unique atomic writes + reload-merge-save everywhere, git gates fail closed, headlesscompleteenforces containment/anti-self-certification/no-commit,offlinebecame a real kill-switch, non-UTF8/PEM/stderr-safe streaming, PID-reuse-proof daemons with cancel metas, and a parallel-safe provenance chain (flock + linkage-order verify - proven live with 8 concurrent lanes) - v0.12 · architecture map:
ritual architectgenerates a fingerprint-stamped.ritual/architecture.mdthat grounds the plan stage and plan-review in the code that already exists (candidate-swap safe,.ritual-scoped staleness, auto-refresh atritual completedone, palette action + freshness surfacing everywhere advice lives) - v0.13 · panel focus: explicit two-panel focus model -
h/l(arrows too) move focus between the pipeline sidebar and the main panel on every tab; onepipeline_focused()predicate drives navigation, Enter, the sidebar's bright/dim selection cue, and which-key, so behavior and pixels can't disagree; the spec/plan chat gains a sidebar mode (alt+←/alt+hchord out of the input keeping draft + caret - hardcoded escapes that survive[keys]rebinds, caps-lock/extra-modifier tolerant;l/srefocus; Esc semantics unchanged; accidental closes stash the draft with its target), focus-left refuses while the sidebar isn't drawn (70/100-col thresholds snapshot-pinned at 69/70 and 99/100 cols), and paste is guarded by input focus - Deferred: steerable runs (Agent SDK),
ritual mcp-server, SQLite/fuzzy history, chat fork-at-turn, container worktrees, OTLP receiver + in-TUI span waterfall, tree-sitter repo map
Feature candidates researched July 2026 across three sources: what makes professional TUIs beloved (lazygit, k9s, yazi, zellij, atuin, etc.), what AI-coding orchestrators ship (Claude Squad, vibe-kanban, Plandex, aider, goose, etc.), and what research engineers / embedded technicians / ops actually need (MLflow, 21 CFR Part 11 audit trails, Zephyr HIL pipelines, gitleaks, etc.). Ranked by value ÷ effort for this codebase: most items build directly on existing pieces (raw run archives, run meta, check.sh abstraction, config layering).
- Secret redaction in archives runs a regex pass (gitleaks-style patterns: keys, tokens, PEM blocks) over every line before it hits
.ritual/runs/*.jsonl, findings, and reports. The audit trail must be safe to commit/share. (borrows: gitleaks --redact, CI secret masking; universal need) ritual report [feature|run-id]generates a Markdown run report: spec → plan → findings (accepted/unresolved) → diffs summary → costs/tokens → outcome;--pdfvia pandoc when available. PR descriptions for programmers, lab-notebook pages for researchers, postmortems for ops. (data already sits in runs/ + findings/ + state.json)- Budgets + spend alerts:
budget_daily_usdin config; status-bar shows today's spend (already computed), turns orange at 75%, red over; refuse new headless runs over budget with--forceescape. (borrows: Claude Enterprise spend limits; meta already has cost) --json+ exit codes everywhere:status --json,history --json,findings --json(exists); exit 1 when confirmed critical findings exist → scriptable gates. (borrows: k9s/atuin scriptability conventions)- Desktop notifications:
notify-sendon stage done / needs-attention / failed (user already runs a notify-done.sh hook; same pattern). (borrows: vibe-kanban "needs you" alerts) - Custom keybindings:
[keys]table in config.toml mapping action names to keys. (the single most universal pro-TUI feature) - Command palette (
:): fuzzy-invoke any action ("run plan-review", "open findings", "report"). (borrows: k9s command mode, Textual Ctrl+P)
- Parallel features in git worktrees:
ritual new --worktree <branch>creates a worktree; dashboard already keys state by branch-slug, so multiple features run stages concurrently without clobbering; sidebar lists all in-flight features with a "needs you" queue. (borrows: Claude Squad/Conductor, THE orchestrator feature of 2026) - CI mode runs
ritual run dual-review --ci: no TTY, JUnit-XML from findings (<testcase>per finding, failures = confirmed critical/major), artifacts uploadable; ships a GitHub Actions recipe. (borrows: GitHub Agentic Workflows, JUnit conventions) - Reproducibility bundle per run: meta gains git commit, dirty-diff hash, CLI versions (
claude --version,codex --version), skill file hashes, config snapshot;ritual repro <run-id>prints it and diffs against current env. (borrows: MLflow run snapshots; researchers' #1 ask) - One-key takeover (
a): attach interactively to a stalled/finished headless run via storedsession_id→ suspend TUI →claude --resume <id>. (plumbing exists; borrows: Nimbalyst session resume) - Per-stage model routing:
[models] plan_review = "opus"style config appending--modelper stage; cheap model for mechanical stages. (borrows: goose routing, Plandex model packs) - Hardware-in-the-loop check profile is a documented
check.shtemplate for embedded: build → flash → capture serial → assert (Zephyr Twister/pytest-style), plus acheck_timeout_secsconfig so a hung board can't wedge the pipeline. (technicians; check.sh abstraction already supports it, so this is a template + timeout) - Tamper-evident audit chain: each run meta stores
sha256(prev_meta_hash + jsonl_hash);ritual verify-logwalks the chain. Cheap now, impossible to retrofit honestly later. (borrows: 21 CFR Part 11 / WORM audit trails; researchers + regulated shops)
- Offline / local-model backend: the
RITUAL_CLAUDE_CMDseam already allows any CLI; add a tested recipe for an Ollama-backed agent CLI +offline = trueconfig that disables cloud preflights. (air-gapped labs, embedded shops) - Eval harness (
ritual bench): run the pipeline N times against fixture tasks (fake-agent or live), score findings-precision and check-pass-rate; compare model configs. (borrows: aider's benchmark culture) - Session persistence/resurrection: serialize dashboard state (stream buffer, scroll, tab) so
ritualreattaches to in-flight runs after a crash/reboot. (borrows: zellij resurrection; needs runs to be daemonized first, the largest architectural change) - Plugin hooks add lazygit-style custom commands: user-defined actions in config with template context (
{{run_id}},{{finding.file}}), output to popup/log. Stop short of a full Lua/WASM plugin system. (borrows: lazygit custom commands, k9s plugins) - OpenTelemetry export emits spans per stage/run for ops teams with existing observability. (ops; low solo value, last)
- Full multi-agent kanban GUI: ritual is a solo-power-user TUI; vibe-kanban exists.
- Voice input belongs in the OS/dictation layer (Wispr/Spokenly), not the TUI.
- E2E-encrypted sync: atuin-grade infra for marginal solo value.
- Open-ended agent-to-agent chat modes: contradicts the evidence the whole workflow is built on.
- Accessibility: state must never be color-only (icons already differ per state, so keep it that way); document
--ascii+NO_COLOR; avoid redraw storms. - A VHS
.tapedemo script for the README (charmbracelet/vhs): reproducible GIFs, CI-rendered. - In-app "new version" note when the installed binary is older than the repo tag.