Nevo is the inbound event layer for AI agents. Point webhooks, inbound email, Slack, or cron schedules at one URL; your agent receives them verified, persisted, and rendered prompt-ready — formatted text you can hand straight to a model. Traditional backends use the same surface without the rendering step.
Why it exists
Every agent team we’ve talked to spends the first sprint doing the same plumbing: verifying Stripe signatures, wiring a separate email provider, translating each vendor’s payload shape into something a model can read, writing a retry log, building a replay tool for when the model drops an event. Nobody ships agent features until that layer exists.
Nevo is that layer, productized:
- One receiver. Point every provider — Stripe, GitHub, Resend, Linear, whatever — at one place. Your agent listens on one stream, one shape, no per-source parsing.
- Prompt-ready. Every event arrives with a deterministic text rendering (
event.prompt_ready) that’s already shaped for an LLM. The raw payload stays onevent.datawhen your code needs exact values. - Built-in durability. Signature verification, rate limits, replay from the dashboard, and a full delivery log out of the box. Events your agent drops can be replayed with one click.
What you get
- Streaming delivery — persistent SDK connection, or HTTP POST to URLs you own. Pick one, use both; same event shape either way.
- Replies.
await event.reply(text="…")from inside a handler sends the response back on the channel the event arrived on. Email threading via RFC 5322 headers; Slack threading viathread_ts— replies land in the same conversation. - Filter rules. Declarative rules in the dashboard drop noisy events (bot PRs, test-mode webhooks), transform fields (redact secrets, normalise cases), or route to specific endpoints — with dry-run against the last 7 days before you enable. See Rules.
- Dashboard. Live events feed, delivery log, channels, endpoints, API keys, billing. Everything operable without writing code.
- Replay. Re-deliver any historical event to your agent from the dashboard — recover gracefully when a model goes off the rails.
Who it’s for
Primarily agent builders: teams writing handlers that consume real-world signals, think about them with an LLM, and respond. An on-call agent reading Sentry + PagerDuty and paging a human. A support agent replying to forwarded email. A PR reviewer commenting on GitHub diffs.
Traditional services use Nevo the same way. A Stripe webhook worker, an email-to-ticket bridge — same SDK, same event shape, same dashboard. You just skip event.prompt_ready since there’s no model on the other end.
How it fits together
┌──────────────────────────────┐
│ Webhook / email / slack / │ ← Stripe, GitHub, Resend, @mentions,
│ cron │ schedules — anything
└─────────────┬────────────────┘
│ verify, rate-limit, persist
▼
┌──────────────────────────────┐
│ Nevo │ ← normalise, render prompt-ready, fan out
└─────────────┬────────────────┘
│
▼
┌──────────────────────────────┐
│ Your agent │ ← one handler, branch on event.type
└──────────────────────────────┘
SDKs
First-party SDKs with identical event shapes and reply semantics:
- Python —
pip install nevo-sdk— docs. - TypeScript —
npm install nevo-sdk— docs. - Go —
go get github.com/nevo-sh/nevo-go— docs.
Each SDK wraps the same streaming connection and reply API. Pick by stack; move between them without code changes on the Nevo side.
Next
Create a project and an API key in Create a project, then wire up your first event in Your first event.