docker compose logs for the failing service.UI & access
UI keeps showing onboarding / 'no active workspace'
UI keeps showing onboarding / 'no active workspace'
http://localhost:3000 and get sent back to onboarding even though you already connected Supabase.Why it happensThe UI reads Supabase config from the workspace registry stored in the ui-config Docker volume. The registry is empty, unreadable, or was cleared when volumes were recreated.FixCheck the UI logs first:ui-config volume. If you intentionally reset volumes, this is expected. Supabase config is runtime-injected — rebuilding the UI image is not required.Login fails silently or 'Invalid API key'
Login fails silently or 'Invalid API key'
Invalid API key / Invalid login credentials.Why it happensEither (a) the anon key in the UI doesn’t match the Supabase project you’re pointing at, or (b) you never created an auth user in Supabase. A fresh Supabase project has zero users.Fix- In Supabase → Project Settings → API, confirm
Project URLandanon publicmatch what you entered in HQ Settings → Database. - In Supabase → Authentication → Users → Add user → Create new user, create an email + password. Check Auto Confirm User.
- Log in with those credentials.
Onboarding wizard returns a 500
Onboarding wizard returns a 500
docker compose logs ui shows Origin mismatch or CSRF error.Why it happensNext.js server actions enforce that the Origin header matches the host. When you access HQ through a proxy, Tailscale IP, or Codespaces forwarded URL, the origin doesn’t match localhost and the action is rejected.FixSet ALLOWED_ORIGINS in ~/.yourhq/.env to the exact origin you’re loading the UI from:CODESPACE_NAME is in the environment. If you’re using a VS Code tunnel, set it manually.'Site can't be reached' from another device on the tailnet
'Site can't be reached' from another device on the tailnet
http://localhost:3000 on the host but times out from your phone or another laptop at http://100.x.y.z:3000.Why it happensLocal-only installs bind the UI to 127.0.0.1:3000. Docker publishes the port on loopback only — the tailnet can’t reach it.FixEdit ~/.yourhq/.env:'pull access denied' for ghcr.io/yourhq/* images
'pull access denied' for ghcr.io/yourhq/* images
read:packages scope, then log in:Gateway & containers
Gateway container keeps restarting
Gateway container keeps restarting
openclaw onboard, Xtigervnc, D-Bus, XFCE, websockify. Any step failing exits non-zero and Docker loops.FixTail the logs and find the last step that ran:openclaw onboardexits non-zero — usually a badSUPABASE_SERVICE_ROLE_KEYor Node version mismatch. Check:docker compose exec gateway node --version(must be v24.x). Re-confirm the service role key in Supabase → Settings → API.- Xtigervnc won’t start (stale lock files) — clear the state volume:
docker compose down && docker volume rm yourhq-gateway-state && docker compose up -d gateway. - D-Bus socket never appeared — force recreate:
docker compose up -d --force-recreate gateway.
noVNC shows a black screen
noVNC shows a black screen
http://<host>:6901/vnc.html, click Connect — a black viewport with no cursor, no desktop.Why it happensXtigervnc is up, but the XFCE session died. Almost always a D-Bus socket issue — XFCE won’t start xfwm or xfce4-panel without a session bus.FixCheck the logs inside the gateway:noVNC websockify.log shows 'Cannot assign requested address'
noVNC websockify.log shows 'Cannot assign requested address'
~/.vnc/websockify.log ends with:0.0.0.0 and 127.0.0.1.FixEnsure .env has:NOVNC_BIND=local makes websockify bind to 0.0.0.0:6901 inside the container. Port 6901 is not mapped to the host — the UI proxies noVNC through its own /api/novnc route over Docker’s internal network.Then: docker compose up -d --force-recreate gatewayTailscale shows the gateway as dead or missing
Tailscale shows the gateway as dead or missing
tailscale status doesn’t show the gateway, or shows an old yourhq-gateway node as inactive.Why it happensTailscale runs on the host, not inside the gateway container. Earlier versions ran it inside the container — those docs are outdated.FixCheck Tailscale on the host:.env with HOST_REACHABLE_URL=http://<new-ip> and recreate: docker compose up -d --force-recreate.Gateway logs show 'registering gateway ... failed'
Gateway logs show 'registering gateway ... failed'
SUPABASE_SERVICE_ROLE_KEY is wrong, or the gateways table doesn’t exist because migrations were never run.Fix- Copy the service role key again from Supabase → Settings → API →
service_role(not the anon key). Update it in HQ Settings → Database or in.env. - Confirm migrations are complete: run every file in
db/migrations/in order from Supabase SQL Editor. - Restart:
docker compose restart gateway.
registered (reachable at http://...).Agents
Agent stuck in 'provisioning' for more than 2 minutes
Agent stuck in 'provisioning' for more than 2 minutes
provisioning and never changes.Why it happensThe provision command is leased by the runner container, which runs add-agent.sh. Something in that script failed — template branch missing, git repo corruption, or a Supabase write blocked by RLS.FixTail the runner:fatal: A branch named 'template/cofounder' not found—TEMPLATES_SOURCEpointed at a repo missing that template. Clear the source (TEMPLATES_SOURCE=in.env) and restart the gateway so it uses bundled templates.permission deniedwriting to/home/openclaw/...— volume owned by wrong UID.docker compose down && docker volume rm yourhq-gateway-state && docker compose up -d.- HTTP 401/403 writing to Supabase — service role key wrong. See gateway registration issue above.
Agent never responds to messages
Agent never responds to messages
pairing — the bot won’t engage until you pair your account to the agent.Fix (Telegram / Discord)- Send any message to the bot. It should reply with a 6-digit pairing code.
- Open the UI → agent detail page → Pairing Code field → paste the code → submit.
- Send another message. The agent will respond.
add-agent.sh never ran successfully — check runner logs: docker compose logs runner | grep provision.Fix (Slack)- Verify the App-Level Token (
xapp-...) has theconnections:writescope. - Verify the Bot Token (
xoxb-...) haschat:write,im:history,im:read,im:write. - Check runner logs:
docker compose logs runner | grep provision. - Check gateway logs:
docker compose logs gateway | grep slack.
Agent responds but seems to have forgotten context
Agent responds but seems to have forgotten context
MEMORY.md). The agent reads and updates these files during sessions. If the state volume was recreated, or the agent’s branch was reset, memory is gone.FixCheck if the agent’s branch exists:GIT_REMOTE_URL in .env to sync agent branches to GitHub/Gitea. See Operations →Agent is running but not doing background work
Agent is running but not doing background work
| Condition | What to check |
|---|---|
| Agent paused | Agent status in UI — must be ready |
| Budget exceeded | Agent budget section — hard cutoff may be blocking |
| Another instance running | Check for a stuck openclaw process: docker compose exec gateway ps aux | grep openclaw |
| Cooldown active | Inbox items may be rate-limited per agent |
| Active lease | A command may be leased but stuck — check agent_commands table |
- Check agent status: Agents → select agent → status must show
ready, notpaused. - Check budget: scroll to Usage & Budget — if hard cutoff is hit, raise the limit or wait for next period.
- Check dispatcher logs:
docker compose logs -f dispatcher - If a command is stuck: mark it failed in Supabase SQL Editor (see provisioning fix above).
Agent skills are not executing
Agent skills are not executing
skills/. If the branch wasn’t seeded correctly from the template, the skills directory may be empty or missing.FixInspect the agent’s skills directory:openclaw.json) on its branch — the skills path must point at the right directory.openclaw models auth login hangs after OAuth
openclaw models auth login hangs after OAuth
localhost:1455 first, then falls back to paste. If you’re completing OAuth on a different machine than the gateway (common with remote servers), the callback never fires — but the CLI waits for it forever.FixPre-occupy port 1455 to force the paste fallback:http://localhost:1455/?code=...), paste it into terminal 2. You should see Auth profile saved. Kill the server in terminal 1.Installer
'Docker is not installed' on Mac or Windows
'Docker is not installed' on Mac or Windows
curl | sh get.docker.com) is Linux-only. Docker on Mac/Windows is a GUI app and can’t be installed from a script.Fix- macOS — download Docker Desktop for Mac, drag to Applications, launch it, wait for the whale icon, re-run the installer.
- Windows — install WSL2, then Docker Desktop, then launch it, and re-run the installer from a WSL shell.
curl | bash install doesn't show prompts
curl | bash install doesn't show prompts
/dev/tty reads in some terminals.FixClone the repo and run the script directly:t3.medium becomes unreachable during 'docker compose build'
t3.medium becomes unreachable during 'docker compose build'
Database & data
Migration fails with 'relation already exists'
Migration fails with 'relation already exists'
ERROR: relation "contacts" already exists or similar.Why it happensYou ran a migration against a project where some tables already exist (from a previous partial run or an older schema version).FixIf this is a throwaway project where losing data is fine:db/migrations/ in filename order again.If it’s a live project, skip the failing statement and run the rest manually — but starting with a fresh Supabase project is usually faster.UI loads but all tables appear empty
UI loads but all tables appear empty
authenticated role is missing USAGE on the schema, or table-level grants weren’t applied.FixIn Supabase SQL Editor:Performance
First run is very slow to boot
First run is very slow to boot
noVNC feels laggy
noVNC feels laggy
- Upgrade to t3.medium (4 GB RAM) or larger
- Access noVNC via Tailscale (direct peer-to-peer, much better throughput than going via public internet)
- In the noVNC UI (top-left gear icon): set quality to
6and compression to9— cuts bandwidth ~3x
Tired of debugging infrastructure?
If you’d rather focus on agents than Docker and networking, HQ hosted runs the same platform without any infrastructure to manage.Getting more help
If nothing above matches, open an issue at github.com/yourhq/yourhq/issues with:- The exact error text (copy/paste, not a screenshot)
docker compose logsoutput for the failing service — last 200 lines- Host info:
uname -a, cloud provider + instance type, or “Mac/Linux local” - Install method:
curl | bash, direct clone, manual
Diagnostic bundle
To gather everything at once:docker compose ps, recent logs for each service, compose config with secrets redacted, .env keys (values redacted), docker --version, tailscale status, host OS info, and OpenClaw version. Attach diag.txt to your issue.
See also: Networking · Configuration · Agents · Database schema

