The command line
The `leadbind` CLI, for people who live in a terminal.
Same data as the app, no browser. Useful if you already live in a terminal, and useful for scripting things the app does not do. It runs on the same scoped keys as everything else, so there is one auth surface to reason about and one place to revoke.
Install
One line. macOS or Linux, needs Node installed:
curl -fsSL https://leadbind.org/install.sh | sh
That drops a leadbind command in ~/.leadbind/bin and adds it to your PATH for every new terminal. To use it in the terminal you installed from, and to go straight on to signing in and connecting your AI clients, paste these two lines instead:
curl -fsSL https://leadbind.org/install.sh | sh && export PATH="$HOME/.leadbind/bin:$PATH"
leadbind login && leadbind connect
Prefer to run the file directly, or scripting a machine where you do not want it on the PATH? The CLI is a single zero-dependency file. Download it and run it with Node:
curl -fsSL https://leadbind.org/leadbind.mjs -o leadbind.mjs
node leadbind.mjs --help
No dependencies is deliberate: a tool you use to check on your business should not break because something four levels down published a bad version.
Sign in
leadbind login
Paste a key from Menu, then Lead sources, then AI access in the web app. See Connect an assistant for how to make one. On success it prints exactly which tools that key can use, so you find out about a missing scope now rather than mid-script:
Saved to /Users/you/.leadbind/config.json
This key can use: list_leads, list_calls, list_appointments, get_call_metrics, get_next_actions, get_availability
The key is stored at ~/.leadbind/config.json with permissions 0600, meaning only your user account can read it. Sign out with leadbind logout, which deletes it.
Warning:
logoutremoves the key from your machine. It does not revoke it. If you think a key leaked, revoke it in the web app, which kills it everywhere at once.
Commands
| Command | What it does | Scope |
|---|---|---|
leadbind today |
Bookings, callbacks due, and leads going cold | read |
leadbind leads |
Your leads, newest first, or a search (--stage=new --search=jane --limit=20) |
read |
leadbind lead |
One lead in full with its calls and appointments (--lead=<id>) |
read |
leadbind calls |
Recent calls with outcomes (--direction=inbound --limit=10) |
read |
leadbind bookings |
Appointments, upcoming by default (--from=2026-10-01 --to=2026-10-31 --lead=<id>) |
read |
leadbind availability |
Your genuinely open slots (--tz=America/Chicago --calendar=<slug>) |
read |
leadbind metrics |
Calls, connect rate, and bookings over a window (--days=30) |
read |
leadbind call |
Place a call from your number (--lead=<id> or --phone= --name=) |
dial |
leadbind bill |
Create a card payment link for a customer (--amount=250 --for="Deposit") |
write |
leadbind lists |
Your saved lead lists, with the count in each and how many have booked | read |
leadbind run-list |
Dial every lead in a list, or a hand-picked set (--list=<id> or --leads=id1,id2 --max=10) |
dial |
leadbind verify |
Check a lead's email and phone and store the result on the lead (--lead=<id> --force --enrich) |
write |
leadbind score |
Score a lead and show every factor behind the number. Writes nothing. (--lead=<id>) |
read |
leadbind brief |
A closing-call brief for a lead, tied to the records it came from (--lead=<id>) |
read |
leadbind outcome |
Record a deal won or lost, so the learning loop sees a real close (--result=won --deal=<id> --amount=250) |
write |
leadbind intel |
Win rates, price anchors and hooks counted from closed deals in your industry (--asset=email_step --channel=email) |
read |
leadbind accounts |
The accounts this key can act on. An organization key lists every seat. | read |
leadbind connect |
Configure Claude Desktop, Claude Code and Cursor on this machine at once | n/a |
leadbind status |
Check the saved key and what it can do, reading no account data | n/a |
leadbind mcp |
Run the local stdio MCP server (used by connect) |
any |
leadbind install-claude |
Configure Claude Desktop only | n/a |
leadbind install-cursor |
Write .cursor/mcp.json in the current directory |
n/a |
leadbind login / logout |
Manage your key on this machine | n/a |
leadbind --help prints the same list. Most read commands take --limit; lists print a More: line with the --offset for the next page when there is one; metrics takes --days; availability takes --tz. Every write and dial command takes --dry-run, which checks the request and changes nothing. An organization key can add --account=<id> to lead, verify, score, brief, outcome and intel to act on one seat; run leadbind accounts to see the ids. leadbind login --key=lb_live_... signs in without a prompt, for scripts.
The first command after login
leadbind today
It runs get_next_actions and prints only what is actually there. A section with nothing in it is left out, and a genuinely quiet morning says so rather than rendering three empty headings:
Coming up (1)
2026-08-31T14:00:00-05:00 Maria Lopez
Talked, never booked (2)
Dan Reyes contacted
Priya Shah contacted
Going cold (3)
...
Place a call from the terminal
Call a saved lead by id (uses the consent already on file), or an ad-hoc number. An ad-hoc number needs --consent, and you pass it only when the person agreed to be called, including by an AI voice. It is recorded with your key and the time:
leadbind call --lead=ld_abc123
# or
leadbind call --phone=8325550134 --name="Maria Lopez" --consent
A call is billed, so the first run only asks. It prints a link, and the account owner approves the call in LeadBind:
Not placed yet. The account owner approves it in LeadBind first:
https://leadbind.ai/approve?c=3f6c...
Then run the same command again with --confirm=3f6c...
The approval lasts 30 minutes and is good for one use.
Run it again with --confirm, and the call goes out:
Calling +18325550134. It will show up in 'leadbind calls' when it finishes.
leadbind run-list works the same way: one approval covers the whole run you were shown.
The AI agent holds the conversation and books. Needs a key with the dial scope. Every guard the app enforces runs server-side here too: rate limit, billing gate, plan entitlement, Do-Not-Call, per-lead consent, and the lead's own 8 AM to 9 PM calling hours. A blocked call is refused with a reason rather than dialed, and outside those hours the reason says when the window opens.
Important: placing a call is consent-gated server-side. Everything in Consent and opt-outs and Disclosing the AI applies to every call, whether you place it from the CLI, the app, or your AI tool.
Make a deposit link
leadbind bill --amount=250 --for="Roof deposit" --lead=ld_abc123
Pay link for $250.00: https://leadbind.ai/pay/pr_...
The command makes the link and prints it. It does not text anyone: you send the link to your customer yourself. The customer pays by card, and the money goes to your own connected payout account, not to LeadBind. Needs a write key and your payout account connected, under Settings, then Lead sources and integrations; if it is not connected yet, the command tells you so instead of making a half-finished request.
Put LeadBind inside your AI tools
leadbind connect
One command finds every AI client on the machine and wires LeadBind into each. It reports per target what it did, including the ones it skipped and why, so it never claims a blanket success over a client it never touched:
added Claude Desktop
/Users/you/Library/Application Support/Claude/claude_desktop_config.json
restart Claude Desktop to pick it up
skipped Cursor (not found on this machine)
connect writes a stdio MCP server (leadbind mcp) for Claude Desktop and an HTTP config for Cursor. If you want to point a client at LeadBind by hand instead, see Connect an assistant for the raw config. install-claude and install-cursor still exist as single-target aliases.
Scripting it
Every read command prints plain text, so it pipes:
# Anything with no answer, into a file for the morning
leadbind calls --limit=100 | grep no_answer > callbacks.txt
For structured output, skip the wrapper and call the MCP endpoint directly with curl. The CLI is a thin wrapper over exactly those calls.
The same permissions apply as everywhere else. A read-only key runs the read commands and refuses call (needs dial) and bill (needs write). See Keys and permissions.
CLI or assistant?
Both hit the same API, so it is purely about how you want to work.
- The CLI is exact. You said
leadbind bookings, you got bookings. Good for scripts and for anything running unattended. - An assistant is better when the question is fuzzy, or when the answer needs something outside LeadBind. "Which leads went cold and are worth another call" is a question the CLI cannot answer and Claude can.
Anything the CLI can do, a connected assistant can do too. The reverse is not true.