readme-writer
Provides structure and guidelines for writing module-level README files.
Install
mkdir -p .claude/skills/readme-writer && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/6698" && unzip -o skill.zip -d .claude/skills/readme-writer && rm skill.zipInstalls to .claude/skills/readme-writer
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Guidelines for writing module READMEs that explain how a module works to developers who need to use it or understand its internals. Use when documenting a module, package, or subsystem.Key capabilities
- →Structure documentation with overview, usage, and examples
- →Define domain-specific terminology in core concepts
- →Map module functionality to system-wide workflows
- →Standardize placement of documentation relative to code
How it works
Applies a predefined architectural template to the module folder, organizing content by operational flow and dependency usage.
Inputs & outputs
When to use readme-writer
- →Documenting a new utility module
- →Explaining module internals to team members
- →Standardizing documentation across a repo
About this skill
Module README Writing Guide
File Placement
Place the README in the same folder as the module it explains, not at the package root.
# Good: README next to the module it documents
sequencer-client/src/sequencer/README.md
archiver/src/archiver/l1/README.md
# Also good: Package-level README for small packages
slasher/README.md
Use package-level READMEs when the package is small or you want to explain the package as a whole.
Structure
1. Overview
Start with 2-4 sentences explaining what the module does and where it fits in the system.
# L1 Transaction Utils
This module handles sending L1 txs, including simulating txs, choosing gas prices,
estimating gas limits, monitoring sent txs, speeding them up, and cancelling them.
Each instance of `L1TxUtils` is stateful, corresponds to a given publisher EOA,
and tracks its in-flight txs.
2. Usage Context
Explain when and how this module is used. Who calls it? Under what conditions?
## Usage
The slasher is integrated into the Aztec node and activates when:
1. The node is configured as a validator
2. The validator is selected as proposer for a slot
3. Slashable offenses have been detected
3. Code Examples
For utility-like modules, include a code snippet showing typical usage:
const versionManager = new version.VersionManager(DB_VERSION, rollupAddress, {
dataDir: '/path/to/data',
serviceName: 'my-database',
});
await versionManager.checkVersionAndHandle(
async () => await initializeFreshDatabase(),
async (oldVersion, newVersion) => await migrate(oldVersion, newVersion),
);
4. Core Concepts
Define domain-specific terms and objects (blocks, checkpoints, slots, proposals, offenses, etc.). Explain relationships between them.
### Slot vs Block vs Checkpoint
- **Slot**: A fixed time window (e.g., 72 seconds) during which a proposer can build blocks
- **Block**: A single batch of transactions, executed and validated
- **Checkpoint**: The collection of all blocks built in a slot, attested by validators
5. Main API
List main methods without exhaustive parameter/return documentation. Focus on what each does:
## API
- `sendTransaction`: Sends an L1 tx and returns the tx hash. Consumes a nonce.
- `monitorTransaction`: Monitors a sent tx and speeds up or cancels it.
- `sendAndMonitorTransaction`: Combines sending and monitoring in a single call.
6. State Lifecycle
Use tables to document object states and transitions:
| From | To | Condition | Effect |
|-|-|-|-|
| `idle` | `sent` | `send_tx` | A new tx is sent and nonce is consumed |
| `sent` | `speed-up` | `stall_time exceeded` | Tx replaced with higher gas |
| `sent` | `mined` | `get_nonce(latest) > tx_nonce` | Tx confirmed |
7. Timing and Sequence
Use ASCII diagrams or tables for temporal flows:
T=0s Slot begins
T=0-2s SYNCHRONIZING, PROPOSER_CHECK
T=2s Start building Block 1
T=10s Block 1 deadline, start Block 2
...
T=72s Slot ends
For parallel operations, use multi-column timelines:
Time | Proposer | Validators
-----|----------------------|------------------
10s | Finish Block 1 | (idle)
12s | | Receive Block 1
18s | Finish Block 2 | Re-executing Block 1
8. Dependencies
Explain what other modules this connects to:
## Integration Flow
1. **Offense Detection**: Watchers emit `WANT_TO_SLASH_EVENT` when they detect violations
2. **Offense Collection**: SlashOffensesCollector stores offenses in SlasherOffensesStore
3. **Action Execution**: SequencerPublisher executes actions on L1
9. Error Handling
Dedicate a section to unhappy paths and how deviations are handled:
## Handling Timing Variations
### Slow Initialization
If initialization completes at 3s instead of 2s:
- Block 1 has 1s less time (7s instead of 8s)
- Sub-slot deadlines remain fixed
- Still enough time to build, just with fewer transactions
10. Configuration
Document configuration options with their purpose and constraints:
## Configuration
| Parameter | Default | Purpose |
|-----------|---------|---------|
| `slotDuration` | 72s | Total time for checkpoint |
| `blockDuration` | 8s | Duration of each sub-slot |
Include considerations for how values relate to each other:
The `slashingOffsetInRounds` needs to be strictly greater than the proof
submission window to be able to slash for epoch prunes or data withholding.
11. Security
Include when the module has security implications:
## Vetoing
The slashing system includes a veto mechanism that allows designated vetoers
to block slash payloads during the execution delay period. This provides a
safety valve for incorrectly proposed slashes.
Writing Style
Explain Rationale
Don't just document what happens—explain why:
# Bad
The last sub-slot is reserved for validator re-execution.
# Good
The last sub-slot is reserved for validator re-execution. Validators execute
blocks sequentially with a ~2s propagation delay. For the last block, there's
no next block to build while validators re-execute, so we must wait for them
to finish before collecting attestations.
Avoid Subjective Qualifiers
# Bad
This is a key aspect of the design with critical security implications.
# Good
This provides a safety valve for incorrectly proposed slashes.
Be Succinct
# Bad
It is important to note that the configuration values must satisfy certain
constraints which will be explained in detail in the following section.
# Good
These values must satisfy certain constraints (explained below).
Include Only Relevant Sections
Not every module needs every section. Skip sections that don't apply:
- Small utilities don't need architecture sections
- Stateless modules don't need lifecycle tables
- Internal modules don't need usage examples
- Not everything has security implications
Ask yourself: "Does this section help someone understand or use this module?" If not, skip it.
When not to use it
- →For documenting minor helper functions that do not belong to a module
- →When project documentation is strictly managed via centralized wikis
Limitations
- →Cannot generate content about functionality without existing source analysis
- →Strict structure may feel rigid for non-utility modules
How it compares
It enforces structural consistency based on project-specific module organization, preventing unstructured documentation bloat.
Compared to similar skills
readme-writer side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| readme-writer (this skill) | 1 | 7mo | No flags | Beginner |
| architecture-decision-records | 54 | 5mo | Review | Beginner |
| meeting-minutes | 41 | 6mo | No flags | Beginner |
| docs-write | 22 | 6mo | No flags | Beginner |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by AztecProtocol
View all by AztecProtocol →You might also like
architecture-decision-records
wshobson
Write and maintain Architecture Decision Records (ADRs) following best practices for technical decision documentation. Use when documenting significant technical decisions, reviewing past architectural choices, or establishing decision processes.
meeting-minutes
github
Generate concise, actionable meeting minutes for internal meetings. Includes metadata, attendees, agenda, decisions, action items (owner + due date), and follow-up steps.
docs-write
metabase
Write documentation following Metabase's conversational, clear, and user-focused style. Use when creating or editing documentation files (markdown, MDX, etc.).
rust-docs-guidelines
RediSearch
Guidelines for writing Rust documentation
ml-paper-writing
davila7
Write publication-ready ML/AI papers for NeurIPS, ICML, ICLR, ACL, AAAI, COLM. Use when drafting papers from research repos, structuring arguments, verifying citations, or preparing camera-ready submissions. Includes LaTeX templates, reviewer guidelines, and citation verification workflows.
content-research-writer
ComposioHQ
Assists in writing high-quality content by conducting research, adding citations, improving hooks, iterating on outlines, and providing real-time feedback on each section. Transforms your writing process from solo effort to collaborative partnership.