# purplemux **Claude Code и Codex, много задач одновременно. Быстрее.** Все сессии на одном экране. Без обрывов — даже с телефона. Русский | English | 한국어 | 日本語 | 简体中文 | 繁體中文 | Deutsch | Español | Français | Português (Brasil) | Türkçe ![purplemux](docs/images/screenshot.png) ![purplemux mobile](docs/images/screenshot-mobile.png) ## Установка ```bash npx purplemux@latest ``` Откройте [http://localhost:8022](http://localhost:8022) в браузере. Готово. > Требуется Node.js 20+ и tmux. macOS или Linux. Предпочитаете нативное приложение? Скачайте сборку macOS Electron из [последнего релиза](https://github.com/subicura/purplemux/releases/latest) (`.dmg` для Apple Silicon и Intel). ## Почему purplemux - **Дашборд нескольких сессий** — одним взглядом видите статус «работает / ждёт ввода» по каждой сессии Claude Code и Codex - **Мониторинг rate limit** — остаток за 5 часов / 7 дней и обратный отсчёт до сброса - **Push-уведомления** — оповещения на десктопе и мобильном, когда задача завершена или нужен ввод - **Мобильность и мульти-устройства** — доступ к одной и той же сессии с телефона, планшета или другого рабочего места - **Live-вид сессии** — не нужно прокручивать вывод CLI: прогресс показывается в виде таймлайна А также - **Непрерывные сессии** — на базе tmux. Закрыли браузер — всё осталось на месте. При повторном подключении вкладки, панели и каталоги в точности там, где вы их оставили - **Self-hosted и open source** — код и данные сессий никогда не покидают вашу машину. Никаких внешних серверов - **Шифрованный удалённый доступ** — HTTPS откуда угодно через Tailscale ## Отличия от официального Remote Control > Официальный Remote Control сфокусирован на удалённом управлении одной сессией. purplemux нужен, когда требуется управление множеством сессий, push-уведомления и устойчивые сессии. ## Возможности ### Терминал - **Разделение панелей** — свободное горизонтальное / вертикальное разделение, изменение размера перетаскиванием - **Управление вкладками** — много вкладок, перестановка перетаскиванием, автоматические заголовки на основе имени процесса - **Горячие клавиши** — разделение, переключение вкладок, перемещение фокуса - **Темы терминала** — тёмный / светлый режим, несколько цветовых тем - **Рабочие пространства и группы** — сохранение и восстановление раскладки панелей, вкладок и рабочих каталогов в пределах рабочего пространства. Объединяйте рабочие пространства в группы перетаскиванием - **Git-воркфлоу** — Side-by-side / Line-by-line с подсветкой синтаксиса, инлайновое раскрытие hunk и отдельная вкладка истории с пагинацией. Fetch / pull / push прямо из панели с индикаторами ahead/behind — при ошибке синхронизации (dirty worktree, конфликты) можно в один клик Ask Claude или Codex - **Панель веб-браузера** — встроенный браузер рядом с терминалом для проверки результата разработки (Electron). Управляется через CLI `purplemux`, со встроенным эмулятором устройств для переключения viewport - **Вкладки агентов** — запускайте Claude, Codex или общий список сессий из меню новой вкладки ### Интеграция с Claude Code и Codex - **Статус в реальном времени** — индикаторы «работает / ждёт ввода», переключение между сессиями - **Live-вид сессии** — сообщения, вызовы инструментов, задачи, запросы разрешений, блоки thinking - **Вкладки Codex** — запускайте сессии Codex CLI с той же tmux-персистентностью, что и Claude - **Список сессий** — просматривайте и возобновляйте недавние сессии Claude и Codex в одном общем представлении - **Resume в один клик** — возобновляйте приостановленную сессию Claude или Codex прямо из браузера - **Автоматический resume** — при старте сервера восстанавливаются предыдущие сессии Claude - **Быстрые промпты** — сохраняйте часто используемые промпты и отправляйте их в один клик - **Вложения** — перетаскивайте изображения в поле ввода чата или прикрепляйте файлы — путь будет вставлен автоматически. Работает и на мобильных - **История сообщений** — повторно используйте прошлые сообщения - **Статистика использования** — токены Claude + Codex, стоимость, разбивка по проектам, ежедневные AI-отчёты - **Rate limit** — остаток за 5 часов / 7 дней с обратным отсчётом до сброса для поддерживаемых провайдеров ### Мобильность и доступность - **Адаптивный UI** — терминал и таймлайн на телефоне и планшете - **PWA** — добавление на главный экран, ощущение нативного приложения - **Web Push** — уведомления приходят даже после закрытия вкладки - **Синхронизация между устройствами** — изменения в рабочем пространстве отражаются в реальном времени - **Tailscale** — HTTPS-доступ извне через туннель с шифрованием WireGuard - **Аутентификация по паролю** — scrypt-хеширование, безопасно даже при внешнем доступе - **Многоязычность** — 11 языков, включая 한국어, English, 日本語, 中文 ## Поддерживаемые платформы | Платформа | Статус | Примечания | |---|---|---| | macOS (Apple Silicon / Intel) | ✅ | Electron-приложение в комплекте | | Linux | ✅ | Без Electron | | Windows | ❌ | Не поддерживается | ## Подробности установки ### Требования - macOS 13+ или Linux - [Node.js](https://nodejs.org/) 20+ - [tmux](https://github.com/tmux/tmux) Требуется для вкладок Claude. Установите Claude Code и войдите в аккаунт перед запуском вкладки Claude: ```bash curl -fsSL https://claude.ai/install.sh | bash # или через Homebrew latest channel brew install --cask claude-code@latest ``` Необязательно для вкладок Codex. Установите Codex CLI и войдите в аккаунт перед запуском вкладки Codex: ```bash npm i -g @openai/codex # или brew install --cask codex ``` ### npx (самый быстрый способ) ```bash npx purplemux@latest ``` ### Глобальная установка ```bash npm install -g purplemux purplemux ``` ### Примеры CLI ```bash purplemux tab create -w WS -t codex-cli -n "fix auth" purplemux tab create -w WS -t agent-sessions ``` ### Запуск из исходников ```bash git clone https://github.com/subicura/purplemux.git cd purplemux pnpm install pnpm start ``` Режим разработки: ```bash pnpm dev ``` #### Уровень логирования Общий уровень задаётся переменной `LOG_LEVEL` (по умолчанию `info`). ```bash LOG_LEVEL=debug pnpm dev ``` Чтобы включить отдельные модули, перечислите пары `модуль=уровень` через запятую в `LOG_LEVELS`. Доступные уровни: `trace` / `debug` / `info` / `warn` / `error` / `fatal`. ```bash # Трассировать только хуки Claude Code на уровне debug LOG_LEVELS=hooks=debug pnpm dev # Несколько модулей сразу LOG_LEVELS=hooks=debug,status=warn pnpm dev ``` Модули, не указанные в `LOG_LEVELS`, используют значение `LOG_LEVEL`. ## Внешний доступ (Tailscale Serve) ```bash tailscale serve --bg 8022 ``` Доступ по адресу `https://..ts.net`. Отключение: ```bash tailscale serve --bg off 8022 ``` ## Безопасность ### Пароль Пароль задаётся при первом входе. Он хешируется scrypt и сохраняется в `~/.purplemux/config.json`. Чтобы сбросить, удалите `~/.purplemux/config.json` и перезапустите сервер — окно онбординга появится снова. ### HTTPS По умолчанию используется HTTP. При внешнем доступе обязательно применяйте HTTPS: - **Tailscale Serve** — шифрование WireGuard и автоматические сертификаты - **Nginx / Caddy** — необходимо пробрасывать заголовки WebSocket upgrade (`Upgrade`, `Connection`) ### Каталог данных (`~/.purplemux/`) | Файл | Описание | |---|---| | `config.json` | Данные аутентификации (хеш) и настройки приложения | | `workspaces.json` | Раскладки рабочих пространств, вкладки, каталоги | | `vapid-keys.json` | Ключи VAPID для Web Push (генерируются автоматически) | | `push-subscriptions.json` | Данные push-подписок | | `hooks/` | Пользовательские хуки | ## Архитектура ``` ┌─────────────────────────────────────────────────────────────┐ │ Browser │ │ ┌───────────┐ ┌───────────┐ ┌──────────┐ ┌─────────────┐ │ │ │ xterm.js │ │ Timeline │ │ Status │ │ Multi-device│ │ │ │ Terminal │ │ │ │ │ │ Sync │ │ │ └─────┬─────┘ └─────┬─────┘ └────┬─────┘ └──────┬──────┘ │ └────────┼─────────────┼────────────┼──────────────┼──────────┘ │ws │ws │ws │ws │/terminal │/timeline │/status │/sync ▼ ▼ ▼ ▼ ┌─────────────────────────────────────────────────────────────┐ │ Node.js Server (:8022) │ │ ┌──────────┐ ┌───────────────┐ ┌─────────────────────┐ │ │ │ node-pty │ │ JSONL Watcher │ │ Status Manager │ │ │ │ PTY↔WS │ │ File watch → │ │ Process tree + │ │ │ │ Binary │ │ Parse → Send │ │ JSONL tail analysis │ │ │ └────┬─────┘ └───────┬───────┘ └──────────┬──────────┘ │ └───────┼────────────────┼─────────────────────┼──────────────┘ ▼ ▼ ▼ ┌─────────────────────────────────────────────────────────────┐ │ System │ │ tmux (purple socket) Agent CLIs │ │ ┌────────┐ ┌────────┐ ┌────────────────────────────┐ │ │ │Session1│ │Session2│ ... │ Claude Code │ │ │ │ (shell)│ │ (shell)│ │ ~/.claude/projects/*.jsonl │ │ │ └────────┘ └────────┘ │ Codex │ │ │ │ ~/.codex/sessions/*.jsonl │ │ │ └────────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘ ``` **I/O терминала** — xterm.js подключается к node-pty через WebSocket, а node-pty — к сессиям tmux. Бинарный протокол обрабатывает stdin/stdout/resize с контролем backpressure. **Определение статуса** — хуки событий агентов мгновенно доставляют обновления по HTTP POST. Claude Code использует `SessionStart`, `Stop` и `Notification`; Codex использует `SessionStart`, `UserPromptSubmit`, `PreToolUse`, `PostToolUse`, `Stop` и `PermissionRequest`. Каждые 5–15 с проверяется дерево процессов и анализируются последние 8 КБ JSONL-файла. **Таймлайн** — отслеживает JSONL-логи сессий в `~/.claude/projects/` и `~/.codex/sessions/`, разбирает новые строки при изменении файла и транслирует структурированные записи в браузер. **Изоляция tmux** — используется отдельный сокет `purple`, полностью независимый от уже работающего tmux. Без prefix-клавиши и статус-бара. **Автовосстановление** — при старте сервера предыдущие сессии Claude восстанавливаются через `claude --resume {sessionId}`. Сессии Codex можно возобновить из списка сессий или командой `codex resume {sessionId}`. ## License [MIT](LICENSE)