.NET API Compatibility Design
Aaronontheweb/dotnet-skills
Applies extend-only design rules to NuGet packages and distributed systems, covering source, binary and wire compatibility and how to deprecate members safely.
Improve XML documentation in the Vonage .NET SDK. An agent skill from Vonage/vonage-dotnet-sdk.
$ npx skills add Vonage/vonage-dotnet-sdk --skill xml-documentation -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Vonage/vonage-dotnet-sdk xml-documentation --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/Vonage/vonage-dotnet-sdk.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/xml-documentation .claude/skills/xml-documentation && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "xml-documentation" agent skill from https://github.com/Vonage/vonage-dotnet-sdk/tree/main/.claude/skills/xml-documentation into .claude/skills/xml-documentation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "xml-documentation", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/Vonage/vonage-dotnet-sdk/tree/main/.claude/skills/xml-documentationType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add Vonage/vonage-dotnet-sdk --skill xml-documentation -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Vonage/vonage-dotnet-sdk xml-documentation --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Vonage/vonage-dotnet-sdk.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/xml-documentation .agents/skills/xml-documentation && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "xml-documentation" agent skill from https://github.com/Vonage/vonage-dotnet-sdk/tree/main/.claude/skills/xml-documentation into .agents/skills/xml-documentation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "xml-documentation", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Vonage/vonage-dotnet-sdk --skill xml-documentation -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Vonage/vonage-dotnet-sdk xml-documentation --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Vonage/vonage-dotnet-sdk.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/xml-documentation .cursor/skills/xml-documentation && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "xml-documentation" agent skill from https://github.com/Vonage/vonage-dotnet-sdk/tree/main/.claude/skills/xml-documentation into .cursor/skills/xml-documentation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "xml-documentation", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/Vonage/vonage-dotnet-sdk.git --path .claude/skills/xml-documentation--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add Vonage/vonage-dotnet-sdk --skill xml-documentation -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Vonage/vonage-dotnet-sdk xml-documentation --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Vonage/vonage-dotnet-sdk.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/xml-documentation .gemini/skills/xml-documentation && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "xml-documentation" agent skill from https://github.com/Vonage/vonage-dotnet-sdk/tree/main/.claude/skills/xml-documentation into .gemini/skills/xml-documentation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "xml-documentation", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install Vonage/vonage-dotnet-sdk xml-documentationInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add Vonage/vonage-dotnet-sdk --skill xml-documentation -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Vonage/vonage-dotnet-sdk.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/xml-documentation .github/skills/xml-documentation && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "xml-documentation" agent skill from https://github.com/Vonage/vonage-dotnet-sdk/tree/main/.claude/skills/xml-documentation into .github/skills/xml-documentation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "xml-documentation", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Vonage/vonage-dotnet-sdk --skill xml-documentation -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Vonage/vonage-dotnet-sdk xml-documentation --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Vonage/vonage-dotnet-sdk.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/xml-documentation .opencode/skills/xml-documentation && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "xml-documentation" agent skill from https://github.com/Vonage/vonage-dotnet-sdk/tree/main/.claude/skills/xml-documentation into .opencode/skills/xml-documentation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "xml-documentation", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
xml-documentationImprove XML documentation in the Vonage .NET SDK. An agent skill from Vonage/vonage-dotnet-sdk.
XML Documentation is an agent skill from Vonage/vonage-dotnet-sdk. Improve XML documentation in the Vonage .NET SDK. Use when the user mentions "improve XML docs", "document [namespace]", "XML documentation", "add missing docs", or references documenting C classes, properties, enums, or interfaces in this SDK. Covers IntelliSense summaries, OAS-based constraints, code examples, and builder struct documentation.
Its SKILL.md is about 2.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Backend & APIs. It works with .NET and C#. The repository describes itself as: Vonage REST API client for .NET, written in C. API support for SMS, Voice, Text-to-Speech, Numbers, Verify (2FA) and more. The licence is Apache-2.0.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 8cad085. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are csharp and bash).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
XML Documentation loads about 2.7k tokens when it runs. Until then it costs about 92 tokens; SKILL.md has 1,001 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from Vonage/vonage-dotnet-sdk at commit 8cad085, republished under its Apache-2.0 licence (© Vonage). 1,001 words, ~2,690 tokens.
.claude/skills/xml-documentation/SKILL.md (or your agent's skills folder).The goal is to make the Vonage .NET SDK self-explanatory. Customers should be able to understand and use the SDK entirely from IntelliSense, without ping-ponging between their code and the developer portal.
This means every public method needs a clear explanation, every parameter and property needs its data described (constraints, formats, supported values), every key method needs a code example, and client methods need a link to the snippets repository. The OAS file is the source of truth for property details because it captures constraints that aren't visible from the code alone.
Private and internal methods are out of scope — they aren't part of the customer-facing surface. The focus is entirely on what developers see in IntelliSense.
You MUST ask the user: "What is the path to the OAS file for this product?"
Do NOT guess. Do NOT proceed. Do NOT read any .cs files yet. Wait for the
user to respond with the path.
Once you have the path, read it. Understand the schemas, required fields, character limits, supported formats, and enum values. This is your source of truth for property descriptions and constraints.
You MUST ask the user: "Is this product exposed on the code snippets repository? If yes, give me the product folder URL. If not, give me the repo root URL."
Do NOT proceed until you have the URL. You will use it for <seealso> links
on client methods.
Now scan the folder to inventory all .cs files and understand the class
hierarchy (base classes, interfaces, request types, enums, records).
Process every public .cs file in the target folder in a single pass. Follow
the priority order below so that base types are documented before their
dependents:
After processing, run this grep to confirm no empty summaries remain:
grep -rn "/// <summary>\s*$" --include="*.cs" <target-folder>Report the results to the user.
[ValidationRule]
methods, and private implementation details like GetRequestContent() or
BuildInsights(). For BuildRequestMessage() that implements an interface,
use <inheritdoc />.Apply these patterns to every file you touch.
Pattern: [What it is] + [When to use it / Key context]
/// <summary>
/// Represents a text message request to be sent via Facebook Messenger.
/// </summary>/// <summary></summary> tags.Describe the contract and what implementations provide:
/// <summary>
/// Exposes methods for sending messages across multiple channels (SMS, MMS, WhatsApp, Messenger, Viber, RCS).
/// </summary>/// <summary>
/// The text of message to send; limited to 1000 characters. The Messages API automatically
/// detects unicode characters and encodes accordingly.
/// </summary>If a property has no OAS match and no obvious meaning, write a best-guess summary and mark it with a TODO:
/// <summary>
/// The auxiliary data associated with the request.
/// TODO: No OAS match found — verify this description.
/// </summary>/// <summary>
/// Response to a user-initiated conversation. Must be sent within 24 hours of the user's message.
/// </summary>
[Description("response")] Response = 0,Use <param> tags for record parameters:
/// <summary>
/// Represents the response from sending a message through the Messages API.
/// </summary>
/// <param name="MessageUuid">The unique identifier for the message. Use this to track delivery status via webhooks.</param>For key public methods on client classes, include:
<see cref=""/> links to related types.<![CDATA[...]]> for proper formatting.<seealso> link using the URL the user provided./// <summary>
/// Sends a message through the specified channel.
/// </summary>
/// <param name="message">The message to send. Can be any implementation of <see cref="IMessage"/> such as <see cref="Sms.SmsRequest"/>.</param>
/// <returns>A response containing the message UUID for tracking delivery status.</returns>
/// <example>
/// <code><![CDATA[
/// var message = new SmsRequest { To = "447700900000", From = "Vonage", Text = "Hello!" };
/// var response = await client.SendAsync(message);
/// ]]></code>
/// </example>
/// <seealso href="URL_FROM_USER">More examples in the snippets repository</seealso>[Builder] attribute)The codebase uses a custom source generator for builder patterns. When a
struct is decorated with [Builder], the generator reads each property's
builder attribute and XML docs, then emits builder interfaces and an internal
builder struct. The XML docs you write on the property are copied verbatim
onto the generated builder method — on both the interface and the builder
struct. This means docs must read as method descriptions, not property
descriptions.
Only document public members. Private methods, internal helpers,
[ValidationRule] methods, and BuildRequestMessage() implementations should
be left alone (use <inheritdoc /> for BuildRequestMessage() if the
interface already documents it).
| Attribute | Generated method name | Signature |
|---|---|---|
[Mandatory(order)] | With + PropertyName | WithId(int value) |
[MandatoryWithParsing(order, parserName)] | With + PropertyName | WithPhoneNumber(string value) (takes string, parser converts) |
[Optional] | With + PropertyName | WithName(string value) |
[OptionalWithParsing] | With + PropertyName | Takes string, parser converts |
[OptionalWithDefault] | With + PropertyName | Has a default value |
[OptionalBoolean(default, "MethodName")] | The explicit name from the attribute | EnableVerbose() or Hide() (parameterless toggle) |
The naming rule: all attributes generate With + PropertyName except
[OptionalBoolean], which uses the explicit method name provided in the
attribute (second argument). This name can reverse the boolean meaning
(e.g., property Verbose → method EnableVerbose, property Hidden →
method Hide).
<example> — regardless of attribute type.
Show only that single method call, never the full builder chain.[OptionalBoolean],
use the explicit name from the attribute, not With + PropertyName.[Mandatory] — simple value, example shows .WithPropertyName(value):
/// <summary>
/// Sets the unique identifier for the request.
/// </summary>
/// <example>
/// <code><![CDATA[
/// .WithId(42)
/// ]]></code>
/// </example>
[Mandatory(0)]
public int Id { get; internal init; }[MandatoryWithParsing] — takes a string, parser converts it:
/// <summary>
/// Sets the phone number to retrieve insights for. The number should follow E.164 format.
/// </summary>
/// <example>
/// <code><![CDATA[
/// .WithPhoneNumber("+14155552671")
/// ]]></code>
/// </example>
[MandatoryWithParsing(0, nameof(ParsePhoneNumber))]
public PhoneNumber PhoneNumber { get; internal init; }[Optional] — wraps value in Maybe<T>:
/// <summary>
/// Sets the name associated with the request.
/// </summary>
/// <example>
/// <code><![CDATA[
/// .WithName("John Doe")
/// ]]></code>
/// </example>
[Optional]
public Maybe<string> Name { get; internal init; }[OptionalBoolean] — parameterless toggle, uses the explicit method name:
/// <summary>
/// Enables verbose output for debugging purposes.
/// </summary>
/// <example>
/// <code><![CDATA[
/// .EnableVerbose()
/// ]]></code>
/// </example>
[OptionalBoolean(false, "EnableVerbose")]
public bool Verbose { get; internal init; }<inheritdoc />Use <inheritdoc /> for overridden members where the base/interface
documentation is already good. Do not use it at the class level if the base
class has poor documentation — write a proper summary instead.
© Vonage, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/xml-documentation of Vonage/vonage-dotnet-sdk.
Open the folder on GitHubat commit 8cad085
XML Documentation next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| XML Documentation this skillVonage/vonage-dotnet-sdk | 118 | — | ~2.7k | Automated safety check: Pass | Apache-2.0 | |
| .NET API Compatibility DesignAaronontheweb/dotnet-skills | 1.2k | 2 repos | ~2.7k | Automated safety check: Pass | MIT | |
| Aa Batching PaymastersNethereum/Nethereum | 2.3k | — | ~1.5k | Automated safety check: Pass | MIT | |
| Tsp Csharpquerylenshq/ef-querylens | 225 | — | ~1.3k | Automated safety check: Pass | MIT | |
| Aa BundlerNethereum/Nethereum | 2.3k | — | ~1.2k | Automated safety check: Pass | MIT | |
| Dotnet 10 Csharp 14sketch7/FluentlyHttpClient | 121 | — | ~2.2k | Automated safety check: Pass | MIT |
Aaronontheweb/dotnet-skills
Applies extend-only design rules to NuGet packages and distributed systems, covering source, binary and wire compatibility and how to deprecate members safely.
Nethereum/Nethereum
Help users batch multiple calls into a single UserOperation and sponsor gas with paymasters using Nethereum Account Abstraction.
querylenshq/ef-querylens
Comprehensive C and .NET development skill for TSP projects.
Nethereum/Nethereum
Help users run an ERC-4337 bundler using Nethereum — set up in-process or standalone bundlers with mempool, validation, reputation, and JSON-RPC server.
sketch7/FluentlyHttpClient
A skill your agent uses when building .NET 10 or C 14 applications; when using minimal APIs, modular monolith patterns, or feature folders; when implementing HTTP resilience, Options pattern…
Nethereum/Nethereum
Fetch contract ABIs from Sourcify, Etherscan, and 4Byte Directory using the composite ABIInfoStorage pattern (.NET/C).
Vonage/vonage-dotnet-sdk
Add a new endpoint, use case, or product to the Vonage .NET SDK.
Categories
Improve XML documentation in the Vonage .NET SDK. An agent skill from Vonage/vonage-dotnet-sdk. XML Documentation is an agent skill from Vonage/vonage-dotnet-sdk.NET SDK.
XML Documentation fits situations like: the user mentions improve XML docs; document [namespace]; XML documentation; add missing docs.
Run `npx skills add Vonage/vonage-dotnet-sdk --skill xml-documentation -a claude-code`. Or copy the skill folder (.claude/skills/xml-documentation in Vonage/vonage-dotnet-sdk) into .claude/skills/xml-documentation in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Vonage/vonage-dotnet-sdk --skill xml-documentation -a codex`. Or copy the skill folder (.claude/skills/xml-documentation in Vonage/vonage-dotnet-sdk) into .agents/skills/xml-documentation in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Vonage/vonage-dotnet-sdk --skill xml-documentation -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/xml-documentation, .gemini/skills/xml-documentation, .github/skills/xml-documentation and .opencode/skills/xml-documentation in your project.
SKILL.md names no scripts, command-line tools or credentials: XML Documentation is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
XML Documentation is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.7k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with XML Documentation: .NET API Compatibility Design (Aaronontheweb/dotnet-skills, 1.2k stars), Aa Batching Paymasters (Nethereum/Nethereum, 2.3k stars), Tsp Csharp (querylenshq/ef-querylens, 225 stars) and Aa Bundler (Nethereum/Nethereum, 2.3k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Vonage (a GitHub organization) maintains it in Vonage/vonage-dotnet-sdk, which has 118 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on June 10, 2026.
Source: Vonage/vonage-dotnet-sdk on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.