Skip to content

Installation

ka ships on crates.io as ka-harness (the CLI package; the engine and supporting crates publish alongside it as ka-engine, ka-term, ka-dialect, and friends); installing it produces a single static binary with no runtime dependencies. Building from source is equally supported. Through v0.2.11 the package was published as ka-agent: that name is reserved for a separate future product and no longer receives releases.

  • Rust 1.85+ (edition 2024); rustup is the easiest way to get it.
  • Linux: ka targets Linux; CI produces static musl builds for x86_64-unknown-linux-musl.
Terminal window
cargo install ka-harness

This installs the ka binary into ~/.cargo/bin.

Updating from ka-agent (v0.2.11 or older)? Migrate with:

Terminal window
cargo uninstall ka-agent && cargo install ka-harness

The rename changes the package name only: the binary, your config, and your strands are untouched. The old ka-agent package stays on crates.io at 0.2.11 and receives no further releases.

Terminal window
git clone https://github.com/jaltez/ka-harness
cd ka-harness
cargo build --release -p ka-harness

The binary lands at target/release/ka. Either alias it or install it into ~/.cargo/bin:

Terminal window
alias ka=target/release/ka # quick try
cargo install --path crates/ka-harness # install for real

Releases carry an ed25519-signed static musl archive for x86_64 Linux on the GitHub releases page. ka update downloads and verifies those signatures automatically; for a manual install, untar the binary into ~/.cargo/bin.

Terminal window
ka --version # carries the git hash
ka doctor # health checks: build, config layers, keys, trust, data
ka doctor --net # additionally probe provider + MCP reachability

ka doctor reports whether configured LSP server commands exist on PATH, whether your config layers parse, and where your data lives. It is the first thing to run when something feels off.

Reinstall with cargo install ka-harness to pick up new crates.io releases. ka update installs signed release artifacts from GitHub (ed25519-verified, channels stable/edge, never automatic); those channels are still being provisioned.

ka’s own repository uses the cargo-xtask convention:

Terminal window
cargo xtask install # stable: cargo install --locked → ~/.cargo/bin/ka
cargo xtask link # dev: builds release + symlinks kad → target/release/ka
cargo xtask dev -- models # rebuild + run the dev binary with args
cargo xtask unlink # remove the kad symlink

The stable binary owns the name ka; the dev binary is always kad. To isolate dev sessions from your real ones:

Terminal window
KA_DATA_DIR=/tmp/ka-dev kad … # shares config/rules/hooks, separates strands

Everything ka writes lives in two places: the binary (~/.cargo/bin/ka) and its data (~/.config/ka/, ~/.local/share/ka/, ~/.local/state/ka/). Remove those and ka is gone.