When I ask the runner what it can do, it reports three harnesses and Codex is not one of them — even though Codex runs work on the same deployment.
Steps to reproduce
-
Self-host the OSS stack at v0.108.0 (ghcr.io/agenta-ai/agenta-runner:v0.108.0).
-
Call the runner's health endpoint from inside the stack:
curl http://runner:8765/health
-
Response:
{
"status": "ok",
"runner": "0.1.0",
"protocol": 1,
"engines": ["sandbox-agent"],
"harnesses": ["pi_core", "claude", "pi_agenta"]
}
Expected codex to appear in harnesses. Instead only the three older harnesses are listed.
Codex genuinely is a harness on this version: it has its own curated model catalog (gpt-5.6-sol, gpt-5.6-terra, gpt-5.6-luna, gpt-5.5, gpt-5.2), the self-host docs give it its own setup section with CODEX_HOME, and Codex runs execute normally once the login is mounted. The health payload under-reports what the runner supports.
Investigation
HARNESS_KINDS in services/runner/src/version.ts is a hardcoded list:
export const HARNESS_KINDS = ["pi_core", "claude", "pi_agenta"] as const;
It was not extended when Codex became a harness of its own. Its only consumer is the health payload (harnesses: HARNESS_KINDS), so nothing is gated on it and Codex runs are unaffected — the runner maps codex to its ACP agent through a separate path in run-plan.ts.
Impact
Low — no run is blocked. Two ways it bites:
- Anything deciding what is available from this payload concludes Codex is unsupported.
- It is actively misleading while debugging. Setting up the Codex mount, the endpoint says Codex is not there, which reads as "the image doesn't have Codex" and sends you looking in the wrong place.
Environment
- Agenta OSS v0.108.0, self-hosted, released GHCR images
When I ask the runner what it can do, it reports three harnesses and Codex is not one of them — even though Codex runs work on the same deployment.
Steps to reproduce
Self-host the OSS stack at v0.108.0 (
ghcr.io/agenta-ai/agenta-runner:v0.108.0).Call the runner's health endpoint from inside the stack:
Response:
{ "status": "ok", "runner": "0.1.0", "protocol": 1, "engines": ["sandbox-agent"], "harnesses": ["pi_core", "claude", "pi_agenta"] }Expected
codexto appear inharnesses. Instead only the three older harnesses are listed.Codex genuinely is a harness on this version: it has its own curated model catalog (
gpt-5.6-sol,gpt-5.6-terra,gpt-5.6-luna,gpt-5.5,gpt-5.2), the self-host docs give it its own setup section withCODEX_HOME, and Codex runs execute normally once the login is mounted. The health payload under-reports what the runner supports.Investigation
HARNESS_KINDSinservices/runner/src/version.tsis a hardcoded list:It was not extended when Codex became a harness of its own. Its only consumer is the health payload (
harnesses: HARNESS_KINDS), so nothing is gated on it and Codex runs are unaffected — the runner mapscodexto its ACP agent through a separate path inrun-plan.ts.Impact
Low — no run is blocked. Two ways it bites:
Environment