MilaAgentДокументацияGitHub

Главная / Документация

Сейф Милы — ключи и пароли мимо чата

Обновлено: 05.11.2026Источник: docs/SAFE.ru.mdПравить на GitHub

На этой странице

English — SAFE.md.

Что это. Для дела нужен пароль, ключ API, логин сайта или банковская карта? Мила не просит их ни в чате, ни в почте — она просит одноразовую ссылку. Человек открывает её, вводит данные на странице, и они ложатся прямо в закрытый файл в доме Милы. Ни через чат, ни через её память они не проходят, и тот, кто выпустил ссылку, их тоже не видит.

Как выпустить ссылку

  • tools/seif/vault-link.sh <дом> <ПОЛЕ>[,<ПОЛЕ>…] [--name <файл>] [--to <telegram id>] [--ttl 30] [--lang ru|en|uz|zh]
  • Поля — заглавными: OPENROUTER_API_KEY, SITE_LOGIN, SITE_PASSWORD, CARD_NUMBER, CARD_EXPIRY.
  • Одна ссылка — один раз, живёт 30 минут. Открытие (и превью Telegram) ссылку не тратит — тратит только «Сохранить».
  • Язык страницы — язык хозяина, можно задать --lang, переключить можно прямо на странице.

Куда ложится ключ

  • work/secrets/<файл>.env в доме Милы: папка 700, файл 600, хозяин — владелец дома. Прежние значения в файле сохраняются.
  • В журнале службы сейфа: кто, когда, какой дом, какой файл, какие поля — без значений.
  • Миле приходит записка: «в сейфе появились такие поля».

Как Мила читает

  • Только в момент дела и своим инструментом. python3 skills/safe-link/scripts/safe_read.py <файл> --check ПОЛЕ — есть ли поле, без значения. В коде read_safe("<файл>")["ПОЛЕ"] — значение уходит прямо в запрос сервиса.
  • В чате — только маска ****1234.
  • Файл с правами шире 600 — отказ: кто-то открыл сейф.

Когда дело закончено

  • seif.py forget <дом> <файл> <ПОЛЕ>[,<ПОЛЕ>…] стирает поля. В журнале — что и когда стёрто, без значений.

Чего нельзя

  • Просить секрет в чате или в почте. Если человек всё равно прислал — Мила его не повторяет и просит сменить.
  • Печатать, писать в журнал, пересылать значения; класть их в память, заметки, отчёты.
  • Держать карту или паспорт дольше, чем нужно для дела.

Служба сейфа

  • seif.py serve --port 7693 слушает только 127.0.0.1. Наружу её выводят через веб-сервер на /v/<токен>/ (tools/seif/Caddyfile.snippet, tools/seif/seif.service).
  • Настройки — только окружением: SEIF_BASE (адрес ссылок), SEIF_HOMES (папка домов Мил), SEIF_DIR, SEIF_UID.

Свой сейф — Мила на вашем компьютере

seif.py own <ПОЛЕ>[,<ПОЛЕ>…] --name <файл> — без службы и без администратора: Мила открывает страницу сейфа на 127.0.0.1 на одну ссылку, закрывает её, как только вы нажали «Сохранить» (или через 10 минут), ключ ложится в ~/work/secrets/<файл>.env. Ссылка открывается только на этом же компьютере — в сеть ничего не открывается.

Известное ограничение

У Милы в контейнере или на сервере без страницы сейфа положить ключ через страницу пока нельзя — она так и говорит. Что делать сейчас: ключ в чат не присылайте. В контейнере впишите его в переменную окружения при запуске — docker run -e OPENROUTER_API_KEY=… или поле переменных в панели хостинга. На ноутбуке — свой сейф (выше) или файл ~/work/secrets/openrouter.env со строкой OPENROUTER_API_KEY=… (без кавычек и пробелов) и правами 600 (chmod 600); так же — GROQ_API_KEY в groq.env. Мила видит такой ключ сразу (переменная важнее файла) и значение никому не показывает.