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

# Référence CLI

> La surface en ligne de commande d'oximail, groupée par domaine : installation, comptes, courrier, filtrage, sécurité, stockage, conformité et diagnostics. Les conventions partagées par tous les verbes.

Tout ce qu'on peut demander au serveur sans passer par l'API HTTP est une sous-commande `oximail`. Cette page cartographie la surface ; `oximail <commande> --help` reste la référence qui fait foi pour les options, et les pages de fonctionnalités expliquent les parcours.

## Conventions

* **`--config <chemin>`** : chaque commande qui touche la base le prend ; défaut `/etc/oximail/oximail.toml`.
* **`--tenant-id <id>`** (alias `--tenant`) : défaut `default`. Quand une commande prend `--account <email>` à la place, la recherche par adresse résout sa propre organisation.
* **Sélection de compte** : les commandes acceptent `--account <email>` ou `--account-id <id>`, mutuellement exclusifs.
* **Les commandes destructrices demandent confirmation.** Un `[y/N]`, sauté seulement par un `--yes` explicite (pour les scripts).
* **Les commandes de réparation simulent par défaut.** `dedupe-folders`, `dedupe-tasks`, `blob promote-room-blobs` et leurs semblables affichent leur plan et ne touchent à rien avant `--apply`.

## La carte des commandes

### Serveur & installation

| Commande                          | Rôle                                                                                                                                                  |
| --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| `serve`                           | Lancer le serveur (ce qu'appelle l'unité systemd).                                                                                                    |
| `setup`                           | L'[assistant de premier démarrage](../first-boot) ; les sous-commandes `dns`, `dkim`, `admin`, `verify`, `relay-preflight` rejouent une étape isolée. |
| `setup-dkim`                      | Générer une paire de clés DKIM et afficher l'enregistrement DNS.                                                                                      |
| `firstboot`, `print-systemd-unit` | Aides au provisionnement sans écran.                                                                                                                  |
| `check-dns`                       | Notation DNS en direct d'un domaine de courrier ([authentification](./email-auth-security)).                                                          |
| `check-config`                    | Valider un fichier TOML sans démarrer le serveur.                                                                                                     |

### Comptes & organisations

| Commande                                                             | Rôle                                                                                                               |
| -------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| `account create` / `create-shared` / `list`                          | Provisionner les comptes humains et les [comptes d'équipe partagés](./multi-tenancy).                              |
| `account set-password` / `set-role` / `enable` / `disable` / `quota` | Cycle de vie et limites.                                                                                           |
| `account delete [--dsar <ref>]`                                      | Mettre en file la [machine à phases d'effacement](./compliance).                                                   |
| `account custodian show\|reattach`                                   | La garde des drives partagés.                                                                                      |
| `account relay add-domain\|verify\|list\|mint-token\|revoke-tokens`  | Les [comptes de relais smarthost](./outbound-relay).                                                               |
| `account envelope-domain add\|verify\|list\|remove`                  | Les [grants de domaine d'enveloppe](./bulk-sending) (Return-Path différent du From, prouvés par DNS).              |
| `account dedupe-folders` / `dedupe-tasks`                            | Réparations d'après migration ([travail collaboratif](./groupware)).                                               |
| `account regenerate-key`                                             | Régénération de paire de clés **destructrice** (les anciens blobs deviennent illisibles).                          |
| `tenant create\|update\|list`                                        | Les organisations ; `update --default-timezone` règle le fuseau de repli du calendrier.                            |
| `admin`, `alias`, `rights`, `token`, `sessions`                      | Principals d'administration, alias d'adresses, inspection des droits, gestion des tokens et des sessions.          |
| `principal-reconcile`                                                | Un coup hors ligne : refrapper les identifiants de principal de la cohorte d'import héritée (`--dry-run` accepté). |

### Courrier, filtrage & collaboratif

| Commande           | Rôle                                                                                                                                               |
| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| `mailbox`, `email` | Inspecter et gérer dossiers et messages.                                                                                                           |
| `sieve`, `rule`    | Les deux [couches de filtrage](./sieve-rules).                                                                                                     |
| `queue`            | La file de remise sortante : lister, inspecter, annuler.                                                                                           |
| `spam`             | Corpus et modèle anti-spam, plus le `spam check` en lecture seule ([anti-spam](./anti-spam)).                                                      |
| `calendar`         | Verbes de maintenance des agendas.                                                                                                                 |
| `migrate`          | L'[outil d'import](./migration) (`--from-imap`, `--from-jmap`, `--from-dump`, `--from-mbox`, `--from-google-takeout`, `--from-vcf`, `--from-ics`). |

### Conformité

| Commande                                        | Rôle                                                                  |
| ----------------------------------------------- | --------------------------------------------------------------------- |
| `journaling list\|add\|remove\|enable\|disable` | Les [règles de journalisation](./compliance).                         |
| `erasure list\|undo\|prove`                     | Les travaux d'effacement, le tampon de réversibilité, la preuve DSAR. |

### Sécurité & TLS

| Commande                                   | Rôle                                                                                                                          |
| ------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------- |
| `ban list\|add`, `unban <ip>`              | Le fail2ban intégré au binaire.                                                                                               |
| `cert`, `dane`, `dkim`, `tls-rpt`, `vapid` | Certificats, enregistrements TLSA, clés DKIM, TLS-RPT, clés de push web.                                                      |
| `key`                                      | Opérations sur les clés au repos (rotation, exercice de séquestre) : voir [chiffrement au repos](./encryption-at-rest).       |
| `hash-password`                            | Un hachage Argon2id pour les fichiers de configuration.                                                                       |
| `passkey list\|revoke`                     | Lister et révoquer les passkeys WebAuthn d'un compte : la porte hors bande quand c'est le webmail lui-même qui est compromis. |

### Stockage & maintenance

| Commande                                | Rôle                                                                                                                                                                                            |
| --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `backup`, `restore`, `verify-backup`    | Les [sauvegardes](./operations).                                                                                                                                                                |
| `reindex`                               | Reconstruire l'index de recherche.                                                                                                                                                              |
| `blob`, `blobs`                         | Maintenance des blobs : `promote-room-blobs`, le ramasse-miettes des blobs non référencés `blobs gc` (simulation par défaut, `--apply` supprime, serveur arrêté) et les passes de ré-enveloppe. |
| `encrypt-blobs`, `migrate-db`, `sql`    | Migrations de stockage et une échappatoire SQL gardée.                                                                                                                                          |
| `backfill-*`, `decode-attachment-names` | Remplissages en un coup pour les colonnes nées après les données.                                                                                                                               |
| `volume-recover`, `rollback-guard`      | Gardes de reprise après sinistre.                                                                                                                                                               |
| `chat-rekey`                            | La mécanique de rechiffrement des identités de chat.                                                                                                                                            |

### Diagnostics

| Commande                     | Rôle                                                                                       |
| ---------------------------- | ------------------------------------------------------------------------------------------ |
| `status`, `health`, `doctor` | Contrôles locaux : processus, ports, configuration, stockage, santé de l'horloge comprise. |

### Deux comportements des verbes de maintenance

**`sql` route sur la forme du statement, pas sur son premier mot.** Il reniflait auparavant le préfixe : une CTE, `WITH ... SELECT`, était donc prise pour une mutation, exécutée, ses lignes jetées, et rapportée en `0 rows affected`. Un statement qui retourne des données rapporté comme une écriture réussie est exactement l'échec muet que ce projet interdit, et c'est plus grave encore sur un verbe auquel les scripts font confiance. Chaque statement est désormais préparé puis routé selon qu'il retourne des colonnes, ce qui rend correct au passage `VALUES`, `EXPLAIN` et `INSERT ... RETURNING`, tandis qu'un `WITH ... INSERT` reste sur le chemin d'écriture et se voit compté. Une entrée multi-statements garde la sémantique de lot (tout s'exécute, arrêt à la première erreur, les écritures antérieures tiennent) et compte désormais **par statement**. Les lignes de résultat vont sur stdout, les comptages sur stderr : la sortie reste redirigeable.

**`blobs gc` ne collecte pas un blob non référencé récent.** Entre le téléversement d'un client et le `/set` qui le nomme, un blob est non référencé par protocole (RFC 8620 §6.1). Le ramasse-miettes ignore tout ce qui est non référencé et plus jeune qu'une fenêtre de grâce de 24 heures, lue sur l'horodatage du fichier lui-même : un horodatage illisible ou situé dans le futur conserve le fichier. Le résumé compte séparément les « non référencés mais en grâce », pour que le nombre soit visible au lieu d'être sous-entendu.

## Où s'arrête la CLI

La CLI couvre le provisionnement, la maintenance et la réparation. L'administration des *données* au quotidien (surcharges de configuration à l'exécution, liste des bannissements en HTTP, vérification de version) existe aussi sur l'[API REST d'administration](../developer/admin-api), et les règles de journalisation se gèrent tout autant en JMAP d'administration. CLI et API sont des adaptateurs minces au-dessus de la même orchestration : une opération se comporte à l'identique quel que soit son point d'entrée.
