He remembers what your repos forgot.

greybeard is a local cross-repo dependency graph your AI agent consults before it breaks something in another repo. Been here longer than the version control. Watched the monolith split. Knows who still reads that table.

/plugin marketplace add deepaksinghcs14/greybeard
Claude Code, macOS/Linux — the plugin bootstraps everything, binary included. Codex & others ↓

the problem

Locally correct. Globally breaking.

Claude Code and Codex are scoped to whichever repo they're opened in. Neither can answer "what depends on this endpoint?" or "is it safe to delete this column?" — the answers exist, scattered across go.mod files, OpenAPI specs, protos, and migrations in your other repos, but nothing connects them. So the agent ships a beautiful change, all tests green, and billing breaks at 2am.

Without greybeard

"Done — renamed orders.total to amount, updated the model and every reference in this repo. All tests pass. ✅"

billing-svc's nightly reconciliation, which reads that column directly, dies silently at 2am.

With greybeard

"Before I touch this: billing-svc reads the orders schema directly. A rename breaks its reconciliation silently. Proceed and flag billing-svc, add a compatibility view, or hold off?"

The old man saw it coming. He always does.

the graph

What he sees when you ask

The same view greybeard visualize serves at localhost — drag a node to pin it, click a repo for its endpoints, schemas, and connections, hover an edge for the evidence behind it. This one runs on demo data; yours is built from your repos and never leaves your machine.

⌘/ctrl+scroll to zoom · drag background to pan · drop a node to pin it · double-click to unpin

the shape of it

Small enough to trust

1
SQLite file. The entire backend. No server, no daemon, nothing to babysit.
3
queries agents ask: what's related, who calls this, who reads this schema.
~20ms
session-start freshness check. Silent when there's nothing to say.
0
API keys, hosted services, telemetry. Everything stays on your machine.

how it works

Extract, store, serve, learn

01 EXTRACT

Read what repos declare

Manifests, OpenAPI specs, protos, SQL migrations, exported symbols — parsed once per repo, kept fresh by a session hook.

02 STORE

A typed graph

Repos, endpoints, schemas, symbols, packages — edges typed by the evidence behind them.

03 SERVE

MCP over stdio

Any agent asks before changing anything. Every answer flags it if the graph has gaps, so empty never gets mistaken for confirmed.

04 LEARN

Agents teach it back

Relationships your agent verifies in code get recorded with file:line evidence. The graph compounds.

at work

The old man, building

Parallel extraction, per-repo progress, one transactional write — a killed build changes nothing.

~/code
 greybeard build
🧔 extracting 27 repos…
   billing-svc — 0 endpoints · 1 schemas · 6 symbols · 2 deps (1ms)
   orders-svc — 2 endpoints · 2 schemas · 11 symbols · 1 deps (2ms)
   connector-platform — 2 endpoints · 1 schemas · 24 symbols · 14 deps (31ms)
🧔 cross-referencing…
   billing-svc — 3 cross-repo edges (1ms)

🧔 done. 27 repos · 243 nodes · 38 edges (1m29s)

evidence, graded

Same name is not same thing

Every edge carries its type and provenance. Below the evidence bar, nothing enters the graph — your users table and someone else's users table are strangers until proven otherwise. A false edge is worse than a missing one.

importsdeclared in manifests — a hard, compile-time fact
calls_apiruntime call, matched in quoted strings — can be versioned gracefully
shares_schemadata contract, matched in SQL context with org & corroboration rules — breaks silently, checked loudly
calls_symbolexported function/type/class name, same org & corroboration rules as shares_schema

commands

Five in chat, the rest in the terminal

/greybeard-init
register every repo under a root — once
/greybeard-build
full extraction, per-repo progress in chat
/greybeard-query
ask the graph anything, plain language
/greybeard-audit
what's empty, what's stale — changes nothing
/greybeard-visualize
open the interactive graph from chat
greybeard visualize
interactive force-directed graph at localhost
greybeard audit
same report, no agent needed — script it into CI
greybeard update
self-updates daily in the background anyway

works with

Your agent already knows him

honesty

What greybeard doesn't know