Runtime overview
Beacon supports Harness², Google Research’s framework for recursive agent harnessing, by reading the event stream of every executor rollout it records. Harness² is not an agent itself. It refines an agent’s harness (system prompt, guardrails, memory, tool guidance, subagents, skills, scripts and plugins) by running an executor, OpenCode or Codex, over benchmark tasks (JobBench, LAB, WorkBuddy-Bench) with candidate harnesses, then composing a better harness from how those runs differed. One task at budgetk is 4k executor rollouts plus 3k improvement sessions, so an experiment produces many agent sessions quickly, with unrestricted network access and, for Codex, its sandbox disabled.
Beacon’s OpenCode and Codex integrations do not see these rollouts. Harness² runs Codex with its own
CODEX_HOME and --ephemeral, so neither Beacon’s user-level Codex settings nor ~/.codex/sessions are involved, and it runs OpenCode from a source checkout with its event stream captured to a file. Reading those files is what records them.Prerequisites
Before collecting Harness² telemetry, make sure:- Harness² has run at least one rollout, so its runs directory exists (
runs/in the checkout, or$HARNESS2_RUNS_DIR). beacon endpoint installhas run so shared endpoint config and runtime log paths exist.- Something runs
beacon endpoint harness2 syncafter or during experiments. Nothing sweeps on its own.
Collection path
Beacon walks the runs directory and recognizes a trajectory by its first event, not its name, so graded results, judge output and task inputs are left alone:
Two stream formats occur, one per executor: OpenCode’s
opencode run --format json events and Codex’s codex exec --json thread events. Every event carries harness.name=harness2 and harness.collection_method=poll; the session id is the executor’s own (OpenCode’s sessionID, Codex’s thread id).
Each event also carries the rollout’s place in the experiment under raw.harness2:
raw is removed by Metadata-only forwarding, so a Metadata-only endpoint forwards the events without this context.
Telemetry coverage
Known gaps
- No prompts. Harness² passes the task prompt to the executor as an argument, and neither stream repeats it.
- No approvals. Harness² runs Codex with approvals bypassed and OpenCode with a permission fence that rejects outside paths without asking, and neither stream reports a decision. Beacon does not synthesize one.
- No per-step times for Codex.
codex exec --jsoncarries no timestamps, so a Codex rollout’s events take the file’s modification time and keep their order. - No model name. Neither stream names the model, so token reports cannot estimate a list price for these rollouts; OpenCode’s reported cost is kept when it has one.
- Improvement sessions. The proposer and composer sessions Harness² runs between rollouts keep only their final answer on disk, not an event stream, so they are not collected.
- Overlap with the OpenCode integration. A JobBench OpenCode rollout uses OpenCode’s default data directory, so with Beacon’s OpenCode plugin or
beacon endpoint opencode syncalso active, the same session can appear underopencodeas well.
Related
beacon endpoint harness2
Sync and status commands, flags, and cursor behavior.
Runtimes overview
Every runtime Beacon supports and how each is collected.