Skip to main content

Holon's Harness Model

Holon's harness is the runtime control system that governs every model interaction. It is not a prompt library, not a multi-agent framework, and not a provider abstraction layer. It is the product boundary between human intent and verified outcomes.

The six-layer harness

Holon structures harness responsibility into six layers, each owned by the runtime:

1. Host-owned state machine

The runtime, not the model, owns the lifecycle of every turn. From user intent to verified completion, the harness decides what happens next, not the model.

Key properties:

  • The runtime is the system of record for session state, workflow state, approvals, and evidence.
  • Model output is one input to the state machine, not the driver of the state machine.
  • The model can suggest next steps but cannot change the lifecycle itself.

Implementation status (0.1.0): The goal/turn lifecycle with explicit state transitions, bounded plan creation, run management, and evidence capture are implemented. Agent as a runtime concept (agent lanes, tool-based agents) is planned but not yet implemented.

2. Context planner

What the model sees is deliberately assembled, not blindly concatenated. Every lane has an explicit input budget:

B_in = B_policy + B_tools + B_artifacts + B_retrieval + B_recent + B_user + B_margin

Where each term is measured and bounded:

  • B_policy: stable host instruction and lane contract (cacheable prefix).
  • B_tools: tool schema and descriptions for the current lane.
  • B_artifacts: retained host-owned context from prior turns.
  • B_retrieval: freshly retrieved documents or snippets.
  • B_recent: verbatim recent transcript for continuity.
  • B_user: the current turn or task payload.
  • B_margin: reserved room for tool calls, output, and recovery.

If the budget does not fit, the answer is retrieval reduction, compaction, decomposition, or blocked outcome -- not "hope the model sorts it out."

3. Model and role routing

Different lanes use different models, tool profiles, and context configurations. Holon routes by task properties, not by vague persona:

  • Lane: main-chat, summary-scout, planner, reviewer, child lane. Each lane has a defined role, tool set, output contract, and model preference.
  • Routing factors: task openness, artifact coupling, error consequence, validator strength.
  • Escalation: when a cheaper lane fails validation, the harness escalates to a stronger model lane with evidence of what went wrong.
  • Route telemetry: every routing decision is logged with the reason, the outcome, and the estimated regret. The harness learns from routing mistakes.

Current status: role-aware routing exists for main-chat and summary-scout. Broader lane routing, deeper subagents, and richer cost telemetry remain future work.

4. Tool and capability projection

Not every capability is available to every lane. The harness projects a filtered tool surface based on:

  • Side-effect class: read-only, local write, external write, destructive, credential-sensitive.
  • Approval requirements: write and destructive operations require explicit user or policy approval.
  • Lane constraints: child lanes get narrower tool sets than parent lanes.
  • Readiness: tools must pass dependency, target, and health checks before appearing.

Key mechanisms:

  • runtime-tool/list provides the low-context catalog view.
  • runtime-capability/discover provides context-aware progressive disclosure, ranking tools by relevance for the current interaction.
  • runtime-tool/call executes a validated and approved tool invocation with evidence capture.
  • Function calling is one model-facing projection of tools, not the execution authority itself.

Safety defaults:

  • Read-only by default for model-callable tools.
  • Write tools remain runtime-only (runtime-tool/call) unless explicitly approved.
  • Unknown execution lanes fail closed.
  • MCP and generic plugin lanes remain blocked for live execution.

5. Verification and evidence

Every step that produces output also produces evidence. Verification is structural, not prose-based:

Structured output contracts:

Output classProducerConsumerRequired gate
Planner outputPlanning agentWorkflow runnerSchema validation
Reviewer outputReview agentPlan approval gateSchema validation
Tool resultCapability executorWorkflow/frozen-tool callerDeclared output schema or typed failure
AI step resultModel-backed workflow nodeWorkflow runnerSchema, budget, and fallback policy
Script artifact proposalAgent generating scriptsFrozen-tool promotion gatePurpose, inputs, command, side effects, validation
Frozen-tool proposalCrystallization processPromotion validatorSchema, provenance, and evidence
Repair/fallback proposalAI fallback agentFailing deterministic stepSchema and policy gate

Evidence capture:

  • Run events record what executed, with what inputs, producing what outputs.
  • Subprocess evidence includes exit code, duration, and bounded stdout/stderr previews.
  • Frozen-tool proposals carry provenance links to the runs that produced them.
  • Evidence persists across sessions and supports audit, review, and replay.

Implementation status (0.1.0): Structured output validation is implemented for 6 output classes. Tiered run events with evidence records are implemented. Frozen-tool promotion lifecycle and provenance links are partially implemented. Broader verification lanes (automatic reviewer agents) remain planned.

6. Failure taxonomy and loop breakers

The harness detects and stops semantic loops, not just code-level infinite loops:

Failure surfaceSignalResponse
Clarification loopRepeated similar questions, no new stateAsk once better, then block or assume explicitly
Retrieval loopRepeated sources/files, low noveltyNarrow scope or escalate
Tool paralysisHigh tool-choice entropy, frequent invalid selectionShrink toolset or improve descriptions
Summary telephoneLoss of key details between artifactsReduce hierarchy depth, preserve raw refs
Orchestration taxHigh overhead-to-task token ratioSimplify lane stack
Planner-reviewer deadlockRepeated mutual disagreementDefine authoritative stop or human gate
Repair loopRetrying without new evidenceDeclare blocked or escalate

The harness also tracks monotonic progress explicitly. If Progress_t <= 0 for k consecutive iterations, the harness stops, escalates, or declares blocked rather than continuing to spin.

Honesty defaults:

  • The harness can say "I don't know" or "this is blocked" with provenance.
  • Unknown outcomes are not silently replaced with plausible guesses.
  • Fallback behavior is declared, not improvised.

Implementation status (0.1.0): The honesty defaults and failure taxonomy are design goals. Current implementation has basic run cancellation (queued runs only), plan-scoped admission (one active run per plan), and linear plan revision. Full loop detection, progress tracking, and automatic escalation remain future work.

Harness profiles and self-upgrade

Holon separates harness configuration from model prompting through harness profiles.

Harness profiles

A HarnessProfile is a typed configuration record that defines how a harness lane behaves:

  • Agent configuration: role, instructions, tool allowlist.
  • Routing policy: which model for which task properties, escalation rules.
  • Parallelism and depth: fan-out limits, child depth caps, concurrency bounds.
  • Context management: prompt section budgets, artifact retention, compaction triggers.
  • Retrieval policy: search scope, authority ranking, freshness weights.
  • Tool projection: side-effect class ceilings, approval gates, readiness requirements.
  • Verification policy: structured output contracts, reviewer lanes, evidence requirements.
  • Clarification posture: how to handle ambiguity, when to ask vs assume.
  • Rollout and activation: canary, rollout percentage, rollback, lifecycle state.

Profiles resolve through a deterministic precedence chain: system -> user -> workspace -> task-family -> session -> goal. Non-overridable invariants (child depth, concurrency, write-tool boundaries, profile attribution) are enforced by the runtime, not by profile content.

Implementation status (0.1.0): Harness profile CRUD (create, read, list) and profile resolution are implemented via CLI and runtime. The profile DTO defines all typed sections. Profile-driven routing, automatic metrics feedback, and rollout/canary gating are not yet implemented.

Self-upgrade

Holon's self-upgrade system governs how harness profiles evolve:

  • Profiles are versioned, measured, and rolled out with canary gating.
  • Metrics (verified success rate, route regret, escalation precision, loop incidence) feed profile quality assessment.
  • Rollback is automatic if a new profile regresses on guarded metrics.
  • No hidden prompt mutation or global learned defaults -- profile changes are visible, versioned, and attributable. Implementation status: These self-upgrade behaviors (canary rollout, automatic metrics feedback, auto-rollback) are future-state. Current implementation supports harness profile CRUD and resolution only. Profile-driven routing and canary gating are planned but not yet implemented.

Specialist harness compositions

A specialist harness is a package-level composition that bundles a harness profile with the skills, workflows, adapter bindings, evals, and verification policies needed for a specific task family. It is defined by the repo-internal Specialist Harness Contract spec as a packaging convention, not a new executable runtime.

A specialist harness package declares:

  • A harness profile reference (owned by self-upgrade).
  • Task families (e.g. docs, research, code-review).
  • Required assets (workflows, skills, adapter bindings, eval packs).
  • Verification and activation posture.

This is Holon's answer to "how do I share a proven harness configuration for a specific kind of work?" -- it is a marketplace package that composes existing v2-core assets under a named profile, not a parallel harness runtime.

Concrete example: docs-research harness

A low-risk first specialist harness prototype is described in the Specialist Harness Contract spec. See also RM-current-readiness-007 in the active roadmap.

Where to go next