Skip to content
LogoLogo

Using the OMP Harness

Centaur can run oh-my-pi (OMP) as a session harness alongside Codex, Claude Code, Amp, Nanocodex, Hermes, and Pi. Start a Slack thread with --omp, or set omp as a Slack channel default. OMP is available from Slack only for now.

The sandbox keeps one omp --mode rpc --no-ui process per thread. Assistant text renders when complete, with commentary distinguished from the final answer and thinking shown as it happens. A turn ends on prompt_result; if background work is still pending, it stays open through that work's follow-up, until session_settled. Each tool call shows up as its own tool item.

OMP saves the session on disk in a directory derived from the thread key, so an interrupt (which stops the OMP process, as with Claude Code), a model switch, or a sandbox restart with persistent state resumes the same conversation. JSON-RPC turn/steer sends an update to the running turn; blocks input received during a turn queues as the next turn, as with Pi.

Credentials

OMP supports API-key auth only. It reads ANTHROPIC_API_KEY and OPENAI_API_KEY from the sandbox environment, where api-rs sets iron-proxy placeholders that the proxy replaces with the real keys. The sandbox has the Anthropic placeholder only when CLAUDE_CODE_AUTH_MODE is api_key, and the OpenAI one only when CODEX_AUTH_MODE is api_key. api-rs refuses to start with omp as the default harness when CLAUDE_CODE_AUTH_MODE is access_token.

Configuration

VariablePurpose
CENTAUR_OMP_MODELDefault model as provider/modelId, for example anthropic/claude-opus-4-8 or openai/gpt-5.5. When unset, OMP chooses the model for a new thread and a resumed thread keeps its saved model.
CENTAUR_OMP_BINOMP executable (default: omp on PATH).
CENTAUR_OMP_SESSION_ROOTSession root (default: ~/.omp/centaur-sessions).

Set these through sandbox.extraEnv. Slack mirrors CENTAUR_OMP_MODEL for its model display. A per-thread --model provider/modelId overrides the default. OMP resolves the provider/model pair; there is no static model allowlist. A rejected model fails that turn, and later turns use the last working model. With no model set, OMP will not resume a thread on another model when its saved model is no longer available, so the thread's turns fail until it names one.

Turns run at the high thinking level unless -rsn <level> sets one for that turn (none turns thinking off). OMP clamps the level to the model's capabilities. A turn without an override restores high, including after a session resumes.