Операторам нравится винить «сломался OpenClaw» после тихого security-патча macOS, тогда как настоящая поломка — Transparency, Consent, and Control тихо отбирает запись экрана или Accessibility у пути к бинарнику шлюза, который вы перенесли в прошлом месяце. Этот playbook сопоставляет симптомы с поверхностями разрешений, даёт две матрицы решений (какую панель открыть первой, когда VNC предпочтительнее SSH), семь шагов HowTo в зеркале JSON-LD и ответы FAQ для вставки в инцидент — плюс ссылки на doctor и полный гайд по установке.
Симптомы, сопоставленные с «корзинами» TCC
- Вызовы инструментов со скриншотом или стримом UI падают сразу, в логах ошибки entitlements → Screen Recording (запись экрана).
- AppleScript или AX-автоматизация возвращает пустые деревья, процесс шлюза жив → Accessibility.
- Чтение workspace внезапно отказывает часть путей Library после обновления ОС → Full Disk Access для конкретного вспомогательного бинарника, а не только для оболочки, с которой вы его запускали.
Матрица A — какую панель настроек открыть первой
| Основной сигнал | Первая панель | Вторая панель | Какие доказательства собрать |
|---|---|---|---|
| Падают API буфера пикселей | Запись экрана | Файлы и папки | Фильтр Console на отказы tccd за последний час |
| Ошибки AXUIElementCopyAttributeValues | Универсальный доступ | Автоматизация | Выборка 3 падающих AX-запросов с метками времени |
| EPERM на защищённых путях | Полный доступ к диску | Локальная сеть | Точный POSIX-путь отказа, не сводка с редактированием |
Матрица B — канал восстановления и риск
| Канал | Можно нажать TCC-диалоги | Удобно для аудита | Когда предпочесть |
|---|---|---|---|
| Только SSH | ✗ | ✓ | Хвост логов и правки plist после того, как диалоги уже пройдены |
| Графическая сессия VNC | ✓ | ✓ | Первый запуск после обновления; см. руководство по VNC |
| PPPC-профиль через MDM | N/A | Лучший вариант | Корпоративные парки; всё равно проверяйте doctor на канарейках |
HowTo: семь шагов с деталями для оператора
Шаг 1. Запустите диагностику doctor до любых правок в настройках — так вы не гоняетесь за призраками. Зафиксируйте версию macOS, путь к бинарнику шлюза и сигнатуру, которую показывает система.
Шаг 2. В «Конфиденциальности и безопасности» прочитайте точное имя бинарника в списке. Обновления Homebrew часто переносят universal binary, а LaunchAgent всё ещё смотрит на старый путь — тумблер в настройках «включён», а работающий процесс — другой файл без согласия.
Шаг 3. Рутинное «выключить — удалить запись — запустить новый бинарник интерактивно — снова включить разрешения — закрепить путь plist в Git». Без удаления устаревшей строки macOS может продолжать привязывать TCC к inode, который больше не ваш рабочий процесс.
Шаг 4. После апгрейдов не обойтись без графики: SSH не нажмёт «Открыть системные настройки» на листе. Подключитесь по VNC под учёткой, которая реально владеет GUI-сессией шлюза, пройдите диалоги, затем вернитесь к SSH.
Шаг 5. Снова doctor и архив JSON рядом с номером билда macOS — это минимальный пакет для аудита и постмортема без споров «у кого воспроизводится».
Шаг 6. Предпочитайте launchctl bootout и затем bootstrap вместо kill -9, чтобы состояние TCC и Mach-сервисы оставались согласованными.
Шаг 7. Дымовый tool-call, который раньше падал; не ограничивайтесь проверкой «чат отвечает», потому что чат может жить, пока пайплайн инструментов всё ещё заблокирован.
Для первой установки сверяйте пути с полным гайдом по развёртыванию OpenClaw на macOS, чтобы не одобрить чужой helper. Если шлюз крутится на выделенном узле NodeMac, заведите чеклист «путь бинарника = путь в plist = путь в TCC» и проверяйте его при каждом merge инфраструктуры.
Почему «вчера работало» почти всегда несовпадение путей
macOS сопоставляет выдачу TCC с inode и парой Team ID, а не с маркетинговым именем. Когда brew переносит universal binary, старый тумблер может оставаться «включённым», а исполняется уже другой файл без consent. Поэтому важно выключить и удалить запись: UI настроек заново привяжется к живому пути из /opt/homebrew или вашего префикса на хостах NodeMac.
Документируйте и исполняемый файл шлюза, и любой helper с привилегированным чтением. Команды часто одобряют CLI-обёртку, а LaunchAgent держит вложенный Node без Accessibility — doctor зелёный, потому что проверяет другой кодовый путь, чем продакшен.
Количественные ограждения, которые забывают
- SLA повторного одобрения: закончить дымовой прогон TCC в течение 24 часов после выката security-ответа по macOS.
- Пакет доказательств: минимум 2 выдержки из Console и один JSON doctor на тикет инцидента.
- Канарейки: держите 1 staging Mac mini на регион, который получает патчи на сутки раньше продакшена.
Совет: зафиксируйте таблицу «сборка шлюза → Team ID подписи», чтобы security-ревью не путали nightly developer-signed и release production.
FAQ
Сброс настроек приватности сломает другие приложения?
Только те записи, которые вы удалите. Идите категория за категорией; при требованиях комплаенса снимайте экран «до» для отката.
Меняют ли регионы NodeMac поведение TCC?
Нет — узлы в HK, JP, KR, SG и US крутят те же билды macOS, но задержка влияет на то, как быстро оператор успеет по VNC нажать диалог до рестарта сервиса ватчдогом.
С чего начать новичку?
Справочный центр по основам SSH, затем возвращайтесь сюда после первого «апдейтного» уикенда.
Гигиена TCC — часть отношения к каждому Mac mini M4 как к полноценному узлу автоматизации: чип Apple Silicon не отменяет модель приватности Apple. Шлюзам на нативном macOS нужны и SSH для повторяемых правок, и VNC для согласий, которые должен подтвердить человек. Аренда выделенных Mac mini M4 в Гонконге, Японии, Корее, Сингапуре или США даёт изолированные машины, где одобрения не пересекаются с личным профилем ноутбука разработчика. Когда выходят обновления, предсказуемое железо плюс задокументированные матрицы TCC бьют мистику — откройте страницу цен, если делите канареек и прод по регионам. Графические сценарии — в гайде по VNC.