# Как превратить чёлку MacBook в пульт управления ИИ-агентами: настройка Claude Code, Codex, Cursor и Copilot

> AI Release · @ai_release1 · https://ai-release.org/guides/kak-prevratit-chelku-macbook-v-pult-upravleniya-ii-agen.html

## TL;DR

- Время выполнения: 40–60 минут (без учёта скачивания приложений).
- Уровень сложности: Intermediate.
- Понадобится: MacBook с вырезом в верхней части экрана (MacBook Pro 14/16 с 2021 года или MacBook Air на M2 и новее) либо внешний монитор; macOS; Xcode Command Line Tools; Homebrew; Node.js LTS + npm; git; аккаунты Anthropic, OpenAI, Cursor, GitHub Copilot; опционально — приложение для чёлки (boring.notch или NotchNook — актуальные версии, цены и способ установки сверьте с документацией).

## Требования и подготовка
![Иллюстрация к разделу «Требования и подготовка»](https://ai-release.org/guides/img/kak-prevratit-chelku-macbook-v-pult-upravleniya-ii-agen-ru-1.jpg)


- macOS — проверить командой `sw_vers`. Точную минимальную версию под Claude Code, Codex и Cursor сверьте с документацией: она меняется от релиза к релизу.
- Права администратора (нужны для установки Xcode Command Line Tools и Homebrew).
- ~2 ГБ свободного места: Node.js, глобальные npm-пакеты и одно приложение для чёлки.
- Node.js LTS и npm — оба агента (Claude Code и Codex) ставятся как npm-пакеты.
- Аккаунты: Anthropic (Claude Code), OpenAI или ChatGPT-подписка (Codex), Cursor (IDE), GitHub с активной подпиской Copilot.
- Терминал с оболочкой zsh (по умолчанию в macOS) — команды ниже даны для неё.

## Шаг 1. Проверить окружение и поставить базовые инструменты

**Что сделать:** убедиться, что на машине есть компилятор и пакетный менеджер, затем создать рабочую папку для статусов.

**Зачем:** агенты и наш будущий HUD (HUD — полупрозрачная плашка поверх экрана со строкой состояния) ставятся из npm, а npm при сборке нативных модулей обращается к системному компилятору.

**Как проверить:** каждая команда ниже печатает версию или путь.

```bash
sw_vers
xcode-select -p
```

Ожидаемый вывод второй команды — путь `/Library/Developer/CommandLineTools`. Если вместо него ошибка, поставьте инструменты:

```bash
xcode-select --install
```

Проверьте Homebrew. Если ответ `zsh: command not found: brew` — установите его по официальной инструкции на brew.sh (команда установки меняется, сверьтесь с сайтом).

```bash
brew --version
brew install node
node -v && npm -v
```

Ожидаемо: две строки с версиями, например `v22.x.x` и `10.x.x` — конкретные номера у вас будут свои, это нормально.

Создайте каталоги и добавьте `~/bin` в PATH (PATH — список папок, где оболочка ищет команды):

```bash
mkdir -p ~/.ai-agent ~/bin
echo 'export PATH="$HOME/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
ls -la ~/.ai-agent
```

Проверка: `ls` показывает пустой каталог (только `.` и `..`). Git нужен для работы агентов с репозиториями — `git --version`; если планируете альтернативу, см. [Jujutsu или Git: что выбрать для работы с ИИ-агентами и Claude Code](https://ai-release.org/guides/jujutsu-ili-git-chto-vybrat-dlya-raboty-s-ii-agentami-i.html?utm_source=tg&utm_medium=channel&utm_campaign=guide_inline&utm_content=guide_to_guide).

## Шаг 2. Установить четырёх агентов, включить запись статуса и вывести HUD в чёлку
![Иллюстрация к разделу «Шаг 2. Установить четырёх агентов, включить запись статуса и вывести HUD в чёлку»](https://ai-release.org/guides/img/kak-prevratit-chelku-macbook-v-pult-upravleniya-ii-agen-ru-2.jpg)


**Что сделать:** поставить Claude Code, Codex, Cursor и Copilot CLI, затем связать их с одним файлом статуса `~/.ai-agent/status.json`, который читает плашка в чёлке.

**Зачем:** агенты — разные программы с разными интерфейсами; единый файл статуса превращает их в один «пульт»: чёлка показывает, кто именно сейчас работает.

**Как проверить:** после каждого блока есть команда проверки и ожидаемый вывод.

**1) Claude Code и Codex**

```bash
npm install -g @anthropic-ai/claude-code
npm install -g @openai/codex
claude --version
codex --version
```

Первый запуск: `claude` → команда `/login` (откроется браузер) и `/status` для проверки аккаунта. Для Codex — `codex` и вход по аккаунту ChatGPT либо переменная `OPENAI_API_KEY`; точные флаги входа сверьте с документацией.

**2) Cursor.** Установите IDE с официального сайта cursor.com, затем в палитре команд (⌘⇧P) выполните пункт установки shell-команды `cursor` (название пункта может отличаться — сверьтесь с документацией).

```bash
cursor --version
mkdir -p .cursor/rules
```

Второй командой вы создаёте папку правил проекта — туда Cursor складывает инструкции для модели.

**3) Copilot CLI.**

```bash
gh auth login
gh extension install github/gh-copilot
gh copilot --help
```

Ожидаемо: справка с подкомандами `suggest` и `explain`. Copilot CLI активно переименовывают — если расширение не ставится, сверьтесь с документацией по актуальному имени пакета.

**4) Файл статуса и скрипт-писарь.** Создайте `~/.ai-agent/notify.sh`:

```bash
#!/usr/bin/env bash
set -euo pipefail
state="${1:-idle}"; agent="${2:-unknown}"
printf '{"agent":"%s","state":"%s","ts":"%s"}\n' "$agent" "$state" "$(date -u +%FT%TZ)" \
  > "$HOME/.ai-agent/status.json"
```

```bash
chmod +x ~/.ai-agent/notify.sh
~/.ai-agent/notify.sh running claude-code
cat ~/.ai-agent/status.json
```

Пример вывода: `{"agent":"claude-code","state":"running","ts":"2025-01-01T10:00:00Z"}`. Так работает потому, что агент и плашка читают один и тот же файл — посредник не нужен.

**5) Хук Claude Code.** Хук (hook) — команда, которую агент запускает сам при событии. Добавьте в `~/.claude/settings.json` (путь к скрипту — абсолютный, `$HOME` внутри JSON не раскрывается):

```json
{
  "hooks": {
    "Notification": [
      { "matcher": "", "hooks": [ { "type": "command", "command": "/Users/<имя>/.ai-agent/notify.sh wait claude-code" } ] }
    ],
    "Stop": [
      { "matcher": "", "hooks": [ { "type": "command", "command": "/Users/<имя>/.ai-agent/notify.sh done claude-code" } ] }
    ]
  }
}
```

Замените `<имя>` на ваше имя пользователя (`whoami`). Точный список событий хуков сверьте с документацией. Если работаете не один, а командой, схему субагентов разбирает гайд [Claude Code для команды: как настроить субагентов и общий ИИ-суперагент](https://ai-release.org/guides/claude-code-dlya-komandy-kak-nastroit-subagentov-i-obsc.html?utm_source=tg&utm_medium=channel&utm_campaign=guide_inline&utm_content=guide_to_guide).

**6) Плашка в чёлке.** Вариант А — готовое приложение (boring.notch или NotchNook): установите по официальной инструкции и проверьте в его настройках, умеет ли оно читать внешний файл или запускать скрипт — это сверьте с документацией, набор виджетов у версий разный. Вариант Б — свой HUD на Swift (компилятор уже стоит), файл `~/.ai-agent/notch_hud.swift`:

```swift
import AppKit

let statusPath = ("~/.ai-agent/status.json" as NSString).expandingTildeInPath
let screen = NSScreen.main!
let w: CGFloat = 280, h: CGFloat = 26
let frame = NSRect(x: screen.frame.midX - w/2, y: screen.frame.maxY - h, width: w, height: h)
let panel = NSPanel(contentRect: frame, styleMask: [.borderless, .nonactivatingPanel],
                    backing: .buffered, defer: false)
panel.level = .statusBar
panel.isOpaque = false
panel.backgroundColor = .black
panel.alphaValue = 0.9
panel.collectionBehavior = [.canJoinAllSpaces, .fullScreenAuxiliary]
let label = NSTextField(labelWithString: "idle")
label.alignment = .center
label.textColor = .white
label.font = .monospacedSystemFont(ofSize: 12, weight: .medium)
label.frame = NSRect(x: 0, y: 4, width: w, height: 18)
panel.contentView?.addSubview(label)
panel.orderFrontRegardless()

Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { _ in
    let raw = (try? String(contentsOfFile: statusPath, encoding: .utf8)) ?? ""
    if let d = raw.data(using: .utf8), let j = try? JSONSerialization.jsonObject(with: d) as? [String: Any] {
        label.stringValue = "\(j["agent"] ?? "?") · \(j["state"] ?? "?")"
    }
}
NSApplication.shared.run()
```

Запуск и проверка:

```bash
swift ~/.ai-agent/notch_hud.swift
~/.ai-agent/notify.sh running codex
```

В течение секунды в плашке под вырезом появится `codex · running`. Работает так: таймер раз в секунду перечитывает JSON, поэтому отдельный сервер и порт не нужны. Автозапуск при входе в систему настройте через Login Items (`swiftc -O -o ~/bin/notch_hud ~/.ai-agent/notch_hud.swift`) — детали сверьте с документацией.

## Шаг 3. Проверить работу и зафиксировать результат
![Иллюстрация к разделу «Шаг 3. Проверить работу и зафиксировать результат»](https://ai-release.org/guides/img/kak-prevratit-chelku-macbook-v-pult-upravleniya-ii-agen-ru-3.jpg)


**Что сделать:** прогнать каждого агента и убедиться, что плашка меняет состояние, а агенты отвечают.

**Зачем:** до этой проверки вы не знаете, сработал ли хук и видит ли HUD файл — обе поломки выглядят одинаково («плашка висит на idle»).

**Как проверить:** команды ниже плюс чек-лист.

```bash
~/.ai-agent/notify.sh running claude-code
jq -r '.state' ~/.ai-agent/status.json
```

`jq` ставится через `brew install jq`. Ожидаемо: `running`.

```bash
claude
```

Введите короткий запрос, например `объясни, что делает команда ls -la`. После ответа снова прочитайте файл — состояние должно смениться на `done`, а в чёлке появиться `claude-code · done`. Если так — хук пишет статус, HUD его читает, связка собрана.

Чек-лист приёмки:

- [ ] `claude --version` и `codex --version` печатают версии без ошибок.
- [ ] `~/.ai-agent/status.json` обновляется после ответа Claude Code.
- [ ] В чёлке видна строка `<агент> · <состояние>`.
- [ ] `cursor --version` отрабатывает из терминала.
- [ ] `gh copilot --help` печатает справку.

## Возможные проблемы и решения

**Проблема. Агент не находится после установки.**
- Ошибка: `zsh: command not found: claude`
- Причина: глобальные npm-пакеты легли в каталог, которого нет в PATH (частая ситуация, если Node ставился не через Homebrew).
- Решение: узнать префикс и добавить его `bin` в PATH.
```bash
npm config get prefix
echo 'export PATH="<префикс>/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc && claude --version
```

**Проблема. Сборка нативных модулей падает после обновления macOS.**
- Ошибка: `xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun`
- Причина: обновление системы сбросило активный путь разработчика, `xcrun` больше не резолвится.
- Решение:
```bash
xcode-select --install
xcode-select -p
```
Дождитесь окончания установки и повторите `npm install -g ...`.

**Проблема. Хук не срабатывает, статус не меняется.**
- Ошибка: `zsh: permission denied: /Users/<имя>/.ai-agent/notify.sh`
- Причина: у скрипта нет бита исполнения либо в `settings.json` записан путь с `$HOME`, который JSON не раскрывает.
- Решение:
```bash
chmod +x ~/.ai-agent/notify.sh
bash ~/.ai-agent/notify.sh test claude-code && cat ~/.ai-agent/status.json
```
Затем замените `$HOME` в `settings.json` на абсолютный путь `/Users/<имя>/...`.

## Резюме и следующие шаги

Четыре агента установлены, а их состояние стекается в один файл `~/.ai-agent/status.json`, который читает плашка в чёлке. Дальше имеет смысл добавить хуки для Codex и Copilot по той же схеме и прогнать код агентов через сканер безопасности из гайда [Как проверить код от Cursor и Claude Code на уязвимости](https://ai-release.org/guides/kak-proverit-kod-ot-cursor-i-claude-code-na-uyazvimosti.html?utm_source=tg&utm_medium=channel&utm_campaign=guide_inline&utm_content=guide_to_guide).

## FAQ

**Нужен ли обязательно MacBook с вырезом?**
Нет. Плашка ставится по координатам экрана, поэтому на мониторе без выреза она просто отрисуется у верхней кромки. Готовые приложения для чёлки нацелены именно на модели с вырезом — их поведение на внешнем дисплее сверьте с документацией.

**Нужны ли платные подписки на все четыре инструмента?**
Каждый сервис требует своей авторизации: Claude Code и Codex — вход в аккаунт, Copilot — активная подписка GitHub Copilot, Cursor — аккаунт IDE. Актуальные тарифы и лимиты сверьте с документацией, они меняются.

**Замедлит ли HUD работу агентов?**
Нет. Плашка раз в секунду читает локальный файл размером в одну строку, сеть и API не задействованы.

**Можно ли подключить к этой схеме локальную модель вместо облачной?**
Да, если у CLI есть OpenAI-совместимый эндпоинт — пошаговая настройка разобрана в гайде [Как подключить локальную модель к Claude Code](https://ai-release.org/guides/kak-podklyuchit-lokalnuyu-model-k-claude-code-llama-ser.html?utm_source=tg&utm_medium=channel&utm_campaign=guide_inline&utm_content=guide_to_guide); файл статуса и хуки при этом не меняются.
