Skip to main content

Syntaxe générale

--db-path est prioritaire sur --base. Sans l’une ni l’autre, la CLI cherche syntheo/app.db, puis fr.willisback.syntheo/app.db, dans le dossier de données du système (~/.local/share sous Linux, %APPDATA% sous Windows). Voir Installer la CLI.

Source des réunions

Les commandes meetings acceptent --source avant leur sous-commande :
local, la valeur par défaut, lit la base de cet ordinateur. auto est conservé comme alias de local. Il n’existe pas d’autre source. La variable SYNTHEO_SOURCE a le même effet que l’option.

Commandes de lecture et d’export

Les exports Markdown présentent la transcription en paragraphes attribués aux locuteurs quand cette information existe au niveau des mots. Sinon, ils gardent le texte brut de la transcription. Les exports JSON peuvent contenir un champ speakers avec les noms utilisés.

Importer un enregistrement

L’application doit être ouverte sur la même base : sans elle, l’import est refusé. Elle transcrit le fichier avec le serveur de transcription configuré dans l’application, puis génère le résumé avec le LLM configuré. L’audio est envoyé à ce serveur.
  • Formats acceptés : WAV, MP3, OGG, MP4, M4A, FLAC, WebM, AAC. Le fichier doit être non vide et lisible sur la machine qui exécute la CLI. Les fichiers de sous-titres ou de transcription ne sont pas acceptés.
  • Le fichier n’est pas copié : l’application le lit à son emplacement d’origine. Ne le déplacez pas et ne le supprimez pas avant la fin de la tâche.
  • --title vaut par défaut le nom du fichier sans extension. --folder doit désigner un dossier existant (voir meetings folders).
  • --request-key (1 à 200 octets) rend l’import rejouable : réutilisez la même clé pour réessayer le même import, et il renvoie la tâche et la réunion d’origine, même après un échec. Un nouvel import exige une nouvelle clé.
Le résultat contient meeting_id, job_id, processing_status, summary_status et error (éventuellement null). processing_status passe par queued, importing, transcribing, summarizing, puis done ou failed. summary_status vaut pending, done, skipped_no_model, skipped_too_short ou failed : done pour le traitement ne garantit donc pas qu’un résumé a été généré. --wait attend un état final. --timeout vaut 3600 secondes par défaut (de 1 à 86400). Codes de sortie : 0 pour une soumission ou une fin réussie, 1 pour un échec, 2 si l’attente expire. L’expiration ou l’interruption de la CLI n’annule pas la tâche : continuez avec import-status. Une tâche interrompue en cours de route est marquée failed ; les données déjà produites sont conservées. Les identifiants de commande JSON sont meetings.import et meetings.import_status.

Commandes de proposition

Ces commandes créent ou consultent des modifications en attente. Elles n’appliquent jamais la modification : l’application s’en charge, après validation par l’utilisateur.

Contrat de réponse JSON

Avec --json, une réponse réussie contient : pagination contient offset, limit, returned, et éventuellement total et next_offset. Les erreurs sont décrites dans Erreurs et codes de sortie.

Commande doctor

Vérifie le chemin de base retenu, l’ouverture en lecture seule et le schéma attendu, sans rien modifier. Le rapport contient cli_version, ready et database (path, exists, opened_read_only, schema_ready, error). Code de sortie 0 si ready vaut true, 1 sinon.

Commande mcp

Lance le serveur MCP local en stdio. Les lectures sont idempotentes. Les outils de proposition préparent ou refusent des modifications sans les appliquer. Voir la référence MCP.
N’écrivez rien d’autre sur la sortie standard du serveur : toute autre sortie corrompt le flux du protocole MCP.

Aide et version

Commandes de capture gérée

Ces commandes servent aux déploiements administrés (conservation légale, mesure d’usage). Elles ne fonctionnent qu’avec la base locale. Plusieurs exigent --json ou --source local explicite, comme indiqué ci-dessous.
Syntheo ne conserve aucun fichier audio. Les éléments qui concernent des fichiers d’enregistrement (recording_locations, suppression des enregistrements) sont donc normalement vides ou sans effet.

meetings initialize-managed

Crée ou migre la base locale avant le premier lancement de l’application. Exige --source local, l’application fermée et un fichier managed_settings.json (version 1, objet settings) à côté de app.db, qui désactive l’intelligence (intelligence_disabled: true).

meetings hold-list

Énumère, par ordre d’identifiant, les réunions conservées dans la base, y compris les lignes supprimées logiquement. Exige --json. Pagination par clé : passez le dernier identifiant reçu à --after ; un tableau data.ids vide termine l’inventaire. --database-only ignore la découverte de fichiers sur disque.

meetings hold-export

Diffuse en NDJSON, depuis une seule transaction de lecture, les cellules de base et révisions propres à la réunion. Exige --json. Chaque ligne est bornée ; une empreinte SHA-256 finale couvre toutes les lignes précédentes. L’absence de ligne de fin signale un instantané incomplet. L’archive exclut les réglages globaux, les identifiants de fournisseurs et les autres réunions. Avec --database-only, elle ignore la découverte de fichiers et renvoie recording_files_separate: true. Cette archive de conservation est distincte de l’export ordinaire.

meetings pilot-usage

Exige --json et --source local. --from-ms et --until-ms sont des millisecondes Unix, pour une fenêtre UTC semi-ouverte de 366 jours au plus. Renvoie les intervalles de capture et des compteurs de couverture (unmeasured_stops, invalid_metadata_records, pending_sessions, legacy_sessions_without_measurement), sans identifiant, texte, titre ni participant. Un résultat vide ne prouve pas qu’aucune réunion n’a eu lieu. Rien n’est envoyé automatiquement.

meetings delete

Supprime définitivement une réunion locale terminée : historique des documents, transcriptions et index de recherche dérivé. Exige --source local, --if-export-sha256 (le SHA-256 de l’export JSON complet, tel qu’imprimé sur la sortie standard avec son retour à la ligne final, ou tel qu’enregistré avec --output) et --require-transcription-complete. Fermez l’application avant. Un export modifié, une transcription inachevé ou une proposition en attente empêche la suppression. Une suppression interrompue reprend avec le même identifiant et la même empreinte.