Workflow d'extraction de voix
Déclencheurs
- voice extract / voice contract / voice yaml
- learn my voice / mimic this voice / write like
- exemplars / reference posts
- voice_proposed / voice approve
- voice lint failed
Procédure : extraire un contrat de voix
- Vérifier les exemplars.
file_list data/companies/<slug>/exemplars/récursif. S'attendre àtwitter/,email/, etc. avec 2+ fichiers.mdpar canal. Si vide : indiquer le chemin à l'opérateur, ne pas scraper. voice_extract(company_id=<slug>, channel=<optional>). Nécessite ≥2 exemplars par canal analysés. Écritvoice_proposed.yaml.- Montrer à l'opérateur :
elophanto voice proposed <slug>(ou file_read). Mettre en avant persona / ton / phrases interdites / hooks / limites de longueur. - L'opérateur valide :
- Approuver →
elophanto voice approve <slug>(sauvegarde le voice.yaml existant, valide la proposition). - Rejeter →
elophanto voice reject <slug> "<reason>"archive avec raison ; le prochain extract la lit.
- Approuver →
- Les futurs brouillons se lintent automatiquement contre le contrat.
Quand un lint de brouillon échoue
ToolResult nomme les violations d'erreur (ex. voice lint failed: banned phrase 'leverage'; too long: 312 chars (max 240)).
- Par défaut : réviser le corps en respectant les contraintes. Le LLM le fait naturellement au prochain cycle de planification.
- Rare : le contrat est obsolète. Informer l'opérateur + demander des exemplars nouveaux.
- Ne jamais contourner via live tool pour ignorer la porte du brouillon.
Quand aucun voice.yaml n'existe
Le lint est fail-soft (accepte tout). État jour 0. Informer l'opérateur que le contrat est vide + pointer sur le chemin exemplars/. Tant qu'il manque, utiliser par défaut les principes [[b2c-marketing-voice]] (pas de « leverage », objet concret en avant, etc.).
Règles strictes
- ❌ Ne jamais promouvoir
voice_proposed.yaml→voice.yamltoi-même. Opérateur uniquement. - ❌ Ne jamais scraper d'URLs pour les exemplars — l'opérateur colle volontairement.
- ❌ Ne jamais écrire
voice.yamldirectement via file_write. - ❌ Ne jamais linter un brouillon contre la voix d'une autre entreprise — définir d'abord la contextvar.
Vérifier
- [ ] ≥2 exemplars par canal avant
voice_extract - [ ]
voice_proposed.yamlécrit (pasvoice.yaml) - [ ] En cas d'échec du lint : corps révisé, pas de live tool appelé