
Write
- 50 installs
- 11.8k repo stars
- Updated July 31, 2026
- reactjs/react.dev
Helps with ai & agent building tasks.
About
write is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted development.
- write
- AI & Agent Building
- AI-coding skill
Write by the numbers
- 50 all-time installs (skills.sh)
- +3 installs in the week ending Aug 4, 2026 (Skillselion tracking)
- Ranked #7,298 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/reactjs/react.dev --skill writeAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 50 |
|---|---|
| repo stars | ★ 11.8k |
| Last updated | July 31, 2026 |
| Repository | reactjs/react.dev ↗ |
What it does
Helps with ai & agent building tasks.
Files
Documentation Writer
Orchestrates research, writing, and review for React documentation.
Invocation
/write add optimisticKey → creates new reference docs
/write update ViewTransition Activity → updates ViewTransition docs to cover Activity
/write transition learn docs → creates new learn docs for transitions
/write blog post for React 20 → creates a new blog postWorkflow
digraph write_flow {
rankdir=TB;
"Parse intent" [shape=box];
"Research (parallel)" [shape=box];
"Synthesize plan" [shape=box];
"Write docs" [shape=box];
"Review docs" [shape=box];
"Issues found?" [shape=diamond];
"Done" [shape=doublecircle];
"Parse intent" -> "Research (parallel)";
"Research (parallel)" -> "Synthesize plan";
"Synthesize plan" -> "Write docs";
"Write docs" -> "Review docs";
"Review docs" -> "Issues found?";
"Issues found?" -> "Write docs" [label="yes - fix"];
"Issues found?" -> "Done" [label="no"];
}Step 1: Parse Intent
Determine from the user's instruction:
| Field | How to determine |
|---|---|
| Action | "add"/"create"/"new" = new page; "update"/"edit"/"with" = modify existing |
| Topic | The React API or concept (e.g., optimisticKey, ViewTransition, transitions) |
| Doc type | "reference" (default for APIs/hooks/components), "learn" (for concepts/guides), "blog" (for announcements) |
| Target file | For updates: find existing file in src/content/. For new: determine path from doc type |
If the intent is ambiguous, ask the user to clarify before proceeding.
Step 2: Research (Parallel Agents)
Spawn these agents in parallel:
Agent 1: React Expert Research
Use a Task agent (subagent_type: general-purpose) to invoke /react-expert <topic>. This researches the React source code, tests, PRs, issues, and type signatures.
Prompt:
Invoke the /react-expert skill for <TOPIC>. Follow the skill's full workflow:
setup the React repo, dispatch all 6 research agents in parallel, synthesize
results, and save to .claude/research/<topic>.md. Return the full research document.Agent 2: Existing Docs Audit
Use a Task agent (subagent_type: Explore) to find and read existing documentation for the topic.
Prompt:
Find all existing documentation related to <TOPIC> in this repo:
1. Search src/content/ for files mentioning <TOPIC>
2. Read any matching files fully
3. For updates: identify what sections exist and what's missing
4. For new pages: identify related pages to understand linking/cross-references
5. Check src/sidebarLearn.json and src/sidebarReference.json for navigation placement
Return: list of existing files with summaries, navigation structure, and gaps.Agent 3: Use Case Research
Use a Task agent (subagent_type: general-purpose) with web search to find common use cases and patterns.
Prompt:
Search the web for common use cases and patterns for React's <TOPIC>.
Focus on:
1. Real-world usage patterns developers actually need
2. Common mistakes or confusion points
3. Migration patterns (if replacing an older API)
4. Framework integration patterns (Next.js, Remix, etc.)
Return a summary of the top 5-8 use cases with brief code sketches.
Do NOT search Stack Overflow. Focus on official docs, GitHub discussions,
and high-quality technical blogs.Step 3: Synthesize Writing Plan
After all research agents complete, create a writing plan that includes:
1. Page type (from docs-writer-reference decision tree or learn/blog type) 2. File path for the new or updated file 3. Outline with section headings matching the appropriate template 4. Content notes for each section, drawn from research:
- API signature and parameters (from react-expert types)
- Usage examples (from react-expert tests + use case research)
- Caveats and pitfalls (from react-expert warnings/errors/issues)
- Cross-references to related pages (from docs audit)
5. Navigation changes needed (sidebar JSON updates)
Present this plan to the user and confirm before proceeding.
Step 4: Write Documentation
Dispatch a Task agent (subagent_type: general-purpose) to write the documentation.
The agent prompt MUST include:
1. The full writing plan from Step 3 2. An instruction to invoke the appropriate skill:
/docs-writer-referencefor reference pages/docs-writer-learnfor learn pages/docs-writer-blogfor blog posts
3. An instruction to invoke /docs-components for MDX component patterns 4. An instruction to invoke /docs-sandpack if adding interactive code examples 5. The research document content (key findings, not the full dump)
Prompt template:
You are writing React documentation. Follow these steps:
1. Invoke /docs-writer-<TYPE> to load the page template and conventions
2. Invoke /docs-components to load MDX component patterns
3. Invoke /docs-sandpack if you need interactive code examples
4. Write the documentation following the plan below
PLAN:
<writing plan from Step 3>
RESEARCH FINDINGS:
<key findings from Step 2 agents>
Write the file to: <target file path>
Also update <sidebar JSON> if adding a new page.Step 5: Review Documentation
Invoke /review-docs on the written files. This dispatches parallel review agents checking:
- Structure compliance (docs-writer-*)
- Voice and style (docs-voice)
- Component usage (docs-components)
- Sandpack patterns (docs-sandpack)
Step 6: Fix Issues
If the review finds issues: 1. Present the review checklist to the user 2. Fix the issues identified 3. Re-run /review-docs on the fixed files 4. Repeat until clean
Important Rules
- Always research before writing. Never write docs from LLM knowledge alone.
- Always confirm the plan with the user before writing.
- Always review with
/review-docsafter writing. - Match existing patterns. Read neighboring docs to match style and depth.
- Update navigation. New pages need sidebar entries.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 14.1.2 (20260124.0452)
-->
<!-- Title: write_flow Pages: 1 -->
<svg width="182pt" height="531pt"
viewBox="0.00 0.00 182.00 531.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 527.26)">
<title>write_flow</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-527.26 178.2,-527.26 178.2,4 -4,4"/>
<!-- Parse intent -->
<g id="node1" class="node">
<title>Parse intent</title>
<polygon fill="none" stroke="black" points="126.97,-523.26 47.22,-523.26 47.22,-487.26 126.97,-487.26 126.97,-523.26"/>
<text xml:space="preserve" text-anchor="middle" x="87.1" y="-500.21" font-family="Times,serif" font-size="14.00">Parse intent</text>
</g>
<!-- Research (parallel) -->
<g id="node2" class="node">
<title>Research (parallel)</title>
<polygon fill="none" stroke="black" points="146.47,-450.26 27.72,-450.26 27.72,-414.26 146.47,-414.26 146.47,-450.26"/>
<text xml:space="preserve" text-anchor="middle" x="87.1" y="-427.21" font-family="Times,serif" font-size="14.00">Research (parallel)</text>
</g>
<!-- Parse intent->Research (parallel) -->
<g id="edge1" class="edge">
<title>Parse intent->Research (parallel)</title>
<path fill="none" stroke="black" d="M87.1,-487.07C87.1,-479.48 87.1,-470.36 87.1,-461.8"/>
<polygon fill="black" stroke="black" points="90.6,-461.8 87.1,-451.8 83.6,-461.8 90.6,-461.8"/>
</g>
<!-- Synthesize plan -->
<g id="node3" class="node">
<title>Synthesize plan</title>
<polygon fill="none" stroke="black" points="137.85,-377.26 36.35,-377.26 36.35,-341.26 137.85,-341.26 137.85,-377.26"/>
<text xml:space="preserve" text-anchor="middle" x="87.1" y="-354.21" font-family="Times,serif" font-size="14.00">Synthesize plan</text>
</g>
<!-- Research (parallel)->Synthesize plan -->
<g id="edge2" class="edge">
<title>Research (parallel)->Synthesize plan</title>
<path fill="none" stroke="black" d="M87.1,-414.07C87.1,-406.48 87.1,-397.36 87.1,-388.8"/>
<polygon fill="black" stroke="black" points="90.6,-388.8 87.1,-378.8 83.6,-388.8 90.6,-388.8"/>
</g>
<!-- Write docs -->
<g id="node4" class="node">
<title>Write docs</title>
<polygon fill="none" stroke="black" points="124.72,-304.26 49.47,-304.26 49.47,-268.26 124.72,-268.26 124.72,-304.26"/>
<text xml:space="preserve" text-anchor="middle" x="87.1" y="-281.21" font-family="Times,serif" font-size="14.00">Write docs</text>
</g>
<!-- Synthesize plan->Write docs -->
<g id="edge3" class="edge">
<title>Synthesize plan->Write docs</title>
<path fill="none" stroke="black" d="M87.1,-341.07C87.1,-333.48 87.1,-324.36 87.1,-315.8"/>
<polygon fill="black" stroke="black" points="90.6,-315.8 87.1,-305.8 83.6,-315.8 90.6,-315.8"/>
</g>
<!-- Review docs -->
<g id="node5" class="node">
<title>Review docs</title>
<polygon fill="none" stroke="black" points="90.97,-231.26 5.22,-231.26 5.22,-195.26 90.97,-195.26 90.97,-231.26"/>
<text xml:space="preserve" text-anchor="middle" x="48.1" y="-208.21" font-family="Times,serif" font-size="14.00">Review docs</text>
</g>
<!-- Write docs->Review docs -->
<g id="edge4" class="edge">
<title>Write docs->Review docs</title>
<path fill="none" stroke="black" d="M77.66,-268.07C73.25,-260.05 67.9,-250.31 62.97,-241.33"/>
<polygon fill="black" stroke="black" points="66.06,-239.69 58.18,-232.61 59.93,-243.06 66.06,-239.69"/>
</g>
<!-- Issues found? -->
<g id="node6" class="node">
<title>Issues found?</title>
<polygon fill="none" stroke="black" points="87.1,-158.26 0,-140.26 87.1,-122.26 174.2,-140.26 87.1,-158.26"/>
<text xml:space="preserve" text-anchor="middle" x="87.1" y="-135.21" font-family="Times,serif" font-size="14.00">Issues found?</text>
</g>
<!-- Review docs->Issues found? -->
<g id="edge5" class="edge">
<title>Review docs->Issues found?</title>
<path fill="none" stroke="black" d="M57.54,-195.07C62.19,-186.6 67.89,-176.22 73.05,-166.84"/>
<polygon fill="black" stroke="black" points="76.07,-168.61 77.81,-158.16 69.93,-165.24 76.07,-168.61"/>
</g>
<!-- Issues found?->Write docs -->
<g id="edge6" class="edge">
<title>Issues found?->Write docs</title>
<path fill="none" stroke="black" d="M92.1,-157.62C95.08,-168.23 98.58,-182.43 100.1,-195.26 101.98,-211.15 101.98,-215.37 100.1,-231.26 99.09,-239.72 97.23,-248.77 95.23,-257"/>
<polygon fill="black" stroke="black" points="91.9,-255.91 92.75,-266.47 98.67,-257.68 91.9,-255.91"/>
<text xml:space="preserve" text-anchor="middle" x="124.01" y="-208.21" font-family="Times,serif" font-size="14.00">yes - fix</text>
</g>
<!-- Done -->
<g id="node7" class="node">
<title>Done</title>
<ellipse fill="none" stroke="black" cx="87.1" cy="-34.88" rx="30.88" ry="30.88"/>
<ellipse fill="none" stroke="black" cx="87.1" cy="-34.88" rx="34.88" ry="34.88"/>
<text xml:space="preserve" text-anchor="middle" x="87.1" y="-29.83" font-family="Times,serif" font-size="14.00">Done</text>
</g>
<!-- Issues found?->Done -->
<g id="edge7" class="edge">
<title>Issues found?->Done</title>
<path fill="none" stroke="black" d="M87.1,-122.19C87.1,-111.06 87.1,-95.96 87.1,-81.5"/>
<polygon fill="black" stroke="black" points="90.6,-81.65 87.1,-71.65 83.6,-81.65 90.6,-81.65"/>
<text xml:space="preserve" text-anchor="middle" x="93.85" y="-90.96" font-family="Times,serif" font-size="14.00">no</text>
</g>
</g>
</svg>