Mastra 1.69 Inngest retries option: durable agents and Sume jobs
Mastra core 1.69.0 adds a retries option for Inngest workflows and durable agents. Pair it with a Sume Idempotency-Key so a retried step never pays twice.

Since Mastra core 1.69.0 (September 23, 2026), Inngest workflows and durable agents accept a retries option, so a failing step can re-run automatically. If that step creates a Sume job, give the create call a stable Idempotency-Key; otherwise each retry can create another paid generation. The same release makes durable-agent resume methods resume suspended Inngest runs.
What the release says
| Item | Detail |
|---|---|
| Release date | September 23, 2026 |
| Inngest workflows and durable agents | Accept a retries option |
| Durable agent resume | Now resumes suspended Inngest runs |
| context.background.adopt() | In-memory only |
Where retries and Sume meet
A retry re-executes the step. If the step is create job, then wait, the retry creates again. With an Idempotency-Key built from the workflow run and the step name, the retry gets the original job back; Format run replays return 200 with idempotency_hit: true. Reusing the key with a different body returns 409 idempotency_conflict, which is a signal that the step's input changed between attempts.
Split the step in two
Make creating and waiting separate steps.
- Step one: create with the key, return only the job id.
- Step two: wait for the result, by webhook if possible, otherwise by
GET /v1/jobs/:id/statususingnext_poll_after_seconds. - Step three: fetch
/resultonce the state is terminal.
About adopt()
The release notes call out that context.background.adopt() is in-memory only. Treat that as a reminder: anything you need after a process restart, such as a Sume job id, belongs in durable storage and not in an in-memory handle. A restart would drop the in-memory reference, though the job keeps running at Sume.
Hosted MCP is another option. Mastra can reach https://mcp.sume.com/mcp as a remote tool server; jobs_wait holds at most 55 seconds per call, and wait_slice_expired means call again with the same ids.
Sources
Related posts
More in Developers
- Midjourney collaborative generation: who can see jobs on Sume?
Midjourney plans ways to generate together. On Sume, an API key reads only the jobs its own member created, so sharing takes a plan. Here are the rules.
- Midjourney edit history: keep an edit lineage with Sume job metadata
Midjourney added edit-history navigation and plans persistent edit history. For the Sume image API, build your own lineage with metadata and the jobs list.
- Midjourney Enhance replaces Upscale: the Sume image upscale API
Midjourney's v8.2 editor swapped its Upscale button for Enhance. To upscale from code, Sume has a dedicated image upscale route with factor 1 to 4.
- Midjourney Style Profiles tab: a style library file for Sume
Midjourney added Style Profiles and Featured tabs with detail pages. For the Sume image API, keep a small JSON style library and merge it into each request.
Written by Sume