Running it
View as MarkdownEveryday running
Everyday checks
| Check | Where |
|---|---|
| The server is up | curl -s https://agentx.yourcompany.com/health → {"status":"ok"} |
| The runner is online | Settings → Runners (green); the sidebar shows a banner when no runner checked in for a minute |
| WhatsApp is connected | Settings → WhatsApp |
| The office browser is online | Settings → Browser |
| Failed runs | Inbox → Problems; Dashboard → failures |
| What happened | Activity (everything people and agents did) |
Logs
- The server edition:
sudo agentx logs server(orrunner,whatsapp,caddy,updater).sudo agentx support-bundlegathers versions, settings without secrets and log lines for OXS support, never data. - Lumate Local: the logs folder, see Lumate Local.
| Service | What its log holds |
|---|---|
server |
API, scheduler, phone webhooks, browser relay |
runner |
Claimed runs, Claude Code output summaries |
whatsapp |
Connection state; never message texts or full numbers |
An agent's full run, with every tool call and result, is on the agent's Runs tab, or from the run pill in a thread.
Each service keeps at most 30 MB of log (three files of 10 MB; the oldest goes first), so logs never fill the disk. The server logs what happens, not every request: the runner's and the open pages' frequent checks leave no lines.
Memory. The server edition bounds each service: the server 2 GB, the runner 2 GB, WhatsApp 512 MB, Caddy 256 MB and
the updater 512 MB, so one runaway process cannot take the machine. With more than two runs at once (RUNNER_SLOTS),
give the runner more (RUNNER_MEMORY=4g; SERVER_MEMORY for the server) in /opt/agentx/.env, then
sudo docker compose --project-directory /opt/agentx -f /opt/agentx/compose.yml up -d runner.
Backups
The server edition backs itself up: every day, before every update and when asked (Settings → Backups, or
agentx backup), with a copy to a bucket if you want one, and agentx restore puts a backup back. See
The server edition. A backup needs as much free disk space as the data, plus 512 MB: with
less, it is refused before anything is written (and an update waits, changing nothing), so a backup never fills the
disk. Lumate Local keeps daily backups by itself, see Lumate Local.
Updating
The server edition updates itself from its channel (Settings → Updates: automatic installs in the maintenance
window, or Update now), backs up first and goes back by itself when the new version does not start. From the shell:
agentx update, agentx update --bundle <offline bundle>, agentx rollback. See
The server edition. Lumate Local updates itself too, see
Lumate Local.
Troubleshooting
Sign-in and setup
| Symptom | Cause and fix |
|---|---|
| "Too many attempts" | 5 tries a minute per address. Wait a minute. Behind a proxy, set TRUSTED_PROXIES, or everyone shares one limit. |
| Signed out right after login | COOKIE_SECURE=true over plain HTTP. Use HTTPS, or false only for local trials. |
| Lost the setup token | The server edition: sudo grep SETUP_TOKEN /opt/agentx/.env |
| Forgot a password | Forgot password? on the sign-in page, once email is set up; otherwise the command line |
Licence
| Symptom | Cause and fix |
|---|---|
| "Lumate is not activated yet" | A fresh install: the person who set it up activates it in Settings → Licence (or the setup's Activate step). See Licensing. |
| "The 30 days to activate Lumate have ended" | An install from before licensing that was not activated in time: activate it; nothing was lost. |
| "Lumate's licence has ended" | The subscription stopped, or no check-in reached OXS Cloud for 14 days. Renew in the portal, then Check again on the lock page. Export all data works meanwhile. |
| "This computer's clock is behind" | Set the right date and time; the next check-in (within 5 minutes) unlocks Lumate. |
| "Lumate could not reach OXS Cloud for N days" | The server cannot reach OXS Cloud over HTTPS (firewall, proxy, TLS inspection). The licence keeps working until its last day; fix the connection, then Settings → Licence → Check now. |
| "This install's licence is in use on another machine" | A copy of this install (a restored database) runs elsewhere. Deactivate the one you do not want; activate this one with a free slot. |
Agents
| Symptom | Cause and fix |
|---|---|
| Agents never answer; "No runner online" | Settings → Runners shows whether the runner is online and its Claude Code signed in. The server edition: sudo agentx status and sudo agentx logs runner. |
| A run failed with a Claude login error | The Claude sign-in expired or was revoked. Sign in again: sudo agentx claude-login on the server edition, a new key or token in Settings → Runners, or Settings → General → Claude on Lumate Local. |
| A run failed with a usage limit | The company's Claude plan hit its limit. Wait for the reset, or raise the plan. |
| An agent stays "Working…" | The run's lease expires within 2 minutes and the run is queued again. If it repeats, check the runner log. |
| An agent ignores a file | Files over 25 MB, or of an unsupported type, are refused at upload. Office files are read through their extracted text. |
Voice and phone
| Symptom | Cause and fix |
|---|---|
| The microphone does nothing | The browser needs HTTPS and microphone permission. Check that OPENAI_API_KEY is saved. |
| Inbound calls are not answered | Check the webhook URL in OpenAI, OPENAI_WEBHOOK_SECRET, that the server's public address is reachable over HTTPS, and that the number is added with an agent. |
| "Outbound calling is off" | An admin enables it in Settings → Phone with the trunk. |
| A call is refused by the gate | The reason says which rule applies: calling hours, do-not-call, consent, attempt limits. |
| One-way or no audio through Asterisk | RTP ports and external_media_address, see Phone and Asterisk |
| Symptom | Cause and fix |
|---|---|
| "WhatsApp is not running on this server" | The server edition: sudo agentx status shows the whatsapp service; sudo agentx logs whatsapp says why it stopped. |
| Logged out | The phone removed the linked device, or it was offline for about two weeks. Link again. |
| Replaced | The number was linked from another place. Link again here, only once. |
| A message shows "waiting (limit)" | The pace limits hold it. It goes out by itself. |
Office browser
| Symptom | Cause and fix |
|---|---|
| "This package was already used or is older than 30 minutes" | Download a new package |
| Offline | The PC sleeps, Chrome is closed, or the extension was removed. Keep Chrome open; the extension reconnects by itself. |
| Switches between Online and Offline while nobody uses the PC | Chrome puts an idle extension to sleep. The extension wakes every 30 seconds and reconnects; a command sent in that moment fails and the agent tries again. Turn off the PC's sleep. If it stays offline for about 30 seconds of every minute, it is an older extension that woke only once a minute: download it again from Settings → Browser. |
| "This site is read-only for agents" | The site is not on the allowed list. Add it in Settings → Browser if agents should work there. |
| "Slow down: this site's page limit was reached" | 12 page loads a minute per site. The agent waits and continues. |
| The agent cannot log in to a site | By design: a person signs in once in that Chrome profile. |
Command line
On the server edition, run these in /opt/agentx with sudo:
docker compose exec server python -m app.cli create-user <username> [--admin]
docker compose exec server python -m app.cli reset-password <username>
docker compose exec server python -m app.cli create-runner-key <company-slug> <name>
reset-password sets a new password and prints it once: sign in with it, then choose your own in Settings → Your
account. Every other session of that person ends. It is also how an address gets back to its owner when an account
was made for it by someone else: reset it, give the password to the real person, and they choose their own.