Compatibility
Verified client and API surface for the Yabanin gateway. Statuses:
source-reviewed (code inspected, no live test), tested (reproduced in
the current version), unsupported (no route/support in the checked
version), not verified (no test evidence either way).
tested below means pkg/gateway/compat_test.go drove an httptest upstream
with a synthetic fixture. It does not mean a live CLI was launched.
Live CLIs are not verified. Setup sketches:
Codex,
Claude Code,
OpenCode,
Continue,
Cline.
| Client / version | Inbound API | Streaming | Tool behavior | Provider / configuration | Evidence date | Status | Limitation |
|---|---|---|---|---|---|---|---|
| Codex-shaped client | POST /v1/responses | ✓ | custom tool call returned as custom_tool_call | OpenAI-compatible upstream, translation | fixture, 2026-09-30 | tested | previous_response_id is unsupported (400). reasoning.effort is dropped in translation |
| Claude Code-shaped client | POST /v1/messages | ✓ | tool_use / tool_result round-trip in the client format | OpenAI-compatible upstream, translation | fixture, 2026-09-30 | tested | translation drops thinking, hosted tools, and cache_control |
| Claude Code-shaped client | POST /v1/messages | ✓ | native body forwarded, including cache_control | provider=anthropic | fixture, 2026-09-30 | tested | native mode does not apply tool gating (TOOL-02) |
| OpenCode-shaped client | POST /v1/chat/completions | ✓ | function tool call passed through | OpenAI-compatible upstream | fixture, 2026-09-30 | tested | content arrays are forwarded as chat content parts |
| Cline-shaped client | POST /v1/chat/completions | ✓ | non-stream and streaming tool_calls (fragments merge by index) | OpenAI-compatible upstream | fixture, 2026-09-30; streaming 2026-10-12 | tested | streaming evidence is fixture-level (cline_chat_stream); the live CLI row below stays not verified |
| Continue-shaped client | POST /v1/completions | — | not a tool call; prompt and suffix forwarded | OpenAI-compatible upstream | fixture, 2026-09-30 | tested | FIM only; this row is not chat |
| Model list | GET /v1/models | — | — | gateway catalog, no upstream call | fixture, 2026-09-30 | tested | empty database advertises the configured fallback model |
| OpenAI-compatible clients | POST /v1/chat/completions | ✓ | passthrough | any configured provider | 2026-09-17 | source-reviewed | client-side parity depends on each client's envelope parsing |
| MCP tool invocation | POST /api/mcp/invoke | — | single tool call per request | external MCP servers (allow-listed) | 2026-09-17 | source-reviewed | agent keys (yag_) only; default OFF |
| Codex CLI | POST /v1/responses | ✓ | — | live binary | — | not verified | fixture coverage is not a live CLI run |
| Claude Code CLI | POST /v1/messages | ✓ | — | live binary | — | not verified | fixture coverage is not a live CLI run |
| OpenCode CLI | POST /v1/chat/completions | ✓ | — | live binary | — | not verified | fixture coverage is not a live CLI run |
| Continue CLI | POST /v1/completions | — | — | live binary | — | not verified | fixture coverage is not a live CLI run |
| Cline | POST /v1/chat/completions | — | — | live binary | — | not verified | fixture coverage is not a live CLI run |
Not verified: other client transports (WebSocket, gRPC), agent frameworks
beyond the listed keys. Absence of a test means not verified, not
unsupported; unsupported requires the checked absence of a route or
feature in the stated version.
Live evidence tooling (IMP-82)
Three scripts produce compatibility evidence without touching the working
stand (:18082 gateway / :15432 Postgres). None has produced live
evidence yet; all statuses below are honest not_run for live targets.
| Tool | What it does | Live status | Validated |
|---|---|---|---|
scripts/compat/stand_evidence.py (DSN from YABANIN_EVIDENCE_DSN) | read-only SQL sample of OpenCode-shaped traffic (chat.completions: models, streaming proxy, tool calls, errors) → docs/compat/opencode-stand-evidence.md; no prompts, no error text, secret-pattern scan before write | not_run — the live stand DB was not sampled; the owner can run it with the stand DSN | on a disposable seeded PostgreSQL (synthetic fixtures), 2026-10-03; report in docs/compat/opencode-stand-evidence.md is from that synthetic run and is not live evidence |
scripts/compat/smoke.sh (port from YABANIN_ACCEPT_PORT, default 14610) | if opencode/codex/claude is installed, probes the acceptance stack: GET /v1/models + minimal non-stream POST /v1/chat/completions; key from YABANIN_ACCEPT_KEY | not_run — no acceptance-stack run recorded from the IMP-82 lane (no YABANIN_ACCEPT_KEY) | CLI detection and pass/fail/not_run branches, 2026-10-03, against a local stub HTTP server |
scripts/compat/stream_smoke.sh (port from YABANIN_ACCEPT_PORT, default 14610) | probes the acceptance stack with ONE streaming POST /v1/chat/completions (stream:true + tools + stream_options.include_usage:true, max_tokens clamped ≤ 256) and checks the wire contract: text/event-stream, chunk frames, exactly one data: [DONE], usage chunk delivered when the client asked; owner-authorized spend cap 5 USD per run (R044-D1, 2026-10-12), response bodies never printed | not_run — no acceptance-stack key/stand available at execution time (port 14610 closed); the owner can run it and record the output | pass/fail/not_run branches, 2026-10-12, against a local stub SSE server (ok + missing-[DONE] cases) |
No live-CLI compatibility claim is made: the not verified rows above stay
not verified until an owner-recorded live run (smoke output or stand
evidence report) is attached to this page with a date.