kast gives you compiler-backed Kotlin answers in your terminal, CI, or
agent.
Use it when text search can show you where a name appears, but you need to
know which declaration it resolves to, which callers are real, or whether a
planned edit is safe to apply.
kast has two independent runtime modes:
- Standalone CLI + backend — install the
kastCLI and runkast-standaloneto start the analysis backend. Fully independent from IntelliJ; works in terminals, CI, and headless agents. - IntelliJ plugin-backed runtime — runs inside IntelliJ IDEA and reuses the IDE's already-open project model, indexes, and analysis session.
Both runtime modes expose the same JSON-RPC contract, so the calling workflow does not change when you switch between them.
Pick the entry point you want first:
| Runtime mode | Best when | Install |
|---|---|---|
| Standalone CLI + backend | You want an independent runtime for terminal work, CI, or agents | Install guide |
| IntelliJ plugin-backed runtime | IntelliJ is already open and you want to reuse its already-open project model and indexes | Plugin install guide · Latest plugin zip |
Install the kast CLI from any shell:
curl -fsSL https://raw.githubusercontent.com/amichne/kast/HEAD/kast.sh | bashThen start the standalone backend before running analysis commands:
# Start the backend (keep running in background or separate terminal)
kast-standalone --workspace-root=/path/to/your/workspace
# Once READY, run commands from another shell
kast resolve --workspace-root=/path/to/your/workspace --file-path=... --offset=42If IntelliJ with the plugin is already open on the project, skip kast-standalone —
the CLI connects to the IDE's backend automatically.
kast answers questions that grep and rg cannot answer reliably on their
own:
- Resolve the exact symbol, not just the spelling.
kastasks the Kotlin analysis engine which declaration a position refers to. - Trace usage with semantic context. Reference and caller queries follow compiler-backed relationships instead of matching strings.
- Plan edits before applying them. Rename and edit flows are designed to surface conflicts before they touch files.
Use the standalone path when you need a fully independent process or when no
IDE is running. Use the IntelliJ plugin-backed path when IntelliJ already has
the project open and you want kast to piggyback on the IDE's existing
project model and index.
For the full comparison, see Backends.
- Documentation site: https://amichne.github.io/kast/
- Install guide: https://amichne.github.io/kast/getting-started/install/
- Backend comparison: https://amichne.github.io/kast/getting-started/backends/