pylon doctor. It runs a series of checks against your environment and reports each one as ok, WARN, or FAIL with a suggested fix.
Running the health check
pylon doctor checks the following:
- Config — global config file exists at
~/.pylon/config.yaml - Docker — Docker daemon is running and accessible
- Agent image — the agent Docker image (e.g.
pylon/agent-claude) is built - Telegram / Slack — bot token is valid and the configured chat or channel is accessible
- Git auth — SSH key or
ghCLI authentication is present for private repo access - Agent auth — OAuth session (
~/.claude) or API key is configured for the agent type - Port — configured port is available (or already held by Pylon)
- Pylons — lists constructed pylons and tests webhook URL reachability
- systemd — reports whether the Pylon service is installed and active
Common issues
pylon start fails with 'load config: ... run pylon setup first'
pylon start fails with 'load config: ... run pylon setup first'
The global config file is missing. Run initial setup to create it:This creates
~/.pylon/config.yaml and walks you through configuring your channel, agent type, and server settings.No notification received in Telegram or Slack
No notification received in Telegram or Slack
- Verify the bot token is set in
~/.pylon/.env: - Confirm the channel type in your global config matches the token:
- Run
pylon doctor— it tests the bot connection and reports whether the chat or channel is accessible. - For Telegram: ensure the bot is a group admin with topic management permissions. For Slack: ensure the bot is invited to the channel.
Webhook not triggered / 404 from external service
Webhook not triggered / 404 from external service
- Confirm
pylon startis running and listening on the expected port. - Check that
server.public_urlin~/.pylon/config.yamlresolves to your machine. Runpylon doctorto test reachability. - Verify the external service’s webhook URL path matches the pylon’s
trigger.path(e.g./my-sentry). - If running locally, use a tunnel:
Then update
server.public_urlwith the ngrok URL.
Agent container starts but fails immediately
Agent container starts but fails immediately
Stream the container logs:Common causes:
- Missing environment variables (API keys, secrets) — check
~/.pylon/.env - Wrong repo URL or clone failure — see “Private repo won’t clone” below
- Unresolved template variables in the agent prompt — check the pylon config
Docker image not found / agent won't run
Docker image not found / agent won't run
Rebuild the agent image:Verify which images are present:If the image exists but containers still fail, run
pylon doctor to confirm Docker is healthy.Port 8080 already in use
Port 8080 already in use
Either change Pylon’s port in Then restart the daemon and update
~/.pylon/config.yaml:server.public_url and any registered webhook URLs.Or find and stop the conflicting process:Private repo won't clone
Private repo won't clone
Pylon clones repos inside Docker containers using the host’s credentials.
- Use SSH URL format in your pylon config:
- Verify your SSH key works:
- Alternatively, authenticate with the GitHub CLI:
pylon doctor to confirm Git authentication is detected.Max concurrent jobs reached / job rejected
Max concurrent jobs reached / job rejected
Pylon enforces a limit on simultaneous agent containers. Increase it in Restart the daemon afterward. Ensure your host has enough CPU and memory for the higher concurrency.
~/.pylon/config.yaml:pylon test returns 'connection refused'
pylon test returns 'connection refused'
pylon test sends a POST to the locally running daemon. The daemon must be running first:pylon start is running but pylon test still fails, verify the port in ~/.pylon/config.yaml matches the daemon’s listening port.Config hot reload
Pylon watches pylon config files (~/.pylon/pylons/<name>/pylon.yaml) for changes and reloads them automatically. Global config changes and new pylons require a daemon restart.