Clients and client reports
Clients, what they owe you, dated updates, report editions and private portal links.
Clients, what they owe you, dated updates, report editions and private portal links. On your own computer, pmo help <command> prints the same text, for example pmo help client list.
pmo client list
Every client: engagements, projects, modules, open activities, worst health.
pmo client list [<word>] [--q <text>] [--all] [--json]Example
pmo client list --json
`pmo help filters` prints these filters in full, and the bare-word search.pmo client show
One client: its contacts, every engagement with its counts, and the totals.
pmo client show <id> [--all] [--json]Example
pmo client show cross-systemspmo client create
Register a client — who an engagement is for.
pmo client create <id> --name "<name>" --kind internal|external|pursuit [--industry "<what they do>"] [--primary-contact "<who>"] [--notes "<anything else>"] --as person:<id>pmo client set
Correct a client's name, kind, industry, contact or notes.
pmo client set <id> <field=value>... --as person:<id>pmo client contact add
Record one of a client's people — who its reports are addressed to.
pmo client contact add <client> --name "<name>" --role "<role>" [--email <addr>] [--github <handle>] --as person:<id>Example
pmo client contact add cross-energy --name "you Farias" --role "Chairman and chief executive" \
--github you --as person:you
A write: it needs an identity (--as, or PMO_ACTOR) and PMO_WRITES=1.
`pmo whoami --grants` prints what this actor may do above the activity.pmo client contact remove
Take one of a client's people off its contacts.
pmo client contact remove <client> --name "<name>" --as person:<id>Example
pmo client contact remove cross-energy --name "you Farias" --as person:you
A write: it needs an identity (--as, or PMO_ACTOR) and PMO_WRITES=1.
`pmo whoami --grants` prints what this actor may do above the activity.pmo client partner add
Record somebody working on a client's behalf.
pmo client partner add <client> --name "<name>" --role "<role>" [--email <addr>] [--github <handle>] --as person:<id>Example
pmo client partner add cross-systems --name "FanHero" --role "Network partner on Reef" --as person:you
A write: it needs an identity (--as, or PMO_ACTOR) and PMO_WRITES=1.
`pmo whoami --grants` prints what this actor may do above the activity.pmo client partner remove
Take somebody off a client's partners.
pmo client partner remove <client> --name "<name>" --as person:<id>Example
pmo client partner remove cross-systems --name "FanHero" --as person:you
A write: it needs an identity (--as, or PMO_ACTOR) and PMO_WRITES=1.
`pmo whoami --grants` prints what this actor may do above the activity.pmo request remove
Take a request recorded by mistake off the record; close one the client answered.
pmo request remove <id> --eng <slug>Example
pmo request remove pend-024 --eng example-client --as person:you
A write: it needs an identity (--as, or PMO_ACTOR) and PMO_WRITES=1.
`pmo whoami --grants` prints what this actor may do above the activity.pmo request followup remove
Take one follow-up date off a request.
pmo request followup remove <id> --date <YYYY-MM-DD> --eng <slug>Example
pmo request followup remove pend-007 --eng example-client --date 2026-09-29 --as person:you
A write: it needs an identity (--as, or PMO_ACTOR) and PMO_WRITES=1.
`pmo whoami --grants` prints what this actor may do above the activity.pmo request followup set
Correct a follow-up: the day it was sent, or what it chased.
pmo request followup set <id> --date <YYYY-MM-DD> [--on <YYYY-MM-DD>] [--note "<what was chased>"] --eng <slug>Example
pmo request followup set pend-007 --eng example-client --date 2026-09-29 --on 2026-09-30 --note "Asked for the written sign-off." --as person:you
A write: it needs an identity (--as, or PMO_ACTOR) and PMO_WRITES=1.
`pmo whoami --grants` prints what this actor may do above the activity.pmo request list
What the engagement is waiting on the client for — open requests, or --all.
pmo request list --eng <slug> [--module <id>] [--all] [--json]Example
pmo request list --eng example-client --module parser
`pmo help filters` prints these filters in full, and the bare-word search.pmo request add
Record something asked of the client.
pmo request add --eng <slug> --ask "<what was asked>" [--module <id>] [--requested <date>] [--to "<who>"] [--blocker]Example
pmo request add --eng example-client --module appraisal-import-module \
--ask "A sample Lido export to build and test against." --requested 2026-09-28 --as agent:rag
A write: it needs an identity (--as, or PMO_ACTOR) and PMO_WRITES=1.
`pmo whoami --grants` prints what this actor may do above the activity.pmo request set
Correct a request: its words, its date, who it went to, its module, its number, how and by which update it was resolved, or reopen it.
pmo request set <id> ask=… | requested=<date> | to=… | module=<id> | ref=… | resolution=… | resolved_by=<upd-id> | closed= --eng <slug>Example
pmo request set pend-009 --eng example-client resolution="the client confirmed the dataset on a call." --as agent:rag
A write: it needs an identity (--as, or PMO_ACTOR) and PMO_WRITES=1.
`pmo whoami --grants` prints what this actor may do above the activity.pmo request followup
Record that the client was chased again.
pmo request followup <id> --eng <slug> [--date <date>]Example
pmo request followup pend-007 --eng example-client --date 2026-09-29 --as agent:rag
A write: it needs an identity (--as, or PMO_ACTOR) and PMO_WRITES=1.
`pmo whoami --grants` prints what this actor may do above the activity.pmo request close
Close a request — the client answered, or it no longer applies — and say how.
pmo request close <id> --eng <slug> [--date <date>] [--note "<how it was resolved>"] [--by <upd-id>]Example
pmo request close pend-001 --eng example-client --date 2026-10-01 --note "example granted access to the sandbox." --as agent:rag
A write: it needs an identity (--as, or PMO_ACTOR) and PMO_WRITES=1.
`pmo whoami --grants` prints what this actor may do above the activity.pmo portal link create
Make a private link a client opens without an account — or reuse the scope's live one.
pmo portal link create (--client <id> | <slug> [--project <id> | --module <id>]) --label "<for whom>" [--expires <YYYY-MM-DD>] [--reports tracker,scope] [--new] [--note "<why>"] --as person:<id>Example
pmo portal link create --client example --label "Jane Smith" --as person:you
pmo portal link create --client example --label "John Doe" --new --as person:you
pmo portal link create example-client --module data-lakehouse-sandbox --label "Jane Smith" --as person:you
# one link per person, labelled with their name: each revokes on its own and every open is logged against it
# a second create for the same scope returns the same link unless --new
A write: it needs an identity (--as, or PMO_ACTOR) and PMO_WRITES=1.
`pmo whoami --grants` prints what this actor may do above the activity.pmo portal link list
An engagement's or a client's links, with when each was last opened.
pmo portal link list (<slug> | --client <id>) [--all] [--json]Example
pmo portal link list example-client
pmo portal link list --client example --all
`pmo help filters` prints these filters in full, and the bare-word search.pmo portal link show
One link, its history and its last opens.
pmo portal link show <link-id> [--hits <n>] [--json]Example
pmo portal link show pl-3k9x2m7q --hits 50pmo portal link copy
Print a link's URL again — logged.
pmo portal link copy <link-id> [--note "<why>"] --as person:<id>Example
pmo portal link copy pl-3k9x2m7q --as person:you # the same URL, again
A write: it needs an identity (--as, or PMO_ACTOR) and PMO_WRITES=1.
`pmo whoami --grants` prints what this actor may do above the activity.pmo portal link set
Change a link's label, expiry or reports.
pmo portal link set <link-id> label="<for whom>" | expires=<YYYY-MM-DD>|none | reports=tracker,scope [--note "<why>"] --as person:<id>Example
pmo portal link set pl-3k9x2m7q expires=2027-03-31 --as person:you
pmo portal link set pl-3k9x2m7q reports=tracker --as person:you # scope analysis off: an Owner's
A write: it needs an identity (--as, or PMO_ACTOR) and PMO_WRITES=1.
`pmo whoami --grants` prints what this actor may do above the activity.pmo portal link revoke
Stop a link working on its next request — with --children, every link below it too.
pmo portal link revoke <link-id> [--children] [--note "<why>"] --as person:<id>Example
pmo portal link revoke pl-3k9x2m7q --children --as person:you
A write: it needs an identity (--as, or PMO_ACTOR) and PMO_WRITES=1.
`pmo whoami --grants` prints what this actor may do above the activity.pmo portal hits
The portal log, newest first: which link opened which page, and when.
pmo portal hits (<slug> | --client <id>) [--link <link-id>] [--since <YYYY-MM-DD>] [--limit <n>] [--json]Example
pmo portal hits --client example --since 2026-10-01pmo portal people add
Let a client person open a link — they sign in with their email and a code.
pmo portal people add <link-id> --name "<their name>" --email <address> [--note "<why>"] --as person:<id>pmo portal people remove
Take a client person off a link; off their last link, they are removed and signed out.
pmo portal people remove <link-id> <person-id> [--note "<why>"] --as person:<id>pmo portal people list
The client people who may open a link, and when each last signed in.
pmo portal people list <link-id> [--json]pmo cycle list
The editions of an engagement's client report, newest first.
pmo cycle list --eng <slug> [--json]Example
pmo cycle list --eng example-client
`pmo help filters` prints these filters in full, and the bare-word search.pmo cycle add
Record the date a client report is as of, who it is for and how it is marked.
pmo cycle add --eng <slug> --as-of <date> [--audience customer|internal] [--classification "<label>"]Example
pmo cycle add --eng example-client --as-of 2026-09-28 --classification "Confidential" --as agent:rag
A write: it needs an identity (--as, or PMO_ACTOR) and PMO_WRITES=1.
`pmo whoami --grants` prints what this actor may do above the activity.pmo cycle set
Correct an edition: its date, who it is for, or how it is marked.
pmo cycle set <id> as_of=<date> | audience=customer|internal | classification=… --eng <slug>Example
pmo cycle set 2026-09-28 --eng example-client audience=internal --as agent:rag
A write: it needs an identity (--as, or PMO_ACTOR) and PMO_WRITES=1.
`pmo whoami --grants` prints what this actor may do above the activity.pmo cycle remove
Take away an edition entered by mistake.
pmo cycle remove <id> --eng <slug> [--note "<why>"]Example
pmo cycle remove 2026-09-21 --eng example-client --note "entered twice" --as agent:rag
A write: it needs an identity (--as, or PMO_ACTOR) and PMO_WRITES=1.
`pmo whoami --grants` prints what this actor may do above the activity.pmo update add
Record what happened on a project — when, who said it, which modules it touches, and what it changes.
pmo update add --eng <slug> [--project <id>] [--module <id>…] --on <date> [--at HH:MM] --from client|team --kind milestone|decision|progress|risk|note --text "…" --shown-to client|team [--person "…"] [--source call|email|meeting|document|message|chat|text] [--source-ref "…"] [--closes <request>…] [--stage <stage>] [--where "…"] [--concerns "…"] [--left "…"] [--next "…" --next-owner client|team] [--progress <0-100>]Example
pmo update add --eng example-client --project data-lakehouse --module data-lakehouse-sandbox \
--module data-quality-deterministic --on 2026-10-01 --from client --person "the client" \
--source call --kind milestone --shown-to client --closes pend-009 --closes pend-012 --stage 14 \
--text "the client confirmed on the call that the sandbox data and the rules are right." --as person:you
A write: it needs an identity (--as, or PMO_ACTOR) and PMO_WRITES=1.
`pmo whoami --grants` prints what this actor may do above the activity.pmo update list
The updates on an engagement, a project or a module, newest first.
pmo update list --eng <slug> [--project <id>] [--module <id>]… [--all] [--json]Example
pmo update list --eng example-client --module data-lakehouse-sandbox
`pmo help filters` prints these filters in full, and the bare-word search.pmo update show
One update in full, its changes numbered as --drop counts them.
pmo update show <upd> --eng <slug> [--json]Example
pmo update show upd-001 --eng example-clientpmo update set
Correct an update: its words, its day and time, who it came from, how it was heard, its kind, or who may read it.
pmo update set <upd> text=… | on=<date> | at=HH:MM | from=client|team | person=… | source=… | source_ref=… | kind=… | shown_to=client|team --eng <slug>Example
pmo update set upd-001 --eng example-client text="the client confirmed the sandbox data on the call." at=11:00 --as person:you
A write: it needs an identity (--as, or PMO_ACTOR) and PMO_WRITES=1.
`pmo whoami --grants` prints what this actor may do above the activity.pmo update confirm
Confirm a proposed update and apply its changes.
pmo update confirm <upd> --eng <slug> [--drop <n>…] --as person:<id>Example
pmo update confirm upd-001 --eng example-client --drop 2 --as person:you
A write: it needs an identity (--as, or PMO_ACTOR) and PMO_WRITES=1.
`pmo whoami --grants` prints what this actor may do above the activity.pmo update withdraw
Take an update out of the client's view, keeping it on the record.
pmo update withdraw <upd> --eng <slug> --reason "…"Example
pmo update withdraw upd-001 --eng example-client --reason "Recorded on the wrong module." --as person:you
A write: it needs an identity (--as, or PMO_ACTOR) and PMO_WRITES=1.
`pmo whoami --grants` prints what this actor may do above the activity.