CLI reference

Every pln command and flag.

The CLI installs as pln (alias: plain). Most commands operate on a repository and take --repo <org>/<name>. List-style commands accept --json for machine-readable output.

Authentication and global flags

pln login [--url <url>]   # device-flow sign in
pln logout                # remove local credentials
pln whoami                # current user and organisations
Flag / variableMeaning
--url <url>Target server for this invocation
PLAIN_URLDefault server for the shell
--repo <org>/<name>Repository for the command
--jsonJSON output on list/get commands

Credentials live in ~/.plain/credentials.json (owner-only permissions).

issue

pln issue list   [--status todo|in_progress|done]
pln issue get    --number <n>
pln issue branch --number <n>     # prints a linked branch name
pln issue create --title <t> [--body <t> | --body-file <path>]
                 [--priority none|urgent|high|medium|low]
                 [--effort none|low|medium|high|extra-high]
                 [--labels a,b] [--assignee <id>]
pln issue update --number <n> [--title] [--body] [--status]
                 [--priority] [--effort] [--labels]
                 [--assignee | --unassign]
pln issue delete --number <n>

pr

pln pr list   [--status draft|open|closed]
pln pr get    --number <n>
pln pr create --base <branch> --head <branch> --title <t>
              [--body <t> | --body-file <path>]
pln pr update --number <n> [--title] [--body] [--status]
              [--labels] [--reviewers] [--assignee | --unassign]
pln pr merge  --number <n>
pln pr close  --number <n>
pln pr reopen --number <n>

doc

pln doc list
pln doc get    --id <docId>
pln doc create --title <t> [--body <t> | --body-file <path>]
pln doc update --id <docId> [--title] [--body]
pln doc delete --id <docId>

comment and review

pln comment list   --on pr|issue --number <n>
pln comment create --on pr|issue --number <n> --body <t> | --body-file <path>
pln comment update --id <commentId> --body <t> | --body-file <path>
pln comment delete --id <commentId>

pln review list   --number <n>
pln review create --number <n> --event comment|approve|request_changes
                  [--summary <t>] [--comments-file <path>]

--comments-file is a JSON array of inline comments: { "path", "line", "side": "old"|"new", "body" }.

relation

pln relation list   --on pr|issue --number <n>
pln relation add    --type <kind> --from pr:<n>|issue:<n> --to pr:<n>|issue:<n>
pln relation delete --id <relationId>

repo

pln repo list
pln repo create   --name <name>
pln repo rename   --repo <name> --name <newName>
pln repo feedback --repo <name> --enabled true|false
pln repo delete   --repo <name>

token and publish

pln token create --name <label> [--org <slug>] [--read-only] [--ttl-minutes <n>]
pln publish [--tag <dist-tag>]

token create prints the token once with a ready-made .npmrc block. publish mints a short-lived token and publishes the scoped package in the current directory. See Registry tokens and Publishing.