Cloud Development Environment
SkillDev toolsLets your agent set up a cloud development VM and start services for working on this codebase.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Cloud Development Environment skill
About this capability
Cursor Cloud VM setup and service startup instructions for local development
What this skill tells your AI
The instructions your AI receives, as published by elie222/inbox-zero in .claude/skills/cloud-dev-environment/SKILL.md and read by ahel’s review.
Services overview
- Main app (
apps/web): Next.js 16 app (Turbopack). Runs on port 3000. - PostgreSQL 16: Primary database. Runs on port 5432 via
docker-compose.dev.yml. - Redis 7 + serverless-redis-http: Caching/rate-limiting. Redis on port 6380, HTTP proxy on port 8079.
Starting services
- Start Docker daemon if needed:
sudo dockerd &>/dev/null &, then confirm withdocker info(orsudo docker infoif the client cannot reach the daemon yet). - Start databases from repo root:
docker compose -f docker-compose.dev.yml up -d. If you get permission denied on/var/run/docker.sock, run the same command withsudo docker composeinstead of making the socket world-writable. - Run Prisma migrations:
cd apps/web && pnpm prisma:migrate:local(usesdotenv -e .env.local; do NOT use bareprisma migrate dev— it won't load.env.local). - Start dev server:
pnpm devfrom repo root.
Environment file
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_IDandGOOGLE_CLIENT_SECRET— hard-required byenv.tsvalidation. Use Google emulator credentials for local dev (see below).UPSTASH_REDIS_TOKENmust be set todev_tokento match theSRH_TOKENdefault indocker-compose.dev.yml.MICROSOFT_WEBHOOK_CLIENT_STATE— required ifMICROSOFT_CLIENT_IDis set.
Google emulator for local dev
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:4002
Start the emulator: docker compose -f docker-compose.dev.yml --profile google-emulator up -d.
Testing
pnpm testruns Vitest unit/integration tests (no DB or external services required).pnpm lintruns Biome. Pre-existing lint warnings/errors in the repo are expected.- AI tests (
pnpm test-ai) require a real LLM API key and are skipped by default.
Docker in this environment
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:
sudo 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
Onboarding flow
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).
Signals
- GitHub stars
- 12k
- Forks
- 2k
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
cloud-dev-environment- Source
- github.com/elie222/inbox-zero