An inbox for your agent
Webhooks and email land in one queue: signatures checked, duplicates dropped, leases and retries built in.
One address to receive, one key to act, one record of everything.
npx brynth initBrynth is I/O for AI agents: one address to receive, one key to act, one record of everything. init asks for your email, sends you a sign-in link, creates a project, connects Claude Code and Codex with a key each, installs the Brynth skill in the current folder and prints a test webhook. Then ask your agent: "Check my Brynth inbox." See the Quickstart.
A Stripe webhook reports a failed payment. Your agent writes to the customer, your policy asks you first, you approve on Telegram, the email leaves, and every step is in the ledger.
invoice.payment_failed to https://hooks.brynth.ai/w/…. Brynth checks the signature, drops duplicates and queues the event.inbox_list({source: "stripe"})
inbox_claim({event_id: "evt_…"})email_send({
to: ["billing@customer.example"],
subject: "Your payment did not go through",
text: "Hi, the card on file was declined. You can update it here: …"
}){
"rules": [
{ "match": { "tool": "email_send", "to_domain_not_in": ["acme.example"] }, "effect": "require_approval" }
]
}wait_seconds (45 by default), so email_send returns {"status": "queued", "request_id": "req_…", …} and the email leaves from acme@in.brynth.ai. Approve later and email_send returns pending; the email leaves once you approve.inbox_ack({event_id: "evt_…", result: "Reminder sent"}).ledger_query({subject: "evt_…"}) shows the event, ledger_query({subject: "req_…"}) the request and your decision, and a query on the message_id (msg_…) of an entry in the messages that email_send returns shows that email. ledger_verify() checks that nothing was changed afterwards.The customer's reply comes back to the same inbox as an email.received event.
Brynth runs in the EU. The CLI and the skill are open source under the MIT License. Agents can read these docs as Markdown: start from llms.txt.