Opinionated full-stack standards for .NET 10+ / ASP.NET Core + Angular (latest stable major) development, with automation that keeps quality high and manual intervention low.
| Component | Contents |
|---|---|
| 21 skills | Backend: aspnet-backend (minimal APIs, DI, options, resilience, observability, background jobs, configuration/secrets), data-access (EF Core/Dapper, migrations in CI), mssql / postgres / sqlite (per-provider tuning, index design, query-rewrite equivalence checks), fusioncache-redis, rabbitmq-messaging (outbox/inbox), bff-security (cookie BFF, external login, authorization). Frontend: angular-ngrx-state (NgRx SignalStore), frontend-testing (Vitest + Playwright through the cookie BFF). Testing/delivery: dotnet-testing (xUnit v3 + Testcontainers), docker (cached multi-stage builds, hardened compose, backups), nginx-deploy (reverse proxy, TLS, Let's Encrypt), ci-pipelines (Azure DevOps YAML), grafana (self-hosted Grafana 13 in compose, provisioned datasources, dashboards as code pushed with gcx behind a drift guard, RED dashboards for .NET). Docs & decisions: docs-maintenance (docs-as-code, Mermaid), adr / rfc (decision records and design docs with generated indexes). Integrations: paypal (JS SDK v6, Orders v2, verified webhooks, inbox table), discord (Discord.Net gateway bots and HTTP interactions). Scripts: simple-scripts (ad-hoc pwsh/bash/az CLI stays one command per line). Versions in references/ were verified in October 2026. |
| 4 agents | stack-reviewer (stack-tuned review, read-only by instruction), test-guardian (finds and writes missing tests), docs-maintainer (keeps docs/ in sync, runs on Sonnet), tech-lead (writes ADRs/RFCs on request) — test-guardian, docs-maintainer and tech-lead preload the skills they work from; stack-reviewer loads the ones the diff needs |
| 10 commands | /noobit:ship (all quality gates → drafted commit), /noobit:surgical (gated bugfix/change workflow), /noobit:stack-review, /noobit:test-coverage, /noobit:docs-sync, /noobit:ef-migration, /noobit:new-adr, /noobit:new-rfc, /noobit:new-fullstack¹, /noobit:deploy-setup¹ |
| 4 hooks | Auto-format edited files (dotnet format only in repos with an .editorconfig; project-local Prettier); quality-gate reminder on stop for files this session changed; block adding Moq / MediatR / Newtonsoft.Json (unless the repo already uses them); once-a-day check for a newer plugin version |
¹ Only you can start these (disable-model-invocation) — they scaffold a solution (including its first commit) or write deployment assets. /noobit:surgical stays model-invocable on purpose: it stops at a human approval gate before changing code, and CLAUDE.md tells Claude to use it.
Any skill can also be run directly as /noobit:<skill>.
- PowerShell 7+ (
pwshon PATH) — the hook scripts are cross-platform PowerShell - .NET SDK 10+ (
dotneton PATH) — used by the format hook and everything else - Node.js with project-local Prettier — the web format hook is a silent no-op without it
- Docker — for Testcontainers-based integration tests and deployments
- External skills (recommended, not shipped here): the official Angular Team skills
angular-developerandangular-new-app(installed bysetup/setup-machine.ps1) plus thesuperpowersplugin (process skills: brainstorming, TDD, debugging). Everything backend-side works without them.
claude plugin marketplace add cmxl/noobit-plugin
claude plugin install noobit@noobit
(Or from a local checkout: claude plugin marketplace add <path-to-this-repo>.) To set up a whole machine — plugins, skills, MCP servers, global CLAUDE.md — run setup/setup-machine.ps1; see setup/AGENT-SETUP.md.
Plugins from third-party marketplaces don't update on their own. Either update manually:
claude plugin marketplace update noobit
claude plugin update noobit@noobit
then /reload-plugins in a running session — or enable auto-update for the marketplace in /plugin → Marketplaces. The plugin's startup hook checks once a day and tells you when a newer version is published.
- Copy
CLAUDE.md.exampleinto your~/.claude/CLAUDE.md(or your team repo'sCLAUDE.md) — the always-on quality gates live there, since plugins can't inject global instructions. - If you previously copied these skills/agents/commands/hooks into
~/.claude/manually, remove those copies — otherwise everything is loaded twice. - Optional but recommended: the skills and agents reference official framework docs (learn.microsoft.com, angular.dev, ngrx.io, rabbitmq.com, developer.paypal.com, docs.discord.com, …) and are instructed to fetch them instead of guessing. Plugins cannot ship permission rules, so add
WebSearchandWebFetch(domain:...)allow rules for those doc domains to your~/.claude/settings.jsonto avoid permission prompts. - Keep the skill listing lean: Claude Code caps the combined skill descriptions it shows the model, and large skill packs (e.g. ~200 Azure skills) push other descriptions out. Install big packs per project, not at user scope.
CLAUDE.mdstates the gates (tests, review before commit, docs in sync)./noobit:shipruns them in order: build → tests →test-guardian→stack-reviewer→docs-maintainer→ drafted Conventional Commit. It never commits without your go.- The Stop hook is the safety net: when the session changed source files and they're still uncommitted, it asks Claude once per change-set to confirm the gates. It ignores work the session didn't touch, staging, and repos without a .NET or Angular project. It only sees files written with Write/Edit (
.cs,.csproj,.props,.razor,.cshtml,.ts,.html,.scss,.css,.js,.mjs) in the session's working repo — changes made by shell commands (dotnet ef migrations add,ng generate,sed) or to config files are not tracked, nor are edits inside a submodule;/noobit:shipcovers those. A session resumed after more than seven days starts with an empty touched list. The package guard has the same reach: itsWrite/Editfilters are anchored at the session's working folder, so project files in an/add-dirfolder or a sibling repo aren't checked (dotnet add packagecommands are, wherever they run). - There is deliberately no hard
git commitblock: a marker file the model could write itself is no real gate, and it would get in the way in repos outside this stack.
npm ci --prefix tools && node tools/lint-plugin.mjs # frontmatter, names, references
claude plugin validate --strict . && claude plugin validate --strict .claude-plugin/plugin.json # marketplace, then plugin
pwsh -c "Invoke-Pester tests" # hook + script tests (Pester 5.5+)
pwsh -c '"hooks","skills","tests" | % { Invoke-ScriptAnalyzer -Path $_ -Recurse -Settings ./PSScriptAnalyzerSettings.psd1 }'
claude plugin eval # skill trigger/behavior evals in evals/
CI runs all of these except the evals (they call the model) on every push and PR. Trigger and PayPal evals run anywhere; the Discord build cases (tag build) grant a shell, which claude plugin eval only allows inside an OS sandbox — run them on Linux/macOS: claude plugin eval . --tag build --scaffold --allow-tools Bash Write Edit. work/ holds specs and plans for changes to this repo.
- .NET solutions always use
global.json,Directory.Build.props,Directory.Packages.props(central package management), andDirectory.Build.rsp(-maxcpucount -nologo -graph). - Cookie BFF security: tokens never reach the browser;
__Host-session+ XSRF cookie; explicit antiforgery validation on JSON endpoints; authenticated-by-default fallback policy. - Every feature ships with tests (xUnit v3 + Testcontainers / Vitest + Playwright); reviews run before commits;
docs/is updated in the same change.