config.toml, at the root of your store. It is plain TOML you can read and edit - but going through px0 config gets you validation, so a typo is caught when you set the key rather than during a run at 5pm on a Friday.
set checks the value against the key’s type and allowed values before saving:
px0 config unset <key> drops a stored override so it falls back to its default - not an error even if the key was never set, and the parent table is removed once it empties. px0 config get --help and px0 config set --help print the full key list.
Interactive helpers
Two settings have their own commands, because getting them wrong is expensive and worth verifying at the point of change.PATH status, takes a model name, and actually invokes the result before saving - so a typo’d model name or a missing API key surfaces here rather than mid-workflow. It never asks for or stores a provider key; that stays with the harness CLI’s own login.
Model
A known harness name (
claude, gemini, pi, opencode) expands to its full command. Any other literal command works too - a wrapper script, a pinned path - and px0 appends the prompt as the final argument.
Brain
Reindex after changing
brain.path, brain.private_folder, or brain.ignore. px0 init writes brain.path as an absolute path under the store it just created. See The brain.
Output
A workflow’s
output.path is always resolved inside this directory, and a path that tries to escape it is rejected. See Workflow files.
Connectors
ca_bundle applies to every outbound request px0 makes, not just Composio - a brain fetch behind a TLS-inspecting proxy uses it too. An explicit SSL_CERT_FILE always wins over it, and px0 never silently disables verification.
Tools
See Tools.
Notify
What happens when a scheduled run fails. A workflow’s ownon_failure block overrides all three.
See Status.
Runs
How a failed run is retried. A workflow’s ownretry block overrides both.
Each attempt writes its own run record, so
px0 runs list shows the failures that led to a success rather than hiding them. The per-workflow cap is 10.
Retrieval
See Retrieval backends.
Logs and retention
Failed logs are kept four times longer than successful ones, because those are the ones you come back to. Retention is applied by the daemon’s nightly pass, or on demand with
px0 runs prune.
Updates
See Updating px0.
Keys that are declared but not yet wired
Named here so the list is honest about what the current build actually does:connectors.provider- every toolkit routes through Composio regardless.update.channel- not functionally checked;px0 updatereports when no release manifest is configured.
Using config values in a workflow
Any key is readable from a workflow body or an input’sargs:
Editing the file directly
Editingconfig.toml by hand is fine, and px0 versions the file like any other, so your edit shows up in history. The trade-off is that a hand edit skips validation - if px0 behaves oddly after you change the file directly, px0 config list shows what it actually parsed, and px0 doctor catches the categories of mistake that matter. What you save is checked for parseability; if it no longer parses, px0 says so and names the line to fix, and the edit is still recorded so px0 changes revert is there if you would rather drop it wholesale.

