Aller au contenu

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.

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.

ModeActivationEffet
Sceau local seulAucune variable IP Secure / HubSHA-512 + ledger SQLite. Suffisant pour preuve interne.
Sceau + eIDASIP_SECURE_API_KEY + IP_SECURE_PRIVATE_KEYCertificat eIDAS Certigna en plus. Horodatage qualifié.
Sceau + Hub d’entrepriseHUB_URL + HUB_API_TOKENPush best-effort vers un Hub central (SSoT entreprise).

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.

Fenêtre de terminal
# GitHub
GIT_HOST_API_URL=https://api.github.com
# GitLab
GIT_HOST_API_URL=https://gitlab.com/api/v4
# Forgejo / Gitea
GIT_HOST_API_URL=https://votre-instance.com/api/v1
GIT_HOST_TOKEN string

Token avec le scope repo (lecture). Pour GitHub : un PAT classique ou un fine-grained PAT scopé au repo.

Fenêtre de terminal
GIT_HOST_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxxxxxx
IP_SECURE_API_KEY string

Clé d’API Jinnove (header x-api-key).

Fenêtre de terminal
IP_SECURE_API_KEY=e6389eb910aab57f97cf9ded09b36314
IP_SECURE_PRIVATE_KEY string

Clé privée Jinnove (signature des requêtes). Garder confidentielle.

Fenêtre de terminal
IP_SECURE_PRIVATE_KEY=31d4ee771ba32fbce0ca8ce37a9c7c3310fb605fad6cc0f372a3c35efcb9efb3
IP_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.

Fenêtre de terminal
IP_SECURE_AUTHOR_EMAIL=julien@example.com

IP 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.

Fenêtre de terminal
HUB_URL=https://hub.entreprise.fr
HUB_API_TOKEN string

Token Bearer accepté par votre Hub.

Fenêtre de terminal
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).

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 : si ODATA_USER/PASS ne 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) : si ODATA_USER/PASS ne 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.

Fenêtre de terminal
ODATA_USER=admin
ODATA_PASS string

Mot de passe Basic Auth. Générer avec openssl rand -hex 16.

Fenêtre de terminal
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).

Fenêtre de terminal
OBSIDIAN_ROOT=/Users/julien/Documents/Research
DB_PATH string défaut: ~/.seshat/seshat.db

Chemin vers la base SQLite du ledger.

Fenêtre de terminal
DB_PATH=/var/lib/seshat/ledger.db
LOG_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.

Fenêtre de terminal
ENABLE_PQC=true
PQC_LEVEL=87 # 65 ou 87
PQC_SEED=votre_seed_hex_64_chars
LevelAlgorithmeNIST LevelSécurité
65ML-DSA-653192-bit
87ML-DSA-875256-bit
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).

Fenêtre de terminal
SESHAT_NON_INTERACTIVE=1 seshat update --force

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é.

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.

Fenêtre de terminal
seshat dashboard
# → http://127.0.0.1:3939/dashboard/ (pas de prompt auth)
Fenêtre de terminal
# ===========================================
# SESHAT — configuration complète
# ===========================================
# Git host (recommandé)
GIT_HOST_API_URL=https://api.github.com
GIT_HOST_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxxxxxx
# IP Secure / Jinnove (eIDAS)
IP_SECURE_API_KEY=e6389eb910aab57f97cf9ded09b36314
IP_SECURE_PRIVATE_KEY=31d4ee771ba32fbce0ca8ce37a9c7c3310fb605fad6cc0f372a3c35efcb9efb3
IP_SECURE_AUTHOR_EMAIL=julien@example.com
# Hub d'entreprise (optionnel)
HUB_URL=https://hub.entreprise.fr
HUB_API_TOKEN=eyJhbGciOiJIUzI1NiIs...
# Sources de recherche (au choix)
OBSIDIAN_ROOT=/Users/julien/Documents/Research
NOTION_TOKEN=ntn_xxxxxxxxxxxxxxxxxxxx
JIRA_BASE_URL=https://votreorg.atlassian.net
JIRA_EMAIL=julien@votreorg.fr
JIRA_API_TOKEN=ATATT3xFfGF0...
# Dashboard (LAN d'équipe)
API_HOST=0.0.0.0
HTTP_PORT=3939
ODATA_USER=admin
ODATA_PASS=$(openssl rand -hex 16)
# Stockage
DB_PATH=~/.seshat/seshat.db
LOG_LEVEL=info
# Signatures post-quantiques (optionnel — pour brevets 20+ ans)
ENABLE_PQC=true
PQC_LEVEL=87
PQC_SEED=votre_seed_hex_64_chars

Une fois SESHAT installé, configurez-le directement via votre agent IA :

Configure SESHAT avec mon GitHub et mon vault Obsidian

L’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.).