{"id":"event-driven-agent-jobs","slug":"event-driven-agent-jobs","name":"Event-driven agent jobs with great DX","shortName":"Event-driven agent jobs with great DX","problemStatement":"Fan-out, debounce, and retry agent work from events without operating queues.","whenNotTopPick":"Polyglot extreme scale — Temporal; raw HTTP delayed callbacks without a workflow runtime — Upstash QStash; pure Python GPU jobs — Modal.","categoryIds":["cat-cpu-compute"],"depotPickProviderId":"inngest","depotPickRationale":"DX + reliability balance; Inngest default for most product agents.","runnersUpIds":["trigger-dev","upstash-qstash","temporal-cloud","hatchet","restate","dbos"],"weights":{"capabilityFit":0.25,"pricePerformance":0.18,"latencyReliability":0.15,"developerDx":0.15,"privacyPosture":0.1,"lockInRisk":0.07,"maturity":0.1},"methodologyNotes":"DX + reliability balance; Inngest default for most product agents.","tags":["event"],"depth":{"whenNotToUse":{"text":"Polyglot extreme scale — Temporal; raw HTTP delayed callbacks without a workflow runtime — Upstash QStash; pure Python GPU jobs — Modal.","source":"editorial `whenNotTopPick` (data/jtbds.json)"},"whenNotToUseReason":null,"runnerUp":{"providerId":"trigger-dev","name":"Trigger.dev","overallForJob":7.84,"pickOverallForJob":8.07,"beatsPickOn":["pricePerformance","developerDx"],"source":"first resolvable entry of the job's editorially ranked `runnersUpIds`; scores are stored job-weighted scores"},"runnerUpReason":null,"lockIn":{"pickLockInRisk":4.2,"runnerUpLockInRisk":4.8,"scale":"0–10 stored curated estimate; higher = more lock-in (worse)","pickExitSignals":[],"runnerUpExitSignals":[],"pickNotes":[],"selfHostFallback":[{"id":"hatchet","name":"Hatchet","license":"MIT","sourceUrl":"https://raw.githubusercontent.com/hatchet-dev/hatchet/main/LICENSE"}],"migration":"The pick has lower stored lock-in risk than runner-up Trigger.dev (4.2 vs 4.8). Self-host fallback listed for this job: Hatchet.","migrationReason":null,"derivedFrom":"stored lockInRisk scores, provider tags (oss, self-host, openai-compat, open-models), free rows that list this job, and verbatim provider notes. No migration guide was invented."}},"freshness":{"pick":{"score":{"asOf":"2026-09-14","ageDays":43,"stale":true,"staleAfterDays":30,"reason":null},"lastReviewed":{"asOf":"2026-09-14","ageDays":43,"stale":true,"staleAfterDays":30,"reason":null},"sourceCheck":{"checkedAt":"2026-10-27","sourceUrls":3,"sourcesReachable":3,"pricingRows":7,"pricingRowsReconfirmed":3,"note":"A source re-check confirms the page is reachable and, for pricing rows, that the stored amount and SKU name appear on it. It does not re-derive or change the score.","reason":null}}},"depotPick":{"id":"inngest","slug":"inngest","name":"Inngest","tagline":"Best DX default for durable agent workflows in TypeScript/Python. Temporal when you need harder multi-lang…","overall":8.07},"runnersUp":[{"id":"trigger-dev","slug":"trigger-dev","name":"Trigger.dev","tagline":"Pick for TS app background agent jobs. Inngest for event meshes; Temporal for polyglot durability.","overall":7.84},{"id":"upstash-qstash","slug":"upstash-qstash","name":"Upstash QStash","tagline":"Depot pick for a raw serverless agent event backbone (webhooks, delayed retries, fan-out) without operating…","overall":8.38},{"id":"temporal-cloud","slug":"temporal-cloud","name":"Temporal Cloud","tagline":"Default durable orchestration for serious long-running agents. Inngest/Trigger.dev for lighter DX.","overall":8.02},{"id":"hatchet","slug":"hatchet","name":"Hatchet","tagline":"Temporal/Inngest peer for agent task orchestration. Prefer Temporal for serious durability; Inngest for TS…","overall":8.02},{"id":"restate","slug":"restate","name":"Restate","tagline":"Strong Temporal alternative for durable AI agents, especially on Workers/Vercel. Remains medium until paid…","overall":8.15},{"id":"dbos","slug":"dbos","name":"DBOS","tagline":"Embed durable steps in your app's Postgres rather than running a separate workflow cluster. Temporal remains…","overall":7.99}]}