write-rfc
Enforcement tool for standardizing RFC structure and documentation in ArenaQuest projects.
Install
mkdir -p .claude/skills/write-rfc-raphaelsilva && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/17178" && unzip -o skill.zip -d .claude/skills/write-rfc-raphaelsilva && rm skill.zipInstalls to .claude/skills/write-rfc-raphaelsilva
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.
Scaffold and validate ArenaQuest RFCs against the house standard so every proposal in docs/product/RFCs follows the same structure (numbered file, metadata header, canonical sections, README index row).Key capabilities
- →Scaffold new RFCs with sequential numbering and kebab-case titles
- →Append RFC index rows to the README
- →Validate RFCs against a house standard (filename, title, metadata)
- →Check for presence of canonical sections in RFCs
- →Identify missing recommended sections in RFCs
- →Generate RFCs with predefined metadata fields
How it works
The skill uses Node scripts to scaffold new RFCs with a standard structure and index them in the README, or to validate existing RFCs against predefined rules for filename, title, metadata, and sections.
Inputs & outputs
When to use write-rfc
- →Create new RFC draft
- →Validate RFC structure
- →Scaffold documentation templates
About this skill
ArenaQuest keeps formal proposals in docs/product/RFCs/ as
NNNN-<kebab-title>.md, indexed by docs/product/RFCs/README.md. This skill
enforces that standard with two dependency-free Node scripts:
new-rfc.mjs— scaffolds the next-numbered RFC fromtemplate.mdand appends its index row to the README.check-rfc.mjs— validates one or all RFCs against the standard; non-zero exit on a hard violation, so it drops into a pre-commit hook or CI.
Paths below are relative to the repo root (docs/product/RFCs, the
scripts under .claude/skills/write-rfc/). Run them from the repo root.
The
.claude/skills/directory is a symlink to.agents/skills/. It resolves fine for the Node runtime (Linux). The Windows\\wsl.localhostbridge can't traverse the symlink — if a tool errors withENOTDIR/Input/output erroron.claude/skills/..., use the real path.agents/skills/write-rfc/...instead. Both point at the same files.
The standard
Every RFC has, in this order:
- Filename
NNNN-<kebab-title>.md— 4-digit zero-padded, sequential. - Title
# RFC NNNN: <Title>— number matches the filename. - Metadata block (bold fields):
**Status:**,**Author:**,**Date:**(PTAutor:/Data:accepted), plus optional**Revised:**and an**Affected:**file list. Then a---divider. - Sections (
##): Summary, Motivation, Goals & Non-Goals, Current State (omit if greenfield), Proposed Design, Alternatives Considered, Implementation Plan, Tradeoffs & Risks, Success Criteria, Open/Resolved Decisions, References. Seetemplate.mdfor the prose guidance per section. - README index row in
docs/product/RFCs/README.md.
Status lifecycle: Draft → Proposed → Approved → In Progress → Implemented/Done/Completed; or Rejected / Superseded.
Create a new RFC (agent path)
node .claude/skills/write-rfc/new-rfc.mjs "Title of the proposal" --author raphaelsilva
Prints the created path (e.g. docs/product/RFCs/0007-title-of-the-proposal.md)
and adds the README index row. Options: --status (default Draft),
--date YYYY-MM-DD (default today), --author (default git config user.name),
--dir (default docs/product/RFCs). Then fill in each ## section — the
template body explains what belongs in each.
Validate (agent path)
Check every RFC in the directory:
node .claude/skills/write-rfc/check-rfc.mjs
Check a single file (use this on the RFC you just wrote):
node .claude/skills/write-rfc/check-rfc.mjs docs/product/RFCs/0005-enrollment-exclusions-and-visibility.md
Output: ✓ clean, ⚠ recommended section missing (advisory — exit 0),
✗ hard violation (exit 1). ERROR = wrong filename, missing/mismatched
# RFC NNNN title, missing Status/Author/Date metadata, or not linked from the
README index. warn = a recommended ## section is absent (older RFCs
predate the full skeleton, so these don't block).
Gotchas
.claude/skillsis a symlink (→.agents/skills). Native file tools reaching it over the Windows bridge throwInput/output error; run scripts through the WSL Node runtime, or edit files via.agents/skills/write-rfc/.- Exit codes are swallowed by the
wsl.exe … bash -c '… ; echo $?'bridge —$?reads as 0 even when Node exited non-zero. To observe the real result use&&/||evaluated inside WSL:node …/check-rfc.mjs && echo PASS || echo FAIL. - The standard is advisory for legacy RFCs. 0001 is Portuguese (
Autor:/Data:— accepted) and 0003 embeds its date inside the Status line, socheck-rfc.mjsflags 0003 as✗ missing Date. That is a real, known gap in an existing doc, not a script bug — don't "fix" the validator to hide it. - Numbering reads the directory, not the README. If a number was skipped or
a draft file deleted, the next number follows the highest existing
NNNN-*.md, not the index.
Files
.claude/skills/write-rfc/new-rfc.mjs— scaffolder (Node, stdlib only)..claude/skills/write-rfc/check-rfc.mjs— validator (Node, stdlib only)..claude/skills/write-rfc/template.md— the canonical section skeleton with per-section prose guidance;new-rfc.mjsfills its{{...}}placeholders.
When not to use it
- →When the `.claude/skills` symlink causes `ENOTDIR` or `Input/output error` on Windows `\wsl.localhost`
- →When the standard is advisory for legacy RFCs and should not be 'fixed'
- →When the goal is to observe real exit codes from `wsl.exe` without `&&`/`||`
Limitations
- →The skill relies on Node scripts for scaffolding and validation.
- →The skill's validation is based on a specific house standard for ArenaQuest RFCs.
- →The skill's numbering reads the directory, not the README, for the next sequential number.
How it compares
This workflow enforces a consistent structure and indexing for RFCs using automated scripts, preventing structural drift and ensuring all proposals follow the same standard, unlike manual RFC creation.
Compared to similar skills
write-rfc side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| write-rfc (this skill) | 0 | 2mo | Review | Beginner |
| architecture-decision-records | 54 | 5mo | Review | Beginner |
| wiki-architect | 11 | 4mo | No flags | Advanced |
| smart-docs | 4 | 9mo | Review | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
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.
wiki-architect
microsoft
Analyzes code repositories and generates hierarchical documentation structures with onboarding guides. Use when the user wants to create a wiki, generate documentation, map a codebase structure, or understand a project's architecture at a high level.
smart-docs
sopaco
AI-powered comprehensive codebase documentation generator. Analyzes project structure, identifies architecture patterns, creates C4 model diagrams, and generates professional technical documentation. Use when users need to document codebases, understand software architecture, create technical specs, or generate developer guides. Supports all programming languages. Alternative to Litho/deepwiki-rs that uses Claude Code subscription without external API costs.
codebase-documenter
mhattingpete
Generates comprehensive documentation explaining how a codebase works, including architecture, key components, data flow, and development guidelines. Use when user wants to understand unfamiliar code, create onboarding docs, document architecture, or explain how the system works.
c4-architecture-c4-architecture
sickn33
Generate comprehensive C4 architecture documentation for an existing repository/codebase using a bottom-up analysis approach.
dagger-design-proposals
dagger
Write design proposals for Dagger features. Use when asked to draft, review, or iterate on Dagger design documents, RFCs, or proposals.