px0 workflows new, px0 brain search, px0 guidelines edit. Once you know the entities, you can usually guess the command.
The only flat commands are the ones that act on the install rather than on anything in your store: init, update, version, doctor, status, and completion.
Add --help to any command for its own flags. px0 config get --help and px0 config set --help additionally list every settable key.
Global flags
Both work at the root (
px0 --json runs list), and the subcommands that support --json accept it in place too.
Exit codes
Confirmations
Every command that removes or revokes something asks first, and every one of them takes--yes to skip the question. With stdin not a terminal and no --yes, the command stops rather than assuming: workflows delete, brain rm, guidelines rm, tools disconnect, and tools call on a write tool.
init
workflows
new - --yes skips every prompt, --id <id> names it directly, --no-clarify skips the clarifying questions, --no-discover restricts it to curated tools, --from-file <path> reads the description from a file. See Build a workflow.
run - --dry-run stubs write tools, --input KEY=VALUE (repeatable) passes named values, --stdin reads piped text, --output stdout|file overrides the destination, --timeout <duration> overrides the workflow’s own timeout, --no-retry attempts once regardless of the retry policy, --quiet suppresses decoration, --json prints the run record. See Run a workflow.
edit - takes --yes, --no-clarify, and --no-discover.
validate - --json prints one object per workflow with its errors. Exits 1 if anything is invalid, so it works in a pre-commit hook or CI.
health - --since <age> narrows the window, --fix applies the repairs px0 can make itself (one confirmation each), --yes skips those confirmations, --json prints the whole report. No model call and no network.
improve - --since <age> narrows what it learns from, --dry-run shows the proposal and applies none of it, --show-evidence prints exactly what the model would be given and makes no model call, --yes skips every prompt, plus --no-clarify and --no-discover for the rebuild.
replay - --run <id> picks the captured run (default the most recent), --against <file> compares alternative instructions, --fixtures lists what has been captured, --forget deletes them.
See Improving a workflow.
See Workflow files for the full frontmatter reference.
ask
--route pins the destination (memory, brain, workflow, tool, answer). --explain prints the decision and stops. --continue carries on the last conversation; --no-remember skips the offer to keep what it taught px0. A workflow that can write is confirmed by name before ask will run it, unless --yes.
Flat rather than under an entity, for the same reason status is: it acts across every group, and there is no single noun to put in front of it. px0 brain ask still exists and still means the narrow, brain-only thing. See Ask.
approvals
list - --all includes resolved ones, --workflow <id> narrows to one workflow.
edit - --set KEY=VALUE (repeatable) changes one argument; omit it to open the arguments in $EDITOR as JSON. --note <why> records why.
approve - --yes skips the confirmation. reject - --reason <why>, which px0 workflows improve later reads. purge - --days N overrides the retention window.
See Approvals.
inbox
list - --all includes what you have read, --workflow <id> narrows to one workflow. clear - --all deletes unread entries too.
See Inbox.
memory
add - --kind {fact,preference,person,project,place}, --subject <what>, --pin to always include it. suggest - --yes keeps all of them without asking.
See Memory.
tools
list --status also asks Composio what is authorized, at one API call per toolkit. px0 --json tools list includes each tool’s parameter schema.
search - --toolkit <slug> restricts to one toolkit, --toolkits lists toolkits instead of tools, --limit N caps the results.
call - --arg KEY=VALUE (repeatable) passes arguments, --yes skips the confirmation a write tool asks for.
connect - --reconnect drops the existing authorization first. disconnect - --yes skips the confirmation. refresh - --forget drops the cache instead of re-reading it.
A tool declared in tools/*.toml may name the environment variables it needs with env = ["DEPLOY_TOKEN"]. Declaring any narrows what the command can see to PATH, HOME, and the ones named, so a token meant for one tool is not handed to every other tool a workflow can reach. A declared variable that is not set is refused before the command runs.
See Tools and Connections.
brain
add - --to <folder> overrides the destination folder, --from-file <path> ingests every source listed in a file, one per line.
refresh - --all re-fetches everything with a recorded source, --stale re-fetches what has gone stale (plus every stub), --days N sets what counts as stale (default 30).
export - --include-private includes the private folder, held back by default.
search / ask - --k N sets how many passages to retrieve, --kind {blog,paper,doc,video,stub} narrows to one kind. ask also takes --sources to print citations.
See The brain.
guidelines
A claim id is
<file>#<slug>, for example commit-style.md#summary-line. There is no px0 guidelines new - a guideline is only ever created by px0 workflows new drafting one from a workflow. See Guidelines.
runs
list takes --workflow <id>, --failed, --since <age> (12h, 7d, 2w), --running, and --json. px0 runs with no terminal falls back to the plain listing, and only the current store’s runs are listed.
mark - --good [NOTE], --bad [NOTE], or --clear, with --note as an alternative way to attach the sentence. The note is what makes a mark worth having: “bad” says a run was wrong, “it missed the two PRs I reviewed” says how.
stats - --since <age> narrows the window, --json prints the full rollup.
See Browse runs.
daemon
install takes --fallback-cron to force cron over the native mechanism. See Schedules and the daemon.
changes
list takes --since <age> (12h, 7d, 2w), --actor <name> (builder, update, user:manual), and --json. See History.
store
export strips secrets: the Composio key is blanked in the exported config.toml, and its version history is dropped from the export so the key is not recoverable from the history blobs either. import takes --merge to add what is missing and keep everything already here, or --force to let the import win on a collision - without either, importing into an existing store stops rather than silently overwriting. sync - --dry-run says what would move, --pull takes changes without sending any, --push sends without taking. Content merges file by file; the version history stays put, because it is a SQLite database and pointing a folder-syncing tool at it is how it gets corrupted. A file changed in both places is kept beside yours rather than overwritten. See The store.
config
See Configuration.
status
doctor and runs list --failed would surface separately - assembled from local state, with no network or model call. --hours N sets how far back a failure still counts as news (default 24). See Status.
doctor
0 when all pass, 4 when any fail. --quick skips the slower checks that need a live subprocess or a filesystem walk.
The checks are credentials, versions, locks, schema, connections, workflows, unreferenced_guidelines, update, daemon, harness, index, and private_folder. See Troubleshooting.
mcp
--allow-runs is required before a client can actually run a workflow. See MCP.

