Build durable, resilient, and observable workflows. Built by @vercel.

Joined October 2025
7 Photos and videos
Workflow SDK retweeted
Buttons and modals in Chat SDK now accept a πšŒπšŠπš•πš•πš‹πšŠπšŒπš”πš„πš›πš• prop. Pair it with a @workflowsdk webhook to pause a run, then resume it when a human in the loop clicks a button. vercel.com/changelog/chat-sd…
6
60
4,554
Workflow SDK retweeted
Replying to @vercel
@vercel Ship26 is live! This year, we shipped a 3D device that can create WASM apps using wterm, just-bash, and @workflowsdk ...and a landing full of agents that walk around the site using a dynamic navigation mesh.
28
25
291
49,437
Workflow SDK retweeted
The hardest thing about agents and backends is durability. @workflowsdk fixes this. That LLM you're calling *will* go down. That service *will* rate limit you. That database *will* unexpectedly slow down. You *will* get paged πŸ’€ I've been looking for a unicorn for a decade. I wanted the level of reliability of combining stuff like SQS / Kafka / microservices, and I absolutely did not want *that* at the same time πŸ˜‚ Truly reliable systems like that are notoriously difficult to reason about, to develop locally, to test, to simulate, to deploy… Workflow SDK solves that without compromises. We're doing what Next.js did for the frontend, but for one of the most important problems of the new generation of backend applications. Notably, Workflow SDK has an incredible self-hosting and multi-cloud story from day 0. We've taken amazing lessons from Next.js and poured them into the many Worlds (adapters) you can deploy to. Congrats to Pranay and the Workflow team on a generational ship: vercel.com/blog/a-new-progra…
Apr 16
Vercel Workflows is GA. Your code is the orchestrator. Ship agents, backends, or any long-running process without managing queues, retries, or workers. vercel.com/blog/a-new-progra…
66
46
628
126,425
Workflow SDK retweeted
Apr 16
Vercel Workflows is GA. Your code is the orchestrator. Ship agents, backends, or any long-running process without managing queues, retries, or workers. vercel.com/blog/a-new-progra…
17
43
465
167,886
Workflow SDK retweeted
You can now filter workflow logs to easily view all logs for a workflow run in one place. Jump directly from a run to logs, filter by steps, and quickly find relevant requests.
5
6
88
15,232
Workflow DevKit is now @WorkflowSDK
1
3
27
2,002
Workflow SDK retweeted
A fascinating aspect of Open Agents is how it uses the @WorkflowDevKit SDK to elegantly orchestrate agent sessions efficiently. But before we go deeper, let's understand the problem: Open Agents is a coding agent that runs in the cloud. Naturally, the expectation here is that I should be able to kick off multiple sessions and go to sleep and then wake up to a stack of PRs. This inherently means, the sessions should be - long running - stateful - resumable - reliable A naive way to solve this: - Write an API to start a session, create a session ID and store it in a database - along with other metadata. - Trigger the session inside a sandbox (Vercel sandboxes can run up to 5hours) and stream the responses back to the client using a websocket - Store the responses to the db so when a client reconnects to a session using a session ID, we can resume it by fetching the results and restarting the session Why wouldn't you just do this?
3 months ago I started building a coding agent that runs in the cloud. It's since written every line of code I've shipped, including itself. Today, I'm open sourcing it. Introducing Open Agents.
4
12
119
23,615
Sending an alert to four channels sequentially means the last channel waits for the first three. If you send them in parallel without coordination, you lose track of which specific channels failed. Promise.allSettled() provides the best of both worlds.
1
4
1,182
Using Promise.allSettled() provides parallel execution alongside per-channel failure tracking. Each step is independent, so throwing a FatalError stops retries for that specific channel while the others continue.
1
551
This setup handles transient retries automatically while stopping permanent failures immediately. You can track everything without a coordinator service, dead letter queues, or complex retry policies. Explore the interactive demo on v0: v0.app/chat/yNVqbF72CwM
386
Traditional: a retry queue, a backoff column, and a cron to sweep stuck jobs. Workflow: a for-loop with `sleep()`:
2
8
598
The backoff is just math in a local variable. `sleep()` pauses for real wall time and zero compute while waiting. Crash between attempts? The loop picks up exactly where it left off.
1
2
443
No queue. No cron. No dead-letter table. Exponential backoff in a for-loop that survives restarts. Explore the interactive demo on v0: v0.app/chat/retry-backoff-NQ…
1
2
356
30 Days of Workflow DevKit β€” Day 4 β€” Payment Webhooks What if your webhook tracked an order from first charge to final refund β€” remembering every event β€” without a database? `createWebhook()` can do that in a simple loop:
2
1
5
523
The webhook is scoped to one order. `for await` suspends between events at zero compute. Each hit runs as a `"use step"`, retried independently. `ledger` is a local array. It survives across events, restarts, and deploys.
2
1
253
No database rows required. Just a local array that tracks the whole payment lifecycle. Explore the interactive demo on v0: v0.app/chat/webhook-basics-1…
1
239
30 Days of Workflow DevKit β€” Day 3 β€” Easy Cancel You tweaked the system prompt and kicked off a test workflow. Three sections in, every paragraph reads like a fever dream. Stop the run, keep what's there, fix the prompt. All thanks to a simple cancel():
1
5
339
Each `"use step"` function runs to completion or not at all. `run.cancel()` exits at the next step boundary. Completed sections are preserved in your dashboard, pending ones are dropped. The cancelled run is yours to inspect.
1
1
225
No wasted tokens. No half-written output. Cancel, keep what's good, fix the prompt, rerun. Explore the interactive demo on v0: v0.app/chat/safe-cancel-a42f…
1
224
30 Days of Workflow DevKit β€” Day 2 β€” Email Drip Campaign You need to send 4 emails over 7 days. So you set up a cron, a state table, a "last sent" column, retry logic... Or you write this:
1
4
12
1,378
Each `sleep()` is real. `sleep("4d")` pauses for four actual days. Deploy in between? It picks up exactly where it left off. Each send is a `"use step"` which retries independently.
1
1
232
That's the whole email drip campaign. No scheduler. No queue. No state machine. Seven lines of async/await. Explore the interactive demo on v0: v0.app/chat/onboarding-drip-…
1
228