Skip to content

Artifacts and schemas

Everything UH knows is on disk under .harness/ (plus a few files outside it), and every persisted document carries a schema_version checked by a Zod schema in src/schema/. This page is the map. It describes the v0.11 line; files marked v0.11 are not on main yet.

Path Schema Written by
.harness/project.yaml uh.project.v0 (fleet, notifications and land sections in v0.11) uh init, hand edits
.harness/project-brief.md free text, capped when injected hand edits
.harness/prices.yaml uh.prices.v0 (v0.11): operator USD rates per model hand edits
.harness/adapters/*.yaml uh.adapter.v0 + a strict per-runtime runtime_config schema uh adapter add
.harness/workflows/*.yaml uh.workflow.v0 uh init, hand edits
.harness/templates/*.yaml uh.session-template.v0 (v0.11) hand edits
.harness/skills/index.yaml uh.skills-index.v0 uh skill add
.harness/specs/{active,archive}/ uh.spec.v0 hand edits, uh spec
.harness/sandboxes/index.yaml, <id>/metadata.yaml, <id>/worktree uh.sandboxes-index.v0 uh sandbox create
.harness/audit/events.ndjson event lines every lifecycle command
Path Schema Notes
.harness/live-runs/<run-id>.json uh.live-run.v0 (defined in live-runs.ts, not src/schema) One per attempt, at the project root. Backs uh ps, wait, kill.
.harness/hive/items.yaml, facts.ndjson, claims.ndjson src/schema/hive.ts (no version literal yet) Only the controller writes. Facts are hash-chained and cite evidence.
.harness/ledger/interventions.ndjson uh.intervention.v0 Hash-chained. Steer, kill, review, settlement and replace events are recorded automatically.
.harness/land/decisions.ndjson land decision lines Hash-chained record of every uh land.
.harness/queue/<id>/state.json uh.queue.v0 (the queue input file has no version literal) uh queue run state, resumable.
.harness/notifications/deliveries.ndjson delivery lines Every notification attempt.
.harness/experiments/<id>.yaml and <id>/{plan.json, runs.ndjson, report.json} uh.experiment.v0 uh experiment.
File Schema
mission.yaml uh.mission.v0
design.md; plan.md, prd.md, verify-report.md, fix-report.md (staged workflow, library-only) free text
events.ndjson lifecycle and adapter events
verification.yaml uh.verification-result.v0
promotion.yaml uh.promotion.v0
runtime-result.yaml mirror of the latest run’s result
latest.json uh.latest-run.v0
runs/index.json uh.runs-index.v0
decision-receipts/<id>.json uh.decision-receipt.v0 (routing and acceptance decisions)
review-request.json, out/review-report.json, review-assessment.json uh.independent-review-{request,report,assessment}.v0 (v0.11)
team/workers/<role>-<n>/, team/leader/, integration-report.md team worktrees and report

Per run: .harness/missions/<id>/runs/<run-id>/

Section titled “Per run: .harness/missions/<id>/runs/<run-id>/”

Run ids look like 20260923T074812Z-a1b2c3.

File Schema Purpose
prompt.md the rendered prompt
runtime-session.yaml uh.runtime-session.v0 command, args, status, timestamps, exit code
events.ndjson normalized native event stream
runtime.stdout.log, runtime.stderr.log raw output
runtime-final.txt the model’s final message, extracted from the uh-runtime-final-message fence
diff.patch git diff including untracked new files
runtime-result.yaml uh.runtime-result.v0 terminal status, stop code, usage, cost and its provenance
runtime-control.json uh.runtime-control.v0 (v0.11) live control file: heartbeat, pids, settlement receipt
runtime-recovery.json uh.runtime-recovery.v0 resume attempts
cancel-request.json, steer-request.json, steer-record.json, resume-link.json uh.runtime-cancel-request.v0, uh.runtime-steer-request.v0, uh.steer-record.v0, uh.resume-link.v0 run control messages
tool-guard.json, tool-guard.log, tool-guard.arm.log uh.tool-guard.v0 applied guard policy, decisions, arming probes
run-digest.json uh.run-digest.v0 live digest behind uh ps and uh report
team-state.json uh.team-run.v0 team parent state
session-template.json, experiment.json, windows-job-result.json provenance and platform records
Path Schema
acceptance/registry.yaml uh.acceptance-registry.v0 (37 entries, paired oh-my-pi and Command Code)
acceptance/evidence/** (gitignored) uh.acceptance-evidence.v0, bound to an input digest
$XDG_CONFIG_HOME/uh/tui-state.json uh.tui-state.v0
user-level notifications.yaml notification sinks
~/.honcho/config.json Honcho memory

Machine-readable command output is versioned too, so scripts can depend on it: uh.status.v0, uh.ps.v0, uh.kill.v0, uh.wait.v0, uh.report.v0, uh.validate-drift.v0, uh.notify.{detect,list,test}.v0. The observatory already uses delivery-observatory.v1 and delivery-observatory-redaction.v1, which makes it the only contract that has been frozen.

  • Mission ids, workflow names and artifact paths are constrained so they cannot traverse out of .harness/.
  • Artifact writes refuse a symlinked .harness, mission directory or target.
  • Terminal writes are strict; periodic heartbeats retry renames with backoff because Windows refuses a rename while another process has the file open.
  • A settlement conflict between runtime-result.yaml and the control receipt is appended as a settlement_conflict record, never silently resolved.