# Secrets and Tokens ## Список секретов | Секрет | Где используется | Откуда взять | |---|---|---| | `MAGIC_API_KEY` | `~/.claude.json:mcpServers.magic.args` | 21st.dev → settings → API keys | | `GITHUB_TOKEN` | `.mcp.json:mcpServers.github.headers` | GitHub → settings → Personal Access Tokens (fine-grained, repo+read:org) | ## Где НЕ хранить - В brain repo (даже private) - В commit history - В CLAUDE.md / docs / README - В скриншотах сессий ## Где хранить - В KeePass / Bitwarden / 1Password - Как env-vars в shell profile (для `GITHUB_TOKEN`) - Inline в `~/.claude.json` локально (после resolve через `setup-secrets.sh`) ## Workflow при первой установке ```bash ./scripts/install.sh --target=$HOME/.claude --version=brain-v1.0 # Скрипт промптит: # > Enter value for <> (or empty to skip): # Вводишь значение из KeePass ``` ## Workflow в CI ```bash ./scripts/install.sh --target=$HOME/.claude --version=brain-v1.0 \ --skip-secrets # Placeholder'ы остаются; .brain-deferred-secrets.txt создан ``` Затем — resolve через GH Actions secret + `setup-secrets.sh --secret=MAGIC_API_KEY=$MAGIC_API_KEY ...`. ## Ротация при компрометации 1. На 21st.dev: revoke + создать новый 2. Обновить локально через `setup-secrets.sh --secret=MAGIC_API_KEY=newvalue ~/.claude.json` 3. Никаких изменений в brain repo не нужно — placeholder остаётся ## gitleaks scan В brain repo — pre-commit hook и CI workflow проверяют: ```bash gitleaks detect --source=. --no-git ``` Если 0 findings — OK. Любой finding — **немедленный фикс** (mask API_KEY, force-push, ротация key).