skills/manual-generator/SKILL.md
Automatically generates a professional online service manual or help center from a running service URL and project documents. Captures per-screen screenshots via Chrome MCP, extracts feature descriptions from blueprints / planner documents, and publishes step-by-step guides as a self-contained HTML package under docs/manual/{feature-name}/. Use when generating a manual, writing a user guide, producing help documentation, or building a help center landing page.
npx skillsauth add astra-technology-company-limited/astra-methodology manual-generatorInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Analyzes a running service URL and project documents (blueprints, planner) and generates a professional online service manual as a self-contained HTML package.
Core principles:
/frontend-design skill — production-grade, refined and readable manual designsrc/styles/design-tokens.css (no hardcoding)Output location: docs/manual/{feature-name}/
Writing-quality criteria:
🌐 LANGUAGE RULE: Before executing this skill, read the project's
CLAUDE.mdand check the## Languagesection to detect the project language. If the project language is NOT Korean (ko), you MUST translate ALL user-facing output — including HTML page titles, labels, chapter titles, step descriptions, callout text — into the project language. Technical identifiers (file paths, CSS variable names, class names) remain untranslated. If noCLAUDE.mdexists or no## Languagesection is found, default to Korean.
Inspect $ARGUMENTS. The skill requires both a service URL and a target feature.
| Argument form | Behavior |
|---------------|----------|
| <url> <feature-name\|all> (two positional tokens — order-insensitive: a token starting with http(s):// is the URL, the other is the feature) | Use both directly |
| Only one token (URL only OR feature only) | Ask for the missing token via AskUserQuestion |
| (none) | Ask for both via AskUserQuestion |
When asking, use two separate questions (do not bundle into one free-text prompt):
Q1. Service URL (required) — URL of the running service for screenshot capture
Example: http://localhost:3000
Q2. Documentation target (required) — feature scope
Options: <feature-name listed from docs/blueprints> | "all"
Extract {SERVICE_URL} and {TARGET_FEATURE} from the input. Both are mandatory at the input-collection layer — Step 0.C still allows a runtime fallback to document-only mode if the URL is unreachable (network-level recovery, not user choice).
CLAUDE.md — project name, tech stack, language setting (apply LANGUAGE RULE)docs/blueprints/ — collect the list of per-feature blueprintsdocs/planner/ — collect the list of planner deliverablesux/ — check for existing UX prototypes (reference routes / screens)src/styles/design-tokens.cssValidation: if
src/styles/design-tokens.cssis missing, notify the user: "Design tokens file not found. Please initialize the project first with/project-init." Even if the file is missing, the default tokens at$CLAUDE_PLUGIN_ROOT/skills/project-init/templates/design-tokens.csscan be used as a fallback.
URL is required at the input layer (Step 0.A), but a runtime accessibility failure (network down, service not started) is allowed to fall back to document-only mode — this is a recovery path, not a user choice:
mcp__chrome-devtools__navigate_pagemcp__chrome-devtools__wait_for (up to 15s)/manual-generator re-runs), orRead the following documents and build a feature map:
| Source | Path | Extracted info |
|--------|------|----------------|
| Blueprint | docs/blueprints/{NNN}-*/blueprint.md | feature design, API endpoints, user stories |
| Feature definition | docs/planner/{NNN}-*/feature-definition.md | feature structure, sub-feature detail, service policy |
| IA / screen design | docs/planner/{NNN}-*/ia-screen-design.md | IA structure, screen list, screen flow |
| Use case | docs/planner/{NNN}-*/usecase-definition.md | user flow, alternative flow, exception flow |
| UX prototype | ux/*/index.html | screen index, route structure |
If {TARGET_FEATURE} is not "all", filter only the documents related to that feature.
Use AskUserQuestion to choose manual-generation options:
## Manual generation settings
### 1. Manual scope
Select the features to document.
| # | Feature | Source | Screen count |
|---|---------|--------|--------------|
| 1 | {feature-1} | {blueprint + URL / blueprint only / planner only} | {N} |
| 2 | {feature-2} | {source} | {N} |
| ... | ... | ... | ... |
Select (all: all, partial: 1,3):
### 2. Language
| # | Language |
|---|----------|
| 1 | Korean |
| 2 | English |
| 3 | Auto (per CLAUDE.md) |
### 3. Design tone
| # | Tone | Description |
|---|------|-------------|
| 1 | Professional Enterprise | stable, trustworthy enterprise docs |
| 2 | Refined Minimal | clean, refined minimal docs |
| 3 | Soft & Warm | soft, friendly help-doc style |
| 4 | Help Center | search-driven landing — hero search + FAQ grid + category cards + banner CTA (see references/manual-html-templates.md §6 and references/manual-css-template.md §5) |
| 5 | Auto | choose automatically based on project traits |
### 4. Responsive screenshots
| # | Option |
|---|--------|
| 1 | Desktop only |
| 2 | Desktop + Mobile |
| 3 | Desktop + Tablet + Mobile |
Save the selections as {SELECTED_FEATURES}, {LANGUAGE}, {DESIGN_TONE}, {RESPONSIVE_MODE}.
Analyze the documents collected in Step 0 to extract per feature:
| Item | Source | |------|--------| | Feature name / description | blueprint.md → overview section | | Screen list | ia-screen-design.md → screen list table | | User flow | usecase-definition.md → base flow / alternative flow | | API endpoints | blueprint.md → API design section | | Business rules | feature-definition.md → service policy | | Screen flow diagram | ia-screen-design.md → screen-transition diagram |
When {SERVICE_URL} is provided, explore the actual service via Chrome MCP:
mcp__chrome-devtools__navigate_pagemcp__chrome-devtools__take_snapshotDesign the manual's table of contents based on the feature map:
Chapter-structure rules:
- 01: Getting Started — always first
- service intro, how to access, system requirements, first login
- 02 ~ NN-2: Per-feature guides — by document order or user-journey order
- each feature: overview → step-by-step usage → tips / cautions
- split large features into multiple chapters (e.g., 02-auth-login, 03-auth-signup)
- NN-1: FAQ / Troubleshooting — extracted from alternative / exception flows in usecase
- NN: Glossary (optional) — define project-domain terms
Show the TOC and get approval via AskUserQuestion:
## Confirm manual TOC
The manual will be generated with the following TOC.
| # | Chapter | Contents | Expected screenshot count |
|---|---------|----------|---------------------------|
| 01 | Getting Started | service intro, access, first screen | 3-5 |
| 02 | {feature} — {sub-feature} | {description} | {N} |
| 03 | {feature} — {sub-feature} | {description} | {N} |
| ... | ... | ... | ... |
| {NN-1} | FAQ / Troubleshooting | frequently asked questions, error resolution | 0-3 |
| {NN} | Glossary | definitions of service terms | 0 |
Total {N} chapters, approximately {N} screenshots expected
Proceed as-is? (if changes are needed, describe them):
Apply requested changes; when approved, store as {APPROVED_TOC} array.
Before creating deliverables, switch to dev and sync. Do not create a work branch; work directly on dev. Work-branch creation is handled automatically when /pr-merge runs.
.astra-worktrees/<slug>/), abort. dev-sync runs only in the main worktree:
PLUGIN_ROOT="${CLAUDE_PLUGIN_ROOT:-$(ls -d ~/.claude/plugins/cache/*/astra-methodology/* 2>/dev/null | sort -V | tail -1)}"
if [ -z "$PLUGIN_ROOT" ] || [ ! -f "$PLUGIN_ROOT/scripts/worktree-helpers.sh" ]; then
echo "ERROR: CLAUDE_PLUGIN_ROOT not found. Check the plugin cache path." >&2
exit 1
fi
source "$PLUGIN_ROOT/scripts/worktree-helpers.sh"
astra_ensure_main_worktree || exit 1
git branch --show-currentdev: if the current branch is dev, skip steps 3–5 below and just pull (git pull origin dev)git status --porcelain; if changes exist, stash temporarily via git stash --include-untracked (untracked files included)git fetch origin dev && git checkout dev && git pull origin devgit stash pop. On conflict, report the conflicting files to the user and request manual resolution.Note: if the
devbranch does not exist, work onmainormaster. If no default branch exists, work on the current branch.
Create the docs/manual/{feature-name}/ directory. {feature-name} is:
auth, payment)service-guidedocs/manual/{feature-name}/
├── index.html
├── chapters/
├── assets/
├── screenshots/
│ ├── desktop/
│ ├── tablet/ (when RESPONSIVE_MODE >= 3)
│ └── mobile/ (when RESPONSIVE_MODE >= 2)
└── shared/
Copy src/styles/design-tokens.css → docs/manual/{feature-name}/assets/tokens.css as-is.
/frontend-design skillCall the /frontend-design skill to generate manual-specific CSS. Pass the following context:
Please generate CSS for a documentation/manual.
Design tone: {DESIGN_TONE}
Use case: online service manual (read-optimized)
Required components: sidebar TOC, step-card, callout boxes, screenshot-frame, breadcrumb, chapter-nav, search overlay
Design tokens: reference assets/tokens.css via var()
Dark mode: required
Responsive: mobile / tablet / desktop
If
/frontend-designis unavailable, use the CSS template atreferences/manual-css-template.mddirectly.
Generate the following files based on the /frontend-design output. Detailed component specs for each CSS file are in references/manual-css-template.md:
assets/manual-base.css — read-optimized layout:
max-width: 800px content area (optimal readability)[data-theme="dark"] selectorassets/manual-components.css — manual-specific components:
.step-card — numbered step card (number circle + content + screenshot).callout-tip, .callout-warning, .callout-note, .callout-danger — info boxes.screenshot-frame — mock browser-chrome frame + screenshot image.screenshot-annotation — positioned numbered circles (overlay on screenshot).breadcrumb — chapter breadcrumb.chapter-nav — previous/next chapter navigation.responsive-tabs — desktop/tablet/mobile screenshot tab switching.toc-sidebar — sidebar table of contents.search-overlay — search modalassets/manual-print.css — print:
assets/manual-helpcenter.css — only when DESIGN_TONE = Help Center:
references/manual-css-template.md §5 (hero/search, FAQ grid, category cards, banner CTA, contact CTA, footer + dark-mode overrides)manual-base.css + manual-components.css; this file extends only index.htmlNote: search-overlay styles are included in
manual-components.css(no separate file needed).
shared/nav.js:
← / → to move between chaptersshared/search.js:
search-index.jsonCtrl+K / Cmd+K to open searchshared/theme.js:
localStorage)prefers-color-scheme)✅ Shared resources generated
- CSS: manual-base.css, manual-components.css, manual-print.css
- JS: nav.js, search.js, theme.js
- Design tokens: tokens.css
If
{SERVICE_URL}is not provided (document-based mode), skip this step and generate the manual without screenshots in Step 4. If UX prototypes exist in theux/directory, you may open those HTML files to capture screenshots.
For each chapter in the approved TOC, capture the required screenshots.
For each screen:
Navigate:
mcp__chrome-devtools__navigate_page({ url: "{SERVICE_URL}/{route}" })
Wait for content to load:
mcp__chrome-devtools__wait_for({ selector: "{main-content-selector}", timeout: 10000 })
Inject highlight CSS — use evaluate_script to add the .manual-highlight class to the target element:
outline: 3px solid #2563EB, outline-offset: 2px, box-shadow: 0 0 0 6px rgba(37,99,235,0.15)#FF3B30)<style id="manual-highlight-style"> into head, then querySelector('{target-selector}').classList.add('manual-highlight')Inject step-number overlay — use evaluate_script to add a circular badge at the top-right of the target element:
z-index: 10001getBoundingClientRect(), position: fixedCapture screenshot — take_screenshot() → screenshots/desktop/{chapter}-step-{N}.png
Remove injected elements — use evaluate_script to remove the .manual-highlight class, the .manual-step-badge element, and the style tag
For each screen's main screenshot (first or representative):
Tablet (RESPONSIVE_MODE >= 3):
mcp__chrome-devtools__resize_page({ width: 768, height: 1024 })
→ capture → screenshots/tablet/{chapter}-overview.png
Mobile (RESPONSIVE_MODE >= 2):
mcp__chrome-devtools__resize_page({ width: 375, height: 812 })
→ capture → screenshots/mobile/{chapter}-overview.png
Restore to desktop:
mcp__chrome-devtools__resize_page({ width: 1280, height: 800 })
For chapters that include user flows (login, form submit, CRUD, etc.):
mcp__chrome-devtools__fill({ selector: "{input}", value: "{test-data}" })mcp__chrome-devtools__click({ selector: "{button}" })mcp__chrome-devtools__press_key({ key: "Enter" })mcp__chrome-devtools__wait_for({ selector: "{result-indicator}" })Caution: interact only with test data. Be careful not to modify real data. Capture read-only flows (view, search) first when possible; for write flows (create, update, delete), confirm with the user before proceeding.
📸 Screenshot capture progress: {completed}/{total} chapters
- Chapter 01 Getting Started: 3 done
- Chapter 02 {feature}: {N} done
- ...
Write each chapter from the approved TOC as HTML.
Read references/manual-writing-guide.md and apply the writing rules. Key rules:
| Rule | Application |
|------|-------------|
| Second-person polite form | "Please click the Login button" (O), "Click the Login button" (X — too curt for end-user docs) |
| Plain language | "An auth token is refreshed" (X) → "You stay logged in automatically" (O) |
| Step-by-step format | Split every procedure into numbered steps |
| Visual-first | Use a screenshot when a screenshot is clearer than text |
| Consistent terminology | Use the same name for the same UI element throughout the manual |
| Tip / caution boxes | Optional info uses .callout-tip, dangerous actions use .callout-warning |
Refer to the chapter HTML template in references/manual-html-templates.md to generate each chapter.
Key structural elements:
manual-header — sticky top header (project name, search / theme / font buttons)toc-sidebar — left fixed sidebar (links to all chapters)breadcrumb — navigation path (Manual › Chapter name)chapter > steps > step-card — numbered step-by-step guidescreenshot-frame > screenshot-chrome + screenshot-body — mock browser framecallout-tip/warning/note/danger — info boxesresponsive-preview > responsive-tabs — responsive screenshot tabs (optional)chapter-nav — previous/next chapter navigationsearch-overlay — search modal01-getting-started.html (Getting Started):
02 ~ NN-2: per-feature chapters:
NN-1: FAQ / Troubleshooting:
<details><summary> accordion)NN: Glossary (optional):
<dl> definition list📝 Chapter authoring progress: {completed}/{total}
- ✅ 01 Getting Started
- ✅ 02 {feature}
- 🔄 03 {feature} (in progress)
- ⏳ 04 {feature}
Pick the template by DESIGN_TONE:
Professional Enterprise / Refined Minimal / Soft & Warm / Auto → §2 Index (Cover) HTML Template in references/manual-html-templates.md (cover + quick-start callout + search + toc-grid)Help Center → §6 Help Center Index Template in references/manual-html-templates.md (sticky header + hero with search + FAQ grid + category cards + banner CTAs + contact CTA + footer). Pull the placeholder values from the project context (Step 0.B): {PROJECT_NAME} from CLAUDE.md, {TAGLINE} from blueprint overview, {SERVICE_URL} from Step 0.A. Group chapters into 3–5 categories (Setup / Features / Partners / Notice / Use cases) — the rule table is in the §6 reference. Pick the top 4–6 FAQ entries from Chapter NN-1 (FAQ / Troubleshooting). When {VIDEO_URL} / {CHANGELOG_URL} / {SUPPORT_URL} are not available, omit the corresponding .banner / .cta blocks rather than leaving empty placeholders.Key structural elements (cover variant):
cover — project name, manual title, meta info (version / generation date)quick-start-callout — "First time here?" CTA → link to 01-getting-started.htmlindex-search — large search inputindex-toc > toc-grid > toc-card — per-chapter cards (number, title, description, meta)Scan every chapter to build the search index:
[
{
"chapter": "01",
"title": "Getting Started",
"url": "chapters/01-getting-started.html",
"sections": [
{ "heading": "Service introduction", "anchor": "#intro", "content": "..." },
{ "heading": "How to access", "anchor": "#access", "content": "..." }
]
}
]
The content of each section includes the first 200 characters of the body text (for search matching).
Collect every image under screenshots/ via Glob
Extract <img src=""> from every chapter HTML
Warn on any unmatched reference
search-index.json## ✅ Manual generation complete
| Item | Value |
|------|-------|
| Location | docs/manual/{feature-name}/ |
| Chapter count | {N} |
| Screenshots | desktop {N}, tablet {N}, mobile {N} |
| Total file count | {N} |
| Total size | {N} MB |
### Open in browser
\`\`\`bash
open docs/manual/{feature-name}/index.html
\`\`\`
### Generated chapters
| # | Chapter | Screenshots |
|---|---------|-------------|
| 01 | Getting Started | {N} |
| 02 | {feature} | {N} |
| ... | ... | ... |
tools
Runs UAT (User Acceptance Testing) cases in TRUE PARALLEL using Playwright Test runner with isolated browser contexts per worker (separate cookies, localStorage, sessionStorage). Solves the two main limits of /user-test: (1) sequential single-page execution that does not scale beyond a few cases, and (2) one stuck case blocking the rest of the run. Reuses 100% of the /user-test UAT case Markdown+YAML format under docs/tests/uat-cases/, runs them via `npx playwright test --workers=N`, and emits the same report layout (index.html + issues.md + session.json + screenshots/) under docs/tests/uat-reports/. Use when the user asks to "run UAT in parallel", "speed up UAT", "test multi-user", "song song", "uat parallel", or runs /uat-parallel. Distinct from /user-test (sequential Chrome MCP, supports interactive mode), /test-run (developer integration tests), /test-scenario (scenario authoring).
tools
Performs end-user UAT (User Acceptance Testing) by driving a real browser through Chrome MCP, self-verifying each step with hard assertions (DOM / Network / URL / Console), auto-assigning severity on failure, and emitting an HTML report plus issues.md into a timestamped session folder. Supports two modes: interactive (URL + Vietnamese natural-language flow description) and --auto (batch-run pre-authored test cases under docs/tests/uat-cases/). Use when the user asks for "UAT", "user acceptance test", "kiểm thử người dùng", "regression test", or runs /user-test, /uat. Distinct from /test-run (developer-authored technical integration testing) and /test-scenario (scenario authoring from blueprints).
tools
Authors and validates LLM tool descriptions and input schemas (Anthropic Tool Use, MCP servers, LangChain @tool, Pydantic, Zod). Use when the user mentions "tool description", "function calling", "MCP tool", "Pydantic schema", "Zod schema", "@tool decorator", "input_schema", "tool spec", "툴 정의", "함수 호출 스키마", or when editing files that define LLM tool surfaces. Enforces the six required attributes (one-line summary, anti-pattern, synonyms, parameter examples, enum constraints, return shape) and blocks the seven known failure modes — wrong-tool selection, skipped tool, malformed arguments, retry loops, user-intent bypass, wrong side-effect, and un-auditable traces. For authoring ASTRA SKILL.md files use /skill-author instead — this skill is for *runtime* LLM tool surfaces, not for skill files themselves.
development
Creates new SKILL.md files or refactors existing skills to comply with the ASTRA skill best practices guide (docs/development/skill-best-practices.md). Use when user mentions "new skill", "create skill", "SKILL.md", "skill authoring", "스킬 작성", "스킬 만들기", or when editing any file matching skills/**/SKILL.md.