add-mcp-tools
Guide for adding new MCP tools with consistent patterns for schemas, tool definitions, registry updates, and Better Auth…
Run Studio locally with chats and task runs executing in real Freestyle sandboxes, reachable through an ngrok tunnel. Use when asked to "run locally with Freestyle", "test claude-code chats locally", "run the sandbox harness end to end", or to try daemon/harness-runner changes
$ npx -y skills add decocms/studio --skill run-local-freestyle --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/run-local-freestyleContext preview
The summary Claude sees to decide when to auto-load this skill.
Run Studio locally with chats and task runs executing in real Freestyle sandboxes, reachable through an ngrok tunnel. Use when asked to "run locally with Freestyle", "test claude-code chats locally", "run the sandbox harness end to end", or to try daemon/harness-runner changes
name: run-local-freestyle description: Run Studio locally with chats and task runs executing in real Freestyle sandboxes, reachable through an ngrok tunnel. Use when asked to "run locally with Freestyle", "test claude-code chats locally", "run the sandbox harness end to end", or to try daemon/harness-runner changes in a real sandbox.
Freestyle VMs call back into Studio (the `studio` MCP, org-fs), so a local Studio needs a public URL. The browser must use that same URL: auth trusts only `BASE_URL`.
ngrok http 4000 URL=$(curl -s localhost:4040/api/tunnels | grep -o '"public_url":"https[^"]*' | cut -d'"' -f4)
KUBECONFIG=/dev/null \ STUDIO_AGENT_SANDBOX_ENABLED=true \ STUDIO_SANDBOX_FREESTYLE_SHARE=1 \ STUDIO_PUBLIC_URL=$URL MESH_PUBLIC_URL=$URL \ __VITE_ADDITIONAL_SERVER_ALLOWED_HOSTS=.ngrok-free.app \ bun run dev --base-url $URL --no-tui
Freestyle runs `ghcr.io/decocms/studio/studio-sandbox-go:<packages/sandbox version>` by default. To run local daemon or runner code, overlay it on that image:
O=$(mktemp -d); mkdir $O/runner (cd packages/sandbox/daemon-go && CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -trimpath -ldflags="-s -w" -o $O/daemon-go .) cp packages/harness-runner/package.json $O/runner/ for f in packages/harness-runner/*.ts; do [[ $f == *.test.ts ]] || cp "$f" $O/runner/; done cat > $O/Dockerfile <<'EOF' FROM ghcr.io/decocms/studio/studio-sandbox-go:<version> COPY --chown=sandbox:sandbox daemon-go /opt/sandbox-daemon/daemon-go COPY --chown=sandbox:sandbox --chmod=755 runner/ /usr/local/lib/node_modules/@decocms/harness-runner/ EOF TAG=ttl.sh/studio-sandbox-$(uuidgen | tr A-Z a-z | cut -c1-12):24h docker buildx build --platform linux/amd64 -t $TAG --load $O && docker push $TAG
Then add `STUDIO_SANDBOX_FREESTYLE_IMAGE=$TAG` to the start command.
The first sandbox for an image builds a base snapshot (about 2 minutes). Build it before you chat:
cd packages/sandbox && bun --env-file=../../.env -e '
const { FreestyleSandboxProvider } = await import("./server/provider/freestyle.ts");
const p = new FreestyleSandboxProvider({ apiKey: process.env.FREESTYLE_API_KEY, image: process.env.IMAGE });
await p.warm(); p.close(); process.exit(0)'Set `IMAGE` to the image Studio runs (your `$TAG`, or the default above).
Turn on **Settings → General → Code Agents → "Run every chat with Claude Code in its own sandbox"** (`chat_harness_sandbox_only`). A chat that already has a sandbox keeps its image; start a new chat after changing images.
Stop `bun run dev` and ngrok. Freestyle VMs pause after 5 minutes idle and are deleted after a day; `ttl.sh` images expire with their tag.
Open-source control plane for your AI agents. Connect tools, hire agents, track every token and dollar
Guide for adding new MCP tools with consistent patterns for schemas, tool definitions, registry updates, and Better Auth…
Prepare code for review by running quality checks, creating conventional commits, and opening pull requests. Use when the user…
Operate the user's deco Studio (decocms) organization from the terminal with their own login. Use when the user asks to read or…
Create and maintain an org's brand as a folder the whole platform reads: colors, type, voice, logo and a deck theme. Use this…
Read and extract text, tables, and structure from .docx Word documents. Use when the user uploads or references a Word file to…
Route a file to the right reader by extension (pptx, docx, xlsx, pdf, and plain text). Use as the entry point when asked to read…