Agent уже изменил код, но после выхода из удалённой сессии вы не можете подтвердить состояние задачи, а CI не воспроизводит результат.
Быстрое решение: используйте Xcode 27 Coding Agents на удалённом Mac для контролируемой разработки и многошаговой проверки, но не объявляйте их заменой автономного CI. Сборку, тесты, подпись и публикационные ограничения передайте отдельному CI Runner.
Кому нужен этот runbook
Эта инструкция предназначена разработчикам Apple-платформ, которые переносят Xcode 27 Coding Agents с локального Mac на постоянно доступный узел.
Она также нужна платформенным командам, проверяющим разделение учётных записей, репозиториев и командных разрешений, и DevOps-инженерам, которые хотят понять границу между Agent и CI Runner.
Последнее обновление: 15 сентября 2026 года. Сведения о Xcode 27 RC, Coding Agents, разрешениях и подключении внешних агентов сверены с официальной страницей Xcode, системными требованиями Xcode, документацией Apple по Coding Intelligence и материалами WWDC26. Поведение конкретной модели, длительность задания и восстановление после сбоя здесь не объявляются универсальными свойствами.
Сначала разделите три режима эксплуатации
Coding Agent работает внутри рабочего процесса Xcode. Он может использовать одобренные инструменты, команды и расширения, а также выполнять часть многошаговых действий. Но «агент выполнил несколько операций подряд» и «процесс подходит для производственного CI без человека» — разные утверждения.
До настройки узла зафиксируйте три режима:
| Режим | Что делает Agent | Что остаётся отдельной обязанностью | Решение |
|---|---|---|---|
| Контролируемая разработка | Анализирует задачу, изменяет код, запускает доступные действия Xcode | Проверка diff, результата сборки и тестов человеком | Можно использовать на удалённом Mac |
| Длительная управляемая задача | Выполняет цепочку действий с заранее разрешёнными инструментами | Контроль разрешений, состояния сессии и восстановления | Допустимо после приёмки |
| Детерминированный CI | Не должен зависеть от диалога, видимости окна или ответа агента | xcodebuild, тесты, архив, подпись и публикационные проверки | Передать CI Runner |
Проверьте совместимость узла до выдачи доступа. Нужны поддерживаемая версия macOS, совместимая версия Xcode и Apple Silicon, если этого требует ваша конфигурация Xcode 27. Конкретные требования сверяйте с официальной таблицей системных требований Xcode, а не с описанием аренды или сообщением агента.
Для работы через удалённую среду разработки Mac вам также понадобится способ открыть графическую сессию — VNC или веб-консоль. SSH полезен для диагностики и командной работы, но не создаёт автоматически графический контекст Xcode и не переносит его разрешения.
Персональная приёмка: проверьте полный цикл через графическую сессию
Начните не с длительного задания, а с короткого проекта, где изменения легко проверить. Не используйте реальные ключи подписи, токены публикации или чужой рабочий каталог на первом прогоне.
Шаг первый: зафиксируйте исходное состояние
Откройте проект в Xcode и сохраните:
- текущую ветку или идентификатор коммита;
- список изменённых файлов;
- выбранную схему и цель;
- состояние зависимостей;
- исходный результат сборки и тестов.
Имена проекта, пути, Team ID и идентификаторы подписи используйте в виде <PROJECT_PATH>, <TEAM_ID>, <SIGNING_PROFILE>. Так журнал приёмки не станет источником секретов.
Шаг второй: запустите Agent из Xcode
В графической сессии выберите разрешённый Coding Agent и сформулируйте задачу с ограничениями:
- какие каталоги разрешено менять;
- какие команды допустимы;
- какие тесты необходимо запустить;
- что запрещено удалять или переименовывать;
- какой результат считать успешным.
Не пишите «исправь всё и опубликуй приложение». Такая постановка смешивает изменение кода, проверку и выпуск. Разделите их на отдельные этапы с отдельными артефактами.
Шаг третий: наблюдайте не только за чатом
После изменения кода проверьте diff. Затем сопоставьте:
- изменённые файлы;
- журнал Build;
- результаты Test;
- сообщения Preview, если они применялись;
- итоговое резюме агента.
Документация Apple о результатах тестирования в Xcode полезнее самого сообщения «готово»: вам нужен отчёт, который можно сохранить и передать другому инженеру.
Шаг четвёртый: проверьте разрыв управления
Отключите VNC или закройте веб-консоль, не завершая узел через SSH. После повторного подключения сравните время последних изменений, состояние Xcode, дочерние процессы, журнал сборки и отчёт тестов.
Не делайте вывод по одному признаку. Видимое окно могло исчезнуть, пока процесс продолжался. И наоборот, оставшийся процесс не доказывает, что Agent сохранил правильный контекст. Если нельзя восстановить понятный итоговый артефакт, результат приёмки — «не подтверждено».
Шаг пятый: проверьте повторное выполнение
Верните рабочий каталог к исходному состоянию и запустите ту же задачу повторно. Сравните команды, diff, тестовый отчёт и итоговую схему. Если Agent каждый раз выбирает другой путь, это не обязательно ошибка, но такой поток нельзя без дополнительной фиксации превращать в релизный CI.
Что считать достаточным доказательством
Положительный результат — это не скриншот диалога. Он должен включать:
- diff с ожидаемыми изменениями;
- результат сборки;
- отчёт тестов;
- журнал команд;
- сведения о выбранной схеме;
- объяснение, какие разрешения использовались;
- состояние после повторного подключения.
Если отсутствует хотя бы один ключевой артефакт, передайте задачу на повторную проверку, а не в публикационный контур.
Для Windows и Linux: разделите Xcode Agent и внешний доступ
Если основная рабочая машина работает не на macOS, у вас есть две разные топологии.
Первая — вы подключаетесь к удалённому Mac и управляете встроенным в Xcode Agent через графическую сессию. В этом случае Xcode видит открытый проект, выбранную схему и собственный контекст разрешений.
Вторая — внешний Agent подключается к Xcode через поддерживаемый интерфейс, включая Model Context Protocol. Это не означает, что внешний процесс получает безусловный доступ ко всему компьютеру. Перед подключением нужно сверить настройки Xcode, состояние проекта и индикатор активного соединения по официальной инструкции Apple для внешних агентов.
| Топология | Канал управления | Что нужно подтвердить | Основной риск |
|---|---|---|---|
| Встроенный Agent | Графическая сессия Xcode | Открытый проект, схема, разрешённые действия | Потеря видимого контекста и незавершённый диалог |
| Внешний Agent через MCP | Разрешённое соединение с Xcode | Настройки доступа, активное подключение, область проекта | Избыточная область команд и сервисов |
| SSH-управление | Терминал удалённого Mac | Доступность узла, процессы, журналы и команды | Ошибка считать SSH заменой Xcode-сессии |
| CI Runner | Неграфический запуск | Фиксированные параметры, артефакты, подпись | Зависимость от окон, вопросов и ручного выбора |
SSH остаётся полезным. Через него можно проверить процессы, место на диске, состояние репозитория, журналы и командный запуск. Но SSH не отвечает на вопросы, требующие Xcode UI: какой Agent выбран, получил ли он разрешение, открыт ли проект и ожидает ли он подтверждения.
Права внешних инструментов, расширений и MCP-сервисов регистрируйте отдельно. Документация Apple о настройке и расширении агентов должна быть источником для текущих элементов интерфейса и доступных разрешений. Не переносите старую инструкцию на Xcode 27 RC без повторной проверки.
Командная работа: ограничьте пользователя, проект и секрет
Общий удалённый Mac удобен только до первого конфликта. Если несколько разработчиков работают под одной учётной записью, Agent может увидеть соседний каталог, кэш, локальные настройки или сохранённый токен. Даже без злонамеренного действия это создаёт неясный журнал: невозможно точно установить, кто изменил файл и какой контекст использовался.
Разделяйте как минимум:
- учётную запись macOS;
- рабочий каталог;
- ключи и профили подписи;
- переменные окружения;
- кэш зависимостей, если он содержит проектные данные;
- разрешения внешнего инструмента;
- журнал задания.
Для каждого пользователя задайте <WORKSPACE_ROOT> и запретите операции за его пределами, если они не нужны задаче. Доступ к <SIGNING_KEYCHAIN> предоставляйте только потоку, который действительно выполняет подпись. Публикационные токены не должны автоматически наследоваться интерактивным Agent.
Матрица минимальных разрешений
| Объект | Разрешить по умолчанию | Разрешать только отдельно | Остановить приёмку |
|---|---|---|---|
| Исходный код текущего проекта | Да | — | Agent читает чужой проект |
| Сборка и тесты | После проверки команды | Для нестандартных скриптов | Команда меняет систему без объяснения |
| Произвольный Shell | Нет | Только для конкретной операции | Нет журнала и границ команды |
| MCP-сервис | Нет | После регистрации сервиса и области | Сервис видит лишние каталоги |
| Подпись | Нет | На изолированном этапе | Ключ доступен всем задачам |
| Публикация | Нет | Только CI с отдельным одобрением | Agent может выпустить артефакт сам |
Проверяйте негативные сценарии. Попросите Agent обратиться к <OTHER_WORKSPACE>, изменить файл за пределами проекта или прочитать секретную переменную. Ожидаемый результат — отказ и запись причины. Если система выполняет действие, не продолжайте настройку общей среды.
Для заказа отдельного узла под такую проверку можно рассмотреть аренду Mac mini для разработческого окружения. Но аренда не отменяет изоляцию: права macOS, рабочие каталоги и секреты всё равно проектируются вами.
DevOps: передайте воспроизводимые операции в CI
Coding Agent и CI Runner решают разные задачи. Agent полезен там, где нужно понять требование, найти место изменения, предложить исправление и проверить его интерактивно в Xcode. CI нужен там, где одна и та же команда должна давать проверяемый результат без чата и ручного ответа.
Используйте такую границу:
- Agent создаёт или предлагает изменение;
- разработчик проверяет diff;
- Agent может выполнить интерактивную сборку или тест;
- CI получает фиксированный коммит;
- CI запускает xcodebuild, тесты и архивирование;
- отдельный контур проверяет подпись и публикационные условия.
Для точного командного контура используйте справочник Apple по инструментам командной строки Xcode. Он не превращает Agent в Runner, но помогает отделить документируемые команды от действий, которые зависят от окна Xcode.
Сравнение двух прогонов
На одном и том же коммите выполните два отдельных прогона:
| Параметр | Проверка Agent | Проверка CI |
|---|---|---|
| Вход | Запрос разработчика и состояние проекта | Фиксированный коммит и параметры |
| Управление | Xcode, графическая сессия, разрешения | Командный процесс |
| Результат | Diff, резюме, Build или Test | Журналы, отчёты, архив и статус |
| Вопросы пользователю | Возможны | Недопустимы для штатного шага |
| Восстановление | Проверяется отдельно | Должно быть описано процедурой Runner |
| Решение | Можно ли принять изменение | Можно ли пропустить этап дальше |
Сопоставьте версии macOS и Xcode, переменные окружения, SDK, схему, параметры подписи и список зависимостей. Если Agent прошёл проверку только потому, что разработчик вручную выбрал цель или подтвердил диалог, CI не воспроизводит тот же процесс.
Признак неправильной границы — задача останавливается на всплывающем окне, ждёт ответа, требует переднего плана или меняет цель по контексту UI. Такой поток оставляйте в режиме контролируемой разработки.
Если ваша цель — именно безынтерактивная сборка и тестирование через xcodebuild, сначала оформите командный сценарий отдельно, а затем подключайте Agent как слой подготовки изменений. Не наоборот.
Безопасность и восстановление: примите решение по доказательствам
Платформенный ответ должен учитывать не только успешный прогон. Проверьте следующие события:
- Agent задаёт вопрос и ждёт ответа.
- Сетевое соединение прерывается.
- VNC или веб-консоль закрывается.
- Xcode перезапускается.
- Mac перезапускается.
- Истекает разрешение внешнего сервиса.
- Задание пытается обратиться к запрещённому каталогу.
- Команда подписи получает недостаточные права.
Для каждого события запишите состояние до сбоя, наблюдаемое поведение, доступный журнал и требуемое ручное действие. Не называйте задачу восстановимой, если после перезапуска можно только начать её заново без понимания уже сделанных изменений.
Отдельный модуль с точными результатами разрыва сессии и перезагрузки здесь не приводится: для него нужны подтверждённые данные реального узла MACCOME — способ доставки, тип графической сессии, конфигурация, дата и журнал задания. Без этих данных нельзя заявлять, что конкретный Agent продолжает работу после отключения VNC или восстанавливает контекст после перезапуска.
Финальная развилка перед вводом в эксплуатацию
Используйте условия, а не общее впечатление:
- Если Agent изменяет только разрешённые файлы, а Build и Test дают проверяемые артефакты, выбирайте контролируемую удалённую разработку.
- Если внешнему Agent нужен MCP, но проект, команды и сервисы изолированы, разрешайте пилот на отдельной учётной записи.
- Если задание продолжает работу только при открытом окне или после ручного ответа, оставляйте его под наблюдением.
- Если xcodebuild повторяет проверку на том же коммите и с теми же входными данными, передавайте этот этап CI Runner.
- Если после отключения сессии неясны изменения, процессы или итог тестов, возвращайтесь к ручному режиму.
- Если Agent видит чужой репозиторий, ключ, токен или каталог, немедленно прекращайте приёмку.
- Если подпись или публикация требуют интерактивного разрешения, не объявляйте поток автономным.
Итог может быть только одним из трёх:
| Итог | Когда выбирать | Следующий шаг |
|---|---|---|
| Наблюдаемая эксплуатация | Графическая сессия и подтверждение результата обязательны | Назначить владельца задания |
| Два контура Agent + CI | Agent меняет код, CI воспроизводит проверку | Передавать в CI только фиксированный коммит |
| Отложенное внедрение | Нет изоляции, восстановления или доказуемого результата | Исправить права и повторить приёмку |
Главный практический вывод такой: Xcode 27 Coding Agents способны помочь с изменением кода, сборкой, тестированием и частью многошаговых задач на удалённом Mac, но это ещё не автономный CI. Для долгой работы вам нужна не просто доступная машина, а графическая сессия, ограниченные разрешения, понятные артефакты и отдельный воспроизводимый контур.
Локальный Mac остаётся удобнее для ежедневного интерактивного ввода и физических операций. Общий Windows- или Linux-сервер не заменяет macOS-инструменты, но и удалённый Mac не устраняет задержку графического доступа, риск обрыва сессии и необходимость защищать подпись. Покупка собственного Mac mini даёт физический контроль, однако требует единовременных затрат, обслуживания и самостоятельного обеспечения постоянной доступности. Если вам нужен изолированный узел на период приёмки, миграции или запуска долгого Xcode-процесса, аренда Mac у MACCOME позволяет сначала проверить реальный рабочий поток, а затем выбрать подходящий срок и окружение без преждевременной покупки оборудования.
Частые вопросы
Нужно ли держать Xcode открытым для работы Coding Agents?
Встроенный Agent следует проверять именно внутри рабочего процесса Xcode: с открытым проектом, выбранной схемой и активными разрешениями. SSH не заменяет этот контекст. Закрытие окна или выход из учётной записи нельзя считать безопасным способом продолжения задачи, пока отдельный тест не подтвердит сохранение состояния и итоговых артефактов.
Продолжит ли Xcode Agent работу после отключения VNC?
Отключение VNC сообщает только о потере канала управления. Оно не доказывает, что Agent остановился или продолжил работу. После повторного подключения сравните diff, журналы, дочерние процессы, результат сборки и тестовый отчёт. Если один из этих элементов нельзя подтвердить, отметьте задание как незавершённое.
Могут ли Xcode Coding Agents автоматически запускать сборку и тесты?
В разрешённом контексте Agent может выполнять такие действия. Но автоматический запуск не равен воспроизводимому CI: параметры могут зависеть от проекта, схемы, разрешений или диалога Xcode. Надёжный релизный этап должен отдельно запускать xcodebuild, сохранять отчёты и проверять подпись без интерактивного выбора.
Как ограничить команды Agent в общей удалённой среде?
Используйте отдельные учётные записи macOS, рабочие каталоги и минимальные права. Зарегистрируйте разрешённые команды, внешние инструменты и MCP-сервисы. Произвольный Shell, ключи подписи и публикационные токены не выдавайте по умолчанию. В тесте на отказ Agent должен не получить доступ к чужому проекту или секрету.
Может ли Xcode Agent заменить iOS CI Runner?
Agent не следует считать заменой CI Runner. Он предназначен для интерактивной работы с кодом и Xcode, тогда как Runner выполняет фиксированные команды, тесты, архивирование и проверки подписи. Если процесс требует вопроса, окна или ручного выбора цели, оставьте его в наблюдаемом режиме и не включайте в автономный релизный контур.