Перейти к содержанию

Безопасность и управление секретами

SILO спроектирован с философией "Безопасность прежде всего", гарантируя, что конфиденциальные данные, такие как API-ключи, никогда не попадут в логи, историю окружения или репозитории кода.

Многоуровневое управление секретами

Когда скилл вызывает require_secret("KEY_NAME"), фреймворк ищет секрет в следующем порядке:

  1. Переменные окружения: В первую очередь для CI/CD или продвинутых пользователей.
  2. Keychain ОС: Основное защищенное локальное хранилище. Ключи шифруются операционной системой.
  3. Интерактивная авторизация в браузере: Если ключ не найден и среда не является "headless", SILO открывает окно браузера с защищенной формой для ввода секрета.

Сохранение в Keychain

Как только секрет введен через браузер, SILO автоматически сохраняет его в Keychain вашей системы (используя библиотеку keyring). Это означает:

  • Вы вводите API-ключ только один раз на одной машине.
  • Секреты хранятся отдельно от файлов проекта.
  • Секреты привязаны к конкретному namespace скилла.

Изоляция в песочнице (Sandbox)

Каждый инструмент скилла выполняется в изолированной среде, управляемой uv run.

  • Отсутствие общего состояния: Скиллы не могут случайно вмешаться в память или переменные друг друга.
  • Фиксация зависимостей: Скиллы используют инлайновые метаданные (PEP 723), чтобы всегда запускаться с правильными версиями библиотек.

Отслеживание и очистка секретов

SILO ведет файл meta для каждого скилла, чтобы отслеживать, какие секретные ключи он использовал. Когда вы запускаете silo remove <namespace>, фреймворк использует эти данные, чтобы полностью стереть связанные секреты из Keychain системы.

Режим Headless

Для продакшн-сред или при вызове другим ИИ-агентом вы можете включить режим Headless, установив SILO_HEADLESS=1. В этом режиме:

  • Интерактивные запросы в браузере отключены.
  • Если секрет отсутствует, скилл немедленно возвращает структурированную ошибку JSON вместо ожидания ввода.

Подтверждения (Human-in-the-Loop)

Некоторые действия (удаление базы данных, коммит кода, отправка письма) не должны выполняться ИИ полностью автономно.

SILO предоставляет флаг require_approval для инструментов:

@skill.tool(require_approval=True)
def delete_database(db_name: str):
    ...
Это заставляет раннер запрашивать подтверждение человека через терминал или браузер перед выполнением инструмента.