<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Seatbelt Labs</title>
  <subtitle>Notes and research on how we build Seatbelt.</subtitle>
  <link rel="alternate" type="text/html" href="https://labs.withseatbelt.com/"/>
  <link rel="self" type="application/atom+xml" href="https://labs.withseatbelt.com/feed.xml"/>
  <id>https://labs.withseatbelt.com/</id>
  <updated>2026-08-13T00:00:00Z</updated>
  <entry>
    <title>We scored 97% on one class, and it was the wrong half of it</title>
    <link rel="alternate" type="text/html" href="https://labs.withseatbelt.com/the-wrong-half-of-the-class"/>
    <id>https://labs.withseatbelt.com/the-wrong-half-of-the-class</id>
    <published>2026-08-13T00:00:00Z</published>
    <updated>2026-08-13T00:00:00Z</updated>
    <author><name>Connor</name></author>
    <category term="research"/>
    <summary>One vulnerability class out of 38, and one of the engine's best scores. The number was true: it measured the half of the class our own corpus happened to contain, and the other half is the one that gets exploited. How a benchmark built from a detector ends up grading the detector on its own homework.</summary>
  </entry>
  <entry>
    <title>The defense nobody has attacked</title>
    <link rel="alternate" type="text/html" href="https://labs.withseatbelt.com/the-defense-nobody-has-attacked"/>
    <id>https://labs.withseatbelt.com/the-defense-nobody-has-attacked</id>
    <published>2026-08-06T00:00:00Z</published>
    <updated>2026-08-06T00:00:00Z</updated>
    <author><name>Connor</name></author>
    <category term="note"/>
    <summary>An AI agent on a safety test opened a malicious pull request on a real repository, then made a second account to vouch for it. The only thing telling it not to was a sentence in a prompt.</summary>
  </entry>
  <entry>
    <title>Most Next.js Server Actions we scanned had no auth check. The rate is falling with each version.</title>
    <link rel="alternate" type="text/html" href="https://labs.withseatbelt.com/nextjs-server-action-auth"/>
    <id>https://labs.withseatbelt.com/nextjs-server-action-auth</id>
    <published>2026-07-28T00:00:00Z</published>
    <updated>2026-07-28T00:00:00Z</updated>
    <author><name>Connor</name></author>
    <category term="research"/>
    <summary>A Next.js Server Action is a public POST endpoint that does not inherit the page's session check. We scanned 983 public repos: most that use a Server Action mutation ship at least one unguarded, and the rate drops with every framework version.</summary>
  </entry>
  <entry>
    <title>The agents never talk to each other</title>
    <link rel="alternate" type="text/html" href="https://labs.withseatbelt.com/agents-never-talk"/>
    <id>https://labs.withseatbelt.com/agents-never-talk</id>
    <published>2026-07-25T00:00:00Z</published>
    <updated>2026-07-25T00:00:00Z</updated>
    <author><name>Connor</name></author>
    <category term="note"/>
    <summary>No agent in this fleet has ever sent another agent a message: no group chats, no debates, no planner. They coordinate through a shared trail of logs, and the real constraint was never the agents.</summary>
  </entry>
  <entry>
    <title>The certificate stops at the platform</title>
    <link rel="alternate" type="text/html" href="https://labs.withseatbelt.com/the-certificate-stops-at-the-platform"/>
    <id>https://labs.withseatbelt.com/the-certificate-stops-at-the-platform</id>
    <published>2026-07-24T00:00:00Z</published>
    <updated>2026-07-24T00:00:00Z</updated>
    <author><name>Connor</name></author>
    <category term="note"/>
    <summary>ElevenLabs and Harvey are certified under AIUC-1, and the certificate covers the vendor's controls, not the app that rolls off the line. Compliant has never meant secure.</summary>
  </entry>
  <entry>
    <title>The adversary is the easy part</title>
    <link rel="alternate" type="text/html" href="https://labs.withseatbelt.com/the-adversary-is-the-easy-part"/>
    <id>https://labs.withseatbelt.com/the-adversary-is-the-easy-part</id>
    <published>2026-07-23T00:00:00Z</published>
    <updated>2026-07-23T00:00:00Z</updated>
    <author><name>Connor</name></author>
    <category term="note"/>
    <summary>OpenAI's GPT-Red hardens models with self-play until it breaks almost everything. The loop is real; the quiet part is the oracle that decides an attack worked.</summary>
  </entry>
  <entry>
    <title>The base URL is a trust boundary</title>
    <link rel="alternate" type="text/html" href="https://labs.withseatbelt.com/the-base-url-is-a-trust-boundary"/>
    <id>https://labs.withseatbelt.com/the-base-url-is-a-trust-boundary</id>
    <published>2026-07-22T00:00:00Z</published>
    <updated>2026-07-22T00:00:00Z</updated>
    <author><name>Connor</name></author>
    <category term="note"/>
    <summary>Ramp Router makes model routing a one line change. That line moves your prompts across a pool of providers you no longer choose.</summary>
  </entry>
  <entry>
    <title>Don't scale agents, scale leases</title>
    <link rel="alternate" type="text/html" href="https://labs.withseatbelt.com/lease-based-fleets"/>
    <id>https://labs.withseatbelt.com/lease-based-fleets</id>
    <published>2026-07-21T00:00:00Z</published>
    <updated>2026-07-21T00:00:00Z</updated>
    <author><name>Connor</name></author>
    <category term="note"/>
    <summary>Orchestration is knowing where not to parallelize. Repo access as a Rust mutable borrow, and the three ways our own lock cracked in one afternoon.</summary>
  </entry>
</feed>
