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 skills/jdanigo/hydraia/dotnet-patternsnpx skills add jdanigo/hydraia --skill dotnet-patternsgit clone --depth 1 https://github.com/jdanigo/hydraiaWrote 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/skills/jdanigo/hydraia/dotnet-patterns)<a href="https://agentmods.dev/skills/jdanigo/hydraia/dotnet-patterns"><img src="https://agentmods.dev/badge/skills/jdanigo/hydraia/dotnet-patterns.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.00066 | $0.00608 |
| Opus 5 | $0.00033 | $0.00304 |
| Sonnet 5 | $0.00013 | $0.00122 |
| Haiku 4.5 | $0.00007 | $0.00061 |
Grade A, and why
dotnet-patterns 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 3d ago.
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 — 47 lines — stays where its author put it; the contents beside it link to each section on GitHub.
C#/.NET Backend Patterns
Layout
- Vertical slices (feature folders: endpoint + handler + models per feature) for API-shaped services; full Clean Architecture layering only when the domain genuinely warrants it — record the choice as an ADR either way.
- Minimal APIs for small/medium surfaces; MVC controllers when filters/model-binding complexity earns it.
DI lifetimes (the classic traps)
- Scoped services must NEVER be captured by singletons (captive dependency — resolve via
IServiceScopeFactoryinside the singleton instead). HttpClientviaIHttpClientFactory, nevernew HttpClient()per call (socket exhaustion).- Register by interface at the boundary you intend to fake in tests; concrete elsewhere is fine.
Async all the way
- No
.Result/.Wait()/GetAwaiter().GetResult()on async paths — deadlock and threadpool starvation fuel. CancellationTokenflows from the endpoint through every service and EF call:await db.Orders.ToListAsync(ct). Endpoints accept it; libraries propagate it.ValueTaskonly where profiling justifies it; default isTask.
EF Core discipline
- Reads:
AsNoTracking()by default; project to DTOs withSelect— never return entities from queries that don't update. - No lazy-loading proxies: load explicitly (
Include) so every query's shape is visible — N+1 becomes impossible to miss. - Migrations: one migration per change, reviewed like code; destructive column changes follow expand-contract (see db-optimization skill).
- Transactions explicit where multi-write consistency matters (
ExecutionStrategy+TransactionScope-free patterns withBeginTransactionAsync).
Config — options pattern
IOptions<T>withValidateDataAnnotations().ValidateOnStart()— invalid config fails the boot, not the first request.- Secrets from user-secrets/KeyVault/env — never appsettings committed values.
Error contract
ProblemDetails(RFC 9457) viaAddProblemDetails(); exceptions mapped centrally (exception handler middleware), typed domain exceptions → status codes. No try/catch per controller.- Nullable reference types ON project-wide; warnings as errors for new code.
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.
- 3d ago First seen · 47 lines · 0 tokens per session scan A 713bf467d072
dotnet-patterns is a skill published in the GitHub repository jdanigo/hydraia (8 stars, last pushed 13d ago), licensed MIT. It adds 66 tokens to every session and 608 once invoked, about $0.0003 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-08-31.
Other skills, from other repositories
dotnet-inspect
Query .NET APIs across NuGet packages, platform libraries, and local files. Search for types, list API surfaces, compare and diff versions, find extension methods and implementors. Use whenever you need to answer questions about .NET library contents.
csharp
C# and .NET 8+ coding conventions, naming standards, idiomatic patterns, CLI commands, dependency management, testing with xUnit, and XML documentation. Use when writing, reviewing, or refactoring C# code.
agui-dotnet-streaming-chat
Get started with the AG-UI .NET SDK: bootstrap and run your first streaming-chat app (client + server) with the AG-UI .NET NuGet packages (AGUI.Client, AGUI.Server, AGUI.Formatting, AGUI.Abstractions). USE FOR: which packages to install and how to wire them; constructing an AGUIChatClient against an endpoint and…
agui-dotnet-shared-state
Share structured, evolving state between an AG-UI agent and its client with the AG-UI .NET SDK — the client seeds state on the request, the server reads it, mutates it, and streams the updated state back as snapshots or deltas alongside the chat. USE FOR: sending initial/working state from the client via…
agui-dotnet-sdk-docs
Author, update, and validate the AG-UI .NET SDK documentation pages on the docs.ag-ui.com Mintlify site (under docs/). USE FOR: adding or editing a ".NET SDK" docs page (sdk/dotnet//.mdx), wiring it into the docs.json ".NET" nav group and global anchor, running the docs site locally with mintlify dev…
agui-dotnet-multimodal
Send images and other binary/file content to an AG-UI agent with the AG-UI .NET SDK — attach pictures (or audio, PDFs, etc.) to a user message so a multimodal model can see them. USE FOR: building a user ChatMessage with mixed content parts (TextContent plus DataContent for inline bytes, or UriContent for a hosted…