[ CODE GRAPH · v0.1.0 ]

The map of your code, before the agent edits it.

GraphTrail indexes your repo into a small SQLite graph of symbols, imports, and call edges, then answers structural questions, callers, callees, impact, and context, over a CLI and a read-only MCP server. Python, TS/JS, Rust, and Go. No daemon, no network.

View on GitHub →

Le plan: the map every station works from.

[ 01 · FLOW ]

Index · once, then incremental

  • graphtrail init points at a repo
  • tree-sitter parses each file in one pass
  • symbols, imports, and call edges extracted per language
  • written to a small local SQLite graph
  • graphtrail sync is incremental, a no-op when nothing changed

Query · before you edit

  • search symbols by name or text
  • callers and callees of any symbol
  • impact, the blast radius of a change
  • context, a graph pack for a term or symbol
  • over the CLI or the read-only MCP server

GraphTrail stays a sidecar. It owns symbols, imports, call edges, and graph context, and nothing else. Code Search keeps semantic chunks and embeddings, MiseLedger owns evidence archives, and Brigade owns workflow and guardrails.

[ 02 · MCP SERVER ]

graphtrail-mcp is a read-only MCP server (newline-delimited JSON-RPC over stdio). It exposes the query commands as tools, search, callers, callees, impact, context, and stats, and opens the database read-only, so it can never mutate the graph. It is multi-repo: one running server answers for any indexed repository, and the database is opened lazily per call.

Register it with any MCP client (Claude Code shown):

{
  "mcpServers": {
    "graphtrail": {
      "command": "/abs/path/to/graphtrail-mcp",
      "args": ["--db", "/abs/path/to/repo/.graphtrail/graphtrail.db"]
    }
  }
}

[ 03 · GUARANTEES ]

AST, not regex

Symbols, imports, and call edges come from the tree-sitter AST in one pass per file, behind a per-language provider. Call edges resolve by name, same-file first, then a capped cross-file match.

Four languages today

Python, TypeScript/JavaScript, Rust, and Go, each a LangSpec provider. The graph shape is identical across all of them.

Read-only after indexing

Once the graph is built, GraphTrail only reads. It installs no hooks, starts no daemon, and makes no network calls.

Read-only MCP, multi-repo

graphtrail-mcp opens the database read-only and answers for any indexed repo from one process. It starts even before a default database exists.

Brigade adapter built in

context --markdown renders a graph context pack as a Brigade-friendly markdown document, droppable straight into a handoff evidence section.

Optional Code Search + MiseLedger

Cargo features blend Code Search embedding hits with graph centrality, and surface MiseLedger evidence mentioning a symbol. The default binary stays free of network and cross-tool dependencies.

[ 04 · COMMANDS ]

CommandWhat it does
graphtrail init <repo>Create the graph database and index every supported file.
graphtrail sync <repo>Incremental re-index, a no-op when nothing changed. Add --force to rebuild every file.
graphtrail search <query>Full-text search over symbols.
graphtrail callers <symbol>Every symbol that calls this one.
graphtrail callees <symbol>Every symbol this one calls.
graphtrail impact <symbol>The blast radius: what a change here can reach.
graphtrail context <query>A graph context pack for a term or symbol. Add --json, or --markdown for a Brigade handoff.
graphtrail statsCounts of files, symbols, edges, and imports. Add --json.

Index a repo, then drop a graph context pack straight into a Brigade handoff:

[ 05 · FLEET ]

GraphTrail is one station in the Brigade fleet from Escoffier Labs. Each tool owns one job and hands off to the next, so the default binary stays small and local.

GraphTrail

Symbols, imports, call edges, and graph context: the structural map of the codebase. This is the site you are on.

Code Search

Semantic chunks, summaries, and embeddings. Blends with GraphTrail centrality through an optional adapter.

MiseLedger

Local-first evidence graph: session and evidence archives with JSON receipts. GraphTrail can link symbols to prior sessions.

Brigade

Operator workflow, handoffs, context packs, and guardrails. Drops GraphTrail context packs into handoff evidence.