Возможности · Надёжность и безопасность

Надёжно и локально. Ваши агенты, ваши серверы, ваши данные

Базы данных лежат в папке программы, секреты зашифрованы мастер‑паролем, у каждого агента свой токен и свои права, API закрыт по умолчанию. Терминал не замирает на седьмые сутки, а обновление всегда можно откатить.

Почему это важно именно для агентов

Агенты работают сутками, держат открытыми пароли к серверам, пишут в общую переписку и получают токены. Программа, которая этим управляет, должна не течь, не путать, кто есть кто, и не отдавать лишнего наружу. Ниже то, что для этого сделано, без обещаний «военного уровня».

Как это устроено

Терминал, который не замирает

Терминал рисует xterm.js во встроенном WebView2, тот же движок, что во встроенном терминале VS Code. Шесть суток непрерывной работы: число дескрипторов, объектов GDI и USER не растёт. Монитор ресурсов каждые пять минут пишет строку в журнал, по которой это видно. Ctrl+R пересоздаёт терминал, Ctrl+Shift+R весь браузерный элемент: сбой видеодрайвера не требует перезапуска программы.

Секреты под мастер‑паролем

Пароли SSH, passphrase ключей и токены шифруются ключом, который выводится из мастер‑пароля через Argon2id, и хранятся под AES‑256‑GCM. Сам мастер‑пароль нигде не хранится и не восстанавливается. Файлы ключей SSH программа не копирует.

Токен и права у каждого агента

Токен рождается вместе с профилем и умирает с ним. Каждый запрос к API несёт токен, по которому сервер определяет профиль и его права: шина, задачи, ТЗ, документы, вкладки. Подписаться чужим именем нельзя, ответить за другого нельзя, удалить документ агенту нельзя.

API закрыт по умолчанию

Слушает только локальный адрес и явно указанные доверенные туннели, например WireGuard. Нет анонимного режима. Лимиты на частоту и размер запросов. Ошибки наружу уходят стабильными кодами без внутренних деталей, а подробности остаются в журнале с идентификатором.

Ключи серверов под контролем

Ключ SSH‑сервера запоминается при первом подключении. Другой ключ при следующем подключении означает отказ, пока вы сами не решите, что произошло. Операция «Забыть ключ сервера» есть, но её делает человек.

Данные на вашем компьютере

Профили, переписка, задачи, вопросы в cct.db; ТЗ в tz.db; документы в docs.db; настройки и рабочее место в JSON. Всё в папке программы при переносимой установке. Перед обновлением схемы делается копия базы. Экспорт настроек не включает секреты.

Обновление с архивом и откатом

Установщик проверяет комплект по хешам, архивирует прежнюю версию и данные, и только потом заменяет файлы. Если замена не удалась, он сам возвращает прежние файлы. Откат на предыдущую версию штатная процедура, а не поиск старого exe.

Ошибка в интерфейсе не закрывает программу

Исключение в обработчике интерфейса записывается в журнал со стеком и показывается одним уведомлением, а агенты продолжают работать. Настройки с повреждённым файлом не заменяются молча: окно восстановления предлагает повтор, резервную копию или явные значения по умолчанию.

Корректный выход

«Выход» проверяет несохранённые изменения, посылает агентам команду выхода, отсоединяет tmux‑сессии на серверах, останавливает API и закрывает базы. Сторожевой таймер не даёт выходу зависнуть. Крестик окна по умолчанию только прячет программу в область уведомлений: агенты продолжают работать.

Проверено перед выпуском

Перед каждым выпуском на отдельной машине проходят тысячи тестов приложения и интеграционных тестов, живые сценарии на Linux‑сервере и репетиция обновления с откатом на копии данных. Заметки к выпуску перечисляют, что проверено, а что нет.

Скриншот: Настройки → External APIАдрес прослушивания, доверенные туннели, лимиты
Скриншот: профиль и ключ доступа агентаКарточка «Ключ доступа агента» и права профиля

Что это даёт

  • Можно оставить на ночь. Агенты на серверах работают, программа не течёт, утром рабочее место на месте.
  • Ясно, кто что сделал. Каждое действие записано от имени токена, а не со слов.
  • Ничего не уходит наружу само. Локальные базы, закрытый API, зашифрованные секреты.
  • Обновление не страшно. Архив, проверка по хешам, откат.

Дальше