The harness selects the coding-agent runtime. The model selects an allowed
model for that harness. Both fields are required when creating a chat and are
inherited on later turns.
Codex
{
"harness": "codex",
"model": "gpt-5.5",
"provider_api_key": "sk-proj-..."
}
Codex accepts a bare OpenAI model identifier and requires an OpenAI key. Currently accepted families include:
gpt-5
gpt-5-codex
gpt-5-mini
gpt-5-nano
gpt-5-pro
gpt-5.1
gpt-5.1-codex
gpt-5.1-codex-max
gpt-5.1-codex-mini
gpt-5.2
gpt-5.2-codex
gpt-5.2-pro
gpt-5.3-codex
gpt-5.4
gpt-5.4-mini
gpt-5.4-nano
gpt-5.4-pro
gpt-5.5
gpt-5.5-pro
gpt-5.6-luna
gpt-5.6-sol
gpt-5.6-terra
Claude
The harness value is claude, not claude-code:
{
"harness": "claude",
"model": "claude-opus-4-8",
"provider_api_key": "sk-ant-..."
}
Claude accepts a bare Anthropic model identifier and requires an Anthropic key:
claude-fable-5
claude-haiku-4-5
claude-opus-4-1
claude-opus-4-5
claude-opus-4-6
claude-opus-4-7
claude-opus-4-8
claude-sonnet-4-5
claude-sonnet-4-6
claude-sonnet-5
OpenCode
OpenCode uses a provider/model identifier:
{
"harness": "opencode",
"model": "openai/gpt-5.6-sol",
"provider_api_key": "sk-proj-..."
}
Supported prefixes are:
| Prefix | Provider key |
|---|---|
openai/ | OpenAI |
anthropic/ | Anthropic |
opencode/ | OpenCode Zen |
OpenAI and Anthropic identifiers use the model catalogs shown above with their
prefix added. Examples include anthropic/claude-sonnet-4-5 and
openai/gpt-5.5.
OpenCode Zen includes models such as opencode/kimi-k2.6,
opencode/minimax-m2.7, and opencode/gemini-3.5-flash.
Free Zen models
Models in the Zen catalog whose identifier ends in -free can run without a
provider_api_key. The current free identifiers include:
opencode/deepseek-v4-flash-free
opencode/laguna-s-2.1-free
opencode/mimo-v2.5-free
opencode/nemotron-3-ultra-free
opencode/north-mini-code-free
Other Zen models require an OpenCode Zen key.
Validation
Epho validates the harness/model pair before creating a chat. Unknown harnesses,
missing provider prefixes, and unsupported models return 422. The validation
message includes the model identifiers currently accepted by that harness.