Configuration
SESHAT se configure par variables d’environnement OU via le fichier ~/.seshat/config.json. Priorité : env > Keychain système (macOS Keychain / libsecret / DPAPI) > config.json > defaults.
Modèle de souveraineté
Section intitulée « Modèle de souveraineté »SESHAT fonctionne sur trois modes indépendants. Chaque mode est activable séparément, et l’absence de configuration n’empêche jamais le scellement local.
| Mode | Activation | Effet |
|---|---|---|
| Sceau local seul | Aucune variable IP Secure / Hub | SHA-512 + ledger SQLite. Suffisant pour preuve interne. |
| Sceau + eIDAS | IP_SECURE_API_KEY + IP_SECURE_PRIVATE_KEY | Certificat eIDAS Certigna en plus. Horodatage qualifié. |
| Sceau + Hub d’entreprise | HUB_URL + HUB_API_TOKEN | Push best-effort vers un Hub central (SSoT entreprise). |
Variables principales
Section intitulée « Variables principales »Git host (recommandé pour seal PR/release/commit)
Section intitulée « Git host (recommandé pour seal PR/release/commit) »GIT_HOST_API_URL string Endpoint API de votre forge.
# GitHubGIT_HOST_API_URL=https://api.github.com
# GitLabGIT_HOST_API_URL=https://gitlab.com/api/v4
# Forgejo / GiteaGIT_HOST_API_URL=https://votre-instance.com/api/v1GIT_HOST_TOKEN string Token avec le scope repo (lecture). Pour GitHub : un PAT classique ou un fine-grained PAT scopé au repo.
GIT_HOST_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxxxxxxIP Secure / Jinnove (optionnel — pour eIDAS)
Section intitulée « IP Secure / Jinnove (optionnel — pour eIDAS) »IP_SECURE_API_KEY string Clé d’API Jinnove (header x-api-key).
IP_SECURE_API_KEY=e6389eb910aab57f97cf9ded09b36314IP_SECURE_PRIVATE_KEY string Clé privée Jinnove (signature des requêtes). Garder confidentielle.
IP_SECURE_PRIVATE_KEY=31d4ee771ba32fbce0ca8ce37a9c7c3310fb605fad6cc0f372a3c35efcb9efb3IP_SECURE_API_URL string défaut: https://api.jinnove.com/ipsecure-api Endpoint Jinnove. À surcharger uniquement pour les instances on-prem.
IP_SECURE_AUTHOR_EMAIL string Email de l’auteur attaché aux contributions IP Secure. Facultatif mais recommandé pour la traçabilité auteur.
IP_SECURE_AUTHOR_EMAIL=julien@example.comIP Secure Hub (optionnel — pour push entreprise)
Section intitulée « IP Secure Hub (optionnel — pour push entreprise) »HUB_URL string URL d’un Hub IP Secure d’entreprise (Next.js / Prisma). Quand défini, chaque seal_* met la preuve dans une queue locale (hub_push_queue) qu’un worker en arrière-plan dépile.
HUB_URL=https://hub.entreprise.frHUB_API_TOKEN string Token Bearer accepté par votre Hub.
HUB_API_TOKEN=eyJhbGciOiJIUzI1NiIs...HUB_INSECURE boolean défaut: false Autorise un HUB_URL en http:// (pour Hub on-prem en LAN interne uniquement). En https:// ce flag est ignoré.
HUB_RETRY_MAX number défaut: 10 Nombre max de retries avant que le worker abandonne. Les preuves restent en queue mais ne seront plus tentées sans intervention manuelle (seshat hub flush).
Dashboard HTTP
Section intitulée « Dashboard HTTP »API_HOST string défaut: 127.0.0.1 Adresse d’écoute du serveur HTTP (dashboard + API REST + OData).
Comportement de l’authentification (depuis v1.4.2, #408) :
127.0.0.1/::1/localhost: siODATA_USER/PASSne sont pas définis, l’API est accessible sans auth (un warning est loggué). Le user local a déjà accès au fichier SQLite — exiger une auth HTTP sur loopback n’apporte rien.- Toute autre adresse (
0.0.0.0, IP publique, IP LAN) : siODATA_USER/PASSne sont pas définis, l’API renvoie HTTP 503. Comportement fail-closed préservé (#324).
HTTP_PORT number défaut: 3939 Port d’écoute du dashboard.
ODATA_USER string Identifiant Basic Auth pour le dashboard et les endpoints /api/* + /odata/*. Requis si bind non-loopback.
ODATA_USER=adminODATA_PASS string Mot de passe Basic Auth. Générer avec openssl rand -hex 16.
ODATA_PASS=$(openssl rand -hex 16)Sources de recherche (optionnel — pour certify_research)
Section intitulée « Sources de recherche (optionnel — pour certify_research) »OBSIDIAN_ROOT string Chemin absolu vers votre vault Obsidian. Le vault_path par projet est ensuite configuré via configure (sous-répertoire optionnel).
OBSIDIAN_ROOT=/Users/julien/Documents/ResearchNOTION_TOKEN string Token d’intégration interne Notion. Commence par ntn_ ou secret_.
NOTION_TOKEN=ntn_xxxxxxxxxxxxxxxxxxxxLe notion_database_id est configuré par projet via configure ou le wizard seshat init. Voir Notion Integration pour le guide complet.
JIRA_BASE_URL string URL de votre instance Jira (Cloud ou Server/DC).
JIRA_BASE_URL=https://votreorg.atlassian.netJIRA_EMAIL string Email du compte Jira (Jira Cloud uniquement — Server/DC utilise un PAT directement).
JIRA_EMAIL=julien@votreorg.frJIRA_API_TOKEN string Token d’API Jira (Cloud — créé sur id.atlassian.com).
JIRA_API_TOKEN=ATATT3xFfGF0...N8N_BASE_URL string URL de votre instance N8N (Cloud ou self-hosted).
N8N_BASE_URL=https://votreorg.app.n8n.cloudN8N_API_KEY string Clé API N8N. Générée depuis Settings → API.
N8N_API_KEY=eyJhbGciOiJIUzI1NiIs...Sécurité et confidentialité
Section intitulée « Sécurité et confidentialité »DB_PATH string défaut: ~/.seshat/seshat.db Chemin vers la base SQLite du ledger.
DB_PATH=/var/lib/seshat/ledger.dbLOG_LEVEL string défaut: info Verbosité. Options : debug, info, warn, error. Les logs sont écrits sur stderr (stdout est réservé au transport MCP).
ENABLE_PQC boolean défaut: false Active les signatures post-quantique (ML-DSA / ANSSI-conforme). Pour les brevets dont la durée de vie dépasse l’horizon de fragilité RSA.
ENABLE_PQC=truePQC_LEVEL=87 # 65 ou 87PQC_SEED=votre_seed_hex_64_chars| Level | Algorithme | NIST Level | Sécurité |
|---|---|---|---|
| 65 | ML-DSA-65 | 3 | 192-bit |
| 87 | ML-DSA-87 | 5 | 256-bit |
CLI / environnement non-interactif
Section intitulée « CLI / environnement non-interactif »SESHAT_NON_INTERACTIVE boolean défaut: false Force la détection “non-interactif” pour seshat update même quand un TTY est présent (utile pour scripts CI). Quand actif, les commandes qui demandent confirmation échouent avec exit code 1 au lieu d’attendre (sauf si --force / --yes est passé). Introduit dans v1.4.2 (#409).
SESHAT_NON_INTERACTIVE=1 seshat update --forcePre-seal secret scan (depuis v1.4.2)
Section intitulée « Pre-seal secret scan (depuis v1.4.2) »Les outils seal_content et seal_file exécutent un scan de secrets avant toute persistance (#410). Patterns détectés : clés AWS, tokens GitHub/Slack/Google, JWT, blocs PEM privés, chaînes de connexion DB, assignations password=…. Les placeholders communs (changeme, xxxxxx) sont ignorés.
Si un secret est détecté, l’outil refuse le scellement et retourne :
{ "success": false, "reason": "secret_scan_blocked", "findings": [ { "rule": "db-connection-credential", "description": "Database connection string with inline password", "line": 12, "snippet": "connect system/PI***24*@orcl" } ]}Override : pour passer outre (faux positif confirmé après revue manuelle), passer force_secret_scan: true dans l’appel. Le bypass est loggué.
Authentification dashboard
Section intitulée « Authentification dashboard »Trois cas concrets :
Aucune variable d’auth. SESHAT bind par défaut sur 127.0.0.1 → l’API est accessible sans auth pour les requêtes locales.
seshat dashboard# → http://127.0.0.1:3939/dashboard/ (pas de prompt auth)Bind sur LAN + Basic Auth obligatoire.
export API_HOST=0.0.0.0export ODATA_USER=teamexport ODATA_PASS=$(openssl rand -hex 16)seshat dashboard# → http://votre-ip-lan:3939/dashboard/ (auth Basic obligatoire)Derrière un reverse proxy (Caddy, nginx). SESHAT ne fait pas de TLS lui-même.
export API_HOST=127.0.0.1export ODATA_USER=prodexport ODATA_PASS=$(openssl rand -hex 32)Reverse-proxy SNI en frontal, SESHAT en backend loopback. L’auth Basic SESHAT reste activée (défense en profondeur).
Exemple complet
Section intitulée « Exemple complet »# ===========================================# SESHAT — configuration complète# ===========================================
# Git host (recommandé)GIT_HOST_API_URL=https://api.github.comGIT_HOST_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxxxxxx
# IP Secure / Jinnove (eIDAS)IP_SECURE_API_KEY=e6389eb910aab57f97cf9ded09b36314IP_SECURE_PRIVATE_KEY=31d4ee771ba32fbce0ca8ce37a9c7c3310fb605fad6cc0f372a3c35efcb9efb3IP_SECURE_AUTHOR_EMAIL=julien@example.com
# Hub d'entreprise (optionnel)HUB_URL=https://hub.entreprise.frHUB_API_TOKEN=eyJhbGciOiJIUzI1NiIs...
# Sources de recherche (au choix)OBSIDIAN_ROOT=/Users/julien/Documents/ResearchNOTION_TOKEN=ntn_xxxxxxxxxxxxxxxxxxxxJIRA_BASE_URL=https://votreorg.atlassian.netJIRA_EMAIL=julien@votreorg.frJIRA_API_TOKEN=ATATT3xFfGF0...
# Dashboard (LAN d'équipe)API_HOST=0.0.0.0HTTP_PORT=3939ODATA_USER=adminODATA_PASS=$(openssl rand -hex 16)
# StockageDB_PATH=~/.seshat/seshat.dbLOG_LEVEL=info
# Signatures post-quantiques (optionnel — pour brevets 20+ ans)ENABLE_PQC=truePQC_LEVEL=87PQC_SEED=votre_seed_hex_64_charsConfiguration via MCP
Section intitulée « Configuration via MCP »Une fois SESHAT installé, configurez-le directement via votre agent IA :
Configure SESHAT avec mon GitHub et mon vault ObsidianL’agent utilisera l’outil configure qui couvre 13 actions (CRUD projets, set_env whitelisté, test de connectivité par source, création et synchronisation de projets IP Secure, etc.).