Онбординг секрет-фреймворка
Translation note: the canonical version is the English
onboarding.md(per the OSS-docs-in-English rule). This Russian copy is kept for the team; if it diverges, the English version is authoritative.
Первое включение secret framework на новой машине или в новом репозитории. Документ ведёт от «ничего не настроено» до «devboy doctor --secrets зелёный, манифест валидируется в CI».
Когда использовать: после
npm install -g @devboy-tools/cliи базовогоdevboy onboard(см. Quick start). Если в проекте уже есть.devboy/secrets.tomlи вы хотите интерактивный wizard — запускайтеsetup-secretsчерез AI-агента, он автоматизирует те же шаги.
Чек-лист готовности
-
devboy --versionотвечает (CLI установлен). - OS keychain доступен (macOS Keychain / Windows Credential Manager / Linux Secret Service).
- Есть права на создание
~/.devboy/secrets/и<project>/.devboy/. - Понимаете, какие секреты нужны проекту (можно начать с одного — манифест расширяется по ходу).
Шаг 1. Установка и проверка CLI
Если devboy уже на PATH — пропустите шаг.
Альтернатива через cargo:
После установки убедитесь, что подсистема секретов доступна:
Должны увидеть подкоманды list, describe, validate, migrate, agent, ui, rotate. Если их нет — обновите CLI до версии 0.26 или выше (минимальная версия с secret framework).
Шаг 2. Подключение первого источника
По умолчанию CLI работает с OS keychain без настройки. Этого достаточно для одного разработчика на одной машине. Когда команда подключает 1Password, Vault или env-store — расширяете конфиг роутера. Начнём с keychain.
Создайте файл ~/.devboy/secrets/sources.toml (если ещё нет):
Проверьте, что роутер видит источник:
Должна быть запись {"name": "default-keychain", "type": "keychain", "available": true}.
Если планируете 1Password / Vault: добавьте отдельный
[[source]]блок с типом1passwordилиvault, и пропишите[[route]]с нужнымprefix. Подробности — docs/guide/secrets/local-vault.md.
Шаг 3. Манифест проекта
Манифест объявляет, какие секреты проект ожидает увидеть. Без манифеста framework не знает, на что смотреть, и doctor не сможет жаловаться на их отсутствие.
Создайте <project>/.devboy/secrets.toml:
Структура (см. ADR-020):
required— список путей в формате ADR-020 (<scope>/<provider>/<purpose>), без значений которых проект не работает.optional— пути, которые улучшают опыт (рассылки, фича-флаги), но не блокируют сборку.[overrides."<path>"]— точечные правки метаданных для пути из глобального индекса (~/.devboy/secrets/index.toml).[secret."<path>"]— полная декларация для пути, который существует только в этом проекте (sandbox-сценарии, локальные плейграунды).
Шаблоны вместо реальных имён: в примерах используются плейсхолдеры
<provider>/<purpose>. В реальном манифесте пишите конкретные сегменты (team/jira/api-key), но никогда не публикуйте на GitHub имена клиентов, внутренние коды команд или ID серверов — это утечка инфраструктуры. Для таких полей используйтеteam/-scope с обобщённым provider-именем.
Шаг 4. Валидация манифеста
Каждый раз после правки манифеста — формат-валидация:
Что проверяется (см. ADR-021 §6):
- Каждый путь — валидный ADR-020 (3+ сегмента, kebab-case).
required∩optionalпусто.- Поля
rotate_every_days,expires_at,pattern_id— корректного типа. - Если включён liveness-flag (
--liveness), framework проверит, что для каждогоrequired-пути в роутере зарегистрирован источник, способный выдать значение.
Включите команду в pre-commit hook или CI-pipeline:
--strict превращает предупреждения о non-conformant путях (P10.1) в ошибки.
Шаг 5. Обзор того, что фреймворк видит
Вывод — таблица с колонками path, status, expires_at, provider. Только метаданные, без значений.
Подробности по конкретному пути:
Покажет description, retrieval_url, rotation_method, last_rotated_at, pattern_id и все overrides, применённые поверх глобального индекса.
JSON-режим для скриптов:
Шаг 6. Заполнение значений
Значения попадают в keychain через secrets ui (TUI/GUI с диалогом ввода) или через AI-агента (secrets_request_provision MCP-инструмент). Выберите режим, который ближе:
-
Интерактивно (рекомендуется):
Откроется TUI с inventory-видом. Стрелки — навигация, Enter — открыть диалог provision для выбранного пути,
q— выход. Для GUI-окружений CLI автоопределит наличие$DISPLAY/$WAYLAND_DISPLAYи поднимет egui. -
Через AI-агента: попросите агента «provision missing secrets» — он вызовет
setup-secretsskill (см. docs/guide/secrets/agent-protocol.md). -
Скриптом (только для повторяющихся секретов в одной машине):
Помечает время ротации и валидирует формат. Для первичной заливки эквивалент — поднять daemon и записать через provision-флоу; см. docs/guide/secrets/local-vault.md.
После ввода значений secrets list покажет status = provisioned для тех путей, где value реально сохранилось в keychain.
Шаг 7. Финальная проверка
Зелёный итог:
- Все
requiredпути —provisioned. - Все провайдеры в
sources.toml—available. - Нет non-conformant путей в keychain (legacy-записи мигрированы — см.
devboy secrets migrate). - Daemon запущен (только если активно использовался
secrets uiили MCP-инструменты).
Если что-то красное — doctor укажет точный код и подскажет команду для починки. Дальше — repair skill или раздел Doctor.
Что дальше
local-vault.md— настройка собственного локального хранилища (zeroize-on-drop файл с XChaCha20-Poly1305).agent-protocol.md— как AI-агент работает с секретами через MCP без доступа к значениям.source-plugin-protocol.md— добавление собственного источника через subprocess-плагин.- ADR-020 / ADR-021 / ADR-023 — формальные спецификации манифеста, роутера и UX-слоя.