# purplemux
**Claude Code и Codex, много задач одновременно. Быстрее.**
Все сессии на одном экране. Без обрывов — даже с телефона.
Русский | English | 한국어 | 日本語 | 简体中文 | 繁體中文 | Deutsch | Español | Français | Português (Brasil) | Türkçe


## Установка
```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)