Hivemind Code Graph
A deterministic, AST-derived map of the current repository — every function,
class, method, interface, type, enum, const, and module, plus the edges between
them (calls, imports, extends, implements, method_of). It is queried as
synthesized files under the Deeplake mount; there are no real files on disk and
no network call in the read path.
The graph builds and refreshes automatically (on Stop / SessionEnd, gated by
a rate limit + git diff). You never run a build command — just read it.
Use it as a fast INDEX to locate the few files/symbols that matter, then open
them with Read to answer. It is not a substitute for the source.
When to use this skill
Activate when the user asks a structural / relational question about the code:
- "What calls
pushSnapshot?" / "Who uses this function?"
- "What does
deeplake-pull.ts import?" / "What depends on X?"
- "Where is
GraphSnapshot defined?" / "Find the function that handles Y."
- "What are the main subsystems / the architecture here?"
- "If I change this signature, what's affected?" → use
impact/<symbol> (transitive blast radius)
When NOT to use this skill
- Reading the body of a symbol you already located → use
Read on the real
source file. The graph gives location + relationships, not full source.
- Code that isn't committed/built yet — the graph can lag uncommitted edits.
If a file's mtime is newer than the build timestamp, read the live source.
- Languages outside TypeScript, JavaScript, and Python (Go, Rust, …) — the
extractor covers those three, with cross-file
calls/imports resolved for
named imports. For anything else, fall back to grep/read.
Path cheat sheet
cat ~/.deeplake/memory/graph/index.md
# Overview: node/edge counts, kind breakdown, top files by node count.
cat ~/.deeplake/memory/graph/query/<pattern> # START HERE (the 2-in-1)
# Search + expand the top matches with their 1-hop neighbors (callers,
# callees, imports, heritage). Multi-token AND: query/<a>+<b>.
cat ~/.deeplake/memory/graph/find/<pattern>
# Case-insensitive substring search on node id + label (max 50 hits).
# Prints numbered handles [1] [2] ... saved for this worktree.
cat ~/.deeplake/memory/graph/show/<handle-or-pattern>
# <handle>: a digit from a prior find/ (e.g. 3).
# <pattern>: a substring → unique node detail, or a candidate list.
# Output: the node + its 1-hop neighbors grouped by edge relation.
cat ~/.deeplake/memory/graph/neighborhood/<file>
# Every symbol in a file + its cross-file neighbors (callers/callees/imports).
cat ~/.deeplake/memory/graph/impact/<pattern>
# Transitive dependents — the blast radius of changing a symbol.
cat ~/.deeplake/memory/graph/path/<from>/<to>
# Shortest dependency path between two symbol patterns (trace a flow across files).
cat ~/.deeplake/memory/graph/layers # architectural layers / subsystems
cat ~/.deeplake/memory/graph/tour # deterministic guided walkthrough
Workflow
- Broad? Start at
index.md to see subsystems and the biggest files.
- Looking for a symbol?
find/<name> (or query/<name>) → pick the handle.
- Want relationships?
show/<handle> / neighborhood/<file> → callers/callees, imports.
- Tracing a flow?
path/<from>/<to>. Change impact? impact/<symbol>.
- Need the actual code? Take the
source_file:line and Read it — don't answer from the graph alone.
Anti-patterns (read these)
- "Incoming (0)" does NOT mean dead code. Cross-file
calls are resolved for
named imports (TS/JS/Python), but instance-method dispatch (obj.method()),
dynamic calls, and nested/inner functions are NOT — a zero-incoming symbol may
still be reached via one of those. Confirm in the source before calling it unused.
- The graph can be stale. It rebuilds at most once per rate-limit window. The
SessionStart inject prints the build age; if it's old or you've just edited a
file, prefer the live source for that file.
- Don't try to build it. There is no user-facing build step in normal use;
the hooks handle it. Just read the mount.
find/ is lexical, not semantic. It matches substrings, not meaning —
find/auth won't surface login/credentials unless those strings appear in
the id/label. Try multiple keywords if the first misses.
1---2name: hivemind-graph3description: Query the local code graph (functions, classes, calls, imports) through the Deeplake mount at memory/graph/. Use when the user asks structural questions about the codebase — "what calls X?", "what does Y import?", "where is Z defined?", "what is the architecture / which subsystems exist?". The graph is an AST-derived map of the repo, queried as files (no build needed — it rebuilds automatically).4---5
6# Hivemind Code Graph
7
8A deterministic, AST-derived map of the current repository — every function,
9class, method, interface, type, enum, const, and module, plus the edges between
10them (`calls`, `imports`, `extends`, `implements`, `method_of`). It is queried as
11synthesized files under the Deeplake mount; there are no real files on disk and
12no network call in the read path.
13
14The graph **builds and refreshes automatically** (on Stop / SessionEnd, gated by
15a rate limit + git diff). You never run a build command — just read it.
16
17Use it as a fast **INDEX** to locate the few files/symbols that matter, then open
18them with `Read` to answer. It is not a substitute for the source.
19
20## When to use this skill
21
22Activate when the user asks a *structural / relational* question about the code:
23
24- "What calls `pushSnapshot`?" / "Who uses this function?"
25- "What does `deeplake-pull.ts` import?" / "What depends on X?"
26- "Where is `GraphSnapshot` defined?" / "Find the function that handles Y."
27- "What are the main subsystems / the architecture here?"
28- "If I change this signature, what's affected?" → use `impact/<symbol>` (transitive blast radius)
29
30## When NOT to use this skill
31
32- Reading the **body** of a symbol you already located → use `Read` on the real
33 source file. The graph gives location + relationships, not full source.
34- Code that isn't **committed/built** yet — the graph can lag uncommitted edits.
35 If a file's mtime is newer than the build timestamp, read the live source.
36- Languages outside **TypeScript, JavaScript, and Python** (Go, Rust, …) — the
37 extractor covers those three, with cross-file `calls`/`imports` resolved for
38 named imports. For anything else, fall back to grep/read.
39
40## Path cheat sheet
41
42```bash
43cat ~/.deeplake/memory/graph/index.md
44# Overview: node/edge counts, kind breakdown, top files by node count.
45
46cat ~/.deeplake/memory/graph/query/<pattern> # START HERE (the 2-in-1)
47# Search + expand the top matches with their 1-hop neighbors (callers,
48# callees, imports, heritage). Multi-token AND: query/<a>+<b>.
49
50cat ~/.deeplake/memory/graph/find/<pattern>
51# Case-insensitive substring search on node id + label (max 50 hits).
52# Prints numbered handles [1] [2] ... saved for this worktree.
53
54cat ~/.deeplake/memory/graph/show/<handle-or-pattern>
55# <handle>: a digit from a prior find/ (e.g. 3).
56# <pattern>: a substring → unique node detail, or a candidate list.
57# Output: the node + its 1-hop neighbors grouped by edge relation.
58
59cat ~/.deeplake/memory/graph/neighborhood/<file>
60# Every symbol in a file + its cross-file neighbors (callers/callees/imports).
61
62cat ~/.deeplake/memory/graph/impact/<pattern>
63# Transitive dependents — the blast radius of changing a symbol.
64
65cat ~/.deeplake/memory/graph/path/<from>/<to>
66# Shortest dependency path between two symbol patterns (trace a flow across files).
67
68cat ~/.deeplake/memory/graph/layers # architectural layers / subsystems
69cat ~/.deeplake/memory/graph/tour # deterministic guided walkthrough
70```
71
72## Workflow
73
741. Broad? Start at `index.md` to see subsystems and the biggest files.
752. Looking for a symbol? `find/<name>` (or `query/<name>`) → pick the handle.
763. Want relationships? `show/<handle>` / `neighborhood/<file>` → callers/callees, imports.
774. Tracing a flow? `path/<from>/<to>`. Change impact? `impact/<symbol>`.
785. Need the actual code? Take the `source_file:line` and `Read` it — don't answer from the graph alone.
79
80## Anti-patterns (read these)
81
82- **"Incoming (0)" does NOT mean dead code.** Cross-file `calls` are resolved for
83 *named imports* (TS/JS/Python), but **instance-method dispatch** (`obj.method()`),
84 dynamic calls, and nested/inner functions are NOT — a zero-incoming symbol may
85 still be reached via one of those. Confirm in the source before calling it unused.
86- **The graph can be stale.** It rebuilds at most once per rate-limit window. The
87 SessionStart inject prints the build age; if it's old or you've just edited a
88 file, prefer the live source for that file.
89- **Don't try to build it.** There is no user-facing build step in normal use;
90 the hooks handle it. Just read the mount.
91- **`find/` is lexical, not semantic.** It matches substrings, not meaning —
92 `find/auth` won't surface `login`/`credentials` unless those strings appear in
93 the id/label. Try multiple keywords if the first misses.