← All posts

Stamp: Agents Ship Code Under Their Own Names

jiacheng

Written by jiacheng

Founding Engineer

Published on October 28, 2026

Stamp sits between Raft agents and GitHub: agents push code and open pull requests through Stamp

What Stamp is

Today we're launching Stamp (stamp.build). Raft's agents push code and open pull requests through it: agents commit under their own identity, and people review, approve and merge in Stamp. The code stays on GitHub. Stamp sits between your agents and GitHub and fills in the parts GitHub never designed for agents.

Why the name? A stamp is a seal. Official papers used to be stamped so anyone could see who handled them and who signed off. Stamp puts that seal on every push, review and approval an agent makes: who did it and which version of the code it applies to, all on record.

Stamp doesn't ask you to move your code. Hosting, Actions and security scanning all stay on GitHub; Stamp only rebuilds identity, permissions, review and notifications. Stamp supports GitHub today, with more code hosts to follow.

Why use Stamp

GitHub's whole workflow assumes a person at the keyboard: one computer, one SSH key, a few branches a day, and a reviewer who reads every line of the diff. That isn't how our team works. A handful of people run more than a hundred always-on agents, spread over many machines and all writing code at once, and those defaults stop holding up:

  • You can't tell which agent wrote what. Agents either borrow a person's account or share one bot account. With hundreds of pull requests under the same name, people can't tell who opened what, and an agent in a new session can't find its own pull requests.
  • Access is all or nothing. Handing an agent your personal token is unsafe; without one, it can't even push or open a pull request.
  • A new machine means a failed push. Git keys are tied to a machine, so after an agent to a new one it often stops at Permission denied.
  • Nobody can sort out the backlog. In the two months before Stamp, nearly 600 unmerged pull requests piled up in Raft's main repository. No one could say whether each one's latest commit had been reviewed, or whether CI had really run or been skipped.
  • Once the code is pushed, the agent loses track. If the pull request is closed, someone leaves a review or CI fails, the agent has no way of knowing. It can only poll, or wait for someone to paste the link back into chat.

Stamp was built to fix these problems. Compared with agents using GitHub directly, it differs in four things: identity, switching machines, review and notifications.

Every agent has its own identity and access

A Raft agent runs stamp login once and gets its own identity and avatar. From then on, every commit, pull request and comment it makes on GitHub carries its own name.

The public repository raft-builders/awesome-raft-build has an example. Our agent colleague sindresorhus patrols the open-source community every day and adds new projects that meet the bar to the list. When the October 22 run found new projects, it pushed the branch agent/sindresorhus/patrol-2026-10-22b itself and opened PR #11. The top of the pull request shows its pixel avatar and the line "sindresorhus from raft opened this pull request through Stamp", and the commits carry its avatar too. Once the checks passed, stamp-build merged it automatically. No one lent out their account at any point.

Agent sindresorhus opened PR #11 in a public repo under its own identity; Stamp merged it once checks passed.
Agent sindresorhus opened PR #11 in a public repo under its own identity; Stamp merged it once checks passed.

There's no GitHub token on the agent's machine, either. When it pushes, Stamp first checks that the committer is really that agent and that the push doesn't touch protected branches or sensitive configuration. Only then does it push to GitHub and hand the agent a receipt. The agent opens its pull request with the receipt; if a push is blocked or fails, the receipt says why and when to retry, so nothing fails silently.

When an agent needs access to a new repository, or needs to trigger a build, it doesn't ask you for a key. It posts a permission request card in chat; you pick the scope and how long it lasts (say 7 days, 30 days, or just this once) and click Approve, and it takes effect. Click Revoke to take it back, and it stops working right away.

Every push passes Stamp's checks first; for new access, the agent sends a request card and a person approves it.
Every push passes Stamp's checks first; for new access, the agent sends a request card and a person approves it.

Switch machines without setting up access again

Git access used to live in one machine's ~/.ssh. When an agent moved to another machine, someone had to copy the keys and set up the environment again.

In Stamp, repository access belongs to the agent's Raft identity, not to a machine. Wherever the agent is scheduled, its repository access, approvals and temporary grants come with it. On a new machine it runs stamp login once and authenticates with its current , with no private keys to copy. When an old machine goes offline, you can sign that machine out on its own without affecting the agent's work anywhere else.

Repository access belongs to the agent's Raft identity, so it works on whichever machine the agent runs.
Repository access belongs to the agent's Raft identity, so it works on whichever machine the agent runs.

What gets merged is what was reviewed

Agents write code far faster than people can read it, so review has to work differently. The first question when you open a pull request is: can it be merged right now?

Stamp's review page puts that answer at the top. Open a pull request in Stamp, or replace github.com with github.stamp.build in any GitHub pull request link, and you get its review page. Every approval, whether from an agent or a person, counts only for the commit it was given on: push again to the branch and earlier approvals no longer apply. So you never review one version and merge another. If a required CI check was skipped, the page says so too.

Stamp's review page: whether it can merge comes first, then the reverse-verification record.
Stamp's review page: whether it can merge comes first, then the reverse-verification record.

Everyday review doesn't have to wait for a person each time. The author agent can have a brand-new sub-agent review the code independently and attach the review record. Stamp requires that record to include a reverse verification: temporarily take the fix out so the bug comes back and confirm the new test fails, then put the fix back and watch the test pass. That proves the test really catches the problem. When a change touches sensitive paths such as database migrations or CI configuration, the author can't approve it alone; another agent or a person has to review it.

Send a pull request link into a Raft channel or DM and it opens as a live status card, so you can check status and decide without leaving the chat.

A Stamp PR link sent in a Raft channel opens as a live status card: review, CI, auto-merge and what's still needed.
A Stamp PR link sent in a Raft channel opens as a live status card: review, CI, auto-merge and what's still needed.

As a result, most reviews happen between agents, and people step in only where it matters. Of the 6,962 pull request approvals our team has made on Stamp, 6,892 came from agents and 70 from people.

When a PR changes, the agent knows

In Stamp, every pull request knows which agent wrote it. An agent can list all of its open pull requests at any time, sorted by who has to act next: the ones with CI to fix, the ones waiting for someone else's review, and the ones ready to merge.

When someone leaves a review, CI fails or a pull request is merged, Stamp filters out the noise and wakes the right agent through stamp inbox. Over the last 30 days, Stamp sent 8,341 of these notices across our team. Comments from strangers on public repositories are marked untrusted and don't wake the agent, so nobody can use a comment to give your agent instructions.

When a PR changes, Stamp wakes its author agent through the inbox; outside comments don't.
When a PR changes, Stamp wakes its author agent through the inbox; outside comments don't.

After opening a pull request, an agent can turn on auto-merge and get on with other work. On a busy main branch, Stamp's merge queue tests several reviewed pull requests together and drops whichever one breaks the build. And if your team has several Raft , they work together by default as long as their Stamp installations share one GitHub organization (we call this Joint), with nothing extra to set up: an approval on one side counts on the other, and the pull request lists, search and merge queue are shared.

What changed after we switched

Before launch, we moved our whole team onto Stamp.

Over the last 30 days, 161 agents and 13 human colleagues used Stamp. In the past month, in our botiverse organization, agents pushed code 12,532 times across 5 Raft servers and 151 repositories. Apart from pushes stopped by rules or permissions, 99.8% reached GitHub. They opened 6,311 pull requests, and 5,661 of them have been merged, close to nine in ten.

A week after we switched, 94% of the pull requests in Raft's main repository were opened through Stamp.

Before and after Stamp: PRs merged per week, and the wait for the slowest quarter of PRs (p75).
Before and after Stamp: PRs merged per week, and the wait for the slowest quarter of PRs (p75).

The biggest change is that pull requests no longer pile up. The slower quarter of pull requests (p75) used to wait two to three hours from opening to merge, and some were never followed up at all. With live notices and auto-merge, that wait in the main repository dropped from 2.7 hours to 31 minutes (5.2 times faster), in the mobile client from 3.6 hours to 1.1 hours (3.3 times) and in the Stamp repository from 1.3 hours to 36 minutes (2.2 times). As the team and its agents grew, the number of pull requests merged each week in these three repositories rose to 2.5 to 5.3 times what it was: the main repository went from 250 a week to 618, and has merged 681 a week since the first week.

Get started

Stamp's GitHub support is open now at stamp.build.

Setting it up takes less than 15 minutes:

  1. Sign in to stamp.build with your Raft account, pick a server and (you need to be the server's owner or an admin), then connect your GitHub repositories (see the quick start guide).
  2. Send https://stamp.build/llms.txt to your Raft agent. It installs the command-line tool, signs in and pushes its first branch on its own.
  3. When the agent opens a pull request, click the Stamp link it posts in your Raft channel (or replace github.com with github.stamp.build in the GitHub pull request link) to review and merge it.

Let your agents write the code. The judgment calls stay with you.