Почему GitHub Runner — execution engine Cloud Mac AI Stack

Когда Claude Code дописал код — кто реально собирает, тестирует и публикует?
Claude Code производит Diff, GitHub Runner производит Fact.

Cloud Mac AI Stack  ·  вход L1  ·  2026.06.03  ·  ~12 мин  ·  без регистрации runner

Self-hosted GitHub Actions runner на Cloud Mac — конвейер сборки iOS

Недавно вышла статья Cloud Mac vs локальный Mac: всё больше команд переносят Claude Code, индекс CodeGraph и при необходимости Ollama на постоянный macOS-узел. Отсюда иллюзия: «раз уж в облаке — каждый git push станет зелёным». На практике агент радуется в SSH, а GitHub Actions крутится на ubuntu-latest без xcodebuild, либо macOS-джобы полчаса стоят в очереди.

Это не справочник «что такое GitHub Runner» и не регистрация actions/runner (это L1-Q02). Текст закладывает методологию Cloud Mac AI Stack: слой L1 объясняет, зачем нужен отдельный движок исполнения — и почему аренда Cloud Mac без runner остаётся просто удалённым рабочим столом.

L1
уровень статьи
0
шагов регистрации
1
цепочка iOS
4
C→D→F→W

Cloud Mac AI Stack · слоган

Claude Code производит Diff, GitHub Runner производит Fact.

Вместо общих слов «агент / CI» мы связываем Context → Diff → Fact → Workflow как типы результатов. Diff — предлагаемые правки; Fact — проверяемые сборки и checks. Inference (L2, опционально) — приватные токены модели на узле.

L1 в Stack

Claude Code (L3) отвечает «как менять код?» GitHub Runner (L1) — «можно ли организации смержить, подписать и выкатить?» Без L1 любой Diff — мнение в терминале, а не Fact на кнопке merge.

Язык Stack: Context → Diff → Fact → Workflow

Везде пишут про Claude Code, Cursor, MCP, OpenHands — редко про то, кто создаёт организационную правду после правок. В Cloud Mac AI Stack четыре результата (L2 Inference отдельно):

Цепочка (≠ runtime · см. #stack-map)

  Context  →  Diff  →  Fact  →  Workflow
  (MCP)      (Claude Code)  (Runner)  (OpenHands)
УровеньРольКомпонентРезультат
L0ИнфраструктураCloud Macсреда macOS
L1ИсполнениеGitHub RunnerFact
L2ИнференсOllamaInference (опц.)
L3КодированиеClaude CodeDiff
L4Связь инструментовMCPContext
L5Автономное исполнениеOpenHandsWorkflow

Вопрос не «достаточно ли умён LLM», а: существует ли L1 как слой? Без Fact PR не станет зелёным, как ни хороши Context и Diff.

Кодирование и исполнение: почему «Cloud Mac» не закрывает CI

В Cloud Mac vs локальный Mac мы разделили Inference модели (API) и выполнение агента (shell на macOS). Часто забывают второй разрез: CI после push — воспроизводимый, аудируемый, независимый от SSH.

СлойТипичноТриггерВопрос
Кодирование / агентClaude Code, Cursorтерминал, IDE«Допиши PR»
Исполнение / CIGitHub Actions + self-hosted runnerpush, PR, cron«Собирается и тестируется ли коммит в заданной среде?»

Разрыв: тесты зелёные в SSH на Cloud Mac, workflow всё ещё ubuntu-latest. Официальная правда репозитория — красная. Для iOS TestFlight на Linux не стартует. L1 часто требует тот же класс macOS Apple Silicon, что и у разработчиков.

У аутсорс-команд и распределённых iOS-групп (СНГ, удалёнка из разных часовых поясов) compliance всё чаще требует воспроизводимых сборок, а не скриншотов из SSH. Runner переводит «агент сказал OK» в Fact — логи, артефакты, checks.

Типичная ошибка: «все тесты прошли» — PR красный

Повторяющийся сценарий в репозиториях клиентов:

  1. Claude Code по SSH на Cloud Mac: «все тесты прошли».
  2. git push, спокойная встреча.
  3. Actions с runs-on: ubuntu-latest.
  4. Checks красные; в логе часто: xcodebuild: command not found — или зелёный только Node, без iOS job.

Claude Code не виноват — среда сессии ≠ среда CI. Runner воспроизводит утверждение как Fact на той же линии GitHub Actions self-hosted runner macOS, при желании на том же узле, что и агент.

Runner — не «ещё один Mac в аренду»

  • Не карточка продукта Cloud Mac — аренда это L0; runner — процесс + labels + политика workspace на L0.
  • Не инструкция к macos-latest — другие очереди и тарифы hosted vs self-hosted.
  • Не замена OpenClaw — там оркестрация Workflow; runner выполняет xcodebuild и fastlane.

Cloud Mac даёт macOS и сеть; runner встраивает мощность в модель событий GitHub. Без runner Cloud Mac — удалённый стол; с runner — инфраструктура.

Пять уровней · Stack ≠ порядок вызовов (#stack-map)

Статьи L2–L5 будут ссылаться сюда. Схема — уровни ответственности, не «кто кого вызывает в runtime».

Важно

  • Claude Code не обязан использовать Ollama — L3 часто через API; L2 Inference опционален.
  • MCP выше L3 на схеме = слой Context, не «MCP стартует раньше CLI».
  • Внедрение: #stack-order — иное, чем несущая нагрузка снизу вверх.
Cloud Mac AI Stack (ответственность · снизу вверх)

                 ┌──────────────┐
                 │  OpenHands   │  L5 · Workflow
                 └──────┬───────┘
                        │
                 ┌──────▼───────┐
                 │     MCP      │  L4 · Context
                 └──────┬───────┘
                        │
                 ┌──────▼───────┐
                 │ Claude Code  │  L3 · Diff
                 └──────┬───────┘
                        │
                 ┌──────▼───────┐
                 │    Ollama    │  L2 · Inference (опц.)
                 └──────┬───────┘
                        │
                 ┌──────▼───────┐
                 │ GitHub Runner│  L1 · Fact  ← эта статья
                 └──────┬───────┘
                        │
                 ┌──────▼───────┐
                 │  Cloud Mac   │  L0
                 └──────────────┘

L0 держит вычисления; L1 — доверие организации (Fact); выше Diff, Context, Workflow.

Зачем execution engine: роль и цепочка iOS

Как execution engine (движок исполнения) L1 делает три повторяемые задачи:

  1. События репозиторияpush, pull_request, workflow_dispatch → jobs с labels runner.
  2. macOS toolchainxcodebuild, swift test, notarytool, подпись — на Linux не заменить.
  3. Развязка с AI — правка агента ≠ зелёная CI; runner даёт артефакты и отчёты.
Цепочка L1 (концептуально)

  Claude Code (L3, SSH)
           │  git push
           ▼
  GitHub Actions
           ▼
  Runner (L1 · self-hosted · macOS · ARM64)
           ├── xcodebuild
           ├── тесты
           ├── archive → .ipa
           └── fastlane → TestFlight

Кодирование в L3; бинарная доставка в L1. Без L1 — «агент готов», а в App Store Connect пусто.

# .github/workflows/ios-ci.yml (фрагмент)
jobs:
  build-ios:
    runs-on: [self-hosted, macOS, ARM64, cloud-mac]
    steps:
      - uses: actions/checkout@v4
      - run: xcodebuild -scheme MyApp -destination 'platform=iOS Simulator,name=iPhone 16' test

Поисковый интент: редко «GitHub Runner», чаще iOS CI

Реальные запросы:

  • GitHub Actions self-hosted runner macOS / Apple Silicon runner
  • GitHub Runner Mac mini / iOS CI/CD self-hosted
  • GitHub Actions iOS build / автоматизация TestFlight

Один архитектурный вопрос: диспетчеризация на свой узел M-series вместо Linux-пула или очереди macos-latest. Cloud Mac или офисный Mac mini — железо; регистрация runner + labels — L1. Сравнение: Mac mini vs Cloud Mac для iOS-команд. Стоимость — L1-Q05 позже.

Когда Linux достаточен — и когда нет

Измерениеubuntu-latestCloud Mac self-hosted
Xcode / iOS✅ нативно
ARM64-согласованностьинаякак у dev-машины
Claude Code на том же узле✅ опция
ежедневная CIминуты + очередьфиксированный узел

Linux часто хватает: статический Next.js, API Node/Python/Go в Docker, редкий CI в личном репо. Сигнал macOS runner: Xcode, подпись, симулятор, TestFlight в workflow — или вы уже сравниваете Mac mini vs Cloud Mac.

Hosted macos-latest vs self-hosted на Cloud Mac

HostedSelf-hosted Cloud Mac
редкий archive, <5 macOS jobs/месежедневная CI, стабильные сертификаты
очередь и поминутная оплата OKAI + CI один стек, одна машина под мониторингом
нет фиксированного egress IPстатический IP, intranet-артефакты, CodeGraph в смену

Эмпирическое правило (не SLA): >10 macOS jobs/неделю, много sign/archive → L1 на фиксированном узле. Ниже — сначала hosted macOS для проверки pipeline.

Внедрение: сначала Fact, потом Diff

Структурная схема — ответственность; развёртывание часто противоположно хайпу:

  1. L0 — Cloud Mac (SSH, egress).
  2. L1 — runner, воспроизводимый push → зелёный/красный (этот текст).
  3. L2–L3 — Ollama Inference, Claude Code Diff на стабильной CI.
  4. L4–L5 — MCP Context, OpenHands Workflow.

CodeGraph + агент может тронуть 18 файлов — без macOS CI неизвестно, взорвётся ли archive. Также Mac mini + Claude Code 2026 (L3); здесь L1 — ночью runner, днём агент, роли раздельны.

Решение: L1 как execution engine

L1 в приоритете (self-hosted Cloud Mac)не обязательно
нативные iOS/macOS приложениячистые статические сайты
Flutter с iOS/Xcodeтолько Android/Web
Claude Code на Cloud Mac, CI ещё LinuxNode/Python только Docker/Linux
TestFlight / notarize автоматическиредкие hobby-релизы
фикс IP, CodeGraph на том же хостередкого macos-latest хватает

Два пункта слева? Следующий шаг — L1 в эксплуатации, не ещё один MCP. Серия: L1.

Серия L1: от execution engine к рабочей macOS CI

Фундамент L1-Q01 (эта статья). Далее:

ЧастьqidСтатус
L1-Q01 · зачем runner = execution engineDiff → Fact
L1-Q02 · регистрация на Cloud Macпошаговоследующая
L1-Q03 · Claude Code + CI на одном хостеокнаплан
L1-Q04 · изоляция workspaceбезопасностьплан
L1-Q05 · Mac mini vs Cloud Mac стоимостьочередиплан

Google группирует кластеры; L2+ опирается на существующий Fact — обратная ссылка #stack-map.

FAQ

Cloud Mac vs runner?
L0 vs L1. Аренда ≠ runner автоматически.

Только MacBook как runner?
Можно; крышка, RAM с агентом, смена IP. Ежедневная macOS CI → Cloud Mac 24/7.

Runner и Claude Code на одной машине?
Не обязательно; один узел снижает SSH-зелёный / Actions-красный.

OpenClaw?
Runner = steps; OpenClaw = Workflow. См. OpenClaw cloud automation.

Diff vs Fact?
Diff = правки агента; Fact = checks, логи, артефакты. Merge опирается на Fact. MCP = Context; OpenHands = Workflow.

Ollama под Claude Code на схеме — обязателен?
Нет. L2 Inference опционален; L3 часто API. #stack-map.

L1 · Далее L1-Q02

Self-hosted GitHub Actions runner на Cloud Mac (macOS)

Здесь — зачем L1. Потом: labels, actions/runner, launchd, ротация токенов — Diff и Fact на одном Apple Silicon.

В блог · Cloud Mac AI Stack
macOS CI Тарифы Cloud Mac