Kit is a native coding agent for macOS and Linux with a terminal UI, headless commands, durable sessions, concurrent subagents, and language-neutral process plugins. Windows is not supported.
Kit is implemented in Go, with its terminal client written in
Ard. Its architecture is recorded in
docs/adrs/0001-native-go-architecture.md,
and outstanding work is tracked in Kit issues.
- one Go executable for the CLI, daemon/server, agent orchestration, and TUI
- a reusable public
droidsagent runtime, importable asgithub.com/akonwi/kit/droidsand seeded fromgithub.com/akonwi/droids - a native terminal client in
apps/cli, written in Ard with the Cooper terminal UI toolkit - SQLite for authoritative session/runtime state
- JSON-RPC child processes for custom plugins written in any language
Kit stores data under ~/.kit by default. Set KIT_HOME to an explicit
isolated location when developing or testing.
Install the CLI and daemon on macOS or Linux with Homebrew:
brew install akonwi/tap/kitOn Apple Silicon Macs running macOS 15 or newer, install the native app separately:
brew install --cask akonwi/tap/kit-appThe app connects to a separately running compatible Kit server; it does not
install Kit or start a server on this Mac. It starts one on an SSH host only
when you add that host or choose Start Server, as kit attach does. The CLI and app have independent version numbers.
Each one tells you when a newer release is out. kit update installs the
newest CLI, through Homebrew when that is how it was installed, and offers to
restart the local server; the app updates itself. See
Updates and release notes.
# Start the native TUI, resuming this directory's latest usable session:
kit
# Choose an exact session, force a new saved session, or work temporarily:
kit --session <long-or-short-id>
kit new --name "Focused work"
kit --temp
kit sessions
# Run one headless turn. Piped stdin is prepended to the prompt:
kit print "Continue the latest session for this directory"
kit print --model openai/gpt-4o-mini "Say hello"
cat changes.diff | kit print --temp "Review this diff"
# Attach to another Kit home's running server, by path or saved name:
kit attach ~/.kit-dev
kit servers add dev ~/.kit-dev
kit attach dev
kit attach # pick from saved servers
# Pair with a server on another machine (link from `kit server pair` there):
kit servers add vps https://kit.example.ts.net/pair#…
kit attach vps --cwd ~/src/app
# Attach to a host over SSH; Kit starts its server and forwards a port:
kit attach me@devbox
kit servers add devbox me@devbox
# Pair another device with this server, and manage paired devices:
kit server pair
kit server devices
# Inspect the complete command tree and operate the local daemon:
kit --help
kit server status
kit server restart
# Log the server in to OpenAI Codex with a headless device flow:
kit auth login openai-codex
kit auth status
kit auth logout openai-codexA normal kit invocation starts the native terminal client. It
starts or discovers the daemon, offers OpenAI, Anthropic, OpenCode Zen, and OpenCode Go API-key
login plus OpenAI Codex and Claude Pro/Max subscription login when credentials are
missing, resumes the latest usable session
for the selected working directory, and restores its persisted transcript snapshot. kit sessions opens a bounded
primary-screen session manager before transitioning to the normal TUI for an
opened session. --temp uses an in-memory session that is disposed when its
foreground command exits. Logins run on the server, which stores the
credentials (provider login). Claude
subscription login relays the browser's localhost redirect to the server; if
that redirect cannot be received, the login dialog accepts the authorization
code instead. New sessions started without --model use the server's default
model (server settings).
Print mode creates and resumes droids sessions through the local session-client
boundary, writes only final assistant prose to stdout, and keeps diagnostics on
stderr. Codex can derive account and expiry metadata from
its access token; OPENAI_CODEX_ACCOUNT_ID, OPENAI_CODEX_ID_TOKEN,
OPENAI_CODEX_FEDRAMP, and Unix-millisecond OPENAI_CODEX_EXPIRES_AT are
available when explicit metadata is needed. ANTHROPIC_OAUTH_TOKEN supplies a
managed Claude subscription access token. OPENCODE_API_KEY enables both the opencode/* OpenCode Zen catalog through
https://opencode.ai/zen/v1 and the opencode-go/* catalog through
https://opencode.ai/zen/go/v1; models are routed to Responses, Chat Completions,
or Anthropic Messages according to their models.dev metadata. Without explicit provider environment credentials, the
daemon uses the locked, atomic ~/.kit/auth.json store and
persists refresh-token rotations. Provider environment is read only at daemon
startup, takes precedence over the file store, and refreshes only in memory, so
restart the daemon after changing it. Stored login/logout generations are
observed without restarting the daemon.
Kit requires Go 1.27 or newer. Building the kit executable from apps/cli
also requires the Ard compiler; see
apps/cli/README.md. The Go CLI and daemon do not
require a JavaScript runtime.
gofmt -l .
go build ./...
go vet ./...
go test ./...The macOS client lives in apps/macos/. TypeScript application
code in apps/web/ and shared packages in packages/ use Bun for development.
The web client is not yet integrated with the Go daemon.