No more getting stuck at “check your email to continue.” Your agent gets an inbox it owns; Sente completes signup and email verification for it, and keeps a signed-in account it can use again.
The entire setup is one line. Paste it into your coding agent:
give my agent email capabilities via https://sente.run/skill.md
That's it. The agent reads the skill and does the rest: installs the CLI, signs in, creates the inbox.
50 seconds, real run: create an identity → point it at a signup page → the managed browser fills the form, the verification code lands in the agent's inbox and is parsed on arrival → a verified, durable account.
Signup and login flows end with a verification email. If your agent has no inbox of its own, that's where the automation stops. Or worse, it runs on your personal accounts.
“Is there a way to have a workflow that fills an email input and waits for a confirmation code?”— a browser-agent user, public issue tracker
Agents running on a personal Gmail get the whole account suspended. Your agent should never have been on your Google identity. It needs its own, on a domain built for it.
IMAP polling, temp-mail APIs, Zapier glue: parsing verification emails yourself is a side project that breaks. One call that blocks until the code arrives replaces all of it.
Every inbound email is classified on arrival (OTP, magic link, or other) with the code or link already extracted. Your agent makes one call that blocks until the verification email lands, parsed and ready. Email content is treated as untrusted; extraction is hardened against prompt injection.
$ CODE=$(sente wait --identity support-bot --otp --timeout 60) # blocks, prints just the code $ LINK=$(sente wait --identity support-bot --magic-link) # or just the link $ echo $CODE 481923
import { Sente } from "@sente-labs/sdk"; const sente = new Sente({ apiKey: process.env.SENTE_API_TOKEN! }); const idt = await sente.identities.create({ name: "support-bot", localPart: "support-bot" }); // -> { id, email: "support-bot@agents.sente.run" } const since = new Date().toISOString(); // ...trigger the signup / login that sends the verification email... const otp = await sente.messages.waitForOtp(idt.id, { since, timeout: 60 }); if (otp) console.log(otp.code); // e.g. "481923" // links instead: const ml = await sente.messages.waitForMagicLink(idt.id, { since, timeout: 60 });
import os from sente import Sente from datetime import datetime, timezone sente = Sente(api_key=os.environ["SENTE_API_TOKEN"]) idt = sente.identities.create(name="support-bot", local_part="support-bot") # -> support-bot@agents.sente.run since = datetime.now(timezone.utc).isoformat() # ... trigger the app's "send code" action ... r = sente.messages.wait_for_otp(idt.id, since=since, timeout=60) if r: print(r.code) # magic links: wait_for_magic_link(...)
Identities live on agents.sente.run, are long-lived, and are reused across apps. Your org owns them; your agent operates them with a scoped API key.
DKIM-signed outbound from support-bot@agents.sente.run, reply threading, and delivery status tracked through delivered | bounced | complained.
Pull with messages.stream(id, { since }). No server, no public URL, works in local dev. Or push via webhooks with a signed secret and SSRF-guarded URLs.
sente listen --identity support-bot --forward http://localhost:3000/sente relays events to your dev server.
One identity per agent or service. Create it by name, then address it by id, email, or local part anywhere in the API.
Give Sente an app's signup page and an identity. A managed browser registers, the verification code or magic link is picked from the identity's own inbox and applied automatically, and you get back an account that outlives the run: credentials in an encrypted vault, session persisted, re-login on demand.
The managed browser opens the app and fills the signup form as the identity. Watch it live.
The verification email lands in the agent's inbox; the code is parsed on arrival and entered back into the same session. No human OTP-copying.
Generated credentials go to an encrypted vault. Reveal them when you need them; every read is audited.
Re-login anytime for a fresh signed-in session. The inbox stays live, so the account stays reachable.
$ sente register https://app.example.com --identity support-bot run_01hf… queued → running → awaiting_verification → running → completed ✓ $ sente credentials reg_01hf… # vaulted username + password $ sente relogin reg_01hf… # fresh signed-in session, anytime
When a run can't proceed (a CAPTCHA, an unexpected step) it doesn't dead-end: it holds, surfaces a live view, and a person can clear the step and resume. Stable error codes tell you exactly why (CAPTCHA_REQUIRED, PHONE_REQUIRED, …).
Sente is for agents that apps can see and choose to admit. Your org's human owns every identity and account; the agent operates them under delegated, auditable access.
Confirm-before-submit. Turn it on and the agent fills everything, then pauses. You review and click the final submit yourself in the live view, accepting the app's terms in person.
No CAPTCHA solving. A CAPTCHA is a hard stop and a human takeover, never an evasion attempt.
Injection-hardened extraction. Email content is treated as untrusted input: classification runs with a fixed prompt, no tools, and re-validated output.
Scoped keys & encrypted vault. Inbox access is scoped to your org's key; credentials sit in an encrypted vault and every read is audited.
Rate-limited on purpose. Per-org caps on identities, sends, and browser runs. Anti-abuse limits stated plainly, not hidden.
Watch every run live. Each browser run has a live view: watch it work, take over, or abort at any time.
$ npm i -g @sente-labs/cli $ sente login # browser sign-in; free tier, no card $ sente identity create --name "support-bot" --local-part support-bot → support-bot@agents.sente.run $ sente wait --identity support-bot --otp # blocks, prints just the code
Or skip the terminal: paste give my agent email capabilities via https://sente.run/skill.md into your coding agent and let it do this for you.
Everything runs on a free tier, no card needed. Early access, and we read every email: support@sente.run.