Pylon uses a single machine-level config file atDocumentation Index
Fetch the complete documentation index at: https://docs.pylon.to/llms.txt
Use this file to discover all available pages before exploring further.
~/.pylon/config.yaml to define how your daemon runs: which port it listens on, what Docker limits apply to agent containers, and which notification channel receives alerts by default. Running pylon setup creates this file for you and walks you through the core options. Secrets such as bot tokens and API keys belong in ~/.pylon/.env (one KEY=VALUE pair per line); Pylon loads that file automatically on pylon start and never reads it into version control.
Secrets files
Pylon reads secrets from two.env files and substitutes them into config fields that use ${VAR_NAME} syntax. Config files stay free of raw secrets, and you can commit them to a repo without leaking credentials.
File locations
| File | Scope | Purpose |
|---|---|---|
~/.pylon/.env | Global | Secrets shared across every pylon. Loaded once when pylon start boots the daemon. |
~/.pylon/pylons/<name>/.env | Per-pylon | Secrets scoped to one pylon. Loaded fresh for each job so edits take effect without restarting the daemon. |
File format
OneKEY=VALUE pair per line. Lines starting with # are comments. Do not wrap values in quotes and do not use a shell export prefix.
Referencing secrets in YAML
Use${VAR_NAME} anywhere a string value is accepted:
trigger.secret, channel.telegram.bot_token, channel.slack.bot_token, channel.slack.app_token, agent.api_key, and any value under agent.env.
Resolution order
When Pylon expands${VAR_NAME} for a given pylon it checks sources in this order:
- The pylon’s own
~/.pylon/pylons/<name>/.env - The process environment (which includes anything the global
~/.pylon/.envloaded at startup, plus whatever was already exported in your shell)
.env file — the global loader only sets a variable if it is not already defined.
If a referenced variable is unset, Pylon rejects the config at startup with a message like
telegram.bot_token references ${TELEGRAM_BOT_TOKEN} but it is not set. Run pylon doctor to surface these errors before you rely on the pylon at runtime.Annotated config.yaml
Field reference
version
Config schema version. Set this to
1. Pylon uses this to detect breaking changes in future releases.server
HTTP port the Pylon daemon listens on for incoming webhook requests.
Network interface to bind.
0.0.0.0 accepts connections on all interfaces. Use 127.0.0.1 to restrict to localhost.Base URL Pylon uses when printing webhook registration URLs (for example,
https://myserver.example.com). Individual pylons can override this with their own trigger.public_url. If unset, Pylon falls back to http://<host>:<port>.defaults.channel
Default notification backend for all pylons. Accepted values:
telegram, slack, webhook, stdout. Individual pylons can override this.Telegram bot token from @BotFather. Use
${TELEGRAM_BOT_TOKEN} to pull from .env. Required when type is telegram.Telegram chat or group ID. Use a negative number for groups and supergroups. Required when
type is telegram.List of Telegram user IDs that may click the Approve or Ignore buttons on job notifications. If empty, approval buttons are not shown.
Slack bot token (starts with
xoxb-). Required when type is slack.Slack app-level token (starts with
xapp-). Used for Socket Mode. Required when type is slack.Slack channel ID (starts with
C). Required when type is slack.List of Slack user IDs that may approve or ignore jobs. If empty, approval actions are not shown.
defaults.agent
Default agent runtime. Accepted values:
claude, opencode.Docker image for Claude Code agent containers.
Authentication method for Claude.
oauth mounts your local OAuth session; api_key reads ANTHROPIC_API_KEY from the environment.Path to your local
~/.claude/ directory. Pylon mounts it read-only into each agent container. Required when auth is oauth.Docker image for OpenCode agent containers.
Authentication method for OpenCode.
none uses OpenCode Zen (no API key required); api-key reads the relevant provider environment variable.LLM provider when
auth is api-key. Accepted values: anthropic, openai, google. Pylon automatically maps each provider to its standard API key environment variable (ANTHROPIC_API_KEY, OPENAI_API_KEY, GOOGLE_API_KEY).docker
Maximum number of agent containers that can run simultaneously. Jobs that arrive when all slots are occupied are currently rejected.
Default maximum run time for a single agent job. Accepts Go duration strings such as
10m, 1h30m. Individual pylons can override this with agent.timeout.