Skip to main content
Getting startedPackerPulumiManaged tiers

Golden host images (managed tiers)

Provision ClawQL-ready servers with team agent context loaded at boot — for AWS, GCP, and Cloudflare managed offerings.

User model: pick providers and team bucket. ClawQL handles connection routing internally. You only need search and execute after boot.

What you get

ComponentBake time (image)Boot time (runtime)
ClawQL + Node 22Yes
~/.ClawQL skeletonYes
sync.json (bucket/prefix)Template onlyOverridden from metadata/env
Sync credentialsNeverInjected (Vault, instance role, secrets manager)
Team Memory/ notesclawql sync pull
SHA-256 verificationEvery pulled file vs manifest
Health gateclawql doctor (bake)clawql doctor --smoke (boot)

Quick start (operators)

1. Build or promote a golden image

cd packer
packer init .
packer build -only=aws-ami.amazon-ebs.clawql -var 'clawql_version=7.0.0' .

See packer/README.md for GCP and CI validate targets.

2. Provision infrastructure (Pulumi)

Packer produces the artifact (AMI/GCP image). Pulumi provisions the VM, IAM, and boot user-data that references your tier sync prefix.

cd infra/pulumi
npm ci
pulumi stack init dev
pulumi config set clawql:cloud aws
pulumi config set clawql:tier dedicated
pulumi config set clawql:tenantId acme
pulumi config set clawql:syncBucket acme-clawql-team
pulumi config set clawql:goldenImageId ami-xxxxxxxx   # Packer output
pulumi preview   # or pulumi up — requires cloud credentials

See infra/pulumi/README.md and ADR 0007. State lives on self-hosted R2 or S3 — not Pulumi Cloud.

3. Launch with boot-time seeding

Set instance user-data / startup script to run:

export CLAWQL_SYNC_BUCKET=acme-clawql-team
export CLAWQL_SYNC_PREFIX=teams/production/
export CLAWQL_R2_ACCOUNT_ID=...
export CLAWQL_SYNC_ACCESS_KEY_ID=...
export CLAWQL_SYNC_SECRET_ACCESS_KEY=...
/usr/local/bin/bootstrap-team-vault.sh   # installed on golden images at bake time

Or use the repo script path: scripts/packer/bootstrap-team-vault.sh.

4. Verify

clawql doctor --smoke
clawql sync status

Tier seeding

TierConfiguration
SharedCLAWQL_SYNC_PREFIX=shared/
DedicatedCLAWQL_SYNC_PREFIX=tenant/<tenant-id>/
EnterpriseCustomer-owned bucket; same image, their credentials

Cloudflare managed tier

Workers and containers do not use AMIs. Run scripts/packer/cloudflare-bootstrap.sh on first invocation — same pull + verify + doctor gate against verified R2 state.

Kubernetes parity

In-cluster MCP uses Helm teamSync (autoPullOnStart, autoPull) — same semantics as golden-host boot. See team-vault-sync.md.

CI and releases

  • PR / main: scripts/packer/test-golden-host-scripts.sh (ShellCheck + packer validate)
  • PR / main: scripts/pulumi/test-provision-unit.sh (tier/user-data unit tests + TS build)
  • Release: .github/workflows/packer-publish.yml — matrix AWS/GCP on dispatch; docker validate on every run