Когда у тебя одновременно работают три-четыре сессии Claude Code и Codex, половина времени уходит на переключение окон: кто закончил, кто ждёт ответа, кто завис. Я сделал маленькое приложение для macOS, которое показывает всех агентов прямо в чёлке MacBook, светится, когда кто-то ждёт, и превращает каждую сессию в человечка в пиксельном офисе. Рассказываю, как оно устроено: хуки Claude Code, чтение журналов Codex без API, офис на SpriteKit, свечение на Core Animation за 0,5% процессора и честная статистика без единого счётчика в приложении.

Зачем

Я работаю с ИИ-агентами почти весь день: в одном окне Claude Code правит сайт, в другом Codex разбирается с базой, в третьем ещё одна сессия пишет тесты. Агенты работают минутами, и всё это время ты либо ждёшь, либо отвлекаешься — а потом обнаруживаешь, что одна из сессий уже десять минут ждёт твоего «да».

Хотелось простого: краем глаза видеть, кто чем занят, и чтобы Mac сам сказал, когда нужен я. Чёлка MacBook для этого идеальна — она всегда на виду и всё равно ничем не занята.

Так появился Lumio. Дальше — о том, как он устроен внутри.

Откуда брать состояние агентов

Claude Code: хуки

У Claude Code есть хуки — команды, которые он вызывает на события: начало и конец хода, вызов инструмента, запрос разрешения, уведомление. Lumio по кнопке «Подключить» добавляет в ~/.claude/settings.json один свой хук рядом с вашими, предварительно сохранив копию файла. Отключение возвращает файл байт в байт.

Сам хук — короткий Perl-скрипт: он получает JSON события, выбрасывает всё тяжёлое (содержимое файлов, ответы инструментов) и дописывает строку в локальный журнал. Важно, что он асинхронный и ничего не печатает: агент не ждёт Lumio ни миллисекунды.

Приложение следит за журналом через DispatchSource и собирает из событий состояние каждой сессии: работает, ждёт разрешения, ждёт ответа, закончил, ошибка. Bash-команды переводятся в человеческие фразы: из цепочки «npm run build && git add . && git commit» показывается главное — «собирает проект».

Отдельная задача — сессии, которые открыты, но молчат. Их хуки не видно, зато у Claude Code есть собственный реестр ~/.claude/sessions/<pid>.json. Lumio читает его, проверяет, что процесс жив, и показывает такую сессию как «ждёт задачу».

Codex: журналы без API

У Codex хуков нет (единственный слот уведомлений у меня занят другим инструментом), поэтому Lumio читает его собственные журналы сессий ~/.codex/sessions/…/rollout-*.jsonl — только читает, ничего не меняя. Новые чаты находятся через локальную базу Codex, хвост файла дочитывается раз в полторы секунды на фоновой очереди.

Дальше события Codex переводятся в тот же формат, что у Claude: вызов exec_command становится Bash, apply_patch — Edit, update_plan — план задач. Благодаря этому весь остальной Lumio вообще не знает, какой агент перед ним, — кроме цвета и значка.

Шкала памяти

Самая полезная мелочь оказалась неожиданной. У каждой сессии в чёлке есть тонкая полоска: насколько заполнено контекстное окно. Когда она краснеет, пора начинать сессию заново — иначе агент начинает «забывать» начало разговора и путаться. Данные берутся из того же журнала: последние счётчики токенов против размера окна модели.

Пиксельный офис

Список сессий удобен, но скучен. Поэтому по двойному нажатию правого ⌘ из чёлки вырастает окно-офис: каждая сессия — человечек за своим iMac.

Всё нарисовано кодом, пиксель за пикселем, без единой готовой картинки: люди 16×32, мебель, iMac со строчками кода на экране, которые «печатаются», пока хозяин работает. Внешность человечка вычисляется хешем имени проекта — один проект всегда выглядит одинаково.

Офис живёт по простым правилам, иначе получается муравейник:

  • работает — сидит за столом и печатает урывками, как живой человек;

  • ждёт вас — встаёт у стола, над головой табличка «ждёт вас · 3 мин»;

  • закончил — уходит на диван или к кофемашине;

  • давно молчит — дремлет.

Помощники (субагенты) стоят рядом со своим «начальником» с ноутбуками в руках. Отдыхающие иногда болтают — и реплики берутся из настоящих итогов их сессий.

Технически это SpriteKit: глубина по координате ног, A* по сетке 4 пикселя для ходьбы, свет — карта умножения и аддитивное свечение, которые перерисовываются раз в минуту, а не каждый кадр. День и ночь — по настоящему солнцу: восход и закат считаются по формулам NOAA для фиксированной точки, без запроса геолокации.

Офис рисуется только пока окно видно, при закрытии полностью выгружается: 6–7% процессора с открытым окном и семью агентами, 0,3% — с закрытым.

Свечение, которое не ест батарею

Когда агент ждёт вас, чёлка мягко светится его цветом. Первая версия на SwiftUI с repeatForever съедала около 10% процессора на одно мигание — непозволительно для вещи, которая висит всегда.

Что помогло:

  • все постоянные анимации — только Core Animation (CABasicAnimation на слое), никакого SwiftUI;

  • 15 кадров в секунду для фоновых эффектов — глаз не отличает;

  • никаких масок на анимируемых слоях: затухание «запечено» прямо в картинку свечения;

  • окно в свёрнутом состоянии — ровно размером с чёлку плюс свечение.

Итог — около 0,5% процессора в простое. Отдельно пришлось следить за WindowServer: каждый кадр анимации в окне поверх всего стоит ему заметных ресурсов, и это не видно в Activity Monitor у самого приложения.

Ответ агенту прямо из чёлки

С Codex всё просто — ответ уходит в его чат. С Claude Code в VS Code сложнее: расширение не даёт другим программам писать в уже открытый чат. Поэтому есть два режима: по умолчанию кнопка просто открывает нужный чат, а если вы сами включили «Отправлять ответы», Lumio с разрешения «Универсальный доступ» открывает чат, вставляет текст и нажимает Enter — ровно то, что сделали бы вы. Перед вставкой он проверяет, что курсор стоит именно в поле чата, иначе ничего не нажимает.

Итоги дня

Раз в день Lumio может попросить ваш же Claude Code или Codex коротко пересказать, что сделано по каждому проекту, — и записать это в Obsidian, Apple Заметки или папку. Функция выключена по умолчанию и работает через вашу же подписку: агент вызывается без истории и без инструментов, в отдельной папке — чтобы Lumio не принимал собственные вызовы за новые сессии. Перед записью текст проходит фильтр, который вычищает всё похожее на ключи и пароли.

Приватность и честная статистика

Всё работает на Mac. Сам Lumio выходит в сеть только раз в день, чтобы проверить обновления, — это можно выключить. Никакой аналитики внутри нет.

Что дальше

Lumio бесплатный, работает на macOS 14+ (Apple silicon и Intel). Обновления выходят каждую неделю: следующими будут разрешения прямо из чёлки и поддержка Gemini CLI и Cursor.

Буду рад вопросам в комментариях — особенно о том, чего вам не хватает при работе с несколькими агентами.

Сайт: https://lumiomac.com

Комментарии (11)


  1. achekalin
    13.10.2026 11:32

    А стык с другим софтом, тем же pi, сложно добавить, как оцениваете?


    1. lumiomac Автор
      13.10.2026 11:32

      Да, это как раз следующий шаг. Lumio читает события агента: у Claude Code через хуки, у Codex через его журналы сессий. Чтобы добавить новый агент, нужно написать «переходник» под его формат. Следующими планируем Gemini CLI и Cursor, потом Copilot CLI и OpenCode. pi добавим в список: если у него есть хуки или журнал сессий, это несложно. А вы сейчас на чём работаете?


      1. achekalin
        13.10.2026 11:32

        В основном работаю с Pi + Codex CLI.

        У Pi с интеграцией всё достаточно удобно: сессии сохраняются в JSONL (~/.pi/agent/sessions/), плюс есть TypeScript extensions с событиями запуска сессии, работы агента, вызовов инструментов и завершения операций.

        Для пассивного мониторинга, как у вас с Codex, можно читать JSONL. Для более точных статусов — поставить небольшое расширение Pi.

        Документация: https://pi.dev/docs/latest/session-format

        Мне как раз интересен ваш подход: оставить агентов в привычных терминалах, а через чёлку видеть их состояние и отвечать на запросы. Если добавите Pi, с удовольствием протестирую интеграцию.

        И, скажите, я правильно понимаю, что в итоге тулза станет платной? Если да, то стоит к ней привыкать? Потому что механика нравится, именно следить за сессиями, не создавать ещё один пульт управления всему пультами управления )


        1. lumiomac Автор
          13.10.2026 11:32

          Спасибо за подробности и ссылку на документацию, это сильно упрощает задачу. Раз сессии Pi лежат в JSONL, можно читать их так же, как у Codex, — ничего ставить не придётся. Мы добавим Pi в план

          Про платность: основное останется бесплатным навсегда — чёлка, все агенты, ответы и разрешения, офис, заметки, музыка. Возможно, позже появится Pro с дополнительными функциями, но то, что есть сейчас, платным не станет. А «один пульт всем пультам» — как раз наша идея: агенты остаются там, где вы привыкли, Lumio только показывает и даёт ответить.


          1. achekalin
            13.10.2026 11:32

            One пульт to rule them all?

            Ох ты ж моя прелесть!
            Ох ты ж моя прелесть!


  1. BasilioCat
    13.10.2026 11:32

    Попробуйте лучше orca


    1. lumiomac Автор
      13.10.2026 11:32

      Спасибо, посмотрим! Насколько понимаем, orca — это отдельная среда, где запускают много агентов. Lumio про другое: ничего не меняет в привычном Claude Code или Codex, а просто показывает в чёлке, кто работает и кто ждёт «да», и даёт ответить, не переключая окна. Можно пользоваться вместе.


  1. FirExpl
    13.10.2026 11:32

    Выглядит весьма забавно и интересно!
    Но жаль, что не опенсорс, без анализа кода ставить боязно, а анализ бинаря делать дороже чем анализ кода.


    1. haasson
      13.10.2026 11:32

      Вот опенсорс аналог, только сильно мощнее по функционалу

      https://github.com/raul-cortez/claude-swarm


      1. lumiomac Автор
        13.10.2026 11:32

        Это разные вещи. Swarm — отдельный терминал: чтобы им пользоваться, агентов нужно запускать внутри него. Lumio ничего не заставляет менять: Claude Code и Codex работают там же, где и раньше (VS Code, терминал, приложение Codex), а всё видно из чёлки MacBook: — кто работает, кто ждёт вас, кто закончил, и сколько памяти чата уже занято; — карточка сессии: задача, план, изменённые файлы, ответ агента, открыть проект в VS Code в один клик; — с завтрашнего обновления 1.1 — разрешить команду или ответить на вопрос агента прямо из чёлки, не переключаясь в чат; — пиксельный офис: каждая сессия — человечек. Работает — печатает за iMac, ждёт — встаёт из-за стола, закончил — идёт за кофе и обсуждает с коллегами, что сделал. На стене табло: задачи за день и лимиты Claude. Наведёте на человечка — видно, чем он занят, клик — его карточка; — заметки за 2 секунды и музыка в чёлке.


    1. lumiomac Автор
      13.10.2026 11:32

      Понимаем опасение, спасибо, что написали. Что Lumio делает на самом деле: читает локальные журналы Claude Code и Codex и добавляет свой хук в ~/.claude/settings.json (с резервной копией, кнопка «Отключить» возвращает файл как был). Доступ к экрану и «Универсальный доступ» не просит. В сеть ходит только проверка обновлений раз в день, и её можно выключить. Это легко проверить тем же Little Snitch или LuLu. Открывать код пока не готовы, но вопрос услышали.