Skip to main content
@sente-labs/cli installs the sente binary. It targets the same REST API as the SDKs (https://api.sente.run/v1) and is built for terminals, scripts, and agent shells. Requires Node.js 18+.

Sign in

sente login stores the key in ~/.sente/credentials (mode 0600). The key authenticates your whole organization — don’t paste it into chats or commit it. To hand it to your app without echoing it:
For CI or non-interactive use, set env vars instead of logging in:
sente login --non-interactive fails rather than opening a browser. Add --json to any command for machine-readable output.

Identities

identity create options: --name, --description, --local-part (default: random), --on-conflict error|suffix (default error — fail if the address is taken; suffix appends a random suffix). Everywhere below, <ref> is an identity id, email, or local-part.

Read the inbox and wait for codes

Verification emails: --otp / --magic-link block for the verification message and print just the extracted code or link, so the output is pipeable:
wait accepts --since <ts> (ISO timestamp; stamp it before triggering the action for back-to-back flows — see Receive verification codes) and --timeout <s> (default 25; the CLI loops the server’s 60-second long-poll, so any timeout works). --otp and --magic-link are mutually exclusive. listen can react to each message instead of printing it:
--forward POSTs each inbound message in the exact webhook envelope (with x-sente-secret taken from SENTE_WEBHOOK_SECRET, if set) — useful for developing a webhook handler with no public URL.

Send and reply

--text and/or --html is required.

Register at a third-party app

sente register drives a browser through signup at the app under the identity’s email and completes email verification from the identity’s own inbox. It blocks until the run finishes, printing status lines as it goes.
Options: --username / --password (defaults are generated server-side), --confirm-before-submit, --autonomous, --no-wait (return the run id immediately).
Register only at apps whose terms permit it. In an interactive terminal, register asks whether the agent should submit the form itself or pause for you; --confirm-before-submit forces the pause: the agent fills the form, then the run goes blocked with a live-view URL — you click the final submit yourself (and accept the app’s terms), then sente run resume <runId> continues. See Acceptable use.
CAPTCHAs and SMS verification are not automated either: the run goes blocked and a human finishes the step in the interactive live view, then resumes. See Runs and human takeover. Inspect and control runs:

Get notified when a run needs you

sente watch polls for blocked runs and desktop-notifies (macOS Notification Center; terminal bell elsewhere) with the live-view URL and the resume command — no webhook server needed:
Prefer push? Subscribe a webhook to run.blocked (see below).

Connect an account you already own

sente connect is delegated access to an existing account: you supply the credentials, Sente logs in, vaults them write-only, and keeps the account re-loginable. See the Connect guide.
--totp-seed vaults the authenticator secret (the base32 string behind a QR code’s “can’t scan?” link, or a full otpauth:// URI) so re-login clears TOTP 2FA without a human — the server computes the 30-second code; the seed never reaches any model.
Limits: SSO-only accounts (Google/Okta sign-in, passkeys) cannot be connected. On connected accounts sente credentials returns 403 CREDENTIALS_WRITE_ONLY — credentials are write-only. Email or SMS code MFA blocks the run with MFA_REQUIRED — enter the code in the live view, then sente run resume <runId> — unless the account uses TOTP (vaulted seed) or its notification email was repointed to the Sente identity.
connect supports --no-wait like register.

Sessions

Open a remote browser already logged into an account. The CDP URL prints alone on stdout (pipeable); everything else goes to stderr. If the login went stale, the CLI re-logs-in first (vaulted credentials + a fresh code from the identity’s inbox) before handing you the session.
--no-verify skips the freshness check (raw). One live session per identity; open sessions count against your plan’s browser-minute allowance — close when done. Export the logged-in browser state (cookies + localStorage) as a Playwright storageState JSON to load into your own browser stack (written mode 0600 — it’s a bearer credential, store it like a secret):
Works for created and connected accounts. More in the Sessions guide.

Webhooks

--events is a comma-separated list (default message.received); omit --identity for org-wide. The register output includes your organization’s signing secret (webhook list never shows it) — verify the x-sente-secret header on every delivery. run.blocked payloads carry the block code, liveViewUrl, a dashboard actionUrl, and holdExpiresAt; run.completed and run.failed fire on terminal runs. Payloads and verification code in the Webhooks guide.

Command reference

SDKs for the same API: TypeScript · Python. Endpoint details: API reference.