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

# Formats sur disque de Devin en air gap

> Emplacements de fichiers stables de Devin Desktop et de la CLI en air gap sous macOS, Linux et Windows, ainsi que le schéma JSONL du journal d’audit et des exemples pour l’ingestion dans un SIEM.

> [!NOTE]
>
> Cette documentation concerne les déploiements fédéraux de Devin. [Retour à la documentation de Devin](/fr/get-started/devin-intro)

La CLI et Desktop en air gap stockent l’intégralité de leur état dans un nombre restreint de fichiers aux formats documentés et stables. Cette page indique l’emplacement de chaque fichier, ceux que vous devez créer vous-même, ainsi que le schéma exact du journal d’audit, pour que vous puissiez le transmettre à votre SIEM.

***

## Emplacement des fichiers

### Fichiers que vous créez

Il s’agit des entrées appliquées à l’échelle de la machine. Chacune possède un chemin par défaut, qu’une variable d’environnement permet de remplacer ; cette variable doit être définie dans l’environnement à partir duquel l’agent démarre (voir [Variables d’environnement des clés d’API](/fr/federal/air-gapped/models-file#api-key-environment-variables) pour savoir comment procéder avec Desktop).

| Fichier | Chemin par défaut | Dérogation | Format | Documentation |
| - | - | - | - | - |
| Licence | `/etc/devin/license.devin-onprem-license` | `DEVIN_LICENSE_FILE` | Token signé, sur une seule ligne | [Licence](/fr/federal/air-gapped/license) |
| Fichier des modèles | `/etc/devin/models.json` | `DEVIN_MODELS_FILE` | JSON, `"version": 0` | [Fichier des modèles](/fr/federal/air-gapped/models-file) |
| Fichier d’authentification (facultatif, active le SSO) | `/etc/devin/auth.json` | `DEVIN_AUTH_FILE` | JSON, `"version": 0` | [SSO](/fr/federal/air-gapped/sso) |
| Paquet de CA (facultatif) | aucun | `DEVIN_CA_BUNDLE` | PEM | [Réseau et certificats](/fr/federal/air-gapped/network-and-certificates) |
| Politique à l’échelle de la machine (facultatif) | Linux `/etc/devin/system.json`, macOS `/Library/Application Support/Devin/system.json` | aucune | JSON | [Configuration système de la CLI](/fr/cli/enterprise/system-config) |

Les valeurs par défaut sont identiques sous macOS et Linux. Sous Windows, la licence, le fichier des modèles et le fichier d’authentification se trouvent par défaut dans `C:\ProgramData\Devin\` (`license.devin-onprem-license`, `models.json`, `auth.json`), le fichier de politique à l’échelle de la machine est `C:\ProgramData\Devin\system.json`, et les variables de dérogation restent les mêmes ; [verrouillez le dossier](/fr/federal/air-gapped/install#windows-lock-down-the-configuration-folder) avant d’y placer des fichiers. La CLI lit ces fichiers sans jamais y écrire : vous pouvez donc les gérer avec vos outils de gestion de configuration et les passer en lecture seule.

### État par utilisateur écrit par la CLI

La CLI suit la structure de répertoires de base XDG sous macOS **comme** sous Linux (elle n'utilise pas `~/Library` pour son propre état). Les variables `XDG_CONFIG_HOME` et `XDG_DATA_HOME` sont prises en compte lorsqu'elles sont définies.

| Chemin | Contenu |
| - | - |
| `~/.config/devin/config.json` | Configuration utilisateur partagée avec la Devin CLI standard (autorisations, `proxy`, etc.). Ne contient jamais de credentials. Consultez la [référence du fichier de configuration de la CLI](/fr/cli/reference/configuration/config-file). |
| `~/.config/devin/mcp_config.json` | Serveurs MCP configurés localement. |
| `~/.local/share/devin/sso_tokens.toml` | Cache des jetons SSO écrit par `devin auth login`, avec des autorisations réservées au propriétaire (`0600`). Supprimé par `devin auth logout`. |
| `~/.local/share/devin/cli-federal/sessions.db` | Historique des sessions (SQLite). Contient le contenu des conversations ; à traiter comme une donnée sensible. |
| `~/.local/share/devin/cli-federal/audit/` | Répertoire du journal d’audit : `audit.jsonl`, les fichiers `audit-<timestamp>.jsonl` issus de la rotation et le verrou consultatif `.audit.lock`. Schéma ci-dessous. |

`cli-federal` est le sous-répertoire produit utilisé par le build en air gap ; il isole cet état de toute installation standard de la Devin CLI présente sur la même machine, laquelle utilise `cli`.

Sous Windows, la CLI ne lit pas les variables `XDG_*`. Elle conserve les mêmes fichiers dans `%APPDATA%\devin\`, et son cache dans `%LOCALAPPDATA%\devin\` :

| Chemin (Windows) | Contenu |
| - | - |
| `%APPDATA%\devin\config.json` | Configuration utilisateur, comme ci-dessus. |
| `%APPDATA%\devin\mcp_config.json` | Serveurs MCP configurés localement. |
| `%APPDATA%\devin\sso_tokens.toml` | Cache des jetons SSO. |
| `%APPDATA%\devin\cli-federal\sessions.db` | Historique des sessions (SQLite). |
| `%APPDATA%\devin\cli-federal\audit\` | Répertoire du journal d’audit. |

### État spécifique à Desktop

L'application Desktop est isolée de toute autre installation de Devin Desktop ou de Windsurf sur la même machine :

| Chemin | Contenu |
| - | - |
| `~/.devin-airgap-config/` | Un `XDG_CONFIG_HOME` isolé que Desktop transmet à l'agent intégré. À l'intérieur, `devin/config.json` est un lien symbolique vers le véritable `~/.config/devin/config.json` : la CLI et l'agent intégré partagent ainsi une seule et même configuration utilisateur. Aucun autre élément de `~/.config/devin/` (notamment `mcp_config.json`) n'est visible par l'agent dans Desktop. |
| `~/.devin-airgap/` | Répertoire des extensions de Desktop. |
| `~/.codeium/windsurf-airgap/` | État du language-server. |
| Linux `~/.config/Devin - Airgap/`, macOS `~/Library/Application Support/Devin - Airgap/` | Données utilisateur de Desktop : `User/settings.json` (y compris `devin.acp.agentEnv`), état des fenêtres. |

Le lien symbolique n'est créé au démarrage de Desktop que si rien n'existe encore à l'emplacement `~/.devin-airgap-config/devin/config.json`. Si un fichier ordinaire s'y trouve déjà, Desktop le laisse tel quel et l'agent intégré utilise ce fichier à la place du fichier partagé ; le canal de sortie **Devin ACP** consigne alors une ligne `WARNING: … is a regular file, not a symlink`. Supprimez le fichier et redémarrez Desktop pour rétablir le lien.

Sous Windows, il n'y a pas de lien symbolique. L'agent intégré de Desktop et la CLI partagent directement `%APPDATA%\devin\config.json`, et Desktop ne charge pas le fichier `%APPDATA%\devin\mcp_config.json` de l'utilisateur. Les données utilisateur de Desktop se trouvent dans `%APPDATA%\Devin - Airgap\`.

Pour repartir de zéro lors d'une réinstallation, seuls `~/.devin-airgap-config/` et `~/.devin-airgap/` peuvent être supprimés sans risque. `~/.config/devin/` et `~/.local/share/devin/` sont également utilisés par la CLI autonome.

## Journal d’audit

La CLI en air gap écrit un journal d’audit local, structuré et en ajout seul (append-only). Il est toujours actif (aucune option ne permet de le désactiver), n’existe dans aucun autre build de Devin et est enregistré sur le poste de travail pour votre propre revue et pour l’ingestion dans votre SIEM.

### Emplacement et rotation

| Propriété | Valeur |
| - | - |
| Fichier actif | `~/.local/share/devin/cli-federal/audit/audit.jsonl` (Windows : `%APPDATA%\devin\cli-federal\audit\audit.jsonl`) |
| Format | JSON Lines : un objet JSON autonome par ligne, encodé en UTF-8 |
| Autorisations | Le répertoire et les fichiers sont créés avec un accès réservé au propriétaire (`0600`) |
| Rotation | Lorsque `audit.jsonl` atteint 10 Mio, il est renommé en `audit-<UTC timestamp>.jsonl` (par exemple `audit-20260127T234500123Z.jsonl`) et un nouveau fichier est créé |
| Rétention | Au plus 10 fichiers archivés par rotation sont conservés ; les plus anciens sont supprimés en premier |
| Concurrence | La rotation est protégée par le verrou consultatif `.audit.lock`, ce qui empêche toute double rotation par des processus CLI concurrents |

Si vous avez besoin d'une rétention illimitée, transférez les fichiers archivés par rotation vers votre SIEM avant leur suppression. Comme la CLI se contente d'ajouter des lignes sans jamais réécrire les lignes existantes, un collecteur standard de suivi de fichiers suffit ; consultez [Transférer le journal d’audit vers votre SIEM](#forward-the-audit-log-to-your-siem).

### Garanties de masquage

Les événements ne contiennent que des chemins et des métadonnées. Le journal ne contient jamais de prompts, de réponses du modèle, de code, de contenu de fichiers, de valeurs secrètes, de clés API ni de lignes de commande shell complètes : pour les outils shell, seul le nom du programme (le premier token) est enregistré.

### Enveloppe (version de schéma 1)

Chaque ligne contient cette enveloppe ; les champs propres à chaque événement figurent au même niveau, à plat.

| Champ | Type | Description |
| - | - | - |
| `schema_version` | number | Actuellement `1`. Incrémenté uniquement en cas de changements incompatibles. |
| `ts` | string | Horodatage UTC au format RFC 3339, avec millisecondes. |
| `pid` | number | ID du processus CLI émetteur. |
| `event` | string | Type d’événement ; détermine les autres champs. |

Configurez votre analyseur pour qu’il ignore les champs inconnus et les valeurs `event` inconnues : de nouveaux champs et types d’événements peuvent être ajoutés sans que `schema_version` soit incrémenté.

### Types d'événements

#### `session_start`

Émis au démarrage d’une session d’agent (session racine nouvelle ou reprise).

| Champ | Type | Description |
| - | - | - |
| `session_id` | string | ID de session de la CLI. Utilisez-le pour rattacher tous les autres événements de la session. |
| `source` | string | Mode de démarrage de la session (par exemple `startup`). |
| `cli_version` | string | Version publiée de la CLI, telle qu’affichée par `devin --version`. |
| `actor` | object | Attribution de l’identité ; voir [objet `actor`](#actor-object). |

```json theme={null}
{"schema_version":1,"ts":"2026-01-27T23:45:00.123Z","pid":4242,"event":"session_start","session_id":"a1b2","source":"startup","cli_version":"1.2.3","actor":{"os_user":"jsmith","git_user_name":"J. Smith","git_user_email":"jsmith@example.com","sso_issuer":"https://sso.example.com/realms/corp","sso_subject":"6f1c…","sso_user":"jsmith","sso_groups":["/devin-users"]}}
```

#### `session_end`

Émis lorsque la session se termine ou que l'agent s'arrête.

| Champ | Type | Description |
| - | - | - |
| `session_id` | string | ID de session de la CLI. |
| `reason` | string | `prompt_input_exit`, `clear`, `resume`, `logout` ou `other`. |

```json theme={null}
{"schema_version":1,"ts":"2026-01-27T23:59:59.000Z","pid":4242,"event":"session_end","session_id":"a1b2","reason":"prompt_input_exit"}
```

Chaque `session_start` est associé à exactement un `session_end` pour le même `session_id` en cas de sortie propre. La CLI exécute l'agent dans un processus enfant qu'elle arrête lors de la phase de nettoyage ; c'est donc le processus parent qui consigne le `session_end` de la session enfant (motif `other`) à la fin de la session. Une session interrompue par `SIGKILL` ou par une coupure de courant ne peut pas écrire d'événement final ; considérez tout `session_start` sans `session_end` correspondant comme une terminaison anormale.

#### `tool_call`

Émis après chaque exécution d'un outil par l'agent.

| Champ | Type | Description |
| - | - | - |
| `session_id` | string | ID de session de la CLI. |
| `tool_name` | string | Nom de l'outil (par exemple `read`, `write`, `exec`). |
| `tool_id` | string | ID unique de cette exécution de l'outil. |
| `success` | boolean | Indique si l'outil a signalé une réussite. |
| `program` | string, optional | Pour les outils shell : uniquement le nom du programme, jamais ses arguments. |
| `paths` | string\[], optional | Chemins du système de fichiers auxquels l'outil était limité. Omis s'il est vide. |

```json theme={null}
{"schema_version":1,"ts":"2026-01-27T23:45:07.001Z","pid":4242,"event":"tool_call","session_id":"a1b2","tool_name":"exec","tool_id":"t_01","success":true,"program":"cargo"}
```

#### `file_read` et `file_write`

Émis en plus de `tool_call`, une fois pour chaque chemin compris dans le périmètre d'autorisation déterminé de l'outil. Ils décrivent l'accès auquel l'outil était *limité*, et non des E/S vérifiées : un outil approuvé avec un périmètre d'autorisation en lecture sur plusieurs chemins émet un `file_read` par chemin, même s'il n'a accédé qu'à certains d'entre eux, et ces événements sont émis, que l'appel d’outil ait réussi ou non.

| Champ | Type | Description |
| - | - | - |
| `session_id` | string | ID de session de la CLI. |
| `path` | string | Chemin dans le système de fichiers. |

```json theme={null}
{"schema_version":1,"ts":"2026-01-27T23:45:09.410Z","pid":4242,"event":"file_write","session_id":"a1b2","path":"/home/jsmith/repo/src/main.rs"}
```

#### `model_call`

Émis après chaque requête d'inférence envoyée à un endpoint de modèle défini dans votre fichier de modèles.

| Champ | Type | Description |
| - | - | - |
| `session_id` | string | ID de session de la CLI. |
| `model` | string | Nom du modèle tel que défini dans le fichier de modèles. |
| `endpoint` | string, optional | URL de base de l'endpoint configuré. |
| `input_tokens` | number, optional | Nombre total de tokens d'entrée, lectures de cache comprises. |
| `output_tokens` | number, optional | Tokens de sortie. |
| `cache_read_tokens` | number, optional | Tokens lus depuis le cache, si l'endpoint les communique. |
| `cache_creation_tokens` | number, optional | Tokens écrits dans le cache, s'ils sont communiqués. |

Les champs de tokens sont omis lorsque l'endpoint ne communique pas l'utilisation.

```json theme={null}
{"schema_version":1,"ts":"2026-01-27T23:45:12.900Z","pid":4242,"event":"model_call","session_id":"a1b2","model":"llama-3-70b","endpoint":"https://models.internal:8000/v1","input_tokens":5120,"output_tokens":384}
```

#### `auth`

| Champ | Type | Description |
| - | - | - |
| `action` | string | L’une des actions ci-dessous. |
| `actor` | object | Attribution de l’identité ; voir [objet `actor`](#actor-object). |
| `error_code` | string, facultatif | Pour `sso_login_denied` et `sso_revalidation_failed` : le code `IDPnnn` affiché à l’utilisateur. Omis pour les actions réussies. |

| `action` | Description |
| - | - |
| `identity_resolved` | Attribution de l’identité au début de la session et après chaque commande `devin auth` (ainsi, `status` indique la connexion qu’il a validée et `logout` n’en indique aucune). |
| `license_validated` | Le fichier de licence a été validé avec succès au démarrage. |
| `license_installed` | Un fichier de licence a été écrit via la page Settings de Desktop. Ne contient ni chemin ni contenu de fichier. |
| `sso_login` | Connexion SSO réussie (`devin auth login` ou connexion depuis Desktop). |
| `sso_login_denied` | Connexion SSO refusée après la réponse de l’IdP : le groupe requis est manquant (`IDP004`), ou le token d’ID renvoyé n’a pas passé la validation ou était absent (`IDP005`). `actor` contient l’identité garantie par l’IdP lorsque le token a été validé ; rien n’est mis en cache. |
| `sso_refresh` | Jetons SSO actualisés auprès de l’IdP. |
| `sso_logout` | Déconnexion SSO (`devin auth logout` ou déconnexion depuis Desktop). |
| `sso_revalidation_failed` | Un agent en cours d’exécution a perdu sa connexion SSO et est en cours d’arrêt ; voir [Revalidation dans les sessions en cours](/fr/federal/air-gapped/sso#revalidation-in-running-sessions). |

```json theme={null}
{"schema_version":1,"ts":"2026-01-27T23:44:58.000Z","pid":4241,"event":"auth","action":"sso_login","actor":{"os_user":"jsmith","git_user_name":"J. Smith","git_user_email":"jsmith@example.com","sso_issuer":"https://sso.example.com/realms/corp","sso_subject":"6f1c…","sso_user":"jsmith","sso_groups":["/devin-users"]}}
{"schema_version":1,"ts":"2026-01-28T08:10:02.512Z","pid":5150,"event":"auth","action":"sso_login_denied","error_code":"IDP004","actor":{"os_user":"rjones","sso_issuer":"https://sso.example.com/realms/corp","sso_subject":"a90d…","sso_user":"rjones","sso_groups":["/contractors"]}}
{"schema_version":1,"ts":"2026-01-28T09:00:00.000Z","pid":4242,"event":"auth","action":"sso_revalidation_failed","error_code":"IDP003","actor":{"os_user":"jsmith","sso_issuer":"https://sso.example.com/realms/corp","sso_subject":"6f1c…","sso_user":"jsmith","sso_groups":["/devin-users"]}}
```

### Objet `actor`

L’attribution de l’identité repose sur l’utilisateur du système d’exploitation, l’identité Git locale et (lorsque le SSO est configuré) l’identité issue du token d’ID validé. Les champs sont omis lorsqu’ils ne sont pas disponibles.

| Champ | Type | Description |
| - | - | - |
| `os_user` | string, facultatif | `$USER`. |
| `git_user_name` | string, facultatif | `git config user.name`. |
| `git_user_email` | string, facultatif | `git config user.email`. |
| `sso_issuer` | string, facultatif | L’URL de l’émetteur IdP auprès duquel le token a été validé. |
| `sso_subject` | string, facultatif | L’attribut `sub` du token d’ID. |
| `sso_user` | string, facultatif | L’identité affichée par `devin auth status` (`preferred_username`, `email` ou `sub`). |
| `sso_groups` | string\[], facultatif | Les revendications de groupe du token (`groups` par défaut, ou le `groups_claim` configuré). |

Les champs SSO figurent dans chaque événement `auth` pour lequel un token validé est disponible (`sso_login`, `sso_refresh`, `sso_logout`, `sso_login_denied`), dans `sso_revalidation_failed` pour la connexion validée par le processus (ou, s’il n’en a validé aucune, pour la connexion encore présente dans le cache de tokens), ainsi que dans `session_start` et `identity_resolved` pour la connexion validée au démarrage par le processus en cours d’exécution. `tool_call`, `file_read`, `file_write` et `model_call` ne comportent pas d’`actor` ; rattachez-les à leur `session_start` via `session_id`.

> [!NOTE]
>
> `sso_groups` enregistre les appartenances aux groupes IdP de chaque utilisateur sur la machine locale. Le répertoire et les fichiers d’audit ne sont accessibles qu’à leur propriétaire ; incluez-les dans votre revue de traitement des données si les noms de groupes sont sensibles dans votre environnement.

### Transférer le journal d’audit vers votre SIEM

Devin n’envoie les enregistrements d’audit nulle part. Pour agréger l’utilisation de l’ensemble des postes de travail, configurez l’agent de collecte de journaux déjà utilisé par votre SIEM (par exemple un Splunk universal forwarder ou Elastic Agent) pour qu’il lise le répertoire d’audit de chaque poste. Aucun paramètre Devin n’entre en jeu.

Configurez l’entrée de fichiers de l’agent avec les paramètres suivants :

| Paramètre | Valeur |
| - | - |
| Fichiers à collecter | `audit*.jsonl` dans le répertoire d’audit. Ce motif correspond au fichier actif et aux fichiers archivés par rotation. Ne collectez pas `.audit.lock`. |
| Chemin pour tous les utilisateurs d’un poste de travail | Linux : `/home/*/.local/share/devin/cli-federal/audit/audit*.jsonl`. macOS : `/Users/*/.local/share/devin/cli-federal/audit/audit*.jsonl`. Ces chemins couvrent uniquement les répertoires personnels situés sous `/home` et `/Users` ; adaptez-les si les répertoires personnels se trouvent ailleurs ou si vos utilisateurs définissent `XDG_DATA_HOME`. |
| Format des enregistrements | Un objet JSON par ligne. Aucune gestion multiligne n’est nécessaire. |
| Horodatage | Le champ `ts` : RFC 3339, UTC, précision à la milliseconde. |
| Position de départ | Début du fichier, afin de collecter les enregistrements écrits avant l’installation de l’agent. |
| Rotation | La rotation renomme le fichier actif et crée un nouveau `audit.jsonl`. L’agent doit suivre les fichiers par identité et non par nom, afin qu’un fichier renommé ne soit pas relu. Vérifiez comment votre agent gère les fichiers renommés. |
| Champs inconnus | Conservez-les. De nouveaux champs et types d’événements peuvent être ajoutés sans modification de `schema_version`. |

> [!WARNING]
>
> Le répertoire et les fichiers d’audit ne sont lisibles que par l’utilisateur qui en est propriétaire, et Devin réinitialise ces autorisations à chaque ouverture du journal. Exécutez l’agent de collecte en tant que root ou en tant que cet utilisateur. Ne modifiez pas les autorisations des fichiers pour donner accès à un autre compte : la modification ne serait pas conservée.

Le poste de travail de chaque utilisateur conserve le fichier actif ainsi qu’au plus 10 fichiers archivés par rotation de 10 MiB chacun, soit environ 110 MiB au total. Au-delà, les enregistrements les plus anciens sont supprimés : un poste qui produit davantage entre deux collectes perd donc ses enregistrements les plus anciens.

Pour vérifier que la collecte fonctionne, démarrez puis terminez une session Devin sur un poste de travail, et recherchez ensuite dans votre SIEM un enregistrement `session_start` et un enregistrement `session_end` ayant le même `session_id`.

#### Exemple : Splunk Universal Forwarder

Déployez ces deux fichiers dans une application sur chaque forwarder (par exemple `$SPLUNK_HOME/etc/apps/devin_audit/local/`). N'utilisez que la stanza `monitor` correspondant au système d'exploitation du poste de travail, et remplacez `devin` par l'index de votre choix.

```ini inputs.conf theme={null}
[monitor:///home/*/.local/share/devin/cli-federal/audit/audit*.jsonl]
sourcetype = devin:airgap:audit
index = devin
disabled = 0

[monitor:///Users/*/.local/share/devin/cli-federal/audit/audit*.jsonl]
sourcetype = devin:airgap:audit
index = devin
disabled = 0
```

```ini props.conf theme={null}
[devin:airgap:audit]
INDEXED_EXTRACTIONS = json
KV_MODE = none
SHOULD_LINEMERGE = false
TIMESTAMP_FIELDS = ts
TIME_FORMAT = %Y-%m-%dT%H:%M:%S.%3NZ
TZ = UTC
```

`props.conf` doit se trouver sur le forwarder, et pas uniquement sur les indexeurs, car `INDEXED_EXTRACTIONS` s'applique là où le fichier est lu. Laissez `crcSalt` non défini : le forwarder reconnaît alors un fichier archivé par rotation à son contenu et ne le relit pas sous son nouveau nom. Chaque répertoire du chemin avec caractères génériques doit être accessible en lecture au compte sous lequel s'exécute le forwarder ; un forwarder installé sous un compte de service non root ne peut pas lire les répertoires d'audit réservés à leur propriétaire.

Les champs arrivent sous forme de champs indexés portant leurs noms JSON, si bien que `actor.sso_user`, `model` et `input_tokens` sont directement interrogeables :

```text theme={null}
index=devin sourcetype="devin:airgap:audit" event=model_call | stats sum(input_tokens) sum(output_tokens) by model
```

#### Exemple : Elastic (Filebeat ou Elastic Agent)

Ajoutez cette entrée `filestream` au fichier `filebeat.yml`. Ne conservez que le chemin correspondant au système d'exploitation du poste de travail.

```yaml filebeat.yml theme={null}
filebeat.inputs:
  - type: filestream
    id: devin-airgap-audit
    paths:
      - /home/*/.local/share/devin/cli-federal/audit/audit*.jsonl
      - /Users/*/.local/share/devin/cli-federal/audit/audit*.jsonl
    prospector.scanner.fingerprint.length: 64
    parsers:
      - ndjson:
          target: devin
          add_error_key: true
    processors:
      - timestamp:
          field: devin.ts
          layouts:
            - "2006-01-02T15:04:05.999Z"
```

L’analyseur `ndjson` place chaque enregistrement sous un préfixe `devin.` (`devin.event`, `devin.session_id`, `devin.actor.sso_user`). Ne définissez pas `target: ""` : le champ `event` de l'enregistrement est une chaîne de caractères, ce qui entre en conflit avec l'objet `event` de l'Elastic Common Schema et amène Elasticsearch à rejeter les documents. Le processeur `timestamp` copie `ts` dans `@timestamp` ; Elastic considère ce processeur comme étant en version bêta. Si vous le préférez, supprimez-le et définissez plutôt `@timestamp` à partir de `devin.ts` dans un pipeline d'ingestion. L'`id` doit être unique parmi vos entrées `filestream`. Par défaut, Filebeat identifie un fichier par une empreinte de son début, qui permet de suivre le fichier lorsque la rotation le renomme : aucun paramètre de rotation n'est donc nécessaire. La longueur de l'empreinte passe de 1024 octets (valeur par défaut) à 64, car les versions 9.0 à 9.4 de Filebeat ignorent un fichier tant qu'il n'atteint pas cette taille, ce qui laisserait de côté un poste de travail ne comptant que quelques enregistrements. Les 64 premiers octets d'un fichier d'audit contiennent le `ts` et le `pid` du premier enregistrement, ce qui garantit des empreintes distinctes. Si vous modifiez cette longueur ultérieurement, Filebeat relira tous les fichiers.

Avec Elastic Agent, ajoutez l'intégration Custom Logs (Filestream) à la politique de l'agent, saisissez les mêmes chemins, puis placez les blocs `parsers` et `processors` ci-dessus dans le champ de configuration personnalisée de l'intégration.

> [!NOTE]
>
> Cognition n'a pas testé ces exemples sur un déploiement Splunk ou Elastic. Validez-les dans votre environnement et consultez la documentation du fournisseur correspondant à votre version installée avant de les déployer sur les postes de travail.

Champs utiles pour l'indexation ou la recherche :

| Question | Champs |
| - | - |
| Qui a utilisé Devin, et quand | `event` = `session_start`, avec `actor.sso_user` (ou `actor.os_user`) et `ts` |
| Quelle version est déployée | `cli_version` sur `session_start` |
| Utilisation de tokens par modèle | `event` = `model_call`, avec `model`, `input_tokens`, `output_tokens` |
| Appels d’outils en échec | `event` = `tool_call`, avec `success` = `false` |
| Connexions refusées | `event` = `auth`, avec `action` = `sso_login_denied` et `error_code` |

Seuls les enregistrements `session_start` et `auth` identifient l'utilisateur. Pour attribuer les enregistrements `tool_call`, `file_read`, `file_write` et `model_call` à un utilisateur, joignez-les à l'enregistrement `session_start` ayant le même `session_id`.

## Rapport de diagnostic

`devin diagnostics` génère un rapport expurgé en texte brut, que vous pouvez relire avant de l'envoyer au support Cognition. Il contient uniquement les versions, la structure de la configuration (présence de chaque fichier et validité de son analyse), les noms des modèles, l'indication pour chaque variable de clé d'API de sa définition ou non, ainsi que des statistiques sur le journal d'audit. Il ne contient jamais de prompts, de code, de contenu de fichiers, de valeurs secrètes, d'URL d'endpoint ni de valeurs de variables d'environnement.

```sh theme={null}
devin diagnostics
```

```text theme={null}
Diagnostics written to devin-diagnostics-20260127T234500Z.txt
The report is plain text and stays on this machine; review it before sharing.
```

Utilisez `--output <path>` pour choisir le nom du fichier. Le rapport est enregistré avec des droits d'accès réservés au propriétaire (`0600`). Consultez la section [Dépannage](/fr/federal/air-gapped/troubleshooting) pour savoir quels éléments joindre à une requête d'assistance.


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