Dit is een fan-site, niet gelieerd aan het officiële OpenClaw-project of Anthropic. github.com/openclaw/openclaw
release

OpenClaw 4.15: de kreeft wisselt van brein en leert op zijn eigen sleutels te letten

OpenClaws.io Team

OpenClaws.io Team

@openclaws

April 16, 2026

6 min lezen

OpenClaw 4.15: de kreeft wisselt van brein en leert op zijn eigen sleutels te letten

Toen de vorige release-golf was afgelopen, was de kreeft net uit een tiendaagse security-belegering gekropen. Het pantser een laag dikker. De scharen net iets sneller. Maar zwemmend door het water keek hij nog steeds niet echt naar zichzelf.

Wat 4.15 doet is niet spectaculair, maar de richting is helder: geef de kreeft een beter brein, leer hem een blik te werpen op de sleutels in zijn hand, en verhuis zijn geheugen ondertussen stilletjes naar een andere plek.

Deze versie gaat op geen enkele productscreenshot de hero-positie pakken. Maar als je klaar bent met de update, zijn er een paar defaults stil van hun plek gegaan—en als je ergens in een hoekje op het oude gedrag leunde, is het goed om dat van tevoren te weten.

Een nieuw brein: Opus 4.7

De standaardkeuze voor Anthropic wijst nu naar Claude Opus 4.7. Tot nu toe dwong de alias opus je om zelf een specifieke versie vast te prikken in je config; nu wijst hij direct naar de nieuwste Opus. De default via de Claude CLI loopt mee.

Mee komt het beeldbegrip van Opus 4.7—dat stuk had eerder een extra plugin of een externe vision-provider nodig, en is deze keer direct in de core gebundeld. Je gooit een screenshot in het chatvenster en de kreeft kan het nu zelf lezen. Geen omweg meer nodig.

Als je de provider handmatig op een oudere Opus had vastgezet, blijft deze upgrade van je config af—een expliciete pin houdt voorrang. Maar als je op de defaults draaide, ga je merken dat zowel de chatsnelheid als de beeldinterpretatie een stap vooruit zijn geschoven.

Een uitweg voor machines die het niet bijhouden

Tegelijk met de promotie van Opus 4.7 duikt een vlag op die de andere kant uit wijst: agents.defaults.experimental.localModelLean: true.

Hij is bedoeld voor kleine lokale modellen. Als je hem aanzet, vallen de zware tools die kleine modellen verstikken—browser, cron en consorten—automatisch uit de prompt. Het contextvenster wordt een kerf slanker, de inferentiebelasting wat lichter. De experimental in de naam is eerlijk: er wordt nog aan geschaafd. Maar als je op je eigen machine een 7B of 13B draait, is deze vlag voor jou misschien interessanter dan de promotie van Opus.

"Wie sterk is, krijgt meer kracht; wie zwak is, minder last"—dat is de minder zichtbare rode draad die door deze release loopt.

Voor het eerst zijn de sleutels zichtbaar

Dit is wat in deze versie het meeste aandacht verdient, en tegelijk het makkelijkst over het hoofd wordt gezien.

In de Control UI is een nieuwe kaart verschenen, Model Auth Status Card. Wat hij doet klinkt alledaags: hij vertelt je of het OAuth-token van elke gebonden provider gezond is, hoe lang het nog heeft voor het verloopt, en of rate limits het de laatste tijd dichtgedrukt hebben.

Klinkt alledaags, maar deze kaart was er voorheen niet. Dat een OAuth-token was verlopen kwam je te weten op het exacte moment dat de provider een 401 terugstuurde; rate limits werden reëel zodra je halverwege een run vastliep. De kreeft gebruikte die credentials al die tijd, maar er was nooit één plek waar hij—of jij—die staat had kunnen zien voordat er iets brak.

Achter de kaart zit een nieuwe gateway-methode: models.authStatus. Hij komt met een cache van 60 seconden, zodat de UI niet écht elke seconde de provider aan het pollen is. Als meerdere clients dezelfde kreeft-instance delen, krijgt het introspection-endpoint van de provider er ook niet van langs.

Naast de kaart komen er een paar fixes op een lagere laag. Credential race—voordat de socket opnieuw opengaat, worden openstaande auth-opslagen eerst naar schijf geduwd. Zo vreet een reconnect geen authenticatie meer op die op het punt stond af te ronden. Workspace-bestandstoegang—alle pad-operaties lopen nu door de gedeelde fs-safe-helper, en symlinks die naar allowlist-bestanden wijzen worden afgewezen. Geen van beide is demovideo-materiaal, maar ze passen allebei onder hetzelfde thema: de kreeft heeft een duidelijker beeld van wat hij vasthoudt.

Memory verhuist stilletjes

Deze release verandert drie dingen in de memory-laag. Bij elkaar opgeteld zijn het een stap met een richting.

Ten eerste, memory-indexen in LanceDB accepteren nu remote object storage. Tot nu toe leefden ze alleen op lokale schijf, wat betekent dat van machine wisselen je dwong de index opnieuw op te bouwen en dat geheugen delen tussen apparaten in de praktijk onhaalbaar was. In deze versie kan dezelfde LanceDB-index op S3 (of op een S3-compatibele store) staan, en de lokale schijf wordt alleen nog een cachelaag. Voor wie de kreeft over meerdere machines heeft uitgestrooid, of heen en weer beweegt tussen een laptop en een VPS, is dit de sleutelstap van "geheugen zit vast aan de machine" naar "geheugen zit vast aan het account".

Ten tweede, GitHub Copilot stapt de embedding-provider-pool binnen. Zoeken in memory heeft een embedding-model nodig om de entries te vectoriseren, en tot nu toe koos je tussen OpenAI, een lokale sentence-transformers en een handvol andere. Er is nu een optie bij: als je al een Copilot-abonnement hebt, kan zoeken in memory hetzelfde auth-kanaal hergebruiken—met een eigen host-helper die remote overrides en token refresh respecteert.

Ten derde—en als enige met een brekende rand—dreaming.storage.mode verandert zijn default van inline naar separate.

Dreaming is de fase waarin de kreeft in zijn "vrije tijd" het geheugen samenvat en opnieuw ordent. De phase blocks die dat proces produceerde belandden tot nu toe direct in het memory-bestand van die dag. Voordeel: alles op één tijdlijn. Nadeel: het memory-bestand werd dik van de gegenereerde inhoud en de diffs werden onleesbaar.

De nieuwe default stuurt de phase blocks naar een apart pad: memory/dreaming/{phase}/YYYY-MM-DD.md—één bestand per fase per dag, zodat het oorspronkelijke memory-bestand alleen het handgeschreven spul overhoudt. De upgrade overschrijft je bestaande memory-bestanden niet, maar zodra dreaming de volgende keer draait, gaat de output naar de nieuwe plek. Als je scripts had die dreaming-inhoud uit het memory-bestand lazen, moeten die scripts een nieuw pad.

Wil je het oude gedrag houden, zet dan deze instelling expliciet terug op inline.

De stem van Google komt er ook bij

De gebundelde Google-plugin krijgt Gemini TTS-ondersteuning: voiceselectie, WAV-output en PCM-formaat bedoeld voor telefonie. Als je Google Cloud toch al gebruikte voor STT of andere Gemini-calls, hoef je geen aparte TTS-provider meer aan te haken—dezelfde authenticatie draagt van begin tot eind.

Geen enorme verandering. Maar een stuk dat je eerder zelf in elkaar moest zetten, komt nu gebruiksklaar binnen.

De dingen die het niet tot de koppen gehaald hebben, maar waar je waarschijnlijk elke dag op trapte

De rest verdient geen eigen sectie. Maar bij elkaar dekken ze een flinke portie alledaagse frictie af:

  • De 404's van de Ollama-chat zijn gefixt. Als je model-ID het prefix ollama/ had, stuurde de oude versie dat prefix één-op-één door naar de Ollama-server en kreeg een 404 terug. De nieuwe versie haalt het prefix eraf voordat de request vertrekt.
  • Het downloaden van afbeeldingen in BlueBubbles is weer compatibel met Node 22+—en passant is de retry-logica van de webhook en het ophalen van bijlagen ook opnieuw gedaan. Als je op macOS BlueBubbles gebruikt om iMessage te bruggen, trek bij het ophogen van Node meteen deze release mee omhoog.
  • Streaming-watchdog in de TUI—als er binnen 30 seconden geen chat-event delta binnenkomt, wordt de streaming-indicator gereset. Eerder bleef de TUI in de status "streaming" hangen als de provider de stream stil afbrak. Dat gebeurt nu niet meer.
  • Invalidatie van de skill-snapshotskills.* veranderen liet voorheen al geopende agent-sessies doordraaien met de oude skill-lijst; een herstart was nodig om de nieuwe te zien. Nu invalideert elke configwijziging de gecachte snapshot.
  • Stream guard voor onbekende tools, standaard aan—eerder was dit een opt-in-bescherming: als het model een toolnaam hallucineert die niet bestaat, voorkomt de guard dat "Tool X not found" in een oneindige loop gaat draaien. Nu staat hij standaard aan, zonder iets te configureren.
  • Padresolutie~-paden buiten de workspace worden nu tegen de home van het OS opgelost, niet meer tegen OPENCLAW_HOME. Als die twee directories uit elkaar liepen, kon hetzelfde ~/foo.txt in edit en write naar verschillende plekken wijzen; de fix brengt ze weer op één lijn.
  • Prompt cache alignment—in task-scoped-adapter-runs is de ingaande chat-ID in de system prompt nu gestabiliseerd, zodat meerdere calls binnen dezelfde task een hogere hitrate in de prompt cache halen.
  • MEDIA tool-result passthrough—eerder matchte de MEDIA: passthrough vanuit vertrouwde lokale tools losjes op built-in toolnamen. Nu is de matching exact, en client-tools waarvan de genormaliseerde naam botst met een built-in worden aan de poort geweigerd. Naamcollisies zijn geen achterdeur meer.
  • Replay-recovery—een 401 input item ID does not belong to this connection die de provider teruggeeft wordt nu geclassificeerd als "replay-invalid", met de juiste session-reset-aanwijzing, in plaats van dat het als een gewone 401 zonder einde wordt geretryd.

Defaults die verschoven zijn

Deze release heeft een paar defaults verschoven; handig om ze op een rijtje te zetten:

  • dreaming.storage.mode: inlineseparate (phase blocks landen in memory/dreaming/{phase}/YYYY-MM-DD.md)
  • Stream guard voor onbekende tools: standaard aan (was opt-in)
  • Gebundelde Microsoft / ElevenLabs-spraakproviders: standaard aan
  • Standaard Anthropic-keuze: wijst naar Opus 4.7
  • Default van de Claude CLI: gelijkgetrokken met Opus 4.7

De eerste twee zijn gedragsveranderingen. Als je op het oude gedrag leunde, overschrijf het dan expliciet in de config voordat je upgradet.

In één zin

Als je maar één ding meeneemt uit deze post: draai openclaw update en open de Control UI om naar de nieuwe Model Auth Status Card te kijken. Die kaart gaat je iets vertellen dat je eerder niet wist—welke sleutels de kreeft nu precies vasthoudt, welke bijna verloopt en welke de laatste tijd door rate limits dichtgeknepen is.

Als je een zware gebruiker van dreaming bent, of als je ooit de ruwe tekst van phase blocks in je memory-bestanden hebt doorgebladerd—let dan op de default-wijziging bij dreaming.storage.mode. De nieuwe dreaming-output gaat naar de submap memory/dreaming/. De eerste keer dat dreaming na de upgrade draait, laat een blik op die map meteen zien hoe het nu werkt.

Blijf op de hoogte

Ontvang updates over nieuwe functies en integraties. Geen spam, altijd opzegbaar.