Изменения
Что нового по версиям.
Только то, что заметно пользователям: кабинет, агент, установщик, воркеры, CLI, self-hosted. Внутренние переделки сюда не попадают.
Переводы строк в sshd_config сохраняются
Исправления
- При исправлении настроек OpenSSH на Windows агент и установщик сохраняют переводы строк, которые уже были в файле. Раньше в
sshd_configс окончаниями CRLF исправленная строка получала другое окончание. На работуsshdэто не влияло, но файл становился неоднородным для тех, кто правит его вручную.
- При исправлении настроек OpenSSH на Windows агент и установщик сохраняют переводы строк, которые уже были в файле. Раньше в
Честная проверка SSH-ключей на Windows
Агент
- При добавлении SSH-ключа на Windows агент проверяет, что сервер OpenSSH действительно примет этот ключ, и сообщает результат. Раньше ключ мог лежать в нужном файле, операция завершалась успехом, а вход по ключу не работал, и причина нигде не называлась.
- Агент проверяет настройки OpenSSH на машине. Если группа администраторов в
sshd_configзаписана локализованным именем, например «администраторы», сервер не читает файл с ключами администраторов. Агент сообщает об этом, а по явному запросу исправляет запись, сохраняет резервную копию настроек и перезапускаетsshd.
Установщик
- Установщик выполняет ту же проверку настроек OpenSSH при каждой установке, в том числе когда находит уже установленный сервер OpenSSH и больше ничего в нём не меняет. При исправлении рядом остаётся резервная копия прежних настроек.
CLI
- Операторский MCP-инструмент возвращает ошибку с причиной, если ключ добавлен, но сервер OpenSSH его не примет. Параметр
repair_sshd_configразрешает агенту исправить настройки. По умолчанию он выключен, потому что правка меняетsshd_configи перезапускает службу. - Подсказка к туннелю для старых сборок агента перечисляет версии Windows, на которых работает эта сборка, и предлагает уточнить версию командой
ver. Раньше она утверждала, что на машине Windows 7 или Server 2008 R2, хотя та же сборка работает на 8.1 и Server 2012 R2.
Безопасность
- Права на файл с ключами администраторов Windows теперь сбрасываются и выставляются заново: доступ остаётся только у администраторов и системы. Раньше на файле могли сохраниться лишние явные разрешения, из-за которых OpenSSH отказывался его читать.
Исправления
- Read-only команды с отбрасыванием вывода, например
2>nul,2>/dev/nullи2>&1, больше не отклоняются как перенаправление. Это касается команд оператора и воркеров. Перенаправление в файл по-прежнему запрещено.
Список машин и имена в nyx-operator
CLI
nyx-operator agentsпоказывает машины так же, как кабинет: имя, хост, состояние, ОС, версию агента, признак реле и теги. Раньше в списке были только идентификатор и имя хоста, и машину, известную вам по имени из кабинета, приходилось искать наугад.- В списке появились фильтры, как в кабинете: произвольный текст по всем колонкам,
--online,--osи--tag. Несколько--tagподряд означают, что должны совпасть все теги. - Ключ
--idsдобавляет колонку с идентификаторами,--jsonвыводит список в машиночитаемом виде. Итоговая строка пишется в stderr, поэтому таблицу можно передавать дальше по конвейеру. nyx-operator tunnelпринимает имя машины, имя хоста, логин или идентификатор, достаточно уникальной части. Если совпало несколько записей и в сети только одна из них, выбирается она, так что старая запись после повторной регистрации не мешает. Перед открытием туннеля команда печатает, какую машину она выбрала.- В
nyx-operator --helpпоявились примеры: первый вход, список машин с фильтрами, открытие туннеля по имени. Там же сказано, что токен оператор создаёт сам в кабинете и его значение показывается один раз. - У ключей
--portи--listenпоявились описания. Туннель открывается на любой TCP-порт, не только на 22, а--listen 127.0.0.1:0оставляет выбор свободного локального порта системе.
Рабочее место оператора одной командой
CLI
- Рабочее место оператора на Linux x86_64 ставится одной командой:
curl -fsSL https://nx.3fe.ru/downloads/install-operator.sh | bash. Скрипт устанавливаетnyx-operatorиnyx-mcpв~/.local/bin(под root в/usr/local/bin). Раньше инструменты оператора нужно было собирать из исходников. - Обновление выполняется той же командой. Скрипт сравнивает установленные версии с опубликованными и заменяет только то, что изменилось, а с ключом
--checkпоказывает версии и ничего не трогает. Запущенныйnyx-mcpзаменяется безопасно: уже работающий процесс продолжает работу до выхода. - Каждый загруженный файл сверяется с опубликованной контрольной суммой sha256. Если сумма не совпала, установка прерывается с ошибкой.
- С ключами
--with-agent --token … --name …и правами root тот же скрипт ставит агент, регистрирует машину по токену подключения и добавляет службу systemd. Ключ--onlyвыбирает, что именно ставить,--prefixзадаёт другую папку,--forceпереустанавливает независимо от версии. - У
nyx-mcpпоявился ключ--version, по нему скрипт установки определяет, нужна ли замена. - Подсказки к туннелям в операторском MCP-инструменте зависят от порта, на который открыт туннель: команда
sshдля 22, RDP-клиент для 3389,psql,mysqlилиsqlcmdдля портов баз данных, адрес для веб-портов. Раньше для любого туннеля предлагалась командаssh, в том числе для RDP, где она не работает.
Установщик
- Установщик больше не показывает зелёную страницу «установка завершена», если регистрация машины не удалась. Раньше при просроченном токене агент печатал ошибку, но мастер всё равно заканчивал работу успехом, хотя служба не регистрировалась и машина не подключалась.
- Текст ошибки регистрации прямо говорит, что токен подключения одноразовый и может истечь, и где взять новый.
- Рабочее место оператора на Linux x86_64 ставится одной командой:
Один установщик на всю линейку Windows
Установщик
- Один файл ставится на всю линейку Windows, от 7 SP1 и Server 2008 R2 до 11, на 32 и 64 бита. Раньше установщик просто отказывался запускаться на всём, что старше Windows 10, и старый парк машин подключить было нечем.
- Установщик сам определяет версию системы и разрядность и распаковывает подходящую сборку агента. Выяснять заранее, что стоит на машине, и выбирать между файлами не нужно.
- OpenSSH-сервер входит в комплект. На Windows 7 и Server 2008 R2 своего магазина компонентов нет, а скачать OpenSSH эти системы не могут: TLS 1.2 у них по умолчанию выключен. На Windows 10 и новее сначала пробуется встроенный компонент, а комплектный остаётся запасным вариантом для машин без доступа к Windows Update, и удаляется, если не пригодился.
- Комплектный OpenSSH ставится в отдельную папку агента, поэтому не перезаписывает OpenSSH, установленный администратором. Уже работающая служба
sshdне заменяется, только включается и запускается. При удалении агента OpenSSH остаётся на месте, так что вместе с агентом не пропадёт ваш доступ по SSH. - Из-за встроенного комплекта файл установщика вырос примерно до 12 МБ.
Агент
- Появились сборки для старых систем, включая 32-битную. Терминала в браузере на них нет, потому что ConPTY появился только в Windows 10 1809, но машина видна в кабинете, работают SSH-реле, туннели, read-only команды и автообновление. Терминал к такой машине открывается через соседнюю современную машину полем «SSH на другой агент».
- Автообновление теперь работает и на старых системах: релизы подписываются для всех трёх сборок сразу. Раньше агенты на старых Windows не могли обновиться, потому что подписанных сборок для них не публиковалось.
- Подсказки в операторском MCP-инструменте учитывают старые системы и предлагают
wmicиGet-WmiObjectвместо команд, которых в PowerShell 2.0 нет.
Понятные отказы и последняя активность машины
Безопасность
- В список изменяющих команд шлюза добавлены windows-утилиты, которые раньше не опознавались явно:
del,rd,ren,move,xcopy,robocopy,format,diskpart,bcdedit,taskkill,icacls,msiexec, а такжеsc stop|start|delete|config,reg add|delete|import,schtasksс созданием, изменением, удалением и запуском задачи,wevtutilс очисткой журнала. Правила одинаковы для команд из чата и для операторских инструментов. - Сетевая диагностика признана чтением и выполняется без подтверждения:
ping,tracert,pathping,nbtstat,nslookup,dig,host,mtr,netsh … show,Test-NetConnection,Test-Connection,Resolve-DnsName. - Отказ на цепочку команд называет виновника по номеру — «звено 2
del xменяет состояние, остальная часть цепочки допустима» — вместо общего «требуется подтверждение». Сразу видно, что именно переписать, и не нужно перебирать команды по одной.
Кабинет
- У машин не в сети рядом со значком «Offline» видно, когда они были в сети в последний раз: «был в сети 3 дн. назад». Это показано на дашборде, на странице машины и в админской таблице.
- Страница машины не в сети больше не пустует: она показывает последние известные ОС и версию агента, которые машина сообщила при последнем подключении.
CLI
nyx-mcpпередаёт текст отказа целиком, сведения о машине включают время последнего подключения, а у запуска команд есть предупреждение, что вывод остаётся на языке машины.
- В список изменяющих команд шлюза добавлены windows-утилиты, которые раньше не опознавались явно:
Кириллица в выводе команд Windows
Исправления
- Переключение консоли в UTF-8, добавленное в 0.1.53, помогло не везде: встроенные команды вроде
dirпродолжали писать в кодировке OEM, а часть утилит, напримерsc, из-за смены кодовой страницы начинала отвечать по-английски. Теперь агент кодировку консоли не трогает, а разбирает байты вывода сам: корректный UTF-8 проходит как есть, остальное декодируется из кодовой страницы OEM. Русский текст от любых утилит доходит до вас читаемым.
- Переключение консоли в UTF-8, добавленное в 0.1.53, помогло не везде: встроенные команды вроде
Агент на локализованной Windows
Исправления
- Права на файл ssh-ключей выдавались по английскому имени группы «Administrators» и не выдавались вовсе там, где группа называется «Администраторы». Теперь агент обращается к группам по системным идентификаторам, и выдача ключа работает в любой локали Windows.
- Команда передавалась в
cmd /Cчерез стандартное экранирование аргументов, из-за чего кавычки внутри строки доезжали искажёнными:powershell -Command "…"печатал текст команды вместо того, чтобы её выполнить. Теперь командная строка передаётся дословно, как вы её написали. - Вывод консольных утилит возвращался в кодировке OEM и приходил в панель нечитаемым набором символов. Агент стал запрашивать вывод в UTF-8; правило шлюза команд это не затрагивает, префикс добавляет сам агент.
SSH-ключ на машину через агента
Агент
- Агент умеет положить на машину публичный ssh-ключ оператора, не требуя предварительного доступа к ней. На Linux ключ попадает в
authorized_keysуказанного локального пользователя с правами, которые ждёт sshd; на Windows — в файл ключей администраторов вместе с ограничением доступа, без которого встроенный OpenSSH ключ игнорирует. Повторная выдача того же ключа ничего не меняет.
CLI
- В
nyx-mcpпоявилась выдача ключа: по умолчанию берётся ваш~/.ssh/id_ed25519.pub, так что связка «открыть туннель — зайти по ssh» настраивается на новой машине, не подходя к ней.
Безопасность
- Выдать ключ может только администратор и только на машину с онлайн-агентом. Формат ключа проверяется и на панели, и на агенте, а событие попадает в журнал аудита — с типом ключа и комментарием, без самого ключа.
- Агент умеет положить на машину публичный ssh-ключ оператора, не требуя предварительного доступа к ней. На Linux ключ попадает в
Чтение состояния Windows без подтверждений
Безопасность
- Шлюз команд знал только unix-овые способы посмотреть состояние, поэтому на Windows-машинах отклонялось почти всё безобидное:
ver,systeminfo,tasklist,dir,type,sc query,reg query,wmic … get,ipconfig,powershell Get-*. Теперь такие команды распознаются как читающие и выполняются сразу, а изменяющие варианты тех же утилит (sc stop,reg add,wmic … call) по-прежнему требуют подтверждения. - Цепочки и конвейеры (
;,&,&&,||,|) проходят, если читающие все звенья; одного изменяющего звена достаточно, чтобы вся строка ушла на подтверждение. - PowerShell допускается только в заведомо безопасном виде: без запуска закодированных команд и файлов сценариев, без блоков кода, подстановок и
iex, с читающим командлетом в начале и на каждом следующем шаге конвейера. - К списку чувствительных для чтения путей добавлены windows-хранилища секретов: кусты SAM, SECURITY и SYSTEM, база доменных учётных записей, соответствующие ветки реестра, файлы автоустановки и каталоги
.ssh. Заглянуть в них можно только с подтверждением, как и на Linux.
Воркеры
- Те же правила действуют для команд, которые воркер выполняет в чате: вопрос «что там со службой» на Windows-машине больше не упирается в отказ «команда меняет состояние».
CLI
- Отказ в
nyx-mcpтеперь называет список разрешённых команд вместо общего «команда меняет состояние», а примеры подключения по ssh подстраиваются под ОС машины.
- Шлюз команд знал только unix-овые способы посмотреть состояние, поэтому на Windows-машинах отклонялось почти всё безобидное:
Теги в один клик и доступ к парку из MCP
Кабинет
- Теги машины редактируются в отдельном окне вместо строки ввода: выбранные теги показаны чипами, рядом — все теги, уже используемые агентами и токенами подключения, нажатие на чип добавляет или убирает тег. Новый тег можно просто набрать, он принимается по Enter, запятой или пробелу.
- Тот же редактор встроен в форму создания токена подключения, так что машина подключается уже размеченной.
CLI
- Новый инструмент для машины оператора: MCP-сервер
nyx-mcp, который даёт Claude Code, Claude Desktop и другим MCP-клиентам работать с парком так же, как оператор из терминала. Он умеет найти машину по имени, hostname, логину, ОС или тегам, открыть локальный порт в реле до нужного порта машины (дальше вы ходите туда обычнымиssh,scp, RDP), выполнить быструю read-only команду через панель и проставить теги. - Входящие порты на машинах для этого не нужны — достаточно, чтобы агент был онлайн. Туннели переиспользуются, закрываются сами после простоя и все разом при выходе MCP-клиента, так что на вашей машине ничего не остаётся слушать порт.
- Команды, меняющие состояние,
nyx-mcpне выполняет: их отклоняет тот же шлюз подтверждений, что работает в кабинете, и в ответе объясняет, что изменения делаются по ssh через туннель — под вашими собственными учётными данными.
Агент переподключается после обрыва связи
Исправления
- Если связь с панелью рвалась, когда на машине была открыта сессия, агент замолкал и больше не переподключался: процесс оставался жив, но машина висела офлайн до ручного перезапуска службы. Так происходило, например, после обновления панели, когда разом отваливались все агенты. Теперь при обрыве агент закрывает процессы живых сессий и переподключается по обычному расписанию повторов.
- Сессии в мультиплексоре переживают обрыв и восстанавливаются при переподключении; обычные оболочки закрываются вместе со связью — так же, как это уже предполагала панель.
Имя машины задаётся при установке
Установщик
- Мастер спрашивает необязательное «Имя машины в кабинете» — например «Касса 2, склад»; если поле пустое, берётся имя компьютера. Для тихой установки есть ключ
/NAME=. Машина появляется в панели сразу под понятным названием, переименовывать её вручную не нужно.
Агент
- У регистрации появился параметр
--display-nameи переменная окруженияNYTHRONIX_DISPLAY_NAME— то же самое доступно на Linux и в собственных скриптах раскатки. Имя принимается на любом языке, вырезаются только управляющие и невидимые символы.
Кабинет
- Список токенов подключения по умолчанию показывает только действующие токены. Истёкшие, использованные и отозванные убраны под переключатель «показать (n)», у каждого токена виден статус, а отозвать можно только действующий. Токены, истёкшие больше недели назад, удаляются сами, так что список не растёт.
- Мастер спрашивает необязательное «Имя машины в кабинете» — например «Касса 2, склад»; если поле пустое, берётся имя компьютера. Для тихой установки есть ключ
Подключение машины начинается с токена
Кабинет
- Раздел «Агенты» в админке теперь открывается блоком «Подключить новую машину»: три шага для Windows (скачать установщик, создать токен, вставить его в мастер) и готовая команда для Linux. Раньше первой на странице была регистрация по логину и паролю, люди заводили агента через неё и получали пароль, который установщик не принимает.
- Регистрация по паролю осталась, но свёрнута внизу страницы как «ручная регистрация (старый способ)» с пояснением, что установщику Windows она не нужна.
- При создании токена подключения показываются два значения для копирования: сам токен
nyxet_…, который спрашивает установщик Windows, и целиком команда подключения для Linux. - В таблице агентов логин, hostname и отображаемое имя сведены в одну колонку «Машина», кнопки действий переносятся на новую строку, а широкие таблицы админки прокручиваются внутри карточки — кнопка удаления больше не уезжает за край экрана.
Установщик
- Адрес сервера и токен очищаются от невидимых символов (неразрывный пробел, метка порядка байтов, символы нулевой ширины). Токен, скопированный из переписки, больше не отбраковывается проверкой формата.
Заявки на бету и уведомления по почте
Кабинет
- Новый раздел Админ → Заявки: список заявок на закрытое тестирование с формы на сайте, фильтр по статусу и смена статуса у каждой строки (новая, связались, принята, отклонена). Видно, кто оставил заявку, для чего, размер парка машин и ОС. Раздел подсказывает, включена ли отправка писем.
Self-hosted
- Публичная точка приёма заявок с формы: без авторизации, с лимитом 5 запросов в час с одного IP, полем-ловушкой для ботов и жёсткими ограничениями размеров. Каждая заявка попадает в журнал аудита.
- Исходящая почта: задайте
NYTHRONIX_SMTP_URL(smtps://илиsmtp://), при желанииNYTHRONIX_SMTP_FROM, иNYTHRONIX_BETA_NOTIFY_TO— каждая заявка будет приходить письмом. Отправка идёт в фоне и не мешает приёму заявки, если SMTP недоступен; сайт при этом не раскрывает ваш адрес.
Кабинет на отдельном домене
Self-hosted
- Кабинет можно вынести на отдельный хост (например,
app.<домен>), оставив агентов и воркеров на основном адресе панели: переменнаяNYTHRONIX_EXTRA_ORIGINSразрешает cookie-авторизованные WebSocket-подключения с дополнительных origin. Документация описывает схему «лендинг + кабинет».
Исправления
- Браузеры могли неделями показывать устаревшую оболочку кабинета и уводить на страницу входа: сервер отдавал HTML без явных правил кэширования. Теперь оболочка и service worker всегда перепроверяются, а хешированные ресурсы кэшируются на год.
- Кабинет можно вынести на отдельный хост (например,
Теги агентов и установщик для Windows
Кабинет
- Теги агентов: произвольные метки вида
env:prod,client:acme,role:db. Редактируются в Админ → Агенты, а join-токену можно задать теги, и каждая машина, подключённая по нему, приходит уже размеченной. - Единая панель фильтра на дашборде, в выборе машины для новой сессии, в туннелях и в админке: поиск по логину, hostname, имени и тегам, чипы тегов, «только online» и группировка по ключу тега. На дашборде фильтр сохраняется в адресе страницы, ссылкой можно поделиться.
- Ссылка на установщик для Windows на странице входа и в админке агентов.
- Карточка подтверждения в чате показывает для MCP-скилов имя скила и аргументы, а не сырое содержимое под подписью «команда».
Установщик
- Полноценный установщик агента для Windows (Windows 10 1809+ / Server 2019+): мастер спрашивает адрес панели и join-токен, по желанию ставит встроенный OpenSSH Server, чтобы к машине за NAT можно было подключаться через реле, затем регистрирует службу и запускает её.
- Тихая установка:
/SERVER=и/TOKEN=вместе с/VERYSILENT, ни один диалог не блокирует. Установщик перехватывает службу, поставленную вручную старым способом; пустой токен сохраняет существующую регистрацию — это путь обновления.
Self-hosted
- Готовый контейнер «skills-host» для скилов, которым нужен интернет (загрузка веб-страниц, поиск): он подключается к панели как отдельный агент, а его подпроцессы могут выходить только на домены из
SKILLS_ALLOW. Контейнер отказывается стартовать с открытым выходом в сеть. - Скрипт и systemd-юнит для ограничения исходящего трафика скилов по списку доменов на любом хосте с агентом. В комплекте примеры скилов fetch и DuckDuckGo.
Исправления
- Сборка агента для Windows была сломана с версии 0.1.42 (понижение прав скилов только для Unix) — исправлено; на Windows скилы работают от учётной записи службы.
- Теги агентов: произвольные метки вида
Пресеты воркеров ограничивают скилы
Воркеры
- Поле «скилы» у воркера (пресет) теперь действительно работает: это список имён серверов скилов через пробел или запятую, допускаются маски. Воркер для базы данных загружает только DB-скилы — модель меньше отвлекается, а поверхность привилегий меньше. Пусто,
allили*— все скилы, как раньше.
Кабинет
- В форме воркера рядом с полем пресета появилась подсказка о том, как оно ограничивает скилы.
- Поле «скилы» у воркера (пресет) теперь действительно работает: это список имён серверов скилов через пробел или запятую, допускаются маски. Воркер для базы данных загружает только DB-скилы — модель меньше отвлекается, а поверхность привилегий меньше. Пусто,
Скилы работают без прав root
Безопасность
- Серверы скилов больше не работают от root: если агент запущен от root, каждый подпроцесс скила понижает права до непривилегированного пользователя, от которого выполняются и команды воркеров. Скомпрометированный скил не получает доступа ко всей машине.
Агент
- Понижение прав встроено в сам запуск подпроцесса, поэтому агент по-прежнему корректно останавливает серверы при изменении набора скилов. Если агент уже запущен не от root, ничего не меняется.
Панель скилов в кабинете
Кабинет
- В Админ → Агенты появилось окно «Управление скилами»: включайте скилы из каталога машины переключателем, заполняйте параметры, видите бейджи «запущено» и «read-only». Для офлайн-агента желаемый набор тоже можно править — применится при переподключении.
Агент
- Агент публикует панели не только запущенные серверы, но и весь каталог с параметрами и флагом «только чтение», поэтому кабинет предлагает скилы, не зная команд на машине.
Воркеры
- Если владелец пометил сервер скилов как «только чтение», его инструменты выполняются без запроса подтверждения — меньше шума на безопасных операциях с готовыми серверами, которые не помечают отдельные инструменты.
Исправления
- После перезапуска агента список скилов теперь верный сразу: агент запоминает применённый набор и заново сообщает о нём панели после переподключения.
Скилы включаются из панели
Агент
- Набор скилов машины теперь задаётся из панели, а не ручной правкой файлов на сервере (пока через API; удобный интерфейс в кабинете — в следующей версии). Агент сам запускает и останавливает серверы скилов под желаемый набор.
- Панель хранит и передаёт только имена скилов и параметры (например, адрес базы данных); сопоставление имени с командой делает каталог, который ведёт владелец машины. Даже скомпрометированная панель может включить только то, что владелец заранее разрешил.
Воркеры
- Воркер корректно обрабатывает несколько вызовов инструментов за один ход модели: раньше при двух и более подтверждениях подряд он ломался с ошибкой возобновления.
- Проверена работа с готовыми сторонними MCP-серверами (например, Postgres) через mcp-proxy.
Подтверждение изменяющих скилов
Воркеры
- Скил, который может что-то изменить на машине, останавливается и ждёт «Подтвердить / Отклонить» оператора прямо в канале — так же, как shell-команды. Скилы только для чтения выполняются сразу; если сервер не сообщил, что скил безопасен, по умолчанию требуется подтверждение.
- Вызовы скилов теперь видны в чате как шаги работы воркера: какой скил, с какими аргументами и что вернул. Раньше они не отображались.
Безопасность
- Каждый вызов скила записывается в журнал аудита с организацией, оператором, машиной, сервером и инструментом — как и выполнение команд.
Исправления
- Образ воркера собирался без модуля скилов и падал при старте — исправлено.
MCP-скилы и изоляция воркеров
Воркеры
- Воркер находит MCP-серверы скилов на ваших машинах и подключает их инструменты. Для чтения состояния машины (диск, память, аптайм, статус сервисов, хвост лога, файлы) воркер теперь предпочитает структурированные скилы, а не сырые shell-команды.
- Воркер общается только с панелью, а панель прокидывает запросы к скилам на машину через реле — это работает даже при полностью закрытом исходящем трафике воркера.
Агент
- Агент запускает настроенные MCP-серверы скилов как подконтрольные подпроцессы (перезапуск при падении) и сообщает панели, какие из них доступны. В комплекте — минимальный встроенный сервер только для чтения.
Self-hosted
- Свои ключи и модель LLM для каждой организации: файл
NYX_LLM_PROFILES_FILEчитается супервизором на каждом цикле, так что новый клиент подключается без перезапуска. Секреты LLM не попадают на панель, которая смотрит в интернет. - Изоляция исходящего трафика воркеров:
NYX_WORKER_NETWORKвыносит их в отдельную docker-сеть, а скрипт на хосте плюс SNI-фильтр пропускают только панель и LLM. Правила переживают перезагрузку (systemd-юнит).
Безопасность
- Воркер из контейнера не достигает ничего, кроме панели и LLM: ни локальной сети, ни других контейнеров, ни облачных метаданных, ни соседних сайтов за тем же ingress.
Воркеры восстанавливаются сами
Воркеры
- Упавший воркер больше не остаётся «мёртвым» контейнером: среда выполнения убирает его и поднимает заново, если он всё ещё нужен. В чате воркер возвращается онлайн без вмешательства оператора.
- Зависший воркер (процесс жив, но перестал отвечать) теперь тоже определяется — по отсутствию сигнала присутствия — и через льготный интервал перезапускается заново.
Self-hosted
- Супервизор воркеров стал сервисом в Compose-стеке, а не отдельным
docker run: перезапускается вместе со стеком, конфигурация в одном месте. Панели нужна переменнаяNYTHRONIX_RUNTIME_TOKEN, чтобы включить API среды выполнения. - Льготный интервал для зависших воркеров настраивается через
NYX_HUNG_GRACE_SECS(по умолчанию 90 секунд). Обновляйте панель раньше супервизора: старая панель не отдаёт статус «онлайн», и супервизор посчитает все воркеры зависшими. - Полное описание архитектуры добавлено в документацию.
0.1.36 и раньше: основа платформы
Всё, что накопилось с первого коммита до версии 0.1.36 (май — июль 2026), одной сводкой. Это фундамент, на котором строятся все последующие релизы.
Кабинет
- Вход по логину и паролю, роли операторов и первый владелец, который создаётся при пустой базе. Админ-раздел с организациями, операторами, агентами, NX endpoints и журналом аудита с фильтрами.
- Дашборд с карточками машин и индикатором «онлайн/офлайн», список активных сессий, к которым можно подключиться, и живые превью терминалов (мозаика цветов) с настройкой режима превью.
- Терминал в браузере с движками shell, tmux и zellij: сессии переживают перезапуск агента и панели, к одной сессии могут подключаться несколько браузеров, восстанавливаются «липкие» режимы терминала при переподключении.
- Мобильная версия: установка на домашний экран (PWA, офлайн-оболочка), клавиатура по требованию, панель с Tab и другими клавишами, скролл пальцем в том числе внутри tmux/zellij, полноэкранный режим, таблицы админки перестраиваются в карточки.
- Новая навигация: левая выдвижная панель с запущенными сессиями, автоимена сессий в стиле zellij, тема оформления, единый дизайн-система, состояния загрузки и доступность (a11y).
- Сплит-вид: до четырёх интерактивных панелей терминала на одном экране. Выбор рабочей директории при создании сессии через обзор папок на машине.
- Реле между агентами: «SSH на другой агент» из формы новой сессии, консоль порта в браузере, «Открыть как веб-страницу» для локальных веб-интерфейсов на машине, управляемые туннели в разделе «Туннели» с кнопкой копирования команды для nyx-operator.
- Доступ по коду согласия: машину можно подключить по одноразовому коду, который выдаёт владелец, с выбранным режимом доступа.
- Раздел «Настройки» с API-токенами оператора.
- Раздел «Релизы»: публикация, продвижение и отзыв подписанных сборок, политика обновления для каждого агента и NX endpoint.
- Чат с AI-воркерами: каналы, несколько воркеров в одном канале, присутствие воркера, карточки подтверждения команд «что именно выполнится и зачем», кнопки Запустить/Остановить, Пауза/Продолжить, настройка памяти воркера (общая или по каналам).
- В таблице агентов видны платформа, версия, от чьего имени работает агент и запущен ли он в Docker. Агент можно переименовать.
Агент
- Реальный PTY-агент для Linux с shell/tmux/zellij, автоматическое переподключение с экспоненциальной задержкой, сторожевой таймер полуоткрытых соединений (агент переподключается вместо того, чтобы «висеть»), поддержка TLS (wss).
- Самообновление: агент проверяет SHA-256 и подпись Ed25519 сборки с закреплённым ключом и отказывается ставить неподписанное; политика обновлений задаётся из панели.
- Подключение по join-токену (enroll) вместо ручной регистрации.
- Windows: агент как служба, нативный терминал ConPTY, автоопределение возможностей (включая Windows 7 / Server 2008 R2), zellij на современном Windows с восстанавливаемыми сессиями, автообновление, поиск tmux/zellij рядом с бинарником.
- Работа без root: команды воркеров выполняются от непривилегированного пользователя с точечной sudo-политикой, терминалы операторов открываются в их реальных учётных записях и восстанавливаются после перезапуска агента.
- Локальная политика владельца машины перекрывает панель («запертый агент»): control plane не может разрешить больше, чем позволил владелец. Агент сам сообщает воркеру свои эффективные права.
- Команды
nythronix-agent tunnelиshare(реле-туннель и выдача кода согласия) прямо с машины. - NX endpoint: запуск инструментов codex/claude с профилями, снимки профилей, изоляция конфигов инструментов.
Установщик
- Установка одной командой через curl для агента, NX и nx-cli, с TLS и последующим самообновлением.
- Скрипт подключения Linux-агента по join-токену и шаблоны systemd для агента и NX.
Воркеры
- Слой AI-воркеров: воркер выполняет команды на машинах через агента, а панель принудительно требует подтверждения оператора для всего, что не входит в белый список чтения.
- Классификатор команд, отдельный барьер для чтения секретов, разделение обязанностей: подтверждать команду может только оператор с нужной категорией.
- Долговременная память агента и канала на панели, изоляция памяти по каналам, пауза/возобновление, запуск и остановка воркеров из кабинета, управляемая среда выполнения воркеров в контейнерах.
CLI
nx— локальный запускnx codex <профиль>иnx self-update;nx sshиnx tunnelдля self-hosted.nyx-operator— вход по API-токену и туннели через реле со своей машины.- Админ-команды сервера, включая политику обновлений агентов.
Self-hosted
- Docker-образ, Compose с Caddy, конфиги nginx/caddy, systemd-юниты, скрипт релиза, документация по развёртыванию и runbook.
- Бэкенды: Postgres для данных, сессий и аудита, Redis для токенов скачивания, S3/MinIO для сборок.
- Предстартовые проверки продакшен-конфигурации: сервер не запустится с небезопасными настройками.
Безопасность
- Пароли хранятся Argon2id, cookie-сессии с защитой от CSRF, проверка Origin на WebSocket, журнал аудита только на дополнение.
- Атомарные записи без потери обновлений, ссылочная целостность в Postgres и безопасные каскадные удаления.