Skip to main content
px0 is a Python CLI distributed on PyPI and installed with pipx. It writes everything it knows into one directory you own, ~/.px0 by default.

Prerequisites

  • Python 3.11 or newer.
  • A coding agent CLI that px0 uses as its model backend: claude, gemini, pi, or opencode. px0 reuses that CLI’s own login, so pick whichever one you already sign into.
  • A Composio API key, for workflows that reach other apps. You can skip this and add it later.

Install

The installer bootstraps pipx if it is missing, installs px0 from PyPI, runs px0 init, and offers to install the scheduler daemon. Four environment variables change what it does:
Piping into sh leaves no terminal on stdin, so the daemon prompt is skipped automatically. Run px0 daemon install yourself afterwards.

Install from a clone

Initialize a store

This scaffolds ~/.px0 (or $PX0_HOME if set): workflows/, guidelines/, brain/, output/, tools/, plus config.toml and a set of starter guideline files you can read, edit, or delete like any other file. Nothing here is hidden or binary. init also asks for your Composio API key, which is what px0 uses to reach Gmail, Slack, GitHub, Calendar, and every other toolkit. Pass it directly, or skip it and set it later:
There is no prompt when stdin is not a terminal, so px0 init is safe in scripts and installers - it creates the store and tells you to run px0 config composio when you have a key. That key is all the connection setup there is. Individual apps authorize themselves the first time a workflow needs one, so you never connect a service you turn out not to use. See Connections.

Pick a model backend

By default the model backend is claude -p. If you use a different coding agent CLI, pass --harness at init time:
That picks the right non-interactive invocation for the CLI and writes it to model.harness_cmd in config.toml. To switch later, or to pick a specific model rather than just the harness:
It lists the harnesses it knows about with their PATH status, takes a model name to select, and actually invokes the result before saving - so a typo’d model name or a missing API key is caught there instead of mid-workflow. px0 never asks for or stores a provider key itself; that stays with the harness CLI’s own login.
Any other command works too. Set model.harness_cmd in config.toml to a wrapper script or a pinned path, and px0 appends the prompt as the final argument.

Confirm it is wired up

Every line should be a . doctor exits 0 when everything passes and 4 when any check fails, so it works in a health-check script. On a freshly initialized store you will see something like:
The starter guidelines are reported as unreferenced because no workflow lists them yet - that is expected on a new store, not a fault. harness harness responded means px0 actually invoked your coding agent CLI and got something back; if that line fails, fix it before anything else, because every workflow depends on it. See Troubleshooting for what each check means and how to clear a failure.

Colour, animation, and pipes

On a terminal px0 uses colour sparingly (a failure, a value you can act on) and shows a spinner while something slow is happening. Pipe it anywhere and all of that disappears: no escape sequences, no spinner redraws, and status glyphs become [OK] / [FAIL] so output stays greppable.
--json implies plain output everywhere - machine-readable data is never decorated.

Uninstall

This tears down any installed scheduler (launchd plist or systemd service) and removes the px0 binary via pipx / pip. Your store directory (~/.px0) and all your workflows, guidelines, brain, and history are preserved. To remove px0 and delete all your store data at the same time:
Or without interactive confirmation:

Next steps

Quickstart

Get a real output end to end.

Core concepts

What lives in the store, and why.
Once you have a workflow or two, px0 status is the fastest way to check whether anything needs attention - the daemon, recent failures, and the install itself, in one screen with no network call. See Status.