vigdorov 5b07dfe323 feat: add ensure_pty for deferred PTY creation with client dimensions
New ensure_pty message: creates PTY if not running, or resizes and
sends replay buffer if already active. This allows the frontend to
request PTY creation with actual terminal dimensions after xterm.js
FitAddon calculates the correct cols/rows for the container.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 01:41:47 +03:00

Claude CLI Proxy

Локальное приложение, которое позволяет управлять Claude Code CLI через веб-браузер. Терминал Claude Code отображается прямо в браузере с помощью xterm.js — полноценный терминал с цветами, автокомплитом и интерактивным UI.

Работает в связке с simple-chat — веб-приложением для чатов с AI.

Как это работает

Браузер (xterm.js)  ←──WebSocket──→  simple-chat (backend)  ←──WebSocket──→  claude-cli-proxy (local)
                                                                                      │
                                                                                 node-pty
                                                                                      │
                                                                               Claude Code CLI
  1. claude-cli-proxy запускается на вашем компьютере рядом с Claude Code CLI
  2. Прокси подключается к бэкенду simple-chat через WebSocket
  3. При создании чата в веб-интерфейсе, прокси запускает Claude CLI в псевдо-терминале (PTY)
  4. Ввод/вывод терминала транслируется через WebSocket в браузер
  5. Браузер отображает полноценный терминал через xterm.js

Требования

  • Node.js 18+ (рекомендуется 20+)
  • Claude Code CLI установлен и доступен в PATH (claude команда)
  • Работающий инстанс simple-chat (бэкенд + фронтенд)

Установка

1. Настройте simple-chat

Прокси работает только вместе с simple-chat. Убедитесь что simple-chat бэкенд запущен.

2. Создайте устройство в simple-chat

Откройте simple-chat в браузере, перейдите в Настройки → Устройство и создайте новое устройство. Скопируйте токен — он понадобится для подключения прокси.

3. Установите зависимости

git clone https://git.vigdorov.ru/vigdorov/claude-cli-proxy.git
cd claude-cli-proxy
npm install

4. Создайте файл .env

cp .env.example .env

Отредактируйте .env:

# Токен устройства из настроек simple-chat
PROXY_TOKEN=ваш_токен_из_шага_2

# URL бэкенда simple-chat
# Для локальной разработки:
SERVER_URL=ws://localhost:3000/ws/agent-proxy
# Для продакшена:
# SERVER_URL=wss://ai-chat.vigdorov.ru/ws/agent-proxy

5. Запустите

npm start

В консоли должно появиться:

[proxy] Starting claude-cli-proxy (xterm mode)...
[proxy] Running. Press Ctrl+C to stop.
[WS] Connected to server
[proxy] Connected to server, waiting for sync...

Использование

  1. Откройте simple-chat в браузере
  2. В сайдбаре нажмите Claude Agent
  3. Нажмите + чтобы создать новый чат
  4. Выберите рабочую директорию (проект)
  5. Терминал Claude Code откроется прямо в браузере

Мобильные устройства

На мобиле и планшете внизу экрана отображаются кнопки управления:

  • Горячие клавиши: Esc, Tab, ↑, ↓, y, n, Enter, Ctrl+C, Ctrl+O, ⇧Tab
  • Быстрые команды: /compact, /clear, /model, /help

На десктопе кнопки скрыты — для показа нажмите иконку клавиатуры в правом нижнем углу.

Конфигурация

Переменная Описание По умолчанию
PROXY_TOKEN Токен устройства из настроек simple-chat — (обязательно)
SERVER_URL WebSocket URL бэкенда wss://ai-chat.vigdorov.ru/ws/agent-proxy

Файл .env можно также разместить в ~/.claude-proxy/.env — он будет загружен первым.

Безопасность

  • Прокси подключается к бэкенду исходящим соединением (не открывает порты)
  • Аутентификация по токену устройства
  • Терминальные данные передаются через бинарные WebSocket-фреймы
  • При использовании через интернет рекомендуется WSS (TLS)

Технологии

  • Node.js + TypeScript — runtime
  • node-pty — псевдо-терминал для запуска Claude CLI
  • ws — WebSocket клиент
  • xterm.js — терминал в браузере (на стороне simple-chat)
Description
No description provided
Readme 96 KiB
Languages
TypeScript 99.6%
JavaScript 0.4%