Prerequisites
- Python
>=3.13,<3.14 uv— the only supported package manager (never barepip)- For provider-backed commands: a Modal account and either provider API keys or an Infisical project (see Secrets and API keys)
Get started
1
Clone
2
Install dependencies
3
Wire credentials for provider-backed commands
Commands that touch external providers (Exa, Attio, Apollo, Parallel, …) execute as functions on your Modal deployment — the CLI is a thin client that invokes them by name. Two things make those commands work:
-
A deployed app. Authenticate with Modal (
uv run modal token new), then: -
Provider keys. Pass them per command with API-key flags, or let the deployed functions fetch them from Infisical at entry:
4
Search your Attio workspace
Find a person in your CRM without changing any data (replace the example name):Filter the people search to an email domain when you want to find everyone at a company:Both commands return a JSON envelope with the matching records and a result count. You can also search by
--email or browse records with --sample.Quality gates
Next steps
Secrets and API keys
Key resolution order, Infisical bootstrap, and the env-var reference.
CLI contract
JSON on stdout, errors on stderr, preview-by-default mutations.
Architecture
The enforced cli → src → libs layering and where new code goes.
Telemetry
OTEL collector fan-out to Dash0, HyperDX, Logfire, and Grafana.