// context
GEMINI.md
How Gemini should behave on this repo.
Free tier available. See plans →
For Gemini CLI users
GEMINI.md sets the working context. MCP lets Gemini reach for tools. Maguyva is the MCP server that gives Gemini a queryable map of your repo, so the first edit isn’t a guess at file structure.
Public beta. Free tier: 3 repos, 50K indexed lines, no card.
GEMINI.md is the context. MCP is the channel. Maguyva is the map. Four ideas. Each one does one job.
// context
How Gemini should behave on this repo.
// transport
How Gemini reaches for external tools and context.
// codebase
The MCP server that returns grounded repo facts.
// who pays
Agents don’t pay seats. See pricing
Persistent instructions belong in GEMINI.md. It is the right place for:
Keep it concise. Scope it. Commit it.
But GEMINI.md was never designed to be a queryable index of every symbol, file, and call site in your repo.
Four failure modes, one per card.
Telling Gemini how to work doesn’t tell it what exists. The first edit on an unfamiliar package is a guess about file paths and function names. GEMINI.md cannot list every symbol, and you wouldn’t want it to.
A GEMINI.md block describing your queue topology is right until someone introduces a new consumer. The code is now the source of truth and the doc is confidently stale. Gemini reads the wrong one.
“What references this class?” is not answerable from a markdown file. Gemini either grep-and-prays across the monorepo or asks you to paste call sites into the chat.
A large window is not the same as a queryable index. Loading GEMINI.md until Gemini “knows enough” still trades reasoning budget for static context volume.
Gemini users already think in this shape. The page should make it obvious.
GEMINI.md
context
how Gemini behaves
MCP
the channel
how it reaches
Maguyva
codebase facts
what it sees
GEMINI.md tells Gemini how to work.
Maguyva gives Gemini something to work from.
Gemini-specific. Grounded against the actual call graph, not Gemini’s grep.
// workflow 01
gemini> rename PaymentClient → BillingClient graph::callers(PaymentClient) 12 references across 7 packages graph::importers(src/payments/client.ts) 9 importers graph::extends(PaymentClient) 2 subclasses (RetryClient, MockClient) → Gemini proposes a 21-edit migration with the file list inline. [exit 0]
Gemini asks Maguyva for dependents before it starts editing. The migration list comes back grounded in the actual graph, not Gemini’s recollection.
// workflow 02
gemini> how does normalizePhoneNumber handle E.164? semantic::query("normalize phone E.164") src/util/phone.ts:88 normalizePhoneNumber() ← real impl test/util/phone.spec.ts:14 jest.mock(...) ← stub [exit 0]
Names lie. Mocks shadow real code. Maguyva ranks the real implementation above the test mock.
// workflow 03
gemini> what calls QueueDispatcher.publish? graph::callers(QueueDispatcher.publish) 3 in src/billing/* 1 in src/audit/* 1 in src/notifications/* [exit 0]
Cross-package call-sites surface inline. The diff is grounded against real importers, not Gemini’s grep.
Three steps. Free tier: 3 repos, 50K indexed lines, no card.
// step 01
Pick one you know well, so you can verify the answers.
// step 02
// ~/.gemini/settings.json
{
"mcpServers": {
"maguyva": {
"httpUrl": "https://maguyva.tools/mcp",
"headers": {
"Authorization": "Bearer <your-key>"
}
}
}
} // step 03
Don’t start with your whole company. Start with one repo and one verifiable question.