~/.pylon/config.yaml to define how your daemon runs: which port it listens on, what Docker limits apply to agent containers, which notification channel receives alerts by default, and which host CLI tools agents can call. 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 file
Store sensitive values in~/.pylon/.env:
config.yaml using ${VAR_NAME} syntax. Pylon expands them at startup, so the file itself never contains raw secrets.
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.tools
The tools list defines host CLI programs that agent containers can call through Pylon’s exec gateway. By default, agent containers are isolated Docker environments with no access to your host filesystem or binaries. This list is the controlled way to bridge that gap — you choose exactly which executables to expose, and agents can only call tools that are listed.
List of host CLI tools exposed to agent containers via Pylon’s exec gateway. Each entry specifies a
name, an absolute path to the executable, and an optional timeout.Identifier used to reference this tool in per-pylon
agent.tools lists and in agent instructions. Choose a short, descriptive name without spaces.Absolute path to the executable on the host machine. The file must be executable by the user running
pylon start.Maximum time Pylon waits for a single tool invocation to complete. Accepts Go duration strings such as
30s, 2m. If the tool does not finish within this limit, Pylon terminates the call and returns an error to the agent.How tools work
The exec gateway proxies calls from inside the agent container to named executables on the host. When an agent invokes a tool by name, Pylon looks up the matching entry in the resolved tools list, runs the executable on the host with the same OS user privileges as thepylon start process, captures its output, and returns it to the agent. This lets agents trigger real workflows — deployments, linters, build commands — without needing a privileged container or a shared filesystem mount.
Per-pylon override
Individual pylons can override the global tools list by settingagent.tools in their pylon.yaml. When agent.tools is present (even as an empty list), it replaces the global list entirely for that pylon. When agent.tools is absent, Pylon falls back to the global tools list defined here. This lets you give individual pylons a restricted subset of tools, or grant a specific pylon access to a tool not available globally.