Agent skill

Dotnet Cop

by fmflurry in fmflurry/settings-opencode

Pre-merge code review for .NET 10 pull requests. An agent skill from fmflurry/settings-opencode.

MITAuto-check passedDevelopment

Install Dotnet Cop

skills CLI
$ npx skills add fmflurry/settings-opencode --skill dotnet-cop -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install fmflurry/settings-opencode dotnet-cop --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/fmflurry/settings-opencode.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/dotnet-cop .claude/skills/dotnet-cop && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
dotnet-cop
GitHub stars
171
Token cost
~2k tokens
SKILL.md length
581 words
Files
12
Skills in repo
20
Repo updated
First seen
Licence
MIT

At a glance

Pre-merge code review for .NET 10 pull requests. An agent skill from fmflurry/settings-opencode.

  • Works in 6 steps: Read-only. Never patch code. Output… → Diff window: git merge-base HEAD… → Confidence ≥ 80%. Skip uncertain… → …
  • User runs /cop-review
  • SKILL.md covers When to Activate, Inputs, Hard Rules and Pipeline, plus 5 more sections
  • Calls git

What it does

Dotnet Cop is an agent skill from fmflurry/settings-opencode. Pre-merge code review for .NET 10 pull requests. Ground truth: Minimal API + IModule (reflection-based isolation) + hexagonal per module (Domain/Application/Infrastructure). Persistence is chosen per bounded context — EF Core CRUD and event-sourced Marten stores are both first-class, with no global default. Optional additive: DDD / CQRS per module. Diffs current branch against a target branch, applies .NET-specific checklists (Minimal API endpoints, modular isolation, ports & adapters, schema-per-module + RLS, C…

Its SKILL.md is about 2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 11 other files (for example `cross-module-communication.md`, `ef-core.md` and `enforcement-tooling.md`).

It sits in Development, covering Domain-driven design, Event-driven systems and Agent instruction files. It works with .NET and C#. The repository describes itself as: Custom OpenCode settings. The licence is MIT.

When your agent uses it

  • User runs /cop-review
  • Says pre-merge review
  • Invokes dotnet-cop

Example prompts

  • “pre-merge review”
  • “/dotnet-cop”

Workflow steps

6 steps, taken from the first numbered list in SKILL.md.

  1. Read-only. Never patch code. Output report only.
  2. Diff window: git merge-base HEAD origin/..HEAD. Never review changes already on target.
  3. Confidence ≥ 80%. Skip uncertain findings. Use ❓ q: instead of speculative 🔴 bug:.
  4. Project rules win. AGENTS.md overrides this skill. Re-read on every run; do not cache between sessions.
  5. dotnet-clean-architecture ground truth: load [[dotnet-clean-architecture]] SKILL.md before flagging architecture code. Do not invent APIs…
  6. No fluff. No "great work", no restating what the diff already shows.

What it can do on your machine

Read from SKILL.md and the folder at commit 0e6c33c. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • git

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Dotnet Cop loads about 2k tokens when it runs. Until then it costs about 199 tokens; SKILL.md has 581 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~199
When it runs · the whole SKILL.md, loaded when a task matches
~2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from fmflurry/settings-opencode at commit 0e6c33c, republished under its MIT licence (© fmflurry). 581 words, ~1,962 tokens.

Download SKILL.mdSave it as .claude/skills/dotnet-cop/SKILL.md (or your agent's skills folder). This skill also uses 11 other files; get the full folder from GitHub.
name
dotnet-cop
description
Pre-merge code review for .NET 10 pull requests. Ground truth: Minimal API + IModule (reflection-based isolation) + hexagonal per module (Domain/Application/Infrastructure). Persistence is chosen per bounded context — EF Core CRUD and event-sourced Marten stores are both first-class, with no global default. Optional additive: DDD / CQRS per module. Diffs current branch against a target branch, applies .NET-specific checklists (Minimal API endpoints, modular isolation, ports & adapters, schema-per-module + RLS, C# strictness, xUnit v3 only), runs dotnet build + dotnet format --verify-no-changes, and emits a tiered report (verbose for juniors, terse for seniors). Auto-loads project AGENTS.md rules. Use when user runs /cop-review, says "pre-merge review", or invokes dotnet-cop.

dotnet-cop

Pre-merge review. Compares HEAD vs origin/<target>. Minimal-API-first, SoT-aware. Project-aware (reads AGENTS.md). Tooling-aware (runs dotnet build + dotnet format --verify-no-changes).

When to Activate

  • Selected by code-reviewer for .NET guidance during /cop-review
  • User runs /cop-review <target> on a .NET repo
  • dotnet-cop specialist is explicitly invoked

Inputs

ArgRequiredDefaultMeaning
<target>yes—Target branch (e.g. main, develop, release/x)
--levelnoautojunior (verbose teaching) or senior (terse). Auto = senior.
--scopenoallComma list: minimal-api,isolation,ports-adapters,ef-core,csharp,result,ddd + optional cqrs,event-sourcing. ddd auto-enables when the diff touches domain files; pass ddd to force it on.
--no-toolsnofalseSkip dotnet build + format check (static review only)

Hard Rules

  1. Read-only. Never patch code. Output report only.
  2. Diff window: git merge-base HEAD origin/<target>..HEAD. Never review changes already on target.
  3. Confidence ≥ 80%. Skip uncertain findings. Use ❓ q: instead of speculative 🔴 bug:.
  4. Project rules win. AGENTS.md overrides this skill. Re-read on every run; do not cache between sessions.
  5. dotnet-clean-architecture ground truth: load [[dotnet-clean-architecture]] SKILL.md before flagging architecture code. Do not invent APIs or patterns.
  6. No fluff. No "great work", no restating what the diff already shows.

Pipeline

1. Parse args -> target, level, scope
2. git fetch <remote> <target>          (silent; --quiet)
3. base = git merge-base HEAD <remote>/<target>
4. changed = git diff --name-status base..HEAD
5. Load <repo>/AGENTS.md (if exists) -> project rules
6. For each changed file:
     - Skim full file (not just hunk) for context
     - Apply relevant sub-checklists by path/role:
          *Module.cs / *Extensions.cs        -> modular-isolation.md
          Infrastructure/Events/*.cs / *DbContext.cs -> cross-module-communication.md
         *Endpoint.cs (Minimal API)         -> minimal-api.md
         **/Ports/Incoming/*.cs              -> ports-adapters.md
         **/Ports/Outgoing/*.cs              -> ports-adapters.md
         Infrastructure/Adapter/*.cs        -> ports-adapters.md
         *DbContext.cs / Migrations/**      -> ef-core.md
         *.cs (any)                         -> csharp-strict.md
     - Apply skill `comment-judge` (REVIEW mode) to every added/changed comment
     - If ddd is in scope OR the diff touches domain files (paths under **/*.Domain/** or **/Domain/**): load [[dotnet-ddd]] (review-checklist.md); defer deep CQRS/ES to optional-cqrs.md / optional-event-sourcing.md. ddd is auto-enabled for domain diffs; --scope=ddd forces it on when no domain file is detected.
     - If --scope includes cqrs && module signals use: optional-cqrs.md
     - If --scope includes event-sourcing && module signals use: optional-event-sourcing.md
7. If !--no-tools:
     - dotnet build --nologo -clp:ErrorsOnly (the solution if one exists, else the relevant project(s) — fail fast)
     - dotnet format --verify-no-changes (capture exit code)
8. Aggregate findings -> render via output-format.md

Severity

TagMeaningAction
🔴 bugbroken behavior, runtime crash, data lossBLOCK merge
🟠 secsecurity risk (unvalidated input, leaked secret, tenant-data leak)BLOCK merge
🟡 riskworks today, fragile tomorrow (N+1, missing filter, scope violation)Fix before merge
🟢 archviolates mandatory architecture rule (SoT) or AGENTS.md-escalated opt-in ruleFix before merge
🔵 nitstyle, naming, micro-optimOptional
❓ qgenuine questionAuthor decides

Promote to BLOCK if AGENTS.md flags the category as mandatory.

Sub-pages (read on demand)

  • [[dotnet-cop-minimal-api]] — endpoint mapping, route groups, ProblemDetails, FluentValidation at boundary, no business logic in handlers.
  • [[dotnet-cop-modular-isolation]] — module boundaries, no direct cross-module type references (hard blocker), communication via ports/events, reflection-based module discovery, per-module language autonomy.
  • [[dotnet-cop-cross-module-communication]] — Cross-module communication (modular monolith): Wolverine-only inter-module reads, per-module projection DbContexts, forbidden cross-domain read ports in SharedKernel, Model/ convention. Illustrated with the Sales module.
  • [[dotnet-cop-ports-adapters]] — hexagonal: Domain/Application define ports, Infrastructure implements adapters; dependency direction; no EF entities leaking into Domain/Application.
  • [[dotnet-cop-ef-core]] — DbContext per context/projection (hard blocker on shared DbContext), schema-per-module isolation, FORCE RLS mandatory on all context-schema tables, query splitting, N+1 prevention.
  • [[dotnet-cop-result]] — business errors returned as Result/Result<T>, never thrown; Error defined in Domain; no HTTP coupling in Domain/Application.
  • [[dotnet-ddd]] (ddd scope — auto-enabled when the diff touches domain files) — DDD tactical patterns (entities, value objects, aggregates, repositories) and strategic design for domain-layer code. Deep CQRS/ES enforcement defers to [[dotnet-cop-optional-cqrs]] and [[dotnet-cop-optional-event-sourcing]].
  • [[dotnet-cop-optional-cqrs]] (opt-in) — commands/queries, handlers, CQRS pattern. Only when module signals use.
  • [[dotnet-cop-optional-event-sourcing]] (opt-in) — event-sourced aggregates, immutable events, append-only event store. Only when module signals use.
  • [[dotnet-cop-output-format]] — junior vs senior render templates.
  • [[dotnet-cop-enforcement]] — BLOCK vs WARN severity checklist (load always). SoT rules listed first; opt-in rules clearly marked.
Show full SKILL.md (133 more words)Show less

AGENTS.md Loading

Always:

bash
test -f AGENTS.md && cat AGENTS.md
test -f .agent/AGENTS.md && cat .agent/AGENTS.md

Parse rule blocks. Where this skill and AGENTS.md disagree, AGENTS.md wins. Cite the AGENTS.md line in the finding: (AGENTS.md §<section>).

Output Contract

Single markdown document, sections in fixed order:

  1. Summary — target, base SHA, head SHA, files changed, finding counts by severity.
  2. Blockers (🔴 / 🟠 / 🟢-when-AGENTS-mandates) — sorted by severity, then file path.
  3. Should-fix (🟡) — same sort.
  4. Optional (🔵 / ❓) — collapsible.
  5. Tooling — dotnet build summary, dotnet format summary.
  6. Verdict — APPROVE / APPROVE-WITH-CHANGES / BLOCK.

See [[dotnet-cop-output-format]] for full templates.

Boundaries

  • Does not write code fixes. Suggestions only.
  • Does not run integration or unit tests by default (delegate to the tdd workflow / tdd-guide).
  • Does not approve PRs in GitHub/Azure. Author posts the report manually.
  • Does not auto-fix formatting. Reports format violations only.
  • If no diff (HEAD == base), exit early with "no changes to review".

© fmflurry, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 11 other files in skills/dotnet-cop of fmflurry/settings-opencode.

  • SKILL.md
  • cross-module-communication.md
  • ef-core.md
  • enforcement-tooling.md
  • enforcement.md
  • minimal-api.md
  • modular-isolation.md
  • optional-cqrs.md
  • optional-event-sourcing.md
  • output-format.md
  • ports-adapters.md
  • result.md

Open the folder on GitHubat commit 0e6c33c

Compare with similar skills

Dotnet Cop next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Dotnet Cop compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Dotnet Cop this skillfmflurry/settings-opencode171—~2kAutomated safety check: PassMIT
Code Reviewjonathanpeppers/dotnes780—~2.1kAutomated safety check: PassMIT
Code Reviewsortie-ai/sortie196—~2.9kAutomated safety check: PassMIT
Code Reviewyaklang/yakit7.8k—~1.4kAutomated safety check: NotesAGPL-3.0
Analyzing .NET Performancedotnet/skills5.6k3 repos~3.1kAutomated safety check: PassMIT
Code Reviewdotnet/macios2.9k—~1.7kAutomated safety check: PassCustom licence

Similar skills

  • Code Review

    jonathanpeppers/dotnes

    Review dotnes pull requests against established repository rules.

    780 GitHub stars~2.1k tokensUpdated 15 days ago
    DevelopmentAuto-check passed
  • Code Review

    sortie-ai/sortie

    Reviews pull requests in this repository for the defect classes a mechanical checklist misses: documentation that outlived the code it describes, reaction and retry state that leaks or clobbers a…

    196 GitHub stars~2.9k tokensUpdated today
    DevelopmentAuto-check passed
  • Code Review

    yaklang/yakit

    对 Yakit 仓库的代码改动做规范化 code review:按代码逻辑、TS 定义、UI 引用与 Props、CSS 样式、依赖版本、配置项六个维度审查,检查测试用例缺失,强制执行 tsc 类型检查与 vitest 测试验证,输出「结果汇总 / 明细解释 / 合并结论」三块报告,经用户确认后写入文件。当用户要求 review、审查、评审代码改动,或在提交、合并、提 PR…

    7.8k GitHub stars~1.4k tokensUpdated today
    DevelopmentAuto-check: notes
  • Official

    Scans C# and .NET code for about 50 performance anti-patterns and reports prioritized findings with concrete fixes, at a scan depth you choose.

    5.6k GitHub starsUsed in 3 repos~3.1k tokens
    DevelopmentAuto-check passed
  • Code Review

    dotnet/macios

    Official

    Review dotnet/macios PRs against established rules. An agent skill from dotnet/macios.

    2.9k GitHub stars~1.7k tokensUpdated today
    DevelopmentAuto-check passed
  • Official

    Interprets pinned managed benchmark evidence for a dotnet/maui pull request and writes a narrative for the performance review workflow, without running or publishing anything.

    23k GitHub stars~2.4k tokensUpdated today
    DevelopmentAuto-check passed

More from fmflurry/settings-opencode

All 20 skills in this repo
  • Show Your Work

    fmflurry/settings-opencode

    Keep a reviewable decision trail for long-running or unattended work: a TSV log with one row per decision (what, why, evidence, result).

    171 GitHub stars~1.8k tokensUpdated yesterday
    Auto-check passed
  • Playwright E2E Authoring

    fmflurry/settings-opencode

    Scaffold and extend Playwright E2E tests for the gc.platform suite (tests/playwright), wiring every artifact to the real frontend (localhost:4200) + real .NET backend — never mocks.

    171 GitHub stars~2.4k tokensUpdated yesterday
    Auto-check passed
  • Why

    fmflurry/settings-opencode

    A skill your agent uses for 'why does X work this way', 'why we picked Y', design rationale, regressions, postmortems, or data-backed thresholds.

    171 GitHub stars~2k tokensUpdated yesterday
    Auto-check passed
  • Angular Accessibility

    fmflurry/settings-opencode

    Audit and fix common accessibility issues in Angular templates and Angular Material components.

    171 GitHub stars~2.7k tokensUpdated yesterday
    Auto-check passed
  • Angular Clean Architecture

    fmflurry/settings-opencode

    Scaffolds and extends Angular standalone feature MODULES under src/app/modules/{name} using Clean Architecture layering (presentation/application/core/infrastructure), a self-registering module…

    171 GitHub stars~3.6k tokensUpdated yesterday
    Auto-check passed
  • Angular Cop

    fmflurry/settings-opencode

    Pre-merge code review for Angular + TypeScript pull requests.

    171 GitHub stars~1.4k tokensUpdated yesterday
    Auto-check passed

Works with

Categories

Questions about Dotnet Cop

What does Dotnet Cop do?

Pre-merge code review for .NET 10 pull requests. An agent skill from fmflurry/settings-opencode. Dotnet Cop is an agent skill from fmflurry/settings-opencode.NET 10 pull requests.

When should I use Dotnet Cop?

Dotnet Cop fits situations like: user runs /cop-review; says pre-merge review; invokes dotnet-cop.

How do I install Dotnet Cop in Claude Code?

Run `npx skills add fmflurry/settings-opencode --skill dotnet-cop -a claude-code`. Or copy the skill folder (skills/dotnet-cop in fmflurry/settings-opencode) into .claude/skills/dotnet-cop in your project. Claude Code loads it when a task matches its description.

How do I install Dotnet Cop in Codex?

Run `npx skills add fmflurry/settings-opencode --skill dotnet-cop -a codex`. Or copy the skill folder (skills/dotnet-cop in fmflurry/settings-opencode) into .agents/skills/dotnet-cop in your project. Codex loads it when a task matches its description.

Can I use Dotnet Cop in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add fmflurry/settings-opencode --skill dotnet-cop -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/dotnet-cop, .gemini/skills/dotnet-cop, .github/skills/dotnet-cop and .opencode/skills/dotnet-cop in your project.

What does Dotnet Cop need to run?

Going by SKILL.md and its folder, Dotnet Cop needs the command-line tools its instructions call (git).

Does Dotnet Cop access the network?

SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Dotnet Cop safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Dotnet Cop use?

Dotnet Cop is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Dotnet Cop use?

About 2k tokens (SKILL.md is roughly 7.8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Dotnet Cop?

Skills that share tags, products or a category with Dotnet Cop: Code Review (jonathanpeppers/dotnes, 780 stars), Code Review (sortie-ai/sortie, 196 stars), Code Review (yaklang/yakit, 7.8k stars) and Analyzing .NET Performance (dotnet/skills, 5.6k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Dotnet Cop?

fmflurry (a GitHub user) maintains it in fmflurry/settings-opencode, which has 171 GitHub stars. The repository holds 20 skills in this directory. The repository was last updated on October 7, 2026.

Source: fmflurry/settings-opencode on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.