CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

fsharp-csharp-interop

Rules for F# code that C# calls, and C# code that calls F#, in morphir-dotnet. Covers parsed domain types, nullness metadata, TryParse/Create members, Match members for unions, collections, option and null, equality, ToString and AOT safety, and the .fsproj settings. Use when you add or change a public F# type, member or module that a C# project uses; when C# code calls F# types (unions, records, Result, option, list); when you create an F# project that C# references; or when you review a diff that crosses the F#/C# boundary. Triggers include "F# interop", "C# interop", "call F# from C#", "F# union in C#", "MaybeNullWhen", "NotNullWhen", "CompiledName", "F# nullness", "Nullable enable fsproj", "oblivious", "TryParse", "parse don't validate".

Quality

100%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Passed

No findings from the security scan

SKILL.md
Quality
Evals
Security

Quality

Content

100%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

An exceptionally well-structured rule skill: terse, project-specific rules with exact signatures and attributes, an executable settings block, and a complete review workflow with checklist and reporting format. Bundle structure follows progressive disclosure correctly, externalizing code examples to a verified one-level-deep reference with clear read-timing guidance.

DimensionReasoningScore

Conciseness

The body is a dense rule catalog with no padding: it never explains what F#, C#, or interop are, and every non-obvious statement earns its place (e.g. "F# does not write the nullness of a byref element into the metadata, so C# reads the value as never null"). Project-specific context ("morphir-dotnet writes domain types in F# and keeps the CLI edge in C#") is exactly what Claude could not know otherwise.

5 / 5

Actionability

Guidance is fully executable: a copy-paste `.fsproj` property block, exact member signatures ("static member TryParse(text, out result, out failure) : bool"), exact attribute patterns ("[<Out; MaybeNullWhen(false)>]"), exact commands ("git diff <base>...HEAD -- '*.fs' '*.fsi' '*.fsproj' '*.cs'"), and a ready-to-use subagent prompt with an exact output format ("path:line: rule N: problem. fix."). It is not a score above 5, and it exceeds anchor 4 because concrete examples cover the common cases via references/patterns.md, which the body states compile.

5 / 5

Workflow Clarity

"Before you start" is a clear 3-step sequence with an explicit checkpoint ("Check the project settings (rule 1). Without them, the C# compiler cannot see F# nullness"), and the review workflow ships a full checklist, a severity ordering ("most severe first"), a reporting format, and the no-findings case ("If there is no finding, say so"). Not the level below (4) because a validation checklist and reporting loop are explicitly present, not merely implied.

5 / 5

Progressive Disclosure

The split is clean: rules live in SKILL.md and code examples live in references/patterns.md (verified to exist, 228 lines, one level deep, linking only back to ../SKILL.md). The reference is well signaled twice with read timing ("Read that file before you write new boundary code"), and Related points to repo docs without nesting. Not anchor 4 because there are no organization gaps — navigation and placement are both explicit.

5 / 5

Total

20

/

20

Passed

Description

100%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

The description is a model example: it states what the skill covers with nine concrete areas, gives four explicit use-when scenarios, and lists twelve natural trigger phrases with synonyms. It is tightly scoped to the F#/C# interop niche, so both completeness and distinctiveness are maximal.

DimensionReasoningScore

Specificity

The description enumerates nine concrete covered areas — "parsed domain types, nullness metadata, TryParse/Create members, Match members for unions, collections, option and null, equality, ToString and AOT safety, and the .fsproj settings" — which is comprehensive coverage of the niche with no vague filler. Not anchor 4 because the coverage has no gaps: every major boundary concern is named explicitly.

5 / 5

Completeness

Both halves are explicit: what ("Rules for F# code that C# calls, and C# code that calls F#, in morphir-dotnet. Covers ...") and when ("Use when you add or change a public F# type, member or module that a C# project uses; ... or when you review a diff that crosses the F#/C# boundary") plus concrete trigger phrases. This matches the anchor-5 pattern of explicit what + explicit when with concrete triggers, so 4 (where 'when' could be more specific) does not fit.

5 / 5

Trigger Term Quality

Twelve explicit trigger phrases including natural synonyms ("F# interop", "C# interop", "call F# from C#", "F# union in C#") and terms a developer would literally type when hitting this problem ("MaybeNullWhen", "CompiledName", "Nullable enable fsproj", "TryParse", "parse don't validate"). Not anchor 4 because synonyms and tool/file-specific variations are all present.

5 / 5

Distinctiveness Conflict Risk

A clear niche — the F#/C# boundary in a specific repository — with triggers dominated by interop-specific terms ("F# union in C#", "CompiledName", "F# nullness") that would not fire for unrelated skills. A few generic terms ("TryParse", "oblivious") exist but are contextualized by the surrounding interop framing, leaving only minimal conflict risk, which is exactly the anchor-5 condition.

5 / 5

Total

20

/

20

Passed

Validation

100%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 16 / 16 Passed

Validation for skill structure

No warnings or errors.

Repository

finos/morphir-dotnet

Path

.agents/skills/fsharp-csharp-interop/SKILL.md

Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.