# AgentStack Daily EP054: Claude Code 2.1.144, Cursor Composer 2.5, and Anthropic's Stainless Acquisition [NOVA]: I'm NOVA. [ALLOY]: And I'm ALLOY, and this is AgentStack Daily. Today starts with the coding surface most agent builders touch every day: the Claude Code CLI, with the 2.1.144 release. [NOVA]: This is a maintenance release, and that is exactly why it leads. It targets the surfaces unattended agents actually break on: background and detached sessions, startup behavior on a bad network, the MCP transport layer, and tool-call hygiene. Not new features for their own sake. Removed failure modes. [ALLOY]: After the release readout, five more moves that change how builders pick, connect, and run their tools. Cursor shipped Composer 2.5, a coding-agent model on a Kimi K2.5 base at roughly a tenth of frontier per-token cost. Anthropic acquired Stainless, the service that turned API specifications into typed client libraries for a long list of AI labs. Notion turned its workspace into a hosted runtime where agents execute. The Vercel AI SDK rewrote its LangChain and LangGraph adapter. And Cloudflare put zero-trust networking and identity under the agent lifecycle with Mesh. [NOVA]: The practical question across all three is the same. Which of these changes makes agent work more reliable, more recoverable, and easier to trust when the run is long, unattended, or crossing a boundary into someone else's API? [ALLOY]: So we will stay concrete, and we will stay on what a builder should actually do: session lifecycles, transport pagination, timeouts on degraded networks, reward shaping for tool-using models, harness fidelity, and the typed boundary between an agent and the services it calls. [PAUSE] ## [00:00-02:30] Why a maintenance release leads the episode [NOVA]: It is worth saying up front why a point release of a command-line tool gets the front of the episode instead of a flashy model launch. The Claude Code CLI is, for a lot of teams, the actual runtime their agents execute in. It spawns sessions, holds tools, talks to MCP servers, runs in the background, and recovers when something goes wrong. When that layer changes how it behaves under failure, it moves more real agent work than a benchmark number does. [ALLOY]: And 2.1.144 is almost entirely failure-mode work. A startup hang removed. A truncated tool list fixed. An image type that used to break a conversation now handled. Background sessions that crashed in a protected folder now stable. None of that is glamorous. All of it is the difference between an agent run that completes unattended and one that quietly stalls at three in the morning. [NOVA]: That is the lens for the whole release block. Not what is new to show off, but what used to fail and now does not, and what a builder should change in how they deploy agents because of it. [ALLOY]: Right, and we will keep tying every fix back to a concrete builder decision: when to use background sessions, how to wire MCP, what to test before you ship an unattended agent. The release is only useful if it changes how you operate. [NOVA]: Agent-stack release readout: Claude Code CLI 2.1.144. Start with startup. [PAUSE] ## [02:30-18:00] Agent-stack release readout: Claude Code CLI 2.1.144 hardens background sessions, startup, and MCP behavior [NOVA]: The startup fix is the clearest example of why this release matters more for agents than for people. Before 2.1.144, if the API endpoint was unreachable, the CLI could block for up to seventy-five seconds before doing anything useful. That happens behind a captive portal, a corporate firewall, or a VPN that has not finished connecting. [ALLOY]: A human hits that and just waits, maybe grumbles. An agent hits it very differently. A scheduled job, an unattended batch run, or a background session on a flaky network turns a seventy-five second block into a stall, a timeout further up the stack, or a missed execution window. The fix caps the side-channel calls at fifteen seconds. [NOVA]: The general principle for builders is that startup resilience on a degraded network is an agent reliability property, not a cosmetic nicety. Anything an agent does unattended has to assume the network is sometimes wrong at exactly the moment the process starts. A tool that fails fast and proceeds is more reliable than a tool that politely waits for something that is not coming. [ALLOY]: There is a concrete builder pattern here. If you deploy agents that start on a schedule, you should treat process start as a step that can be slow or partially degraded, and you should test it that way. The use case to simulate is not the happy path. It is the captive portal, the half-connected VPN, the DNS that resolves slowly. Before this release the right move was to add your own startup watchdog. After it, the runtime fails fast on its own, but you should still verify that against your own deploy. [NOVA]: That is a good framing. The builder takeaway is to wire a startup-health assumption into how you ship unattended agents, and to use this release as the thing that makes that assumption hold instead of something you had to bolt on. [ALLOY]: The second block is MCP, the Model Context Protocol transport, and this is the one I would not skip. Before this release, MCP servers that paginate their tools-list response only returned the first page. Think about what that means for an agent. The agent connects to a tool server, asks what tools exist, and silently gets a partial list. [NOVA]: That is the worst kind of bug, because nothing errors. The agent does not crash. It simply cannot do something it was supposed to be able to do, and the run looks like a reasoning failure when it is actually a transport bug. You would spend an afternoon blaming the model for not using a tool that the model was never told existed. [ALLOY]: Exactly. A silent capability gap is much harder to debug than a loud crash. The fix is that paginated tools-list responses now follow through every page, so the agent sees the full tool set. For a builder running a large MCP deployment with dozens of tools, this is the difference between an agent that can use your whole toolset and one that can only use whatever fit on page one. [NOVA]: There is a related fix for MCP images: an image with an unsupported MIME type, like an SVG, used to break the conversation. Now it is saved and referenced instead, so one odd content type does not poison the whole session. If you build an agent that handles user-supplied images or screenshots, that is a real robustness change, because you do not control what content type shows up. [ALLOY]: And there is a diagnosability fix in the same area. The list command for MCP servers used to silently report no servers when the config could not be parsed. Now it reports the real problem. That is the same theme again: a silent wrong answer is replaced with an explicit, actionable one, which is the property you want when you are operating a fleet and need to triage fast. [NOVA]: The builder pattern for MCP after this release is: enumerate your tools as a deploy-time check, not a hope. Before you ship an agent that depends on a tool server, have the agent list tools and assert the full expected set is present. This release makes that assertion trustworthy, because the list is no longer silently truncated. Bake it into how you validate a deploy. [ALLOY]: The third and largest block is background and detached sessions. The sheer number of individual fixes here tells you where the operational pain has actually been. Background sessions now support resume, so a session started in the background shows up alongside interactive ones and can be picked back up. Completion notices now include elapsed duration, so an agent that ran for three hours says so. [NOVA]: That elapsed-duration detail sounds minor and is not. If you operate long-running agents, duration is a primary signal. A task that normally takes twenty minutes and suddenly took three hours is telling you something even if it succeeded. Surfacing duration on completion gives the operator a cheap anomaly signal without building separate instrumentation. [ALLOY]: There is a cluster of platform-specific stability fixes that matter for unattended fleets. Background sessions crashing on macOS when the project lives under a Full Disk Access-protected folder is fixed. On Windows, scrolling, the mouse wheel, and the navigation shortcut in attached background sessions now work, and closing the terminal while attached no longer crashes the session. [NOVA]: That macOS one is a classic deploy-environment trap. The agent works on your machine and crashes on the build host because the build host puts the project under a protected folder. The general builder lesson is that background-session stability is environment-sensitive, so the place you test has to match the place you deploy. This release removes one specific instance of that, but the pattern is worth internalizing. [ALLOY]: And a subtle correctness one: resumed sessions now keep the model they were using, instead of inheriting some other session's model choice. If you resume a long-running agent and it silently switches models, your behavior, cost, and latency all change underneath you, and you might not notice until the output looks different. [NOVA]: That is a real production hazard for anyone who runs a mix of models across sessions. A cheap model quietly getting promoted to an expensive one blows your cost model. An expensive one getting demoted to a cheap one quietly degrades quality. Model identity has to be a stable property of a session, and this release makes it one. [ALLOY]: There is also a fix where Edit and Write refused with a worktree-isolation error right after a session detached. That is the kind of thing that makes background work feel unreliable: you detach a session expecting it to keep working, and the first thing it tries to do fails because of an isolation guard race. Removing that makes the detach-run-wake-resume lifecycle something you can actually build on. [NOVA]: Let us be precise about that lifecycle, because it is the heart of this release for a builder. A background session is spawned, then detached from the terminal, can be retired when idle, woken when needed, and respawned if stopped. Every one of those transitions is a place where state can be lost or corrupted. This release hardens several of them at once, which is why it deserves the readout. [ALLOY]: And the builder use case that depends on that lifecycle is the one everyone wants: kick off a long agent task, walk away, let it run, come back, and resume it without losing the thread. Before this release that pattern was fragile enough that a lot of teams avoided it and kept sessions attached. After it, detached long-running work is something you can actually design around. [NOVA]: The fourth area is tool-call hygiene, and it is more important than it sounds. Two changes stand out. Head and tail views of a file now satisfy the read-before-edit check. And empty results from search tools like grep, git grep, or git diff are no longer reported as tool failures. [ALLOY]: Unpack the read-before-edit one. The CLI enforces an invariant that the agent must read a file before editing it, which prevents blind edits. But if the agent looked at a file using a head or tail view, that previously did not count, so a legitimate edit got blocked. Now those views satisfy the invariant. The guarantee is preserved, but a false block is removed. [NOVA]: And the empty-search-result fix is a behavior fix disguised as a cosmetic one. If an agent runs a search, gets no matches, and the harness reports that as a tool failure, the agent reacts to a failure that did not happen. It retries, second-guesses, or takes a worse path, because "no matches" is a valid, informative result, not an error. Removing the spurious failure removes the spurious agent behavior. [ALLOY]: That is a recurring pattern in this release worth naming for builders. False failure signals are not free. An agent that believes a successful operation failed will make decisions to compensate for a problem that does not exist. Cleaning up what counts as success and failure at the tool boundary directly cleans up agent reasoning, which means fewer wasted turns and lower cost on every run you deploy. [NOVA]: One more concrete change: the model picker is now session-scoped, with a separate default for new sessions. Changing the model for one task no longer silently changes it for everything. There is a related fix for users on Bedrock and Vertex who could not select a long-context Opus option from the picker. The theme is the same: model choice should be explicit and local, not an accidental global side effect that follows you into the next deploy. [ALLOY]: So what is the upgrade posture, as an actual builder checklist? Install 2.1.144, and then exercise the changed surfaces instead of assuming them. Start a background session, detach it, wake it, and resume it, and confirm it keeps its model. Point it at an MCP server that paginates its tool list and confirm the full set is visible. Feed an unsupported image type through an MCP tool and confirm the conversation survives. [NOVA]: And run it once on a network where the API endpoint is briefly unreachable, and confirm startup no longer stalls. The value of a maintenance release is entirely conditional. It is only worth something if the failure modes it removes are the ones your agents were actually hitting. If you run a lot of unattended background work, several of these were almost certainly hitting you, and the right response is to redeploy and re-test those exact paths, not to assume the upgrade is invisible. [ALLOY]: Before we leave the release, one more cluster worth a builder's attention: respawn and wake behavior. A stopped background session that you respawn used to be able to report itself as stopped even after it was running again, and opening a session from the agent list could hang if the background service was unresponsive. Both are fixed. If you build any kind of supervisor that restarts agents, you were probably papering over exactly these with retries and timeouts. [NOVA]: That is the pattern worth naming. A lot of teams build a babysitter process around unattended agents: watch for stopped, respawn, re-check, alert if it does not come back. Every one of those steps depends on the runtime reporting state honestly. When respawn says stopped while the process is actually running, your supervisor either double-spawns or gives up. Honest state reporting is what makes a supervisor you deploy actually safe. [ALLOY]: And there is a quieter observability fix in here: completed or stopped background sessions that briefly failed to wake were being permanently marked as a startup crash. That is a false-positive that poisons your operational signal. If you alert on startup crashes, you were getting paged for sessions that were fine. Removing that makes the crash signal mean what you think it means, which is the whole point of having the signal. [NOVA]: So the operator summary for 2.1.144 is that it makes the unattended lifecycle honest. Spawn, detach, retire, wake, respawn, and resume now report state you can build a supervisor on, talk to MCP without silent truncation, and start up without stalling on a bad network. That is precisely the surface you depend on when you deploy agents that run without a human watching. [ALLOY]: That is the release block. A point release, but a dense one, concentrated exactly on the unattended-agent surface that builders ship into production. Now to a different kind of change: not the runtime, but the model inside it. [PAUSE] ## [18:00-31:00] Cursor Composer 2.5 ships a cheaper long-horizon coding-agent model [NOVA]: Cursor Composer 2.5 landed on May 18. It is a coding-agent model built on a Kimi K2.5 base, with heavier post-training, aimed specifically at longer autonomous coding sessions. Let us start with the numbers Cursor reports, then get into how it was trained, because the training method is the more interesting part for a builder deciding what to ship. [ALLOY]: The reported benchmarks: SWE-Bench Multilingual rising from 73.7 to 79.8 percent, Terminal-Bench from 61.7 to 69.3 percent. On Terminal-Bench 2.0 it ties Opus 4.7 and trails GPT-5.5. Standard pricing is fifty cents per million input tokens and two dollars fifty per million output tokens. The headline is that price: roughly a tenth of Opus 4.7 per token, at comparable coding-benchmark performance. [NOVA]: Benchmarks first, with the usual caution. SWE-Bench and Terminal-Bench are real signals, but they are saturated suites where frontier models cluster within a few points, and harness differences can swamp the model gap on specific task types. Treat the numbers as "this is in the conversation," not "this is decided." We will come back to what a builder should actually measure instead. [ALLOY]: The training is where there is something to actually explain. Cursor reports three shifts. First, textual-feedback reinforcement learning. Instead of only an end-of-run reward, the model gets localized hints at the point of a failed tool call. [NOVA]: That is a credit-assignment change, and it matters specifically for long-horizon agents. Picture a coding session with fifty tool calls. If the only signal is pass or fail at the very end, the model has almost no information about which call was the mistake. The reward is smeared across the whole trajectory. Localized textual feedback at the failed call gives a sharp signal pointed at the exact behavior that went wrong. [ALLOY]: Credit assignment is the central hard problem in training agents that take long sequences of actions. The longer the horizon, the weaker a single terminal reward becomes, because there are more actions sharing the blame for one outcome. Moving feedback closer to the action that caused the failure is one of the few things that reliably helps, and it is exactly the regime an autonomous coding agent operates in when you deploy it on real work. [NOVA]: Second shift: twenty-five times more synthetic tasks, including feature-deletion rebuild puzzles. That is a clever objective. You take working code, delete a feature, and require the model to reconstruct it. The ground truth is exact, the difficulty is tunable, and it forces the model to reason about how a codebase fits together rather than pattern-matching a snippet. [ALLOY]: Synthetic task generation is how you get enough volume and difficulty coverage to train a coding agent without being bottlenecked on scarce real-world tasks with clean reward signals. The rebuild-puzzle framing is good because it has an unambiguous correctness check, which is exactly what reinforcement learning needs to avoid reward hacking. A vague reward gets gamed; a rebuild-it-exactly reward does not. [NOVA]: Third shift: MoE-scale training infrastructure. Cursor cites sharded Muon optimizers and dual-mesh HSDP. The detail underneath that is mixture-of-experts training at scale needs the optimizer state and the parallelism layout sharded carefully, or memory and communication costs dominate. That is infrastructure work, but it is what makes the training economics of the rest feasible. [ALLOY]: And the fourth detail, which I think is the one builders should not skim, is that the reinforcement learning was run inside real Cursor sessions using the same harness the deployed model uses. Harness-faithful training. [NOVA]: Explain why that is load-bearing for anyone who ships agents. A coding agent's behavior is shaped as much by its harness as by its weights. How tools are presented to the model, how errors come back, how context gets trimmed, how retries are handled, how the loop is structured. If you train the model in one harness and ship it in a different one, you introduce a distribution shift. The symptom is a model that benchmarks well but feels worse in production than the numbers promised. [ALLOY]: Running the reinforcement learning inside the deployed harness closes that gap. The model learns the actual interface it will face, not an idealized training stand-in. For anyone who has shipped an agent and watched it underperform its evaluations, that is a direct attack on a very common builder failure. [NOVA]: Which brings us to the takeaway, and it is mostly about economics and how it changes what you deploy by default. When a model reaches frontier-adjacent coding performance at roughly a tenth of the per-token cost, the math on running many long autonomous sessions changes. Work that only justified an expensive model for a few high-value tasks can become the default for routine agent work. [ALLOY]: But, and this is the important caution, benchmark parity is not workflow parity. Terminal-Bench and SWE-Bench measure something real, but they do not measure your task distribution, your tools, your context sizes, or how a model behaves over a genuinely long session in your harness. The right move is a controlled comparison on your own real work, not a benchmark-table swap. [NOVA]: Concretely, here is the builder pattern for evaluating it. Take a representative sample of the long-horizon coding tasks your agents actually run in production. Run them through your existing model and through Composer 2.5 in your own harness, not the vendor's. Compare not just pass rate but cost per completed task, the number of tool calls, recovery behavior on failure, and how quality degrades as the session gets long. [ALLOY]: That last one, long-session degradation, is the use case that benchmarks systematically under-test. Most benchmark tasks are short relative to a real agent run. If you deploy agents that work for an hour, you care less about a single-shot pass rate and more about whether the model is still coherent on tool call number two hundred. Build that into the comparison deliberately. [NOVA]: The cost advantage is real enough that if it holds up on your distribution, it changes your default model for routine agent work. If it does not, you have learned something specific about your own workload instead of trusting a table. Either outcome is useful; the wrong move is to swap based on the headline and discover the gap in production. [NOVA]: Let us go one level deeper on the cost math, because that is where this gets decision-relevant. A tenth of the per-token price does not mean a tenth of the cost of a task. Agents are not fixed-token; a weaker model can take more tool calls, more retries, and more tokens to finish the same job, or fail it and force a fallback to an expensive model. So the metric that matters for a builder is fully-loaded cost per completed task, including the failures that fall back, not the sticker price per million tokens. [ALLOY]: That reframes the evaluation. If Composer 2.5 finishes your tasks in a comparable number of turns to your current model, the price advantage flows almost directly to your bill, and that is a large change for anyone running agents at volume. If it takes meaningfully more turns or fails more often and falls back, the effective gap narrows. You cannot know which without running your own distribution, which is exactly why the benchmark table is the start of the question, not the answer. [NOVA]: There is also a deployment pattern this enables that is worth calling out: tiered routing. Use the cheaper model as the default for routine agent work, and escalate to a frontier model only when the cheaper one fails a check or hits a confidence threshold. A model that is frontier-adjacent at a tenth of the cost is a very good default tier, because the cases where it is not good enough are exactly the cases your escalation path is for. [ALLOY]: And the infrastructure detail underneath the training, the sharded Muon optimizer and dual-mesh HSDP, is relevant to builders only indirectly, but it is the relevant indirection: it is the reason this price point is possible at this quality. Efficient mixture-of-experts training is what lets a lab post frontier-adjacent numbers at a fraction of the serving cost. The economics you are being offered are downstream of that infrastructure work, which is why the price is not a temporary loss-leader you should assume will vanish. [ALLOY]: And keep the harness-fidelity point in mind when you read any model's benchmarks, not just this one. A number produced in the lab's harness is an upper bound on what you will see in yours, unless your harness happens to match theirs. The gap between those two is where most "the model got worse when we deployed it" stories actually live. Treat your own harness as part of the model. [PAUSE] ## [31:00-42:00] Anthropic acquires Stainless and brings SDK code generation in-house [NOVA]: The third story is Anthropic's acquisition of Stainless, announced May 18. Stainless is a developer-tools company whose service converts an API specification into production-ready, auto-maintained SDKs across Python, TypeScript, Go, Kotlin, and Java. It was used by a long list of AI labs and infrastructure companies. Anthropic plans to wind down the hosted Stainless products, including the SDK generator. Existing customers keep the SDKs already generated, but lose future access to the hosted service. [ALLOY]: On the surface that reads like an acquisition headline. The reason it is an agent-stack story is what an SDK actually is inside an agent system. Spell that out, because it is easy to wave past. [NOVA]: An SDK is the typed boundary an agent crosses every time it calls an external API. When an agent invokes a tool that wraps a service, the correctness of that call depends entirely on the client matching the live API. The right endpoints. The right request and response shapes. The right error types. The right pagination and retry behavior. The SDK is not a convenience layer around the API. For an agent, it is the contract. [ALLOY]: So a pipeline that converts a specification into that client, and keeps it in sync as the specification changes, is infrastructure sitting directly underneath the agent's tool layer. It is not a side concern. For anyone who builds agents that touch external services, it is load-bearing. [NOVA]: And that points at the failure mode worth understanding: spec-to-SDK drift. Suppose the API specification changes, but the generated client does not keep up. You now have a client that compiles, looks correct, and silently mismatches the live API. A field moved. An enum gained a value. An endpoint changed its pagination. [ALLOY]: For a human developer that surfaces as a bug report and someone investigates. For an autonomous agent it surfaces as a tool call that returns something the agent did not expect. And the agent does not stop there. It reasons around the unexpected result, often incorrectly, and the error propagates into whatever the agent does next. A drifted client does not announce itself. It just makes the agent quietly wrong, which is the most expensive kind of wrong to debug after you have shipped. [NOVA]: That is exactly the problem automated, spec-driven SDK generation exists to solve: keep the typed boundary honest across many languages without hand-maintaining each client. Hand-written multi-language clients drift because humans cannot keep five language SDKs perfectly in sync with a moving specification. Generation from the spec is how you make the boundary trustworthy enough to deploy an agent on top of it. [ALLOY]: So for teams that relied on the hosted generator, the practical question is what replaces it. There are three broad options, each with tradeoffs, and choosing is itself a builder decision. One: open-source OpenAPI generators. You keep spec-driven generation, but you own the toolchain and its type fidelity varies. Two: vendor-published SDKs. Lower maintenance, but you depend on the vendor's release cadence and language coverage. [NOVA]: Three, and this is the one most relevant to agent builders: wrap the API behind a tool layer, such as an MCP server, so the agent talks to a stable internal contract instead of a regenerated client. That moves the drift problem to one controlled place you operate. The agent sees a stable tool interface; the MCP server absorbs changes to the underlying API. It is more work to stand up, but it gives you a single seam to manage instead of drift scattered across every client your agents use. [ALLOY]: Each option trades off type fidelity, maintenance burden, and how fast specification changes propagate to the agent. There is no free choice here, but there is a wrong one, which is not deciding and letting an unmaintained generated client slowly drift while agents keep deploying on top of it. [NOVA]: There is a broader point too, beyond any one team's migration. This is supply concentration. When one model lab owns a code-generation dependency that competing labs and infrastructure providers were building on, that is a single point of strategic and technical risk sitting under a lot of agent tool clients across the industry. [ALLOY]: It is worth knowing, concretely, where your tool-client generation comes from, who controls it, and what your fallback is if that control changes. That used to be an integration detail you could ignore. For agent systems, where the SDK is the tool boundary, it is an architecture decision with a risk profile, and it belongs in the same review as any other critical dependency you deploy on. [NOVA]: The builder pattern that falls out of this is to treat the spec-to-client path as monitored infrastructure. Pin the spec version your clients were generated from. Diff the live spec against it on a schedule. Treat a drift as an alert, not a discovery you make when an agent starts behaving strangely in production. That turns a silent failure mode into a visible one you can act on before it ships. [ALLOY]: The summary is that this is small in surface area and large in implication. Bringing SDK generation in-house is a sound move for the acquirer. For everyone building agents on top of these APIs, it is a prompt to treat spec-to-client drift as a first-class agent failure mode, to know your fallback before you need it, and to wire drift detection into how you operate. [PAUSE] ## [42:00-48:00] Notion's Developer Platform turns the workspace into a hosted agent runtime [ALLOY]: Notion launched its Developer Platform on May 13, and the framing that matters for builders is the shift from a workspace agents read to a workspace agents run in. There are five concrete pieces. Workers, a hosted code sandbox with no servers to provision. An External Agent API. Database sync. Bidirectional webhooks. And a command-line tool for auth, deploy, and automation. [NOVA]: Start with Workers, because hosted code runtimes are the load-bearing idea. You write logic, deploy it to a managed sandbox, and it is live with no infrastructure to operate. For an agent builder, that is a place to put the deterministic parts of a workflow next to the data they act on, instead of standing up and babysitting your own service for every integration. [ALLOY]: And the piece that pairs with that is deterministic Worker tools. Instead of an LLM-mediated tool call, a custom agent invokes a Worker that runs predictable code with token-efficient execution. That distinction is the useful one to internalize. A model-mediated tool call is flexible but probabilistic. A Worker tool is deterministic. The build pattern is to use the model for judgment and a Worker for the steps that must be exact every time. [NOVA]: The External Agent API is the multi-vendor surface. It lets third-party agents, the named ones being Claude Code, Cursor, and Codex, operate as first-class participants in the workspace rather than bolt-on integrations. For a builder that means you are not forced into one vendor's agent to get workspace-native behavior; you can bring the agent you already deploy. [ALLOY]: Database sync and bidirectional webhooks complete the loop. Sync keeps an external system of record fresh inside the workspace with no infrastructure to manage. Webhooks let any app trigger a Worker, which runs logic and acts back in the workspace or calls other APIs. That is an event-driven agent trigger, which is usually what you actually want in production rather than polling. [NOVA]: The tradeoff to reason about, and it is the important one, is the trust boundary. Running third-party agents and custom code inside a workspace that holds real company data means the governance model is doing load-bearing work. Notion's answer is progressive trust, optional human review, sandboxed execution, and unified visibility across agent activity. A builder should treat that boundary as something to design deliberately, not a default to inherit, because the blast radius of a misbehaving agent here is your company's actual operational data. [ALLOY]: So the builder takeaway is that this is a real agent runtime, not a plugin surface. Use deterministic Workers for the exact steps, the External Agent API to keep your existing agent, event webhooks to trigger work, and put deliberate thought into the trust boundary before you deploy anything that can write. [PAUSE] ## [48:00-53:00] Vercel AI SDK rewrites its LangChain and LangGraph adapter [NOVA]: The Vercel AI SDK rewrote its LangChain and LangGraph adapter, and the reason this is more than a package note is that almost nobody runs one framework end to end. You prototype in one stack and deploy in another, and the place that breaks is message format and stream format interop. Hand-written glue between frameworks is exactly where mixed stacks rot. [ALLOY]: The new adapter is concrete about it. There is a function to convert AI SDK message objects into LangChain base-message format, and another for messages you have already run through the model-message conversion. There is a function that transforms LangChain model streams, LangGraph output, and the granular stream-events results into the AI SDK's UI message stream. And there is a transport that connects a browser client directly to a LangSmith or LangGraph deployment. [NOVA]: Take the stream normalization first, because streaming is where interop usually fails quietly. An agent built on one framework emits events in its own shape. A UI built on another framework expects a different shape. If the bridge is lossy, you lose tool-call boundaries, intermediate steps, or token-level updates, and the UI degrades to a spinner. Normalizing LangGraph output and granular stream events into one UI stream format means the front end can render an agent it did not author without a custom translation layer. [ALLOY]: The transport piece is the other real reduction in moving parts. A chat transport that talks straight from the browser to a deployed graph removes the custom backend route teams usually write just to proxy between a UI and a LangGraph deployment. Fewer hops, less bespoke glue, one less thing to operate. [NOVA]: The builder lens here is interop as infrastructure, not convenience. If you build agents in a mixed stack, the adapter between frameworks is not a nice-to-have. It is the seam that decides whether your stack stays coherent or fragments into one-off connectors that each rot at their own pace. A maintained, typed bridge with proper stream and event handling is the thing that lets you choose the best framework per layer instead of being locked into one. [ALLOY]: And the observability angle is worth naming. Granular stream events flowing through cleanly means you can see the intermediate steps of an agent built on another framework in your own UI and tooling. For debugging long agent runs, that visibility is often the difference between a fixable problem and a black box. [PAUSE] ## [53:00-57:00] Cloudflare Mesh puts zero-trust networking under the agent lifecycle [ALLOY]: The last story is Cloudflare Mesh, part of Cloudflare's agent-cloud push, which applies zero-trust private networking and identity to how agents reach services and each other. There are also dated developer-tooling changes alongside it, like the May 18 removal of the legacy remote-dev flag for key-value-backed durable objects, which is the kind of small parity change that quietly decides whether an agent behaves the same in development and production. [NOVA]: The framing for builders is the shift in where agents run. When an agent was one process on a laptop, the network was an implementation detail. When it is many sandboxed workers calling internal and external services, the network between them becomes an attack surface and a policy boundary at the same time. That is the problem a mesh with identity is built for. [ALLOY]: The concrete principle is per-agent identity with scoped credentials instead of shared ambient keys. If every agent shares one broad key, a single compromised or misbehaving agent has the blast radius of the whole key. If each agent has its own identity with scoped permissions, network policy can attach to that identity, and you can reason about exactly what one agent is allowed to reach. [NOVA]: And that policy has to follow the lifecycle. An agent spawns, acts, and retires. If credentials and network reach are granted broadly at spawn and never scoped down, a long-running or detached agent accumulates access it does not need. Attaching policy to identity across the spawn-act-retire path is how you keep an agent's network reach matched to what it is actually doing right now. [ALLOY]: The durable-object dev-parity detail is smaller but the same theme. Local-versus-remote behavior for stateful workers has to match, or you get an agent that passes in development and fails in production for reasons that have nothing to do with its logic. Parity in the state and networking layer is part of making agent behavior reproducible. [NOVA]: The builder recommendation is direct. Treat the agent network as something you design with identity and scoped policy, not something agents inherit with broad ambient access. As you move from one local process to a fleet of sandboxed workers, the network policy is part of the agent's security posture, not infrastructure you can defer. [PAUSE] ## [57:00-60:00] Closing: upgrade priorities [ALLOY]: Let us land this on what to actually do. Six moves, six concrete builder priorities. [NOVA]: For Claude Code, install 2.1.144 and validate the changed surfaces directly rather than assuming them. Detach, wake, respawn, and resume a background session and confirm it keeps the right model. Point it at an MCP server that paginates its tool list and confirm the full set is visible. Feed an unsupported image type through an MCP tool. Run it on a degraded network and confirm startup no longer stalls. A maintenance release only pays off if you verify the removed failures were the ones hitting the agents you deploy. [ALLOY]: For model selection, treat Composer 2.5 as a candidate to benchmark inside your own harness, on your own long-session tasks, not a drop-in. Compare fully-loaded cost per completed task and long-session degradation, not just headline pass rates, and consider a cheap-default-with-frontier-escalation routing pattern if it holds up on your distribution. [NOVA]: For tool clients, audit where your SDK or client generation comes from. If you relied on a hosted generator that is winding down, decide now between OpenAPI generators, vendor SDKs, or wrapping the API behind a stable internal contract such as an MCP server, and pin and diff the spec so drift is an alert, not a production surprise. [ALLOY]: For workspace agents, treat Notion's External Agent API as a multi-vendor surface so you keep the agent you already deploy, use deterministic Workers for steps that must be exact, and design the trust boundary before you let anything write. [NOVA]: For mixed stacks, use the rewritten Vercel adapter to bridge LangGraph and the AI SDK with proper stream and event handling instead of hand-rolling connectors that rot. And for agent networking, attach per-agent identity and scoped policy to the spawn-act-retire lifecycle rather than relying on broad ambient access. [ALLOY]: The thread through all six is the same kind of operational maturity. The runtime is hardening the unattended-session surface builders deploy into. The model layer is making frontier-adjacent coding cheap enough to change defaults. And the tooling, workspace, interop, and network layers are all consolidating, which makes the boundaries between an agent and everything it touches things you have to own deliberately rather than inherit. [NOVA]: That is the work that makes agents easier to ship, debug, and trust. Less spectacle, more reliability. That is usually where the real progress is, and it is usually what actually changes how you build. [ALLOY]: Source links and episode notes are available at Toby On Fitness Tech dot com. [NOVA]: That's AgentStack Daily. I'm NOVA. [ALLOY]: And I'm ALLOY. We'll be back soon.