Skip to content

CLI command reference

Auto-generated from zero ... --help. For agent workflows and MCP usage, see MCP connector docs and SKILL.md.

zero

Usage: zero [OPTIONS] COMMAND [ARGS]...

 Zero Hiring — AI-powered candidate screening.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --version             -v        Show version and exit.                                                                                                                                               │
│ --quiet                         Suppress spinners and progress output.                                                                                                                               │
│ --json                          Emit machine-readable JSON on stdout. Human prose (progress, prompts, banners) is routed to stderr. Errors become {"error": {"code": ..., "message": ...}} on stdout │
│                                 with non-zero exit.                                                                                                                                                  │
│ --envelope                      Wrap --json output as {"schema_version": "1", "data": ...}. Off by default for backward compat with consumers that expect bare arrays/objects.                       │
│ --install-completion            Install completion for the current shell.                                                                                                                            │
│ --show-completion               Show completion for the current shell, to copy it or customize the installation.                                                                                     │
│ --help                          Show this message and exit.                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ login         Log in or sign up. Uses device code flow by default.                                                                                                                                   │
│ whoami        Show current login status.                                                                                                                                                             │
│ logout        Log out: revoke the CLI token server-side, then remove local credentials.                                                                                                              │
│ update        Download the latest standalone CLI binary into ~/.zerohiring/bin/zero.                                                                                                                 │
│ account       Account-wide activity.                                                                                                                                                                 │
│ audit-log     Customer-visible audit log (security, access, hiring events).                                                                                                                          │
│ ats           ATS candidate phone-review workflow.                                                                                                                                                   │
│ hire          Open a new role.                                                                                                                                                                       │
│ status        Check your jobs and pipeline.                                                                                                                                                          │
│ candidates    View candidates for a job.                                                                                                                                                             │
│ invite        Invite candidates for AI interviews.                                                                                                                                                   │
│ results       View interview results.                                                                                                                                                                │
│ offers        Inspect and manage offer letters.                                                                                                                                                      │
│ close         Legacy alias for sending a candidate offer; charge a hire's close fee.                                                                                                                 │
│ team          Manage team members.                                                                                                                                                                   │
│ demo          Demo mode — simulate the hiring pipeline.                                                                                                                                              │
│ jobs          List and switch between jobs.                                                                                                                                                          │
│ billing       View billing and spend.                                                                                                                                                                │
│ clients       Manage RPO clients.                                                                                                                                                                    │
│ reviewers     Manage client-scoped reviewers (Hiring Managers).                                                                                                                                      │
│ integrations  ATS connection status, sync, write-back and job selection.                                                                                                                             │
│ outreach      Multi-step candidate outreach sequences.                                                                                                                                               │
│ sourcing      Search sourced candidates and add them to jobs.                                                                                                                                        │
│ pipeline      Run and inspect end-to-end hiring pipeline runs.                                                                                                                                       │
│ payments      Refund charges (approval-gated).                                                                                                                                                       │
│ interviews    Schedule and manage human (hiring-manager) interviews.                                                                                                                                 │
│ hiring-flow   Configure the hiring pipeline stages (stage plan) for a role.                                                                                                                          │
│ references    Request references from a candidate and see how many have responded.                                                                                                                   │
│ changelog     See what's new on the platform.                                                                                                                                                        │
│ help          Show CLI help, or search/read Help Center articles.                                                                                                                                    │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

account

Usage: zero account [OPTIONS] COMMAND [ARGS]...

 Account-wide activity.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ timeline           Show everything that happened on this account, in order.                                                                                                                          │
│ export             Export the signed-in user's own account data (right of access).                                                                                                                   │
│ rejection-reasons  The standardized rejection-reason vocabulary recruiters pick from.                                                                                                                │
│ sender-domain      This employer's own candidate-email sending domain.                                                                                                                               │
│ reporting          Analytics sections: roles, funnel, stages, timing, interviews, rejections. `ai-overrides` reports how often reviewers' decisions differed from the AI recommendation.             │
│ calendars          Calendars connected for interview scheduling.                                                                                                                                     │
│ mailboxes          Mailboxes connected for sending candidate outreach.                                                                                                                               │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

account calendars

Usage: zero account calendars [OPTIONS] COMMAND [ARGS]...

 Calendars connected for interview scheduling.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ list  List the calendars connected for interview scheduling, and their status.                                                                                                                       │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

account calendars list

Usage: zero account calendars list [OPTIONS]

 List the calendars connected for interview scheduling, and their status.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (auto-detected from login).                                                                                                                                │
│ --json                      Raw JSON output.                                                                                                                                                         │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

account export

Usage: zero account export [OPTIONS]

 Export the signed-in user's own account data (right of access).

 Returns your own profile, the organizations you own or belong to, and
 (if this login is also a candidate profile) that candidate record.
 Scoped to the caller only; it cannot export a colleague's account.
 Every export is recorded in the security audit log.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output.                                                                                                                                                                     │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

account mailboxes

Usage: zero account mailboxes [OPTIONS] COMMAND [ARGS]...

 Mailboxes connected for sending candidate outreach.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ list            List connected sending mailboxes: status, daily cap and last-7-day activity.                                                                                                         │
│ routing-impact  Preview what connecting one more mailbox at this scope would change.                                                                                                                 │
│ test-send       Send one real test email from a connected mailbox.                                                                                                                                   │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

account mailboxes list

Usage: zero account mailboxes list [OPTIONS]

 List connected sending mailboxes: status, daily cap and last-7-day activity.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (auto-detected from login).                                                                                                                                │
│ --json                      Raw JSON output.                                                                                                                                                         │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

account mailboxes routing-impact

Usage: zero account mailboxes routing-impact [OPTIONS]

 Preview what connecting one more mailbox at this scope would change.

 Read-only. Reports how many active roles would start sending from it and
 the daily send capacity before vs after, so the operator is told before
 connecting that it reroutes outreach rather than just adding capacity.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --client             <str>                    Client UUID the new mailbox would serve. Omit for an agency-level mailbox.                                                                             │
│ --cap                <int range> [1<=x<=400]  Daily send cap the new mailbox would carry (default 100).                                                                                              │
│ --employer-id        <str>                    Employer UUID (auto-detected from login).                                                                                                              │
│ --json                                        Raw JSON output.                                                                                                                                       │
│ --help                                        Show this message and exit.                                                                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

account mailboxes test-send

Usage: zero account mailboxes test-send [OPTIONS] {connection_id}

 Send one real test email from a connected mailbox.

 The email goes out immediately from the connected address and cannot be
 unsent. Use it to check a newly connected mailbox delivers; address it
 to yourself or a teammate. Requires `--yes` after explicit human
 approval in this turn; never invent it.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    connection_id      <str>  Mailbox connection UUID. [required]                                                                                                                                   │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --to               <str>  Recipient address for the test email. [required]                                                                                                                        │
│ *  --subject          <str>  Subject line (max 255 chars). [required]                                                                                                                                │
│ *  --body             <str>  Plain-text body. [required]                                                                                                                                             │
│    --yes      -y             Required in JSON/MCP mode; skip the confirmation prompt.                                                                                                                │
│    --json                    Raw JSON output.                                                                                                                                                        │
│    --help                    Show this message and exit.                                                                                                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

account rejection-reasons

Usage: zero account rejection-reasons [OPTIONS] COMMAND [ARGS]...

 The standardized rejection-reason vocabulary recruiters pick from.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ show   Show the employer's rejection-reason vocabulary (what `candidates reject` picks from).                                                                                                        │
│ stats  Rejection counts per reason over the last 90 days.                                                                                                                                            │
│ set    Replace the employer's rejection-reason vocabulary. Owner only (the backend 403s otherwise).                                                                                                  │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

account rejection-reasons set

Usage: zero account rejection-reasons set [OPTIONS]

 Replace the employer's rejection-reason vocabulary. Owner only (the backend 403s otherwise).

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --reasons-json        <str>  Full replacement list as JSON: '[{"id":"not-a-fit","label":"Not a fit","active":true}, ...]'. This replaces the whole vocabulary; keep an existing reason's id to    │
│                                 rename it in place, or set active:false to retire it without losing historic labels.                                                                                 │
│                                 [required]                                                                                                                                                           │
│    --employer-id         <str>  Employer UUID (system-key credentials only; auto-scoped otherwise).                                                                                                  │
│    --json                       Raw JSON output.                                                                                                                                                     │
│    --help                       Show this message and exit.                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

account rejection-reasons show

Usage: zero account rejection-reasons show [OPTIONS]

 Show the employer's rejection-reason vocabulary (what `candidates reject` picks from).

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (system-key credentials only; auto-scoped otherwise).                                                                                                      │
│ --json                      Raw JSON output.                                                                                                                                                         │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

account rejection-reasons stats

Usage: zero account rejection-reasons stats [OPTIONS]

 Rejection counts per reason over the last 90 days.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (system-key credentials only; auto-scoped otherwise).                                                                                                      │
│ --json                      Raw JSON output.                                                                                                                                                         │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

account reporting

Usage: zero account reporting [OPTIONS] COMMAND [ARGS]...

 Analytics sections: roles, funnel, stages, timing, interviews, rejections. `ai-overrides` reports how often reviewers' decisions differed from the AI recommendation.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ show          Read one reporting section: counts, rates (each with its numerator/denominator), and rows.                                                                                             │
│ ai-overrides  How often reviewers' decisions differed from the AI recommendation.                                                                                                                    │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

account reporting ai-overrides

Usage: zero account reporting ai-overrides [OPTIONS]

 How often reviewers' decisions differed from the AI recommendation.

 Override rate per job, per reviewer and per pipeline stage, each carrying
 the sample count (n) it was taken from, plus a flag on a reviewer who
 almost never overrides over a meaningful sample -- a sign they may be
 deferring to the AI rather than judging. Rates and counts only: no raw
 AI score is ever returned. Same access rule as `reporting show`
 (another employer's report is a 403, reviewers are denied).

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (auto-detected from login).                                                                                                                                │
│ --job-id             <str>  Scope to one job.                                                                                                                                                        │
│ --json                      Raw JSON output.                                                                                                                                                         │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

account reporting show

Usage: zero account reporting show [OPTIONS] {section}

 Read one reporting section: counts, rates (each with its numerator/denominator), and rows.

 Scoped to the caller's employer. Every rate carries its own numerator
 and denominator rather than a bare percentage.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    section      <str>  One of: roles, funnel, stages, timing, interviews, rejections. [required]                                                                                                   │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id              <str>  Employer UUID (auto-detected from login).                                                                                                                          │
│ --client-id                <str>  Scope to one RPO client.                                                                                                                                           │
│ --job-id                   <str>  Scope to one job.                                                                                                                                                  │
│ --location-region          <str>                                                                                                                                                                     │
│ --recruiter-user-id        <str>                                                                                                                                                                     │
│ --date-from                <str>  ISO date/datetime, window start.                                                                                                                                   │
│ --date-to                  <str>  ISO date/datetime, window end.                                                                                                                                     │
│ --compare                  <str>  Pass 'previous' to also return the immediately preceding window of equal length (requires both --date-from and --date-to).                                         │
│ --json                            Raw JSON output.                                                                                                                                                   │
│ --help                            Show this message and exit.                                                                                                                                        │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

account sender-domain

Usage: zero account sender-domain [OPTIONS] COMMAND [ARGS]...

 This employer's own candidate-email sending domain.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ show    Show this employer's own sending-domain state (not an RPO client's -- see `clients sender-domain`).                                                                                          │
│ set     Provision (or reuse) this employer's sending domain for the given from-address.                                                                                                              │
│ verify  Validate the published DNS records and set `verified` from the result.                                                                                                                       │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

account sender-domain set

Usage: zero account sender-domain set [OPTIONS]

 Provision (or reuse) this employer's sending domain for the given from-address.

 Returns the DNS records to publish before `verify` will pass; nothing is
 sent to candidates by this call itself.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --email        <str>  The from-address candidate email this employer should send as [required]                                                                                                    │
│    --json                Raw JSON output.                                                                                                                                                            │
│    --help                Show this message and exit.                                                                                                                                                 │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

account sender-domain show

Usage: zero account sender-domain show [OPTIONS]

 Show this employer's own sending-domain state (not an RPO client's -- see `clients sender-domain`).

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output.                                                                                                                                                                     │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

account sender-domain verify

Usage: zero account sender-domain verify [OPTIONS]

 Validate the published DNS records and set `verified` from the result.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output.                                                                                                                                                                     │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

account timeline

Usage: zero account timeline [OPTIONS]

 Show everything that happened on this account, in order.

 Merges job creation, stage changes, notes, interviews, scores, feedback,
 ATS sync, AI decisions, email outreach, and team member changes across
 every job on the account into one reverse-chronological feed -- "what
 has happened on this account". Use `jobs timeline <job_id>` instead when
 the question is scoped to a single role, or `candidates timeline
 <applicant_id>` when it's scoped to one person.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID. Only needed for a system-key credential with no default employer (auto-scoped for a normal per-user CLI token).                                           │
│ --page               <int>  Page number (1-based). [default: 1]                                                                                                                                      │
│ --limit              <int>  Results per page. [default: 20]                                                                                                                                          │
│ --since              <str>  Only events on or after this ISO-8601 datetime (or a date like 2026-09-01).                                                                                              │
│ --json                      Raw JSON output.                                                                                                                                                         │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

ats

Usage: zero ats [OPTIONS] COMMAND [ARGS]...

 ATS candidate phone-review workflow.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ phone-review  Candidates whose phone number needs a recruiter's review before an AI phone interview.                                                                                                 │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

ats phone-review

Usage: zero ats phone-review [OPTIONS] COMMAND [ARGS]...

 Candidates whose phone number needs a recruiter's review before an AI phone interview.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ list              List ATS candidates flagged for phone-number review.                                                                                                                               │
│ update-phone      Correct a flagged candidate's phone number.                                                                                                                                        │
│ resume-interview  Resume the AI phone interview for a candidate whose phone number was just corrected.                                                                                               │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

ats phone-review list

Usage: zero ats phone-review list [OPTIONS]

 List ATS candidates flagged for phone-number review.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (auto-detected from login)                                                                                                                                 │
│ --json                      Raw JSON output                                                                                                                                                          │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

ats phone-review resume-interview

Usage: zero ats phone-review resume-interview [OPTIONS] {ats_candidate_id}

 Resume the AI phone interview for a candidate whose phone number was just corrected.

 Idempotent: if an active phone-call interview already exists for this
 candidate's most recent application, this re-sends the invite rather
 than creating a duplicate. Requires a valid, non-blocked phone number on
 file -- fix it first with `phone-review update-phone` if this errors.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    ats_candidate_id      <str>  The ATS candidate id (from `phone-review list`) [required]                                                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

ats phone-review update-phone

Usage: zero ats phone-review update-phone [OPTIONS] {ats_candidate_id}

 Correct a flagged candidate's phone number.

 This only saves the number; it does not restart the AI phone interview --
 run `phone-review resume-interview` afterward for that.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    ats_candidate_id      <str>  The ATS candidate id (from `phone-review list`) [required]                                                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --phone        <str>  Corrected phone number (normalized to E.164 on save) [required]                                                                                                             │
│    --json                Raw JSON output                                                                                                                                                             │
│    --help                Show this message and exit.                                                                                                                                                 │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

audit-log

Usage: zero audit-log [OPTIONS] COMMAND [ARGS]...

 Customer-visible audit log (security, access, hiring events).

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ list    List the employer's audit log: security, candidate-data access, and                                                                                                                          │
│         hiring-timeline events, newest first.                                                                                                                                                        │
│ export  Export the audit log as CSV, same filters as `audit-log list`.                                                                                                                               │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

audit-log export

Usage: zero audit-log export [OPTIONS]

 Export the audit log as CSV, same filters as `audit-log list`.

 Admin and account manager only. Every export is itself recorded as a
 security event (`audit_log.exported`) on the account it was pulled
 from. Writes raw CSV to stdout by default so it's pipeable; pass
 --output FILE to write it to disk instead.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id            <str>  Employer UUID (auto-detected from login).                                                                                                                            │
│ --category               <str>  Filter by category: security | access | hiring.                                                                                                                      │
│ --actor-user-id          <str>  Only events performed by this user.                                                                                                                                  │
│ --since                  <str>  Only events on or after this ISO-8601 datetime.                                                                                                                      │
│ --until                  <str>  Only events on or before this ISO-8601 datetime.                                                                                                                     │
│ --output         -o      <str>  Write the CSV to this file instead of stdout.                                                                                                                        │
│ --help                          Show this message and exit.                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

audit-log list

Usage: zero audit-log list [OPTIONS]

 List the employer's audit log: security, candidate-data access, and hiring-timeline events, newest first.

 Admin and account manager only -- the backend 403s any other role.
 Paginated with a keyset `cursor` rather than a page number: pass the
 previous call's `next_cursor` to continue; a missing/null `next_cursor`
 means there is nothing further back. Use `audit-log export` for the
 same filters as a CSV file.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id          <str>  Employer UUID (auto-detected from login).                                                                                                                              │
│ --category             <str>  Filter by category: security | access | hiring.                                                                                                                        │
│ --actor-user-id        <str>  Only events performed by this user.                                                                                                                                    │
│ --since                <str>  Only events on or after this ISO-8601 datetime.                                                                                                                        │
│ --until                <str>  Only events on or before this ISO-8601 datetime.                                                                                                                       │
│ --cursor               <str>  Keyset page cursor from a previous call's `next_cursor`.                                                                                                               │
│ --limit                <int>  Results per page. [default: 50]                                                                                                                                        │
│ --json                        Raw JSON output.                                                                                                                                                       │
│ --help                        Show this message and exit.                                                                                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

billing

Usage: zero billing [OPTIONS] COMMAND [ARGS]...

 View billing and spend.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ docs            Print local billing command and spend-safety notes.                                                                                                                                  │
│ show            One-screen view of spend across all your jobs.                                                                                                                                       │
│ costs           Line-itemized per-tenant vendor cost sheet for one calendar month.                                                                                                                   │
│ usage           Plan plus this month's usage: sourced profiles and interview minutes.                                                                                                                │
│ invoices        The employer's monthly invoices, newest first (last 24).                                                                                                                             │
│ sourcing-usage  This month's sourced-profile usage against the plan cap.                                                                                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

billing costs

Usage: zero billing costs [OPTIONS]

 Line-itemized per-tenant vendor cost sheet for one calendar month.

 Joins sourcing usage, interview vendor costs, an agent-inference cost
 placeholder, and payment charges into one call (ZER-668) -- no manual
 joining of separate usage/billing endpoints required.

 This hits an admin-only endpoint gated by the shared backend system key,
 not a regular per-employer `zero login` token: it can read any tenant's
 spend, not just the caller's own employer. Configure
 ZEROHIRING_API_KEY to the system key when running this as an internal
 tool. Cost lines with no configured $ rate (sourcing, agent inference)
 come back as `cost_usd: null` with an explanatory note rather than being
 silently omitted -- see `cost_note` / `note` fields in --json output.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│    --employer-id        <str>  Employer UUID (auto-detected if not passed)                                                                                                                           │
│ *  --month              <str>  Calendar month to report on, YYYY-MM (e.g. 2026-06) [required]                                                                                                        │
│    --json                      Raw JSON output                                                                                                                                                       │
│    --help                      Show this message and exit.                                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

billing docs

Usage: zero billing docs [OPTIONS]

 Print local billing command and spend-safety notes.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

billing invoices

Usage: zero billing invoices [OPTIONS]

 The employer's monthly invoices, newest first (last 24).

 Read-only. Empty for card-billed accounts -- those are charged per
 role-open/close event (see `billing show`), not invoiced monthly.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (auto-detected)                                                                                                                                            │
│ --json                      Raw JSON output                                                                                                                                                          │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

billing show

Usage: zero billing show [OPTIONS]

 One-screen view of spend across all your jobs.

 Shows charged open/close fees per job plus employer totals, pulled from
 the `job_payments` ledger. Also shows each job's budgeted compensation
 when the backend returns it (ZER-3277) -- the basis for its open fee
 (3% x budgeted compensation x positions). If the employer hasn't paid
 anything yet, the backend returns `source=estimate` and we print a
 banner so the user isn't misled into thinking we have real billing
 data.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (auto-detected)                                                                                                                                            │
│ --json                      Raw JSON output                                                                                                                                                          │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

billing sourcing-usage

Usage: zero billing sourcing-usage [OPTIONS]

 This month's sourced-profile usage against the plan cap.

 Read-only. Shows used / quota / remaining for the current calendar
 month plus a per-channel breakdown of search calls and billed matches.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (auto-detected)                                                                                                                                            │
│ --json                      Raw JSON output                                                                                                                                                          │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

billing usage

Usage: zero billing usage [OPTIONS]

 Plan plus this month's usage: sourced profiles and interview minutes.

 Read-only. Use it to answer "how much of our plan have we used this
 month?" before a large sourcing run or a batch of AI interviews.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (auto-detected)                                                                                                                                            │
│ --json                      Raw JSON output                                                                                                                                                          │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

candidates

Usage: zero candidates [OPTIONS] COMMAND [ARGS]...

 View candidates for a job.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ list        List all candidates for a job with scores and rankings.                                                                                                                                  │
│ search      Search ALL of the employer's candidates across every job and integration.                                                                                                                │
│ count       How many candidates in the database match exact criteria.                                                                                                                                │
│ filter      List the candidates matching exact criteria (same filters as `count`).                                                                                                                   │
│ export-csv  Generate a downloadable file of the candidates matching exact                                                                                                                            │
│             criteria (same filters as `count`/`filter`) -- built server-side from                                                                                                                    │
│             the query, not from paging `filter` rows into context and re-typing                                                                                                                      │
│             them into a file by hand.                                                                                                                                                                │
│ detail      Show detailed info for a specific candidate, including full parsed                                                                                                                       │
│             resume (contact, experience, education, skills, languages, certs) and                                                                                                                    │
│             the excerpts that explain the candidate's ranking.                                                                                                                                       │
│ reject      Reject a candidate.                                                                                                                                                                      │
│ unreject    Undo a rejection.                                                                                                                                                                        │
│ text        Send one text message to a candidate.                                                                                                                                                    │
│ discard     Discard a sourced candidate from active sourcing and stop outreach.                                                                                                                      │
│ timeline    Show what happened with this candidate, in order.                                                                                                                                        │
│ export      Export everything on file for a candidate (GDPR Art. 15 / 20).                                                                                                                           │
│ delete      Erase ALL personal data for a candidate (GDPR Art. 17 right to erasure).                                                                                                                 │
│ hire        Send an offer. Candidate signature triggers hired status and billing.                                                                                                                    │
│ notes       Freeform notes on a candidate (ZER-2175).                                                                                                                                                │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

candidates count

Usage: zero candidates count [OPTIONS]

 How many candidates in the database match exact criteria.

 The count is the answer, not a by-product of listing: use this for "how
 many people do we have who ..." questions instead of paging
 `candidates filter` and counting rows. Filters compose with AND.

 This is the exact-criteria path. For fuzzy intent ("who has fintech
 experience") use `candidates search`, which runs semantic + keyword
 search.

 `--applied-within-days` / `--applied-before` (ZER-3446) add a recency
 dimension -- "how many applied this week", "who is still fresh", "who
 has gone cold" -- and may be combined into a window. Sourced-only
 candidates have no application date, so they fall out of scope for
 either flag; the coverage table and headline say so.

 ALWAYS report the returned `headline` alongside the number. Several of
 the filterable fields are unknown for part of the population, and the
 headline is where the backend states how many candidates were excluded
 only because a field is unknown for them rather than because they fail
 the filter. A bare count is a confidently wrong answer.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --source                     <str>    Restrict to one source: applied | sourced | ats.                                                                                                               │
│ --location-country           <str>    2-letter country code, exact match on the structured column.                                                                                                   │
│ --location-region            <str>    Region/state, exact match on the structured column.                                                                                                            │
│ --location-contains          <str>    Substring match on the freeform location text (looser, higher coverage).                                                                                       │
│ --title                      <str>    Substring match on current title.                                                                                                                              │
│ --company                    <str>    Substring match on current company.                                                                                                                            │
│ --min-years                  <float>  Minimum years of experience (inclusive).                                                                                                                       │
│ --max-years                  <float>  Maximum years of experience (inclusive).                                                                                                                       │
│ --skill                      <str>    Skill to require; repeatable, or one comma-separated value.                                                                                                    │
│ --skills-mode                <str>    Require 'all' listed skills (default) or 'any'. [default: all]                                                                                                 │
│ --applied-within-days        <int>    Only candidates who last applied to you within the last N days.                                                                                                │
│ --applied-before             <str>    Only candidates whose most recent application is before this date (YYYY-MM-DD).                                                                                │
│ --json                                Raw JSON output.                                                                                                                                               │
│ --help                                Show this message and exit.                                                                                                                                    │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

candidates delete

Usage: zero candidates delete [OPTIONS] {applicant_id}

 Erase ALL personal data for a candidate (GDPR Art. 17 right to erasure).

 IRREVERSIBLE. Deletes the applicant together with their applications,
 interviews, transcripts, recordings, and derived embeddings across every
 store. There is no undo and no soft-delete — unlike `jobs delete`, this
 is a hard erasure intended to satisfy a right-to-be-forgotten request.

 Requires the explicit `--confirm` flag; without it the command refuses to
 act.

 The erasure itself runs as a background job on the backend (the DELETE
 only accepts the request). This command waits up to a minute for it to
 resolve before printing anything: "Erased" is only ever printed once the
 backend confirms completion (ZER-3826) -- never on the strength of the
 202 alone, since a background failure must not be reported to a
 recruiter (or Jenny) as a completed GDPR erasure.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    applicant_id      <str>  Applicant UUID to erase (the `applicant_id` field from `candidates detail --json`). [required]                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --confirm          Required. Confirms the IRREVERSIBLE erasure of all data for this candidate.                                                                                                       │
│ --json             Raw JSON output.                                                                                                                                                                  │
│ --help             Show this message and exit.                                                                                                                                                       │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

candidates detail

Usage: zero candidates detail [OPTIONS] [candidate_number]

 Show detailed info for a specific candidate, including full parsed resume (contact, experience, education, skills, languages, certs) and the excerpts that explain the candidate's ranking.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│   candidate_number      <str>  Candidate number (1-based) or application UUID                                                                                                                        │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --job   -j      <str>  Job UUID (uses current job if omitted)                                                                                                                                        │
│ --json                 Raw JSON output                                                                                                                                                               │
│ --help                 Show this message and exit.                                                                                                                                                   │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

candidates discard

Usage: zero candidates discard [OPTIONS] {candidate_ref}

 Discard a sourced candidate from active sourcing and stop outreach.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    candidate_ref      <str>  Candidate name, email, number, or application UUID [required]                                                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --reason               <str>  Optional note stored on the discarded sourced application.                                                                                                             │
│ --job          -j      <str>  Job UUID (uses current job if omitted)                                                                                                                                 │
│ --employer-id          <str>  Employer UUID (auto-detected)                                                                                                                                          │
│ --yes          -y             Skip the confirmation prompt                                                                                                                                           │
│ --json                        Raw JSON output                                                                                                                                                        │
│ --help                        Show this message and exit.                                                                                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

candidates export

Usage: zero candidates export [OPTIONS] {applicant_id}

 Export everything on file for a candidate (GDPR Art. 15 / 20).

 Produces a machine-readable subject-access / portability bundle for one
 applicant: identity, applications, interviews, transcripts, scores, and
 resume references. Use this to fulfil a data-subject access or portability
 request.

 The bundle contains sensitive candidate PII. Write it to a secure location,
 hand only the relevant subset to the requesting data subject, and delete
 your local copy once the request is fulfilled — do not leave export files
 lying around or paste them into an LLM context you don't control.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    applicant_id      <str>  Applicant UUID (the `applicant_id` field from `candidates detail --json`). [required]                                                                                  │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --output  -o      <str>  Write the export bundle to this file instead of stdout.                                                                                                                     │
│ --json                   Raw JSON output.                                                                                                                                                            │
│ --help                   Show this message and exit.                                                                                                                                                 │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

candidates export-csv

Usage: zero candidates export-csv [OPTIONS]

 Generate a downloadable file of the candidates matching exact criteria (same filters as `count`/`filter`) -- built server-side from the query, not from paging `filter` rows into context and
 re-typing them into a file by hand.

 This is how to deliver "a CSV/file of these candidates" to someone:
 run this command and link the `permalink` it prints, in that order.
 Never page `candidates filter` and reconstruct a file from what you
 read -- that costs more tokens and risks a transcription mistake the
 server-generated file cannot make, since it comes straight from the
 same query `count`/`filter` run.

 `permalink` is durable and login-gated -- link THAT, never
 `download_url` (a short-lived direct link that expires). `row_count`
 always equals what `candidates count` reports for the same flags, and
 the file's rows always match what `candidates filter` would page
 through, because both run the identical filter definition.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --source                     <str>    Restrict to one source: applied | sourced | ats.                                                                                                               │
│ --location-country           <str>    2-letter country code, exact match.                                                                                                                            │
│ --location-region            <str>    Region/state, exact match.                                                                                                                                     │
│ --location-contains          <str>    Substring match on the freeform location text.                                                                                                                 │
│ --title                      <str>    Substring match on current title.                                                                                                                              │
│ --company                    <str>    Substring match on current company.                                                                                                                            │
│ --min-years                  <float>  Minimum years of experience (inclusive).                                                                                                                       │
│ --max-years                  <float>  Maximum years of experience (inclusive).                                                                                                                       │
│ --skill                      <str>    Skill to require; repeatable, or one comma-separated value.                                                                                                    │
│ --skills-mode                <str>    Require 'all' listed skills (default) or 'any'. [default: all]                                                                                                 │
│ --applied-within-days        <int>    Only candidates who last applied to you within the last N days.                                                                                                │
│ --applied-before             <str>    Only candidates whose most recent application is before this date (YYYY-MM-DD).                                                                                │
│ --format                     <str>    Export file format (csv is the only one supported today). [default: csv]                                                                                       │
│ --json                                Raw JSON output.                                                                                                                                               │
│ --help                                Show this message and exit.                                                                                                                                    │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

candidates filter

Usage: zero candidates filter [OPTIONS]

 List the candidates matching exact criteria (same filters as `count`).

 Run `candidates count` first while assembling criteria -- it returns no
 candidate PII and is cheap enough to re-run on every change. Reach for
 this command once the population is the right size and the actual people
 are wanted. Both commands send an identically-built filter body to the
 same backend definition, so `total` here always equals `count` there for
 the same flags.

 `--applied-within-days` / `--applied-before` (ZER-3446) filter on
 recency of the candidate's most recent application; see `candidates
 count --help` for the "gone cold" / window semantics.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --source                     <str>    Restrict to one source: applied | sourced | ats.                                                                                                               │
│ --location-country           <str>    2-letter country code, exact match.                                                                                                                            │
│ --location-region            <str>    Region/state, exact match.                                                                                                                                     │
│ --location-contains          <str>    Substring match on the freeform location text.                                                                                                                 │
│ --title                      <str>    Substring match on current title.                                                                                                                              │
│ --company                    <str>    Substring match on current company.                                                                                                                            │
│ --min-years                  <float>  Minimum years of experience (inclusive).                                                                                                                       │
│ --max-years                  <float>  Maximum years of experience (inclusive).                                                                                                                       │
│ --skill                      <str>    Skill to require; repeatable, or one comma-separated value.                                                                                                    │
│ --skills-mode                <str>    Require 'all' listed skills (default) or 'any'. [default: all]                                                                                                 │
│ --applied-within-days        <int>    Only candidates who last applied to you within the last N days.                                                                                                │
│ --applied-before             <str>    Only candidates whose most recent application is before this date (YYYY-MM-DD).                                                                                │
│ --page                       <int>    Page number. [default: 1]                                                                                                                                      │
│ --limit                      <int>    Results per page (max 100). [default: 20]                                                                                                                      │
│ --json                                Raw JSON output.                                                                                                                                               │
│ --help                                Show this message and exit.                                                                                                                                    │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

candidates hire

Usage: zero candidates hire [OPTIONS] {candidate_ref}

 Send an offer. Candidate signature triggers hired status and billing.

 Refused with HTTP 409 (code `hire_requires_candidate_contact`) if
 there is no recorded evidence this candidate has ever engaged with us
 (no direct application, no reply to outreach, no interview they
 engaged with) -- a deliberate backend guard, not a transient error.
 There is no flag to override it; contact must be recorded first.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    candidate_ref      <str>  Candidate number (from 'zero candidates list') or application UUID [required]                                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --job                           -j      <str>  Job UUID (uses current job if omitted)                                                                                                                │
│ --employer-id                           <str>  Employer UUID (auto-detected)                                                                                                                         │
│ --expect-id                             <str>  Assert the resolved job matches this UUID or short ID                                                                                                 │
│ --expect-title                          <str>  Assert the resolved job's title contains this substring (case-insensitive)                                                                            │
│ --idempotency-key                       <str>  Retry key retained for backward compatibility; offer signing triggers billing.                                                                        │
│ --compensation                          <str>  Offer compensation text                                                                                                                               │
│ --guaranteed-cash-compensation          <int>  The hire's actual guaranteed annual cash compensation, in whole USD dollars (base + signing bonus + any guaranteed/non-discretionary bonus). Captured │
│                                                on the offer and used for the Final Payment (6% of this, less the role-open fee already paid) once the candidate signs (ZER-3277). Falls back to the  │
│                                                role's budgeted compensation if omitted.                                                                                                              │
│ --start-date                            <str>  Offer start date                                                                                                                                      │
│ --location                              <str>  Offer work location                                                                                                                                   │
│ --employment-type                       <str>  Offer employment type                                                                                                                                 │
│ --notes                                 <str>  Additional offer notes                                                                                                                                │
│ --force                                        Allow sending an offer even when another offer for this role is still in flight.                                                                      │
│ --yes                           -y             Required in JSON/MCP mode; skip the confirmation prompt.                                                                                              │
│ --json                                         Raw JSON output                                                                                                                                       │
│ --help                                         Show this message and exit.                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

candidates list

Usage: zero candidates list [OPTIONS] [job_id]

 List all candidates for a job with scores and rankings.

 By default prints one compact line per candidate. Pass `--resume` to
 also render each candidate's full parsed resume inline — useful when
 you want to evaluate the pool in a single call instead of running
 `candidates detail` N times. `--json` always returns parsed data
 regardless of `--resume`.

 Power-user flags (`--min-score`, `--max-score`, `--skill`, `--search`,
 `--sort`, `--order`, `--limit`) are applied client-side over the full
 payload so you can pipe `--json` through jq if you need something more
 specific than these flags offer.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│   job_id      <str>  Job UUID (uses current job if omitted)                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id          <str>    Employer UUID (auto-detected)                                                                                                                                        │
│ --resume       -r               Include full parsed resume data for each candidate (contact, experience, education, skills, excerpts).                                                               │
│ --min-score            <float>  Only show candidates with score >= N.                                                                                                                                │
│ --max-score            <float>  Only show candidates with score <= N.                                                                                                                                │
│ --skill                <str>    Case-insensitive substring match against resume summary + excerpts (repeatable; all must match).                                                                     │
│ --search               <str>    Case-insensitive substring match over name + summary + excerpts.                                                                                                     │
│ --sort                 <str>    Sort by: score | name | applied_at.                                                                                                                                  │
│ --order                <str>    Sort order: asc | desc (default: desc). [default: desc]                                                                                                              │
│ --limit                <int>    Maximum number of candidates to show (applied after filters+sort).                                                                                                   │
│ --json                          Raw JSON output (always includes parsed_resume and relevant_resume_excerpts)                                                                                         │
│ --help                          Show this message and exit.                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

candidates notes

Usage: zero candidates notes [OPTIONS] COMMAND [ARGS]...

 Freeform notes on a candidate (ZER-2175).

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ list    List notes left on a candidate, newest first.                                                                                                                                                │
│ add     Leave a note on a candidate.                                                                                                                                                                 │
│ edit    Edit the text of an existing note.                                                                                                                                                           │
│ delete  Permanently delete a note.                                                                                                                                                                   │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

candidates notes add

Usage: zero candidates notes add [OPTIONS] {applicant_id}

 Leave a note on a candidate.

 Notes are freeform, attributed, and timestamped. There is no flag to
 set the author: a human CLI token attributes the note to the signed-in
 user, and Jenny's credential attributes it to her automatically -- the
 backend decides this from the credential, never from a CLI argument.
 Use this for the same kind of prior-context note a recruiter would jot
 down before or during a candidate interview.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    applicant_id      <str>  Applicant UUID (the `applicant_id` field from `candidates detail --json`). [required]                                                                                  │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --body               <str>  Note text (freeform). [required]                                                                                                                                      │
│    --job-id             <str>  Optional job UUID this note was taken in the context of.                                                                                                              │
│    --employer-id        <str>  Employer UUID. Only needed for a system-key credential with no default employer (auto-scoped for a normal per-user CLI token).                                        │
│    --json                      Raw JSON output.                                                                                                                                                      │
│    --help                      Show this message and exit.                                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

candidates notes delete

Usage: zero candidates notes delete [OPTIONS] {note_id}

 Permanently delete a note.

 Irreversible -- there is no undo and no "deleted" status to restore
 from, unlike `candidates reject` / `candidates unreject`. Use this to
 remove a note added to the wrong candidate, or one that should never
 have been written down, not to correct its wording (use `candidates
 notes edit` for that instead -- it keeps a single record rather than
 leaving a stray deleted-then-recreated one).

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    note_id      <str>  Note UUID (the `note_id` field from `candidates notes list --json`). [required]                                                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --applicant          <str>  Applicant UUID the note belongs to (the `applicant_id` field on the note, from `candidates notes list --json`). Required.                                                │
│ --yes        -y             Skip the confirmation prompt                                                                                                                                             │
│ --json                      Raw JSON output.                                                                                                                                                         │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

candidates notes edit

Usage: zero candidates notes edit [OPTIONS] {note_id}

 Edit the text of an existing note.

 Author-only server-side: the backend returns 403 if the acting
 credential did not author this note. Replaces the whole body -- there
 is no partial/append edit.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    note_id      <str>  Note UUID (the `note_id` field from `candidates notes list --json`). [required]                                                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --body               <str>  New note text (replaces the existing body). [required]                                                                                                                │
│    --applicant          <str>  Applicant UUID the note belongs to (the `applicant_id` field on the note, from `candidates notes list --json`). Required.                                             │
│    --employer-id        <str>  Employer UUID. Only needed for a system-key credential with no default employer (auto-scoped for a normal per-user CLI token).                                        │
│    --json                      Raw JSON output.                                                                                                                                                      │
│    --help                      Show this message and exit.                                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

candidates notes list

Usage: zero candidates notes list [OPTIONS] {applicant_id}

 List notes left on a candidate, newest first.

 Use this for prior context before or during a candidate interview --
 what a recruiter (or Jenny) already knows about this person. For the
 full chronological record of everything that happened with them (stage
 changes, outreach, interviews, scores, notes included), use
 `candidates timeline` instead.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    applicant_id      <str>  Applicant UUID (the `applicant_id` field from `candidates detail --json`). [required]                                                                                  │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID. Only needed for a system-key credential with no default employer (auto-scoped for a normal per-user CLI token).                                           │
│ --json                      Raw JSON output.                                                                                                                                                         │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

candidates reject

Usage: zero candidates reject [OPTIONS] {candidate_ref}

 Reject a candidate.

 Sets the application's status to `rejected`. `--reason` is REQUIRED
 (ZER-3637: the backend 422s a `rejected` write with no reason) and is
 persisted to `applications.rejection_reason` for audit purposes.
 `--rejected-by` (ZER-4002, optional) records who actually made the
 call -- recruiter, candidate or hiring_manager; omitted, the platform
 records recruiter on its own. This is a per-candidate action. Hiring
 another candidate does not automatically reject the rest of the pool.
 When Loxo is the candidate's only connected ATS, the rejection is also
 written to Loxo first (and the command fails if Loxo refuses it).

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    candidate_ref      <str>  Candidate number (from 'zero candidates list') or application UUID [required]                                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --reason               <str>  Reason for rejection (required; persisted to applications.rejection_reason for audit) -- ZER-3637.                                                                     │
│ --rejected-by          <str>  Who made the call: recruiter, candidate, or hiring_manager (ZER-4002). Omit to let the platform record recruiter, its own default.                                     │
│ --job          -j      <str>  Job UUID (uses current job if omitted)                                                                                                                                 │
│ --yes          -y             Skip the confirmation prompt                                                                                                                                           │
│ --json                        Raw JSON output                                                                                                                                                        │
│ --help                        Show this message and exit.                                                                                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
Usage: zero candidates search [OPTIONS] {query}

 Search ALL of the employer's candidates across every job and integration.

 Unlike `candidates list`, which is scoped to one job, this searches the
 employer's entire candidate pool (applied, sourced, and ATS-synced) by
 name, email, title, skills, and resume content. The backend runs a
 hybrid semantic + keyword search server-side (the query embedding
 happens on the backend) -- this command only forwards the free text.

 There is no `--employer-id` flag on this command and none is ever sent
 to the backend: the employer scope is derived entirely from the
 authenticated CLI token (`require_employer_access` pins CLI callers to
 their own employer).

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    query      <str>  Free-text search over name, email, title, skills, and resume content. [required]                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --source        <str>  Filter by source: applied | sourced | ats.                                                                                                                                    │
│ --page          <int>  Page number. [default: 1]                                                                                                                                                     │
│ --limit         <int>  Results per page (max 100). [default: 20]                                                                                                                                     │
│ --json                 Raw JSON output.                                                                                                                                                              │
│ --help                 Show this message and exit.                                                                                                                                                   │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

candidates text

Usage: zero candidates text [OPTIONS] {candidate_ref}

 Send one text message to a candidate.

 Goes only to a candidate who agreed to text messages when they applied
 and has not replied STOP since, and only between 08:00 and 21:00 in
 their local time; otherwise nothing is sent and the reason is shown
 (exit 1). The company name and a "Reply STOP to opt out." line are
 added. The send is recorded on the candidate's timeline. Requires
 --yes in JSON mode, like `candidates reject`.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    candidate_ref      <str>  Candidate number (from 'zero candidates list') or application UUID [required]                                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --body          <str>  The text message (max 1,600 characters). [required]                                                                                                                        │
│    --job   -j      <str>  Job UUID (uses current job if omitted)                                                                                                                                     │
│    --yes   -y             Skip the confirmation prompt                                                                                                                                               │
│    --json                 Raw JSON output                                                                                                                                                            │
│    --help                 Show this message and exit.                                                                                                                                                │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

candidates timeline

Usage: zero candidates timeline [OPTIONS] {applicant_id}

 Show what happened with this candidate, in order.

 Merges stage changes, notes, interviews, scores, feedback, ATS sync,
 AI decisions, and email outreach into one reverse-chronological feed --
 "what has happened with this person". Use `candidates notes list`
 instead when you just need prior notes for interview context, not the
 full history.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    applicant_id      <str>  Applicant UUID (the `applicant_id` field from `candidates detail --json`). [required]                                                                                  │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --job-id             <str>  Accepted for API-shape symmetry; does not yet narrow the person-grain timeline to one job.                                                                               │
│ --employer-id        <str>  Employer UUID. Only needed for a system-key credential with no default employer (auto-scoped for a normal per-user CLI token).                                           │
│ --page               <int>  Page number (1-based). [default: 1]                                                                                                                                      │
│ --limit              <int>  Results per page. [default: 20]                                                                                                                                          │
│ --json                      Raw JSON output.                                                                                                                                                         │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

candidates unreject

Usage: zero candidates unreject [OPTIONS] {candidate_ref}

 Undo a rejection.

 Only works on a candidate whose current status is `rejected`; restores
 whichever status the application had immediately before the reject
 (usually `pending`) and clears the stored rejection reason. Does not
 email the candidate -- there is no candidate-facing notice for undoing
 a rejection. When Loxo is the candidate's only connected ATS, the
 previous stage is also restored in Loxo (the reject was written there).

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    candidate_ref      <str>  Candidate number (from 'zero candidates list') or application UUID [required]                                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --reason          <str>  Optional note for the audit trail. Never persisted to applications.rejection_reason -- that field is cleared, not replaced, when a rejection is undone.                     │
│ --job     -j      <str>  Job UUID (uses current job if omitted)                                                                                                                                      │
│ --yes     -y             Skip the confirmation prompt                                                                                                                                                │
│ --json                   Raw JSON output                                                                                                                                                             │
│ --help                   Show this message and exit.                                                                                                                                                 │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

changelog

Usage: zero changelog [OPTIONS] COMMAND [ARGS]...

 See what's new on the platform.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ show  Show recent releases, merged across the whole platform (backend + client).                                                                                                                     │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

changelog show

Usage: zero changelog show [OPTIONS]

 Show recent releases, merged across the whole platform (backend + client).

 Always reads the live merged feed from `GET /api/v1/changelog` at call
 time -- this deliberately has no local cache and no snapshot baked into
 a prompt or SKILL.md, because the release cadence would make either one
 stale within a day. Do NOT filter on a release's `highlight` field: it
 only controls whether the in-app "What's New" modal auto-opens, not
 whether the release shipped -- 93 of 102 backend releases are
 `highlight: false`, so filtering on it would hide nearly everything.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --since        <str>  ISO date (e.g. 2026-07-01). Keep releases dated on/after this day.                                                                                                             │
│ --limit        <int>  Max number of releases to return, most recent first. [default: 10]                                                                                                             │
│ --json                Raw JSON output                                                                                                                                                                │
│ --help                Show this message and exit.                                                                                                                                                    │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

clients

Usage: zero clients [OPTIONS] COMMAND [ARGS]...

 Manage RPO clients.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ list                     List all RPO clients for the current employer.                                                                                                                              │
│ add                      Add a new RPO client.                                                                                                                                                       │
│ show                     Show details for a single RPO client.                                                                                                                                       │
│ remove                   Remove an RPO client (soft delete).                                                                                                                                         │
│ profile                  Read the caller's OWN saved company profile. Writes nothing.                                                                                                                │
│ generate-company-info    Draft a company description/FAQ text (`company_information`) from a                                                                                                         │
│                          website. Makes no write -- this only generates; save the result with                                                                                                        │
│                          `confirm-company-profile --company-information`.                                                                                                                            │
│ propose-company-profile  Preview a company profile before saving it.                                                                                                                                 │
│ confirm-company-profile  Save the company profile staged by propose-company-profile.                                                                                                                 │
│ update                   Partial-update an RPO client (ZER-3251). Pass only the fields to change.                                                                                                    │
│ refresh-company-profile  Re-read the caller's OWN website into the saved company profile (ZER-3676/3677).                                                                                            │
│ complete-onboarding      Mark the caller's OWN employer as having finished onboarding.                                                                                                               │
│ fetch-logo               Look up a company's logo from its website and store a hosted copy.                                                                                                          │
│ mine-company-questions   Scan recent finished interview transcripts for candidate questions                                                                                                          │
│                          about the company and fold them into the FAQ inbox (ZER-2762).                                                                                                              │
│ parse-company-info       Check freeform company information for completeness.                                                                                                                        │
│ parse-context-answers    Split one spoken transcript into answers for the given question keys.                                                                                                       │
│ preview-company-answer   Answer one candidate-style question from the caller's OWN composed                                                                                                          │
│                          company context -- the "try your interviewer" check (ZER-2762).                                                                                                             │
│ analyze-company-context  Infer what the AI interviewer can already answer, and the three                                                                                                             │
│                          follow-up questions worth asking the employer next.                                                                                                                         │
│ sender-domain            A client's own sending domain for candidate email (ZER-901).                                                                                                                │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

clients add

Usage: zero clients add [OPTIONS]

 Add a new RPO client.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --name                <str>  Client company name [required]                                                                                                                                       │
│    --email               <str>  Client contact email                                                                                                                                                 │
│    --website             <str>  Client website URL                                                                                                                                                   │
│    --company-info        <str>  Company background / information for AI context                                                                                                                      │
│    --json                       Raw JSON output                                                                                                                                                      │
│    --help                       Show this message and exit.                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

clients analyze-company-context

Usage: zero clients analyze-company-context [OPTIONS]

 Infer what the AI interviewer can already answer, and the three follow-up questions worth asking the employer next.

 Makes no write -- this only analyzes; ask the operator the returned
 follow-up questions and save answers with `clients confirm-company-profile`
 or `clients update`.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --company-info        <str>  Collected company context to analyze [required]                                                                                                                      │
│    --company-name        <str>                                                                                                                                                                       │
│    --json                       Raw JSON output                                                                                                                                                      │
│    --help                       Show this message and exit.                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

clients complete-onboarding

Usage: zero clients complete-onboarding [OPTIONS]

 Mark the caller's OWN employer as having finished onboarding.

 This is the one write path that satisfies the dashboard's
 "needs onboarding" check (ZER-onboarding-prompt) without going through
 the legacy `/onboarding` wizard. Idempotent: calling it again after
 onboarding is already complete returns the original timestamp
 unchanged. Does not touch terms-of-service acceptance, a separate gate.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

clients confirm-company-profile

Usage: zero clients confirm-company-profile [OPTIONS]

 Save the company profile staged by propose-company-profile.

 Call this only immediately after propose-company-profile and an
 explicit, unambiguous yes to the previewed values, in the same
 conversation turn. The backend resolves the employer from the caller's
 own identity (X-User-Id) -- there is no --employer-id flag here and
 none should be added; this command only ever writes the caller's own
 company profile, never another employer's.

 A verbal "yeah, that's right" from the operator is not itself a save --
 the write only happens when this call actually executes and succeeds.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --company-name               <str>  Company name to save [required]                                                                                                                               │
│ *  --website-url                <str>  Company website URL to save [required]                                                                                                                        │
│    --company-information        <str>  Company description/FAQ text (what the AI interviewer uses to answer candidate questions about the company). Optional and independent of the name/website     │
│                                        propose-then-confirm discipline above -- this is Zero's own read of public content (see `generate-company-info`), not something the operator dictates word    │
│                                        for word, so it doesn't need the same exact-preview confirmation. Omit it to leave company_information untouched.                                             │
│    --json                              Raw JSON output                                                                                                                                               │
│    --help                              Show this message and exit.                                                                                                                                   │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
Usage: zero clients fetch-logo [OPTIONS]

 Look up a company's logo from its website and store a hosted copy.

 Makes no write to a client or employer row -- it only returns the
 hosted `logo_url` for the caller to save with `clients update
 --logo-url` or `clients confirm-company-profile`.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --website-url        <str>  Company website URL [required]                                                                                                                                        │
│    --folder             <str>  Which asset bucket to store it under: 'clients' or 'employers' [default: clients]                                                                                     │
│    --json                      Raw JSON output                                                                                                                                                       │
│    --help                      Show this message and exit.                                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

clients generate-company-info

Usage: zero clients generate-company-info [OPTIONS]

 Draft a company description/FAQ text (`company_information`) from a website. Makes no write -- this only generates; save the result with `confirm-company-profile --company-information`.

 Scrapes the given URL and runs it through the hosted generator (the
 same one the employer dashboard's onboarding wizard uses). Best-effort:
 a thin wrapper, no local fallback if the backend call fails.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --website-url        <str>  Company website URL to generate a description from [required]                                                                                                         │
│    --json                      Raw JSON output                                                                                                                                                       │
│    --help                      Show this message and exit.                                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

clients list

Usage: zero clients list [OPTIONS]

 List all RPO clients for the current employer.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

clients mine-company-questions

Usage: zero clients mine-company-questions [OPTIONS]

 Scan recent finished interview transcripts for candidate questions about the company and fold them into the FAQ inbox (ZER-2762).

 Bounded per call and incremental -- safe to run any number of times.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

clients parse-company-info

Usage: zero clients parse-company-info [OPTIONS]

 Check freeform company information for completeness.

 Returns which of the standard company-context questions the text
 already answers, which are missing, and a completeness score. Makes
 no write.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --company-info        <str>  Freeform company information text to check [required]                                                                                                                │
│    --json                       Raw JSON output                                                                                                                                                      │
│    --help                       Show this message and exit.                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

clients parse-context-answers

Usage: zero clients parse-context-answers [OPTIONS]

 Split one spoken transcript into answers for the given question keys.

 Makes no write -- save any resulting text yourself (e.g. with
 `clients confirm-company-profile --company-information`).

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --transcript            <str>  Spoken transcript answering one or more questions [required]                                                                                                       │
│ *  --questions-json        <str>  JSON array of {"key": ..., "question": ...} objects (max 10) [required]                                                                                            │
│    --company-name          <str>                                                                                                                                                                     │
│    --json                         Raw JSON output                                                                                                                                                    │
│    --help                         Show this message and exit.                                                                                                                                        │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

clients preview-company-answer

Usage: zero clients preview-company-answer [OPTIONS]

 Answer one candidate-style question from the caller's OWN composed company context -- the "try your interviewer" check (ZER-2762).

 Uses the exact composition the live interview paths read, so this
 preview and the real interviewer can't drift. Makes no write.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --question        <str>  A candidate-style question to answer from company context [required]                                                                                                     │
│    --json                   Raw JSON output                                                                                                                                                          │
│    --help                   Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

clients profile

Usage: zero clients profile [OPTIONS]

 Read the caller's OWN saved company profile. Writes nothing.

 ZER-2462/ZER-2463: never ask the operator to (re)supply a company name,
 website, or description before checking whether it's already on file --
 that is the same "asking for a value you can already read" mistake as
 inviting a candidate whose email is already on the application record.
 Call this first, every time first contact comes up (including on a
 later, separate conversation with the same employer): only ask for, or
 regenerate, whatever comes back empty.

 Implemented as a PATCH to `/api/clients/company-profile` with an empty
 body. The backend documents this as a deliberate no-op read (a caller
 with no fields to change still gets the current row back, no special
 case needed) -- so this never writes and never touches `updated_at`.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

clients propose-company-profile

Usage: zero clients propose-company-profile [OPTIONS]

 Preview a company profile before saving it.

 Makes no backend call and saves nothing. Show this preview to the
 operator once, in your own words, and get an explicit yes before
 calling confirm-company-profile. Don't restate values you already
 showed them earlier in the same reply -- this command only echoes
 back what you passed in.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --company-name        <str>  Company name to preview [required]                                                                                                                                   │
│ *  --website-url         <str>  Company website URL to preview [required]                                                                                                                            │
│    --json                       Raw JSON output                                                                                                                                                      │
│    --help                       Show this message and exit.                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

clients refresh-company-profile

Usage: zero clients refresh-company-profile [OPTIONS]

 Re-read the caller's OWN website into the saved company profile (ZER-3676/3677).

 Merges onto the stored profile -- a hand-edited item always survives.
 Nothing is written when the site could not be read at all; the command
 fails loudly instead of wiping an existing profile.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --website-url        <str>  Website to re-read; defaults to the employer's saved website                                                                                                             │
│ --json                      Raw JSON output                                                                                                                                                          │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

clients remove

Usage: zero clients remove [OPTIONS] {client_id}

 Remove an RPO client (soft delete).

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    client_id      <str>  Client UUID [required]                                                                                                                                                    │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --yes   -y        Skip confirmation                                                                                                                                                                  │
│ --json            Raw JSON output                                                                                                                                                                    │
│ --help            Show this message and exit.                                                                                                                                                        │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

clients sender-domain

Usage: zero clients sender-domain [OPTIONS] COMMAND [ARGS]...

 A client's own sending domain for candidate email (ZER-901).

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ show    Show a client's sending-domain state: the from-address domain, whether                                                                                                                       │
│         it's verified, and the DNS records it still needs (if any).                                                                                                                                  │
│ set     Provision (or reuse) this client's sending domain for the given                                                                                                                              │
│         from-address. Returns the DNS records to publish before `verify` will                                                                                                                        │
│         pass; nothing is sent to candidates by this call itself.                                                                                                                                     │
│ verify  Validate the published DNS records and set `verified` from the                                                                                                                               │
│         result. Run `sender-domain set` first if none are on file yet.                                                                                                                               │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

clients sender-domain set

Usage: zero clients sender-domain set [OPTIONS] {client_id}

 Provision (or reuse) this client's sending domain for the given from-address. Returns the DNS records to publish before `verify` will pass; nothing is sent to candidates by this call itself.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    client_id      <str>  Client UUID [required]                                                                                                                                                    │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --email        <str>  The from-address candidate email for this client should send as [required]                                                                                                  │
│    --json                Raw JSON output                                                                                                                                                             │
│    --help                Show this message and exit.                                                                                                                                                 │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

clients sender-domain show

Usage: zero clients sender-domain show [OPTIONS] {client_id}

 Show a client's sending-domain state: the from-address domain, whether it's verified, and the DNS records it still needs (if any).

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    client_id      <str>  Client UUID [required]                                                                                                                                                    │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

clients sender-domain verify

Usage: zero clients sender-domain verify [OPTIONS] {client_id}

 Validate the published DNS records and set `verified` from the result. Run `sender-domain set` first if none are on file yet.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    client_id      <str>  Client UUID [required]                                                                                                                                                    │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

clients show

Usage: zero clients show [OPTIONS] {client_id}

 Show details for a single RPO client.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    client_id      <str>  Client UUID [required]                                                                                                                                                    │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

clients update

Usage: zero clients update [OPTIONS] {client_id}

 Partial-update an RPO client (ZER-3251). Pass only the fields to change.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    client_id      <str>  Client UUID [required]                                                                                                                                                    │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --name                <str>  New client company name                                                                                                                                                 │
│ --email               <str>  New client contact email                                                                                                                                                │
│ --website             <str>  New client website URL                                                                                                                                                  │
│ --logo-url            <str>  New client logo URL                                                                                                                                                     │
│ --company-info        <str>  New company background / information for AI context                                                                                                                     │
│ --public-slug         <str>  New public job-board URL segment (/jobs/at/<slug>); must be unique across clients and employers                                                                         │
│ --json                       Raw JSON output                                                                                                                                                         │
│ --help                       Show this message and exit.                                                                                                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

close

Usage: zero close [OPTIONS] COMMAND [ARGS]...

 Legacy alias for sending a candidate offer; charge a hire's close fee.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ run         Send an offer. Candidate signature triggers hired status and billing.                                                                                                                    │
│ charge-fee  Record a hire made outside the offer flow and charge its close fee.                                                                                                                      │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

close charge-fee

Usage: zero close charge-fee [OPTIONS] {job_id}

 Record a hire made outside the offer flow and charge its close fee.

 Charges the saved payment method right away and marks the candidate
 hired. Use `candidates hire` / `offers send` instead when the candidate
 should sign an offer first (that path charges only after signature).
 Owners, or members with billing access, only. Always requires `--yes`
 after explicit human approval in this turn; never invent it.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    job_id      <str>  Job UUID the hire was made on. [required]                                                                                                                                    │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --application-id                        <str>               The hired candidate's application UUID (marked hired once the charge succeeds). [required]                                            │
│    --guaranteed-cash-compensation          <int range> [x>=1]  The hire's actual guaranteed annual cash compensation, in whole USD dollars. The close fee is your plan's total fee (6% by default)   │
│                                                                of this, less the role-open fee already paid. If omitted, the signed offer's figure is used, then the role's budgeted compensation.   │
│    --idempotency-key                       <str>               Retry key (default: role-close:<application_id>, same as the web app).                                                                │
│    --employer-id                           <str>               Employer UUID (auto-detected from login).                                                                                             │
│    --yes                           -y                          Required; confirms the charge after explicit human approval.                                                                          │
│    --json                                                      Raw JSON output.                                                                                                                      │
│    --help                                                      Show this message and exit.                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

close run

Usage: zero close run [OPTIONS] [job_id]

 Send an offer. Candidate signature triggers hired status and billing.

 Refused with HTTP 409 (code `hire_requires_candidate_contact`) if
 there is no recorded evidence this candidate has ever engaged with us
 (no direct application, no reply to outreach, no interview they
 engaged with) -- a deliberate backend guard, not a transient error.
 There is no flag to override it; contact must be recorded first.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│   job_id      <str>  Job UUID (uses current job if omitted)                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --candidate                             <str>  Candidate number (1-based) or application UUID                                                                                                        │
│ --employer-id                           <str>  Employer UUID (auto-detected)                                                                                                                         │
│ --expect-id                             <str>  Assert the resolved job matches this UUID or short ID                                                                                                 │
│ --expect-title                          <str>  Assert the resolved job's title contains this substring (case-insensitive)                                                                            │
│ --idempotency-key                       <str>  Retry key retained for backward compatibility; offer signing triggers billing.                                                                        │
│ --compensation                          <str>  Offer compensation text                                                                                                                               │
│ --guaranteed-cash-compensation          <int>  The hire's actual guaranteed annual cash compensation, in whole USD dollars (base + signing bonus + any guaranteed/non-discretionary bonus; excludes  │
│                                                equity, variable/discretionary bonus, relocation, benefits). Captured on the offer and used for the Final Payment (6% of this, less the role-open fee │
│                                                already paid) once the candidate signs (ZER-3277). Falls back to the role's budgeted compensation if omitted.                                         │
│ --start-date                            <str>  Offer start date                                                                                                                                      │
│ --location                              <str>  Offer work location                                                                                                                                   │
│ --employment-type                       <str>  Offer employment type                                                                                                                                 │
│ --notes                                 <str>  Additional offer notes                                                                                                                                │
│ --force                                        Allow sending an offer even when another offer for this role is still in flight.                                                                      │
│ --yes                           -y             Required in JSON/MCP mode; skip the confirmation prompt.                                                                                              │
│ --json                                         Raw JSON output                                                                                                                                       │
│ --help                                         Show this message and exit.                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

demo

Usage: zero demo [OPTIONS] COMMAND [ARGS]...

 Demo mode — simulate the hiring pipeline.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --keep                      Retain the demo job instead of soft-deleting it.                                                                                                                         │
│ --title              <str>  Title for the demo job. [default: Demo Role [auto]]                                                                                                                      │
│ --employer-id        <str>  Employer UUID to run the demo under (defaults to your logged-in employer). Lets an admin-authed session drive a freshly provisioned org without changing the local       │
│                             login.                                                                                                                                                                   │
│ --json                      Emit a structured JSON result.                                                                                                                                           │
│ --quiet                     Suppress spinner output.                                                                                                                                                 │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ run             Run a full demo: create job → seed candidates → simulate interviews → summary.                                                                                                       │
│ populate        Realistically populate a job's demo pipeline in one call.                                                                                                                            │
│ build           Build a complete demo org in ONE command (ZER-3104).                                                                                                                                 │
│ mode            Turn demo tenant mode on or off for an employer.                                                                                                                                     │
│ login           Manage a demo org's shareable login (ZER-1192).                                                                                                                                      │
│ client-account  Create a real client account from a prospect (Zero staff only).                                                                                                                      │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

demo build

Usage: zero demo build [OPTIONS]

 Build a complete demo org in ONE command (ZER-3104).

 Creates the demo org (or resumes one with --employer-id), opens one job
 per --role with an AI-generated JD, populates each with a realistic demo
 pipeline, and mints the customer-facing login -- so an MCP client needs
 exactly ONE write-tool approval for the whole build (on `manage_demo`),
 instead of the ~7 separate approvals the equivalent `internal employers
 create --demo` + N x `hire run --demo` + N x `demo populate` + `demo
 login create` sequence needs.

 Org creation failing aborts immediately -- nothing else has happened
 yet. Runs in two phases (ZER-3104 follow-up): every role's job is
 opened SEQUENTIALLY first (reusing an existing job of the same title in
 this org instead of creating a duplicate, so re-running this command --
 including its own printed `resume_command` -- is always safe), then
 every opened job is populated concurrently (capped at
 _DEMO_BUILD_POPULATE_MAX_WORKERS). A single role's JD generation,
 job-existence lookup, job creation, or populate call failing is
 recorded and the remaining roles still run; the login is still minted
 (unless --skip-login) even if a role failed. A populate or JD-generation
 call that hits a 5xx/502/503/504 or a timeout is retried once after a
 short wait before being recorded as a failure (populate is idempotent
 server-side). The command exits non-zero if anything failed, and both
 the JSON summary's `resume_command` field and the human-readable footer
 name the exact `zero demo build --employer-id ...` invocation that
 finishes just the part that didn't.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --company                <str>    Company name for a NEW demo org. Required unless --employer-id resumes an existing one.                                                                            │
│ --website                <str>    Company website (full URL or bare domain, e.g. 'acme.com'). Passed straight through to org creation so the backend resolves a real logo server-side (logo lookup   │
│                                   re-host, favicon fallback) -- never construct a logo URL yourself. Recommended; ignored (with a warning) when --employer-id resumes an existing org.               │
│ --role                   <str>    Job title to open as a demo role, e.g. --role "Senior Backend Engineer". Repeatable -- pass it once per role. At least one is required. Each becomes its own job:  │
│                                   an AI-generated JD (same generator `hire run` uses), opened live immediately, then populated with a demo pipeline.                                                 │
│ --location               <str>    Location applied to every role. [default: Remote]                                                                                                                  │
│ --salary-min             <float>  Applied to every role. Optional -- omit all four salary flags to use a placeholder demo range.                                                                     │
│ --salary-max             <float>  Applied to every role.                                                                                                                                             │
│ --salary-currency        <str>    Three-letter ISO 4217 currency code. Applied to every role.                                                                                                        │
│ --salary-period          <str>    One of YEAR, MONTH, WEEK, DAY, HOUR. Applied to every role.                                                                                                        │
│ --scale                  <str>    Demo pipeline scale for every role's `demo populate` call: one of auto, high, mid, senior. [default: auto]                                                         │
│ --employer-id            <str>    Resume an existing demo org instead of creating a new one -- skips org creation and just adds the --role jobs to it (e.g. resuming a build that died partway       │
│                                   through, or adding roles to an org created some other way). --company becomes optional (used only as JD context and in the printed summary), and --website is      │
│                                   ignored.                                                                                                                                                           │
│ --skip-login                      Don't mint a demo login as part of this build. Run `zero demo login create --employer-id <id>` separately when you want one.                                       │
│ --json                            Emit one structured JSON summary object.                                                                                                                           │
│ --quiet                           Suppress spinner output.                                                                                                                                           │
│ --help                            Show this message and exit.                                                                                                                                        │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

demo client-account

Usage: zero demo client-account [OPTIONS] COMMAND [ARGS]...

 Create a real client account from a prospect (Zero staff only).

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ create  Create a real (non-demo) client organization.                                                                                                                                                │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

demo client-account create

Usage: zero demo client-account create [OPTIONS]

 Create a real (non-demo) client organization.

 Zero staff only. The new organization is billable (not a demo), you join
 it as its account manager, the client admin gets an email invitation to
 become its owner, and the client's website is read into the company
 profile in the background. Pass --from-demo to link the demo org the
 deal came from; that demo org keeps running unchanged.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --company              <str>  Client's company name. [required]                                                                                                                                   │
│ *  --website              <str>  Client's website; it is read into the company profile. [required]                                                                                                   │
│ *  --billing-email        <str>  Client's own billing address (a Zero address is refused). [required]                                                                                                │
│ *  --admin-email          <str>  Client admin to invite as the organization's owner. [required]                                                                                                      │
│    --from-demo            <str>  Demo employer UUID this account grows out of. The link is stored; the demo org itself is left untouched.                                                            │
│    --json                        Raw JSON output                                                                                                                                                     │
│    --help                        Show this message and exit.                                                                                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

demo interviews

Usage: zero demo interviews [OPTIONS] [job_id]

 [Retired] Simulate AI interviews for demo candidates -- use `zero demo populate`.

 ZER-2673: the backend endpoint this called (`/api/demo/interviews/{job_id}`)
 was retired by ZER-2536; `demo populate` creates candidates already spread
 across stages including AI-interviewed ones. Kept registered, but hidden
 from help, so the operator gets a pointer instead of a bare 404.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│   job_id      <str>  Job UUID (uses current job if omitted)                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --application-ids        <str>  Retired -- see `zero demo populate`.                                                                                                                                 │
│ --json                          Raw JSON output                                                                                                                                                      │
│ --help                          Show this message and exit.                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

demo login

Usage: zero demo login [OPTIONS] COMMAND [ARGS]...

 Manage a demo org's shareable login (ZER-1192).

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ create  Mint (or rotate) a ready-to-use employer-owner login for a demo tenant.                                                                                                                      │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

demo login create

Usage: zero demo login create [OPTIONS]

 Mint (or rotate) a ready-to-use employer-owner login for a demo tenant.

 Returns generated ``{email, password, login_url}`` credentials that can be
 handed directly to a customer -- no team invite, no email verification
 click-through, no onboarding wizard. Only works for employers flagged
 ``is_demo=true`` (400 otherwise). Safe to call again for the same
 employer: it rotates the password on the existing minted login instead
 of creating a second account.

 Distinct from ``team invite`` (ZER-1185), which stays the way to add
 *named* internal people (presenters, sales) to a demo org -- this mints
 the single generic login that becomes the customer handoff.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Demo employer UUID to mint (or rotate) a login for (defaults to your logged-in employer).                                                                                │
│ --json                      Raw JSON output                                                                                                                                                          │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

demo mode

Usage: zero demo mode [OPTIONS] [on|off]

 Turn demo tenant mode on or off for an employer.

 Demo mode suppresses charges, cold outreach, and real sourcing
 for this employer. It never deletes data: seeded/demo rows created while
 demo mode was on stay permanently excluded from analytics and billing via
 their own row markers, even after this is turned off.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    [on|off]      <str>  Target state: 'on' or 'off'. [required]                                                                                                                                    │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID to toggle (defaults to your logged-in employer). Lets an admin-authed session flip demo mode on a freshly provisioned org.                                 │
│ --json                      Raw JSON output                                                                                                                                                          │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

demo populate

Usage: zero demo populate [OPTIONS] {job_id}

 Realistically populate a job's demo pipeline in one call.

 Asks the backend to build out a realistic-looking pipeline --
 candidates across stages, scores, and interview activity -- sized by
 ``--scale``. This is THE demo-seeding command (``demo seed`` /
 ``demo interviews`` were retired backend-side, ZER-2536 / ZER-2673).

 ``--reset`` (ZER-3153) purges this job's seeded applications and
 everything hanging off them (interviews, results, human interviews,
 candidate feedback, offer letters, the cached LLM roster) before
 populating -- demo employers only, the backend rejects it otherwise.
 Use it when a role's roster is wrong (e.g. it drew from the wrong
 fixture pool) rather than swapping the role or leaving it broken.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    job_id      <str>  Job UUID to populate with a demo pipeline. [required]                                                                                                                        │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --scale        <str>  Populate scale: one of auto, high, mid, senior. [default: auto]                                                                                                                │
│ --reset               Purge this job's own seeded pipeline and cached LLM roster first, then populate fresh. Use to re-roll a job whose roster came out wrong (ZER-3153) instead of rebuilding the   │
│                       whole demo org.                                                                                                                                                                │
│ --json                Raw JSON output                                                                                                                                                                │
│ --quiet               Suppress spinner output.                                                                                                                                                       │
│ --help                Show this message and exit.                                                                                                                                                    │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

demo run

Usage: zero demo run [OPTIONS]

 Run a full demo: create job → seed candidates → simulate interviews → summary.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --keep                      Retain the demo job instead of soft-deleting it.                                                                                                                         │
│ --title              <str>  Title for the demo job. [default: Demo Role [auto]]                                                                                                                      │
│ --employer-id        <str>  Employer UUID to run the demo under (defaults to your logged-in employer). Lets an admin-authed session drive a freshly provisioned org without changing the local       │
│                             login.                                                                                                                                                                   │
│ --json                      Emit a structured JSON result.                                                                                                                                           │
│ --quiet                     Suppress spinner output.                                                                                                                                                 │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

demo seed

Usage: zero demo seed [OPTIONS] [job_id]

 [Retired] Seed a job with demo candidates -- use `zero demo populate`.

 ZER-2673: the backend endpoint this called (`/api/demo/seed/{job_id}`)
 was retired by ZER-2536; `demo populate` supersedes it (candidates plus
 scores and interview activity, sized by --scale). Kept registered, but
 hidden from help, so the operator gets a pointer instead of a bare 404.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│   job_id      <str>  Job UUID (uses current job if omitted)                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

help

Usage: zero help [OPTIONS] COMMAND [ARGS]...

 Show CLI help, or search/read Help Center articles.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ articles  Search or fetch Help Center articles.                                                                                                                                                      │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

help articles

Usage: zero help articles [OPTIONS] COMMAND [ARGS]...

 Search or fetch Help Center articles.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ search  Search Help Center articles by a plain-language question or keywords.                                                                                                                        │
│ show    Fetch one Help Center article's full text and canonical URL.                                                                                                                                 │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
Usage: zero help articles search [OPTIONS] {query}...

 Search Help Center articles by a plain-language question or keywords.

 Always call this before answering a product-knowledge question ("how
 does X work", "what can you do", "why did a candidate get that score")
 rather than guessing, reading your own skill file over bash, or running
 `--help` -- an answer that isn't traceable to a real help article is the
 failure mode this command exists to prevent. Each result's `url` is the
 canonical Help Center link; cite it so the operator can click through.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    query      <str>  Free-text question, e.g. "how does sourcing work" (quote it, or pass multiple words). [required]                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --limit        <int>  Max results, most relevant first. [default: 5]                                                                                                                                 │
│ --json                Raw JSON output                                                                                                                                                                │
│ --help                Show this message and exit.                                                                                                                                                    │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

help articles show

Usage: zero help articles show [OPTIONS] {category} {slug}

 Fetch one Help Center article's full text and canonical URL.

 Pass the `category`/`url` from a `help articles search` result -- don't
 guess a slug. A category/slug pair that doesn't exist fails cleanly with
 a 404-shaped error, not a crash.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    category      <str>  Help category, e.g. 'candidates'. [required]                                                                                                                               │
│ *    slug          <str>  Article slug, e.g. 'source-candidates-with-ai-search'. [required]                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

hire

Usage: zero hire [OPTIONS] COMMAND [ARGS]...

 Open a new role.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ run  Open a new role — guided flow with AI and payment.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

hire run

Usage: zero hire run [OPTIONS]

 Open a new role — guided flow with AI and payment.

 Power-user flags (`--salary`, `--remote`, `--skills`, `--seniority`,
 `--experience-years`, `--tags`) and `--description` are passed as
 source material to the backend JD generator. `--use-description-as-jd`
 preserves only already-formatted HTML JDs; plain text is still formatted
 with AI.

 `--remote` also sets the structured `is_remote` field, and
 `--location-street/-locality/-region/-postal-code/-country` and
 `--salary-min/-max/-currency/-period` (ZER-1083 phase 2) feed the
 structured Google-for-Jobs fields on the created job. The four salary
 flags are required to actually open a role (ZER-2420): interactive runs
 prompt for them, and `--yes`/`--json` runs must pass all four or the
 command errors before creating anything. The location flags stay
 optional, but for non-remote roles, once any of them is set the backend
 requires country plus locality-or-region (422 otherwise). In interactive
 mode (no `--yes`), the guided flow prompts for these after asking whether
 the role is remote.

 `--budgeted-compensation` (ZER-3277) is the annual USD budget for this
 role, in whole dollars -- the basis for the role-open fee (3% of this
 times positions; 6% total at hire, less what was already paid). It
 defaults to the middle of the range when `--salary-period` is YEAR and
 `--salary-currency` is USD; otherwise it's required to open a paid
 role (prompted interactively, or the command errors under `--yes`
 naming the flag). Not needed with `--skip-payment`/`--demo`/`--dry-run`.

 `--stage-plan-json` threads an approved hiring flow (see `hiring-flow
 draft`/`hiring-flow show`) into job creation atomically; its
 resume_assessment stage governs the job's auto-invite threshold. Omit
 it to get the backend's default plan, or set/change it afterwards with
 `hiring-flow set <job_id>`.

 `--dry-run` generates the JD (when one isn't supplied) and prints the
 job payload as JSON without creating a payable job. It does not trigger
 payment and does not POST to `/api/jobs`.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --title                  -t                 <str>    Job title                                                                                                                                       │
│ --description            -d                 <str>    Hiring brief or source notes for the AI-generated JD. Use --use-description-as-jd only for an already-formatted final JD.                       │
│ --location               -l                 <str>    Job location (e.g. 'Remote, US')                                                                                                                │
│ --employment-type                           <str>    Employment type: Full-time, Part-time, Contract, Temporary or Internship.                                                                       │
│ --salary                                    <str>    Salary or salary range (e.g. '$150k-$180k').                                                                                                    │
│ --remote                     --no-remote             Flag the role as fully remote. Feeds the JD generator and also sets the structured is_remote field (Google for Jobs jobLocationType:            │
│                                                      TELECOMMUTE), skipping the physical-address prompt below. Prompts interactively if omitted (defaults to false with --yes).                      │
│ --location-street                           <str>    Street address. Always optional.                                                                                                                │
│ --location-locality                         <str>    City/locality for the structured public listing. For non-remote roles, required (with --location-country) once any structured location field is │
│                                                      set, unless --location-region is given instead.                                                                                                 │
│ --location-region                           <str>    State/region/province. May substitute for --location-locality.                                                                                  │
│ --location-postal-code                      <str>    Postal/ZIP code. Always optional.                                                                                                               │
│ --location-country                          <str>    Two-letter ISO 3166-1 country code (e.g. 'US'). For non-remote roles, required together with --location-locality or --location-region once any  │
│                                                      structured location field is set.                                                                                                               │
│ --salary-min                                <float>  Structured minimum base salary for the public listing (distinct from --salary's freeform text). Required to open a role (ZER-2420):             │
│                                                      --salary-min, --salary-max, --salary-currency and --salary-period must all be set. Interactive runs prompt for them; with --yes/--json, pass    │
│                                                      all four. Use `zero internal ai suggest-salary` during intake if the operator has no range in mind.                                             │
│ --salary-max                                <float>  Structured maximum base salary. Must be >= --salary-min. Required to open a role (ZER-2420): --salary-min, --salary-max, --salary-currency and  │
│                                                      --salary-period must all be set. Interactive runs prompt for them; with --yes/--json, pass all four. Use `zero internal ai suggest-salary`      │
│                                                      during intake if the operator has no range in mind.                                                                                             │
│ --salary-currency                           <str>    Three-letter ISO 4217 currency code (e.g. 'USD'). Required to open a role (ZER-2420): --salary-min, --salary-max, --salary-currency and         │
│                                                      --salary-period must all be set. Interactive runs prompt for them; with --yes/--json, pass all four. Use `zero internal ai suggest-salary`      │
│                                                      during intake if the operator has no range in mind.                                                                                             │
│ --salary-period                             <str>    Pay period: one of YEAR, MONTH, WEEK, DAY, HOUR. Required to open a role (ZER-2420): --salary-min, --salary-max, --salary-currency and          │
│                                                      --salary-period must all be set. Interactive runs prompt for them; with --yes/--json, pass all four. Use `zero internal ai suggest-salary`      │
│                                                      during intake if the operator has no range in mind.                                                                                             │
│ --salary-visibility                         <str>    'public' (default) or 'private'. Private keeps the pay range off the public job posting and other candidate-facing surfaces; it still shows on  │
│                                                      employer views and still prices the open fee. Refused with a 422 naming the law wherever a pay-transparency rule requires the range in the      │
│                                                      posting.                                                                                                                                        │
│ --budgeted-compensation                     <int>    Budgeted annual guaranteed cash compensation for this role, in whole USD dollars (e.g. 200000 for $200,000/year) -- the basis for the role-open │
│                                                      fee (3% x this x positions; ZER-3277). Defaults to the middle of the range (--salary-min/--salary-max) when --salary-period is YEAR and         │
│                                                      --salary-currency is USD. Otherwise required to open a paid role: interactive runs prompt for it, --yes/--json runs error naming this flag. Not │
│                                                      needed with --skip-payment/--demo/--dry-run, which never charge anything.                                                                       │
│ --skills                                    <str>    Comma-separated list of required skills.                                                                                                        │
│ --seniority                                 <str>    Seniority level (e.g. 'Senior', 'Staff').                                                                                                       │
│ --experience-years                          <int>    Minimum years of experience.                                                                                                                    │
│ --tags                                      <str>    Comma-separated freeform tags.                                                                                                                  │
│ --client-id                                 <str>    RPO client UUID to create this role under.                                                                                                      │
│ --role-summary-json                         <str>    Structured role intake as a JSON object (must include 'title'). Threaded into both JD generation and job creation so the JD, the job, and any   │
│                                                      pipeline brief trace back to the same confirmed intake. Assemble this from the operator's answers before opening the role.                      │
│ --stage-plan-json                           <str>    Approved hiring flow (stage plan) to persist atomically with the job -- either a bare JSON array of stage objects, or a full {"stages": [...],  │
│                                                      "source": "..."} object, e.g. the output of `hiring-flow draft` (optionally edited). Its resume_assessment stage governs the job's auto-invite  │
│                                                      threshold. Optional; omit to get the backend's default plan (or set/change it later with `hiring-flow set`).                                    │
│ --dry-run                                            Generate the JD and return JSON without creating a payable job.                                                                                 │
│ --employer-id                               <str>    Employer UUID (auto-detected from login)                                                                                                        │
│ --skip-payment                                       Skip payment (for testing)                                                                                                                      │
│ --yes                    -y                          Auto-confirm all prompts (non-interactive)                                                                                                      │
│ --demo                                               Demo/testing shortcut: implies --skip-payment --yes                                                                                             │
│ --force                                              Create the job even if a recent active job with the same title exists.                                                                          │
│ --yes-duplicate                                      Skip the duplicate-title check entirely (implied by --force).                                                                                   │
│ --idempotency-key                           <str>    Retry key for safe role-open payment creation.                                                                                                  │
│ --use-description-as-jd                              Preserve --description directly only when it is already a polished HTML JD. Plain text is still formatted with AI.                              │
│ --json                                               Raw JSON output                                                                                                                                 │
│ --help                                               Show this message and exit.                                                                                                                     │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

hiring-flow

Usage: zero hiring-flow [OPTIONS] COMMAND [ARGS]...

 Configure the hiring pipeline stages (stage plan) for a role.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ show   Show the saved hiring flow (stage plan) for a job.                                                                                                                                            │
│ draft  Draft a stage plan with AI. Stateless -- does not save anything.                                                                                                                              │
│ set    Save the hiring flow (stage plan) for a job.                                                                                                                                                  │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

hiring-flow draft

Usage: zero hiring-flow draft [OPTIONS]

 Draft a stage plan with AI. Stateless -- does not save anything.

 Present the draft to the operator (stages + rationales; note it is
 fully automated by default) before saving it with `hiring-flow set`
 or threading it into `hire run --stage-plan-json`.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --role-summary-json        <str>  Structured role intake as a JSON object (must include 'title'), same shape as `hire run --role-summary-json`. Tailors the draft; omit for the fully-automated      │
│                                   smart default.                                                                                                                                                     │
│ --job-title                <str>  Job title, used when no --role-summary-json is given.                                                                                                              │
│ --feedback                 <str>  Freeform feedback to steer the draft (e.g. after showing a prior draft to the operator).                                                                           │
│ --json                            Raw JSON output                                                                                                                                                    │
│ --help                            Show this message and exit.                                                                                                                                        │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

hiring-flow set

Usage: zero hiring-flow set [OPTIONS] {job_id}

 Save the hiring flow (stage plan) for a job.

 Enabling the resume_assessment stage syncs its `config.threshold` into
 the job's real auto-invite gate; disabling it sets the gate to 0.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    job_id      <str>  Job UUID. [required]                                                                                                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --stages-json                 <str>  Either a bare JSON array of stage objects, or a full {"stages": [...], "source": "...", "reference_check": {...}} object (e.g. an edited `hiring-flow draft` │
│                                         output).                                                                                                                                                     │
│                                         [required]                                                                                                                                                   │
│    --source                      <str>  Plan source: ai, manual, or default (default: manual).                                                                                                       │
│    --reference-check-json        <str>  Reference-check config, e.g. '{"enabled": true, "count": 2}' (count 1-5, default 2). Overrides any reference_check already present in --stages-json. If      │
│                                         neither is given, the job's existing saved reference_check is preserved as-is -- omitting this flag does NOT disable an already-configured reference check.  │
│    --json                               Raw JSON output                                                                                                                                              │
│    --help                               Show this message and exit.                                                                                                                                  │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

hiring-flow show

Usage: zero hiring-flow show [OPTIONS] {job_id}

 Show the saved hiring flow (stage plan) for a job.

 Returns the fully-automated smart default (resume gate -> AI
 interview) if the job has no saved plan yet.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    job_id      <str>  Job UUID. [required]                                                                                                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

integrations

Usage: zero integrations [OPTIONS] COMMAND [ARGS]...

 ATS connection status, sync, write-back and job selection.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ status             Show whether an ATS (Greenhouse, Loxo, Lever, Ashby, Workable...) is connected and its sync state.                                                                                │
│ connections        List every ATS connection on the account (one per RPO client, plus the workspace one).                                                                                            │
│ connect            Explain how to connect an ATS. This does not connect one.                                                                                                                         │
│ sync               Start a resync from the connected ATS now. Runs in the background; check `integrations status`.                                                                                   │
│ disconnect         Disconnect the connected ATS (Greenhouse, Lever, Ashby, Workable...).                                                                                                             │
│ advance            Move an application to a new stage in the connected ATS.                                                                                                                          │
│ reject             Reject an application in the connected ATS.                                                                                                                                       │
│ note               Attach a note to a candidate in the connected ATS.                                                                                                                                │
│ write-back-report  Attach the Zero interview score-report PDF to the candidate's record in the connected ATS.                                                                                        │
│ writeback          Show or change the ATS write-back and auto-invite settings.                                                                                                                       │
│ job-selection      Choose which ATS jobs Zero imports and manages.                                                                                                                                   │
│ loxo               Loxo-specific settings (company scope).                                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

integrations advance

Usage: zero integrations advance [OPTIONS]

 Move an application to a new stage in the connected ATS.

 Write-back support is provider-dependent: a read-only ATS (e.g. Workable) answers with a
 clean error instead of silently doing nothing.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│    --ats-application-id          <str>  Zero's own ats_application_id for this application.                                                                                                          │
│    --external-id                 <str>  The connected ATS's own application id, instead of Zero's.                                                                                                   │
│ *  --stage-id                    <str>  Target stage UUID in the connected ATS. [required]                                                                                                           │
│    --client-id                   <str>  RPO client UUID. Agency/RPO accounts connect one ATS per client; omit for the workspace-level connection.                                                    │
│    --employer-id                 <str>  Employer UUID (auto-detected from login)                                                                                                                     │
│    --yes                 -y             Confirm writing a stage change into the customer's connected ATS.                                                                                            │
│    --json                               Raw JSON output                                                                                                                                              │
│    --help                               Show this message and exit.                                                                                                                                  │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

integrations connect

Usage: zero integrations connect [OPTIONS]

 Explain how to connect an ATS. This does not connect one.

 Connecting needs the customer's own consent (signing in to their ATS, or
 pasting its API key), so a person does it in the dashboard.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

integrations connections

Usage: zero integrations connections [OPTIONS]

 List every ATS connection on the account (one per RPO client, plus the workspace one).

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (auto-detected from login)                                                                                                                                 │
│ --json                      Raw JSON output                                                                                                                                                          │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

integrations disconnect

Usage: zero integrations disconnect [OPTIONS]

 Disconnect the connected ATS (Greenhouse, Lever, Ashby, Workable...).

 Revokes the linked account on the ATS side and drops the stored
 credential. Historical synced data (candidates, applications) is kept --
 only the connection itself is removed. Re-linking later needs the
 customer's own sign-in again (`zero integrations connect`). ZER-2349:
 without `--client-id` this disconnects only the employer-level "self"
 connection, never every client's connection on an RPO account.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id          <str>  Employer UUID (auto-detected from login)                                                                                                                               │
│ --client-id            <str>  RPO client UUID. Agency/RPO accounts connect one ATS per client; omit for the workspace-level connection.                                                              │
│ --yes          -y             Skip the confirmation prompt                                                                                                                                           │
│ --json                        Raw JSON output                                                                                                                                                        │
│ --help                        Show this message and exit.                                                                                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

integrations job-selection

Usage: zero integrations job-selection [OPTIONS] COMMAND [ARGS]...

 Choose which ATS jobs Zero imports and manages.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ show     Show whether Zero imports every ATS job or only a chosen list.                                                                                                                              │
│ catalog  List every job in the ATS (fetched live) and whether Zero currently manages it.                                                                                                             │
│ set      Replace the job selection and start a resync. Dropping a job stops future syncs; it deletes nothing.                                                                                        │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

integrations job-selection catalog

Usage: zero integrations job-selection catalog [OPTIONS]

 List every job in the ATS (fetched live) and whether Zero currently manages it.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (auto-detected from login)                                                                                                                                 │
│ --client-id          <str>  RPO client UUID. Agency/RPO accounts connect one ATS per client; omit for the workspace-level connection.                                                                │
│ --json                      Raw JSON output                                                                                                                                                          │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

integrations job-selection set

Usage: zero integrations job-selection set [OPTIONS]

 Replace the job selection and start a resync. Dropping a job stops future syncs; it deletes nothing.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --mode                 <str>  'all' imports every ATS job; 'selected' only the listed ones. [required]                                                                                            │
│    --job-remote-id        <str>  ATS job id to manage (the `remote_id` from `job-selection catalog`). Repeat per job. This REPLACES the whole list.                                                  │
│    --employer-id          <str>  Employer UUID (auto-detected from login)                                                                                                                            │
│    --client-id            <str>  RPO client UUID. Agency/RPO accounts connect one ATS per client; omit for the workspace-level connection.                                                           │
│    --json                        Raw JSON output                                                                                                                                                     │
│    --help                        Show this message and exit.                                                                                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

integrations job-selection show

Usage: zero integrations job-selection show [OPTIONS]

 Show whether Zero imports every ATS job or only a chosen list.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (auto-detected from login)                                                                                                                                 │
│ --client-id          <str>  RPO client UUID. Agency/RPO accounts connect one ATS per client; omit for the workspace-level connection.                                                                │
│ --json                      Raw JSON output                                                                                                                                                          │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

integrations loxo

Usage: zero integrations loxo [OPTIONS] COMMAND [ARGS]...

 Loxo-specific settings (company scope).

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ companies             List the Loxo companies an agency connection can be scoped to.                                                                                                                 │
│ scope                 Scope a non-RPO employer's Loxo sync to one company, or clear the scope (RPO accounts scope per client).                                                                       │
│ connect               Connect a Loxo agency using its API key.                                                                                                                                       │
│ disconnect            Disconnect one Loxo agency connection, removing its webhook subscriptions first.                                                                                               │
│ sub-agencies          List the brand/sub-agencies visible under a connected Loxo agency.                                                                                                             │
│ write-back-interview  Write an interview's results as a note on the candidate in Loxo.                                                                                                               │
│ webhooks              Loxo webhook subscriptions for one connected agency.                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

integrations loxo companies

Usage: zero integrations loxo companies [OPTIONS]

 List the Loxo companies an agency connection can be scoped to.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --agency-id          <int>  Loxo agency id (from `integrations status`) [required]                                                                                                                │
│    --employer-id        <str>  Employer UUID (auto-detected from login)                                                                                                                              │
│    --json                      Raw JSON output                                                                                                                                                       │
│    --help                      Show this message and exit.                                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

integrations loxo connect

Usage: zero integrations loxo connect [OPTIONS]

 Connect a Loxo agency using its API key.

 Unlike the other supported ATSs (which need an OAuth sign-in a human
 must do in the dashboard), Loxo authenticates with an agency-scoped API
 key that can be pasted directly, so this one -- unlike `integrations
 connect` -- actually connects it.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --slug               <str>  Loxo agency API slug [required]                                                                                                                                       │
│ *  --api-key            <str>  Agency-scoped Loxo API key [required]                                                                                                                                 │
│    --name               <str>  Display name for the Loxo agency                                                                                                                                      │
│    --base-url           <str>  Tenant Loxo base URL (defaults to the standard one)                                                                                                                   │
│    --employer-id        <str>  Employer UUID (auto-detected from login)                                                                                                                              │
│    --json                      Raw JSON output                                                                                                                                                       │
│    --help                      Show this message and exit.                                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

integrations loxo disconnect

Usage: zero integrations loxo disconnect [OPTIONS]

 Disconnect one Loxo agency connection, removing its webhook subscriptions first.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --agency-id            <int>  Loxo agency id (from `integrations status`) [required]                                                                                                              │
│    --employer-id          <str>  Employer UUID (auto-detected from login)                                                                                                                            │
│    --yes          -y             Skip the confirmation prompt                                                                                                                                        │
│    --json                        Raw JSON output                                                                                                                                                     │
│    --help                        Show this message and exit.                                                                                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

integrations loxo scope

Usage: zero integrations loxo scope [OPTIONS]

 Scope a non-RPO employer's Loxo sync to one company, or clear the scope (RPO accounts scope per client).

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --agency-id           <int>  Loxo agency id (from `integrations status`) [required]                                                                                                               │
│    --company-id          <int>  Loxo company id to scope the sync to                                                                                                                                 │
│    --company-name        <str>  Display name of that company                                                                                                                                         │
│    --clear                      Sync the whole agency instead of one company                                                                                                                         │
│    --employer-id         <str>  Employer UUID (auto-detected from login)                                                                                                                             │
│    --json                       Raw JSON output                                                                                                                                                      │
│    --help                       Show this message and exit.                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

integrations loxo sub-agencies

Usage: zero integrations loxo sub-agencies [OPTIONS]

 List the brand/sub-agencies visible under a connected Loxo agency.

 This is Loxo's own multi-brand "agencies" list -- distinct from
 `integrations connections`, which lists Zero's own ATS connection rows.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --agency-id          <int>  Loxo agency id to scope to. Omit to use the account's first connection.                                                                                                  │
│ --employer-id        <str>  Employer UUID (auto-detected from login)                                                                                                                                 │
│ --json                      Raw JSON output                                                                                                                                                          │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

integrations loxo webhooks

Usage: zero integrations loxo webhooks [OPTIONS] COMMAND [ARGS]...

 Loxo webhook subscriptions for one connected agency.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ list        List the Loxo webhook subscriptions registered for one connected agency.                                                                                                                 │
│ register    Register (or confirm) Loxo webhook subscriptions for a connected agency.                                                                                                                 │
│ unregister  Remove Loxo webhook subscriptions for a connected agency. Sync falls back to the periodic poll.                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

integrations loxo webhooks list

Usage: zero integrations loxo webhooks list [OPTIONS]

 List the Loxo webhook subscriptions registered for one connected agency.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --agency-id          <int>  Loxo agency id (from `integrations status`) [required]                                                                                                                │
│    --employer-id        <str>  Employer UUID (auto-detected from login)                                                                                                                              │
│    --json                      Raw JSON output                                                                                                                                                       │
│    --help                      Show this message and exit.                                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

integrations loxo webhooks register

Usage: zero integrations loxo webhooks register [OPTIONS]

 Register (or confirm) Loxo webhook subscriptions for a connected agency.

 Lets Loxo-side changes sync in near real time instead of waiting for the
 periodic poll. Safe to re-run: already-registered subscriptions are
 reported, not duplicated.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --agency-id          <int>  Loxo agency id (from `integrations status`) [required]                                                                                                                │
│    --employer-id        <str>  Employer UUID (auto-detected from login)                                                                                                                              │
│    --json                      Raw JSON output                                                                                                                                                       │
│    --help                      Show this message and exit.                                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

integrations loxo webhooks unregister

Usage: zero integrations loxo webhooks unregister [OPTIONS]

 Remove Loxo webhook subscriptions for a connected agency. Sync falls back to the periodic poll.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --agency-id            <int>  Loxo agency id (from `integrations status`) [required]                                                                                                              │
│    --employer-id          <str>  Employer UUID (auto-detected from login)                                                                                                                            │
│    --yes          -y             Skip the confirmation prompt                                                                                                                                        │
│    --json                        Raw JSON output                                                                                                                                                     │
│    --help                        Show this message and exit.                                                                                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

integrations loxo write-back-interview

Usage: zero integrations loxo write-back-interview [OPTIONS] {interview_id}

 Write an interview's results as a note on the candidate in Loxo.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    interview_id      <str>  Interview UUID whose results to write back to Loxo. [required]                                                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id          <str>  Employer UUID (auto-detected from login)                                                                                                                               │
│ --yes          -y             Confirm writing this interview's results as a note in Loxo.                                                                                                            │
│ --json                        Raw JSON output                                                                                                                                                        │
│ --help                        Show this message and exit.                                                                                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

integrations note

Usage: zero integrations note [OPTIONS]

 Attach a note to a candidate in the connected ATS.

 NOT the same as `candidates notes add` -- that writes to Zero's own candidate_notes table.
 This writes a note into the customer's own connected ATS record for the candidate.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│    --ats-candidate-id          <str>  Zero's own ats_candidate_id for this candidate.                                                                                                                │
│    --external-id               <str>  The connected ATS's own candidate id, instead of Zero's.                                                                                                       │
│ *  --body                      <str>  Note content to attach to the candidate in the connected ATS. [required]                                                                                       │
│    --client-id                 <str>  RPO client UUID. Agency/RPO accounts connect one ATS per client; omit for the workspace-level connection.                                                      │
│    --employer-id               <str>  Employer UUID (auto-detected from login)                                                                                                                       │
│    --yes               -y             Confirm attaching this note to the candidate in the connected ATS.                                                                                             │
│    --json                             Raw JSON output                                                                                                                                                │
│    --help                             Show this message and exit.                                                                                                                                    │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

integrations reject

Usage: zero integrations reject [OPTIONS]

 Reject an application in the connected ATS.

 Zero never rejects a candidate automatically on an AI assessment alone -- a human always
 confirms this call, and the Slack bridge holds it for one too. Today's connected-ATS
 integration layer has no rejection endpoint for any provider, so this always comes back a
 clean 422; reject the candidate directly in the ATS and the next sync picks up the change.
 Kept so the CLI/MCP surface matches the dashboard's -- not a no-op you should expect to
 succeed.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --ats-application-id          <str>  Zero's own ats_application_id for this application.                                                                                                             │
│ --external-id                 <str>  The connected ATS's own application id, instead of Zero's.                                                                                                      │
│ --reject-reason               <str>  Reason recorded for the rejection attempt.                                                                                                                      │
│ --client-id                   <str>  RPO client UUID. Agency/RPO accounts connect one ATS per client; omit for the workspace-level connection.                                                       │
│ --employer-id                 <str>  Employer UUID (auto-detected from login)                                                                                                                        │
│ --yes                 -y             Confirm attempting to reject this application in the connected ATS.                                                                                             │
│ --json                               Raw JSON output                                                                                                                                                 │
│ --help                               Show this message and exit.                                                                                                                                     │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

integrations status

Usage: zero integrations status [OPTIONS]

 Show whether an ATS (Greenhouse, Loxo, Lever, Ashby, Workable...) is connected and its sync state.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (auto-detected from login)                                                                                                                                 │
│ --client-id          <str>  RPO client UUID. Agency/RPO accounts connect one ATS per client; omit for the workspace-level connection.                                                                │
│ --json                      Raw JSON output                                                                                                                                                          │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

integrations sync

Usage: zero integrations sync [OPTIONS]

 Start a resync from the connected ATS now. Runs in the background; check `integrations status`.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (auto-detected from login)                                                                                                                                 │
│ --client-id          <str>  RPO client UUID. Agency/RPO accounts connect one ATS per client; omit for the workspace-level connection.                                                                │
│ --force                     Also re-queue candidates whose scoring previously failed for a fresh attempt (non-Loxo connections only).                                                                │
│ --json                      Raw JSON output                                                                                                                                                          │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

integrations write-back-report

Usage: zero integrations write-back-report [OPTIONS]

 Attach the Zero interview score-report PDF to the candidate's record in the connected ATS.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --ats-application-id          <str>  Zero's own ats_application_id for this application.                                                                                                             │
│ --external-id                 <str>  The connected ATS's own application id, instead of Zero's.                                                                                                      │
│ --interview-id                <str>  Specific interview to write back; omit to use the application's most recently scored interview.                                                                 │
│ --force                              Re-issue a corrected report even though one already sent successfully for this interview.                                                                       │
│ --client-id                   <str>  RPO client UUID. Agency/RPO accounts connect one ATS per client; omit for the workspace-level connection.                                                       │
│ --employer-id                 <str>  Employer UUID (auto-detected from login)                                                                                                                        │
│ --yes                 -y             Confirm attaching the score-report PDF in the connected ATS.                                                                                                    │
│ --json                               Raw JSON output                                                                                                                                                 │
│ --help                               Show this message and exit.                                                                                                                                     │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

integrations writeback

Usage: zero integrations writeback [OPTIONS] COMMAND [ARGS]...

 Show or change the ATS write-back and auto-invite settings.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ show  Show write-back mode, stage names, auto-invite, and whether each active job has those stages.                                                                                                  │
│ set   Change write-back / auto-invite settings. Only the flags you pass change.                                                                                                                      │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

integrations writeback set

Usage: zero integrations writeback set [OPTIONS]

 Change write-back / auto-invite settings. Only the flags you pass change.

 Turning on `--mode auto` writes to the customer's own ATS, and turning on
 `--auto-invite` emails candidates without a further check-in, so both need
 an explicit `--yes` after the operator agrees. Turning either off, or
 renaming a stage, does not.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --mode                                     <str>  'auto' moves candidates to the named stages in the ATS as they are invited / finish; 'off' stops.                                                  │
│ --invited-stage                            <str>  ATS stage name for candidates who were invited to an AI interview.                                                                                 │
│ --completed-stage                          <str>  ATS stage name for candidates who finished the AI interview.                                                                                       │
│ --auto-invite          --no-auto-invite           Automatically email an AI-interview invite to new ATS applications. Only applications created after it is switched on are invited. Independent of  │
│                                                   --mode.                                                                                                                                            │
│ --employer-id                              <str>  Employer UUID (auto-detected from login)                                                                                                           │
│ --client-id                                <str>  RPO client UUID. Agency/RPO accounts connect one ATS per client; omit for the workspace-level connection.                                          │
│ --yes              -y                             Confirm switching on a setting that writes to the customer's ATS or emails candidates.                                                             │
│ --json                                            Raw JSON output                                                                                                                                    │
│ --help                                            Show this message and exit.                                                                                                                        │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

integrations writeback show

Usage: zero integrations writeback show [OPTIONS]

 Show write-back mode, stage names, auto-invite, and whether each active job has those stages.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (auto-detected from login)                                                                                                                                 │
│ --client-id          <str>  RPO client UUID. Agency/RPO accounts connect one ATS per client; omit for the workspace-level connection.                                                                │
│ --json                      Raw JSON output                                                                                                                                                          │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal

Usage: zero internal [OPTIONS] COMMAND [ARGS]...

 Internal/advanced commands.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ configure     Manually configure API credentials.                                                                                                                                                    │
│ jobs          Manage jobs.                                                                                                                                                                           │
│ applications  Manage applications.                                                                                                                                                                   │
│ interviews    Manage interviews.                                                                                                                                                                     │
│ employers     Manage employers.                                                                                                                                                                      │
│ applicants    Manage applicants.                                                                                                                                                                     │
│ ai            AI-powered generation tools.                                                                                                                                                           │
│ files         Upload files.                                                                                                                                                                          │
│ jenny         Debug Jenny live-call transcripts and chat logs (dev/staging only).                                                                                                                    │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal ai

Usage: zero internal ai [OPTIONS] COMMAND [ARGS]...

 AI-powered generation tools.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ generate-jd            Generate or refine a job description using AI.                                                                                                                                │
│ generate-questions     Generate or refine interview questions using AI.                                                                                                                              │
│ extract-skills         Extract skills from a job description.                                                                                                                                        │
│ suggest-salary         Compute a recommended salary range for a role (ZER-2467).                                                                                                                     │
│ draft-job-from-intake  Turn free-text intake into structured job fields (nothing is saved).                                                                                                          │
│ plan-job-changes       Plan edits to a role from a plain-language instruction (nothing is saved).                                                                                                    │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal ai draft-job-from-intake

Usage: zero internal ai draft-job-from-intake [OPTIONS]

 Turn free-text intake into structured job fields (nothing is saved).

 Returns the extracted fields, which required fields are still missing,
 and up to three follow-up questions to ask. Creating the role is a
 separate step (`internal jobs create`).

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --text                      <str>  Free-text intake (a client's brief, call notes, an email). [required]                                                                                          │
│    --company-context           <str>  Short company context to ground the draft.                                                                                                                     │
│    --default-country           <str>  Country to assume when the text names none.                                                                                                                    │
│    --known-json                <str>  JSON object of job fields already confirmed (e.g. '{"title": "SRE"}').                                                                                         │
│    --latest-instruction        <str>  The operator's latest reply or instruction.                                                                                                                    │
│    --json                             Raw JSON output                                                                                                                                                │
│    --help                             Show this message and exit.                                                                                                                                    │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal ai extract-skills

Usage: zero internal ai extract-skills [OPTIONS]

 Extract skills from a job description.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --description  -d      <str>  Job description text [required]                                                                                                                                     │
│    --json                        Raw JSON output                                                                                                                                                     │
│    --help                        Show this message and exit.                                                                                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal ai generate-jd

Usage: zero internal ai generate-jd [OPTIONS]

 Generate or refine a job description using AI.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --title              -t      <str>  Job title [required]                                                                                                                                          │
│    --skills                     <str>  Required skills                                                                                                                                               │
│    --company                    <str>  Company name                                                                                                                                                  │
│    --feedback                   <str>  Refinement feedback                                                                                                                                           │
│    --language                   <str>  Language to write the job description in: 'en' (default), 'es' or 'pl'. Use the role's language so the JD matches the interview and the candidate pages.      │
│    --role-summary-json          <str>  Structured role intake as a JSON object (must include 'title'). Folded into the JD source material so the JD matches the confirmed intake.                    │
│    --markdown                          Convert the generated JD from HTML to Markdown before printing (ZER-2468). Use this when the draft is going straight into a chat reply -- Jenny's chat        │
│                                        renderer deliberately refuses raw HTML, so paste the Markdown form, never the raw job_description field. `--json` still returns the original HTML unless this │
│                                        is also set; the job-creation path (hire run) is unaffected -- it always stores the generator's real HTML output.                                             │
│    --json                              Raw JSON output                                                                                                                                               │
│    --help                              Show this message and exit.                                                                                                                                   │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal ai generate-questions

Usage: zero internal ai generate-questions [OPTIONS]

 Generate or refine interview questions using AI.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --title       -t      <str>  Job title [required]                                                                                                                                                 │
│    --skills              <str>  Required skills                                                                                                                                                      │
│    --company             <str>  Company name                                                                                                                                                         │
│    --feedback            <str>  Refinement feedback                                                                                                                                                  │
│    --structured                 Return structured screening question objects alongside legacy text.                                                                                                  │
│    --json                       Raw JSON output                                                                                                                                                      │
│    --help                       Show this message and exit.                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal ai plan-job-changes

Usage: zero internal ai plan-job-changes [OPTIONS]

 Plan edits to a role from a plain-language instruction (nothing is saved).

 Returns a sparse diff: only the fields, questions and stage settings the
 instruction changes. Applying it is a separate step (`internal jobs update`).

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --instruction         <str>  What to change, in plain language. [required]                                                                                                                        │
│    --current-json        <str>  JSON object with the job's current state: any of current_fields, current_screening_questions, current_behavioral_mode, current_behavioral_questions,                 │
│                                 current_stage_plan, current_description.                                                                                                                             │
│    --locale              <str>  Reply language: en or es. [default: en]                                                                                                                              │
│    --json                       Raw JSON output                                                                                                                                                      │
│    --help                       Show this message and exit.                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal ai suggest-salary

Usage: zero internal ai suggest-salary [OPTIONS]

 Compute a recommended salary range for a role (ZER-2467).

 Product decision, verbatim (Alan): don't make salary optional -- compute
 it and propose it. Returns an ESTIMATE for the operator to react to
 (accept / give a different number / not disclose), never something to
 present as market data Zero measured -- there is no benchmark data
 source behind this, it's an LLM estimate. When the response's
 `disclosure_required` is true, the "don't disclose" option is not legally
 available for that posting; say so instead of silently omitting salary.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --title            -t      <str>  Job title [required]                                                                                                                                            │
│ *  --location         -l      <str>  Job location [required]                                                                                                                                         │
│    --seniority                <str>  Seniority level (e.g. 'Senior', 'Staff').                                                                                                                       │
│    --employment-type          <str>  Employment type (e.g. 'Full-time').                                                                                                                             │
│    --company-context          <str>  Short company context (stage, size, industry) to refine the estimate.                                                                                           │
│    --json                            Raw JSON output                                                                                                                                                 │
│    --help                            Show this message and exit.                                                                                                                                     │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal applicants

Usage: zero internal applicants [OPTIONS] COMMAND [ARGS]...

 Manage applicants.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ create        Create (or get) an applicant by email.                                                                                                                                                 │
│ update-phone  Update an existing applicant phone number.                                                                                                                                             │
│ update-email  Replace a candidate's email in Zero (the old address is not kept).                                                                                                                     │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal applicants create

Usage: zero internal applicants create [OPTIONS]

 Create (or get) an applicant by email.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --email             <str>  Applicant email [required]                                                                                                                                             │
│ *  --first-name        <str>  First name [required]                                                                                                                                                  │
│ *  --last-name         <str>  Last name [required]                                                                                                                                                   │
│    --json                     Raw JSON output                                                                                                                                                        │
│    --help                     Show this message and exit.                                                                                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal applicants update-email

Usage: zero internal applicants update-email [OPTIONS]

 Replace a candidate's email in Zero (the old address is not kept).

 Optionally re-sends the candidate's pending AI interview invite to the new
 address. Editing the email in the ATS (Loxo) does not reliably reach Zero;
 use this command instead.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --application-id          <str>  Application UUID [required]                                                                                                                                      │
│ *  --email                   <str>  New candidate email address [required]                                                                                                                           │
│    --previous-email          <str>  Current email, as a guard: refuses if it changed since you read it                                                                                               │
│    --resend-invite                  Also cancel the pending AI invite and send a fresh one to the new address                                                                                        │
│    --employer-id             <str>  Employer UUID                                                                                                                                                    │
│    --yes             -y             Required in JSON/MCP mode; skip the confirmation prompt.                                                                                                         │
│    --json                           Raw JSON output                                                                                                                                                  │
│    --help                           Show this message and exit.                                                                                                                                      │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal applicants update-phone

Usage: zero internal applicants update-phone [OPTIONS]

 Update an existing applicant phone number.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --phone                 <str>  New candidate phone number [required]                                                                                                                              │
│    --email                 <str>  Applicant email                                                                                                                                                    │
│    --application-id        <str>  Application UUID                                                                                                                                                   │
│    --job-id                <str>  Optional job UUID to disambiguate by role                                                                                                                          │
│    --employer-id           <str>  Employer UUID                                                                                                                                                      │
│    --json                         Raw JSON output                                                                                                                                                    │
│    --help                         Show this message and exit.                                                                                                                                        │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal applications

Usage: zero internal applications [OPTIONS] COMMAND [ARGS]...

 Manage applications.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ list                  List applications, optionally filtered by job, status, or pipeline stage.                                                                                                      │
│ create                Create a new application (with optional resume).                                                                                                                               │
│ rank                  Manually set an application's ranking.                                                                                                                                         │
│ transfer              Move a candidate's application to another role of the same employer (ZER-4035).                                                                                                │
│ stage-counts          Per-stage candidate counts for a job's pipeline (ZER-1128).                                                                                                                    │
│ assessment-rationale  Read the stored assessment rationale for an application.                                                                                                                       │
│ decisions             List the AI decision trail for an application, each with its linked human reviews.                                                                                             │
│ decisions-review      Record a human's uphold/override of one AI decision (ZER-1784).                                                                                                                │
│ human-review-request  Flag an application's automated screening for human review.                                                                                                                    │
│ record-contact        Record that a recruiter reached this candidate outside Zero.                                                                                                                   │
│ reprocess             Re-drive a stuck/failed application through background processing.                                                                                                             │
│ automation-exemption  Set or clear the per-candidate automated-scoring/advancement exemption.                                                                                                        │
│ score-resume          Score one resume against a job description, without creating anything.                                                                                                         │
│ same-title-interview  Does this applicant already have this job title covered by another                                                                                                             │
│                       application at this employer (ZER-3941)?                                                                                                                                       │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal applications assessment-rationale

Usage: zero internal applications assessment-rationale [OPTIONS]
                                                        {application_id}

 Read the stored assessment rationale for an application.

 Interview-report reasoning, additional-score reasoning, ConFit data, and
 the stored rejection reason -- what a candidate is entitled to see as a
 GDPR Art 22 explanation of an automated decision.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    application_id      <str>  Application UUID [required]                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal applications automation-exemption

Usage: zero internal applications automation-exemption [OPTIONS]
                                                        {application_id}

 Set or clear the per-candidate automated-scoring/advancement exemption.

 An excluded candidate (MSA §3(c)/§8(c), DPA §10(d)) is never
 automatically scored or advanced.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    application_id      <str>  Application UUID [required]                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --excluded    --no-excluded           Mark (or clear) this candidate as excluded from automated scoring/advancement. [required]                                                                   │
│    --reason                       <str>  Optional reason, stored when --excluded is set.                                                                                                             │
│    --json                                Raw JSON output                                                                                                                                             │
│    --help                                Show this message and exit.                                                                                                                                 │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal applications create

Usage: zero internal applications create [OPTIONS]

 Create a new application (with optional resume).

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --applicant-id        <str>  Applicant UUID [required]                                                                                                                                            │
│ *  --job-id              <str>  Job UUID [required]                                                                                                                                                  │
│    --resume              <str>  Path to resume file                                                                                                                                                  │
│    --resume-url          <str>  URL to resume                                                                                                                                                        │
│    --json                       Raw JSON output                                                                                                                                                      │
│    --help                       Show this message and exit.                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal applications decisions

Usage: zero internal applications decisions [OPTIONS] {application_id}

 List the AI decision trail for an application, each with its linked human reviews.

 What a reviewer needs to see before upholding or overriding a decision
 with `applications decisions-review`, and what a Hiring Manager needs to
 understand why a candidate scored the way they did (ZER-1784).

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    application_id      <str>  Application UUID [required]                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal applications decisions-review

Usage: zero internal applications decisions-review [OPTIONS] {application_id}
                                                    {decision_id}

 Record a human's uphold/override of one AI decision (ZER-1784).

 Reserved for full employer team members (owner/member), not the
 Hiring Manager / reviewer role. Also closes the candidate's open
 human-review request for this application, if one exists, resolving
 the Art 22 "contest" loop.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    application_id      <str>  Application UUID [required]                                                                                                                                          │
│ *    decision_id         <str>  Decision UUID (from `applications decisions`) [required]                                                                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --outcome        <str>  'upheld' or 'overridden'. [required]                                                                                                                                      │
│ *  --reason         <str>  Required rationale for the audit trail. [required]                                                                                                                        │
│    --json                  Raw JSON output                                                                                                                                                           │
│    --help                  Show this message and exit.                                                                                                                                               │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal applications human-review-request

Usage: zero internal applications human-review-request [OPTIONS]
                                                        {application_id}

 Flag an application's automated screening for human review.

 The right not to be subject to a solely-automated decision (GDPR Art
 22). Review it with `applications decisions`, then resolve it with
 `applications decisions-review`.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    application_id      <str>  Application UUID [required]                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --reason        <str>  Why human review is being requested. [required]                                                                                                                            │
│    --json                 Raw JSON output                                                                                                                                                            │
│    --help                 Show this message and exit.                                                                                                                                                │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal applications list

Usage: zero internal applications list [OPTIONS]

 List applications, optionally filtered by job, status, or pipeline stage.

 Omitting --job-id searches across every role of the employer in one
 call. This is the direct fix for the worst measured Jenny tool loop:
 "give me a list of candidates stuck at resume screening" used to cost a
 `jobs list` call plus one job-scoped `applications list` call per role,
 filtered by hand -- roughly 200 model requests for one question.
 `--stage-type`/`--stage-status`/`--status` answer that in a single
 tenant-scoped, paginated call instead.

 A cross-role --status count (--job-id omitted) defaults to OPEN roles
 only (ZER-3813) -- pass --include-closed for every role. Every
 --job-id-omitted read also prints/echoes which scope its number covers,
 so that is never left to be inferred.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id           <str>  Employer UUID (auto-detected from login)                                                                                                                              │
│ --job-id                <str>  Filter by job UUID. OMIT this to search across every role of the employer in one call (ZER-3448) -- combine with --stage-type/--stage-status/--status for the         │
│                                cross-role candidate-by-stage read; see those flags.                                                                                                                  │
│ --status                <str>  Filter by application status: pending|hired|rejected|transferred. `pending` across every role (job_id omitted) is the definition of "who is awaiting a decision".     │
│ --stage-type            <str>  Filter by the current pipeline-stage cursor: applied|resume_assessment|ai_interview|human_interview|hired|rejected. Combined with an omitted --job-id, this is the    │
│                                ONE-CALL answer to "who is stuck at resume screening" (or any stage) across every role (ZER-3448) -- do NOT answer that by listing jobs and then paging `applications │
│                                list --job <job>` once per role: that loop measured ~200 model requests for one question in September's Jenny production traffic, the single worst tool loop found.   │
│                                This one call is tenant-scoped and paginated; the printed/`--json` total is authoritative for these exact filters (never re-derive it by summing per-role counts).    │
│ --stage-status          <str>  Narrow further within --stage-type: 'entered' (not yet advanced/scored) or 'completed' (finished this stage's own work, not yet moved to the next). REQUIRES          │
│                                --stage-type -- rejected with an error otherwise, since a bare status matches every stage at once.                                                                    │
│ --include-closed               Count/list closed roles too. Default (ZER-3813): with --job-id omitted and --status set, this reads open roles ONLY -- a cross-role status count used to silently     │
│                                count closed roles too, inflating 'how many rejected/pending' answers. Pass --include-closed for the old every-role total. No effect with --job-id set, or when       │
│                                --status is not set (a --stage-type-only cross-role read, ZER-3448, has always covered every role).                                                                   │
│ --page                  <int>  Page number [default: 1]                                                                                                                                              │
│ --limit                 <int>  Results per page [default: 20]                                                                                                                                        │
│ --json                         Raw JSON output                                                                                                                                                       │
│ --help                         Show this message and exit.                                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal applications rank

Usage: zero internal applications rank [OPTIONS] {application_id}

 Manually set an application's ranking.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    application_id      <str>  Application UUID [required]                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --ranking  -r      <int>  New ranking position [required]                                                                                                                                         │
│ *  --reason           <str>  Reason for ranking change [required]                                                                                                                                    │
│    --json                    Raw JSON output                                                                                                                                                         │
│    --help                    Show this message and exit.                                                                                                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal applications record-contact

Usage: zero internal applications record-contact [OPTIONS] {application_id}

 Record that a recruiter reached this candidate outside Zero.

 The escape hatch for the sourced-never-responded outbound-action guard
 that blocks `candidates hire`, invite sends, and reference checks until
 there is recorded evidence of candidate contact -- a phone call,
 LinkedIn message, referral, or an in-person conversation. Recording it
 here legitimately unlocks every one of those guards at once; there is
 no other way past them. Sends nothing to the candidate.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    application_id      <str>  Application UUID [required]                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --note        <str>  Optional free-text note on how contact happened (e.g. 'spoke by phone', 'referred by Jane'). Never shown to the candidate.                                                      │
│ --json               Raw JSON output                                                                                                                                                                 │
│ --help               Show this message and exit.                                                                                                                                                     │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal applications reprocess

Usage: zero internal applications reprocess [OPTIONS] {application_id}

 Re-drive a stuck/failed application through background processing.

 For an application left in `failed` (or otherwise stalled) by a
 transient error. Only re-drives sources the pipeline can read back on
 its own (a sourced candidate's cached profile, or a demo-fixture resume
 URL) -- a plain stored resume_url cannot be re-read, so the backend
 409s when there is nothing re-scorable left. This is a re-drive, not a
 new application: no thank-you email or employer notification is sent.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    application_id      <str>  Application UUID [required]                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal applications same-title-interview

Usage: zero internal applications same-title-interview [OPTIONS]
                                                        {application_id}

 Does this applicant already have this job title covered by another application at this employer (ZER-3941)?

 Read-only. Answers two questions: whether to show a sibling
 application's AI-interview result on a candidate with no interview of
 their own, and whether to warn a recruiter before a manual invite that
 this person already has the title covered (manual invites stay allowed
 either way -- this only supplies the warning data). Derived fresh on
 every call; there is nothing here to go stale.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    application_id      <str>  Application UUID [required]                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal applications score-resume

Usage: zero internal applications score-resume [OPTIONS]

 Score one resume against a job description, without creating anything.

 Returns a 0-1 match score. Nothing is saved: no applicant, application
 or job is created, so this is for a quick "how well does this resume
 fit?" check. A score is input for a human decision, never grounds on its
 own to reject a candidate.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --resume                      <str>  Path to the resume PDF. [required]                                                                                                                           │
│    --job-description             <str>  Job description text.                                                                                                                                        │
│    --job-description-file        <str>  Read the job description from this file.                                                                                                                     │
│    --json                               Raw JSON output                                                                                                                                              │
│    --help                               Show this message and exit.                                                                                                                                  │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal applications stage-counts

Usage: zero internal applications stage-counts [OPTIONS]

 Per-stage candidate counts for a job's pipeline (ZER-1128).

 Server-side source for an applicants-page funnel/stage filter: counts
 come from the candidate-stage-tracking cursor
 (``pipeline_stage_type``/``pipeline_stage_status``), not a client-side
 re-derivation from a full candidate list.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --job-id             <str>  Job UUID. [required]                                                                                                                                                  │
│    --employer-id        <str>  Employer UUID (auto-detected from login)                                                                                                                              │
│    --json                      Raw JSON output                                                                                                                                                       │
│    --help                      Show this message and exit.                                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal applications transfer

Usage: zero internal applications transfer [OPTIONS] {application_id}

 Move a candidate's application to another role of the same employer (ZER-4035).

 A reason is mandatory. The source application becomes ``transferred``
 and a new ``pending`` application is created on the target role; its
 resume is assessed against that role in the background (no candidate
 email, no employer notification). Any AI interview stays attached to
 the original application -- the new one shows where the candidate came
 from. The connected ATS is NOT updated by a move.

 409 ``same_job``/``target_job_closed``/``already_on_target_job``/
 ``source_not_movable``/``status_changed`` means the move was refused;
 the error message explains which.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    application_id      <str>  Application UUID (the candidate's current application). [required]                                                                                                   │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --target-job         <str>  Role to move the candidate to (job UUID or short id, same ref `jobs show` accepts). [required]                                                                        │
│ *  --reason             <str>  Required reason for the move (max 1000 chars). [required]                                                                                                             │
│    --employer-id        <str>  Employer UUID (auto-detected from login)                                                                                                                              │
│    --json                      Raw JSON output                                                                                                                                                       │
│    --help                      Show this message and exit.                                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal configure

Usage: zero internal configure [OPTIONS]

 Manually configure API credentials.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│    --api-url            <str>  [default: https://dev.api.zerohiring.com]                                                                                                                             │
│ *  --api-key            <str>  [required]                                                                                                                                                            │
│    --employer-id        <str>                                                                                                                                                                        │
│    --help                      Show this message and exit.                                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal employers

Usage: zero internal employers [OPTIONS] COMMAND [ARGS]...

 Manage employers.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ create     Create a new employer account.                                                                                                                                                            │
│ analytics  Get analytics for an employer.                                                                                                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal employers analytics

Usage: zero internal employers analytics [OPTIONS] {employer_id}

 Get analytics for an employer.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    employer_id      <str>  Employer UUID [required]                                                                                                                                                │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --start-date        <str>  Start date (ISO format)                                                                                                                                                   │
│ --end-date          <str>  End date (ISO format)                                                                                                                                                     │
│ --json                     Raw JSON output                                                                                                                                                           │
│ --help                     Show this message and exit.                                                                                                                                               │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal employers create

Usage: zero internal employers create [OPTIONS]

 Create a new employer account.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --email                       <str>  Employer email [required]                                                                                                                                    │
│ *  --first-name                  <str>  First name [required]                                                                                                                                        │
│ *  --last-name                   <str>  Last name [required]                                                                                                                                         │
│ *  --company                     <str>  Company name [required]                                                                                                                                      │
│    --demo           --no-demo           Provision as a demo tenant (employers.is_demo=true): charges, cold outreach, and real sourcing are suppressed for this employer; demo-seeded rows stay       │
│                                         permanently excluded from analytics/billing even after demo mode is turned off. Toggle later with `zero demo mode on|off --employer-id`. For a full one-call │
│                                         demo build (org + jobs + pipelines + login), prefer `zero demo build` instead of assembling this by hand.                                                    │
│                                         [default: no-demo]                                                                                                                                           │
│    --logo-url                    <str>  Company logo URL (optional)                                                                                                                                  │
│    --website-url                 <str>  Company website URL (optional)                                                                                                                               │
│    --json                               Raw JSON output                                                                                                                                              │
│    --help                               Show this message and exit.                                                                                                                                  │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal files

Usage: zero internal files [OPTIONS] COMMAND [ARGS]...

 Upload files.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ upload       Upload a file to S3.                                                                                                                                                                    │
│ publish-url  Get a one-time upload URL and a download link for a file you produced.                                                                                                                  │
│ publish      Publish a file you produced: upload it and print a download link.                                                                                                                       │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal files publish

Usage: zero internal files publish [OPTIONS] {path}

 Publish a file you produced: upload it and print a download link.

 Gets an upload URL from the backend, PUTs the file's bytes to it with
 exactly the headers the backend returned, then prints the permanent
 link to share (``permalink``) plus the short-lived signed
 ``download_url``. Nothing is printed if the upload itself fails.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    path      <str>  Path to the file you produced. [required]                                                                                                                                      │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --name                   <str>  Published filename (defaults to the file's own name).                                                                                                                │
│ --conversation-id        <str>  Conversation this file belongs to, if any.                                                                                                                           │
│ --json                          Raw JSON output                                                                                                                                                      │
│ --help                          Show this message and exit.                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal files publish-url

Usage: zero internal files publish-url [OPTIONS] {filename}

 Get a one-time upload URL and a download link for a file you produced.

 You still have to PUT the bytes to ``upload_url`` yourself (with exactly
 ``upload_headers``) before either link will serve anything. Link the
 ``permalink`` in a reply -- it never expires; ``download_url`` is the
 short-lived signed URL for an immediate fetch. Use ``files publish``
 instead if the CLI can already read the file itself.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    filename      <str>  Name of the file you want to publish. [required]                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --byte-size              <int>  Size of the file, in bytes. [required]                                                                                                                            │
│    --conversation-id        <str>  Conversation this file belongs to, if any.                                                                                                                        │
│    --json                          Raw JSON output                                                                                                                                                   │
│    --help                          Show this message and exit.                                                                                                                                       │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal files upload

Usage: zero internal files upload [OPTIONS] {file}

 Upload a file to S3.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    file      <str>  Path to file [required]                                                                                                                                                        │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --folder        <str>  Target folder (resumes, avatars, etc.) [default: resumes]                                                                                                                     │
│ --json                 Raw JSON output                                                                                                                                                               │
│ --help                 Show this message and exit.                                                                                                                                                   │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal interviews

Usage: zero internal interviews [OPTIONS] COMMAND [ARGS]...

 Manage interviews.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ create                Create a new interview, or trigger a video reference check.                                                                                                                    │
│ create-reference      Manual fallback: record a referee the EMPLOYER typed in.                                                                                                                       │
│ test                  Create an employer preview interview and print the launch URL.                                                                                                                 │
│ results               Get results for a completed interview.                                                                                                                                         │
│ transcript-translate  Translate this interview's scored Q&A transcript (ZER-3929).                                                                                                                   │
│ trigger-call          Trigger an outbound phone call for an interview.                                                                                                                               │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal interviews create

Usage: zero internal interviews create [OPTIONS]

 Create a new interview, or trigger a video reference check.

 Same candidate-contact-evidence gate as `manage_candidates` hire/invite
 actions applies here: with `--use-case reference`, the backend returns
 HTTP 409 (`reference_request_requires_candidate_contact`) if there is no
 recorded evidence this candidate has ever engaged with us. That is a
 deliberate refusal, not a transient error -- there is no override flag.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --interview-type                    <str>  Interview type (e.g. realtime, video, four_models) [required]                                                                                          │
│ *  --applicant-id                      <str>  Applicant UUID [required]                                                                                                                              │
│    --employer-id                       <str>  Employer UUID (auto-detected from login)                                                                                                               │
│ *  --job-id                            <str>  Job UUID [required]                                                                                                                                    │
│    --application-id                    <str>  Application UUID                                                                                                                                       │
│    --avatar-id                         <str>  Avatar ID                                                                                                                                              │
│    --is-test           --no-is-test           Mark as test/preview interview [default: no-is-test]                                                                                                   │
│    --use-case                          <str>  interview (default) or reference -- reference triggers a video reference interview (with the referee) instead of a candidate interview; requires       │
│                                               --reference-id from `interviews create-reference`. Reference checks are video only, so phone_call is not accepted with it. Manual fallback only: the   │
│                                               automatic path is `zero references request`.                                                                                                           │
│                                               [default: interview]                                                                                                                                   │
│    --reference-id                      <str>  Reference record ID (from `interviews create-reference`). Required when --use-case reference.                                                          │
│    --json                                     Raw JSON output                                                                                                                                        │
│    --help                                     Show this message and exit.                                                                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal interviews create-reference

Usage: zero internal interviews create-reference [OPTIONS]

 Manual fallback: record a referee the EMPLOYER typed in.

 The normal path is automatic and candidate-led: `zero references request
 <APPLICATION_ID>` (or the stage trigger) asks the candidate to list their
 own referees with consent, and each referee is then invited for you. Use
 this command only when you already have a referee's details and need to
 add one by hand.

 Returns a `reference_id` -- pass it to `interviews create --use-case
 reference --reference-id <id>` to actually trigger the reference-check
 video interview. This step alone does not contact the reference or the
 candidate.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --application-id          <str>  Application UUID [required]                                                                                                                                      │
│ *  --job-id                  <str>  Job UUID [required]                                                                                                                                              │
│ *  --name                    <str>  Reference's full name [required]                                                                                                                                 │
│ *  --email                   <str>  Reference's email address [required]                                                                                                                             │
│    --employer-id             <str>  Employer UUID (auto-detected from login)                                                                                                                         │
│    --custom-questions        <str>  Optional free-text custom questions for the reference                                                                                                            │
│    --json                           Raw JSON output                                                                                                                                                  │
│    --help                           Show this message and exit.                                                                                                                                      │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal interviews results

Usage: zero internal interviews results [OPTIONS] {interview_id}

 Get results for a completed interview.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    interview_id      <str>  Interview UUID [required]                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal interviews test

Usage: zero internal interviews test [OPTIONS]

 Create an employer preview interview and print the launch URL.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --job-id,--job          <str>  Job UUID [required]                                                                                                                                                │
│    --interview-type        <str>  Test interview type: video or audio [default: video]                                                                                                               │
│    --employer-id           <str>  Employer UUID (auto-detected from login)                                                                                                                           │
│    --json                         Raw JSON output                                                                                                                                                    │
│    --help                         Show this message and exit.                                                                                                                                        │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal interviews transcript-translate

Usage: zero internal interviews transcript-translate [OPTIONS] {interview_id}

 Translate this interview's scored Q&A transcript (ZER-3929).

 Repeat calls for the same (interview, target_language) are served from a
 cache with no LLM call -- the response's `cached` field says which
 happened. `translation_needed=False` means the transcript's own
 language already matches the target (or there was nothing to
 translate); `turns` then holds the original, untranslated text.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    interview_id      <str>  Interview UUID [required]                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --target-language        <str>  Lowercase BCP-47 primary subtag (e.g. 'en', 'es'). Defaults to English.                                                                                              │
│ --json                          Raw JSON output                                                                                                                                                      │
│ --help                          Show this message and exit.                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal interviews trigger-call

Usage: zero internal interviews trigger-call [OPTIONS] {interview_id}

 Trigger an outbound phone call for an interview.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    interview_id      <str>  Interview UUID [required]                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal jenny

Usage: zero internal jenny [OPTIONS] COMMAND [ARGS]...

 Debug Jenny live-call transcripts and chat logs (dev/staging only).

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ calls  Jenny live voice/video call debugging.                                                                                                                                                        │
│ chats  Jenny text-chat conversation debugging.                                                                                                                                                       │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal jenny calls

Usage: zero internal jenny calls [OPTIONS] COMMAND [ARGS]...

 Jenny live voice/video call debugging.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ list  List Jenny live voice/video calls for an employer (dev/staging only).                                                                                                                          │
│ show  Show a Jenny live call's metadata and transcript (dev/staging only).                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal jenny calls list

Usage: zero internal jenny calls list [OPTIONS]

 List Jenny live voice/video calls for an employer (dev/staging only).

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer        <str>  Employer UUID (auto-detected from login)                                                                                                                                    │
│ --limit           <int>  Max rows to return [default: 50]                                                                                                                                            │
│ --json                   Raw JSON output                                                                                                                                                             │
│ --help                   Show this message and exit.                                                                                                                                                 │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal jenny calls show

Usage: zero internal jenny calls show [OPTIONS] {call_id}

 Show a Jenny live call's metadata and transcript (dev/staging only).

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    call_id      <str>  Live-call UUID [required]                                                                                                                                                   │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer        <str>  Employer UUID (auto-detected from login)                                                                                                                                    │
│ --json                   Raw JSON output                                                                                                                                                             │
│ --help                   Show this message and exit.                                                                                                                                                 │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal jenny chats

Usage: zero internal jenny chats [OPTIONS] COMMAND [ARGS]...

 Jenny text-chat conversation debugging.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ list  List Jenny text-chat conversations for an employer (dev/staging only).                                                                                                                         │
│ show  Show a Jenny text-chat conversation and its messages (dev/staging only).                                                                                                                       │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal jenny chats list

Usage: zero internal jenny chats list [OPTIONS]

 List Jenny text-chat conversations for an employer (dev/staging only).

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer        <str>  Employer UUID (auto-detected from login)                                                                                                                                    │
│ --limit           <int>  Max rows to return [default: 50]                                                                                                                                            │
│ --json                   Raw JSON output                                                                                                                                                             │
│ --help                   Show this message and exit.                                                                                                                                                 │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal jenny chats show

Usage: zero internal jenny chats show [OPTIONS] {conversation_id}

 Show a Jenny text-chat conversation and its messages (dev/staging only).

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    conversation_id      <str>  Conversation UUID [required]                                                                                                                                        │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer        <str>  Employer UUID (auto-detected from login)                                                                                                                                    │
│ --json                   Raw JSON output                                                                                                                                                             │
│ --help                   Show this message and exit.                                                                                                                                                 │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal jobs

Usage: zero internal jobs [OPTIONS] COMMAND [ARGS]...

 Manage jobs.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ list                    List jobs for an employer.                                                                                                                                                   │
│ get                     Get details for a single job.                                                                                                                                                │
│ create                  Create a new job.                                                                                                                                                            │
│ update                  Update a job (only provided fields are changed).                                                                                                                             │
│ delete                  Soft-delete a job by UUID (no confirmation — intended for scripting).                                                                                                        │
│ parse-jd                Check a job description for completeness.                                                                                                                                    │
│ set-scorecard-template  Assign or clear this job's scorecard template.                                                                                                                               │
│ external-postings       Where a job was posted on external boards by hand (ZER-3916).                                                                                                                │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal jobs create

Usage: zero internal jobs create [OPTIONS]

 Create a new job.

 The four salary flags are mandatory (ZER-2420): they are kept as
 ``Optional`` typer options only so all of the missing ones are named in
 one actionable, JSON-coded ``missing_salary`` error (see
 ``validate_structured_salary``) instead of typer's one-flag-at-a-time
 usage error.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│    --employer-id                                     <str>    Employer UUID (auto-detected from login)                                                                                               │
│ *  --title                     -t                    <str>    Job title [required]                                                                                                                   │
│ *  --description               -d                    <str>    Job description [required]                                                                                                             │
│    --active                        --no-active                Whether the job is active [default: active]                                                                                            │
│    --custom-questions                                <str>    Custom interview questions                                                                                                             │
│    --screening-questions-json                        <str>    Structured screening questions as JSON, e.g. '[{"text":"Can you work UTC hours?","order":1,"source":"jenny"}]'. 'source' is optional   │
│                                                               but if set must be one of ['ai', 'ats', 'jenny', 'legacy', 'manual'] — any other value is rejected client-side before it reaches the   │
│                                                               backend (ZER-1154: unrecognized 'source' values used to be silently dropped, persisting an empty question list with no error).         │
│    --employer-information                            <str>    Company info for candidates                                                                                                            │
│    --location                                        <str>    Job location                                                                                                                           │
│    --employment-type                                 <str>    Employment type (full-time, part-time, etc.)                                                                                           │
│    --is-remote                     --no-is-remote             Whether the role is fully remote (Google for Jobs jobLocationType: TELECOMMUTE). When true, the structured physical-address fields     │
│                                                               below are not required.                                                                                                                │
│                                                               [default: no-is-remote]                                                                                                                │
│    --location-street                                 <str>    Street address. Always optional.                                                                                                       │
│    --location-locality                               <str>    City/locality. For non-remote roles, required (together with --location-country) once any structured location field is set, unless     │
│                                                               --location-region is given instead.                                                                                                    │
│    --location-region                                 <str>    State/region/province. May substitute for --location-locality.                                                                         │
│    --location-postal-code                            <str>    Postal/ZIP code. Always optional.                                                                                                      │
│    --location-country                                <str>    Two-letter ISO 3166-1 country code (e.g. 'US'). For non-remote roles, required together with --location-locality or --location-region  │
│                                                               once any structured location field is set. 422 from the backend if omitted when required, or not 2 letters.                            │
│    --salary-min                                      <float>  Minimum base salary. Required on job creation (ZER-2420): the backend rejects a new job unless --salary-min, --salary-max,             │
│                                                               --salary-currency and --salary-period are all set. Use `zero internal ai suggest-salary` during intake if the operator has no range in │
│                                                               mind.                                                                                                                                  │
│    --salary-max                                      <float>  Maximum base salary. Must be >= --salary-min. Required on job creation (ZER-2420): the backend rejects a new job unless --salary-min,  │
│                                                               --salary-max, --salary-currency and --salary-period are all set. Use `zero internal ai suggest-salary` during intake if the operator   │
│                                                               has no range in mind.                                                                                                                  │
│    --salary-currency                                 <str>    Three-letter ISO 4217 currency code (e.g. 'USD'). Required on job creation (ZER-2420): the backend rejects a new job unless            │
│                                                               --salary-min, --salary-max, --salary-currency and --salary-period are all set. Use `zero internal ai suggest-salary` during intake if  │
│                                                               the operator has no range in mind.                                                                                                     │
│    --salary-period                                   <str>    Pay period: one of YEAR, MONTH, WEEK, DAY, HOUR. Required on job creation (ZER-2420): the backend rejects a new job unless             │
│                                                               --salary-min, --salary-max, --salary-currency and --salary-period are all set. Use `zero internal ai suggest-salary` during intake if  │
│                                                               the operator has no range in mind.                                                                                                     │
│    --salary-visibility                               <str>    'public' (default) or 'private'. Private keeps the pay range off the public job posting and other candidate-facing surfaces; it still  │
│                                                               shows on employer views and still prices the open fee. Refused with a 422 naming the law wherever a pay-transparency rule requires the │
│                                                               range in the posting.                                                                                                                  │
│    --client-id                                       <str>    RPO client UUID to create this job under                                                                                               │
│    --role-summary-json                               <str>    Structured role intake as a JSON object (must include 'title'). Persisted on the job under additional_data['role_summary'].            │
│    --interview-language                              <str>    The role's language: 'en' (default), 'es' or 'pl'. One setting for the AI interview, the AI-written job description and the            │
│                                                               candidate-facing pages and emails (languages without a translation yet fall back to English). 422 from the backend on other values.    │
│    --use-description-as-jd                                    Preserve --description directly only when it is already a polished HTML JD. Plain text is still formatted with AI.                     │
│    --json                                                     Raw JSON output                                                                                                                        │
│    --help                                                     Show this message and exit.                                                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal jobs delete

Usage: zero internal jobs delete [OPTIONS] {job_id}

 Soft-delete a job by UUID (no confirmation — intended for scripting).

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    job_id      <str>  Job UUID [required]                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal jobs external-postings

Usage: zero internal jobs external-postings [OPTIONS] COMMAND [ARGS]...

 Where a job was posted on external boards by hand (ZER-3916).

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ list    Where this role is listed on external job boards, newest first.                                                                                                                              │
│ create  Record that this role was posted on an external board by hand.                                                                                                                               │
│ update  Edit a posting.                                                                                                                                                                              │
│ delete  Remove a posting recorded by mistake (no confirmation -- intended                                                                                                                            │
│         for scripting, same convention as `internal jobs delete`).                                                                                                                                   │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal jobs external-postings create

Usage: zero internal jobs external-postings create [OPTIONS] {job_id}

 Record that this role was posted on an external board by hand.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    job_id      <str>  Job UUID [required]                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --board              <str>  One of: linkedin, indeed, glassdoor, other. [required]                                                                                                                │
│    --board-label        <str>  Board display name -- required when --board is 'other'.                                                                                                               │
│ *  --posting-url        <str>  URL of the listing on the board. [required]                                                                                                                           │
│    --posted-on          <str>  Day the listing went up, YYYY-MM-DD (defaults to today).                                                                                                              │
│    --closed-on          <str>  Day the listing was taken down, YYYY-MM-DD, if it already was.                                                                                                        │
│    --json                      Raw JSON output                                                                                                                                                       │
│    --help                      Show this message and exit.                                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal jobs external-postings delete

Usage: zero internal jobs external-postings delete [OPTIONS] {job_id}
                                                    {posting_id}

 Remove a posting recorded by mistake (no confirmation -- intended for scripting, same convention as `internal jobs delete`).

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    job_id          <str>  Job UUID [required]                                                                                                                                                      │
│ *    posting_id      <str>  Posting UUID [required]                                                                                                                                                  │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal jobs external-postings list

Usage: zero internal jobs external-postings list [OPTIONS] {job_id}

 Where this role is listed on external job boards, newest first.

 Read-only. Each posting carries the `utm_source` its apply link should
 use, so applicants arriving from that listing are attributed to the
 board.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    job_id      <str>  Job UUID [required]                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal jobs external-postings update

Usage: zero internal jobs external-postings update [OPTIONS] {job_id}
                                                    {posting_id}

 Edit a posting.

 Every field is optional; only the ones passed are applied. `--reopen`
 marks a taken-down listing as up again (sends `closed_on: null`);
 `--closed-on` and `--reopen` are mutually exclusive.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    job_id          <str>  Job UUID [required]                                                                                                                                                      │
│ *    posting_id      <str>  Posting UUID [required]                                                                                                                                                  │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --board              <str>  One of: linkedin, indeed, glassdoor, other.                                                                                                                              │
│ --board-label        <str>                                                                                                                                                                           │
│ --posting-url        <str>                                                                                                                                                                           │
│ --posted-on          <str>  YYYY-MM-DD                                                                                                                                                               │
│ --closed-on          <str>  YYYY-MM-DD the listing was taken down.                                                                                                                                   │
│ --reopen                    Mark a taken-down listing as up again (clears closed_on).                                                                                                                │
│ --json                      Raw JSON output                                                                                                                                                          │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal jobs get

Usage: zero internal jobs get [OPTIONS] {job_id}

 Get details for a single job.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    job_id      <str>  Job UUID [required]                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal jobs list

Usage: zero internal jobs list [OPTIONS]

 List jobs for an employer.

 A single page never implies completeness: pass --all (or read the
 printed/JSON pagination facts) before concluding a job does not exist.

 Rows carry ``description_chars`` rather than the description body. A row
 with ``description_omitted: true`` HAS a description -- it just is not in
 this payload. Use --search to match on description text server-side,
 ``zero jobs show <job>`` to read one, or --with-description to opt the
 whole list back in.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id             <str>  Employer UUID (auto-detected from login)                                                                                                                            │
│ --status                  <str>  Filter by status                                                                                                                                                    │
│ --search                  <str>  Search term, matched server-side against job title, DESCRIPTION text, and location. This is the supported way to answer 'which of my roles mention X?' without      │
│                                  pulling description bodies into the response.                                                                                                                       │
│ --client-id               <str>  Filter by RPO client UUID                                                                                                                                           │
│ --with-description               Include each job's full description body. Off by default: descriptions average ~4 kB, so a few dozen jobs is enough to blow past an agent's tool-result limit.      │
│                                  Prefer --search, or `zero jobs show <job>` for a single description.                                                                                                │
│ --page                    <int>  Page number [default: 1]                                                                                                                                            │
│ --limit                   <int>  Results per page [default: 20]                                                                                                                                      │
│ --all                            Auto-paginate and return every job (up to 500 rows) instead of a single page. Overrides --page/--limit.                                                             │
│ --json                           Raw JSON output                                                                                                                                                     │
│ --help                           Show this message and exit.                                                                                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal jobs parse-jd

Usage: zero internal jobs parse-jd [OPTIONS]

 Check a job description for completeness.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --description  -d      <str>  Job description text [required]                                                                                                                                     │
│    --json                        Raw JSON output                                                                                                                                                     │
│    --help                        Show this message and exit.                                                                                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal jobs set-scorecard-template

Usage: zero internal jobs set-scorecard-template [OPTIONS] {job_id}

 Assign or clear this job's scorecard template.

 List the employer's templates with `interviews scorecard-templates`.
 Omitting `--template-id` clears the job's own assignment and falls back
 to the employer's default template (or no template, if none is marked
 default) -- the response's `source` field says which happened: "job",
 "default", or "none". Archived templates are refused with a 409.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    job_id      <str>  Job UUID [required]                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --template-id        <str>  Scorecard template UUID to assign. Omit to clear the job's own template and fall back to the employer's default.                                                         │
│ --json                      Raw JSON output                                                                                                                                                          │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

internal jobs update

Usage: zero internal jobs update [OPTIONS] {job_id}

 Update a job (only provided fields are changed).

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    job_id      <str>  Job UUID [required]                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --title                     -t                    <str>    New title                                                                                                                                 │
│ --description               -d                    <str>    New description                                                                                                                           │
│ --active                        --no-active                Not supported: the update endpoint deliberately excludes `active` (ZER-561), so passing this always errors before any request is sent.    │
│                                                            See `zero internal jobs delete` for the closest existing lever (soft-delete, not deactivate).                                             │
│ --custom-questions                                <str>    Custom interview questions                                                                                                                │
│ --screening-questions-json                        <str>    Structured screening questions as JSON, e.g. '[{"text":"Can you work UTC hours?","order":1,"source":"jenny"}]'. 'source' is optional but  │
│                                                            if set must be one of ['ai', 'ats', 'jenny', 'legacy', 'manual'] — any other value is rejected client-side before it reaches the backend  │
│                                                            (ZER-1154: unrecognized 'source' values used to be silently dropped, persisting an empty question list with no error).                    │
│ --employer-information                            <str>    Company info for candidates                                                                                                               │
│ --location                                        <str>    Job location                                                                                                                              │
│ --is-remote                     --no-is-remote             Whether the role is fully remote (Google for Jobs jobLocationType: TELECOMMUTE). Omit to leave unchanged. When set true, the structured   │
│                                                            physical-address fields below are not required.                                                                                           │
│ --location-street                                 <str>    Street address. Always optional.                                                                                                          │
│ --location-locality                               <str>    City/locality. For non-remote roles, required (together with --location-country) once any structured location field is set on this call,  │
│                                                            unless --location-region is given instead.                                                                                                │
│ --location-region                                 <str>    State/region/province. May substitute for --location-locality.                                                                            │
│ --location-postal-code                            <str>    Postal/ZIP code. Always optional.                                                                                                         │
│ --location-country                                <str>    Two-letter ISO 3166-1 country code (e.g. 'US'). For non-remote roles, required together with --location-locality or --location-region     │
│                                                            once any structured location field is set on this call. 422 from the backend if omitted when required, or not 2 letters.                  │
│ --salary-min                                      <float>  Minimum base salary. Optional on update; omit to leave unchanged.                                                                         │
│ --salary-max                                      <float>  Maximum base salary. Must be >= --salary-min.                                                                                             │
│ --salary-currency                                 <str>    Three-letter ISO 4217 currency code (e.g. 'USD'). Required together with --salary-period once --salary-min or --salary-max is set on this │
│                                                            call; 422 from the backend otherwise.                                                                                                     │
│ --salary-period                                   <str>    Pay period: one of YEAR, MONTH, WEEK, DAY, HOUR. Required together with --salary-currency once --salary-min or --salary-max is set on     │
│                                                            this call.                                                                                                                                │
│ --salary-visibility                               <str>    'public' (default) or 'private'. Private keeps the pay range off the public job posting and other candidate-facing surfaces; it still     │
│                                                            shows on employer views and still prices the open fee. Refused with a 422 naming the law wherever a pay-transparency rule requires the    │
│                                                            range in the posting. Omit to leave unchanged.                                                                                            │
│ --interview-language                              <str>    The role's language: 'en' (default), 'es' or 'pl'. One setting for the AI interview, the AI-written job description and the               │
│                                                            candidate-facing pages and emails (languages without a translation yet fall back to English). 422 from the backend on other values.       │
│ --use-description-as-jd                                    Preserve --description directly only when it is already a polished HTML JD. Plain text is still formatted with AI.                        │
│ --json                                                     Raw JSON output                                                                                                                           │
│ --help                                                     Show this message and exit.                                                                                                               │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

interviews

Usage: zero interviews [OPTIONS] COMMAND [ARGS]...

 Schedule and manage human (hiring-manager) interviews.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ create               Create a human interview for an application.                                                                                                                                    │
│ list                 List human interviews, newest first (soonest-first with --upcoming).                                                                                                            │
│ show                 Show a human interview, including proposed/selected slots.                                                                                                                      │
│ propose-slots        Propose (or replace) slots on an interview and email the candidate.                                                                                                             │
│ reschedule           Reschedule a scheduled (or awaiting_candidate) interview.                                                                                                                       │
│ cancel               Cancel a human interview from any non-terminal status.                                                                                                                          │
│ nudge                Re-send the candidate's scheduling link for an interview.                                                                                                                       │
│ complete             Mark a scheduled interview as completed.                                                                                                                                        │
│ no-show              Mark a scheduled interview whose start has passed as a no-show.                                                                                                                 │
│ availability         Check Google Calendar availability for an interviewer.                                                                                                                          │
│ feedback             DEPRECATED: use `interviews scorecard` instead.                                                                                                                                 │
│ scorecard            Submit your scorecard for a human interview (replaces `interviews feedback`).                                                                                                   │
│ scorecard-templates  List the employer's scorecard templates and their attributes.                                                                                                                   │
│ needs-reply          Interviews still waiting for the candidate to pick a time, oldest first.                                                                                                        │
│ completed            Completed interviews with their latest feedback, newest first.                                                                                                                  │
│ feedback-list        Every scorecard left on one application (plus earlier legacy ratings).                                                                                                          │
│ legacy-feedback      The raw legacy 1-5 rating/note records left on one application.                                                                                                                 │
│ accommodations       List candidates' interview accommodation requests, newest first.                                                                                                                │
│ hours                Interviewer working hours, date overrides and public holidays.                                                                                                                  │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

interviews accommodations

Usage: zero interviews accommodations [OPTIONS]

 List candidates' interview accommodation requests, newest first.

 Read-only. Granting or denying a request is a human decision made in the
 web app; it is not available from here.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --status                <str>  Filter by status: pending, granted, denied.                                                                                                                           │
│ --application-id        <str>  Filter by application UUID.                                                                                                                                           │
│ --interview-id          <str>  Filter by interview UUID.                                                                                                                                             │
│ --employer-id           <str>  Employer UUID (auto-detected from login)                                                                                                                              │
│ --json                         Raw JSON output                                                                                                                                                       │
│ --help                         Show this message and exit.                                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

interviews availability

Usage: zero interviews availability [OPTIONS]

 Check Google Calendar availability for an interviewer.

 Returns free 30-min-aligned slots inside business hours over --days
 days (default 7) starting from --from (default: today), pulled from
 the interviewer's connected Google Calendar via freebusy. Pass --from
 to look at a specific future window (e.g. "next week") instead of
 always getting this week's slots. If neither --interviewer-user-id nor
 --interviewer-email resolves a connected calendar, `connected` comes
 back false -- propose times manually instead, or ask the interviewer
 to connect Google Calendar in Company Settings. Feed the returned
 start times straight into `interviews create --slot` or `interviews
 propose-slots --slot`.

 `--window-days`/`--window-start`/`--window-end` (ZER-3774) preview a
 booking link's window instead: every open time in the window (no
 30-result cap), summarized as a total/day count plus a per-day
 breakdown -- the same preview `interviews create --booking-link` is
 about to send the candidate.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --interviewer-user-id        <str>                    Platform user UUID whose calendar to check.                                                                                                    │
│ --interviewer-email          <str>                    Ad-hoc interviewer email whose calendar to check. Use --interviewer-user-id when the interviewer is a platform member/reviewer; falls back to  │
│                                                       the acting user's own calendar when neither is set.                                                                                            │
│ --duration                   <int range> [5<=x<=480]  Duration in minutes, 5-480 (default 45).                                                                                                       │
│ --days                       <int range> [1<=x<=30]   How many days ahead of --from (default: today) to search (default 7).                                                                          │
│ --from                       <str>                    Start date, YYYY-MM-DD, interpreted in the --timezone zone (default: today in that zone). --days counts forward from this date. Must be within │
│                                                       90 days of today (the backend rejects anything further out).                                                                                   │
│ --timezone                   <str>                    IANA timezone to compute business hours and display suggested times in, e.g. America/New_York (default: this machine's timezone, else UTC).    │
│ --window-days                <int>                    Booking-link preview: summarize every open time in a window of this many work days (10, 15, or 20; today is day 1). Overrides --days/--from.   │
│                                                       Mutually exclusive with --window-start/--window-end.                                                                                           │
│ --window-start               <str>                    Booking-link preview: custom window start date, YYYY-MM-DD. Requires --window-end; mutually exclusive with --window-days.                      │
│ --window-end                 <str>                    Booking-link preview: custom window end date, YYYY-MM-DD. Requires --window-start.                                                             │
│ --employer-id                <str>                    Employer UUID (auto-detected from login)                                                                                                       │
│ --json                                                Raw JSON output                                                                                                                                │
│ --help                                                Show this message and exit.                                                                                                                    │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

interviews cancel

Usage: zero interviews cancel [OPTIONS] {interview_id}

 Cancel a human interview from any non-terminal status.

 Notifies the candidate (and the interviewer too, if it was scheduled).

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    interview_id      <str>  Interview UUID. [required]                                                                                                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --reason        <str>  Reason for cancellation (audit trail, shown to the candidate).                                                                                                                │
│ --json                 Raw JSON output                                                                                                                                                               │
│ --help                 Show this message and exit.                                                                                                                                                   │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

interviews complete

Usage: zero interviews complete [OPTIONS] {interview_id}

 Mark a scheduled interview as completed.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    interview_id      <str>  Interview UUID. [required]                                                                                                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

interviews completed

Usage: zero interviews completed [OPTIONS]

 Completed interviews with their latest feedback, newest first.

 Read-only. `feedback_due` is yes when you have not left feedback on an
 interview yet (`interviews feedback <interview_id>` adds it).

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --job-id             <str>                    Filter by job UUID.                                                                                                                                    │
│ --mine                                        Only interviews where you were the interviewer.                                                                                                        │
│ --search             <str>                    Match on candidate name.                                                                                                                               │
│ --limit              <int range> [1<=x<=200]  Page size (max 200). [default: 50]                                                                                                                     │
│ --offset             <int range> [x>=0]       Rows to skip. [default: 0]                                                                                                                             │
│ --employer-id        <str>                    Employer UUID (auto-detected from login)                                                                                                               │
│ --json                                        Raw JSON output                                                                                                                                        │
│ --help                                        Show this message and exit.                                                                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

interviews create

Usage: zero interviews create [OPTIONS]

 Create a human interview for an application.

 Requires --interviewer-user-id OR --interviewer-email. Only one active
 (non-terminal) human interview is allowed per application at a time;
 the backend returns a conflict if one already exists. Once that
 interview reaches a terminal status (completed, cancelled, declined,
 expired), creating another succeeds and starts the next round -- the
 backend auto-increments a `round` number per application, returned on
 `interviews show`/`interviews list --json`. The job's `human_interview`
 stage config may separately carry an advisory `expected_rounds`.

 `--booking-link` (ZER-3774) sends one link the candidate uses to book
 any open time on the interviewer's calendar, inside a window --
 `--window-days` (10/15/20, default 10) or a custom
 `--window-start`/`--window-end`. Without `--booking-link`, behavior is
 unchanged: propose up to 5 `--slot` times (or none, for later
 `interviews propose-slots`).

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --application-id             <str>                    Application UUID. [required]                                                                                                                │
│    --interviewer-user-id        <str>                    Platform user UUID to interview (member or reviewer).                                                                                       │
│    --interviewer-email          <str>                    Ad-hoc interviewer email. Use with --interviewer-name, or instead of --interviewer-user-id.                                                 │
│    --interviewer-name           <str>                    Ad-hoc interviewer display name.                                                                                                            │
│    --title                      <str>                    Interview title (default: 'Interview').                                                                                                     │
│    --duration                   <int range> [5<=x<=480]  Duration in minutes, 5-480 (default 45).                                                                                                    │
│    --location-type              <str>                    video, phone, or onsite (default video).                                                                                                    │
│    --location-details           <str>                    Meeting URL, phone note, or physical address.                                                                                               │
│    --timezone                   <str>                    IANA timezone, e.g. America/New_York (default: this machine's timezone, else UTC).                                                          │
│    --message                    <str>                    Optional note shown to the candidate.                                                                                                       │
│    --slot                       <str>                    Proposed start time, ISO8601 with timezone (repeatable, max 5). Passing any slots proposes them immediately and emails the candidate        │
│                                                          (status -> awaiting_candidate); omit to create in pending_slots and propose later with `interviews propose-slots`. Mutually exclusive with  │
│                                                          --booking-link.                                                                                                                             │
│    --booking-link                                        Send one link so the candidate books any open time on the interviewer's calendar, instead of picking from --slot times (status ->           │
│                                                          awaiting_candidate immediately, no slot rows). Requires the interviewer (else you, for an ad-hoc interviewer) to have an active calendar    │
│                                                          connection, or the backend 409s with no_calendar/needs_reauth. Mutually exclusive with --slot.                                              │
│    --window-days                <int>                    Booking-link window length in work days: 10, 15, or 20 (default 10; today counts as day 1). Only with --booking-link; mutually exclusive    │
│                                                          with --window-start/--window-end.                                                                                                           │
│    --window-start               <str>                    Booking-link custom window start date, YYYY-MM-DD, local to --timezone. Requires --window-end; mutually exclusive with --window-days.       │
│    --window-end                 <str>                    Booking-link custom window end date, YYYY-MM-DD. Requires --window-start.                                                                   │
│    --json                                                Raw JSON output                                                                                                                             │
│    --help                                                Show this message and exit.                                                                                                                 │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

interviews feedback

Usage: zero interviews feedback [OPTIONS] {interview_id}

 DEPRECATED: use `interviews scorecard` instead.

 Leave a legacy 1-5 rating and/or note tied to this interview. Provide
 --rating and/or --note (at least one is required). Looks up the
 interview's application_id automatically.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    interview_id      <str>  Interview UUID. [required]                                                                                                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --rating        <int range> [1<=x<=5]  Rating 1-5.                                                                                                                                                   │
│ --note          <str>                  Free-text feedback note.                                                                                                                                      │
│ --json                                 Raw JSON output                                                                                                                                               │
│ --help                                 Show this message and exit.                                                                                                                                   │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

interviews feedback-list

Usage: zero interviews feedback-list [OPTIONS] {application_id}

 Every scorecard left on one application (plus earlier legacy ratings).

 Read-only. Scorecards from other interviewers stay hidden until you submit
 your own; the output says how many are hidden.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    application_id      <str>  Application UUID. [required]                                                                                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

interviews hours

Usage: zero interviews hours [OPTIONS] COMMAND [ARGS]...

 Interviewer working hours, date overrides and public holidays.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ show               Show weekly hours, date overrides and public-holiday settings.                                                                                                                    │
│ set                Set weekly interview hours, timezone and/or holiday country.                                                                                                                      │
│ set-rules          Set booking rules: notice, buffer, start-time interval, daily limit, change cut-off.                                                                                              │
│ override-add       Add or replace a one-day override of the weekly hours.                                                                                                                            │
│ override-remove    Remove a date override, restoring the weekly hours for that day.                                                                                                                  │
│ holiday-countries  List country codes usable with `interviews hours set --holiday-country`.                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

interviews hours holiday-countries

Usage: zero interviews hours holiday-countries [OPTIONS]

 List country codes usable with `interviews hours set --holiday-country`.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (auto-detected from login)                                                                                                                                 │
│ --json                      Raw JSON output                                                                                                                                                          │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

interviews hours override-add

Usage: zero interviews hours override-add [OPTIONS] {date}

 Add or replace a one-day override of the weekly hours.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    date      <str>  Date, YYYY-MM-DD (interviewer-local). [required]                                                                                                                               │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --hours              <str>  Hours that day: HH:MM-HH:MM[,HH:MM-HH:MM], or 'off' (default) to block the whole day. Replaces any existing override for that date. [default: off]                       │
│ --note               <str>  Optional reason (max 500 chars), e.g. 'Vacation'.                                                                                                                        │
│ --user-id            <str>  Colleague's user UUID (owner/member only). Default: you.                                                                                                                 │
│ --employer-id        <str>  Employer UUID (auto-detected from login)                                                                                                                                 │
│ --json                      Raw JSON output                                                                                                                                                          │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

interviews hours override-remove

Usage: zero interviews hours override-remove [OPTIONS] {override_id}

 Remove a date override, restoring the weekly hours for that day.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    override_id      <str>  Override UUID (from `interviews hours show --json`). [required]                                                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

interviews hours set

Usage: zero interviews hours set [OPTIONS]

 Set weekly interview hours, timezone and/or holiday country.

 Reads the current settings first and changes only what you pass, so
 `--day fri=09:00-13:00` leaves every other day as it was. The backend
 replaces the whole schedule on write; times are 24h on a 15-minute grid.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --day                    <str>  Repeatable. <day>=<HH:MM-HH:MM[,HH:MM-HH:MM]|off>, e.g. mon=09:00-12:00,13:00-17:00 or sat=off. Day is mon..sun, 'weekdays' or 'weekend'. Days you do not name keep  │
│                                 their current hours.                                                                                                                                                 │
│ --timezone               <str>  IANA zone the hours are in (e.g. Europe/Warsaw).                                                                                                                     │
│ --holiday-country        <str>  2-letter country code whose public holidays are skipped, or 'none' to stop skipping. See `interviews hours holiday-countries`.                                       │
│ --user-id                <str>  Colleague's user UUID (owner/member only). Default: you.                                                                                                             │
│ --employer-id            <str>  Employer UUID (auto-detected from login)                                                                                                                             │
│ --json                          Raw JSON output                                                                                                                                                      │
│ --help                          Show this message and exit.                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

interviews hours set-rules

Usage: zero interviews hours set-rules [OPTIONS]

 Set booking rules: notice, buffer, start-time interval, daily limit, change cut-off.

 Changes only the rules you pass; the others (and the weekly hours) stay as
 they are. Applies to every booking link for that interviewer.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --min-notice           <str>  Earliest a candidate can book: 1h, 2h, 4h, 8h, 12h, 24h or 48h (or the same in minutes: 60, 120, 240, 480, 720, 1440, 2880).                                           │
│ --buffer               <int>  Minutes kept free around each interview: 0, 5, 10, 15, 30, 45 or 60.                                                                                                   │
│ --step                 <int>  Start-time interval in minutes: 15, 30 or 60.                                                                                                                          │
│ --daily-cap            <str>  Most interviews per day, 1-10, or 'none' for no limit.                                                                                                                 │
│ --change-cutoff        <str>  Hours before the interview when candidates can no longer reschedule or cancel themselves: 2, 4, 12, 24, 48, or 'none'.                                                 │
│ --user-id              <str>  Colleague's user UUID (owner/member only). Default: you.                                                                                                               │
│ --employer-id          <str>  Employer UUID (auto-detected from login)                                                                                                                               │
│ --json                        Raw JSON output                                                                                                                                                        │
│ --help                        Show this message and exit.                                                                                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

interviews hours show

Usage: zero interviews hours show [OPTIONS]

 Show weekly hours, date overrides and public-holiday settings.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --user-id            <str>  Colleague's user UUID (owner/member only). Default: you.                                                                                                                 │
│ --timezone           <str>  IANA zone to show when nothing is saved yet (ignored once saved).                                                                                                        │
│ --employer-id        <str>  Employer UUID (auto-detected from login)                                                                                                                                 │
│ --json                      Raw JSON output                                                                                                                                                          │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

interviews legacy-feedback

Usage: zero interviews legacy-feedback [OPTIONS] {application_id}

 The raw legacy 1-5 rating/note records left on one application.

 Read-only. Distinct from `interviews feedback-list`: this is the audit
 record itself (feedback_id, author, which interview it was tied to, when
 it was last updated) rather than the merged scorecards+legacy view --
 use `feedback-list` for the everyday read, this one when you need the
 underlying record. Deprecated server-side for new writes (superseded by
 scorecards), but still the only source for feedback left before the
 scorecard switch-over.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    application_id      <str>  Application UUID. [required]                                                                                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

interviews list

Usage: zero interviews list [OPTIONS]

 List human interviews, newest first (soonest-first with --upcoming).

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --job-id                <str>  Filter by job UUID.                                                                                                                                                   │
│ --application-id        <str>  Filter by application UUID.                                                                                                                                           │
│ --status                <str>  Filter by status: awaiting_candidate, cancelled, completed, declined, expired, no_show, pending_slots, scheduled.                                                     │
│ --upcoming                     Only scheduled interviews with a future start time, soonest first.                                                                                                    │
│ --employer-id           <str>  Employer UUID (auto-detected from login)                                                                                                                              │
│ --json                         Raw JSON output                                                                                                                                                       │
│ --help                         Show this message and exit.                                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

interviews needs-reply

Usage: zero interviews needs-reply [OPTIONS]

 Interviews still waiting for the candidate to pick a time, oldest first.

 Read-only. Use it to find who needs a nudge (`interviews nudge`) or new
 slots (`interviews propose-slots`).

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --job-id                     <str>                    Filter by job UUID.                                                                                                                            │
│ --interviewer-user-id        <str>                    Filter by interviewer user UUID.                                                                                                               │
│ --search                     <str>                    Match on candidate name.                                                                                                                       │
│ --limit                      <int range> [1<=x<=200]  Page size (max 200). [default: 50]                                                                                                             │
│ --offset                     <int range> [x>=0]       Rows to skip. [default: 0]                                                                                                                     │
│ --employer-id                <str>                    Employer UUID (auto-detected from login)                                                                                                       │
│ --json                                                Raw JSON output                                                                                                                                │
│ --help                                                Show this message and exit.                                                                                                                    │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

interviews no-show

Usage: zero interviews no-show [OPTIONS] {interview_id}

 Mark a scheduled interview whose start has passed as a no-show.

 ZER-3835. Terminal, like cancelled: it frees the application for a
 replacement interview and does not consume a round. No email is sent to
 the candidate. The backend returns HTTP 409 `invalid_state` if the
 interview is not `scheduled`, or `not_started` if its start time has not
 passed yet -- relay that rather than retrying. There is no undo.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    interview_id      <str>  Interview UUID. [required]                                                                                                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --note        <str>  Optional note for the record (max 2000 chars).                                                                                                                                  │
│ --json               Raw JSON output                                                                                                                                                                 │
│ --help               Show this message and exit.                                                                                                                                                     │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

interviews nudge

Usage: zero interviews nudge [OPTIONS] {interview_id}

 Re-send the candidate's scheduling link for an interview.

 Sends exactly one reminder email pointing the candidate back at their
 existing pick link -- it does NOT propose new slots or change anything
 about the interview. Use this for "nudge them" / "remind them to pick a
 time" requests instead of re-running `interviews propose-slots` or
 `interviews reschedule` with the same slots, which would re-propose
 (and could reset) the offer rather than just re-emailing it.

 Only valid while the interview is `awaiting_candidate` (slots already
 proposed, no pick yet); the backend returns HTTP 409 with a
 plain-English reason otherwise (e.g. already scheduled, or no slots
 proposed yet) -- relay that message to the operator rather than
 retrying or falling back to reschedule. Not confirmation-gated (no
 `--yes`): it sends one email the operator explicitly asked for, the
 same as the initial proposal.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    interview_id      <str>  Interview UUID. [required]                                                                                                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

interviews propose-slots

Usage: zero interviews propose-slots [OPTIONS] {interview_id}

 Propose (or replace) slots on an interview and email the candidate.

 Allowed from pending_slots, awaiting_candidate, declined, or expired.
 Any previously proposed (not yet selected) slots are withdrawn. Moves
 the interview to awaiting_candidate.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    interview_id      <str>  Interview UUID. [required]                                                                                                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --slot        <str>  Proposed start time, ISO8601 with timezone (repeatable, 1-5). [required]                                                                                                     │
│    --json               Raw JSON output                                                                                                                                                              │
│    --help               Show this message and exit.                                                                                                                                                  │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

interviews reschedule

Usage: zero interviews reschedule [OPTIONS] {interview_id}

 Reschedule a scheduled (or awaiting_candidate) interview.

 Clears any existing selection and notifies the candidate of the change.
 With `--slot` (unchanged from before, 1-5 new proposed times), moves the
 interview back to awaiting_candidate with those slots.

 `--booking-link` (ZER-3799) sends one new link instead, so the candidate
 books any open time on the interviewer's calendar within a window --
 `--window-days` (10/15/20, default 10) or a custom
 `--window-start`/`--window-end` -- same options as `interviews create
 --booking-link`. Mutually exclusive with --slot.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    interview_id      <str>  Interview UUID. [required]                                                                                                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --slot                    <str>                    New proposed start time, ISO8601 with timezone (repeatable, 1-5). Mutually exclusive with --booking-link.                                         │
│ --booking-link                                     Send one link so the candidate books any open time on the interviewer's calendar, instead of picking from --slot times. Requires the interviewer  │
│                                                    (else you, for an ad-hoc interviewer) to have an active calendar connection, or the backend 409s with no_calendar/needs_reauth. Mutually          │
│                                                    exclusive with --slot.                                                                                                                            │
│ --window-days             <int>                    Booking-link window length in work days: 10, 15, or 20 (default 10; today counts as day 1). Only with --booking-link; mutually exclusive with     │
│                                                    --window-start/--window-end.                                                                                                                      │
│ --window-start            <str>                    Booking-link custom window start date, YYYY-MM-DD, local to --timezone. Requires --window-end; mutually exclusive with --window-days. Only with   │
│                                                    --booking-link.                                                                                                                                   │
│ --window-end              <str>                    Booking-link custom window end date, YYYY-MM-DD. Requires --window-start. Only with --booking-link.                                               │
│ --duration                <int range> [5<=x<=480]  Duration in minutes, 5-480. Only with --booking-link.                                                                                             │
│ --location-type           <str>                    video, phone, or onsite. Only with --booking-link.                                                                                                │
│ --location-details        <str>                    Meeting URL, phone note, or physical address. Only with --booking-link.                                                                           │
│ --timezone                <str>                    IANA timezone, e.g. America/New_York (default: this machine's timezone, else UTC). Only with --booking-link.                                      │
│ --message                 <str>                    Optional note shown to the candidate. Only with --booking-link.                                                                                   │
│ --reason                  <str>                    Reason for the reschedule (shown to the candidate).                                                                                               │
│ --json                                             Raw JSON output                                                                                                                                   │
│ --help                                             Show this message and exit.                                                                                                                       │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

interviews scorecard

Usage: zero interviews scorecard [OPTIONS] {interview_id}

 Submit your scorecard for a human interview (replaces `interviews feedback`).

 Scores each attribute of the job's scorecard template (see `interviews
 scorecard-templates`) 1-5 plus an overall recommendation. Attribute names
 match case-insensitively; a 1-based position number also works. If you
 already submitted a scorecard for this interview it is updated in place.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    interview_id      <str>  Human interview UUID. [required]                                                                                                                                       │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --recommendation        <str>  One of: strong_no, no, yes, strong_yes. [required]                                                                                                                 │
│    --score                 <str>  "<attribute name or position>=<1-5>"; repeat once per template attribute.                                                                                          │
│    --note                  <str>  "<attribute name or position>=<text>"; optional per-attribute note.                                                                                                │
│    --summary               <str>  Overall summary.                                                                                                                                                   │
│    --json                         Raw JSON output                                                                                                                                                    │
│    --help                         Show this message and exit.                                                                                                                                        │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

interviews scorecard-templates

Usage: zero interviews scorecard-templates [OPTIONS]

 List the employer's scorecard templates and their attributes.

 Read-only.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

interviews show

Usage: zero interviews show [OPTIONS] {interview_id}

 Show a human interview, including proposed/selected slots.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    interview_id      <str>  Interview UUID. [required]                                                                                                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

invite

Usage: zero invite [OPTIONS] COMMAND [ARGS]...

 Invite candidates for AI interviews.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ send    Invite candidates to AI interviews for a job.                                                                                                                                                │
│ cancel  Cancel a pending interview invite (revert primitive, ZER-660).                                                                                                                               │
│ manual  Manually invite candidates by email (not from existing applicant pool).                                                                                                                      │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

invite cancel

Usage: zero invite cancel [OPTIONS] {interview_id}

 Cancel a pending interview invite (revert primitive, ZER-660).

 Only valid while the interview is still in `invited` status --
 started, finished, or already-cancelled interviews are rejected by
 the backend with a 409.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    interview_id      <str>  Interview UUID [required]                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --reason             <str>  Reason for cancellation (audit trail).                                                                                                                                   │
│ --employer-id        <str>  Employer UUID (auto-detected from login).                                                                                                                                │
│ --json                      Raw JSON output                                                                                                                                                          │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

invite manual

Usage: zero invite manual [OPTIONS]

 Manually invite candidates by email (not from existing applicant pool).

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --job-id                <str>  Job UUID [required]                                                                                                                                                │
│ *  --email                 <str>  Candidate email (repeatable) [required]                                                                                                                            │
│ *  --first-name            <str>  First name (one per email) [required]                                                                                                                              │
│ *  --last-name             <str>  Last name (one per email) [required]                                                                                                                               │
│    --phone                 <str>  Candidate phone for AI Telephony invites (repeatable, E.164 preferred)                                                                                             │
│    --interview-type        <str>  Interview type (realtime, phone_call, video, telephony, ai_telephony) [default: realtime]                                                                          │
│    --avatar-id             <str>  Video avatar UUID. Defaults to Jenny's video avatar for video interviews.                                                                                          │
│    --employer-id           <str>  Employer UUID (auto-detected)                                                                                                                                      │
│    --json                         Raw JSON output                                                                                                                                                    │
│    --help                         Show this message and exit.                                                                                                                                        │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

invite send

Usage: zero invite send [OPTIONS] [job_id]

 Invite candidates to AI interviews for a job.

 Use --candidate to invite specific candidates by number or UUID.

 `--demo` is retired (ZER-2536 / ZER-2673) and only prints a pointer;
 fill a demo pipeline with `zero demo populate <job_id> --scale auto`.

 Bulk selection (mutually exclusive with each other, but all compose
 with `--candidate` being absent): `--top N`, `--min-score X`, `--all`.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│   job_id      <str>  Job UUID (uses current job if omitted)                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --candidate             <str>    Candidate number (1-based) or application UUID (repeatable)                                                                                                         │
│ --top                   <int>    Invite the top N candidates by score (highest first).                                                                                                               │
│ --min-score             <float>  Invite every candidate with score >= N.                                                                                                                             │
│ --all                            Invite every candidate who hasn't already been interviewed.                                                                                                         │
│ --interview-type        <str>    Interview type (realtime, phone_call, video, telephony, ai_telephony) [default: realtime]                                                                           │
│ --avatar-id             <str>    Video avatar UUID. Defaults to Jenny's video avatar for video interviews.                                                                                           │
│ --demo                           [Retired] Use 'zero demo populate <job_id> --scale auto' instead                                                                                                    │
│ --employer-id           <str>    Employer UUID (auto-detected)                                                                                                                                       │
│ --json                           Raw JSON output                                                                                                                                                     │
│ --help                           Show this message and exit.                                                                                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

jobs

Usage: zero jobs [OPTIONS] COMMAND [ARGS]...

 List and switch between jobs.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ list                 List all your jobs (sorted by creation date, newest first).                                                                                                                     │
│ current              Print the resolved current job and where the pointer came from.                                                                                                                 │
│ use                  Switch to a different job (makes it the default for all commands).                                                                                                              │
│ show                 Show full details for a job: JD, status, applicant count, dashboard URL.                                                                                                        │
│ requisition          Full requisition summary for ONE role, in a single call (ZER-3448):                                                                                                             │
│                      JD, screening questions, hiring-flow (stage) config, and pipeline                                                                                                               │
│                      counts.                                                                                                                                                                         │
│ delete               Delete a job.                                                                                                                                                                   │
│ close                Close a job without deleting it.                                                                                                                                                │
│ reopen               Reopen a role you previously closed (ZER-3305).                                                                                                                                 │
│ timeline             Show everything that happened on this job, in order.                                                                                                                            │
│ invite-candidates    Add existing candidates (from `candidates list`) to this job's normal                                                                                                           │
│                      sourcing/outreach pipeline (ZER-2732).                                                                                                                                          │
│ approve-description  Record that a named human approves this job's CURRENT description                                                                                                               │
│                      text (ZER-1866/ZER-2489) -- the human floor for jobs created outside                                                                                                            │
│                      the hiring pipeline (the pipeline's own `awaiting_jd` phase records                                                                                                             │
│                      this automatically for jobs run through it).                                                                                                                                    │
│ talent-pool          Talent-pool candidates (applied elsewhere) scored against this job (ZER-3215).                                                                                                  │
│ followup-rules       Set up and manage scheduled follow-up emails or text messages to candidates already in a job's pipeline.                                                                        │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

jobs approve-description

Usage: zero jobs approve-description [OPTIONS] {JOB_REF}

 Record that a named human approves this job's CURRENT description text (ZER-1866/ZER-2489) -- the human floor for jobs created outside the hiring pipeline (the pipeline's own `awaiting_jd` phase
 records this automatically for jobs run through it).

 Only call this immediately after a real human has actually read the
 job's current description and said yes -- it attributes the approval
 to a named person on the audit record, exactly like a `hire`/`offer`
 confirmation. It records the text as it reads right now; it does not
 accept new description text.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    JOB_REF      <str>  Short ID, full UUID, 1-based list number (deprecated), or title substring [required]                                                                                        │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --approver-user-id          <str>  The human who approved this, when calling as a trusted proxy on their behalf. Verified against this job's employer server-side. Omit to attribute the approval to │
│                                    the authenticated caller.                                                                                                                                         │
│ --yes               -y             Skip the confirmation prompt                                                                                                                                      │
│ --employer-id               <str>  Employer UUID (auto-detected).                                                                                                                                    │
│ --json                             Raw JSON output                                                                                                                                                   │
│ --help                             Show this message and exit.                                                                                                                                       │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

jobs close

Usage: zero jobs close [OPTIONS] {JOB_REF}

 Close a job without deleting it.

 The role stops being publicly listed, stops accepting applications and
 stops any outreach or sourcing running on it, but stays in your lists
 as a closed role with every application and interview intact. Use this
 when a role is filled or paused; use ``jobs delete`` to archive it out
 of your lists entirely. Closing an already-closed job is harmless.

 A role that still owes its close fee (a hire whose fee hasn't cleared
 yet) is refused until the fee is settled; the error says so.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    JOB_REF      <str>  Short ID, full UUID, 1-based list number (deprecated), or title substring [required]                                                                                        │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --reason                <str>  Optional free-text reason, kept on the job (e.g. 'filled', 'budget cut')                                                                                              │
│ --yes           -y             Skip the confirmation prompt                                                                                                                                          │
│ --employer-id           <str>  Employer UUID (auto-detected)                                                                                                                                         │
│ --expect-id             <str>  Assert the resolved job matches this UUID or short ID                                                                                                                 │
│ --expect-title          <str>  Assert the resolved job's title contains this substring (case-insensitive)                                                                                            │
│ --json                         Raw JSON output                                                                                                                                                       │
│ --help                         Show this message and exit.                                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

jobs current

Usage: zero jobs current [OPTIONS]

 Print the resolved current job and where the pointer came from.

 Useful when debugging a shared-token setup: you can see at a glance
 whether the selection is coming from ``ZERO_JOB_ID``, local config, or a
 legacy server-side value.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

jobs delete

Usage: zero jobs delete [OPTIONS] {JOB_REF}

 Delete a job.

 This soft-deletes the job: it is removed from all listings and cannot be
 interacted with, but existing applications and interview records are
 retained in the database for audit purposes.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    JOB_REF      <str>  Short ID, full UUID, 1-based list number (deprecated), or title substring [required]                                                                                        │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --yes           -y             Skip the confirmation prompt                                                                                                                                          │
│ --employer-id           <str>  Employer UUID (auto-detected)                                                                                                                                         │
│ --expect-id             <str>  Assert the resolved job matches this UUID or short ID                                                                                                                 │
│ --expect-title          <str>  Assert the resolved job's title contains this substring (case-insensitive)                                                                                            │
│ --json                         Raw JSON output                                                                                                                                                       │
│ --help                         Show this message and exit.                                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

jobs followup-rules

Usage: zero jobs followup-rules [OPTIONS] COMMAND [ARGS]...

 Set up and manage scheduled follow-up emails or text messages to candidates already in a job's pipeline.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ create   Create a follow-up rule for this job's pipeline.                                                                                                                                            │
│ list     List follow-up rules on this job's pipeline.                                                                                                                                                │
│ pause    Pause a follow-up rule. Already-scheduled sends for it are stopped; `resume` restarts it.                                                                                                   │
│ resume   Resume a paused follow-up rule from its next scheduled check.                                                                                                                               │
│ delete   Delete a follow-up rule. Pending sends for it are stopped; already-sent emails stay on record.                                                                                              │
│ preview  Show who this rule would email right now, plus a rendered sample email.                                                                                                                     │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

jobs followup-rules create

Usage: zero jobs followup-rules create [OPTIONS] {JOB_ID}

 Create a follow-up rule for this job's pipeline.

 Does not send anything by itself: the rule schedules future sends,
 eligibility is rechecked candidate-by-candidate right before each send,
 and nothing goes out until a mailbox is connected (check
 `sending_identity_ready` on `preview`/`list`).

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    JOB_ID      <str>  Job UUID or short ID (as shown by `jobs list`). [required]                                                                                                                   │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --name                <str>                    Human-readable name for the rule. [required]                                                                                                       │
│ *  --trigger             <str>                    What makes a candidate due for this follow-up: one of stage_age, ai_interview_not_started. `stage_age` needs --stage; `ai_interview_not_started`   │
│                                                   fires on anyone invited to the AI interview who hasn't started it yet.                                                                             │
│                                                   [required]                                                                                                                                         │
│    --stage               <str>                    Pipeline stage to watch, required for --trigger stage_age. One of applied, resume_assessment, ai_interview, reference_interview, human_interview.  │
│    --stage-status        <str>                    Whether min-days counts from entering or completing the stage. One of entered, completed (default entered). [default: entered]                     │
│ *  --min-days            <int range> [0<=x<=365]  Days before this rule fires (0-365). [required]                                                                                                    │
│    --schedule            <str>                    One of once, weekly (default once). `weekly` requires --weekday and --time. [default: once]                                                        │
│    --weekday             <int range> [0<=x<=6]    0=Monday .. 6=Sunday. Required for --schedule weekly.                                                                                              │
│    --time                <str>                    Send time, 24-hour HH:MM. Required for --schedule weekly.                                                                                          │
│    --timezone            <str>                    IANA timezone name for --time, e.g. Europe/Warsaw. [default: UTC]                                                                                  │
│    --subject             <str>                    Email subject template, required for --channel email (not used for sms). See module docs for allowed {{placeholder}} tokens.                       │
│ *  --body                <str>                    Email body, or for --channel sms the text message (max 300 characters). See module docs for allowed {{placeholder}} tokens. [required]             │
│    --channel             <str>                    email (default) or sms: a text message, sent only to candidates who agreed to texts when they applied, never 21:00-08:00 their local time.         │
│                                                   [default: email]                                                                                                                                   │
│    --json                                         Raw JSON output.                                                                                                                                   │
│    --help                                         Show this message and exit.                                                                                                                        │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

jobs followup-rules delete

Usage: zero jobs followup-rules delete [OPTIONS] {JOB_ID} {RULE_ID}

 Delete a follow-up rule. Pending sends for it are stopped; already-sent emails stay on record.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    JOB_ID       <str>  Job UUID or short ID. [required]                                                                                                                                            │
│ *    RULE_ID      <str>  Follow-up rule UUID. [required]                                                                                                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output.                                                                                                                                                                     │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

jobs followup-rules list

Usage: zero jobs followup-rules list [OPTIONS] {JOB_ID}

 List follow-up rules on this job's pipeline.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    JOB_ID      <str>  Job UUID or short ID. [required]                                                                                                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output.                                                                                                                                                                     │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

jobs followup-rules pause

Usage: zero jobs followup-rules pause [OPTIONS] {JOB_ID} {RULE_ID}

 Pause a follow-up rule. Already-scheduled sends for it are stopped; `resume` restarts it.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    JOB_ID       <str>  Job UUID or short ID. [required]                                                                                                                                            │
│ *    RULE_ID      <str>  Follow-up rule UUID. [required]                                                                                                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output.                                                                                                                                                                     │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

jobs followup-rules preview

Usage: zero jobs followup-rules preview [OPTIONS] {JOB_ID} {RULE_ID}

 Show who this rule would email right now, plus a rendered sample email.

 Works on a paused rule too, so you can check "what would happen if I
 resume this" before doing so. `sending_identity_ready: false` means no
 mailbox is connected yet -- nothing will actually send until one is.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    JOB_ID       <str>  Job UUID or short ID. [required]                                                                                                                                            │
│ *    RULE_ID      <str>  Follow-up rule UUID. [required]                                                                                                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --application-id        <str>  Render the sample email for this candidate instead of the first match.                                                                                                │
│ --json                         Raw JSON output.                                                                                                                                                      │
│ --help                         Show this message and exit.                                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

jobs followup-rules resume

Usage: zero jobs followup-rules resume [OPTIONS] {JOB_ID} {RULE_ID}

 Resume a paused follow-up rule from its next scheduled check.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    JOB_ID       <str>  Job UUID or short ID. [required]                                                                                                                                            │
│ *    RULE_ID      <str>  Follow-up rule UUID. [required]                                                                                                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output.                                                                                                                                                                     │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

jobs invite-candidates

Usage: zero jobs invite-candidates [OPTIONS] {JOB_REF}

 Add existing candidates (from `candidates list`) to this job's normal sourcing/outreach pipeline (ZER-2732).

 Always succeeds on a well-formed request: a candidate that can't be
 added shows up in `skipped` with a reason (already on this job, not
 found, wrong employer, or no usable email) instead of failing the call.

 If this job has a default outreach sequence, each newly-added candidate
 with a usable email is auto-enrolled and may get the first email right
 away -- the same real-world effect as `outreach enroll`, so this
 requires an explicit human --yes exactly like that command.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    JOB_REF      <str>  Short ID, full UUID, 1-based list number (deprecated), or title substring [required]                                                                                        │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --applicant            <str>  Applicant UUID to add (repeat for multiple; 1-500 per call). [required]                                                                                             │
│    --yes          -y             Skip the confirmation prompt                                                                                                                                        │
│    --employer-id          <str>  Employer UUID (auto-detected).                                                                                                                                      │
│    --json                        Raw JSON output                                                                                                                                                     │
│    --help                        Show this message and exit.                                                                                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

jobs list

Usage: zero jobs list [OPTIONS]

 List all your jobs (sorted by creation date, newest first).

 All filters compose (``--mine --tag backend --since 2026-04-01``). When
 ``--json`` is passed, the payload after filtering/sorting is printed
 (enriched with the derived ``short_id``) so scripts can keep reading it.

 Rows carry ``description_chars`` rather than the description body. A row
 with ``description_omitted: true`` HAS a description -- it just is not in
 this payload; read it with ``zero jobs show <job>``. ``--with-description``
 opts the whole list back in, at the size cost described on that flag.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --active-only                    Show only active jobs                                                                                                                                               │
│ --mine                           Show only jobs you created. Requires the backend to expose `created_by_user_id` (ZER-563); if it doesn't, a warning is printed to stderr and all employer jobs are  │
│                                  shown.                                                                                                                                                              │
│ --tag                     <str>  Filter to jobs tagged [<name>] in the title (case-insensitive).                                                                                                     │
│ --since                   <str>  ISO date (e.g. 2026-04-01). Keep jobs created on/after this date.                                                                                                   │
│ --search                  <str>  Case-insensitive substring match on job title or location. This filter runs locally and does NOT look inside job descriptions -- to search description text use     │
│                                  `zero internal jobs list --search <term>`, which matches server-side.                                                                                               │
│ --with-description               Include each job's full description body. Off by default: descriptions average ~4 kB, so a few dozen jobs is enough to blow past an agent's tool-result limit.      │
│                                  Prefer `zero jobs show <job>` for one description, or `zero internal jobs list --search <term>` to find jobs by description text.                                   │
│ --client-id               <str>  Filter to jobs belonging to an RPO client UUID.                                                                                                                     │
│ --sort                    <str>  Sort by: created, title, applicants, status.                                                                                                                        │
│ --order                   <str>  Sort direction: asc, desc. Only used with --sort. [default: desc]                                                                                                   │
│ --employer-id             <str>  Employer UUID (auto-detected)                                                                                                                                       │
│ --json                           Raw JSON output                                                                                                                                                     │
│ --help                           Show this message and exit.                                                                                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

jobs reopen

Usage: zero jobs reopen [OPTIONS] {JOB_REF}

 Reopen a role you previously closed (ZER-3305).

 Makes the role publicly listed and open to applications again -- the
 counterpart to ``jobs close``, for a role closed by mistake or one
 that later found more budget. Reopening an already-active job is
 harmless.

 A role that was never paid for in the first place (its checkout was
 never completed) can't be reopened until it's paid -- the error says
 so. A role that WAS paid and later closed reopens with no new charge.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    JOB_REF      <str>  Short ID, full UUID, 1-based list number (deprecated), or title substring [required]                                                                                        │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --yes           -y             Skip the confirmation prompt                                                                                                                                          │
│ --employer-id           <str>  Employer UUID (auto-detected)                                                                                                                                         │
│ --expect-id             <str>  Assert the resolved job matches this UUID or short ID                                                                                                                 │
│ --expect-title          <str>  Assert the resolved job's title contains this substring (case-insensitive)                                                                                            │
│ --json                         Raw JSON output                                                                                                                                                       │
│ --help                         Show this message and exit.                                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

jobs requisition

Usage: zero jobs requisition [OPTIONS] [job_ref]

 Full requisition summary for ONE role, in a single call (ZER-3448): JD, screening questions, hiring-flow (stage) config, and pipeline counts.

 Use this INSTEAD of `jobs show` + `hiring-flow show` + `applications
 stage-counts` for "summarize the requisition for role X" -- that fan-out
 is exactly the shape this endpoint replaces, and it is also the first
 read path this CLI has ever had for screening questions after they were
 saved (previously only echoed back by `internal jobs create/update`,
 never readable afterwards).

 Defaults to the currently-selected job when no argument is given.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│   job_ref      <str>  Job number (from 'zero jobs list') or job UUID. Defaults to current job.                                                                                                       │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (auto-detected)                                                                                                                                            │
│ --json                      Raw JSON output                                                                                                                                                          │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

jobs show

Usage: zero jobs show [OPTIONS] [job_ref]

 Show full details for a job: JD, status, applicant count, dashboard URL.

 If the job is unpaid we also surface the short payment link (so the user
 can finish activating the role without having to dig through email).
 Defaults to the currently-selected job when no argument is given.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│   job_ref      <str>  Job number (from 'zero jobs list') or job UUID. Defaults to current job.                                                                                                       │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (auto-detected)                                                                                                                                            │
│ --json                      Raw JSON output                                                                                                                                                          │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

jobs talent-pool

Usage: zero jobs talent-pool [OPTIONS] COMMAND [ARGS]...

 Talent-pool candidates (applied elsewhere) scored against this job (ZER-3215).

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ list       List candidates who applied to a DIFFERENT role and were scored against                                                                                                                   │
│            this one (ZER-3215) -- people already reachable about this role under a                                                                                                                   │
│            recorded lawful basis (`reuse_basis` on each row), without a new sourcing                                                                                                                 │
│            search. `--view all` also shows rows already dismissed on this job.                                                                                                                       │
│ dismiss    Mark one talent-pool match "not a fit for this role" (ZER-3703).                                                                                                                          │
│ undismiss  Undo a `talent-pool dismiss` (ZER-3703): the match returns to the                                                                                                                         │
│            default `talent-pool list` view if it still otherwise qualifies.                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

jobs talent-pool dismiss

Usage: zero jobs talent-pool dismiss [OPTIONS] {JOB_REF} {match_id}

 Mark one talent-pool match "not a fit for this role" (ZER-3703).

 Hides it from this job's default `talent-pool list` only -- the
 candidate's other applications, matches on other jobs, and consent are
 untouched. Reversible with `talent-pool undismiss`. Idempotent.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    JOB_REF       <str>  Short ID, full UUID, 1-based list number (deprecated), or title substring [required]                                                                                       │
│ *    match_id      <str>  Talent-pool match UUID (from `talent-pool list`) [required]                                                                                                                │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (auto-detected).                                                                                                                                           │
│ --json                      Raw JSON output                                                                                                                                                          │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

jobs talent-pool list

Usage: zero jobs talent-pool list [OPTIONS] {JOB_REF}

 List candidates who applied to a DIFFERENT role and were scored against this one (ZER-3215) -- people already reachable about this role under a recorded lawful basis (`reuse_basis` on each row),
 without a new sourcing search. `--view all` also shows rows already dismissed on this job.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    JOB_REF      <str>  Short ID, full UUID, 1-based list number (deprecated), or title substring [required]                                                                                        │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --view               <str>  'default' (curated, non-dismissed, top-scoring) or 'all' (every row, dismissed included). [default: default]                                                             │
│ --limit              <int>  Max rows to return (1-200). [default: 50]                                                                                                                                │
│ --offset             <int>  Only used with --view all. [default: 0]                                                                                                                                  │
│ --employer-id        <str>  Employer UUID (auto-detected).                                                                                                                                           │
│ --json                      Raw JSON output                                                                                                                                                          │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

jobs talent-pool undismiss

Usage: zero jobs talent-pool undismiss [OPTIONS] {JOB_REF} {match_id}

 Undo a `talent-pool dismiss` (ZER-3703): the match returns to the default `talent-pool list` view if it still otherwise qualifies.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    JOB_REF       <str>  Short ID, full UUID, 1-based list number (deprecated), or title substring [required]                                                                                       │
│ *    match_id      <str>  Talent-pool match UUID [required]                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (auto-detected).                                                                                                                                           │
│ --json                      Raw JSON output                                                                                                                                                          │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

jobs timeline

Usage: zero jobs timeline [OPTIONS] {JOB_REF}

 Show everything that happened on this job, in order.

 Merges job creation, stage changes, notes, interviews, scores, feedback,
 ATS sync, AI decisions, and email outreach across every candidate on the
 job into one reverse-chronological feed -- "what has happened on this
 role". Use `candidates timeline <applicant_id>` instead when the question
 is about one person, not the whole job.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    JOB_REF      <str>  Short ID, full UUID, 1-based list number (deprecated), or title substring [required]                                                                                        │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID. Only needed for a system-key credential with no default employer (auto-scoped for a normal per-user CLI token).                                           │
│ --page               <int>  Page number (1-based). [default: 1]                                                                                                                                      │
│ --limit              <int>  Results per page. [default: 20]                                                                                                                                          │
│ --since              <str>  Only events on or after this ISO-8601 datetime (or a date like 2026-09-01).                                                                                              │
│ --json                      Raw JSON output.                                                                                                                                                         │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

jobs use

Usage: zero jobs use [OPTIONS] {JOB_REF}

 Switch to a different job (makes it the default for all commands).

 Prefer short IDs (printed by ``zero jobs list``) — they're derived from
 the UUID and stay stable even when jobs are added or deleted. Numeric
 list positions and title substrings still work, but positions shift and
 substrings can match multiple jobs; scripts should use short IDs or UUIDs.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    JOB_REF      <str>  Short ID (from 'zero jobs list'), full UUID, 1-based list number (deprecated), or case-insensitive title substring [required]                                               │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id         <str>  Employer UUID (auto-detected)                                                                                                                                           │
│ --expect-id           <str>  Assert the resolved job matches this UUID or short ID                                                                                                                   │
│ --expect-title        <str>  Assert the resolved job's title contains this substring (case-insensitive)                                                                                              │
│ --json                       Raw JSON output                                                                                                                                                         │
│ --help                       Show this message and exit.                                                                                                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

login

Usage: zero login [OPTIONS]

 Log in or sign up. Uses device code flow by default.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --app-url         <str>  Override app URL (e.g. http://localhost:3300 for local testing)                                                                                                             │
│ --browser                Use browser callback flow instead of device code                                                                                                                            │
│ --token           <str>  Log in with an API token directly                                                                                                                                           │
│ --no-wait                Print device code and exit without waiting (for non-interactive use)                                                                                                        │
│ --complete        <str>  Complete a pending device code login with the given session ID                                                                                                              │
│ --help                   Show this message and exit.                                                                                                                                                 │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

logout

Usage: zero logout [OPTIONS]

 Log out: revoke the CLI token server-side, then remove local credentials.

 Best-effort: if the backend revocation fails (network error, already-revoked
 token, etc.) we still wipe the local config so the CLI appears logged out.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

offers

Usage: zero offers [OPTIONS] COMMAND [ARGS]...

 Inspect and manage offer letters.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ list      List offers. Not yet supported by the backend.                                                                                                                                             │
│ show      Show a single offer by ID.                                                                                                                                                                 │
│ cancel    Withdraw an in-flight offer.                                                                                                                                                               │
│ create    Draft an offer letter for an application. Sends nothing.                                                                                                                                   │
│ update    Edit a draft offer. Sends nothing.                                                                                                                                                         │
│ send      Send a draft offer to the candidate for e-signature.                                                                                                                                       │
│ template  Offer letter template: show, edit, preview, import an existing letter, and list the {{variables}} a letter can use.                                                                        │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

offers cancel

Usage: zero offers cancel [OPTIONS] {offer_id}

 Withdraw an in-flight offer.

 Voids the e-signature document and emails the candidate that the offer
 has been withdrawn. Only valid while the offer is in `sent` status.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    offer_id      <str>  Offer UUID [required]                                                                                                                                                      │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --reason          <str>  Reason for cancellation (audit trail).                                                                                                                                      │
│ --yes     -y             Skip the confirmation prompt.                                                                                                                                               │
│ --json                   Raw JSON output                                                                                                                                                             │
│ --help                   Show this message and exit.                                                                                                                                                 │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

offers create

Usage: zero offers create [OPTIONS] {application_id}

 Draft an offer letter for an application. Sends nothing.

 Renders the offer template against the candidate and role and saves it
 as a draft. Review it with `offers show`, adjust with `offers update`,
 then deliver it with `offers send`. Nothing reaches the candidate until
 `offers send`.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    application_id      <str>  Application UUID to draft an offer for [required]                                                                                                                    │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --guaranteed-cash-compensation        <int>  The hire's actual guaranteed annual cash compensation in whole USD dollars (base + signing + guaranteed bonus). Used for the close fee once the         │
│                                              candidate signs.                                                                                                                                        │
│ --low-evidence-reason                 <str>  Why you are hiring on thin evidence: referral, known_candidate, rehire or other. Recorded on the application.                                           │
│ --low-evidence-note                   <str>  Free text, meaningful with reason 'other'.                                                                                                              │
│ --json                                       Raw JSON output                                                                                                                                         │
│ --help                                       Show this message and exit.                                                                                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

offers list

Usage: zero offers list [OPTIONS]

 List offers. Not yet supported by the backend.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --job           <str>  Job UUID to filter offers by.                                                                                                                                                 │
│ --status        <str>  Status to filter offers by (e.g. sent, signed).                                                                                                                               │
│ --json                 Raw JSON output                                                                                                                                                               │
│ --help                 Show this message and exit.                                                                                                                                                   │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

offers send

Usage: zero offers send [OPTIONS] {offer_id}

 Send a draft offer to the candidate for e-signature.

 Candidate-facing: the candidate receives the offer by email, and their
 signature marks them hired and triggers the close fee. Requires `--yes`
 after explicit human approval in this turn; never invent it. The server
 still refuses an incomplete offer (it returns the missing fields) and a
 second in-flight offer on the same role unless `--force`.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    offer_id      <str>  Draft offer UUID [required]                                                                                                                                                │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --force            Send even when another offer for this role is still in flight.                                                                                                                    │
│ --yes    -y        Required in JSON/MCP mode; skip the confirmation prompt.                                                                                                                          │
│ --json             Raw JSON output                                                                                                                                                                   │
│ --help             Show this message and exit.                                                                                                                                                       │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

offers show

Usage: zero offers show [OPTIONS] {offer_id}

 Show a single offer by ID.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    offer_id      <str>  Offer UUID [required]                                                                                                                                                      │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

offers template

Usage: zero offers template [OPTIONS] COMMAND [ARGS]...

 Offer letter template: show, edit, preview, import an existing letter, and list the {{variables}} a letter can use.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ show       Show the offer letter template (body and per-offer defaults).                                                                                                                             │
│ update     Edit the offer letter template used for future offers.                                                                                                                                    │
│ preview    Render the template with sample candidate data and list what is missing.                                                                                                                  │
│ variables  List the {{variables}} an offer letter body can use and where each comes from.                                                                                                            │
│ import     Convert an existing offer letter into a {{variable}} template body.                                                                                                                       │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

offers template import

Usage: zero offers template import [OPTIONS] {file}

 Convert an existing offer letter into a {{variable}} template body.

 Nothing is saved unless you pass `--save`; review the returned body and
 warnings first, then save it with `offers template update --body-file`.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    file      <str>  Path to an existing offer letter (PDF or Word) [required]                                                                                                                      │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --save          Also save the converted body as the company offer template.                                                                                                                          │
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

offers template preview

Usage: zero offers template preview [OPTIONS]

 Render the template with sample candidate data and list what is missing.

 `missing_fields` names what must be set before an offer can be sent
 (legal entity, compensation, start date, hiring manager, employment clause).

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --client        <str>  Client UUID; omit for the company default.                                                                                                                                    │
│ --json                 Raw JSON output                                                                                                                                                               │
│ --help                 Show this message and exit.                                                                                                                                                   │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

offers template show

Usage: zero offers template show [OPTIONS]

 Show the offer letter template (body and per-offer defaults).

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --client        <str>  Client UUID (RPO/white-label); omit for the company default.                                                                                                                  │
│ --json                 Raw JSON output                                                                                                                                                               │
│ --help                 Show this message and exit.                                                                                                                                                   │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

offers template update

Usage: zero offers template update [OPTIONS]

 Edit the offer letter template used for future offers.

 Pass only the fields to change; the rest are kept. Existing drafts and
 sent offers are not rewritten. Run `offers template variables` for the
 placeholders a body can use and `offers template preview` to check it.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --client                 <str>  Client UUID; omit for the company default.                                                                                                                           │
│ --name                   <str>  Template name                                                                                                                                                        │
│ --title                  <str>  Letter title                                                                                                                                                         │
│ --body                   <str>  Letter body with {{variable}} placeholders                                                                                                                           │
│ --body-file              <str>  Read the letter body from this file                                                                                                                                  │
│ --compensation           <str>  Default compensation                                                                                                                                                 │
│ --start-date             <str>  Default start date                                                                                                                                                   │
│ --location               <str>  Default work location                                                                                                                                                │
│ --employment-type        <str>  Default employment type                                                                                                                                              │
│ --notes                  <str>  Default notes                                                                                                                                                        │
│ --json                          Raw JSON output                                                                                                                                                      │
│ --help                          Show this message and exit.                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

offers template variables

Usage: zero offers template variables [OPTIONS]

 List the {{variables}} an offer letter body can use and where each comes from.

 Source: generated, candidate, role, company (set in company settings),
 or offer (entered per offer with `offers update`). A line whose variables
 are all empty is dropped from the letter.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

offers update

Usage: zero offers update [OPTIONS] {offer_id}

 Edit a draft offer. Sends nothing.

 Only drafts can be edited; once an offer is sent, withdraw it with
 `offers cancel` and draft a new one. Pass only the fields to change.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    offer_id      <str>  Offer UUID (must still be a draft) [required]                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --body                                <str>  Full letter body text                                                                                                                                   │
│ --body-file                           <str>  Read the full letter body from this file                                                                                                                │
│ --compensation                        <str>  Compensation text                                                                                                                                       │
│ --start-date                          <str>  Start date                                                                                                                                              │
│ --location                            <str>  Work location                                                                                                                                           │
│ --employment-type                     <str>  Employment type                                                                                                                                         │
│ --notes                               <str>  Additional notes                                                                                                                                        │
│ --equity-terms                        <str>  Equity paragraph                                                                                                                                        │
│ --bonus-terms                         <str>  Bonus paragraph                                                                                                                                         │
│ --conditions                          <str>  Extra conditions                                                                                                                                        │
│ --position-description                <str>  Role description paragraph                                                                                                                              │
│ --hiring-manager-name                 <str>  Hiring manager who signs the letter                                                                                                                     │
│ --hiring-manager-title                <str>  Hiring manager's title                                                                                                                                  │
│ --guaranteed-cash-compensation        <int>  Actual guaranteed annual cash compensation, whole USD dollars.                                                                                          │
│ --json                                       Raw JSON output                                                                                                                                         │
│ --help                                       Show this message and exit.                                                                                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

outreach

Usage: zero outreach [OPTIONS] COMMAND [ARGS]...

 Multi-step candidate outreach sequences.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ enroll            Enroll a shortlisted candidate into an outreach sequence.                                                                                                                          │
│ cancel            Cancel an outreach enrollment (revert primitive, ZER-660).                                                                                                                         │
│ send-status       Whether this employer is at today's outreach sending cap.                                                                                                                          │
│ throughput        How many new people this employer can still contact this month.                                                                                                                    │
│ stats             Show a sequence-level engagement rollup (sent/opened/clicked/replied).                                                                                                             │
│ sequences         Create and manage outreach sequences.                                                                                                                                              │
│ enrollments       View and control per-candidate enrollments.                                                                                                                                        │
│ jobs              Job-scoped outreach: results, preview variables, and the role's default sequence.                                                                                                  │
│ company-sequence  The employer's one company-wide default outreach sequence.                                                                                                                         │
│ linkedin-tasks    LinkedIn manual-step outreach tasks.                                                                                                                                               │
│ talent-pool       Candidates reachable about a role they did not apply to.                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

outreach cancel

Usage: zero outreach cancel [OPTIONS] {enrollment_id}

 Cancel an outreach enrollment (revert primitive, ZER-660).

 Unlike ``outreach enrollments stop``, this is the support/ops-facing
 "undo" for an enrollment: it works on `active` or `paused`
 enrollments and can optionally burn bridges so the same candidate is
 never re-enrolled into the same sequence/job again. Mirrors the
 ``offers cancel`` shape (top-level verb on the group's Typer app).

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    enrollment_id      <str>  Enrollment UUID. [required]                                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id         <str>  Employer UUID (auto-detected from login).                                                                                                                               │
│ --reason              <str>  Reason for cancellation (audit trail, max 2000 chars).                                                                                                                  │
│ --burn-bridges               Also block this candidate from being re-enrolled into this sequence/job in the future (outreach_do_not_contact).                                                        │
│ --json                       Raw JSON output.                                                                                                                                                        │
│ --help                       Show this message and exit.                                                                                                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

outreach company-sequence

Usage: zero outreach company-sequence [OPTIONS] COMMAND [ARGS]...

 The employer's one company-wide default outreach sequence.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ show   Show the employer's one company-wide sequence, creating it on first use.                                                                                                                      │
│ reset  Regenerate the company sequence's steps from the current template.                                                                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

outreach company-sequence reset

Usage: zero outreach company-sequence reset [OPTIONS]

 Regenerate the company sequence's steps from the current template.

 Affects every role currently linked to it. In-flight enrollments keep
 the step text they already started with; nothing already sent is
 re-sent.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (auto-detected).                                                                                                                                           │
│ --json                      Raw JSON output.                                                                                                                                                         │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

outreach company-sequence show

Usage: zero outreach company-sequence show [OPTIONS]

 Show the employer's one company-wide sequence, creating it on first use.

 Every new role links to this sequence unless it has its own; edit it
 with `outreach sequences update` to change the template for every role
 that uses it.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (auto-detected).                                                                                                                                           │
│ --json                      Raw JSON output.                                                                                                                                                         │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

outreach enroll

Usage: zero outreach enroll [OPTIONS] [shortlist_id]

 Enroll a shortlisted candidate into an outreach sequence.

 The candidate's email + personalization fields are snapshotted server-
 side, so the sequence keeps working even if the underlying sourced
 profile is later refreshed.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│   shortlist_id      <str>  Legacy shortlist entry UUID. For a candidate already in the job's pipeline (anyone promoted with `sourcing add`, or any applicant), pass --application instead.           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --sequence             <str>  Sequence UUID to enroll into. [required]                                                                                                                            │
│    --application          <str>  Application UUID (from `candidates list --json`) to enroll. This is the normal path: sourced candidates become applications the moment they are added to a job.     │
│    --employer-id          <str>                                                                                                                                                                      │
│    --yes          -y             Required in JSON/MCP mode; skip the confirmation prompt.                                                                                                            │
│    --json                                                                                                                                                                                            │
│    --help                        Show this message and exit.                                                                                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

outreach enrollments

Usage: zero outreach enrollments [OPTIONS] COMMAND [ARGS]...

 View and control per-candidate enrollments.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ list               List enrollments, optionally filtered by sequence and/or status.                                                                                                                  │
│ pause              Pause an enrollment — no further steps will send until resumed.                                                                                                                   │
│ resume             Resume a previously paused enrollment.                                                                                                                                            │
│ stop               Permanently stop an enrollment. Terminal — not reversible via                                                                                                                     │
│                    ``resume`` (enroll the candidate again if you really need to restart).                                                                                                            │
│ stop-by-candidate  Stop future outreach for a sourced candidate without discarding them.                                                                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

outreach enrollments list

Usage: zero outreach enrollments list [OPTIONS]

 List enrollments, optionally filtered by sequence and/or status.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --sequence           <str>                    Filter by sequence UUID.                                                                                                                               │
│ --status             <str>                    Filter by status: active | paused | replied | stopped | completed.                                                                                     │
│ --limit              <int range> [1<=x<=500]  [default: 100]                                                                                                                                         │
│ --employer-id        <str>                                                                                                                                                                           │
│ --json                                                                                                                                                                                               │
│ --help                                        Show this message and exit.                                                                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

outreach enrollments pause

Usage: zero outreach enrollments pause [OPTIONS] {enrollment_id}

 Pause an enrollment — no further steps will send until resumed.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    enrollment_id      <str>  [required]                                                                                                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>                                                                                                                                                                           │
│ --json                                                                                                                                                                                               │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

outreach enrollments resume

Usage: zero outreach enrollments resume [OPTIONS] {enrollment_id}

 Resume a previously paused enrollment.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    enrollment_id      <str>  [required]                                                                                                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>                                                                                                                                                                           │
│ --json                                                                                                                                                                                               │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

outreach enrollments stop

Usage: zero outreach enrollments stop [OPTIONS] {enrollment_id}

 Permanently stop an enrollment. Terminal — not reversible via ``resume`` (enroll the candidate again if you really need to restart).

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    enrollment_id      <str>  [required]                                                                                                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>                                                                                                                                                                           │
│ --json                                                                                                                                                                                               │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

outreach enrollments stop-by-candidate

Usage: zero outreach enrollments stop-by-candidate [OPTIONS] {candidate_ref}

 Stop future outreach for a sourced candidate without discarding them.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    candidate_ref      <str>  Candidate name, email, number, or application UUID [required]                                                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --job          -j      <str>  Job UUID (uses current job if omitted)                                                                                                                                 │
│ --employer-id          <str>  Employer UUID (auto-detected)                                                                                                                                          │
│ --json                                                                                                                                                                                               │
│ --help                        Show this message and exit.                                                                                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

outreach jobs

Usage: zero outreach jobs [OPTIONS] COMMAND [ARGS]...

 Job-scoped outreach: results, preview variables, and the role's default sequence.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ results            Outreach counts across every sequence attached to this role.                                                                                                                      │
│ preview-variables  Show how {{job_title}}, {{role_summary}} and {{company_name}} will                                                                                                                │
│                    render for this role -- the exact values a sequence send would use.                                                                                                               │
│ default-sequence   The one default outreach sequence attached to a job.                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

outreach jobs default-sequence

Usage: zero outreach jobs default-sequence [OPTIONS] COMMAND [ARGS]...

 The one default outreach sequence attached to a job.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ ensure  Attach this role's default sequence if it has none yet.                                                                                                                                      │
│ reset   Reset this role's default sequence steps to the recommended template.                                                                                                                        │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

outreach jobs default-sequence ensure

Usage: zero outreach jobs default-sequence ensure [OPTIONS] {job_id}

 Attach this role's default sequence if it has none yet.

 The first time this actually attaches a sequence (the role had none),
 it also enrolls every candidate already sourced onto the role who isn't
 enrolled yet, and starts sending them the first email right away. Safe
 to re-run: a role that already has a sequence, or whose sourced
 candidates are already all enrolled, reports zero newly enrolled.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    job_id      <str>  Job UUID (or the short id shown by `jobs list`). [required]                                                                                                                  │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id          <str>  Employer UUID (auto-detected).                                                                                                                                         │
│ --yes          -y             Required in JSON/MCP mode; skip the confirmation prompt.                                                                                                               │
│ --json                        Raw JSON output.                                                                                                                                                       │
│ --help                        Show this message and exit.                                                                                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

outreach jobs default-sequence reset

Usage: zero outreach jobs default-sequence reset [OPTIONS] {job_id}

 Reset this role's default sequence steps to the recommended template.

 Only rewrites step wording and cadence; it never enrolls or re-enrolls
 anyone. Rejected (409) if this role shares the employer's one
 company-wide sequence -- reset that instead with
 `outreach company-sequence reset`, since it is shared by every role
 that has no sequence of its own.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    job_id      <str>  Job UUID (or the short id shown by `jobs list`). [required]                                                                                                                  │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (auto-detected).                                                                                                                                           │
│ --json                      Raw JSON output.                                                                                                                                                         │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

outreach jobs preview-variables

Usage: zero outreach jobs preview-variables [OPTIONS] {job_id}

 Show how {{job_title}}, {{role_summary}} and {{company_name}} will render for this role -- the exact values a sequence send would use.

 Check this before activating a sequence that uses those placeholders.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    job_id      <str>  Job UUID (or the short id shown by `jobs list`). [required]                                                                                                                  │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (auto-detected).                                                                                                                                           │
│ --json                      Raw JSON output.                                                                                                                                                         │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

outreach jobs results

Usage: zero outreach jobs results [OPTIONS] {job_id}

 Outreach counts across every sequence attached to this role.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    job_id      <str>  Job UUID (or the short id shown by `jobs list`). [required]                                                                                                                  │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (auto-detected).                                                                                                                                           │
│ --json                      Raw JSON output.                                                                                                                                                         │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

outreach linkedin-tasks

Usage: zero outreach linkedin-tasks [OPTIONS] COMMAND [ARGS]...

 LinkedIn manual-step outreach tasks.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ list      List LinkedIn manual-step outreach tasks waiting on a recruiter.                                                                                                                           │
│ complete  Mark a LinkedIn manual-step task sent and resume the sequence.                                                                                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

outreach linkedin-tasks complete

Usage: zero outreach linkedin-tasks complete [OPTIONS] {task_id}

 Mark a LinkedIn manual-step task sent and resume the sequence.

 Call this right after you have sent the pre-written message yourself,
 from your own LinkedIn account -- this command does not send anything
 on your behalf, it only records that it was sent and lets the sequence
 continue to its next step.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    task_id      <str>  LinkedIn task UUID. [required]                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (auto-detected).                                                                                                                                           │
│ --json                      Raw JSON output.                                                                                                                                                         │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

outreach linkedin-tasks list

Usage: zero outreach linkedin-tasks list [OPTIONS]

 List LinkedIn manual-step outreach tasks waiting on a recruiter.

 Each row is one pre-written message a sequence step wants sent from a
 recruiter's own LinkedIn account; mark it done with
 `outreach linkedin-tasks complete` once you've actually sent it.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --job                <str>                    Filter to one job UUID (or short id).                                                                                                                  │
│ --status             <str>                    Filter by status: pending | done | cancelled.                                                                                                          │
│ --limit              <int range> [1<=x<=500]  [default: 100]                                                                                                                                         │
│ --employer-id        <str>                    Employer UUID (auto-detected).                                                                                                                         │
│ --json                                        Raw JSON output.                                                                                                                                       │
│ --help                                        Show this message and exit.                                                                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

outreach send-status

Usage: zero outreach send-status [OPTIONS]

 Whether this employer is at today's outreach sending cap.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (auto-detected).                                                                                                                                           │
│ --json                      Raw JSON output.                                                                                                                                                         │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

outreach sequences

Usage: zero outreach sequences [OPTIONS] COMMAND [ARGS]...

 Create and manage outreach sequences.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ example-steps  Print a working 3-step Day 0/3/7 starter template.                                                                                                                                    │
│ create         Create a multi-step sequence from a JSON step file or inline JSON.                                                                                                                    │
│ list           List outreach sequences for the current employer.                                                                                                                                     │
│ show           Show a sequence's header and steps.                                                                                                                                                   │
│ update         Edit an existing sequence. Pass only the fields to change.                                                                                                                            │
│ results        Enrollment/reply/interview counts for one sequence, by step.                                                                                                                          │
│ activate       Activate a sequence so it can accept new enrollments.                                                                                                                                 │
│ deactivate     Deactivate a sequence. Existing enrollments keep running; new                                                                                                                         │
│                enrollments are rejected until re-activated.                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

outreach sequences activate

Usage: zero outreach sequences activate [OPTIONS] {sequence_id}

 Activate a sequence so it can accept new enrollments.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    sequence_id      <str>  [required]                                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>                                                                                                                                                                           │
│ --json                                                                                                                                                                                               │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

outreach sequences create

Usage: zero outreach sequences create [OPTIONS]

 Create a multi-step sequence from a JSON step file or inline JSON.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --name                      <str>  Human-readable name for the sequence. [required]                                                                                                               │
│    --from-file                 <str>  Path to a JSON file with the step list. Use '-' to read from stdin.                                                                                            │
│    --steps-json,--steps        <str>  Inline JSON array or {'steps': [...]} object. Prefer this for MCP/Jenny.                                                                                       │
│    --description               <str>  Optional internal description.                                                                                                                                 │
│    --job                       <str>  Scope this sequence to a job UUID (optional).                                                                                                                  │
│    --sender-email              <str>  From-address (stubbed; falls back to platform sender).                                                                                                         │
│    --sender-name               <str>  From-name.                                                                                                                                                     │
│    --reply-to                  <str>  Reply-To address for candidate replies.                                                                                                                        │
│    --employer-id               <str>  Employer UUID (auto-detected from login).                                                                                                                      │
│    --json                             Raw JSON output.                                                                                                                                               │
│    --help                             Show this message and exit.                                                                                                                                    │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

outreach sequences deactivate

Usage: zero outreach sequences deactivate [OPTIONS] {sequence_id}

 Deactivate a sequence. Existing enrollments keep running; new enrollments are rejected until re-activated.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    sequence_id      <str>  [required]                                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>                                                                                                                                                                           │
│ --json                                                                                                                                                                                               │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

outreach sequences example-steps

Usage: zero outreach sequences example-steps [OPTIONS]

 Print a working 3-step Day 0/3/7 starter template.

 Pipe this straight into a file and then into ``sequences create``:

 zero outreach sequences example-steps --json > steps.json
 zero outreach sequences create --name 'Founder intro' --from-file steps.json

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output (convenient for `... > steps.json`).                                                                                                                                 │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

outreach sequences list

Usage: zero outreach sequences list [OPTIONS]

 List outreach sequences for the current employer.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --job                <str>                    Filter by job UUID (still shows employer-wide sequences too).                                                                                          │
│ --limit              <int range> [1<=x<=500]  [default: 100]                                                                                                                                         │
│ --employer-id        <str>                    Employer UUID (auto-detected).                                                                                                                         │
│ --json                                        Raw JSON output.                                                                                                                                       │
│ --help                                        Show this message and exit.                                                                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

outreach sequences results

Usage: zero outreach sequences results [OPTIONS] {sequence_id}

 Enrollment/reply/interview counts for one sequence, by step.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    sequence_id      <str>  Sequence UUID. [required]                                                                                                                                               │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (auto-detected).                                                                                                                                           │
│ --json                      Raw JSON output.                                                                                                                                                         │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

outreach sequences show

Usage: zero outreach sequences show [OPTIONS] {sequence_id}

 Show a sequence's header and steps.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    sequence_id      <str>  Sequence UUID. [required]                                                                                                                                               │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (auto-detected).                                                                                                                                           │
│ --json                      Raw JSON output.                                                                                                                                                         │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

outreach sequences update

Usage: zero outreach sequences update [OPTIONS] {sequence_id}

 Edit an existing sequence. Pass only the fields to change.

 The step list is only replaced when you pass ``--from-file`` or
 ``--steps-json``; omit both to keep the current steps as-is. Editing an
 active sequence changes what the NEXT unsent step says for everyone
 enrolled in it -- it does not re-send anything already delivered.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    sequence_id      <str>  Sequence UUID. [required]                                                                                                                                               │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --name                      <str>  New name for the sequence.                                                                                                                                        │
│ --from-file                 <str>  Path to a JSON file with the replacement step list. Use '-' for stdin.                                                                                            │
│ --steps-json,--steps        <str>  Inline JSON array or {'steps': [...]} to replace the step list. Prefer this for MCP/Jenny.                                                                        │
│ --description               <str>  New description.                                                                                                                                                  │
│ --job                       <str>  Re-scope this sequence to a different job UUID.                                                                                                                   │
│ --sender-email              <str>  New from-address.                                                                                                                                                 │
│ --sender-name               <str>  New from-name.                                                                                                                                                    │
│ --reply-to                  <str>  New Reply-To address for candidate replies.                                                                                                                       │
│ --employer-id               <str>  Employer UUID (auto-detected).                                                                                                                                    │
│ --json                             Raw JSON output.                                                                                                                                                  │
│ --help                             Show this message and exit.                                                                                                                                       │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

outreach stats

Usage: zero outreach stats [OPTIONS] {sequence_id}

 Show a sequence-level engagement rollup (sent/opened/clicked/replied).

 Aggregates client-side over all enrollments for the sequence — the
 backend already returns per-enrollment engagement counts in the list
 endpoint, so a dedicated stats endpoint isn't needed yet.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    sequence_id      <str>  Sequence UUID. [required]                                                                                                                                               │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>                                                                                                                                                                           │
│ --json                                                                                                                                                                                               │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

outreach talent-pool

Usage: zero outreach talent-pool [OPTIONS] COMMAND [ARGS]...

 Candidates reachable about a role they did not apply to.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ list  Candidates this employer may contact about a role they did not apply to.                                                                                                                       │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

outreach talent-pool list

Usage: zero outreach talent-pool list [OPTIONS]

 Candidates this employer may contact about a role they did not apply to.

 Each row ticked the explicit cross-role opt-in on another employer's
 apply form; an unticked box excludes that candidate from this list
 entirely.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --limit              <int range> [1<=x<=200]  [default: 50]                                                                                                                                          │
│ --offset             <int range> [x>=0]       [default: 0]                                                                                                                                           │
│ --employer-id        <str>                    Employer UUID (auto-detected).                                                                                                                         │
│ --json                                        Raw JSON output.                                                                                                                                       │
│ --help                                        Show this message and exit.                                                                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

outreach throughput

Usage: zero outreach throughput [OPTIONS]

 How many new people this employer can still contact this month.

 The same number the sourcing allocator plans against -- sourcing more
 profiles than this can reach builds a backlog, not a pipeline.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (auto-detected).                                                                                                                                           │
│ --json                      Raw JSON output.                                                                                                                                                         │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

payments

Usage: zero payments [OPTIONS] COMMAND [ARGS]...

 Refund charges (approval-gated).

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ refund  Refund a charge (revert primitive, ZER-660).                                                                                                                                                 │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

payments refund

Usage: zero payments refund [OPTIONS] {charge_id}

 Refund a charge (revert primitive, ZER-660).

 This is irreversible real-money movement. Beyond the ordinary
 confirmation prompt (skippable with --yes/--force), this command
 ALWAYS interactively prompts for a human approver name/handle and
 sends it to the backend as `approved_by` -- the backend itself
 rejects the request with 400 if `approved_by` is missing or blank,
 and the CLI enforces the same rule client-side before ever making
 the request (see `_prompt_refund_approval`).

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    charge_id      <str>  Payment charge ID for the role-open or close fee to refund. [required]                                                                                                    │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id          <str>  Employer UUID (auto-detected from login).                                                                                                                              │
│ --reason               <str>  Reason for the refund (audit trail).                                                                                                                                   │
│ --yes,--force  -y             Skip the ordinary 'are you sure?' confirmation. Does NOT skip the mandatory human-approval capture below -- refunds always require a live human to type their          │
│                               name/handle, even with --yes/--force.                                                                                                                                  │
│ --json                        Raw JSON output.                                                                                                                                                       │
│ --help                        Show this message and exit.                                                                                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

pipeline

Usage: zero pipeline [OPTIONS] COMMAND [ARGS]...

 Run and inspect end-to-end hiring pipeline runs.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ run                Create a pipeline run for a job.                                                                                                                                                  │
│ status             Show one pipeline run.                                                                                                                                                            │
│ list               List recent pipeline runs.                                                                                                                                                        │
│ summary            Show the candidate pipeline across all roles in one call.                                                                                                                         │
│ role-activity      Per-role last-activity timestamp + pipeline state, plus cross-role                                                                                                                │
│                    totals, in one call (ZER-3441).                                                                                                                                                   │
│ advance            Advance a pipeline run after approval.                                                                                                                                            │
│ autopilot          Show or set Autopilot (experimental) for the employer.                                                                                                                            │
│ abort              Abort a pipeline run.                                                                                                                                                             │
│ pending-approvals  List pipeline runs waiting on a human approval right now.                                                                                                                         │
│ record-approval    Record a human decision on a pipeline run's current phase and advance                                                                                                             │
│                    (or halt) the run accordingly.                                                                                                                                                    │
│ set-slack-thread   Record the Slack thread a pipeline run's future updates should post                                                                                                               │
│                    into (ZER-662). Called by the Jenny bridge when a run starts from Slack.                                                                                                          │
│ reports            Schedule a recurring pipeline report (daily or weekly).                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

pipeline abort

Usage: zero pipeline abort [OPTIONS] {run_id}

 Abort a pipeline run.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    run_id      <str>  [required]                                                                                                                                                                   │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --reason             <str>                                                                                                                                                                           │
│ --employer-id        <str>                                                                                                                                                                           │
│ --json                                                                                                                                                                                               │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

pipeline advance

Usage: zero pipeline advance [OPTIONS] {run_id}

 Advance a pipeline run after approval.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    run_id      <str>  [required]                                                                                                                                                                   │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --approve              <str>  Approve the current phase.                                                                                                                                             │
│ --reject               <str>  Reject the current phase and abort.                                                                                                                                    │
│ --reason               <str>                                                                                                                                                                         │
│ --employer-id          <str>                                                                                                                                                                         │
│ --json                                                                                                                                                                                               │
│ --yes          -y             Required in JSON/MCP mode to approve the JD, sequence, or hire step.                                                                                                   │
│ --help                        Show this message and exit.                                                                                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

pipeline autopilot

Usage: zero pipeline autopilot [OPTIONS]

 Show or set Autopilot (experimental) for the employer.

 Autopilot lets the pipeline advance the reversible sourcing and shortlist
 phases without a human. The job-description approval, outbound sending and
 the hire decision always stay human-gated -- the JD approval because it is
 the contractual record of what the client signed off (ZER-1879).

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --on             --off           Enable or disable Autopilot. Omit to show the current setting.                                                                                                      │
│ --employer-id             <str>                                                                                                                                                                      │
│ --json                                                                                                                                                                                               │
│ --help                           Show this message and exit.                                                                                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

pipeline list

Usage: zero pipeline list [OPTIONS]

 List recent pipeline runs.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --job          -j      <str>                    Filter to a job UUID.                                                                                                                                │
│ --limit                <int range> [1<=x<=250]  [default: 50]                                                                                                                                        │
│ --employer-id          <str>                                                                                                                                                                         │
│ --json                                                                                                                                                                                               │
│ --help                                          Show this message and exit.                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

pipeline pending-approvals

Usage: zero pipeline pending-approvals [OPTIONS]

 List pipeline runs waiting on a human approval right now.

 Each row's `pending_approval` names the phase (e.g.
 `awaiting_sequence_approval`, `awaiting_hire_approval`) -- approve or
 reject it with `pipeline advance --approve/--reject <phase>`.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --job-id             <str>  Limit to one job UUID.                                                                                                                                                   │
│ --limit              <int>  Max rows to return (1-250). [default: 50]                                                                                                                                │
│ --employer-id        <str>                                                                                                                                                                           │
│ --json                                                                                                                                                                                               │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

pipeline record-approval

Usage: zero pipeline record-approval [OPTIONS] {run_id}

 Record a human decision on a pipeline run's current phase and advance (or halt) the run accordingly.

 This is a second door onto the same floor `pipeline advance
 --approve/--reject` guards -- `--phase` must match the run's CURRENT
 phase or the backend 400s. Approving `awaiting_jd`, `awaiting_sequence_approval`
 or `awaiting_hire_approval` is a human floor (ZER-3748/ZER-3889) even on
 Autopilot, so an 'approved' decision on any of them requires an explicit
 human --yes exactly like `pipeline advance` does; rejecting never does.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    run_id      <str>  [required]                                                                                                                                                                   │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --phase                     <str>  Phase this decision is for (must match the run's current phase). [required]                                                                                    │
│ *  --decision                  <str>  'approved' or 'rejected'. [required]                                                                                                                           │
│    --approver-user-id          <str>  Named human, when calling as a trusted proxy on their behalf.                                                                                                  │
│    --slack-ts                  <str>  Slack message timestamp this decision came from, if any.                                                                                                       │
│    --reason                    <str>                                                                                                                                                                 │
│    --employer-id               <str>                                                                                                                                                                 │
│    --json                                                                                                                                                                                            │
│    --yes               -y             Required in JSON/MCP mode to approve the JD, sequence, or hire step.                                                                                           │
│    --help                             Show this message and exit.                                                                                                                                    │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

pipeline reports

Usage: zero pipeline reports [OPTIONS] COMMAND [ARGS]...

 Schedule a recurring pipeline report (daily or weekly).

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ create  Subscribe to a recurring pipeline report for one job or the whole account.                                                                                                                   │
│ list    List this account's scheduled pipeline reports (active and paused).                                                                                                                          │
│ show    Show one scheduled pipeline report.                                                                                                                                                          │
│ update  Change a scheduled report's channel, cadence, day, time or timezone.                                                                                                                         │
│ pause   Pause a scheduled report without deleting it (`resume` restarts it).                                                                                                                         │
│ resume  Resume a paused scheduled report from its next scheduled slot.                                                                                                                               │
│ cancel  Cancel (permanently delete) a scheduled report.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

pipeline reports cancel

Usage: zero pipeline reports cancel [OPTIONS] {subscription_id}

 Cancel (permanently delete) a scheduled report.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    subscription_id      <str>  Report subscription id. [required]                                                                                                                                  │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json                                                                                                                                                                                               │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

pipeline reports create

Usage: zero pipeline reports create [OPTIONS]

 Subscribe to a recurring pipeline report for one job or the whole account.

 "Send me this pipeline report every Monday" is one call:
 `pipeline reports create --job <job> --channel dashboard_chat --day monday`.
 Deliver to the channel the user asked from unless they name another.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│    --job          -j      <str>  Report on one job (UUID or short ref). Omit for the whole account.                                                                                                  │
│    --current-job                 Report on the current job (see `jobs use`).                                                                                                                         │
│ *  --channel              <str>  Where the report is delivered: dashboard_chat (a thread in the dashboard chat), email (to you), or slack (your team's connected chat workspace; rejected until it   │
│                                  is connected).                                                                                                                                                      │
│                                  [required]                                                                                                                                                          │
│    --cadence              <str>  daily or weekly (default weekly). [default: weekly]                                                                                                                 │
│    --day                  <str>  Weekday for a weekly report: a name (monday, mon) or 0-6 with 0 = Monday. Default Monday.                                                                           │
│    --time                 <str>  Send time, 24-hour HH:MM in --timezone (default 08:00).                                                                                                             │
│    --timezone             <str>  IANA timezone name for the send time, e.g. Europe/London (default UTC). [default: UTC]                                                                              │
│    --json                                                                                                                                                                                            │
│    --help                        Show this message and exit.                                                                                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

pipeline reports list

Usage: zero pipeline reports list [OPTIONS]

 List this account's scheduled pipeline reports (active and paused).

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json                                                                                                                                                                                               │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

pipeline reports pause

Usage: zero pipeline reports pause [OPTIONS] {subscription_id}

 Pause a scheduled report without deleting it (`resume` restarts it).

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    subscription_id      <str>  Report subscription id. [required]                                                                                                                                  │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json                                                                                                                                                                                               │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

pipeline reports resume

Usage: zero pipeline reports resume [OPTIONS] {subscription_id}

 Resume a paused scheduled report from its next scheduled slot.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    subscription_id      <str>  Report subscription id. [required]                                                                                                                                  │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json                                                                                                                                                                                               │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

pipeline reports show

Usage: zero pipeline reports show [OPTIONS] {subscription_id}

 Show one scheduled pipeline report.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    subscription_id      <str>  Report subscription id. [required]                                                                                                                                  │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json                                                                                                                                                                                               │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

pipeline reports update

Usage: zero pipeline reports update [OPTIONS] {subscription_id}

 Change a scheduled report's channel, cadence, day, time or timezone.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    subscription_id      <str>  Report subscription id. [required]                                                                                                                                  │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --channel         <str>  Where the report is delivered: dashboard_chat (a thread in the dashboard chat), email (to you), or slack (your team's connected chat workspace; rejected until it is        │
│                          connected).                                                                                                                                                                 │
│ --cadence         <str>  daily or weekly.                                                                                                                                                            │
│ --day             <str>  Weekday for a weekly report: a name (monday, mon) or 0-6 with 0 = Monday.                                                                                                   │
│ --time            <str>  Send time, 24-hour HH:MM in --timezone (default 08:00).                                                                                                                     │
│ --timezone        <str>  IANA timezone name for the send time, e.g. Europe/London (default UTC).                                                                                                     │
│ --json                                                                                                                                                                                               │
│ --help                   Show this message and exit.                                                                                                                                                 │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

pipeline role-activity

Usage: zero pipeline role-activity [OPTIONS]

 Per-role last-activity timestamp + pipeline state, plus cross-role totals, in one call (ZER-3441).

 Use this INSTEAD of `jobs list` plus one `candidates list`/`jobs
 timeline` per role for any "which of my roles has gone quiet" or "what's
 the state of my roles" question -- that per-role fan-out cost 30-173s and
 11-39 tool calls for one question (managed-agent benchmark
 RESULTS-2026-08-15-effort-ab.md, finding 3), and the hand-rolled
 cross-role arithmetic it needed produced a different grand total on every
 ask -- 550, 610, 610, ~620, and 700 candidates for the SAME unchanged
 data (finding 4). This is one aggregate read: each role's
 `last_activity_at`, `total_candidates`, `interviewed_count`, and stage
 breakdown, with the grand totals computed server-side.

 No `--days`/`--since` flag on purpose: `last_activity_at` is a raw
 timestamp, not a pre-thresholded "quiet" flag. Compare it to the
 response's own `generated_at` yourself -- "quiet for how long" is your
 question to answer, not this command's to bake in.

 Narrow with --client-id and/or --search exactly like `pipeline summary`.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --include-closed               Include closed/inactive roles (default: open roles only).                                                                                                             │
│ --client-id             <str>  Limit to one RPO client UUID.                                                                                                                                         │
│ --search                <str>  Filter to roles whose title, description, or location match this text (same as `pipeline summary --search`).                                                          │
│ --employer-id           <str>                                                                                                                                                                        │
│ --json                                                                                                                                                                                               │
│ --help                         Show this message and exit.                                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

pipeline run

Usage: zero pipeline run [OPTIONS]

 Create a pipeline run for a job.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --job              -j      <str>  Job UUID (uses current job if omitted).                                                                                                                            │
│ --brief                    <str>  Hiring brief or run note.                                                                                                                                          │
│ --sequence                 <str>  Default outreach sequence UUID for this run.                                                                                                                       │
│ --employer-id              <str>                                                                                                                                                                     │
│ --idempotency-key          <str>  Accepted for agent retry contracts; ignored until backend idempotency lands.                                                                                       │
│ --json                                                                                                                                                                                               │
│ --help                            Show this message and exit.                                                                                                                                        │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

pipeline set-slack-thread

Usage: zero pipeline set-slack-thread [OPTIONS] {run_id}

 Record the Slack thread a pipeline run's future updates should post into (ZER-662). Called by the Jenny bridge when a run starts from Slack.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    run_id      <str>  [required]                                                                                                                                                                   │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --thread-ts          <str>  Slack message timestamp this run's future updates should post into. [required]                                                                                        │
│    --employer-id        <str>                                                                                                                                                                        │
│    --json                                                                                                                                                                                            │
│    --help                      Show this message and exit.                                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

pipeline status

Usage: zero pipeline status [OPTIONS] {run_id}

 Show one pipeline run.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    run_id      <str>  [required]                                                                                                                                                                   │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>                                                                                                                                                                           │
│ --json                                                                                                                                                                                               │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

pipeline summary

Usage: zero pipeline summary [OPTIONS]

 Show the candidate pipeline across all roles in one call.

 One aggregate read: per-role stage counts plus the authoritative grand
 total. Use this for any "how many candidates do we have" question instead
 of listing jobs and then paging candidates per role -- the per-role reads
 are paginated, and adding them up is what makes the total drift between
 identical questions (ZER-2590).

 Narrow with --client-id and/or --search instead of listing everything and
 filtering yourself -- "the Ashley client's sales manager roles" is
 `--client-id <Ashley's UUID> --search "sales manager"`, still one call.
 Each role also reports `awaiting_decision` (applications nobody has
 hired/rejected yet) alongside its stage breakdown.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --include-closed               Include closed/inactive roles (default: open roles only).                                                                                                             │
│ --client-id             <str>  Limit to one RPO client UUID.                                                                                                                                         │
│ --search                <str>  Filter to roles whose title, description, or location match this text (same as `jobs list --search`) -- e.g. "sales manager". Combine with --client-id to scope to    │
│                                one RPO client's matching roles in a single call.                                                                                                                     │
│ --employer-id           <str>                                                                                                                                                                        │
│ --json                                                                                                                                                                                               │
│ --help                         Show this message and exit.                                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

references

Usage: zero references [OPTIONS] COMMAND [ARGS]...

 Request references from a candidate and see how many have responded.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ request  Ask the candidate to submit their references (with consent).                                                                                                                                │
│ status   Show the reference request, N of M responded, and the AI summary.                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

references request

Usage: zero references request [OPTIONS] {application_id}

 Ask the candidate to submit their references (with consent).

 Emails the candidate a link to a page where they list the role's
 references-per-candidate count of referees and agree to Zero contacting
 them. Referees are contacted only after the candidate submits. Safe to
 repeat: an existing live request is returned unchanged.

 Refused with HTTP 409 (code `reference_request_requires_candidate_contact`)
 if there is no recorded evidence this candidate has ever engaged with us
 -- a deliberate backend guard, not a transient error. No override flag.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    application_id      <str>  Application UUID [required]                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

references status

Usage: zero references status [OPTIONS] {application_id}

 Show the reference request, N of M responded, and the AI summary.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    application_id      <str>  Application UUID [required]                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

results

Usage: zero results [OPTIONS] COMMAND [ARGS]...

 View interview results.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ show    Show interview results and scores for all candidates in a job.                                                                                                                               │
│ detail  Show detailed interview results for a specific candidate.                                                                                                                                    │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

results detail

Usage: zero results detail [OPTIONS] [candidate]

 Show detailed interview results for a specific candidate.

 `--output csv|tsv|ndjson|json` flattens the transcript into rows so
 the detail view is as pipeable as `results show`. CSV/TSV columns
 track `rank` (1-based question index), `name` (candidate),
 `resume_score` (empty for detail rows), `interview_score` (overall score),
 `application_id` — plus extra `question`/`answer`/`question_score` columns
 tacked on the end so you don't lose the text payload.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│   candidate      <str>  Candidate number (1-based) or interview UUID (shows top candidate if omitted)                                                                                                │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --job     -j      <str>  Job UUID (uses current job if omitted)                                                                                                                                      │
│ --json                   Raw JSON output                                                                                                                                                             │
│ --output          <str>  Structured output format: csv | tsv | ndjson | json (flattens answers into rows).                                                                                           │
│ --help                   Show this message and exit.                                                                                                                                                 │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

results show

Usage: zero results show [OPTIONS] [job_id]

 Show interview results and scores for all candidates in a job.

 `--output csv|tsv|ndjson|json` emits a flat, machine-friendly view
 with columns: rank, name, resume_score, interview_score,
 application_id. This is the recommended way to pipe results into a
 spreadsheet or downstream tool.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│   job_id      <str>  Job UUID (uses current job if omitted)                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (auto-detected)                                                                                                                                            │
│ --json                      Raw JSON output                                                                                                                                                          │
│ --output             <str>  Structured output format: csv | tsv | ndjson | json. CSV is the default export format.                                                                                   │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

reviewers

Usage: zero reviewers [OPTIONS] COMMAND [ARGS]...

 Manage client-scoped reviewers (Hiring Managers).

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ list         List accepted and invited reviewers for the caller's employer.                                                                                                                          │
│ remove       Remove a reviewer's membership and job-access grants.                                                                                                                                   │
│ invitations  Pending reviewer invitations.                                                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

reviewers invitations

Usage: zero reviewers invitations [OPTIONS] COMMAND [ARGS]...

 Pending reviewer invitations.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ list    List outstanding reviewer invitations for the caller's employer.                                                                                                                             │
│ send    Invite someone as a client-scoped Hiring Manager.                                                                                                                                            │
│ revoke  Revoke a pending reviewer invitation.                                                                                                                                                        │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

reviewers invitations list

Usage: zero reviewers invitations list [OPTIONS]

 List outstanding reviewer invitations for the caller's employer.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

reviewers invitations revoke

Usage: zero reviewers invitations revoke [OPTIONS] {invitation_id}

 Revoke a pending reviewer invitation.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    invitation_id      <str>  Invitation UUID [required]                                                                                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

reviewers invitations send

Usage: zero reviewers invitations send [OPTIONS]

 Invite someone as a client-scoped Hiring Manager.

 They can review and leave feedback only on jobs under this client, not
 the employer's whole account. 409s if an outstanding invitation for
 this email already exists.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --email         <str>  Email to invite as a Hiring Manager [required]                                                                                                                             │
│ *  --client        <str>  RPO client UUID this reviewer is scoped to [required]                                                                                                                      │
│    --json                 Raw JSON output                                                                                                                                                            │
│    --help                 Show this message and exit.                                                                                                                                                │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

reviewers list

Usage: zero reviewers list [OPTIONS]

 List accepted and invited reviewers for the caller's employer.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --client        <str>  Limit to reviewers scoped to one RPO client UUID.                                                                                                                             │
│ --json                 Raw JSON output                                                                                                                                                               │
│ --help                 Show this message and exit.                                                                                                                                                   │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

reviewers remove

Usage: zero reviewers remove [OPTIONS] {hiring_manager_id}

 Remove a reviewer's membership and job-access grants.

 Does not touch any candidate data or feedback the reviewer already
 left -- only their ability to log in and see jobs going forward.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    hiring_manager_id      <str>  Hiring-manager UUID (from `reviewers list`) [required]                                                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --yes   -y        Skip confirmation                                                                                                                                                                  │
│ --json            Raw JSON output                                                                                                                                                                    │
│ --help            Show this message and exit.                                                                                                                                                        │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

sourcing

Usage: zero sourcing [OPTIONS] COMMAND [ARGS]...

 Search sourced candidates and add them to jobs.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ search           Run a natural-language people search.                                                                                                                                               │
│ status           Show the status of an async sourcing search job.                                                                                                                                    │
│ show             Replay a saved sourcing search.                                                                                                                                                     │
│ add              Add a sourced profile to the current job's applicants list.                                                                                                                         │
│ invite           Promote a shortlisted sourced profile into an AI interview invite.                                                                                                                  │
│ estimate         Estimate how many candidates could be sourced for a role, before it exists.                                                                                                         │
│ shortlist        Legacy alias for adding sourced candidates to jobs.                                                                                                                                 │
│ applicants       Promote sourced candidates into job applicants.                                                                                                                                     │
│ test-candidate   Create safe test sourced candidates.                                                                                                                                                │
│ demo-candidates  Create deterministic fake sourced candidates.                                                                                                                                       │
│ experimental     Experimental paper-mining sourcing (sources researchers from academic papers).                                                                                                      │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

sourcing add

Usage: zero sourcing add [OPTIONS] {profile_id}

 Add a sourced profile to the current job's applicants list.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    profile_id      <str>  Sourced profile UUID. [required]                                                                                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --job          -j      <str>  Job UUID (uses current job if omitted).                                                                                                                                │
│ --employer-id          <str>                                                                                                                                                                         │
│ --json                                                                                                                                                                                               │
│ --help                        Show this message and exit.                                                                                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

sourcing applicants

Usage: zero sourcing applicants [OPTIONS] COMMAND [ARGS]...

 Promote sourced candidates into job applicants.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ add  Add a sourced profile to the current job's applicants list.                                                                                                                                     │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

sourcing applicants add

Usage: zero sourcing applicants add [OPTIONS] {profile_id}

 Add a sourced profile to the current job's applicants list.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    profile_id      <str>  Sourced profile UUID. [required]                                                                                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --job          -j      <str>  Job UUID (uses current job if omitted).                                                                                                                                │
│ --employer-id          <str>                                                                                                                                                                         │
│ --json                                                                                                                                                                                               │
│ --help                        Show this message and exit.                                                                                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

sourcing demo-candidates

Usage: zero sourcing demo-candidates [OPTIONS] COMMAND [ARGS]...

 Create deterministic fake sourced candidates.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ add  Create or reuse the fixed five fake sourced candidates for a job.                                                                                                                               │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

sourcing demo-candidates add

Usage: zero sourcing demo-candidates add [OPTIONS]

 Create or reuse the fixed five fake sourced candidates for a job.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --job          -j      <str>  Job UUID (uses current job if omitted).                                                                                                                                │
│ --employer-id          <str>                                                                                                                                                                         │
│ --json                                                                                                                                                                                               │
│ --help                        Show this message and exit.                                                                                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

sourcing estimate

Usage: zero sourcing estimate [OPTIONS]

 Estimate how many candidates could be sourced for a role, before it exists.

 Count only: no profiles are returned or saved and no job is needed.
 Repeat checks of the same criteria within 24 hours are free; a fresh
 check uses one sourced-profile credit, capped at 50 checks a day.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --title      -t              <str>                   Role title to size the pool for. [required]                                                                                                  │
│    --city                       <str>                   City / locality.                                                                                                                             │
│    --region                     <str>                   State / region.                                                                                                                              │
│    --country                    <str>                   Country.                                                                                                                                     │
│    --remote         --onsite                            Only remote (or only on-site) candidates.                                                                                                    │
│    --seniority                  <str>                   intern, entry, mid, senior, staff, principal, manager, director, vp, c_level.                                                                │
│    --skill                      <str>                   Required skill (repeatable, max 50).                                                                                                         │
│    --min-years                  <int range> [0<=x<=60]  Minimum years of experience.                                                                                                                 │
│    --json                                               Raw JSON output.                                                                                                                             │
│    --help                                               Show this message and exit.                                                                                                                  │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

sourcing experimental

Usage: zero sourcing experimental [OPTIONS] COMMAND [ARGS]...

 Experimental paper-mining sourcing (sources researchers from academic papers).

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ search  Run the experimental paper-mining sourcing pipeline for the linked job.                                                                                                                      │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
Usage: zero sourcing experimental search [OPTIONS] [emphasis]

 Run the experimental paper-mining sourcing pipeline for the linked job.

 Mines recent academic papers relevant to the job's field, ranks the
 authoring researchers by citation velocity, enriches their contact
 details, and adds them as sourced candidates on the job. Experimental:
 contact-data coverage varies by field, unlike standard `sourcing search`.

 The backend runs this asynchronously and returns a search_job_id. Pass
 --wait to poll until the saved search_id is ready.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│   emphasis      <str>  Optional emphasis to sharpen the academic search (the linked job's description is always used).                                                                               │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --job            -j      <str>                         Job UUID (uses current job if omitted).                                                                                                       │
│ --limit                  <int range> [x>=1]            [default: 10]                                                                                                                                 │
│ --wait                                                 Poll until the background search completes.                                                                                                   │
│ --poll-interval          <float range> [0.5<=x<=10.0]  [default: 2.0]                                                                                                                                │
│ --wait-timeout           <float range> [x>=5.0]        Seconds to keep polling with --wait before giving up and returning the search_job_id to poll manually (default 180). Set this below your own  │
│                                                        caller's timeout: the search keeps running either way.                                                                                        │
│ --employer-id            <str>                                                                                                                                                                       │
│ --json                                                                                                                                                                                               │
│ --help                                                 Show this message and exit.                                                                                                                   │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

sourcing invite

Usage: zero sourcing invite [OPTIONS] {shortlist_id}

 Promote a shortlisted sourced profile into an AI interview invite.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    shortlist_id      <str>  Shortlist UUID. [required]                                                                                                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --email                 <str>  [required]                                                                                                                                                         │
│ *  --first-name            <str>  [required]                                                                                                                                                         │
│ *  --last-name             <str>  [required]                                                                                                                                                         │
│    --interview-type        <str>  [default: realtime]                                                                                                                                                │
│    --avatar-id             <str>                                                                                                                                                                     │
│    --employer-id           <str>                                                                                                                                                                     │
│    --json                                                                                                                                                                                            │
│    --help                         Show this message and exit.                                                                                                                                        │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
Usage: zero sourcing search [OPTIONS] {query}

 Run a natural-language people search.

 The backend runs searches asynchronously and returns a search_job_id.
 Pass --wait to poll until the saved search_id is ready, optionally with
 --wait-timeout to cap how long that poll blocks.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    query      <str>  Natural-language candidate search. [required]                                                                                                                                 │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --job                       -j      <str>                         Job UUID (uses current job if omitted).                                                                                            │
│ --limit                             <int range> [x>=1]            [default: 50]                                                                                                                      │
│ --depth                             <str>                         cheap or deep ranking. [default: cheap]                                                                                            │
│ --location                          <str>                         Explicit country, city, or region constraint from the user's request (repeatable; overrides job-derived sourcing location).        │
│ --real                                                            In dev/staging, bypass demo candidates and run a small live provider search.                                                       │
│ --source-more                                                     Continue the latest successful search for the linked job. Use only when the user explicitly asks for more candidates.              │
│ --query-only,--exact-query                                        Use only the provided query for provider filters. Keep the linked job for ranking/attribution, but do not reuse prior source-more  │
│                                                                   filters.                                                                                                                           │
│ --wait                                                            Poll until the background search completes.                                                                                        │
│ --poll-interval                     <float range> [0.5<=x<=10.0]  [default: 2.0]                                                                                                                     │
│ --wait-timeout                      <float range> [x>=5.0]        Seconds to keep polling with --wait before giving up and returning the search_job_id to poll manually (default 180). Set this      │
│                                                                   below your own caller's timeout: the search keeps running either way.                                                              │
│ --employer-id                       <str>                                                                                                                                                            │
│ --json                                                                                                                                                                                               │
│ --help                                                            Show this message and exit.                                                                                                        │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

sourcing shortlist

Usage: zero sourcing shortlist [OPTIONS] COMMAND [ARGS]...

 Legacy alias for adding sourced candidates to jobs.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ add   Legacy alias for adding a sourced profile to applicants.                                                                                                                                       │
│ list  Legacy command removed: use `zero candidates list --source sourced`.                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

sourcing shortlist add

Usage: zero sourcing shortlist add [OPTIONS] {profile_id}

 Legacy alias for adding a sourced profile to applicants.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    profile_id      <str>  Sourced profile UUID. [required]                                                                                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --job          -j      <str>  Job UUID (uses current job if omitted).                                                                                                                                │
│ --employer-id          <str>                                                                                                                                                                         │
│ --json                                                                                                                                                                                               │
│ --help                        Show this message and exit.                                                                                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

sourcing shortlist list

Usage: zero sourcing shortlist list [OPTIONS]

 Legacy command removed: use `zero candidates list --source sourced`.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --job          -j      <str>                    Job UUID (uses current job if omitted).                                                                                                              │
│ --status               <str>                                                                                                                                                                         │
│ --limit                <int range> [1<=x<=500]  [default: 100]                                                                                                                                       │
│ --employer-id          <str>                                                                                                                                                                         │
│ --json                                                                                                                                                                                               │
│ --help                                          Show this message and exit.                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

sourcing show

Usage: zero sourcing show [OPTIONS] {search_id}

 Replay a saved sourcing search.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    search_id      <str>  [required]                                                                                                                                                                │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>                                                                                                                                                                           │
│ --json                                                                                                                                                                                               │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

sourcing status

Usage: zero sourcing status [OPTIONS] {search_job_id}

 Show the status of an async sourcing search job.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    search_job_id      <str>  [required]                                                                                                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>                                                                                                                                                                           │
│ --json                                                                                                                                                                                               │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

sourcing test-candidate

Usage: zero sourcing test-candidate [OPTIONS] COMMAND [ARGS]...

 Create safe test sourced candidates.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ add  Create or reuse a sourced-style test candidate for a job.                                                                                                                                       │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

sourcing test-candidate add

Usage: zero sourcing test-candidate add [OPTIONS]

 Create or reuse a sourced-style test candidate for a job.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│    --job              -j      <str>  Job UUID (uses current job if omitted).                                                                                                                         │
│ *  --email                    <str>  Safe test candidate email [required]                                                                                                                            │
│ *  --phone                    <str>  Safe test candidate phone [required]                                                                                                                            │
│    --first-name               <str>  First name [default: Jenny]                                                                                                                                     │
│    --last-name                <str>  Last name [default: Outreach Test Candidate]                                                                                                                    │
│    --current-title            <str>  Current title [default: Junior Sales Representative]                                                                                                            │
│    --current-company          <str>  Current company [default: Demo Candidate Co]                                                                                                                    │
│    --location                 <str>  Candidate location [default: Remote]                                                                                                                            │
│    --employer-id              <str>                                                                                                                                                                  │
│    --json                                                                                                                                                                                            │
│    --help                            Show this message and exit.                                                                                                                                     │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

status

Usage: zero status [OPTIONS] COMMAND [ARGS]...

 Check your jobs and pipeline.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ show  Show all your jobs with applicant counts and progress.                                                                                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

status show

Usage: zero status show [OPTIONS]

 Show all your jobs with applicant counts and progress.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (auto-detected)                                                                                                                                            │
│ --active-only               Drop inactive rows. Does NOT restrict to jobs you created; use --mine for that.                                                                                          │
│ --mine                      Show only jobs you created. Requires the backend to expose `created_by_user_id` (ZER-563); if it doesn't, a warning is printed to stderr and all employer jobs are       │
│                             shown.                                                                                                                                                                   │
│ --tag                <str>  Filter to jobs tagged [<name>] in the title (case-insensitive).                                                                                                          │
│ --since              <str>  ISO date (e.g. 2026-04-01). Keep jobs created on/after this date.                                                                                                        │
│ --search             <str>  Case-insensitive substring match on job title.                                                                                                                           │
│ --sort               <str>  Sort by: created, title, applicants, status.                                                                                                                             │
│ --order              <str>  Sort direction: asc, desc. Only used with --sort. [default: desc]                                                                                                        │
│ --json                      Raw JSON output                                                                                                                                                          │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

team

Usage: zero team [OPTIONS] COMMAND [ARGS]...

 Manage team members.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ list                List team members for an employer.                                                                                                                                               │
│ add                 Backward-compatible alias for ``team invite``.                                                                                                                                   │
│ invite              Send a team invitation email.                                                                                                                                                    │
│ remove              Remove a team member from an employer.                                                                                                                                           │
│ member-add          Add an existing Zero user directly to your team -- no invitation email.                                                                                                          │
│ set-role            Promote a team member to co-owner, or demote them back to member.                                                                                                                │
│ set-billing-access  Turn a team member's billing access on or off. Owner-only (ZER-3820).                                                                                                            │
│ billing-activity    Billing changes made by non-owners, newest first. Owner-only (ZER-3820).                                                                                                         │
│ my-employers        List the employer(s) your Zero account is associated with.                                                                                                                       │
│ invitations         Pending team invitations.                                                                                                                                                        │
│ join-requests       Requests to join your team by verified email domain.                                                                                                                             │
│ join-setting        Whether people on your company's verified email domain may ask to join.                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

team add

Usage: zero team add [OPTIONS]

 Backward-compatible alias for ``team invite``.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --email              <str>  Email of user to add [required]                                                                                                                                       │
│    --employer-id        <str>  Deprecated; invitations use the employer bound to your login.                                                                                                         │
│    --json                      Raw JSON output                                                                                                                                                       │
│    --help                      Show this message and exit.                                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

team billing-activity

Usage: zero team billing-activity [OPTIONS]

 Billing changes made by non-owners, newest first. Owner-only (ZER-3820).

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (auto-detected from login)                                                                                                                                 │
│ --limit              <int>  Max rows to return (1-500). [default: 100]                                                                                                                               │
│ --json                      Raw JSON output                                                                                                                                                          │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

team invitations

Usage: zero team invitations [OPTIONS] COMMAND [ARGS]...

 Pending team invitations.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ list    List outstanding invitations for your employer.                                                                                                                                              │
│ resend  Re-send a pending invitation with a fresh link. Owner-only.                                                                                                                                  │
│ revoke  Revoke a pending invitation.                                                                                                                                                                 │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

team invitations list

Usage: zero team invitations list [OPTIONS]

 List outstanding invitations for your employer.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

team invitations resend

Usage: zero team invitations resend [OPTIONS] {invitation_id}

 Re-send a pending invitation with a fresh link. Owner-only.

 The previous link stops working, so a forwarded copy of the earlier
 email can't be redeemed after a visible re-issue. 409s once the
 invitation has been accepted or revoked.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    invitation_id      <str>  Invitation UUID [required]                                                                                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

team invitations revoke

Usage: zero team invitations revoke [OPTIONS] {invitation_id}

 Revoke a pending invitation.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    invitation_id      <str>  Invitation UUID [required]                                                                                                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

team invite

Usage: zero team invite [OPTIONS]

 Send a team invitation email.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --email              <str>  Email of user to invite [required]                                                                                                                                    │
│    --employer-id        <str>  Target employer UUID (ZER-1185). Defaults to your own employer when omitted. Only an allowlisted demo-admin may target a different employer, and only when it's       │
│                                flagged is_demo=true (e.g. inviting a presenter to a demo org created via `demo account`/MCP) -- anyone else passing a non-own employer gets a 403 from the backend.  │
│    --json                      Raw JSON output                                                                                                                                                       │
│    --help                      Show this message and exit.                                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

team join-requests

Usage: zero team join-requests [OPTIONS] COMMAND [ARGS]...

 Requests to join your team by verified email domain.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ list     List pending requests to join your team. Owners/admins only.                                                                                                                                │
│ approve  Approve a pending join request. The requester becomes a team member.                                                                                                                        │
│ decline  Decline a pending join request. The requester may create their own account instead.                                                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

team join-requests approve

Usage: zero team join-requests approve [OPTIONS] {request_id}

 Approve a pending join request. The requester becomes a team member.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    request_id      <str>  Join-request UUID [required]                                                                                                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

team join-requests decline

Usage: zero team join-requests decline [OPTIONS] {request_id}

 Decline a pending join request. The requester may create their own account instead.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    request_id      <str>  Join-request UUID [required]                                                                                                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

team join-requests list

Usage: zero team join-requests list [OPTIONS]

 List pending requests to join your team. Owners/admins only.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

team join-setting

Usage: zero team join-setting [OPTIONS] COMMAND [ARGS]...

 Whether people on your company's verified email domain may ask to join.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ show  Show whether 'ask to join with a verified email' is on for your team.                                                                                                                          │
│ set   Turn 'ask to join with a verified email' on or off. Owners/admins only.                                                                                                                        │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

team join-setting set

Usage: zero team join-setting set [OPTIONS]

 Turn 'ask to join with a verified email' on or off. Owners/admins only.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --on      --off      Turn 'ask to join with a verified email' on or off. [required]                                                                                                               │
│    --json               Raw JSON output                                                                                                                                                              │
│    --help               Show this message and exit.                                                                                                                                                  │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

team join-setting show

Usage: zero team join-setting show [OPTIONS]

 Show whether 'ask to join with a verified email' is on for your team.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

team list

Usage: zero team list [OPTIONS]

 List team members for an employer.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (auto-detected from login)                                                                                                                                 │
│ --json                      Raw JSON output                                                                                                                                                          │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

team member-add

Usage: zero team member-add [OPTIONS]

 Add an existing Zero user directly to your team -- no invitation email.

 The email must already belong to a Zero user account; for anyone who
 does not yet have one, use `team invite` instead (sends an email with a
 signup/accept link). 409s if they are already a member of this employer.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --email              <str>  Email of an EXISTING Zero user to add directly. [required]                                                                                                            │
│    --employer-id        <str>  Employer UUID (auto-detected from login)                                                                                                                              │
│    --json                      Raw JSON output                                                                                                                                                       │
│    --help                      Show this message and exit.                                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

team my-employers

Usage: zero team my-employers [OPTIONS]

 List the employer(s) your Zero account is associated with.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

team remove

Usage: zero team remove [OPTIONS] {user_id}

 Remove a team member from an employer.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    user_id      <str>  User UUID to remove [required]                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --employer-id        <str>  Employer UUID (auto-detected from login)                                                                                                                                 │
│ --json                      Raw JSON output                                                                                                                                                          │
│ --help                      Show this message and exit.                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

team set-billing-access

Usage: zero team set-billing-access [OPTIONS] {user_id}

 Turn a team member's billing access on or off. Owner-only (ZER-3820).

 400s if the target is an owner -- owners always have billing access.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    user_id      <str>  User UUID (from `team list`) [required]                                                                                                                                     │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --on             --off           Grant or revoke this member's billing access. [required]                                                                                                         │
│    --employer-id             <str>  Employer UUID the membership belongs to (auto-detected from login)                                                                                               │
│    --json                           Raw JSON output                                                                                                                                                  │
│    --help                           Show this message and exit.                                                                                                                                      │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

team set-role

Usage: zero team set-role [OPTIONS] {user_id}

 Promote a team member to co-owner, or demote them back to member.

 Owner-only (ZER-3312). The target's primary ownership (if any) is not
 revoked by this -- it 400s instead; a change that would leave the
 employer with no owner 409s.

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *    user_id      <str>  User UUID (from `team list`) [required]                                                                                                                                     │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --role               <str>  'owner' or 'member'. [required]                                                                                                                                       │
│    --employer-id        <str>  Employer UUID the membership belongs to (auto-detected from login)                                                                                                    │
│    --json                      Raw JSON output                                                                                                                                                       │
│    --help                      Show this message and exit.                                                                                                                                           │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

update

Usage: zero update [OPTIONS]

 Download the latest standalone CLI binary into ~/.zerohiring/bin/zero.

 Re-run this after releases to replace stale PyInstaller installs. Also
 removes broken legacy ``zerohiring`` pip shims that shadow the real CLI.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --force          Re-download the latest binary even if the running version matches.                                                                                                                  │
│ --json           Emit machine-readable JSON.                                                                                                                                                         │
│ --help           Show this message and exit.                                                                                                                                                         │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

whoami

Usage: zero whoami [OPTIONS]

 Show current login status.

 Hits the backend `/api/cli-auth/whoami` endpoint so the answer reflects
 the *actual* identity of the stored token — not whatever got cached in
 the local config file. This matters because a stale `employer_id` in
 `~/.zerohiring/config.json` previously made it look like the CLI was
 acting on one account while actually hitting another.

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --json          Raw JSON output                                                                                                                                                                      │
│ --help          Show this message and exit.                                                                                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯