Как начинался Agent!: три дня в марте
Три года запчастей, один недостающий цикл и 177 коммитов меньше чем за два дня. Настоящее происхождение Agent!, прямо из git.
У каждого приложения есть первый день. Первый день 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 марта кто-то наконец нашёл кирпичик, который держит все остальные вместе: цикл.