Capabilities

Codex-parity tools

Roder now includes native tool shapes that match the channels and process model used by Codex-trained coding models. The goal is practical compatibility: models can inspect images, drive long-running terminal sessions, and emit patches through the format they already know, while Roder keeps the same policy, workspace, and event-recording boundary.

Image inspection

view_image(path) reads a workspace image file, validates that it is a real PNG, JPEG, GIF, or WebP, applies a 10 MiB cap, and returns the pixels to vision-capable providers as an image content block. It works through the active workspace backend, so local workspaces and remote-runner workspaces use the same tool contract.

This gives agents a direct way to inspect screenshots, diagrams, and generated assets during coding tasks. When older media attachment calls do not include raw image bytes, Roder now returns actionable guidance pointing the model to view_image instead of consuming the turn's tool-failure budget with a hard error.

Unified exec sessions

unified_exec wraps the same persistent process-session manager as exec_command and write_stdin, but exposes the Codex-style single-tool shape: a command or stdin input, an optional session_id, and an output-wait timeout_ms. Starting a command and continuing that session both use the same tool, which reduces tool-selection friction for models trained on persistent terminal loops.

Freeform patches

For GPT-5.5 on OpenAI Responses, apply_patch is advertised on the provider's freeform custom-tool channel. The model can emit the raw patch body rather than wrapping it in JSON, and Roder still routes the call through the normal patch executor, policy path, transcript, and tool-result replay. Other providers and models keep the standard function-tool shape.

Eval-profile persistence

The eval runtime profile enables safer persistence defaults for non-interactive runs: it can continue after the consecutive tool-failure limit by nudging the model, and it can nudge once when a turn tries to finalize without using tools. Hard caps still bound the run, and interactive or ordinary non-interactive sessions keep the conservative defaults unless configured otherwise. Completed, blocked, paused, or limited goals can also be replaced with a fresh create_goal call, so resumed eval sessions can move to the next explicit objective.

[reliability]
continue_on_failure_limit = true
empty_tool_call_nudges = 1
max_consecutive_tool_failures = 16
max_model_calls_per_turn = 400
Current eval signal. On the four-task Codex-pass/minimal-Roder-fail Terminal-Bench slice, the native tool surface moved the subset from 0/4 to 4/4 reward in local development runs. The published eval history keeps that as targeted trajectory evidence rather than a new full-suite headline.