Install
$ agentstack add skill-gaelic-ghost-socket-build-csharp-project ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Build C# Project
Purpose
Implement or modify a C# .NET project in C#'s own shape while keeping F# as an equal peer elsewhere in the plugin.
The practical goal is clear nullable-aware APIs, focused types, useful async boundaries, tests that cover changed behavior, and validation through the repository's .NET commands.
When To Use
- Use this skill when the chosen language is C#.
- Use this skill when an existing
.csprojneeds new source, tests, or package-facing API. - Use this skill when a mixed solution has a C# host, app, API, or interop surface.
- Use this skill when the user asks for C# implementation specifically.
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:
Inspect the repository before editing:
rg --files -g '*.cs' -g '*.csproj' -g '*.sln' -g '*.slnx' -g 'global.json' -g '.editorconfig'
Implementation Workflow
- Read the existing project file and analyzer/style settings.
- Check nullable reference type behavior.
- Identify the public API or app behavior being changed.
- Use records for value-like data when that matches the domain.
- Use classes for identity, behavior, mutable state, or framework integration.
- Use interfaces only when there is a real alternate implementation, test boundary, or public contract.
- Keep async APIs async only when they perform asynchronous work or match an existing contract.
- Add or update tests around the behavior changed.
- Run the narrowest useful validation command.
Nullable And Analyzer Behavior
Respect existing repo configuration first.
When nullable reference types are enabled:
- avoid
!unless the invariant is real and local - prefer explicit null handling at boundaries
- keep public method contracts clear
When analyzers or warnings-as-errors are configured:
- fix warnings instead of suppressing them by default
- add suppressions only with a concrete reason
- avoid adding new style rules inside a feature change unless the user asked for tooling work
API Shape
For library APIs:
- keep public types small and purposeful
- prefer immutable inputs and outputs unless mutation is part of the model
- keep exceptions for exceptional failure and use result-like values only when the repo already has that convention
For apps:
- keep process, environment, filesystem, and network effects explicit
- keep business rules testable without shelling out
- write human-friendly errors that name what failed and likely cause
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:
C# change: what type, method, project, or behavior changed.Contracts: nullable, async, public API, or analyzer choices.Tests: what behavior is covered.Validation: exactdotnetcommands and result.F# boundary: if relevant, how this C# code interacts with F# projects.
Guardrails
- Do not treat C# as the automatic .NET default in user-facing explanations.
- Do not add interfaces, services, factories, or managers without naming the concrete caller or pain they address.
- Do not disable nullable or analyzers to make a change pass.
- Do not skip tests for behavior changes when the repo has a test surface.
- Do not rewrite a mixed F#/C# boundary without explaining the practical effect.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: gaelic-ghost
- Source: gaelic-ghost/socket
- License: Apache-2.0
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.