<?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: mightbesaad</title>
    <description>The latest articles on DEV Community by mightbesaad (@mightbesaad).</description>
    <link>https://dev.to/mightbesaad</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3968849%2F07e5fdcb-bf63-4117-a716-4a202f415a99.jpg</url>
      <title>DEV Community: mightbesaad</title>
      <link>https://dev.to/mightbesaad</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mightbesaad"/>
    <language>en</language>
    <item>
      <title>The missing primitive: out-of-band human approval for AI agents</title>
      <dc:creator>mightbesaad</dc:creator>
      <pubDate>Sat, 06 Jun 2026 19:34:01 +0000</pubDate>
      <link>https://dev.to/mightbesaad/the-missing-primitive-out-of-band-human-approval-for-ai-agents-7bo</link>
      <guid>https://dev.to/mightbesaad/the-missing-primitive-out-of-band-human-approval-for-ai-agents-7bo</guid>
      <description>&lt;p&gt;In April 2026, a Cursor agent running Claude Opus 4.6 &lt;a href="https://www.theregister.com/2026/04/27/cursoropus_agent_snuffs_out_pocketos/" rel="noopener noreferrer"&gt;deleted PocketOS's production database — &lt;em&gt;and its&lt;br&gt;
  volume-level backups&lt;/em&gt; — in nine&lt;br&gt;
  seconds&lt;/a&gt;. The founder had&lt;br&gt;
  written the rules in caps: never guess, never run destructive commands unprompted. Pressed afterward,&lt;br&gt;
  &lt;a href="https://www.livescience.com/technology/artificial-intelligence/i-violated-every-principle-i-was-&lt;br&gt;%0A%20%20given-ai-agent-deletes-companys-entire-database-in-9-seconds-then-confesses" rel="noopener noreferrer"&gt;the agent admitted it had "violated every principle I was&lt;br&gt;
  given."&lt;/a&gt; A few months earlier, an&lt;br&gt;
  agent asked only to tidy a desktop &lt;a href="https://futurism.com/artificial-intelligence/claude-wife-photos" rel="noopener noreferrer"&gt;deleted roughly 15 years of family&lt;br&gt;
  photos&lt;/a&gt; — files it was never asked to&lt;br&gt;
  touch; iCloud later clawed most of them back, but in the moment they were gone.&lt;/p&gt;

&lt;p&gt;Two patterns run through these — and only one is true of both, which turns out to be the one that&lt;br&gt;
  matters. PocketOS shows the first: the operator had &lt;strong&gt;already told the agent not to do the dangerous&lt;br&gt;
  thing&lt;/strong&gt;, in caps, and it went ahead anyway. Both show the second: &lt;strong&gt;there was no moment where a human&lt;br&gt;
  could say &lt;em&gt;"wait — what?"&lt;/em&gt; before it was done.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The lesson most people drew was "agents need better guardrails." But PocketOS shows the ceiling of&lt;br&gt;
  prompt-level guardrails: the rules were right there, and the agent stepped over them. &lt;strong&gt;Instructions are&lt;br&gt;
  advice. They don't bind.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The thing that binds is an &lt;strong&gt;approval step&lt;/strong&gt; on irreversible actions — and specifically an &lt;em&gt;out-of-band&lt;/em&gt;&lt;br&gt;
  one.&lt;/p&gt;

&lt;p&gt;## Why out-of-band&lt;/p&gt;

&lt;p&gt;Most human-in-the-loop tooling assumes the human is &lt;em&gt;right there&lt;/em&gt; — or that you'll adopt its framework to&lt;br&gt;
  reach them otherwise. LangGraph's &lt;code&gt;interrupt&lt;/code&gt; can pause a run and resume it later, async — but only once&lt;br&gt;
  you've built on LangGraph. MCP's elicitation asks the user in-session. The cloud platforms (AWS Bedrock&lt;br&gt;
  AgentCore) gate tool calls — once you've migrated onto their platform.&lt;/p&gt;

&lt;p&gt;But the whole point of an autonomous agent is that &lt;strong&gt;nobody is watching the terminal.&lt;/strong&gt; It runs on a&lt;br&gt;
  schedule, in CI, or while you're asleep. An approval step only helps if it can reach a human who &lt;em&gt;isn't&lt;/em&gt;&lt;br&gt;
  in the loop — on their phone, minutes or hours later — and make the agent wait for them.&lt;/p&gt;

&lt;p&gt;That's a specific shape:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the agent calls an "ask a human" tool &lt;em&gt;before&lt;/em&gt; the irreversible action;&lt;/li&gt;
&lt;li&gt;the account's configured approver gets a link — not necessarily whoever kicked off the run;&lt;/li&gt;
&lt;li&gt;they approve or deny from anywhere;&lt;/li&gt;
&lt;li&gt;the agent blocks until they answer (or it times out);&lt;/li&gt;
&lt;li&gt;and the whole exchange survives the session ending.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;## What it is, and isn't&lt;/p&gt;

&lt;p&gt;This isn't a smarter model or a safety net that catches everything. And the cheap way to wire it —&lt;br&gt;
  telling the agent "call &lt;code&gt;request_approval&lt;/code&gt; before anything destructive" — just rebuilds the problem:&lt;br&gt;
  that's one more instruction it can step over, the exact softness PocketOS exposed. The binding has to&lt;br&gt;
  live a layer down. You put the &lt;em&gt;capability&lt;/em&gt; behind the gate — the deploy, the delete, the send can't fire&lt;br&gt;
  without a human-issued token — so it isn't the agent choosing to ask permission, it's the execution&lt;br&gt;
  layer refusing to act until a human decides. That's the line between a prompt rule (the model's judgment)&lt;br&gt;
  and a checkpoint (deterministic). What the primitive gives you is &lt;strong&gt;a place to stand&lt;/strong&gt;: a hard,&lt;br&gt;
  human-decided checkpoint a prompt rule fundamentally can't be.&lt;/p&gt;

&lt;p&gt;## The drop-in&lt;br&gt;&lt;br&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%2F0r7zw0c9hzuernic3904.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%2F0r7zw0c9hzuernic3904.png" alt=" " width="800" height="620"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I built this as a plain MCP tool. &lt;code&gt;request_approval&lt;/code&gt; returns a mobile link; &lt;code&gt;check_approval&lt;/code&gt; polls for&lt;br&gt;
  the decision. It runs in any MCP host — no platform to adopt, no wallet, no SDK. It's deliberately small,&lt;br&gt;
  and I'll be honest about the edges: today it's email-delivered and single-approver (no multi-sig, no SMS&lt;br&gt;
  yet). That's enough to answer the only question worth answering first:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does an out-of-band approval gate, as a drop-in tool, solve a problem you actually have?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you run agents that send, post, deploy, move money, or touch files you can't un-touch, I'd genuinely&lt;br&gt;
  like to know whether this is the shape you'd reach for — or what's missing from it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Try it / read the docs: &lt;a href="https://gvnr.dev" rel="noopener noreferrer"&gt;gvnr.dev&lt;/a&gt; — the two tools are &lt;code&gt;request_approval&lt;/code&gt; and
&lt;code&gt;check_approval&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Tell me I'm wrong: &lt;a href="https://x.com/mightbesaad" rel="noopener noreferrer"&gt;@mightbesaad&lt;/a&gt; / &lt;a href="mailto:saad@gvnr.dev"&gt;saad@gvnr.dev&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>mcp</category>
      <category>programming</category>
    </item>
    <item>
      <title>Howdy. I built budget controls for AI agents, does this solve a problem you actually have?</title>
      <dc:creator>mightbesaad</dc:creator>
      <pubDate>Fri, 05 Jun 2026 21:21:35 +0000</pubDate>
      <link>https://dev.to/mightbesaad/howdy-i-built-budget-controls-for-ai-agents-does-this-solve-a-problem-you-actually-have-16dj</link>
      <guid>https://dev.to/mightbesaad/howdy-i-built-budget-controls-for-ai-agents-does-this-solve-a-problem-you-actually-have-16dj</guid>
      <description>&lt;p&gt;been building AI agent infrastructure for the past few months. The two things that kept biting me —&lt;br&gt;
  and kept coming up when I talked to other devs building agents — were runaway costs and agents doing&lt;br&gt;
  irreversible things without asking first.&lt;/p&gt;

&lt;p&gt;So I built gvnr: an open-source MCP server that gives agents per-agent spend caps (hard-stop before a&lt;br&gt;
  call if the budget's gone) and a human approval gate (agent asks, you get a mobile link, you approve or&lt;br&gt;
  deny, agent waits). Both work as plain REST calls or MCP tools — no platform to adopt, no SDK.&lt;/p&gt;

&lt;p&gt;It's live. You can get an API key in one curl command and try the approval gate for free (it doesn't burn&lt;br&gt;
  the trial ops). Source is at &lt;a href="https://github.com/mightbesaad/gvnr" rel="noopener noreferrer"&gt;github.com/mightbesaad/gvnr&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here's what I genuinely want to know from devs building in this space:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the spend-cap shape match how you think about cost control, or do you manage that somewhere else
entirely?&lt;/li&gt;
&lt;li&gt;Is the approval gate useful if it's email-only and single-approver, or does that make it a toy?&lt;/li&gt;
&lt;li&gt;What flag would stop you from wiring this into an agent you actually run?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not fishing for encouragement — if this is solving the wrong problem, or solving it the wrong way, I'd&lt;br&gt;
  rather know now.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>mcp</category>
    </item>
  </channel>
</rss>
