ka is a model-agnostic coding agent with a very small footprint, written in Rust and shipped as a single static binary. It talks to any provider (frontier APIs or a fully local Ollama) and runs as a terminal UI, a headless command, an HTTP server, or an editor protocol.
Status: v0.3.0 · under heavy development. ka is experimental and moving fast. Features, commands, config, and behavior may change without notice. Not ready for production use.
A footprint contract, enforced in CI. One static musl binary (currently 6.25 MB), cold start ≤ 50 ms, idle RSS ≤ 15 MB, no steady-state network (one rate-limited update check at startup; [update] check = "off" disables it). These are asserted against committed baselines on every push; ka cannot quietly grow past its own limits.
Model-agnostic by design. Three wire protocols (Anthropic messages, OpenAI chat, OpenAI Responses) cover essentially every endpoint. Local Ollama, LM Studio, vLLM, and llama.cpp servers are auto-discovered; a catalog of 500+ models ships in the binary.
A real safety floor. Unbypassable hardstops, bash decomposition, a read ledger that refuses stale edits, one-way secret redaction, an optional filesystem sandbox, and runtime feature toggles that decide what the model can reach. See the safety model.
Sessions you can trust. Every session is an append-only JSONL strand: rewind, fork, export, and replay reproduce the full state.
Speaks the ecosystem. AGENTS.md, SKILL.md skills, markdown agents, MCP servers, and Claude-Code-compatible hooks and stream formats. No new formats to learn.
One process. No daemons, no sidecars, no plugin runtime, no telemetry. Children are only your shells, stdio MCP servers, and optional language servers.
Engine purity: the engine knows nothing about terminals, TOML, or HTTP. It consumes Commands, emits Events, and calls providers through a single Speaker trait.
Everything heavy is optional: anything that adds real size or a dependency beyond the core set lives behind a cargo feature, a separate crate, or not at all.
Data over code: model quirks, permissions, tool catalogs, and agent definitions are files and tables, never branches in the engine.
One process: children are only user shells (and optional stdio MCP servers / git).