.cursor/skills/create-em-spec/SKILL.md
Create or iterate on an Example Mapping specification from various inputs (GitHub issue, Miro screenshots). Produces a structured EM spec for use with the qa-review skill.
npx skillsauth add PackmindHub/packmind create-em-specInstall 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.
You are helping the user build an Example Mapping (EM) specification file iteratively. The spec may start from a GitHub issue, Miro screenshots, or a combination of inputs provided over multiple exchanges.
TBD, placeholders, or deferred items. If something is unclear or ambiguous, stop and ask the user for clarification before writing it into the spec.Ask the user what they are starting from, presenting these options:
| Option | Description | |--------|-------------| | GitHub issue | A GitHub issue URL containing the user story and acceptance criteria | | Miro screenshots | Screenshots from an Example Mapping workshop on a Miro board |
Load the corresponding input handler from the inputs/ directory:
inputs/github-issue.mdinputs/miro-screenshots.mdFollow the instructions in the input handler to extract the initial content.
Skip this step if the user has already provided the input in their message (e.g., pasted a URL or attached screenshots). Detect the input type and load the appropriate handler directly.
Ask the user where to save the spec file. Suggest a default based on the user story title: em-specs/{slugified-title}.md.
If a file already exists at that path, read it — this is a continuation, not a fresh start. Inform the user and proceed to update the existing spec.
On subsequent iterations (the output path was already established earlier in the conversation), skip this step entirely.
Using the extracted content from the input handler, produce (or update) the spec following the Output Format below.
When creating a new spec:
When updating an existing spec:
Before showing the spec to the user, perform at least two self-review passes:
Pass 1 — Completeness: Re-read the original input (re-read the image for Miro screenshots, re-read the issue for GitHub issues). Cross-reference every item in the source against the spec. Check:
Pass 2 — Spec quality: Re-read the source input again. This time check:
TBD or placeholders snuck inFix any issues found silently — do not mention the self-review to the user. Only present the corrected final version.
Why two passes? ~90% of inconsistencies (misplaced examples, missed stickies, reformulated text) are caught by simply looking at the source a second time. The source is already in context, so there is no cost to re-reading it.
After writing the spec, ask the user:
"Here's the current state of the spec. Would you like to:
- Add more input (another screenshot, more context)?
- Refine existing rules or examples?
- Mark it as done?"
Repeat steps 1-5 until the user marks the spec as done.
The spec MUST follow this exact structure to be compatible with the qa-review skill:
User Story Review: {Title of the user story}
# Rule 1: {Short rule title describing the expected behavior}
## Example 1
{Setup: describe the initial state}
{Action: describe what the user does}
{Outcome: describe the expected result}
## Example 2 <!-- E2E -->
{Setup}
{Action}
{Outcome}
# Rule 2: {Short rule title}
## Example 1
{Setup}
{Action}
{Outcome}
# Technical rules
- {Implementation constraint, e.g., "`slugify()` must be deterministic and locale-independent"}
- {Performance or infrastructure constraint, e.g., "The operation must be idempotent"}
- {Security or authorization constraint, e.g., "Only `OrganizationAdmin` can perform this action"}
- {Data constraint, e.g., "Max length for the `name` field: 64 characters"}
# User Events
- `{event_name}`: emitted when {trigger description}. Properties: `{property1}`, `{property2}`
---
Check also the following rules are applied:
- {Additional business rule or constraint}
- {Edge case to verify}
qa-review can grep for them.<!-- E2E --> after the ## Example N heading.TBD or placeholders. If something is uncertain, ask the user before including it.tools
Record polished UI demo videos and screenshots of a running web app using Playwright MCP — for client deliverables, release notes, feature walkthroughs, or bug repros. Produces an HD WebM video with chapter markers, a mandatory animated cursor overlay, and a mandatory subtitle bar that narrates each step (positioned deliberately so it never masks the UI being demonstrated), plus full-page screenshots at each step. Use this whenever the user asks to "record a demo", "create a screencast", "make a UI walkthrough video", "document this feature with video", "show the client how X works", "capture screenshots of the app", or anything similar — even when the user only says "make a video" or "take screenshots" in the context of a running frontend. Also use it when the user wants to demonstrate a workflow, generate marketing-quality footage of an app, or produce repeatable visual documentation.
tools
The canonical recipe for starting, checking, and stopping the Packmind local dev stack with Docker Compose — the single source of truth other skills and the Michel agent defer to. Covers bringing the full stack (PostgreSQL, Redis, NestJS API, React/Vite frontend on :4200, MCP server, nginx) up in the background, the init services (dependency install + TypeORM migrations) you must wait on, the critical host-port trap that the API on container port 3000 is NOT exposed to the host and must be reached via the frontend Vite proxy at localhost:4200/api/v0, confirming the API and frontend are actually serving before you depend on them, the persistent-volume gotcha that leaves stale Postgres schema and node_modules behind between runs, building the CLI, and tearing everything down so no container is left blocking the run. Use this whenever you need Packmind running locally — to verify a change, record a UI or CLI demo, hit the API, seed data, or reproduce a bug — and whenever you are about to start or stop `docker compose`. If you are an autonomous agent (e.g. Michel) that started the stack, you MUST use the teardown half before finishing. Prefer this over running `nx serve` on the host for anything that needs the real, containerized stack.
tools
Best practices for creating GitHub pull requests that include inline images — CLI terminal screenshots (from cli-demo-recorder), UI screenshots/videos (from ui-demo-recorder), or any other visual artifact. Use this skill whenever opening or updating a PR that has visual artifacts to embed, or when images aren't rendering in a PR description. Also use it when asked "how do I add screenshots to a PR", "why isn't my image showing", or "embed a demo in the PR".
tools
--- name: michel-create-packmind-dataset description: Seed a local Packmind instance with a realistic dataset — one organization populated with standards, commands, and skills — so an autonomous agent can exercise its own changes against lifelike data instead of an empty app. Use this whenever you need populated Packmind data to verify a change end-to-end: reproducing a bug that only shows with existing artifacts, recording a UI/CLI demo that needs content on screen, smoke-testing a new endpoint