Installation
Build Shaktiman from source. The full path below takes ~1 minute on a warm cache and
produces two binaries — shaktiman (CLI) and shaktimand (MCP daemon).
Shaktiman is POSIX-only: macOS and Linux. The daemon relies on flock, Unix
domain sockets, and os.TempDir() semantics that don't translate cleanly to Windows.
On Windows, use WSL 2 and follow the Linux instructions inside the WSL shell.
Pull requests that add native Windows support are welcome.
1. Prerequisites
- Go 1.25 or newer. Check with
go version. - Git. For cloning the repository.
- A C compiler (gcc / clang). Required for the
sqlitebuild tag.- macOS: install the Xcode Command Line Tools with
xcode-select --install. Without them,go buildfails at cgo with acommand not found: ccerror. - Linux: install
build-essential(Debian/Ubuntu) orgcc+make(RHEL family) or the equivalent for your distro.
- macOS: install the Xcode Command Line Tools with
- ~500 MB free disk for a mid-size repo (< 100k files). Larger repos scale roughly linearly — see Scaling.
- ~1 GB free RAM for the daemon on a mid-size repo; more if you enable the
brute_forcevector backend (it holds all vectors in memory).
Optional (only for specific features)
- Ollama — required if you want vector embeddings. After
installing, run
ollama pull nomic-embed-textto fetch the default model. Without Ollama, search falls back to keyword mode and still works. jq— used by a few commands in the Troubleshooting pages to filtershaktimand.log. Install viabrew install jq(macOS) orapt install jq/dnf install jq(Linux).
For a postgres-only deployment without CGo, see Backends.
2. Clone and build
git clone https://github.com/midhunkrishna/shaktiman.git
cd shaktiman
go build -tags "sqlite_fts5 sqlite bruteforce hnsw" -o shaktiman ./cmd/shaktiman
go build -tags "sqlite_fts5 sqlite bruteforce hnsw" -o shaktimand ./cmd/shaktimand
This produces ./shaktiman and ./shaktimand in the repo root. Move them onto your
PATH if you'd like to call them from anywhere.
3. Verify
./shaktiman --help
./shaktimand
shaktiman --help prints the list of subcommands (init, index, reindex,
status, search, context, symbols, deps, diff, enrichment-status,
summary). shaktimand without arguments exits with a usage message — that's the
intended behaviour.
Next
You've got the binaries. Now index a project and run your first query: