← All projects

Developer Tools / 2026

Ava

Ava is a reusable C++23 coding-agent runtime with one event stream for model context, UI replay, session resume, compaction, and crash recovery.

ROLECreator / C++ Engineer
FOCUSCoding Agent Runtime
STATUSOpen source · Alpha
DEMO_OUTPUTDURABLE_AGENT_SESSION
InterfacesTUI + CLI + Web UI
SessionsReplayable and repairable
ProvidersHosted and local models

One runtime, several interfaces

Coding agents have to coordinate streamed model output, tool execution, user steering, context compaction, and process interruption. Keeping separate state for every interface makes that coordination harder and can leave a resumed session inconsistent with what the user previously saw.

Ava runs the agent loop in a headless C++ runtime. Its terminal UI, one-shot command line, and Web UI all consume the same normalized event stream. Model adapters support Anthropic, OpenAI-compatible endpoints, local llama-server instances, and Codex through existing Codex CLI credentials.

Durable sessions and cancellation

Every session is an append-only sequence of compressed, checksummed events. The log supplies model context, UI replay, resume, compaction, and crash recovery instead of maintaining separate conversation stores. On startup, Ava can detect an incomplete final Zstandard frame, repair the torn tail at the last valid boundary, and identify tool calls that stopped before recording a result.

Boost.Asio coroutines, executors, cancellation slots, and timers carry cancellation through model streams, HTTP and SSE transport, tool processes, and durable writes. RAII and move-only handles keep ownership explicit across coroutine suspension points.

Reusable C++ components

Ava installs four CMake components for transport, provider-neutral model streaming, checked tool execution, and the complete durable agent loop. A native application, IDE, or container worker can link only the layer it needs without adopting Ava’s frontends.

Explicit limits cover HTTP bodies, SSE frames, tool output, session records, and decoded batches. Installed-consumer tests link each component independently, while end-to-end scenarios exercise coding tasks, interruption, resume, and recovery through the user-facing interfaces.