Best for
- Use when "write docs", "document this API", "add code comments", or "explain for contributors".
kensaurus/cursor-kenji/skills/docs-writer/SKILL.md
Write developer docs: README content, API references, code comments, changelog entries. Use when "write docs", "document this API", "add code comments", or "explain for contributors". Visual README makeover → enhance-readme. Docs/code drift plan → plan-docs-sync. Collaborative long-form → docs-coauthor.
Decision brief
Degree of freedom: MIXED. Voice and structure [HIGH freedom]; pre-documentation checks and the verification statement [LOW freedom — run exactly].
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/kensaurus/cursor-kenji --skill "skills/docs-writer"Inspect the Agent Skill "docs-writer" from https://github.com/kensaurus/cursor-kenji/blob/28a0bd8403c950f58ed063d47a858ee3493b0038/skills/docs-writer/SKILL.md at commit 28a0bd8403c950f58ed063d47a858ee3493b0038. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
1. Observe — existing README/docs, the code being documented, the audience 2. Interpret — which silent reader questions (what / why / who / how / when) are unanswered 3. Classify — README / API reference / comments / architecture — match the repo's pattern 4. Verify — signatures…
Before writing docs, state:
Review the “Quick Start” section in the pinned source before continuing.
Review the “Setup” section in the pinned source before continuing.
\\\typescript import { Widget } from 'project';
Permission review
The documentation includes network, browsing, or remote request actions.
git clone https://github.com/user/project.gitThe documentation includes network, browsing, or remote request actions.
Client sends request to APIEvidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 96/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 9 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Degree of freedom: MIXED. Voice and structure [HIGH freedom];
pre-documentation checks and the verification statement
[LOW freedom — run exactly].
Create clear, useful documentation for developers.
Documentation rarely fails because it's incomplete. It fails because the reader can't build a mental model fast enough to care. So before any reference detail, answer the questions the reader is silently asking — in their words, in this order:
| The reader is silently asking… | Answer it with… |
|---|---|
| What is this? | One plain-English sentence — what it does, not how it's built |
| Why should I care? | The problem it solves / the pain it removes |
| Who is it for? | The audience + stack, so a wrong-fit reader can leave early |
| How do I start? | The shortest path to a first win: install → one command → result |
| When / where do I use it? | The situations it fits — and its boundaries (what it's not) |
Rules that follow from this:
Everything else in this skill (templates, API docs, comments) serves this principle — structure and polish never substitute for orienting the reader first.
Observe: "document createUser";
src/users.tsiscreateUser({ email, role }) → Promise<User>; README linksdocs/api.mdwith signature tables. Interpret: the reader needs the signature, errors, and a copy-paste call — not another project README. Classify: API reference in the existing table pattern. Write only after: "Pre-documentation check: existing docs read: README.md, docs/api.md; pattern: signature tables; code verified: src/users.ts"
enhance-readme; docs/code drift plan → plan-docs-sync; long-form collab → docs-coauthorBEFORE writing any documentation, you MUST:
README.md (project root)
docs/ (existing docs)
src/[domain]/@_[domain]-README.md (feature-specific READMEs)
Use Glob to find existing README files:
Glob: "**/*README.md" to find all READMEs
Glob: "**/*.md" in docs/ to find documentation patterns
Read the actual code being documented to ensure accuracy:
Before writing docs, state:
"Pre-documentation check:
- Existing docs read: [list]
- Documentation pattern identified: [pattern from existing READMEs]
- Code verified: [files read to ensure accuracy]"
# Project Name
> One plain-English sentence: what it does and who it's for — no jargon.
**Why it exists** — the problem it solves, in one line.
**Who it's for** — the audience + stack, so a wrong-fit reader leaves early.
<!--
Newcomer on-ramp: if the project is novel or uses 3+ domain-specific terms,
add a plain-language glossary here (see "Newcomer on-ramp" pattern below) so the
features and options that follow aren't cryptic. Omit it when the domain is common.
-->
## Features
- Feature 1
- Feature 2
- Feature 3
## Quick Start
\`\`\`bash
# Install
npm install
# Run
npm start
\`\`\`
## Installation
### Prerequisites
- Node.js >= 18
- npm or pnpm
### Setup
\`\`\`bash
# Clone repository
git clone https://github.com/user/project.git
cd project
# Install dependencies
npm install
# Set up environment
cp .env.example .env
# Edit .env with your values
# Run development server
npm run dev
\`\`\`
## Usage
### Basic Example
\`\`\`typescript
import { Widget } from 'project';
const widget = new Widget({ option: 'value' });
widget.render();
\`\`\`
### Advanced Configuration
See [Configuration Guide](./docs/configuration.md)
## API Reference
See [API Documentation](./docs/api.md)
## Contributing
See [Contributing Guide](./CONTRIBUTING.md)
## License
MIT
When a project introduces its own concepts, the reader can't parse the feature list until they know the vocabulary. Add a compact building-blocks glossary high in the README — plain meaning + how the reader actually uses each thing. This is the single highest-leverage block for making docs land with non-experts:
**The building blocks** — what the terms below actually mean:
| Building block | In plain English | You use it by… |
|:--|:--|:--|
| **Widget** | A self-contained unit that does one job | dropping it into a page |
| **Pipeline** | The path your data takes from input to output | pointing it at a source |
| **Adapter** | A connector to an outside service | adding its key to config |
Guidelines:
useState for a React audience; do gloss a term you invented.## createUser
Create a new user account.
### Signature
\`\`\`typescript
function createUser(params: CreateUserParams): Promise<User>
\`\`\`
### Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| name | string | Yes | User's display name |
| email | string | Yes | Valid email address |
| role | 'admin' \| 'user' | No | User role (default: 'user') |
### Returns
`Promise<User>` - The created user object
### Example
\`\`\`typescript
const user = await createUser({
name: 'John Doe',
email: '[email protected]',
role: 'admin'
});
\`\`\`
### Errors
| Error | Cause |
|-------|-------|
| `ValidationError` | Invalid email format |
| `ConflictError` | Email already exists |
/**
* Calculate the total price including tax and discounts.
*
* @param items - Array of cart items
* @param taxRate - Tax rate as decimal (e.g., 0.1 for 10%)
* @param discount - Optional discount code
* @returns Total price in cents
*
* @example
* const total = calculateTotal(items, 0.1, 'SAVE10');
*/
function calculateTotal(
items: CartItem[],
taxRate: number,
discount?: string
): number {
// Sum up item prices
const subtotal = items.reduce((sum, item) => sum + item.price, 0);
// Apply discount if valid
const discountAmount = discount ? getDiscountAmount(discount, subtotal) : 0;
// Calculate tax on discounted amount
const taxableAmount = subtotal - discountAmount;
const tax = Math.round(taxableAmount * taxRate);
return taxableAmount + tax;
}
# Architecture Overview
## System Components
\`\`\`
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Client │────▶│ API │────▶│ Database │
│ (React) │ │ (Node) │ │ (Postgres) │
└─────────────┘ └─────────────┘ └─────────────┘
│
▼
┌─────────────┐
│ Cache │
│ (Redis) │
└─────────────┘
\`\`\`
## Data Flow
1. Client sends request to API
2. API checks cache for data
3. If cache miss, query database
4. Store result in cache
5. Return response to client
## Key Decisions
### Why PostgreSQL?
- ACID compliance for financial data
- JSON support for flexible schemas
- Strong ecosystem
### Why Redis?
- Fast read performance
- Session storage
- Pub/sub for real-time features
# ❌ Too verbose
This function is responsible for taking an array of user objects
and filtering them based on the active status property, returning
only those users who have an active status of true.
# ✅ Concise
Filter users by active status.
# ❌ Abstract description
The function accepts configuration options.
# ✅ With example
Configure the logger:
\`\`\`typescript
const logger = createLogger({
level: 'info',
format: 'json',
output: 'stdout'
});
\`\`\`
# ❌ Wall of text
To install the package you need to run npm install, then create
a .env file with your configuration, then run the migrations...
# ✅ Structured steps
## Setup
1. Install dependencies
\`\`\`bash
npm install
\`\`\`
2. Configure environment
\`\`\`bash
cp .env.example .env
\`\`\`
3. Run migrations
\`\`\`bash
npm run migrate
\`\`\`
# ❌ Assumes the reader shares your context
Configure the RLS policy on the tenant-scoped RPC before hydrating the store.
# ✅ Plain first, precise second
Set who's allowed to read each row (a "policy") before the app loads its data.
(Supabase calls row rules "RLS"; loading data into the app is "hydrating the store.")
Lead with the plain-language version; put the precise term in parentheses or right after it. Never make a newcomer look up three words just to parse one sentence.
\`\`\`mermaid
flowchart LR
A[User] --> B[Frontend]
B --> C[API]
C --> D[Database]
C --> E[Cache]
\`\`\`
\`\`\`mermaid
sequenceDiagram
User->>+API: POST /login
API->>+DB: Verify credentials
DB-->>-API: User data
API-->>-User: JWT token
\`\`\`
# In PR template:
## Documentation
- [ ] README updated (if needed)
- [ ] API docs updated (if endpoints changed)
- [ ] Code comments added (for complex logic)
Frequently asked questions
Degree of freedom: MIXED. Voice and structure [HIGH freedom]; pre-documentation checks and the verification statement [LOW freedom — run exactly].
The source record exposes this install command: npx skills add https://github.com/kensaurus/cursor-kenji --skill "skills/docs-writer". Inspect the command and pinned source before running it.
Static rules flagged network in the source; the page lists the matching lines and excerpts.
Alternatives
oaustegard/claude-skills
Generate hierarchical _FEATURES.md files that describe what a codebase DOES from a user/consumer perspective, anchored to source symbols via tree-sitting. Supports large complex codebases through feature-driven decomposition into sub-feature files. Uses a multi-pass synthesis: orientation → detail → overview rewrite. Use when someone says "what does this do", "document features", "feature inventory", "_FEATURES.md", or needs to understand a codebase's purpose before modifying it. Complements tre
NintendaDev/unikit-ai
Generate and maintain the project's TECHNICAL documentation from its codebase — scans the project structure, tech stack, and module boundaries, then writes a lean README landing page plus detailed topic pages (architecture, modules, setup, build, APIs), only the docs that are relevant. Use whenever the user wants to create, update, or validate documentation of the CODE or the project itself, e.g. "generate documentation", "create docs", "write the README", "update the project docs", "document th
eugenelim/agent-ready-repo
Use when implementing or resuming a non-trivial repository change: a feature, behavior-changing fix, refactor, migration, framework or dependency upgrade, schema or API change, performance work, infrastructure or build-system change, reversion, or an existing build spec under `docs/specs/`. Also use for bare continuation commands ('resume', 'continue', 'keep going', 'pick up where I left off', 'let's get going') when conversation or workspace context identifies active build work. Do not use for
K-Dense-AI/scientific-agent-skills
Use when working directly with the `esm` Python SDK, ESM3 or ESMC model IDs, Forge/Biohub inference clients, or ESMFold2 folding workflows.