Skip to content
Development
Skill

/build-fsharp-project

Build or modify idiomatic F# .NET projects using explicit modules, domain types, functional data flow, file ordering, async/task interop, tests, and repo-local validation.

From plugin
socket
9200 skills5 MCP

Claude Code

$ npx -y skills add gaelic-ghost/socket --skill build-fsharp-project --agent claude-code

SKILL.md

build-fsharp-project.SKILL.md
name: build-fsharp-project
description: Build or modify idiomatic F# .NET projects using explicit modules, domain types, functional data flow, file ordering, async/task interop, tests, and repo-local validation.
license: Apache-2.0
compatibility: Designed for Codex and compatible Agent Skills clients working with F# projects on the .NET SDK.
metadata:
  owner: gaelic-ghost
  repo: socket
  category: dotnet-fsharp
allowed-tools: Read Bash(rg:*) Bash(git:*) Bash(dotnet:*)

Build F# Project

Purpose

Implement or modify an F# .NET project in F#'s own shape.

The practical goal is readable domain modeling, explicit data flow, good module boundaries, correct file ordering, useful tests, and validation through the repository's .NET commands.

When To Use

  • Use this skill when the chosen language is F#.
  • Use this skill when an existing `.fsproj` needs new source, tests, or package-facing API.
  • Use this skill when a mixed solution needs an F# library or domain project.
  • Use this skill when code looks like translated C# and should be made idiomatic F#.

Source Check

Use repo-local .NET files, checked-out dependency sources, Dash MCP or Dash HTTP for installed .NET docsets, and then official Microsoft documentation when Dash/local coverage is missing or stale:

  • [F# documentation](https://learn.microsoft.com/dotnet/fsharp/)
  • [F# language reference](https://learn.microsoft.com/dotnet/fsharp/language-reference/)
  • [.NET CLI documentation](https://learn.microsoft.com/dotnet/core/tools/)
  • [`dotnet test` documentation](https://learn.microsoft.com/dotnet/core/tools/dotnet-test)

Inspect the repository before editing:

rg --files -g '*.fs' -g '*.fsproj' -g '*.sln' -g '*.slnx' -g 'global.json'

Implementation Workflow

1. Read the existing `.fsproj` and source ordering. 2. Identify the domain values and transformations. 3. Prefer small modules with explicit inputs and outputs. 4. Use records for named product data. 5. Use discriminated unions for closed sets of alternatives. 6. Use options and results for expected absence or recoverable failure. 7. Keep side effects at the edge of the workflow. 8. Add or update tests around the behavior changed. 9. Run the narrowest useful validation command.

File Ordering

F# compiles files in project order.

Before adding a new file:

  • decide which later files depend on it
  • place shared domain types before modules that use them
  • place entry points after the implementation they call
  • update `.fsproj` deliberately

Do not assume globbed source discovery unless the project already proves it.

API Shape

For library APIs:

  • expose a small set of clear modules and functions
  • keep constructors and helpers close to the types they create
  • avoid leaking implementation-only records or unions into public API
  • provide C#-friendly APIs only when there is a real C# consumer

For apps:

  • keep parsing, IO, environment reads, and process exits at the edge
  • keep core transformations testable without shelling out
  • return values that describe what happened before printing or logging them

Async And Task Interop

Use the existing project style first.

When calling modern .NET APIs from F#, be explicit about whether a function returns `Async<'T>`, `Task<'T>`, or a plain value. Avoid hiding task conversion in unrelated helpers. Explain the boundary when a public API exposes tasks for C# consumers.

Testing

Use the repository's existing test framework and command if present.

When no convention exists yet, use xUnit as the recommended scaffold default and keep command guidance centered on `dotnet test`. Preserve existing repo choices instead of migrating test frameworks casually.

Output Shape

Return:

1. `F# change`: what module, type, function, or project behavior changed. 2. `Data flow`: inputs, transformations, side effects, and outputs. 3. `Project ordering`: any `.fsproj` ordering changes. 4. `Tests`: what behavior is covered. 5. `Validation`: exact `dotnet` commands and result.

Guardrails

  • Do not translate C# examples line-by-line into F#.
  • Do not hide mutation or IO inside broad helpers when a pure transformation would be clearer.
  • Do not add compatibility APIs for C# unless a C# caller exists or the user asks for one.
  • Do not ignore `.fsproj` file ordering.
  • Do not skip tests for behavior changes when the repo has a test surface.
Read more
@gaelic-ghost
Ships withsocket

Stuff for Agents on macOS Promo audio: Socket Codex Marketplace Promo

9200 skills5 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
9
Star history of gaelic-ghost/socket on GitHub, a chart by star-history.com

Other skills on socket.

orchestrate-agent-work

orchestrate-agent-work

Coordinate bounded worker tasks with a launch envelope, report-back, escalation, and synthesis contract. Use before spawning,…

@gaelic-ghost@gaelic-ghostInstall Skill

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills11d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc12d293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react1d252k
@facebook@facebookInstall Skill

Questions about build-fsharp-project.

Which coding agents can use build-fsharp-project?
build-fsharp-project installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.