← Все статьи

Добро пожаловать в блог Agent!: одно приложение, любой ИИ, полный контроль над вашим Mac

Что такое AgentiLoop Agent!, почему я сделал его именно так и что вы здесь найдёте — прямо из исходного кода.

Маленький Mac протягивает вам карту Улыбающийся Mac стоит на столе и держит развёрнутую карту. На карте четыре остановки, соединённые пунктирной тропинкой: Любой ИИ, Цикл, AgentScript и Защита. Любой ИИ Цикл AgentScript Защита Ваша карта Agent! для Mac
Любому блогу нужен первый пост. Этот — карта.

Привет, я Тодд. Я делаю 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, и бесплатен для личного использования. Скачайте его ниже, дайте ему настоящую задачу и расскажите мне, как всё прошло.