dotnet-explore
Skill2 starsChanged 53 days agoMITView on GitHub
Use before changing C#/.NET code when the set of symbols the task touches is not already known — surveying an unfamiliar subsystem, assessing how a new feature lands in the existing codebase, or finding out what a change would break. Delegates the wide search_index/get_references sweep to the plugin's dotnet-explore subagent, which spends those responses in its own context and hands back symbolIds, file:line use sites and the blast radius. Read-only: it cannot edit.
In this repository10 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- dotnet-architectureSkill
- dotnet-consistencySkill
- dotnet-initSkill
- dotnet-performanceSkill
- dotnet-readSkill
- dotnet-reviewSkill
- dotnet-selfevalSkill
- dotnet-writeSkill
The file
We split this skill into the rules it gives an agent
2 rules. About 0 are common, 2 are distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 32
Invoke it: when the symbol set is genuinely unknown: an unfamiliar subsystem, "how would this feature land", "what breaks if I change …
- Distinctive: line 92
It reports locations, not conclusions: No quality judgments, no design opinions, no proposed diffs.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Delegating the sweep to dotnet-explore
This plugin ships one read-only navigator subagent, dotnet-explore. It turns a prose task into the
symbols it is about: symbolIds, use sites, affected files, and how far a change would reach. It
never judges code and it cannot change it — the invoking agent decides what to do with the map.
Host adapter
Claude Code can launch the bundled dotnet-explore custom agent directly. Codex plugins do not
currently install custom-agent registrations. In Codex, launch the built-in read-only explorer and
start its brief with: "Read <pluginRoot>/agents/dotnet-explore.md and follow its Markdown body;
ignore only the Claude-specific YAML frontmatter." The file under agents/ remains the one role
contract; do not copy its body into this skill or a Codex-only agent file.
Why delegate rather than fan out yourself. A wide search_index plus a get_references per
candidate is the single most expensive shape of read this server produces, and almost all of those
tokens are scaffolding you throw away once you know the answer. The agent pays them in its own
context and returns a report a fraction of the size.
When to invoke it — and when not to
Invoke it when the symbol set is genuinely unknown: an unfamiliar subsystem, "how would this feature land", "what breaks if I change this", a review or refactor whose boundary you cannot yet name.
Skip it when:
- The symbol is already known. A two-call lookup is not what this is for; use
dotnet-read. - You need the text, not the map. The agent never reads a
.csfile; it reportsdeclarationSites, and the rangedReadover them is yours to make. - The answer is in a non-C# file.
.csproj,.json,.md,.editorconfigare out of its scope; it will say so and stop.
Step 0 — check readiness before launching
Call workspace_status yourself, before spawning. The agent checks too, but a cold or degraded
workspace wastes an entire agent run:
- Still loading, or
index_only→ semantic results are unavailable, not empty. Wait, or accept a syntax-tier map and say so. degraded(projects failed to load) → the map may be silently wrong. Fix the build andreload_workspacebefore spawning, or don't spawn.- Just did a
git pull/checkout/rebase, or added or deleted a.csfile →reload_workspace(scope: "all")first.
What to tell it
Everything you state is context it does not have to re-derive, and re-derivation is the expensive part of a cold start.
- The task in prose (required): what someone is about to do to this codebase — not "find
FooService", but "we want to add cancellation to the training loop". - Any symbol, file, or project you already know is involved. It will start from there instead of guessing search terms.
- Depth: "where is this" (a one-hop map, ~8 calls) vs. "what breaks if I change this" (full blast radius, up to its 20-call ceiling). Transitive reach costs real tokens — ask for it only when the question is about ripple.
- A
taskIdyou want it to use, if you plan to read its exact cost back withget_retrieval_metrics(groupBy: "task"). Otherwise it mints its own and reports it.
Parallelism
One instance per independent question, launched in a single message. Do not split one question across instances — the second would re-derive the first's search terms from scratch, and each cold start re-pays the whole baseline. Two genuinely separate subsystems is two instances; one subsystem explored "twice as thoroughly" is one.
Reading its report
Fixed sections: Target, Entry points, Blast radius, Affected files, What would need to change, Suggested next calls, Not covered.
symbolIds are the payload — paste them straight intoget_symbol,get_referencesorrename_symbol. Asymidx_prefix is provisional (syntax tier) and asymfb_one is not a fetch target at all (a local function, a lambda, a symbol with no doc-comment id); the report flags those on the row.- Read
Not coveredfirst, not last. It is mandatory and carrieslimitedByverbatim, budget stops, non-C# files the answer touches, and any ambiguity it resolved on your behalf. A map that says where it ends is useful; one that looks complete is dangerous. Suggested next callsnames the write path but never performs it. Verify a suggested call against the actual schema before running it.- It reports locations, not conclusions. No quality judgments, no design opinions, no proposed diffs. If it offered one anyway, treat it as noise.
Then what
The map is the input to a change, not the change. Invoke dotnet-write next: its step 2 —
Read the exact declaration span, then Edit anchored on that text — is exactly the step the agent
deliberately did not do for you.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

