deterministic · offline · $0 to index

Stop your coding agent reading whole files.

seonix indexes a repository with Python's ast + git logzero model calls — into a typed code graph, then renders a bounded edit digest you inject once at session start. Your agent edits from turn 1 without fishing through the repo.

+54–72% median input-token cut · Sonnet 4.6
+63–73% median input-token cut · Haiku 4.5
$0 to index — no API keys, no cloud, no telemetry
quickstart →

Paired-arm benchmark: identical model pin, N≥3 runs, median input tokens over the tasks solved by both arms, one-time index cost reported separately, no solve-rate regression. The win is model-conditional — a leaner base agent has less exploration to displace. Full evidence: BENCHMARK_010 ↗ · BENCHMARK_013 ↗.

How it works

  1. 1 · Index

    seonix cli index_repository walks the working tree with Python's ast and reads git log, deriving a typed seonix:-ontology graph into a machine-local .seonix/ directory. Same commit → byte-for-byte same graph. No network calls, nothing written outside .seonix/.

  2. 2 · Locate

    From your task text, seonix ranks the modules the change touches against the graph — no human-chosen target (seonix cli seonix_locate). Already know the file? Hand it in directly and skip the search.

  3. 3 · Digest

    It renders a bounded edit digest — the relevant signatures, call sites and insertion regions for those modules — and you inject it once at session start. No MCP server, no tool loop: the saving comes from pre-rendering the map, not interactive round-trips. Deterministic, $0, cache-stable.

Quickstart with Claude Code

seonix is a Node package (ESM, Node ≥ 24) that shells out to Python 3 and git — both on PATH. Four steps take Claude Code from grepping the tree to editing from turn 1.

  1. Install the seonix CLI:

    npm i -g @polycode-projects/seonix
  2. Index the repo — deterministic, offline, zero model calls, $0:

    seonix cli index_repository '{"repo_path":"/abs/path/to/repo"}'

    This writes the typed code graph to .seonix/graph.json (plus a .seonix/TOOLS.md tool catalog). Same commit → byte-for-byte identical graph.

  3. Render a bounded edit-digest for the modules a task touches and save it where the agent can read it:

    # which modules does the change touch? (ranked, no LLM)
    seonix cli seonix_locate '{"repo_path":"/abs/path/to/repo","query":"<your task>"}'
    
    # render the digest for those modules → save it under .seonix/
    seonix cli digest '{"repo_path":"/abs/path/to/repo","modules":["src/pkg/module.py"]}' > /abs/path/to/repo/.seonix/digest.txt
  4. Tell Claude Code the digest is there. Add one line to the repo's CLAUDE.md (or paste it at the start of a claude session) so the agent reads the map before it edits, instead of fishing through files:

    A seonix code-graph digest is in .seonix/ — read
    .seonix/digest.txt to locate the code to change before editing.

    Claude Code now edits from turn 1. No MCP server, no tool loop — the saving comes from pre-rendering the map, not an interactive round-trip.

Prefer an interactive tool? Run seonix with no arguments from the indexed repo to start a stdio MCP server exposing the same graph — but the no-MCP digest above is the recommended, deployable path and the one the benchmarks measure. Indexing reads only the local working tree and git log: no network calls, and nothing written outside .seonix/. Add .seonix/ to .gitignore — it is rebuilt from source.

Configure & tune

No-MCP by default

The recommended path renders the digest once and runs your agent with no server attached. An MCP server (seonix with no arguments, from the indexed repo) is there for interactive use — but the pre-rendered digest is what the benchmarks measure and what deploys cleanly.

Locate, or hand in the target

seonix cli seonix_locate ranks the modules to edit straight from the task text — no human in the loop. Already know the file? Pass its path to digest directly and skip the search.

Determinism & cache

Re-running index on the same commit reproduces the graph byte-for-byte. Re-index after a checkout or branch change. The injected digest is cache-stable, so prompt caching keeps repeat turns cheap.

Cost & privacy

Indexing and querying cost $0 beyond CPU/disk — no model calls, no API keys, no cloud. seonix never phones home and never writes outside .seonix/.

seonix, indexing itself

The graph below is a live seonix viz render of seonix's own code graph — the same typed-edge structure it builds for any repo you point it at.

Visualisation loads here. If it doesn't, open the graph directly ↗.

Index your repo in 60 seconds.