Stunt Double Studio: cloud
Push a Stunt Double Studio checklist and its actor to a Stunt Double workspace with /stuntdouble:cloud <checklist>, run it there with an independent judge.
/stuntdouble:cloud <checklist>, one of the Studio skills (/stuntdouble:setup, /stuntdouble:run, /stuntdouble:open, /stuntdouble:cloud and /stuntdouble:doctor). It moves a local checklist to the hosted stuntdouble server's tools unchanged.
The .stuntdouble/ file format is in the setup skill's files.md (../setup/files.md from this skill's folder): read it before writing back ids or a run.
- Disclose: the push uploads the persona, the checklist and the target URL to Stunt Double, and Free-plan cloud runs may go into the research corpus. Go on only with consent.
- Sign in:
list_workspaces(). On first use Claude Code shows the hosted connector's Connect card (an emailed code or Google). The local package never holds a Stunt Double token. Pick the workspace (ask if there are several) and writeworkspace_idandworkspace_slugtostuntdouble.json. - Fix the target: the cloud cannot reach localhost. If
urlis local, ask for a public or preview URL, write it tourland move the local origin tolocal_base_url, so local runs keep using it. Or explain that devices on the Startup plan reach private targets. - Push the definitions, reusing cloud ids already in the files, else
search(workspace_id, query)first:- Project:
create_project(workspace_id, name, url). - Actor:
create_actor(workspace_id, name, description),update_actor(actor_id, system_prompt), thenadd_actor_knowledge(actor_id, title, content, kind)per entry. With anactor_id,update_actorinstead and add only the entrieslist_actor_knowledgelacks by title. - Checklist:
create_checklist(workspace_id, project_id, name, actor_id, instructions, url, checks), plus each ofpass_threshold,score_type,score_unit,score_bands,run_modeandrecord_sessionthe file sets, sending the checks in file order withoutkeyorcloud. With achecklist_id,update_checklist(checklist_id, ...)with the same fields and each check'sidfromcheck_ids. - If the checklist sets
browser_config, say so before the run: no hosted input or dashboard setting takes it yet, so the cloud run uses the default 1280 x 720 desktop browser, and a check about a phone layout, touch or a locale can pass there and fail locally.
- Project:
- Write ids back after every call:
project_id,actor_idandchecklist_idinto their files, thenget_checklist(checklist_id)to fillcheck_idsas{key: id}in order. A retry or a teammate then updates rather than duplicating. - Run:
run_checklist(checklist_id), then pollget_checklist_run(run_id)every 30 to 60 seconds untilstatusiscompletedorfailed. Writeruns/<YYYYMMDD-HHMMSS>-<checklist>-cloud/run.jsonin the local run's shape, so the viewer lists it beside local runs:format: "stuntdouble.run/1",id(the folder name),runner: {kind: "cloud", run_id, judged: true, url}withurlthe dashboard linkhttps://app.stuntdouble.io/w/<workspace_slug>/checklists/<checklist_id>/runs/<run_id>,status, the checklisturl,started_at(itsstarted_at, elsecreated_at),finished_at(itscompleted_at), thechecklistandactorslugs,checklist_snapshot(the checklist file withoutcloud),resultsas{check: <key from check_ids>, status, evidence, at: <evaluated_at>},score: {score, unit: <score_unit>, outcome, pass_threshold: <get_checklist's pass_threshold, or null with no weighted checks>, grade: null}(ornullwith no outcome),summaryandcloud: null. Report as/stuntdouble:runreports a local run, with the dashboard link. - Relay refusals: a plan limit (the Free plan's 2 actors or 60 compute minutes) comes back as text. Relay it as written with
https://app.stuntdouble.io/w/<workspace_slug>/settings/billing, never work around it, and offer the local run.