Skip to content
akonwiPublic

About

Harness for working on code with agents

Topics

Resources

Stars

4 stars

Watchers

0 watching

Forks

Repository files navigation

Kit

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.

Architecture

  • one Go executable for the CLI, daemon/server, agent orchestration, and TUI
  • a reusable public droids agent runtime, importable as github.com/akonwi/kit/droids and seeded from github.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.

Installation

Install the CLI and daemon on macOS or Linux with Homebrew:

brew install akonwi/tap/kit

On Apple Silicon Macs running macOS 15 or newer, install the native app separately:

brew install --cask akonwi/tap/kit-app

The 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.

CLI

# 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-codex

A 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.

Development

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.

About

Harness for working on code with agents

Topics

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages