← Все статьи

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):

ПакетВерсия
AgentAccess2.10.24
AgentAudit1.3.9
AgentColorSyntax1.2.8
AgentD1F1.0.15
AgentEventBridges1.1.8
AgentLLM1.0.8
AgentMCP1.6.10
AgentSwift1.1.11
AgentTerminalNeo1.37.9
AgentTools2.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 — сегодня тот самый день.