Harness MaxxingDocs
All pages

Reference

Troubleshooting

Start with the doctor

maxxing doctor            # human readable, exit code 1 if something fails
maxxing doctor --json     # for scripts and Claude
maxxing doctor --live     # also makes a real one-line Claude call

Or open a session and say "something is wrong, use the maxxing-doctor skill": Claude reads the checks and the logs, explains, and fixes what is safe to fix.

Check Meaning
python, uv runtime and toolchain
claude_cli, claude_auth Claude Code installed and signed in
claude_version Claude Code behind its latest release (info; releases carry security fixes). With Settings -> Claude -> Update Claude Code automatically (off by default) the server installs the stable release by itself when nothing has run for 10 min; the hint says why it did not - fix: claude update
skill_listing how many skills Claude sees in every prompt and their size; past Claude Code's budget the least used ones lose their description (info) - see Skills
deps with --deps: installed packages (server, web, video tools) with a known vulnerability, from osv.dev
setup first sign-in done
service, http claude-maxxing running and answering
security firewall (ufw), fail2ban and automatic security updates active - warning only; fix: bash /opt/claude-maxxing/install.sh --secure
state_files a damaged config.json / secrets.json was found and replaced; its copy (*.damaged-<date>) is kept next to it - compare, restore what is missing (keys: Settings -> Keys), delete the copy
tools Node.js, Remotion, Scrapling and the shared Chromium ready (videos, PDFs, scraping) - warning only; fix: maxxing deps update
deps_files external components (maxxing deps list): ✘ when a binary changed since it was installed or a file is not owned by root (another user could replace it), ! when one is missing or not at the version of this release; fix: maxxing deps update
bind not listening on a public address
public_url, caddy your URL reachable, Caddy config valid
caddy_site the Caddy site written by an older installer: X-Frame-Options DENY (PDF previews in Files stay blank) or a body limit below the 2 GB uploads - the fix command edits /etc/caddy/claude-maxxing.caddy and reloads Caddy
crontab every enabled job present in the crontab
timezone configured time zone = system time zone (cron uses the system one), or server clock kept (system_clock = keep)
telegram, backup configured, linked, recent backup
disk, workspace free space, workspace writable
memory RAM and swap; a server under 4 GB without swap gets a warning (each running Claude turn uses 200-300 MB, local voice, browsers and renders more) and the commands to add a 2 GB swap file
skills, web product skills and the web UI build present
git local changes, updates available

Logs

journalctl -u claude-maxxing -n 100 --no-pager     # server
journalctl -u caddy -n 50 --no-pager               # HTTPS proxy
systemctl list-units 'maxxing-*'                   # running Claude turns
journalctl -u maxxing-<id8> --no-pager             # one turn
maxxing cron list                                  # jobs and their last result

Logs are also visible in Settings -> System.

Common problems

A command was "Killed" (exit code 137), or a heavy render stopped. It ran out of memory. Each session and scheduled job may use at most 75 % of the server's RAM: past it the kernel stops the biggest process of that session only, and Claude tells you and continues. The UI and the other sessions normally keep working (the cap is per session: several heavy sessions at once can still fill the RAM). Ask Claude for a lighter way (a lower resolution, a render in parts, fewer inputs at once). To change the cap, set unit_memory_max in /var/lib/claude-maxxing/config.json ("4G", "90%", or "" for none): it applies to the next turns and jobs. All the scheduled jobs running at once also share jobs_memory_max (default 75 %, applied by maxxing init). journalctl -k | grep -i oom shows what was killed. If the whole turn stopped, the session says "The turn was stopped: the server ran out of memory".

Something you started on the server (a dev site, an API on port 3000…) is not reachable. The firewall only lets SSH, 80/443 and Tailscale in. Open the port on purpose (ufw allow 3000/tcp), or better, serve it behind Caddy on your domain.

The installer stops at "Claude Code". It prints the end of Anthropic's installer output and the likely cause above the error (full log: /tmp/maxxing-claude-install.log). Usual causes: downloads.claude.ai unreachable from the server (DNS, the provider's outgoing firewall, a temporary outage - it already retried once), a country where Claude is not available (https://www.anthropic.com/supported-countries), a full disk, or an architecture other than x86_64 / arm64. Fix it and re-run curl -fsSL https://get.harness-maxxing.com | bash: finished steps are skipped. (Running it after sudo -i is fine: Claude Code is installed for root.)

The installer says "license refused". Only with LICENSE=HM-… (no key is needed: leave it out to install from the public git repository). The message says why: unknown key (check it in your license email - lost it? harness-maxxing.com/license), license revoked or refunded, or already active on the maximum number of servers: the installer lists them; run maxxing license release on the one you no longer use (or reply to your license email).

maxxing update says the updates period has ended. The server keeps working on its version; renew from your license email to get the new versions.

The page does not load. systemctl status claude-maxxing. If it is failing, read the journal. After a manual git pull, run maxxing update instead (it syncs the dependencies). systemctl restart claude-maxxing is safe: running Claude turns continue in their own units.

Certificate error / domain unreachable. The domain's DNS record must point to the server (getent ahosts ui.example.com), and ports 80 and 443 must be open (ufw status, plus your hosting provider's firewall). Caddy obtains the certificate on the first request: journalctl -u caddy shows why it failed. Validate the config: caddy validate --config /etc/caddy/Caddyfile --adapter caddyfile.

Lost password. On the server: maxxing password. Or start over with a new setup link: maxxing setup-link --reset.

"Too many attempts". Wait 15 minutes, or restart the service.

Lost setup link. maxxing setup-link.

Every session fails at once. Claude is not signed in or the token expired: Settings -> Claude -> Test, or maxxing doctor --live. Renew with claude setup-token.

A session stays "running". Press Stop. If it persists: systemctl list-units 'maxxing-*' and read that unit's journal.

A note says the conversation could not be resumed. The Claude transcript was missing; a fresh context was started automatically. The history stays visible.

A job did not run. maxxing cron list (enabled? last result?), crontab -l (is its line in the managed block?), maxxing cron sync, systemctl status cron. Run it by hand: maxxing cron run <id>.

A job runs at the wrong hour. The cron daemon uses the system time zone, the UI uses the one from Settings -> General. maxxing doctor shows both. On a shared server, keep the server clock and let jobs follow your zone: maxxing init --system-clock keep. Otherwise align them: timedatectl set-timezone <Zone> && systemctl restart cron, and maxxing init --timezone <Zone> && systemctl restart claude-maxxing.

Telegram is silent. maxxing telegram status shows the last error; maxxing telegram test. See Telegram.

Backup failed. maxxing backup status. Expired token, repository made public, or a secret found in a file (the message names the file). See Backup.

Disk full. Check ~/.claude/projects (transcripts), attachments in topics, and the journal (journalctl --vacuum-size=200M). Delete with care: transcripts are needed to resume sessions.

The UI looks outdated after an update. Reload the page; the app's HTML is never cached, a reload is enough.

Tailscale URL stops working after a reboot. If the Tailscale IP changed, re-run the installer with ACCESS=tailscale (or maxxing init --bind <ip> --public-url http://<ip>:8787 and restart).

Still stuck?

Collect maxxing doctor --json and the last 200 lines of journalctl -u claude-maxxing (check that they contain no secrets) and contact support.