Over 10,000 turns, the working instructions an agent acts on drift away from the original intent (top white curve).

Prompt (reference vs. controller-corrected) Without controller (open-loop signed error) With controller (brief-gated signed error) Turn (0 → 10,000) (User prompt vs. Corrected prompt)

LONG-HORIZON AGENT HARNESS

The answer can’t be verified. The method can.

You write a brief. Agents turn it into measurable questions, answer each with an instrument inside a sealed sandbox, and keep the widgets and procedures that worked.

§ 01 · Witness, Not Trust

Hold the trajectory when there is no answer key.

Mizpah (מִצְפָּה, "watchtower") separates the controller that writes the brief from the worker that measures the world—so long runs compound verified instruments instead of drifting.

§ 02 · One Turn of the Wheel

A closed feedback loop over open-ended work.

Instead of hoping a single prompt survives a thousand tool calls, Mizpah runs a strict control cycle between the reference brief and the measured map.

  • brief locks the reference r — needs, deliverables, non-goals, and point budget. Read-only to every worker.
  • unknown turns the gap r − y into discrete, typed questions on the route DAG.
  • widget builds or reuses a self-contained Cartograph instrument tested to >=80% coverage.
  • probe executes the instrument inside a sealed OCI department sandbox and stamps a reproducible run.
  • gate checks every brief need against corroborated knowns on the map before any method is certified.

Inspect the artifacts below

$terra gate && cartograph validate§ 03 · Anatomy

§ 03 · Anatomy

Reference on one path. Evidence on another.

Click each artifact in the loop. Whoever writes the reference never grades against it, and nothing enters the map without a stamped probe run.

campaign/
{
  "mission": "Engrave a 7-section odd-meter rhythm chart and verify playability",
  "budget_points": 55,
  "needs": [
    {
      "id": "need-lh-span",
      "question": "Does the piano left hand ever stretch past an octave (12 semitones)?",
      "gate": "max_lh_semitones <= 12"
    },
    {
      "id": "need-voice-crossing",
      "question": "Are bass and left-hand voicings free of muddying register collisions?",
      "gate": "collision_bars == 0"
    }
  ],
  "deliverables": [
    "scores/seven-section-chart.ly",
    "scores/seven-section-chart.mid"
  ],
  "non_goals": [
    "Never invent or estimate a reading when input data is missing"
  ]
}
# Terra probe: measures maximum simultaneous left-hand interval in MIDI output
from pathlib import Path
from cg.data_midi_voicing_span import measure_channel_intervals

REQUIRED_EXPORTS = ["max_lh_semitones", "within_octave_gate"]

def run_probe(midi_path: Path) -> dict:
    report = measure_channel_intervals(midi_path, channel=1)
    max_span = int(report.max_semitones)
    return {
        "status": "ok",
        "max_lh_semitones": max_span,
        "within_octave_gate": max_span <= 12,
        "checked_events": report.event_count,
    }
{
  "knowns": [
    {
      "id": "kn-lh-span",
      "resolves_unknown": "uk-lh-span",
      "cites_need": "need-lh-span",
      "kind": "number",
      "value": 10,
      "unit": "semitones",
      "sample_count": 5,
      "spread": 0.0,
      "corroborated_by": [
        "run-20261014-0192 (midi_event_scanner)",
        "run-20261014-0195 (lilypond_chord_parser)"
      ],
      "artifact_sha256": "8f4b2e9c1d703a5e6b12f9c0e4d82a11"
    }
  ]
}
# Rootless department container & network boundary
department = "verification-worker"
image = "mizpah-sandbox:latest"
isolation = "bubblewrap-oci"
workspace_snapshot = "content-addressed-sha256"

[egress]
mode = "allowlist-proxy"
allow_domains = ["registry.cartograph.tools"]
block_raw_sockets = true

[gate]
require_clean_worktree = true
min_widget_line_coverage = 0.80
forbid_unlinked_claims = true

§ 04 · Try It

Launch the desk on Linux.

Early and changing fast. Requires uv, the Flutter Linux SDK, and bubblewrap/socat for rootless department sandboxes.

# Install system packages (Fedora)
sudo dnf install bubblewrap socat gtk3-devel mpv-devel libnotify-devel libayatana-appindicator-gtk3-devel clang cmake ninja-build
# Clone, sync Python 3.12, and launch the Flutter desk
git clone https://github.com/benteigland11/mizpah.git
cd mizpah
uv sync --python 3.12 --managed-python
cd app && flutter run -d linux

Connect a model under Providers (an API key, a local server, or a subscription), then tell the Deputy on Home what you want built. It drafts a brief; you sign it; the work starts.