L'erreur « thread not found » de Codex peut apparaître même lorsque l'historique est conservé. Elle ne signifie pas forcément que la conversation a disparu. Sans supprimer l'historique, essayez dans l'ordre : rouvrir la même tâche, redémarrer complètement l'application, puis envoyer un court message de vérification. Si une erreur de stockage (comme os error 2) apparaît aussi, la solution est différente.

Commencez par la suite du message d'erreur

Séparez les symptômes avant de supprimer l'historique

L'historique s'affiche / seul l'envoi échoue
thread not found
→ Rouvrir, puis redémarrer l'application
Pouvoir lire n'est pas la même chose que pouvoir envoyer
L'archivage échoue aussi / os error 2
Erreur de référence de stockage (l'historique reste souvent lisible)
→ Vérifier l'historique enregistré et signaler
Ne réécrivez pas d'abord les noms de fichiers ni la base de données
Échec après environ 30 secondes d'attente suivant l'envoi
Timeout / App server request expired while queued
→ Distinguer l'attente en file et la réponse bloquée
Même message d'erreur d'envoi, chemin différent
Ce schéma vous aide à choisir où vérifier, selon la suite du message d'erreur.

1. Ce que signifie « thread not found » : ce qui est introuvable

Lorsque vous ajoutez une suite à une tâche existante dans Codex d'OpenAI, une erreur de ce type peut apparaître. L'identifiant à la fin désigne la conversation concernée ; il est masqué ci-dessous.

メッセージの送信中にエラーが発生しました
thread not found: <identifiant de la conversation>

Dans l'application affichée en anglais, la première ligne devient Error submitting message (#30710).

Error submitting message
thread not found: <identifiant de la conversation>

Cet article concerne les tâches locales existantes de l'application de bureau. Il s'appuie sur les journaux d'un cas observé dans notre environnement (Windows), sur le code source public et sur des signalements d'utilisateurs, et reflète la situation au 21 septembre 2026.

« Pouvoir lire » et « pouvoir envoyer » sont deux vérifications distinctes

Historique enregistré

Lire les échanges précédents

Lecture des données enregistrées

Conversation chargée pour l'exécution

Reçoit de nouvelles instructions

Reprise de la conversation → instruction suivante

Même lorsque l'écran indique « reprise effectuée »…

Si la conversation d'exécution est introuvable, l'envoi peut échouer alors que l'historique passé peut être affiché.

Schéma conceptuel fondé sur la spécification publique et le code source. Vérifiez séparément si l'écran, l'historique enregistré et l'état d'exécution concordent.

L'affichage de l'historique et l'acceptation de nouvelles instructions sont deux mécanismes distincts. Pour une tâche que vous n'avez pas utilisée depuis un moment, l'historique peut se charger alors que la conversation n'est pas chargée côté réception des instructions. Envoyer tel quel produit alors cette erreur.

Détails du fonctionnement (noms internes de communication de l'application)

Selon la spécification officielle de l'App Server, thread/read lit l'historique enregistré ; il ne charge pas la conversation dans la mémoire d'exécution. Son rôle diffère de celui de thread/resume, qui permet de poursuivre une conversation. Ce sont des noms de communication internes à l'application, et non des commandes à saisir dans la zone de chat.

Dans le code source public du traitement d'envoi correspondant à la version CLI 0.155.0-alpha.9, présente dans les métadonnées enregistrées de notre environnement, le point d'entrée de turn/start récupère la conversation et renvoie thread not found en cas d'échec. La recherche s'effectue dans la liste des conversations en mémoire ; cette erreur ne signifie donc pas que le fichier enregistré a disparu.

notLoaded est l'état normal d'une conversation enregistrée qui n'est pas chargée pour l'exécution à ce moment. Selon la spécification officielle de l'App Server, une conversation dont le dernier abonné s'est retiré est déchargée et passe à notLoaded après 30 minutes sans abonné ni activité. Le problème survient lorsque l'étape de reprise nécessaire n'a pas lieu à partir de cet état, et que l'instruction suivante ne peut pas être acceptée. Dans notre exemple également, l'échec est survenu plus d'une heure après le dernier envoi réussi.

2. Cas pratique : l'envoi a repris alors que l'historique était conservé

Voici un cas observé dans notre environnement. Cette erreur est apparue lorsque nous avons envoyé une instruction de poursuite sur une tâche de l'application Windows 26.915.31029. Les journaux de l'application du 21 septembre 2026 ci-dessous sont convertis en UTC ; les identifiants de conversation et le contenu des tâches ont été omis.

De la nouvelle tentative à l'écran au rechargement réel

08:26:51 / 08:26:59

Échec de l'envoi (la réponse interne était thread not found)

L'écran considérait déjà la conversation comme reprise

09:08:36

Même erreur d'envoi après la réouverture

Un simple changement d'écran n'a pas suffi

10:00:28 → 10:08:49

État non chargé confirmé → rechargement de la conversation réussi

Non chargée → reprise jugée nécessaire → reprise réussie

10:09:07 / 10:11:56

Instruction suivante acceptée, envoi réussi

Lors d'une vérification ultérieure de l'historique, les deux tours sont « completed », sans erreur

Source : journaux enregistrés de notre environnement. Aucune réparation de l'historique n'a été effectuée ; nous avons seulement lu les journaux.

La conversation enregistrée et le répertoire de travail étaient toujours là, et l'opération de lecture de l'historique a également réussi. La tâche d'origine n'avait pas été archivée.

Ce que ce cas a permis de confirmer

  • L'historique était toujours présent
  • L'envoi a réussi après le rechargement
  • L'enquête n'a modifié ni l'historique ni les paramètres

Ce que cet exemple ne permet pas de savoir

  • Le déclencheur exact qui a fait sortir la conversation de la mémoire interne
  • Une cause commune à tous les utilisateurs

La cause probable est un décalage : l'écran considérait la conversation comme reprise, alors qu'en interne elle n'avait pas été chargée. Une fois l'envoi rétabli, vérifiez aussi que le travail effectué lors de ce tour est correct.

3. L'ordre à suivre quand seul l'envoi échoue

D'abord, copiez votre texte en local pour ne pas le perdre. Avant de cliquer à nouveau sur Envoyer, vérifiez si la même instruction n'a pas déjà été ajoutée à la conversation et si le traitement n'a pas commencé. Pour les instructions impliquant une publication, une suppression ou un achat, il est particulièrement important de ne pas empiler des requêtes dont la réponse a été retardée.

01

Vérifier la conversation et le travail précédent

Vérifiez si vous pouvez relire les messages précédents et si la dernière instruction apparaît comme terminée, en cours ou en erreur. Si la tâche n'apparaît pas dans la liste, ouvrez aussi « Archived chats » dans les Paramètres (comme indiqué dans le guide de dépannage officiel). Si vous avez modifié des fichiers, enregistrez-les et notez l'emplacement de travail. Traitez séparément un problème d'affichage de la conversation et la disparition de fichiers de travail.

02

Attendre le chargement, puis rouvrir la même tâche

Si vous venez d'ouvrir la tâche, attendez que l'affichage de l'historique se stabilise. Passez à une autre tâche puis revenez, et essayez une petite vérification. Dans notre exemple, cette seule opération n'a pas suffi ; plutôt que de renvoyer le même message à répétition, passez à l'étape suivante.

03

Vérifier les autres travaux, puis redémarrer complètement l'application

Si une autre tâche est en cours, attendez qu'elle se termine ou enregistrez ce dont vous avez besoin, puis arrêtez-la. Quittez ensuite l'application, relancez-la et ouvrez la même tâche. Changer l'affichage des tâches et redémarrer l'application entière sont deux opérations différentes.

04

Vérifier qu'une réponse courte se termine

N'envoyez pas immédiatement à nouveau la grande tâche d'origine. Envoyez une vérification qui ne modifie aucun fichier et n'utilise aucun outil. Une fois la réponse terminée, vérifiez le travail effectué juste avant et reprenez le cours normal.

Par exemple, vous pouvez limiter ainsi le message de vérification. Comme il est envoyé comme une instruction ordinaire au modèle, il peut compter dans votre consommation habituelle.

Il s'agit d'une vérification de connexion. Ne reprenez pas le travail précédent.
Sans lire ni écrire de fichiers ni appeler d'outil,
répondez uniquement « Réponse reçue. ».

Le signalement adressé au dépôt GitHub d'OpenAI #30710 contient un cas où un échec d'envoi juste après l'ouverture d'une conversation sous Windows a été résolu par un redémarrage complet de l'application. La consigne officielle de dépannage « attendre la fin d'une tâche en cours avant de redémarrer » concerne le cas où le terminal intégré se bloque ; elle ne vise pas cette erreur d'envoi.

Si vous essayez une mise à jour, notez d'abord la version actuelle de l'application et les symptômes. Selon le guide de dépannage officiel, le Codex inclus dans l'application de bureau et la CLI installée séparément peuvent avoir des versions différentes. Mettre à jour la CLI ne signifie pas que le défaut côté application est corrigé.

4. Un même message peut avoir plusieurs causes et solutions

Ne vous fiez pas uniquement à la ligne « Error submitting message » ; regardez le texte qui suit et l'opération qui a échoué. Le tableau suivant répartit, par symptôme, les exemples issus de signalements publics et de notre environnement.

Symptôme visiblePoints à vérifierCe qu'il ne faut pas conclure
L'historique s'affiche, mais l'envoi échoueSi l'envoi fonctionne après rechargementPouvoir lire l'historique ne signifie pas pouvoir envoyer
L'archivage échoue aussi / os error 2État des fichiers enregistrés et de leurs références (l'historique reste souvent lisible)Même si l'envoi revient après un redémarrage, l'archivage peut continuer d'échouer
Timeout / App server request expired while queuedAttente d'environ 30 secondes, réponse bloquée ou état de file d'attenteNe pas la confondre avec thread not found, qui revient immédiatement
La poursuite échoue, mais l'arrêt aussiSi la tâche tourne réellement ou si l'affichage est périméNe pas se fier au seul indicateur d'exécution affiché à l'écran

Pour les cas où l'historique reste disponible, le complément d'un utilisateur macOS dans #30710 est utile. L'écran considérait la conversation comme reprise, mais l'envoi a continué d'échouer ; plus tard, un rechargement dans le nouvel écran a réussi. Ce signalement décrit une incohérence d'état qu'une simple course au moment de l'ouverture ne suffit pas à expliquer, et son déroulement ressemble beaucoup à celui de notre cas.

En revanche, le signalement Windows #39179 décrit un historique lisible alors que l'envoi et l'archivage échouaient, et, dans l'environnement de l'auteur, la situation a persisté après un redémarrage. Un commentaire ajouté plus tard rapporte que, après un redémarrage complet de l'application, la poursuite est redevenue possible, mais que l'échec d'archivage n'a pas été réellement corrigé de façon fiable. #39575 contient un diagnostic sur l'horodatage des noms de fichiers enregistrés et sur le traitement des références. Il s'agit dans tous les cas d'enquêtes d'utilisateurs : ne concluez pas que vos propres données sont endommagées parce qu'un préfixe de chemin ou un décalage horaire apparaît.

Le type avec attente est illustré par le signalement de timeout d'envoi #27395, qui contient des journaux où turn/start a été interrompu au bout de 30 secondes (timeoutMs=30000) et a échoué avec Timeout. Dans un commentaire ajouté à #23644, une requête préalable à l'envoi a attendu environ 30 secondes dans la file (queueWaitMs=30001) avant d'échouer avec App server request expired while queued. Le type où l'arrêt échoue aussi se retrouve dans le signalement d'incohérence entre historique et état d'exécution #42604.

5. Si cela ne marche toujours pas : vérifications et passation

Si le problème persiste après un redémarrage, vérifiez si l'historique enregistré peut être lu. Si vous disposez d'une fonction permettant à une tâche Codex fonctionnelle de lire la tâche cible, commencez par une vérification en lecture seule. Il est aussi essentiel de ne pas confondre l'identifiant cible avec une tâche au nom similaire.

Examinez la tâche cible en lecture seule.
ID cible : l'identifiant de conversation affiché dans l'erreur

Indiquez si l'historique peut être lu, l'état du dernier tour et les erreurs.
N'envoyez aucun message à une autre tâche, ne reprenez pas le travail précédent, ne créez pas de fork, n'archivez rien,
ne modifiez ni les paramètres ni la base de données, et ne déplacez ni ne supprimez les fichiers d'historique.
Si aucune fonction de gestion des tâches n'est disponible, indiquez-le.

Cet exemple s'adresse aux environnements où des fonctions de gestion des tâches sont disponibles. Si vous ne trouvez pas une telle fonction, ne devinez pas de commandes internes au nom proche ; passez au rapport du chapitre 6.

Choisir la suite selon le résultat de la vérification

L'historique est lisible et le travail précédent est terminé
Envisagez un message de vérification supplémentaire ou un fork qui reprend l'historique. Conservez la tâche d'origine.
L'historique est lisible, mais on ne sait pas si le travail est en cours
Vérifiez d'abord l'état d'exécution et les modifications de fichiers. Ne relancez pas le même travail en double dans une autre tâche.
Une erreur de stockage apparaît (os error 2 ou autre)
Conservez une sauvegarde et signalez le problème en joignant les journaux. Ne supprimez pas les originaux pour tenter de réparer le chargement.

Un commentaire ajouté à #39179 décrit un cas où un court message de vérification, envoyé depuis une autre tâche fonctionnelle, a permis de rétablir aussi la conversation habituelle une fois la réponse terminée. Toutefois, un autre commentaire signale un envoi similaire qui a échoué, ainsi qu'une nouvelle instruction acceptée après le fork d'un historique terminé. Face à ce contre-exemple, le signalant initial a précisé que ce n'est pas une solution générale.

Un fork est une opération qui transfère un historique terminé vers une tâche distincte ; la tâche d'origine n'est pas réparée. Ne partez pas du principe qu'un travail inachevé reprendra tel quel : après le transfert, vérifiez le répertoire de travail, les fichiers modifiés et la dernière étape terminée.

Les données d'historique et les fichiers de travail sont aussi distincts. Même si la conversation ne s'ouvre pas, les modifications du projet peuvent subsister. À l'inverse, même si la conversation est lisible, les fichiers ne sont pas forcément à jour. Si votre projet utilise Git, consultez la liste des modifications et identifiez ce qui a déjà été exécuté avant de poursuivre.

6. Informations à conserver pour demander une enquête

Dans un signalement, ne dites pas seulement « l'envoi ne fonctionne pas » : distinguez ce qui a réussi et ce qui a échoué. Indiquer la version de l'application, le système d'exploitation, l'heure et le fuseau horaire de l'incident, l'identifiant de la conversation concernée et l'opération effectuée juste avant facilite le suivi sans mêler des pannes différentes. Il n'est pas nécessaire de publier l'intégralité de la conversation dès le départ.

Modèle de note de signalement

Environnement
Version de l'application / OS / lieu d'exécution (local, distant, etc.)
Occurrence
Heure et fuseau horaire / texte complet de l'erreur / opération effectuée juste avant
Ce qui fonctionne et ce qui ne fonctionne pas
Résultats pour l'affichage de l'historique / l'envoi / l'arrêt / l'archivage
Opérations essayées
Ce qui a changé avant et après la réouverture ou le redémarrage

Si vous pouvez examiner les journaux, regardez les lignes situées avant et après la requête en échec. method=turn/start indique le début d'une instruction, thread/resume la reprise d'une conversation, et errorCode est un indice sur la réponse interne. Conservez aussi les lignes de succès, et distinguez une même erreur répétée sur plusieurs lignes d'un échec réellement survenu plusieurs fois.

Concernant l'emplacement des journaux de l'application, le guide de dépannage officiel indique pour macOS ~/Library/Logs/com.openai.codex/YYYY/MM/DD. Sous Windows, dans notre environnement, ils se trouvaient aux deux emplacements suivants.

  • PC où l'erreur est apparue : %LOCALAPPDATA%\Codex\Logs
  • Version Microsoft Store sur un autre PC (journaux de mars 2026) : %LOCALAPPDATA%\Packages\OpenAI.Codex_<ID>\LocalCache\Local\Codex\Logs (sur ce PC, le dossier %LOCALAPPDATA%\Codex lui-même n'existait pas)

Selon l'explication de Microsoft, les fichiers qu'une application empaquetée crée pour la première fois dans AppData sont écrits dans un emplacement propre à l'application, et peuvent apparaître à celle-ci comme s'ils se trouvaient à l'emplacement habituel. Si vous ne les trouvez pas à un endroit, cherchez aussi à l'autre. Le guide officiel indique que les sessions sont enregistrées dans $CODEX_HOME/sessions (valeur par défaut ~/.codex/sessions). Si vos réglages ou votre lieu d'exécution diffèrent, la cible n'est peut-être simplement pas dans le dossier que vous consultez ; ne concluez donc pas à une suppression parce que « la recherche ne la trouve pas ».

Le guide de dépannage officiel indique comment envoyer un retour en saisissant / dans le champ de saisie. Les journaux et captures d'écran peuvent contenir le texte des conversations, des adresses e-mail, les noms d'autres projets et des chemins locaux. Dans un ticket public, ne publiez que les parties nécessaires après les avoir anonymisées ; avant de transmettre des identifiants complets ou des informations similaires, vérifiez le destinataire et le niveau de visibilité.

7. Confirmer la reprise avec une réponse courte

La première réponse à cette erreur n'est pas de supprimer l'historique, mais de vérifier séparément si vous pouvez le lire, s'il est possible de reprendre la conversation et si une nouvelle instruction se termine. Dans ce cas, l'envoi a repris après le rechargement de la conversation. Si une erreur de stockage apparaît, c'est une autre voie : passez aux vérifications du chapitre 5.

Une fois qu'une réponse courte est terminée, vérifiez jusqu'où est allée l'instruction d'origine et reprenez à partir de l'étape nécessaire. Si le problème persiste, privilégiez une enquête en lecture seule et la conservation des journaux. Il est important de ne pas considérer la récupération comme achevée parce que le message d'erreur a disparu, ou parce qu'un fork a pu être créé.

Pour savoir où se trouvent les données de Codex (CODEX_HOME) et l'application elle-même après leur déplacement vers un autre lecteur, consultez notre article Déplacer ChatGPT et Codex vers un autre lecteur.

Articles connexes :

FAQ

Q. Si « thread not found » apparaît, la conversation a-t-elle disparu ?
R. Pas forcément. L'historique enregistré peut rester lisible alors que la conversation d'exécution nécessaire comme cible d'envoi n'est pas chargée. Inversement, la référence de stockage ou les fichiers eux-mêmes peuvent poser problème ; vérifiez donc s'ils sont réellement lisibles.

Q. notLoaded est-il une erreur ?
R. Cet état est en soi normal. Il indique qu'une conversation enregistrée n'est pas actuellement chargée pour l'exécution. Cela ne devient un problème que si elle n'est pas reprise lors de la poursuite et qu'une réponse courte ne se termine pas.

Q. Un redémarrage résout-il toujours le problème ?
R. Pas toujours. Certains signalements indiquent qu'un redémarrage complet a résolu le problème (#30710), d'autres que les échecs d'envoi et d'archivage ont persisté après le redémarrage (#39179). Dans notre exemple, l'envoi a repris après le rechargement de la conversation.

Q. La mise à jour vers la dernière version résout-elle le problème ?
R. Au 21 septembre 2026, nous n'avons trouvé aucune version corrigée qui indique explicitement avoir résolu l'ensemble de ce symptôme. Lors d'une mise à jour, notez les versions de l'application avant et après ainsi que les résultats. La CLI installée séparément et le Codex inclus dans l'application ne sont pas forcément de la même version.