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
- Source file
- .kiro/agents/fsharp-reviewer.md
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
- 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.
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.
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:
- Run git diff -- '.fs' '.fsx' to see recent F# file changes
- Run dotnet build and fantomas --check . if available
- Focus on modified .fs and .fsx files
- 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
- Instinct Status Show learned instincts (project + global) with confidence Slash Command · affaan-m/ECC
- Java Build Resolver Java/Maven/Gradle build, compilation, and dependency error resolution specialist. Automatically detects Spring Boot or Quarkus and applies framework-specific fixes. Use when Java builds fail. Subagent · affaan-m/ECC
- Instinct Import Import instincts from file or URL into project/global scope Slash Command · affaan-m/ECC
- Kotlin Build Resolver Kotlin/Gradle build, compilation, and dependency error resolution specialist. Fixes build errors, Kotlin compiler errors, and Gradle issues with minimal changes. Use when Kotlin builds fail. Subagent · affaan-m/ECC
- Gan Evaluator GAN Harness — Evaluator agent. Tests the live running application via Playwright, scores against rubric, and provides actionable feedback to the Generator. Subagent · affaan-m/ECC
- Flutter Reviewer Flutter and Dart code reviewer. Reviews Flutter code for widget best practices, state management patterns, Dart idioms, performance pitfalls, accessibility, and clean architecture violations. Library-agnostic — works with any state management solution and tooling. Subagent · affaan-m/ECC
- Gan Generator GAN Harness — Generator agent. Implements features according to the spec, reads evaluator feedback, and iterates until quality threshold is met. Subagent · affaan-m/ECC
- Fastapi Reviewer Reviews FastAPI applications for async correctness, dependency injection, Pydantic schemas, security, OpenAPI quality, testing, and production readiness. Subagent · affaan-m/ECC