Files
chlova/.env.example
T
Kantin-Petit 2bfa58f440 feat: outil propose_asset + auto-extension exposée, fin Phase 5 v1 (v0.27.0)
Outil local sanctionné chlova.propose_asset : l'agent propose un asset →
write+commit+version+doc → need-review (privilégié = BLOQUÉ). Notion
ToolSpec.sanctioned (autorisé par gatekeeper, audité). Flag
CHLOVA_AUTOEXT_ENABLED (off défaut) + CHLOVA_REPO_ROOT. Prompt impose un
palier honnête. 75 tests, 0 vuln, compose OK.

Palier de risque : privilégié (l'agent écrit+commit) — derrière flag +
Phase 2 ; l'asset produit n'est jamais exécuté, il reste sous review.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 06:38:45 +02:00

68 lines
4.5 KiB
Bash

# CHLOVA — variables d'environnement (TEMPLATE)
# Copier en `.env` et renseigner. NE JAMAIS committer `.env` ni de vraie valeur.
# L'agent ne voit jamais ces secrets en clair : il manipule des références.
# ── Ollama (proxy cloud) ───────────────────────────────────────────────
# Le conteneur Ollama local proxifie vers ollama.com. Egress doit autoriser
# ollama.com. Joignable uniquement sur le réseau Docker interne.
OLLAMA_BASE_URL=http://ollama:11434
OLLAMA_API_KEY= # SECRET — clé API Ollama cloud
OLLAMA_MODEL=qwen3:cloud # modèle cloud (suffixe :cloud), tool-calling
# ── MCP n8n : NATIF (instance n8n ≥ 2.18.4) ────────────────────────────
# Pas de conteneur dédié : n8n sert son propre MCP. Activer côté instance
# (env d'instance + activation par workflow), puis copier l'URL + le token
# depuis n8n → Connection details. URL = endpoint MCP de l'instance (interne).
# Chemin natif n8n = /mcp-server/http. Préférer l'hôte INTERNE (réseau Docker) ;
# si le MCP n'est routé que via le domaine public, utiliser l'URL publique (TLS)
# et autoriser ce domaine en egress (voir infra/networks.md).
MCP_N8N_URL=http://n8n:5678/mcp-server/http # ou https://<n8n-public>/mcp-server/http
MCP_N8N_AUTH_TOKEN= # SECRET — "MCP Access Token" n8n (Bearer)
# ── MCP Portainer (portainer/portainer-mcp) ────────────────────────────
PORTAINER_URL=https://portainer:9443 # interne uniquement
PORTAINER_MCP_AUTH_TOKEN= # SECRET — token Portainer à portée RESTREINTE
# Phase 1 : DOIT rester true (le boot échoue sinon). Phase 2 : peut passer false
# pour autoriser les écritures Portainer (sous gatekeeper + review).
PORTAINER_READ_ONLY=true
MCP_PORTAINER_URL=http://mcp-portainer:3000
# ── Surface Telegram (Phase 1) ─────────────────────────────────────────
TELEGRAM_BOT_TOKEN= # SECRET — token du bot
TELEGRAM_ALLOWED_USER_IDS= # liste d'IDs autorisés, séparés par virgule
# ── Backend CHLOVA ─────────────────────────────────────────────────────
CHLOVA_ENV=development # development | production
CHLOVA_LOG_LEVEL=info
# Gate de phase : 1 = lecture seule (défaut, fail-safe) ; 2 = écriture sous
# gatekeeper + cycle need-review. Toute valeur autre que "2" retombe sur 1.
CHLOVA_PHASE=1
CHLOVA_DB_PATH=./data/chlova.db # SQLite : table assets (need-review, Phase 2)
# Alertes (Phase 3) : URL du webhook n8n qui envoie le mail (workflow
# workflows-n8n/chlova-alerts.v1.0.0.json). Vide = alertes log-only (fail-safe).
# Peut contenir un token de chemin → secret, jamais commité.
ALERT_WEBHOOK_URL= # ex. http://n8n:5678/webhook/chlova-alert
# ── API/UI (Phase 4) — surface exposée, login fort ─────────────────────
# L'API/UI n'est ACTIVE que si les 4 valeurs ci-dessous sont présentes.
# Générer hash + secrets : `npm run provision-auth -- <user> <password>`.
CHLOVA_ADMIN_USER=
CHLOVA_ADMIN_PASSWORD_HASH= # SECRET — hash scrypt
CHLOVA_TOTP_SECRET= # SECRET — secret TOTP (2FA)
CHLOVA_JWT_SECRET= # SECRET — clé de signature JWT
# Origine CORS autorisée en DEV (Vite). En prod le SPA est servi same-origin.
CHLOVA_WEB_ORIGIN= # ex. http://localhost:5173 (dev uniquement)
# Racine du SPA buildé servi same-origin. Défaut image = /app/web. Vide = pas de SPA.
CHLOVA_WEB_ROOT= # laisser vide en conteneur (défaut /app/web)
# ── Auto-extension (Phase 5) ───────────────────────────────────────────
# Si true, l'agent peut créer des assets en need-review (écrit + commit +
# versionne + documente). Désactivé par défaut (fail-safe). Requiert un dépôt
# git monté dans le conteneur à CHLOVA_REPO_ROOT.
CHLOVA_AUTOEXT_ENABLED=false
CHLOVA_REPO_ROOT=. # chemin du dépôt (working copy GitOps)
# Domaine public derrière Traefik (label compose).
CHLOVA_DOMAIN=chlova.example.com
# Phase 1 : aucun port publié (Telegram en long-polling). Renseigné en P3+ si API/UI.
# CHLOVA_HTTP_PORT=8080