A Atenea orchestration core
GitHub

Atenea documentation

Client compatibility matrix

On this page

Client compatibility matrix#

atenea doctor --client <client> --json keeps the existing diagnostic report and adds a versioned compatibility entry. atenea doctor --all --json returns a deterministic matrix for Codex CLI, ChatGPT Desktop, Claude Code, Oh My Pi and OpenCode. Statuses are independent: pass, fail, unknown or partial.

declared means that the named client/profile was detected. server_probe is direct, read-only evidence about the Atenea MCP server. It never upgrades connected, tested, presentation, reconnect or observed; those remain unknown until that specific client produces a correlated transcript and workflow evidence. OMP and OpenCode use their own inspector slot; until those inspectors exist their configuration is explicitly unknown and Claude files are never read or used for remedies.

Every matrix entry records evidence_level and source as fixture, real, manual or unknown. A fixture can never produce a real presentation claim. The exact client identities are Codex CLI, Claude Code, OpenCode, ChatGPT Desktop and Oh My Pi.

The matrix records version, date, operating system, architecture, profile, transport, requested and observed protocol, and scope. Evidence is bounded and redacted before JSON or Markdown rendering; client paths, credentials, headers, prompts and tool arguments are not part of the matrix.

The pilot harness is opt-in and accepts explicit fixture clients through an injection interface. It gives each fixture disposable HOME, CODEX_HOME and XDG roots, explicit argv and environment overlays, and correlates handshake, transport, protocol version, run_id and workflow.status events. It validates activity, notices, checklist titles and evidence, the deterministic twenty segment progress bar, cursor continuity, permissions, requested/observed versions, invocation IDs and duplicate effects across reconnect. Presentation is pass only when an independently attested real client render event is present; a fixture’s own self-reported presentation is ignored. The transcript must be ordered as Markdown notice, tool request, response, activity and post-call checklist/bar. Reconnect closes the first session, requires a new handshake, and checks monotonic activity cursors and one replay of each invocation.

The supported ephemeral overlays use the client contracts already implemented by atenea wrap: Codex uses repeated -c mcp_servers.<id>=..., Claude uses --mcp-config <json>, and OpenCode uses OPENCODE_CONFIG_CONTENT. ChatGPT Desktop and Oh My Pi have no generic safe injection and remain manual/unknown.

The sandbox requires a pre-existing external sentinel and never creates or modifies files in the user’s profile. Its environment is allowlisted and every writable path must remain inside the disposable roots. Missing adapters, missing transcripts and untested surfaces remain unknown; they are not reported as tested or partial successes. Root hashes are recalculated after the run and the harness cannot prevent a client from receiving an absolute path in an explicitly supplied argument; it only restricts the launcher environment and reports the sentinel/root evidence.

scripts/clientcompat-real-gates.sh is opt-in and fails closed unless the owner supplies each real executable, disposable root, pre-existing sentinel, running Atenea core socket, timeout, relative transcript filename and absolute Atenea executable. It asks atenea compat-overlay for the machine-readable overlay emitted by the same internal/wrap renderers, writes the transcript inside the disposable sandbox, and links only the explicitly supplied Unix socket into the isolated XDG state root. The launcher starts from an explicit environment allowlist, so API keys, proxy variables, SSH agent sockets and unrelated credentials are not inherited. Timeout and normal cleanup terminate the whole client process group before sentinel and root hashes are checked. It emits only candidate or unknown; process exit codes and text matching never certify MCP or presentation. A controlled structured recorder with executable identity/version/hash plus an independent observer must promote the result. Unknown or non-zero gate results return a non-zero exit status. ChatGPT Desktop and Oh My Pi are reported as manual/unknown because they have no safe generic injection. No real-client gate was run by go test ./....

The legacy doctor JSON retains client_path for backward compatibility; that legacy field is outside the sanitized compatibility matrix.