npx claudepluginhub vm0-ai/team-skills --plugin dev-serverThis skill uses the workspace's default tool permissions.
Full development environment setup with Cloudflare tunnel and CLI authentication. Useful for webhook testing.
Creates isolated Git worktrees for feature branches with prioritized directory selection, gitignore safety checks, auto project setup for Node/Python/Rust/Go, and baseline verification.
Executes implementation plans in current session by dispatching fresh subagents per independent task, with two-stage reviews: spec compliance then code quality.
Dispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
Full development environment setup with Cloudflare tunnel and CLI authentication. Useful for webhook testing.
Note: Since issue #1726, the web app automatically starts a Cloudflare tunnel when running pnpm dev. This operation is useful when you need the complete setup including CLI authentication.
PROJECT_ROOT=$(git rev-parse --show-toplevel)
cd "$PROJECT_ROOT/turbo" && pnpm install
PROJECT_ROOT=$(git rev-parse --show-toplevel)
cd "$PROJECT_ROOT/turbo" && pnpm build
Use Bash tool with run_in_background: true for both commands in parallel (two separate Bash calls in the same message):
Dev server (use tee to persist logs for /dev-logs after context compaction):
PROJECT_ROOT=$(git rev-parse --show-toplevel)
cd "$PROJECT_ROOT/turbo" && pnpm dev 2>&1 | tee "$PROJECT_ROOT/turbo/.dev-server.log"
Runner:
PROJECT_ROOT=$(git rev-parse --show-toplevel)
cd "$PROJECT_ROOT/turbo" && pnpm runner
Both return a task_id for monitoring. The web app will automatically start a Cloudflare tunnel. The runner takes several minutes to initialize but doesn't block the app — only chat/agent features need it.
Use TaskOutput with the task_id from Step 3 to monitor the background task output. Look for:
[tunnel] Tunnel URL: followed by the URLReady in (Next.js ready message)Poll TaskOutput every few seconds until the tunnel URL appears (up to ~60 seconds). Extract the tunnel URL (format: https://*.trycloudflare.com).
If the tunnel URL does not appear within ~60 seconds, report the failure and let the user investigate.
export VM0_API_URL=<tunnel-url>
PROJECT_ROOT=$(git rev-parse --show-toplevel)
cd "$PROJECT_ROOT/e2e" && pnpm install
PROJECT_ROOT=$(git rev-parse --show-toplevel)
cd "$PROJECT_ROOT/e2e" && npx playwright install chromium
PROJECT_ROOT=$(git rev-parse --show-toplevel)
cd "$PROJECT_ROOT/turbo/apps/cli" && pnpm link --global
Read Clerk credentials from turbo/apps/web/.env.local:
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY → CLERK_PUBLISHABLE_KEYCLERK_SECRET_KEY → CLERK_SECRET_KEYThen run:
PROJECT_ROOT=$(git rev-parse --show-toplevel)
cd "$PROJECT_ROOT/e2e" && \
CLERK_PUBLISHABLE_KEY=<publishable-key> \
CLERK_SECRET_KEY=<secret-key> \
npx tsx cli-auth-automation.ts $(printenv VM0_API_URL)
cat ~/.vm0/config.json
✅ Dev server with tunnel started!
🔧 Runner deployment started in background (takes several minutes)
Local: http://localhost:3000
Tunnel: <tunnel-url>
VM0_API_URL exported to: <tunnel-url>
✅ CLI authentication successful!
Auth token saved to: ~/.vm0/config.json
The app is usable now. Chat/agent features will become available once the runner finishes initializing.
Use `/dev-stop` to stop the server.
The web app's dev script (turbo/apps/web/scripts/dev.sh):
cloudflaredVM0_API_URL environment variableIf tunnel fails to start:
cloudflared is installedtail -f /tmp/cloudflared-dev.logIf authentication fails:
/dev-logsturbo/apps/web/.env.local