feat(setup-interns, using-interns): secrets at ~/.config/projects-secrets/
Aligns claude-skills with secrets-out-of-common etap-1 migration: the canonical home for plain-text local-dev secrets is now ~/.config/projects-secrets/, outside any git tree. setup-interns [v0.3.0 → v0.4.0, MINOR — write target changed]: - Phase 1 drops gitignore-sanity check (no longer needed) - Phase 2 plan block drops Gitignore line - Phase 3 backs up ~/.config/projects-secrets/interns.env if present - Phase 5 writes ~/.config/projects-secrets/interns.env (mkdir -p ahead) - Phase 6 cwd documentation: secrets path no longer relative to cwd; uses INTERNS_SECRETS_PATH env var (or ~/.config default) — independent - Common-mistakes drops "missing gitignore rule" entry using-interns [v0.2.0 → v0.2.1, PATCH — wording]: - Always-ask paths section reflects new canonical secrets home - Prerequisites text updates setup-interns write target interns-design.md (wiki concept): path refs updated for ASCII layer diagram, Layer 1 example block, Phase 5 description, comparison table, and final cross-cutting note. **/projects-secrets/** added to always-ask documentation pattern. dist/: setup-interns.skill + using-interns.skill rebuilt. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -48,7 +48,7 @@ Triggered by Reddit thread (May 2026) и Medium-статьёй того же а
|
||||
┌──────────────────────────────────────────────────────────────┐
|
||||
│ Layer 1 — Config (data, no code) │
|
||||
│ .common/config/interns/config.yaml — endpoints + tools │
|
||||
│ .common/secrets/interns.env — API ключи (gitignored) │
|
||||
│ ~/.config/projects-secrets/interns.env — API ключи (outside git) │
|
||||
└──────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
@@ -98,7 +98,7 @@ interns:
|
||||
transcript. Output structured markdown sections. Be terse.
|
||||
```
|
||||
|
||||
`.common/secrets/interns.env` (gitignored):
|
||||
`~/.config/projects-secrets/interns.env` (outside any git tree; canonical home since `secrets-out-of-common` migration):
|
||||
|
||||
```dotenv
|
||||
OLLAMA_CLOUD_API_KEY=...
|
||||
@@ -152,7 +152,7 @@ interns-mcp/
|
||||
**Steps:**
|
||||
1. Проверить `.common/lib/interns-mcp/` существует. Если нет — инициализировать пустой через template (TBD: см. open question про source repo).
|
||||
2. `pip install -e .common/lib/interns-mcp/` через активный Python interpreter.
|
||||
3. Прочитать `.common/config/interns/config.yaml`, для каждого `endpoint.<name>.api_key_env` проверить наличие в `.common/secrets/interns.env`. Отсутствующие — спросить интерактивно, preview перед записью, write.
|
||||
3. Прочитать `.common/config/interns/config.yaml`, для каждого `endpoint.<name>.api_key_env` проверить наличие в `~/.config/projects-secrets/interns.env`. Отсутствующие — спросить интерактивно, preview перед записью, write.
|
||||
4. Зарегистрировать `mcpServers.interns` в `~/.claude.json`:
|
||||
```json
|
||||
"interns": {
|
||||
@@ -180,7 +180,7 @@ interns-mcp/
|
||||
|
||||
3. **Always-ask paths (даже с активным grant'ом).** Полный список:
|
||||
- `**/.env`, `**/.env.*` — environment files со секретами
|
||||
- `**/secrets/**` — каноническая папка секретов (включая `.common/secrets/`)
|
||||
- `**/secrets/**`, `**/projects-secrets/**` — каноническая папка секретов (после миграции `secrets-out-of-common`: `~/.config/projects-secrets/`)
|
||||
- `**/credentials*` — credentials.json и подобные
|
||||
- `**/*.key` — private keys любого формата
|
||||
- `**/*.pem` — PEM-encoded keys/certs
|
||||
@@ -220,7 +220,7 @@ interns-mcp/
|
||||
| Слой | Windows | Linux | macOS |
|
||||
|---|---|---|---|
|
||||
| `.common/lib/interns-mcp/` (Python 3.11+) | ✅ | ✅ | ✅ |
|
||||
| `.common/secrets/interns.env` (`python-dotenv`) | ✅ | ✅ | ✅ |
|
||||
| `~/.config/projects-secrets/interns.env` (`python-dotenv`) | ✅ | ✅ | ✅ |
|
||||
| `setup-interns` install (`python -m pip`) | ✅ | ✅ | ✅ |
|
||||
| MCP registration — путь к Python | `where python` | `which python` | `which python` |
|
||||
| Always-ask matcher (`pathlib.PurePath.match`) | ✅ POSIX-style globs работают везде | ✅ | ✅ |
|
||||
@@ -277,7 +277,7 @@ interns-mcp/
|
||||
- **Source repo для `.common/lib/interns-mcp/`.** Inline в `.common` или отдельный repo на Gitea + git-subtree/submodule? Текущее склонение — inline (это часть `.common`, не самостоятельный продукт).
|
||||
- **Auto-discovery интернов** в `registry.py` (через `pkgutil.iter_modules`) vs explicit `register_tool` в `server.py`. Auto проще для расширения, explicit прозрачнее. Текущее склонение — explicit для MVP.
|
||||
- **Cost tracking.** В первом релизе — нет. Если оботрётся в реальной работе — добавим в `safety.py` per-call estimate из config (`tokens_used × price_per_M`) и блокировку >$X через always-ask механизм.
|
||||
- **Sharing endpoint между meeting-room runner и interns-mcp.** Сейчас `.meeting-room/config/config.yaml` имеет свой `providers.ollama_cloud` с собственным ключом; interns-mcp будет иметь свой в `.common/secrets/interns.env`. Дублирование. Унификация — отдельная задача.
|
||||
- **Sharing endpoint между meeting-room runner и interns-mcp.** Сейчас `.meeting-room/config/config.yaml` имеет свой `providers.ollama_cloud` с собственным ключом; interns-mcp будет иметь свой в `~/.config/projects-secrets/interns.env`. Дублирование. Унификация — отдельная задача.
|
||||
- **Persistent prefix-cache benefit с Ollama Cloud.** Документация Ollama Cloud не подтверждает prefix-cache discount явно (как делает OpenRouter). Если измерения покажут что cache не работает — рассмотреть переключение на OpenRouter как primary endpoint.
|
||||
|
||||
## References
|
||||
|
||||
Reference in New Issue
Block a user