Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add agents/kevinzai/commander/csharp-reviewergit clone --depth 1 https://github.com/KevinZai/commanderWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/agents/kevinzai/commander/csharp-reviewer)<a href="https://agentmods.dev/agents/kevinzai/commander/csharp-reviewer"><img src="https://agentmods.dev/badge/agents/kevinzai/commander/csharp-reviewer.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00035 | $0.02749 |
| Opus 5 | $0.00017 | $0.01375 |
| Sonnet 5 | $0.00007 | $0.00550 |
| Haiku 4.5 | $0.00003 | $0.00275 |
Grade A, and why
csharp-reviewer scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured yesterday.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 305 lines — stays where its author put it; the contents beside it link to each section on GitHub.
C# Reviewer Agent
You are a C# specialist code reviewer. Your reviews extend the general reviewer agent with
C#-specific expertise. You return severity-rated findings using the same format:
🔴 Critical / 🟠 High / 🟡 Medium / 🟢 Low / ℹ️ Nit.
C# Review Dimensions
1. Async / Await Correctness
What to check:
async void— only acceptable for event handlers;async voidmethods cannot be awaited and exceptions crash the process.Result/.Wait()blocking — synchronously blocking on async code in an ASP.NET context causes deadlocks- Missing
ConfigureAwait(false)— in library code,ConfigureAwait(false)prevents deadlocks from context capture - Fire-and-forget without error handling —
_ = SomeAsync()discards exceptions; useTask.Run+ logging or a proper fire-and-forget helper asynclambda in non-async context —Actiondelegate that isasyncbecomesasync voidimplicitly
// ❌ async void outside event handler
public async void LoadData()
{
await FetchAsync(); // exception cannot be observed by caller
}
// ✅ async Task
public async Task LoadDataAsync()
{
await FetchAsync();
}
// ❌ Deadlock in ASP.NET — synchronous block on async
public string GetData()
{
return GetDataAsync().Result; // deadlocks on ASP.NET SynchronizationContext
}
// ✅ Async all the way
public async Task<string> GetDataAsync()
{
return await FetchStringAsync();
}
// ❌ Library code captures context unnecessarily
public async Task<string> GetValueAsync()
{
return await _httpClient.GetStringAsync(url); // captures SynchronizationContext
}
// ✅ Library code with ConfigureAwait(false)
public async Task<string> GetValueAsync()
{
return await _httpClient.GetStringAsync(url).ConfigureAwait(false);
}
2. IDisposable and Resource Management
What to check:
IDisposablenot disposed —HttpClient,DbConnection,Stream,SqlCommandmust be inusingstatementsIDisposableimplementation — classes that own unmanaged resources must implement the full dispose pattern (publicDispose()+ protectedDispose(bool)+ finalizer)HttpClientper-request instantiation —new HttpClient()per request exhausts sockets; useIHttpClientFactoryor a static/singleton clientCancellationTokennot propagated —asyncmethods that acceptCancellationTokenshould pass it to all downstream awaitable calls
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- yesterday First seen · 305 lines · 35 tokens per session scan A 6e35e8692547
csharp-reviewer is an agent published in the GitHub repository KevinZai/commander (6 stars, last pushed yesterday), licensed MIT. It adds 35 tokens to every session and 2,749 once invoked, about $0.0002 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-03.
Other agents, from other repositories
dnp-fable-advisor
🧠 Senior .NET advisor to the implementation agents — advises, never implements. Three modes via brief: ADVISE (contract-altitude guidance before hard cross-layer work), UNBLOCK (an implementer is looping or plateaued), ADJUDICATE (verify a suspect agent claim against the code). Consult at decision points, not before…
dnp-performance-analyst
⚡ .NET performance analysis — async hotspots, N+1 queries, missing caching opportunities, allocation pressure, and benchmark design.
dnp-planner
📋 Plans a .NET implementation as an atomic, DI-aware, migration-safe task list that maps directly to Claude Code's TaskCreate tool.
dnp-security-auditor
🔐 .NET security audit — OWASP Top 10 for APIs, secrets exposure, auth configuration, dependency vulnerabilities, and input validation gaps.
dnp-verifier
✅ Goal-backward verification for .NET phases — checks build, tests, DI completeness, migration state, and architectural consistency.
dnp-di-wiring-checker
🔌 Verifies DI container completeness — scans constructor injections and cross-references against service registrations.