CLI

The Kyo CLI puts your whole workspace in the terminal — list, create, and update anything in the CRM with scriptable JSON output. It signs in through your browser with OAuth (no API keys to manage) and bundles a local copy of the MCP server for clients that can't use the hosted one.

Install

bash
npm install -g kyo-cli
# or run without installing:
npx kyo-cli <command>

Requires Node.js 18 or newer. The installed command is kyo.

Sign in

bash
kyo login

This opens your browser to Kyo's consent screen and captures the redirect on a local loopback port (RFC 8252) — the standard OAuth 2.0 + PKCE flow, with no client secret on disk. The default grant is full read/write on your workspace, except metered enrichment. Grant less (or opt in to enrichment) with --scope:

bash
kyo login --scope "deals:read deals:write tasks:read"

kyo whoami shows the connection and granted scopes; kyo logout revokes it. The CLI always signs in as a person; to connect one of your workspace's AI agents, use the hosted MCP server with an agent key.

Commands

CommandWhat it does
kyo login [--scope "…"]Sign in via browser OAuth
kyo logoutRevoke the tokens and delete local credentials
kyo whoamiShow the connection and granted scopes
kyo <resource> <verb>list, get, create, update, detach on any resource
kyo enrich <domain>Look up firmographics for a domain (metered)
kyo helpUsage, plus the live list of resources this build supports
kyo mcpRun the local MCP server (stdio) — most clients can use the hosted server instead, with no install

Working with resources

Every API resource is a command — the resource name with hyphens instead of underscores. kyo help prints the list your installed version supports.

AreaCommands
CRMdeals, people, companies, pipelines, pipeline-stages (stages), deal-tasks, deal-people, deal-labels, crm-files, labels
Tasks & spacestasks, task-attachments, spaces, projects, project-stages, space-members, space-updates, comments
Metricsmetrics, metric-pages, metric-entries
Financeincome, expenses, finance-categories, debts, debt-payments
HRteam-members, departments, leave-requests, hr-contracts, hr-change-requests, org-chart
Librarydocuments, knowledge, canvases
Automationsautomations, automation-logs
Research & agentscompetitor-workflows, competitor-reports, agents
Workspaceusers, workspace, activity, credits

Verbs are list, get, and — where the resource is writable — create, update and detach. A resource that doesn't support a verb says so instead of failing silently. There is no delete: by design, the API is non-destructive, and detach only unlinks a join record, leaving both sides intact.

Flags map 1:1 to the API's fields and filters:

bash
kyo pipelines list
kyo deals list --pipeline_id <uuid> --limit 20
kyo deals create --name "Acme Corp" --pipeline_id <uuid> --value 5000
kyo deals update <id> --pipeline_stage_id <uuid>
kyo people create --name "Jane Doe" --email jane@acme.com
kyo tasks list --completed false
kyo comments add --entity_type deal --entity_id <id> --content "Followed up"
kyo expenses create --name "Figma" --date 2026-08-01 --amount 45 --type software
kyo leave-requests list --status pending
kyo deal-people detach --deal_id <uuid> --person_id <uuid>

Reads and writes are bounded by the scopes you granted at sign-in and by your own permissions in the workspace — a command can't reach a feature you can't open in the app.

Output & scripting

All output is JSON, so it composes with jq and friends:

bash
kyo deals list | jq '.data[].name'

List responses are { "data": […], "next_cursor": "…" } — pass --cursor (and --limit, max 200) to page through, exactly like the REST API.

Enrichment

bash
kyo enrich acme.com

Looks up firmographics for a domain. This spends workspace credits and needs the enrich:write scope, which is not in the default grant — opt in with kyo login --scope "… enrich:write".

Configuration

Defaults work out of the box; override them with environment variables for dev or self-hosted workspaces:

VariablePurposeDefault
KYO_APP_URLWhere the OAuth consent page liveshttps://app.trykyo.com
KYO_API_BASEThe API base (token, revoke, and REST endpoints)Kyo's public API base
KYO_ANON_KEYThe public apikey valueKyo's published anon key

Credentials & security

  • Tokens are stored in ~/.kyo/credentials.json with 0600 permissions.
  • Access tokens auto-refresh about 2 minutes before expiry, rotating the refresh token each time.
  • The CLI is a public PKCE client — there is no client secret on disk.
  • Revoke access any time with kyo logout, or from Settings → API in the Kyo app.