Skip to content

Eyrie

A live map of how code moves through a repository.

Eyrie parses a repository locally, builds a code knowledge graph, derives a small architecture graph from it, and presents it as an interactive map that stays synchronised with the source. When a file is saved, only the affected region is recomputed and the change animates into the map.

  • In development
  • AGPL-3.0-only
  • Runs on your machine
bookstore-appActual product UI
Actual Eyrie System lens over the bookstore fixture, showing grouped UI, API, Services and Data connected to external services.

System lens over the bookstore fixture. Captured from the working Eyrie application.

View full-size capture

Showcase

Still true after an hour of editing.

That is the promise Eyrie is built to keep: the map follows the code, save by save. The captures below show the working tool against a bookstore fixture: the four lenses, the Health findings, then the change tape after a save.

Actual product UI
Actual Eyrie System lens over the bookstore fixture, showing UI, API, Services, Data and external service dependencies.
System lens · bookstore fixture · captured from the working tool.View full size

A real repository. A real map.

These captures show the working tool against a bookstore fixture. Open either image at full size to inspect the interface.

The video walkthrough is not available yet. The captures above show the current UI.

What to look for

  1. Index a checkout, and read the six lanes in request order.
  2. Save a file, and watch only what moved animate into the map.
  3. Ask what an edit would break, before making it.
  4. Hand the question to an agent over MCP, and see what it changed after.

The list describes documented behaviour. Still captures do not demonstrate animation or agent execution.

How it works

Five stages. One traceable map.

Follow the source from syntax facts to a live architecture map. The first three panels explain the mechanism; the final two show the working tool.

  1. 01

    Parse

    tree-sitter, against the checkout on your disk

    Eyrie reads the repository already open on your machine and extracts syntax facts with tree-sitter. Sixteen language groups are supported, including Kotlin, Swift, C/C++, Dart, Vue, Objective-C and Lua. TypeScript and JavaScript still have the deepest support.

    Source → syntax factsIllustrative input
    orders/service.ts
    export function listOrders() {
      return db.query(orders)
    }
    Symbol
    listOrders
    Kind
    Function declaration
    Call
    db.query
    16 language groups supported. TypeScript / JavaScript has the deepest support.
  2. 02

    Resolve

    every edge traces to a parsed fact

    Each relationship between symbols comes from that analysis and carries a confidence score. There is no inference by resemblance and no model in this path — the same commit yields the same graph, every time.

    A relationship, with its evidenceIllustrative example
    OrderRoutecalls OrderService
    Source
    app/api/orders/route.ts:14
    Target
    listOrders()
    Evidence
    call_expression
    Relationships carry their source location and confidence. This example names the evidence, not a generated guess.
  3. 03

    Store

    stable identity over fresh layout

    A node's id is a hash of repository, file path, symbol kind and qualified name. Unchanged code keeps its identity across edits, so the map does not reshuffle under you. The cache is a single file you can delete at any time.

    Identity that survives an editMechanism
    RepositoryFile pathSymbol kindQualified name
    Stable node identifierhash(repo, path, kind, name)
    Local cache~/.eyrie/repos/<hash>/graph.db
    The identifier derives from these four inputs. A body-only edit does not change the symbol’s identity.
  4. 04

    Derive

    six lanes, read in request order

    Presentational components, hooks, helpers and SDK wrappers are lifted out, and edges pass through them — leaving the components that actually carry the architecture. Classification follows framework conventions and names, so it is heuristic; a doc comment on a component's main export overrides what was derived.

    The architecture, derivedActual UI
    Actual Eyrie Architecture lens displaying the bookstore fixture's components in lanes, from UI to data.
    Architecture lens over the bookstore fixture. Open the capture to inspect the working interface.Full-size capture
  5. 05

    Live sync

    on save, only what moved

    Eyrie invalidates the files that changed, plus the files that consulted them — and those only when their exported surface changed. It emits an exact diff, animates it into the map, and records it on the change tape. This is the part that stops a diagram from going stale.

    One save, recordedActual UI
    Actual Eyrie change tape after a save to catalog.service.ts.
    Bookstore fixture: one component edited, structure unchanged.Full-size capture

What it does

Four fundamentals,
made concrete.

Live sync

On save, only what moved

Eyrie invalidates the files that changed, plus the files that consulted them — and those only when their exported surface changed. It emits an exact diff, animates it into the map, and records it on the change tape. This is the part that stops a diagram from going stale.

One save, recordedActual UI
Actual Eyrie change tape after a save to catalog.service.ts.
Bookstore fixture: one component edited, structure unchanged.Full-size capture

Traced edges

Every edge traces to a parsed fact

Each relationship comes from tree-sitter analysis and carries a confidence score. There is no inference by resemblance and no model in this path — the same commit yields the same graph, every time.

A relationship, with its evidenceIllustrative example
OrderRoutecalls OrderService
Source
app/api/orders/route.ts:14
Target
listOrders()
Evidence
call_expression
Relationships carry their source location and confidence. This example names the evidence, not a generated guess.

Agent-ready

An agent can ask what it is about to break

Codebases are modified by agents now, and the same graph is reachable over MCP: twelve tools, from impact before an edit to recent changes after it. One command wires it into the agent with eyrie init-agents.

The map, available to your agentDocumented tools
Connect over stdio$ eyrie mcp
Before an edit
impact
Find the owner
components_for_files
After an edit
recent_changes
MCP tools query the same graph. Tool names are real; no fabricated agent response is shown.

Local by default

On your machine — with the exception named

AI notes are off by default, and in that state Eyrie makes no network requests at all: a loopback server with a per-run token, no accounts, no telemetry. Turn notes on and your own CLI sends commit metadata — never source code — under your account.

Local runtime. Explicit boundaries.Documented configuration
Loopback server127.0.0.1
Access
Per-run token
Accounts
Not required
AI notes
Opt-in per project
AI notes are opt-in per project. When enabled, your own CLI sends commit metadata under your account.

Against the alternatives

Not the only way to read a codebase. Just the one that stays true.

Eyrie refuses one thing the category accepts: a picture that goes stale the day it is produced. How that refusal compares, row by row.

Eyrie’s column is highlighted. Scroll horizontally to compare all categories.

Eyrie compared with static diagram generators, IDE dependency views, and AI coding assistants
CapabilityEyrieIn developmentStatic diagram generatorsIDE dependency viewsAI coding assistants
Stays true while you editYes — on save, only the affected region is re-resolved and the diff animates in.No — a new export each time; stale between runs.Partial — reflects the open workspace, not a map you keep.No — answers come from a snapshot of context, not a live model.
Every relationship traces to a parsed factYes — tree-sitter analysis with a confidence score; same commit, same graph.Varies — many infer from imports alone.Yes — from the compiler's own model of the code.No — asserted from patterns; edges can be hallucinated.
Stable identity across editsYes — a node id hashes repository, path, kind and name.Rarely — layouts typically rebuild from scratch.Not applicable — views rebuild; nothing persists.No — there is no persistent model to keep stable.
Coding agents can query itYes — twelve MCP tools over stdio, onboarded with eyrie init-agents.No — pictures have no query surface.Rarely — usually no agent-facing API.Partial — the agent is the interface; there is no inspectable graph.
Runs locally without an accountToday, yes — loopback server, no telemetry; AI notes are opt-in.Varies — some local, some hosted.Yes — local by nature.Usually no — inference typically runs in the cloud.
Edits your codeNo — Eyrie reads; your editor or agent writes.No.Yes — it is an editor.Yes — generation is the point.

What is typical of each category; verify per tool. The Eyrie column follows its own record: in development, launch status Hold.

The sixty-second test

Three questions your codebase should answer in a minute.

The map answers with impact: every caller, up through the route that reaches it — before you touch a line.

answers with · impact

$ pnpm start -- /path/to/repo→ http://127.0.0.1:4319 · requires Node.js 22.13+ and pnpm 9

From source. There is no published binary and no npm package yet, and the desktop build — macOS only, unsigned — is not distributed.

Sample answers describe documented behaviour; component names are illustrative.

Four lenses

One graph, asked four different questions.

Every pointer action has a key

1 – 4
Switch lens
V
2D or 3D
F
Fit to screen
⌘K /
Search
System
The whole territory: applications, services and the external things they depend on.
Architecture
The components themselves, in their lanes, with the edges that connect them.
Data flow
Which components read and which write, and what they touch to do it.
Sequence
One request as call lifelines, from the first handler down to data.
  • 2D mapThe default reading surface.
  • 3D cityThe same graph as blocks, where height is lines of code.

For coding agents

An agent can ask what it is about to break.

Codebases are modified by agents now, and the same graph is reachable over MCP. An agent can ask what a file belongs to before an edit, and what its edits changed afterwards.

eyrie mcp
Serve the graph over stdio
eyrie init-agents
Wire it into your agent
architecture_overview
The repository at a glance. Start here.
find_components
Search by name, route, domain or file path.
explain_component
What it is, what it holds, what uses it.
impact
What could break if this changes. Use before editing.
trace
Everything it depends on, down to data and external.
find_path
The shortest dependency chain between two components.
components_for_files
Which components own the files you are about to edit.
recent_changes
What your saves moved in the architecture.
record_intent
Record the task the agent is working on.
commit_history
Commits mapped onto the components they touched.
check
Findings for the files just changed.
ask
Grounded questions, answered only from graph results.

Languages

  • TypeScript / JavaScriptDeepest support
  • PythonParsed
  • GoParsed
  • JavaParsed
  • C#Parsed
  • PHPParsed
  • RubyParsed
  • RustParsed
  • Kotlin.kt / .kts
  • SwiftModules and targets
  • CQuoted includes
  • C++Includes and namespaces
  • DartRelative / package: URIs
  • VueScript blocks and component tags
  • Objective-C.m files
  • Luarequire paths

Current limits

  • C++20 modules and system headers are not followed.
  • Objective-C++ .mm files are skipped; .h files use the C++ parser.
  • Vue support covers script blocks and template component tags, not directives.

Where it runs

On your machine — and here is the exception.

No network requests with AI notes off
AI notes are off by default. In that state Eyrie makes no network requests at all. Fonts and tree-sitter grammars are bundled, not fetched.
Loopback only, with a per-run token
The server binds 127.0.0.1, requires a random token generated for that run, and rejects non-local Host headers with a 403 as DNS-rebinding protection.
The source endpoint cannot reach outside the index
It serves a file only if that file is in the index, so .env files, keys and git-ignored paths are unreachable through it.
No accounts, no telemetry
There is no account system and no analytics. Nothing is sent home to report that you ran it.

The one path out

Turned on for a project, AI notes run your own Claude Code or Codex CLI, which sends commit messages, author names, changed paths with line counts and component names — never source code — to Anthropic or OpenAI under your account. Neither model can act on the machine. It is opt-in per project, and the content is named before you turn it on.

Running it

One command, against a checkout you already have.

$ pnpm start -- /path/to/repo→ http://127.0.0.1:4319

Requires Node.js 22.13+ and pnpm 9. From source. There is no published binary and no npm package yet, and the desktop build — macOS only, unsigned — is not distributed.

An eyrie is a bird of prey's nest built high on a crag — the vantage point you watch the whole territory from.

Shipped

  • Repository indexing with content-hash caching
  • The six-lane architecture map and all four lenses
  • 2D map and 3D city views
  • Live updates with diff animation and the change tape
  • Details panel, trace and impact, search, filters, keyboard navigation
  • MCP server with twelve tools, and agent onboarding via eyrie init-agents
  • Commit history, with agent co-authors read from Co-Authored-By
  • Optional AI notes per commit, through your own CLI

Planned

  • Collapse / expand and semantic zoom
  • Path finding in the UI, and code-level impact
  • Architecture rules, findings, and explanations of them
  • Git overlays, branch and commit diffs, timeline
  • A distributed desktop app, and the npm CLI @eyrie-hq/cli

Known gaps

  • Launch status is Hold: screen-reader structure and one contrast failure are open.
  • Its faint text token does not reach 4.5:1 contrast, and is used at 9.5–10px.
  • Never tested with a screen reader.
  • Desktop and laptop only. There is no mobile layout.
  • No control-flow analysis, so no branch or retry views.
  • Eyrie reads; your editor or agent writes. It never edits your code.