Surflet
A communication channel for LLM-powered software — like Telegram, but your LLM sends pages instead of chat messages.
When your agent runs while you sleep, where does it reach you?
Surflet is a communication channel for LLM-powered software. Any app with an AI/agent step can generate a dynamic, structured page and deliver it to a user with a single SDK call — the same integration pattern you already use to push LLM text into Telegram, Discord, Slack, or email, but the payload is a rich interactive page instead of a chat message, and the surface is purpose-built for it.
Like Telegram, but for AI agents. Pages instead of chat.
The symmetry
Traditional channel (Telegram / Discord / Slack / email):
app ──► LLM generates text ──► channel SDK ──► user reads chat message
Surflet channel:
app ──► LLM generates structured payload ──► surflet SDK ──► user opens page
The developer's mental model, SDK ergonomics, and integration pattern are the same. Only the shape of the output changes — text vs. page — and with it the surface the user lands on.
Why this matters now
Async and long-running agents are the fastest-growing segment of the AI world: Claude Code background runs, Cursor background agents, Devin-class systems, overnight n8n/CrewAI workflows, Aider-in-loop. These agents magnify a problem chat was never built for:
- Chat assumes the user is present. Async agents need delivery to users who aren't looking.
- Chat threads get noisy and unsearchable across many concurrent agent runs.
- Chat bubbles can't hold structured output — diffs, dashboards, forms, approvals.
- Chat has no "this is important, go read it" vs. "this is just an update" distinction.
Surflet fills that gap — an agent channel optimized for the way AI agents actually need to talk to humans in 2026.
2-minute quickstart — Claude Code
The fastest way to feel what Surflet does: wire it into Claude Code so you can read what your coding agent just did on your phone.
# From the Surflet repo root
pnpm install
pnpm --filter @surflet/mcp-server build
# Register with Claude Code
claude mcp add surflet node $(pwd)/packages/@surflet/mcp-server/dist/index.js \
--env SURFLET_API_URL=http://localhost:3001 \
--env SURFLET_API_KEY=sk_test_surflet123
Then ask Claude Code in any session:
Use the
surflet_publishtool to publish a briefing of what you just did, with a markdown summary of the files you changed.
You get back a hai.surf/... link. Open it on your phone.
See Claude Code Quickstart for the full setup, including the optional post-task hook that fires automatically when Claude Code finishes a turn.
What's in the box
Surflet is not just a renderer — it's the full channel:
- 25+ block types — text, diff, metrics, charts, forms, tables, galleries, code, logs, timelines, approvals, and more. Compose any shape.
- 11 delivery adapters —
hai.surfPWA links, Slack, Email, SMS, Push, Webhook, Jira, voice, etc. Fan out automatically. - Multi-step approvals — sequential / parallel / conditional chains with delegation and timeout escalation.
- Access control — 6 modes: public, one-time, rate-limited, time-boxed, password, authenticated.
- Action callback — user actions flow back to your agent via HMAC-signed webhooks with exponential retry.
- Audit & compliance — chained-hash immutable audit log, GDPR crypto-shredding.
- Streaming updates — progressively append blocks, SSE real-time delivery, automatic "new version" banner.
- 13-tool MCP server — use Surflet directly from Claude Desktop, Claude Code, Cursor, VS Code Copilot, or any MCP-compatible client.
- Python / TypeScript SDKs + CLI — for code integrations not using MCP.
Where to go next
- Claude Code Quickstart — Wire Surflet into Claude Code in 2 minutes (English).
- Python / General Quickstart — 5-minute Python SDK walkthrough (Chinese).
- Concepts — Pages, blocks, actions, approval chains, delivery channels.
- MCP Server Guide — The full 13-tool inventory and all client configurations.
- Python SDK — Agent integrations first.
- TypeScript SDK — Frontend / Node.js integrations.
- API Reference — Complete REST API.
- Block Reference — All 25 block types with payload shapes.
Status
Surflet is currently in internal development and testing. The MCP server, hook, and SDKs work, but are installed by building from source until the public npm release. Production hosting at api.surflet.app and hai.surf is live for internal testing. A public launch with the @surflet/mcp-server npm package and an MIT license is planned once internal validation is complete.
Follow along or peek at the source: github.com/surflet/surflet