For agents Durable agent inboxes →

Event inboxes
for AI agents.

Durable event infrastructure for agents.

EventsEnsue inboxYour agents
Stripepayment_intent.succeeded
GitHubcheck_run.completed
LinearIssue · create
Slackmessage.channels
Ensue
Claude Codeasleep
Cloudflare Agentsasleep
Any MCP agentasleep
Your serverasleep
The problem

Agents are bad at
waiting for the world.

Most real agent work involves waiting: for a payment to settle, a build to finish, a customer to reply or a manager to say yes. Today that means polling, glue servers and lost events.

01

No address

Agents run in sandboxes, serverless functions and laptops. Stripe and GitHub need a public HTTPS URL to call.

Ensue: a URL per source, created in one call, even by the agent itself.
02

Not running

An agent sleeps, times out or restarts. An event that lands while it's down is gone, so teams poll instead and pay for it in tokens and rate limits.

Ensue: a durable inbox that holds events and starts the agent when they arrive.
03

Untrusted input

A webhook body is text written by someone else, going straight into a model's context: oversized, noisy and a prompt-injection risk.

Ensue: verified, trimmed to the fields that matter and marked as data, not instructions.
How it works

Receive. Hold.
Shape. Deliver.

Four steps between an event out in the world and your agent acting on it.

01

Receive

Point Stripe, GitHub, Slack or any webhook at an Ensue endpoint. Signatures are checked against the provider's own secret.

02

Hold

Every event lands in the agent's inbox and stays there until it's acked, so a crash or timeout means redelivery, not loss.

03

Shape

A transform turns the raw payload into an agent view: only the fields that matter, small enough to stay cheap.

04

Deliver

Ensue wakes your agent with a signed hook, or over a stream the agent opens itself, so it works on a laptop too. The agent pulls its events over HTTP or MCP and acks each one.

# Wait up to 30 s for events; each one comes with a lease
curl "https://api.getensue.com/v1/agent/inbox/dst_…/next?wait=30" \
  -H "Authorization: Bearer ens_…"

# Done? Ack it. Crash or run out of time, and it comes back.
curl -X POST https://api.getensue.com/v1/events/evt_9f2c1a/ack \
  -H "Authorization: Bearer ens_…" \
  -d '{ "lease_id": "lse_…", "outcome": "Fixed null check, PR #812" }'
Starters for the wake script, Claude Code and Cloudflare Agents are in the repo.
Destinations

Reach your agent
wherever it runs.

Ensue tells your agent there's work, then hands over events as it pulls them. You keep your runtime, framework and cloud.

Claude Code

Start a headless run, or nudge an open session, whenever the inbox gets work.

readiness stream · starter included

Cloudflare Agents

An Agents SDK agent sleeps until its wake hook fires, then pulls and acks its events.

wake hook · starter included

Any MCP client

Tools to wait for an event, pull, ack, release and subscribe, from any agent that speaks MCP.

api.getensue.com/mcp

Your own server

A signed wake to any URL, with bearer, basic or API-key auth to get past your gateway.

signed POST · no event data in the wake

Laptops and sandboxes

No public URL needed. The agent opens a stream outbound and is told when to pull.

GET /agent/inbox/:id/ready

Always-on workers

Keep a WebSocket open and get events pushed as they arrive, leased like a pull.

GET /agent/inbox/:id/stream

Events agents wait on

StripeGitHubGitLabShopifyLinearSlackReplicateAny webhook

Ways to read an inbox

Long-poll pullPeek and claimWebSocket streamMCP tools

Built in

LeasesRedeliveryPriority orderLoop protectionReplay
Built for agents

Delivery built for
how agents run.

Starting an agent costs money and tokens. Ensue decides when to wake it and what goes into its context.

Agent views

Transforms turn a raw webhook into the handful of fields a model needs, so context stays small and cheap.

raw check_run4,812 tokens
{
  "action": "completed",
  "check_run": {
    "id": 2831049...,
    "node_id": "CR_kwDO...",
    "head_sha": "9f2c1a...",
    "external_id": "...",
    "url": "https://api...",
    "html_url": "https://...",
    "details_url": "...",
    "status": "completed",
    "app": { "id": 15368,
agent view212 tokens
{
  "repo": "acme/api",
  "branch": "fix/login",
  "check": "unit-tests",
  "conclusion": "failure",
  "failed": [
    "auth.test.ts:41"
  ],
  "log_tail": "Expected 200…"
}

Ack or redeliver

Each delivery holds a lease. If the agent crashes or runs out of time before acking, the event goes back in the inbox and is delivered again.

evt_9f2c1a · delivery 1timed out
evt_9f2c1a · delivery 2acked
outcome: "Fixed null check in auth.ts"4m 12s

Coalesce bursts

Twelve pushes in thirty seconds start one agent, not twelve.

→1 run

Loop protection

An agent that keeps waking itself is stopped until a person lets it continue.

wakes in a row, no person3 max
headless wakes12 / hour

Safe input

Signatures are checked before the agent sees anything, and every payload is marked as untrusted data.

stripe-signaturevalid
untrustedtrue

Combine updates

Forty updates to one CI run reach the agent as one event with the latest state. Final states always arrive on their own.

workflow_run 8812 · 40 updatesgithub-actions
completed · success1 event

Replay real events

Every event is kept. Replay last week's events into another inbox to try a new version of your agent.

check_run.completed · 37 events · last 7 daysreplay
→ inbox ci-fixer-v437 waiting
Use cases

Agents that react
instead of poll.

Fix the failing build

A coding agent wakes on a red CI check, reproduces the failure and opens a PR.

ongithub check_run · failure
runheadless Claude Code
ackPR opened

Wait for the payment

A purchasing agent sends a payment link, sleeps, and picks up fulfilment the moment Stripe confirms.

onstripe payment_intent.succeeded
runCloudflare agent by order id
ackorder fulfilled

Triage new issues

A triage agent wakes for each new Linear issue, labels it and assigns an owner.

onlinear Issue · create
runany MCP agent
acklabelled and assigned

Your agents,
always reachable.

We're onboarding teams building agents in waves. Tell us where your agents run and we'll prioritise that destination.