Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Cursor Cloud VM setup and service startup instructions for local development
.claude/skills/elie222-cloud-dev-environment/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 68% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -36% | 0% |
| case-06 | ✗→✓ | ▲ Improved | -22% | 0% |
| case-07 | ✗→✓ | ▲ Improved | -11% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 10% | 0% |
apps/web): Next.js 16 app (Turbopack). Runs on port 3000.docker-compose.dev.yml.sudo dockerd &>/dev/null &, then confirm with docker info (or sudo docker info if the client cannot reach the daemon yet).docker compose -f docker-compose.dev.yml up -d. If you get permission denied on /var/run/docker.sock, run the same command with sudo docker compose instead of making the socket world-writable.cd apps/web && pnpm prisma:migrate:local (uses dotenv -e .env.local; do NOT use bare prisma migrate dev — it won't load .env.local).pnpm dev from repo root.The app reads apps/web/.env.local. Required non-obvious env vars beyond .env.example defaults:
DEFAULT_LLMS (e.g. openai:gpt-5.4-mini) — app crashes at startup without this.GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET — hard-required by env.ts validation. Use Google emulator credentials for local dev (see below).UPSTASH_REDIS_TOKEN must be set to dev_token to match the SRH_TOKEN default in docker-compose.dev.yml.MICROSOFT_WEBHOOK_CLIENT_STATE — required if MICROSOFT_CLIENT_ID is set.Use the Google emulator instead of real OAuth credentials:
GOOGLE_CLIENT_ID=emulate-google-client.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=emulate-google-secret
GOOGLE_BASE_URL=http://localhost:4002Start the emulator: docker compose -f docker-compose.dev.yml --profile google-emulator up -d.
pnpm test runs Vitest unit/integration tests (no DB or external services required).pnpm lint runs Biome. Pre-existing lint warnings/errors in the repo are expected.pnpm test-ai) require a real LLM API key and are skipped by default.The cloud VM is a Docker-in-Docker setup. Docker requires fuse-overlayfs storage driver and iptables-legacy. These are configured during initial setup. After snapshot restore, run sudo dockerd &>/dev/null & if Docker daemon is not running.
The VM may not have the Docker Compose v2 plugin pre-installed. If docker compose version fails, install it:
bashsudo mkdir -p /usr/local/lib/docker/cli-plugins sudo curl -fsSL https://github.com/docker/compose/releases/download/v2.29.2/docker-compose-linux-x86_64 -o /usr/local/lib/docker/cli-plugins/docker-compose sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
After a fresh login via the Google emulator, the app forces an onboarding wizard. Some onboarding buttons require JavaScript click() calls rather than standard browser clicks (React event delegation quirk in headless/automation contexts).
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 11,581 | 41,590 | +259% | 1 | 1 | 0% | 1,958 | 3,296 | +68% | 0 | 0 | — |
case-02 | fail→fail | 12,869 | 6,659 | -48% | 1 | 1 | 0% | 2,382 | 2,095 | -12% | 0 | 0 | — |
case-03 | fail→fail | 3,331 | 3,010 | -10% | 1 | 1 | 0% | 605 | 1,358 | +124% | 0 | 0 | — |
case-04 | fail→pass | 12,506 | 4,234 | -66% | 1 | 1 | 0% | 2,293 | 1,473 | -36% | 0 | 0 | — |
case-05 | fail→fail | 9,113 | 8,654 | -5% | 1 | 1 | 0% | 1,571 | 2,313 | +47% | 0 | 0 | — |
case-06 | fail→pass | 10,034 | 2,829 | -72% | 1 | 1 | 0% | 1,694 | 1,323 | -22% | 0 | 0 | — |
case-07 | fail→pass | 9,392 | 2,630 | -72% | 1 | 1 | 0% | 1,402 | 1,245 | -11% | 0 | 0 | — |
case-08 | fail→pass | 10,009 | 4,694 | -53% | 1 | 1 | 0% | 1,654 | 1,826 | +10% | 0 | 0 | — |
case-13 | pass→pass | 12,131 | 3,275 | -73% | 1 | 1 | 0% | 1,773 | 1,377 | -22% | 0 | 0 | — |
case-09 | fail→pass | 11,976 | 2,060 | -83% | 1 | 1 | 0% | 2,144 | 1,183 | -45% | 0 | 0 | — |
case-10 | fail→fail | 11,909 | 2,048 | -83% | 1 | 1 | 0% | 1,971 | 1,177 | -40% | 0 | 0 | — |
case-11 | fail→fail | 10,286 | 4,474 | -57% | 1 | 1 | 0% | 1,811 | 1,091 | -40% | 0 | 0 | — |
case-12 | fail→pass | 10,480 | 3,227 | -69% | 1 | 1 | 0% | 1,718 | 1,358 | -21% | 0 | 0 | — |
case-14 | pass→fail | 11,522 | 5,182 | -55% | 1 | 1 | 0% | 1,898 | 1,039 | -45% | 0 | 0 | — |
case-15 | fail→fail | 20,658 | 2,584 | -87% | 1 | 1 | 0% | 3,376 | 1,235 | -63% | 0 | 0 | — |
case-16 | pass→pass | 13,625 | 4,448 | -67% | 1 | 1 | 0% | 2,022 | 1,496 | -26% | 0 | 0 | — |
case-17 | fail→fail | 15,771 | 5,381 | -66% | 1 | 1 | 0% | 2,532 | 1,191 | -53% | 0 | 0 | — |
case-18 | fail→pass | 7,348 | 2,065 | -72% | 1 | 1 | 0% | 1,297 | 1,219 | -6% | 0 | 0 | — |
case-19 | pass→pass | 6,425 | 2,229 | -65% | 1 | 1 | 0% | 1,197 | 1,149 | -4% | 0 | 0 | — |
case-20 | fail→pass | 9,134 | 2,044 | -78% | 1 | 1 | 0% | 1,561 | 1,160 | -26% | 0 | 0 | — |
case-21 | fail→fail | 19,157 | 2,392 | -88% | 1 | 1 | 0% | 1,872 | 1,267 | -32% | 0 | 0 | — |
case-22 | pass→pass | 9,460 | 4,941 | -48% | 1 | 1 | 0% | 1,294 | 1,749 | +35% | 0 | 0 | — |
case-23 | pass→fail | 16,116 | 4,731 | -71% | 1 | 1 | 0% | 3,156 | 1,115 | -65% | 0 | 0 | — |
case-24 | pass→pass | 12,792 | 8,453 | -34% | 1 | 1 | 0% | 2,092 | 2,572 | +23% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 24 cases were attempted, and 20 counted toward the lift figure. The other 4 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +29 percentage points is the difference between those two pass rates over the 20 comparable cases. 3 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.