Documentation Index
Fetch the complete documentation index at: https://docs.yourhq.ai/llms.txt
Use this file to discover all available pages before exploring further.
Troubleshooting
Real problems we hit while building yourhq, with copy-paste fixes. Organized by symptom — search for the exact text you’re seeing. If your issue isn’t here, jump to Where to get help at the bottom.UI & access
UI keeps showing onboarding or says no active project
What you see Openhttp://localhost:3000, and the UI sends you back to onboarding even though you already connected Supabase.
Why it happens
The UI reads Supabase config from the project registry on the ui-config volume. The registry is empty, unreadable, or was lost when volumes were recreated.
How to fix
Check the UI logs first:
ui-config volume. If you intentionally reset volumes, this is expected. Supabase browser config is runtime-injected, so rebuilding the UI image is not required.
Login page loads but sign-in fails silently or says “Invalid API key”
What you see You type your email/password, click Sign in — nothing happens, or you getInvalid API key / Invalid login credentials.
Why it happens
Either the anon key in the UI doesn’t match the Supabase project you’re pointing at, or you never created an auth user in Supabase. A fresh Supabase project has zero users.
How to fix
- In Supabase dashboard → Project Settings → API, confirm
Project URLandanon publicmatch the active project in Settings → Projects. - In Supabase dashboard → Authentication → Users → Add user → Create new user, set an email + password.
- Log in with those credentials.
Setup wizard 500s on “Complete setup”
What you see You fill out the six-step setup wizard, hitComplete, and the UI returns a 500. docker compose logs ui shows an Origin mismatch or CSRF error, or just a generic Next.js server error from the setup server action.
Why it happens
Next.js server actions enforce that the request Origin header matches the host the server thinks it’s on. When you access the UI through a proxy (Codespaces forwarded URL, a Tailscale IP, a reverse proxy), the origin doesn’t match localhost and the action is rejected.
How to fix
Set ALLOWED_ORIGINS in .env to the exact origin you’re loading the UI from, then restart the UI container. Comma-separate multiple values:
CODESPACE_NAME / GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN automatically if they’re in the environment. If you’re running Codespaces locally (VS Code tunnel), set ALLOWED_ORIGINS manually. See Configuration for the full list of origin-related vars.
”Site can’t be reached” from a phone/laptop via the Tailscale IP
What you see UI works fine on the host athttp://localhost:3000. From another device on the tailnet — phone, laptop, iPad — http://100.x.y.z:3000 just times out or says “connection refused”.
Why it happens
If you installed in local-only mode, the installer sets UI_HOST_PORT=127.0.0.1:3000. Docker publishes the port on loopback only, so the tailnet can’t reach it.
How to fix
Edit ~/.yourhq/.env, change the port bindings to 0.0.0.0:
docker compose up fails with “pull access denied” on ghcr.io/yourhq/*
What you see
read:packages scope, then log in:
Gateway & agents
Gateway container keeps restarting
What you seeopenclaw onboard, Xtigervnc, D-Bus, XFCE, websockify. Any one failing will exit non-zero and Docker will loop.
How to fix
Tail the logs and look at the last step that ran:
openclaw onboard exited non-zero— usually Node version mismatch or a badSUPABASE_SERVICE_ROLE_KEY. Checkdocker compose exec gateway node --version— must bev24.x. Re-confirm the service role key in Supabase → Settings → API.- Xtigervnc won’t start — stale lock files from a crash. Nuke the volume:
docker compose down && docker volume rm yourhq-gateway-state && docker compose up -d gateway. - D-Bus session never appeared — the entrypoint prints
session D-Bus socket never appeared at .... A full recreate usually clears it:docker compose up -d --force-recreate gateway.
noVNC websockify.log shows “Cannot assign requested address”
What you see
Inside the gateway, ~/.vnc/websockify.log ends with:
0.0.0.0 and 127.0.0.1. Host-level port mapping decides who can reach 6901.
How to fix
Make sure .env has:
NOVNC_BIND only controls whether websockify runs at all — it should always be local (which translates to 0.0.0.0:6901 inside the container). Then set NOVNC_HOST_PORT to control who can reach it from outside:
NOVNC_HOST_PORT=127.0.0.1:6901— localhost onlyNOVNC_HOST_PORT=0.0.0.0:6901— tailnet/public-accessible
docker compose up -d --force-recreate gateway.
noVNC loads but shows only a black screen
What you seehttp://<host>:6901/vnc.html loads, you click Connect, the viewport turns black. No cursor, no desktop, no Chrome.
Why it happens
Xtigervnc is up (otherwise you’d see a connection error), but the XFCE session died. Almost always a D-Bus socket issue — XFCE needs a session bus before it’ll start xfwm, xfce4-panel, or xfdesktop.
How to fix
Look at ~/xfce.log inside the gateway:
Tailscale shows the gateway container as dead / never joined
What you see You checktailscale status and don’t see the gateway. Or you see an old yourhq-gateway node stuck as “inactive”.
Why it happens
You’re reading old docs. As of the current release, Tailscale runs on the host, not in the gateway container — that’s why the gateway container no longer needs NET_ADMIN or a /dev/net/tun device. Earlier versions did it inside the container and it was flaky in Codespaces and on many cloud hosts.
How to fix
Check Tailscale on the host:
yourhq-<hostname> (or whatever you set) is what the UI and noVNC are reached through. If it’s missing, re-run the host install:
.env with the new IP (HOST_REACHABLE_URL=http://<ip>) and docker compose up -d --force-recreate. See Networking.
openclaw models auth login for Codex hangs forever
What you see
You run:
localhost:1455, and a paste-the-code fallback. The loopback is only reachable from the same machine as the browser, so if you’re running exec on a remote host (EC2, Hetzner, Mac mini) and completing OAuth on your laptop’s browser, the callback can never fire — but the CLI is waiting for it.
How to fix
Pre-occupy port 1455 inside the gateway to force the CLI to use the paste fallback:
http://localhost:1455/?code=...), paste it back into terminal 2. You should see Auth profile saved. Kill the http.server in terminal 1.
Gateway logs show “registering gateway … failed”
What you seeSUPABASE_SERVICE_ROLE_KEY is wrong, or the gateways table doesn’t exist in your project because migrations were never run.
How to fix
- Copy the service role key again from Supabase → Settings → API →
service_role(not the anon key), and update the active project in the UI or the env override in.env. - Run every migration in
db/migrations/in filename order from Supabase Dashboard → SQL Editor → New query. - Restart the gateway:
docker compose restart gateway.
registered (reachable at http://...).
Agent stuck in “provisioning” for > 2 minutes
What you see You create an agent in the UI. It shows up with statusprovisioning and stays there forever.
Why it happens
The 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 write to Supabase blocked by RLS.
How to fix
Tail the runner:
provision command and whatever stderr follows. Common causes:
fatal: A branch named 'template/cofounder' not found— yourTEMPLATES_SOURCEpointed at a repo that doesn’t have that template. Either fix the source repo or re-create using the bundled templates (TEMPLATES_SOURCE=empty in.env, restart gateway).permission deniedwriting to/home/openclaw/.openclaw/...— gateway-state volume is owned by the 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 previous symptom.
Agent never responds to messages
What you see You send a DM to your agent’s bot (Telegram or Discord) or a message in Slack. No reply. Why it happens For Telegram and Discord: 99% of the time you skipped the pairing step. OpenClaw’s default policy ispairing — the bot won’t engage until you’ve paired your account to the agent.
For Slack: the agent should respond immediately after provisioning with no pairing step. If it doesn’t, the App-Level Token or Bot Token is invalid, or the runner never ran add-agent.sh successfully.
How to fix (Telegram / Discord)
- Send any message to the bot. It should reply with a pairing code (6-digit).
- Open the UI → the agent’s detail page → Pairing Code field → paste the code → submit.
- Send another message. Agent engages.
add-agent.sh successfully — see the “provisioning” symptom above.
How to fix (Slack)
- Verify the App-Level Token (
xapp-...) has theconnections:writescope. - Verify the Bot Token (
xoxb-...) has the required scopes (chat: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.
Installer
”Docker is not installed” on Mac or Windows
What you see The installer prints a multi-step message pointing you at Docker Desktop and exits. Why it happens The auto-install path (curl | sh get.docker.com) is Linux-only. Docker on Mac/Windows runs inside Docker Desktop, which is a GUI app and can’t be installed from a shell script.
How to fix
- macOS — download Docker Desktop from https://docs.docker.com/desktop/install/mac-install/, drag to Applications, launch it, wait for the whale icon, re-run the installer.
- Windows — install WSL2 (https://learn.microsoft.com/windows/wsl/install), then Docker Desktop, then launch it, then re-run the installer from a WSL shell.
curl | bash install doesn’t show prompts
What you see
You pipe the installer into bash and it looks like it hangs — or it just exits without asking for Supabase creds.
Why it happens
Bash pipes can buffer stderr or swallow /dev/tty reads in some terminals. The prompts are there, but they’re not visible, or read can’t reach your terminal.
How to fix
Clone the repo and run the script directly:
t3.medium EC2 instance becomes unreachable during docker compose build
What you see
You started docker compose build, SSH session locks up, after a few minutes the instance is unreachable. Reboot is required.
Why it happens
Out of memory. Building all four images (ui, gateway, dispatcher, runner) in parallel peaks well past 4 GB of RAM. A t3.medium with 4 GB RAM and no swap has no room to work with — the OOM killer reaps sshd, dockerd, or both.
How to fix
Preferred: don’t build, pull the prebuilt images:
Data / Supabase
Supabase migration fails partway through
What you see In the SQL editor, the migration stops withERROR: relation "contacts" already exists or similar on some line.
Why it happens
You ran the migration against a project where some tables already existed. The current migrations are idempotent (IF NOT EXISTS, CREATE OR REPLACE) and safe to re-run, but if you have an older copy of the schema this error can still appear.
How to fix
If this is a fresh throwaway project where losing all data is fine:
db/migrations/ in filename order again. Warning: this destroys all data in the public schema. If you have anything else in there, back it up first.
If it’s a real project, skip the failing statement and run subsequent ones manually — but this is fragile. Starting with a fresh Supabase project is usually faster.
UI loads but all tables are empty
What you see You’re logged in, dashboard renders, but contacts / tasks / agents lists are all empty even though you inserted rows via SQL. Why it happens Row-level security is blocking reads. Every table has a single policy grantingauthenticated full access — if your authenticated role is missing USAGE on the schema or SELECT on the tables, the policy never gets a chance.
How to fix
In the Supabase SQL Editor:
Performance
First run feels very slow to boot
What you seedocker compose up -d sits for 5+ minutes on the first run. Subsequent runs are fast.
Why it happens
Pulling the prebuilt images from GHCR the first time takes a while — the gateway image alone is ~1.5 GB (includes Xtigervnc, XFCE, Chrome, openclaw, Node 24). Docker caches them after the first pull.
How to fix
Just wait. If you want progress visibility, pull explicitly with docker compose pull before up — you’ll see per-layer progress bars.
Gateway feels laggy in noVNC
What you see Mouse moves lag a beat behind. Typing feels sluggish. Chrome is slow to scroll. Why it happens The gateway container runs Chrome + XFCE + openclaw simultaneously — ~1.5 GB of RAM just sitting there, plus whatever Chrome does. On a t3.small (2 GB RAM) you’re swapping constantly. Also, websockify streams uncompressed framebuffer diffs — bandwidth-hungry over public internet. How to fix- Use a t3.medium (4 GB RAM) or larger for comfortable agent work.
- Access noVNC over Tailscale rather than the public internet — direct peer-to-peer, no reverse proxy, much better throughput.
- In the noVNC UI (top-left gear), drop quality to
6and compression to9— cuts bandwidth ~3x at the cost of some visual fidelity.
Where to get help
If nothing above matches, open an issue at https://github.com/yourhq/yourhq/issues with:- The exact error message (copy/paste, not a screenshot, so it’s searchable).
- Output of
docker compose logsfor the failing container(s) — last 200 lines is usually enough. - Which host you’re running on:
uname -a, cloud provider + instance type, or “local Mac/Linux”. - Which install method you used:
curl | bash, direct clone, manual.
Diagnostic bundle
To make bug reports easier, a one-liner (coming in a follow-up PR) will 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.