Troubleshooting
Provider not ready
aethon start runs an availability check; if it fails it prints Provider not ready: <msg> and a hint. Run aethon init to reconfigure or aethon doctor to diagnose. For
API providers (OpenAI, Anthropic, …), confirm the api_key (or its ${ENV_VAR}) is
actually set — remember missing env vars resolve to an empty string. If you're using an
OpenAI-compatible endpoint, double-check model.host is the right base URL, that
the server is running, and that it serves the model_id you configured. For Ollama,
make sure the daemon is running at model.host (default http://localhost:11434) and
the model is pulled.
Port already in use (18790)
Another process holds the WebChat port. Change channels.webchat.port, or stop the
other process. In Docker, adjust the 18790:18790 mapping.
Memory needs Ollama
With the default ollama embedding provider, vector memory requires Ollama running
with nomic-embed-text:
ollama pull nomic-embed-text
On start you'll see Memory: nomic-embed-text not found — ollama pull nomic-embed-text
if it's missing, or Memory: Ollama connection error if Ollama isn't reachable.
Alternatively switch to embedding_provider: openai (with embedding_api_key), or
disable memory.
Docker can't reach your provider
If model.host points at a service on the host (e.g. a local OpenAI-compatible server
or Ollama), use http://host.docker.internal:<port> from inside the container and make
sure host.docker.internal resolves — Compose sets
extra_hosts: host.docker.internal:host-gateway; for plain docker run, add
--add-host host.docker.internal:host-gateway. For the official OpenAI API, just pass
OPENAI_API_KEY into the container.
Messaging bot didn't start
Missing libs log a warning and missing tokens log a ValueError — the gateway keeps
running. Check that the channel is enabled: true, the token env var is set, and
(Discord) the MESSAGE CONTENT intent / (Slack) Socket Mode + event subscriptions are
configured.
"AETHON is already running (pid N)"
A second aethon start exits immediately with this message. A single-instance
flock on ~/.aethon/aethon.pid prevents two gateways racing for the same channels
(e.g. Telegram's long-poller, which rejects a second poller). Stop the other instance
first, or — if it crashed without releasing the lock — confirm no live process holds it.
A channel crashed but the rest kept running
Channel adapters run under a supervisor: a crashing adapter is logged with its traceback and restarted with backoff while the other channels keep serving, instead of tearing down the whole gateway. A channel that fails permanently degrades only itself. Check the log for the restart trail.
Scheduled jobs / reminders after a restart
Runtime-added schedules persist to workspace/SCHEDULE.json, so cron jobs and one-shot
run_at reminders ("remind me tomorrow at 15:30") survive a restart and fire even if
the assistant was down at the scheduled moment.
The assistant went silent on an error
On a model or runtime failure, each channel now sends a short localized error reply
pointing at aethon doctor instead of going quiet. Turns within a session are
serialized by a per-session lock, so a slow or failing turn can't interleave with the
next message on the same session — a second message waits for the first to finish.