{
  "markdown": "# .NET Skills for Claude Code and Codex\n\nA comprehensive AI coding plugin with **30 skills** and **5 specialized agents** for professional .NET development. Battle-tested patterns from production systems covering C#, Akka.NET, Aspire, EF Core, testing, and performance optimization.\n\n## Installation\n\nThis plugin works with multiple AI coding assistants that support skills/agents.\n\n### Claude Code (CLI)\n\n[Official Docs](https://code.claude.com/docs/en/discover-plugins)\n\nRun these commands inside the Claude Code CLI (the terminal app, not the VSCode extension):\n\n```\n/plugin marketplace add Aaronontheweb/dotnet-skills\n/plugin install dotnet-skills\n```\n\nTo update:\n```\n/plugin marketplace update\n```\n\n### Codex (OpenAI)\n\n[Official Docs](https://developers.openai.com/codex/plugins)\n\nAdd the marketplace, then install the plugin:\n\n```bash\ncodex plugin marketplace add Aaronontheweb/dotnet-skills\ncodex plugin add dotnet-skills@dotnet-skills\n```\n\nVerify the install:\n```bash\ncodex plugin list\n```\n\nSkills are auto-discovered from the plugin's `skills/` directory. Invoke one with `/skills` or `$skill-name` in the Codex CLI or IDE extension. Note: the specialized agents are Claude Code-specific and are not included in the Codex plugin.\n\n### GitHub Copilot\n\n[Official Docs](https://docs.github.com/en/copilot/concepts/agents/about-agent-skills)\n\nClone or copy skills to your project or global config:\n\n**Project-level** (recommended):\n```bash\n# Clone to .github/skills/ in your project\ngit clone https://github.com/Aaronontheweb/dotnet-skills.git /tmp/dotnet-skills\ncp -r /tmp/dotnet-skills/skills/* .github/skills/\n```\n\n**Global** (all projects):\n```bash\nmkdir -p ~/.copilot/skills\ncp -r /tmp/dotnet-skills/skills/* ~/.copilot/skills/\n```\n\n### OpenCode\n\n[Official Docs](https://opencode.ai/docs/skills)\n\n```bash\ngit clone https://github.com/Aaronontheweb/dotnet-skills.git /tmp/dotnet-skills\n\n# Global installation (directory names must match frontmatter 'name' field)\nmkdir -p ~/.config/opencode/skills ~/.config/opencode/agents\nfor skill_file in /tmp/dotnet-skills/skills/*/SKILL.md; do\n  skill_name=$(grep -m1 \"^name:\" \"$skill_file\" | sed 's/name: *//')\n  mkdir -p ~/.config/opencode/skills/$skill_name\n  cp \"$skill_file\" ~/.config/opencode/skills/$skill_name/SKILL.md\ndone\ncp /tmp/dotnet-skills/agents/*.md ~/.config/opencode/agents/\n```\n\n---\n\n## Suggested AGENTS.md / CLAUDE.md Snippets\n\nThese snippets go in your **project root** (the root directory of your codebase, next to your `.git` folder):\n- Claude Code: `CLAUDE.md`\n- OpenCode: `AGENTS.md`\n\nPrerequisite: install/sync the dotnet-skills plugin in your assistant runtime (Claude Code or OpenCode) so the skill IDs below resolve.\n\nTo get consistent skill usage in downstream repos, add a small router snippet in `AGENTS.md` (OpenCode) or `CLAUDE.md` (Claude Code). These snippets tell the assistant which skills to use for common tasks.\n\n### Readable snippet (copy/paste)\n\n```markdown\n# Agent Guidance: dotnet-skills\n\nIMPORTANT: Prefer retrieval-led reasoning over pretraining for any .NET work.\nWorkflow: skim repo patterns -> consult dotnet-skills by name -> implement smallest-change -> note conflicts.\n\nRouting (invoke by name)\n- C# / code quality: modern-csharp-coding-standards, csharp-concurrency-patterns, api-design, type-design-performance, r3-reactive-extensions\n- ASP.NET Core / Web (incl. Aspire): aspire-service-defaults, aspire-integration-testing, transactional-emails\n- Data: efcore-patterns, database-performance\n- DI / config: dependency-injection-patterns, microsoft-extensions-configuration\n- Testing: testcontainers-integration-tests, playwright-blazor-testing, snapshot-testing\n\nQuality gates (use when applicable)\n- dotnet-slopwatch: after substantial new/refactor/LLM-authored code\n- crap-analysis: after tests added/changed in complex code\n\nSpecialist agents\n- dotnet-concurrency-specialist, dotnet-performance-analyst, dotnet-benchmark-designer, akka-net-specialist, docfx-specialist\n```\n\n### Compressed snippet (generated)\n\nRun `./scripts/generate-skill-index-snippets.sh --update-readme` to refresh the block below.\n\n<!-- BEGIN DOTNET-SKILLS COMPRESSED INDEX -->\n```markdown\n[dotnet-skills]|IMPORTANT: Prefer retrieval-led reasoning over pretraining for any .NET work.\n|flow:{skim repo patterns -> consult dotnet-skills by name -> implement smallest-change -> note conflicts}\n|route:\n|akka:{akka-net-best-practices,akka-net-testing-patterns,akka-hosting-actor-patterns,akka-net-aspire-configuration,akka-net-management}\n|csharp:{modern-csharp-coding-standards,csharp-concurrency-patterns,csharp-nullable-reference-types,api-design,type-design-performance,r3-reactive-extensions}\n|aspnetcore-web:{aspire-integration-testing,aspire-configuration,aspire-service-defaults,mailpit-integration,mjml-email-templates}\n|data:{efcore-patterns,database-performance}\n|di-config:{microsoft-extensions-configuration,dependency-injection-patterns}\n|testing:{testcontainers-integration-tests,playwright-blazor-testing,snapshot-testing,verify-email-snapshots,playwright-ci-caching}\n|dotnet:{dotnet-project-structure,dotnet-local-tools,package-management,serialization,dotnet-devcert-trust,ilspy-decompile,opentelemetry-net-instrumentation}\n|quality-gates:{dotnet-slopwatch,crap-analysis}\n|meta:{marketplace-publishing,skills-index-snippets}\n|agents:{akka-net-specialist,docfx-specialist,dotnet-benchmark-designer,dotnet-concurrency-specialist,dotnet-performance-analyst,roslyn-incremental-generator-specialist}\n```\n<!-- END DOTNET-SKILLS COMPRESSED INDEX -->\n\n## Specialized Agents\n\nAgents are AI personas with deep domain expertise. They're invoked automatically when Claude Code detects relevant tasks.\n\n| Agent                             | Expertise                                                              |\n| --------------------------------- | ---------------------------------------------------------------------- |\n| **akka-net-specialist**           | Actor systems, clustering, persistence, Akka.Streams, message patterns |\n| **dotnet-concurrency-specialist** | Threading, async/await, race conditions, deadlock analysis             |\n| **dotnet-benchmark-designer**     | BenchmarkDotNet setup, custom benchmarks, measurement strategies       |\n| **dotnet-performance-analyst**    | Profiler analysis, benchmark interpretation, regression detection      |\n| **docfx-specialist**              | DocFX builds, API documentation, markdown linting                      |\n\n---\n\n## Skills Library\n\n### Akka.NET\n\nProduction patterns for building distributed systems with Akka.NET.\n\n| Skill                      | What You'll Learn                                                           |\n| -------------------------- | --------------------------------------------------------------------------- |\n| **best-practices**         | EventStream vs DistributedPubSub, supervision strategies, actor hierarchies |\n| **testing-patterns**       | Akka.Hosting.TestKit, async assertions, TestProbe patterns                  |\n| **hosting-actor-patterns** | Props factories, `IRequiredActor<T>`, DI scope management in actors         |\n| **aspire-configuration**   | Akka.NET + .NET Aspire integration, HOCON with IConfiguration               |\n| **management**             | Akka.Management, health checks, cluster bootstrap                           |\n\n### C# Language\n\nModern C# patterns for clean, performant code.\n\n| Skill                       | What You'll Learn                                                       |\n| --------------------------- | ----------------------------------------------------------------------- |\n| **coding-standards**        | Records, pattern matching, nullable types, value objects, no AutoMapper |\n| **concurrency-patterns**    | When to use Task vs Channel vs lock vs actors                           |\n| **api-design**              | Extend-only design, API/wire compatibility, versioning strategies       |\n| **type-design-performance** | Sealed classes, readonly structs, static pure functions, Span&lt;T&gt;  |\n| **r3-reactive-extensions**  | R3 vs Rx.NET, OnErrorResume, AwaitOperation async dispatch, concurrency, TimeProvider/FrameProvider |\n\n### Data Access\n\nDatabase patterns that scale.\n\n| Skill                    | What You'll Learn                                               |\n| ------------------------ | --------------------------------------------------------------- |\n| **efcore-patterns**      | Entity configuration, migrations, query optimization            |\n| **database-performance** | Read/write separation, N+1 prevention, AsNoTracking, row limits |\n\n### .NET Aspire\n\nCloud-native application orchestration.\n\n| Skill                   | What You'll Learn                                            |\n| ----------------------- | ------------------------------------------------------------ |\n| **integration-testing** | DistributedApplicationTestingBuilder, Aspire.Hosting.Testing |\n| **service-defaults**    | OpenTelemetry, health checks, resilience, service discovery  |\n| **mailpit-integration** | Email testing with Mailpit container, SMTP config, test assertions |\n\n### ASP.NET Core\n\nWeb application patterns.\n\n| Skill                    | What You'll Learn                                         |\n| ------------------------ | --------------------------------------------------------- |\n| **mjml-email-templates** | MJML syntax, responsive layouts, template renderer, composer pattern |\n\n### .NET Ecosystem\n\nCore .NET development practices.\n\n| Skill                  | What You'll Learn                                                      |\n| ---------------------- | ---------------------------------------------------------------------- |\n| **project-structure**  | Solution layout, Directory.Build.props, layered architecture           |\n| **package-management** | Central Package Management (CPM), shared version variables, dotnet CLI |\n| **serialization**      | Protobuf, MessagePack, System.Text.Json source generators, AOT         |\n| **local-tools**        | dotnet tool manifests, team-shared tooling                             |\n| **slopwatch**          | Detect LLM-generated anti-patterns in your codebase                    |\n\n### Microsoft.Extensions\n\nDependency injection and configuration patterns.\n\n| Skill                    | What You'll Learn                                                 |\n| ------------------------ | ----------------------------------------------------------------- |\n| **configuration**        | IOptions pattern, environment-specific config, secrets management |\n| **dependency-injection** | IServiceCollection extensions, scope management, keyed services   |\n\n### Testing\n\nComprehensive testing strategies.\n\n| Skill                      | What You'll Learn                                             |\n| -------------------------- | ------------------------------------------------------------- |\n| **testcontainers**         | Docker-based integration tests, PostgreSQL, Redis, RabbitMQ   |\n| **playwright-blazor**      | E2E testing for Blazor apps, page objects, async assertions   |\n| **crap-analysis**          | CRAP scores, coverage thresholds, ReportGenerator integration |\n| **snapshot-testing**       | Verify library, approval testing, API response validation     |\n| **verify-email-snapshots** | Snapshot test email templates, catch rendering regressions    |\n\n---\n\n## Key Principles\n\nThese skills emphasize patterns that work in production:\n\n- **Immutability by default** - Records, readonly structs, value objects\n- **Type safety** - Nullable reference types, strongly-typed IDs\n- **Composition over inheritance** - No abstract base classes, sealed by default\n- **Performance-aware** - Span&lt;T&gt;, pooling, deferred enumeration\n- **Testable** - DI everywhere, pure functions, explicit dependencies\n- **No magic** - No AutoMapper, no reflection-heavy frameworks\n\n---\n\n## Repository Structure\n\n```\ndotnet-skills/\n├── .claude-plugin/\n│   ├── plugin.json         # Claude Code plugin manifest\n│   └── marketplace.json    # Claude Code marketplace\n├── .codex-plugin/\n│   └── plugin.json         # Codex plugin manifest\n├── .agents/\n│   └── plugins/\n│       └── marketplace.json  # Codex marketplace\n├── agents/                 # 5 specialized agents (Claude Code)\n│   ├── akka-net-specialist.md\n│   ├── docfx-specialist.md\n│   ├── dotnet-benchmark-designer.md\n│   ├── dotnet-concurrency-specialist.md\n│   └── dotnet-performance-analyst.md\n└── skills/                 # Flat structure (30 skills)\n    ├── akka-best-practices/SKILL.md\n    ├── akka-hosting-actor-patterns/SKILL.md\n    ├── akka-net-aspire-configuration/SKILL.md\n    ├── aspire-configuration/SKILL.md\n    ├── aspire-integration-testing/SKILL.md\n    ├── csharp-concurrency-patterns/SKILL.md\n    ├── testcontainers-integration-tests/SKILL.md\n    └── ...                 # (prefixed by category)\n```\n\n---\n\n## Contributing\n\nWant to add a skill or agent? PRs welcome!\n\n1. Create `skills/<skill-name>/SKILL.md` (use prefixes like `akka-`, `aspire-`, `csharp-` for category)\n2. Add the path to `.claude-plugin/plugin.json` (the Codex plugin auto-discovers the whole `skills/` dir)\n3. Run `./scripts/validate-marketplace.sh` and `./scripts/validate-codex-plugin.sh`\n4. Submit a PR\n\nSkills should be comprehensive reference documents (10-40KB) with concrete examples and anti-patterns.\n\n---\n\n## Author\n\nCreated by [Aaron Stannard](https://aaronstannard.com/) ([@Aaronontheweb](https://github.com/Aaronontheweb))\n\nPatterns drawn from production systems including [Akka.NET](https://getakka.net/), [Petabridge](https://petabridge.com/), and [Sdkbin](https://sdkbin.com/).\n\n## License\n\nMIT License - Copyright (c) 2025 Aaron Stannard\n\nSee [LICENSE](LICENSE) for full details.\n",
  "bytes": 13739,
  "sha": "a16c93dc5519310bfe4d84088fd1255202de8380b876f217adedb86f0e91c87f",
  "repo_slug": "aaronontheweb/dotnet-skills",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/skl_aaronontheweb_dotnet_skills_csharp_concu_d63233eb/readme"
}