Référence de configuration

Ceci est la référence clé par clé de config.toml. Le fichier annoté config.toml.example à la racine du dépôt Takuto Core fait foi — quand cette page et ce fichier divergent, c’est l’exemple qui l’emporte.

Les réglages sont rechargés à chaque changement de fichier (un poller toutes les 5 secondes). Quelques clés sont startup-only et nécessitent un redémarrage (signalé en ligne). Les secrets vont dans takuto.env, jamais dans config.toml — voir Variables d’environnement.

Takuto Core répartit la config en deux types :

  • Bootstrap — nécessaire avant que la base de données/le dashboard n’existent, ou appliqué uniquement au démarrage. Éditez-les à la main dans config.toml avant le premier démarrage.
  • Géré par l’UI — a une valeur par défaut sensée et s’édite normalement depuis un écran Configuration du dashboard. L’UI réécrit les changements dans config.toml, donc le fichier reste le magasin de référence ; une valeur définie ici n’est qu’une valeur par défaut au moment du déploiement.

La colonne Scope marque chaque clé comme Bootstrap ou nomme la surface du dashboard qui la gère. 🔒 marque les clés sensibles pour la sécurité — à revoir avant de les changer dans un déploiement partagé.

[general]

Comportement à l’échelle du processus : mode de ticketing, polling, concurrence, logging.

CléDéfautTypeScopeDescription
ticketing_system"none"stringBootstrap"jira", "github" ou "none". Pilote le poller et le bouton + du dashboard.
dry_mode 🔒falseboolBootstrapSaute les effets de bord réels Jira/GitHub (pas d’assignations, transitions ni pushes). Le travail local — worktrees, installs, sessions d’agent — tourne quand même. Utile pour roder une définition de workflow avant la mise en service.
log_level"info"stringBootstrap (redémarrage)trace, debug, info, warn, error.
worker_image""stringBootstrapImage Docker pour les containers de workflow isolés quand DinD est activé. Vide = détection auto depuis l’image Takuto en cours d’exécution.
workflow_definitions_dir"workflows"stringBootstrap (redémarrage)Chemin scanné pour les définitions de workflow *.toml, relatif au répertoire du fichier de config.
allow_auto_generate_secret_key 🔒trueboolBootstrapQuand true, le serveur génère automatiquement {data_dir}/secret.key au premier démarrage si aucune clé n’est présente. Mettez false pour provisionner la clé hors bande.
poller_owner_username(non défini)stringBootstrapNom d’utilisateur propriétaire des workflows créés automatiquement par le poller. Quand non défini, le premier admin non suspendu par ordre lexicographique est utilisé.
migrate_orphan_workflowsfalseboolBootstrapQuand true, les workflows restaurés sans propriétaire (orphelins d’avant le multi-utilisateur) sont réassignés au propriétaire de poller résolu au démarrage.
migrate_orphan_repo_associationstrueboolBootstrapQuand true, la réconciliation au démarrage relie les workflows restaurés au dépôt enregistré correspondant.
auto_pollingtrueboolUI: Item PollingQuand false, le polling démarre en pause au boot. Utilisez Resume polling pour récupérer les tickets.
poll_interval_secs60intUI: Item PollingSecondes entre deux polls Jira/GitHub.
pr_merge_poll_interval_secs60intUI: Item PollingSecondes entre deux polls vérifiant si la PR d’un workflow a été mergée sur GitHub. 0 désactive.
max_concurrent_workflows1intUI: Item PollingTaille du sémaphore pour les sessions mise/install/agent parallèles. Ajustez à votre CPU et RAM.
max_active_workflows0intUI: Item PollingNombre max de workflows visibles sur le dashboard (toutes lignes). Le poller ne démarre pas de nouveaux tickets à cette limite. 0 reflète max_concurrent_workflows.
max_concurrent_manual_workflows0intUI: Item PollingPlafond sur les démarrages manuels + du dashboard qui ne sont pas Done/Stopped/Error. 0 = pas de limite.
generate_reportfalseboolUI: Item PollingQuand true, chaque étape d’agent ajoute ses constats à un rapport et une étape finale les consolide. Ajoute des tokens.
work_item_log_retention_days7intUI: Item PollingJours de lignes de log d’éléments de travail à conserver avant nettoyage. 0 = conserver indéfiniment.

[jira]

Utilisé uniquement quand [general] ticketing_system = "jira".

CléDéfautTypeScopeDescription
site""stringBootstrapHôte Jira ou URL https:// complète (par ex. "yourcompany.atlassian.net"). Pilote l’auth par token, l’allowlist d’egress et le lien Jira dans le corps de PR.
email""stringBootstrapE-mail de l’utilisateur Jira pour l’auth par token acli.
project_keys[]arrayUI: Item PollingClés de projet Jira à interroger (par ex. ["PROJ", "ENG"]). Le sélecteur + est masqué quand c’est vide.
item_types["Task", "Bug"]arrayUI: Item PollingTypes de tickets que le poller récupère. Le sélecteur manuel + affiche toutes les issues non-Epic.
done_status"Done"stringUI: Item PollingTransition déclenchée par Mark as Done. Doit correspondre à une vraie transition de votre workflow Jira.
jql_filter""stringUI: Item PollingJQL supplémentaire fusionné en AND dans le sélecteur +. Les Epics sont toujours exclus.
linked_items_in_prompt"full"stringUI: Item Polling"full" | "summary_only" | "omit" — comment le texte des issues liées apparaît dans {ticket_context}.
ticket_context_max_description_bytes0intUI: Item PollingPlafond sur la description principale du ticket dans {ticket_context}. 0 = illimité (le défaut).
linked_issue_description_max_bytes0intUI: Item PollingPlafond par description d’issue liée quand linked_items_in_prompt = "full". 0 = illimité (le défaut).

[polling]

Politique de polling d’éléments ajustable par l’admin : quels éléments découverts les pollers ajoutent automatiquement, quel flow ils auto-démarrent, et combien tournent en parallèle. Lue en direct à chaque cycle (pas de redémarrage). Toutes les clés [polling] sont gérées par l’UI depuis Configuration → Item Polling.

CléDéfautTypeScopeDescription
auto_start_flow""stringUI: Item PollingSlug du flow unique à auto-démarrer par élément interrogé. Vide = démarrer tous les flows sans dépendance.
max_parallel_items0intUI: Item PollingPlafond sur les éléments occupant un slot de concurrence à la fois. 0 = illimité.
max_parallel_per_userfalseboolUI: Item PollingQuand true, max_parallel_items est compté par propriétaire de workflow ; false le compte globalement.

[polling.jira]

CléDéfautTypeScopeDescription
summary_keywords[]arrayUI: Item PollingCorrespondance de sous-chaîne ANY insensible à la casse contre le résumé du ticket. Vide = pas de filtre.

[polling.github]

CléDéfautTypeScopeDescription
labels[]arrayUI: Item PollingAppartenance exacte à un label, correspondance ANY. Vide = pas de filtre.
title_keywords[]arrayUI: Item PollingCorrespondance de sous-chaîne ANY insensible à la casse contre le titre de l’issue. Vide = pas de filtre.

[git]

Toutes les clés [git] sont des réglages Bootstrap.

CléDéfautTypeScopeDescription
base_branch"main"stringBootstrapBranche à partir de laquelle chaque worktree est créé.
remote"origin"stringBootstrapRemote Git utilisé pour le fetch, la ref de base et le push.
repo_path"/workspace"stringBootstrapChemin du dépôt cloné dans le container. Le nom de l’espace de travail est dérivé du dernier composant de ce chemin.

[github]

Authentification GitHub App optionnelle. Quand elle est configurée, les commits et les PR sont attribués au compte bot plutôt qu’à votre utilisateur gh personnel. Les trois champs (app_id, app_installation_id et une source de clé privée) doivent être définis ensemble ; les erreurs ne sont pas fatales — Takuto Core bascule sur l’auth gh personnelle et logge un avertissement. Permissions App requises : contents (write), pull_requests (write), metadata (read).

CléDéfautTypeScopeDescription
app_id(non défini)intBootstrapID de la GitHub App.
app_installation_id(non défini)intBootstrapID d’installation de l’App pour votre org/dépôt.
app_private_key 🔒(non défini)stringBootstrapClé privée RSA encodée en PEM, en ligne. Mutuellement exclusif avec app_private_key_path. Préférez la garder dans takuto.env.
app_private_key_path 🔒(non défini)stringBootstrapChemin d’un fichier PEM contenant la clé privée de l’App.

[web]

Le serveur du dashboard.

CléDéfautTypeScopeDescription
host"0.0.0.0"stringBootstrap (redémarrage)Adresse de bind.
port8080intBootstrap (redémarrage)Port de bind.
cors_origins 🔒[]arrayBootstrap (redémarrage)Origines CORS autorisées. Vide = calcul auto depuis host/port. À définir explicitement derrière un reverse proxy ou un terminateur TLS (par ex. ["https://maestro.example.com"]).
cookie_secure 🔒(détection auto)boolBootstrapContrôle le flag Secure sur le cookie de session. Détecté automatiquement depuis des cors_origins en https:// ou un en-tête entrant X-Forwarded-Proto: https. Forcez true en terminant le TLS sans cet en-tête ; false pour des tests locaux en HTTP simple uniquement.
kick_other_sessions_on_logintrueboolBootstrapQuand true, une connexion réussie supprime les sessions antérieures du même utilisateur. Mettez false pour des sessions desktop + mobile concurrentes.

L’authentification est multi-utilisateur uniquement. Au premier démarrage, le dashboard vous invite à créer le compte admin initial. Les anciennes clés mono-utilisateur [web] dashboard_username / dashboard_password ont été retirées — si elles sont présentes dans un vieux config.toml, elles sont silencieusement ignorées.

Politiques de session (non configurables) : TTL d’inactivité 24 h ; TTL absolu 30 jours ; verrouillage du compte après 5 tentatives échouées de connexion/récupération en 10 min (l’admin déverrouille via POST /api/users/{id}/unlock) ; limite de débit par IP sur /api/auth/login et /api/auth/recover de 10 / minute.

[database]

Là où Takuto stocke les utilisateurs, les sessions et les snapshots. Omettez la section (ou laissez connection vide) pour conserver le défaut SQLite zéro-config à {data_dir}/takuto.db. Définissez connection pour utiliser un PostgreSQL / MariaDB / MySQL externe. Au démarrage uniquement — PUT /api/config ne patche pas cette section ; changer de backend nécessite un redémarrage du processus.

CléDéfautTypeScopeDescription
connection 🔒""stringBootstrap (redémarrage)URL de la base. Vide → SQLite. Schémas : sqlite://…, postgres://… / postgresql://…, mysql://… (couvre aussi MariaDB). Le mot de passe est masqué dans GET /api/config.
max_connections10intBootstrap (redémarrage)Taille du pool de connexions.
acquire_timeout_secs30intBootstrap (redémarrage)Durée d’attente d’une connexion du pool avant timeout.
idle_timeout_secs600intBootstrap (redémarrage)Durée de vie d’une connexion inactive.
fail_fast 🔒trueboolBootstrap (redémarrage)Quand true, une sonde SELECT 1 de 5 s s’exécute au démarrage et avorte si le backend est injoignable. Quand false, elle logge un avertissement et retombe sur le SQLite local pour ce processus.
import_from_sqlitetrueboolBootstrap (redémarrage)À la première connexion à un backend externe vierge, copie en une fois les données SQLite locales existantes dedans (les sessions sont expirées, les utilisateurs se ré-authentifient donc). Ignoré aux redémarrages suivants.

Vous faites tourner la base dans un container ? L’hôte de connection doit être joignable depuis l’intérieur du container Takuto — utilisez le nom de container de la base et son port interne (par ex. takuto_db:5432), pas localhost ni le port publié sur l’hôte (par ex. localhost:5433), et placez les deux containers sur le même réseau. Le pas-à-pas complet est dans Base de données externe.

[agent]

Le fournisseur d’IA pour les étapes de workflow portant un prompt. Chaque clé [agent] est gérée par l’UI depuis Configuration → AI Settings ; les valeurs ici sont des valeurs par défaut au moment du déploiement.

CléDéfautTypeScopeDescription
provider"claude"stringUI: AI Settings"claude", "cursor", "codex" ou "opencode". Chacun lit sa propre sous-table [agent.providers.<name>].
step_timeout_secs1800intUI: AI SettingsTimeout par étape en secondes. S’applique à tous les fournisseurs.
improve_timeout_secs300intUI: AI SettingsTimeout en secondes pour l’action d’affinage de description par l’IA (« improve »).
share_conversation_across_stepsfalseboolUI: AI SettingsPartager une seule conversation d’agent à travers les étapes d’un flow vs. une session fraîche par étape.
max_repeated_output_lines8intUI: AI SettingsGarde-fou anti-blocage. Interrompt une étape quand sa sortie répète la même ligne substantielle ce nombre de fois d’affilée. 0 désactive.

Les réglages par fournisseur (modèle, endpoint, chemin du CLI, args supplémentaires) vivent dans les sous-tables [agent.providers.<name>]. Champs communs : model, extra_args, allow_shared_default ; Claude/Codex/OpenCode utilisent base_url, Cursor utilise cli.

[agent.providers.cursor]

Utilisé uniquement quand provider = "cursor".

CléDéfautTypeScopeDescription
cli"agent"stringUI: AI SettingsNom de l’exécutable Cursor Agent ou chemin absolu.
model"Auto"stringUI: AI SettingsLe --model de Cursor Agent. "Auto" ou vide = sélection automatique.
extra_args[]arrayUI: AI SettingsFlags CLI supplémentaires (deny-list appliquée).

[agent.providers.opencode]

L’adaptateur OpenCode (auto-hébergé, compatible OpenAI). Utilisé uniquement quand provider = "opencode". Voir Modèles auto-hébergés.

CléDéfautTypeScopeDescription
model""stringUI: AI SettingsId du modèle servi par l’endpoint (le <model> dans -m self_hosted/<model>). Requis quand actif.
base_url""stringUI: AI SettingsURL de l’endpoint compatible OpenAI (par ex. http://lm-studio:1234/v1). Requis quand actif.
extra_args[]arrayUI: AI SettingsFlags CLI supplémentaires (deny-list appliquée).
allow_shared_defaultfalseboolUI: AI SettingsLaisse les utilisateurs sans bearer personnel basculer sur le token par défaut du déploiement.
context_limit32768intUI: AI SettingsFenêtre de contexte max (tokens) du modèle auto-hébergé. Faites-la correspondre à la longueur de contexte chargée par votre serveur.
output_limit8192intUI: AI SettingsTokens de sortie max par réponse.

Claude et Codex utilisent leurs propres sous-tables [agent.providers.claude] / [agent.providers.codex] avec model, base_url et extra_args, tous éditables depuis Configuration → AI Settings.

[docker]

Toutes les clés [docker] sont Bootstrap (consommées au build d’image / au compose up).

CléDéfautTypeScopeDescription
build_commands[]arrayBootstrapÉtapes bash -c optionnelles exécutées pendant le build d’image.
compose_up_commands[]arrayBootstrapCommandes optionnelles exécutées en tant qu’utilisateur maestro après le préflight, à chaque docker compose up.

[editor]

Le VS Code dans le navigateur (openvscode-server) et le transfert de port dynamique. Toutes les clés [editor] sont Bootstrap.

CléDéfautTypeScopeDescription
ports[]arrayBootstrapPorts applicatifs à exposer à l’ouverture de l’éditeur (par ex. [3000, 5173, 6006]). Chacun est mappé sur un port hôte de la plage 9100–9200 et s’affiche sur la carte de workflow.
dynamic_ports10intBootstrapPorts de réserve pré-alloués pour le transfert automatique de dev-server. 0 désactive.
theme""stringBootstrapThème de couleurs VS Code ; vide, l’éditeur utilise son propre défaut (par ex. "One Dark Pro").
extensions[]arrayBootstrapIDs Marketplace à pré-installer (par ex. ["esbenp.prettier-vscode"]).
settings{}tableBootstrapRéglages VS Code libres sous [editor.settings].

[terminal]

Le terminal web (ttyd) dans le container de l’éditeur. Toutes les clés [terminal] sont Bootstrap.

CléDéfautTypeScopeDescription
git_editor(non défini)stringBootstrapPaquet apt (par ex. "nano", "vim") installé dans chaque container d’éditeur ; git config core.editor est réglé dessus.
setup_commands[]arrayBootstrapCommandes shell exécutées une fois par durée de vie du container d’éditeur (protégées par un fichier marqueur).
startup_commands[]arrayBootstrapCommandes shell exécutées à chaque fois qu’un nouveau container d’éditeur est créé.

[network]

Politique de firewall — au moment du déploiement uniquement. Toutes les clés [network] sont Bootstrap.

L’allowlist est provider-aware : le firewall autorise automatiquement les hôtes d’API du ou des fournisseurs d’IA que vous activez — le [agent].provider actif plus chaque fournisseur listé dans [agent].available_providers (Claude, Codex/OpenAI, Cursor), ainsi que tout base_url auto-hébergé. Avec la config par défaut (les quatre fournisseurs disponibles), chaque éditeur pris en charge est joignable d’emblée ; réduisez available_providers pour resserrer le firewall aux seuls fournisseurs que vous utilisez. Les hôtes exacts sont résolus au moment de l’application par la commande takuto egress-hosts du moteur.

CléDéfautTypeScopeDescription
extra_egress_hosts 🔒[]arrayBootstrapDomaines ajoutés à l’allowlist d’egress en plus des valeurs intégrées par défaut (vos fournisseurs d’IA, Atlassian, GitHub, registre npm, registres détectés dans .npmrc). Chaque entrée élargit la surface d’attaque — n’ajoutez que des hôtes que vous faites confiance à l’agent d’atteindre.
allow_all_https 🔒falseboolBootstrapQuand true, saute l’allowlist et autorise tout le HTTPS sortant (443/8443). extra_egress_hosts est ignoré. À utiliser uniquement dans des environnements de confiance — cela désactive l’une des mitigations centrales de Takuto Core.

[provisioning]

Outils CLI supplémentaires installés dans le volume d’outils partagé au démarrage, en plus de ceux intégrés à l’image. Utilisez-le pour épingler une version d’outil, ajouter un outil retiré de l’image, ou en sauter un entièrement. Bootstrap (appliqué au démarrage). Voir Étendre Takuto Core.

CléDéfautTypeScopeDescription
install_commands[]arrayBootstrapSnippets shell exécutés dans l’ordre contre le volume d’outils. Conditionnés par SHA : ré-exécutés uniquement quand la liste change. Chaque snippet doit être idempotent et installer dans $MAESTRO_TOOLS_BIN.

[dev]

Réglages réservés au dev. À laisser commentés en production. Toutes les clés [dev] sont Bootstrap.

CléDéfautTypeScopeDescription
mock_agentfalseboolBootstrapQuand true, les sessions d’agent court-circuitent vers un mock scripté — aucun vrai processus claude/agent, aucun token consommé. Respecte MAESTRO_DEV_MOCK_AGENT=1.
mock_agent_script_path(non défini)stringBootstrapChemin du fichier de script du mock. Pas de défaut — tmp/mock_script.txt n’est que l’exemple suggéré.
mock_agent_line_delay_ms75intBootstrapDélai entre les lignes de sortie du mock.
mock_agent_total_ms5000intBootstrapDurée totale de la session mock.

Sections ignorées

Les sections suivantes sont entièrement ignorées au chargement — un avertissement de démarrage est loggué pour que vous le remarquiez, mais leur contenu n’est jamais lu. Elles ont quitté config.toml parce qu’elles sont par utilisateur et par espace de travail, et vivent désormais uniquement dans la base de données, éditées depuis le dashboard :

  • [commands] — les commandes d’initialisation de worktree (autrefois pre_install, install, pre_workflow, désormais worktree_init_commands) vivent dans la base de données, résolues par (user, workspace) et éditées depuis Configuration → Worktree Settings.
  • [[run_commands]] — les commandes de dev-server longue durée affichées comme boutons run/stop sont par utilisateur et configurées depuis le même onglet Worktree Settings.

Il n’y a aucun fallback de config : si une section est absente de la base de données, le workflow n’exécute simplement aucune commande pour elle.

Variables d’environnement

Les secrets et les overrides par hôte vont dans takuto.env (monté sur /etc/maestro/env). Seules les lignes export VAR=value sont prises en compte.

VariableRôle
ANTHROPIC_API_KEY 🔒Clé API Claude (ou utilisez l’OAuth via claude login).
ANTHROPIC_BASE_URLOverride de l’endpoint de l’API Anthropic (proxy / passerelle on-prem).
CLAUDE_CODE_OAUTH_TOKEN 🔒Token pour l’auth OAuth de Claude Code.
CURSOR_API_KEY 🔒Clé Cursor Agent — saute le préflight interactif agent status.
GH_TOKEN 🔒PAT GitHub (fine-grained, limité au dépôt cible).
MAESTRO_CONFIGChemin d’un config.toml alternatif.
MAESTRO_DATA_DIROverride du répertoire de données persistant (maestro.db, snapshots).
MAESTRO_HOMEOverride de la base home utilisée pour calculer MAESTRO_DATA_DIR.
MAESTRO_DEV_MOCK_AGENT1 = force l’activation du mock agent (override [dev] mock_agent).

Exemple de takuto.env :

export ANTHROPIC_API_KEY="sk-ant-..."
export GH_TOKEN="github_pat_..."
export ANTHROPIC_BASE_URL="https://custom-proxy.example.com/claude"