Claude Code на сервере, веб-клиент для работы без терминала, многопользовательский вход, синхронизация рабочих папок.
VPS bslchat.com: Claude Code, сервер окна, чаты, память, рабочие папки
в облаке: Claude по подписке, DeepSeek и Xiaomi MiMo по ключам; своя модель Qwen на домашнем ПК
приложение на Mac; браузер и телефон через dadits.online; адрес сервера в Tailscale
владелец, администратор, пользователь; у каждого свои чаты и папка
Эти слова встречаются дальше. На слайдах они подчёркнуты пунктиром — наведите курсор, и появится это же пояснение.
Арендованный компьютер в дата-центре, работает круглосуточно. У нас их два: основной bslchat.com и вспомогательный dadits.online.
Права администратора сервера: ставить системные программы, запускать службы, настраивать веб-сервер. У нашей учётной записи их нет.
Программа Anthropic, через которую ИИ Claude читает и правит файлы и выполняет команды. CLI — значит без окон, только командная строка; наш клиент даёт ей окно.
Запущенная программа. Каждый открытый чат — отдельная работающая копия claude со своей памятью (~250 МБ).
Защищённое подключение к серверу. Вместо пароля — ключ: файл-«пропуск», который нельзя подобрать.
Защищённый «коридор» внутри SSH: окно на одном компьютере работает с программой на другом, будто она рядом. Обратный — открывает сам сервер.
127.0.0.1 — «этот же компьютер»: программа, слушающая только этот адрес, из интернета недоступна. Порт — номер «двери» программы.
nginx — веб-сервер-«привратник»: принимает запросы из интернета и передаёт нужной программе. HTTPS — шифрованное соединение (замок в адресной строке).
Частная сеть поверх интернета: компьютеры участников видят друг друга, как в одной офисной сети, а посторонние их не видят.
Синхронизация папок между компьютерами напрямую, без облака: как Dropbox, но файлы хранятся только на наших машинах.
Запуск программ без человека. systemd — системная «служба», её держит ОС (нужен root). cron — «будильник» по расписанию, доступен всем.
«Перехватчик»: небольшая программа, которую Claude Code вызывает перед каждым действием ИИ. Хук может действие запретить.
Способ, которым программы обращаются друг к другу. Ключ API — платный «пропуск» к сервису ИИ (DeepSeek, MiMo).
Токен — кусочек текста (слог-слово), в них ИИ считает текст, лимиты и оплату. Контекст — сколько токенов модель держит «в голове» одновременно.
Насколько долго модель «думает» перед ответом. Выше — тщательнее, но медленнее и дороже.
Режим Tailscale без root: сеть работает «внутри программы», без сетевой карты в системе; другие программы ходят в неё через прокси.
| Факты | |
|---|---|
| Сервер | VPS bslchat.com, Linux, 6 ядер, 15 ГБ ОЗУ |
| Учётная запись | одна (a.shuraew), без прав администратора (root, sudo) |
| Claude Code | версия 2.1.29x; работает по подписке Claude — вход выполнен один раз, данные входа хранятся на сервере |
| Запуск | на каждый открытый чат — своя копия claude (процесс); клиент передаёт ей сообщения и получает ответ потоком, по мере написания |
| Память | ~250 МБ ОЗУ на чат — отсюда лимит одновременно работающих чатов |
| Mac | чаты и память перенесены с Mac на сервер; Mac теперь служит только окном |
У каждого пользователя свой каталог Claude Code — ~/.claude-homes/<логин>, там его чаты и память; другие их не видят.
Подписка Claude общая: все работают через одну учётную запись владельца, лимиты тоже общие.
Программа клиента на сервере (server.py) из интернета закрыта: она принимает соединения только от самого сервера
(127.0.0.1). Попасть к ней можно лишь через защищённые «коридоры» — туннели — или частную сеть Tailscale.
| Канал | Кто | Как устроен | Обходные решения · нет root |
|---|---|---|---|
| SSH | администратор | вход в командную строку сервера по ключу (SSH), без прав администратора | системные службы и программы не устанавливаются |
| Mac-приложение | владелец | приложение подключается к серверу по SSH, при необходимости запускает там программу клиента и прокладывает туннель — окно на Mac работает так, будто сервер стоит рядом. При обрыве связи переподключается само | — |
| dadits.online:8443 | все: браузер, телефон | браузер заходит по HTTPS на второй сервер; тот пересылает запросы на основной по туннелю, который основной сервер сам держит открытым | обход веб-сервер на bslchat.com настраивает только root — окно публикуется через второй сервер. Туннель восстанавливает cron раз в минуту — после обрыва до минуты без связи |
| Tailscale | пользователи с ПК | владелец «делится» сервером с аккаунтом Tailscale пользователя; окно открывается по внутреннему адресу сервера в этой сети | обход без root Tailscale работает в userspace-режиме: сервер не видит настоящих адресов подключившихся — все выглядят как «он сам» |
| Syncthing | пользователи с ПК | синхронизация рабочей папки ПК ↔ сервер, внутри сети Tailscale | — |
| Исходящие | ИИ на сервере | запросы к сервисам ИИ (Anthropic, DeepSeek, MiMo); подключение ИИ к Mac и домашнему ПК по SSH, в том числе к локальной модели Qwen — ключи принимаются только с адреса сервера в Tailscale | — |
Сервер — Python, ~3 500 строк; интерфейс — JavaScript, ~3 000 строк. Чужих библиотек нет: на сервер ничего не нужно доустанавливать, и нет стороннего кода, за обновлениями которого надо следить. Открывается в приложении на Mac, в браузере и на телефоне.
Проекты и подпроекты (1 уровень), блок «В работе» / «Последние», перенос, переименование, удаление в корзину.
Каждый чат — своя работающая копия claude. Пока один чат думает, можно работать в другом.
Claude Opus, Fable, Sonnet, Haiku; DeepSeek V4 Flash и V4 Pro; MiMo V2.6 Pro. Смена модели в том же чате.
Насколько долго модель думает перед ответом: дольше — тщательнее, но медленнее и дороже. Выбор запоминается для каждой модели.
ИИ спрашивает разрешения, прежде чем что-то изменить. Три режима: «Спрашивать», «Только чтение», «Без вопросов».
Правая панель показывает, что ИИ делает прямо сейчас: о чём думает, какие файлы читает и правит, какие команды выполняет.
📎 и перетаскивание (до 200 МБ), окно «Файлы», скачивание файлов, записанных ИИ.
Ответы оформлены: заголовки, таблицы, списки. Текстовые документы (.md) открываются панелью справа.
Остаток окон подписки Claude, стоимость ответа, баланс DeepSeek, расход по пользователям за 7 дней.
Каталог плагинов, установка, личные умения; описания переводятся на русский.
Вход по паролю, роли, создание пользователя вместе с папкой, отключение, удаление, смена пароля.
Пошаговая инструкция для Windows и macOS: как связать свой компьютер с сервером и получить общую папку.
Без root нельзя запустить ИИ под отдельной учётной записью, где система сама не пустит в чужие папки.
Поэтому команды (Bash) проверяются по тексту: ловятся выходы «наверх» (..), в домашний каталог (~), полные пути. Если путь собирается
внутри команды по частям, проверка его не увидит.
| Политика | Поведение |
|---|---|
| Спрашивать | читать и искать файлы, искать в интернете, вести список задач, звать помощников — без вопроса; записывать, править, выполнять команды — только после «Разрешить» |
| Только чтение | разрешены только инструменты чтения и поиска |
| Без вопросов | разрешено всё, кроме действий за пределами папки пользователя |
Перед каждым действием ИИ Claude Code вызывает «перехватчик» (хук), а тот спрашивает программу клиента: 1) действие внутри папки пользователя? Если нет — запрет; 2) что разрешает выбранный режим; 3) если нужно — вопрос в окно. То же действует для помощников ИИ (субагентов). Ответить можно с любого устройства — вопрос закроется во всех окнах.
Если программа клиента не запущена или ответа нет за отведённое время — действие запрещается.
| Поставщик | Модели | Effort (глубина) | Оплата | Особенности |
|---|---|---|---|---|
| Claude | Opus · Fable · Sonnet · Haiku. Fable держит в «памяти» до 1 млн токенов — это несколько толстых книг | low … max | подписка | фиксированная плата; лимиты на 5 часов и на неделю |
| DeepSeek | V4 Flash (до 1 млн токенов) · V4 Pro | low / high / max | API-ключ | оплата за объём; начинает отвечать через ~1 с |
| Xiaomi MiMo | V2.6 Pro | не настраивается | API-ключ | оплата за объём; начинает отвечать через ~30 с |
Кроме облачных ИИ в системе есть своя модель — Qwen 2.5 14B. Она работает на видеокарте домашнего ПК владельца: запросы к ней бесплатны, а текст не уходит сторонним сервисам.
Qwen нет в меню моделей окна — так решил владелец. С ней работает сам ИИ Claude: передаёт вопрос и нужный текст и получает ответ, как от помощника. Подходит для простых задач и для текста, который не стоит отправлять в облако.
Сервер подключается к ПК по SSH внутри частной сети Tailscale. Вход на ПК по этому ключу разрешён только с адреса сервера. Туннель доступен только учётной записи владельца: другие пользователи сервера моделью воспользоваться не могут.
Claude Code раскладывает историю чатов и память проекта по папкам, в которых шла работа. Если перенести чат в другую папку, он «потеряет» свою историю.
Проект — просто папка-группа в списке чатов, для порядка. Чат можно перенести в другой проект в любой момент, ничего не теряя.
Каждый работающий чат занимает память сервера, поэтому одновременно — не больше 3 у пользователя и 16 на весь сервер. Чат без дела 30 минут «засыпает»; следующее сообщение будит его с полной историей.
📎 в поле ввода, перетаскивание в окно или «Загрузить сюда». Файл ложится в папку чата; ИИ видит его сразу.
«⬇ скачать» в окне «Файлы» и у каждой правки файла в «Ходе работы».
Список, загрузка и скачивание — только внутри папки пользователя.
Такие файлы могут содержать программный код. Поэтому они только скачиваются и помечаются как «изолированные» (CSP sandbox): код из файла не сможет действовать от имени пользователя в окне клиента.
| Роль | Права |
|---|---|
| Владелец | все папки и чаты; назначает администраторов; его учётную запись менять нельзя |
| Администратор | создаёт, отключает, удаляет пользователей (папка и чаты удалённого сохраняются); других администраторов не меняет; файлы — только своя папка |
| Пользователь | своя папка ~/users/<логин> и свои чаты |
| Уровень защиты | Статус |
|---|---|
| L1 · программа клиента: чужие чаты, папки и уведомления не показываются и не открываются | сделано |
| L2 · проверка действий ИИ: читать, писать и искать файлы вне своей папки ИИ не может — даже в режиме «Без вопросов» и через помощников | сделано |
| L3 · операционная система: у каждого своя учётная запись Linux, чужие папки закрыты самой системой | нужен root |
L3 без root недоступен: все чаты работают под одной учётной записью. Защита держится на L1 и L2; команды (Bash) проверяются по тексту.
Плагины и умения аккаунта Claude появляются у каждого пользователя автоматически.
Что пользователь установил сам — видно только ему.
Ключи доступа к поиску, GitHub и т. п. лежат в закрытых файлах на сервере и передаются ИИ при запуске чата — вводить их в чат не нужно.
:8443, потому что обычный порт 443 там занят другим сайтом.На bslchat.com уже работает веб-сервер (nginx), но настраивать его может только администратор с правами root — у нас их нет. На втором сервере root есть, поэтому окно опубликовано там.
запланировано перенос на https://bslchat.com/claude/ — требует правки nginx на bslchat.com, то есть root.
Папка пользователя на компьютере и его папка на сервере синхронизируются в обе стороны. Файлы, которые записал ИИ, появляются на компьютере; изменения на компьютере попадают на сервер.
| Кто | На компьютере | На сервере |
|---|---|---|
| Владелец | «Папка MacBook» на Mac | ~/users/a.shuraev |
| Пользователь | своя папка на ПК, до 3 устройств | ~/users/<логин> |
У каждой установки Syncthing есть свой номер (ID устройства). Пользователь вставляет его в инструкцию /guide — сервер сам добавляет устройство и выдаёт ему папку пользователя.
Чужие устройства и чужие папки отклоняются.
Syncthing ходит к серверу внутри частной сети Tailscale, поэтому открывать сервер в интернет не нужно. Соединение начинает ПК.
Tailscale на сервере работает без root, в userspace-режиме: сервер не видит настоящих адресов подключившихся ПК — все соединения выглядят как пришедшие от него самого.
Чаты и память ИИ — они хранятся только на сервере.
📎 — загрузка, ⬇ — скачивание прямо в окне клиента.
Если файл лежит только в iCloud и не скачан на Mac, на сервер приедет пустая заглушка. Для таких папок нужно включить «Всегда хранить на этом Mac».
На первом пользователе (Windows-ПК).
Проверяется на отдельной тестовой копии Syncthing, чтобы не задеть рабочую синхронизацию.
Сайт можно добавить на экран телефона как приложение: свой значок, название «ИИ Агенты», открывается без адресной строки.
Чаты, модели, разрешения, файлы, документы, «Ход работы», пользователи.
Окно само подхватывает новую версию интерфейса с сервера.
Каждый работающий чат — копия claude (~250 МБ памяти). Не больше 3 у пользователя и 16 на сервер; при нехватке первыми «засыпают» простаивающие. Чат без дела 30 минут засыпает сам; следующее сообщение будит его с полной историей.
Если сервис ИИ долго молчит, окно сообщает об этом и показывает ошибку, а не «висит». Появился после случая: на огромный чат (~750 тыс. токенов) сервис 10 минут не ответил ничего.
Размер файла чата показан в списке красным; для больших чатов окно выводит предупреждение. Длинный чат загружается последними сообщениями.
Сервер не перезапускается, пока идёт ответ; новая версия включается при следующем запуске. Окно само подхватывает новую версию интерфейса.
Удалённый чат попадает в корзину на сервере, его можно вернуть. Перед чисткой файла чата при смене модели делается резервная копия.
Остатки лимитов подписки проверяются раз в минуту и после ответа — бесплатно. Расход токенов записывается по каждому ответу и пользователю, хранится 8 дней.
Новое сначала делается в отдельной копии кода (с историей всех версий — git) и запускается на тестовом экземпляре клиента, который не мешает рабочему. Затем автотесты: права доступа (58 проверок), полные сценарии работы с чатами и файлами, снимки окна в браузере. Только после этого изменения переносятся на рабочий сервер. Снимки в этой презентации сделаны на тестовом экземпляре.
root — права администратора сервера: ставить системные программы, запускать службы, настраивать общий веб-сервер.
У нашей учётной записи (a.shuraew) их нет. Ниже — что сделано вместо и чем это оборачивается.
| Что недоступно без root | Что сделано вместо | Чем оборачивается |
|---|---|---|
| Опубликовать окно через веб-сервер bslchat.com | второй сервер (dadits.online) со своим веб-сервером; основной держит к нему туннель | лишнее звено в цепочке |
| Системные службы — программы, которые ОС сама держит запущенными | расписание cron: раз в минуту проверяет и перезапускает что нужно | после обрыва туннель восстанавливается в течение минуты |
| Полноценный Tailscale с сетевой картой в системе | Tailscale «внутри программы» (userspace-режим); выход в его сеть — через локальный прокси | сервер не видит настоящих адресов подключившихся |
| Отдельная учётная запись Linux на каждого пользователя (L3) | права проверяет программа клиента (L1) и «перехватчик» перед каждым действием ИИ (L2) | команды проверяются по тексту; путь, собранный внутри команды по частям, не распознаётся |
| Установка системных программ | используется то, что уже есть: Python 3, node, ssh, curl | клиент написан без чужих библиотек |
Окно по адресу https://bslchat.com/claude/ без второго VPS — требует правки nginx, то есть root.
Отдельная учётная запись Linux на каждого пользователя — требует root.
Администратор задаёт каждому пользователю список доступных поставщиков и моделей. Сейчас всем доступны все модели, для которых на сервере есть ключ.
Таблица расхода по пользователям и персональные квоты-предупреждения. Учёт токенов по пользователям уже ведётся.
Журнал: кто и когда входил, что открывал и удалял, какие действия ИИ разрешил.
Окно по адресу https://bslchat.com/claude/ без второго VPS. нужен root
Заменить Qwen 2.5 14B на домашнем ПК на Qwen3.8-Flash-Next (125 млрд параметров) через движок Strata — сначала проверить скорость на RTX 3060.
Общая папка и память проекта для нескольких пользователей; несколько окон в одном чате.
Просмотр и правка фактов памяти, версии фактов.
Отдельная учётная запись Linux на каждого пользователя. нужен root
Автоматическая выдача доступа к серверу в Tailscale (сейчас — вручную); отключение долгих «размышлений» модели MiMo.