Безпека й віддалений доступ
M.A.V.E.N - local-first панель керування. Вона слухає на 127.0.0.1:3000, запускає AI-агентів, може виконувати команди, читає й пише файли, витрачає гроші в платних провайдерів. Ця сторінка описує захист, PIN і віддалений доступ.
Коротко
Section titled “Коротко”Користуєтеся M.A.V.E.N лише локально? Нічого не треба робити. На
127.0.0.1/localhostPIN не потрібен - ні до, ні після оновлень. Читайте далі, якщо хочете доступ з іншої машини.
| Звідки відкриваєте M.A.V.E.N | Що відбувається |
|---|---|
На тій самій машині - http://127.0.0.1:3000 або http://localhost:3000 |
Без PIN. |
| Звідки завгодно ще - ім’я Tailscale, адреса в LAN, hostname зворотного проксі | Потрібен PIN. Перший правильний PIN з хоста автоматично додає його до Allowed hosts. |
M.A.V.E.N генерує PIN при першому запуску. Він з’являється в консолі один раз і зберігається в ~/.maven/access-pin (тільки для вашого користувача). Переглянути можна будь-коли: Settings → Security → Reveal.
Встановлення на нову машину
Section titled “Встановлення на нову машину”У встановленні нічого не змінюється. Після першого npm start (або сервісу автозапуску)
ви один раз побачите в консолі / journalctl --user -u maven:
MAVEN access PIN for remote hosts (Tailscale / LAN): K7Q4-M2X9Kept in /home/you/.maven/access-pin. Loopback needs no PIN.Відкрийте http://127.0.0.1:3000 і працюйте. Тут PIN у вас не спитають.
Доступ до M.A.V.E.N з іншого пристрою (телефон, ноутбук)
Section titled “Доступ до M.A.V.E.N з іншого пристрою (телефон, ноутбук)”- (Необов’язково) Дозвольте хост. Settings → Security → Allowed hosts - додайте ім’я хоста, наприклад
rog.tail1234.ts.net. Можна пропустити: невідомий хост отримує екран розблокування, правильний PIN його додає автоматично. Список потрібен для перегляду й видалення хостів. - Відкрийте порт приватно. Tailscale:
tailscale serve --bg 3000. Або SSH-тунель:ssh -L 3000:127.0.0.1:3000 you@machine(тунель приходить якlocalhost, тому не потребує списку чи PIN). - Відкрийте там -
http://rog.tail1234.ts.net:3000. Введіть PIN з Settings → Security → Reveal (абоcat ~/.maven/access-pin). Сесія живе 30 днів.
Ніколи не прокидайте порт 3000 в публічний інтернет - ні з PIN, ні без. Лише Tailscale або тунель. Дістаньтеся до M.A.V.E.N з телефона - покрокова інструкція зі скриншотами.
Settings → Security
Section titled “Settings → Security”- Generated PIN for remote hosts (типово) - loopback відкритий, будь-який інший хост питає згенерований PIN. Reveal, Copy, Regenerate (перегенерація розлогінює всі віддалені сесії).
- My own PIN, everywhere - ваш власний PIN (8+ символів), потрібен і на цій машині.
Те саме, що
MAVEN_ACCESS_PIN=<pin>у.env.local. Зміна розлогінює всі сесії. - No PIN anywhere -
MAVEN_ACCESS_PIN=off. Лишаються тільки перевірки host/origin. Не радимо, якщо дозволено будь-який хост окрім loopback. - Allowed hosts - список
MAVEN_ALLOWED_ORIGINS:host[:port]або повний origin, через кому. - Daily spend ceiling -
MAVEN_DAILY_SPEND_USD(типово 25). Усі платні рушії (зображення, відео, голос, 3D, апскейли) вище стелі відмовляють до місцевої півночі з HTTP 402.0= без стелі. Картка показує, скільки витрачено сьогодні.
Рядок статусу вгорі картки каже, чи закрита PIN-ом ця сторінка - відповідь залежить від того, як ви її відкрили. Саму картку описано на сторінці Settings → Security.
Чому так
Section titled “Чому так”- На loopback PIN не потрібен - він там нічого не захищає. Будь-який процес на машині працює від вашого імені й може прочитати PIN. Виклики з браузера (шкідлива сторінка, DNS-rebinding) зупиняються тим, що M.A.V.E.N відмовляє невідомим Host й cross-site запитам. Локальні інтеграції (боти Hermes, OpenMontage, оновлювач, smoke-тести) й далі працюють: вони звертаються з машини без PIN.
- Віддаленим хостам PIN потрібен завжди - там неавтентифікований shell це проблема. Агенти M.A.V.E.N - це shell.
- Дозволені хости запобігають rebinding-атакам, які намагаються видати себе за M.A.V.E.N. Невідомий хост бачить лише екран розблокування (і
401на API) без PIN. Вимкнений гейт не захищає, тому невідомі хости отримують421 Misdirected Request.
Що ще працює само (нічого робити не треба)
Section titled “Що ще працює само (нічого робити не треба)”- Сесії підписані per-install секретом (
~/.maven/session-secret), спливають на сервері та відкликаються при зміні PIN. Форма розблокування - з rate-limit. - HTML, SVG і застосунки, які генерують AI-моделі, віддаються у браузерній пісочниці: вони рендеряться і працюють, але не можуть викликати API M.A.V.E.N і читати його cookie.
- Агенти, яких запускає M.A.V.E.N, отримують лише потрібні їм змінні оточення, а не всі
API-ключі з
.env.local. Режим дозволів, з яким працює агент, вирішує M.A.V.E.N за застосунком, а не запит. - Секрети зберігаються
0600; панель Settings показує лише замасковані значення; URL провайдерів не можна змінювати з UI (перенаправлення витягло б ключ). - Платні маршрути - під rate-limit і проходять через стелю витрат; дорогі запуски просять серверне підтвердження.
- Self-update застосовує рівно той коміт, який оголосив, ставить залежності через
npm ci --ignore-scriptsі не регенерує lockfile без явної команди. - Серверні fetch за вставленими вами URL (R-Forge, N-Forge, D-Forge) відмовляють приватним
і loopback-адресам. Задайте
MAVEN_ALLOW_PRIVATE_FETCH=1, якщо ви навмисно інгестите сайт у LAN. - Навички спільноти проходять обов’язковий шлюз карантин → статичне сканування → пісочниця перед встановленням. Дивіться Skills.
Довідник змінних
Section titled “Довідник змінних”# .env.example - Remote-access gateMAVEN_ACCESS_PIN= # unset = generated PIN for remote hosts; <pin> = yours, everywhere; off = no gateMAVEN_ALLOWED_ORIGINS= # host[:port] or origin, comma-separated - everything MAVEN answers for besides loopbackMAVEN_DAILY_SPEND_USD=25 # daily ceiling across paid engines; 0 = noneMAVEN_ALLOW_PRIVATE_FETCH= # 1 = let R-Forge/N-Forge fetch LAN / loopback URLsMAVEN_CHAT_PERMISSION_MODE= # bypass = let the /chat agents run without permission prompts (autonomous apps are unaffected)MAVEN_SESSION_SECRET= # optional override for ~/.maven/session-secret (32+ chars)Файли: ~/.maven/access-pin (згенерований PIN), ~/.maven/session-secret (ключ
підпису сесій). Обидва 0600. Видаліть access-pin і перезапустіть - отримаєте новий; або
Regenerate.
Якщо щось не так
Section titled “Якщо щось не так”421 Misdirected Request- гейт вимкнено (MAVEN_ACCESS_PIN=off), а набраного хоста немає в Allowed hosts. Додайте його або увімкніть гейт назад, щоб PIN міг вас впустити.403 refused: this request came from …- сторінка з іншого сайту (або іншого локального порту) спробувала викликати MAVEN. Можна лише сторінкам самого MAVEN.- Замкнуло на самій машині - ви задали власний PIN і забули його: відредагуйте
.env.local, приберітьMAVEN_ACCESS_PIN, перезапустіть. Згенерований PIN тоді діє лише для віддалених хостів. - «Too many tries» - зачекайте вказані секунди; лімітер зростає експоненційно і скидається при успіху.
- 402 «daily spend cap reached» - підніміть стелю в Settings → Security або дочекайтеся півночі.
- Віддалений пристрій було розблоковано, а тепер ні - PIN змінили або перегенерували; введіть новий.
- Сторінки з віддаленого хоста завантажуються порожніми у dev-режимі - додайте хост до
allowedDevOriginsуnext.config.ts(дивіться Конфігурацію).