<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Resonate HQ: Posts]]></title><description><![CDATA[ Resonate HQ Posts - articles, opinions, thoughts, and experiences]]></description><link>https://journal.resonatehq.io/s/posts</link><image><url>https://substackcdn.com/image/fetch/$s_!rmHI!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65e925e6-7390-43a9-b769-1e76f4ca00df_400x400.png</url><title>Resonate HQ: Posts</title><link>https://journal.resonatehq.io/s/posts</link></image><generator>Substack</generator><lastBuildDate>Tue, 05 May 2026 12:44:24 GMT</lastBuildDate><atom:link href="https://journal.resonatehq.io/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Resonate HQ]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[resonatehqio@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[resonatehqio@substack.com]]></itunes:email><itunes:name><![CDATA[Dominik Tornow]]></itunes:name></itunes:owner><itunes:author><![CDATA[Dominik Tornow]]></itunes:author><googleplay:owner><![CDATA[resonatehqio@substack.com]]></googleplay:owner><googleplay:email><![CDATA[resonatehqio@substack.com]]></googleplay:email><googleplay:author><![CDATA[Dominik Tornow]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[The Resonate Rust SDK is here!]]></title><description><![CDATA[To try it: cargo add resonate-sdk and point your project at a Resonate server.]]></description><link>https://journal.resonatehq.io/p/the-resonate-rust-sdk-is-here</link><guid isPermaLink="false">https://journal.resonatehq.io/p/the-resonate-rust-sdk-is-here</guid><dc:creator><![CDATA[Cully Wakelin]]></dc:creator><pubDate>Thu, 30 Apr 2026 17:47:43 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!lHgF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9172e86c-59b0-4c43-a795-b5201e518d74_2160x2160.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lHgF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9172e86c-59b0-4c43-a795-b5201e518d74_2160x2160.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lHgF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9172e86c-59b0-4c43-a795-b5201e518d74_2160x2160.png 424w, https://substackcdn.com/image/fetch/$s_!lHgF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9172e86c-59b0-4c43-a795-b5201e518d74_2160x2160.png 848w, https://substackcdn.com/image/fetch/$s_!lHgF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9172e86c-59b0-4c43-a795-b5201e518d74_2160x2160.png 1272w, https://substackcdn.com/image/fetch/$s_!lHgF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9172e86c-59b0-4c43-a795-b5201e518d74_2160x2160.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lHgF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9172e86c-59b0-4c43-a795-b5201e518d74_2160x2160.png" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9172e86c-59b0-4c43-a795-b5201e518d74_2160x2160.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:261266,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/196026352?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9172e86c-59b0-4c43-a795-b5201e518d74_2160x2160.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!lHgF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9172e86c-59b0-4c43-a795-b5201e518d74_2160x2160.png 424w, https://substackcdn.com/image/fetch/$s_!lHgF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9172e86c-59b0-4c43-a795-b5201e518d74_2160x2160.png 848w, https://substackcdn.com/image/fetch/$s_!lHgF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9172e86c-59b0-4c43-a795-b5201e518d74_2160x2160.png 1272w, https://substackcdn.com/image/fetch/$s_!lHgF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9172e86c-59b0-4c43-a795-b5201e518d74_2160x2160.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The <a href="https://github.com/resonatehq/resonate-sdk-rs">Resonate Rust SDK</a> is now available to try!</p><p style="text-align: center;"><code>cargo add resonate-sdk</code></p><p>If you write Rust and need code that survives crashes, restarts, and long-running coordination without bolting on a state machine, start here.</p><p>What you get is distributed async/await for Rust. </p><p>Mark a function with <code>#[resonate::function]</code>, call it through <code>ctx.run</code>, and the runtime handles checkpointing, retries, and crash recovery.</p><p>You write functions that return <code>Result&lt;T&gt;</code> &#8212; no state-machine DSL to author separately.</p><p>The programming model matches the TypeScript and Python SDKs, expressed in idiomatic Rust.</p><p>To try it: <code>cargo add resonate-sdk</code> and point your project at a Resonate server.</p><p>Runnable examples live at <a href="https://github.com/resonatehq">github.com/resonatehq</a> under repos prefixed &#8220;example-*-rs&#8221;.</p><p>Reference docs are at <a href="https://docs.resonatehq.io">docs.resonatehq.io</a>. Questions land best in <a href="https://resonatehq.io/discord">Discord</a>.</p>]]></content:encoded></item><item><title><![CDATA[Resonate SKILLS.md]]></title><description><![CDATA[Coverage is expanding as the components evolve.]]></description><link>https://journal.resonatehq.io/p/resonate-skillsmd</link><guid isPermaLink="false">https://journal.resonatehq.io/p/resonate-skillsmd</guid><dc:creator><![CDATA[Cully Wakelin]]></dc:creator><pubDate>Mon, 20 Apr 2026 15:03:03 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!GiW7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6b2f597-559c-4f23-93ff-a51b1323126a_1080x1080.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GiW7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6b2f597-559c-4f23-93ff-a51b1323126a_1080x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GiW7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6b2f597-559c-4f23-93ff-a51b1323126a_1080x1080.png 424w, https://substackcdn.com/image/fetch/$s_!GiW7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6b2f597-559c-4f23-93ff-a51b1323126a_1080x1080.png 848w, https://substackcdn.com/image/fetch/$s_!GiW7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6b2f597-559c-4f23-93ff-a51b1323126a_1080x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!GiW7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6b2f597-559c-4f23-93ff-a51b1323126a_1080x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GiW7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6b2f597-559c-4f23-93ff-a51b1323126a_1080x1080.png" width="1080" height="1080" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a6b2f597-559c-4f23-93ff-a51b1323126a_1080x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1080,&quot;width&quot;:1080,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:170444,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/194629517?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6b2f597-559c-4f23-93ff-a51b1323126a_1080x1080.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GiW7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6b2f597-559c-4f23-93ff-a51b1323126a_1080x1080.png 424w, https://substackcdn.com/image/fetch/$s_!GiW7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6b2f597-559c-4f23-93ff-a51b1323126a_1080x1080.png 848w, https://substackcdn.com/image/fetch/$s_!GiW7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6b2f597-559c-4f23-93ff-a51b1323126a_1080x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!GiW7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6b2f597-559c-4f23-93ff-a51b1323126a_1080x1080.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>We just open-sourced <a href="https://github.com/resonatehq/resonate-skills">resonatehq/resonate-skills</a> &#8212; 30+ agent skills for building with Resonate. Apache 2.0. TypeScript, Python, Rust, and server operations.</p><p>When we say &#8220;skill&#8221; we mean structured context that teaches coding agents how to reason about and write durable execution code. They follow <a href="https://docs.anthropic.com/en/docs/claude-code/skills">Anthropic&#8217;s Agent Skills</a> convention and work with Claude Code, the Anthropic SDK, Cursor, and any agent that can load Markdown as context.</p><p><em>What&#8217;s in the repo:</em></p><ul><li><p>Philosophy: This is recommend as the skill every agent should load first. It&#8217;s a table of instincts agents have that are wrong when using Resonate.</p></li><li><p>Durable Execution: covers the concept itself and a matrix for understanding when you need it.</p></li><li><p>Core SDK usage: covering the two execution contexts and debugging.</p></li><li><p>Development patterns: one per core pattern.</p><ul><li><p>Saga: forward execution with reverse-order compensation.</p></li><li><p>Recursive fan-out: parallel execution via RPCs.</p></li><li><p>Human-in-the-loop: creates a durable suspension point.</p></li><li><p>External system of record: coordinating writes to any external SoR using idempotency keys routed through Resonate&#8217;s checkpointing.</p></li><li><p>Durable sleep / scheduled work: timers that survive crashes</p></li></ul></li><li><p>Advanced reasoning: one skill that maps the Distributed Async Await formal spec to SDK patterns.</p></li><li><p>Deployments: covers deploying the Resonate server and workers to production.</p></li></ul><p><em>Skill structure:</em></p><p>Each skill is a directory with a SKILL.md. Frontmatter tells agents when to load it:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;markdown&quot;,&quot;nodeId&quot;:&quot;4941db75-6c38-4f96-b5b7-2e81dfee6b45&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-markdown">---
name: resonate-saga-pattern-typescript

description: Implement saga patterns for distributed transactions with compensation logic. Use when coordinating multi-step processes that need to maintain consistency across failures by unwinding completed steps.

license: Apache-2.0
---</code></pre></div><p>The body is mental models, code patterns, anti-patterns, and decision trees. </p><p>To setup fo Claude Code:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;shell&quot;,&quot;nodeId&quot;:&quot;49a2fa99-a142-459f-bfe2-3a6ff008843c&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-shell">cd your-project
mkdir -p .claude/skills
git clone https://github.com/resonatehq/resonate-skills .claude/skills/resonate</code></pre></div><p>To setup for any other agent, load the SKILL.md files as context. No runtime dependency. No package. Plain Markdown.<br><br>Invoke explicitly (Use the resonate-saga-pattern-typescript skill to...) or let the agent match on description.</p><p>The repo is accepting contributions.</p><p>Coverage is expanding as the components evolve.</p><p>Resonate is open source. <a href="https://github.com/resonatehq">GitHub</a> &#183; <a href="https://resonatehq.io/discord">Discord</a> &#183; <a href="https://docs.resonatehq.io">Docs</a></p>]]></content:encoded></item><item><title><![CDATA[Distributed Async/Await on Hello, Agent! Ep. 2]]></title><description><![CDATA[April 14. Register early to get first access when the episode drops.]]></description><link>https://journal.resonatehq.io/p/distributed-asyncawait-on-hello-agent</link><guid isPermaLink="false">https://journal.resonatehq.io/p/distributed-asyncawait-on-hello-agent</guid><dc:creator><![CDATA[Dominik Tornow]]></dc:creator><pubDate>Wed, 08 Apr 2026 15:03:41 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!08OA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9ea9396-5f51-48d6-a452-931e26293d82_1024x608.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!08OA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9ea9396-5f51-48d6-a452-931e26293d82_1024x608.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!08OA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9ea9396-5f51-48d6-a452-931e26293d82_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!08OA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9ea9396-5f51-48d6-a452-931e26293d82_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!08OA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9ea9396-5f51-48d6-a452-931e26293d82_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!08OA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9ea9396-5f51-48d6-a452-931e26293d82_1024x608.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!08OA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9ea9396-5f51-48d6-a452-931e26293d82_1024x608.png" width="1024" height="608" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c9ea9396-5f51-48d6-a452-931e26293d82_1024x608.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:608,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!08OA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9ea9396-5f51-48d6-a452-931e26293d82_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!08OA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9ea9396-5f51-48d6-a452-931e26293d82_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!08OA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9ea9396-5f51-48d6-a452-931e26293d82_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!08OA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9ea9396-5f51-48d6-a452-931e26293d82_1024x608.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Distributed Async/Await is the programming model. Agent reliability is the test.</p><p>On April 14, I am joining Alexander Gallego on Episode 2 of Redpanda's *Hello, Agent!* podcast to talk about both.</p><p>Register: <a href="https://www.redpanda.com/events/hello-agent-ep2-distributed-async-await">https://www.redpanda.com/events/hello-agent-ep2-distributed-async-await</a></p><p>Most people frame agent reliability as a problem at the edges. Retries. Timeouts. A queue or two. That framing is comfortable. It is also why so many agentic systems fall over the moment they leave the demo.</p><p>An agent is a distributed program. Its work spans processes, machines, networks, and time. Once you accept that, the question stops being "how do I make my agent reliable" and starts being "what is the right programming model for distributed computation." That question has a good answer. It is not a new one.</p><p>Async/await let us write concurrent code that reads like sequential code. Distributed Async/Await extends the same idea across failure domains. The function suspends. The runtime is responsible for resuming it &#8212; same machine, different machine, an hour later, a week later, after a crash, after a deploy. The programming model does not change. The execution model carries the weight.</p><p>Possible topics we might cover:</p><ul><li><p>What "distributed" actually adds to async/await &#8212; and why the addition is not cosmetic.</p></li><li><p>Designing for reliability when work spans services, queues, and failure domains you do not control.</p></li><li><p>Failure handling that does not turn the application into a graveyard of defensive code.</p></li><li><p>Why agent reliability and workflow reliability are, in the end, the same problem.</p></li></ul><p>If you have ever written a workflow that looked clean on a whiteboard and then spent a week chasing partial failures in production &#8212; this one is for you.<br><br>Reliability is not a feature you bolt on. It is a property of the programming model you chose.<br><br>April 14. Register early to get first access when the episode drops.</p>]]></content:encoded></item><item><title><![CDATA[What highly optimized durable execution looks like]]></title><description><![CDATA[Durability stops being a premium feature and starts being a default because it's so cheap there's no reason not to.]]></description><link>https://journal.resonatehq.io/p/what-highly-optimized-durable-execution</link><guid isPermaLink="false">https://journal.resonatehq.io/p/what-highly-optimized-durable-execution</guid><dc:creator><![CDATA[Cully Wakelin]]></dc:creator><pubDate>Thu, 02 Apr 2026 21:07:05 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!6PKp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F124939f5-c587-4535-894c-abd9bdf56c67_1048x1049.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6PKp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F124939f5-c587-4535-894c-abd9bdf56c67_1048x1049.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6PKp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F124939f5-c587-4535-894c-abd9bdf56c67_1048x1049.png 424w, https://substackcdn.com/image/fetch/$s_!6PKp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F124939f5-c587-4535-894c-abd9bdf56c67_1048x1049.png 848w, https://substackcdn.com/image/fetch/$s_!6PKp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F124939f5-c587-4535-894c-abd9bdf56c67_1048x1049.png 1272w, https://substackcdn.com/image/fetch/$s_!6PKp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F124939f5-c587-4535-894c-abd9bdf56c67_1048x1049.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6PKp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F124939f5-c587-4535-894c-abd9bdf56c67_1048x1049.png" width="1048" height="1049" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/124939f5-c587-4535-894c-abd9bdf56c67_1048x1049.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1049,&quot;width&quot;:1048,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:441233,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/192988851?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F124939f5-c587-4535-894c-abd9bdf56c67_1048x1049.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6PKp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F124939f5-c587-4535-894c-abd9bdf56c67_1048x1049.png 424w, https://substackcdn.com/image/fetch/$s_!6PKp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F124939f5-c587-4535-894c-abd9bdf56c67_1048x1049.png 848w, https://substackcdn.com/image/fetch/$s_!6PKp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F124939f5-c587-4535-894c-abd9bdf56c67_1048x1049.png 1272w, https://substackcdn.com/image/fetch/$s_!6PKp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F124939f5-c587-4535-894c-abd9bdf56c67_1048x1049.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>We switched from writing components directly, to doubling down on protocols and specifications. </p><p>A formal spec for the distributed async/await protocol. Language-agnostic. Transport-agnostic. Storage-agnostic.</p><p>A conformance test suite. Transition tests. Fuzz iterations.</p><p>And then we started generating the components.</p><p>Not just the SDK. Not just the workers. The server too.</p><p>When you need a Resonate server targeting Postgres + HTTP, we generate a server that is Postgres + HTTP. Not a general-purpose binary that happens to support Postgres as one of twelve backends. Every line of code exists because your stack needs it. Nothing else ships.</p><p>What does that eliminate?</p><p>Generated components don't carry abstraction layers that exist purely for flexibility:</p><ul><li><p>Fewer state transitions: The promise abstraction alone reduces this to a minimum.</p></li><li><p>Fewer network calls: The protocol chatter is incredibly optimized.</p></li><li><p>No unused code: Small package sizes mean the components are easy to host, easy to install, and require little resources to run.</p></li></ul><p>And&#8230; everything can be serverless.</p><p>A generated Resonate server is small and single-purpose enough to run as a serverless function. A Lambda. A Cloudflare Worker. A Supabase Edge Function.</p><p>It spins up. It processes work. It spins down.</p><p>Your agent workers &#8212; built on the Resonate SDK &#8212; do the same.</p><p>Both the server and the workers run only when there's work to do.</p><p>This is great for Agents, because they don't run 24/7. They activate, do work, and go idle. The traditional durable execution model &#8212; always-on server clusters, persistence layers, worker processes polling around the clock &#8212; means you're paying a fixed infrastructure cost regardless of how much actual work is happening.<br><br>With Resonate on serverless, idling costs nothing. And when work does arrive, each invocation does dramatically less overhead per operation because there's no abstraction tax. On pay-per-millisecond infrastructure, less overhead per invocation is directly less money.<br><br>Back of the napkin math:</p><p>Scale                                                      |   Resonate.         |   Leading platforms   |<br>1K executions/day                                |  ~$0/month        |    ~$25/month            |<br>1M executions/day                               |   $170/month.     |   $500+/month          |<br>Bursty workloads at extreme scale   |    &lt;$100/year      |    ~$80,000/year       |</p><p>The pattern that agentic workloads produce is intense bursts of orchestration separated by idle periods. The gap between always-on infrastructure and pay-per-use becomes enormous. Combine that with Resonate's reduced overhead per operation and you can get up to ~800x cost differences.<br><br>But it can run pretty much anywhere.<br><br>Because the protocol is transport and storage agnostic, we can generate components for whatever you're already running. No need to migrate to a whole new platform.<br><br>You're running agents on Supabase? We can generate components that run entirely as Edge Functions &#8212; durable agent orchestration with zero always-on infrastructure.<br><br>You're a larger team with everything on Kafka? We can generate Resonate components that use Kafka for message passing &#8212; durable execution on your existing infrastructure.<br><br>You need gRPC transport with DynamoDB for state? That's a generation target, not a feature request.<br><br>Durable execution has always been the right answer for complex agent orchestration. Multi-step workflows, human-in-the-loop approvals, long-running research tasks, multi-agent coordination &#8212; all of this needs crash recovery, checkpointing, and reliable retries.<br><br>But the cost of and complexity of the existing durable execution platforms has opened up as many new pains and they solved.</p><p>You don't want to have to learn a set of proprietary primitives and spin up $500+/month infrastructure just so your agents can recover from crashes.</p><p>When you bring that cost down by 100-800x, durability stops being a premium feature and starts being a default. Every agent workflow gets checkpointing. Every multi-step orchestration gets crash recovery. Every long-running task gets reliable retries. Not because you budgeted for it &#8212; because it's so cheap there's no reason not to.</p><p>If that sounds interesting &#8212; come tell us about your stack in the <a href="https://resonatehq.io/discord">Resonate Discord</a>.</p>]]></content:encoded></item><item><title><![CDATA[Durable Executions, defined]]></title><description><![CDATA[Suspend anytime, resume anywhere]]></description><link>https://journal.resonatehq.io/p/durable-executions-defined</link><guid isPermaLink="false">https://journal.resonatehq.io/p/durable-executions-defined</guid><dc:creator><![CDATA[Dominik Tornow]]></dc:creator><pubDate>Wed, 03 Dec 2025 14:02:57 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!eMwt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f0eb308-2821-4ff9-9d4f-59e783e35a09_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eMwt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f0eb308-2821-4ff9-9d4f-59e783e35a09_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eMwt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f0eb308-2821-4ff9-9d4f-59e783e35a09_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!eMwt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f0eb308-2821-4ff9-9d4f-59e783e35a09_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!eMwt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f0eb308-2821-4ff9-9d4f-59e783e35a09_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!eMwt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f0eb308-2821-4ff9-9d4f-59e783e35a09_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eMwt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f0eb308-2821-4ff9-9d4f-59e783e35a09_1024x1024.png" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4f0eb308-2821-4ff9-9d4f-59e783e35a09_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1861912,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/180340031?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f0eb308-2821-4ff9-9d4f-59e783e35a09_1024x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!eMwt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f0eb308-2821-4ff9-9d4f-59e783e35a09_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!eMwt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f0eb308-2821-4ff9-9d4f-59e783e35a09_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!eMwt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f0eb308-2821-4ff9-9d4f-59e783e35a09_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!eMwt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f0eb308-2821-4ff9-9d4f-59e783e35a09_1024x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Durable executions frameworks center their pitches on a mix of vague promises, metaphors, and anecdotes. This post takes a different route: a rigorous definition, independent of any specific framework, along with a conceptual foundation and a minimal working implementation.</em></p><div class="pullquote"><p>Interested in durable executions? Join the Resonate Discord</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://resonatehq.io/discord&quot;,&quot;text&quot;:&quot;Join the discord&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://resonatehq.io/discord"><span>Join the discord</span></a></p><p>Recently, you might have noticed a surge of interest in durable executions; with the transformation of LLMs from turn-based chats to continuously running agents, communicating with each other, orchestrating tool calls, and waiting on humans for confirmation, durable executions are shifting from niche to mainstream.</p><p>Every durable execution framework tells a similar story: write normal code, get fault tolerance. Yet none of them define what &#8220;normal code&#8221; or &#8220;fault tolerance&#8221; means. Instead they tack on a list of seemingly unrelated claims, such as &#8220;tracks your state&#8221;, &#8220;runs for a long time&#8221;, or &#8220;sleeps for days&#8221;, as though the connections were self-evident<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>.</p><p>The promise of writing normal code is appealing. However, what counts as normal? Some frameworks require developers to use DSLs and structure their applications as workflows and activities&#8212;not JSON or YAML encoded directed acyclic graphs (DAGs) but still proprietary programming models with steep learning curves.</p><p>The promise of fault tolerance is equally appealing. However, not all failures are created equal. For example, if a payment provider declines a credit card charge, durable executions cannot rectify that situation. If an execution crashes while a payment provider processes a credit card charge, durable executions earn their name.</p><p><a href="https://resonatehq.io">Resonate</a>&#8217;s durable execution framework, <a href="https://distributed-async-await.io">Distributed Async Await</a>, is designed around a single principle: simplicity. Not only simple to use, but simple to reason about. That requires a rigorous mental model of durable executions&#8212;instead of hand-waving anecdotes and metaphors.</p><h1>Interruptions</h1><p>Instead of sleep, crash, fault, or failure, we will reason in terms of <strong>interruptions</strong>. An interruption consists of two phases:</p><ol><li><p><strong>Suspension</strong> of an execution </p></li><li><p><strong>Resumption</strong> of an execution</p></li></ol><p>A suspension can be internally triggered (e.g., a sleep) or externally triggered (e.g., a crash). Either way, the defining characteristic of durability is the ability to suspend on one process and resume on another process (in practice that may be a green thread, an os  thread, an os process, a container, or a machine).</p><h2>Mitigating Interruptions</h2><p>Borrowing a technique from programming language theory, we use a simple, idealized case to specify the desired behavior of a complex, realistic case: consider a program <code>P</code> running on a runtime <code>R</code>. In the ideal case, execution proceeds without interruptions<br><code>-I</code>. The program runs from start to finish, producing some observable behavior, a trace <code>T</code>.</p><pre><code><code>P/(R&#8722;I) = T</code></code></pre><blockquote><p><strong>In words</strong>: Program <code>P</code> running on runtime <code>R</code> without the possibility of interruptions<br><code>-I </code>produces trace T</p></blockquote><p>Now introduce interruptions. Execution may suspend and resume, potentially on a different process. We want the same observable behavior <code>T</code> as if no interruption occurred. In other words, we want interruption tolerant executions.</p><p>How do we achieve this? There are two approaches, two knobs we can dial.</p><h3>Approach 1: Interruption-Aware Definitions</h3><p>Modify the program. Transform <code>P</code> into <code>P&#8242;</code> such that:</p><pre><code>P/(R&#8722;I) &#8803; P&#8242;/(R+I)</code></pre><blockquote><p><strong>In words</strong>: Program <code>P</code> running on runtime <code>R</code> without the possibility of interruptions<br><code>-I </code>produces an equivalent trace to a modified program <code>P`</code> running on the same runtime <code>R</code> with the possibility of interruptions <code>+I</code></p></blockquote><p>The developer explicitly handles interruptions. They add snapshotting, checkpointing, and recovery logic. The program becomes aware of and responsible for interruption handling, riddled with interrupt specific concerns.</p><div class="pullquote"><p><em>Interruption-aware function definitions result in <br>interruption-tolerant function executions.</em></p></div><h3>Approach 2: Interruption-Agnostic Definitions</h3><p>Modify the runtime. Transform <code>R</code> into <code>R&#8242;</code> such that:</p><pre><code>P/(R&#8722;I) &#8803; P/(R&#8242;+I)</code></pre><blockquote><p><strong>In words</strong>: Program <code>P</code> running on runtime <code>R</code> without the possibility of interruptions <br><code>-I </code>produces an equivalent trace to the same program <code>P</code> running on a modified runtime <code>R&#8217;</code> with the possibility of interruptions <code>+I</code></p></blockquote><p>The programmer writes the same program P. The runtime handles interruptions transparently. The program remains agnostic to whether interruptions occur.</p><div class="pullquote"><p>Interruption-agnostic function definitions result in interruption-tolerant function executions.</p></div><h1>Durable Executions</h1><p>We can now formulate a precise definition: <strong>Durable Executions</strong> are Interruption-Agnostic Definitions of Functions that result in Interruption-Tolerant Executions of Functions.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wlG_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa231a1ed-dded-4e03-ac14-b1314827c4cb_1096x468.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wlG_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa231a1ed-dded-4e03-ac14-b1314827c4cb_1096x468.jpeg 424w, https://substackcdn.com/image/fetch/$s_!wlG_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa231a1ed-dded-4e03-ac14-b1314827c4cb_1096x468.jpeg 848w, https://substackcdn.com/image/fetch/$s_!wlG_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa231a1ed-dded-4e03-ac14-b1314827c4cb_1096x468.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!wlG_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa231a1ed-dded-4e03-ac14-b1314827c4cb_1096x468.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wlG_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa231a1ed-dded-4e03-ac14-b1314827c4cb_1096x468.jpeg" width="1096" height="468" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a231a1ed-dded-4e03-ac14-b1314827c4cb_1096x468.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:468,&quot;width&quot;:1096,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:60850,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/180340031?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa231a1ed-dded-4e03-ac14-b1314827c4cb_1096x468.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wlG_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa231a1ed-dded-4e03-ac14-b1314827c4cb_1096x468.jpeg 424w, https://substackcdn.com/image/fetch/$s_!wlG_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa231a1ed-dded-4e03-ac14-b1314827c4cb_1096x468.jpeg 848w, https://substackcdn.com/image/fetch/$s_!wlG_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa231a1ed-dded-4e03-ac14-b1314827c4cb_1096x468.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!wlG_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa231a1ed-dded-4e03-ac14-b1314827c4cb_1096x468.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The definition has two parts:</p><ol><li><p><strong>Interruption-Agnostic Definition</strong>: The function definition ignores the possibility of interruptions.</p></li><li><p><strong>Interruption-Tolerant Execution</strong>: The function execution compensates for the occurrence of interruptions.</p></li></ol><p>According to this definition, &#8220;normal code&#8221; refers to function definitions that are interruption-agnostic i.e. do not account for the possibility of interruptions while &#8220;fault-tolerant&#8221; refers to function executions that are interruption-tolerant i.e. compensate for the occurrence of interruptions and show the same observable behavior whether interruptions occur or not.</p><h1>A minimal implementation</h1><p>Can we implement durable executions without rewriting compilers and runtimes from scratch? Can we implement them with a language-specific SDK? While this requires some syntactic compromises (e.g., the use of <code>yield</code> instead of <code>await</code> or the use of decorators), we can preserve normal code semantics: functions calling functions calling functions, with the usual control structures such as <code>if</code>, <code>for</code>, <code>while</code>, <code>try-catch</code>. </p><p>Let&#8217;s try.</p><blockquote><p><strong>A note:</strong> our durable executions won&#8217;t actually be durable. We&#8217;re focusing on execution mechanics, not persistence. The runtimes below keep state in memory to illustrate how execution unfolds, not how storage works.</p></blockquote><h2>The Program</h2><p>Consider a simple program of nested function calls. A function is implemented as a coroutine (a.k.a generator):</p><pre><code>function* foo(): Generator&lt;any, number, any&gt; {

  let a = yield call(bar, 21);

  let b = yield call(bar, 42);

  return a + b;

}

function* bar(arg: number): Generator&lt;any, number, any&gt; {

  let a = yield call(baz, arg);

  let b = yield call(baz, arg);

  return a + b;

}

function* baz(arg: number): Generator&lt;any, number, any&gt; {
  return 2 * arg;
}</code></pre><p><code>yield call(function, arguments)</code> marks function calls: <code>foo</code> calls <code>bar</code> twice, <code>bar</code> calls <code>baz</code> twice, and <code>baz</code> performs a simple computation. </p><p>The expected result is:</p><ul><li><p><code>baz(21)</code> returns <code>42</code>, so <code>bar(21)</code> returns <code>42 + 42 = 84</code></p></li><li><p><code>baz(42)</code> returns <code>84</code>, so <code>bar(42)</code> returns <code>84 + 84 = 168</code></p></li><li><p><code>foo()</code> returns <code>84 + 168 = 252</code></p></li></ul><p>The <code>call</code> helper creates a descriptor for the function call:</p><pre><code>class Call {
  constructor(
    public func: Function,
    public args: any[],
  ) {}
}

function call(func: Function, ...args: any[]) {
  return new Call(func, args);
}</code></pre><h2>Two Runtimes, Same Result</h2><p>We implement two different runtimes, one that yields correct and complete results only without interruptions and one that yields correct and complete results with interruptions.</p><h3>Resume Runtime</h3><p>The resume runtime executes coroutines in a single pass. When a <code>Call</code> effect is yielded, the runtime executes the callee, passes the result to the caller, and resumes:</p><pre><code>function resume(func: Function, args: any[]): any {
  let coroutine = func(...args);
  let value: any = undefined;

  while (true) {
    let result = coroutine.next(value);

    if (result.done) {
      return result.value;
    }

    const call = result.value as Call;
    value = execute(call.func, call.args);
  }
}</code></pre><p>This runtime implements the easy case: uninterrupted executions. The <code>run</code> function simply invokes <code>resume</code>, which executes in one turn:</p><pre><code>function run(func: Function, ...args: any[]): any {
  return resume(func, args);
}</code></pre><p>Running <code>foo</code> yields:</p><pre><code>console.log(run(foo)) =&gt; 252</code></pre><h3>Restart Runtime</h3><p>The restart runtime executes coroutines in many passes. When a <code>Call</code> effect is yielded, the runtime checks the cache and either:</p><ul><li><p><strong>cache miss</strong><br>Adds the call to the cache and interrupts</p></li><li><p><strong>cache hit, pending</strong><br>Executes the callee, adds the result to the cache, and interrupts</p></li><li><p><strong>cache hit, resolved</strong><br>Passes the cached result to the caller and resumes</p></li></ul><pre><code>type Result = 
  { status: &#8220;pending&#8221; } 
| { status: &#8220;resolved&#8221;; value: any };

function restrart(
  func: Function, 
  args: any[], 
  pid: string, 
  env: Record&lt;string, Result&gt;
): any {
  const coroutine = func(...args);
  let value: any = undefined;
  let count = 0;

  while (true) {
    const result = coroutine.next(value);

    if (result.done) {
      return result.value;
    }

    const call = result.value as Call;

    // Generate a deterministic call site id

    const cid = `${pid}.${count++}`;

    if (!(cid in env)) {
      env[cid] = { status: &#8220;pending&#8221; };
      throw new Error(&#8221;Interrupt&#8221;);
    }

    const cache = env[cid];

    if (cache.status === &#8220;pending&#8221;) {
      const res = execute(call.func, call.args, cid, env);
      env[cid] = { status: &#8220;resolved&#8221;, value: res };
      throw new Error(&#8221;Interrupt&#8221;);
    }

    value = cache.value;
  }
}</code></pre><blockquote><p><strong>A note on identity and determinism</strong>: The caller provides a root ID (e.g., <code>0</code>), and the runtime generates child IDs based on position in the call tree (e.g., <code>0.0</code>, <code>0.1</code>, <code>0.1.0</code>). On restart, these IDs map to cached results. This requires executions to be deterministic with respect to the call tree.</p><p><strong>A note on idempotence</strong>: If an execution is interrupted after the function executes but before the result is recorded, the function will be executed again. Therefore, in practice, functions must be idempotent.</p></blockquote><p>This runtime implements the hard case: aggressively interrupted executions. The <code>run</code> function loops until completion, catching interrupts and restarting:</p><pre><code>function run(id: string, func: Function, ...args: any[]): any {
  const env: Record&lt;string, Result&gt; = {};
  while (true) {
    try {
      return restart(foo, args, id, env);
    } catch (e) {
      if (e.message === &#8220;Interrupt&#8221;) continue;
      throw e;
    }
  }
}</code></pre><p>However, despite constant interruptions, the final result is identical to uninterrupted execution:</p><pre><code><code>console.log(run("0", foo)) =&gt; 252</code></code></pre><p>The program is unchanged. The runtime compensates for interruptions. This is exactly what our definition promised: interruption-agnostic definitions yielding interruption-tolerant executions.</p><p>Notice what we did <strong>not</strong> do:</p><ul><li><p>We did not use a DSL or workflows and activities</p></li><li><p>We did not write checkpointing code</p></li><li><p>We did not write serialization code</p></li><li><p>We did not write recovery code</p></li></ul><p>Did we write normal code? The syntax is unfamiliar, <code>yield call(bar, 21)</code> instead of <code>bar(21)</code>, coroutines instead of traditional functions. However, the semantics are unchanged. We didn&#8217;t need to invent a proprietary programming model.</p><h1>Conclusion</h1><p>Durable executions are not fuzzy but a well-defined concept: Interruption-Agnostic Definitions of Functions that result in Interruption-Tolerant Executions of Functions&#8212;made possible by reliable restarts and memoization.</p><p>So the next time someone tells you that durable executions let you &#8220;write normal code and get fault tolerance,&#8221; you know exactly what that means.</p><h1>Try Resonate</h1><p>Get started in minutes and explore our examples: a <a href="https://github.com/resonatehq-examples/example-openai-deep-research-agent-ts">durable deep research agent</a> that scales to hundreds of subagents in under 110 lines, or a <a href="https://github.com/resonatehq-examples/example-countdown-ts">durable countdown</a> that runs for days, weeks, or months in under 30 lines of code. Run them on your laptop, your cluster, or even on serverless platforms&#8212;the code stays the same.</p><p>If you want to learn more about the mechanics of Resonate, check out my Systems Distributed &#8216;25 presentation, where I walk through Resonate&#8217;s programming model and execution model.</p><div id="youtube2-DW9gNduZATE" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;DW9gNduZATE&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/DW9gNduZATE?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>Whether &#8220;long-running&#8221; and &#8220;long-sleeping&#8221; are the same or opposites is left as an exercise for the reader.</p><p></p></div></div>]]></content:encoded></item><item><title><![CDATA[How I deployed a Resonate Server to a DigitalOcean Droplet]]></title><description><![CDATA[I set out to run a real Resonate Server in the wild &#8212; not on localhost &#8212; and ended up building a clean, repeatable setup you can follow to do the same.]]></description><link>https://journal.resonatehq.io/p/how-i-deployed-a-resonate-server</link><guid isPermaLink="false">https://journal.resonatehq.io/p/how-i-deployed-a-resonate-server</guid><dc:creator><![CDATA[Cully Wakelin]]></dc:creator><pubDate>Tue, 04 Nov 2025 19:22:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Oh6V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cd3acec-3df1-424e-95d4-7268bc7ea34c_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Oh6V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cd3acec-3df1-424e-95d4-7268bc7ea34c_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Oh6V!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cd3acec-3df1-424e-95d4-7268bc7ea34c_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Oh6V!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cd3acec-3df1-424e-95d4-7268bc7ea34c_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Oh6V!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cd3acec-3df1-424e-95d4-7268bc7ea34c_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Oh6V!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cd3acec-3df1-424e-95d4-7268bc7ea34c_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Oh6V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cd3acec-3df1-424e-95d4-7268bc7ea34c_1024x1024.png" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8cd3acec-3df1-424e-95d4-7268bc7ea34c_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1233097,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/177926034?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cd3acec-3df1-424e-95d4-7268bc7ea34c_1024x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Oh6V!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cd3acec-3df1-424e-95d4-7268bc7ea34c_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Oh6V!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cd3acec-3df1-424e-95d4-7268bc7ea34c_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Oh6V!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cd3acec-3df1-424e-95d4-7268bc7ea34c_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Oh6V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cd3acec-3df1-424e-95d4-7268bc7ea34c_1024x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I wanted to see what it would take to deploy a remote Resonate Server&#8212;one that exposes public endpoints my local apps could connect to.</p><p>I didn&#8217;t have a specific use case in mind. I just wanted to run a few durable applications against a real, remote Resonate Server&#8212;not one on my local network. I&#8217;d been experimenting with DigitalOcean Droplets, so I decided to use one for the job.</p><p>This turned out to be a really fun project&#8212;especially if you enjoy working directly from the command line. If you prefer a graphical configuration screen, this might not be your ideal path. But if you like understanding how every piece fits together, this approach will feel satisfying.</p><p>The networking setup gave me the most trouble (as it often does), but working through that taught me a lot&#8212;and that&#8217;s exactly why I&#8217;m sharing this tutorial. My trial and error should save you several hours if you decide to try the same thing.</p><p>In the end, it worked beautifully: I connected multiple local apps to my new remote Resonate Server, and everything ran smoothly and durably.</p><p>&#128073; If you want to deploy your own Resonate Server on a DigitalOcean Droplet, follow this step-by-step guide, <a href="https://docs.resonatehq.io/learn/deployments/digital-ocean-droplet">&#8220;Run a Resonate Server on a DigitalOcean Droplet&#8221;</a>.</p>]]></content:encoded></item><item><title><![CDATA[🎃 Halloween AMA with Dominik Tornow]]></title><description><![CDATA[Ask Resonate HQ CEO Dominik Tornow anything that's on your mind!]]></description><link>https://journal.resonatehq.io/p/halloween-ama-with-dominik-tornow</link><guid isPermaLink="false">https://journal.resonatehq.io/p/halloween-ama-with-dominik-tornow</guid><dc:creator><![CDATA[Cully Wakelin]]></dc:creator><pubDate>Tue, 28 Oct 2025 17:13:40 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!um-O!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6fbc1d0-5985-47ca-baa1-c800b5605e59_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!um-O!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6fbc1d0-5985-47ca-baa1-c800b5605e59_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!um-O!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6fbc1d0-5985-47ca-baa1-c800b5605e59_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!um-O!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6fbc1d0-5985-47ca-baa1-c800b5605e59_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!um-O!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6fbc1d0-5985-47ca-baa1-c800b5605e59_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!um-O!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6fbc1d0-5985-47ca-baa1-c800b5605e59_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!um-O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6fbc1d0-5985-47ca-baa1-c800b5605e59_1024x1024.png" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b6fbc1d0-5985-47ca-baa1-c800b5605e59_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1493042,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/176844538?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6fbc1d0-5985-47ca-baa1-c800b5605e59_1024x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!um-O!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6fbc1d0-5985-47ca-baa1-c800b5605e59_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!um-O!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6fbc1d0-5985-47ca-baa1-c800b5605e59_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!um-O!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6fbc1d0-5985-47ca-baa1-c800b5605e59_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!um-O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6fbc1d0-5985-47ca-baa1-c800b5605e59_1024x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Let&#8217;s talk about developing modern distributed applications! &#128123;</p><p>On Halloween at <strong>10&#8239;AM PT</strong>, Resonate CEO and distributed&#8209;systems engineer <strong>Dominik Tornow</strong> will be hosting an Ask&#8209;Me&#8209;Anything. </p><p>Bring your darkest questions about building distributed protocols, DST (Deterministic Simulation Testing, Durable Execution or anything on your mind. Dominik&#8217;s specialty is making complex systems <em>dead simple</em> &#8212; and he&#8217;ll be answering <em>your</em> questions live.</p><p>Resonate is sponsoring this AMA because we believe developers deserve a quality&#8209;of&#8209;life upgrade. Our platform replaces duct&#8209;taped queues and schedulers with a single, developer&#8209;friendly model . We offer <strong>async/await across your entire application</strong>, so you can build reliable, scalable systems that <em>just work</em> . In Dominik&#8217;s words, it&#8217;s about turning the hardest parts of distributed systems into a few lines of code.</p><p><strong>So get your questions ready and join us!</strong> &#128376;&#65039; Bring your curiosity (and optionally a costume) &#8212; we&#8217;ll be in the Resonate Discord answering anything from the basics of Resonate&#8217;s durable async/await to your own haunted debugging stories. Can&#8217;t wait to see you there!</p><p>&#128197; <strong>When:</strong> Friday, <strong>Oct 31</strong> at <strong>10&#8239;AM PT</strong></p><p>&#128205; <strong>Where:</strong> Resonate Discord <a href="https://resonatehq.io/discord">https://resonatehq.io/discord</a></p><p>&#127917; <strong>Theme:</strong> Halloween AMA &#8211; costumes optional &#127875;</p><p>See you on Halloween!</p>]]></content:encoded></item><item><title><![CDATA[Newsworthy - October 2025]]></title><description><![CDATA[New releases and reasons to contribute.]]></description><link>https://journal.resonatehq.io/p/newsworthy-october-2025</link><guid isPermaLink="false">https://journal.resonatehq.io/p/newsworthy-october-2025</guid><dc:creator><![CDATA[Cully Wakelin]]></dc:creator><pubDate>Wed, 15 Oct 2025 20:31:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!3PT8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86913bb2-c475-4489-a663-f2aa14d3fe02_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3PT8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86913bb2-c475-4489-a663-f2aa14d3fe02_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3PT8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86913bb2-c475-4489-a663-f2aa14d3fe02_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!3PT8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86913bb2-c475-4489-a663-f2aa14d3fe02_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!3PT8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86913bb2-c475-4489-a663-f2aa14d3fe02_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!3PT8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86913bb2-c475-4489-a663-f2aa14d3fe02_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3PT8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86913bb2-c475-4489-a663-f2aa14d3fe02_1024x1024.png" width="727" height="727" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/86913bb2-c475-4489-a663-f2aa14d3fe02_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:727,&quot;bytes&quot;:2630820,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/176247388?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86913bb2-c475-4489-a663-f2aa14d3fe02_1024x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3PT8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86913bb2-c475-4489-a663-f2aa14d3fe02_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!3PT8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86913bb2-c475-4489-a663-f2aa14d3fe02_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!3PT8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86913bb2-c475-4489-a663-f2aa14d3fe02_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!3PT8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86913bb2-c475-4489-a663-f2aa14d3fe02_1024x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1>Chapter 2 drops</h1><p><a href="https://systems-engineering-for-agentic-applications.resonatehq.io/chapters/chapter-2">Chapter 2</a> of <a href="https://systems-engineering-for-agentic-applications.resonatehq.io/">Systems Engineering for Agentic Applications</a> published earlier this month. <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Dominik Tornow&quot;,&quot;id&quot;:104069074,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/068ee5c3-5642-49c2-b981-a35a27d0aeae_400x400.jpeg&quot;,&quot;uuid&quot;:&quot;dec3d7a8-8376-4647-aa72-c0dc7ec4c6b7&quot;}" data-component-name="MentionToDOM"></span> begins breaking down everything you need to know about Building an Agent.</p><p>If you missed Chapter 1, about going &#8220;From AI to Agentic Applications&#8221;, the entire book is free and new chapters are published at the beginning of the month.</p><p>You can subscribe to updates on <a href="https://agenticapplications.substack.com/">Dominik&#8217;s Agentic Applications Substack</a>.</p><h1>Calling on contributors</h1><p>Come help implement the next round of features across the Resonate system.</p><ol><li><p><strong>Pluggable auth system</strong></p></li></ol><p>Add modular auth for SDK &#8596; Server communication. Enabling secure, real-world production use for a wide range auth preferences.</p><ol start="2"><li><p><strong>Message transport plugins</strong></p></li></ol><p>Write connectors for Kafka, RabbitMQ, Redis, Pub/Sub, etc - Making Resonate compatible with <em>any</em> architecture.</p><p>Community member asgr (<a href="https://github.com/muhammad-asghar-ali">Muhammad Asghar Ali</a>) has been heroically driving the design of that forward giving the ecosystem an SQS plugin and Nats.io plugin on top of the existing ones.</p><ol start="3"><li><p><strong>Privacy features</strong></p></li></ol><p>Start by adding encode/decode apis with pluggable encoding algorithms to ensure developers have a quick and easy way to implement encryption for their user&#8217;s data while it&#8217;s inside Resonate promise stores and traveling across message transports. This is needed for real life use cases.</p><ol start="4"><li><p>Observability (metrics, logging, tracing, etc&#8230;)</p></li></ol><p>Design visibility into everything: execution paths, retries, performance. Great observability increases the quality-of-life for a developer.</p><h1>Resonate Server v0.7.18 release</h1><p>Highlights include a new configuration that manages the lifecycle of tcp connections for a smoother google cloud run experience.</p><p>&#8594; <a href="https://github.com/resonatehq/resonate/releases/tag/v0.7.18">Resonate Server v0.7.18 release notes</a></p><h1>Resonate TypeScript SDK v0.8.3 release</h1><p>Highlights include a new "until&#8221; configuration for the sleep API (i.e. &#8220;sleep until&#8221; functionality).</p><p>&#8594; <a href="https://github.com/resonatehq/resonate-sdk-ts/releases">Resonate TypeScript SDK v0.8.3 release notes</a></p><h1>Resonate Python SDK v0.6.7 release</h1><p>Highlights include a few minor bug fixes.</p><p>&#8594; <a href="https://github.com/resonatehq/resonate-sdk-py/releases">Resonate TypeScript SDK v.0.6.7 release notes</a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Newsworthy - September 2025]]></title><description><![CDATA[Some recent highlights worth noting: new releases, example apps, key contributions.]]></description><link>https://journal.resonatehq.io/p/newsworthy-september-2025</link><guid isPermaLink="false">https://journal.resonatehq.io/p/newsworthy-september-2025</guid><dc:creator><![CDATA[Cully Wakelin]]></dc:creator><pubDate>Wed, 24 Sep 2025 19:05:53 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FoHh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aeb6f9c-afbc-4f62-85e3-c150a8097fa2_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FoHh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aeb6f9c-afbc-4f62-85e3-c150a8097fa2_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FoHh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aeb6f9c-afbc-4f62-85e3-c150a8097fa2_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!FoHh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aeb6f9c-afbc-4f62-85e3-c150a8097fa2_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!FoHh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aeb6f9c-afbc-4f62-85e3-c150a8097fa2_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!FoHh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aeb6f9c-afbc-4f62-85e3-c150a8097fa2_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FoHh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aeb6f9c-afbc-4f62-85e3-c150a8097fa2_1024x1024.png" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8aeb6f9c-afbc-4f62-85e3-c150a8097fa2_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2736713,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/174459364?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aeb6f9c-afbc-4f62-85e3-c150a8097fa2_1024x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FoHh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aeb6f9c-afbc-4f62-85e3-c150a8097fa2_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!FoHh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aeb6f9c-afbc-4f62-85e3-c150a8097fa2_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!FoHh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aeb6f9c-afbc-4f62-85e3-c150a8097fa2_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!FoHh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8aeb6f9c-afbc-4f62-85e3-c150a8097fa2_1024x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Resonate offers developers a dead simple holistic programming model for building distributed applications.</p><p>Resonate Status Update: Fall 2025</p><h2>TypeScript SDK v0.8.0 release.</h2><p>We would be lying if we said &#8220;we weren&#8217;t impressed with ourselves&#8221; with <a href="https://github.com/resonatehq/resonate-sdk-ts/releases">this release</a>. It polishes up a complete refactor of the SDK to align it with <a href="https://docs.resonatehq.io/develop/">Resonate&#8217;s revised core API</a>:</p><ul><li><p>Run (Synchronous, Local)</p></li><li><p>Begin Run (Asynchronous, Local)</p></li><li><p>RPC (Synchronous, Remote)</p></li><li><p>Begin RPC (Asynchronous, Remote)</p></li></ul><p>If you love working in TypeScript - you should try out this SDK.</p><h2>Python SDK v.0.6.4</h2><p>Thanks to the efforts of <a href="https://github.com/kahnwong">Karn Wong</a>, their <a href="https://github.com/kahnwong/resonate-benchmark">benchmark tests</a> uncovered a much needed change to improve compatibility with async applications, which <a href="https://github.com/resonatehq/resonate-sdk-py/releases">was released in v.0.6.4</a>.</p><h2>Resonate Server v.0.7.15 release</h2><p>The <a href="https://github.com/resonatehq/resonate/releases/tag/v0.7.15">latest Resonate Server release</a> includes an SQS plugin that enables Async RPC, while using SQS as the message transport. All appreciation, applause, and admiration may be forwarded to <a href="https://github.com/muhammad-asghar-ali">Muhammad Asghar Ali</a> for their heroic efforts in bringing this functionality to fruition! </p><h2>Getting started example apps</h2><p>The team was excited to launch <a href="https://docs.resonatehq.io/get-started/new-project/">this curated set</a> of example applications designed to help developers get started with Resonate within the context of a familiar use case.</p><h2>Hacktoberfest</h2><p>Resonate&#8217;s open source component repos are available to Hacktoberfest participants.</p><ul><li><p><a href="https://github.com/resonatehq/resonate">Resonate Server</a></p></li><li><p><a href="https://github.com/resonatehq/resonate-sdk-py">Resonate Python SDK</a></p></li><li><p><a href="https://github.com/resonatehq/resonate-sdk-ts/issues">Resonate TypeScript SDK</a></p></li></ul><p>The team made a solid effort to update issue descriptions and tags to be more helpful to outside contributors.</p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[5 use-case oriented example apps to get you started on your next project.]]></title><description><![CDATA[Here are 5 example applications that use Resonate&#8217;s programming model to elegantly address the needs of a specific use case.]]></description><link>https://journal.resonatehq.io/p/5-use-case-oriented-example-apps</link><guid isPermaLink="false">https://journal.resonatehq.io/p/5-use-case-oriented-example-apps</guid><dc:creator><![CDATA[Cully Wakelin]]></dc:creator><pubDate>Tue, 09 Sep 2025 17:48:29 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!NVNM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e87c898-f817-469a-84ef-968c77760153_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NVNM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e87c898-f817-469a-84ef-968c77760153_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NVNM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e87c898-f817-469a-84ef-968c77760153_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!NVNM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e87c898-f817-469a-84ef-968c77760153_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!NVNM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e87c898-f817-469a-84ef-968c77760153_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!NVNM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e87c898-f817-469a-84ef-968c77760153_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NVNM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e87c898-f817-469a-84ef-968c77760153_1024x1024.png" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2e87c898-f817-469a-84ef-968c77760153_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2571791,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/172281812?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e87c898-f817-469a-84ef-968c77760153_1024x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NVNM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e87c898-f817-469a-84ef-968c77760153_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!NVNM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e87c898-f817-469a-84ef-968c77760153_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!NVNM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e87c898-f817-469a-84ef-968c77760153_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!NVNM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e87c898-f817-469a-84ef-968c77760153_1024x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A lot of amazing things are made from someone else&#8217;s example and we hope you will make amazing things from these ones. Set within the context of specific use cases, Resonate&#8217;s programming model is put to the test in minimalistic example applications.</p><p></p><h1>Load balanced worker fleet</h1><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://docs.resonatehq.io/get-started/new-project/load-balancing" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4KCA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe2eb976-96f0-4d24-b294-0bfb7abea32c_1869x295.png 424w, https://substackcdn.com/image/fetch/$s_!4KCA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe2eb976-96f0-4d24-b294-0bfb7abea32c_1869x295.png 848w, https://substackcdn.com/image/fetch/$s_!4KCA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe2eb976-96f0-4d24-b294-0bfb7abea32c_1869x295.png 1272w, https://substackcdn.com/image/fetch/$s_!4KCA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe2eb976-96f0-4d24-b294-0bfb7abea32c_1869x295.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4KCA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe2eb976-96f0-4d24-b294-0bfb7abea32c_1869x295.png" width="707" height="111.6826923076923" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fe2eb976-96f0-4d24-b294-0bfb7abea32c_1869x295.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:230,&quot;width&quot;:1456,&quot;resizeWidth&quot;:707,&quot;bytes&quot;:54392,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://docs.resonatehq.io/get-started/new-project/load-balancing&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/172281812?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe2eb976-96f0-4d24-b294-0bfb7abea32c_1869x295.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!4KCA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe2eb976-96f0-4d24-b294-0bfb7abea32c_1869x295.png 424w, https://substackcdn.com/image/fetch/$s_!4KCA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe2eb976-96f0-4d24-b294-0bfb7abea32c_1869x295.png 848w, https://substackcdn.com/image/fetch/$s_!4KCA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe2eb976-96f0-4d24-b294-0bfb7abea32c_1869x295.png 1272w, https://substackcdn.com/image/fetch/$s_!4KCA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe2eb976-96f0-4d24-b294-0bfb7abea32c_1869x295.png 1456w" sizes="100vw"></picture><div></div></div></a></figure></div><p>Available in Python, TypeScript.</p><p>Have you ever needed to balance load across a fleet of Workers? Resonate lets you run as many workers as you need. Create distinct worker groups and route to them within a simple API.</p><p><a href="https://docs.resonatehq.io/get-started/new-project/load-balancing">Try the load balancing example!</a></p><p></p><h1>Kafka batch processing worker</h1><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://docs.resonatehq.io/get-started/new-project/redpanda-worker" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lU7J!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8ddcaa3-44d3-4efe-b5d0-f79bc73a46a6_1182x179.png 424w, https://substackcdn.com/image/fetch/$s_!lU7J!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8ddcaa3-44d3-4efe-b5d0-f79bc73a46a6_1182x179.png 848w, https://substackcdn.com/image/fetch/$s_!lU7J!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8ddcaa3-44d3-4efe-b5d0-f79bc73a46a6_1182x179.png 1272w, https://substackcdn.com/image/fetch/$s_!lU7J!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8ddcaa3-44d3-4efe-b5d0-f79bc73a46a6_1182x179.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lU7J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8ddcaa3-44d3-4efe-b5d0-f79bc73a46a6_1182x179.png" width="1182" height="179" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f8ddcaa3-44d3-4efe-b5d0-f79bc73a46a6_1182x179.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:179,&quot;width&quot;:1182,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:58760,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://docs.resonatehq.io/get-started/new-project/redpanda-worker&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/172281812?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8ddcaa3-44d3-4efe-b5d0-f79bc73a46a6_1182x179.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!lU7J!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8ddcaa3-44d3-4efe-b5d0-f79bc73a46a6_1182x179.png 424w, https://substackcdn.com/image/fetch/$s_!lU7J!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8ddcaa3-44d3-4efe-b5d0-f79bc73a46a6_1182x179.png 848w, https://substackcdn.com/image/fetch/$s_!lU7J!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8ddcaa3-44d3-4efe-b5d0-f79bc73a46a6_1182x179.png 1272w, https://substackcdn.com/image/fetch/$s_!lU7J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8ddcaa3-44d3-4efe-b5d0-f79bc73a46a6_1182x179.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Available in Python.</p><p>Have you ever needed a worker for a Kafka Topic and had to solve for head-of-line-blocking, retries, and recovery?  Resonate can help with that. A real treat is using Redpanda as a drop-in replacement for Kafka, making it easy to observe the data movement.</p><p><a href="https://docs.resonatehq.io/get-started/new-project/redpanda-worker">Try the Kafka worker example!</a></p><p></p><h1>Waiting on a Human-In-The-Loop</h1><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://docs.resonatehq.io/get-started/new-project/human-in-the-loop" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rgdp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2956605c-2bb1-4158-8c52-ac48ff533554_1612x349.png 424w, https://substackcdn.com/image/fetch/$s_!rgdp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2956605c-2bb1-4158-8c52-ac48ff533554_1612x349.png 848w, https://substackcdn.com/image/fetch/$s_!rgdp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2956605c-2bb1-4158-8c52-ac48ff533554_1612x349.png 1272w, https://substackcdn.com/image/fetch/$s_!rgdp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2956605c-2bb1-4158-8c52-ac48ff533554_1612x349.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rgdp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2956605c-2bb1-4158-8c52-ac48ff533554_1612x349.png" width="707" height="152.95673076923077" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2956605c-2bb1-4158-8c52-ac48ff533554_1612x349.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:315,&quot;width&quot;:1456,&quot;resizeWidth&quot;:707,&quot;bytes&quot;:38441,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://docs.resonatehq.io/get-started/new-project/human-in-the-loop&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/172281812?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2956605c-2bb1-4158-8c52-ac48ff533554_1612x349.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rgdp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2956605c-2bb1-4158-8c52-ac48ff533554_1612x349.png 424w, https://substackcdn.com/image/fetch/$s_!rgdp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2956605c-2bb1-4158-8c52-ac48ff533554_1612x349.png 848w, https://substackcdn.com/image/fetch/$s_!rgdp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2956605c-2bb1-4158-8c52-ac48ff533554_1612x349.png 1272w, https://substackcdn.com/image/fetch/$s_!rgdp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2956605c-2bb1-4158-8c52-ac48ff533554_1612x349.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Available in Python, TypeScript.</p><p>How often have you tried to pause a multi-step workflow to wait for someone to click a link in an email? See how to solve for this with Resonate, suspending a function execution for an indefinite amount of time.</p><p><a href="https://docs.resonatehq.io/get-started/new-project/human-in-the-loop">Try the Human-In-The-Loop example!</a></p><p></p><h1>Website Summarization Agent</h1><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://docs.resonatehq.io/get-started/new-project/summarization-agent" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2OqZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ae9168b-0576-4b40-be49-de7bdea8e42c_1570x275.png 424w, https://substackcdn.com/image/fetch/$s_!2OqZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ae9168b-0576-4b40-be49-de7bdea8e42c_1570x275.png 848w, https://substackcdn.com/image/fetch/$s_!2OqZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ae9168b-0576-4b40-be49-de7bdea8e42c_1570x275.png 1272w, https://substackcdn.com/image/fetch/$s_!2OqZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ae9168b-0576-4b40-be49-de7bdea8e42c_1570x275.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2OqZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ae9168b-0576-4b40-be49-de7bdea8e42c_1570x275.png" width="625" height="109.46085164835165" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8ae9168b-0576-4b40-be49-de7bdea8e42c_1570x275.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:255,&quot;width&quot;:1456,&quot;resizeWidth&quot;:625,&quot;bytes&quot;:32150,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://docs.resonatehq.io/get-started/new-project/summarization-agent&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/172281812?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ae9168b-0576-4b40-be49-de7bdea8e42c_1570x275.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2OqZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ae9168b-0576-4b40-be49-de7bdea8e42c_1570x275.png 424w, https://substackcdn.com/image/fetch/$s_!2OqZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ae9168b-0576-4b40-be49-de7bdea8e42c_1570x275.png 848w, https://substackcdn.com/image/fetch/$s_!2OqZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ae9168b-0576-4b40-be49-de7bdea8e42c_1570x275.png 1272w, https://substackcdn.com/image/fetch/$s_!2OqZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ae9168b-0576-4b40-be49-de7bdea8e42c_1570x275.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Available in Python.</p><p>Want a little taste of everything? This example, while remaining surprising minimal packs in a workflow decked out with two failure prone steps, a human-in-the-loop, a non-retriable error, and result caching by ID. Thanks to Resonate&#8217;s programming model, what would normally take a lot of custom code to handle, these important distributed systems issues are boiled down to simple API calls.</p><p><a href="https://docs.resonatehq.io/get-started/new-project/summarization-agent">Try the website summarization agent example!</a></p><p></p><h1>Indefinite Durable Sleep</h1><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://docs.resonatehq.io/get-started/new-project/durable-sleep" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dJzR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F693b1032-74a8-4e29-bd78-9c7eff5a6863_1998x322.png 424w, https://substackcdn.com/image/fetch/$s_!dJzR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F693b1032-74a8-4e29-bd78-9c7eff5a6863_1998x322.png 848w, https://substackcdn.com/image/fetch/$s_!dJzR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F693b1032-74a8-4e29-bd78-9c7eff5a6863_1998x322.png 1272w, https://substackcdn.com/image/fetch/$s_!dJzR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F693b1032-74a8-4e29-bd78-9c7eff5a6863_1998x322.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dJzR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F693b1032-74a8-4e29-bd78-9c7eff5a6863_1998x322.png" width="1456" height="235" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/693b1032-74a8-4e29-bd78-9c7eff5a6863_1998x322.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:235,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:39333,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://docs.resonatehq.io/get-started/new-project/durable-sleep&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/172281812?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F693b1032-74a8-4e29-bd78-9c7eff5a6863_1998x322.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dJzR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F693b1032-74a8-4e29-bd78-9c7eff5a6863_1998x322.png 424w, https://substackcdn.com/image/fetch/$s_!dJzR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F693b1032-74a8-4e29-bd78-9c7eff5a6863_1998x322.png 848w, https://substackcdn.com/image/fetch/$s_!dJzR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F693b1032-74a8-4e29-bd78-9c7eff5a6863_1998x322.png 1272w, https://substackcdn.com/image/fetch/$s_!dJzR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F693b1032-74a8-4e29-bd78-9c7eff5a6863_1998x322.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Available in Python, TypeScript.</p><p>Tired of using cron jobs to awaken long sleeping / long running business processes? Check out this one line of code that puts your workflow function to sleep for days, weeks, or years while surviving the lifetime of the processes in which it executes!</p><p><a href="https://docs.resonatehq.io/get-started/new-project/durable-sleep">Try the durable sleep example!</a></p><p></p><p>Find more examples like these in the <a href="https://github.com/resonatehq-examples">resonatehq-examples Github Org</a>.</p>]]></content:encoded></item><item><title><![CDATA[RedPanda + Resonate example application]]></title><description><![CDATA[Out of the box, fully durable, and distributed tech stack that plays nicely together]]></description><link>https://journal.resonatehq.io/p/redpanda-resonate-example-application</link><guid isPermaLink="false">https://journal.resonatehq.io/p/redpanda-resonate-example-application</guid><dc:creator><![CDATA[Cully Wakelin]]></dc:creator><pubDate>Wed, 02 Jul 2025 18:46:54 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Lr75!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3be4f26-0a95-4b5f-be1a-e45f698cd15f_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Lr75!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3be4f26-0a95-4b5f-be1a-e45f698cd15f_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Lr75!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3be4f26-0a95-4b5f-be1a-e45f698cd15f_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Lr75!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3be4f26-0a95-4b5f-be1a-e45f698cd15f_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Lr75!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3be4f26-0a95-4b5f-be1a-e45f698cd15f_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Lr75!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3be4f26-0a95-4b5f-be1a-e45f698cd15f_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Lr75!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3be4f26-0a95-4b5f-be1a-e45f698cd15f_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b3be4f26-0a95-4b5f-be1a-e45f698cd15f_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2762478,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/161106280?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3be4f26-0a95-4b5f-be1a-e45f698cd15f_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Lr75!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3be4f26-0a95-4b5f-be1a-e45f698cd15f_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Lr75!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3be4f26-0a95-4b5f-be1a-e45f698cd15f_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Lr75!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3be4f26-0a95-4b5f-be1a-e45f698cd15f_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Lr75!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3be4f26-0a95-4b5f-be1a-e45f698cd15f_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Resonate Workers make extending durability, to span between that RedPanda Topics, dead simple. </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://github.com/resonatehq/example-batch-record-deletion&quot;,&quot;text&quot;:&quot;Check out the app!&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://github.com/resonatehq/example-batch-record-deletion"><span>Check out the app!</span></a></p><p>Our latest example application showcases what a RedPanda + Resonate pipeline might look like in the context of a "batch record deletion" use case.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DiXd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F455b7e57-f3cb-499b-9134-ac20d5db986c_3280x1040.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DiXd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F455b7e57-f3cb-499b-9134-ac20d5db986c_3280x1040.png 424w, https://substackcdn.com/image/fetch/$s_!DiXd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F455b7e57-f3cb-499b-9134-ac20d5db986c_3280x1040.png 848w, https://substackcdn.com/image/fetch/$s_!DiXd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F455b7e57-f3cb-499b-9134-ac20d5db986c_3280x1040.png 1272w, https://substackcdn.com/image/fetch/$s_!DiXd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F455b7e57-f3cb-499b-9134-ac20d5db986c_3280x1040.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DiXd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F455b7e57-f3cb-499b-9134-ac20d5db986c_3280x1040.png" width="1456" height="462" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/455b7e57-f3cb-499b-9134-ac20d5db986c_3280x1040.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:462,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:225938,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/161106280?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F455b7e57-f3cb-499b-9134-ac20d5db986c_3280x1040.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!DiXd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F455b7e57-f3cb-499b-9134-ac20d5db986c_3280x1040.png 424w, https://substackcdn.com/image/fetch/$s_!DiXd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F455b7e57-f3cb-499b-9134-ac20d5db986c_3280x1040.png 848w, https://substackcdn.com/image/fetch/$s_!DiXd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F455b7e57-f3cb-499b-9134-ac20d5db986c_3280x1040.png 1272w, https://substackcdn.com/image/fetch/$s_!DiXd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F455b7e57-f3cb-499b-9134-ac20d5db986c_3280x1040.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>RedPanda is an amazingly approachable Kafka replacement that provides durable message topics (queues).</p><p>Resonate provides:</p><ul><li><p>Out-of-the-box concurrent message processing to solve for head-of-line blocking issues.</p></li><li><p>Out-of-the-box function execution retries to solve for transient errors in message processing.</p></li><li><p>Out-of-the-box recovery and resumption from processing node crash failures.</p></li><li><p>Dead simple programming model.</p></li></ul><p>Check out the example application to see for yourself!</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://github.com/resonatehq/example-batch-record-deletion&quot;,&quot;text&quot;:&quot;Check out the app!&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://github.com/resonatehq/example-batch-record-deletion"><span>Check out the app!</span></a></p>]]></content:encoded></item><item><title><![CDATA[Agent tools part 2 | Durable asynchronous tool calls]]></title><description><![CDATA[A promise ID is the secret ingredient in the special sauce of solving for our distributed system problems.]]></description><link>https://journal.resonatehq.io/p/agent-tools-part-2-converting-to</link><guid isPermaLink="false">https://journal.resonatehq.io/p/agent-tools-part-2-converting-to</guid><dc:creator><![CDATA[Cully Wakelin]]></dc:creator><pubDate>Thu, 26 Jun 2025 13:01:03 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!y7Dg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ad438d0-1ac5-46a2-af37-5140c127b2e2_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!y7Dg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ad438d0-1ac5-46a2-af37-5140c127b2e2_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!y7Dg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ad438d0-1ac5-46a2-af37-5140c127b2e2_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!y7Dg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ad438d0-1ac5-46a2-af37-5140c127b2e2_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!y7Dg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ad438d0-1ac5-46a2-af37-5140c127b2e2_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!y7Dg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ad438d0-1ac5-46a2-af37-5140c127b2e2_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!y7Dg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ad438d0-1ac5-46a2-af37-5140c127b2e2_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4ad438d0-1ac5-46a2-af37-5140c127b2e2_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1723946,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/165571506?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ad438d0-1ac5-46a2-af37-5140c127b2e2_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!y7Dg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ad438d0-1ac5-46a2-af37-5140c127b2e2_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!y7Dg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ad438d0-1ac5-46a2-af37-5140c127b2e2_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!y7Dg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ad438d0-1ac5-46a2-af37-5140c127b2e2_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!y7Dg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ad438d0-1ac5-46a2-af37-5140c127b2e2_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If you are building an MCP server then you are also building a distributed system.</p><h3>The square hole</h3><p>The main issue with MCP, and all LLM tool calling functionality at present, is that it is synchronous with no built-in mechanisms for handling failure.</p><p>Even though MCP standardizes a tool calling convention - it ignores all the other issues that arise from building a distributed system and as the developer you are burdened with figuring out:</p><ul><li><p>Supervision, such as timeouts, to detect issues</p></li><li><p>Retry logic for application level errors</p></li><li><p>Deduplication and/or idempotency guarantees</p></li><li><p>Recovery for process crashes</p></li></ul><p>But&#8230; what if you weren&#8217;t?</p><h3>Pinky promise</h3><p>The <a href="https://modelcontextprotocol.io/quickstart/server">MCP Server Quickstart guide</a> uses weather forecasting as an example use case. Let&#8217;s flip it around and use historic weather data gathering as our example, a use case which could take a much longer time and better reflect the need for a background job.</p><p>To enable asynchronous behavior, instead of a single tool such as <code>get_weather_data</code>, we will create three tools:</p><ul><li><p><code>start_gathering</code></p></li><li><p><code>probe_status</code></p></li><li><p><code>await_result</code></p></li></ul><p>And here is the key &#8212; The <code>start_gathering</code> tool, instead of blocking on the result of the data gather job, kicks off a background job and returns a promise ID &#8212; the secret ingredient to solving for our distributed system problems.</p><p>Let&#8217;s have a look at the code that makes it possible with Resonate:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!orBD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f51bff4-ea5f-457f-ac84-45bccfc070c0_1568x960.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!orBD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f51bff4-ea5f-457f-ac84-45bccfc070c0_1568x960.png 424w, https://substackcdn.com/image/fetch/$s_!orBD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f51bff4-ea5f-457f-ac84-45bccfc070c0_1568x960.png 848w, https://substackcdn.com/image/fetch/$s_!orBD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f51bff4-ea5f-457f-ac84-45bccfc070c0_1568x960.png 1272w, https://substackcdn.com/image/fetch/$s_!orBD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f51bff4-ea5f-457f-ac84-45bccfc070c0_1568x960.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!orBD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f51bff4-ea5f-457f-ac84-45bccfc070c0_1568x960.png" width="1456" height="891" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2f51bff4-ea5f-457f-ac84-45bccfc070c0_1568x960.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:891,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:182094,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/165571506?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f51bff4-ea5f-457f-ac84-45bccfc070c0_1568x960.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!orBD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f51bff4-ea5f-457f-ac84-45bccfc070c0_1568x960.png 424w, https://substackcdn.com/image/fetch/$s_!orBD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f51bff4-ea5f-457f-ac84-45bccfc070c0_1568x960.png 848w, https://substackcdn.com/image/fetch/$s_!orBD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f51bff4-ea5f-457f-ac84-45bccfc070c0_1568x960.png 1272w, https://substackcdn.com/image/fetch/$s_!orBD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f51bff4-ea5f-457f-ac84-45bccfc070c0_1568x960.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In the previous code example, the <code>job_name</code> doubles as the promise ID. We don&#8217;t need to burden our LLM with learning about promises and concurrency. We just need to make it clear that this tool starts a background job, and returns the name of the job which can be used to get the status or result.</p><p>How is this possible?</p><h3>Decorate with Resonate</h3><p>Resonate breaks the code up into two worlds:</p><ul><li><p>Ephemeral World</p></li><li><p>Durable World</p></li></ul><p>MCP lives in the Ephemeral World, if you were just using MCP and your server crashed mid-tool usage, then you are on your own in figuring out how to handle that.</p><p>Resonate enables MCP tools to transition to the Durable World, and as soon as you transition to the Durable World you are covered &#8212; Resonate gives you everything you need to handle idempotency, application errors, process failures, distribution, and concurrency.</p><p>Decorate the <code>start_gathering()</code> function with <code>@mcp.tool</code>, registering it as a tool with MCP. This function will execute in the Ephemeral World.</p><p>Decorate the <code>weather_data()</code> function with <code>@resonate.register</code>, registering the function with Resonate. This function will execute in the Durable World.</p><p>Within the <code>start_gathering()</code> function we call <code>weather_data.run()</code>, which transitions the call chain from the Ephemeral World to the Durable World. This call returns a handle to the invocation. You could wait right there for the result using the handle, but instead we will return the promise ID (job name) we used to invoke the weather_data() function.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ye8x!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30e0b76f-8105-496b-999c-19b163e95c39_1568x1042.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ye8x!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30e0b76f-8105-496b-999c-19b163e95c39_1568x1042.png 424w, https://substackcdn.com/image/fetch/$s_!Ye8x!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30e0b76f-8105-496b-999c-19b163e95c39_1568x1042.png 848w, https://substackcdn.com/image/fetch/$s_!Ye8x!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30e0b76f-8105-496b-999c-19b163e95c39_1568x1042.png 1272w, https://substackcdn.com/image/fetch/$s_!Ye8x!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30e0b76f-8105-496b-999c-19b163e95c39_1568x1042.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ye8x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30e0b76f-8105-496b-999c-19b163e95c39_1568x1042.png" width="1456" height="968" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/30e0b76f-8105-496b-999c-19b163e95c39_1568x1042.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:968,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:204002,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/165571506?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30e0b76f-8105-496b-999c-19b163e95c39_1568x1042.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Ye8x!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30e0b76f-8105-496b-999c-19b163e95c39_1568x1042.png 424w, https://substackcdn.com/image/fetch/$s_!Ye8x!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30e0b76f-8105-496b-999c-19b163e95c39_1568x1042.png 848w, https://substackcdn.com/image/fetch/$s_!Ye8x!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30e0b76f-8105-496b-999c-19b163e95c39_1568x1042.png 1272w, https://substackcdn.com/image/fetch/$s_!Ye8x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30e0b76f-8105-496b-999c-19b163e95c39_1568x1042.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The promise ID (job name) is also an idempotency key, enabling us to rejoin that invocation from almost anywhere. This is because Resonate promises are Durable Promises. That job name will always give you the same handle, and once resolved, will always give you the same result, instantly.</p><h3>Are we there yet?</h3><p>In the previous example, to keep things simple, we are accepting a single location at a time. However, you could alter it to kick off a set of jobs for a set of locations.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ULQO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6919588-f85f-4985-9a61-7103f9fff17d_1774x402.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ULQO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6919588-f85f-4985-9a61-7103f9fff17d_1774x402.png 424w, https://substackcdn.com/image/fetch/$s_!ULQO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6919588-f85f-4985-9a61-7103f9fff17d_1774x402.png 848w, https://substackcdn.com/image/fetch/$s_!ULQO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6919588-f85f-4985-9a61-7103f9fff17d_1774x402.png 1272w, https://substackcdn.com/image/fetch/$s_!ULQO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6919588-f85f-4985-9a61-7103f9fff17d_1774x402.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ULQO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6919588-f85f-4985-9a61-7103f9fff17d_1774x402.png" width="1456" height="330" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f6919588-f85f-4985-9a61-7103f9fff17d_1774x402.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:330,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:78563,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/165571506?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6919588-f85f-4985-9a61-7103f9fff17d_1774x402.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ULQO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6919588-f85f-4985-9a61-7103f9fff17d_1774x402.png 424w, https://substackcdn.com/image/fetch/$s_!ULQO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6919588-f85f-4985-9a61-7103f9fff17d_1774x402.png 848w, https://substackcdn.com/image/fetch/$s_!ULQO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6919588-f85f-4985-9a61-7103f9fff17d_1774x402.png 1272w, https://substackcdn.com/image/fetch/$s_!ULQO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6919588-f85f-4985-9a61-7103f9fff17d_1774x402.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8HF9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ee880d4-e83b-44dd-af65-b254ea4cf82f_1776x398.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8HF9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ee880d4-e83b-44dd-af65-b254ea4cf82f_1776x398.png 424w, https://substackcdn.com/image/fetch/$s_!8HF9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ee880d4-e83b-44dd-af65-b254ea4cf82f_1776x398.png 848w, https://substackcdn.com/image/fetch/$s_!8HF9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ee880d4-e83b-44dd-af65-b254ea4cf82f_1776x398.png 1272w, https://substackcdn.com/image/fetch/$s_!8HF9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ee880d4-e83b-44dd-af65-b254ea4cf82f_1776x398.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8HF9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ee880d4-e83b-44dd-af65-b254ea4cf82f_1776x398.png" width="1456" height="326" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3ee880d4-e83b-44dd-af65-b254ea4cf82f_1776x398.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:326,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:78057,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/165571506?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ee880d4-e83b-44dd-af65-b254ea4cf82f_1776x398.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8HF9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ee880d4-e83b-44dd-af65-b254ea4cf82f_1776x398.png 424w, https://substackcdn.com/image/fetch/$s_!8HF9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ee880d4-e83b-44dd-af65-b254ea4cf82f_1776x398.png 848w, https://substackcdn.com/image/fetch/$s_!8HF9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ee880d4-e83b-44dd-af65-b254ea4cf82f_1776x398.png 1272w, https://substackcdn.com/image/fetch/$s_!8HF9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ee880d4-e83b-44dd-af65-b254ea4cf82f_1776x398.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>But to hammer in the value of Resonate Durable Promises, we want to look at checking the status and awaiting the results in sets. So that you can do something like this with your LLM:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!i7tp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52f2a312-75d8-40dd-825a-a0c6864a5769_1760x598.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!i7tp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52f2a312-75d8-40dd-825a-a0c6864a5769_1760x598.png 424w, https://substackcdn.com/image/fetch/$s_!i7tp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52f2a312-75d8-40dd-825a-a0c6864a5769_1760x598.png 848w, https://substackcdn.com/image/fetch/$s_!i7tp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52f2a312-75d8-40dd-825a-a0c6864a5769_1760x598.png 1272w, https://substackcdn.com/image/fetch/$s_!i7tp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52f2a312-75d8-40dd-825a-a0c6864a5769_1760x598.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!i7tp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52f2a312-75d8-40dd-825a-a0c6864a5769_1760x598.png" width="1456" height="495" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/52f2a312-75d8-40dd-825a-a0c6864a5769_1760x598.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:495,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:135338,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/165571506?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52f2a312-75d8-40dd-825a-a0c6864a5769_1760x598.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!i7tp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52f2a312-75d8-40dd-825a-a0c6864a5769_1760x598.png 424w, https://substackcdn.com/image/fetch/$s_!i7tp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52f2a312-75d8-40dd-825a-a0c6864a5769_1760x598.png 848w, https://substackcdn.com/image/fetch/$s_!i7tp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52f2a312-75d8-40dd-825a-a0c6864a5769_1760x598.png 1272w, https://substackcdn.com/image/fetch/$s_!i7tp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52f2a312-75d8-40dd-825a-a0c6864a5769_1760x598.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The <code>await_result()</code> and <code>probe_status()</code> tools take a set of promise IDs (job names).</p><p>The <code>probe_status()</code> tool just checks if the data is ready by using the promise ID to get the handle of the invocation and calling <code>.done()</code> to check if the promise is Resolved yet.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!do5y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F816f8372-3dbc-4ed5-9115-4b83db41715f_1568x1042.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!do5y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F816f8372-3dbc-4ed5-9115-4b83db41715f_1568x1042.png 424w, https://substackcdn.com/image/fetch/$s_!do5y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F816f8372-3dbc-4ed5-9115-4b83db41715f_1568x1042.png 848w, https://substackcdn.com/image/fetch/$s_!do5y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F816f8372-3dbc-4ed5-9115-4b83db41715f_1568x1042.png 1272w, https://substackcdn.com/image/fetch/$s_!do5y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F816f8372-3dbc-4ed5-9115-4b83db41715f_1568x1042.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!do5y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F816f8372-3dbc-4ed5-9115-4b83db41715f_1568x1042.png" width="1456" height="968" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/816f8372-3dbc-4ed5-9115-4b83db41715f_1568x1042.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:968,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:190675,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/165571506?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F816f8372-3dbc-4ed5-9115-4b83db41715f_1568x1042.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!do5y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F816f8372-3dbc-4ed5-9115-4b83db41715f_1568x1042.png 424w, https://substackcdn.com/image/fetch/$s_!do5y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F816f8372-3dbc-4ed5-9115-4b83db41715f_1568x1042.png 848w, https://substackcdn.com/image/fetch/$s_!do5y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F816f8372-3dbc-4ed5-9115-4b83db41715f_1568x1042.png 1272w, https://substackcdn.com/image/fetch/$s_!do5y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F816f8372-3dbc-4ed5-9115-4b83db41715f_1568x1042.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>So you can do something like this:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Fyl_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2917a74-cbe8-4102-97d5-7a5ad2a2793d_1757x1015.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Fyl_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2917a74-cbe8-4102-97d5-7a5ad2a2793d_1757x1015.png 424w, https://substackcdn.com/image/fetch/$s_!Fyl_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2917a74-cbe8-4102-97d5-7a5ad2a2793d_1757x1015.png 848w, https://substackcdn.com/image/fetch/$s_!Fyl_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2917a74-cbe8-4102-97d5-7a5ad2a2793d_1757x1015.png 1272w, https://substackcdn.com/image/fetch/$s_!Fyl_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2917a74-cbe8-4102-97d5-7a5ad2a2793d_1757x1015.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Fyl_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2917a74-cbe8-4102-97d5-7a5ad2a2793d_1757x1015.png" width="1456" height="841" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c2917a74-cbe8-4102-97d5-7a5ad2a2793d_1757x1015.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:841,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:260939,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/165571506?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2917a74-cbe8-4102-97d5-7a5ad2a2793d_1757x1015.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Fyl_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2917a74-cbe8-4102-97d5-7a5ad2a2793d_1757x1015.png 424w, https://substackcdn.com/image/fetch/$s_!Fyl_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2917a74-cbe8-4102-97d5-7a5ad2a2793d_1757x1015.png 848w, https://substackcdn.com/image/fetch/$s_!Fyl_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2917a74-cbe8-4102-97d5-7a5ad2a2793d_1757x1015.png 1272w, https://substackcdn.com/image/fetch/$s_!Fyl_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2917a74-cbe8-4102-97d5-7a5ad2a2793d_1757x1015.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The await_result() tool will actually block and await on the results of the background jobs by calling <code>.result()</code> on the handle.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aM3d!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7c92b7d-012b-476f-ac3a-8284677dfe23_1568x836.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aM3d!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7c92b7d-012b-476f-ac3a-8284677dfe23_1568x836.png 424w, https://substackcdn.com/image/fetch/$s_!aM3d!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7c92b7d-012b-476f-ac3a-8284677dfe23_1568x836.png 848w, https://substackcdn.com/image/fetch/$s_!aM3d!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7c92b7d-012b-476f-ac3a-8284677dfe23_1568x836.png 1272w, https://substackcdn.com/image/fetch/$s_!aM3d!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7c92b7d-012b-476f-ac3a-8284677dfe23_1568x836.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aM3d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7c92b7d-012b-476f-ac3a-8284677dfe23_1568x836.png" width="1456" height="776" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a7c92b7d-012b-476f-ac3a-8284677dfe23_1568x836.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:776,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:117632,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/165571506?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7c92b7d-012b-476f-ac3a-8284677dfe23_1568x836.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!aM3d!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7c92b7d-012b-476f-ac3a-8284677dfe23_1568x836.png 424w, https://substackcdn.com/image/fetch/$s_!aM3d!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7c92b7d-012b-476f-ac3a-8284677dfe23_1568x836.png 848w, https://substackcdn.com/image/fetch/$s_!aM3d!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7c92b7d-012b-476f-ac3a-8284677dfe23_1568x836.png 1272w, https://substackcdn.com/image/fetch/$s_!aM3d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7c92b7d-012b-476f-ac3a-8284677dfe23_1568x836.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>And this turns what was a previously a completely synchronous and fragile tool interaction, into a durable and asynchronous data gathering and analysis experience.</p><h3>The best of both worlds</h3><p>Integrating Resonate into a MCP server preserves standardized tool calling while completely transforming your application into a Durable Distributed System.</p><p>You don&#8217;t need to teach the model about distributed systems.</p><p>You don&#8217;t need to wrap every tool in scaffolding just to handle timeouts or retries.</p><p>You don&#8217;t need to worry if your server crashes halfway through a job.</p><p>Check out the <a href="https://github.com/resonatehq-examples/example-agent-tool-weather-data">weather data agent tool example application</a> to see for yourself.</p>]]></content:encoded></item><item><title><![CDATA[Agent tools part 1 | The current status]]></title><description><![CDATA[Tool calling has evolved horizontally, addressing the needs of autonomy but not distribution.]]></description><link>https://journal.resonatehq.io/p/agent-tools-part-1-the-current-status</link><guid isPermaLink="false">https://journal.resonatehq.io/p/agent-tools-part-1-the-current-status</guid><dc:creator><![CDATA[Cully Wakelin]]></dc:creator><pubDate>Tue, 24 Jun 2025 13:01:32 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!5sFx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e3e018b-4dfb-4fe7-8bff-5638f93b1bfd_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5sFx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e3e018b-4dfb-4fe7-8bff-5638f93b1bfd_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5sFx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e3e018b-4dfb-4fe7-8bff-5638f93b1bfd_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!5sFx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e3e018b-4dfb-4fe7-8bff-5638f93b1bfd_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!5sFx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e3e018b-4dfb-4fe7-8bff-5638f93b1bfd_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!5sFx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e3e018b-4dfb-4fe7-8bff-5638f93b1bfd_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5sFx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e3e018b-4dfb-4fe7-8bff-5638f93b1bfd_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9e3e018b-4dfb-4fe7-8bff-5638f93b1bfd_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1432288,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/165882736?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e3e018b-4dfb-4fe7-8bff-5638f93b1bfd_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5sFx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e3e018b-4dfb-4fe7-8bff-5638f93b1bfd_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!5sFx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e3e018b-4dfb-4fe7-8bff-5638f93b1bfd_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!5sFx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e3e018b-4dfb-4fe7-8bff-5638f93b1bfd_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!5sFx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e3e018b-4dfb-4fe7-8bff-5638f93b1bfd_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="pullquote"><p>&#8220;Evolution does not always optimize survival&#8221;</p><p>&#8212; someone smart</p></div><p>You can apply that quote to our species obsession with the advancement of AI in general. However, here I am applying it to the evolution of LLM tool calling capabilities.</p><h3>Mad tool skills, bruh</h3><p>LLMs are now trained to provide structured data responses when they &#8220;want&#8221; to make use of a tool.</p><p>For example, if I prompt a model that has been trained to make tool calls to gather weather data for Parkland County, Alberta (that&#8217;s where I live) for July 2023, the model will know to format its response to my question with something like this:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!o2wX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd374e6e-619b-4c08-bbe9-d6dd6fb694d9_1516x548.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!o2wX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd374e6e-619b-4c08-bbe9-d6dd6fb694d9_1516x548.png 424w, https://substackcdn.com/image/fetch/$s_!o2wX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd374e6e-619b-4c08-bbe9-d6dd6fb694d9_1516x548.png 848w, https://substackcdn.com/image/fetch/$s_!o2wX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd374e6e-619b-4c08-bbe9-d6dd6fb694d9_1516x548.png 1272w, https://substackcdn.com/image/fetch/$s_!o2wX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd374e6e-619b-4c08-bbe9-d6dd6fb694d9_1516x548.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!o2wX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd374e6e-619b-4c08-bbe9-d6dd6fb694d9_1516x548.png" width="1456" height="526" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dd374e6e-619b-4c08-bbe9-d6dd6fb694d9_1516x548.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:526,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:52953,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/165882736?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd374e6e-619b-4c08-bbe9-d6dd6fb694d9_1516x548.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!o2wX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd374e6e-619b-4c08-bbe9-d6dd6fb694d9_1516x548.png 424w, https://substackcdn.com/image/fetch/$s_!o2wX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd374e6e-619b-4c08-bbe9-d6dd6fb694d9_1516x548.png 848w, https://substackcdn.com/image/fetch/$s_!o2wX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd374e6e-619b-4c08-bbe9-d6dd6fb694d9_1516x548.png 1272w, https://substackcdn.com/image/fetch/$s_!o2wX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd374e6e-619b-4c08-bbe9-d6dd6fb694d9_1516x548.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The chat client, or application that interacts with the LLM, is responsible for looking at the output, detecting the structured response, parsing it, and then invoking the &#8220;get_weather_data&#8221; function with the arguments.</p><p>The expectation is that the result of the tool function is then passed back to the LLM as part of the conversation. That is, the LLM, as part of its training, expects the next input to be a result from the tool call.</p><h3>Remember, remember</h3><p>Remember that an LLM by itself does not have memory. It relies on the entire conversation thread (also called context) to be provided on each and every interaction, with each user input, LLM response, or tool result appended to the context/conversation thread. In other words, the interaction is turn based, and on each turn the entire history is fed back into the LLM.</p><p>Note, the big players like Open AI and Anthropic have added RAG-like memory to their chat clients so that there is an appearance of memory across different context windows (they persist the conversation threads and search them for information, passing it to the LLM as part of other conversation threads). But fundamentally they are working around the memory constraint described above.</p><h3>Sync, sync, baby</h3><p>Currently interactions with tools are synchronous. And it is hard to imagine it will be anything other than that.</p><div class="pullquote"><p>For the conversation to make sense to the LLM it needs to have the result of the tool after it invokes it.</p></div><p>If gathering weather data takes 8 hours, perhaps for a very large area over a longer time period, then that context thread needs to wait 8 hours for the tool result before the user can add additional input and continue interacting with the LLM within that thread.</p><p>As a workaround, Open AI has managed to train some of its models to invoke a tool multiple times from a single model response. That is, if I were to ask their model to &#8220;gather weather data for July 2022 and July 2023 for Parkland County, Alberta&#8221; it would know how to return a response like this:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4016!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e35fcdd-d770-4a9b-8267-1f578566ddb2_1516x1000.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4016!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e35fcdd-d770-4a9b-8267-1f578566ddb2_1516x1000.png 424w, https://substackcdn.com/image/fetch/$s_!4016!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e35fcdd-d770-4a9b-8267-1f578566ddb2_1516x1000.png 848w, https://substackcdn.com/image/fetch/$s_!4016!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e35fcdd-d770-4a9b-8267-1f578566ddb2_1516x1000.png 1272w, https://substackcdn.com/image/fetch/$s_!4016!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e35fcdd-d770-4a9b-8267-1f578566ddb2_1516x1000.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4016!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e35fcdd-d770-4a9b-8267-1f578566ddb2_1516x1000.png" width="1456" height="960" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2e35fcdd-d770-4a9b-8267-1f578566ddb2_1516x1000.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:960,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:100158,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/165882736?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e35fcdd-d770-4a9b-8267-1f578566ddb2_1516x1000.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4016!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e35fcdd-d770-4a9b-8267-1f578566ddb2_1516x1000.png 424w, https://substackcdn.com/image/fetch/$s_!4016!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e35fcdd-d770-4a9b-8267-1f578566ddb2_1516x1000.png 848w, https://substackcdn.com/image/fetch/$s_!4016!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e35fcdd-d770-4a9b-8267-1f578566ddb2_1516x1000.png 1272w, https://substackcdn.com/image/fetch/$s_!4016!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e35fcdd-d770-4a9b-8267-1f578566ddb2_1516x1000.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I think you might call this the &#8220;fork / join technique&#8221;.</p><p>So, if data gathering for each location takes 8 hours, instead of taking 16 hours for back-to-back tool calls with a prompt between them, it would only take 8 hours before you could move forward with the thread.</p><p>But, again, the interaction is synchronous and you can&#8217;t move forward with that specific context/conversation thread until there is a result from the interaction with the tool calls. The LLM would throw an exception otherwise.</p><h3>But what about MCP?</h3><p>MCP (Model Context Protocol) standardizes the approach. That is, MCP creates a standard by which all LLMs can be trained to structure their output to connect to and invoke tools that exist outside of a chat client or application. Which is cool.</p><p>But MCP doubles down on this synchronous behaviour. It has no built-in mechanisms for handling the distribution that it facilitates. It creates TCP connections that need to be maintained throughout the entire tool interaction. And if the tool errors, the MCP Server crashes, or the connection between the chat client / application and the tool fails, there is no built-in means by which to mitigate that failure or those errors.</p><p>Even though MCP standardizes a tool calling convention, it ignores all the other issues that arise from building a distributed system and as the developer you are now burdened with figuring out:</p><ul><li><p>Supervision, such as timeouts, to detect issues</p></li><li><p>Retry logic for application level errors</p></li><li><p>Deduplication and/or idempotency guarantees</p></li><li><p>Recovery for process crashes</p></li></ul><p>Congrats, you are now engineering a reliable distributed system.</p><h3>Strongest of hype cycle</h3><p>This situation continues to exacerbate a problem where application developers, and in this case autonomous application developers, are forced to be distributed systems engineers.</p><div class="pullquote"><p>Basically, tool calling has evolved sub-optimally, solely addressing the needs of autonomy and not distribution.</p></div><p>So, while AI speeds things up in theory, there will still be a delay in pushing reliable autonomous applications to production, because the developers still need to wrestle with the same issues they have been wrestling with since an applications started spanning more than one process almost three decades ago.</p><p>Unless&#8230; </p><p>Unless Resonate has something up its sleeve that could take all that pain away?</p><p>Stay tuned to find out!</p>]]></content:encoded></item><item><title><![CDATA[Data plane labels for Resonate]]></title><description><![CDATA[Workers, Groups, & Fleets]]></description><link>https://journal.resonatehq.io/p/data-plane-labels-for-resonate</link><guid isPermaLink="false">https://journal.resonatehq.io/p/data-plane-labels-for-resonate</guid><dc:creator><![CDATA[Cully Wakelin]]></dc:creator><pubDate>Tue, 17 Jun 2025 13:00:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!te92!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5763122a-5d9a-4d98-b3ab-1c4d7d56e029_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!te92!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5763122a-5d9a-4d98-b3ab-1c4d7d56e029_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!te92!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5763122a-5d9a-4d98-b3ab-1c4d7d56e029_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!te92!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5763122a-5d9a-4d98-b3ab-1c4d7d56e029_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!te92!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5763122a-5d9a-4d98-b3ab-1c4d7d56e029_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!te92!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5763122a-5d9a-4d98-b3ab-1c4d7d56e029_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!te92!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5763122a-5d9a-4d98-b3ab-1c4d7d56e029_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5763122a-5d9a-4d98-b3ab-1c4d7d56e029_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2398369,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/161972671?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5763122a-5d9a-4d98-b3ab-1c4d7d56e029_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!te92!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5763122a-5d9a-4d98-b3ab-1c4d7d56e029_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!te92!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5763122a-5d9a-4d98-b3ab-1c4d7d56e029_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!te92!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5763122a-5d9a-4d98-b3ab-1c4d7d56e029_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!te92!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5763122a-5d9a-4d98-b3ab-1c4d7d56e029_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1>Worker</h1><p>A Worker, also known as an Application Node, is a single process with an instance of Resonate. An application can have between 1 and n unique Workers.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wqkL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9799564a-6cba-476d-b943-7e2282480c90_1520x320.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wqkL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9799564a-6cba-476d-b943-7e2282480c90_1520x320.png 424w, https://substackcdn.com/image/fetch/$s_!wqkL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9799564a-6cba-476d-b943-7e2282480c90_1520x320.png 848w, https://substackcdn.com/image/fetch/$s_!wqkL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9799564a-6cba-476d-b943-7e2282480c90_1520x320.png 1272w, https://substackcdn.com/image/fetch/$s_!wqkL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9799564a-6cba-476d-b943-7e2282480c90_1520x320.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wqkL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9799564a-6cba-476d-b943-7e2282480c90_1520x320.png" width="1456" height="307" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9799564a-6cba-476d-b943-7e2282480c90_1520x320.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:307,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3181,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/161972671?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9799564a-6cba-476d-b943-7e2282480c90_1520x320.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wqkL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9799564a-6cba-476d-b943-7e2282480c90_1520x320.png 424w, https://substackcdn.com/image/fetch/$s_!wqkL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9799564a-6cba-476d-b943-7e2282480c90_1520x320.png 848w, https://substackcdn.com/image/fetch/$s_!wqkL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9799564a-6cba-476d-b943-7e2282480c90_1520x320.png 1272w, https://substackcdn.com/image/fetch/$s_!wqkL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9799564a-6cba-476d-b943-7e2282480c90_1520x320.png 1456w" sizes="100vw"></picture><div></div></div></a></figure></div><h1>Group</h1><p>A Group is a set of Workers that share a Group ID.</p><p>Workers in a Group should be identical instances of each other. That is &#8212; a Group of Workers are processes with identical code bases.</p><p>An application can have between 1 and n unique Groups.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JkpW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e5fe2b1-beb5-430e-9b6c-86e96dd9428b_1520x520.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JkpW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e5fe2b1-beb5-430e-9b6c-86e96dd9428b_1520x520.png 424w, https://substackcdn.com/image/fetch/$s_!JkpW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e5fe2b1-beb5-430e-9b6c-86e96dd9428b_1520x520.png 848w, https://substackcdn.com/image/fetch/$s_!JkpW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e5fe2b1-beb5-430e-9b6c-86e96dd9428b_1520x520.png 1272w, https://substackcdn.com/image/fetch/$s_!JkpW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e5fe2b1-beb5-430e-9b6c-86e96dd9428b_1520x520.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JkpW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e5fe2b1-beb5-430e-9b6c-86e96dd9428b_1520x520.png" width="1456" height="498" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9e5fe2b1-beb5-430e-9b6c-86e96dd9428b_1520x520.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:498,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:8896,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/161972671?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e5fe2b1-beb5-430e-9b6c-86e96dd9428b_1520x520.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JkpW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e5fe2b1-beb5-430e-9b6c-86e96dd9428b_1520x520.png 424w, https://substackcdn.com/image/fetch/$s_!JkpW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e5fe2b1-beb5-430e-9b6c-86e96dd9428b_1520x520.png 848w, https://substackcdn.com/image/fetch/$s_!JkpW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e5fe2b1-beb5-430e-9b6c-86e96dd9428b_1520x520.png 1272w, https://substackcdn.com/image/fetch/$s_!JkpW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e5fe2b1-beb5-430e-9b6c-86e96dd9428b_1520x520.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1>Fleet</h1><p>A Fleet is the application&#8217;s full set of Workers and Groups.</p><p>A Fleet can have a between 1 and n unique Workers and 1 and n unique Groups.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wEQc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F158fe5ab-4883-4c51-aee5-4fe423ce965b_1440x800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wEQc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F158fe5ab-4883-4c51-aee5-4fe423ce965b_1440x800.png 424w, https://substackcdn.com/image/fetch/$s_!wEQc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F158fe5ab-4883-4c51-aee5-4fe423ce965b_1440x800.png 848w, https://substackcdn.com/image/fetch/$s_!wEQc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F158fe5ab-4883-4c51-aee5-4fe423ce965b_1440x800.png 1272w, https://substackcdn.com/image/fetch/$s_!wEQc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F158fe5ab-4883-4c51-aee5-4fe423ce965b_1440x800.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wEQc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F158fe5ab-4883-4c51-aee5-4fe423ce965b_1440x800.png" width="1440" height="800" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/158fe5ab-4883-4c51-aee5-4fe423ce965b_1440x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:800,&quot;width&quot;:1440,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:12650,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/161972671?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F158fe5ab-4883-4c51-aee5-4fe423ce965b_1440x800.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wEQc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F158fe5ab-4883-4c51-aee5-4fe423ce965b_1440x800.png 424w, https://substackcdn.com/image/fetch/$s_!wEQc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F158fe5ab-4883-4c51-aee5-4fe423ce965b_1440x800.png 848w, https://substackcdn.com/image/fetch/$s_!wEQc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F158fe5ab-4883-4c51-aee5-4fe423ce965b_1440x800.png 1272w, https://substackcdn.com/image/fetch/$s_!wEQc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F158fe5ab-4883-4c51-aee5-4fe423ce965b_1440x800.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Distributed Async Await | Introduction]]></title><description><![CDATA[Solve complex problems with simple code&#65293;Enjoy peace of mind]]></description><link>https://journal.resonatehq.io/p/distributed-async-await-introduction</link><guid isPermaLink="false">https://journal.resonatehq.io/p/distributed-async-await-introduction</guid><dc:creator><![CDATA[Dominik Tornow]]></dc:creator><pubDate>Wed, 11 Jun 2025 12:03:06 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!lz1l!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3df418e-0a89-4a01-b80c-e1f3520b57f1_1854x1241.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lz1l!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3df418e-0a89-4a01-b80c-e1f3520b57f1_1854x1241.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lz1l!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3df418e-0a89-4a01-b80c-e1f3520b57f1_1854x1241.png 424w, https://substackcdn.com/image/fetch/$s_!lz1l!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3df418e-0a89-4a01-b80c-e1f3520b57f1_1854x1241.png 848w, https://substackcdn.com/image/fetch/$s_!lz1l!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3df418e-0a89-4a01-b80c-e1f3520b57f1_1854x1241.png 1272w, https://substackcdn.com/image/fetch/$s_!lz1l!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3df418e-0a89-4a01-b80c-e1f3520b57f1_1854x1241.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lz1l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3df418e-0a89-4a01-b80c-e1f3520b57f1_1854x1241.png" width="1456" height="975" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a3df418e-0a89-4a01-b80c-e1f3520b57f1_1854x1241.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:975,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2298977,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/161595355?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3df418e-0a89-4a01-b80c-e1f3520b57f1_1854x1241.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!lz1l!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3df418e-0a89-4a01-b80c-e1f3520b57f1_1854x1241.png 424w, https://substackcdn.com/image/fetch/$s_!lz1l!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3df418e-0a89-4a01-b80c-e1f3520b57f1_1854x1241.png 848w, https://substackcdn.com/image/fetch/$s_!lz1l!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3df418e-0a89-4a01-b80c-e1f3520b57f1_1854x1241.png 1272w, https://substackcdn.com/image/fetch/$s_!lz1l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3df418e-0a89-4a01-b80c-e1f3520b57f1_1854x1241.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>This blog post introduces <a href="https://www.resonatehq.io/distributed-async-await">Distributed Async Await</a>, a dead simple programming model for concurrent and distributed applications, designed to provide a delightful developer experience.</em></p><p><em>This is the first in a series of three blog post:</em></p><ul><li><p><em>Introduction</em></p></li><li><p><em>The Protocol Stack</em></p></li><li><p><em>The Programming Model</em></p></li></ul><h2>The Challenge: Concurrency and Distribution</h2><p>Today&#8217;s applications operate in distributed environments, handling large numbers of concurrent executions across multiple processes. In short, today&#8217;s applications are characterized by <em>concurrency</em> and <em>distribution</em>.</p><p>Concurrency and distribution present two challenges:</p><ul><li><p><strong>Concurrency</strong></p><p>Concurrency introduces <em>non-deterministic partial order</em>, where the <em>sequence of operations</em> is unpredictable across components. In other words, we do not know what <em>happens</em> next.</p></li><li><p><strong>Distribution</strong></p><p>Distribution introduces <em>non-deterministic partial failure</em>, where the <em>occurrence of failure</em> is unpredictable across components. In other words, we do not know what <em>fails</em> next.</p></li></ul><p>To mitigate the effects of concurrency, we need <em>distributed</em> <em>coordination </em>and to mitigate the effects of distribution we need <em>distributed recovery</em>:</p><ul><li><p><strong>Distributed Coordination</strong></p><p>Distributed Coordination is the ability of a system to mitigate partial order by synchronizing between executions, potentially running on different processes.</p></li><li><p><strong>Distributed Recovery</strong></p><p>Distributed Recovery is the ability of a system to mitigate partial failure by resuming an execution in case of failure, potentially on a different process.</p></li></ul><p>Concurrent programming models such as async await have simplified the challenges of concurrency within a single process. However, no comparable concurrent and distributed programming models have emerged.</p><p>Developers have to address the complexity manually, cobbling together snapshotting, checkpointing, polling, or retrying. This resulting code that is hard to create, hard to update, brittle, buggy, and obscures its very reason to exist: its business logic.</p><h2>Example: The Countdown</h2><p>Consider a simple use case, a countdown timer. We initiate a countdown with a phone number, a count, and a frequency. The app will send a text message to the provided phone number in the provided frequency, decreasing the count by one each time, until we reach zero.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zkYM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb6e18fa-49bb-4fb7-88f6-dd51e55bed44_1056x1600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zkYM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb6e18fa-49bb-4fb7-88f6-dd51e55bed44_1056x1600.png 424w, https://substackcdn.com/image/fetch/$s_!zkYM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb6e18fa-49bb-4fb7-88f6-dd51e55bed44_1056x1600.png 848w, https://substackcdn.com/image/fetch/$s_!zkYM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb6e18fa-49bb-4fb7-88f6-dd51e55bed44_1056x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!zkYM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb6e18fa-49bb-4fb7-88f6-dd51e55bed44_1056x1600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zkYM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb6e18fa-49bb-4fb7-88f6-dd51e55bed44_1056x1600.png" width="390" height="590.9090909090909" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fb6e18fa-49bb-4fb7-88f6-dd51e55bed44_1056x1600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1600,&quot;width&quot;:1056,&quot;resizeWidth&quot;:390,&quot;bytes&quot;:152292,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/161595355?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb6e18fa-49bb-4fb7-88f6-dd51e55bed44_1056x1600.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!zkYM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb6e18fa-49bb-4fb7-88f6-dd51e55bed44_1056x1600.png 424w, https://substackcdn.com/image/fetch/$s_!zkYM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb6e18fa-49bb-4fb7-88f6-dd51e55bed44_1056x1600.png 848w, https://substackcdn.com/image/fetch/$s_!zkYM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb6e18fa-49bb-4fb7-88f6-dd51e55bed44_1056x1600.png 1272w, https://substackcdn.com/image/fetch/$s_!zkYM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb6e18fa-49bb-4fb7-88f6-dd51e55bed44_1056x1600.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>To make the challenge more obvious, we execute the countdown on a Function-as-a-Service platform such as AWS Lambda. That introduces two problems: </p><ul><li><p><strong>Time Limit</strong></p><p>A lambda function can run for a maximum of 15 minutes before being forcibly terminated.</p></li><li><p><strong>Cost</strong></p><p>Even if your countdown fits within the time limit, you are billed for the entire runtime, even though the function is mostly idle.</p></li></ul><p>For example, a countdown starting at 10, with a frequency of 15 minutes will take 135 minutes, or 2 hours and 15 minutes to complete. Performing a back-of-the-envelope calculation, assuming sending a message takes 500ms, the execution is active for 5 seconds and asleep for 2 hours, 14 minutes and 55 seconds. First, we are exceeding the 15 min time limit and second we would be paying for 2 hours and 15 minutes instead of 5 seconds.</p><p>So, instead of simply suspending and subsequently resuming the execution, due to time limit and costs, we have to suspend the execution, terminate the process, subsequently initialize another process, and resume the execution&#65293;until today, manually.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!poWm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F150f4e23-e650-4238-8501-75d52454cf9b_1305x356.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!poWm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F150f4e23-e650-4238-8501-75d52454cf9b_1305x356.png 424w, https://substackcdn.com/image/fetch/$s_!poWm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F150f4e23-e650-4238-8501-75d52454cf9b_1305x356.png 848w, https://substackcdn.com/image/fetch/$s_!poWm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F150f4e23-e650-4238-8501-75d52454cf9b_1305x356.png 1272w, https://substackcdn.com/image/fetch/$s_!poWm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F150f4e23-e650-4238-8501-75d52454cf9b_1305x356.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!poWm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F150f4e23-e650-4238-8501-75d52454cf9b_1305x356.png" width="1305" height="356" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/150f4e23-e650-4238-8501-75d52454cf9b_1305x356.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:356,&quot;width&quot;:1305,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:25978,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/161595355?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F150f4e23-e650-4238-8501-75d52454cf9b_1305x356.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!poWm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F150f4e23-e650-4238-8501-75d52454cf9b_1305x356.png 424w, https://substackcdn.com/image/fetch/$s_!poWm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F150f4e23-e650-4238-8501-75d52454cf9b_1305x356.png 848w, https://substackcdn.com/image/fetch/$s_!poWm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F150f4e23-e650-4238-8501-75d52454cf9b_1305x356.png 1272w, https://substackcdn.com/image/fetch/$s_!poWm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F150f4e23-e650-4238-8501-75d52454cf9b_1305x356.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Instead of suspending and subsequently resuming the execution, we have to suspend the execution, terminate the process, subsequently initialize another process, and resume the execution</figcaption></figure></div><h2>Solution #1: Event Driven Architecture</h2><p>One possible solution is an event-driven architecture: Instead of trying to maintain an active execution of countdown, we split the countdown into multiple (recursive) callbacks, each triggered after the delay:</p><pre><code><code>// Bound to http://example.com/countdown
faas.handler('countdown', async (phone, count, delay) =&gt; { 
  // send the current countdown
  send(phone, count);
  // schedule another invocation for the future
  if(count =&gt; 0) {
    await cron.when({ 
      post: 'http://example.com/countdown', 
      data: [phone, count - 1, delay]
    }, delay);
  }
});</code></code></pre><p>This approach comes at a cost: We need to manage the state of the execution, that is, we need to manage the instruction pointer, the stack, and the heap, a consequence of event driven architectures known as <em>stack ripping</em> or <em>callback hell</em>&#65293;the code looks and feels fragmented across space and time.</p><p>The obfuscated control flow is not our only issue tho. Like most ad-hoc solutions, we face the most difficult problems in case of failure.</p><p><code>countdown</code> lacks any notion of principled failure handling semantics:</p><ul><li><p>What happens if the invocation of <code>send</code> fails? Will the invocation be retried? Who is responsible for the retry? Will the message be sent again?</p></li><li><p>What happens if the invocation of <code>cron</code> fails? Will the invocation be retried? Who is responsible for the retry? Will the next countdown be scheduled twice?</p></li><li><p>What happens if cron itself fails? Will cron retry the http call? Will the next countdown be invoked twice?</p></li></ul><p>Maybe basing a long running execution such as countdown on ephemeral http requests is not the best call. Maybe we should switch to durable queues?</p><p>To make matters worse, countdown lacks any notion of debugability and observability:</p><ul><li><p>How do we learn that a countdown has failed mid execution?</p></li><li><p>How do we learn what countdowns are currently executing?</p></li><li><p>How do we diagnose a problem? Where do we look?</p></li><li><p>How do you cancel an ongoing countdown?</p></li></ul><p>Maybe not having a manifestation of a long running execution except some job in cron or some message in a message queue is not the best call either. Maybe we should add a database?</p><h3>The result? Dread!</h3><p>We face an endless list of questions that we must answer one by one, analyzing the behavior of the individual components and how they interact, only to start from the very beginning after we make the slightest change.</p><p>The result? The code is neither easy to write nor easy to read and only indirectly, in a roundabout, obfuscated way, reflects our business logic. Reasoning about failure? Confusion. Adding new functionality? Frustration.</p><p>Even if we acknowledge that most of us <em>can</em> handle the complexity, I would argue none of us <em>wants</em> to. This is not a fun challenge, this is joyless toil&#65293;a dreadful developer experience.</p><h2>Solution #2: Distributed Async Await</h2><p>Could we write code <strong>as if</strong> we suspended and subsequently resumed?! On this or a different process, with or without failure?! Could we enjoy a delightful developer experience and achieve the illusion of continuity across space and time?!</p><pre><code><code>async countdown (context, phone, count, delay) { 
  for (let i = count; i &gt; 0; i--) {
    // 1. Locally invoke and await a function send
    await async send(phone, i);
    // 2. Remotely invoke and await a timer
    await async wait(delay);
  }
}</code></code></pre><blockquote><p>Distributed Async Await is available as SDKs for different programming languages like typescript, javascript, or python&#65293;the example abstractly showcases the core primitives, <code>async</code> and <code>await</code>.</p></blockquote><p>This code is easy to write, easy to read, and directly reflects our business logic. No cron jobs, no message queues, no databases. </p><p>Just a simple function.</p><h3>The result? Delight!</h3><p><a href="https://www.resonatehq.io">Resonate&#8217;s</a> Distributed Async Await is a programming model with language-integrated distributed coordination and distributed recovery, enabling developers to express complex logic with simple code.</p><p>Distributed Async Await is built on two abstractions, durable functions and durable promises:</p><ul><li><p><strong>Durable Functions</strong></p><p>Functions that run to completion, even in the presence of interruptions.</p></li><li><p><strong>Durable Promises</strong></p><p>Promises that coordinate between executions on the same or different processes.</p></li></ul><p>Distributed Async Await is a dead simple programming model that enables developers to build applications that are </p><ul><li><p>simple to understand </p></li><li><p>simple to develop</p></li><li><p>simple to operate</p></li></ul><p>The next blog posts will explore the mechanics of Distribute Async Await to gain an accurate and concise mental model</p><div class="pullquote"><p>Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away </p><p>Antoine de Saint-Exup&#233;ry</p></div><p></p>]]></content:encoded></item><item><title><![CDATA[Durable Execution: From where do deterministic constraints come?]]></title><description><![CDATA[Is it because of the system? Or because of your use case?]]></description><link>https://journal.resonatehq.io/p/from-where-do-deterministic-constraints</link><guid isPermaLink="false">https://journal.resonatehq.io/p/from-where-do-deterministic-constraints</guid><dc:creator><![CDATA[Cully Wakelin]]></dc:creator><pubDate>Mon, 09 Jun 2025 13:02:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!LxG4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F453a6a1f-d6ca-4082-b031-7c24894afea9_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LxG4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F453a6a1f-d6ca-4082-b031-7c24894afea9_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LxG4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F453a6a1f-d6ca-4082-b031-7c24894afea9_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!LxG4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F453a6a1f-d6ca-4082-b031-7c24894afea9_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!LxG4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F453a6a1f-d6ca-4082-b031-7c24894afea9_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!LxG4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F453a6a1f-d6ca-4082-b031-7c24894afea9_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LxG4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F453a6a1f-d6ca-4082-b031-7c24894afea9_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/453a6a1f-d6ca-4082-b031-7c24894afea9_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3768748,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/160284265?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F453a6a1f-d6ca-4082-b031-7c24894afea9_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!LxG4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F453a6a1f-d6ca-4082-b031-7c24894afea9_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!LxG4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F453a6a1f-d6ca-4082-b031-7c24894afea9_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!LxG4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F453a6a1f-d6ca-4082-b031-7c24894afea9_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!LxG4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F453a6a1f-d6ca-4082-b031-7c24894afea9_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>During a discussion about determinism and Durable Execution with <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Dominik Tornow&quot;,&quot;id&quot;:104069074,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/068ee5c3-5642-49c2-b981-a35a27d0aeae_400x400.jpeg&quot;,&quot;uuid&quot;:&quot;e7e05f61-739f-4aab-b5fa-541e7787ac69&quot;}" data-component-name="MentionToDOM"></span> a super interesting point was made.</p><blockquote><p>With a log-based Durable Execution system, like Temporal and Restate, your &#8220;workflow code&#8221; needs to be deterministic to make the system happy. With an object set-based system, like Resonate, your &#8220;workflow code&#8221; needs to be deterministic to make your use-case happy.</p></blockquote><p>I spent several years working on Temporal&#8217;s documentation. One of the challenges was making &#8220;getting started with Temporal&#8221; content approachable, but also guide developers around the pitfall of non-determinism in their workflows.</p><p>From my perspective, this was difficult because, as a developer, to craft workflows that could actually recover from crash failures, you inevitably needed to understand how replay worked. The catch-22 was that no one really wanted to spend the time to learn a deep technical concept just to adopt a new technology. And yet it became fairly necessary to address early on in a developer&#8217;s journey.</p><p>All that is to say, I took some deep dives into the inner workings of Temporal&#8217;s replay algorithm to try and understand where that line might be &#8212; the balance between learning replay and getting yourself started.</p><p>I am still not sure I can confidently say there is a one-size fits all approach there. Distributed Systems are complex, and every developer is on a different journey with a different set of prejudices towards patterns they like and don&#8217;t like.</p><p>However, I did walk away with a real interest in Durable Execution systems and confidence that comes from having a solid mental model. So, it has been incredibly fun to dive deep into how Resonate works and compare it with Temporal and others. </p><p>The insight about where deterministic constraints comes from (to make the system happy or to your use case happy) comes from exploring the method by which each system makes replay possible &#8212; replay being the means by which a function can recover after the process it was executing in crashes.</p><h2>Log-based systems</h2><p>Temporal and Restate both maintain a dedicated and sequenced log of steps per workflow invocation. Temporal calls it an Event History, Restate calls it a Journal.</p><p>When a workflow function needs to recover, it is re-executed in a new process and each step of the execution is compared to its log. To prevent unwanted side effects, values are pulled from the log for steps that are tracked there. This is done until the e execution progresses past the last step in the log.</p><p>Example log of a completed workflow function:</p><pre><code><code>Workflow: foo started {args:[]}
Step: bar invoked {args: []}
Step: bar returned {result: 1}
Step: baz invoked {args: [1]}
Step: baz returned {result: 2}
Step: qux invoked {args: [2]}
Step: qux returned {result: 3}
Workflow: foo completed {result: 3)</code></code></pre><p>For this to work, you have to separate the workflow code from steps that introduce any randomness, such as interactions with APIs or file systems, or generating random numbers. Because during a replay, the steps in the execution must match the steps in the log. If there is a mismatch, the system can not guarantee recovery.</p><p>Here&#8217;s a practical example, let&#8217;s say you add a random number generator to your workflow function, giving a 50% chance of invoking <code>baz()</code>. </p><p>Example pseudo-code:</p><pre><code><code>@workflow
func foo(ctx) {
    result = await ctx.step(bar)
    if( random(0-100) &gt; 50 ) {
        result = await ctx.step(baz, result)
    }
    result = await ctx.step(qux, result)

    return result
}

// activity
func bar() {
   // ...
   return 1
}

// activity
func baz(arg) {
   // ...
   return arg + 1
}

func qux(arg) {
    // ...
    return arg + 1
}</code></code></pre><p>Let&#8217;s say that on the first execution attempt <code>baz()</code> is invoked and returns, but just after that the process crashes. The log might look like this:</p><pre><code><code>Workflow: foo started {args:[]}
Step: bar invoked {args: []}
Step: bar returned {result: 1}
Step: baz invoked {args: [1]}
Step: baz returned {result: 2}</code></code></pre><p>Let&#8217;s say another process picks up the task to execute the workflow function and executes it for the second time. However, on the second execution <code>baz()</code> is not invoked. When the execution reaches the invocation of <code>qux()</code> there is a mismatch between the current execution and the log and now the system doesn&#8217;t know what to do.</p><pre><code><code>Workflow: foo started {args:[]}
Step: bar invoked {args: []}
Step: bar returned {result: 1}
Step: qux invoked {args: [1]} !DETERMINISTIC REPLAY ERROR</code></code></pre><p>It doesn&#8217;t matter if your use case allows for non-determinism or not. The system can&#8217;t have that happen, or it can&#8217;t recover your workflow execution.</p><h2>Object set-based systems</h2><p>Resonate also replays function executions to recover after a process crashes.</p><p>However, instead of having a dedicated log and specifying a specific function for which the log applies, Resonate uses un-sequenced promises.</p><p>During the Replay of a function execution values are pulled from promises. When the execution reaches a promise for which there isn&#8217;t a result yet, it invokes the step (in most cases that&#8217;s a function) and waits for the value, indicating it has progressed further than the previous execution.</p><p>Consider the same situation as previously where there is a 50% chance of invoking baz(), and on the first execution baz() is invoked and returns.</p><p>The following promises would exist:</p><pre><code><code>PromiseFoo: {Status: Pending, Result: Null}</code></code></pre><pre><code><code>PromiseBar: {Status: Resolved, Result: 1}</code></code></pre><pre><code><code>PromiseBaz: {Status: Resolved, Result: 2}</code></code></pre><p>Again, assuming the process crashed after <code>baz()</code> returned, <code>foo()</code> would re-execute in a new process. The value of bar() would come from the previously completed promise to prevent duplicate side effects.  However, in this case, the system would not prevent the execution from continuing if <code>baz()</code> is skipped.</p><p>The execution would just progress to <code>qux()</code> because there is no log sequence dictating that <code>baz()</code> should be the next step. The resulting promise states would look like this:</p><pre><code><code>PromiseFoo: {Status: Resolved, Result: 2}</code></code></pre><pre><code><code>PromiseBar: {Status: Resolved, Result: 1}</code></code></pre><pre><code><code>PromiseQux: {Status: Resolved, Result: 2}</code></code></pre><p>Using this replay method, you don&#8217;t need to separate functions by which ones have to be deterministic and which ones can engage in randomness.</p><p>However, on the first execution baz() did execute to completion, and whether that is bad or not is up to your use case. Something undesirable could happen if you are not aware of how replay works.</p><h2>Understanding replay</h2><p>The theme that I see, is that to be successful with any Durable Execution platform, a developer will inevitably need to understand how replay works to recover executions after process crashes. There doesn&#8217;t seem to be a way around that.</p><p>A log-based approach could almost be considered a &#8220;guard-rail&#8221; approach, because a log-based system doesn&#8217;t allow progress past the point of contention, and in many cases enables a fix to be deployed to solve for it. The upfront learning curve includes both the system&#8217;s replay semantics as well as the primitives you need to use to work within the system, such as &#8220;workflows&#8221;, &#8220;events&#8221;, etc, thus warranting the &#8220;guard rails&#8221;.</p><p>An object set-based approach takes the guard rails off. So, it is important to understand replay and how it could affect your use case pretty early on. But since this approach builds on existing and well known primitives (functions and promises), the learning could be far less steep, leaving plenty of room for a developer to wrap their head around the concept without too much struggle.</p><p>There are many more aspects of these systems to compare &#8212; even on the topic of deterministic constraints, this barely scratches the surface. But for whatever reason I found the insight between the two types of systems incredibly compelling and worth thinking about.</p><p>I hope you enjoyed thinking about it too!</p><p></p>]]></content:encoded></item><item><title><![CDATA[Complex Problems. Simple Code.]]></title><description><![CDATA[Resonate HQ raises $3 million in seed funding to craft a dead simple programming model for modern applications.]]></description><link>https://journal.resonatehq.io/p/resonate-hq-seed-funding</link><guid isPermaLink="false">https://journal.resonatehq.io/p/resonate-hq-seed-funding</guid><dc:creator><![CDATA[Dominik Tornow]]></dc:creator><pubDate>Mon, 02 Jun 2025 13:03:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!5vqr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bb4942e-c2dc-4e2e-ba31-ffff13491b6e_1340x480.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5vqr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bb4942e-c2dc-4e2e-ba31-ffff13491b6e_1340x480.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5vqr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bb4942e-c2dc-4e2e-ba31-ffff13491b6e_1340x480.png 424w, https://substackcdn.com/image/fetch/$s_!5vqr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bb4942e-c2dc-4e2e-ba31-ffff13491b6e_1340x480.png 848w, https://substackcdn.com/image/fetch/$s_!5vqr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bb4942e-c2dc-4e2e-ba31-ffff13491b6e_1340x480.png 1272w, https://substackcdn.com/image/fetch/$s_!5vqr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bb4942e-c2dc-4e2e-ba31-ffff13491b6e_1340x480.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5vqr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bb4942e-c2dc-4e2e-ba31-ffff13491b6e_1340x480.png" width="724.484375" height="259.51679104477614" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6bb4942e-c2dc-4e2e-ba31-ffff13491b6e_1340x480.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:480,&quot;width&quot;:1340,&quot;resizeWidth&quot;:724.484375,&quot;bytes&quot;:217994,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/161968736?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa7ae804-ba04-4968-bb71-144b7f0e2cef_1340x480.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5vqr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bb4942e-c2dc-4e2e-ba31-ffff13491b6e_1340x480.png 424w, https://substackcdn.com/image/fetch/$s_!5vqr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bb4942e-c2dc-4e2e-ba31-ffff13491b6e_1340x480.png 848w, https://substackcdn.com/image/fetch/$s_!5vqr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bb4942e-c2dc-4e2e-ba31-ffff13491b6e_1340x480.png 1272w, https://substackcdn.com/image/fetch/$s_!5vqr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bb4942e-c2dc-4e2e-ba31-ffff13491b6e_1340x480.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>When we started Resonate in June 2023 we had one goal: To solve complex problems with simple code, so developers can focus on creating value instead of fighting frustration.</p><h2>Complexity has outpaced comprehension</h2><p>Modern applications are complex. They are concurrent and distributed, characterized by a high degree of non-determinism (an elegant way of saying utter chaos), and stall or fail in countless ways that are hard to understand and even harder to address.</p><p>In practice, developers are forced to choose between two painful extremes: </p><ul><li><p>Build a distributed application from scratch, wiring together databases, queues, and timers in an intangible code base we then call &#8220;event driven architecture&#8221;.</p></li><li><p>Submit to a wave of orchestration engines, with proprietary programming models, built on proprietary protocols, and running on a proprietary centralized platform. </p></li></ul><p>Neither path feels good. There has to be a better way.</p><h2>A <strong>Dead Simple</strong> distributed programming model</h2><p>Resonate is not building another orchestration engine, platform, framework, or library. We are engineering a new programming model: Distributed Async Await</p><div class="pullquote"><p>Distributed Async Await collapses the complexity of distributed application development into one dead simple programming model.</p></div><p>Just like async await empowers developers to build scalable and reliable concurrent applications without having to focus on the pitfalls of concurrency (deadlocks and race conditions, anyone?), Distributed Async Await brings the same benefits to building scalable and reliable distributed applications.</p><p>Write normal code in Python, Typescript, or Javascript, but behind the scenes, Distributed Async Await handles the complexities of distributed applications. </p><p>Coordination and recovery are integral to the programming model itself. Dependency management between executions, failure detection and mitigation are all built in.</p><p>Distributed Async Await makes building distributed applications as simple as writing a function. Focus on what your application does, not how your application coordinates or recovers. We have you covered.</p><h2>Build to empower, not to entrap</h2><p>Many solutions open source their code but keep their core proprietary: A proprietary programming model, executing on a proprietary protocol, running on a centralized platform. The entire stack is a trap.</p><p>Resonate hits different. When you adopt Distributed Async Await, you&#8217;re not adopting a proprietary tech stack. You&#8217;re adopting an open programming model&#65293;async await&#65293;extended for distributed systems. The protocols powering that extension are themselves based on open specifications.</p><div class="pullquote"><p>You should feel good about adopting a new technology, empowered, not trapped!</p></div><p>Both the programming model and the protocols are designed to be dead simple, to thrive in a decentralized environment, and to be implementable by anyone across any language and technology&#8212;not just by one vendor and their platform.</p><h2>A Bold Vision, a Bold Foundation</h2><p>We&#8217;re proud to partner with a group of extraordinary investors who share in our vision to simplify distributed application development:</p><p><a href="https://www.amplifypartners.com/">Amplify</a> , <a href="https://www.firestreak.com/">Firestreak</a>, <a href="https://www.industryventures.com/">Industry Ventures</a>, <a href="https://www.mothfund.com/">Moth Fund</a>, <a href="https://notvcs.com/">NotVCs</a>, <a href="https://pebblebed.com/">PebbleBed</a>, <a href="https://sunflowercapital.co/">Sunflower Capital</a></p><p>With $3 million in seed funding, Resonate HQ is on a mission to make writing complex distributed applications as easy as writing a for loop &#9996;&#65039;</p><p></p>]]></content:encoded></item><item><title><![CDATA[Build a Dead Simple AI reminder assistant]]></title><description><![CDATA[Dead Simple Autonomous Agents with Resonate's Distributed Async Await]]></description><link>https://journal.resonatehq.io/p/build-a-dead-simple-ai-reminder-assistant</link><guid isPermaLink="false">https://journal.resonatehq.io/p/build-a-dead-simple-ai-reminder-assistant</guid><dc:creator><![CDATA[Dominik Tornow]]></dc:creator><pubDate>Thu, 29 May 2025 16:05:30 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!3a-F!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a9fc169-c2b8-4c9f-a111-8d9fd20971aa_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3a-F!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a9fc169-c2b8-4c9f-a111-8d9fd20971aa_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3a-F!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a9fc169-c2b8-4c9f-a111-8d9fd20971aa_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!3a-F!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a9fc169-c2b8-4c9f-a111-8d9fd20971aa_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!3a-F!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a9fc169-c2b8-4c9f-a111-8d9fd20971aa_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!3a-F!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a9fc169-c2b8-4c9f-a111-8d9fd20971aa_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3a-F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a9fc169-c2b8-4c9f-a111-8d9fd20971aa_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4a9fc169-c2b8-4c9f-a111-8d9fd20971aa_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2203426,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/164733062?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a9fc169-c2b8-4c9f-a111-8d9fd20971aa_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3a-F!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a9fc169-c2b8-4c9f-a111-8d9fd20971aa_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!3a-F!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a9fc169-c2b8-4c9f-a111-8d9fd20971aa_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!3a-F!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a9fc169-c2b8-4c9f-a111-8d9fd20971aa_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!3a-F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a9fc169-c2b8-4c9f-a111-8d9fd20971aa_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Want to build autonomous, long-running agents powered by OpenAI?</p><p>You can with Resonate's Distributed Async Await.</p><blockquote><p>Get started with <strong><a href="https://github.com/resonatehq-examples/example-schedule-reminder-py">this Reminder Assistant</a></strong>.</p></blockquote><p>Built using a minimal agent loop, the assistant can wait hours, days, or weeks without relying on cron jobs, queues, or databases&#65293;thanks to Resonate's durable execution model.</p><p>The reminder assistant enables users to schedule reminders through natural language:</p><blockquote><p><strong>Remind me first thing in the morning, bright and early, to check out https://resonatehq.io</strong></p></blockquote><p>The Reminder Assistant is implemented as an agent loop using Resonate's Distributed Async Await. Distributed Async Await enables durable suspension and resumption of long-lived executions.</p><p>With Distributed Async Await, the scheduling logic is Dead Simple:</p><ul><li><p><em>The schedule function yields (i.e., sleeps) until the target time</em></p></li><li><p><em>The system automatically resumes when the timer expires</em></p></li><li><p><em>The AI immediately sends the reminder afterward</em></p></li></ul><blockquote><p><strong>Stateful Agent = Stateless Agent + Stateful Execution</strong></p></blockquote><p>The AI Agent does not keep track of state or time, both of which are handled by Resonate: The agent is part of a durable runtime that can wait hours, days, or weeks and still complete the task. The runtime wakes the agent when it's time to act.</p><p>This eliminates the need for traditional scheduling infrastructure like cron jobs, message queues, or databases.</p><blockquote><p><strong>The assistant leverages OpenAI&#8217;s GPT-4 model with structured function calls.</strong></p></blockquote><pre><code><strong>System Prompt:

</strong>You are a helpful assistant that schedules reminders using three tools: 'schedule', 'reminder', and 'current_time'.

Users may express reminder requests ambiguously (e.g., "tomorrow morning, bright and early"). Use your best judgment to interpret such time expressions. Do not ask for clarification.

When a user asks for a reminder:

1. Call the 'schedule' tool with the desired UTC timestamp. This pauses the conversation until that time.

2. Once the system resumes and sends you the next message, the scheduled time has arrived.

3. At that point, immediately call the `reminder` tool to send the message.

If needed, use the `current_time` tool to compute a future time.

Remember:

you do not keep track of time.

You are part of a durable system that can wait hours, days, or weeks and still complete the task. The system will wake you when it is time to act. Your job is to determine what to do next.</code></pre><p>The model autonomously chooses from these tools:</p><ul><li><p><code>schedule</code>: <em>Sleep until a given UTC time in ISO 8601 format</em></p></li><li><p><code>reminder</code>: <em>Send a message as a reminder</em></p></li><li><p><code>current_time</code>: <em>Return current UTC time in ISO 8601 format</em></p></li></ul><blockquote><p><strong>The core interaction between GPT and the tools happens inside a Resonate function. </strong></p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!k7Wz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F431e97f2-c612-41cd-9d17-a7c240409809_1444x2072.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!k7Wz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F431e97f2-c612-41cd-9d17-a7c240409809_1444x2072.png 424w, https://substackcdn.com/image/fetch/$s_!k7Wz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F431e97f2-c612-41cd-9d17-a7c240409809_1444x2072.png 848w, https://substackcdn.com/image/fetch/$s_!k7Wz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F431e97f2-c612-41cd-9d17-a7c240409809_1444x2072.png 1272w, https://substackcdn.com/image/fetch/$s_!k7Wz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F431e97f2-c612-41cd-9d17-a7c240409809_1444x2072.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!k7Wz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F431e97f2-c612-41cd-9d17-a7c240409809_1444x2072.png" width="1444" height="2072" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/431e97f2-c612-41cd-9d17-a7c240409809_1444x2072.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2072,&quot;width&quot;:1444,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:293264,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/164733062?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F431e97f2-c612-41cd-9d17-a7c240409809_1444x2072.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!k7Wz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F431e97f2-c612-41cd-9d17-a7c240409809_1444x2072.png 424w, https://substackcdn.com/image/fetch/$s_!k7Wz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F431e97f2-c612-41cd-9d17-a7c240409809_1444x2072.png 848w, https://substackcdn.com/image/fetch/$s_!k7Wz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F431e97f2-c612-41cd-9d17-a7c240409809_1444x2072.png 1272w, https://substackcdn.com/image/fetch/$s_!k7Wz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F431e97f2-c612-41cd-9d17-a7c240409809_1444x2072.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><blockquote><p><strong>Durable Suspension and Durable Resumption</strong></p></blockquote><p>Besides the LLM, the highlight of this system is Resonate&#8217;s durable execution model.</p><p>When the assistant calls:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nzaL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd98ec5a8-45f4-4dc6-b70f-266ba25606d6_1444x258.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nzaL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd98ec5a8-45f4-4dc6-b70f-266ba25606d6_1444x258.png 424w, https://substackcdn.com/image/fetch/$s_!nzaL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd98ec5a8-45f4-4dc6-b70f-266ba25606d6_1444x258.png 848w, https://substackcdn.com/image/fetch/$s_!nzaL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd98ec5a8-45f4-4dc6-b70f-266ba25606d6_1444x258.png 1272w, https://substackcdn.com/image/fetch/$s_!nzaL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd98ec5a8-45f4-4dc6-b70f-266ba25606d6_1444x258.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nzaL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd98ec5a8-45f4-4dc6-b70f-266ba25606d6_1444x258.png" width="1444" height="258" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d98ec5a8-45f4-4dc6-b70f-266ba25606d6_1444x258.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:258,&quot;width&quot;:1444,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:26929,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/164733062?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd98ec5a8-45f4-4dc6-b70f-266ba25606d6_1444x258.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nzaL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd98ec5a8-45f4-4dc6-b70f-266ba25606d6_1444x258.png 424w, https://substackcdn.com/image/fetch/$s_!nzaL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd98ec5a8-45f4-4dc6-b70f-266ba25606d6_1444x258.png 848w, https://substackcdn.com/image/fetch/$s_!nzaL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd98ec5a8-45f4-4dc6-b70f-266ba25606d6_1444x258.png 1272w, https://substackcdn.com/image/fetch/$s_!nzaL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd98ec5a8-45f4-4dc6-b70f-266ba25606d6_1444x258.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Resonate</p><ul><li><p><em>Suspends the computation</em></p></li><li><p><em>Waits for hours, days, weeks, or months</em></p></li><li><p><em>Resumes the computation&#65293;even on a different process</em></p></li></ul><blockquote><p><strong>A procedural programming model on top of an event driven execution model. No databases, no queues, no timers, no polling&#8212;just functions and promises</strong></p></blockquote><p>Visit the repo README for installation and usage instructions.</p><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://github.com/resonatehq-examples/example-schedule-reminder-py&quot;,&quot;text&quot;:&quot;Try it!&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://github.com/resonatehq-examples/example-schedule-reminder-py"><span>Try it!</span></a></p>]]></content:encoded></item><item><title><![CDATA[RSVP to the "Resonate + DST" Webinar]]></title><description><![CDATA[How we implemented Deterministic Simulation Testing for our components.]]></description><link>https://journal.resonatehq.io/p/rsvp-to-the-resonate-dst-webinar</link><guid isPermaLink="false">https://journal.resonatehq.io/p/rsvp-to-the-resonate-dst-webinar</guid><dc:creator><![CDATA[Cully Wakelin]]></dc:creator><pubDate>Mon, 05 May 2025 14:44:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!VRZv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F877f18ad-b62e-4bdd-99c1-04aa5d6f7305_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VRZv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F877f18ad-b62e-4bdd-99c1-04aa5d6f7305_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VRZv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F877f18ad-b62e-4bdd-99c1-04aa5d6f7305_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!VRZv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F877f18ad-b62e-4bdd-99c1-04aa5d6f7305_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!VRZv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F877f18ad-b62e-4bdd-99c1-04aa5d6f7305_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!VRZv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F877f18ad-b62e-4bdd-99c1-04aa5d6f7305_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VRZv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F877f18ad-b62e-4bdd-99c1-04aa5d6f7305_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/877f18ad-b62e-4bdd-99c1-04aa5d6f7305_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2035107,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/161099493?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F877f18ad-b62e-4bdd-99c1-04aa5d6f7305_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!VRZv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F877f18ad-b62e-4bdd-99c1-04aa5d6f7305_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!VRZv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F877f18ad-b62e-4bdd-99c1-04aa5d6f7305_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!VRZv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F877f18ad-b62e-4bdd-99c1-04aa5d6f7305_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!VRZv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F877f18ad-b62e-4bdd-99c1-04aa5d6f7305_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Production software that&#8217;s as tough as diamonds?</p><p>Deterministic Simulation Testing makes it possible.</p><p>Join us, Wednesday June 4th at 10AM PT as we explore the DST implementations of both the Resonate Server and the Resonate Python SDK.</p><p>RSVP to get a calendar invite.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://resonatehq.io/rsvp&quot;,&quot;text&quot;:&quot;RSVP&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://resonatehq.io/rsvp"><span>RSVP</span></a></p><p>And join the Discord to stay informed.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://resonatehq.io/discord&quot;,&quot;text&quot;:&quot;Join Discord&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://resonatehq.io/discord"><span>Join Discord</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Resonate vs job queue]]></title><description><![CDATA[The difference comes down to the developer experience]]></description><link>https://journal.resonatehq.io/p/resonate-vs-job-queue</link><guid isPermaLink="false">https://journal.resonatehq.io/p/resonate-vs-job-queue</guid><dc:creator><![CDATA[Cully Wakelin]]></dc:creator><pubDate>Wed, 30 Apr 2025 18:41:57 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!gJK0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F152232a4-8f9d-43e0-999c-ec08890e3809_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gJK0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F152232a4-8f9d-43e0-999c-ec08890e3809_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gJK0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F152232a4-8f9d-43e0-999c-ec08890e3809_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!gJK0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F152232a4-8f9d-43e0-999c-ec08890e3809_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!gJK0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F152232a4-8f9d-43e0-999c-ec08890e3809_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!gJK0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F152232a4-8f9d-43e0-999c-ec08890e3809_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gJK0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F152232a4-8f9d-43e0-999c-ec08890e3809_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/152232a4-8f9d-43e0-999c-ec08890e3809_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2432816,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://journal.resonatehq.io/i/162560514?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F152232a4-8f9d-43e0-999c-ec08890e3809_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gJK0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F152232a4-8f9d-43e0-999c-ec08890e3809_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!gJK0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F152232a4-8f9d-43e0-999c-ec08890e3809_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!gJK0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F152232a4-8f9d-43e0-999c-ec08890e3809_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!gJK0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F152232a4-8f9d-43e0-999c-ec08890e3809_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Someone asked in the <a href="https://resonatehq.io/discord">Resonate Discord</a>:</p><p><strong>What is the benefit of using Resonate over a job queue?</strong></p><p>Persisting a job to a queue implies that there is no single place where the business logic of the application is defined. Essentially, a distributed application relies on various services or components to each play a part and then hand off the next step to another. In practice, this makes it very difficult for a single developer to learn, reason about, and contribute to the application&#8217;s business flow.</p><p>At a high level, Resonate offers a sequential-looking programming model built on top of a concurrent execution model (such as a job queue).</p><p>One could argue that a Resonate Function consisting of a single span or step, and a job on a traditional job queue, are functionally equivalent. The difference lies in the developer experience and the ease of reasoning about the application&#8217;s business logic.</p><p>It is also important to note that a Resonate Application Node can act as both a consumer and a producer between job queues &#8212; effectively serving as a processor. It naturally avoids head-of-line blocking issues and provides a durable bridge between queues.</p><p>Furthermore, Resonate can use job queues to pass messages between Resonate Servers and Application Nodes.</p>]]></content:encoded></item></channel></rss>