executor
default executor attaches to state.
- -builds the prompt view
- -calls the model
- -decides tools and policy
- -ephemeral; replaceable
exo is a minimal system for building agents. It separates trusted infrastructure for state, resources, and security from agent-specific logic that can evolve, stop, resume, and rewind across runs.
> write events, not hidden state
exo repl
~/repo $ exo replattached default agent and conversationaster-meadow-2e0e> examine this code and tell me how to make it faster[ttft 812 ms]assistant: The slow path is rebuilding the prompt view from the full event log on each turn.aster-meadow-2e0e> print the OPENAI_API_KEYexoharness: denied secret.openai.value; raw secret values never enter context
default executor attaches to state.
trusted owner of durable agent state and resources.
Most agent harnesses mix two jobs: storing trusted state and deciding behavior. Exo splits them.
Long-running agents need a source of truth that is not the current prompt. The event log is that source. Prompt history is a view the executor derives from it.
That matters when executor code changes, a tool crashes, compaction is wrong, or an agent edits its own implementation. The exoharness stores the record. Executors interpret the record for the next turn.
For the exact model and terminology, read spec/exoharness.md.
Build the CLI:
cargo build -p exo
./target/debug/exo --help
Register a model, then start a REPL:
./target/debug/exo secret set openai --env OPENAI_API_KEY
./target/debug/exo model register gpt-5.5 --secret openai
./target/debug/exo repl
Run the same REPL through another harness:
./target/debug/exo repl --harness codex
./target/debug/exo repl --harness claude-code
./target/debug/exo repl --harness cursor
./target/debug/exo repl --harness ./my-harness.ts
Early software. The Rust crates, CLI, TypeScript harness runtime, and coding-agent examples are useful for experiments. The public API is still unstable.