skills/cpp-api-documentation/SKILL.md
Adds Doxygen-compatible documentation comments to C++ header files. Use this skill exclusively for adding or improving API documentation in existing header files (*.hpp, *.h). Do NOT create new resource files such as Doxyfile, scripts, or README files.
npx skillsauth add sentenz/skills cpp-api-documentationInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Instructions for AI coding agents on adding Doxygen-compatible documentation comments to C++ header files.
[!NOTE] This skill is for documenting header files only. Do NOT create new resource files (e.g., Doxyfile, scripts, README).
Discoverability
Well-documented APIs enable developers to quickly understand and use components without reading implementation details.
Maintainability
Documentation embedded in source code stays synchronized with implementation, reducing drift between code and documentation.
Traceability
Documentation comments serve as living specifications, keeping API contracts synchronized with implementation.
Effective API documentation follows these core principles.
Complete
Document all public APIs including classes, functions, parameters, return values, and exceptions. Private implementation details may be omitted.
Contextual
Documentation provides context about usage patterns, performance characteristics, and thread safety guarantees.
Consistent
Use a uniform style, format, terminology and structure throughout the API documentation using the patterns defined in this skill.
Concise
Use clear, brief descriptions. Avoid redundant information that restates what is obvious from the signature.
Concrete
Provide specific details about behavior, edge cases, and error conditions rather than vague statements.
Convenient
Documentation should be easy to access and navigate, integrated with development tools and workflows.
Accurate
Documentation must match the actual behavior. Update documentation whenever the implementation changes.
Actionable
Include usage examples, preconditions, postconditions, and error handling to help developers use the API correctly.
File-level documentation provides context for the entire header file.
Purpose
Describes the file's role in the project architecture.
Author
Identifies the original author(s) of the file.
License
Specifies the licensing terms (typically SPDX identifier).
Namespace-level documentation describes the purpose of the namespace.
Brief
A one-line summary of what the namespace contains.
Details
Extended description of the namespace's role and contents.
Class-level documentation describes the abstraction.
Brief
A one-line summary of what the class represents.
Details
Extended description of responsibilities, invariants, and usage patterns.
Template Parameters
For template classes, document each template parameter's purpose and constraints.
Function-level documentation describes the contract.
Brief
A one-line summary of what the function does.
Parameters
Document each parameter with
@paramincluding direction ([in],[out],[in,out]).
Return Value
Document the return value with
@returnor@retvalfor specific values.
Exceptions
Document thrown exceptions with
@throwsor@exception.
Warnings
Use
@warningfor critical warnings about misuse.
Notes
Use
@notefor important information.
Preconditions
Document preconditions with
@pre.
Postconditions
Document postconditions with
@post.
Code Examples
Use
@codeand@endcodeblocks for usage examples.
Cross-references link related documentation.
Use
@seeto reference related functions, classes, or external resources.
Member-level documentation clarifies data semantics.
Inline Comments
Use
///< descriptionfor trailing inline documentation.
Block Comments
Use
/// descriptionfor preceding documentation.
Enumerations document possible values and their meanings.
Document each enumerator with a brief Inline Comments description.
Organize related elements into logical groups.
Defgroups
Use
@defgroupto create named documentation modules.
Ingroups
Use
@ingroupto add elements to existing groups.
Memberof
Use
@memberoffor explicit class membership.
Class hierarchies and inherited documentation.
Document inherited classes with
@copydocor@copybriefto reuse base class documentation.
Mathematical formulas using LaTeX syntax for algorithms and technical documentation.
Inline Formulas
Use
\f$..\f$for formulas that appear within running text (opens LaTeX math mode).
Inline Text-Mode Formulas
Use
\f(...\f)for LaTeX elements that don't require explicit math mode (e.g., logos like\LaTeX).
Displayed Formulas
Use
\f[...\f]for centered, unnumbered equations on separate lines.
Environment Formulas
Use
\f{environment}{...\f}for specific LaTeX environments (e.g.,eqnarray*,align).
MathJax Alternative
Enable
USE_MATHJAXin Doxyfile for client-side formula rendering without requiring LaTeX installation.
Custom Macros
Use
FORMULA_MACROFILEconfiguration to define reusable LaTeX commands with\newcommand.
[!IMPORTANT] Do NOT create Doxyfile, scripts, or other resource files. Only modify header files.
Identify
Identify undocumented or poorly documented public APIs in header files (e.g., src/<module>/<header>.hpp).
Add Documentation Comments
Add Doxygen-compatible documentation comments directly to header files following the templates below.
Documentation Coverage Requirements
Include comprehensive documentation for:
Apply Templates
Structure all documentation using the template patterns below.
Review
Review documentation for accuracy and readability.
Doxygen supports multiple comment styles. Use the Javadoc style for consistency.
Language
Write documentation in clear, concise English. Use present tense for descriptions ("Returns the sum" not "Will return the sum").
Line Length
Keep documentation lines under 100 characters for readability.
Block Comments
Use
/** ... */for multi-line documentation blocks. Each line within the block should start with*.
Comment Style
Prefer
///for single-line documentation and/** */for multi-line documentation blocks. Use Javadoc-style commands (@param,@return) rather than Qt-style (\param,\return).
Brief Descriptions
Use
@brieffor explicit brief descriptions.
Detailed Descriptions
Add detailed descriptions after the brief, separated by a blank line or using
@details.
Parameter Direction
Always specify parameter direction using
[in],[out], or[in,out]for clarity.
Code Examples
Use
@codeand@endcodeblocks for usage examples within documentation.
Cross-References
Use
@seeto reference related functions, classes, or external resources.
Warnings and Notes
Use
@notefor important information and@warningfor critical warnings.
Deprecation
Mark deprecated APIs with
@deprecatedincluding migration guidance.
TODO Items
Use
@todofor planned improvements visible in generated documentation.
Order of Tags
Follow this order for function documentation:
@brief@details(if needed)@tparam(for templates)@param@return@throws@pre@post@note@warning@see@deprecated
Use these templates for new documentation. Replace placeholders with actual values.
[!NOTE] Place the
@fileblock after the include guard (#pragma onceor#ifndef/#define). This ensures the documentation is parsed once along with the declarations it describes and keeps preprocessor directives separate from API documentation.
#pragma once
/**
* @file <filename>.hpp
* @brief One-line description of the file's purpose.
*
* Detailed description of the file's contents and design decisions.
*
* @author <author_name>
* @copyright Copyright (c) <year> <organization>
* @license SPDX-License-Identifier: <license_identifier>
*/
/**
* @brief One-line description of namespace contents.
*
* Detailed description of the namespace's role, the types of
* components it contains, and how they relate to each other.
*/
namespace namespace_name {
// Namespace contents
} // namespace namespace_name
/**
* @brief One-line description of the class.
*
* Detailed description of the class responsibility, key invariants,
* and usage patterns.
*
* @tparam T Description of template parameter and constraints.
*
* @note Thread safety: Describe thread safety guarantees.
*
* @see RelatedClass
*
* @code
* ClassName<int> obj;
* obj.method(param);
* @endcode
*/
template <typename T>
class ClassName
{
// ...
};
/**
* @brief One-line description of what the function does.
*
* Detailed description including algorithm details and edge cases.
*
* @param[in] param1 Description of the input parameter.
* @param[out] param2 Description of the output parameter.
* @param[in,out] param3 Description of bidirectional parameter.
*
* @return Description of the return value.
* @retval specific_value Meaning of this specific return value.
*
* @throws std::invalid_argument If param1 is invalid.
* @throws std::runtime_error If operation fails.
*
* @pre Preconditions that must be met before calling.
* @post Postconditions guaranteed after successful execution.
*
* @note Important information for users.
* @warning Critical warnings about potential misuse.
*
* @see relatedFunction()
*
* @code
* auto result = functionName(input, output);
* @endcode
*/
ReturnType functionName(const InputType& param1, OutputType& param2);
class ClassName
{
private:
int count_; ///< Number of items currently stored.
bool is_valid_; ///< Whether the object is in a valid state.
/// Description for simple members.
int simple_member_;
/**
* @brief Buffer for temporary storage.
*
* Detailed explanation of the member's purpose and
* synchronization requirements.
*/
std::vector<char> buffer_;
};
/**
* @brief Description of what this enumeration represents.
*
* Detailed description of the enum's purpose and usage context.
*/
enum class EnumName
{
Success, ///< Operation completed successfully.
Error, ///< Operation failed with an error.
Pending, ///< Operation is still in progress.
NotFound ///< Requested item was not found.
};
/**
* @defgroup module_name Module Display Name
* @brief One-line description of the module.
*
* Detailed description of the module purpose and components.
*
* @{
*/
// Classes and functions belonging to this group
/** @} */ // End of module_name
/**
* @brief Calculates the Euclidean distance between two points.
*
* The distance between \f$(x_1,y_1)\f$ and \f$(x_2,y_2)\f$ is
* \f$\sqrt{(x_2-x_1)^2+(y_2-y_1)^2}\f$.
*
* For complex equations, use displayed formulas:
* \f[
* d = \sqrt{\sum_{i=1}^{n}(p_i - q_i)^2}
* \f]
*
* Multi-line equations using eqnarray environment:
* \f{eqnarray*}{
* E &=& mc^2 \\
* F &=& ma
* \f}
*
* @param[in] x1 X-coordinate of the first point.
* @param[in] y1 Y-coordinate of the first point.
* @param[in] x2 X-coordinate of the second point.
* @param[in] y2 Y-coordinate of the second point.
*
* @return The Euclidean distance \f$d \geq 0\f$.
*/
double distance(double x1, double y1, double x2, double y2);
development
Creates and maintains Architecture Decision Records (ADRs) following a structured format with State, Context, Decision, Considered, Consequences, Implementation, and References sections. Supports single-option decisions, multi-option decisions within one decision scope, multiple complementary decisions, and deferred decisions. Use when creating, updating, or reviewing architectural decisions, or when the user mentions ADR, architecture decisions, technical decisions, or design records.
tools
Performs end-to-end threat modeling for OT/ICS systems from Microsoft Threat Modeling Tool (TMT) threat-list exports (`*.csv`) and model files (`*.tm7`). Uses TMT and STRIDE for initial threat enumeration, then enriches each threat with OT/ICS context, MITRE ATT&CK for ICS mappings, MITRE EMB3D device-property threat enrichment for embedded field devices, CWE weakness classification, CVSS v4.0 scoring, Likelihood of Exploit, Risk-based Prioritization via a Risk Matrix, minimum-capable Threat Actor assignment, Risk Treatment decisions, and OT impact categories ranging from Denial of View to Physical Damage to Property.
development
Automates unit test creation for Go projects using the standard testing package with consistent software testing patterns including In-Got-Want, Table-Driven Testing, and AAA patterns. Use when creating, modifying, or reviewing unit tests, or when the user mentions unit tests, test coverage, or Go testing.
development
Automates fuzz test creation for Go projects using Go's native fuzzing engine with consistent software testing patterns. Use when creating fuzz tests, mutation testing, or when the user mentions fuzzing, coverage-guided testing, or property-based testing.