Skip to main content
When something is not working, start with 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

Example output:
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. ghcr.io/pylonto/agent-claude) is available
  • Telegram / Slack — bot token is valid and the configured chat or channel is accessible
  • Git auth — SSH key or gh CLI 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

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.
  1. Verify the bot token is set in ~/.pylon/.env:
  2. Confirm the channel type in your global config matches the token:
  3. Run pylon doctor — it tests the bot connection and reports whether the chat or channel is accessible.
  4. For Telegram: ensure the bot is a group admin with topic management permissions. For Slack: ensure the bot is invited to the channel.
  1. Confirm pylon start is running and listening on the expected port.
  2. Check that server.public_url in ~/.pylon/config.yaml resolves to your machine. Run pylon doctor to test reachability.
  3. Verify the external service’s webhook URL path matches the pylon’s trigger.path (e.g. /my-sentry).
  4. If running locally, use a tunnel:
    Then update server.public_url with the ngrok URL.
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
You can also attach to a running job:
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.
Either change Pylon’s port in ~/.pylon/config.yaml:
Then restart the daemon and update server.public_url and any registered webhook URLs.Or find and stop the conflicting process:
Pylon clones repos inside Docker containers using the host’s credentials.
  1. Use SSH URL format in your pylon config:
  2. Verify your SSH key works:
  3. Alternatively, authenticate with the GitHub CLI:
Run pylon doctor to confirm Git authentication is detected.
Pylon enforces a limit on simultaneous agent containers. Increase it in ~/.pylon/config.yaml:
Restart the daemon afterward. Ensure your host has enough CPU and memory for the higher concurrency.
pylon test sends a POST to the locally running daemon. The daemon must be running first:
Then in another terminal:
If 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.