Skip to main content

Spawning an Intern

There are two ways to create a new intern: the Dashboard (recommended) or the CLI.

From the Dashboard

1

Open the Dashboard

Go to intern-dashboard-blush.vercel.app and sign in with your @lunarsolargroup.com Google account.
2

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
3

Wait for Provisioning

The spawn takes ~5 minutes. You’ll see the agent appear in the dashboard with status provisioning, then ready.The intern’s Slack channel will receive a message when it’s online.
Names must be unique. The dashboard checks for existing agents and shows an error if the name is taken.

From the CLI

Example:
This runs the full spawn sequence:
  1. Creates private Slack channel #intern-hotel
  2. Creates Cloudflare tunnel + 3 DNS records
  3. Creates Linear label intern:hotel
  4. Registers agent in Supabase
  5. Generates cloud-init with all secrets
  6. Creates Hetzner VM from snapshot
  7. Waits for server to be ready
  8. Auto-approves OpenClaw device pairing

Output

What Happens on Boot

Cloud-init runs automatically and handles:
  • Sets hostname to intern-<name>
  • Activates swap (4GB)
  • Starts Cloudflare tunnel
  • Authenticates GitHub CLI
  • Fetches latest code for layerfivecore, l5ui, docs
  • Resets to default branch
  • Applies Angular budget and environment fixes
  • Pulls backend .env from Cloudflare KV
  • Generates Angular environment.dev.ts with instance URLs
  • Writes OpenClaw config with Slack tokens, password, security settings
  • Starts Postgres, Redis, Mailpit
  • Runs Django migrations + seeds database
  • Builds Angular frontend
  • Starts Nginx to serve the app
  • Installs and starts OpenClaw gateway
  • Auto-approves device pairing
  • Creates linear-poll cron (every 5 min)
  • Creates pr-review cron (every 10 min)

Cost

Each intern runs on a Hetzner CX33 (4 vCPU, 8GB RAM, 80GB disk):

Destroying an Intern

This deletes the Hetzner server and Cloudflare tunnel + DNS records. The Linear label is preserved for audit trail.