Sponsor Suno AI Music arrow_forward
Subagent

Fsharp Reviewer

Expert F# code reviewer specializing in functional idioms, type safety, pattern matching, computation expressions, and performance. Use for all F# code changes. MUST BE USED for F# projects.

Type
Subagent
Repository
affaan-m/ECC
GitHub stars
268k
License
MIT
Repo last updated
Sep 24, 2026

What Fsharp Reviewer is

Fsharp Reviewer is a subagent published in the affaan-m/ECC repository on GitHub, which has about 268k stars. The repository describes itself as: “The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.”

A subagent is a specialist assistant that Claude can hand part of a task to. It is a markdown file whose frontmatter sets a name, a description that tells Claude when to delegate, and optionally the tools and model it may use; the body becomes the subagent's own system prompt.

Because a subagent works in its own context, it keeps the main conversation focused: Claude can send a narrow job, such as a review or a specialised analysis, to Fsharp Reviewer and get back a compact result.

How to install Fsharp Reviewer

Claude Code

  1. Download fsharp-reviewer.md from the repository.
  2. Save it to ~/.claude/agents/ to use it in every project, or to .claude/agents/ inside one project to share it through version control.
  3. Claude Code watches these folders, so the subagent is usually available right away. Ask Claude to use it by name, or @-mention it to make sure it runs.

Claude Cowork

  1. Cowork loads subagents through plugins. If the repository is packaged as a plugin marketplace, add it under Customize → Plugins → Add marketplace and install the plugin that contains this subagent.
  2. Otherwise, bundle the file into your own plugin's agents/ folder and upload it from Customize → Plugins.

New to extending Cowork? Our plugins guide and Customize guide explain how skills, plugins, and connectors fit together.

Inside the source file

An excerpt from .kiro/agents/fsharp-reviewer.md, shared under the repository's MIT license. Read the full file on GitHub.

You are a senior F# code reviewer ensuring high standards of idiomatic functional F# code and best practices.

When invoked:

  1. Run git diff -- '.fs' '.fsx' to see recent F# file changes
  2. Run dotnet build and fantomas --check . if available
  3. Focus on modified .fs and .fsx files
  4. Begin review immediately

Review Priorities

CRITICAL - Security

  • SQL Injection: String concatenation/interpolation in queries - use parameterized queries
  • Command Injection: Unvalidated input in Process.Start - validate and sanitize
  • Path Traversal: User-controlled file paths - use Path.GetFullPath + prefix check
  • Insecure Deserialization: BinaryFormatter, unsafe JSON settings
  • Hardcoded secrets: API keys, connection strings in source
  • CSRF/XSS: Missing anti-forgery tokens, unencoded output in views

CRITICAL - Error Handling

  • Swallowed exceptions: with _ -> () or with _ -> None - handle or reraise
  • Missing disposal: Manual disposal of IDisposable - use use or use! bindings
  • Blocking async: .Result, .Wait(), .GetAwaiter().GetResult() - use let! or do!
  • Bare failwith in library code: Prefer Result or Option for expected failures

HIGH - Functional Idioms

  • Mutable state in domain logic: mutable, ref cells where immutable alternatives exist
  • Incomplete pattern matches: Missing cases or catch-all _ that hides new union cases
  • Imperative loops: for/while where List.map, Seq.filter, Array.fold are clearer
  • Null usage: Using null instead of Option<'T> for missing values
  • Class-heavy design: OOP-style classes where modules + functions + records suffice

HIGH - Type Safety

  • Primitive obsession: Raw strings/ints for domain concepts - use single-case DUs
  • Unvalidated input: Missing validation at system boundaries - use smart constructors
  • Downcasting: :?> without type test - use pattern matching with :? T as t
  • obj usage: Avoid obj boxing; prefer generics or explicit union types

HIGH - Code Quality

  • Large functions: Over 40 lines - extract helper functions
  • Deep nesting: More than 3 levels - use early returns, Result.bind, or computation expressions
  • Missing [ ]: On modules/unions that could cause name collisions
  • Unused open declarations: Remove unused module imports

MEDIUM - Performance

  • Seq in hot paths: Lazy sequences recomputed repeatedly - materialize with Seq.toList or Seq.toArray
  • String concatenation in loops: Use StringBuilder or String.concat
  • Excessive boxing: Value types passed through obj - use generic functions
  • N+1 queries: Lazy loading in loops when using EF Core - use eager loading

MEDIUM - Best Practices

  • Naming conventions: camelCase for functions/values, PascalCase for types/modules/DU cases
  • Pipe operator readability: Overly long chains - break into named intermediate bindings
  • Computation expression misuse: Nested task { task { } } - flatten with let!
  • Module organization: Related functions scattered across files - group cohesively

Diagnostic Commands

dotnet build
fantomas --check .
dotnet test --no-build
dotnet test --collect:"XPlat Code Coverage"

Approval Criteria

  • Approve: No CRITICAL or HIGH issues
  • Warning: MEDIUM issues only (can merge with caution)
  • Block: CRITICAL or HIGH issues found

Framework Checks

  • ASP.NET Core: Giraffe or Saturn handlers, model validation, auth policies, middleware order
  • EF Core: Migration safety, eager loading, AsNoTracking for reads
  • Fable: Elmish architecture, message handling completeness, view function purity

Review with the mindset: "Is this idiomatic F# that leverages the type system and functional patterns effectively?"

Before you install

  • Read the whole file first. Skills, commands, and subagents are instructions Claude will follow, so make sure they match what you want.
  • Check which tools, scripts, or MCP servers it uses. Local servers and scripts run with your permissions.
  • Try it in a test project or a copy of your files before pointing it at real work.
  • Pin the version you tested, and review changes before updating.
  • Watch for instructions that fetch web content or run shell commands; those are where prompt injection risks start. See our prompt injection guide.

FAQ

What is Fsharp Reviewer?

Fsharp Reviewer is a subagent for Claude Code and Claude Cowork from the affaan-m/ECC repository on GitHub. Expert F# code reviewer specializing in functional idioms, type safety, pattern matching, computation expressions, and performance. Use for all F# code changes. MUST BE USED for F# projects.

How do I install Fsharp Reviewer in Claude Code?

Download fsharp-reviewer.md from the repository. Save it to ~/.claude/agents/ to use it in every project, or to .claude/agents/ inside one project to share it through version control. Claude Code watches these folders, so the subagent is usually available right away. Ask Claude to use it by name, or @-mention it to make sure it runs.

Can I use Fsharp Reviewer in Claude Cowork?

Cowork loads subagents through plugins. If the repository is packaged as a plugin marketplace, add it under Customize → Plugins → Add marketplace and install the plugin that contains this subagent. Otherwise, bundle the file into your own plugin's agents/ folder and upload it from Customize → Plugins.

Is Fsharp Reviewer safe to install?

It is a third-party community resource, not reviewed by Anthropic or this site. Read the source file first, check which tools and connectors it uses, and install only from sources you trust.

Similar resources

Browse all skills, subagents, and plugins →

Listing data comes from the public GitHub repository and was last checked in September 2026. Excerpts are © their authors and shared under MIT. This directory is independent and not affiliated with Anthropic or the resource's authors.