Безпека
OpenChamber дає доступ до вашої машини та вашого коду, тож заблокуйте його, перш ніж до нього зможе дістатися хтось, окрім вас. Ця сторінка охоплює пароль UI, ключі доступу (passkeys) і те, що треба знати перед тим, як відкривати OpenChamber у мережі.
Установлення пароля UI
Запустіть OpenChamber із паролем, і браузерний UI запитуватиме його:
openchamber --ui-password be-creative-hereВи також можете задати його через змінну середовища OPENCHAMBER_UI_PASSWORD замість того, щоб писати його в командному рядку. Після входу OpenChamber на деякий час запам’ятовує пристрій, тож вас не питатимуть щоразу.
Завжди задавайте пароль, якщо інстанс доступний комусь іще — особливо через тунель чи публічний інтернет.
Ключі доступу (passkeys)
Щойно задано пароль, ви можете додати ключі доступу (Face ID, Touch ID, апаратний ключ безпеки) для швидшого входу. Додайте їх у Settings → OpenChamber → Passkeys.
Ключі доступу прив’язані до поточного пароля. Якщо ви зміните чи приберете пароль, збережені ключі доступу очищаються, і вам доведеться додати їх знову.
Токени пристроїв
Пристрої, зв’язані через Підключення пристрою, автентифікуються власними токенами для кожного пристрою, а не паролем UI. Посилання для зв’язування одноразові й спливають, якщо не використані; кожен зв’язаний пристрій показано в Settings → Remote Instances → Підключення до цього сервера, де будь-який можна відкликати в будь-який момент. Підключення поза домом ідуть через Private Relay, який наскрізно зашифрований і не може прочитати ваш трафік.
Перш ніж відкривати доступ
- За замовчуванням OpenChamber слухає лише вашу власну машину (
127.0.0.1). Щоб слухати ширше, потрібна свідома зміна, і спершу вам слід задати пароль. - Для власних пристроїв надавайте перевагу зв’язуванню з Private Relay — назовні взагалі нічого не відкривається.
- Якщо потрібен публічний URL, надавайте перевагу тунелю чи приватній мережі (як-от VPN) перед відкриттям порту в інтернет.
- Якщо ви ставите OpenChamber за власним HTTPS-сервером, див. Зворотний проксі.
Корпоративний режим
Якщо ваша команда може надсилати вміст розмов лише тим провайдерам моделей, яких ви налаштували в OpenCode, увімкніть корпоративний режим. Для цього є два способи, і будь-якого з них достатньо.
Файл політики на машині
Цей спосіб для ноутбуків, якими ви керуєте. Покладіть файл policy.json у теку, куди може писати лише адміністратор:
| Система | Шлях |
|---|---|
| macOS | /Library/Application Support/OpenChamber/policy.json |
| Windows | C:\ProgramData\OpenChamber\policy.json |
| Linux | /etc/openchamber/policy.json |
Шлях не залежить від того, як встановлено OpenChamber. Десктопний застосунок, вебсервер, запущений із npm, CLI і розширення VS Code читають той самий файл. Розгорнути його можна через систему керування пристроями (Jamf, Intune тощо). Для сервера в Docker змонтуйте файл за шляхом для Linux.
{ "enterpriseMode": true, "organization": "Acme", "relayUrl": "wss://relay.acme.com/ws", "allowNetworkAccess": false, "allowedExtensions": ["https://github.com/acme/"], "jev": { "url": "https://llm.acme.com/v1/systemone", "model": "acme-classifier", "apiKey": "..." }}Обов’язкове лише enterpriseMode. organization показується в Налаштуваннях як “Керує Acme”, щоб люди знали, хто ухвалив це рішення. relayUrl і jev закріплюють ваш власний relay і ваш власний endpoint Jev, allowNetworkAccess дає іншим пристроям доступ до OpenChamber через мережу, а allowedExtensions перелічує репозиторії розширень, яким ви довіряєте. Про всі них нижче.
- Ніщо, що задає користувач, ні в Налаштуваннях, ні в середовищі, не вимикає того, що вмикає файл.
- Коли файл вмикає корпоративний режим, вирішує лише файл. Змінні середовища для relay, Jev і мережевого доступу, описані нижче, ігноруються, бо користувач може задати їх сам.
- Якщо файл є, але його не вдається прочитати або це не коректний JSON, корпоративний режим лишається увімкненим і нічого не закріплюється. Налаштування повідомляють, що політику не вдалося прочитати. Зламаний файл ніколи тихо не знімає захист.
- Зміни застосовуються без перезапуску.
- OpenChamber працює від імені користувача, тож користувач може прочитати файл. Пам’ятайте про це, перш ніж класти туди API-ключ.
Змінна середовища
На сервері чи в контейнері, де середовище контролюєте ви, достатньо цього:
OPENCHAMBER_ENTERPRISE_MODE=1На ноутбуці це слабший замок: десктопний застосунок читає змінну з профілю login shell (наприклад, ~/.zshrc), а його користувач може редагувати. Там використовуйте файл політики.
Зі змінною relay, Jev, мережевий доступ і дозволені розширення теж беруться з власних змінних: OPENCHAMBER_RELAY_URL, OPENCHAMBER_JEV_URL, OPENCHAMBER_ALLOW_NETWORK_ACCESS=1, OPENCHAMBER_ALLOWED_EXTENSIONS (URL репозиторіїв через кому) і OPENCHAMBER_ALLOW_LOCAL_EXTENSIONS=1. У Docker вам знадобиться та, що для мережевого доступу, бо сервер має слухати за межами контейнера.
Закріпити OpenCode CLI
Якщо на ваших машинах OpenCode уже встановлено і OpenChamber має працювати саме з ним, впишіть його шлях у файл політики. Це працює і з режимом enterprise, і без нього.
{ "opencodeBinary": "/usr/local/bin/opencode"}- OpenChamber запускає OpenCode тільки з цього шляху. Шлях із Налаштувань,
OPENCODE_BINARYі копію, що йде з десктопним застосунком, він ігнорує; та копія лишається на диску без діла. - Якщо за цим шляхом немає нічого запускного, OpenChamber не перемикається на іншу копію. Він зупиняється з помилкою, де названо шлях.
- Налаштування показують шлях лише для читання, з приміткою, що його задав адміністратор.
- OpenChamber не встановлює й не оновлює закріплений OpenCode і не повідомляє про нові версії. Оновлення приходять з вашим розгортанням.
- CLI має бути OpenCode 2.x, не старішим за версію, яку просить OpenChamber. Зі старішою OpenChamber зупиниться на екрані «оновіть OpenCode».
- Можна вказати й теку, якщо в ній лежить
opencode(opencode.exeна Windows). Змінної середовища для цього немає, бо користувач може задати її сам.
Сховати вбудовані каталоги скілів
OpenChamber постачається з кількома публічними каталогами скілів (Anthropic, OpenAI, Cursor, Matt Pocock). Якщо у вашої організації є власний, додайте його як власний каталог і сховайте вбудовані у файлі політики. Це працює як з корпоративним режимом, так і без нього.
{ "hideBuiltinSkillCatalogs": true}Тоді налаштування пропонують лише каталоги, які люди додали самі, а OpenChamber не завантажить вбудований навіть на прямий запит. Змінної середовища для цього немає, бо користувач може задати її сам.
Приклади
Щоб покласти файл політики на Mac, виконайте в Terminal від імені адміністратора:
sudo mkdir -p "/Library/Application Support/OpenChamber"sudo tee "/Library/Application Support/OpenChamber/policy.json" > /dev/null <<'JSON'{ "enterpriseMode": true, "organization": "Acme"}JSONУ Linux так само, лише папка /etc/openchamber.
У Windows запустіть PowerShell від імені адміністратора. Останній рядок залишає право запису в папку лише адміністраторам і системі:
New-Item -ItemType Directory -Force "C:\ProgramData\OpenChamber" | Out-Null@'{ "enterpriseMode": true, "organization": "Acme"}'@ | Set-Content -Encoding UTF8 "C:\ProgramData\OpenChamber\policy.json"icacls "C:\ProgramData\OpenChamber" /inheritance:r /grant:r "Administrators:(OI)(CI)F" "SYSTEM:(OI)(CI)F" "Users:(OI)(CI)RX"Для сервера в Docker додайте це в environment у docker-compose.yml. Контейнер слухає за своїми межами, тож йому потрібен дозволений мережевий доступ:
environment: OPENCHAMBER_UI_PASSWORD: ${OPENCHAMBER_UI_PASSWORD} OPENCHAMBER_ENTERPRISE_MODE: "1" OPENCHAMBER_ALLOW_NETWORK_ACCESS: "1" # Optional: OPENCHAMBER_RELAY_URL: wss://relay.acme.com/ws OPENCHAMBER_JEV_URL: https://llm.acme.com/v1/systemone OPENCHAMBER_JEV_MODEL: acme-classifier OPENCHAMBER_JEV_API_KEY: ${ACME_JEV_KEY} OPENCHAMBER_ALLOWED_EXTENSIONS: https://github.com/acme/Щоб перевірити, що все спрацювало, відкрийте Налаштування → Провайдери: угорі з’явиться повідомлення про корпоративний режим із назвою вашої організації.
Що змінюється
- Провайдери моделей беруться лише з вашої конфігурації OpenCode. Підключити провайдера, увійти в нього, додати ключ чи створити власного провайдера в OpenChamber не можна; видаляти чи перемикати вже наявні облікові записи можна й далі. Це закриває лише шлях через застосунок; сам замок — це політика OpenCode, описана нижче. Увійти в MCP-сервер із вашої конфігурації OpenCode можна й далі, бо це з’єднує з тим сервером, а не з провайдером моделей.
- Постачальники класифікації (Jev) лишаються вимкненими, зокрема й власний endpoint, який хтось вводить у Налаштуваннях. Запобіжник і Auto не пропонуються, а сесії в роботі не отримують підказки «схоже, готово». Щоб користуватися Jev через власну інфраструктуру, закріпіть endpoint через
jevу файлі політики або черезOPENCHAMBER_JEV_URL(плюсOPENCHAMBER_JEV_MODELі, якщо потрібно,OPENCHAMBER_JEV_API_KEY). Він стає типовим, його все одно можна вимкнути, а нічого іншого вибрати не можна. - Зачитування вголос через OpenAI вимкнене. Власний сервер синтезу чи розпізнавання мовлення має працювати на тій самій машині. Локальні голоси й локальні моделі диктування працюють і далі.
- Push-сповіщення на телефони й у браузери містять лише загальний заголовок на кшталт “Agent response is ready”, без тексту повідомлення чи назви сесії. Сповіщення на десктопі лишаються на вашій машині й містять повний текст.
- Перевірка оновлень працює й далі, тож виправлення безпеки до вас доходять, але вона ніколи не звітує про використання, навіть анонімним ідентифікатором встановлення.
- Зовнішні тунелі (Cloudflare, ngrok) вимкнені. Сервіс тунелю розшифровує трафік на своєму боці й бачить кожен запит відкритим текстом.
- Діаграми
.drawioвідкриваються як XML-текст. Редактор діаграм — це сторінка diagrams.net, і відкрита там діаграма передається цій сторінці. - Шрифти інтерфейсу й коду, що завантажуються з публічного CDN, замінюються системними. Ваш вибір зберігається на випадок, коли режим вимкнуть.
- Private Relay працює лише через ваш власний relay. Запустіть self-hosted relay і вкажіть його OpenChamber через
relayUrlу файлі політики або черезOPENCHAMBER_RELAY_URL=wss://relay.example.com/ws. Спільний relay теж не може прочитати ваш трафік, бо він наскрізно зашифрований, але власний тримає метадані з’єднань і шлях до цієї машини всередині вашої мережі. Без власного relay зв’язати пристрої взагалі не вийде. - OpenChamber слухає лише на машині, де він запущений. Десктопне налаштування, яке дає іншим пристроям у локальній мережі відкривати застосунок, вимкнене, а сервер відмовляється запускатися на мережевій адресі, хоч через CLI (
--host,--lan), хоч через середовище. Якщо файл політики з’являється, поки застосунок працює, з’єднання з інших машин обриваються до наступного запуску. Дозвольте мережевий доступ через"allowNetworkAccess": trueу файлі політики або черезOPENCHAMBER_ALLOW_NETWORK_ACCESS=1там, де корпоративний режим вмикає середовище. Пам’ятайте, що з’єднання йде звичайним HTTP, тож у спільній мережі його може прочитати будь-хто; сервер, до якого підключаються інші, ставте за власний HTTPS. - Розширення, які можуть надсилати дані за межі машини (звертаються до зовнішнього API, завантажують щось із зовнішніх адрес або запускають фоновий сервіс), встановлюються лише з Git-репозиторію, указаного в
allowedExtensions. Розширення, які нічого з цього не роблять, встановлюються як завжди. Встановлене розширення з будь-якого іншого місця лишається вимкненим, і Налаштування пояснюють чому. У списку зазначають URL репозиторіїв, бо назву розширення обирає собі саме; запис, що закінчується на/, як-отhttps://github.com/acme/, дозволяє всі репозиторії під ним. На машинах тих, хто розробляє розширення,"allowLocalExtensions": trueтакож дозволяє встановлення з локальної папки. ZIP лишається закритим у будь-якому разі. - Змінні середовища з Налаштування → Загальні і з
opencode service set envне доходять до OpenCode, бо в одній із них може бути ключ провайдера. Git, термінал і дії проєкту й далі їх отримують. - У розширенні VS Code підключення провайдерів вимкнене, а перевірка оновлень не звітує про використання. Jev, relay, тунелів, push-сповіщень і хмарного мовлення в ньому й так немає.
Задачі малої моделі (назви сесій, рекапи, повідомлення комітів, розбір змін) не потребують жодного спеціального режиму. Вони завжди працюють на малій моделі, яку ви вибрали в Налаштуваннях, або на малій моделі провайдера, з яким ви працюєте, або на моделі за замовчуванням із вашої конфігурації OpenCode. Вони ніколи не перемикаються на якогось іншого провайдера, який у вас просто підключений.
Яких провайдерів моделей узагалі можна використовувати, вирішує OpenCode, а не OpenChamber. Зафіксуйте це політиками OpenCode: забороніть усіх провайдерів, а тоді дозвольте схвалених.
{ "experimental": { "policies": [ { "action": "provider.use", "resource": "*", "effect": "deny" }, { "action": "provider.use", "resource": "anthropic", "effect": "allow" } ] }}Заборонений провайдер зникає, навіть якщо хтось додасть для нього ключ. Покладіть політики в глобальний ~/.config/opencode/opencode.jsonc, де проєкт не може їх зняти, або роздавайте їх із робочого простору OpenCode Console, за яким останнє слово. Корпоративний режим поверх цього охоплює те, що надсилає сам OpenChamber.
Вебпошук і завантаження сторінок агентом теж ідуть через OpenCode: до пошукового сервісу й до самих сторінок. Якщо вони не мають виходити за межі вашої мережі, забороніть їх такою самою політикою:
{ "action": "permission", "resource": "websearch:*", "effect": "deny" },{ "action": "permission", "resource": "webfetch:*", "effect": "deny" }Пов’язане
- Підключення пристрою — одноразове зв’язування й токени для кожного пристрою
- Private Relay — наскрізно зашифрований доступ звідусіль
- Тунелі — відкрийте публічний URL, коли він потрібен
- Зворотний проксі — запускайте OpenChamber за власним сервером