ensō#

ensō (円相) — the Zen circle, drawn in one breath. Imperfect by design; the irregularities are the point.

A small, single-binary, terminal-first agentic coding agent in Go (binary: enso).

ensō talks to any OpenAI-compatible chat endpoint and gives it the tools to read and edit your project, run shell commands, search the codebase, fetch URLs, and orchestrate sub-agents. Sessions persist to SQLite and resume across crashes. Opt into [bash] sandbox = "auto" and bash runs inside a per-project podman or docker container so the agent can’t escape the project directory.

Why ensō#

  • Local-first by design. Built around llama.cpp’s llama-server running Qwen3.6-35B-A3B on a single RTX 3090. Anything that speaks the OpenAI Chat Completions wire format works.
  • Single static binary, no CGO. SQLite via modernc.org/sqlite, pure-Go LSP and JSON-RPC. Builds for Linux, macOS, and Windows without toolchain gymnastics.
  • Persistent everything. Every user message, assistant reply, tool call, and event is written to SQLite before the UI renders it. kill -9 mid-tool-call and the session resumes with the interrupted call surfaced as a synthetic tool result.
  • Container sandbox, opt-in. Set [bash] sandbox = "auto" and the agent’s shell runs in a per-project alpine container with the cwd bind-mounted. File tools (read/write/edit/grep/glob) refuse paths outside cwd in the same mode. Off by default.
  • Real LSP. Configure any language server under [lsp.<name>] and the agent gets lsp_hover, lsp_definition, lsp_references, and lsp_diagnostics tools.

Where to start#

Project status#

v1 is shipped, plus a substantial post-v1 surface (multi-provider, hooks, session search, and more). The binary is in daily use; soak-test risks are documented in the architecture page. The non-goals — what’s intentionally not built and why — live in AGENTS.md at the repo root.