repo-graph
✗

# Editing code you
half-remember?

grep, skim, guess the signature…
⌁

# find the real symbol

one name → the actual node
⌁

# then read it

the real source — not an almost-right guess
$ grep -rn "SendFriendRequest" .
11 hits · 4 files · still guessing what it expects
$ repo-graph find SendFriendRequestHandler
SendFriendRequestHandler friends_controller.go:95
$ repo-graph read SendFriendRequestHandler · :95

    func SendFriendRequestHandler(c *gin.Context) {
        claims, ok := middleware.RequireClaims(c)
        target := c.Param("publicId")
        if target == "" || target == claims.ID {
            c.JSON(400, gin.H{"error": "invalid"})
        }

✗

# Dumping the whole repo?

50,000 chars · accuracy rots as it fills
⌁

# scope it to one feature

a fraction of the tokens, all the signal
$ repo-graph dense_text
≈50,000 charsRGR = repo_graph::graph::RustGraph RS = repo_graph::server [TOPOLOGY] RGR::__init__ > RGR::_build_flows RGR::downstream > RGR::_traverse RS::status > RS::get_graph RS::activate > RS::get_graph RS::impact > RS::get_graph … 1,300 more nodes … endpoint:GET protected/groups route:/groups/activities/:groupId component:GroupsComponent service:UserProfileService …
$ repo-graph dense_text GroupsComponent
≈2,600 chars[SCOPES] groups feature GroupsComponent > sortMessages GroupsComponent > loadActivities /groups > GroupsController GroupsController > MongoDB
✗

# FE calls the backend…
where?

grep each half — can't link them
⌁

# one trace

GroupsComponent → /groups
⌁

# the exact path

8 hops, frontend to data
$ grep "groups" web/ ; grep "groups" backend/
two greps, two halves · the link is invisible
$ repo-graph trace GroupsComponent /groups
✗

# Where does it live?

grep returns 131 hits — which one?
⌁

# one seed

a keyword, that's it
⌁

# the whole cluster, ranked

spreading activation — most relevant first
$ grep -rn "groups" .
131 matches across 40 files · no ranking, no idea
$ repo-graph activate GroupsComponent
0.62 GroupsComponent class
0.11 sortMessages method
0.08 loadActivities method
0.05 resolveRoomId method
0.04 GroupsController service
✗

# Where does this
feature start?

grep → read → grep → read…
⌁

# one flow

name the feature, that's it
⌁

# entry → data, one call

the feature as layered tiers
$ grep "groups" · cat · grep · cat …
15 files deep, still mapping it in your head
$ repo-graph flow groups
ENTRY
/groups
/groups/:id
↓
SERVICE
GroupsController
↓
HANDLERS
sortMessages
loadActivities
↓
DATA
MongoDB
⇣

# Add it in one line

no API key · no account · runs local
⇣

# works in every AI client

it's just an MCP server
⇣

# mapped instantly

13 tools, ready to navigate
$ uvx mcp-repo-graph --repo .
Claude Code
Cursor
VS Code
OpenAI Codex
Gemini CLI
Windsurf
Antigravity
Claude Desktop
any MCP client
✓ scanned 2,887 nodes · 53 cross-stack links · 13 tools ready