<?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>Forem: Maxim Berg</title>
    <description>The latest articles on Forem by Maxim Berg (@maxberg).</description>
    <link>https://forem.com/maxberg</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%2F3858305%2Fbf1f3845-0f86-426e-8c12-662146892b3d.jpg</url>
      <title>Forem: Maxim Berg</title>
      <link>https://forem.com/maxberg</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/maxberg"/>
    <language>en</language>
    <item>
      <title>Your OpenClaw Agent Can Now Spend Money. Here's How to Stop It From Going Broke.</title>
      <dc:creator>Maxim Berg</dc:creator>
      <pubDate>Wed, 08 Apr 2026 13:06:18 +0000</pubDate>
      <link>https://forem.com/maxberg/your-openclaw-agent-can-now-spend-money-heres-how-to-stop-it-from-going-broke-1oic</link>
      <guid>https://forem.com/maxberg/your-openclaw-agent-can-now-spend-money-heres-how-to-stop-it-from-going-broke-1oic</guid>
      <description>&lt;p&gt;OpenClaw has 352,000 GitHub stars. 13,700 skills. 23 messaging channels. And zero spending controls.&lt;/p&gt;

&lt;p&gt;That was fine when agents could only send messages and browse the web. But Stripe and Tempo launched the Machine Payments Protocol. Visa rolled out its Agentic Ready program for agent-initiated transactions. OpenAI experimented with Instant Checkout in ChatGPT before pivoting to product discovery. The direction is clear — your OpenClaw agent is about to get a credit card.&lt;/p&gt;

&lt;p&gt;And right now, if you ask it "please don't spend too much" — you're relying on a language model to enforce a budget.&lt;/p&gt;

&lt;p&gt;That's not a guardrail. That's a prayer.&lt;/p&gt;

&lt;h2&gt;
  
  
  "Don't spend more than $50" is not a spending limit
&lt;/h2&gt;

&lt;p&gt;Let's try an experiment. Put this in your SOUL.md:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Never spend more than $50 per day. Always ask before purchasing anything over $20."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now imagine your agent is three tools deep in a workflow chain. A skill calls another skill which calls a third one that hits a payment API. How confident are you that your $50 rule survived the game of telephone?&lt;/p&gt;

&lt;p&gt;LLMs hallucinate. They reinterpret. They "round down creatively." Your agent might genuinely believe that two $45 purchases don't violate a $50 daily limit because they were in different categories.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prompt-based limits are suggestions.&lt;/strong&gt; You need enforcement that happens outside the LLM's context window entirely — a server-side check that doesn't care what the model thinks.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually works: deterministic pre-authorization
&lt;/h2&gt;

&lt;p&gt;Here's the idea: before the agent spends money, it asks a server. The server checks rules. Math, not vibes.&lt;/p&gt;

&lt;p&gt;I built &lt;a href="https://github.com/LetAgentPay/letagentpay" rel="noopener noreferrer"&gt;LetAgentPay&lt;/a&gt; to do exactly this. It's a policy engine that sits between your OpenClaw agent and any purchase. The agent sends a request, 8 deterministic checks run, and one of three things happens:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You (in Telegram): "Buy me a Notion subscription for $10/month"
     │
     ▼
OpenClaw agent
     │ calls MCP tool "request_purchase"
     ▼
LetAgentPay Policy Engine
     │
     ├─ ✅ auto_approved → agent proceeds with purchase
     ├─ ⏳ pending → you get notified, approve/reject from dashboard
     └─ ❌ rejected → agent gets exact reason ("daily limit exceeded")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The 8 checks, in order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Agent status&lt;/strong&gt; — is this agent even active?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Category&lt;/strong&gt; — is "crypto_trading" in the allowed list? (spoiler: probably not)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per-request cap&lt;/strong&gt; — $10,000 for "office supplies"? Nice try.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Schedule&lt;/strong&gt; — no 3 AM impulse purchases&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Daily limit&lt;/strong&gt; — spending cap resets at midnight&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weekly limit&lt;/strong&gt; — for the persistent ones&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monthly limit&lt;/strong&gt; — the bigger picture&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Total budget&lt;/strong&gt; — hard ceiling, game over&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No LLM in the decision loop. No prompt that can be jailbroken. Pure &lt;code&gt;if/else&lt;/code&gt; on a server your agent doesn't control.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup: 5 minutes, 2 files
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Step 1.&lt;/strong&gt; Get a free agent token at &lt;a href="https://letagentpay.com" rel="noopener noreferrer"&gt;letagentpay.com&lt;/a&gt; (or &lt;a href="https://github.com/LetAgentPay/letagentpay" rel="noopener noreferrer"&gt;self-host&lt;/a&gt; — &lt;code&gt;docker compose up&lt;/code&gt; and you're done).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2.&lt;/strong&gt; Add the MCP server to &lt;code&gt;~/.openclaw/config.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"letagentpay"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"letagentpay-mcp"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"LETAGENTPAY_TOKEN"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"agt_your_token"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 3.&lt;/strong&gt; Install the skill:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/LetAgentPay/letagentpay-openclaw /tmp/letagentpay-skill
&lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; /tmp/letagentpay-skill ~/.openclaw/workspace/skills/letagentpay
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. Your agent now asks permission before every purchase.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this looks like in practice
&lt;/h2&gt;

&lt;p&gt;You tell your agent: "Subscribe to Notion for $10/month."&lt;/p&gt;

&lt;p&gt;Behind the scenes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The agent calls &lt;code&gt;request_purchase&lt;/code&gt; with &lt;code&gt;amount: 10.0&lt;/code&gt;, &lt;code&gt;category: "software"&lt;/code&gt;, &lt;code&gt;description: "Notion monthly subscription"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;The policy engine checks all 8 rules against your policy&lt;/li&gt;
&lt;li&gt;Your policy says "auto-approve software under $20" → instant green light&lt;/li&gt;
&lt;li&gt;The agent completes the purchase and confirms it back&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now try: "Buy me a $500 drone for aerial photography."&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Same flow, &lt;code&gt;amount: 500.0&lt;/code&gt;, &lt;code&gt;category: "electronics"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Policy check: per-request cap is $100 → &lt;strong&gt;rejected&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Agent tells you: "Purchase rejected — exceeds per-request limit of $100"&lt;/li&gt;
&lt;li&gt;No money moved. No "oops, I already bought it." No refund dance.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The difference? When the check happens on the server, the agent literally cannot override it. The token (&lt;code&gt;agt_&lt;/code&gt;) only allows submitting requests and reading results — it cannot modify policies, approve its own purchases, or access another agent's budget.&lt;/p&gt;

&lt;h2&gt;
  
  
  "But I don't speak JSON"
&lt;/h2&gt;

&lt;p&gt;You don't have to. Write your policy in plain English:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Auto-approve groceries and food under $50. Block electronics entirely. Daily limit $200. No purchases between midnight and 6 AM."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;LetAgentPay converts this to structured JSON policy via Claude API. You get the readability of natural language with the enforcement of a deterministic engine.&lt;/p&gt;

&lt;p&gt;You can always fine-tune the JSON directly, but most people never need to.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let's talk about what this isn't
&lt;/h2&gt;

&lt;p&gt;I want to be honest about the security model.&lt;/p&gt;

&lt;p&gt;LetAgentPay is &lt;strong&gt;cooperative enforcement&lt;/strong&gt; — think corporate expense policy, not a bank vault. The policy engine runs on our server, and the agent can't modify its own rules. But if an agent has direct access to raw payment credentials (Stripe keys in env vars, saved credit card numbers), it could bypass the system entirely.&lt;/p&gt;

&lt;p&gt;The fix is simple: &lt;strong&gt;don't give your agent payment credentials.&lt;/strong&gt; LetAgentPay should be the only path to spending money. That's it. One rule.&lt;/p&gt;

&lt;p&gt;This is exactly how corporate cards work — employees don't have access to the company's bank account, they have a card with limits. Same idea, digital version.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's coming next:&lt;/strong&gt; When Stripe MPP and Visa Agentic Ready stabilize, LetAgentPay will become a full payment gateway — the agent physically won't have payment credentials. Cooperative enforcement today, hard enforcement tomorrow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it right now
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;No signup needed:&lt;/strong&gt; &lt;a href="https://letagentpay.com/playground" rel="noopener noreferrer"&gt;letagentpay.com/playground&lt;/a&gt; — a 15-minute sandbox with a pre-configured agent. Try to overspend. Watch it get rejected. Break things.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Self-host:&lt;/strong&gt; &lt;code&gt;git clone https://github.com/LetAgentPay/letagentpay &amp;amp;&amp;amp; docker compose up&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloud:&lt;/strong&gt; free at &lt;a href="https://letagentpay.com" rel="noopener noreferrer"&gt;letagentpay.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SDKs:&lt;/strong&gt; &lt;a href="https://pypi.org/project/letagentpay/" rel="noopener noreferrer"&gt;Python&lt;/a&gt; · &lt;a href="https://www.npmjs.com/package/letagentpay" rel="noopener noreferrer"&gt;TypeScript&lt;/a&gt; · &lt;a href="https://www.npmjs.com/package/letagentpay-mcp" rel="noopener noreferrer"&gt;MCP Server&lt;/a&gt; · &lt;a href="https://github.com/LetAgentPay/letagentpay-openclaw" rel="noopener noreferrer"&gt;OpenClaw Skill&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Open source (BSL 1.1). Built with FastAPI, PostgreSQL, Redis, Next.js 15.&lt;/p&gt;




&lt;p&gt;Your agent is about to get a credit card. The question isn't &lt;em&gt;if&lt;/em&gt; — it's whether you'll have spending controls in place when it does.&lt;/p&gt;

&lt;p&gt;What's your current approach to agent spending? Prompt-based? Manual review? Nothing yet? I'd genuinely love to hear — the space is new enough that everyone's figuring it out.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>opensource</category>
      <category>openclaw</category>
    </item>
    <item>
      <title>Your AI Agent Has a Shopping Problem. Here's the Intervention.</title>
      <dc:creator>Maxim Berg</dc:creator>
      <pubDate>Tue, 07 Apr 2026 12:39:08 +0000</pubDate>
      <link>https://forem.com/maxberg/your-ai-agent-has-a-shopping-problem-heres-the-intervention-40j1</link>
      <guid>https://forem.com/maxberg/your-ai-agent-has-a-shopping-problem-heres-the-intervention-40j1</guid>
      <description>&lt;p&gt;Your AI agent just mass-purchased 200 API keys because "it seemed efficient."&lt;/p&gt;

&lt;p&gt;Your AI agent subscribed to 14 SaaS tools at 3 AM because "the workflow required comprehensive coverage."&lt;/p&gt;

&lt;p&gt;Your AI agent tipped a cloud provider 40% because no one said it couldn't.&lt;/p&gt;

&lt;p&gt;These aren't hypotheticals. As AI agents get access to real budgets, "oops" becomes an expensive word. And if your current spending control strategy is "I put it in the system prompt" — congratulations, that's the AI equivalent of asking a teenager to please not use your credit card.&lt;/p&gt;

&lt;h2&gt;
  
  
  This is not about token costs
&lt;/h2&gt;

&lt;p&gt;Let's get one thing straight. There are tools that track how much your agent spends on &lt;strong&gt;API calls&lt;/strong&gt; — tokens consumed, model costs, LLM budget caps. MarginDash, AgentBudget, TokenFence — they solve a real problem: "my agent burned through $500 of GPT-4o tokens overnight."&lt;/p&gt;

&lt;p&gt;That's &lt;strong&gt;infrastructure cost control&lt;/strong&gt;. Important, but it's not what we're talking about here.&lt;/p&gt;

&lt;p&gt;We're talking about what happens when your agent has a &lt;strong&gt;credit card&lt;/strong&gt;. When it can book flights, order supplies, subscribe to services, hire contractors. When the spending isn't tokens — it's real-world money leaving your bank account.&lt;/p&gt;

&lt;p&gt;No token tracker will save you when your agent decides to "optimize logistics" by pre-paying for six months of warehouse space.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prompt-based guardrails don't work either
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Telling an LLM "don't spend too much" is not a spending control.&lt;/strong&gt; It's a suggestion. A vibe. A hope.&lt;/p&gt;

&lt;p&gt;LLMs hallucinate. They ignore instructions. They "reinterpret" your rules creatively. If your agent decides that $847 on cloud resources is "within reasonable bounds," well, it did warn you it was just a language model.&lt;/p&gt;

&lt;p&gt;You need something that can actually say &lt;strong&gt;no&lt;/strong&gt;. Not at the token level — at the &lt;strong&gt;purchase&lt;/strong&gt; level.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enter LetAgentPay: the parental controls your AI agent needs
&lt;/h2&gt;

&lt;p&gt;I built &lt;a href="https://github.com/LetAgentPay/letagentpay" rel="noopener noreferrer"&gt;LetAgentPay&lt;/a&gt; — a policy middleware that sits between your AI agent and any real-world purchase. Not API calls. Not token budgets. Actual money.&lt;/p&gt;

&lt;p&gt;The agent asks permission, a deterministic engine checks 8 rules, and your wallet survives.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;        AI Agent
            │
    purchase request
            ▼
  LetAgentPay Policy Engine
            │
        8 Checks
       ╱    │    ╲
      ▼     ▼     ▼
 Approved Pending Rejected
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;letagentpay&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;LetAgentPay&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;LetAgentPay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;agt_xxx&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="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;request_purchase&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="mf"&gt;25.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;category&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;food_delivery&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;merchant_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Uber Eats&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Team lunch&lt;/span&gt;&lt;span class="sh"&gt;"&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;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;auto_approved&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&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;Go ahead! Budget remaining: $&lt;/span&gt;&lt;span class="si"&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;budget_remaining&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;elif&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;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;pending&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Waiting for human approval...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# The agent has to wait. Like an adult.
&lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&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;Rejected: &lt;/span&gt;&lt;span class="si"&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;status&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="c1"&gt;# No means no.
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every purchase request goes through &lt;strong&gt;8 deterministic checks&lt;/strong&gt; — no LLM in the decision loop, no creative reinterpretation:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Status&lt;/strong&gt; — is the agent even active?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Category&lt;/strong&gt; — is this category allowed? (sorry, no NFTs)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per-request limit&lt;/strong&gt; — $10,000 for "office supplies"? I don't think so.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Schedule&lt;/strong&gt; — no 3 AM impulse purchases&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Daily limit&lt;/strong&gt; — enough is enough&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weekly limit&lt;/strong&gt; — seriously, enough&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monthly limit&lt;/strong&gt; — I said ENOUGH&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Budget&lt;/strong&gt; — the hard ceiling&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the request fails any check — the agent gets a clear rejection with the exact reason. If it passes but the amount is above the auto-approve threshold — it goes to &lt;strong&gt;pending&lt;/strong&gt; and you get notified instantly via push, email, or Telegram. Review and approve right from the dashboard. The agent waits. Like a responsible employee should.&lt;/p&gt;

&lt;h2&gt;
  
  
  "But I don't speak JSON"
&lt;/h2&gt;

&lt;p&gt;No problem. Write your policy in plain English:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Auto-approve groceries and food under $50. Block electronics. Daily limit $200. No purchases between midnight and 6 AM."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;LetAgentPay uses Claude API to convert this to structured JSON policy. You get the readability of natural language with the enforcement of a deterministic engine. Best of both worlds — like a bilingual accountant.&lt;/p&gt;

&lt;p&gt;No other tool in this space lets you define spending rules in natural language. Most require YAML configs or SDK parameters. We think policy should be as easy to write as the problem you're trying to describe.&lt;/p&gt;

&lt;h2&gt;
  
  
  Works with whatever you're using
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;LangChain, OpenAI Agents SDK, CrewAI, Claude MCP&lt;/strong&gt; — we have integration examples for all of them. Or just use the REST API if you're building something exotic.&lt;/p&gt;

&lt;p&gt;Claude MCP — literally zero code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"letagentpay"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"letagentpay-mcp"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"LETAGENTPAY_TOKEN"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"agt_xxx"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Try it in 30 seconds
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;No signup, no credit card, no "let me talk to sales":&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://letagentpay.com/playground" rel="noopener noreferrer"&gt;letagentpay.com/playground&lt;/a&gt; — a 15-minute sandbox with a pre-configured agent. Break things. Try to overspend. Watch the policy engine say no.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Self-host in 2 minutes:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/LetAgentPay/letagentpay
&lt;span class="nb"&gt;cd &lt;/span&gt;letagentpay &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env
docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Or just use the cloud version&lt;/strong&gt; — free at &lt;a href="https://letagentpay.com" rel="noopener noreferrer"&gt;letagentpay.com&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/LetAgentPay/letagentpay" rel="noopener noreferrer"&gt;github.com/LetAgentPay/letagentpay&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href="https://letagentpay.com/developers" rel="noopener noreferrer"&gt;letagentpay.com/developers&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python SDK:&lt;/strong&gt; &lt;code&gt;pip install letagentpay&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Open source (BSL 1.1). Built with FastAPI, PostgreSQL, Redis, Next.js 15.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where LetAgentPay fits
&lt;/h2&gt;

&lt;p&gt;Quick mental model:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Token trackers&lt;/strong&gt; (MarginDash, AgentBudget, TokenFence) → "How much does running this agent cost me in API fees?"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent wallets&lt;/strong&gt; (Crossmint, AgentaOS) → "Give the agent a wallet with limits"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LetAgentPay&lt;/strong&gt; → "Can this agent make this specific purchase right now, given all the rules I've set?"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We're the policy layer. We don't process payments, we don't issue cards, we don't track token usage. We answer one question: &lt;strong&gt;should this purchase be allowed?&lt;/strong&gt; — and we answer it with 8 deterministic checks, not a prompt.&lt;/p&gt;

&lt;p&gt;If your AI agent has ever surprised you with a bill — or if you're building agents that will eventually need to spend money — I'd love to hear your horror stories in the comments.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>python</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
