
sw_vers. Точную минимальную версию под Claude Code, Codex и Cursor сверьте с документацией: она меняется от релиза к релизу.Что сделать: убедиться, что на машине есть компилятор и пакетный менеджер, затем создать рабочую папку для статусов.
Зачем: агенты и наш будущий HUD (HUD — полупрозрачная плашка поверх экрана со строкой состояния) ставятся из npm, а npm при сборке нативных модулей обращается к системному компилятору.
Как проверить: каждая команда ниже печатает версию или путь.
sw_vers
xcode-select -p
Ожидаемый вывод второй команды — путь /Library/Developer/CommandLineTools. Если вместо него ошибка, поставьте инструменты:
xcode-select --install
Проверьте Homebrew. Если ответ zsh: command not found: brew — установите его по официальной инструкции на brew.sh (команда установки меняется, сверьтесь с сайтом).
brew --version
brew install node
node -v && npm -v
Ожидаемо: две строки с версиями, например v22.x.x и 10.x.x — конкретные номера у вас будут свои, это нормально.
Создайте каталоги и добавьте ~/bin в PATH (PATH — список папок, где оболочка ищет команды):
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.

Что сделать: поставить Claude Code, Codex, Cursor и Copilot CLI, затем связать их с одним файлом статуса ~/.ai-agent/status.json, который читает плашка в чёлке.
Зачем: агенты — разные программы с разными интерфейсами; единый файл статуса превращает их в один «пульт»: чёлка показывает, кто именно сейчас работает.
Как проверить: после каждого блока есть команда проверки и ожидаемый вывод.
1) Claude Code и Codex
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 (название пункта может отличаться — сверьтесь с документацией).
cursor --version
mkdir -p .cursor/rules
Второй командой вы создаёте папку правил проекта — туда Cursor складывает инструкции для модели.
3) Copilot CLI.
gh auth login
gh extension install github/gh-copilot
gh copilot --help
Ожидаемо: справка с подкомандами suggest и explain. Copilot CLI активно переименовывают — если расширение не ставится, сверьтесь с документацией по актуальному имени пакета.
4) Файл статуса и скрипт-писарь. Создайте ~/.ai-agent/notify.sh:
#!/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"
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 не раскрывается):
{
"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 для команды: как настроить субагентов и общий ИИ-суперагент.
6) Плашка в чёлке. Вариант А — готовое приложение (boring.notch или NotchNook): установите по официальной инструкции и проверьте в его настройках, умеет ли оно читать внешний файл или запускать скрипт — это сверьте с документацией, набор виджетов у версий разный. Вариант Б — свой HUD на Swift (компилятор уже стоит), файл ~/.ai-agent/notch_hud.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()
Запуск и проверка:
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) — детали сверьте с документацией.

Что сделать: прогнать каждого агента и убедиться, что плашка меняет состояние, а агенты отвечают.
Зачем: до этой проверки вы не знаете, сработал ли хук и видит ли HUD файл — обе поломки выглядят одинаково («плашка висит на idle»).
Как проверить: команды ниже плюс чек-лист.
~/.ai-agent/notify.sh running claude-code
jq -r '.state' ~/.ai-agent/status.json
jq ставится через brew install jq. Ожидаемо: running.
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: claudebin в PATH.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/xcrunxcrun больше не резолвится.xcode-select --install
xcode-select -p
Дождитесь окончания установки и повторите npm install -g ....
Проблема. Хук не срабатывает, статус не меняется.
zsh: permission denied: /Users/<имя>/.ai-agent/notify.shsettings.json записан путь с $HOME, который JSON не раскрывает.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 на уязвимости.
Нужен ли обязательно MacBook с вырезом?
Нет. Плашка ставится по координатам экрана, поэтому на мониторе без выреза она просто отрисуется у верхней кромки. Готовые приложения для чёлки нацелены именно на модели с вырезом — их поведение на внешнем дисплее сверьте с документацией.
Нужны ли платные подписки на все четыре инструмента?
Каждый сервис требует своей авторизации: Claude Code и Codex — вход в аккаунт, Copilot — активная подписка GitHub Copilot, Cursor — аккаунт IDE. Актуальные тарифы и лимиты сверьте с документацией, они меняются.
Замедлит ли HUD работу агентов?
Нет. Плашка раз в секунду читает локальный файл размером в одну строку, сеть и API не задействованы.
Можно ли подключить к этой схеме локальную модель вместо облачной?
Да, если у CLI есть OpenAI-совместимый эндпоинт — пошаговая настройка разобрана в гайде Как подключить локальную модель к Claude Code; файл статуса и хуки при этом не меняются.