Exact files, lines and callers for your agent.

Sieve indexes a repo into a symbol graph and answers with the file and the line. It runs on your machine. No API key.

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/iamalvisng/sieve/releases/latest/download/sieve-cli-installer.sh | sh

macOS and Linux.

vite · 1,583 files
sieve ask "how does the dev server handle hot module replacement"ask  how does the dev server handle hot module replacement · 8 hits 1  [packages/vite/] createServerModuleRunner  fn  packages/vite/src/node/ssr/runtime/serverModuleRunner.ts:143-160   function createServerModuleRunner( environment: DevEnvironment, options: ServerModuleRunnerOptions = {}, ): ModuleRunner 2  [packages/vite/] handleHMRUpdate  fn  packages/vite/src/node/server/hmr.ts:411-679   async function handleHMRUpdate( type: 'create' | 'delete' | 'update', file: string, server: ViteDevServer, ): Promise<void> 3  [packages/vite/] _createServer  fn  packages/vite/src/node/server/index.ts:513-1148...

Three commands you will use every day.

Each answer names a symbol, its kind and an exact span. Your agent opens the span and reads nothing else.

Ask in plain words. Get ranked symbols with the file and the line.

sieve ask "how does the dev server handle hot module replacement" --sourceask  how does the dev server handle hot module replacement · 8 hits 1  [packages/vite/] createServerModuleRunner  fn  packages/vite/src/node/ssr/runtime/serverModuleRunner.ts:143-160   function createServerModuleRunner( environment: DevEnvironment, options: ServerModuleRunnerOptions = {}, ): ModuleRunner ```export function createServerModuleRunner(  environment: DevEnvironment,  options: ServerModuleRunnerOptions = {},): ModuleRunner {  const hmr = createHMROptions(environment, options)  return new ModuleRunner(...

Code says what. Records say why.

sieve why links a symbol to the decision records that explain it, plus the tests that cover it. A record is an ADR file or a LEDGER.md entry with a - **Code:** line. Your existing ADR folder works as it is.

sieve why savings_linewhy savings_line  crates/sieve-savings/src/lib.rs:96decision  docs/adr/adr-0004-savings-header.md:1  ADR 0004: Each query result opens with one savings line          link: Code anchortest  crates/sieve-savings/src/lib.rs:236  savings_line_names_the_given_producttest  crates/sieve-savings/src/lib.rs:248  test_savings_sieve_header_has_no_tally_instruction...

Real output from the Sieve repo.

How why reads your records

A pane for Claude Code, and six small friends.

Run sieve init --mod, then /sieve-pane. The pane shows callers, impact, decision records and saved tokens next to your session.

A status line keeps a pixel mascot in view. Sieve, the kitchen sieve, is the default. Run /sieve-mascot soya if you prefer the poodle.

Set up the pane

Pick a mascot

/sieve-mascot sieve

It stays on your machine.

Read ADR 0001 and the privacy page.

  • No network call. A query never leaves your laptop.
  • No API key. No model pass. Your code is not sent to a provider.
  • No telemetry. sieve init writes only inside the repo unless you pass --global.

Numbers you can repeat.

Index 1,583 files from scratch
1.83s
Re-index with no change
0.80s
Median answer to a question (185 ms max)
158ms
of exact cross-file calls match the TypeScript compiler (1,232 of 1,232, name‑level)
100%

vite · 1,583 files · Apple M1 Pro · Sieve 0.1.0 · method →

Limit Sieve prints a token estimate after each query. Token savings in a real agent session are not measured yet.

Any MCP host.

sieve mcp serves the index over stdio with seven tools: find code, find all, trace calls, file API, repo map, check freshness and why.

{ "mcpServers": { "sieve": { "command": "sieve", "args": ["mcp"] } } }

Three lines to your first answer.

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/iamalvisng/sieve/releases/latest/download/sieve-cli-installer.sh | sh

macOS and Linux.

sieve build .
sieve ask "how does login work"