Spawning an Intern
There are two ways to create a new intern: the Dashboard (recommended) or the CLI.From the Dashboard
Open the Dashboard
Go to intern-dashboard-blush.vercel.app and sign in with your
@lunarsolargroup.com Google account.Click Spawn Intern
Click the Spawn Intern button in the header. Enter a name (lowercase, alphanumeric, hyphens only).The dialog shows a preview of what will be created:
- Slack:
#intern-<name> - URL:
<name>.lunarintern.com - API:
api-<name>.lunarintern.com - App:
app-<name>.lunarintern.com
From the CLI
- Creates private Slack channel
#intern-hotel - Creates Cloudflare tunnel + 3 DNS records
- Creates Linear label
intern:hotel - Registers agent in Supabase
- Generates cloud-init with all secrets
- Creates Hetzner VM from snapshot
- Waits for server to be ready
- Auto-approves OpenClaw device pairing
Output
What Happens on Boot
Cloud-init runs automatically and handles:System Setup
System Setup
- Sets hostname to
intern-<name> - Activates swap (4GB)
- Starts Cloudflare tunnel
- Authenticates GitHub CLI
Repository Setup
Repository Setup
- Fetches latest code for
layerfivecore,l5ui,docs - Resets to default branch
- Applies Angular budget and environment fixes
Secrets & Config
Secrets & Config
- Pulls backend
.envfrom Cloudflare KV - Generates Angular
environment.dev.tswith instance URLs - Writes OpenClaw config with Slack tokens, password, security settings
Docker Stack
Docker Stack
- Starts Postgres, Redis, Mailpit
- Runs Django migrations + seeds database
- Builds Angular frontend
- Starts Nginx to serve the app
OpenClaw & Crons
OpenClaw & Crons
- Installs and starts OpenClaw gateway
- Auto-approves device pairing
- Creates
linear-pollcron (every 5 min) - Creates
pr-reviewcron (every 10 min)
Cost
Each intern runs on a Hetzner CX33 (4 vCPU, 8GB RAM, 80GB disk):| Resource | Cost |
|---|---|
| Server (CX33, Helsinki) | ~€5.99/month |
| Cloudflare Tunnel | Free |
| Claude Code CLI | Included in Claude Team subscription |
| Supabase | Pro plan (shared across all agents) |
.png?fit=max&auto=format&n=Frm2GFbmok4D-yJA&q=85&s=93c3ebd47542af65d1cd06d8563a7f6e)