deterministic · offline · $0 to index
Stop your coding agent reading whole files.
seonix indexes a repository with Python's
ast + git log — zero 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.
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 · Index
seonix cli index_repositorywalks the working tree with Python'sastand readsgit log, deriving a typedseonix:-ontology graph into a machine-local.seonix/directory. Same commit → byte-for-byte same graph. No network calls, nothing written outside.seonix/. -
2 · Locate
From your task text,
seonixranks 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 · 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.
-
Install the
seonixCLI:npm i -g @polycode-projects/seonix -
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.mdtool catalog). Same commit → byte-for-byte identical graph. -
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 -
Tell Claude Code the digest is there. Add one line to the repo's
CLAUDE.md(or paste it at the start of aclaudesession) 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 ↗.