<?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: dino</title>
    <description>The latest articles on DEV Community by dino (@digit500).</description>
    <link>https://dev.to/digit500</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%2F4023394%2F959be279-9920-4510-afb8-b4e9d6f6afc1.png</url>
      <title>DEV Community: dino</title>
      <link>https://dev.to/digit500</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/digit500"/>
    <language>en</language>
    <item>
      <title>Your AI agent deployed the app. Did it tell you the link expires?</title>
      <dc:creator>dino</dc:creator>
      <pubDate>Tue, 21 Jul 2026 04:41:09 +0000</pubDate>
      <link>https://dev.to/digit500/your-ai-agent-deployed-the-app-did-it-tell-you-the-link-expires-2ffm</link>
      <guid>https://dev.to/digit500/your-ai-agent-deployed-the-app-did-it-tell-you-the-link-expires-2ffm</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; I'm the maker of &lt;a href="https://openpouch.dev" rel="noopener noreferrer"&gt;openpouch&lt;/a&gt;. This post is about an agent-UX lesson we learned from our first real user — honest limits included. Feedback very welcome.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Our first real user never opened our website. He talks to his coding agent; the agent deploys with openpouch; he gets a link. Exactly how it should work — &lt;strong&gt;the agent is the only UI&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Three days later his app was gone.&lt;/p&gt;

&lt;p&gt;Nothing crashed. Anonymous previews expire after 72 hours — that's the free tier, and it's documented everywhere an agent looks: the CLI result, the JSON, the docs, &lt;code&gt;llms.txt&lt;/code&gt;. The agent &lt;em&gt;knew&lt;/em&gt;. It just never told &lt;strong&gt;him&lt;/strong&gt;. When the deploy succeeded, the agent summarized the exciting part ("Your app is live! 🎉 Here's the link") and dropped the boring part (expiry date, how to keep it). The human learned about the 72-hour rule the hard way: by watching his app 404.&lt;/p&gt;

&lt;p&gt;He told us (translated): &lt;em&gt;"The AI has to actively spit that out at me — how long it's valid, and what my options are. Otherwise how would I ever know?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;He's right. And the fix turned out to be an interesting API-design lesson for anyone building tools that agents — not humans — consume.&lt;/p&gt;

&lt;h2&gt;
  
  
  The relay gap
&lt;/h2&gt;

&lt;p&gt;When a human uses your CLI, your output IS the UI. When an &lt;em&gt;agent&lt;/em&gt; uses your CLI, your output is &lt;strong&gt;raw material for a summary you don't control&lt;/strong&gt;. Agents compress. They keep what looks like the point (the URL) and cut what looks like boilerplate (the caveats). We had tested this across several coding agents: the expiry info was reliably &lt;em&gt;read&lt;/em&gt; — and unreliably &lt;em&gt;relayed&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;You can't fix that with more docs. The agent already read the docs. You have to design the response so that relaying is the path of least resistance.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fix: a field whose name is the instruction
&lt;/h2&gt;

&lt;p&gt;Since &lt;code&gt;openpouch@0.3.3&lt;/code&gt;, a healthy deploy result carries a top-level field called &lt;code&gt;tellYourUser&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json-doc"&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;"ok"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://sunny-otter-x4kq.openpouch.sh"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"healthStatus"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"healthy"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"deployment"&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;"expiresAt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-07-19T09:12:44.000Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"ownership"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"anonymous"&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;"tellYourUser"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Your app is live at https://sunny-otter-x4kq.openpouch.sh. It's a free preview and expires on Sat, Jul 19, 2026 (UTC). To keep it: save it to a free account, redeploy any time, or upgrade for apps that stay up while they're used (paid plans from $15/month — openpouch.dev/pricing). Doing nothing is fine too — it just expires."&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;Design decisions that matter more than they look:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The field name is imperative.&lt;/strong&gt; Not &lt;code&gt;notice&lt;/code&gt;, not &lt;code&gt;meta.expiry&lt;/code&gt; — &lt;code&gt;tellYourUser&lt;/code&gt;. An agent deciding what to do with this field has the answer &lt;em&gt;in the key itself&lt;/em&gt;. This is the whole trick: schema as instruction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's pre-written, ready to relay.&lt;/strong&gt; No assembly required. An agent can paste it verbatim into its summary — least-resistance path. Plain language, no jargon, exact date instead of "72 hours" (a human shouldn't have to do date math).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It only appears on healthy deploys.&lt;/strong&gt; A degraded app must not produce a cheerful hand-off block — absence is also a signal.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It never contains the claim link.&lt;/strong&gt; The claim URL is a capability token (whoever has it can take the preview). It stays in a private local file; the hand-off text describes the &lt;em&gt;ways&lt;/em&gt; to keep the app, not the secret.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;All options, including "do nothing".&lt;/strong&gt; Expiry pressure without an exit is a dark pattern. "Doing nothing is fine too" is in there on purpose — the user asked for the options &lt;em&gt;"so I can think about it"&lt;/em&gt;, not for a countdown.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Days after shipping it, the same user's agent told him the exact expiry date, unprompted, twice. His review: &lt;em&gt;"the warning is still there … better."&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The generalizable lesson
&lt;/h2&gt;

&lt;p&gt;If agents consume your API, assume three things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Your response is a hand-off, not a display.&lt;/strong&gt; Somewhere behind the agent is a human who will get a &lt;em&gt;summary&lt;/em&gt; of your output. Decide what must survive that summary, and package it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Name fields like instructions when you need behavior.&lt;/strong&gt; &lt;code&gt;tellYourUser&lt;/code&gt;, &lt;code&gt;nextCommands&lt;/code&gt;, &lt;code&gt;suggestedCommand&lt;/code&gt; outperform &lt;code&gt;metadata&lt;/code&gt;, &lt;code&gt;info&lt;/code&gt;, &lt;code&gt;details&lt;/code&gt;. Agents act on affordances.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Machine-truth next to human-truth.&lt;/strong&gt; The same result carries &lt;code&gt;deployment.expiresAt&lt;/code&gt; (ISO, for logic) &lt;em&gt;and&lt;/em&gt; the friendly sentence (for relaying). Never make an agent choose between parsing and explaining.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this is openpouch-specific. If you're building a payments CLI, a migration tool, a cron service — anything an agent operates on a human's behalf — the relay gap applies to you.&lt;/p&gt;

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

&lt;p&gt;The whole thing works without an account (that's the point):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx openpouch deploy &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;--json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or as native MCP tools in Claude Code (every capability typed, deliberately no &lt;code&gt;approve&lt;/code&gt; — production stays human-gated):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add openpouch &lt;span class="nt"&gt;--&lt;/span&gt; npx &lt;span class="nt"&gt;-y&lt;/span&gt; @openpouch/mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The relay lesson kept paying off, by the way: the newest fields follow the same pattern. &lt;code&gt;deploy --app &amp;lt;name&amp;gt;&lt;/code&gt; gives an app &lt;strong&gt;one stable URL across all future redeploys&lt;/strong&gt; — and the result says &lt;code&gt;urlStability: "stable"&lt;/code&gt; so the agent can tell its user "the link you shared keeps working" instead of guessing. &lt;code&gt;data push&lt;/code&gt;/&lt;code&gt;data pull&lt;/code&gt; move real files in and out of an app's persistent volume, which turns "migrate my app and keep the data" into something an agent can genuinely finish.&lt;/p&gt;

&lt;p&gt;Honest limits, current as of July 2026: Node/static only (no Python runtime yet), no custom domains yet, anonymous previews expire after 72h (accounts keep apps alive while they're used; stable-URL apps and persistent volumes are account features). Everything is open source (Apache-2.0): &lt;a href="https://github.com/openpouch/openpouch" rel="noopener noreferrer"&gt;https://github.com/openpouch/openpouch&lt;/a&gt; — and the agent-facing entry point is &lt;a href="https://openpouch.dev/llms.txt" rel="noopener noreferrer"&gt;https://openpouch.dev/llms.txt&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What would you put in &lt;code&gt;tellYourUser&lt;/code&gt;? And what's the field you wish agent-facing tools shipped?&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>automation</category>
      <category>mcp</category>
    </item>
    <item>
      <title>Deploy an app from Claude Code in 60 seconds — no dashboard, no CAPTCHA</title>
      <dc:creator>dino</dc:creator>
      <pubDate>Fri, 10 Jul 2026 03:23:50 +0000</pubDate>
      <link>https://dev.to/digit500/deploy-an-app-from-claude-code-in-60-seconds-no-dashboard-no-captcha-hf8</link>
      <guid>https://dev.to/digit500/deploy-an-app-from-claude-code-in-60-seconds-no-dashboard-no-captcha-hf8</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; I'm the maker of openpouch. This is a how-to, written honestly — it's a technical preview and I'll be clear about the limits. Feedback very welcome.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Your coding agent can write the app. It can write the tests. Then it hits &lt;strong&gt;deploy&lt;/strong&gt; — and the cloud asks it to click a fire hydrant.&lt;/p&gt;

&lt;p&gt;That's the thing nobody designed for: every deploy target assumes a &lt;em&gt;human&lt;/em&gt; at a browser. CAPTCHAs, "verify you're human", dashboard-only toggles, OAuth flows that dead-end in a headless tab. An agent that can ship software can't get past a bot-wall built to stop bots.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://openpouch.dev" rel="noopener noreferrer"&gt;openpouch&lt;/a&gt; is the opposite of that: one command to a live URL, no account, no dashboard, no human-verification step anywhere. It ships as a CLI &lt;strong&gt;and&lt;/strong&gt; an MCP server, so it drops into Claude Code (or Cursor, Codex, OpenClaw, …) as native tools. Here's the 60-second version from Claude Code.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Add the MCP server
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add openpouch &lt;span class="nt"&gt;--&lt;/span&gt; npx &lt;span class="nt"&gt;-y&lt;/span&gt; @openpouch/mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it — a zero-dependency stdio MCP server, pulled on demand via &lt;code&gt;npx&lt;/code&gt;. It exposes the full deploy lifecycle as &lt;strong&gt;13 tools&lt;/strong&gt; (&lt;code&gt;openpouch_deploy&lt;/code&gt;, &lt;code&gt;openpouch_verify&lt;/code&gt;, &lt;code&gt;openpouch_logs&lt;/code&gt;, &lt;code&gt;openpouch_inspect&lt;/code&gt;, &lt;code&gt;openpouch_rollback&lt;/code&gt;, &lt;code&gt;openpouch_list&lt;/code&gt;, …). There is deliberately &lt;strong&gt;no &lt;code&gt;approve&lt;/code&gt; tool&lt;/strong&gt; — approving a production deploy is human-only, in every harness. An agent literally cannot approve its own prod deploy. Previews, though, it just ships.&lt;/p&gt;

&lt;p&gt;Can't attach MCP servers mid-session? You can prove the whole toolset from any plain shell — the recipe is in the &lt;a href="https://openpouch.dev/docs/MCP.md" rel="noopener noreferrer"&gt;docs&lt;/a&gt;. Or skip MCP entirely and use the CLI (&lt;code&gt;npx openpouch deploy&lt;/code&gt;, same functions, &lt;code&gt;--json&lt;/code&gt; + exit codes).&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Let the agent deploy
&lt;/h2&gt;

&lt;p&gt;Point Claude Code at any app folder and ask it to deploy. Under the hood it calls one tool:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json-doc"&gt;&lt;code&gt;&lt;span class="c1"&gt;// openpouch_deploy  { "dir": "." }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For a full-stack app (an API behind the frontend), add a health path so the agent proves the backend is actually up, not just the shell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json-doc"&gt;&lt;code&gt;&lt;span class="c1"&gt;// openpouch_deploy  { "dir": ".", "healthPath": "/api/health" }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;openpouch builds the app &lt;strong&gt;on deploy&lt;/strong&gt; (a raw Vite/React/Svelte source folder or a Node server with a build step — no local build needed), starts it in a hardened container, and health-checks it before telling you it's live.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. What comes back
&lt;/h2&gt;

&lt;p&gt;The result is structured JSON — exactly what an agent needs to make a decision, plus a plain-language line for the human running it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json-doc"&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;"ok"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://your-app-x1y2z3.openpouch.sh"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// the shareable link&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"healthStatus"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"healthy"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"summary"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Your app is live at https://…  — anyone you share it with can open it right away."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"nextCommands"&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;"verify"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&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;"logs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&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;"inspect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&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;"evidence"&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;"deploy.manifest.json"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"deploy.evidence.json"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DEPLOYMENT.md"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&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;Three things worth calling out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The live URL is the primary result.&lt;/strong&gt; You hand it straight to a client — no build settings, no dashboard tour.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A plain-language &lt;code&gt;summary&lt;/code&gt;&lt;/strong&gt; is safe to relay to a non-technical human verbatim.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment truth lands as files in the repo&lt;/strong&gt; (&lt;code&gt;DEPLOYMENT.md&lt;/code&gt;, &lt;code&gt;deploy.evidence.json&lt;/code&gt;, …). After a context reset, a fresh agent re-reads those files and knows exactly what's deployed, where, and how to resume. No hidden state.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the app comes back unhealthy, &lt;code&gt;openpouch_logs&lt;/code&gt; shows the captured install/build/app output (tagged &lt;code&gt;[install]&lt;/code&gt;/&lt;code&gt;[build]&lt;/code&gt;/&lt;code&gt;[app]&lt;/code&gt;) — the agent reads the cause, fixes it, redeploys, verifies. A real self-repair loop.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest limits (it's a technical preview)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Previews are &lt;strong&gt;ephemeral&lt;/strong&gt; — they vanish after ~72h unless claimed (claim → 7 days). Great for demos, agent-generated sites, and client previews; not yet for payment-grade production.&lt;/li&gt;
&lt;li&gt;Env vars/secrets work for dynamic apps (&lt;code&gt;--var&lt;/code&gt; / &lt;code&gt;--env-file&lt;/code&gt;, injected at runtime, reported by name only), but they're ephemeral — no persistent storage yet.&lt;/li&gt;
&lt;li&gt;It's &lt;strong&gt;free&lt;/strong&gt; during the preview. Paid, persistent hosting is on the roadmap.&lt;/li&gt;
&lt;li&gt;It runs on openpouch's &lt;strong&gt;own&lt;/strong&gt; infrastructure (not a wrapper over someone else's dashboard), and abuse is controlled with agent-compatible quotas and rate limits — never a CAPTCHA, because that's exactly what breaks agents.&lt;/li&gt;
&lt;/ul&gt;

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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx openpouch deploy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open source, Apache-2.0: &lt;a href="https://github.com/openpouch/openpouch" rel="noopener noreferrer"&gt;github.com/openpouch/openpouch&lt;/a&gt; · docs (for you &lt;em&gt;and&lt;/em&gt; your agent): &lt;a href="https://openpouch.dev" rel="noopener noreferrer"&gt;openpouch.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If your agent can write software, it should be able to ship it. That's the whole idea.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>webdev</category>
      <category>claude</category>
    </item>
  </channel>
</rss>
