> ## Documentation Index
> Fetch the complete documentation index at: https://docs.syntheo.studio/llms.txt
> Use this file to discover all available pages before exploring further.

# Référence de la CLI

> Commandes et options globales de la CLI Syntheo.

## Syntaxe générale

```text theme={null}
syntheo [--base DIR] [--db-path FILE] [--json] <commande>
```

| Option | Variable d'environnement | Effet |
| - | - | - |
| `--base DIR` | `SYNTHEO_BASE` | Utilise `DIR/app.db`. |
| `--db-path FILE` | `SYNTHEO_DB_PATH` | Utilise ce fichier SQLite précis. |
| `--json` | — | Produit une réponse JSON versionnée, ou une erreur JSON lisible par une machine. |

`--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](https://docs.syntheo.studio/fr/installation.md).

| Commande | Rôle |
| - | - |
| `doctor` | Vérifie la CLI et la connexion à la base, sans rien modifier. |
| `meetings` | Parcourt, exporte et importe des réunions. |
| `proposals` | Propose des modifications de réunion, à valider dans l'application. |
| `mcp` | Lance le serveur MCP Syntheo en stdio. |

## Source des réunions

Les commandes `meetings` acceptent `--source` avant leur sous-commande :

```bash theme={null}
syntheo meetings --source local list
```

`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

| Commande | Options | Résultat |
| - | - | - |
| `meetings list` | `-q, --query TEXTE`, `--series-id ID`, `--folder CHEMIN`, `--limit 1..200`, `--offset N` | Réunions, 20 par défaut. La recherche ignore la casse et porte sur le titre et l'identifiant. `--folder` inclut les sous-dossiers. Chaque réunion contient `folder_path`, `null` hors dossier. |
| `meetings folders` | `-q, --query TEXTE`, `--limit 1..200`, `--offset N` | Dossiers, avec `path`, `name` et `parent_path`, y compris les dossiers vides et parents. 100 par défaut. |
| `meetings get ID` | — | Métadonnées, note canonique, résumés, participants et actions. |
| `meetings note ID` | `--kind note\|summary\|all` | Les documents demandés. `note` par défaut. |
| `meetings transcript ID` | `--limit 1..500`, `--offset N` | Une page bornée de la transcription, en mots. 200 mots depuis l'offset 0 par défaut. |
| `meetings history ID` | `--limit 1..200`, `--offset N` | Une page des réunions de la même série récurrente. 20 depuis l'offset 0 par défaut. |
| `meetings export ID` | `--format markdown\|json`, `-o, --output FICHIER`, `--force` | Export complet, transcriptions comprises. Markdown sur la sortie standard par défaut. Un fichier existant n'est remplacé qu'avec `--force`, qui exige `--output`. |

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

```bash theme={null}
syntheo --json meetings import ./webinaire.mp3 --title "Webinaire" --folder "Recherche" --request-key webinaire-2026-10 --wait
syntheo --json meetings import-status JOB_ID
syntheo --json meetings get MEETING_ID
```

| Commande | Options | Résultat |
| - | - | - |
| `meetings import FICHIER` | `--title TITRE`, `--folder CHEMIN`, `--request-key CLÉ`, `--wait`, `--timeout SECONDES` | Crée une réunion et met en file la transcription du fichier par l'application. |
| `meetings import-status ID` | — | État durable d'une tâche d'import. |

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.

| Commande | Options | Résultat |
| - | - | - |
| `proposals create` | `--meeting ID`, `--kind summary\|memo`, `--target ID`, `--content TEXTE` ou `--content-file FICHIER` | Prépare un remplacement en attente. `--target` est obligatoire quand la réunion a plusieurs résumés. |
| `proposals list` | `--meeting ID`, `--status pending\|applied\|declined\|all`, `--limit 1..200`, `--offset N` | Propositions, des plus récentes aux plus anciennes. Par défaut, celles en attente, 20 résultats. |
| `proposals show ID` | — | Métadonnées de la proposition et diff unifié. |
| `proposals decline ID` | — | Refuse une proposition en attente. La réunion ne change pas. |

## Contrat de réponse JSON

Avec `--json`, une réponse réussie contient :

| Champ | Signification |
| - | - |
| `schema_version` | Version du contrat JSON de la CLI. Actuellement `"1"`. |
| `command` | Identifiant stable de la commande, par exemple `meetings.list`. |
| `data` | Résultat de la commande. |
| `pagination` | Présent pour les commandes paginées. |

`pagination` contient `offset`, `limit`, `returned`, et éventuellement `total` et `next_offset`.

Les erreurs sont décrites dans [Erreurs et codes de sortie](https://docs.syntheo.studio/fr/reference/errors.md).

## Commande doctor

```bash theme={null}
syntheo --json 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

```bash theme={null}
syntheo 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](https://docs.syntheo.studio/fr/reference/mcp.md).

> [!WARNING]
>
> N'écrivez rien d'autre sur la sortie standard du serveur : toute autre sortie corrompt le flux du protocole MCP.

## Aide et version

```bash theme={null}
syntheo --help
syntheo meetings --help
syntheo meetings list --help
syntheo --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.

> [!NOTE]
>
> 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.

| Commande | Options | Rôle |
| - | - | - |
| `meetings capabilities` | — | Décrit les capacités de capture gérée, sans ouvrir de base. |
| `meetings initialize-managed` | — | Prépare la base locale à partir d'une politique gérée existante. |
| `meetings hold-list` | `--after ID`, `--limit 1..200`, `--database-only` | Liste toutes les réunions persistées, y compris supprimées, pour conservation. |
| `meetings hold-export ID` | `--database-only` | Diffuse l'historique brut d'une réunion en NDJSON, pour une conservation chiffrée. |
| `meetings pilot-usage` | `--from-ms MS`, `--until-ms MS` | Lit les intervalles de capture locaux, sans contenu ni identifiant de réunion. |
| `meetings delete ID` | `--if-export-sha256 HASH`, `--require-transcription-complete` | Supprime définitivement une réunion locale terminée. |

### `meetings initialize-managed`

```bash theme={null}
syntheo --json meetings --source local 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`

```bash theme={null}
syntheo --json meetings --source local hold-list --limit 200
```

É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`

```bash theme={null}
syntheo --json meetings --source local hold-export MEETING_ID
```

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`

```bash theme={null}
syntheo --json meetings --source local pilot-usage --from-ms 1767225600000 --until-ms 1769904000000
```

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`

```bash theme={null}
syntheo --json meetings --source local delete MEETING_ID --if-export-sha256 HASH --require-transcription-complete
```

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.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.