skills/catalog-generator/SKILL.md
Automatically generates a professional product promotional catalog as a self-contained HTML package from product data. Executes the full catalog production pipeline — planning, data normalization, design, copywriting, and validation — in a single pass without user feedback.
npx skillsauth add astra-technology-company-limited/astra-methodology catalog-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 product data (CSV/JSON/text/URL) and produces a production-grade HTML catalog by applying professional catalog designers' workflows and expert know-how.
Core Principles:
$CLAUDE_PLUGIN_ROOT/docs/catalog/catalog-expert-workflow.md/frontend-design skill integration — polished, production-grade design (prevents generic AI aesthetics)fect-image MCP integration — auto-generates hero banners, lifestyle images, editorial illustrations, and category visualsOutput location: catalog/{catalog-name}/
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, placeholder text, navigation 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.
Analyze $ARGUMENTS to determine the product data source:
| Argument Type | Action |
|---------------|--------|
| CSV/JSON file path (e.g. products.csv) | Read file and extract product list |
| Directory path (e.g. data/products/) | Collect all data files + images from directory |
| URL (e.g. https://example.com/products) | Store as {SERVICE_URL} — Chrome MCP captures product screenshots from live site |
| Text description (e.g. 5 premium kitchen items) | Structure product data from text input |
| (empty) | Auto-scan current directory for product data files (*.csv, *.json, *.xlsx, etc.) |
Normalize collected data into the internal standard structure:
{
"catalog": {
"name": "{catalog-name}",
"brand": "{brand-name}",
"tagline": "{brand-slogan}",
"contact": { "phone": "", "email": "", "website": "", "address": "" }
},
"categories": [
{
"id": "cat-01",
"name": "{category-name}",
"description": "{category-description}",
"products": [
{
"id": "prod-001",
"name": "{product-name}",
"price": 0,
"originalPrice": null,
"description": "{product-description}",
"features": ["{feature-1}", "{feature-2}"],
"specs": { "{spec-key}": "{value}" },
"images": ["{image-path}"],
"badges": [],
"crossSell": ["{related-product-id}"],
"tier": "standard|premium|budget"
}
]
}
]
}
Data Enrichment Rules:
Contact Us labelfect-image MCP based on product descriptioncrossSell field auto-maps IDs of same-category or complementary productstier auto-classifies based on price distribution (top 20% → premium, bottom 20% → budget)Read the following reference files to load expert know-how into context:
$CLAUDE_PLUGIN_ROOT/docs/catalog/catalog-expert-workflow.md — Full workflow & know-how$CLAUDE_PLUGIN_ROOT/skills/catalog-generator/references/catalog-html-templates.md — HTML structure templates$CLAUDE_PLUGIN_ROOT/skills/catalog-generator/references/catalog-css-template.md — CSS component templatesAnalyze product data characteristics to autonomously decide the design tone:
| Product Characteristics | Auto-Selected Design Tone | Rationale | |------------------------|--------------------------|-----------| | Luxury/premium (high price, few items) | Editorial Luxury | Generous whitespace, large images, serif typography | | Tech/electronics | Modern Minimal | Clean layout, spec tables, sans-serif | | Fashion/beauty/lifestyle | Bold & Vibrant | Emotional visuals, lifestyle shots, bold colors | | Food/beverage | Soft & Warm | Warm tones, soft curves, friendly copy | | B2B/industrial/components | Professional Enterprise | High-density grid, comparison tables, trust signals | | Children/education/toys | Playful Bright | Bright colors, rounded corners, fun illustrations | | Mixed/indeterminate | Refined Minimal | Safe universal choice — clean and polished |
Store the determined tone as {DESIGN_TONE} and use it as the basis for all subsequent design decisions.
If {SERVICE_URL} is available (URL argument provided), plan Chrome MCP screenshot capture:
Navigate & Analyze: Open {SERVICE_URL} via Chrome MCP and take a snapshot to understand the site structure
mcp__chrome-devtools__navigate_page({ url: "{SERVICE_URL}" })
mcp__chrome-devtools__wait_for({ selector: "body", timeout: 10000 })
mcp__chrome-devtools__take_snapshot()
Build Screenshot Plan — Map product data to live pages/routes:
| Screenshot Type | When to Capture | Purpose | |----------------|----------------|---------| | Product detail page | Each product has a dedicated URL | Hero-quality product showcase | | Product listing/grid | Category pages exist | Category overview visuals | | Product in-use / demo | Interactive features available | "See it in action" showcase | | Key UI moments | Checkout, config, comparison pages | Trust-building screenshots | | Mobile views | Always (responsive resize) | Mobile-first showcase |
Store as {SCREENSHOT_PLAN} — Array of { url, selector, description, category, viewport } entries
If no {SERVICE_URL} is provided, set {SCREENSHOT_PLAN} to empty — all visuals will come from fect-image AI generation.
Automatically determine page structure based on product count and categories:
| Component | Rule | |-----------|------| | Cover | Always included — brand name, tagline, hero image | | Brand Story | Included when 10+ products — 1 page | | Table of Contents | Included when 3+ categories | | Category Dividers | Included when 2+ categories — entry page per category | | Product Detail Pages | All products — 1–4 per page (based on importance & image size) | | Cross-Selling Sections | Auto-placed when 3+ products in a category | | Bundle/Set Proposals | Auto-generated when complementary product relationships detected | | Order/Contact Info | Always included — last page |
Per-product space allocation within pages:
| Product Tier | Page Occupancy | Image Size | |-------------|---------------|------------| | Hero (top revenue/new arrivals) | 1 product / full spread | 60%+ of page | | Premium | 1–2 products / page | 40–50% of page | | Standard | 2–3 products / page | 30% of page | | List (high item count) | 4–6 products / page (grid) | Thumbnail |
Additional visual sections (auto-included when applicable):
| Component | Rule |
|-----------|------|
| Screenshot Showcase | Included when {SERVICE_URL} provided — "See it in action" section with browser-chrome frames |
| Editorial Illustrations | Always included — fect-image generates mood/atmosphere illustrations between categories |
| Product Gallery | Included for hero/premium tier products — multi-angle screenshots + lifestyle shots |
Before generating output files, switch to the dev branch and sync with the latest state. Do not create a work branch — work directly on dev. Work branch creation is handled automatically by /pr-merge.
.astra-worktrees/<slug>/). Dev-sync runs in the main worktree only:
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 and run only the pull (git pull origin dev)git status --porcelain; if there are changes, save them with git stash --include-untracked (includes untracked files)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, fall back tomainormaster. If no default branch exists, work on the current branch.
catalog/{catalog-name}/
├── index.html # Cover + TOC + navigation hub
├── pages/ # Individual page HTML files
│ ├── 01-cover.html # Cover (standalone view)
│ ├── 02-brand-story.html # Brand story (optional)
│ ├── 03-{category}.html # Category product pages
│ ├── {NN}-showcase.html # Screenshot showcase — "See it in action" (when SERVICE_URL)
│ └── XX-contact.html # Order/contact info
├── assets/
│ ├── tokens.css # Design tokens (colors, typography, spacing)
│ ├── catalog-base.css # Layout & typography
│ ├── catalog-components.css # Product cards, badges, CTAs, screenshots, illustrations
│ ├── catalog-print.css # Print-optimized styles
│ └── catalog-interactions.css # Hover, transitions, animations
├── images/ # Product images + AI-generated visuals
│ ├── hero/ # Hero banner images
│ ├── products/ # Product images
│ ├── lifestyle/ # Lifestyle shots (AI-generated)
│ ├── illustrations/ # Editorial illustrations (AI-generated, mood/atmosphere)
│ ├── categories/ # Category visuals (AI-generated)
│ └── screenshots/ # Chrome MCP captured screenshots
│ ├── desktop/ # Desktop viewport (1280×800)
│ ├── tablet/ # Tablet viewport (768×1024)
│ └── mobile/ # Mobile viewport (375×812)
└── shared/
├── nav.js # Navigation (page transitions, TOC)
├── interactions.js # Interactions (filter, search, gallery, screenshot tabs)
└── theme.js # Dark mode, font size adjustment
Create assets/tokens.css based on {DESIGN_TONE}.
Reference the tone-specific token presets in $CLAUDE_PLUGIN_ROOT/skills/catalog-generator/references/catalog-css-template.md to define CSS Custom Properties.
If the project has src/styles/design-tokens.css, extend it with catalog-specific tokens. Otherwise, use the reference default tokens.
Tokens must include:
--cat-color-primary, --cat-color-accent, --cat-color-bg, --cat-color-text, --cat-color-price, --cat-color-badge-*--cat-font-display, --cat-font-body, --cat-font-size-*, --cat-font-weight-*--cat-spacing-*, --cat-radius-*--cat-page-max-width, --cat-grid-gap, --cat-product-card-min-width[data-theme="dark"] variable setReference $CLAUDE_PLUGIN_ROOT/skills/catalog-generator/references/catalog-css-template.md to create 4 CSS files:
catalog-base.css — Layout, grid, typography, responsive breakpointscatalog-components.css — Product cards, price tags, badges, CTA buttons, comparison tables, bundle boxescatalog-print.css — A4 print optimization (page breaks, margins, resolution)catalog-interactions.css — Hover effects, page transitions, gallery animationsInvoke the /frontend-design skill to apply polished design matching {DESIGN_TONE}:
/frontend-design Catalog design system — tone: {DESIGN_TONE}, purpose: product promotional catalog, components: product card / price tag / CTA button / badge / comparison table / bundle box
Reference the JS section of $CLAUDE_PLUGIN_ROOT/skills/catalog-generator/references/catalog-html-templates.md to create 3 JS files:
nav.js — Page navigation, side TOC, current location highlight, keyboard navigation (← →)interactions.js — Product filter, search, image gallery (lightbox), comparison featuretheme.js — Dark/light mode toggle, font size adjustment, localStorage settings persistenceThis step produces all visual assets that elevate the catalog from basic to premium quality. Two parallel tracks:
{SERVICE_URL} available){SERVICE_URL} available)Skip this section entirely if
{SCREENSHOT_PLAN}is empty.
For each entry in {SCREENSHOT_PLAN}:
Navigate to target page:
mcp__chrome-devtools__navigate_page({ url: "{entry.url}" })
mcp__chrome-devtools__wait_for({ selector: "{entry.selector}", timeout: 10000 })
Clean up UI for catalog-quality capture — inject CSS via evaluate_script to hide distracting elements:
// Inject cleanup styles for catalog-quality screenshots
var style = document.createElement('style');
style.id = 'catalog-capture-style';
style.textContent = `
.cookie-banner, .chat-widget, .popup-overlay,
[class*="cookie"], [class*="chat-bot"], [class*="intercom"],
[class*="notification-bar"] { display: none !important; }
`;
document.head.appendChild(style);
Optional: Highlight key product area — for product detail pages, add a subtle focus effect:
// Add premium highlight to product showcase area
var target = document.querySelector('{entry.selector}');
if (target) {
target.style.boxShadow = '0 0 0 3px rgba(var(--highlight-rgb, 37,99,235), 0.15)';
target.style.borderRadius = '12px';
}
Desktop capture (1280×800):
mcp__chrome-devtools__resize_page({ width: 1280, height: 800 })
mcp__chrome-devtools__take_screenshot()
→ Save to images/screenshots/desktop/{entry.category}-{N}.png
Tablet capture (768×1024):
mcp__chrome-devtools__resize_page({ width: 768, height: 1024 })
mcp__chrome-devtools__take_screenshot()
→ Save to images/screenshots/tablet/{entry.category}-{N}.png
Mobile capture (375×812):
mcp__chrome-devtools__resize_page({ width: 375, height: 812 })
mcp__chrome-devtools__take_screenshot()
→ Save to images/screenshots/mobile/{entry.category}-{N}.png
Cleanup injected styles — evaluate_script to remove #catalog-capture-style and reset inline styles
Restore desktop viewport:
mcp__chrome-devtools__resize_page({ width: 1280, height: 800 })
Multi-step flow capture — For interactive product demos (configurators, dashboards, etc.):
mcp__chrome-devtools__click(), mcp__chrome-devtools__fill(), mcp__chrome-devtools__press_key()mcp__chrome-devtools__wait_for() for result{category}-step-{N}.png for sequential displayUse mcp__fect-image__image_text2img to generate the cover hero image.
Prompt composition — use rich, art-directed prompts for premium quality:
Cinematic product catalog hero banner, {product-category} theme,
{DESIGN_TONE} aesthetic, premium commercial photography,
dramatic lighting, shallow depth of field, editorial magazine quality,
{brand-color} color accent, ultra-wide 21:9 composition,
negative space for text overlay on the left third
Save generated image to images/hero/.
If there are 2+ categories, generate a divider image for each category.
Prompt composition:
{category-name} product category editorial visual, {DESIGN_TONE} style,
abstract artistic background, luxury commercial catalog quality,
soft gradient lighting, cinematic color grading, 3:2 aspect ratio
Save generated images to images/categories/.
Generate mood/atmosphere illustrations placed between categories and in feature sections. These elevate the catalog from a simple product list to an editorial experience.
| Illustration Type | Placement | Prompt Strategy | |------------------|-----------|----------------| | Mood separator | Between categories | Abstract, atmospheric, brand-color gradients | | Lifestyle scene | Near hero/premium products | Product in aspirational real-life context | | Detail texture | Background for spec sections | Macro texture, material close-up | | Infographic base | Feature comparison sections | Clean geometric, data-visualization style | | Brand atmosphere | Brand story page | Emotional, storytelling visual |
Prompt composition per type:
Mood separator:
Abstract artistic illustration, {DESIGN_TONE} aesthetic,
flowing {brand-color} gradients, organic shapes, editorial magazine divider,
minimalist composition, ultra-clean, no text, 4:1 wide panoramic
Lifestyle scene:
{product-name} in {aspirational-context}, editorial lifestyle photography,
{target-audience-lifestyle} setting, warm natural lighting,
magazine-quality composition, {DESIGN_TONE} color palette, 16:9
Detail texture:
Macro close-up of {product-material/texture}, abstract product detail,
{DESIGN_TONE} color grading, shallow depth of field,
premium material texture, subtle bokeh, 3:2 aspect ratio
Infographic base:
Clean geometric abstract background, {DESIGN_TONE} color scheme,
subtle grid pattern, modern data visualization aesthetic,
plenty of negative space for overlay content, 16:9
Brand atmosphere:
{brand-story-theme} conceptual illustration, {DESIGN_TONE} editorial style,
cinematic dramatic lighting, emotional storytelling mood,
abstract artistic interpretation, premium quality, 2:1 wide
Save generated images to images/illustrations/.
Generation rules:
For products with no provided images and no Chrome MCP screenshots, generate lifestyle images:
{product-name} in real-life premium setting, editorial product photography,
{usage-scene-description}, dramatic studio lighting with natural fill,
{DESIGN_TONE} mood, luxury commercial catalog quality,
styled with complementary props, shallow depth of field, 4:5 portrait
Save generated images to images/lifestyle/.
Rule: Generate only the minimum required images — prioritize Chrome MCP screenshots over AI generation. For products with both a service URL and AI images, use screenshots for "in action" views and AI images for aspirational lifestyle shots. Skip AI image generation for any product that already has user-provided images.
Apply Section 5 (Copywriting Know-How) from $CLAUDE_PLUGIN_ROOT/docs/catalog/catalog-expert-workflow.md to generate all text content.
Generate a main catalog headline matched to brand and product characteristics:
{DESIGN_TONE} (luxury → restrained elegance, B2B → trust & efficiency)Write intro copy for each category entry page:
Generate copy for every product in the following structure:
[Headline] — 1 line, attention-grabbing benefit-driven phrase
[Subhead] — 1 line, key differentiator summary
[Body] — 2–3 lines, storytelling + sensory language
[Bullets] — 3–5 key specs/features
Copywriting Rules:
Reference $CLAUDE_PLUGIN_ROOT/skills/catalog-generator/references/catalog-html-templates.md to generate each page's HTML.
pages/01-cover.html){SERVICE_URL} available: overlay subtle screenshot montage (3 device frames at angle) in backgroundpages/02-brand-story.html, when 10+ products){SERVICE_URL} available: embed 1–2 key screenshots in browser-chrome frames as "trust signals"pages/03-{category}.html)Generate one HTML file per category. Structure:
Apply expert know-how for product placement:
Product card HTML structure (enhanced with screenshot gallery and illustrations):
<article class="product-card product-card--{tier}" data-product-id="{id}">
<div class="product-card__badges">
<span class="badge badge--{type}">{badge-text}</span>
</div>
<div class="product-card__image">
<img src="../images/products/{image}" alt="{product-name}" loading="lazy">
</div>
<!-- Screenshot Gallery (hero/premium products with SERVICE_URL only) -->
<div class="product-card__screenshot-gallery">
<div class="screenshot-tabs">
<button class="screenshot-tab screenshot-tab--active" data-viewport="desktop">Desktop</button>
<button class="screenshot-tab" data-viewport="tablet">Tablet</button>
<button class="screenshot-tab" data-viewport="mobile">Mobile</button>
</div>
<div class="screenshot-panels">
<div class="screenshot-panel screenshot-panel--active" data-viewport="desktop">
<div class="screenshot-frame screenshot-frame--browser">
<div class="screenshot-frame__chrome">
<span class="screenshot-frame__dot"></span>
<span class="screenshot-frame__dot"></span>
<span class="screenshot-frame__dot"></span>
<span class="screenshot-frame__url">{SERVICE_URL}/{product-route}</span>
</div>
<img src="../images/screenshots/desktop/{screenshot}" alt="{product-name} desktop view" loading="lazy">
</div>
</div>
<div class="screenshot-panel" data-viewport="tablet">
<div class="screenshot-frame screenshot-frame--tablet">
<img src="../images/screenshots/tablet/{screenshot}" alt="{product-name} tablet view" loading="lazy">
</div>
</div>
<div class="screenshot-panel" data-viewport="mobile">
<div class="screenshot-frame screenshot-frame--mobile">
<img src="../images/screenshots/mobile/{screenshot}" alt="{product-name} mobile view" loading="lazy">
</div>
</div>
</div>
</div>
<div class="product-card__content">
<h3 class="product-card__name">{headline}</h3>
<p class="product-card__subtitle">{subhead}</p>
<p class="product-card__description">{body}</p>
<ul class="product-card__features">
<li>{feature-1}</li>
<li>{feature-2}</li>
</ul>
<div class="product-card__pricing">
<span class="price price--original">{original-price}</span>
<span class="price price--current">{current-price}</span>
</div>
<a href="#contact" class="cta-button">{cta-text}</a>
</div>
<div class="product-card__cross-sell">
<p>You may also like</p>
<div class="cross-sell-items">
<!-- Related product thumbnails -->
</div>
</div>
</article>
<!-- Editorial Illustration Break (between product groups) -->
<div class="illustration-break">
<img src="../images/illustrations/{mood-separator}" alt="" role="presentation" loading="lazy">
</div>
Note: The
.product-card__screenshot-galleryblock is only included for hero/premium tier products that have Chrome MCP screenshots. Omit entirely for products without screenshots. The.illustration-breakis inserted between logical product groups (e.g., after every 3–4 products or between tier boundaries).
pages/{NN}-showcase.html, when {SERVICE_URL} available)A dedicated "See it in action" page that showcases the product/service through captured screenshots — this is the premium differentiator that builds trust and demonstrates real product quality.
Structure:
<div class="showcase-flow">
<div class="showcase-step">
<div class="showcase-step__number">1</div>
<div class="showcase-step__screenshot">
<div class="screenshot-frame screenshot-frame--browser">
<div class="screenshot-frame__chrome">
<span class="screenshot-frame__dot"></span>
<span class="screenshot-frame__dot"></span>
<span class="screenshot-frame__dot"></span>
<span class="screenshot-frame__url">{url}</span>
</div>
<img src="../images/screenshots/desktop/{screenshot}" alt="{step-description}" loading="lazy">
</div>
</div>
<div class="showcase-step__content">
<h3>{step-title}</h3>
<p>{step-description}</p>
</div>
</div>
</div>
Apply editorial illustration backgrounds from Step 2.D as subtle section dividers within the showcase page.
pages/XX-contact.html)index.html)Entry point for the entire catalog — includes:
<main> content from pages/*.html and assembles into a single-scroll view (SPA-style)Automatically validate all generated files against the following criteria:
| Validation Item | Criteria |
|----------------|----------|
| File Existence | index.html + all pages/*.html + 4 CSS files + 3 JS files |
| HTML Validity | No unclosed tags, no broken relative paths |
| Image References | All <img src> paths match actual files in images/ |
| Screenshot References | All images/screenshots/ paths match captured files (when {SERVICE_URL}) |
| Illustration References | All images/illustrations/ paths match generated files |
| Link Integrity | All internal page-to-page links are valid |
| Screenshot Tabs | Desktop/tablet/mobile tabs work correctly (JS interaction test) |
| Responsiveness | 3-tier @media queries (mobile/tablet/desktop) present |
| Dark Mode | [data-theme="dark"] styles present for all components incl. screenshot frames |
| Print Styles | catalog-print.css contains @page, break-*, and screenshot print rules |
| Product Count Match | Input data product count = HTML product card count |
| Visual Quality | Illustration breaks placed between categories, no consecutive text-only sections |
If broken references are found, fix them immediately.
## Catalog Generation Complete
### Basic Info
- **Catalog Name**: {catalog-name}
- **Design Tone**: {DESIGN_TONE}
- **Service URL**: {SERVICE_URL or "N/A — AI visuals only"}
- **Total Products**: {N} ({category-count} categories)
- **Total Pages**: {N} pages
### Generated Files
| File | Description |
|------|-------------|
| `catalog/{name}/index.html` | Main entry point (cover + TOC + unified view) |
| `catalog/{name}/pages/*.html` | {N} individual pages |
| `catalog/{name}/pages/{NN}-showcase.html` | Screenshot showcase page (if SERVICE_URL) |
| `catalog/{name}/assets/*.css` | 4 stylesheets |
| `catalog/{name}/shared/*.js` | 3 JS modules |
| `catalog/{name}/images/` | {N} total image assets |
### Visual Assets
| Type | Count | Source |
|------|-------|--------|
| Chrome MCP Screenshots | {N} (desktop: {N}, tablet: {N}, mobile: {N}) | Live service capture |
| Hero Banner | 1 | fect-image AI |
| Category Visuals | {N} | fect-image AI |
| Editorial Illustrations | {N} (mood: {N}, lifestyle: {N}, texture: {N}) | fect-image AI |
| Lifestyle Shots | {N} | fect-image AI |
| User-Provided Images | {N} | Original data |
### Applied Sales Strategies
- Cross-selling sections: {N}
- Bundle proposals: {N}
- Price anchoring: {applied/not-applied}
- CTA placements: {N} total
- Screenshot showcase: {"included — builds trust with real product visuals" / "not included — no SERVICE_URL"}
### Preview
> Open `catalog/{name}/index.html` in a browser to preview.
> Print: Use browser print (Cmd+P) for A4-optimized output.
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.