From muggle
Run a real-browser end-to-end (E2E) acceptance test against localhost to verify a feature works correctly — signup flows, checkout, form validation, UI interactions, or any user-facing behavior. Launches a browser that executes test steps and captures screenshots. Use this skill whenever the user asks to test, validate, or verify their web app, UI changes, user flows, or frontend behavior on localhost or a dev server — even if they don't mention 'muggle' or 'E2E' explicitly.
How this skill is triggered — by the user, by Claude, or both
Slash command
/muggle:muggle-test-feature-localThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
**Goal:** Run or generate an end-to-end test against a **local URL** using Muggle’s Electron browser.
Goal: Run or generate an end-to-end test against a local URL using Muggle’s Electron browser.
| Scope | MCP tools |
|---|---|
| Cloud (projects, cases, scripts, auth) | muggle-remote-* |
| Local (Electron run, publish, results) | muggle-local-* |
| Create new entities (preview / create) | muggle-remote-project-create, muggle-remote-use-case-prompt-preview, muggle-remote-use-case-create-from-prompts, muggle-remote-test-case-generate-from-prompt, muggle-remote-test-case-create |
The local URL only changes where the browser opens; it does not change the remote project or test definitions.
muggle-remote-auth-statusmuggle-remote-auth-login then muggle-remote-auth-pollAsk the user to pick project, use case, and test case (do not infer).
muggle-remote-project-listmuggle-remote-use-case-list (with projectId)muggle-remote-test-case-list-by-use-case (with useCaseId)Selection UI (mandatory): After each list call, present choices as a numbered list (1. … n.). Keep each line minimal: number, short title, UUID. Ask the user to reply with the number or the UUID.
Fixed tail of each pick list (project, use case, test case): After the relevance-ranked rows, end with the options below. Create new … is never omitted; Show full list is omitted when it would be pointless (see empty list).
Relevance-first filtering (mandatory for project, use case, and test case lists):
Create new — tools and flow (use these MCP tools; preview before persist):
projectName, description, and url (may be the local app URL, e.g. http://localhost:3999). Call muggle-remote-project-create. Use the returned projectId and continue.muggle-remote-use-case-prompt-preview with projectId, instruction — show preview; get confirmation.muggle-remote-use-case-create-from-prompts with projectId, prompts: [{ instruction }] — persist. Use the created use case id and continue to test-case selection.useCaseId): User provides an instruction describing what to test.
muggle-remote-test-case-generate-from-prompt with projectId, useCaseId, instruction — preview only (server test-case prompt preview); show the returned draft(s); get confirmation.muggle-remote-test-case-create, mapping preview fields into the required properties (title, description, goal, expectedResult, url, etc.). Then continue from §4 with that testCaseId.muggle-remote-test-script-list with testCaseId.
Generate new script as the last numbered option (e.g. last number) so it is selectable by number too.Generate
muggle-remote-test-case-getmuggle-local-execute-test-generation (after approval in step 6) with that test case + localUrl + approveElectronAppLaunch: true (optional: showUi: true, timeoutMs — see below)Replay
muggle-remote-test-script-get → note actionScriptIdmuggle-remote-action-script-get with that id → full actionScriptactionScript; replay needs full label paths for element lookup.muggle-local-execute-replay (after approval in step 6) with testScript, actionScript, localUrl, approveElectronAppLaunch: true (optional: showUi: true, timeoutMs — see below)timeoutMs)The MCP client often uses a default wait of 300000 ms (5 minutes) for muggle-local-execute-test-generation and muggle-local-execute-replay. Exploratory script generation (Auth0 login, dashboards, multi-step wizards, many LLM iterations) routinely runs longer than 5 minutes while Electron is still healthy.
timeoutMs for flows that may be long — for example 600000 (10 min) or 900000 (15 min) — unless the user explicitly wants a short cap.Electron execution timed out after 300000ms (or similar) but Electron logs show the run still progressing (steps, screenshots, LLM calls), treat it as orchestration timeout, not an Electron app defect: increase timeoutMs and retry (after user re-approves if your policy requires it).failed / non-zero Electron exitElectron execution timed out after 300000ms: Orchestration wait too short — see timeoutMs above.goal_not_achievable, summary with halt) — e.g. verifying “view script after a successful run” when no run or script exists yet in the UI. Use muggle-local-run-result-get and read the summary / structured summary; do not assume an Electron crash. Fix: choose a project that already has completed runs and scripts, or change the test case so preconditions match what localhost can satisfy (e.g. include steps to create and run a test first, or assert only empty-state UI when no runs exist).Get explicit OK to launch Electron. State: replay vs generation, test case name, URL.
Only then call local execute tools with approveElectronAppLaunch: true.
muggle-local-publish-test-scriptviewUrl for the user (open "<viewUrl>" on macOS or OS equivalent).muggle-local-run-result-get with the run id from execute.actionScript — only from muggle-remote-action-script-get.muggle-remote-use-case-prompt-preview, muggle-remote-test-case-generate-from-prompt) before persisting.npx claudepluginhub multiplex-ai/muggle-ai-works --plugin muggleaiGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.