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.tomlavant 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éfaut | Type | Scope | Description |
|---|---|---|---|---|
ticketing_system | "none" | string | Bootstrap | "jira", "github" ou "none". Pilote le poller et le bouton + du dashboard. |
dry_mode 🔒 | false | bool | Bootstrap | Saute 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" | string | Bootstrap (redémarrage) | trace, debug, info, warn, error. |
worker_image | "" | string | Bootstrap | Image 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" | string | Bootstrap (redémarrage) | Chemin scanné pour les définitions de workflow *.toml, relatif au répertoire du fichier de config. |
allow_auto_generate_secret_key 🔒 | true | bool | Bootstrap | Quand 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) | string | Bootstrap | Nom 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_workflows | false | bool | Bootstrap | Quand 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_associations | true | bool | Bootstrap | Quand true, la réconciliation au démarrage relie les workflows restaurés au dépôt enregistré correspondant. |
auto_polling | true | bool | UI: Item Polling | Quand false, le polling démarre en pause au boot. Utilisez Resume polling pour récupérer les tickets. |
poll_interval_secs | 60 | int | UI: Item Polling | Secondes entre deux polls Jira/GitHub. |
pr_merge_poll_interval_secs | 60 | int | UI: Item Polling | Secondes entre deux polls vérifiant si la PR d’un workflow a été mergée sur GitHub. 0 désactive. |
max_concurrent_workflows | 1 | int | UI: Item Polling | Taille du sémaphore pour les sessions mise/install/agent parallèles. Ajustez à votre CPU et RAM. |
max_active_workflows | 0 | int | UI: Item Polling | Nombre 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_workflows | 0 | int | UI: Item Polling | Plafond sur les démarrages manuels + du dashboard qui ne sont pas Done/Stopped/Error. 0 = pas de limite. |
generate_report | false | bool | UI: Item Polling | Quand true, chaque étape d’agent ajoute ses constats à un rapport et une étape finale les consolide. Ajoute des tokens. |
work_item_log_retention_days | 7 | int | UI: Item Polling | Jours 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éfaut | Type | Scope | Description |
|---|---|---|---|---|
site | "" | string | Bootstrap | Hô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 | "" | string | Bootstrap | E-mail de l’utilisateur Jira pour l’auth par token acli. |
project_keys | [] | array | UI: Item Polling | Clés de projet Jira à interroger (par ex. ["PROJ", "ENG"]). Le sélecteur + est masqué quand c’est vide. |
item_types | ["Task", "Bug"] | array | UI: Item Polling | Types de tickets que le poller récupère. Le sélecteur manuel + affiche toutes les issues non-Epic. |
done_status | "Done" | string | UI: Item Polling | Transition déclenchée par Mark as Done. Doit correspondre à une vraie transition de votre workflow Jira. |
jql_filter | "" | string | UI: Item Polling | JQL supplémentaire fusionné en AND dans le sélecteur +. Les Epics sont toujours exclus. |
linked_items_in_prompt | "full" | string | UI: Item Polling | "full" | "summary_only" | "omit" — comment le texte des issues liées apparaît dans {ticket_context}. |
ticket_context_max_description_bytes | 0 | int | UI: Item Polling | Plafond sur la description principale du ticket dans {ticket_context}. 0 = illimité (le défaut). |
linked_issue_description_max_bytes | 0 | int | UI: Item Polling | Plafond 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éfaut | Type | Scope | Description |
|---|---|---|---|---|
auto_start_flow | "" | string | UI: Item Polling | Slug du flow unique à auto-démarrer par élément interrogé. Vide = démarrer tous les flows sans dépendance. |
max_parallel_items | 0 | int | UI: Item Polling | Plafond sur les éléments occupant un slot de concurrence à la fois. 0 = illimité. |
max_parallel_per_user | false | bool | UI: Item Polling | Quand true, max_parallel_items est compté par propriétaire de workflow ; false le compte globalement. |
[polling.jira]
| Clé | Défaut | Type | Scope | Description |
|---|---|---|---|---|
summary_keywords | [] | array | UI: Item Polling | Correspondance de sous-chaîne ANY insensible à la casse contre le résumé du ticket. Vide = pas de filtre. |
[polling.github]
| Clé | Défaut | Type | Scope | Description |
|---|---|---|---|---|
labels | [] | array | UI: Item Polling | Appartenance exacte à un label, correspondance ANY. Vide = pas de filtre. |
title_keywords | [] | array | UI: Item Polling | Correspondance 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éfaut | Type | Scope | Description |
|---|---|---|---|---|
base_branch | "main" | string | Bootstrap | Branche à partir de laquelle chaque worktree est créé. |
remote | "origin" | string | Bootstrap | Remote Git utilisé pour le fetch, la ref de base et le push. |
repo_path | "/workspace" | string | Bootstrap | Chemin 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éfaut | Type | Scope | Description |
|---|---|---|---|---|
app_id | (non défini) | int | Bootstrap | ID de la GitHub App. |
app_installation_id | (non défini) | int | Bootstrap | ID d’installation de l’App pour votre org/dépôt. |
app_private_key 🔒 | (non défini) | string | Bootstrap | Clé 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) | string | Bootstrap | Chemin d’un fichier PEM contenant la clé privée de l’App. |
[web]
Le serveur du dashboard.
| Clé | Défaut | Type | Scope | Description |
|---|---|---|---|---|
host | "0.0.0.0" | string | Bootstrap (redémarrage) | Adresse de bind. |
port | 8080 | int | Bootstrap (redémarrage) | Port de bind. |
cors_origins 🔒 | [] | array | Bootstrap (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) | bool | Bootstrap | Contrô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_login | true | bool | Bootstrap | Quand 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_passwordont été retirées — si elles sont présentes dans un vieuxconfig.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éfaut | Type | Scope | Description |
|---|---|---|---|---|
connection 🔒 | "" | string | Bootstrap (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_connections | 10 | int | Bootstrap (redémarrage) | Taille du pool de connexions. |
acquire_timeout_secs | 30 | int | Bootstrap (redémarrage) | Durée d’attente d’une connexion du pool avant timeout. |
idle_timeout_secs | 600 | int | Bootstrap (redémarrage) | Durée de vie d’une connexion inactive. |
fail_fast 🔒 | true | bool | Bootstrap (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_sqlite | true | bool | Bootstrap (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
connectiondoit ê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), paslocalhostni 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éfaut | Type | Scope | Description |
|---|---|---|---|---|
provider | "claude" | string | UI: AI Settings | "claude", "cursor", "codex" ou "opencode". Chacun lit sa propre sous-table [agent.providers.<name>]. |
step_timeout_secs | 1800 | int | UI: AI Settings | Timeout par étape en secondes. S’applique à tous les fournisseurs. |
improve_timeout_secs | 300 | int | UI: AI Settings | Timeout en secondes pour l’action d’affinage de description par l’IA (« improve »). |
share_conversation_across_steps | false | bool | UI: AI Settings | Partager une seule conversation d’agent à travers les étapes d’un flow vs. une session fraîche par étape. |
max_repeated_output_lines | 8 | int | UI: AI Settings | Garde-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éfaut | Type | Scope | Description |
|---|---|---|---|---|
cli | "agent" | string | UI: AI Settings | Nom de l’exécutable Cursor Agent ou chemin absolu. |
model | "Auto" | string | UI: AI Settings | Le --model de Cursor Agent. "Auto" ou vide = sélection automatique. |
extra_args | [] | array | UI: AI Settings | Flags 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éfaut | Type | Scope | Description |
|---|---|---|---|---|
model | "" | string | UI: AI Settings | Id du modèle servi par l’endpoint (le <model> dans -m self_hosted/<model>). Requis quand actif. |
base_url | "" | string | UI: AI Settings | URL de l’endpoint compatible OpenAI (par ex. http://lm-studio:1234/v1). Requis quand actif. |
extra_args | [] | array | UI: AI Settings | Flags CLI supplémentaires (deny-list appliquée). |
allow_shared_default | false | bool | UI: AI Settings | Laisse les utilisateurs sans bearer personnel basculer sur le token par défaut du déploiement. |
context_limit | 32768 | int | UI: AI Settings | Fenêtre de contexte max (tokens) du modèle auto-hébergé. Faites-la correspondre à la longueur de contexte chargée par votre serveur. |
output_limit | 8192 | int | UI: AI Settings | Tokens de sortie max par réponse. |
Claude et Codex utilisent leurs propres sous-tables
[agent.providers.claude]/[agent.providers.codex]avecmodel,base_urletextra_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éfaut | Type | Scope | Description |
|---|---|---|---|---|
build_commands | [] | array | Bootstrap | Étapes bash -c optionnelles exécutées pendant le build d’image. |
compose_up_commands | [] | array | Bootstrap | Commandes 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éfaut | Type | Scope | Description |
|---|---|---|---|---|
ports | [] | array | Bootstrap | Ports 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_ports | 10 | int | Bootstrap | Ports de réserve pré-alloués pour le transfert automatique de dev-server. 0 désactive. |
theme | "" | string | Bootstrap | Thème de couleurs VS Code ; vide, l’éditeur utilise son propre défaut (par ex. "One Dark Pro"). |
extensions | [] | array | Bootstrap | IDs Marketplace à pré-installer (par ex. ["esbenp.prettier-vscode"]). |
settings | {} | table | Bootstrap | Ré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éfaut | Type | Scope | Description |
|---|---|---|---|---|
git_editor | (non défini) | string | Bootstrap | Paquet apt (par ex. "nano", "vim") installé dans chaque container d’éditeur ; git config core.editor est réglé dessus. |
setup_commands | [] | array | Bootstrap | Commandes shell exécutées une fois par durée de vie du container d’éditeur (protégées par un fichier marqueur). |
startup_commands | [] | array | Bootstrap | Commandes 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éfaut | Type | Scope | Description |
|---|---|---|---|---|
extra_egress_hosts 🔒 | [] | array | Bootstrap | Domaines 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 🔒 | false | bool | Bootstrap | Quand 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éfaut | Type | Scope | Description |
|---|---|---|---|---|
install_commands | [] | array | Bootstrap | Snippets 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éfaut | Type | Scope | Description |
|---|---|---|---|---|
mock_agent | false | bool | Bootstrap | Quand 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) | string | Bootstrap | Chemin 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_ms | 75 | int | Bootstrap | Délai entre les lignes de sortie du mock. |
mock_agent_total_ms | 5000 | int | Bootstrap | Duré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 (autrefoispre_install,install,pre_workflow, désormaisworktree_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.
| Variable | Rôle |
|---|---|
ANTHROPIC_API_KEY 🔒 | Clé API Claude (ou utilisez l’OAuth via claude login). |
ANTHROPIC_BASE_URL | Override 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_CONFIG | Chemin d’un config.toml alternatif. |
MAESTRO_DATA_DIR | Override du répertoire de données persistant (maestro.db, snapshots). |
MAESTRO_HOME | Override de la base home utilisée pour calculer MAESTRO_DATA_DIR. |
MAESTRO_DEV_MOCK_AGENT | 1 = 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"