Добро пожаловать в блог Agent!: одно приложение, любой ИИ, полный контроль над вашим Mac
Что такое AgentiLoop Agent!, почему я сделал его именно так и что вы здесь найдёте — прямо из исходного кода.
Привет, я Тодд. Я делаю AgentiLoop Agent! — нативного ИИ-агента для macOS, а это его блог.
Мне хотелось иметь место, где можно рассказать о том в Agent!, что не помещается в README или в заметки к выпуску. Почему защитный механизм устроен именно так. Почему цикл агента сам проверяет свою работу. Что сломалось в релиз-кандидате и как мы это починили. Почти всё, что вы здесь прочитаете, берётся прямо из кодовой базы — ведь её я знаю лучше всего. А время от времени я буду поглядывать и на большой мир ИИ-агентов и разбираться, что всё это значит для вашего Mac.
Если вы здесь впервые, начните с этого поста. Считайте его картой.
Что такое Agent!
Agent! на 100% написан на нативных Swift и SwiftUI. Вы пишете (или говорите), что вам нужно, и он действительно делает эту работу на вашем Mac, а не объясняет, как её сделать:
- Он пишет настоящий код. Читает ваш проект, правит файлы диффами на основе замены строк, собирает проект в Xcode, читает ошибки, исправляет их и делает коммит через git.
- Он управляет любым приложением на Mac через Accessibility API, а также через AppleScript, JXA и 51 мост ScriptingBridge к приложениям.
- Он выполняет shell-команды от вашего имени или от root через Launch Agent и Launch Daemon, зарегистрированные с помощью SMAppService и доступные по XPC.
- Он работает с 23 провайдерами LLM, а также с Apple Intelligence прямо на устройстве: Claude, Codex, OpenAI, Gemini, Grok, Mistral, DeepSeek, Qwen, Z.ai, OpenRouter, Ollama, vLLM, LM Studio и другими.
- Он слушает. Скажите «Agent!» и назовите задачу — или напишите ему с iPhone через iMessage (только от одобренных отправителей).
В README всё это уместилось в четыре слова: Siri отвечает. Agent! действует.
Без NPM и без Electron
Вот что обычно удивляет людей. Здесь нет оболочки Electron. Нет среды выполнения Node. Нет папки node_modules, которая потихоньку съедает ваш диск. Все Swift-пакеты, от которых зависит Agent!, я написал сам, и каждый живёт в собственном репозитории в организации AgentiLoop:
| Пакет | Задача |
|---|---|
| AgentTools | Схемы инструментов, системные промпты и управление провайдерами |
| AgentLLM | Протоколы, типы и реестр провайдеров LLM |
| AgentMCP | Клиент MCP (stdio и HTTP) |
| AgentAccess | Автоматизация через Accessibility |
| AgentEventBridges | Протоколы ScriptingBridge для 50+ приложений Mac |
| AgentD1F | Движок многострочных диффов |
| AgentSwift | Анализ кода с помощью SwiftSyntax |
| AgentColorSyntax · AgentTerminalNeo | Подсветка синтаксиса · Markdown в стиле ретро-терминала |
| AgentAudit | Аудит-логирование через os.log |
В итоге получается приложение, которое едва расходует оперативную память и при этом прямо из коробки умеет автоматизировать Xcode, анализировать синтаксис Swift, работать с Accessibility, AppleScript, автоматизацией Safari и MCP.
Цикл в самом центре
Всё в Agent! держится на одной идее — самопроверяющемся цикле выполнения задач. Модель думает, вызывает инструмент, смотрит на реальный результат и сама себя поправляет. Работает это, только если циклу можно доверять, поэтому в него встроено несколько правил:
- Инструменты нельзя подделать. Каждый вызов проходит через единый диспетчер и возвращает реальный вывод. Если модель заявляет «Я нажал», а инструмент на самом деле не вызывала, Agent! ловит её на этом и отправляет исправление.
- Для «готово» нужны доказательства. Задача не может объявить себя завершённой, пока её критерии
goal_stateне отмечены с подтверждением — например, успешной сборкой или пройденным тестом. - Сначала прочитай, потом правь. Agent! отказывается править файл, который модель не читала или который изменился на диске после чтения (проверяется по SHA-256). Вместе с отказом модель получает свежую версию файла, так что следующая попытка идёт уже по правильным строкам.
- Всё можно отменить. Каждая правка хранится в снимке неделю. Можно откатить один файл или отмотать назад целую задачу с помощью
rewind_task.
Каждое из этих правил я подробно разберу в следующих постах.
AgentScript: Swift с полными правами
AgentScript — одна из моих любимых частей. Скрипты — это обычные файлы Swift. Agent! компилирует каждый из них в .dylib с помощью SwiftPM и загружает прямо в свой процесс через dlopen, так что скрипт получает те же разрешения macOS, что уже есть у Agent!: Accessibility, Automation, Календарь, Контакты, Почту, Фото и всё остальное. Нужна только одна точка входа:
import Foundation
import CalendarBridge // any `import XBridge` auto-wires, no Package.swift edits
@_cdecl("script_main")
public func scriptMain() -> Int32 {
print("Hello from AgentScript! 👋")
return 0
}
Всё, что скрипт выводит, возвращается модели, а возвращаемое значение служит кодом завершения. Вместе с приложением поставляется около 35 примеров, в том числе TodayEvents, NowPlaying, CheckMail и CreateDmg.
Безопасность, которую можно прочитать
Agent! умеет выполнять команды от root. Это большая степень доверия, и просить о ней, показав лишь слайд в презентации, нельзя. Безопасность здесь — это код, и его можно прочитать на GitHub. Жёстко зашитый ShellSafetyService отклоняет катастрофические команды ещё до того, как они будут отправлены, а привилегированный демон повторяет ту же проверку на своей стороне. Есть и необязательное «второе мнение» под названием Jev, которое оценивает, насколько вероятно, что команда уничтожит данные. Как именно всё это работает, подробно показано в первом глубоком разборе.
Семья продолжает расти
Тот же цикл агента теперь работает и в терминале — на macOS, Windows и Linux. Есть два CLI с одинаковыми возможностями: AgentiLoopCLI на Rust и AgentiLoopGo на Go. Мой любимый забавный факт из README: Agent! для Mac сам написал своих младших братьев.
Что вы здесь найдёте
- Внутреннее устройство: цикл агента, сжатие контекста, диспетчеризация инструментов, субагенты, память и планы.
- Безопасность: защитные механизмы, модель доверия XPC и уроки, которые недавние инциденты с агентами преподают всем нам.
- Заметки о выпусках с объяснением «почему»: что изменилось в каждой сборке и какой баг сделал это необходимым.
- Практические руководства: рецепты AgentScript, выбор провайдера при скромном бюджете, полностью локальная работа.
- Большой мир агентов: новости и обзоры — и всегда с возвращением к тому, что это значит для вашего Mac.
Agent! работает на macOS 14.6 и новее, на Apple Silicon и Intel, и бесплатен для личного использования. Скачайте его ниже, дайте ему настоящую задачу и расскажите мне, как всё прошло.