Définitions de workflow

Vous définissez et éditez vos workflows dans le dashboard : ouvrez Configuration → Workflows, où chaque workflow est une liste d’étapes nommée et ordonnée, stockée par utilisateur et par workspace. C’est la source de vérité à l’exécution.

Les fichiers *.toml du répertoire workflows/ (relatif à votre config.toml) sont les valeurs par défaut. La première fois que Takuto Core rencontre un nouvel utilisateur/workspace, il amorce les workflows de ce workspace à partir d’eux ; éditer le TOML par la suite ne change pas les workflows déjà amorcés — modifiez ceux-là dans le dashboard. Partez de vos valeurs par défaut à partir des exemples fournis dans le dépôt Takuto Core :

cp workflows/implement_ticket.example.toml workflows/implement_ticket.toml

Le reste de cette page documente cette forme TOML — c’est le format des fichiers d’amorçage, et une référence pratique pour les mêmes champs que vous éditez dans le dashboard.

Structure d’un fichier

Chaque fichier a un name de premier niveau, un depends_on optionnel, et une ou plusieurs [[steps]] :

name = "Implement Ticket"

[[steps]]
name = "Implement ticket"
prompt = """
Follow the instructions below:
{description}
"""
repeat = 1

Champs d’une étape

ChampDescription
nameNom lisible de l’étape (affiché sur le dashboard).
promptPrompt multi-ligne envoyé à l’agent. Le contexte du ticket est injecté via des placeholders.
commandsUne étape de commande — des commandes shell déterministes au lieu d’un prompt d’agent. Mutuellement exclusif avec prompt/skills. Les étapes de commande ne consomment aucun token IA.
repeatCombien de fois ré-exécuter cette étape (par défaut 1).
when"always" (par défaut) | "ticketing" | "no_ticketing" — conditionne une étape selon qu’un système de ticketing est configuré ou non.
skillsSkills Claude/Cursor optionnels à invoquer : [{ name = "skill-name", args = ["--flag"] }].

Enchaîner les workflows avec depends_on

Une définition avec depends_on = ["implement_ticket"] ne devient disponible sur une carte de workflow qu’après la fin du flow implement_ticket. C’est ainsi que sont câblés les suivis « Merge base branch » et « Address PR comments » — ils tournent dans le même worktree une fois le flow principal terminé.

Placeholders de prompt

Ce sont les placeholders runtime de Takuto Core — accolades simples. Écrivez-les littéralement dans vos prompts. Ils n’ont aucun rapport avec les build tokens de ce site.

PlaceholderDescription
{description}Texte de description du ticket/issue.
{ticket_key}Identifiant du ticket (par ex. PROJ-123, #42).
{ticket_summary}Titre du ticket.
{ticket_context}Résumé formaté : clé, titre, description, critères d’acceptation.
{ticket_type}Libellé de type (Bug, Story, Task).
{acceptance_criteria}Champ des critères d’acceptation, si disponible.
{base_branch}Branche cible de la PR (par ex. main, develop).
{pr_url}URL de la PR — disponible dans les étapes de revue / merge-base.

Le linting, les tests et l’ouverture de la PR sont des prompts d’étapes d’agent, pas des étapes du moteur. Une étape qui affiche MAESTRO_PR_URL: <url> ou qui écrit .takuto/outcome.toml permet à Takuto Core d’enregistrer l’URL de la PR et de faire apparaître l’action Address PR Comments.

Les trois workflows d’exemple

L’assistant de configuration (et le dossier d’exemples) fournit trois définitions prêtes à l’emploi.

1. implement_ticket.toml — le pipeline principal

Un pipeline complet implémenter → relire → committer → lint/test → PR. Notez les deux étapes Implement ticket conditionnées par when : une pour le mode sans ticketing (utilise {description}) et une pour le mode ticketing (lit le ticket depuis le system prompt).

name = "Implement Ticket"

# Implémentation (sans système de ticketing)
[[steps]]
name = "Implement ticket"
prompt = """
Follow the instructions provided below:
{description}

BOUNDARIES: This step covers implementation only.
- Do NOT commit any changes — a dedicated "Commit changes" step follows.
- Do NOT create a PR — a dedicated "Create PR" step follows.

SCOPE CONSTRAINT: Only implement what is explicitly described above. Do not refactor
unrelated code; leave a # TODO if you spot something out of scope.
"""
when = "no_ticketing"
repeat = 1

# Implémentation (avec système de ticketing)
[[steps]]
name = "Implement ticket"
prompt = """
Follow the instructions in the system prompt.
(same boundaries and scope rules as above)
"""
when = "ticketing"
repeat = 1

# Revue des changements — lancée deux fois
[[steps]]
name = "Review changes"
prompt = """
Ticket context:
{ticket_context}

Review all changes on this branch relative to `{base_branch}`
(i.e. `git diff {base_branch}...HEAD`). Only address issues in code changed for this
ticket. Confirm each finding is genuine before fixing it. Do not create a PR.
"""
repeat = 2

# Commit des changements
[[steps]]
name = "Commit changes"
prompt = """
Commit the work into logical, conventional commits. Never run git checkout/restore/
reset/clean/stash — only create commits. Do not create a PR.
"""
repeat = 1

# Lint et test
[[steps]]
name = "Lint and test"
prompt = """
Run the project's linter and fix all issues; run the test suite and fix failures
(never delete or skip tests); run the formatter. Commit with
`chore: fix lint warnings, format, and failing tests`. Do not create a PR.
"""
repeat = 1

# Création de la PR — via le skill create-pr
[[steps]]
name = "Create PR"
prompt = """
Ticket context:
{ticket_context}

The PR title must be a conventional commit message and must not contain the workflow
name, branch name, or ticket ID.
"""

[[steps.skills]]
name = "create-pr"
args = ["--no-draft"]
repeat = 1

2. address_pr_comments.toml — la boucle de revue

Dépend de implement_ticket. Utilise {pr_url} pour récupérer les commentaires de revue non résolus, les corriger, puis relancer lint/tests.

name = "Address PR Comments"
depends_on = ["implement_ticket"]

[[steps]]
name = "Fix review comments"
prompt = """
Pull request URL: {pr_url}

Ticket context:
{ticket_context}

Retrieve all unresolved PR review comments. For each: make the change, verify it
locally, commit with a descriptive message, and push to the PR branch. Do not bypass
linting or tests.
"""
repeat = 1

[[steps]]
name = "Lint and test"
prompt = """
Run the linter, test suite, and formatter; fix all issues; commit with
`chore: fix lint warnings, format, and failing tests`.
"""
repeat = 1

3. merge_base.toml — garder la branche à jour

Dépend de implement_ticket. Récupère et fusionne la branche de base dans la branche de fonctionnalité, résout les conflits, puis relance lint/tests.

name = "Merge Base Branch"
depends_on = ["implement_ticket"]

[[steps]]
name = "Merge base branch"
prompt = """
Fetch the latest `{base_branch}` from remote and merge it into the current branch.
Resolve conflicts — prefer the current branch for feature code, the base branch for
config/dependency files unless they conflict with this ticket's work. Run lint and
tests after the merge, then commit and push.
"""
repeat = 1

Étapes de commande et commandes de run

Pour le travail déterministe comme le linting ou le build, une étape de commande (commands = [...]) exécute des commandes shell directement et ne consomme aucun token IA. Séparément, les commandes de run (configurées par utilisateur depuis Configuration → Worktree Settings) apparaissent comme des boutons sur les cartes de workflow terminées — par ex. « Dev Server », « Storybook » — avec un transfert de port automatique au démarrage d’un serveur.

Voir Comment ça marche pour situer ces étapes dans le cycle de vie.