Skip to content

Docs

CLI

Markdown version

ra is Closefinch's command line, built for people and coding agents. It covers every resource in the REST API, prints a table in a terminal and JSON when piped, and has a built-in --jq. It has no dependencies (Node's standard library only) and needs Node 22.12 or newer. Version 0.1.0.

Install

It isn't on the npm registry yet: install the package built from the repository, with npm. Never pipe a script into a shell.

node tools/cli/pack.mjs                                # in the repository: writes apps/cli/dist/revenueagent-cli-0.1.0.tgz
npm install -g ./apps/cli/dist/revenueagent-cli-0.1.0.tgz
ra --version

Sign in

ra login --host https://api.closefinch.com

It shows a short code; approve it in your browser (OAuth device flow, nothing to paste). For scripts, use a key from Settings → API keys instead, read from a variable rather than typed on the command line: printf %s "$RA_API_KEY" | ra auth login --host https://api.closefinch.com --with-key. In CI, set RA_HOST and RA_API_KEY. ra auth status shows who you are; ra auth logout forgets the profile.

Common commands

ra deals list --query q=Acme --fields id,name
ra deals get deal_…
ra tasks create --field values.title="Call back" --raw-field 'values.related=["deal_…"]'
ra api GET /v1/forecast
ra runs start agt_… --input '{"deal_id":"deal_…"}' --wait
ra bulk-create contacts --input contacts.jsonl
  • Deleting and merging need --force; --dry-run prints the request instead of sending it.
  • ra runs start … --wait exits 1 if the run failed; 3 if it's waiting for a person, paused or sleeping; and 0 otherwise: done, cancelled, or still running after about 20 minutes of waiting (check its status before relying on it).
  • ra agent-context prints, as JSON, what the CLI and your credential can do.

Filter with --jq

ra deals list --jq '.data[] | select(.values.amount.amount > 10000) | {id, name}'

A deal's amount is { amount, currency }, so compare .values.amount.amount. The built-in jq covers paths, select, map, comparisons, object and array construction, string interpolation, if/reduce/try, sort_by/group_by/unique_by, to_entries/with_entries, regular expressions and formats such as @csv and @json. It only reads: no assignment, no def, no environment access.

Set up Claude Code

ra install claude-code

It adds the MCP server to the project's .mcp.json and a skill for Claude Code. They reference ${RA_API_KEY}, never the key itself, so set RA_API_KEY to a key from Settings → API keys (the browser sign-in doesn't make one). ra install codex prints the block for Codex's config instead. Quickstarts for other clients: Quickstarts.

Every command

From ra help (version 0.1.0):

ra 0.1.0: the Closefinch CLI

  ra login --host <api url> [--scope "crm:read …"]     sign in in your browser with a short code (no key to paste)
  ra auth login --host <api url> --key <ra_live_…>     sign in with an API key (or --with-key to read it from stdin)
  ra auth login --host <api url> --client-id <id>      sign in with OAuth (an owner registers the app with
                                                       redirect http://127.0.0.1:8765/callback; --port to change)
  ra auth status | ra auth logout
  ra sandbox create --host <api url> [--agent-name <name>] [--claim-email <person's email>]
                                                       for agents: a sandbox organization with sample data and a limited
                                                       key (7 days, no outbound until a person claims it), saved as a profile
  ra api <GET|POST|PATCH|PUT|DELETE> <path> [--field k=v] [--raw-field k=<json>] [--body <json>|@file|-] [--query k=v]
  ra <resource> list [--query k=v] [--limit n] [--all]
  ra <resource> get <id> | create [--field …] | update <id> [--field …] | delete <id> --force
  ra bulk-create <resource> --input <file.json|file.jsonl|-> [--batch <id>]   25 per request; exits 1 if any row fails
  ra runs start <agent> [--input <json>] [--wait]
  ra agent-context                                     what this CLI and your credential can do, as JSON
  ra install claude-code [--dir .]                     add the MCP server (.mcp.json) and a skill for Claude Code
  ra install codex                                     print the Codex config block (writes nothing)

  Output: a table in a terminal, JSON when piped. --json, --output table|json|toon, --fields a,b.c, --jq <program> (a built-in jq).
  --dry-run prints the request instead of sending it. --profile <name>, --host <url>. CI: RA_HOST, RA_API_KEY.

Send feedback

Tell us what's broken, confusing or missing on this page, or an idea. It goes to the team that builds the product.

Please don't include passwords or card numbers.
Only to reply about this. Never added to any mailing list.