← Все статьи

Как начинался Agent!: три дня в марте

Три года запчастей, один недостающий цикл и 177 коммитов меньше чем за два дня. Настоящее происхождение Agent!, прямо из git.

Дружелюбный робот собирает Mac из игрушечных кирпичиков Улыбающийся синий робот держит жёлтый кирпичик над наполовину собранным экраном Mac из красных, жёлтых, зелёных, синих и оранжевых игрушечных кирпичиков. В облачке написано: Почти готово! Почти готово! Строитель. Mac. Остался один кирпичик.
Всё большое начинается с кучки маленьких кирпичиков. Секрет в том, чтобы знать, какой идёт следующим.

У каждого приложения есть первый день. Первый день Agent! пришёлся на среду: 11 марта 2026 года, 15:07. Мы знаем даже минуту, потому что git её записал.

Но кирпичики валялись вокруг задолго до этого.

Три года запчастей

До Agent! были другие приложения. ANIE. Game Changer. BattleScript. XCF MCP Server и Client. D1F — инструмент, который меняет сразу много строк в файле. И около восьми Swift-пакетов, написанных одним и тем же человеком.

Каждое умело делать кусочек работы. Одни умели разговаривать с ИИ. Другие — править код. Третьи — ковыряться в Xcode. Ни одно не умело самого главного: продолжать самостоятельно.

Представьте заводную игрушку. Заводите её, она делает три шага и останавливается. Мило. Бесполезно. Не хватало цикла: посмотреть на задачу, выбрать инструмент, применить его, проверить, что вышло, и повторить, пока работа не будет сделана. (Про этот цикл есть отдельный пост, с роботом и бутербродом.)

Как только цикл заработал, лучшие из старых деталей смогли на него защёлкнуться. Вот и вся история происхождения в одном предложении. Остальное — подробности, а подробности весёлые.

День первый: мозг, помощник и кнопка «Отмена»

Самый первый настоящий коммит называется «Autonomous Agent with privileged launch daemon». В нём было 20 файлов и 1765 строк на Swift. Вот что лежало в коробке:

  • Окно на SwiftUI, куда вы пишете, что нужно сделать.
  • Один мозг-ИИ, Claude, который думает.
  • Launch Daemon: маленький помощник, который работает в фоне и держит ключи от всего дома, чтобы агент мог выполнять взрослые системные дела.
  • История задач, скриншоты и вставка.

Через час появилось первое исправление падения (вставка скриншота роняла приложение). Ещё через несколько минут — большая красная кнопка «Отмена» на клавише Escape. Когда строишь то, что действует само, кнопка «стоп» появляется рано.

К 17:27 появился второй помощник, Launch Agent, который выполняет команды от вашего имени, а не от имени всемогущего root. Просить мастер-ключ, чтобы посмотреть содержимое папки, — всё равно что вызывать пожарных, чтобы зажечь свечку. Через шесть минут Agent! получил второй мозг: Ollama, чтобы работать на ИИ-моделях, которые живут прямо на вашем Mac.

До конца дня он научился ещё писать и запускать Swift-скрипты, управлять Xcode, видеть картинки через модели со зрением и показывать заставку. А ещё получил маленькие точки состояния в виде светофора — на то, чтобы остановиться на зелёном, жёлтом и красном, ушло около дюжины коммитов. Некоторые вещи сложнее, чем цикл агента.

День второй: «Можно?»

12 марта Agent! узнал, что Mac вежлив и очень строг в этом вопросе.

Чтобы управлять другим приложением, например «Музыкой» или Pages, macOS сначала спрашивает вас: «Agent! хочет управлять приложением „Музыка“. Разрешить?» Добиться того, чтобы это окошко действительно появилось, заняло весь вечер. Примерно с 20:20 до 21:40 история — это куча попыток с разницей в несколько минут: попробовать так, попробовать в главном потоке, открыть Системные настройки, попробовать osascript, попробовать запросить every window, попробовать просто name. К тому же Keynote, Numbers и Pages сменили свои bundle ID, так что он стучался в двери не с теми именами.

Получилось. В тот же вечер он научился показывать картинки и веб-страницы прямо в своём журнале: когда он делает обложку альбома, вы видите обложку альбома.

День третий: имя и номер версии

Утром 13 марта приложение получило своё имя. Коммит в 9:06 называется «rename app to Agent!» С восклицательным знаком, специально.

Через двадцать минут пришло изменение, которое важно до сих пор: скрипты перестали быть отдельными программами и стали динамическими библиотеками, которые загружаются прямо внутрь приложения. Поэтому у AgentScripts те же разрешения на Mac, что и у Agent!, без повторных запросов.

Позже в тот же день появился тег 1.0.0. Если считать от первого коммита, это 177 коммитов меньше чем за два дня. Версии с 1.0.1 по 1.0.16 вышли за следующие восемь дней.

Маленькая деталь: имя автора в этих ранних коммитах — не человек. Это «Agent! for MacOS».

Взросление

После первого рывка история ускоряется:

  • 6 апреля. Почти месяц истории сжали в один чистый стартовый коммит. Полная история осталась в резервной копии.
  • 7 апреля. «Режим кода», «режим автоматизации» и «стандартный режим» были выдраны с корнем. Один агент, все инструменты, всегда.
  • Апрель. К команде присоединился Apple Intelligence — мозг, который работает прямо на Mac, бесплатно.
  • 31 августа. Проект переехал из GitHub-организации macOS26 в AgentiLoop, а сайт стал agentiloop.ai.
  • В последнее время. Agent! научился работать на macOS 14.6 и на Mac с Intel и помог построить своих собственных терминальных братьев: AgentiLoopCLI на Rust и AgentiLoopGo на Go.

Начинал он с одного мозга. Сегодня он работает с 23 провайдерами ИИ, плюс Apple Intelligence. С той апрельской чистки в основной ветке прибавилось больше 1300 коммитов.

Почему он такой, какой есть

Почти всё необычное в Agent! восходит к тем первым трём дням.

У него два помощника, один для вас и один для root, потому что в первый день понадобились оба. Он на 100 % написан на Swift, как и запчасти, из которых собран. Он построен из оригинального кода, а не из кучи в 65 NPM-пакетов. Он управляет другими приложениями по имени через Универсальный доступ и AppleScript, потому что второй день ушёл на то, чтобы научиться вежливо просить Mac. И у него до сих пор есть большая кнопка «Отмена».

Всё большое начинается с кучки маленьких кирпичиков. Эта кучка росла три года. 11 марта кто-то наконец нашёл кирпичик, который держит все остальные вместе: цикл.