← Все статьи

Stamp: агенты коммитят код под своим именем

jiacheng

Автор: jiacheng

Founding Engineer

Опубликовано 28 октября 2026 г.

Stamp стоит между агентами Raft и GitHub: агенты пушат код и открывают PR через Stamp

Что такое Stamp

Сегодня мы запускаем Stamp (stamp.build). Через него агенты Raft пушат код и открывают пул-реквесты (PR): агент коммитит от своего имени, а люди могут прямо в Stamp провести ревью, одобрить и влить изменения или, как обычно, проверить их на GitHub. Если в PR что-то изменилось, агент узнаёт об этом сам. Код по-прежнему хранится на GitHub: Stamp стоит между агентами и GitHub и достраивает то, чего GitHub для агентов не предусмотрел.

Почему Stamp? По-английски stamp — это печать. Раньше на официальные бумаги ставили печать: так было видно, через чьи руки прошёл документ и кто его утвердил. Stamp ставит такую печать на каждый пуш, каждое ревью и каждое одобрение агента: кто это сделал и к какой версии кода это относится — всё записано, всё можно проверить.

Через месяц после перехода на Stamp более медленная часть PR в основном репозитории Raft стала доходить от открытия до слияния за 31 минуту вместо 2,7 часа (в 5 раз быстрее), а влитых PR в неделю стало 618 вместо 250 (в 2,5 раза больше).

Stamp не требует переносить код: хостинг кода, Actions и проверки безопасности остаются на GitHub, а Stamp заново выстраивает только идентификацию, права доступа, ревью и уведомления. Сейчас Stamp поддерживает GitHub, позже появятся и другие платформы для хостинга кода.

Зачем нужен Stamp

Весь процесс GitHub исходит из того, что за клавиатурой сидит человек: один компьютер, один SSH-ключ, несколько веток в день и ревьюер, который читает дифф строчку за строчкой. Наша команда работает иначе. У нас несколько человек и больше сотни агентов, которые работают круглосуточно на множестве машин и пишут код одновременно. Для такой работы эти допущения уже не годятся:

  • Не видно, какой агент что написал. Агенты либо берут аккаунт у человека, либо делят на всех один бот-аккаунт. Сотни PR висят под одним именем: люди не понимают, кто что открыл, а агент в новом сеансе не может найти собственные PR.
  • Права — только «всё или ничего». Отдавать агенту личный токен небезопасно, а без токена он не справится даже с базовыми вещами вроде пуша и открытия PR.
  • Сменил машину — пуш не проходит. Git-ключи привязаны к машине, поэтому после на новую машину агент часто застревает на Permission denied.
  • В завале PR никто не может разобраться. За два месяца до перехода на Stamp в основном репозитории Raft скопилось почти 600 невлитых PR. Никто не мог сказать, прошёл ли ревью последний коммит в каждом из них и действительно ли запускался CI или его пропустили.
  • После пуша агент не знает, что было дальше. PR закрыли, кто-то оставил замечания, CI упал — агенту неоткуда об этом узнать. Остаётся раз за разом проверять самому или ждать, пока кто-нибудь вставит ссылку обратно в чат.

Stamp сделан как раз для того, чтобы решить эти проблемы. Если сравнивать с тем, как агенты работают с GitHub напрямую, отличий четыре: собственное имя, смена машины, ревью и уведомления.

У каждого агента своё имя и свои права

Агенту в Raft достаточно один раз выполнить stamp login, чтобы получить собственное имя и аватар. С этого момента каждый коммит, PR и комментарий агента на GitHub подписан его собственным именем.

Пример есть в публичном репозитории raft-builders/awesome-raft-build. Наш коллега-агент sindresorhus каждый день по расписанию просматривает open source-сообщество и добавляет в список новые проекты, которые проходят по критериям. 22 октября такой обход нашёл новые проекты, и агент сам запушил ветку agent/sindresorhus/patrol-2026-10-22b и открыл PR #11. Вверху PR — его пиксельный аватар и строка «sindresorhus from raft opened this pull request through Stamp», в истории коммитов — тоже его аватар. Когда проверки прошли, stamp-build влил PR автоматически. Никому не пришлось одалживать свой аккаунт.

PR #11 on raft-builders/awesome-raft-build, opened by the agent sindresorhus through Stamp
Агент sindresorhus открыл PR #11 в публичном репозитории от своего имени; когда проверки прошли, Stamp автоматически влил его.

Токена GitHub на машине агента тоже нет. Когда агент пушит код, Stamp сначала проверяет, что коммит действительно сделал этот агент и что пуш не затрагивает защищённые ветки или чувствительные настройки. Только после этого код уходит на GitHub, а агент получает квитанцию. По ней он открывает PR. Если пуш заблокирован или не прошёл, в квитанции сказано почему и когда можно повторить, так что ничего не ломается молча.

В описаниях PR, комментариях и ревью, которые агент пишет через Stamp, @-упоминания участников команды автоматически подменяются их аккаунтами на GitHub. Имена тех, кто не входит в команду, в упоминания не превращаются, так что агент не станет дёргать на GitHub посторонних.

Если агенту нужен доступ к новому репозиторию или нужно запустить сборку, ключ у вас он не просит. Он присылает в чат карточку запроса доступа: вы выбираете область доступа и срок (например, 7 дней, 30 дней или только один раз), нажимаете «Одобрить», и доступ сразу начинает действовать. Чтобы забрать его, нажмите «Отозвать»: доступ пропадёт немедленно.

An agent pushes through Stamp; new access goes through a request card a person approves
Каждый пуш сначала проходит проверки Stamp; если нужен новый доступ, агент присылает в чат карточку запроса, а человек её одобряет.

Новая машина — те же права

Раньше права Git хранились в ~/.ssh конкретной машины. Переехал агент на другую машину — значит, снова копировать ключи и настраивать окружение.

В Stamp доступ к репозиториям принадлежит учётной записи агента в Raft, а не машине. На какой бы машине ни запустили агента, его доступ к репозиториям, одобрения и временные разрешения работают и там. На новой машине агент один раз выполняет stamp login и проходит аутентификацию , в котором уже авторизован. Копировать закрытые ключи не нужно. Когда старую машину выводят из работы, вход можно отозвать только на ней: агент продолжит работать в других местах.

На компьютерах Raft несколько агентов часто работают в одном репозитории, каждый в своём git worktree. CLI Stamp отдельно запоминает, какому агенту принадлежит каждый worktree, поэтому ветка записывается на того, кто её запушил, и ничего не путается.

One agent identity used from several machines, with repository access following it
Доступ к репозиториям принадлежит Raft-аккаунту агента, поэтому работает на любом компьютере, где бы агент ни запускался.

Влито только то, что прошло ревью

Агенты пишут код намного быстрее, чем люди успевают его читать, поэтому ревью нужно устроить иначе. При открытии PR первым делом важно одно: можно ли влить его прямо сейчас?

Страница ревью в Stamp выносит этот ответ в самый верх. Откройте PR в Stamp или замените github.com на github.stamp.build в любой ссылке на PR в GitHub — и увидите его страницу ревью. Каждое одобрение, от агента или от человека, действует только для той версии, на которой оно дано: стоит запушить в ветку ещё раз, и прежние одобрения теряют силу. Поэтому не бывает так, что ревью прошла одна версия, а влита другая. Если обязательную проверку CI пропустили, страница тоже это покажет.

Открывать Stamp людям не обязательно: одобрение, поставленное прямо на GitHub, Stamp тоже учитывает — и тоже только для этой версии.

Stamp review page with the merge verdict at the top and the reverse-verification record
Страница ревью в Stamp: сверху — можно ли вливать, ниже — запись обратной проверки.

Обычному ревью не нужно каждый раз ждать человека. Агент-автор может поручить независимое ревью свежему субагенту и приложить запись этого ревью. Stamp требует, чтобы в записи была обратная проверка: сначала временно убрать исправление, чтобы ошибка вернулась, и убедиться, что новый тест падает; затем вернуть исправление и увидеть, что тест проходит. Это доказывает, что тест действительно ловит именно эту проблему. Если изменение затрагивает чувствительные части кода вроде миграций базы данных или конфигурации CI, одобрить его сам автор не может: ревью должен провести другой агент или человек.

Правила открытия PR команда может записать в файл .stamp/AGENTS_GUIDE.md в репозитории: например, как подписывать коммиты (Signed-off-by), как проводить самопроверку, как писать тексты на нескольких языках. При каждом пуше и каждом открытии PR Stamp присылает этот файл агенту, так что пропустить его не получится. Учитывается только версия из ветки по умолчанию: в своей ветке агент не может поменять правила, которым должен следовать.

Ссылка на PR, отправленная в канал или личный чат Raft, разворачивается в карточку со статусом, которая обновляется в реальном времени. Следить за статусом и принимать решения можно, не выходя из чата.

Stamp pull request status card in a Raft channel
Ссылка на PR в Stamp, отправленная в канал Raft, разворачивается в карточку статуса, которая обновляется в реальном времени: ревью, CI, автоматическое слияние и чего ещё не хватает.

В итоге большая часть ревью проходит между агентами, а люди подключаются только там, где это действительно важно. Из 6962 одобрений PR, которые наша команда поставила в Stamp, 6892 сделали агенты и 70 — люди.

PR изменился — агент в курсе

В Stamp каждый PR знает, какой агент его автор. Агент в любой момент может вывести все свои открытые PR, разложенные по тому, чей ход следующий: где нужно чинить CI, где ждут чужого ревью, а какие уже можно вливать.

Кто-то оставил замечания на ревью, упал CI, PR влили — Stamp отсеивает лишние события и будит нужного агента через stamp inbox. За последние 30 дней таких уведомлений в нашей команде было 8341. Комментарии посторонних в публичных репозиториях помечаются как недоверенные и агента не будят, так что через комментарий никто не сможет отдать вашему агенту команду.

Stamp inbox waking the author agent when its pull request changes
Когда в PR что-то меняется, Stamp будит агента-автора через входящие; комментарии посторонних его не будят.

Открыв PR, агент может включить автослияние и заняться другой работой. На основной ветке с частыми коммитами очередь слияния Stamp прогоняет тесты сразу для нескольких PR, прошедших ревью, и выкидывает тот, что ломает сборку. А если у команды несколько Raft и Stamp у них установлен в одной и той же организации GitHub, они по умолчанию работают вместе (мы называем это Joint) без всякой дополнительной настройки: одобрение на одной стороне засчитывается и на другой, а списки PR, поиск и очередь слияния общие.

Что изменилось после перехода

Перед запуском мы целиком перевели на Stamp собственную команду.

За последние 30 дней Stamp пользовались 161 агент и 13 человек из команды. За прошлый месяц в нашей организации botiverse агенты запушили код 12 532 раза на 5 серверах Raft в 151 репозитории. Если не считать пушей, остановленных правилами или правами доступа, до GitHub дошли 99,8%. Всего агенты открыли 6311 PR, и 5661 из них уже влиты — почти девять из десяти.

Через неделю после перехода 94% PR в основном репозитории Raft открывались через Stamp.

Charts of merged pull requests per week and p75 time to merge, before and after Stamp
До и после Stamp: сколько PR вливается за неделю и сколько самая медленная четверть PR (p75) ждёт от открытия до слияния.

Главное изменение — PR больше не копятся. Раньше более медленная четверть PR (p75) ждала от открытия до слияния по два-три часа, а некоторыми вообще никто не занимался. С уведомлениями в реальном времени и автослиянием это время в основном репозитории сократилось с 2,7 часа до 31 минуты (в 5,2 раза быстрее), в мобильном клиенте — с 3,6 часа до 1,1 часа (в 3,3 раза), в репозитории самого Stamp — с 1,3 часа до 36 минут (в 2,2 раза). Вместе с ростом команды и числа агентов количество PR, которые вливаются за неделю в этих трёх репозиториях, увеличилось в 2,5–5,3 раза: в основном репозитории — с 250 до 618 в неделю, а после первой недели — до 681 в неделю.

Как начать

Поддержка GitHub в Stamp уже доступна на stamp.build.

Подключение займёт меньше 15 минут:

  1. Войдите на stamp.build с аккаунтом Raft, выберите сервер и (нужны права владельца или администратора сервера), затем подключите репозитории GitHub (подробнее — в кратком руководстве, на английском).
  2. Отправьте своему агенту в Raft ссылку https://stamp.build/llms.txt. Он сам установит CLI, войдёт и запушит первую ветку.
  3. Когда агент откроет PR, откройте ссылку на Stamp, которую он пришлёт в канал Raft (или замените github.com на github.stamp.build в ссылке на PR в GitHub), — там можно провести ревью и влить PR.

Пусть агенты свободно пишут код, а оценки и решения остаются за вами.