Au 2026-11-03, les notes de version plateforme du 2026-11-02 annoncent la bêta publique de Message Threads pour la Messages API (en-tête bêta message-threads-2026-08-12). Dans une boucle Agent, plus besoin d’envoyer tout le transcript à chaque tour — ce n’est pas « sans contrat d’outils » : le premier tour thread: { "type": "create" } doit inclure chaque input_schema dans tools ; en continue, ne pas renvoyer system / tools (sinon 400) — le serveur garde l’instantané du create. Répartition avec changer le schema outil en session et compaction OpenAI en fin d’article.
Avant, un Agent long POSTait chaque tour toute la bibliothèque tool_result et input_schema — sous 128 Mo, mais TTFT dégradé (voir la note 128 Mo). Message Threads stocke la conversation côté serveur — tools omis sur le fil, schema toujours actif dans le fil.
Ce qu’ajoute le 2 novembre
- Capacité : la Messages API reçoit le paramètre
thread; disponible sur Claude API, AWS, hébergement Google Cloud Anthropic, Microsoft Foundry. - En-tête : chaque requête envoie
anthropic-beta: message-threads-2026-08-12. - Effet : requêtes suivantes n’envoient que des
messagesincrémentaux plusprevious_message_id; la doc cite ~35 % de baisse médiane du TTFT sur sessions 500k–1M tokens (scénario Claude Code activé par défaut). - Facturation : usage de tokens identique sans fil ; vous économisez bande passante et latence au premier token, pas les octets de schema.
create vs continue
Table doc « What to send on each request » :
- Create uniquement :
system,tools(chaqueinput_schema,strict: true). Une fois au create. - Continue : seulement les nouveaux
messagesdepuis le tour précédent (souventuseroutool_result), plusthread: { "type": "continue", "previous_message_id": "…" }.
# Tour 1 — create (extrait)
{
"model": "claude-haiku-5-5",
"max_tokens": 1024,
"system": "You are a ticket agent.",
"tools": [{
"name": "update_ticket",
"description": "Update fields",
"input_schema": {
"type": "object",
"properties": { "ticket_id": { "type": "string" }, "status": { "type": "string" } },
"required": ["ticket_id", "status"],
"additionalProperties": false
}
}],
"messages": [{ "role": "user", "content": "Close ticket T-9." }],
"thread": { "type": "create" }
}
# Tour 2 — continue (pas de tools / system)
{
"model": "claude-haiku-5-5",
"max_tokens": 1024,
"messages": [{
"role": "user",
"content": [{ "type": "tool_result", "tool_use_id": "…", "content": "ok" }]
}],
"thread": { "type": "continue", "previous_message_id": "msg_01..." }
}
En une phrase. Le JSON Schema n’apparaît sur le fil qu’une fois, au create ; continue s’appuie sur l’instantané serveur — ce n’est pas « schema annulé ».
Champs fixes et output_config
Outre les champs create-only, des champs fixes doivent être renvoyés identiques à chaque tour, comme au create, sinon thread_fingerprint_mismatch :
model,tool_choice,thinking,output_config,mcp_servers(tokens d’auth exceptés),cache_controlde premier niveau, etc.- Sortie structurée : JSON Schema dans
output_config.format.schemaau create ; chaque continue envoie le mêmeoutput_config— pas create-only.
Les helpers SDK thread omettent create-only et répètent les champs fixes ; en cURL manuel, ne pas oublier output_config.
Changer le schema en cours de fil ?
Fils append-only. Doc : après une réponse, les helpers refusent de modifier system ou tools. Pour changer input_schema :
- Nouveau
thread: create, rejouer les messages complets stockés localement, attacher de nouveauxtools; ou - Fork du fil et mise à jour des paramètres au premier tour du fork (doc Message threads, section fork).
Cela diffère de inline-tools qui ajoute ou retire des définitions dans les messages : inline modifie encore le transcript ; Message Threads fige tools de premier niveau au create. Ne pas mélanger les deux mécanismes sur le même champ sans lire la doc.
404 et expiration 5 minutes
- Les fils expirent 5 minutes après la dernière requête ; si continue renvoie 404, recréer depuis une copie locale complète (avec
system,tools, schema). - L’application reste source de vérité ; les copies mémoire du helper SDK ne sont pas persistées — rejouer après redémarrage.
- Les tours tronqués par
max_tokens(appels d’outil, etc.) peuvent ne pas être stockés — le continue suivant échoue — rejouer avec définitions d’outils complètes.
Essayer dans JSON Boîte à outils
{
"create_tools": { "name": "update_ticket", "schema_ref": "turn1.tools[0].input_schema" },
"continue_wrong": { "includes_tools_array": true, "expect": "400" },
"tool_result_ok": { "ticket_id": "T-9", "status": "closed" },
"tool_result_bad": { "ticket_id": "T-9", "status": 9 }
}
- Valider
tool_result_ok/tool_result_badcontre le schema àcreate_tools.schema_ref(Validation schema). continue_wrongest un marqueur d’anti-pattern d’intégration, pas un corps API.- Référence Function Calling : Function Calling.
FAQ
continue peut-il inclure un tableau tools ?
Non — 400.
Message Threads économise des tokens ?
Non — seulement taille de requête et TTFT.
Changer input_schema en cours ?
Nouveau thread create ou fork, puis replay.
output_config.format.schema à chaque tour ?
Oui — champ fixe.
Différence avec compaction OpenAI ?
Compaction = OpenAI Responses ; cette note = Claude Message Threads.
Résumé
Au 2026-11-03, Message Threads du 2026-11-02 permet aux Agents de ne plus renvoyer le JSON Schema des tools dans le corps HTTP aux tours suivants, mais le create doit être correct, et continue ne doit plus envoyer tools/system. Les champs fixes comme output_config doivent rester identiques. Changer le schema exige un nouveau fil ; 404 exige un replay complet avec tools. Facture tokens inchangée — valider localement le JSON des tool_use. Prochaine étape : boucle outil en deux tours avec le helper SDK thread ; continue sans tools, avec le même output_config.