Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Write and maintain project documentation including READMEs, API docs, ADRs, CHANGELOGs, and inline code comments. Use when: the user asks to write documentation, update a README, create an API reference, draft an ADR, add a CHANGELOG entry, or improve inline comments. Do NOT use when: the user wants to format markdown (use markdown-format), review code (use pr-review), or create a PRD (use create-prd).
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 72% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 102% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 233% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 354% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 444% | 0% |
Write clear, consistent, and maintainable documentation for software projects.
Every project should have a README.md at the root with these sections:
markdown# Project Name One-sentence description of what the project does. ## Features - Feature 1: brief description - Feature 2: brief description ## Quick Start ### Prerequisites - Requirement 1 - Requirement 2 ### Installation
### Usage
## Configuration
| Variable | Description | Default |
|----------|-------------|---------|
| `VAR_NAME` | What it does | `default` |
## API Reference
Link to detailed API docs or inline summary.
## Contributing
Link to CONTRIBUTING.md or brief guidelines.
## License
License type with link.Rules:
Document APIs using these patterns:
markdown## Endpoints ### POST /api/v1/users Create a new user account. **Request:**
{ "email": "user@example.com", "name": "Jane Doe", "role": "member" }
**Response (201 Created):**
{ "id": "usr_abc123", "email": "user@example.com", "name": "Jane Doe", "created_at": "2024-01-15T10:30:00Z" }
**Errors:**
| Status | Code | Description |
|--------|------|-------------|
| 400 | `invalid_email` | Email format is invalid |
| 409 | `email_exists` | Email already registered |markdown## Commands ### `tool init` Initialize a new project. **Usage:**
tool init options] <project-name>
**Options:**
| Flag | Description | Default |
|------|-------------|---------|
| `--template, -t` | Template to use | `default` |
| `--yes, -y` | Skip prompts | `false` |
**Examples:**
tool init my-project
tool init my-project --template typescript
markdown### `createUser(options: CreateUserOptions): Promise<User>` Creates a new user in the system. **Parameters:** - `options.email` (string, required): User's email address - `options.name` (string, required): User's display name - `options.role` (enum, optional): User role. One of: `admin`, `member`, `viewer`. Default: `member` **Returns:** `Promise<User>` - The created user object **Throws:** - `ValidationError` - If email is invalid - `ConflictError` - If email already exists **Example:**
const user = await createUser({ email: 'jane@example.com', name: 'Jane Doe' });
Use ADRs to document significant architectural decisions. Store in docs/adr/ or docs/decisions/.
markdown# ADR-{NUMBER}: {TITLE} ## Status {Proposed | Accepted | Deprecated | Superseded by ADR-XXX} ## Date {YYYY-MM-DD} ## Context What is the issue that we're seeing that is motivating this decision or change? ## Decision What is the change that we're proposing and/or doing? ## Consequences ### Positive - {benefit 1} - {benefit 2} ### Negative - {tradeoff 1} - {tradeoff 2} ### Risks - {risk 1} ## Alternatives Considered ### {Alternative 1} {Description of alternative} **Pros:** {benefits} **Cons:** {drawbacks} **Why rejected:** {reason}
markdown# ADR-001: Use PostgreSQL as Primary Database ## Status Accepted ## Date 2024-01-15 ## Context We need a relational database that supports complex queries, JSON storage, and has strong ecosystem support. ## Decision We will use PostgreSQL as our primary database. ## Consequences ### Positive - ACID compliance for transactional data - Native JSON support for flexible schemas - Excellent tooling and community support ### Negative - Heavier operational overhead than SQLite - Requires dedicated database server ### Risks - Team needs to learn PostgreSQL-specific features ## Alternatives Considered ### SQLite **Pros:** Zero config, embedded, fast for read-heavy workloads **Cons:** Limited concurrency, no network access **Why rejected:** Doesn't support concurrent writes from multiple services
Rules:
001, 002, etc.Follow Keep a Changelog format. File: CHANGELOG.md.
markdown# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/), and this project adheres to [Semantic Versioning](https://semver.org/). ## [Unreleased] ### Added - New feature description ### Changed - Changes to existing functionality ### Deprecated - Features that will be removed ### Removed - Features that have been removed ### Fixed - Bug fixes ### Security - Vulnerability fixes ## [1.2.0] - 2024-01-15 ### Added - User authentication with JWT tokens - Rate limiting on API endpoints ### Fixed - Memory leak in connection pool - Incorrect date formatting in exports ## [1.1.0] - 2024-01-01 ### Added - CSV export functionality ### Changed - Improved query performance by 50% ## [1.0.0] - 2023-12-01 Initial stable release.
Rules:
[Unreleased] section- Fix login timeout (#123)go// GOOD: Explains why // Retry 3 times because the API intermittently fails under load for i := 0; i < 3; i++ { result, err := callAPI() if err == nil { return result } } // BAD: Explains what (code is self-explanatory) // Loop 3 times for i := 0; i < 3; i++ { // ... }
go// ProcessOrder handles the complete order lifecycle including payment // processing, inventory allocation, and shipping notification. // // It returns an error if any step fails, but partial side effects // may have occurred (e.g., payment charged but not shipped). // // See: https://docs.internal.com/orders/lifecycle func ProcessOrder(ctx context.Context, orderID string) error { // ... }
typescript// TODO(username): description [ticket-id] // FIXME(username): description [ticket-id] // HACK(username): temporary workaround for #123 // Examples: // TODO(jane): add retry logic for transient failures [PROJ-456] // FIXME(bob): remove after API v1 deprecation [PROJ-789]
code blocks for commands, paths, and codeoth)When documentation is outdated:
[Unreleased] > FixedWhen documentation conflicts with code:
For major documentation overhauls:
Input: User asks "Write a README for my project"
Process:
package.json, go.mod, or similar to understand the projectOutput:
markdown# myproject A fast, lightweight JSON parser for Go. ## Quick Start
go get github.com/user/myproject
import "github.com/user/myproject"
data, err := myproject.Parse(jsonString)
## Features
- Streaming parser for large files
- Zero allocations in hot path
- Full RFC 8259 complianceInput: User asks "Document why we chose Redis"
Process:
docs/adr/003-use-redis-for-caching.mdOther measured skills in the registry, with their headline benchmark lift.