gitnexus-guide
Use when the user asks about GitNexus itself — available tools, how to query the knowledge graph, MCP resources, graph schema, or workflow reference. Examples: "What GitNexus tools are available?", "How do I use GitNexus?"
By abhigyanpatwari · 747 installs
npx skills add abhigyanpatwari/gitnexus --skill gitnexus-guide
Source repository · Upstream listing
GitNexus Guide
Quick reference for all GitNexus MCP tools, resources, and the knowledge graph schema.
Always Start Here
For any task involving code understanding, debugging, impact analysis, or refactoring:
1. Bind the repository once — use a confirmed registry name/path or configured default; call list repos if unknown. Read hot tool staleness ; use gitnexus://repo/{name}/context when an overview is needed.
2. Match your task to a skill below and read that skill file
3. Follow the skill's workflow and checklist
If step 1 warns the index is stale, run node .gitnexus/run.cjs analyze in the terminal first.
On query / context / impact / cypher , read staleness.status and staleness.branch / lastCommit before using the answer. Re analyze only for behind or diverged .
Skills
Task Skill to read
Understand architecture / "How does X work?" gitnexus exploring
Blast radius / "What breaks if I change X?" gitnexus impact analysis
Trace bugs / "Why is X failing?" gitnexus debugging
Rename / extract / split / refactor gitnexus refactoring
Tools, resources, schema reference gitnexus guide (this file)
Index, status, clean, wiki CLI commands gitnexus cli
Tools Reference
Tool What it gives you
query Process grouped code intelligence — execution flows related to a concept
context 360 degree symbol view — categorized refs, processes it participates in
impact Symbol blast radius — what breaks at depth 1/2/3 with confidence
trace Shortest path between two symbols — "how does A reach B?" in one call
detect changes Git diff impact — what do your current changes affect
rename Semantic rename: previews by default ( dry run omitted/true), applies with dry run: false and the preview's plan token ; inspect application status and failures
cypher Raw graph queries (read gitnexus://repo/{name}/schema first)
explain Persisted taint findings — source→sink data flows (needs analyze pdg )
pdg query Control/data dependence — what gates X (CDG) / where Y flows (REACHING DEF); needs analyze pdg
check Check graph invariants such as circular imports
route map API route map — which components/hooks fetch which endpoints, and the handler files that serve them
shape check Response shape drift — keys each route returns vs keys its consumers access (flags MISMATCH)
api impact Pre change report for an API route — consumers, middleware, shape mismatches, risk level
tool map MCP/RPC tool definitions and the files that handle them
group list List configured multi repo groups, or one group's config
group sync Rebuild a group's Contract Registry (cross repo HTTP contract links); run after group.yaml changes or member re index
list repos Discover indexed repos (paginated — limit / offset )
Choose a focused response
Use the connected server's schema; older servers may not advertise the new
filters. All options below are explicit: omitting them preserves existing output.
Use filters for bulky unwanted sections; on an already small response, omission
metadata can outweigh the bytes saved.
Question Options
Which symbols implement this? query : limit: 3 , max symbols: 3 , include content: false , chain depth: 0 , response sections: ["process symbols", "definitions"]
Which execution flows match? query : keep processes in response sections ; join its id to process symbols[].process id
Who calls this exact symbol? context : uid , response sections: ["incoming"] , relationTypes: ["CALLS"]
What does it call, with source? context : uid , include content: true , response sections: ["outgoing"] , relationTypes: ["CALLS"]
What is the impact summary? impact : direction: "upstream" , summaryOnly: true ; risk calculation and totals are retained
Which affected symbols need inspection? impact : limit: 10 , offset: 0 ; page as indicated by the response
How does A reach B? trace : from uid , to uid
response sections selects data sections for single repository MCP query or
context (not @group routes). Query choices: processes , process symbols ,
definitions . Context choices: incoming , outgoing , processes , chain ,
routes , typed properties ; the selected symbol always remains. Context
relationTypes accepts uppercase relationship names advertised by its schema
and filters only the existing incoming/outgoing categories. It does not change
ranking, traversal, source retention or the bounded candidate/reference windows.
Filters add response filter with the selection and omitted fields/categories.
Warnings, ambiguity, staleness and completeness metadata always remain. An empty
filtered view is not proof of absence. Omit filters to expand, and never waive
impact checks because a selected category is empty. maxTokens is a byte cutoff,
not pagination: it can cut JSON. Prefer these filters, small result counts, and
source/chain expansion for a selected symbol rather than a large search result.
Stop once enough evidence answers the question; do not run every tool by default.
Paginating list repos
list repos is paginated so a large registry is not truncated by MCP/LLM token limits. It takes optional limit (default 50 , max 200 ) and offset , and returns:
To enumerate every repository, keep calling with offset set to pagination.nextOffset until hasMore is false :
Notes: offset ≥ total returns an empty page (with total still reported). Out of range or malformed limit / offset (non integer, limit outside [1, 200] , offset < 0 ) are rejected with a clear error — limit above the max is rejected, not silently capped. The order is deterministic (lower cased name, then path), so paging never skips or duplicates an entry while the registry is unchanged.
Inline staleness signal ( query / context / impact / cypher )
These four hot read tools attach a non blocking staleness field to every response, in the shape { status, branch?, lastCommit, indexedAt, measuredAgainst, commitsBehind?, hint? } . It answers two different questions at once: which index answered and how fresh it is . The identity half is why the field is present even when nothing is wrong — an answer computed from a branch pinned index is otherwise indistinguishable from one computed from the default branch ( 3291):
status: "current" here means this index is at the HEAD of the clone it was built from — not that it is current with the default branch. measuredAgainst names what commitsBehind is counted against: the checked out HEAD of that clone, never the remote. branch is the branch the index represents; it is absent for a detached HEAD, a non git folder, or a legacy index that never recorded one, so read lastCommit when you need an identifier that is always present.
When the index is behind that HEAD, the count and hint ride along:
commitsBehind is present only when git counted the gap. When git could not count it but HEAD still resolves to a commit other than the indexed one — usually because the indexed commit is no longer in the clone's history — the index is provably not at HEAD with no countable gap, so no number is reported:
So: read status before using commitsBehind , and read branch / lastCommit before assuming which ref the answer describes. status: "unknown" means the freshness check could not run at all (a skip git folder has no history to measure) — the ref is still reported, because which index answered is knowable even when its freshness is not. The field is only ever added to object results — raw array cypher output and error envelopes are returned unchanged. @group targeted calls do not carry it (multi repo staleness is ill defined). Re run analyze only for behind or diverged — those mean the index is not at this clone's HEAD. unknown is unmeasurable, not stale; analyze cannot make it current unless git history exists.
list repos and the HTTP repo routes are unchanged: they omit staleness entirely for a current index and report the ref through their own top level branch / lastCommit / indexedAt fields.
Taint findings ( explain )
explain returns taint findings recorded by gitnexus analyze pdg — intra procedural TAINTED edges plus cross function TAINT PATH hops where the interprocedural taint phase found a function level source→sink chain. Each finding includes a sink category (command injection, code injection, path traversal, sql injection, xss), source/sink lines, and the ordered hop path with the variable carried on each hop.
explain {} — enumerate all findings for the repo (bounded by limit , deterministic order)
explain { target: "src/vuln.ts" } — findings in a file (suffix path match accepted)
explain { target: "runUserCommand" } — findings in a function (resolved like context ; ambiguous names return ranked candidates)
A repo indexed without pdg returns a clear "no taint layer" note. Caveats: closure/callback, property/field, and implicit flows are not modeled, and interprocedural findings are function level TAINT PATH hops rather than statement level path proof, so the absence of a finding is not proof of safety. SANITIZES (sanitizer kill) edges are queryable via cypher .
Control & data dependence ( pdg query )
pdg query reads the control/data dependence layers gitnexus analyze pdg records (CDG + REACHING DEF, basic block granular) — the control/data analog of explain . It is always anchored (a target file path or symbol, resolved like context ) and has two modes:
pdg query { mode: "controls", target: "..." } — CDG: "under what condition does X run?". Each edge is a controlling predicate block → dependent block with the branch sense ( 'T' / 'F' ) in reason ; an edge into an early return / throw is flagged guard: true (guard clause discovery — the sense depends on the predicate, so don't filter guards by a fixed label).
pdg query { mode: "flows", target: "...", variable?: "..." } — REACHING DEF def→use edges within the function; pass variable to trace one binding.
A repo indexed without pdg returns a "no PDG layer" note (or "status unknown" when the layer can't be confirmed). Intra procedural only — cross function flow is taint's domain ( explain ). The raw CDG/REACHING DEF edges are also queryable via cypher . See the gitnexus pdg query skill for the full query surface.
Shortest path between two symbols ( trace )
trace answers "how does A reach B?" in one call — the shortest directed path over CALLS (plus HAS METHOD , so a class rooted trace descends into its methods) instead of chaining 3–8 context / impact hops by hand.
trace { from: "validateUser", to: "executeQuery" } — shortest path between two symbols.
Disambiguate common names with from uid / to uid (zero ambiguity) or from file / to file ; an ambiguous name returns ranked candidates.
maxDepth (default 10, max 30) bounds the search; includeTests (default false) lets the traversal pass through test file symbols.
Returns ordered hops (each { name, filePath, startLine } ) and an aligned edges[] of { relType, confidence } , so call hops and containment ( HAS METHOD ) hops stay distinguishable. When no path exists it reports the furthest reachable node (where the chain breaks) and sets truncated: tru