csharp-docs
Skill0 starsChanged 2 months agoMITView on GitHub
Ensure that C# types are documented with XML comments and follow best practices for documentation.
3 other projects use a version of this, 2 of them edited.
Adopted by
Most recently taken up by
- github/awesome-copilotedited, first seen Oct 25, 2026
- itsfatduck/optimizerDuckedited, first seen Oct 8, 2026
- glennawatson/CSharpAgentSkillstheir own version, first seen Oct 1, 2026
Other versions3 projects use a version of this.
Word for word · 0
None found.
Edited · 2
- github/awesome-copilot★ 41k100% same
- itsfatduck/optimizerDuck★ 11k100% same
Wrote their own version · 1
- glennawatson/CSharpAgentSkills★ 2same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository21 other files it gives its agents.
- .claude/CLAUDE.mdCLAUDE.md
- angular-developerSkill
- channels-setupSkill
- copilotkit-channelsSkill
- copilotkit-cliSkill
- copilotkitSkill
- csharp-asyncSkill
- csharp-xunitSkill
- ef-coreSkill
- github-actions-efficiencySkill
- github-actions-hardeningSkill
- github-actions-runtime-upgrade-conventionsSkill
- inspector-docsSkill
- inspector-workbenchSkill
- intelligence-docsSkill
- microsoft-agent-frameworkSkill
- microsoft-docsSkill
- ngrx-signal-storeSkill
- prdSkill
- setup-slack-channelSkill
- technical-writingSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
24 rules. 4 are common, 0 are distinctive, and 20 are very specific to this project.
4
Common
Most of the 3 edited versions we read keep these.
0
Distinctive
This author's own choices. Worth a look.
20
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 13
Use <summary> to provide a brief, one sentence, description of what the type or member does.
- Very specific: line 14
Use <remarks> for additional information, which can include implementation details, usage notes, or any other relevant context.
- Very specific: line 15
Use <see langword> for language-specific keywords like null, true, false, int, bool, etc.
- Very specific: line 16
Use <c> for inline code snippets.
- Very specific: line 17
Use <example> for usage examples on how to use the member.
- Very specific: line 18
Use <code> for code blocks.
- Very specific: line 19
Use <see cref> to reference other types or members inline (in a sentence).
- Very specific: line 20
Use <seealso> for standalone (not in a sentence) references to other types or members in the "See also" section of the online docs.
- Very specific: line 21
Use <inheritdoc/> to inherit documentation from base classes or interfaces.
- Very specific: line 26
Use <param> to describe method parameters.
- Common: line 29
If the parameter is a flag enum, start the description with "A bitwise combination of the enumeration values that specifies...".
- Common: line 30
If the parameter is a non-flag enum, start the description with "One of the enumeration values that specifies...".
- Very specific: line 31
If the parameter is a Boolean, the wording should be of the form "<see langword="true" /> to ....
- Common: line 32
If the parameter is an "out" parameter, the wording should be of the form "When this method returns, contains ....
- Very specific: line 33
Use <paramref> to reference parameter names in documentation.
- Very specific: line 34
Use <typeparam> to describe type parameters in generic types or methods.
- Very specific: line 35
Use <typeparamref> to reference type parameters in documentation.
- Very specific: line 36
Use <returns> to describe what the method returns.
- Very specific: line 39
If the return type is Boolean, the wording should be of the form "<see langword="true" /> if ....
- Very specific: line 51
Use <value> to describe the value of the property.
- Very specific: line 53
If the property has a default value, add it in a separate sentence, for example, "The default is <see langword="false" />".
- Very specific: line 54
If the value type is Boolean, the wording should be of the form "<see langword="true" /> if ....
- Very specific: line 58
Use <exception cref> to document exceptions thrown by constructors, properties, indexers, methods, operators, and events.
- Common: line 59
Document all exceptions thrown directly by the member.
“Common” is measured: kept by at least 6 in 10 of the 3 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
C# Documentation Best Practices
- Public members should be documented with XML comments.
- It is encouraged to document internal members as well, especially if they are complex or not self-explanatory.
Guidance for all APIs
- Use
<summary>to provide a brief, one sentence, description of what the type or member does. Start the summary with a present-tense, third-person verb. - Use
<remarks>for additional information, which can include implementation details, usage notes, or any other relevant context. - Use
<see langword>for language-specific keywords likenull,true,false,int,bool, etc. - Use
<c>for inline code snippets. - Use
<example>for usage examples on how to use the member.- Use
<code>for code blocks.<code>tags should be placed within an<example>tag. Add the language of the code example using thelanguageattribute, for example,<code language="csharp">.
- Use
- Use
<see cref>to reference other types or members inline (in a sentence). - Use
<seealso>for standalone (not in a sentence) references to other types or members in the "See also" section of the online docs. - Use
<inheritdoc/>to inherit documentation from base classes or interfaces.- Unless there is major behavior change, in which case you should document the differences.
Methods
- Use
<param>to describe method parameters.- The description should be a noun phrase that doesn't specify the data type.
- Begin with an introductory article.
- If the parameter is a flag enum, start the description with "A bitwise combination of the enumeration values that specifies...".
- If the parameter is a non-flag enum, start the description with "One of the enumeration values that specifies...".
- If the parameter is a Boolean, the wording should be of the form "
<see langword="true" />to ...; otherwise,<see langword="false" />.". - If the parameter is an "out" parameter, the wording should be of the form "When this method returns, contains .... This parameter is treated as uninitialized.".
- Use
<paramref>to reference parameter names in documentation. - Use
<typeparam>to describe type parameters in generic types or methods. - Use
<typeparamref>to reference type parameters in documentation. - Use
<returns>to describe what the method returns.- The description should be a noun phrase that doesn't specify the data type.
- Begin with an introductory article.
- If the return type is Boolean, the wording should be of the form "
<see langword="true" />if ...; otherwise,<see langword="false" />.".
Constructors
- The summary wording should be "Initializes a new instance of the
<Class>class [or struct].".
Properties
- The
<summary>should start with:- "Gets or sets..." for a read-write property.
- "Gets..." for a read-only property.
- "Gets [or sets] a value that indicates whether..." for properties that return a Boolean value.
- Use
<value>to describe the value of the property.- The description should be a noun phrase that doesn't specify the data type.
- If the property has a default value, add it in a separate sentence, for example, "The default is
<see langword="false" />". - If the value type is Boolean, the wording should be of the form "
<see langword="true" />if ...; otherwise,<see langword="false" />. The default is ...".
Exceptions
- Use
<exception cref>to document exceptions thrown by constructors, properties, indexers, methods, operators, and events. - Document all exceptions thrown directly by the member.
- For exceptions thrown by nested members, document only the exceptions users are most likely to encounter.
- The description of the exception describes the condition under which it's thrown.
- Omit "Thrown if ..." or "If ..." at the beginning of the sentence. Just state the condition directly, for example "An error occurred when accessing a Message Queuing API."
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

