Artifact Reference for Orcho Runs
Every run, regardless of outcome, lands in one directory:
<workspace>/runspace/runs/<run_id>/run_id is the timestamp-shaped directory name (for example 20260629_1427).
That filesystem layout is a contract: post-mortem tooling, the evidence
slices, and the MCP surface all read the same files. Prefer the typed
projections (orcho status, orcho evidence, MCP tools) first; read files
directly for debugging and forensics.
The run directory
Section titled “The run directory”<run_dir>/├── meta.json # run state snapshot: status, profile,│ # delivery gate, handoff state├── events.jsonl # append-only event spine (source of truth)├── metrics.json # token / duration / attempt rollups├── evidence.json # composed v1 evidence bundle├── evidence.md # readable rendering of evidence.json├── checkpoints.db # phase log + agent sessions (SQLite)├── parsed_plan.json # typed plan contract (when plan ran)├── plan_<run_id>_r<N>.{md,json} # per-round plan artifacts├── diff.patch # captured run diff (the review subject)├── output.log # raw stdout/stderr capture├── runner.log # decolorized banner / phase log├── progress.log # live-card snapshots├── phase_handoff_decisions/ # one JSON per resolved handoff├── verification_receipts/ # per-phase-round receipts: <phase>_round<N>.json├── verification_env_receipts/ # env-assertion receipts: verify_env_<env>.json├── verification_command_receipts/ # declared-command receipts: <command>.json└── mcp_supervisor.json # supervisor handle (only when spawned via MCP)The physical git checkout is deliberately not inside the run directory.
With worktree isolation enabled it lives at
<workspace>/runspace/worktrees/<worktree_id>/checkout/, and meta.json
records that path under worktree.path.
Cross-project runs add cross-level files: cross_plan.json / cross_plan.md
at the run root, and per-alias <alias>/implementation_handoff.{json,md}
(JSON canonical, .md a derived audit view).
Who writes what, when
Section titled “Who writes what, when”| File | Writer / timing | Contract |
|---|---|---|
events.jsonl | Appended live during the run. | Never rewritten; the authority every other surface is projected from. |
meta.json | Mutated in place by the pipeline; one out-of-band writer on halt. | Cached snapshot of the stream; drift is detectable and repairable. |
metrics.json | Updated at phase boundaries. | Tokens in/out, cache fields, durations, per-phase and per-attempt splits. |
evidence.json | Composed near the end of the run. | Schema-validated v1 bundle; evidence.md is its human rendering. |
parsed_plan.json | Written when planning approves. | The typed plan --from-run-plan reuses. |
diff.patch | Captured from the run checkout. | The retained delivery subject; validated before apply/commit. |
phase_handoff_decisions/ | One file per operator decision. | Durable, idempotent decision artifacts. |
verification_* receipts | Written when declared checks execute. | Proof consumed by gates and final acceptance. |
output.log / runner.log / progress.log | Streamed during the run. | Human-readable; not a parsing surface. |
evidence.json top-level keys
Section titled “evidence.json top-level keys”The v1 bundle always carries:
schema_version, run_id, run_dir, status, created_at, task, profile,plan, phases, gates, commands, artifacts, metrics, errors,prompt_render, raw_events_pathprompt_render is the durable prompt-render trace summary (empty list when a
run produced no covered records); raw_events_path points back at
events.jsonl so a bundle can always be re-derived from the spine.
Artifact kinds
Section titled “Artifact kinds”Generated artifacts are classified on two axes — audience × persistence:
artifact_kind | Meaning |
|---|---|
internal_ephemeral | Engine-facing, disposable (working logs, previews). |
internal_durable | Engine-facing, kept (parsed_plan.json, receipts). |
external_ephemeral | Operator-facing, disposable (preview renders). |
external_durable | Operator-facing, kept (evidence.json, diff.patch). |
Each artifact.created event carries the file path and its artifact_kind,
so an event consumer can locate files without guessing the directory layout.
What is conditional
Section titled “What is conditional”parsed_plan.jsonandplan_*exist only when the profile ran a planning block; review-only shapes skip them.diff.patchexists when the run produced changes to retain; a mock run rehearses the lifecycle without editing code.verification_*receipt directories appear when declared checks actually executed; a missing receipt is itself meaningful (see Verification receipts).mcp_supervisor.jsonexists only for MCP-spawned runs — its absence is what classifies a runinspect_onlyfor MCP control.- Cross-level files exist only for
run_kind = cross_projectruns.
Deep reference
Section titled “Deep reference”The canonical engineering doc lives with the code:
Related
Section titled “Related”- Evidence bundle is the narrative tour of the same directory.
- Event stream reference documents the
events.jsonlcontract. - Verification receipts documents receipt shapes and classification.
- Runs as recorded state explains the events-vs-snapshot design.
- CLI reference lists the commands that read these files.
- Configuration reference covers artifact mirroring options.