Skip to content

CLI reference

Every command and flag of p99, generated from its own definitions. p99 <command> --help prints the same in the terminal.

p99 [OPTIONS] <COMMAND>

These work with every command.

Argument What it does
--json Answer in JSON, for agents and scripts
--account <name> The account to use, when the config has several
--agent Act as an agent of the configured person, shown as their name with a * (or P99_AGENT=1)

Open the inbox in the terminal.

p99 tui [OPTIONS]

Set up an account, step by step: the Cloudflare token, D1, R2, the Worker, routes and keys.

p99 setup [OPTIONS]
Argument What it does
--token <token> The Cloudflare API token, or a reference to it; P99_TOKEN in the environment keeps it out of the shell history
--account-id <id> The Cloudflare account id
--name <name> Your name, as P99 shows it
--email <email> Your e-mail, which becomes a manager
--vault <vault> Keep the token and the key in this vault of the password manager CLI
--no-vault Keep the secrets in the config file (mode 0600)
--yes Take the default for every question, never ask
--worker <name> The Worker’s script name (p99)
--database <name> The D1 database’s name (p99)
--bucket <name> The R2 bucket’s name (p99)
--host <host[=env[:kind]]> A host this account serves, with its environment and kind (production:release by default); repeat it
--rate-namespace <id> The rate-limiting namespace id, when setup can’t pick a free one
--resend-key <key> A Resend API key, which turns mail on; P99_RESEND_KEY in the environment keeps it out of the shell history
--mail-from <from> The mail sender, such as “P99 <p99@example.com>”
--no-mail Leave mail off without asking

Upload this version’s Worker to an account.

p99 deploy [OPTIONS]
Argument What it does
--no-check Skip the health check of the account’s hosts

List the Worker build embedded in this binary, without touching Cloudflare.

p99 bundle [OPTIONS]

List the hosts P99 serves; add, remove or set one.

p99 hosts [OPTIONS] [COMMAND]

Add a host: its route, its record and its environment.

p99 hosts add [OPTIONS] <HOST>
Argument What it does
<HOST> Required
--env <ENV> The host’s environment. Default production
--kind <KIND> The environment’s kind, when it is new or changes. One of development, release

Remove a host from the Worker and the config; its items stay.

p99 hosts remove [OPTIONS] <HOST>
Argument What it does
<HOST> Required

Change where the button sits, which pages it skips, its theme and words.

p99 hosts set [OPTIONS] <HOST>
Argument What it does
<HOST> Required
--corner <CORNER> The button’s corner. One of bottom-right, bottom-left, top-right, top-left
--offset <X,Y> Pixels from the corner’s two edges
--above <selector> Sit above this element while it shows
--off <pattern> A path where P99 never loads; repeat it, they replace the list
--theme <key=value> A theme variable; an empty value removes it. Repeatable
--string <key=value> One of the panel’s words; an empty value removes it. Repeatable

Mint a personal code for a person on one or more hosts.

p99 invite [OPTIONS] --name <NAME> --email <EMAIL> <HOSTS>...
Argument What it does
<HOSTS>... The hosts the code works on. Required
--name <NAME> The person’s name, as P99 shows it
--email <EMAIL> The person’s e-mail, which ties their items to them
--manager Let the person see and change every item

List the personal codes.

p99 invites [OPTIONS]
Argument What it does
--host <HOST> Only the codes for this host

Revoke a personal code.

p99 revoke [OPTIONS] <ID>
Argument What it does
<ID> The code’s id, from p99 invites. Required

List items.

p99 list [OPTIONS] [HOST]
Argument What it does
<HOST> The host to list
--all Every host
--status <STATUS> Open, closed, any or one status. Default open
--kind <KIND> Only this kind: bug, feature, improvement, question or task
--mine Only what you reported
-q, --query <text> Items whose title or text holds these words, accents ignored
--limit <LIMIT> At most this many items. Default 50

Show an item with its comments, events and landings.

p99 show [OPTIONS] <KEY>
Argument What it does
<KEY> The item’s key, such as BUG-12, or its number. Required
--host <HOST> The host the item belongs to

File an item on a host.

p99 file [OPTIONS] --kind <KIND> --title <TITLE> <HOST>
Argument What it does
<HOST> The host the item is for. Required
--kind <KIND> What it is. One of bug, feature, improvement, question, task
--title <TITLE> One line that says what it is about
--body <BODY> The text, or - to read it from standard input
--page <path> The page it is about. Default /
--attach <file> A file to attach; repeat it

Comment on an item.

p99 comment [OPTIONS] <KEY> <TEXT>
Argument What it does
<KEY> The item’s key, such as BUG-12, or its number. Required
<TEXT> The text, or - to read it from standard input. Required
--internal For managers only
--attach <file> A file to attach; repeat it
--host <HOST> The host the item belongs to

Change an item’s status.

p99 status [OPTIONS] <KEY> <STATUS>
Argument What it does
<KEY> The item’s key, such as BUG-12, or its number. Required
<STATUS> The new status. Required; one of new, confirmed, in_progress, waiting, resolved, abandoned, duplicate
--duplicate-of <KEY> With duplicate: the item this one repeats
--host <HOST> The host the item belongs to

Assign an item to someone, or to no one.

p99 assign [OPTIONS] <KEY> [WHO]
Argument What it does
<KEY> The item’s key, such as BUG-12, or its number. Required
<WHO> An e-mail address, or me
--none Leave it unassigned
--host <HOST> The host the item belongs to

Download an attachment.

p99 download [OPTIONS] <ID>
Argument What it does
<ID> The file’s id, from p99 show. Required
-o, --out <path> Where to save it (its own name by default)

Tell P99 which items this checkout’s commits fixed or referred to.

p99 announce [OPTIONS] [HOST]
Argument What it does
<HOST> The host the build went to; its environment is the build’s
--env <ENV> The environment, when no host names it
--branch <BRANCH> The branch (the current one by default)
--version <VERSION> The version (git describe by default)
--rev <range> A git range; the default is the last 500 commits

Bring items over from another tracker, keeping their keys and numbers.

p99 import [OPTIONS] --host <HOST> <bundle-dir>
Argument What it does
<bundle-dir> A directory holding bundle.jsonl and the files it names. Required
--host <HOST> The host the items belong to
--dry-run Report what would change, and write nothing