Kairn is a graphical control plane for Claude Code. Watch every run unfold in real time, search history, edit subagents and pipelines, and share a clean view of the work with your team or client. Runs on your machine. Never the cloud.
No accounts. No API keys. No background services. Open a project, run two commands, see what your AI is doing.
One-liner. Detects your OS and arch.
$ curl -fsSL https://kairn.in/install.sh | sh
In your project. Idempotent.
$ cd ~/path/to/project $ kairn init
Daemon starts, browser opens. Events stream live.
$ kairn → http://127.0.0.1:3737
brew install ramyalakhani2108/tap/kairn
go install gitlab.com/ramyalakhani2108/kairn/cmd/kairn@latest
git clone …/kairn && cd kairn && just build
Claude Code is powerful but invisible. Kairn makes it visible — and gives you a place to compose what it should do next.
Every hook event streams in real-time with per-tool icons, file paths, durations, and an inline side-by-side diff for Edit / Write.
SQLite FTS5 across every event payload. Find "the run where I edited auth.go" three weeks later in under 500ms.
Edit subagents, slash commands, MCP servers, and hooks through structured forms. Stop hand-editing brittle JSON.
Compose subagents and human-approval gates in a graph editor. Compiles to a slash command Claude Code runs natively.
Generate a self-contained HTML export of any run — prompt, files touched, key diffs, redacted secrets. Send the artifact, prove the work.
Binds to 127.0.0.1 only. Never makes outbound calls. Zero telemetry. Your runs, your machine, your data.
Kairn doesn't intercept Claude Code or replace it. It rides alongside.
When you run a prompt, Claude Code calls a shell stub Kairn installed in .claude/settings.json. The stub POSTs the payload to the local daemon on 127.0.0.1:3737. The hook is non-blocking — if Kairn isn't running, Claude Code keeps working.
Events land in a SQLite database (WAL mode, FTS5 index) at .kairn/runs.db. Pure Go, no CGO — same binary works on Mac, Linux, Windows.
The React UI subscribes to /ws and renders the event as a typed card — file paths, diffs, terminal commands, todo lists. Sub-200ms from hook to pixel.
Faster authoring. Better visibility on long agent runs. Find work from three weeks ago in seconds.
Curated share views prove value to clients. Reusable pipelines across projects. Branded HTML exports.
Team-wide shared agent + pipeline definitions, version-controlled in git. Audit trail for review.
See how your team uses AI assistance without reading terminal logs over their shoulder.
No. Kairn never calls the Anthropic API. All LLM work flows through your existing Claude Code installation and subscription. Kairn only observes Claude Code through hooks and edits configuration files.
Yes. The daemon binds exclusively to 127.0.0.1 and makes no outbound network calls. There is no analytics, error reporting, or telemetry — not opt-in, not configurable.
Yes, by running multiple instances on different ports: kairn --port 3738. Kairn intentionally attaches to one project at a time.
Hook payloads may contain secrets. They're stored in plaintext SQLite by default. Kairn ships with a redaction config to scrub sensitive paths; share-view export omits raw payloads unless you opt in.
No. Kairn is an independent open-source project. It's not endorsed by, sponsored by, or affiliated with Anthropic.
Kairn is open source, MIT-licensed, and shaped by the people who use it. Star the repo, file an issue, or open a merge request.
Get an email when v0.1 ships and when new features land. No fluff. Unsubscribe in one click.
Powered by Buttondown. Three to five emails a year, max.