Adapters implement a small shell-runner protocol:
run(command, cwd, env, timeout_seconds)start_background(command, cwd, env)check_background(handle)stop_background(handle, timeout_seconds)cleanup()
Each adapter declares capabilities:
- PTY allocation:
True,False, orNoneif unknown. - Background command support.
- Explicit environment override support.
- Sticky cwd support.
Local standard-library baseline. It uses process groups on POSIX and owned temporary files for background output. It is not an agent client.
Optional adapter over Pydantic AI Harness Shell. It validates a real framework shell implementation without model calls.
Install:
python -m pip install ".[pydantic-ai-harness]"Optional adapter that uses the official agent-client-protocol Python schema and ACP terminal method names with a local in-process terminal client.
It validates the ACP terminal adapter shape without UI automation or paid model calls. It does not claim that any specific ACP client implementation has passed.
Install:
python -m pip install ".[acp]"Experimental adapter over Codex CLI app-server command/exec.
It uses direct JSON-RPC shell execution and does not create a model turn. The Codex app-server API is experimental, so results should be treated as local validation evidence, not a stable public compatibility claim.
Validated locally with Codex CLI 0.133.0: 8 fixtures passed and the Windows-only fixture skipped on macOS. The validation exercised these app-server surfaces:
initializecommand/execcommand/exec/outputDeltanotifications for background stdout/stderrcommand/exec/terminate
The adapter intentionally fails closed when Codex app-server responses do not match the tested shape. Unsupported JSON-RPC errors, non-object results, missing or incorrectly typed exitCode / stdout / stderr, and malformed output-delta notifications are reported with compatibility errors that name the method and ask the user to verify codex --version.
PASS: the adapter honored the fixture contract on the current platform.FAIL: the adapter violated the contract.UNSUPPORTED: the adapter does not claim the required capability.SKIP: the fixture is not applicable on the current platform.ERROR: the fixture or adapter crashed before producing a contract verdict.