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 finaliz
Install
npx skills add https://github.com/tobihagemann/turbo/tree/main/claude/skills/preview
claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install tobihagemann-turbo@llmmart
git clone https://github.com/tobihagemann/turbo.git
The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole tobihagemann/turbo collection as a plugin from our marketplace. Git is the plain clone.
Skill manifest
Preview
Bring up the running app and let the user drive it themselves to judge the change, then act on their verdict.
Step 1: Determine Scope
Resolve what to preview using the first match:
- User-specified — the user says what to look at. Use that.
- PR — a PR URL or number is provided. Fetch its details and read the changed code.
- Conversation context — prior conversation contains recent work. Extract what changed, where it lives, and the expected behavior.
- App-level discovery — fresh context with no prior work. Examine entry points, routes, and the README to identify the app's core user-facing flows.
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 —
Step 2: Determine Launch Approach
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:
- Web app → start the dev server; the access point is the local URL and port
- Desktop/native app → build and launch the app so its window is open
Step 3: Bring Up the Stack
Start backend services and frontend together — a frontend-only change still needs the backend running to be exercised. When a service runs at an address other than its default, find the settings elsewhere in the stack that name that default, such as allowed origins and sign-in callback URLs, and bring each in line through runtime overrides, leaving the working tree unchanged: add the new address beside the default in a list, and replace the default only where no process outside this skill reads the setting. 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. Pass run_in_background alone, never with a trailing &: backgrounding twice reports success within seconds while the servers are either dead with the wrapper or orphaned still holding the port. Confirm each process bound to its port before sending it traffic, since a readiness probe passes just as well against an orphan from an earlier attempt. Capture each process's PID and stop it by that PID and its process group, rather than by port or command-line pattern, which also match a concurrent agent's server. 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.
Step 4: Point the User at the Running App
Output as text:
- The access point — the local URL and port for a web app, or confirmation that the window is open for a native app
- When the surface sits behind a sign-in, each account to use with its password and the role that account holds, plus every key or code generated while bringing up the stack that the app requests during or after sign-in, such as on a new browser
- What changed
- Each scenario worth trying, as many as the change needs: numbered steps naming the exact controls and inputs, the result the scenario should produce, and the judgment the user is being asked to make
- When a verification pass preceded this hand-over, what it could not cover: paths needing real credentials, external services, or state unavailable in this session
Step 5: Verdict Gate
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:
- Looks good, keep it running — leave every process this skill started running so the user can keep using the app.
- Looks good, shut it down — stop every process this skill started, and revert every override this skill made in a service that keeps running.
- Needs changes — note what the user wants different, make the change, rebuild or refresh the running app so it is live, then repeat this step's gate. When the user's response or session context surfaces further open issues, resolve every known issue — fixing and re-verifying each — before re-asking the verdict; the gate re-fires only once no known issue remains.
Then use the TaskList tool and proceed to any remaining task.
Files (turbo)
-
SKILL.md 4.8 KB
--- name: preview description: "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." --- # Preview Bring up the running app and let the user drive it themselves to judge the change, then act on their verdict. ## Step 1: Determine Scope Resolve what to preview using the first match: 1. **User-specified** — the user says what to look at. Use that. 2. **PR** — a PR URL or number is provided. Fetch its details and read the changed code. 3. **Conversation context** — prior conversation contains recent work. Extract what changed, where it lives, and the expected behavior. 4. **App-level discovery** — fresh context with no prior work. Examine entry points, routes, and the README to identify the app's core user-facing flows. 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. ## Step 2: Determine Launch Approach 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: - **Web app** → start the dev server; the access point is the local URL and port - **Desktop/native app** → build and launch the app so its window is open ## Step 3: Bring Up the Stack Start backend services and frontend together — a frontend-only change still needs the backend running to be exercised. When a service runs at an address other than its default, find the settings elsewhere in the stack that name that default, such as allowed origins and sign-in callback URLs, and bring each in line through runtime overrides, leaving the working tree unchanged: add the new address beside the default in a list, and replace the default only where no process outside this skill reads the setting. 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. Pass `run_in_background` alone, never with a trailing `&`: backgrounding twice reports success within seconds while the servers are either dead with the wrapper or orphaned still holding the port. Confirm each process bound to its port before sending it traffic, since a readiness probe passes just as well against an orphan from an earlier attempt. Capture each process's PID and stop it by that PID and its process group, rather than by port or command-line pattern, which also match a concurrent agent's server. 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. ## Step 4: Point the User at the Running App Output as text: - The access point — the local URL and port for a web app, or confirmation that the window is open for a native app - When the surface sits behind a sign-in, each account to use with its password and the role that account holds, plus every key or code generated while bringing up the stack that the app requests during or after sign-in, such as on a new browser - What changed - Each scenario worth trying, as many as the change needs: numbered steps naming the exact controls and inputs, the result the scenario should produce, and the judgment the user is being asked to make - When a verification pass preceded this hand-over, what it could not cover: paths needing real credentials, external services, or state unavailable in this session ## Step 5: Verdict Gate 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: - **Looks good, keep it running** — leave every process this skill started running so the user can keep using the app. - **Looks good, shut it down** — stop every process this skill started, and revert every override this skill made in a service that keeps running. - **Needs changes** — note what the user wants different, make the change, rebuild or refresh the running app so it is live, then repeat this step's gate. When the user's response or session context surfaces further open issues, resolve every known issue — fixing and re-verifying each — before re-asking the verdict; the gate re-fires only once no known issue remains. Then use the TaskList tool and proceed to any remaining task.
Comments (0)
Sign in to join the conversation.
Reviews (0)
No reviews yet.
No comments yet.