Skip to main content
A harness is the upstream agent runtime. TELOS ships first-class support for four, and is adapter-driven so you can add more without rewriting your agent logic.

Supported harnesses

HarnessTypical usagetelos init auto-connectStatus
Claude CodeAnthropic-native coding agent workflow🟢 First-class
OpenClawOpen-source agent runtime with TELOS parser integration🟢 First-class
HermesMulti-agent orchestration with independent sub-IR handling🟢 First-class
CodexOpenAI-style coding workflow via local gateway injection🟢 Supported

How each connects

telos init --harness claude-code writes ANTHROPIC_BASE_URL into the env field of ~/.claude/settings.json (atomic, backed up to .telos.bak, marked with __telos_installed). Survives npm update, never touches PATH or the npm package.

How a harness is parsed

Each harness plugin is a stateless parse(raw) → TelosIR. They differ in wire shape and identity:
OpenClawHermesTelos
Wire shapeAnthropic /v1/messagesAnthropic /v1/messagesOpenAI ChatCompletions
Tool classification_classify_anthropic_tool (type prefix + server field + metadata)reuses _classify_anthropic_tool_classify_openai_tool (metadata only)
<file> into ref-poolno (whole oversized system item → slug system-doc-{i})yes (<file path=…>, dotted slug)yes (dash slug)
thinking blocknot handledFOLD kind=thinkingn/a
tool_result sourceembedded in the user messageembedded in the user messagestandalone role=tool → wrapped into a user message
system extractionthe system fieldthe system fieldleading consecutive role=system in messages[]
source_tag prefixopenclaw/*hermes/*telos/*
Tool classification writes source (builtin / mcp / user) into TelosBlock.extra, feeding the bridge’s _tool_sort_key to protect PIN prefix stability across multi-MCP startup races.

Harness detection (_detect_harness)

For Anthropic-shaped traffic, TELOS picks between hermes and openclaw. Detection runs in order and returns on the first hit:
1

HTTP header fingerprint

User-Agent containing claude-cli, or x-app: clihermes. Only the proxy path sees request headers. This reliably catches Claude Code’s tool-less Haiku auxiliary requests (title generation / topic detection), which steps 1–3 below all miss.
2

Envelope markers

Paired open/close regexes (system-reminder / command-message / command-name) in the system text and in every user text block → hermes. Paired matching avoids misclassifying a user who is merely discussing tags in prose.
3

thinking block

Any assistant message containing a thinking content block → hermes.
4

Tool fingerprint

The intersection of tool names with {Bash, Edit, Read, Write, Grep, Glob, TodoWrite, Task, WebFetch, WebSearch, NotebookEdit} ≥ 3 → hermes. Catches the first-turn request before the reminder is injected.
5

Fallback

Otherwise → openclaw.
Detection is sticky. The proxy remembers the confident signal per client (ProxyApp._client_harness); the SDK transport writes it into BridgeSessionState.sticky_harness. This avoids re-probing per call, which would flip the harness and destabilize the prefix.

Support Matrix

The full harness, model, and inference-framework support tables.