Quickstart

From a fresh checkout to your first search — measured, not estimated: 9.7 seconds end-to-end on the reference machine below, including the one-time embedding-model download. With the model cached (every run after the first) the same loop is sub-second.

Prerequisites

Install the binary

The primary install is Cargo, straight from the source tree:

git clone https://github.com/alexnodeland/curator && cd curator
cargo install --locked --path crates/curator-cli
curator --version

(equivalently, without a checkout: cargo install --locked --git https://github.com/alexnodeland/curator curator-cli; crates.io publication is a staged follow-up while pre-release. Tagged releases also ship prebuilt linux x86_64 + macOS arm64 binaries with checksums, and a container image builds from the repo's Dockerfile — see Operations.)

The default build compiles the in-process ONNX embedder; the build fetches ONNX Runtime binaries at build time (via the ort download feature). For development, cargo build --release -p curator-cli produces the same binary at target/release/curator.

Want to see the loop before pointing it at your own notes? The repo bundles a 12-note sample vault and a non-interactive walk-through:

just demo    # scratch-dir init → ingest → search → digest, fully offline

Point Curator at a markdown directory — or let curator init scaffold everything in place:

cd ~/my-vault          # any directory of markdown notes
curator init .         # writes curator.toml, .kp/, now.md, first index
curator ingest         # incremental re-scan (init already built the index)
curator search "hybrid retrieval over an embedded index"

curator init scaffolds curator.toml (from the shipped example, pointed at this directory), creates .kp/proposals/, seeds a now.md interest anchor for the librarian, and builds the first index. On first use the default builtin embedder announces and fetches its pinned ~130 MB model into .kp/models/ — one time, with a progress bar.

The measured number

Measured 2026-07-06 on an Apple M3 Max (16 cores, 128 GB RAM), macOS 26.5, release build, gigabit-class connection, against a fresh 12-note sample vault:

curator init . && curator ingest && \
  curator search "hybrid retrieval over an embedded index"
stepwall clock
curator init . (scaffold + one-time ~130 MB model download + first index)9.56 s
curator ingest (incremental re-scan, nothing changed)0.02 s
first curator search0.12 s
total9.70 s

The download dominates: everything that is actually Curator finishes in fractions of a second at this corpus size. Your first-run number scales with your connection and your note count.

The fully-offline path

The same loop with the deterministic hash embedder — no ML, no downloads at build or run time — measured on the same machine and sample vault: 0.06 s total.

curator init . --embedder hash

The hash embedder is built for tests and offline use; retrieval quality is what you'd expect from a non-semantic embedding, but FTS (keyword) search is unaffected. You can switch embedders later — edit [index].embedder in curator.toml and run curator index rebuild (epochs, not migrations).

Wire up an agent

Serve the whole corpus to any MCP client over stdio — one config entry, no network, no token:

curator mcp serve

See MCP tools for the surface and Tested MCP clients for client-by-client status and config snippets. For a network deployment (streamable HTTP + bearer token) see Operations.

Where to go next