CLI reference

Every command of the exponential command-line tool, generated from the CLI itself, with how to install it and sign in

The exponential command-line tool gives you, your scripts and your agents the same objects the app has: actions, projects, goals and OKRs, meetings, decisions, products, tickets, features, epics, pages, CRM contacts, deals and time entries. Every command prints readable output in a terminal and JSON when piped or given --json, so it works as well inside an agent's shell as in yours.

Where to find it

The tool is the exponential-cli package on npm; its source is at github.com/positonic/exponential-cli. It talks to whatever installation you point it at.

How to install and sign in

  1. Install it globally:

    npm install -g exponential-cli
  2. Create a JWT Token under Settings → API keys (see API tokens). An external agent uses its own exp_agent_ key instead, and everything it does is attributed to the agent.

  3. Sign in, naming the address you open Exponential at:

    exponential auth login --token <your token> --api-url https://<your-exponential-host>
  4. Check it worked:

    exponential auth status

Credentials are stored in your home directory. exponential auth logout removes them.

How to read this reference

  • Every command group is a section below; every subcommand shows its usage line, arguments and options. The tables are generated from the CLI's own definitions, so they match the version named at the top of the reference.
  • Most list and create commands take --workspace <slug|id>; product-scoped commands (tickets, features) take --product <slug|id> and need --workspace when the product is given by slug. Ids are CUIDs; a ticket can also be addressed by its short id.
  • Add --json (or pipe the output) for machine-readable output.

How it connects

  • API tokens — the key the CLI signs in with: API tokens.
  • External agents — agent-owned keys and attribution: External agents.
  • Time tracking — worked examples of time log, time list and time confirm: Time tracking.

FAQ

The reference is behind the CLI I installed. Run npm install -g exponential-cli@latest; the version this page was generated from is stated at the top of the reference. To regenerate the page, run npm run docs:cli in the Exponential repository with EXPONENTIAL_CLI_DIR pointing at a CLI checkout.

Can I use it against a self-hosted installation? Yes. Pass that installation's address to --api-url when you sign in.

Commands

<!-- AUTO-GENERATED: everything below is written by scripts/generate-cli-docs.ts — do not edit by hand -->

Generated from exponential-cli 1.18.1.

CommandWhat it does
authAuthentication commands
actionsManage actions/tasks
contactsManage CRM contacts
decisionsLog and manage decisions and open questions (the workspace Decision Log).
dealsManage pipeline deals
epicsManage epics. Epics are workspace-scoped and group actions and tickets across products.
featuresManage features. A feature lives under a product and groups user stories, scopes, and tickets.
labelsManage labels (orthogonal tags applied to actions, tickets, features, and epics).
meetingsManage meetings and their notes (recorded, imported, or manually created)
organizationsManage CRM organizations
pagesManage Knowledge pages (PRDs, research, technical specs). Link one to a feature with "features link-page".
productsManage products. A workspace contains products; a product holds features and tickets.
projectsManage projects
searchGlobal search across projects, actions, goals, workspaces and more — same coverage as the app's Cmd+K palette
ticketsManage product backlog tickets. Tickets live under a product, link to features/epics, depend on each other, and can be implemented via actions.
timeTime entries — log the day's work and list it. Run with an external-agent key, the entry belongs to the agent's OWNER and is always PROPOSED; a personal token logs your own time, CONFIRMED by default.
workspacesManage workspaces
goalsManage goals (objectives) and their key results. Objectives have integer ids; key results are CUIDs.
okrsOKRs — objectives with their key results nested. Manage the parts with goals and goals kr.

auth

Authentication commands

auth login

Configure CLI with your API token

exponential auth login [options]
OptionDescription
--token <token>JWT token from /settings/api-keys
--api-url <url>API URL (e.g., https://www.exponential.im)

auth logout

Remove stored credentials

exponential auth logout [options]

auth whoami

Show who the stored token signs in as: the account's name and id, whether it is an external agent (and who owns it), the API URL and the number of workspaces it can see. Run this first when a command returns FORBIDDEN — the account it names is the one to grant access to.

exponential auth whoami [options]

auth show

Print parts of the current credentials. Use --token to print the raw JWT (for piping into other tools, e.g. gh secret set EXPONENTIAL_TOKEN < <(exponential auth show --token)).

exponential auth show [options]
OptionDescription
--tokenPrint the raw JWT to stdout with no trailing newline

auth status

Show detailed authentication status

exponential auth status [options]

actions

Manage actions/tasks

actions list

List all actions

exponential actions list [options]
OptionDescription
--project <id>Filter by project ID
--status <status>Filter by kanban status (BACKLOG, TODO, IN_PROGRESS, IN_REVIEW, DONE)
--assignee <id>Filter by assignee ID

actions today

What's on your plate: overdue, today, and inbox

exponential actions today [options]
OptionDescription
--workspace <id>Filter by workspace ID
--due-onlyOnly actions whose dueDate is today (the pre-1.8 shape — excludes overdue)

actions overdue

Why the overdue pile is that size: bulk-created cohorts vs real debt

exponential actions overdue [options]
OptionDescription
--workspace <id>Filter by workspace ID

actions defer

Amnesty: clear dates so actions fall back to their project backlog untimed

exponential actions defer [options]
OptionDescription
--ids <ids>Comma-separated action IDs

actions reschedule

Move actions to a new do-date (use "actions defer" if they were never really due)

exponential actions reschedule [options]
OptionDescription
--ids <ids>Comma-separated action IDs
--to <date>New do-date (YYYY-MM-DD, or "today")

actions range

Get actions by date range

exponential actions range [options]
OptionDescription
--start <date>Start date (YYYY-MM-DD)
--end <date>End date (YYYY-MM-DD)
--workspace <id>Filter by workspace ID

actions kanban

Get kanban board actions

exponential actions kanban [options]
OptionDescription
--project <id>Filter by project ID
--status <status>Filter by kanban status
--assignee <id>Filter by assignee ID

actions update

Update an existing action

exponential actions update [options]
OptionDescription
--id <id>Action ID to update
-n, --name <name>New action name
-d, --description <text>New description
-p, --project <id>Move to project ID
--priority <priority>Priority (Quick, Scheduled, 1st Priority, etc.)
--status <status>Status (ACTIVE, COMPLETED, CANCELLED)
--kanban <status>Kanban status (BACKLOG, TODO, IN_PROGRESS, IN_REVIEW, DONE)
--due <date>Due date (YYYY-MM-DD or "null" to clear)
--scheduled-start <datetime>Do-date: when you plan to work on it (YYYY-MM-DD, ISO datetime, or "null" to clear). This is what /today partitions on.
--scheduled-end <datetime>End of the time block (YYYY-MM-DD, ISO datetime, or "null" to clear)

actions create

Create a new action

exponential actions create [options]
OptionDescription
-n, --name <name>Action name/title
-d, --description <text>Action description
-p, --project <id>Project ID to assign the action to
--priority <priority>Priority (Quick, Scheduled, 1st Priority, etc.)
--due <date>Due date (YYYY-MM-DD)
--effort <minutes>Effort estimate in minutes
--ticket <id>Link action to a product ticket (CUID) after creation
--epic <id>Epic CUID to attach the action to

actions upsert

One Action per external source: find by (--workspace, --source-type, --source-id), refresh its title and links, else create it. The Daily worklog uses --source-type claude-session --source-id <conversation id>.

exponential actions upsert [options]
OptionDescription
--source-type <type>e.g. claude-session
--source-id <id>The source's own id; the same pair always maps to the same Action
-t, --title <title>Action title (refreshed on every call)
-w, --workspace <slug|id>Workspace (defaults to your default workspace)
-d, --description <text>Description
--project <id>Link to a project CUID in the same workspace
--ticket <id>Link to a ticket CUID whose product is in the same workspace

actions comment

Manage comments on an action

actions comment list

List comments on an action

exponential actions comment list [options]
OptionDescription
--id <id>Action ID

actions comment add

Add a comment to an action

exponential actions comment add [options]
OptionDescription
--id <id>Action ID
-m, --message <text>Comment content (markdown supported)

actions comment update

Update one of your own comments

exponential actions comment update [options]
OptionDescription
--comment-id <id>Comment ID
-m, --message <text>New comment content

actions comment delete

Delete one of your own comments

exponential actions comment delete [options]
OptionDescription
--comment-id <id>Comment ID

contacts

Manage CRM contacts

contacts list

List contacts

exponential contacts list [options]
OptionDescription
--workspace <id>Workspace ID
--search <query>Search by name or email
--tags <tags>Filter by tags (comma-separated)
--organization <id>Filter by organization ID
--limit <n>Max results to return
--cursor <cursor>Pagination cursor

contacts get

Get a contact by ID

exponential contacts get [options] <id>
ArgumentRequiredDescription
idyesContact ID
OptionDescription
--interactionsInclude interaction history

contacts create

Create a new contact

exponential contacts create [options]
OptionDescription
--workspace <id>Workspace ID
--first-name <name>First name
--last-name <name>Last name
--email <email>Email address
--phone <phone>Phone number
--linkedin <url>LinkedIn URL
--telegram <handle>Telegram handle
--twitter <handle>Twitter/X handle
--github <handle>GitHub username
--bluesky <handle>Bluesky handle
--about <text>About / bio
--profile-type <type>Profile type
--skills <skills>Skills (comma-separated)
--tags <tags>Tags (comma-separated)
--organization <id>Organization ID
--organization-name <name>Organization name (find-or-create; ignored if --organization is set)

contacts update

Update an existing contact

exponential contacts update [options]
OptionDescription
--id <id>Contact ID
--first-name <name>First name
--last-name <name>Last name
--email <email>Email (use "null" to clear)
--phone <phone>Phone (use "null" to clear)
--linkedin <url>LinkedIn URL (use "null" to clear)
--telegram <handle>Telegram handle (use "null" to clear)
--twitter <handle>Twitter/X handle (use "null" to clear)
--github <handle>GitHub username (use "null" to clear)
--bluesky <handle>Bluesky handle (use "null" to clear)
--about <text>About / bio
--profile-type <type>Profile type
--skills <skills>Skills (comma-separated)
--tags <tags>Tags (comma-separated)
--organization <id>Organization ID (use "null" to clear)
--organization-name <name>Organization name (find-or-create; ignored if --organization is set)

contacts delete

Delete a contact

exponential contacts delete [options] <id>
ArgumentRequiredDescription
idyesContact ID

contacts add-interaction

Add an interaction to a contact

exponential contacts add-interaction [options]
OptionDescription
--contact <id>Contact ID
--type <type>Interaction type (EMAIL, TELEGRAM, PHONE_CALL, MEETING, NOTE, LINKEDIN, OTHER)
--direction <dir>Direction (INBOUND, OUTBOUND)
--subject <text>Subject line
--notes <text>Notes

contacts enrich

Queue a web-search enrichment job for an existing contact (runs regardless of the workspace auto-enrich setting)

exponential contacts enrich [options] <id>
ArgumentRequiredDescription
idyesContact ID

decisions

Log and manage decisions and open questions (the workspace Decision Log).

An OPEN QUESTION is a decision with --status OPEN — there is no separate model, and that is exactly what a meeting's "Open questions" panel shows.

Statuses: OPEN (an open question) · PROPOSED · ACCEPTED · SUPERSEDED · DEPRECATED. SUPERSEDED and DEPRECATED are reached with "decisions status", never at creation.

decisions list

List decisions, newest decided first. Pass --status OPEN for open questions only. An OPEN QUESTION is a decision with --status OPEN — there is no separate model, and that is exactly what a meeting's "Open questions" panel shows.

exponential decisions list [options]
OptionDescription
--workspace <slug|id>Workspace (defaults to your default workspace)
--meeting <id>One meeting's decisions and open questions (includes drafts if you can edit it)
--status <status>Filter by status (repeatable): OPEN, PROPOSED, ACCEPTED, SUPERSEDED, DEPRECATED
--source <source>Filter by source (repeatable): MEETING, MANUAL, AGENT
--product <slug|id>Filter by product, or "workspace" for decisions with no product
--include-workspace-wideWith --product: also include decisions that have no product
--project <id>Filter by project CUID
--search <text>Free-text over statement and body
--number <n>One decision by its workspace sequence number (D-0003 is 3)
--limit <n>Cap the rows returned (1-500)
--adr <id>Decisions formalised as this ADR document

decisions get

Show one decision in full: body, evidence, deciders, chain and links

exponential decisions get [options] <id>
ArgumentRequiredDescription
idyes
OptionDescription
--workspace <slug|id>Workspace (defaults to your default workspace)

decisions create

Log a decision, or an open question with --status OPEN. An OPEN QUESTION is a decision with --status OPEN — there is no separate model, and that is exactly what a meeting's "Open questions" panel shows. Bodies are Markdown: use --body-file <path> (or - for stdin) rather than a shell argument. Bulk: --from-file <path|-> takes a JSON array of decisions; the other flags become its defaults.

exponential decisions create [options]
OptionDescription
-s, --statement <text>The decision, or the open question (max 500 chars)
-b, --body <markdown>Markdown detail: context, alternatives, consequences
--body-file <path>Read the body from a file ("-" = stdin)
--status <status>OPEN (open question), PROPOSED (default) or ACCEPTED
--source <source>MEETING, MANUAL or AGENT
--meeting <id>Meeting (transcriptionSessionId) this came out of — needs edit access to it
--workspace <slug|id>Workspace (defaults to your default workspace)
--product <slug|id>Link to a product
--project <id>Link to a project CUID
--goal <id>Link to a goal (integer id)
--key-result <id>Link to a key result CUID
--occurrence <id>Link to a ceremony occurrence CUID
--decided-at <iso>When it was decided (e.g. 2026-09-10T14:00)
--owner <userId>Owner user ID
--decider <"Name <email>">Someone who made the decision (repeatable); external people need no account
--evidence-file <path>JSON array of {turnIndex, text} transcript quotes ("-" = stdin). Needs --meeting: the server checks every quote against that transcript and silently drops the ones that do not match.
--from-file <path>Bulk create from a JSON array of decisions ("-" = stdin)

decisions update

Update a decision's content and scope; only the fields you pass are written. Status changes go through "decisions status".

exponential decisions update [options]
OptionDescription
--id <id>Decision CUID
--workspace <slug|id>Workspace (defaults to your default workspace)
-s, --statement <text>New statement
-b, --body <markdown>New Markdown body (or "null" to clear)
--body-file <path>Read the new body from a file ("-" = stdin)
--decided-at <iso>When it was decided (or "null" to clear)
--owner <userId>Owner user ID (or "null" to clear)
--product <slug|id>Product (or "null" to detach)
--project <id>Project CUID (or "null" to detach)
--goal <id>Goal integer id (or "null" to detach)
--key-result <id>Key result CUID (or "null" to detach)
--adr <id>ADR document CUID (or "null" to detach)

decisions status

Move a decision through its lifecycle — including answering an open question by moving it from OPEN to ACCEPTED.

exponential decisions status [options]
OptionDescription
--id <id>Decision CUID
--status <status>OPEN, PROPOSED, ACCEPTED, SUPERSEDED or DEPRECATED
--superseded-by <id>The decision that replaced this one (with --status SUPERSEDED)
--workspace <slug|id>Workspace (defaults to your default workspace)

Record what implements a decision: a ticket or a feature. Idempotent.

exponential decisions link [options]
OptionDescription
--id <id>Decision CUID
--ticket <id>Ticket CUID
--feature <id>Feature CUID
--workspace <slug|id>Workspace (defaults to your default workspace)

Remove one "implemented by" link. Takes the LINK id (shown by "decisions get"), not the ticket or feature id.

exponential decisions unlink [options]
OptionDescription
--link <id>DecisionLink CUID
--workspace <slug|id>Workspace (defaults to your default workspace)

decisions draft

Review decisions an agent proposed but nobody has confirmed yet (visible only on their source meeting)

decisions draft extract

Propose draft decisions from a meeting's notes and transcript, for someone to confirm. Idempotent: existing drafts are returned rather than regenerated, and a meeting that already has confirmed decisions is left alone.

exponential decisions draft extract [options]
OptionDescription
--meeting <id>Meeting CUID (transcriptionSessionId)

decisions draft confirm

Publish a draft decision into the log

exponential decisions draft confirm [options]
OptionDescription
--id <id>Decision CUID
--workspace <slug|id>Workspace (defaults to your default workspace)

decisions draft reject

Reject a draft. A confirmed decision is never rejected — deprecate or supersede it with "decisions status".

exponential decisions draft reject [options]
OptionDescription
--id <id>Decision CUID
--workspace <slug|id>Workspace (defaults to your default workspace)

decisions draft delete

Permanently delete a draft or rejected decision. Confirmed decisions are never deleted.

exponential decisions draft delete [options]
OptionDescription
--id <id>Decision CUID
--workspace <slug|id>Workspace (defaults to your default workspace)

deals

Manage pipeline deals

deals pipeline

Get pipeline overview with stages

exponential deals pipeline [options]
OptionDescription
--workspace <id>Workspace ID

deals stages

List pipeline stages

exponential deals stages [options]
OptionDescription
--workspace <id>Workspace ID

deals list

List all deals

exponential deals list [options]
OptionDescription
--workspace <id>Workspace ID

deals get

Get a deal by ID

exponential deals get [options] <id>
ArgumentRequiredDescription
idyesDeal ID

deals create

Create a new deal

exponential deals create [options]
OptionDescription
--workspace <id>Workspace ID
--stage <id>Pipeline stage ID
--title <title>Deal title
--description <text>Deal description
--value <amount>Deal value
--currency <code>Currency code (default: USD)
--probability <pct>Win probability (0-100)
--close-date <date>Expected close date (YYYY-MM-DD)
--contact <id>Contact ID
--organization <id>Organization ID
--assigned-to <id>Assigned user ID

deals update

Update an existing deal

exponential deals update [options]
OptionDescription
--id <id>Deal ID
--title <title>Deal title
--description <text>Description (use "null" to clear)
--value <amount>Deal value (use "null" to clear)
--currency <code>Currency code
--probability <pct>Win probability (use "null" to clear)
--close-date <date>Expected close date (YYYY-MM-DD or "null" to clear)
--contact <id>Contact ID (use "null" to clear)
--organization <id>Organization ID (use "null" to clear)
--assigned-to <id>Assigned user ID (use "null" to clear)

deals move

Move a deal to a different stage

exponential deals move [options]
OptionDescription
--id <id>Deal ID
--stage <id>Target stage ID
--order <n>Position within stage (default: 0)

deals delete

Delete a deal

exponential deals delete [options] <id>
ArgumentRequiredDescription
idyesDeal ID

epics

Manage epics. Epics are workspace-scoped and group actions and tickets across products.

epics list

List epics in a workspace

exponential epics list [options]
OptionDescription
--workspace <slug|id>Workspace slug or CUID
--status <status>Filter by status: OPEN, IN_PROGRESS, DONE, CANCELLED

epics get

Get an epic by CUID

exponential epics get [options] <id>
ArgumentRequiredDescription
idyes

epics create

Create a new epic in a workspace

exponential epics create [options]
OptionDescription
-n, --name <name>Epic name
-d, --description <text>Description
--priority <priority>Priority: HIGH, MEDIUM, LOW, NONE
--start <date>Start date (YYYY-MM-DD)
--target <date>Target date (YYYY-MM-DD)
--workspace <slug|id>Workspace slug or CUID

epics update

Update an existing epic

exponential epics update [options]
OptionDescription
--id <id>Epic CUID
-n, --name <name>New name
-d, --description <text>New description (or "null" to clear)
--status <status>Status: OPEN, IN_PROGRESS, DONE, CANCELLED
--priority <priority>Priority: HIGH, MEDIUM, LOW, NONE
--start <date>Start date (YYYY-MM-DD or "null")
--target <date>Target date (YYYY-MM-DD or "null")

features

Manage features. A feature lives under a product and groups user stories, scopes, and tickets.

features list

List features in a product

exponential features list [options]
OptionDescription
--product <slug|id>Product slug or CUID
--workspace <slug|id>Workspace (required when --product is a slug)
--status <status>Filter by status: IDEA, DEFINED, IN_PROGRESS, SHIPPED, DEPRECATED, ARCHIVED

features get

Get a feature by CUID

exponential features get [options] <id>
ArgumentRequiredDescription
idyes

features create

Create a new feature in a product

exponential features create [options]
OptionDescription
--product <slug|id>Product slug or CUID
-n, --name <name>Feature name
-d, --description <text>Description (markdown supported)
--vision <text>Vision / target outcome
--status <status>Status: IDEA, DEFINED, IN_PROGRESS, SHIPPED, DEPRECATED, ARCHIVED
--priority <n>Priority 0-4 (lower = higher)
--effort <n>Effort estimate
--area <id>Area CUID (per-product bucket) to file the feature under
--workspace <slug|id>Workspace (required when --product is a slug)

features update

Update an existing feature

exponential features update [options]
OptionDescription
--id <id>Feature CUID
-n, --name <name>New name
-d, --description <text>New description
--vision <text>New vision text
--status <status>Status: IDEA, DEFINED, IN_PROGRESS, SHIPPED, DEPRECATED, ARCHIVED
--priority <n>Priority 0-4
--effort <n>Effort estimate
--area <id>Area CUID ("none" to clear)
--goal <id|none>Objective (goal) id this feature serves ("none" to clear). For progress rollup, link the finer Feature→key-result edge with goals kr link --feature.

features delete

Delete a feature. Refuses if it still has tickets — deleting a feature does not delete its tickets, it unlinks them (Ticket.featureId is SetNull), silently orphaning them in the product backlog.

exponential features delete [options] <id>
ArgumentRequiredDescription
idyes
OptionDescription
--with-ticketsDelete the feature's tickets first, then the feature (destructive)
--orphan-ticketsDelete the feature anyway, leaving its tickets in the backlog unlinked

Link a Knowledge page (PRD, spec, research) to a feature

exponential features link-page [options]
OptionDescription
--feature <id>Feature CUID
--page <id>Page CUID
--scope <id>Feature scope CUID to pin the page to

Unlink a Knowledge page from a feature

exponential features unlink-page [options]
OptionDescription
--feature <id>Feature CUID
--page <id>Page CUID

features stories

Manage a feature's native, structured user stories (As a / I want / So that).

features stories add

Add user stories to a feature.

Flag mode: pass --as-a/--i-want/--so-that (plus optional --acceptance/--scope) to add one story. Batch mode: pipe a JSON array of { asA?, iWant?, soThat?, acceptanceCriteria?, scopeId? } on stdin to add many at once (per-item success/failure is reported).

exponential features stories add [options]
OptionDescription
--feature <id>Feature CUID
--as-a <text>"As a ..." actor
--i-want <text>"I want ..." capability
--so-that <text>"So that ..." outcome
--acceptance <text>Acceptance criteria
--scope <id>Feature scope CUID to group the story under

features stories list

List a feature's user stories in display order

exponential features stories list [options]
OptionDescription
--feature <id>Feature CUID

features scopes

Manage a feature's scopes: shippable increments ("V1", "V2"), each with its own lifecycle.

features scopes list

List a feature's scopes

exponential features scopes list [options]
OptionDescription
--feature <id>Feature CUID

features scopes add

Add a scope to a feature

exponential features scopes add [options]
OptionDescription
--feature <id>Feature CUID
--version <label>Short label for the increment, e.g. "V1"
-d, --description <text>What this scope delivers (markdown supported)
--status <status>Status: PLANNED, IN_PROGRESS, SHIPPED, DEPRECATED (default PLANNED)

features scopes update

Update a scope (setting SHIPPED stamps shippedAt and rolls the feature status up)

exponential features scopes update [options]
OptionDescription
--id <id>Scope CUID
--version <label>New version label
-d, --description <text>New description
--status <status>Status: PLANNED, IN_PROGRESS, SHIPPED, DEPRECATED

features scopes rm

Delete a scope

exponential features scopes rm [options]
OptionDescription
--id <id>Scope CUID

features requirements

Manage a feature's requirements: atomic, testable EARS-style "shall" statements, checkable met/unmet.

features requirements add

Add requirements to a feature.

Flag mode: pass -s/--statement (plus optional --kind/--scope) to add one requirement. Batch mode: pipe a JSON array of { statement, kind?, scopeId? } on stdin to add many at once (per-item success/failure is reported).

exponential features requirements add [options]
OptionDescription
--feature <id>Feature CUID
-s, --statement <text>One EARS-style "shall" statement
--kind <kind>Kind: FUNCTIONAL, NON_FUNCTIONAL, CONSTRAINT
--scope <id>Feature scope CUID to pin the requirement to

features requirements list

List a feature's requirements

exponential features requirements list [options]
OptionDescription
--feature <id>Feature CUID
--scope <id>Only requirements pinned to this scope

features requirements check

Mark a requirement met (or unmet with --unmet)

exponential features requirements check [options]
OptionDescription
--id <id>Requirement CUID
--unmetMark unmet instead of met

features requirements rm

Delete a requirement

exponential features requirements rm [options]
OptionDescription
--id <id>Requirement CUID

features areas

Manage a product's areas: the buckets features are filed under (a feature has exactly one or none).

features areas list

List a product's areas

exponential features areas list [options]
OptionDescription
--product <slug|id>Product slug or CUID
--workspace <slug|id>Workspace (required when --product is a slug)

features areas create

Create an area in a product

exponential features areas create [options]
OptionDescription
--product <slug|id>Product slug or CUID
-n, --name <name>Area name (unique per product)
-d, --description <text>What belongs in this area
--workspace <slug|id>Workspace (required when --product is a slug)

features comment

Read and post comments on a feature. Mention teammates with --mention.

features comment list

List comments on a feature

exponential features comment list [options]
OptionDescription
--feature <id>Feature ID

features comment add

Add a comment to a feature

exponential features comment add [options]
OptionDescription
--feature <id>Feature ID
-m, --message <text>Comment body (markdown supported)
--mention <name>Mention a workspace member by name, email, or id (repeatable). Writing @name in the message substitutes in place; otherwise the mention is prepended.
--workspace <slug|id>Workspace used to resolve --mention (defaults to your default workspace)
--scope <id>Attach to a scope's activity feed instead of the feature

features comment reply

Reply to a comment on a feature

exponential features comment reply [options]
OptionDescription
--comment-id <id>Comment ID to reply to
-m, --message <text>Reply body (markdown supported)
--mention <name>Mention a workspace member by name, email, or id (repeatable). Writing @name in the message substitutes in place; otherwise the mention is prepended.
--workspace <slug|id>Workspace used to resolve --mention (defaults to your default workspace)

features comment update

Update one of your own comments

exponential features comment update [options]
OptionDescription
--comment-id <id>Comment ID
-m, --message <text>New comment body
--mention <name>Mention a workspace member by name, email, or id (repeatable). Writing @name in the message substitutes in place; otherwise the mention is prepended.
--workspace <slug|id>Workspace used to resolve --mention (defaults to your default workspace)

features comment rm

Delete one of your own comments

exponential features comment rm [options]
OptionDescription
--comment-id <id>Comment ID

features comment resolve

Resolve an anchored comment thread

exponential features comment resolve [options]
OptionDescription
--feature <id>Feature ID
--thread <id>Thread ID (anchored comments only)

features comment unresolve

Reopen a resolved comment thread

exponential features comment unresolve [options]
OptionDescription
--feature <id>Feature ID
--thread <id>Thread ID (anchored comments only)

labels

Manage labels (orthogonal tags applied to actions, tickets, features, and epics).

labels list

List labels visible in a workspace

exponential labels list [options]
OptionDescription
--workspace <slug|id>Workspace slug or CUID
--category <category>Filter by category. Use "label" for general labels, "null" for category-less labels, or omit to list all.

labels create

Create a workspace-scoped label

exponential labels create [options]
OptionDescription
-n, --name <name>Label name
--color <token>Color token (e.g. avatar-green, brand-primary)
-d, --description <text>Description
--category <category>Category. Omit (or pass "null") to create a general label.
--workspace <slug|id>Workspace slug or CUID

labels seed-triage

Idempotently seed the five canonical triage labels into a workspace.

exponential labels seed-triage [options]
OptionDescription
--workspace <slug|id>Workspace slug or CUID

meetings

Manage meetings and their notes (recorded, imported, or manually created)

meetings list

List meetings you can see (owned, attended, or shared via project/workspace). JSON rows carry hasNotes/hasSummary/hasTranscript flags instead of the bodies — use "get" for content.

exponential meetings list [options]
OptionDescription
--workspace <slug|id>Restrict to one workspace
--mineOnly meetings you own or attended
--archivedInclude archived meetings

meetings get

Get a meeting: details, summary, and notes

exponential meetings get [options] <id>
ArgumentRequiredDescription
idyes
OptionDescription
--transcriptAlso print the raw transcript (pretty mode; JSON always includes it)

meetings create

Create a meeting manually. Transcript: --transcript text, --transcript-file <path>, or --transcript-file - for stdin.

exponential meetings create [options]
OptionDescription
-t, --title <title>Meeting title
--transcript <text>Transcript text (required by the API)
--transcript-file <path>Read the transcript from a file ("-" = stdin)
--notes <markdown>Meeting notes
--notes-file <path>Read the notes from a file ("-" = stdin)
--description <text>Short description
--date <iso>When the meeting occurred (e.g. 2026-08-25T14:00; a bare date is local midnight)
--project <id>Link to a project (the meeting inherits its workspace)
--workspace <slug|id>Workspace (omit for a personal meeting)

meetings update

Update a meeting; only the fields you pass are written. Title and other fields are two API calls — on a mid-flight failure the title may already be saved.

exponential meetings update [options]
OptionDescription
--id <id>Meeting CUID
-t, --title <title>New title
--notes <markdown>Replace the meeting notes
--notes-file <path>Read the new notes from a file ("-" = stdin)
--summary <text>Replace the summary
--description <text>Replace the description
--date <iso>When the meeting occurred

meetings delete

Permanently delete meetings you own. Pass one or more ids, and/or --ids-file with whitespace-separated ids ("-" = stdin). Deleting more than one id requires --force. Exit 0 only when everything requested was deleted.

exponential meetings delete [options] [ids...]
ArgumentRequiredDescription
idsno
OptionDescription
--ids-file <path>Read whitespace-separated meeting ids from a file ("-" = stdin)
--forceConfirm deleting more than one meeting in a single call

meetings notes

Read and write a meeting's notes

meetings notes get

Print the meeting notes as raw Markdown (safe to redirect to a file); pass --json for a {id, notes} envelope

exponential meetings notes get [options] <id>
ArgumentRequiredDescription
idyes

meetings notes set

Replace the meeting notes. Body: inline, --file <path>, or --file - for stdin.

exponential meetings notes set [options] <id> [notes]
ArgumentRequiredDescription
idyes
notesno
OptionDescription
--file <path>Read the notes from a file ("-" = stdin)

meetings notes append

Append a block to the meeting notes (separated by a blank line). Read-modify-write: concurrent appends can lose one side.

exponential meetings notes append [options] <id> [notes]
ArgumentRequiredDescription
idyes
notesno
OptionDescription
--file <path>Read the block from a file ("-" = stdin)

organizations

Alias: orgs

Manage CRM organizations

organizations list

List organizations

exponential organizations list [options]
OptionDescription
--workspace <id>Workspace ID
--search <query>Search by name or description
--industry <industry>Filter by industry
--limit <n>Max results to return
--cursor <cursor>Pagination cursor

organizations get

Get an organization by ID

exponential organizations get [options] <id>
ArgumentRequiredDescription
idyesOrganization ID

organizations create

Create a new organization

exponential organizations create [options]
OptionDescription
--workspace <id>Workspace ID
--name <name>Organization name
--website-url <url>Website URL
--logo-url <url>Logo URL
--description <text>Description
--industry <industry>Industry
--size <size>Company size (1-10, 11-50, 51-200, 201-500, 501-1000, 1000+)

pages

Manage Knowledge pages (PRDs, research, technical specs). Link one to a feature with "features link-page".

pages list

List pages in a workspace

exponential pages list [options]
OptionDescription
--workspace <slug|id>Workspace (defaults to the configured default)
--search <text>Filter by title/content

pages get

Get a page by CUID (body is Markdown)

exponential pages get [options] <id>
ArgumentRequiredDescription
idyes

pages create

Create a page. Body: -b text, --body-file <path>, or --body-file - for stdin.

exponential pages create [options]
OptionDescription
--workspace <slug|id>Workspace (defaults to the configured default)
-t, --title <title>Page title
-b, --body <markdown>Markdown body
--body-file <path>Read the Markdown body from a file ("-" = stdin)

pages update

Update a page. Sending a body is a Markdown-source write: the Markdown becomes canonical.

exponential pages update [options]
OptionDescription
--id <id>Page CUID
-t, --title <title>New title
-b, --body <markdown>New Markdown body (replaces the whole body)
--body-file <path>Read the new Markdown body from a file ("-" = stdin)

pages comment

Read and post comments on a page. Mention teammates with --mention.

pages comment list

List comments on a page

exponential pages comment list [options]
OptionDescription
--page <id>Page ID

pages comment add

Add a comment to a page

exponential pages comment add [options]
OptionDescription
--page <id>Page ID
-m, --message <text>Comment body (markdown supported)
--mention <name>Mention a workspace member by name, email, or id (repeatable). Writing @name in the message substitutes in place; otherwise the mention is prepended.
--workspace <slug|id>Workspace used to resolve --mention (defaults to your default workspace)

pages comment update

Update one of your own comments

exponential pages comment update [options]
OptionDescription
--comment-id <id>Comment ID
-m, --message <text>New comment body
--mention <name>Mention a workspace member by name, email, or id (repeatable). Writing @name in the message substitutes in place; otherwise the mention is prepended.
--workspace <slug|id>Workspace used to resolve --mention (defaults to your default workspace)

pages comment rm

Delete one of your own comments

exponential pages comment rm [options]
OptionDescription
--comment-id <id>Comment ID

products

Manage products. A workspace contains products; a product holds features and tickets.

products list

List products in a workspace

exponential products list [options]
OptionDescription
--workspace <slug|id>Workspace slug or CUID (defaults to configured workspace)

products get

Get a product by slug or CUID

exponential products get [options] <slugOrId>
ArgumentRequiredDescription
slugOrIdyes
OptionDescription
--workspace <slug|id>Workspace (required when using a slug)

products create

Create a new product

exponential products create [options]
OptionDescription
-n, --name <name>Product name
--slug <slug>Kebab-case slug (matches /^[a-z0-9-]+$/)
-d, --description <text>Description
--icon <icon>Icon shortcode
--color <color>Color
--workspace <slug|id>Workspace slug or CUID

projects

Manage projects

projects list

List all projects

exponential projects list [options]
OptionDescription
--workspace <slug|id>Workspace slug or CUID
--include-actionsInclude actions in output

projects get

Get one project with its objectives, key results, DRI and actions — none of which projects list carries. Accepts a CUID, a slug, or the slug-cuid form from app URLs.

exponential projects get [options] <id>
ArgumentRequiredDescription
idyes

projects update

Update a project. Only the fields you pass are written; the rest are read back from the project and re-sent unchanged.

exponential projects update [options]
OptionDescription
--id <cuid>Project CUID
-n, --name <name>New name
-d, --description <text>New description
--status <status>Status: ACTIVE, ON_HOLD, COMPLETED, CANCELLED
--priority <priority>Priority: HIGH, MEDIUM, LOW, NONE
--product <cuid|none>Product to file the project under ("none" to unlink)
--dri <userId|none>Directly responsible individual ("none" to clear)

projects delete

Delete a project. Refuses while it still has actions or is linked to an objective or key result, unless --force.

exponential projects delete [options]
OptionDescription
--id <cuid>Project CUID
--forceDelete anyway, taking the actions and links with it

Global search across projects, actions, goals, workspaces and more — same coverage as the app's Cmd+K palette

exponential search [options] <query>
ArgumentRequiredDescription
queryyesText to search for
OptionDescription
-w, --workspace <slug>Restrict results to one workspace (slug or ID)
-l, --limit <n>Max results per entity type (1-25, default 10)

tickets

Manage product backlog tickets. Tickets live under a product, link to features/epics, depend on each other, and can be implemented via actions.

tickets list

List tickets in a product, or workspace-wide when --pr or --branch is supplied

exponential tickets list [options]
OptionDescription
--product <slug|id>Product slug or CUID (required unless --pr or --branch is supplied)
--workspace <slug|id>Workspace (required when --product is a slug)
--status <status>Filter by status: BACKLOG, NEEDS_REFINEMENT, READY_TO_PLAN, COMMITTED, IN_PROGRESS, BLOCKED, QA, DONE, DEPLOYED, ARCHIVED
--type <type>Filter by type: BUG, FEATURE, CHORE, IMPROVEMENT, SPIKE, RESEARCH
--feature <id>Filter by feature CUID
--epic <id>Filter by epic CUID
--assignee <id>Filter by assignee user ID
--pr <url>Workspace-wide lookup by Ticket.prUrl (exact match). Makes --product optional.
--branch <name>Workspace-wide lookup by Ticket.branchName (exact match). Makes --product optional.
--label <slug-or-id>Filter to tickets carrying this label (repeatable; AND semantics)

tickets get

Show a ticket with dependencies, actions, and comments

exponential tickets get [options] <id>
ArgumentRequiredDescription
idyes

tickets show

Alias for tickets get

exponential tickets show [options] <id>
ArgumentRequiredDescription
idyes

tickets create

Create a new ticket in a product

exponential tickets create [options]
OptionDescription
--product <slug|id>Product slug or CUID
-t, --title <title>Ticket title
-b, --body <text>Body (markdown supported)
--type <type>Ticket type: BUG, FEATURE, CHORE, IMPROVEMENT, SPIKE, RESEARCH
--status <status>Initial status: BACKLOG, NEEDS_REFINEMENT, READY_TO_PLAN, COMMITTED, IN_PROGRESS, BLOCKED, QA, DONE, DEPLOYED, ARCHIVED
--priority <n>Priority 0-4 (lower = higher)
--points <n>Story points
--feature <id>Feature CUID to attach to
--scope <id>Feature scope CUID to attach to (requires --feature)
--epic <id>Epic CUID to attach to
--cycle <id>Cycle CUID to assign to
--assignee <id>Assignee user ID
--branch <name>Branch name
--pr <url>Pull request URL
--workspace <slug|id>Workspace (required when --product is a slug)
--label <slug-or-id>Label to attach (repeatable)

tickets update

Update an existing ticket

exponential tickets update [options]
OptionDescription
--id <id>Ticket CUID
-t, --title <title>New title
-b, --body <text>New body
--type <type>Type: BUG, FEATURE, CHORE, IMPROVEMENT, SPIKE, RESEARCH
--status <status>Status: BACKLOG, NEEDS_REFINEMENT, READY_TO_PLAN, COMMITTED, IN_PROGRESS, BLOCKED, QA, DONE, DEPLOYED, ARCHIVED
--priority <n>Priority 0-4 (or "null" to clear)
--points <n>Story points (or "null" to clear)
--feature <id>Feature CUID (or "null" to detach)
--epic <id>Epic CUID (or "null" to detach)
--cycle <id>Cycle CUID (or "null" to detach)
--assignee <id>Assignee user ID (or "null" to unassign)
--branch <name>Branch name (or "null")
--pr <url>PR URL (or "null")
--add-label <slug-or-id>Label to attach to this ticket (repeatable)
--remove-label <slug-or-id>Label to detach from this ticket (repeatable)

tickets delete

Delete a ticket

exponential tickets delete [options] <id>
ArgumentRequiredDescription
idyes

tickets block

Mark <ticket> as blocked by another ticket

exponential tickets block [options] <ticket>
ArgumentRequiredDescription
ticketyes
OptionDescription
--by <id>Ticket CUID that must complete first

tickets unblock

Remove a blocking dependency from <ticket>

exponential tickets unblock [options] <ticket>
ArgumentRequiredDescription
ticketyes
OptionDescription
--by <id>The ticket CUID that was blocking

Attach an existing action to a ticket

exponential tickets link-action [options]
OptionDescription
--id <id>Ticket CUID
--action <id>Action CUID

Detach an action from whatever ticket it is on

exponential tickets unlink-action [options]
OptionDescription
--action <id>Action CUID

tickets comment

Manage comments on a ticket

tickets comment list

List comments on a ticket

exponential tickets comment list [options]
OptionDescription
--id <id>Ticket CUID

tickets comment add

Add a comment to a ticket

exponential tickets comment add [options]
OptionDescription
--id <id>Ticket CUID
-m, --message <text>Comment content (markdown supported)
--mention <name>Mention a workspace member by name, email, or id (repeatable). Writing @name in the message substitutes in place; otherwise the mention is prepended.
--workspace <slug|id>Workspace used to resolve --mention (defaults to your default workspace)

tickets comment update

Update one of your own ticket comments

exponential tickets comment update [options]
OptionDescription
--comment-id <id>Comment ID
-m, --message <text>New comment content
--mention <name>Mention a workspace member by name, email, or id (repeatable). Writing @name in the message substitutes in place; otherwise the mention is prepended.
--workspace <slug|id>Workspace used to resolve --mention (defaults to your default workspace)

tickets comment delete

Delete one of your own ticket comments

exponential tickets comment delete [options]
OptionDescription
--comment-id <id>Comment ID

time

Time entries — log the day's work and list it. Run with an external-agent key, the entry belongs to the agent's OWNER and is always PROPOSED; a personal token logs your own time, CONFIRMED by default.

time log

Log one completed entry with explicit bounds; the running Timer is never touched. With --ref the write is idempotent per owner: a re-run updates a PROPOSED entry and leaves a CONFIRMED one alone. Bulk: --from-file <path|-> takes a JSON array of entries; the other flags become its defaults. Run with an external-agent key, the entry belongs to the agent's OWNER and is always PROPOSED; a personal token logs your own time, CONFIRMED by default.

exponential time log [options]
OptionDescription
-a, --action <id>Action CUID the time was spent on
--from <iso>Start, e.g. 2026-09-11T09:22
--to <iso>End, e.g. 2026-09-11T10:30
--source <source>manual, claude-desktop, agent-run (default: manual)
--status <status>PROPOSED or CONFIRMED (ignored under an agent key: always PROPOSED)
--ref <sourceRef>Idempotency key, e.g. claude-session:<sessionId>#<segment>
--note <text>One line shown in the day view and list row
--from-file <path>Bulk log from a JSON array of entries ("-" = stdin)

time list

One day's entries for the signed-in user, oldest first, each with its PROPOSED/CONFIRMED status

exponential time list [options]
OptionDescription
-d, --date <YYYY-MM-DD>The day (local time)
-w, --workspace <slug|id>Only entries in this workspace (default: all)
--proposedOnly PROPOSED entries

time confirm

Confirm a day: every PROPOSED entry of yours that starts that day becomes CONFIRMED and the Actions' spent time moves. Human only — run it with your personal credentials; an agent key is refused.

exponential time confirm [options]
OptionDescription
-d, --date <YYYY-MM-DD>The day (local time)
-w, --workspace <slug|id>Only entries in this workspace (default: all)

time report

One day's report — the numbers the /time Day tab shows: attention hours (each covered minute once), session hours (the plain sum), agent-run time on its own, hours by Product and by Action with overlapping minutes split evenly, and the unassigned and proposed counts. JSON when piped or with --json.

exponential time report [options]
OptionDescription
-d, --date <YYYY-MM-DD>The day (local time)
-w, --workspace <slug|id>Only entries in this workspace (default: all)

time segment

Cut one conversation's messages into Worklog segments and print the batch time log --from-file - consumes. Input: a JSON array of {at, role} (role user|assistant), or {"messages": [...]}. A gap over 30 minutes between the person's messages ends a segment; bounds round outward to 5 minutes; assistant-only runs longer than the gap become agent-run entries.

exponential time segment [options]
OptionDescription
--from-file <path>Messages JSON ("-" = stdin)
-a, --action <id>Action CUID every entry is logged on
--ref-prefix <prefix>sourceRef prefix, e.g. claude-session:<sessionId>; segments get #0, #1, …
--gap <minutes>Silence between the person's messages that ends a segment (default: "30")
--note <text>Note copied onto every entry

workspaces

Manage workspaces

workspaces list

List all workspaces

exponential workspaces list [options]

workspaces set-default

Set the default workspace

exponential workspaces set-default [options] <slug>
ArgumentRequiredDescription
slugyes

workspaces members

List workspace members. Each row carries the exact @[Name] (id) markup to paste into a comment to mention that person.

exponential workspaces members [options]
OptionDescription
--workspace <slug|id>Workspace (defaults to your default workspace)
--search <text>Filter by name or email

goals

Manage goals (objectives) and their key results. Objectives have integer ids; key results are CUIDs.

goals list

List objectives, each with the projects linked to it — the join that ties an action (which carries a projectId) back to a goal.

exponential goals list [options]
OptionDescription
-w, --workspace <slug|id>Workspace slug or ID (defaults to your default workspace)
--all-workspacesList across every workspace you belong to
--period <period>Filter by period, e.g. Q3-2026
--status <status>Filter by status: planned, active, completed, archived, on-hold
--treeRender the parent/child cascade instead of a flat list

goals get

Get an objective by its integer ID

exponential goals get [options] <id>
ArgumentRequiredDescription
idyes

goals create

Create an objective

exponential goals create [options]
OptionDescription
-t, --title <text>Objective title
-w, --workspace <slug|id>Workspace slug or ID (defaults to your default workspace)
--period <period>Period, e.g. Q3-2026 or Annual-2026
--status <status>Status: planned, active, completed, archived
-d, --description <text>Description (markdown supported)
--why <text>Why this goal matters
--dri <userId>Directly responsible individual (user ID)
--parent <id>Parent objective ID to nest under (max depth 5)
--project <cuid>Link a project on creation

goals update

Update an objective. Only the flags you pass are written — everything else is left exactly as it is. For a status change use set-status; to re-parent use reparent.

exponential goals update [options]
OptionDescription
--id <n>Objective ID (a number)
-t, --title <text>New title
-d, --description <text>New description ("none" clears it)
--why <text>Why this goal matters ("none" clears it)
--period <period>New period ("none" clears it)
--dri <userId>Directly responsible individual (user ID)
--status <status>Status: planned, active, completed, archived
--project <cuid>Replace the project links with this project ("none" clears them)
-w, --workspace <slug|id|none>Re-home the objective; "none" makes it personal

goals set-status

Set an objective's status and nothing else. Routes through the status-only procedure, so no other field can be touched.

exponential goals set-status [options]
OptionDescription
--id <n>Objective ID (a number)
--status <status>Status: planned, active, completed, archived, on-hold

goals close

Close out an objective — one command per goal when a quarter ends

exponential goals close [options]
OptionDescription
--id <n>Objective ID (a number)
--status <status>completed (default) or archived (default: "completed")

goals reparent

Move an objective under another (or detach it with --parent none). Writes the parent alone.

exponential goals reparent [options]
OptionDescription
--id <n>Objective ID (a number)
--parent <id|none>New parent objective ID, or "none" to detach

goals delete

Delete an objective. Refuses while it still has key results — deleting an objective deletes them too (KeyResult.goalId cascades), taking their check-in history with them.

exponential goals delete [options]
OptionDescription
--id <n>Objective ID (a number)
--with-key-resultsDelete the objective and cascade-delete its key results (destructive)

goals periods

List the conventional OKR period strings

exponential goals periods [options]

goals stats

Objective and key-result counts, average progress and confidence

exponential goals stats [options]
OptionDescription
-w, --workspace <slug|id>Workspace slug or ID (defaults to your default workspace)
--period <period>Period, e.g. Q3-2026

goals kr

Key results on an objective. Ids are CUIDs; --goal takes the objective's integer id.

goals kr list

List key results

exponential goals kr list [options]
OptionDescription
--goal <id>Objective ID (a number)
-w, --workspace <slug|id>Workspace (workspace-wide: every member's KRs)
--period <period>Period, e.g. Q3-2026
--status <status>Filter by status: not-started, on-track, at-risk, off-track, achieved
--mineNarrow a workspace list to key results you own

goals kr get

Get a key result by CUID

exponential goals kr get [options] <id>
ArgumentRequiredDescription
idyes

goals kr create

Create a key result on an objective

exponential goals kr create [options]
OptionDescription
--goal <id>Objective ID (a number)
-t, --title <text>Key result title
--target <n>Target value
--start <n>Starting value (default 0)
--current <n>Current value (defaults to the start value)
--unit <unit>Unit: percent, count, currency, hours, custom
--period <period>Period, e.g. Q3-2026 (defaults to the objective's)
-d, --description <text>Description
--dri <userId>Directly responsible individual (user ID)

goals kr update

Update a key result (only the flags you pass are written)

exponential goals kr update [options]
OptionDescription
--id <cuid>Key result CUID
-t, --title <text>New title
-d, --description <text>New description
--current <n>Current value (prefer kr checkin — it records history)
--target <n>Target value
--start <n>Starting value
--unit <unit>Unit: percent, count, currency, hours, custom
--status <status>Status: not-started, on-track, at-risk, off-track, achieved
--confidence <n>Confidence 0-100
--dri <userId>Directly responsible individual (user ID)
--goal <id>Move the key result to a different objective

goals kr checkin

Record a progress check-in. Moves the value AND re-derives the status from where it lands between start and target.

exponential goals kr checkin [options]
OptionDescription
--id <cuid>Key result CUID
--value <n>New current value
--note <text>Check-in note

goals kr delete

Delete a key result

exponential goals kr delete [options]
OptionDescription
--id <cuid>Key result CUID

Link executing work (a project or a feature) to a key result

exponential goals kr link [options]
OptionDescription
--id <cuid>Key result CUID
--project <cuid>Project CUID
--feature <cuid>Feature CUID

Unlink a project or feature from a key result

exponential goals kr unlink [options]
OptionDescription
--id <cuid>Key result CUID
--project <cuid>Project CUID
--feature <cuid>Feature CUID

goals comment

Read and post comments on a goal. Mention teammates with --mention.

goals comment list

List comments on a goal

exponential goals comment list [options]
OptionDescription
--goal <id>Goal ID (a number)

goals comment add

Add a comment to a goal

exponential goals comment add [options]
OptionDescription
--goal <id>Goal ID (a number)
-m, --message <text>Comment content (markdown supported)
--mention <name>Mention a workspace member by name, email, or id (repeatable). Writing @name in the message substitutes in place; otherwise the mention is prepended.
--workspace <slug|id>Workspace used to resolve --mention (defaults to your default workspace)
--parent-update <id>Thread under a specific goal update

goals comment update

Update one of your own comments

exponential goals comment update [options]
OptionDescription
--comment-id <id>Comment ID
-m, --message <text>New comment content
--mention <name>Mention a workspace member by name, email, or id (repeatable). Writing @name in the message substitutes in place; otherwise the mention is prepended.
--workspace <slug|id>Workspace used to resolve --mention (defaults to your default workspace)

goals comment rm

Delete one of your own comments

exponential goals comment rm [options]
OptionDescription
--comment-id <id>Comment ID

okrs

OKRs — objectives with their key results nested. Manage the parts with goals and goals kr.

okrs list

List objectives with their key results. Defaults to the current quarter — pass --period all for every period.

exponential okrs list [options]
OptionDescription
-w, --workspace <slug|id>Workspace slug or ID (defaults to your default workspace)
--all-workspacesList across every workspace you belong to
--period <period>Period, e.g. Q3-2026, or "all" for every period (default: Q3-2026)
--paired-periodAlso include the period's parent annual period
--status <status>Keep only key results with this status: not-started, on-track, at-risk, off-track, achieved
--mineOnly objectives and key results you are the DRI for

okrs stats

Objective and key-result counts, average progress and confidence

exponential okrs stats [options]
OptionDescription
-w, --workspace <slug|id>Workspace slug or ID (defaults to your default workspace)
--period <period>Period, e.g. Q3-2026

okrs periods

List the conventional OKR period strings

exponential okrs periods [options]

okrs kr

Key results on an objective. Ids are CUIDs; --goal takes the objective's integer id.

okrs kr list

List key results

exponential okrs kr list [options]
OptionDescription
--goal <id>Objective ID (a number)
-w, --workspace <slug|id>Workspace (workspace-wide: every member's KRs)
--period <period>Period, e.g. Q3-2026
--status <status>Filter by status: not-started, on-track, at-risk, off-track, achieved
--mineNarrow a workspace list to key results you own

okrs kr get

Get a key result by CUID

exponential okrs kr get [options] <id>
ArgumentRequiredDescription
idyes

okrs kr create

Create a key result on an objective

exponential okrs kr create [options]
OptionDescription
--goal <id>Objective ID (a number)
-t, --title <text>Key result title
--target <n>Target value
--start <n>Starting value (default 0)
--current <n>Current value (defaults to the start value)
--unit <unit>Unit: percent, count, currency, hours, custom
--period <period>Period, e.g. Q3-2026 (defaults to the objective's)
-d, --description <text>Description
--dri <userId>Directly responsible individual (user ID)

okrs kr update

Update a key result (only the flags you pass are written)

exponential okrs kr update [options]
OptionDescription
--id <cuid>Key result CUID
-t, --title <text>New title
-d, --description <text>New description
--current <n>Current value (prefer kr checkin — it records history)
--target <n>Target value
--start <n>Starting value
--unit <unit>Unit: percent, count, currency, hours, custom
--status <status>Status: not-started, on-track, at-risk, off-track, achieved
--confidence <n>Confidence 0-100
--dri <userId>Directly responsible individual (user ID)
--goal <id>Move the key result to a different objective

okrs kr checkin

Record a progress check-in. Moves the value AND re-derives the status from where it lands between start and target.

exponential okrs kr checkin [options]
OptionDescription
--id <cuid>Key result CUID
--value <n>New current value
--note <text>Check-in note

okrs kr delete

Delete a key result

exponential okrs kr delete [options]
OptionDescription
--id <cuid>Key result CUID

Link executing work (a project or a feature) to a key result

exponential okrs kr link [options]
OptionDescription
--id <cuid>Key result CUID
--project <cuid>Project CUID
--feature <cuid>Feature CUID

Unlink a project or feature from a key result

exponential okrs kr unlink [options]
OptionDescription
--id <cuid>Key result CUID
--project <cuid>Project CUID
--feature <cuid>Feature CUID
<!-- END AUTO-GENERATED -->
Was this page helpful?
Last updated Edit this page on GitHub