В апреле–мае 2026 GitHub Actions начал прогибаться под AI Coding Agents. Недельный compute вырос с 500M до ~2,1 млрд минут, пик коммитов Agent — около 275M в неделю, а 6 мая после простоя Copilot Cloud Agents доля сбоев Runner достигла 17,1%. GitHub публично обещает план 30×. Параллельно компромисс цепочки npm TanStack 11 мая и червь Mini Shai-Hulud, читающий ~/.claude.json и конфиги MCP, превратили связку pull_request_target + checkout форка + отравление CLAUDE.md в передний край атаки. Материал для техлидов и maintainer CI, которые ещё держат iOS/macOS pipeline на hosted runner и собираются открыть PR через Copilot Coding Agent, Claude Code или Cursor. Ниже — семь конкретных болевых точек, матрица ёмкости, таблица границ доверия, восемь шагов runbook, матрица ошибок и схема разгрузки fork-PR на remote Mac mini M4 Pro в шести регионах. Цифры — из постов статуса GitHub, заметки CSA и публичных Runner Guard / Varden; после обновления upstream открывайте ссылки заново. Тарифы — на странице цен NOVAKVM, заказ — на странице оформления, удалённый доступ — в центре помощи. Читайте вместе с материалом про GitHub Actions Runner, гибридным Xcode Cloud CI и статьёй про временные окна CI и Agent.
[ SECTION_01 ] // PAIN_MAP Где GitHub CI/CD ломается первым, когда трафик ведут AI Agents
- Очереди Actions визуально удлиняются. После включения Copilot Coding Agent на активном репозитории PR-workflow уходят из секунд dispatch в минуты pending. Первая реакция — «нужно больше runner»; корень чаще в том, что Agent насыщает webhook и upstream-очереди.
- Сессии Agent сами зависают на пике. Публичные отчёты фиксируют всплеск отказов старта сессий до 84%, ожидание с 15–40 секунд до 54 минут. Баг кэша rate-limit продлевал окна блокировки — серия мини-аутов вместо чистого восстановления.
- Срабатывает потолок concurrency в 100 run. Workflow с
concurrency: { group, queue: max }отклоняются, когда Agent заливает группу десятками fork-PR. Человеческие push блокируются вместе с ними. - Лимиты webhook достигаются тихо. Репозиторий ограничен 1500 trigger-событий за 10 секунд и 500 queued run за 10 секунд. Agent, батчащий правки и ветки, теряет события — в UI «нет run», хотя webhook не попал в очередь.
- iOS/macOS команды чувствуют это раньше. Concurrency hosted macOS: 5 job на Free/Pro/Team, 50 на Enterprise. Linux едет на эластичности; macOS — «пять полос», Archive и notarization оказываются в хвосте.
- Agent не отменить, аудит — только workflow log. После триггера workflow кнопки Cancel нет. Использование credential и исходящий трафик видны постфактум в логах — именно тот пробел, который выигрывает prompt injection.
- Обратная связь удлиняется, а не сокращается. Люди итерировали 3–5 раз в день; Agent — сотни. Каждый цикл бьёт lint, unit и e2e. Падает hit rate кэша, нагружается индексный tier, лагает callback статуса check — разработчик не знает, завершился ли run.
[ SECTION_02 ] // SCALE_MATRIX Матрица ёмкости: где Agent-трафик пробивает лимиты Actions
Сведение опубликованных лимитов Actions, слотов concurrency и профиля нагрузки Agent-эры в одну таблицу делает порядок узких мест очевидным.
| Измерение | Документированный лимит | Паттерн Agent-эры | Первый режим отказа |
|---|---|---|---|
| Trigger-события workflow | 1 500 за 10 с на репозиторий | Agent пушит дочерние ветки по множеству fork-PR | События отброшены; CI «молчит» |
| Очередь workflow run | 500 за 10 с | Fan-out reusable workflow в monorepo | Run блокируются при переполнении |
| Очередь concurrency group | 100 на группу с queue: max |
Несколько Agent, fork-PR в одну группу | Run №101 отклонён |
| Concurrency macOS | 5 на Free/Pro/Team, 50 на Enterprise | iOS smoke + Archive + notarize на macOS | Mac job явно стоят в очереди |
| Очередь self-hosted job | 24 ч без schedule, затем auto-cancel | Ночные Agent run, отставание ёмкости | Job тихо отменены |
| Платформенный compute | ~2,1 млрд минут Actions в неделю (2026 Q2) | Agent 275M коммитов/нед, PR 4M→17M | План 30× всё ещё отстаёт от кривой |
У небольших и средних команд первым виден macOS concurrency и потолок concurrency group. У крупных monorepo раньше пробиваются webhook и rate workflow run. Agent не ждёт human review: подключите его к ветке с полной CI-матрицей — лимиты проверятся за часы, не дни.
Узкое место не «нам нужно больше runner», а то, что три слоя лимитов (события, очереди, слоты concurrency) одновременно давят cadence коммитов Agent. Без перерисованного flow-plan точечное масштабирование только переносит боль.
[ SECTION_03 ] // TRUST_BOUNDARY Коллапс доверия pull_request_target и отравление CLAUDE.md
Помимо ёмкости, в 2026 сложнее новая поверхность атаки. Заметка Cloud Security Alliance от 3 мая формулирует риск прямо: AI coding agents обрабатывают недоверенный контент репозитория (заголовки PR, issue, комментарии, имена веток), имея write-доступ и секреты pipeline. Компромисс npm TanStack 11 мая — production-grade пример прохождения этого пути end-to-end.
Таблица ниже сопоставляет типовые конфигурации с новой поверхностью — с чего начать аудит workflow.
| Поверхность | Условия срабатывания | Публичная ссылка | Минимальное направление fix |
|---|---|---|---|
| pull_request_target + checkout форка | Workflow на pull_request_target checkout fork-кода и build |
Компромисс npm TanStack, 11 мая | Переход на pull_request; release-секреты только после approve reviewer base-ветки |
| Отравление CLAUDE.md / .cursorrules | Fork-PR переписывает CLAUDE.md, copilot-instructions.md, .cursorrules |
Runner Guard RGS-010 и RGS-011 | Инструкции Agent только из base; не доверять путям fork-checkout |
| .mcp.json и hijack MCP-сервера | Червь Mini Shai-Hulud exfiltrates ~/.claude.json и MCP |
Datadog Security Labs | MCP credential вне процесса Agent; секреты только на границе sandbox |
| Prompt injection через метаданные PR | Инструкции в title PR, issue body, комментариях | Примеры CSA research note | Policy filter до execution, allowlist tool, секреты вне контекста модели |
| «Липкий» self-hosted runner | Один runner обслуживает несколько PR без reset среды | Orca 2026 risk roundup | Ephemeral runner; destroy/recreate на job |
| Сторонние Actions и cache poisoning | uses: org/action@v1 вместо full SHA; общий cache между PR |
Цепочка TanStack включала cache poisoning Actions | Pin на commit SHA; partition cache по trust; release runner отвергает PR cache |
Трёхслойная архитектура — новый baseline. GitHub опубликовал security architecture для Agentic Workflows: слой решений Agent, execution layer со секретами, credential layer у release-систем. Процесс Agent не держит write-токены и release API keys; секреты появляются только в downstream job после review выхода Agent. Это структурный паттерн, ограничивающий blast radius даже при успешном prompt injection.
Почему iOS/macOS командам двигаться первыми. Apple credential — signing certificate, provisioning profile, App Store Connect API key, аккаунты notarization — долгоживущие и высокоимпактные. Держать их в том же trust domain, что runner, доступный Agent, — первый блок для разделения.
[ SECTION_04 ] // RUNBOOK Восемь шагов: разгрузка на self-hosted Mac runner с трёхслойным split
Runbook ниже объединяет security guidance GitHub Actions, заметку CSA и паттерны развёртывания iOS-команд на remote Mac mini M4 и M4 Pro NOVAKVM. После обновления политики перечитывайте upstream-ссылки.
https://docs.github.com/en/actions/security-for-github-actions
https://docs.github.com/en/actions/reference/limits
https://github.com/marketplace/actions/runner-guard
https://github.com/markndg/varden
- Аудит pull_request_target. Найдите в репозитории
pull_request_target. Любой workflow, который делаетactions/checkoutна PR ref и затем build, publish или install, — в списке remediation. Предпочтитеpull_request; если нужны секреты — split на base-only safe job и fork-validation job. - Три метки runner.
fork-prбез release-секретов: lint, unit, sandboxed e2e.trusted-build— merge в protected branches.release-only— notarization и signing credential за protected environment с required reviewers. - Вынести
fork-prс hosted на self-hosted remote Mac. Регистрируйте runner на узлах NOVAKVM с--ephemeral— каждый job на свежей среде. Это снимает «пятилинейное» узкое место hosted macOS. - Маршрутизация Agent-трафика по региону. Метки
region=ap-sg,region=jp-tk,region=us-west. Fork-PR job — по региону автора PR или round-robin. APAC Agent — на Singapore, Hong Kong, Tokyo; NA — US East и US West. - Pin сторонних Actions на SHA и scan отравления AI-config. Замените
uses: org/action@v1на full commit SHA. Runner Guard или аналог вfork-prjob для переписыванийCLAUDE.md,copilot-instructions.md,.cursorrules,.mcp.json. - Ужесточить permissions, OIDC, protected environments. Top-level
permissions— read-only, явный opt-in на job. Долгоживущие PAT — на OIDC short-lived для publish/deploy. Release credential — за protected environment. - Runtime guardrails для runner и Agent. Default-deny egress на
fork-pr; allowlist GitHub API, registry, mirrors. MCP и tool calls Agent — через self-hosted firewall вроде Varden с allow/warn/block/monitor. Секреты не в контексте модели. - 30-дневный capacity review. Ежемесячно Actions usage по trigger (fork PR, main, scheduled). macOS concurrency >80% self-hosted ёмкости две недели — поднять класс (M4 16GB, M4 24GB, M4 Pro 64GB), диск 1TB/2TB, parallel resources. Посуточная аренда — spike buffer, помесячная — baseline.
$ ./config.sh \
--url https://github.com/acme/ios-app \
--token "$RUNNER_TOKEN" \
--labels "self-hosted,macOS,arm64,fork-pr,region=ap-sg" \
--ephemeral
$ ./config.sh \
--url https://github.com/acme/ios-app \
--token "$RUNNER_TOKEN" \
--labels "self-hosted,macOS,arm64,trusted-build,region=ap-sg" \
--ephemeral
runner registered: fork-pr region=ap-sg ephemeral=true
runner registered: trusted-build region=ap-sg ephemeral=true
release-only: protected environment
name: ios-fork-pr
on: pull_request
permissions: read-all
concurrency:
group: fork-pr-${{ github.event.pull_request.number }}
cancel-in-progress: true
jobs:
build:
runs-on: [self-hosted, macOS, arm64, fork-pr]
steps:
- uses: actions/checkout@<full-sha>
- uses: vigilant-llc/runner-guard@<full-sha>
with:
checks: rgs-010,rgs-011,unpinned-actions
- run: xcodebuild -scheme App -configuration Debug \
-destination "platform=iOS Simulator,name=iPhone 15"
[ SECTION_05 ] // HARD_FACTS Цитируемые цифры и матрица ошибок GitHub Actions
- Объём коммитов Agent: пик ~275M в неделю в 2026, PR с 4M (сентябрь 2025) до 17M (март 2026).
- Compute Actions: 500M минут/нед в 2023, 1B в 2025, ~2,1B в 2026 Q2 (GitHub Availability Report, 28 апреля).
- План 30×: план 10× от октября 2025 к февралю 2026 признан недостаточным; новая цель — 30×. Это design target, не доставленная ёмкость — weekday peak всё ещё в очереди.
- Инцидент 6 мая: Copilot Cloud Agents offline несколько часов; сбой Runner ~17,1%. Root cause — подсистема allocation runner под burst Agent.
- Лимиты Actions (GitHub docs): trigger 1 500/10 с на repo; очередь run 500/10 с; concurrency group 100; self-hosted job auto-cancel после 24 ч в очереди.
- Concurrency macOS: Free/Pro/Team — 5 параллельных macOS job; Enterprise — 50; larger runner делят тот же cap.
- Детекция отравления AI-config: Runner Guard RGS-010 и RGS-011 — первые правила для переписываний
CLAUDE.md,copilot-instructions.md,.cursorrules,.mcp.json. TanStack npm и Mini Shai-Hulud — в IOC signatures.
| Симптом | Вероятная причина | Минимальная проверка |
|---|---|---|
| Workflow долго в queued | Исчерпан macOS concurrency; Agent насыщает очередь | Actions Insights concurrency; self-host fork-pr |
| Run cancelled, concurrency group full | Группа достигла cap 100 run | Group по номеру PR; изолировать fork-PR Agent |
| Push не триггерит run | Webhook dropped на 1 500/10 с | Webhook delivery; throttle Agent или batch push |
| Self-hosted job auto-cancel 24h | Runner offline или недоразмерен | Uptime runner; reclaim после ephemeral failure |
| Fork PR build получил base secrets | pull_request_target + fork-ref checkout |
pull_request; секреты в protected environment |
| Поведение Agent резко меняется | Fork PR отравил CLAUDE.md или .cursorrules |
Runner Guard RGS-010/011; config Agent только из base |
| Credential в исходящем трафике | Червь класса Mini Shai-Hulud читает ~/.claude.json или MCP |
Rotate credential; MCP вне Agent; egress |
| Неожиданный npm publish | Коллапс trust boundary release.yml + cache poisoning | Publish через protected environment, reviewers, OIDC, pinned SHA |
[ SECTION_06 ] // PLATFORM_CLOSE Footprint M4 Pro в шести регионах и почему fork-PR — на remote Mac
Singapore и Hong Kong — позиции fork-PR и trusted-build по умолчанию для APAC; SSH, GitHub clone и round-trip Apple notarization остаются стабильными. Tokyo и Seoul — для японских и корейских команд с release-only runner под data-residency и региональные потоки App Store. US East и US West принимают Agent из европейских часовых поясов и дают здоровые round-trip к GitHub, OpenAI и Anthropic API без конкуренции с APAC-нагрузкой.
По sizing: M4 16GB / 256GB хватает для fork-PR validation runner с destroy между job. M4 24GB / 512GB — trusted-build mainline. M4 Pro 64GB / 2TB с диском 1TB или 2TB и parallel resources — release-only runner и multi-Xcode; см. материал про несколько Xcode и статью про parallel resources.
Где альтернативы не дотягивают. Полностью на hosted runner — ставка на ёмкость, trust boundary и debuggability платформы, которая ещё идёт к 30×; 17,1% сбоя Runner 6 мая не последний. Офисный Mac mini или ноутбук разработчика как runner: нет ephemerality, нет регионального spread, offline при закрытой крышке, тот же trust domain, что production credential — именно то, что эксплуатировал инцидент TanStack. Виртуализированный macOS VPS: нестабильность Apple toolchain под высокочастотными Agent trigger, notarization редко так же гладко, как на bare metal.
Для iOS/macOS команд, которым нужно реально разделить fork-PR validation, release credential и слой доступа Agent, облачная аренда Mac Mini bare-metal NOVAKVM — более подходящий вариант: шесть регионов для маршрутизации Agent-трафика, выделенный Apple Silicon под ephemeral runner и coexistence нескольких Xcode, эластичная посуточная, понедельная или помесячная аренда под пики Agent. Сравните модели и тарифы на странице цен NOVAKVM, запустите pilot fork-PR со страницы заказа, удалённый доступ — в центре помощи. Топология гибридного CI и scheduling по временным окнам — в материале про Xcode Cloud hybrid CI и статье про временные окна CI и Agent.