Sinds 8 oktober 2026 sterven lange Codex-sessies op het moment dat ze proberen te compacten. De foutmelding luidt stream disconnected before completion: response protection is unavailable, herhalingen helpen niet, en het gesprek kan niet doorgaan. De meeste meldingen hebben betrekking op gpt-6.1-sol, maar gpt-6-astra en gpt-5.6-sol falen op dezelfde manier. Het verschijnt achter zelf-gehoste proxies, en het verschijnt ook in de officiële Codex-app met een directe ChatGPT-login.
Het korte antwoord: de context is niet te groot, en je netwerk is niet het probleem. De Codex-backend van ChatGPT weigert nu elke aanvraag die een eerdere webzoekopdracht in zijn geschiedenis herhaalt zonder ook het webzoektool te verklaren. De compactieverzoek van Codex verklaart helemaal geen tools. Dus een enkele webzoekopdracht vroeg in een sessie is voldoende om elke latere compactie te laten falen.
Wat nu te doen:
- Nieuwe sessies: stel
web_search = "disabled"in totdat de backend of Codex verandert. - Vastgelopen sessies: verplaats het werk naar een nieuwe sessie. De oude zal niet compacten.
- Als je je eigen gateway onderhoudt voor Codex: voeg een webzoekverklaring toe wanneer de geschiedenis een zoekopdracht bevat. De code staat hieronder.
De rest van deze post legt uit hoe de trigger is gevonden, welke community-oplossingen niet werken, en hoe je een vastgelopen sessie kunt redden.
Hoe de fout eruitziet
Je zult een van deze in Codex zien:
stream disconnected before completion: response protection is unavailable
Error running remote compact task: stream disconnected before completion: stream closed before response.completed
Het tweede bericht is de generieke versie. Codex toont niet altijd de upstream-fout, dus een compactie die faalt met "stream closed before response.completed" kan hetzelfde probleem zijn. De lokale log van Codex heeft vaak Failed to run pre-sampling compact ernaast.
Daaronder stuurt de upstream een van de twee dingen. Soms is het een HTTP 502 met deze body, die een ChatGPT Plus-gebruiker op gpt-6.1-sol ook heeft gepost op OpenAI's ontwikkelaarsforum:
{"message": "response protection is unavailable", "type": "internal_error"}
Andere keren is het een HTTP 200 waarvan de stream eindigt in een response.failed gebeurtenis met code: "upstream_error" en geen response.completed. Alles wat alleen de HTTP-status controleert, mist de tweede vorm en rapporteert het als een stream die vroeg eindigde.
Het patroon is overal hetzelfde:
- Normale beurten blijven werken. Alleen de compactie faalt.
- Codex probeert het ongeveer vijf keer, en geeft dan op. In de logs van een gateway duurde elke mislukte poging 2 tot 13 seconden en registreerde nul tokens.
- Het hervatten van de sessie loopt tegen dezelfde compactie aan, waardoor de sessie vast blijft zitten.
- Een nieuwe sessie werkt totdat deze dezelfde voorwaarden tegenkomt.
De trigger: een zoekopdracht in de geschiedenis, geen zoektool in de aanvraag
Codex heeft een ingebouwd webzoektool. Wanneer het model het gebruikt, gaat een web_search_call item in de gespreksgeschiedenis. Elke latere aanvraag stuurt die geschiedenis terug.
Normale beurten verklaren de tool in tools, zodat de upstream de herhaalde zoekopdracht accepteert. Een compactieverzoek is anders. Codex stuurt de hele geschiedenis met tools: [], omdat een samenvatting geen tools nodig heeft. Dat geldt voor lokale compactie, die Codex uitvoert voor aangepaste providers, en voor remote compactie v2.
Rond 6 oktober begon de Codex-backend van ChatGPT aanvragen te weigeren die een web_search_call herhalen maar web_search niet verklaren. Ontwikkelaars die de ruwe aanvragen vastlegden, hebben het verder beperkt. Het wijzigen of verwijderen van de ID van het zoekitem maakt geen verschil. Alleen een functietool verklaren faalt nog steeds. Het verklaren van web_search laat dezelfde aanvraag slagen.
Hetzelfde resultaat verschijnt met de officiële, ongewijzigde codex-cli ingelogd met een ChatGPT-account. Een geschiedenis met drie zoekitems faalde om te compacten. Dezelfde geschiedenis met alleen die items verwijderd compactte goed. Een tweede reporter in die thread legde een compactieverzoek vast met één web_search_call en tools: []. Het toevoegen van een web_search verklaring loste het op, en dat deed ook het verwijderen van het zoekitem.
Dat verklaart waarom het lijkt op een probleem met de contextgrootte. Compactie wordt alleen uitgevoerd op lange sessies, en lange sessies zijn de sessies die het meest waarschijnlijk op een bepaald moment zoekopdrachten hebben gebruikt. Webzoek is ook standaard ingeschakeld in Codex (de standaardmodus is "cached"), zodat een sessie een zoekopdracht kan bevatten die de gebruiker nooit heeft gevraagd.
Het bewijs
Minstens vier groepen hebben onafhankelijk A/B-tests uitgevoerd en kregen hetzelfde resultaat. De rijen hieronder combineren tests die zijn gepost op de openai/codex-tracker en in de probleemtrackers van verschillende open-source gateway-projecten. OpenAI heeft de regel niet bevestigd of gereageerd in een van die threads.
| Aanvraaggeschiedenis | Verklaring van tools | Resultaat |
|---|---|---|
| Berichten en redenering alleen | Geen | Compleet |
| Bevat uitvoer van functie-aanroep | Geen | Compleet |
| Bevat een web_search_call | Geen | Faalt |
| Bevat een web_search_call | Alleen functietool | Faalt |
| Bevat een web_search_call | web_search | Compleet |
| Zelfde, zoekitems verwijderd | Geen | Compleet |
De tests sluiten grootte uit. Een tester stelde de auto-compactie drempel in op 2.000 tokens met -c model_auto_compact_token_limit=2000. Een sessie zonder toolgebruik compactte goed. Een sessie die eenmaal had gezocht faalde zes keer achter elkaar. Een andere tester ontdekte dat het verwijderen van redeneringsitems niet hielp, terwijl het verwijderen van het enkele zoekitem dat wel deed.
In één test voltooide de versie met web_search verklaard in 2,63 seconden en deed geen nieuwe zoekopdrachten. Het verklaren van de tool zorgt er niet voor dat het model opnieuw zoekt.
Wat de community heeft geprobeerd, en wat daadwerkelijk werkt
De LINUX DO-thread die deze post uitlokte, doorliep de meeste gebruikelijke gissingen:
| Suggestie | Helpt? | Waarom |
|---|---|---|
| Verklein context, compacteer eerder | Nee | Grootte is niet de trigger |
| Verbind via IP, wijzig nginx | Nee | De fout komt van upstream |
| Schakel over naar WebSocket | Onbetrouwbaar | Dezelfde aanvraagbody in beide gevallen |
| Log in op ChatGPT direct | Nee | Officiële login faalt ook |
| Nieuwe sessie, geef context door | Tussenoplossing | Breekt opnieuw na een zoekopdracht |
| Schakel webzoek uit | Ja, voor nieuwe sessies | Geen zoekopdracht, geen trigger |
| Verklaar web_search in de aanvraag | Ja | Voldoet aan de controle |
Een paar van deze hebben meer uitleg nodig.
Nginx en IP. Time-outs en inactieve verbindingen kunnen andere "stream disconnected" fouten veroorzaken, maar ze kunnen dit bericht niet genereren. Beheerders van de betrokken proxies bevestigden dat het bericht niet door de proxy wordt gegenereerd; het komt van de upstream-provider. Als het bericht er is, heeft het netwerk de aanvraag doorgestuurd en teruggekregen.
WebSocket. De gateway-patches die werkten, moesten zowel het WebSocket-pad als HTTP dekken, omdat WebSocket-aanvragen dezelfde body bevatten. Een sessie die "herstelde" na het overschakelen van transport had waarschijnlijk geen zoekopdracht in zijn geschiedenis.
Officiële login. Meldingen op de openai/codex-tracker omvatten de desktop-app en codex-cli die rechtstreeks zijn ingelogd met een ChatGPT-account, zonder proxy. Vanaf 10 oktober vermeldt geen enkele Codex-release een oplossing, en de problemen hebben geen reactie van de onderhouders.
Wat je nu kunt doen
Schakel webzoek uit voor nieuwe sessies
Schakel zoekopdracht uit in ~/.codex/config.toml:
web_search = "disabled"
De Codex-configuratiereferentie vermeldt vier waarden: disabled, cached (de standaard), indexed en live. Sessies die zijn gestart met --yolo of een andere sandbox met volledige toegang standaard op live, dus stel het expliciet in.
Pas dit toe op nieuwe sessies. Een oude sessie heeft al web_search_call items in zijn geschiedenis. Met zoekopdracht uitgeschakeld, stoppen normale beurten ook met het verklaren van de tool, zodat die beurten ook kunnen beginnen met falen. Dat volgt uit de regel hierboven, maar niemand heeft het nog getest.
De kosten zijn dat Codex niet op het web kan zoeken. Voor een sessie die zoekopdracht nodig heeft, open een aparte korte sessie, of laat het model bevindingen naar een bestand schrijven dat de lange sessie leest.
Red een vastgelopen sessie
Niets aan jouw kant zal een vastgelopen sessie laten compacten terwijl de backend zich zo gedraagt. Om het werk te behouden:
- Laat de vastgelopen sessie zoals deze is. De geschiedenis staat nog steeds op schijf onder
~/.codex/sessions/. - Start een nieuwe sessie met webzoek uitgeschakeld.
- Verwijs naar het oude sessiebestand, of plak een korte overdracht: het doel, de gewijzigde bestanden, genomen beslissingen en wat er nog over is.
- Stop met het verzenden van prompts naar de oude sessie. Elke poging herhaalt de compactie en faalt opnieuw.
Als je je eigen gateway onderhoudt
De oplossing die werkt volgt één regel. Als input een web_search_call bevat en er geen web_search* tool is verklaard, voeg er dan een toe. Als de aanroeper geen tools heeft verklaard, stel dan tool_choice in op "none" zodat de tool niet kan draaien. Laat input met rust.
def declare_replayed_web_search(body: dict) -> dict:
"""Laat de upstream een herhaalde web_search_call in een tool-loze aanvraag accepteren."""
items = body.get("input")
if not isinstance(items, list):
return body
if not any(isinstance(i, dict) and i.get("type") == "web_search_call" for i in items):
return body
tools = body.get("tools") or []
if any(isinstance(t, dict) and str(t.get("type", "")).startswith("web_search") for t in tools):
return body
caller_had_tools = bool(tools)
# Alleen gecachte index: de verklaring bestaat om de controle te voldoen, niet om te zoeken.
body["tools"] = tools + [{"type": "web_search", "external_web_access": False}]
if not caller_had_tools:
body["tool_choice"] = "none"
return body
Responses Lite-aanvragen zijn een uitzondering. Ze retourneren een 400 als web_search in de top-level tools staat. De werkende patches plaatsen het in het eerste additional_tools inputitem in plaats daarvan, en houden eventuele achterblijvende compaction_trigger als laatste. Het alternatief, het verwijderen van zoekitems uit compactieverzoeken, werkt ook, maar de samenvatting verliest dan wat de zoekopdracht heeft gevonden.
Als je liever niet afhankelijk bent van de abonnementsbackend
Elke melding die we hebben gevonden gaat via de abonnementsbackend van ChatGPT, het eindpunt dat Codex gebruikt met een ChatGPT-login. De regels zijn niet gedocumenteerd, en deze is zonder kennisgeving veranderd.
Codex kan ook de openbare Responses API gebruiken met een API-sleutel. We hebben nog geen melding van deze fout op dat pad gezien, maar we hebben de reproductie daar ook niet zelf uitgevoerd, dus beschouw dat als een observatie, niet als een garantie. Om Codex op te zetten met een AIHubMix-sleutel, volg de Codex CLI-tutorial:
model = "gpt-6.1-sol"
model_provider = "aihubmix"
[model_providers.aihubmix]
name = "AIHubMix"
base_url = "https://aihubmix.com/v1"
wire_api = "responses"
env_key = "AIHUBMIX_API_KEY"
API-prijzen zijn per token, niet per abonnement. Tarieven staan op de gpt-6.1-sol modelpagina.
Checklist
- De fouttekst bevat "response protection is unavailable", of compactie faalt met "stream closed before response.completed".
- Normale beurten werken nog steeds en alleen de compactie faalt.
- De sessie heeft op een bepaald moment webzoek gebruikt, mogelijk zonder dat erom is gevraagd.
- Nieuwe sessies hebben web_search ingesteld op disabled.
- Vastgelopen werk is verplaatst naar een nieuwe sessie met een overdrachtsnotitie.
- Een gateway die je onderhoudt voegt een web_search-verklaring toe wanneer de geschiedenis een zoekopdracht bevat.
- Nginx- en proxy-netwerkinstellingen zijn met rust gelaten. Ze zijn niet de oorzaak.
FAQ
Wat betekent "response protection is unavailable" in Codex?
Het is een fout van de Codex-backend van ChatGPT, niet van Codex zelf of je proxy. Sinds begin oktober 2026 verschijnt het wanneer een aanvraag een eerdere webzoekopdracht herhaalt maar het webzoektool niet verklaart, wat precies is wat een compactieverzoek doet.
Is mijn contextvenster te groot?
Nee. Testers reproduceerden het met een compactiedrempel van 2.000 tokens, en sessies van dezelfde grootte zonder een zoekopdracht compacten normaal. Het lijkt alleen gerelateerd aan de grootte omdat compactie alleen wordt uitgevoerd in lange sessies.
Heeft het invloed op de officiële Codex-app met een ChatGPT-login?
Ja. Gebruikers van de desktop-app en codex-cli melden het bij directe ChatGPT-logins zonder proxy. Vanaf 10 oktober 2026 vermeldt geen enkele Codex-release een oplossing.
Hoe kan ik zien of een sessie het zal tegenkomen?
Als de sessie op enig moment webzoek heeft gebruikt, zal de volgende compactie waarschijnlijk falen. Codex registreert elke zoekopdracht als een web_search_call item in de sessiebestanden onder de .codex/sessions map.
Zal het uitschakelen van webzoek een sessie die al vastzit oplossen?
Waarschijnlijk niet. De oude geschiedenis bevat nog steeds de zoekopdracht, en zodra de zoekopdracht is uitgeschakeld, kunnen normale beurten stoppen met het verklaren van de tool en ook falen. Gebruik de instelling voor nieuwe sessies en verplaats het werk.
Helpt het overschakelen naar WebSocket of het wijzigen van nginx?
Nee. De aanvraagbody is hetzelfde over beide transporten, en de fout komt van upstream, dus netwerkinstellingen kunnen het niet verwijderen. Andere streamfouten kunnen voortkomen uit time-outs, maar niet deze.
Gebeuren deze fouten wanneer Codex een API-sleutel gebruikt in plaats van een ChatGPT-abonnement?
Alle meldingen tot nu toe hebben betrekking op de abonnementsbackend. Niemand heeft het gerapporteerd op de openbare Responses API, hoewel dat niet rechtstreeks is getest.
Blijf lezen: de GPT-6.1 Sol-serie
- Als deze fout direct na het overschakelen van Codex naar GPT-6.1 Sol verscheen, behandelt de migratiegids de andere wijzigingen die een setup kunnen breken: Migreren naar GPT-6.1 Sol: 9 Dingen die fout kunnen gaan
- Lange agent-sessies zijn waar inspanningsinstellingen het belangrijkst zijn, voor snelheid en hoe snel je de compactie benadert: Een redeneerinspanning kiezen voor GPT-6.1 Sol: laag tot maximaal
Bronnen
- Windows Codex Desktop: contextcompactie faalt altijd (openai/codex)
- Remote compactie faalt na het hervatten van de gehoste web_search_call geschiedenis (openai/codex)
- Codex remote compactie faalt met 502 "reactiebescherming is niet beschikbaar" (OpenAI Developer Community)
- Codex configuratiereferentie (OpenAI)
- Codex CLI + AIHubMix integratietutorial (AIHubMix)



