sumcli is Summation’s first-party command-line client and the shortest path to everything in this tab. It talks to the stable /v1 routes of the API, manages token exchange and refresh for you, and emits agent-friendly JSON, making it the right tool for scripted automation and headless agent workflows.
Install
Requires uv and Python 3.11+ (uv can install Python for you). Installs into an isolated tool environment sosumcli lands on your PATH without touching any project’s virtualenv.
curl | sh into PowerShell or cmd.exe):
sumcli update installs the latest PyPI release, including over an exact-version pin. It refuses to run on a copy it doesn’t manage (NOT_UV_MANAGED). If you installed via brew, pip, or pipx, upgrade with that same installer instead so you don’t end up with two copies. Commands also print a once-a-day stderr notice when a newer release exists (stdout stays clean JSON); disable with SUMCLI_NO_UPDATE_CHECK=1.
Sign in
sumcli stores credentials in profiles in ~/.summation/summation-config. Create a profile, then authenticate.
- Device login (people)
- Machine-to-machine (automation)
auth login prints a device code and a URL. Approve it in the browser. No secrets are entered on the command line. This CLI session is separate from the plugins’ MCP browser approval: being signed in on one does not sign in the other.--project:
Resources
Bare invocation prints the live command tree. Resource names and actions come from the installed CLI:
Manage custom verification tests (sumcli 0.1.6+)
Validation is offline and uses the same canonical contract as the API. Mutating dry runs also stay offline: they emit the exact request but neither authenticate nor send it.cvt-... definition id returned by upload or list as --custom-test-id. Project scope uses
the profile’s default project when --project is omitted. A cross-org call adds
--target-org organization-live-... and must name --project explicitly; operator identity remains
the signed-in user. --op remove --target-ref ... creates a removal overlay, while detach removes
an existing attachment by its vta-... id.
Output for agents and scripts
When stdout isn’t a terminal (piped, captured, or run by an agent),sumcli emits JSON envelopes with contextual next_actions, and NDJSON for streaming commands. At an interactive terminal it renders a human-readable view instead.
Force either mode explicitly:
Common workflows
Load a local CSV into a table
Two ways: a one-shot direct ingest, or an explicit two-step that goes through the project file tree first. One-shot (recommended when you don’t need the file in the project tree):importStatus: SUCCESS with the new tbl-... ID.
Two-step (when you want the CSV in the project file tree too):
--file-id file-... if you have the ID directly. If the file is already in the project (uploaded by someone else, dropped via the UI, etc.):
Inspect, attach, query, and clean up
A freshly imported table lives in the tenant grid but is not attached to the project catalog. Attach it to make it visible incatalog list and queryable as a project resource:
Ask Addison and generate reports
Long-running commands (--wait / --follow)
chats create, chats reply, reports generate, reports verify, grid push, and tables import all support --wait / --no-wait (and --follow where applicable).
All of those commands default to
--wait. reports generate and reports verify also default to --follow; the rest default to --no-follow. --no-wait --follow is rejected (INVALID_FLAGS, exit 1).
tables import takes --wait / --no-wait but has no --follow; it streams NDJSON whenever it waits.
Stating intent (agents)
When an agent runs sumcli on a person’s behalf, it should pass the human’s request, in their own words and not a summary of the command, so downstream events can be joined to a goal:INTENT_TOO_LONG). Omitting it never fails: machine-mode runs print a one-line stderr warning and continue, so unattended pipelines are unaffected. Discovery, --help, --version, update, and the auth, config, and filesystem groups never warn. SUMCLI_NO_INTENT=1 is an org-level kill switch: the header is never sent, even when an intent is set.
Agent hosts can also identify their surface with a short product token (never free text):
Working with profiles
Each profile pairs an API host with credentials and session state. Switch the active profile, or select one per command:Configuration reference
sumcli reads settings with field-specific precedence: CLI flags win, then environment variables, then the config file.
Identity always comes from the bearer token.
sumcli never trusts caller-supplied identity headers. For the underlying endpoints and error conventions, see the Public API.