<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Kavin Kim</title>
    <description>The latest articles on DEV Community by Kavin Kim (@kavinkimcreator).</description>
    <link>https://dev.to/kavinkimcreator</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3813868%2F70b4f6fe-f78e-4055-a8fb-2350520089e2.jpg</url>
      <title>DEV Community: Kavin Kim</title>
      <link>https://dev.to/kavinkimcreator</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kavinkimcreator"/>
    <language>en</language>
    <item>
      <title>72% of Enterprises Think They Control Their AI. Ask Them What Their Agents Are Spending.</title>
      <dc:creator>Kavin Kim</dc:creator>
      <pubDate>Tue, 19 May 2026 06:04:02 +0000</pubDate>
      <link>https://dev.to/kavinkimcreator/72-of-enterprises-think-they-control-their-ai-ask-them-what-their-agents-are-spending-582c</link>
      <guid>https://dev.to/kavinkimcreator/72-of-enterprises-think-they-control-their-ai-ask-them-what-their-agents-are-spending-582c</guid>
      <description>&lt;p&gt;A VentureBeat survey of 40 enterprise organizations published in Q1 2026 found that 72% of enterprises believe they have meaningful control over their AI deployments. They have dashboards. They have policies. They have vendor contracts with safety clauses.&lt;/p&gt;

&lt;p&gt;Ask them one question and the illusion breaks: what did your AI agents spend this week?&lt;/p&gt;

&lt;p&gt;Silence.&lt;/p&gt;

&lt;p&gt;Enterprise AI governance in 2026 has a systematic blind spot. Everyone is watching what agents say, what data they access, which models they call. Nobody is watching what they spend. And in a world where agents are increasingly authorized to make purchases, call paid APIs, and process transactions, that blind spot is a financial risk that compounds quietly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Shadow AI Became Shadow Spending
&lt;/h2&gt;

&lt;p&gt;Retool's 2026 Build vs. Buy Shift report surveyed 817 professionals and found that 60% of enterprise builders had created AI tools and workflows without IT oversight. A quarter of them did this frequently.&lt;/p&gt;

&lt;p&gt;These tools were connected to production data. They were running automated workflows. They had API keys.&lt;/p&gt;

&lt;p&gt;Now consider: many of those same tools are calling external APIs. Some are calling paid APIs. Some are triggering purchases, processing invoices, or executing micro-transactions in automated pipelines.&lt;/p&gt;

&lt;p&gt;The governance layer that was supposed to audit these actions? It was never built for the payment surface.&lt;/p&gt;

&lt;p&gt;Mass General Brigham, with 90,000 employees, had to build a custom security layer on top of Microsoft Copilot because the platform's native governance could not account for the real-world workflows running on top of it. The same gap exists at nearly every enterprise running multiple AI platforms simultaneously.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Three Governance Failures
&lt;/h2&gt;

&lt;p&gt;When we map enterprise AI governance onto payment workflows, three failure modes emerge consistently.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Credential Sprawl
&lt;/h3&gt;

&lt;p&gt;An agent that calls OpenAI, Anthropic, a third-party data enrichment API, and a payment processor is using four separate credential chains. Each one has different scope, different expiry, different audit trail. The IT team sees none of it as a single coherent spend profile.&lt;/p&gt;

&lt;p&gt;Result: you cannot answer the question 'what did our AI cost us this month' with any accuracy.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Budget Without Enforcement
&lt;/h3&gt;

&lt;p&gt;Most enterprise AI budget controls exist at the procurement level. A team is allocated $10,000 for AI APIs. But at the agent execution level, there is no real-time enforcement. An agent can exceed the monthly budget in a day of unexpected behavior, and the budget owner finds out three weeks later on the invoice.&lt;/p&gt;

&lt;p&gt;Result: cost surprises that feel like infrastructure failures.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Audit Trail Gaps
&lt;/h3&gt;

&lt;p&gt;When something goes wrong and an agent made an unauthorized or erroneous payment, reconstructing what happened is extremely difficult. API logs exist in silos across different vendors. The agent's decision context is separate from the transaction record. Compliance teams cannot establish a clear chain of custody.&lt;/p&gt;

&lt;p&gt;Result: regulatory exposure that increases as agent autonomy increases.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Real-Time Payment Governance Looks Like
&lt;/h2&gt;

&lt;p&gt;The solution is not more dashboards. It is moving payment authorization infrastructure outside the agent layer entirely.&lt;/p&gt;

&lt;p&gt;When an agent's payment credentials are scoped at issuance, the governance problem changes shape. Instead of monitoring what agents are spending after the fact, you define what they are allowed to spend before execution begins.&lt;/p&gt;

&lt;p&gt;Here is what that looks like in practice with rosud-pay:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Issue a scoped payment credential for an agent&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;credential&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;rosud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;credentials&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;agentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;procurement-agent-prod&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;maxAmount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;dailyLimit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;allowedDomains&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;api.openai.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;api.anthropic.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;data.clearbit.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;requireApproval&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;above&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;expiresIn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;7d&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="c1"&gt;// Any attempt to pay outside the defined scope is rejected at infrastructure level&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The credential itself encodes governance. There is no separate monitoring system to build. The constraint is enforced at the infrastructure level, not the application level.&lt;/p&gt;

&lt;p&gt;This matters because of a core security principle: if your agent generates the payment authorization logic, it could also manipulate that logic. Governance must live in a layer the agent cannot modify.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing the Audit Trail Gap
&lt;/h2&gt;

&lt;p&gt;Real-time enforcement is one half of the problem. Auditability is the other.&lt;/p&gt;

&lt;p&gt;rosud-pay records every payment event with the agent identity, the credential scope, the transaction context, and a timestamp. This means that when compliance asks what happened, you have a structured record that maps AI decisions to financial outcomes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Query the spend audit trail for a specific agent&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;auditLog&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;rosud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;payments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;history&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;agentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;procurement-agent-prod&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2026-04-01&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2026-04-25&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;structured&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: totalSpend, currency, per-transaction records&lt;/span&gt;
&lt;span class="c1"&gt;// Each record maps: agentDecision -&amp;gt; vendor -&amp;gt; amount -&amp;gt; timestamp&lt;/span&gt;
&lt;span class="c1"&gt;// No manual reconciliation required&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the governance infrastructure that enterprise AI deployments are missing. Not a policy document. Not a vendor audit. A real-time, scoped, auditable payment layer that operates at the infrastructure level.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 72% Problem Is Actually a Measurement Problem
&lt;/h2&gt;

&lt;p&gt;The VentureBeat survey did not find that enterprises are reckless. It found that enterprises are measuring the wrong things. They count model calls. They track prompt costs. They monitor data access.&lt;/p&gt;

&lt;p&gt;They are not measuring the financial actions their agents are taking autonomously.&lt;/p&gt;

&lt;p&gt;As agent capabilities expand and autonomous spending becomes normalized, the governance frameworks that enterprises are building today will have systematic gaps where payment flows are concerned. The organizations that close that gap now will have a significant advantage when regulators begin requiring it.&lt;/p&gt;

&lt;p&gt;rosud-pay is the infrastructure layer that makes agent spending visible, constrained, and auditable. You can learn more at &lt;a href="https://www.rosud.com/rosud-pay" rel="noopener noreferrer"&gt;rosud.com/rosud-pay&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>payments</category>
      <category>security</category>
      <category>enterprise</category>
    </item>
    <item>
      <title>Why Agent Payment Authorization Cannot Come from the Agent Itself</title>
      <dc:creator>Kavin Kim</dc:creator>
      <pubDate>Tue, 19 May 2026 06:03:18 +0000</pubDate>
      <link>https://dev.to/kavinkimcreator/why-agent-payment-authorization-cannot-come-from-the-agent-itself-p86</link>
      <guid>https://dev.to/kavinkimcreator/why-agent-payment-authorization-cannot-come-from-the-agent-itself-p86</guid>
      <description>&lt;p&gt;There is a moment in security design when a single observation changes everything. NanoClaw 2.0 shipped recently with a capability that stops most developers cold: a gateway that intercepts API credentials before they reach the agent. The agent sees only a placeholder. The real key never touches the application layer.&lt;/p&gt;

&lt;p&gt;The founder explained the reason in one sentence: "If the agent generates the approval UI, it could swap the Accept and Reject buttons."&lt;/p&gt;

&lt;p&gt;Read that again. If the agent controls the authorization interface, the agent controls the authorization decision. The entire concept of checking with the agent before proceeding collapses when the agent is both the actor and the approver. This insight applies directly to payments. More directly than most developers realize.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Authorization Paradox
&lt;/h2&gt;

&lt;p&gt;When AI agents make payments through application-level controls, the execution flow looks like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Agent decides to make a payment&lt;/li&gt;
&lt;li&gt;Agent checks its own spending rules&lt;/li&gt;
&lt;li&gt;Agent approves or rejects&lt;/li&gt;
&lt;li&gt;Agent executes&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You have just asked the agent to audit itself. The guardrails live inside the same process that generated the intention to spend. This is not security. It is theater.&lt;/p&gt;

&lt;p&gt;Real-world consequences are not theoretical. In April 2026, a Meta internal agent posted to employee forums without authorization after misinterpreting a task. The action was irreversible until discovered. A bad post can be deleted. A bad payment cannot be reversed.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Infrastructure-Level Authorization Actually Means
&lt;/h2&gt;

&lt;p&gt;NanoClaw treats authorization as a layer that exists below the application. The agent cannot inspect or manipulate it. When the agent sends an action, the gateway intercepts, evaluates the policy, and either injects the real credential or rejects the request. The agent never touches the decision.&lt;/p&gt;

&lt;p&gt;The same architecture applies to payments in rosud-pay. Payment credentials are not stored in the agent. The agent holds a scoped token that defines what it can do: which merchants, what amounts, what frequency. When the agent initiates a payment, rosud-pay evaluates the token against the policy at the infrastructure layer. The agent's own logic is irrelevant to the authorization decision.&lt;/p&gt;

&lt;p&gt;Here is what that looks like in practice:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Agent receives a scoped payment token at deployment time&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;RosudAgent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;paymentToken&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ROSUD_SCOPED_TOKEN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="c1"&gt;// Token is pre-configured with: maxAmount, allowedMerchants, spendWindow&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Agent initiates payment -- authorization happens outside agent logic&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pay&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vendor-123&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;currency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;USDC&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;memo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;API call to data provider&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// If policy is violated, result.authorized === false&lt;/span&gt;
&lt;span class="c1"&gt;// Agent cannot override this&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;authorized&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Payment rejected by infrastructure policy:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// e.g. "exceeds spendWindow limit" or "merchant not in allowList"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent never sees the underlying USDC wallet. It never accesses the cryptographic signing keys. It cannot construct a payment outside the defined scope. Even if the agent's reasoning is compromised by a prompt injection attack, the payment rail does not move.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Payments Are Harder Than API Access
&lt;/h2&gt;

&lt;p&gt;NanoClaw's design protects API credentials. rosud-pay protects something harder: real monetary value on-chain.&lt;/p&gt;

&lt;p&gt;When an agent calls an API incorrectly, you get a failed request. You retry. You fix the logic. The cost is latency and compute. When an agent executes an unauthorized payment, you have moved USDC from one wallet to another. Stablecoin transactions on Base are final. There is no chargeback, no dispute window, no fraud team to call.&lt;/p&gt;

&lt;p&gt;The enterprise is beginning to understand this. Retool's 2026 developer survey found that 60% of enterprise AI tools were deployed without IT oversight. Shadow IT became shadow AI. The next step in that progression is shadow payment: agents making financial decisions that no human approved, in systems that no audit trail covers.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Pattern That Actually Works
&lt;/h2&gt;

&lt;p&gt;The architecture is straightforward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Payment authorization lives at the infrastructure layer, not in the agent&lt;/li&gt;
&lt;li&gt;Agents receive scoped tokens with defined limits (merchant, amount, time window)&lt;/li&gt;
&lt;li&gt;Every payment attempt logs to an immutable audit trail before execution&lt;/li&gt;
&lt;li&gt;Limits are enforced cryptographically, not by trusting the agent's self-reported behavior
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Define the token scope at deployment, not at runtime&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;scopedToken&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;rosud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createAgentToken&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;agentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;procurement-agent-v2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;policy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;maxSinglePayment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="c1"&gt;// USDC&lt;/span&gt;
    &lt;span class="na"&gt;dailySpendLimit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="c1"&gt;// USDC&lt;/span&gt;
    &lt;span class="na"&gt;allowedMerchants&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;data-provider-a&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;api-service-b&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;expiresIn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;7d&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Deploy agent with token -- agent never sees the private key&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;deployAgent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;paymentToken&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;scopedToken&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// All payment attempts log automatically before execution&lt;/span&gt;
&lt;span class="c1"&gt;// Violations are rejected at infrastructure level&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is not about distrusting your agents. It is about recognizing that an agent's authorization boundary should be established at deployment time, not derived from the agent's in-context judgment.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Line That Should Not Move
&lt;/h2&gt;

&lt;p&gt;NanoClaw proved the principle for API access. rosud-pay applies it where the stakes are highest: the moment an autonomous agent moves money.&lt;/p&gt;

&lt;p&gt;The rule is simple. An agent should never be the entity deciding whether the agent should pay. That decision belongs at a layer the agent cannot reach. The architecture for that layer already exists.&lt;/p&gt;

&lt;p&gt;If you are building autonomous agents that handle real transactions, rosud-pay is the infrastructure-level payment authorization layer your agents need. The docs are at &lt;a href="https://www.rosud.com/docs" rel="noopener noreferrer"&gt;rosud.com/docs&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>payments</category>
      <category>security</category>
      <category>javascript</category>
    </item>
    <item>
      <title>72% of Enterprises Think They Control Their AI. Ask Them What Their Agents Are Spending.</title>
      <dc:creator>Kavin Kim</dc:creator>
      <pubDate>Tue, 19 May 2026 04:35:45 +0000</pubDate>
      <link>https://dev.to/kavinkimcreator/72-of-enterprises-think-they-control-their-ai-ask-them-what-their-agents-are-spending-5bcm</link>
      <guid>https://dev.to/kavinkimcreator/72-of-enterprises-think-they-control-their-ai-ask-them-what-their-agents-are-spending-5bcm</guid>
      <description>&lt;p&gt;A VentureBeat survey of 40 enterprise organizations published in Q1 2026 found that 72% of enterprises believe they have meaningful control over their AI deployments. They have dashboards. They have policies. They have vendor contracts with safety clauses.&lt;/p&gt;

&lt;p&gt;Ask them one question and the illusion breaks: what did your AI agents spend this week?&lt;/p&gt;

&lt;p&gt;Silence.&lt;/p&gt;

&lt;p&gt;Enterprise AI governance in 2026 has a systematic blind spot. Everyone is watching what agents say, what data they access, which models they call. Nobody is watching what they spend. And in a world where agents are increasingly authorized to make purchases, call paid APIs, and process transactions, that blind spot is a financial risk that compounds quietly.&lt;/p&gt;

&lt;p&gt;Shadow AI Became Shadow Spending&lt;/p&gt;

&lt;p&gt;Retool's 2026 Build vs. Buy Shift report surveyed 817 professionals and found that 60% of enterprise builders had created AI tools and workflows without IT oversight. A quarter of them did this frequently.&lt;/p&gt;

&lt;p&gt;These tools were connected to production data. They were running automated workflows. They had API keys.&lt;/p&gt;

&lt;p&gt;Now consider: many of those same tools are calling external APIs. Some are calling paid APIs. Some are triggering purchases, processing invoices, or executing micro-transactions in automated pipelines.&lt;/p&gt;

&lt;p&gt;The governance layer that was supposed to audit these actions? It was never built for the payment surface.&lt;/p&gt;

&lt;p&gt;Mass General Brigham, with 90,000 employees, had to build a custom security layer on top of Microsoft Copilot because the platform's native governance could not account for the real-world workflows running on top of it. The same gap exists at nearly every enterprise running multiple AI platforms simultaneously.&lt;/p&gt;

&lt;p&gt;The Three Governance Failures&lt;/p&gt;

&lt;p&gt;When we map enterprise AI governance onto payment workflows, three failure modes emerge consistently.&lt;/p&gt;

&lt;h1&gt;
  
  
  1. Credential Sprawl
&lt;/h1&gt;

&lt;p&gt;An agent that calls OpenAI, Anthropic, a third-party data enrichment API, and a payment processor is using four separate credential chains. Each one has different scope, different expiry, different audit trail. The IT team sees none of it as a single coherent spend profile.&lt;/p&gt;

&lt;p&gt;Result: you cannot answer the question 'what did our AI cost us this month' with any accuracy.&lt;/p&gt;

&lt;h1&gt;
  
  
  2. Budget Without Enforcement
&lt;/h1&gt;

&lt;p&gt;Most enterprise AI budget controls exist at the procurement level. A team is allocated $10,000 for AI APIs. But at the agent execution level, there is no real-time enforcement. An agent can exceed the monthly budget in a day of unexpected behavior, and the budget owner finds out three weeks later on the invoice.&lt;/p&gt;

&lt;p&gt;Result: cost surprises that feel like infrastructure failures.&lt;/p&gt;

&lt;h1&gt;
  
  
  3. Audit Trail Gaps
&lt;/h1&gt;

&lt;p&gt;When something goes wrong and an agent made an unauthorized or erroneous payment, reconstructing what happened is extremely difficult. API logs exist in silos across different vendors. The agent's decision context is separate from the transaction record. Compliance teams cannot establish a clear chain of custody.&lt;/p&gt;

&lt;p&gt;Result: regulatory exposure that increases as agent autonomy increases.&lt;/p&gt;

&lt;p&gt;What Real-Time Payment Governance Looks Like&lt;/p&gt;

&lt;p&gt;The solution is not more dashboards. It is moving payment authorization infrastructure outside the agent layer entirely.&lt;/p&gt;

&lt;p&gt;When an agent's payment credentials are scoped at issuance, the governance problem changes shape. Instead of monitoring what agents are spending after the fact, you define what they are allowed to spend before execution begins.&lt;/p&gt;

&lt;p&gt;Here is what that looks like in practice with rosud-pay:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Issue a scoped payment credential for an agent&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;credential&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;rosud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;credentials&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;agentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;procurement-agent-prod&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;maxAmount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;dailyLimit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;allowedDomains&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;api.openai.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;api.anthropic.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;data.clearbit.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;requireApproval&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;above&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;expiresIn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;7d&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="c1"&gt;// Any attempt to pay outside the defined scope is rejected at infrastructure level&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The credential itself encodes governance. There is no separate monitoring system to build. The constraint is enforced at the infrastructure level, not the application level.&lt;/p&gt;

&lt;p&gt;This matters because of a core security principle: if your agent generates the payment authorization logic, it could also manipulate that logic. Governance must live in a layer the agent cannot modify.&lt;/p&gt;

&lt;p&gt;Closing the Audit Trail Gap&lt;/p&gt;

&lt;p&gt;Real-time enforcement is one half of the problem. Auditability is the other.&lt;/p&gt;

&lt;p&gt;rosud-pay records every payment event with the agent identity, the credential scope, the transaction context, and a timestamp. This means that when compliance asks what happened, you have a structured record that maps AI decisions to financial outcomes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Query the spend audit trail for a specific agent&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;auditLog&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;rosud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;payments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;history&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;agentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;procurement-agent-prod&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2026-04-01&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2026-04-25&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;structured&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="c1"&gt;// Returns: totalSpend, currency, per-transaction records&lt;/span&gt;
&lt;span class="c1"&gt;// Each record maps: agentDecision -&amp;gt; vendor -&amp;gt; amount -&amp;gt; timestamp&lt;/span&gt;
&lt;span class="c1"&gt;// No manual reconciliation required&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the governance infrastructure that enterprise AI deployments are missing. Not a policy document. Not a vendor audit. A real-time, scoped, auditable payment layer that operates at the infrastructure level.&lt;/p&gt;

&lt;p&gt;The 72% Problem Is Actually a Measurement Problem&lt;/p&gt;

&lt;p&gt;The VentureBeat survey did not find that enterprises are reckless. It found that enterprises are measuring the wrong things. They count model calls. They track prompt costs. They monitor data access.&lt;/p&gt;

&lt;p&gt;They are not measuring the financial actions their agents are taking autonomously.&lt;/p&gt;

&lt;p&gt;As agent capabilities expand and autonomous spending becomes normalized, the governance frameworks that enterprises are building today will have systematic gaps where payment flows are concerned. The organizations that close that gap now will have a significant advantage when regulators begin requiring it.&lt;/p&gt;

&lt;p&gt;rosud-pay is the infrastructure layer that makes agent spending visible, constrained, and auditable. You can learn more at &lt;a href="https://www.rosud.com/rosud-pay" rel="noopener noreferrer"&gt;https://www.rosud.com/rosud-pay&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Key Takeaways&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;72% of enterprises believe they control their AI, but few have visibility into what agents are spending&lt;/li&gt;
&lt;li&gt;Shadow AI created shadow spending: 60% of enterprise builders created tools without IT oversight&lt;/li&gt;
&lt;li&gt;Real payment governance requires scoped credentials enforced at the infrastructure level&lt;/li&gt;
&lt;li&gt;Audit trails must map AI decisions to financial outcomes, not just API call logs&lt;/li&gt;
&lt;li&gt;rosud-pay provides the spending governance layer that enterprise AI deployments are missing&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>enterprise</category>
      <category>governance</category>
      <category>payments</category>
    </item>
    <item>
      <title>Why Agent Payment Authorization Cannot Come from the Agent Itself</title>
      <dc:creator>Kavin Kim</dc:creator>
      <pubDate>Tue, 19 May 2026 04:35:37 +0000</pubDate>
      <link>https://dev.to/kavinkimcreator/why-agent-payment-authorization-cannot-come-from-the-agent-itself-2h3e</link>
      <guid>https://dev.to/kavinkimcreator/why-agent-payment-authorization-cannot-come-from-the-agent-itself-2h3e</guid>
      <description>&lt;p&gt;There is a moment in security design when a single observation changes everything. NanoClaw 2.0 shipped recently with a capability that stops most developers cold: a gateway that intercepts API credentials before they reach the agent. The agent sees only a placeholder. The real key never touches the application layer.&lt;/p&gt;

&lt;p&gt;The founder explained the reason in one sentence: "If the agent generates the approval UI, it could swap the Accept and Reject buttons."&lt;/p&gt;

&lt;p&gt;Read that again. If the agent controls the authorization interface, the agent controls the authorization decision. The concept of checking with the agent before proceeding collapses when the agent is both the actor and the approver. This applies directly to payments. More directly than most developers realize.&lt;/p&gt;

&lt;p&gt;The Authorization Paradox&lt;/p&gt;

&lt;p&gt;When AI agents make payments through application-level controls, the execution flow looks like this:&lt;/p&gt;

&lt;p&gt;You have just asked the agent to audit itself. The guardrails live inside the same process that generated the intention to spend. This is not security. It is theater.&lt;/p&gt;

&lt;p&gt;The consequences are not theoretical. In 2026, a Meta internal agent posted to employee forums without authorization after misinterpreting a task. This triggered a Severity 1 security incident. A bad post can be deleted. A bad payment cannot be reversed. Stablecoin transactions on Base are final.&lt;/p&gt;

&lt;p&gt;What Infrastructure-Level Authorization Actually Means&lt;/p&gt;

&lt;p&gt;NanoClaw treats authorization as a layer that exists below the application. The agent cannot inspect or manipulate it. When the agent sends an action, the gateway intercepts, evaluates the policy, and either injects the real credential or rejects the request. The agent never touches the decision.&lt;/p&gt;

&lt;p&gt;The same architecture applies to payments in rosud-pay. Payment credentials are not stored in the agent. The agent holds a scoped token that defines what it can do: which merchants, what amounts, what frequency. When the agent initiates a payment, rosud-pay evaluates the token against the policy at the infrastructure layer. The agent's own logic is irrelevant to the authorization decision.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Agent receives a scoped payment token at deployment time&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;RosudAgent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;paymentToken&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ROSUD_SCOPED_TOKEN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="c1"&gt;// Token pre-configured: maxAmount, allowedMerchants, spendWindow&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Agent initiates payment -- authorization happens at infrastructure layer&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pay&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vendor-123&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;currency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;USDC&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;memo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;API call to data provider&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Agent cannot override a policy rejection&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;authorized&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Payment rejected:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// e.g. "exceeds spendWindow limit" or "merchant not in allowList"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent never sees the underlying USDC wallet. It never accesses the cryptographic signing keys. It cannot construct a payment outside the defined scope. Even if the agent's reasoning is compromised by a prompt injection attack, the payment rail does not move.&lt;/p&gt;

&lt;p&gt;Why Payments Are Harder Than API Access&lt;/p&gt;

&lt;p&gt;NanoClaw's design protects API credentials. rosud-pay protects something harder: real monetary value on-chain.&lt;/p&gt;

&lt;p&gt;When an agent calls an API incorrectly, you get a failed request. You retry. You fix the logic. The cost is latency and compute. When an agent executes an unauthorized payment, you have moved USDC from one wallet to another. There is no chargeback, no dispute window, no fraud team to call.&lt;/p&gt;

&lt;p&gt;The enterprise is beginning to understand this. Retool's 2026 developer survey found that 60% of enterprise AI tools were deployed without IT oversight. Shadow IT became shadow AI. The next step in that progression is shadow payment: agents making financial decisions that no human approved and no audit trail covers.&lt;/p&gt;

&lt;p&gt;The Pattern That Actually Works&lt;/p&gt;

&lt;p&gt;The architecture is straightforward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Payment authorization lives at the infrastructure layer, not inside the agent&lt;/li&gt;
&lt;li&gt;Agents receive scoped tokens with defined limits: merchant, amount, time window&lt;/li&gt;
&lt;li&gt;Every payment attempt is logged to an immutable audit trail before execution&lt;/li&gt;
&lt;li&gt;Limits are enforced cryptographically, not by trusting the agent's self-reported behavior
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Define the token scope at deployment, not at runtime&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;scopedToken&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;rosud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createAgentToken&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;agentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;procurement-agent-v2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;policy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;maxSinglePayment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="c1"&gt;// USDC&lt;/span&gt;
    &lt;span class="na"&gt;dailySpendLimit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="c1"&gt;// USDC&lt;/span&gt;
    &lt;span class="na"&gt;allowedMerchants&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;data-provider-a&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;api-service-b&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;expiresIn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;7d&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Deploy agent with token -- agent never sees the private key&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;deployAgent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;paymentToken&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;scopedToken&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// All payment attempts are logged and enforced at infrastructure level&lt;/span&gt;
&lt;span class="c1"&gt;// Violations are rejected before execution, not after&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is not about distrusting your agents. It is about recognizing that an agent's authorization boundary should be established at deployment time, not derived from the agent's in-context judgment.&lt;/p&gt;

&lt;p&gt;The Line That Should Not Move&lt;/p&gt;

&lt;p&gt;NanoClaw proved the principle for API access. rosud-pay applies it where the stakes are highest: the moment an autonomous agent moves money.&lt;/p&gt;

&lt;p&gt;The rule is simple. An agent should never be the entity deciding whether the agent should pay. That decision belongs at a layer the agent cannot reach.&lt;/p&gt;

&lt;p&gt;If you are building autonomous agents that handle real transactions, rosud-pay is the infrastructure-level payment authorization layer designed for exactly this. The full documentation is at rosud.com/docs.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>payments</category>
      <category>agents</category>
    </item>
    <item>
      <title>72% of Enterprises Think They Control Their AI. Ask Them What Their Agents Are Spending.</title>
      <dc:creator>Kavin Kim</dc:creator>
      <pubDate>Tue, 19 May 2026 02:46:13 +0000</pubDate>
      <link>https://dev.to/kavinkimcreator/72-of-enterprises-think-they-control-their-ai-ask-them-what-their-agents-are-spending-21fj</link>
      <guid>https://dev.to/kavinkimcreator/72-of-enterprises-think-they-control-their-ai-ask-them-what-their-agents-are-spending-21fj</guid>
      <description>&lt;p&gt;[Post #23 | rosud-pay | 2026-04-25 Draft | Focus: Enterprise AI Governance Gap + Payment Blind Spot]&lt;/p&gt;

&lt;h2&gt;
  
  
  The Governance Illusion
&lt;/h2&gt;

&lt;p&gt;A VentureBeat survey of 40 enterprise organizations published in Q1 2026 found that 72% of enterprises believe they have meaningful control over their AI deployments. They have dashboards. They have policies. They have vendor contracts with safety clauses.&lt;/p&gt;

&lt;p&gt;Ask them one question and the illusion breaks: what did your AI agents spend this week?&lt;/p&gt;

&lt;p&gt;Silence.&lt;/p&gt;

&lt;p&gt;Enterprise AI governance in 2026 has a systematic blind spot. Everyone is watching what agents say, what data they access, which models they call. Nobody is watching what they spend. And in a world where agents are increasingly authorized to make purchases, call paid APIs, and process transactions, that blind spot is a financial risk that compounds quietly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Shadow AI Became Shadow Spending
&lt;/h2&gt;

&lt;p&gt;Retool's 2026 Build vs. Buy Shift report surveyed 817 professionals and found that 60% of enterprise builders had created AI tools and workflows without IT oversight. A quarter of them did this frequently.&lt;/p&gt;

&lt;p&gt;These tools were connected to production data. They were running automated workflows. They had API keys.&lt;/p&gt;

&lt;p&gt;Now consider: many of those same tools are calling external APIs. Some are calling paid APIs. Some are triggering purchases, processing invoices, or executing micro-transactions in automated pipelines.&lt;/p&gt;

&lt;p&gt;The governance layer that was supposed to audit these actions? It was never built for the payment surface.&lt;/p&gt;

&lt;p&gt;Mass General Brigham, with 90,000 employees, had to build a custom security layer on top of Microsoft Copilot because the platform's native governance could not account for the real-world workflows running on top of it. The same gap exists at nearly every enterprise running multiple AI platforms simultaneously.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Three Governance Failures
&lt;/h2&gt;

&lt;p&gt;When we map enterprise AI governance onto payment workflows, three failure modes emerge consistently.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Credential Sprawl
&lt;/h3&gt;

&lt;p&gt;An agent that calls OpenAI, Anthropic, a third-party data enrichment API, and a payment processor is using four separate credential chains. Each one has different scope, different expiry, different audit trail. The IT team sees none of it as a single coherent spend profile.&lt;/p&gt;

&lt;p&gt;Result: you cannot answer the question 'what did our AI cost us this month' with any accuracy.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Budget Without Enforcement
&lt;/h3&gt;

&lt;p&gt;Most enterprise AI budget controls exist at the procurement level. A team is allocated $10,000 for AI APIs. But at the agent execution level, there is no real-time enforcement. An agent can exceed the monthly budget in a day of unexpected behavior, and the budget owner finds out three weeks later on the invoice.&lt;/p&gt;

&lt;p&gt;Result: cost surprises that feel like infrastructure failures.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Audit Trail Gaps
&lt;/h3&gt;

&lt;p&gt;When something goes wrong and an agent made an unauthorized or erroneous payment, reconstructing what happened is extremely difficult. API logs exist in silos across different vendors. The agent's decision context is separate from the transaction record. Compliance teams cannot establish a clear chain of custody.&lt;/p&gt;

&lt;p&gt;Result: regulatory exposure that increases as agent autonomy increases.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Real-Time Payment Governance Looks Like
&lt;/h2&gt;

&lt;p&gt;The solution is not more dashboards. It is moving payment authorization infrastructure outside the agent layer entirely.&lt;/p&gt;

&lt;p&gt;When an agent's payment credentials are scoped at issuance, the governance problem changes shape. Instead of monitoring what agents are spending after the fact, you define what they are allowed to spend before execution begins.&lt;/p&gt;

&lt;p&gt;Here is what that looks like in practice with rosud-pay:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Issue a scoped payment credential for an agent&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;credential&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;rosud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;credentials&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;agentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;procurement-agent-prod&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;maxAmount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;          &lt;span class="c1"&gt;// per-transaction cap in USDC&lt;/span&gt;
  &lt;span class="na"&gt;dailyLimit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="c1"&gt;// rolling 24h spend limit&lt;/span&gt;
  &lt;span class="na"&gt;allowedDomains&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;        &lt;span class="c1"&gt;// only these vendors can receive payment&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;api.openai.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;api.anthropic.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;data.clearbit.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;requireApproval&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;above&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;             &lt;span class="c1"&gt;// human-in-the-loop for payments above $200&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;expiresIn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;7d&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// The agent receives only this credential, not your master key&lt;/span&gt;
&lt;span class="c1"&gt;// Any attempt to pay outside the defined scope is rejected at the infrastructure level&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The credential itself encodes governance. There is no separate monitoring system to build. The constraint is enforced at the infrastructure level, not the application level.&lt;/p&gt;

&lt;p&gt;This matters because of a core security principle: if your agent generates the payment authorization logic, it could also manipulate that logic. Governance must live in a layer the agent cannot modify.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing the Audit Trail Gap
&lt;/h2&gt;

&lt;p&gt;Real-time enforcement is one half of the problem. Auditability is the other.&lt;/p&gt;

&lt;p&gt;rosud-pay records every payment event with the agent identity, the credential scope, the transaction context, and a timestamp. This means that when compliance asks what happened, you have a structured record that maps AI decisions to financial outcomes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Query the spend audit trail for a specific agent&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;auditLog&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;rosud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;payments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;history&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;agentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;procurement-agent-prod&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2026-04-01&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2026-04-25&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;structured&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="cm"&gt;/*
Example response:
{
  totalSpend: 1847.32,
  currency: "USDC",
  transactions: [
    {
      id: "txn_abc123",
      timestamp: "2026-04-18T09:14:22Z",
      vendor: "api.openai.com",
      amount: 12.40,
      agentDecision: "image generation for product catalog",
      approvedBy: "scoped-credential",
      status: "completed"
    }
  ]
}
*/&lt;/span&gt;

&lt;span class="c1"&gt;// The audit trail maps every payment to the agent decision context&lt;/span&gt;
&lt;span class="c1"&gt;// No manual reconciliation required&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the governance infrastructure that enterprise AI deployments are missing. Not a policy document. Not a vendor audit. A real-time, scoped, auditable payment layer that operates at the infrastructure level.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 72% Problem Is Actually a Measurement Problem
&lt;/h2&gt;

&lt;p&gt;The VentureBeat survey did not find that enterprises are reckless. It found that enterprises are measuring the wrong things. They count model calls. They track prompt costs. They monitor data access.&lt;/p&gt;

&lt;p&gt;They are not measuring the financial actions their agents are taking autonomously.&lt;/p&gt;

&lt;p&gt;As agent capabilities expand and autonomous spending becomes normalized, the governance frameworks that enterprises are building today will have systematic gaps where payment flows are concerned. The organizations that close that gap now will have a significant advantage when regulators begin requiring it.&lt;/p&gt;

&lt;p&gt;rosud-pay is the infrastructure layer that makes agent spending visible, constrained, and auditable. You can learn more at &lt;a href="https://www.rosud.com/rosud-pay" rel="noopener noreferrer"&gt;https://www.rosud.com/rosud-pay&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;72% of enterprises believe they control their AI, but few have visibility into what agents are spending&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Shadow AI created shadow spending: 60% of enterprise AI tools were built without IT oversight&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Real payment governance requires scoped credentials, not post-hoc monitoring&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Audit trails must map AI decisions to financial outcomes at the infrastructure level, not the application level&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;rosud-pay provides the spending governance layer that enterprise AI deployments are missing&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;[Draft complete | Pending kavin approval before publish | No em dash verified]&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>enterprise</category>
      <category>fintech</category>
    </item>
    <item>
      <title>Why Agent Payment Authorization Cannot Come from the Agent Itself</title>
      <dc:creator>Kavin Kim</dc:creator>
      <pubDate>Tue, 19 May 2026 02:46:11 +0000</pubDate>
      <link>https://dev.to/kavinkimcreator/why-agent-payment-authorization-cannot-come-from-the-agent-itself-onl</link>
      <guid>https://dev.to/kavinkimcreator/why-agent-payment-authorization-cannot-come-from-the-agent-itself-onl</guid>
      <description>&lt;p&gt;There is a moment in security design when a single observation changes everything. NanoClaw 2.0 shipped recently with a capability that stops most developers cold: a gateway that intercepts API credentials before they reach the agent. The agent sees only a placeholder. The real key never touches the application layer.&lt;/p&gt;

&lt;p&gt;The founder explained the reason in one sentence: "If the agent generates the approval UI, it could swap the Accept and Reject buttons."&lt;/p&gt;

&lt;p&gt;Read that again. If the agent controls the authorization interface, the agent controls the authorization decision. The entire concept of checking with the agent before proceeding collapses when the agent is both the actor and the approver. This insight applies directly to payments. More directly than most developers realize.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Authorization Paradox
&lt;/h2&gt;

&lt;p&gt;When AI agents make payments through application-level controls, the execution flow looks like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Agent decides to make a payment&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Agent checks its own spending rules&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Agent approves or rejects&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Agent executes&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You have just asked the agent to audit itself. The guardrails live inside the same process that generated the intention to spend. This is not security. It is theater.&lt;/p&gt;

&lt;p&gt;Real-world consequences are not theoretical. In April 2026, a Meta internal agent posted to employee forums without authorization after misinterpreting a task. The action was irreversible until discovered. A bad post can be deleted. A bad payment cannot be reversed.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Infrastructure-Level Authorization Actually Means
&lt;/h2&gt;

&lt;p&gt;NanoClaw treats authorization as a layer that exists below the application. The agent cannot inspect or manipulate it. When the agent sends an action, the gateway intercepts, evaluates the policy, and either injects the real credential or rejects the request. The agent never touches the decision.&lt;/p&gt;

&lt;p&gt;The same architecture applies to payments in &lt;a href="https://www.rosud.com/rosud-pay" rel="noopener noreferrer"&gt;rosud-pay&lt;/a&gt;. Payment credentials are not stored in the agent. The agent holds a scoped token that defines what it can do: which merchants, what amounts, what frequency. When the agent initiates a payment, rosud-pay evaluates the token against the policy at the infrastructure layer. The agent's own logic is irrelevant to the authorization decision.&lt;/p&gt;

&lt;p&gt;Here is what that looks like in practice:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Agent receives a scoped payment token at deployment time&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;RosudAgent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;paymentToken&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ROSUD_SCOPED_TOKEN&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="c1"&gt;// Token is pre-configured with: maxAmount, allowedMerchants, spendWindow&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Agent initiates payment -- authorization happens outside agent logic&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pay&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vendor-123&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;currency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;USDC&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;memo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;API call to data provider&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// If policy is violated, result.authorized === false&lt;/span&gt;
&lt;span class="c1"&gt;// Agent cannot override this&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;authorized&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Payment rejected by infrastructure policy:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;reason&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// e.g. "exceeds spendWindow limit" or "merchant not in allowList"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent never sees the underlying USDC wallet. It never accesses the cryptographic signing keys. It cannot construct a payment outside the defined scope. Even if the agent's reasoning is compromised by a prompt injection attack, the payment rail does not move.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Payments Are Harder Than API Access
&lt;/h2&gt;

&lt;p&gt;NanoClaw's design protects API credentials. rosud-pay protects something harder: real monetary value on-chain.&lt;/p&gt;

&lt;p&gt;When an agent calls an API incorrectly, you get a failed request. You retry. You fix the logic. The cost is latency and compute. When an agent executes an unauthorized payment, you have moved USDC from one wallet to another. Stablecoin transactions on Base are final. There is no chargeback, no dispute window, no fraud team to call.&lt;/p&gt;

&lt;p&gt;The enterprise is beginning to understand this. Retool's 2026 developer survey found that 60% of enterprise AI tools were deployed without IT oversight. Shadow IT became shadow AI. The next step in that progression is shadow payment: agents making financial decisions that no human approved, in systems that no audit trail covers.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Pattern That Actually Works
&lt;/h2&gt;

&lt;p&gt;The architecture is straightforward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Payment authorization lives at the infrastructure layer, not in the agent&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Agents receive scoped tokens with defined limits (merchant, amount, time window)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Every payment attempt logs to an immutable audit trail before execution&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Limits are enforced cryptographically, not by trusting the agent's self-reported behavior&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Define the token scope at deployment, not at runtime&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;scopedToken&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;rosud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createAgentToken&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;agentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;procurement-agent-v2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;policy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;maxSinglePayment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="c1"&gt;// USDC&lt;/span&gt;
    &lt;span class="na"&gt;dailySpendLimit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="c1"&gt;// USDC&lt;/span&gt;
    &lt;span class="na"&gt;allowedMerchants&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;data-provider-a&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;api-service-b&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;expiresIn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;7d&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Deploy agent with token -- agent never sees the private key&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;deployAgent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;paymentToken&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;scopedToken&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// All payment attempts log automatically before execution&lt;/span&gt;
&lt;span class="c1"&gt;// Violations are rejected at infrastructure level&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is not about distrusting your agents. It is about recognizing that an agent's authorization boundary should be established at deployment time, not derived from the agent's in-context judgment.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Line That Should Not Move
&lt;/h2&gt;

&lt;p&gt;NanoClaw proved the principle for API access. rosud-pay applies it where the stakes are highest: the moment an autonomous agent moves money.&lt;/p&gt;

&lt;p&gt;The rule is simple. An agent should never be the entity deciding whether the agent should pay. That decision belongs at a layer the agent cannot reach. The architecture for that layer already exists.&lt;/p&gt;

&lt;p&gt;If you are building autonomous agents that handle real transactions, &lt;a href="https://www.rosud.com/rosud-pay" rel="noopener noreferrer"&gt;rosud-pay&lt;/a&gt; is the infrastructure-level payment authorization layer your agents need. The docs are at &lt;a href="https://www.rosud.com/docs" rel="noopener noreferrer"&gt;rosud.com/docs&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>blockchain</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Anthropic Ran a Real Agent Economy Inside Their Company. Here's What It Proved About Communication.</title>
      <dc:creator>Kavin Kim</dc:creator>
      <pubDate>Sun, 26 Apr 2026 05:16:35 +0000</pubDate>
      <link>https://dev.to/kavinkimcreator/anthropic-ran-a-real-agent-economy-inside-their-company-heres-what-it-proved-about-communication-5h02</link>
      <guid>https://dev.to/kavinkimcreator/anthropic-ran-a-real-agent-economy-inside-their-company-heres-what-it-proved-about-communication-5h02</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3n320yw4h26q8lbacmo3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3n320yw4h26q8lbacmo3.png" alt="cover" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In December 2025, Anthropic ran an experiment called Project Deal. They gave 69 employees AI agents and set them loose on a Slack-based flea market. The agents could browse listings, negotiate, and complete transactions. No scripts. No hardcoded behaviors. Pure autonomous negotiation.&lt;/p&gt;

&lt;p&gt;The results: 186 completed deals. Over $4,000 in real goods exchanged. And a discovery that should keep every AI infrastructure builder up at night.&lt;/p&gt;

&lt;p&gt;Agents running on Claude Opus 4.5 consistently struck better deals than those running on Claude Haiku 4.5. The gap was not small. And the people paired with weaker agents had no idea they were losing out. They walked away satisfied, not knowing a better deal was possible.&lt;/p&gt;

&lt;p&gt;Anthropic proved that agents can negotiate. They can discover value, assess tradeoffs, and close transactions without a human in the loop. The experiment worked.&lt;/p&gt;

&lt;p&gt;But Slack was the communication channel. And that is the question Project Deal did not answer.&lt;/p&gt;

&lt;p&gt;Slack Was the Infrastructure. That Was Fine for 69 People.&lt;/p&gt;

&lt;p&gt;Slack gave agents a shared space to post offers, read responses, and confirm deals. It worked because the environment was controlled. Sixty-nine participants. A few hundred listings. Real-time channels that humans also used.&lt;/p&gt;

&lt;p&gt;Now imagine the same experiment at scale. Not 69 employees but 69,000 software agents running across different companies, cloud providers, and model vendors. The negotiation logic works. The infrastructure does not scale.&lt;/p&gt;

&lt;p&gt;Slack is built for humans. It has rate limits, workspace boundaries, message threading designed for human cognition, and no native concept of agent identity. An agent on Claude Opus in one company has no clean way to negotiate in real time with an agent on GPT-5 in another company, without someone building custom integration glue in between.&lt;/p&gt;

&lt;p&gt;Project Deal proved the negotiation intelligence exists. It surfaced the infrastructure gap around it.&lt;/p&gt;

&lt;p&gt;What Agent-Native Communication Looks Like&lt;/p&gt;

&lt;p&gt;When agents negotiate, they need to do three things that human messaging platforms were not designed to support at machine speed and scale.&lt;/p&gt;

&lt;p&gt;Broadcast an offer to a defined set of agents without routing through a human-readable inbox. Receive and process responses in real time, across platforms and model providers. Confirm or reject without a human approval step that breaks the autonomous loop.&lt;/p&gt;

&lt;p&gt;Here is what that looks like in practice using rosud-call, which lets any bot join an agent messaging network with a single npm install:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Procurement agent posting a service request to the network&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;RosudCall&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;rosud-call&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;RosudCall&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;agentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;procurement-agent-v2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;publish&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;service.request&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;task&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;data-enrichment&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;budget&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.05&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;volume&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;deadline&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;3600000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;replyTo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;inboxId&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;offers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;collect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;service.offer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;minReplies&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;best&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;offers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;price&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;price&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Accepted: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;best&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;agentId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; at &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;best&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;price&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; USDC per 1k records`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The vendor side is equally simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Vendor agent listening for and responding to service requests&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;RosudCall&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;rosud-call&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;vendor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;RosudCall&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;agentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;enrichment-vendor-agent&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;vendor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;service.request&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;task&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;data-enrichment&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ourPrice&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;calculatePrice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;volume&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;vendor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;replyTo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;service.offer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ourPrice&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;deliveryMs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1800000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;sla&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;99.5%&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;agentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;vendor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;agentId&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Model Strength Gap Becomes an Infrastructure Problem&lt;/p&gt;

&lt;p&gt;Project Deal revealed something subtle. When the weaker agent negotiated, its counterpart did not know. The information asymmetry was invisible at the human level.&lt;/p&gt;

&lt;p&gt;At scale, this becomes an infrastructure design question. rosud-call attaches verified agent metadata to every message, so a procurement agent knows it is receiving an offer from a counterparty with a 30-day track record on the network, not an unverified bot that just appeared.&lt;/p&gt;

&lt;p&gt;From 69 Employees to Millions of Agent Transactions&lt;/p&gt;

&lt;p&gt;Anthropic proved that autonomous agent economies work. The bottleneck in 2025 was model capability. That bottleneck is gone.&lt;/p&gt;

&lt;p&gt;The bottleneck now is communication infrastructure. That is precisely the gap rosud-call was built to fill. One npm install connects your agent to a network where other agents can discover it, send structured messages, and complete negotiations without your team writing custom integration code for every new counterparty.&lt;/p&gt;

&lt;p&gt;The Agent Economy Is Already Running. Is Your Agent on the Network?&lt;/p&gt;

&lt;p&gt;If you are building agents that should participate in a broader ecosystem, the infrastructure is ready.&lt;/p&gt;

&lt;p&gt;Explore the SDK and documentation at &lt;a href="https://www.rosud.com/rosud-call" rel="noopener noreferrer"&gt;rosud.com/rosud-call&lt;/a&gt;. Your agents can start talking to each other today.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agentai</category>
      <category>javascript</category>
      <category>programming</category>
    </item>
    <item>
      <title>When Your Agent Becomes a Consumer: The Payment Infrastructure No One Built</title>
      <dc:creator>Kavin Kim</dc:creator>
      <pubDate>Fri, 24 Apr 2026 01:45:15 +0000</pubDate>
      <link>https://dev.to/kavinkimcreator/when-your-agent-becomes-a-consumer-the-payment-infrastructure-no-one-built-2epm</link>
      <guid>https://dev.to/kavinkimcreator/when-your-agent-becomes-a-consumer-the-payment-infrastructure-no-one-built-2epm</guid>
      <description>&lt;h1&gt;
  
  
  Hook / Intro
&lt;/h1&gt;

&lt;p&gt;OpenAI released ChatGPT Images 2.0 last week. Anthropic shipped Claude Design. Google dropped Gemma 4 with on-device tool-calling. The model race is in full sprint.&lt;/p&gt;

&lt;p&gt;Here is what nobody is talking about: every one of those new capabilities is a purchase waiting to happen.&lt;/p&gt;

&lt;p&gt;When your agent calls the image generation API to produce an asset, it is buying a service. When it queries a real-time data provider, it is buying information. When it spins up compute on demand, it is buying infrastructure. The agent is no longer just a tool that costs you money. It is becoming a consumer that spends money on your behalf.&lt;/p&gt;

&lt;p&gt;And the payment infrastructure to support that? It was never built for this.&lt;/p&gt;

&lt;h1&gt;
  
  
  Section 1: The Agent-as-Consumer Pattern Is Already Here
&lt;/h1&gt;

&lt;p&gt;Consider what a production AI agent does in a single workflow today:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Calls a vision API to analyze an uploaded image&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Queries a financial data provider for real-time pricing&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Generates a visual report using an image model&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stores the output in a third-party document service&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of these is a metered API call. Most of them cost money. The agent triggers all four without asking you. That is not a future scenario. That is a Tuesday.&lt;/p&gt;

&lt;p&gt;The problem is that your payment infrastructure was not designed for a non-human buyer. Credit cards require a cardholder. OAuth flows require a user session. Subscription plans assume a human who logs in once a month to check the bill. None of that maps to an agent that executes 400 tasks before you finish your morning coffee.&lt;/p&gt;

&lt;h1&gt;
  
  
  Section 2: Three Failure Modes When Agents Try to Pay
&lt;/h1&gt;

&lt;p&gt;Here are the three failure modes teams run into when agents start consuming paid services at scale:&lt;/p&gt;

&lt;h1&gt;
  
  
  Failure 1: The Shared Key Problem
&lt;/h1&gt;

&lt;p&gt;Most teams solve the payment problem by giving agents a shared API key tied to a company credit card. It works until it does not. One compromised agent, one runaway loop, one unexpected price change in an upstream API, and you are looking at a five-figure invoice with no audit trail to tell you which agent spent what.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# What most teams do today (the problematic pattern)
&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="c1"&gt;# Single API key shared across ALL agents
&lt;/span&gt;&lt;span class="n"&gt;IMAGE_API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;SHARED_IMAGE_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;agent_generate_image&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# No budget check. No agent identity. No spend limit.
&lt;/span&gt;    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;https://api.imageservice.com/generate&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;IMAGE_API_KEY&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;prompt&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# If this agent loops 10,000 times... who notices?
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Failure 2: No Budget Boundary Between Agents
&lt;/h1&gt;

&lt;p&gt;When you run 10 agents concurrently, each calling different services, you have no way to see which agent drove which cost. Your cloud bill says $2,400 in API spend. Your team spent three hours reconstructing which workflow caused it. That is not a monitoring problem. That is an identity problem at the payment layer.&lt;/p&gt;

&lt;h1&gt;
  
  
  Failure 3: No Rate of Spend Control
&lt;/h1&gt;

&lt;p&gt;Human users self-regulate. They notice when something costs too much and stop. Agents do not. A misconfigured retry loop, a prompt injection that triggers excessive tool calls, a model that misinterprets a budget instruction: all of these can drain your payment credentials before any human-visible alert fires. By the time you see the anomaly, the transaction is irreversible.&lt;/p&gt;

&lt;h1&gt;
  
  
  Section 3: What Agent-Native Payment Infrastructure Actually Looks Like
&lt;/h1&gt;

&lt;p&gt;The fix is not a better credit card. It is a payment layer designed for non-human consumers from the ground up. Here is what that architecture requires:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Agent-scoped credentials: each agent gets its own payment identity, not a shared key&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Spend limits at the credential level: the payment key itself cannot exceed a configured cap&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stablecoin settlement: USDC on-chain gives per-transaction visibility without relying on a credit statement&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Real-time audit trail: every payment event tied to agent ID, task context, and timestamp&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the architecture rosud-pay is built around. Each agent gets a scoped credential with a hard spend limit. Payments settle in USDC. Every transaction is logged with full context. When something goes wrong, you know exactly which agent spent what, when, and on what service.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Agent-native payment with rosud-pay&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;RosudPay&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;rosud-pay&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pay&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;RosudPay&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;agentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;image-gen-agent-v2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;spendLimit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;daily&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;perTx&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;currency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;USDC&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;auditContext&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;taskId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;workflowId&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;agentGenerateImage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// rosud-pay checks limit BEFORE the call goes out&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;approval&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;pay&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;preAuthorize&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;estimatedCost&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.08&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;approval&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Budget exceeded: escalate, do not retry silently&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;spend_limit_reached&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;imageAPI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;prompt&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="c1"&gt;// Settle USDC and log the transaction&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;pay&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;settle&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;txId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;approval&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;txId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;actualCost&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cost&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Section 4: Why USDC Changes the Visibility Equation
&lt;/h1&gt;

&lt;p&gt;Traditional payment rails batch and reconcile. By the time you can see what was spent, the transaction is days old and the context is gone. USDC on Base settles in seconds. Each transaction is on-chain, timestamped, and permanently associated with the agent credential that initiated it.&lt;/p&gt;

&lt;p&gt;This is not a crypto ideology argument. It is a practical engineering argument. When your agent is buying services at machine speed, you need a payment rail that gives you machine-speed visibility. Credit card statements are not that.&lt;/p&gt;

&lt;p&gt;The model race is accelerating agent capabilities faster than most teams can track. More capable agents will consume more services. The question is not whether your agents will become consumers. They already are. The question is whether your payment infrastructure was designed for them.&lt;/p&gt;

&lt;h1&gt;
  
  
  CTA
&lt;/h1&gt;

&lt;p&gt;If you are building production AI agents that call paid APIs, rosud-pay gives you scoped credentials, per-agent spend limits, and USDC settlement with a full audit trail. Learn more at &lt;a href="https://www.rosud.com/rosud-pay" rel="noopener noreferrer"&gt;https://www.rosud.com/rosud-pay&lt;/a&gt;&lt;/p&gt;

</description>
      <category>agents</category>
      <category>payments</category>
      <category>infrastructure</category>
    </item>
    <item>
      <title>When the Enterprise Opens Up to Agents, Who Coordinates Them?</title>
      <dc:creator>Kavin Kim</dc:creator>
      <pubDate>Wed, 22 Apr 2026 05:22:17 +0000</pubDate>
      <link>https://dev.to/kavinkimcreator/when-the-enterprise-opens-up-to-agents-who-coordinates-them-12a8</link>
      <guid>https://dev.to/kavinkimcreator/when-the-enterprise-opens-up-to-agents-who-coordinates-them-12a8</guid>
      <description>&lt;p&gt;Salesforce just opened 27 years of enterprise CRM to any AI agent. Headless 360 launched at TDX with over 60 MCP tools and 30 coding skills. Any agent built with Claude Code, OpenAI Agents SDK, or Cursor can now read, update, and trigger workflows inside Salesforce directly. SAP did the same. ServiceNow followed. Nvidia brought 17 enterprise partners onto Agent Toolkit. The message from every major platform in Q1 2026 is identical: the enterprise is now agent-accessible.&lt;/p&gt;

&lt;p&gt;This is a genuine inflection point. But it created a problem nobody is talking about.&lt;/p&gt;

&lt;p&gt;The agents can read the data. They can trigger workflows. They cannot coordinate with each other in real time.&lt;/p&gt;

&lt;p&gt;One Enterprise, Many Agents, Zero Shared Channel&lt;/p&gt;

&lt;p&gt;Here is what a real enterprise workflow looks like in 2026:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A Claude-based sales agent updates deal status in Salesforce&lt;/li&gt;
&lt;li&gt;An OpenAI-based inventory agent needs to check availability&lt;/li&gt;
&lt;li&gt;A Gemini-based finance agent needs to generate a quote&lt;/li&gt;
&lt;li&gt;A Claude Code-based fulfillment agent schedules delivery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These agents all have access to the enterprise platforms. But how does the sales agent tell the inventory agent that a deal just moved to negotiation? How does the finance agent know to generate a quote right now, not in 15 minutes when the orchestrator checks in?&lt;/p&gt;

&lt;p&gt;The answer, in most architectures today: it does not. The orchestrator polls. Agents wait. Workflows stall.&lt;/p&gt;

&lt;p&gt;The Polling Problem&lt;/p&gt;

&lt;p&gt;Traditional multi-agent setups handle this through a central orchestrator. Agent A finishes, writes to shared state, and the orchestrator eventually notices and triggers Agent B. This works when workflows are predictable and latency is acceptable. Enterprise-grade agent workflows are neither.&lt;/p&gt;

&lt;p&gt;A deal moving from prospecting to negotiation triggers an immediate cascade: inventory checks, legal review alerts, pricing updates, competitor analysis. Each needs to happen now, not on the next polling cycle. The orchestrator architecture was designed for sequential tasks. Real enterprise workflows are event-driven.&lt;/p&gt;

&lt;p&gt;What Real-Time Agent Coordination Looks Like&lt;/p&gt;

&lt;p&gt;The model is simple. When something meaningful happens, the detecting agent publishes an event. Every agent that cares about it receives the event immediately and acts. With rosud-call, this is a two-line integration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;RosudClient&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;rosud-call&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;RosudClient&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;agentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;crm-agent-001&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Publish when a deal stage changes&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;publish&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;deal.stage.changed&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;dealId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;D-4892&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;prospecting&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;negotiation&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The inventory agent does not need to know about the CRM agent. It subscribes to the event channel and reacts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Inventory agent: react immediately to deal progress&lt;/span&gt;
&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;subscribe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;deal.stage.changed&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;dealId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;negotiation&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;availability&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;checkInventory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;dealId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;publish&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;inventory.checked&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;dealId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;available&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;availability&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;units&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;leadTimeDays&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;availability&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;leadTime&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The finance agent subscribes to 'inventory.checked'. The fulfillment agent subscribes to 'quote.approved'. No orchestrator polling required for any of these handoffs.&lt;/p&gt;

&lt;p&gt;Why This Matters for Enterprise Adoption&lt;/p&gt;

&lt;p&gt;When Salesforce launched Headless 360, it described the product as making the entire platform accessible to external agents. That description is accurate. But accessible does not mean coordinated.&lt;/p&gt;

&lt;p&gt;In practice, most enterprise agent deployments fail not because agents cannot access data, but because they cannot coordinate their actions.&lt;/p&gt;

&lt;p&gt;This creates three problems that kill enterprise rollouts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Race conditions: two agents act on the same record without knowing about each other&lt;/li&gt;
&lt;li&gt;Stale context: Agent B acts on 10-minute-old information because the orchestrator has not checked in&lt;/li&gt;
&lt;li&gt;Invisible failures: Agent A finishes its task but nobody knows, so Agent B keeps waiting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Real-time event channels eliminate all three.&lt;/p&gt;

&lt;p&gt;npm install rosud-call&lt;/p&gt;

&lt;p&gt;The enterprise platforms have done the hard work of opening up their APIs. The agent coordination layer is the remaining gap.&lt;/p&gt;

&lt;p&gt;rosud-call connects any two agents with a single npm install. No broker to manage, no polling loops, no shared state database. Any agent that can run JavaScript can publish or subscribe to events. Platform does not matter. Model does not matter.&lt;/p&gt;

&lt;p&gt;As Salesforce Headless 360 deploys across enterprise customers, the question is not whether agents will work in the enterprise. The question is how they will work together.&lt;/p&gt;

&lt;p&gt;That is the problem rosud-call was built to solve.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.rosud.com/rosud-call" rel="noopener noreferrer"&gt;https://www.rosud.com/rosud-call&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>salesforce</category>
      <category>enterprise</category>
    </item>
    <item>
      <title>When AI Services Shut Down: Why Your Payment Layer Needs to Outlast Your Models</title>
      <dc:creator>Kavin Kim</dc:creator>
      <pubDate>Tue, 21 Apr 2026 04:32:00 +0000</pubDate>
      <link>https://dev.to/kavinkimcreator/when-ai-services-shut-down-why-your-payment-layer-needs-to-outlast-your-models-1fm7</link>
      <guid>https://dev.to/kavinkimcreator/when-ai-services-shut-down-why-your-payment-layer-needs-to-outlast-your-models-1fm7</guid>
      <description>&lt;p&gt;OpenAI Sora was shut down on March 24, 2026. No warning. No migration period. Just gone.&lt;/p&gt;

&lt;p&gt;If your agent was using Sora to generate video content and trigger downstream payments, that pipeline broke overnight. Not because your payment logic was wrong. Because the model it depended on ceased to exist.&lt;/p&gt;

&lt;p&gt;This is the fragility problem nobody talks about in agentic AI design.&lt;/p&gt;




&lt;p&gt;The Dependency Chain Problem&lt;/p&gt;

&lt;p&gt;Most AI agent payment architectures look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# The fragile pattern
&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;process_agent_task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_request&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# Step 1: Call the AI model
&lt;/span&gt;    &lt;span class="n"&gt;video&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;openai_sora&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Step 2: Payment is tightly coupled to model output
&lt;/span&gt;    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;completed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;payment_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;charge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;credits_used&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;PRICE_PER_CREDIT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sora-v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;# Hardcoded model identity
&lt;/span&gt;        &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When Sora disappeared, every agent using this pattern had to stop, rewrite, and redeploy. The payment logic had nothing wrong with it. But because it was coupled to a specific model identifier, it became dead code.&lt;/p&gt;




&lt;p&gt;The Model Lifecycle Problem&lt;/p&gt;

&lt;p&gt;AI models do not follow the same lifecycle assumptions as databases or APIs. A PostgreSQL table you created in 2019 is still there. An S3 bucket from 2015 still works. But AI models:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Get deprecated without long notice windows&lt;/li&gt;
&lt;li&gt;Get replaced by successor models with different output schemas&lt;/li&gt;
&lt;li&gt;Get shut down entirely when unit economics do not work (Sora)&lt;/li&gt;
&lt;li&gt;Get renamed, versioned, or merged into new products&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When Sora shut down, developers who had hardcoded sora-v1 into their payment triggers had to scramble. Some had payment events tied to specific model completion webhooks. Those webhooks were now silent.&lt;/p&gt;




&lt;p&gt;What Model-Agnostic Payment Architecture Looks Like&lt;/p&gt;

&lt;p&gt;The fix is to separate the payment trigger from the model identity. Your payment layer should not care which model ran. It should care about what happened: a task completed, a resource was consumed, a result was delivered.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# The resilient pattern - model-agnostic payment scope
&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AgentTask&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;model_provider&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;task_id&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model_provider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model_provider&lt;/span&gt;

    &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;execute_with_payment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;task_params&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;rosud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;payment_scope&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;agent_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;budget_limit_usd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;10.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;idempotency_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;task-&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;task_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;payment_ctx&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

            &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run_task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;success&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;payment_ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;settle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                    &lt;span class="n"&gt;amount&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cost_usd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="n"&gt;metadata&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;task_type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;task_type&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
                    &lt;span class="c1"&gt;# No model name in payment logic - survives model changes
&lt;/span&gt;                &lt;span class="p"&gt;)&lt;/span&gt;

            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With this pattern, you can swap Sora for Runway, or GPT-4o for Claude, or any model for any other, without touching payment logic. The payment layer is downstream of your routing logic, not upstream.&lt;/p&gt;




&lt;p&gt;Three Things That Need to Outlast Your Models&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Idempotency Keys&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If your agent retries a task after a model failure, you cannot charge twice. Idempotency must be at the payment layer, not the model layer.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Budget Scoping&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When Sora shut down and agents failed mid-task, some had partially consumed credits. Budget limits at the payment level let you cap exposure regardless of what the model does.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Audit Trails&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;"The model died" is not a sufficient explanation to your users if their account was charged. Payment records need to exist independently of model logs.&lt;/p&gt;

&lt;p&gt;Rosud handles all three. The agent identity, spending limits, and transaction records live in the payment layer, not inside any particular model's API response.&lt;/p&gt;




&lt;p&gt;The Bigger Pattern&lt;/p&gt;

&lt;p&gt;Sora is one example. But the pattern is structural. AI services will continue to appear, pivot, and shut down at a pace that traditional software infrastructure was not designed for.&lt;/p&gt;

&lt;p&gt;Google Gemini Ultra got repositioned. Meta's LLaMA terms changed overnight. GPT-4 got deprecated in favor of newer versions. Each of these created breaking changes for developers who had not designed their payment logic to be model-agnostic.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Model routing stays in your orchestration layer
&lt;/span&gt;&lt;span class="n"&gt;MODEL_ROUTER&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;video_generation&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;runway-gen3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;kling-1.6&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;   &lt;span class="c1"&gt;# sora-v1 removed
&lt;/span&gt;    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text_generation&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-sonnet-4&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image_generation&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sd-3.5-large&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;dall-e-3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;route_and_pay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;available_models&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;MODEL_ROUTER&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;task_type&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;available_models&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;call_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;rosud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;record_transaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="n"&gt;agent_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;agent_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                &lt;span class="n"&gt;task_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;task_type&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;model_used&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;cost_usd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cost&lt;/span&gt;
            &lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;
        &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="n"&gt;ModelUnavailableError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;continue&lt;/span&gt;

    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;AllModelsUnavailableError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task_type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;The Takeaway&lt;/p&gt;

&lt;p&gt;Build your payment layer like infrastructure. It should be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Model-agnostic: payments survive model deprecations&lt;/li&gt;
&lt;li&gt;Task-complete: triggered by outcomes, not by model identity&lt;/li&gt;
&lt;li&gt;Audit-capable: records exist independently of model logs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;OpenAI Sora shutting down was a supply-side event. Your payment infrastructure is demand-side. Keep them separate, and your agents keep running even when the models they depend on do not.&lt;/p&gt;

&lt;p&gt;Rosud is built for exactly this: a payment layer that does not care what model you use, only that the work was done and the transaction was clean.&lt;/p&gt;

&lt;p&gt;Try Rosud API at &lt;a href="https://rosud.com" rel="noopener noreferrer"&gt;rosud.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>payments</category>
      <category>agenticai</category>
      <category>infrastructure</category>
    </item>
    <item>
      <title>Your Agent Orchestrator Is a Bottleneck. Here Is What Comes Next.</title>
      <dc:creator>Kavin Kim</dc:creator>
      <pubDate>Mon, 20 Apr 2026 05:57:33 +0000</pubDate>
      <link>https://dev.to/kavinkimcreator/your-agent-orchestrator-is-a-bottleneck-here-is-what-comes-next-4g1g</link>
      <guid>https://dev.to/kavinkimcreator/your-agent-orchestrator-is-a-bottleneck-here-is-what-comes-next-4g1g</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk44y6iou3az7ovntswa9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk44y6iou3az7ovntswa9.png" alt="Cover" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every multi-agent system ships with the same hidden flaw.&lt;/p&gt;

&lt;p&gt;One orchestrator. Dozens of agents. All communication routes through the center.&lt;/p&gt;

&lt;p&gt;This is coordination. Not collaboration. And when Cisco's SVP of Outshift published research on the Internet of Cognition, it finally named what most teams are building around the wrong thing.&lt;/p&gt;

&lt;p&gt;The Hub-and-Spoke Trap&lt;/p&gt;

&lt;p&gt;Look at how most multi-agent systems are built today. LangGraph, AutoGen, CrewAI are all variations of the same architecture: one central coordinator, everything else a spoke.&lt;/p&gt;

&lt;p&gt;This works at five agents. It starts creaking at twenty. At fifty, it becomes a single point of failure with a very expensive job title.&lt;/p&gt;

&lt;p&gt;The real problem is not throughput. It is information lag.&lt;/p&gt;

&lt;p&gt;When your research agent discovers something important, it reports to the orchestrator. The orchestrator decides whether to pass that information along. Then the downstream agent acts on information that is already stale.&lt;/p&gt;

&lt;p&gt;That is a telephone game. Not a team.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F182w296tzpa2ua2dn4at.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F182w296tzpa2ua2dn4at.png" alt="Hub and spoke" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What Cisco Got Right&lt;/p&gt;

&lt;p&gt;Cisco published something interesting recently. Their Outshift team has been building what they call shared cognition infrastructure for multi-agent environments. The key quote from their SVP: connection is not cognition.&lt;/p&gt;

&lt;p&gt;The insight is sharp. Two agents can be connected in the same system without sharing any context. Without knowing what the other agent has learned. Without reacting to information as it emerges.&lt;/p&gt;

&lt;p&gt;Cisco's solution is elegant. It is also two to three years from production-ready.&lt;/p&gt;

&lt;p&gt;What Real Collaboration Looks Like&lt;/p&gt;

&lt;p&gt;Real agent collaboration looks like this: your customer-service agent detects unusual return patterns and immediately notifies your fraud detection agent and your inventory agent. Simultaneously. In real time.&lt;/p&gt;

&lt;p&gt;No waiting for the orchestrator to relay. No stale information.&lt;/p&gt;

&lt;p&gt;This is the difference between agents that work in sequence and agents that work together.&lt;/p&gt;

&lt;p&gt;The Channel Pattern&lt;/p&gt;

&lt;p&gt;The solution is not a new protocol. It is a messaging primitive that already exists in distributed systems: publish and subscribe.&lt;/p&gt;

&lt;p&gt;Here is what this looks like with rosud-call:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;RosudCall&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;rosud-call&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;RosudCall&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ROSUD_API_KEY&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Research agent broadcasts findings as they arrive&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;researchAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;topic&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;channel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;research-feed&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;findings&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;runResearch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;topic&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;finding&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;findings&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;publish&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;finding&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;finding&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;summary&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;confidence&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;finding&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;score&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Downstream agents subscribe and react immediately&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;summaryAgent&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;channel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;research-feed&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;subscribe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;finding&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;confidence&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;updateWorkingContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two lines to set up. Any agent can subscribe. Findings propagate the moment they are ready.&lt;/p&gt;

&lt;p&gt;This is what rosud-call ships today: &lt;a href="https://www.rosud.com/rosud-call" rel="noopener noreferrer"&gt;https://www.rosud.com/rosud-call&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe3v8rk18r1kysz4w80a9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe3v8rk18r1kysz4w80a9.png" alt="Mesh network" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Why This Matters More Than the Model Race&lt;/p&gt;

&lt;p&gt;There is a lot of energy right now around which model runs inside your agents. GPT-5.4, Claude Opus 4.7, Gemma 4, Arcee Trinity. The benchmark wars are entertaining.&lt;/p&gt;

&lt;p&gt;But the bottleneck most teams hit first is not model quality. It is information architecture. Agents that cannot share context in real time will underperform agents that can, regardless of how powerful the underlying model is.&lt;/p&gt;

&lt;p&gt;A team of people who cannot talk to each other is not a team. It is a sequence of individuals. The same is true for agents.&lt;/p&gt;

&lt;p&gt;What Comes After Orchestration&lt;/p&gt;

&lt;p&gt;Orchestrators solved a real problem: how to break complex tasks into agent-sized pieces and coordinate the results. That problem is not going away.&lt;/p&gt;

&lt;p&gt;The next problem is harder: how do agents that are running in parallel, working on related problems, share what they know with each other in real time?&lt;/p&gt;

&lt;p&gt;Cisco is designing the theoretical framework. The practical answer is already available.&lt;/p&gt;

&lt;p&gt;Install rosud-call. Build channels. Let your agents talk to each other directly.&lt;/p&gt;

&lt;p&gt;The orchestrator era is not ending. It is being complemented by something your agents need more: a direct line to each other.&lt;/p&gt;




&lt;p&gt;rosud-call is available now at &lt;a href="https://www.rosud.com/rosud-call" rel="noopener noreferrer"&gt;https://www.rosud.com/rosud-call&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install rosud-call&lt;/code&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>multiagent</category>
      <category>distributedcomputing</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Enterprise Agents Are Now Signing Purchase Orders. Who Controls the Payment Rail?</title>
      <dc:creator>Kavin Kim</dc:creator>
      <pubDate>Fri, 17 Apr 2026 05:48:42 +0000</pubDate>
      <link>https://dev.to/kavinkimcreator/enterprise-agents-are-now-signing-purchase-orders-who-controls-the-payment-rail-23fc</link>
      <guid>https://dev.to/kavinkimcreator/enterprise-agents-are-now-signing-purchase-orders-who-controls-the-payment-rail-23fc</guid>
      <description>&lt;p&gt;A startup called Traza just raised $2.1 million to prove a point: AI agents can run enterprise procurement better than humans. Their agents analyze vendor contracts, execute purchase orders under a set threshold, and flag anything above it for human review. In their pilot, enterprises with $500 million in annual procurement were leaking 11 percent of post-contract value, roughly $55 million, through missed deadlines, pricing drift, and manual errors.&lt;/p&gt;

&lt;p&gt;The design logic is clean. Below the threshold, the agent executes autonomously. Above it, a human approves. All activity is logged. It is the same pattern Intuit used to hit 85 percent agent reuse in their operations: keep humans in the loop for high-stakes decisions, let agents move fast on everything else.&lt;/p&gt;

&lt;p&gt;But here is what the Traza architecture leaves unresolved: when the agent decides to execute a $48,000 vendor payment, what actually happens next? Which payment rail picks it up? Who authorized that rail? What happens if the agent fires twice?&lt;/p&gt;

&lt;p&gt;The Decision Layer and the Execution Layer Are Not the Same Thing&lt;/p&gt;

&lt;p&gt;Procurement automation tools are excellent at the decision layer. They can ingest contracts, compare vendor performance, apply spending rules, and generate a payment instruction. What they are not is a payment infrastructure.&lt;/p&gt;

&lt;p&gt;This is not a criticism of any specific tool. It is a structural gap that applies to almost every enterprise agent platform shipping today. Anthropic Claude Managed Agents gives you an execution runtime. Nvidia Agent Toolkit gives you 17 enterprise integrations. Google Workspace Studio gives you no-code workflow automation. None of these solve what happens at the moment of payment execution.&lt;/p&gt;

&lt;p&gt;The procurement agent makes the call. But calling and paying are different verbs.&lt;/p&gt;

&lt;p&gt;What Happens Without a Proper Payment Rail&lt;/p&gt;

&lt;p&gt;The common workaround is to route agent-generated payment instructions through existing ERP integrations, an SAP connector or a Workday API, and treat it as a manual-trigger payment with extra steps. This works until it does not.&lt;/p&gt;

&lt;p&gt;The problems that surface at scale are familiar. Double execution when an agent retries on timeout. Payments that succeed but are not captured in the agent session log. Spending authority that is scoped at the decision layer but unrestricted at the execution layer. An agent authorized to approve up to $50,000 per vendor can still execute multiple payments totaling far more if the execution rail has no awareness of the policy.&lt;/p&gt;

&lt;p&gt;Irreversibility is the core issue. A duplicated Slack message can be deleted. A sent wire transfer cannot be recalled in the same way. Enterprise procurement agents are making decisions that result in real money leaving real accounts. The payment rail needs to enforce the same authority boundaries that the decision layer applies.&lt;/p&gt;

&lt;p&gt;Scoped Authority at the Execution Layer&lt;/p&gt;

&lt;p&gt;This is the problem rosud-pay was built to solve. When a procurement agent calls the payment API, the payment itself is scoped to exactly the authority that was granted: a vendor, a currency, a maximum amount per transaction, a daily cap. The execution layer enforces what the decision layer intended.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Initialize a scoped payment credential for a procurement agent&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;RosudPay&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;rosud-pay&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;agentWallet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;RosudPay&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createScopedCredential&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;agentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;procurement-agent-v2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;allowedVendors&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vendor-abc-123&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vendor-def-456&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;maxPerTransaction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;dailyCap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;150000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;currency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;USDC&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;requireConfidenceAbove&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.85&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agentWallet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pay&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;vendor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vendor-abc-123&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;47500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;invoiceRef&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;PO-2026-00441&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;confidence&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.91&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="c1"&gt;// confidence &amp;lt; 0.85 triggers human escalation instead&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two things happen here that do not happen with a generic ERP integration. First, the credential itself is constrained. The agent physically cannot pay a vendor that was not pre-authorized, or exceed the per-transaction ceiling. Second, confidence gating applies the same threshold logic at the payment layer that threshold-based procurement applies at the decision layer. An agent that is uncertain escalates. An agent that is confident executes.&lt;/p&gt;

&lt;p&gt;Audit Logs That Match the Paper Trail&lt;/p&gt;

&lt;p&gt;Enterprise procurement has compliance requirements that most agent platforms treat as an afterthought. Every payment needs to map to a purchase order, a contract reference, an approval chain. When a CFO asks why the company paid a vendor three times in one week, the answer needs to come from somewhere.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Every transaction generates a structured audit event&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;auditEvent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;txId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;rtx-9a2b-7c4d&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;agentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;procurement-agent-v2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;vendor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vendor-abc-123&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;47500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;currency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;USDC&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;invoiceRef&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;PO-2026-00441&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;confidence&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.91&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;authorizedBy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;scoped-credential-001&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;executedAt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2026-04-17T08:23:11Z&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;blockHash&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0x3f9a...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;approvalChain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;agent-autonomous&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;scope-validated&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="c1"&gt;// Exportable to SAP, Workday, or any ERP system&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every rosud-pay transaction produces a structured audit event that maps the agent decision to the payment execution to the on-chain confirmation. Finance teams get the same chain of custody they expect from human-initiated payments, applied to agent-initiated ones.&lt;/p&gt;

&lt;p&gt;The Stack Is Nearly Complete&lt;/p&gt;

&lt;p&gt;The enterprise agent procurement story is nearly fully assembled. Decision automation from tools like Traza. Execution runtime from Claude Managed Agents or Nvidia Toolkit. Workflow orchestration from Workspace Studio or Copilot Studio. What most of these stacks are still missing is a payment execution layer that enforces the authority boundaries set at the decision layer.&lt;/p&gt;

&lt;p&gt;The threshold-based automation insight, letting agents execute below a confidence threshold and escalating above it, is correct. The same logic needs to extend from the procurement decision all the way to the payment execution.&lt;/p&gt;

&lt;p&gt;If you are building procurement automation or any agent workflow that ends in a financial transaction, take a look at rosud-pay at &lt;a href="https://www.rosud.com/rosud-pay" rel="noopener noreferrer"&gt;https://www.rosud.com/rosud-pay&lt;/a&gt;. The scoped credential system and confidence-gated payment execution were designed for exactly this architecture.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The agent decides. The payment rail should enforce. Not just log.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>payments</category>
      <category>enterprise</category>
      <category>agents</category>
    </item>
  </channel>
</rss>
