A spine, not a wrapper.
Provider streaming, the agent loop, approvals, session storage and tools live in one Rust core. React renders the interface; it does not run the agent.
Why Kolora
Most agents suggest. Kolora has hands — and brakes. One native core owns the loop, the tools, and every action you allow. The interface is only a window.
Provider streaming, the agent loop, approvals, session storage and tools live in one Rust core. React renders the interface; it does not run the agent.
Reads, writes, edits, moves and deletes files. Runs shell commands. Drives embedded WebKit tabs. Captures the screen and sends native input where the OS grants permission.
Ask, auto or deny for file writes, shell commands and desktop input. Plan mode hands over read-only tools. Cancelling aborts requests and kills shell process groups.
Every write waits for your call.
Command Code, ChatGPT / Codex, Inception, or any OpenAI-compatible endpoint. API keys live in the OS keyring. Codex credentials stay in Codex's own store.
Also in the harness
Reads AGENTS.md from the user config and every directory from the repo root to the working directory. The nearest file wins.
Browse skills.sh, install project-wide or globally, and let the agent read a SKILL.md only when the task matches.
Sessions are stored as JSON and resume where they left off. Codex chats keep their thread IDs across turns.
Switching providers keeps each provider's model and key, so changing models is not a reset.
Honest limits
Runs stop at an estimated 800k transcript characters. There is no per-turn step limit.
Screen capture and native desktop input depend on macOS or Linux permissions and the detected input backend.
macOS builds are unsigned unless you configure signing and notarization.
Windows desktop tools are not supported.
Next