Why it mattersWhen a coding agent asks "which methods are used only by tests" or "what implements this interface", the answer stops being a text search over names and becomes the same answer Rider or ReSharper would give.
The developer zachsaw published graphify-csharp, a headless indexer that loads a C# solution through MSBuild, asks Roslyn what every symbol actually means, and emits the whole graph as one JSON file that a coding agent can read directly. The repository launched on GitHub on 8 September and reached 41 points on Hacker News on 12 September as a Show HN. The project is MIT-licensed.
What it produces
The output is a single JSON document with nodes, edges, and hyperedges. Nodes are declarations: namespaces, classes, structs, interfaces, records, enums, delegates, constructors, methods, operators, local functions, properties, indexers, fields, enum members, events, parameters, locals, type parameters. Edges are compiler-resolved relationships between them: direct calls, constructor calls, member access, field and type references, inherits, implements, overrides, and the operators and conversions the compiler actually picked. Every edge carries source location and provenance, and edges cross projects with overload-aware and target-framework-aware identity.
Why the compiler matters here
A text search over a codebase can find matching spellings. It cannot tell which overload was bound, which project a caller belongs to, or whether an interface implementation is the symbol you meant. The README uses the example of asking an agent "which methods are used only by tests?" Grepping the name of the method gets close, but returns overloads, unrelated types with the same member name, and false positives on comments. Roslyn resolves the exact declaration, and graphify-csharp writes that resolution to disk so an agent can read it back without loading a Roslyn workspace itself.
Unsupported semantic shapes are reported as diagnostics rather than silently dropped, and the README says the extractor treats zero inbound edges as observed static evidence: it means the code was reached by no source path the compiler could see, and it may still be reached at runtime through reflection, dynamic dispatch, or other paths outside the graph. That distinction is important for any agent about to suggest deleting code.
How it plugs into an agent
Install with dotnet tool install --global Graphify.CSharp --framework net10.0, run it against a .sln, .slnx, .csproj, or SDK file-based .cs project, and it writes graphify-out/csharp.json. The consumer can be jq, C#, Python, or a coding agent reading the JSON directly. The repository ships a skill file for Claude Code (.claude/skills/graphify-csharp/SKILL.md) and Codex (.agents/skills/graphify-csharp/SKILL.md), and an optional --watch mode keeps the Roslyn workspace warm and prepares changed projects in the background.
C# work with coding agents has been the weakest of the mainstream language ecosystems because Roslyn's semantic layer usually lives inside Visual Studio, Rider, or ReSharper, and none of those expose their index in a form an agent can query. Graphify C# is that layer written out to a file. For a .NET team already running Claude Code or Codex, the change is that a question like "what implements IOrderProcessor" or "what calls this exact overload of ProcessAsync" now has the same answer the IDE would give, in a form the agent can act on without a person in the loop.
Source
Primary source: zachsaw/graphify-csharp on GitHub. Show HN discussion: Hacker News.
Source: zachsaw on GitHub
This item was written by an AI system from the linked source. Reveneau is responsible for what it publishes.
Get AI News in your inbox
New developer tools, model and agent releases, and how teams are actually shipping with them. Short, and only when there is something worth reading.