From manual
Auto-generate an end-user manual from your running app — Playwright screenshots + source-code analysis → HTML
How this skill is triggered — by the user, by Claude, or both
Slash command
/manual:manualThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Generate a user manual for **<YOUR APP>** by capturing real screenshots from the
Generate a user manual for by capturing real screenshots from the running app and analyzing its source code. Re-run it whenever features change, so the manual grows alongside the product.
⚙️ SETUP — configure for your app
This skill is a template: the app name, URLs, and Section Definitions tables below describe a placeholder app and must be configured for yours. How you do that depends on how the skill was installed:
- Copied into your project (
.claude/skills/manual/SKILL.md): edit this file directly — replace every<…>placeholder and fill in the Section Definitions tables (one table per audience). Do this once.- Installed as a plugin (read-only cache — do NOT edit this file): when run, discover the app's routes and audiences by analyzing the codebase, confirm them with the user, then generate. Optionally save the confirmed plan to
docs/manuals/sections.mdin the user's project so later runs reuse it.At run time: if the Section Definitions below still contain
<…>placeholders, treat them as "not configured yet" and discover from the codebase — never ask the user to edit a read-only plugin file.The process (read source → screenshot → generate HTML → index) is identical either way. A fully filled-in example ships at
examples/taskflow/SKILL.md— read it first to see what a completed skill looks like.
Usage: /manual {audience} or /manual {audience} {section}
/manual <audience> — full manual for that audience/manual <audience> <section-key> — a single section onlyBefore starting, verify:
browser_navigate and
browser_take_screenshot. If missing, tell the user to install the Playwright
MCP server (claude mcp add playwright npx @playwright/mcp@latest, Node 18+)
and restart.<your dev URLs, e.g. web on localhost:3000>) or a deployed URL
(https://your-app.example). Playwright drives a real browser, so live sites work
too. If a screen needs login, navigate there and ask the user to log in in the
opened browser, then continue.<your start command>)" — or have them give a deployed URL instead.Fill these in for your app. One table per audience (reader type). Add/remove rows freely.
Route(s)= in-app paths to screenshot.Key UI elements= what to capture and describe.
<app name>, <base URL>)| # | Section | Route(s) to capture | Key UI elements |
|---|---|---|---|
| 00 | getting-started | /login, /dashboard | Login form, dashboard layout, navigation |
| 01 | /<route> | <main buttons, tables, modals, filters> | |
| 02 | /<route>, /<route>/:id | <…> | |
| … | … | … | … |
<app name>, <base URL>, login as <role>)| # | Section | Route(s) to capture | Key UI elements |
|---|---|---|---|
| 00 | getting-started | /login, /register | <…> |
| 01 | /<route> | <…> | |
| … | … | … | … |
For each route in the section:
src/pages/<Page>.tsx).data-manual-* attributes are present, use them for descriptions (optional).Using the Playwright MCP tools:
browser_navigate).browser_take_screenshot).docs/manuals/dist/screenshots/{audience}/ (inside dist/
so the published folder is self-contained).Login credentials (local seed data): find your test accounts in
<your seed source, e.g. a dev-seed script / fixtures / .env.local> and log in
per audience (admin / user / …).
First, copy the theme into the output so dist/ is self-contained:
manual-style.css and sidebar.js → docs/manuals/dist/shared/.
Then, for each section, write docs/manuals/dist/{audience}/{##}-{section}.html:
<link rel="stylesheet" href="../shared/manual-style.css">.<script src="../shared/sidebar.js"></script> at end of body.<script src="https://unpkg.com/lucide@latest"></script>.<img src="../screenshots/{audience}/{file}.png">.<img>(s), descriptions derived from the
source, step-by-step usage, info/warning boxes, prev/next nav links.lucide.createIcons() at the end of body.After all sections are generated, update docs/manuals/dist/index.html — the hub
page linking every audience and section. Its links are relative
(./shared/..., ./{audience}/...).
The finished manual is the single self-contained docs/manuals/dist/ folder — to
share it, deploy or zip just that one folder. Ask the user before publishing (it
puts the manual on the public internet). Offer all three, simplest first:
A — Netlify Drop (no account, no CLI): tell the user to open
https://app.netlify.com/drop and drag the dist/ folder in. Instant public URL.
⚠️ Each drop creates a new random URL (no update-in-place) — good for a quick
one-off, not a stable link.
B — Netlify CLI (stable URL, update-in-place):
npx netlify-cli deploy --dir docs/manuals/dist --prod
First run opens a browser login and links the folder to a site; re-running deploys
to the same production URL. One-time login, no manual token.
C — Cloudflare Pages (stable URL, update-in-place):
npx wrangler pages deploy docs/manuals/dist --project-name <name>
Authenticate once with npx wrangler login (browser OAuth — no manual token for
interactive use; an API token is only needed for headless/CI). Production URL
https://<name>.pages.dev stays stable across deploys.
| Option | Setup | Link | Updates |
|---|---|---|---|
| Netlify Drop | none (drag folder) | new random each time | one-off only |
| Netlify CLI | 1× browser login | stable (--prod) | same URL |
| Cloudflare Pages | 1× wrangler login | stable (<name>.pages.dev) | same URL |
Rule of thumb: one-off demo → A; a link you keep updating → B or C (C if already on Cloudflare).
docs/manuals/dist/ ← deploy or zip THIS one folder (self-contained)
├── index.html # hub
├── shared/
│ ├── manual-style.css # bundled theme — restyle freely
│ └── sidebar.js # bundled nav — edit the CONFIG block for your sections
├── screenshots/
│ └── <audience>/ # auto-captured
└── <audience>/
├── 00-getting-started.html
└── ...
data-manual-* attributes first, but don't require them.Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub yunjeongiya/claude-manual-skill --plugin manual