Concepts · dexes
A dex gives your Keep understanding of a domain.
Firekeep's server holds what your agents have learned. A dex is the other half: a pack
that runs on your machine, indexes one domain of your world, and answers questions
about it precisely. One ships today — Symdex, for code. The rest of this page is careful
about which parts of that sentence are already true.
Shipped in the product now, installed by default
Roadmap decided and designed, not built
What a dex is
An agent that can read your files is not the same as an agent that understands them.
Reading is linear and expensive: open the file, spend the context, hope the relevant
part was in it. Understanding needs structure — what this function is, who calls it,
what breaks if it changes.
A dex builds that structure. It parses a domain into an index, keeps the index local,
and exposes it to your agents as tools they can call. Nothing about it is a chat
wrapper or a file-reading shortcut; it is a real index, and the answers it gives are
derived from it.
Local
The parse and the index happen on the workstation. What is indexed does not travel to the Firekeep server.
Domain-shaped
A dex knows one world well — its own grammar, its own relationships — rather than treating everything as text.
Precise
Agents ask for a symbol, a caller list, an impact set. They get that, not the file it happened to live in.
Understanding, never action
A dex answers questions. It does not send, move or spend anything on your behalf.
The naming rule. A dex names what it indexes, and nothing gets the
-dex suffix unless it is genuinely an index.
This is not a style guide, it is the boundary. The moment a capability
acts — sends a message, moves a file, spends money — it is not a dex and
does not get the name, however convenient that would be. Keeping the suffix honest is
what keeps the category honest: everything in the dex family is something your Keep
understands, and understanding is a much smaller thing to trust than action.
Symdex — the first dex
Shipped
Symdex indexes source code. It parses your working tree with tree-sitter — a real
parser producing a real syntax tree, not regular expressions over text — and captures
functions, classes, methods, types, constants, routes and the relationships between
them across twelve languages.
It ships as firekeep-symdex, a stdio MCP server installed automatically with
the Firekeep client kit from a checksum-verified wheel. It runs beside your editor, as
your user, on your machine. There is no Symdex on the Firekeep server: a server has no
working tree to index (the vestigial server-side container was removed).
What agents can ask it
Navigate
Find a symbol by name or pattern and pull back that definition — not the 900-line file around it.
search_symbols · get_symbol · get_symbols · get_file_outline
Relationships
Who calls this, what it depends on, how the modules import each other, what inherits from what.
get_callers · get_dependencies · get_import_graph · get_type_hierarchy
Impact & review
What a change actually touches, what a reviewer needs open beside the diff, and what nothing references any more.
get_impact · get_review_context · find_dead_code
Architecture & scaffolding
The shape of the codebase as it is, and new code stubbed to match the conventions already in it.
get_architecture_map · scaffold_symbol
Thirty tools are registered by default, including list_repos for the indexed
inventory. A further eight — evolution timelines, code churn, contributors, change summaries,
pattern detection, complexity metrics, hotspots and repo comparison — are heavier analytics
that only mean anything once repositories are
indexed, so they are hidden unless you turn them on with
SYMDEX_ANALYTICS_ENABLED=true. A tool list is a context cost on every session;
tools that would return nothing useful do not get to charge it.
12languages parsed with tree-sitter
30tools registered by default
8analytics tools, off unless enabled
1,500files per index by default (FIREKEEP_SYMDEX_MAX_FILES)
Built-in language coverage
- Python
- JavaScript
- TypeScript
- Go
- Rust
- Java
- PHP
- C
- C#
- Ruby
- Kotlin
- Swift
Why the precision is the point
Across a repeatable 360-lookup benchmark over twelve pinned open-source projects, a
Symdex symbol response used 54.8% fewer estimated tokens than sending
that symbol's whole containing file, and every one of the 360 retrieved sources matched
the pinned Git blob byte-for-byte. It is a direct-retrieval measurement against a
whole-file baseline — not a claim about whole tasks or whole sessions, and 58 of the 360
lookups actually used more tokens than the file — small sources where the serialized
response can exceed the file itself.
The full method and the per-language table are in the docs.
Context spent on code an agent did not need is context unavailable for the problem it
was asked to solve. That is the whole argument for a dex over a file reader.
Private by construction
Shipped
The most common question about code intelligence is whether it uploads the repository.
It does not, and the reason is structural rather than a promise: the index is built and
stored on your workstation by a local process, and the Firekeep server has no code path
that receives it. Your repository is never uploaded to Firekeep.
Local indexing is not the same as local inference — and we would rather say so.
As with any local MCP tool, the specific code context an agent requests
becomes part of that agent's working context, and that context goes to whatever model
provider you configured for that client. Symdex does not change where your model runs.
What it changes is how much gets sent: a symbol and its relationships instead of every
file the agent might have grepped. The honest framing of a dex is not "your code stays
put" — it is "your index stays put, and far less of your code leaves."
Indexing runs on the workstation and can be switched off. Firekeep itself is self-hosted:
the memory server runs on a host you control, so the same reasoning applies one layer up.
The rest of the family
Roadmap
Code is one domain. It is not a special one — it is simply the domain we had the sharpest
problem in, and the one that proves the shape works. The direction is a family of dexes
that install and uninstall like any other capability, behind one registry the gateway
reads, so adding understanding of a new domain is an install rather than a rewrite.
None of that exists yet. The design is decided and written down; the
registry, the manifest and the firekeep dex command family are not built.
Today there is exactly one dex, it arrives with the client kit, and there is nothing to
add or remove. When the registry lands, an update will never take away a capability an
install already has.
Dex registry and CLI Not built
A manifest-driven registry behind the gateway, so dexes become a list you can inspect,
add to and run a doctor against — with per-dex scoped identity on the server side and
plainly-stated permissions on the client side. Designed; no code.
Docdex — documents Design stage
A folder-scanning dex for the documents a person actually keeps, so the Keep can
understand a runbook or a contract the way Symdex understands a call graph. The
server-side half — per-document visibility enforced as a hard filter on recall — is
shipped. The client-side scanner is a design document, and its first design decision
is that folder selection is a human privacy choice, so no agent can call a tool to
choose folders. That tool is absent, not guarded.
There is no announced dex list beyond this, and none of it appears in the product before
it works. If you are reading a Firekeep page and cannot tell whether something exists, that
is a bug in the page — tell us.
Getting the one that exists
Symdex needs no separate install. It comes with the Firekeep client kit, registers itself
with every runtime the kit configures — Claude Code, Codex, Kiro and OpenCode — and starts
answering when an agent asks. The install is one command on the workstation.