Модель безопасности
ThreadCells предназначен для одного доверенного Linux-хоста, которым управляет один человек или небольшая доверенная команда. Он координирует мощных нативных агентов программирования; это не песочница для враждебных пользователей, prompts, репозиториев или плагинов провайдеров.
Практические границы доверия
Хост и runtime-пользователь
Всё, что доступно для чтения или выполнения учётной записи операционной системы ThreadCells, может быть доступно нативному агенту. Используйте выделенную учётную запись, минимальные права файловой системы, проверенные установки провайдеров и репозитории, подходящие для автоматизации.
Управляемые worktree разделяют writers, но не изолируют их. Не предоставляйте runtime-учётной записи учётные данные или доступ к хосту, которые агенту не нужны.
Веб-доступ
Обычный UI и упакованные Docs не реализуют общий вход пользователей. Привязывайтесь к 127.0.0.1. Для эпизодического доступа используйте SSH-туннель или Caddy вместе с Authelia для аутентифицированного HTTPS URL. Никогда не открывайте необработанный порт ThreadCells публично.
Установленная PWA сохраняет ту же границу сетевого доверия. Её service worker не может предоставить offline-операционное состояние и не кэширует API, терминалы, авторизацию, рабочие процессы, результаты или Statistics.
Авторизация оператора
Чувствительные изменения control plane используют отдельный verifier оператора, предоставленный другой учётной записью ОС. Точная минимальная длина секрета — пять символов; рекомендуются более длинные случайно сгенерированные значения.
ThreadCells хранит salted scrypt verifier, краткоживущие дайджесты сессии/grant, область действия, издателя, срок действия, потребление и аудиторские записи, но не открытый текст. Verifier и каждый родительский каталог не должны быть заменяемыми учётной записью службы. Пятиминутная браузерная сессия использует cookie HttpOnly, SameSite=Strict.
Эта граница защищает настроенные изменения. Она не превращает весь Web UI в многопользовательское аутентифицированное приложение.
Исключительный запуск owner
Запуски owner-executor/XHigh требуют одноразовой capability, привязанной к точной неизменяемой ревизии профиля, ревизии конфигурации провайдера, проекту/worktree, запросу сессии, топологии, издателю и глубине делегирования. Она потребляется атомарно вместе с метаданными терминала.
Потоки Web Create Session и Add Agent для встроенного critical_sol_xhigh_owner требуют того же исключительного предупреждения, явного подтверждения, разблокировки оператора и ограниченной одноразовой capability. Add Agent привязывает grant к существующей сессии и разрешённому каноническому worktree, а не принимает путь, введённый пользователем. Локальный путь critical_sol_xhigh_owner --owner-xhigh требует явного интерактивного подтверждения и запуска только через loopback. Ни один из этих путей не наделяет полномочиями дочерние процессы или несвязанные Web Settings. Текст prompt не может выпускать или делегировать полномочия owner.
Провайдеры и импортированные артефакты
Адаптеры провайдеров — это исполняемые доверенные пакеты, требующие проверки оператором. JSON провайдера/профиля — недоверенный декларативный ввод: отклоняются исполняемые пути, команды, флаги оболочки, окружения, необработанные секреты, произвольные MCP-команды и невыданные полномочия с wildcard.
Аутентификация провайдера остаётся в собственном поддерживаемом механизме провайдера. Экспорт реестра не включает значения секретов и одноразовые grants.
Учётные данные управления для каждого терминала ограничены терминальным процессом/процессом провайдера. ThreadCells запускает долгоживущий сервер tmux через bootstrap без учётных данных, поэтому его постоянная командная строка процесса не хранит учётные данные терминала. Эти учётные данные остаются чувствительными для процессов, выполняющихся от имени той же доверенной runtime-учётной записи.
Уведомления Telegram
Доставка в Telegram необязательна, по умолчанию отключена, глобальна для установки и независима от конфигурации проекта. Его bot token — это write-only настройка Web, хранящаяся вне SQLite в закрытом корне состояния ThreadCells как обычный файл, принадлежащий runtime, с режимом 0600. API чтения показывают только безопасное состояние конфигурации. Авторизация оператора защищает обновления и явные действия подключения/тестирования.
Сообщения жизненного цикла используют фиксированные безопасные сводки и не включают prompts, вывод терминала, тела исключений, пути или учётные данные. Внешняя доставка не блокирует выполнение рабочего процесса при сбое и надёжно дедуплицируется; включение уведомлений не воспроизводит события, замеченные, пока они были отключены.
Чувствительность данных
Считайте SQLite-базу данных, журналы терминалов, prompts, результаты, вложения, управляемые worktree, резервные копии, verifier оператора и историю нативного rollout провайдера чувствительными. Они могут содержать проприетарный код или пользовательское содержимое, даже если сам ThreadCells избегает журналирования учётных данных.
Не помещайте открытые секреты оператора/провайдера/Telegram в репозитории, дампы окружения, пакеты поддержки, телеметрию, хранилище браузера, API-ответы или снимки экрана.
Разрушительные операции
Обслуживание сначала формирует план и закрыто отказывает. Неизвестные, нечитаемые, открытые, активные, упомянутые, с изменившейся идентичностью или неполными метаданными ресурсы остаются защищёнными. Резервные копии никогда не удаляются автоматически.
Full Cleanup — более агрессивный режим хранения внутри тех же полномочий обслуживания, а не отдельная подсистема удаления. Он повторно использует серверную сессию оператора и подтверждение необратимого действия, не принимает выбранный вызывающей стороной путь файловой системы, сериализуется с допуском запуска, выполнения провайдером и тяжёлых операций, а также повторно проверяет полный простой жизненного цикла непосредственно перед изменением. Активный релиз, состояние SQLite, полномочия продолжения агентов в состоянии «Готов», credentials/state провайдера, текущие полномочия над исходниками/инструментами и неоднозначные ресурсы остаются защищёнными. Доказанно неактивные локальные релизы отката намеренно удаляются только этой явно подтверждённой операцией.
Удаление по путям ограничено root helper, активируемым через сокет. Он повторно аутентифицирует те же полномочия оператора, принимает только точный канонический plan ID, требует, чтобы процесс control plane удерживал все admission fences, и перед descriptor-relative deletion блокирует идентичности каталогов в quarantine от подмены runtime-пользователем. У непривилегированного API нет операции с произвольным путём или более слабого fallback-варианта.
Развёртывание сохраняет runtime для rollback и резервную копию базы данных. Публикация, публичное сетевое раскрытие и разрушительные изменения истории остаются отдельными решениями owner.
Обязанности оператора
- Обновляйте ОС, ThreadCells, CLI провайдеров, reverse proxy и слой аутентификации.
- Проверяйте prompts, профили, адаптеры и репозитории до выдачи доступа на запись.
- Сохраняйте минимальные привилегии runtime-пользователя и окружения службы.
- Создавайте резервные копии устойчивого состояния и проверяйте их восстановление.
- Изучайте diff/результаты перед merge, развёртыванием или публикацией.
- Сохраняйте управление доступом через loopback или аутентифицированный proxy.
- Регулярно меняйте учётные данные провайдера и заменяйте verifier оператора через безопасный административный процесс.
Сообщение о проблеме безопасности
Следуйте SECURITY.md. Не включайте действующие учётные данные, закрытое состояние или публичные детали эксплойта сверх необходимого сопровождающим для безопасного воспроизведения.
