make doctor in the Condor directory — it covers most of what follows and names the fix directly. On the API host, hummingbot-api ships its own make doctor: it checks the containers, which ports are on a public interface, the broker’s credentials, Tailscale’s tailnet and serve status, and whether the API answers an authenticated request.
Connection issues
This is where most problems land: Condor showing Offline, Cannot reach server, Connection timeout, or Auth Error somewhere in the UI. Work through this section first. Condor talks to the Hummingbot API over HTTP using the host, port, username, and password stored for each server (see/servers in Telegram or condor/config.yml). Status checks call http://{host}:{port} and list accounts — a failure to connect surfaces as Offline, a failure to authenticate as Auth Error.
- Is the API stack up? On the machine where Docker runs the API:
docker compose ps(from thehummingbot-apirepo directory). You want the API container healthy and port 8000 (default) listening. - Smoke test from the Condor host:
You should get 200. If this fails, Condor will show offline until the API is reachable — everything below is about getting this curl to succeed.
- Wrong host for your layout
- API and Condor on the same machine:
hostis usuallylocalhostor127.0.0.1. - API on a different host or VPS: use
hummingbot-api(MagicDNS) when Tailscale is enabled — not a public IP and notlocalhost(localhost would point at the Condor machine itself). - Docker Desktop / WSL: If Condor runs in one environment and the API in another,
localhostmay not cross namespaces; use the host gateway IP (host.docker.internalon Mac/Windows) or publish ports and use the reachable address from Condor’s network namespace.
- API and Condor on the same machine:
- Credentials: Auth Error means HTTP 401 — username/password in
/serversmust match the API’s HTTP basic auth (the deploy flow syncsconfig.ymlwithhummingbot-api/.envwhen both are installed together; if you changed one side, align the other or re-save in/servers). The setup wizard requires real credentials and no longer seedsconfig.ymlwith a default pair, so an entry with a blank or placeholder password means it was never filled in —make doctorflags that case by name.
Tailscale-specific problems
Prefer Tailscale over opening port 8000 on a public firewall — see Secure Remote Access with Tailscale. If you must use a public IP instead, allow inbound 8000 only from the Condor host.Other issues
Won’t start
Exits at boot with TELEGRAM_TOKEN is not set
Exits at boot with TELEGRAM_TOKEN is not set
make setup and either re-enter the bot token, or choose Local mode if you do not want a bot at all. make doctor reports the same thing before you try to start.Exits at boot with ADMIN_USER_ID is not a valid user id, or Local mode says you're not approved
Exits at boot with ADMIN_USER_ID is not a valid user id, or Local mode says you're not approved
ADMIN_USER_ID in .env must be a positive integer, and in Local mode that id must also exist as an approved user in config.yml.- Not a valid user id: something non-numeric ended up in
ADMIN_USER_ID— fix it in.envor runmake setupagain. - “Local mode logs in as user N … but that user is not an approved user in config.yml”: the id in
.envand the idconfig.ymlexpects have drifted apart, usually after editing one file by hand. Re-runmake setupso both are written together, rather than editing either file in isolation.
hummingbot-api exits with CONFIG_PASSWORD does not match the stored password verification file
hummingbot-api exits with CONFIG_PASSWORD does not match the stored password verification file
CONFIG_PASSWORD encrypts every exchange credential the API holds, and it’s fixed the first time the API ever starts — a verification file is written then, and every later boot checks the current .env value against it.Editing CONFIG_PASSWORD in .env after that first run doesn’t rotate anything; it just fails this check. Restore the original password, or if it’s genuinely lost, delete bots/credentials/ and re-add every exchange API key — there’s no way to recover the old encrypted credentials without the original password.Dashboard or API fails to start: address already in use
Dashboard or API fails to start: address already in use
lsof -i :8088 for the dashboard, :8000 for the API), or change the port — WEB_HOST/dashboard port in Condor’s .env, API_BIND in hummingbot-api/.env.Telegram and servers
Bot not responding in Telegram
Bot not responding in Telegram
- Confirm the process is running
- Quick Start / deploy:
tmux attach -t condorand look for tracebacks or exit messages. - Manual install: Check the terminal where
make runis running.
- Quick Start / deploy:
- Check
condor/.envon the machine that runs Condor:TELEGRAM_TOKENmust match @BotFather, andADMIN_USER_IDmust be your numeric Telegram user id (from @userinfobot). - Access still pending: New users must be approved. An admin should use
/admin(or the admin flow from/start) to approve you. - Deploy installer hint: If admins never see “Condor is online and ready.”, attach to tmux (above) and fix errors shown there; the installer also reminds you to verify
.envwhen that message is missing.
No servers configured / Server not found / No servers available
No servers configured / Server not found / No servers available
/serversshows No servers configured until at least one entry exists incondor/config.ymlunderservers:(and users need access to a server — admins own new entries; others must be shared).- Server not found in the UI usually means the configured server name does not exist anymore (typo after edit, or deleted entry) — open
/servers, pick a valid server, or add one again. - No servers available (errors when running commands) often means your user has no server shared with them — ask an owner admin to share a server with your Telegram user id.
- After Manual install, you must add the real API URL (and auth) via
/serversifconfig.ymlwas not pre-filled.
Local mode: dashboard is not reachable from another device
Local mode: dashboard is not reachable from another device
127.0.0.1 and is reachable only from the machine running Condor.If you need it from elsewhere, put something that authenticates in front of it rather than setting WEB_HOST=0.0.0.0 on its own:- Tailscale — re-run
make setupand enable it. Condor then binds loopback and letstailscale serveexpose the dashboard to your tailnet only. - SSH tunnel —
ssh -L 8088:localhost:8088 you@host, then openhttp://localhost:8088locally. - Switch to Telegram mode — re-run
make setup;/webthen issues time-limited login links that work from any device.
Docker, updates, and data
Docker or installer problems (API did not start)
Docker or installer problems (API did not start)
- Docker daemon: The deploy script checks that Docker is running before bringing up the API. On Linux:
docker info. On Mac/Windows: open Docker Desktop and wait until it is fully started. - Compose: You need either
docker compose(plugin) or legacydocker-compose(the installer checks this). - API-only recovery: If Quick Start skipped or failed the API step, use the Hummingbot API only tab command, or from
hummingbot-api:make setup,docker compose pull,make deploy(see hummingbot-api README). - Sibling layout: Condor’s setup wizard expects
hummingbot-apinext tocondor(../hummingbot-apifrom the Condor directory) when both are installed by the same flow — keep that layout unless you know how to pointconfig.ymlat a custom URL. - API errors mentioning
DockerService/'DockerService' object has no attribute 'client': Docker (or its daemon) wasn’t running when thehummingbot-apicontainer itself started, so it never connected. Start Docker, then restart or redeploy thehummingbot-apicontainer so it reconnects — restarting Docker alone isn’t enough once the API is already up.
After an update, make run or make restart fails in the frontend build
After an update, make run or make restart fails in the frontend build
make run rebuilds the dashboard before starting, but it only installs frontend packages when frontend/node_modules is missing entirely. After a git pull or /update that added a new frontend dependency, the stale node_modules fails the build with an error naming the missing package.make doctor warns when node_modules is absent, but cannot tell a stale one from a fresh one — a build error naming a package you never heard of is this case.Preferences or agent conversations reset unexpectedly
Preferences or agent conversations reset unexpectedly
data/condor_bot_data.pickle) with a .bak backup. If the main file is corrupted, Condor recovers from .bak automatically; if both are corrupted (for example after a hard crash or a full disk), it silently starts with empty state instead of failing to boot — the only trace is a warning in the logs, not an error you’d notice at the time.There’s no way to recover state once both copies are gone. If this happens repeatedly, check for disk space issues or anything killing Condor mid-write.Secure the message broker
Condor and Hummingbot API reach bot instances through an EMQX broker. Older Hummingbot API installs ran this broker with no authentication and published its port on every interface — if you installed before the fix, or haven’t redeployed since, treat it as exposed untilmake emqx-audit says otherwise.
See Broker Security in the Hummingbot API docs for the full issue and the fix (make deploy, make emqx-auth-reset, then make doctor / make emqx-audit to verify).
A few things worth knowing beyond that fix:
- Rotating
BROKER_PASSWORDlater needsmake emqx-auth-resettoo, not justmake deploy— EMQX only imports the bootstrap file for accounts that don’t already exist, so a broker that’s already running keeps the old password until its data volume is reset. - Restarting a bot instance doesn’t refresh its broker credentials — only (re)creating one writes the current password into its
conf_client.yml. After any broker credential change, recreate existing instances rather than just restarting them. - Bring the stack up with
make deploy, not a baredocker compose up— the plain compose command skips the step that creates the broker’s credential file, so the broker comes up “healthy” with zero accounts and rejects everyone, including the API itself. - Default credentials aren’t a hard failure —
hummingbot-apiboots fine on out-of-the-boxUSERNAME/PASSWORD/CONFIG_PASSWORDvalues and only logs a warning. Change them before this instance touches real funds.
Recovery toolkit
The commands worth reaching for before reading anything above. All are safe to run at any time; none of them trade.make doctor is clean and something is still wrong, that is worth reporting — it means a real gap in what the check covers.
