Reviewable Artifacts
After an agent runs a workflow, the user needs durable packets and readable views that another person or agent can reopen without trusting chat memory.
Using Cautilus CLI packet outputs and the cautilus-agent skill, every workflow should leave machine-readable state and readable reports for later review.
Each subclaim below regenerates its packet or view live on every npm run lint:specs and asserts on the fresh output, instead of projecting a saved evidence bundle.
Governed by governed-by::Reviewable Artifacts and governed-by::Packet Freshness. Implemented by implemented-by::Evidence State And Review Artifacts, implemented-by::Reporting And Review Variants, and implemented-by::Active Run And Workspace Lifecycle.
A user or agent can reopen JSON packets as the audit source of truth.
Core command surfaces emit schema-versioned packets with state summaries, next branches, git state, validation state, and eval planning state. The checks below re-run those commands live and assert on the fresh stdout packets.
Resolve this repo's canonical claim proof-plan packet (kept fresh by claims:refresh:all).
jq -r '.inputPath' .cautilus/claims/status-summary.jsonShow the four packet surfaces emitted fresh from the current repo and canonical packet.
./bin/cautilus doctor status --repo-root . --format json | jq '{schemaVersion, mode}'
./bin/cautilus discover claims status --input ".cautilus/claims/evidenced-typed-runners.json" --format json | jq '{schemaVersion, candidateCount}'
./bin/cautilus discover claims validate --claims ".cautilus/claims/evidenced-typed-runners.json" --format json | jq '{schemaVersion, valid}'
./bin/cautilus evaluate claims plan --claims ".cautilus/claims/evidenced-typed-runners.json" --allow-stale-claims --format json | jq '{schemaVersion}'Agent orientation packet: next branches and git/claim state
| path | equals | includes | min_number |
|---|---|---|---|
schemaVersion | cautilus.agent_status.v1 | ||
mode | orientation | ||
notice | before running discovery, evaluation, review, improvement, edits, or commits | ||
nextBranches.length | 1 |
Claim status summary: state summary and git state
| path | equals | includes | min_number |
|---|---|---|---|
schemaVersion | cautilus.claim_status_summary.v1 | ||
candidateCount | 1 | ||
nonVerdictNotice | Discovery creates candidates | ||
gitStateSnapshotNotice | gitState is computed when this status packet is generated |
Claim validation report: validation state
| path | equals |
|---|---|
schemaVersion | cautilus.claim_validation_report.v1 |
valid | true |
Claim eval plan: eval planning state
| path | equals | includes |
|---|---|---|
schemaVersion | cautilus.claim_eval_plan.v1 | |
nonWriterNotice | plans eval fixtures but does not write host-owned fixtures |
A user can read generated views without losing the packet source of truth.
Readable views are generated from the machine-readable packets and keep the JSON packet as the audit source rather than replacing it. The checks below render two readable views live from the canonical packets and confirm each view states that the JSON packet remains the audit source, while the source packet stays a valid machine-readable proof plan.
The packet the views were rendered from is still a machine-readable proof plan, so the readable views are projections over it rather than the source of truth.
| path | json_path | equals | min_number |
|---|---|---|---|
.cautilus/claims/evidenced-typed-runners.json | schemaVersion | cautilus.claim_proof_plan.v1 | |
.cautilus/claims/evidenced-typed-runners.json | candidateCount | 1 |
A user can see stale, blocked, and missing evidence in report views.
The status report makes evidence gaps visible: stale evidence as a cross-cutting signal, blocked claims and missing-proof claims as next-action buckets. The check below regenerates the status summary live over a packet seeded with one stale-evidence candidate (mutated from the canonical packet, which already carries blocked and missing-proof claims), so all three gap states surface in one fresh report.
Seed one stale-evidence candidate so the live status report must surface a stale signal alongside the blocked and missing-proof states the canonical packet already carries.
out=$(mktemp -d)
jq '(.claimCandidates[0].evidenceStatus) = "stale"' ".cautilus/claims/evidenced-typed-runners.json" > "$out/claims-stale.json"
printf '%s\n' "$out/claims-stale.json"The rendered status report view shows the stale signal in human-readable text, not only in the packet.
The status summary packet behind that view buckets all three gap states together.
| path | equals |
|---|---|
schemaVersion | cautilus.claim_status_summary.v1 |
actionSummary.crossCuttingSignals[id=stale-evidence].id | stale-evidence |
actionSummary.primaryBuckets[id=split-or-defer].id | split-or-defer |
actionSummary.primaryBuckets[id=agent-add-deterministic-proof].id | agent-add-deterministic-proof |