Agent! теперь работает на macOS 14.6 и Mac с Intel: как мы отвязались от macOS 26
Agent! создавался вокруг Apple Intelligence на macOS 26. Рассказываем, как за один день проверок #available и обновлений пакетов мы перенесли его на macOS 14.6 для Apple Silicon и Intel.
До сегодняшнего дня Agent! требовал macOS 26. Начиная с сегодняшнего предварительного выпуска он работает на macOS 14.6 и новее, на Apple Silicon и Intel. Это множество вполне достойных Mac, которые раньше оставались за бортом, причём многие из них вообще не могут запускать Apple Intelligence.
Вот что для этого потребовалось — коммит за коммитом, за один день.
Препятствие: FoundationModels
Agent! использует локальную модель Apple через фреймворк FoundationModels, который существует только в macOS 26. Это не основной «мозг» — эту роль выполняет выбранный вами провайдер. Но у неё несколько задач: быстрые сводки при сжатии контекста, подсчёт токенов на устройстве, заранее прогретая сессия при запуске и частичная сортировка задач.
Код, в котором упоминается тип из macOS 26, не собирается для более старой целевой версии. Поэтому первым шагом (ea5ce624) стало размещение каждого использования FoundationModels за #available(macOS 26, *). Это затронуло FoundationModelService, AppleIntelligenceMediator, прогрев в AgentApp, сводки при сжатии и подсчёт токенов в Compression.swift, а также AboutSelf.
Приём: стирание типа у хранимого свойства
#available работает для путей выполнения кода, но не для хранимого свойства. Класс не может содержать LanguageModelSession?, если такого типа нет в запущенной ОС. Решение — хранить его как AnyObject? и приводить обратно к нужному типу в месте использования, внутри защищённого кода:
/// Type-erased `LanguageModelSession` so the stored property compiles below macOS 26.
private(set) var session: AnyObject?
@available(macOS 26.0, *)
var transcript: Transcript? {
(session as? LanguageModelSession)?.transcript
}
Как сказано в сообщении коммита, хранимые свойства больше не «затягивают тип фреймворка в структуру класса».
Проверки доступности также получили честный ответ для старых систем:
static var unavailabilityReason: String {
guard #available(macOS 26.0, *) else { return "Apple Intelligence requires macOS 26 or later." }
...
}
Так что на macOS 14 или 15 Apple Intelligence просто отображается как недоступный с понятной причиной, а всё остальное работает. На macOS 26 ничего не меняется.
Длинный хвост: десять пакетов
Agent! собран из собственных Swift-пакетов, и каждый из них объявлял свою минимальную версию ОС. Коммит 4d7fca86 обновил все десять до выпусков, объявляющих .macOS(.v14):
| Пакет | Версия |
|---|---|
| AgentAccess | 2.10.24 |
| AgentAudit | 1.3.9 |
| AgentColorSyntax | 1.2.8 |
| AgentD1F | 1.0.15 |
| AgentEventBridges | 1.1.8 |
| AgentLLM | 1.0.8 |
| AgentMCP | 1.6.10 |
| AgentSwift | 1.1.11 |
| AgentTerminalNeo | 1.37.9 |
| AgentTools | 2.53.19 |
В такие дни владение всеми зависимостями окупается. Не пришлось ждать мейнтейнера upstream — просто десять тегов.
Сюрприз: 26.4
Одному API понадобилось больше, чем проверка на 26.0. SystemLanguageModel.tokenCount(for:) существует только начиная с macOS 26.4, поэтому проверка его доступности была перенесена с 26.0 на 26.4. Без этого Mac с версиями от 26.0 до 26.3 попытался бы вызвать метод, которого там ещё нет. Хорошее напоминание о том, что «фреймворк доступен» и «этот метод доступен» — разные вопросы.
Что вы получаете на старых Mac
На macOS 14.6 и 15, на Apple Silicon или Intel, Agent! работает точно так же:
- все 23 облачных и локальных LLM-провайдера
- полный цикл инструментов: программирование, сборки Xcode, git, шелл от вашего имени или от root, Accessibility, AppleScript, JXA, AgentScript, автоматизация Safari и MCP
- сжатие контекста, которое использует собственные сводки модели и подсчёт токенов провайдера, просто без уровня Apple Intelligence
macOS 26 нужна только для функций Apple Intelligence, работающих на устройстве.
Как установить
Каждый выпуск и предварительный выпуск поставляется в виде подписанного, нотаризованного и заштампованного бинарника. Собирать из исходников никогда не требуется:
brew update && brew install --cask agentiloop-agent
Или скачайте .dmg со страницы GitHub Releases. Если вы ждали этого на старом MacBook или Mac mini с Intel — сегодня тот самый день.