tobihagemann/preview
Stand up the project's live app and hand it to the user to try a change firsthand, then gate on their verdict before continuing. Use when the user asks to \"preview the change\", \"let me try it\", \"spin up the app so I can test it\", \"set it up so I can poke at it\", or before finalizing a UI/UX change that needs human eyes.
npx skills add https://github.com/tobihagemann/turbo --skill preview
Bring up the running app and let the user drive it themselves to judge the change, then act on their verdict.
Resolve what to preview using the first match:
If the resolved scope has no user-visible surface to try (a CLI-only change, a library with no entry point, backend work with no UI to look at), present this message: "Nothing to preview — <one-line reason>." Then use the TaskList tool and proceed to any remaining task.
Check for a project-specific skill or MCP tool that launches the app, and use it if present. Otherwise use the fallback for the surface type:
Start backend services and frontend together — a frontend-only change still needs the backend running to be exercised. Build first if the project requires a build step.
Start long-running processes with the Bash tool (run_in_background: true) and wait until each reports ready. Tail their logs with the Monitor tool so backend errors and warnings surface while the user is trying the app.
If a required service cannot be stood up in this session (missing auth provider, external dependency, seed data), or a process fails to start or never reports ready, use AskUserQuestion to surface the blocker and let the user choose how to proceed.
Output as text:
Use AskUserQuestion to ask the user for their verdict after they have tried the app. Three options, with keeping the app running as the default:
Then use the TaskList tool and proceed to any remaining task.
Take tobihagemann/preview from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.