Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions content/docs/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,11 @@ Each name links to its definition in **[Core concepts](/concepts)**.
description: "How well AI agents can use a website: the public ranking and how to raise a score.",
href: "/index-ranking",
},
{
title: "Stunt Double Studio",
description: "The free local app: run a checklist in your own Chrome, from your coding agent.",
href: "/studio",
},
{
title: "MCP server",
description: "Endpoint, clients, scopes, and every tool, prompt and resource.",
Expand Down
2 changes: 1 addition & 1 deletion content/docs/mcp/connect.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ icon: "plug"
description: "Set up a client from Integrations in your workspace, pick the right MCP endpoint, and see or revoke what a connection can do."
---

Every client connects to the same server and signs in with OAuth the first time it needs your account. No API keys. This page covers what the Stunt Double app does for you and the endpoints on offer; the [client pages](/mcp/clients/claude-code) cover each client's own setup, sign-in and troubleshooting.
Every client connects to the same server and signs in with OAuth the first time it needs your account. No API keys. This page covers what the Stunt Double app does for you and the endpoints on offer; the [client pages](/mcp/clients/claude-code) cover each client's own setup, sign-in and troubleshooting. This hosted server is where cloud runs happen; to run a checklist on your own machine with no account, see [Stunt Double Studio](/studio).

## From Integrations in your workspace

Expand Down
1 change: 1 addition & 0 deletions content/docs/meta.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
"---Agent readiness---",
"index-ranking",
"---Extend and integrate---",
"studio",
"mcp",
"...api",
"stuntkit",
Expand Down
85 changes: 85 additions & 0 deletions content/docs/studio/cloud-runs.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
---
title: "Cloud runs"
icon: "automation"
description: "Move a Studio checklist to a Stunt Double workspace with /stuntdouble cloud for parallel, scheduled and independently judged runs."
---

# Cloud runs

Studio answers "did I break this?" on your machine. Cloud runs keep
answering it after you've moved on: on every deploy, every pull request and
every night, with nobody watching.

Cloud runs are the paid step, on the hosted MCP server the Claude Code plugin
also installs. They add:

- **Parallel, unattended and scheduled runs** in hosted browsers.
- **Triggers** on deploys, pull requests and Figma changes.
- **An independent judge**, so the agent that went through the flow doesn't
grade its own work.
- **Interviews, design reviews and feedback triage.**
- **Index scoring** from the [Stunt Double Index](/index-ranking).
- **Team sharing**, plus [Slack](/integrations/slack),
[Linear](/integrations/linear) and [GitHub](/integrations/github).

## Move a checklist to the cloud

```text
/stuntdouble cloud <checklist>
```

<Steps>
<Step>

### Agree to the upload

Studio tells you what leaves your machine: the actor, the checklist and its
URL. Cloud runs on the Free plan may go into the research corpus. It goes on
only when you agree.

</Step>
<Step>

### Sign in and pick a workspace

The first time, Claude Code shows the hosted server's sign-in: a code sent to
your email, or Google. Pick a workspace, and Studio saves it in
`stuntdouble.json`.

</Step>
<Step>

### Give it a URL the cloud can reach

Hosted browsers can't reach your `localhost`. If the checklist points at a
local URL, Studio asks for a public or preview URL, writes it to the
checklist, and moves the local origin to `local_base_url` so your local runs
keep using it. On the Startup plan and above, a
[device](/integrations/self-hosted-workers) can reach private sites instead.

</Step>
<Step>

### Push and run

Studio creates or updates the project, actor and checklist in your workspace,
writes their cloud ids back into your files, and starts a run. Running the
command again updates the same checklist instead of making a copy.

The result lands in `runs/` beside your local runs, so the
[viewer](/studio/viewer) lists both, with a link to the run in the dashboard.

</Step>
</Steps>

<Callout variant="note" title="Plans">
Cloud runs need a Stunt Double plan. The Free plan includes 60 compute
minutes a month and 2 actors. Hobby, Startup, Pro and Enterprise add more.
See [pricing](https://www.stuntdouble.io/pricing). If a run would go past
your plan's limit, Studio tells you and offers a local run instead.
</Callout>

## Next

- [Re-check every deploy automatically](/tutorials/building-workflows)
- [MCP server](/mcp): every tool the hosted server offers
56 changes: 56 additions & 0 deletions content/docs/studio/files-and-commands.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
---
title: "Files and commands"
icon: "code"
description: "What Studio keeps in .stuntdouble/, which files to commit, and every /stuntdouble command and CLI command."
---

# Files and commands

## The files

Everything lives in `.stuntdouble/` at the project root. Commit all of it
except `.live/`, which setup adds to `.gitignore`.

| Path | What it holds |
| --- | --- |
| `stuntdouble.json` | Project settings: `local_base_url`, `headless`, and the workspace a cloud push goes to |
| `actors/<slug>.json` | One actor: name, description, instructions and knowledge |
| `checklists/<slug>.json` | One checklist: its actor, URL, instructions and checks |
| `runs/<stamp>-<checklist>/` | One run: `run.json`, `activity.jsonl` and `shots/` |
| `.live/` | The state of a run in progress. Not committed |

Actors and checklists use the same fields as the hosted server, with slugs in
place of ids, so a [cloud push](/studio/cloud-runs) sends them unchanged. Each
check has a `key` that never changes, since verdicts and cloud ids follow it.

Studio writes the `runs/` folders. Don't edit them by hand.

<Callout variant="note" title="Test accounts only">
Actor knowledge can hold a login for the actor to use. These files are
committed, so put only test accounts in them, never real credentials.
Screenshots in `runs/` are committed too and can hold personal data, so
test with accounts that hold none.
</Callout>

## Commands in Claude Code

| Command | What it does |
| --- | --- |
| `/stuntdouble setup` | Checks your machine, then writes an actor and a checklist for this project |
| `/stuntdouble run <checklist>` | Runs a checklist in your local Chrome |
| `/stuntdouble run <checklist> resume` | Carries on a run that stopped before it finished |
| `/stuntdouble open` | Opens the viewer |
| `/stuntdouble cloud <checklist>` | Moves a checklist to a workspace and starts a [cloud run](/studio/cloud-runs) |
| `/stuntdouble doctor` | Checks Node, Chrome, the viewer port and how local runs are billed |

## The CLI

The `stuntdouble` package takes three commands:

```sh
npx -y stuntdouble mcp # the local MCP server over stdio (your agent starts this)
npx stuntdouble view # the viewer over this folder's .stuntdouble/
npx -y stuntdouble doctor # check Node, Chrome, the viewer port and billing
```

`view` also takes a folder: `npx stuntdouble view path/to/project`.
111 changes: 111 additions & 0 deletions content/docs/studio/index.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
---
title: "Overview"
icon: "run"
description: "Stunt Double Studio is the free local app: run a checklist in Chrome on your own machine, from your coding agent, and keep every run as files in your project."
---

# Stunt Double Studio

Check your change before you push it. Studio runs a Stunt Double checklist in
a Chrome on your own machine, from the coding agent session you already have
open. Point it at localhost, staging or production. An actor goes through the
flow, judges each check and leaves the evidence in your project.

<PageFacts
items={[
{ label: "Price", value: "Free" },
{ label: "Account", value: "None needed" },
{ label: "You need", value: "Node 22.18 or later and Google Chrome (or Playwright's Chromium)" },
]}
/>

## What you get

- **Runs on your machine.** The actor drives a local Chrome, so it reaches
`localhost`, a staging site behind your VPN, or production.
- **Runs on your existing subscription.** Your coding agent is the actor, so
local runs use your Claude plan (or your API key, if Claude Code uses one).
Stunt Double makes no model calls for local runs.
- **Runs are files.** Actors, checklists and every run live in
`.stuntdouble/` in your project. Commit them, review them in a pull
request, and share them with your team like any other file.
- **A viewer for the evidence.** A local page shows each check's verdict, the
screenshots and the activity log as the run happens, with a button to stop
it.

## Start here

```sh
claude plugin marketplace add stunt-double/stuntdouble-mcp
claude plugin install stuntdouble@stuntdouble
```

Then, in Claude Code:

```text
/stuntdouble setup
/stuntdouble run <checklist>
```

[Install and set up](/studio/install) covers each step and other agents.

## Studio and cloud runs

Studio verdicts are self-judged: the same agent that went through the flow
decides whether each check passed. When you need more, a
[cloud run](/studio/cloud-runs) on the hosted server adds an independent
judge, runs in parallel and on a schedule, and triggers on deploys, pull
requests and Figma changes. `/stuntdouble cloud <checklist>` moves a local
checklist to a workspace with the same actor and checks. A localhost URL
needs a public or preview URL for the cloud.

| | Studio | Cloud runs |
| --- | --- | --- |
| Where the browser runs | Chrome on your machine | Hosted browsers |
| Who pays for the model | Your Claude plan or API key | Your Stunt Double plan |
| Account | None | A Stunt Double workspace |
| Verdicts | Self-judged by your agent | Independent judge |
| When it runs | When you ask | On demand, on a schedule or on a trigger |

## In this section

<CardGrid
items={[
{
icon: "rocket",
title: "Install and set up",
description: "Add the plugin, check your machine and write your first checklist.",
href: "/studio/install",
},
{
icon: "checklist",
title: "Run a checklist",
description: "Start a run, resume one, and read the result.",
href: "/studio/run-checklists",
},
{
icon: "monitor",
title: "The viewer",
description: "Watch a run, read the evidence and stop a run early.",
href: "/studio/viewer",
},
{
icon: "code",
title: "Files and commands",
description: "What lives in .stuntdouble/ and every command Studio takes.",
href: "/studio/files-and-commands",
},
{
icon: "automation",
title: "Cloud runs",
description: "Move a checklist to a workspace for scheduled, judged runs.",
href: "/studio/cloud-runs",
},
{
icon: "terminal",
title: "Troubleshooting",
description: "Doctor, Node, Chrome, the viewer port and billing.",
href: "/studio/troubleshooting",
},
]}
/>
95 changes: 95 additions & 0 deletions content/docs/studio/install.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
---
title: "Install and set up"
icon: "rocket"
description: "Install Stunt Double Studio in Claude Code or any MCP client, check your machine with doctor, and write your first actor and checklist."
---

# Install and set up

Install the plugin once, then set up each project you want to test.

## Before you start

- **Node 22.18 or later.** Check with `node --version`.
- **Google Chrome.** Or Playwright's Chromium, if you'd rather not install
Chrome (`npx playwright install chromium`).
- **A coding agent.** Claude Code gets the full plugin: the local app, the
`/stuntdouble` commands and the [cloud runs](/studio/cloud-runs) server.

## Install in Claude Code

<Steps>
<Step>

### Add the plugin

```sh
claude plugin marketplace add stunt-double/stuntdouble-mcp
claude plugin install stuntdouble@stuntdouble
```

Plugins load when a session starts, so start a new Claude Code session after
installing.

</Step>
<Step>

### Set up your project

Open Claude Code in your project folder and run:

```text
/stuntdouble setup
```

Setup runs [doctor](/studio/troubleshooting#doctor) first and tells you how
local runs are billed. It then asks for three things:

- the URL to test (localhost is fine),
- who the user is,
- what must be true when they're done.

From your answers it writes `.stuntdouble/` with an actor, a checklist of 3 to
8 checks and a `.gitignore`. See [files and commands](/studio/files-and-commands)
for what each file holds.

</Step>
<Step>

### Run it

```text
/stuntdouble run <checklist>
```

Replace `<checklist>` with the checklist's file name, without `.json`.
[Run a checklist](/studio/run-checklists) explains what happens next.

</Step>
</Steps>

<Callout variant="tip" title="Skip the prompt on every browser action">
Setup offers to allow Studio's browser tools for this project, so Claude Code
stops asking before each click. It adds the permission to
`.claude/settings.local.json` only if you agree.
</Callout>

## Other agents

Any MCP client can start the local server over stdio:

```sh
npx -y stuntdouble mcp
```

Add that command as a stdio server in your client's MCP settings. The
`/stuntdouble` commands are Claude Code plugin commands, so in other clients
ask your agent to set up and run a checklist in plain words.

The package is [`stuntdouble` on npm](https://www.npmjs.com/package/stuntdouble),
under the Apache-2.0 license.

## No account needed

Studio never asks you to sign in. You only need a Stunt Double account when you
move a checklist to [cloud runs](/studio/cloud-runs).
5 changes: 5 additions & 0 deletions content/docs/studio/meta.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"title": "Stunt Double Studio",
"icon": "run",
"pages": ["index", "install", "run-checklists", "viewer", "files-and-commands", "cloud-runs", "troubleshooting"]
}
Loading
Loading