Fundamentals
Motore di contesto
Un motore di contesto controlla come OpenClaw costruisce il contesto del modello per ogni esecuzione: quali messaggi includere, come riassumere la cronologia meno recente e come gestire il contesto attraverso i confini dei subagent.
OpenClaw include un motore legacy integrato e lo usa per impostazione predefinita: la maggior parte degli utenti non deve mai modificarlo. Installa e seleziona un motore Plugin solo quando desideri un comportamento diverso per assemblaggio, Compaction o richiamo tra sessioni.
Avvio rapido
Controlla quale motore è attivo
openclaw doctor# or inspect config directly:cat ~/.openclaw/openclaw.json | jq '.plugins.slots.contextEngine'Installa un motore Plugin
I Plugin dei motori di contesto si installano come qualsiasi altro Plugin di OpenClaw.
Da npm
openclaw plugins install @martian-engineering/lossless-clawDa un percorso locale
openclaw plugins install -l ./my-context-engineAbilita e seleziona il motore
// openclaw.json{ plugins: { slots: { contextEngine: "lossless-claw", // must match the plugin's registered engine id }, entries: { "lossless-claw": { enabled: true, // Plugin-specific config goes here (see the plugin's docs) }, }, },}Riavvia il gateway dopo l'installazione e la configurazione.
Torna a legacy (facoltativo)
Imposta contextEngine su "legacy" (oppure rimuovi del tutto la chiave: "legacy" è il valore predefinito).
Come funziona
Ogni volta che OpenClaw esegue un prompt del modello, il motore di contesto partecipa in quattro punti del ciclo di vita:
1. Acquisizione
Chiamato quando un nuovo messaggio viene aggiunto alla sessione. Il motore può archiviare o indicizzare il messaggio nel proprio archivio dati.
2. Assemblaggio
Chiamato prima di ogni esecuzione del modello. Il motore restituisce un insieme ordinato di messaggi (e un systemPromptAddition facoltativo) che rientrano nel budget di token.
3. Compact
Chiamato quando la finestra di contesto è piena o quando l'utente esegue /compact. Il motore riassume la cronologia meno recente per liberare spazio.
4. Dopo il turno
Chiamato al completamento di un'esecuzione. Il motore può persistere lo stato, attivare la Compaction in background o aggiornare gli indici.
Per l'harness Codex non ACP in bundle, OpenClaw applica lo stesso ciclo di vita proiettando il contesto assemblato nelle istruzioni per sviluppatori di Codex e nel prompt del turno corrente. Codex mantiene comunque la proprietà della propria cronologia nativa dei thread e del compattatore nativo.
Ciclo di vita dei subagent (facoltativo)
OpenClaw chiama due hook facoltativi del ciclo di vita dei subagent:
prepareSubagentSpawnmethodPrepara lo stato di contesto condiviso prima dell'avvio di un'esecuzione figlia. L'hook riceve le chiavi di sessione padre/figlio, contextMode (isolated o fork), gli id/file di trascrizione disponibili e un TTL facoltativo. Se restituisce un handle di rollback, OpenClaw lo chiama quando lo spawn non riesce dopo che la preparazione è riuscita. Gli spawn di subagent nativi che richiedono lightContext e si risolvono in contextMode="isolated" saltano intenzionalmente questo hook, in modo che il figlio parta dal contesto bootstrap leggero senza stato pre-spawn gestito dal motore di contesto.
onSubagentEndedmethodEsegue la pulizia quando una sessione di subagent viene completata o eliminata.
Aggiunta al prompt di sistema
Il metodo assemble può restituire una stringa systemPromptAddition. OpenClaw la antepone al prompt di sistema dell'esecuzione. Questo permette ai motori di iniettare indicazioni dinamiche di richiamo, istruzioni di recupero o suggerimenti consapevoli del contesto senza richiedere file statici dell'area di lavoro.
Il motore legacy
Il motore legacy integrato preserva il comportamento originale di OpenClaw:
- Acquisizione: nessuna operazione (il gestore di sessione gestisce direttamente la persistenza dei messaggi).
- Assemblaggio: pass-through (la pipeline esistente sanitize → validate → limit nel runtime gestisce l'assemblaggio del contesto).
- Compact: delega alla Compaction di riepilogo integrata, che crea un unico riepilogo dei messaggi meno recenti e mantiene intatti i messaggi recenti.
- Dopo il turno: nessuna operazione.
Il motore legacy non registra strumenti né fornisce un systemPromptAddition.
Quando plugins.slots.contextEngine non è impostato (oppure è impostato su "legacy"), questo motore viene usato automaticamente.
Motori Plugin
Un Plugin può registrare un motore di contesto usando l'API Plugin:
export default function register(api) { api.registerContextEngine("my-engine", (ctx) => ({ info: { id: "my-engine", name: "My Context Engine", ownsCompaction: true, }, async ingest({ sessionId, message, isHeartbeat }) { // Store the message in your data store return { ingested: true }; }, async assemble({ sessionId, messages, tokenBudget, availableTools, citationsMode }) { // Return messages that fit the budget return { messages: buildContext(messages, tokenBudget), estimatedTokens: countTokens(messages), systemPromptAddition: buildMemorySystemPromptAddition({ availableTools: availableTools ?? new Set(), citationsMode, }), }; }, async compact({ sessionId, force }) { // Summarize older context return { ok: true, compacted: true }; }, }));}La factory ctx include valori facoltativi config, agentDir e workspaceDir
così i Plugin possono inizializzare lo stato per agente o per area di lavoro prima
dell'esecuzione del primo hook del ciclo di vita.
Poi abilitalo nella configurazione:
{ plugins: { slots: { contextEngine: "my-engine", }, entries: { "my-engine": { enabled: true, }, }, },}L'interfaccia ContextEngine
Membri obbligatori:
| Membro | Tipo | Scopo |
|---|---|---|
info |
Proprietà | Id del motore, nome, versione e se possiede Compaction |
ingest(params) |
Metodo | Archivia un singolo messaggio |
assemble(params) |
Metodo | Costruisce il contesto per un'esecuzione del modello (restituisce AssembleResult) |
compact(params) |
Metodo | Riassume/riduce il contesto |
assemble restituisce un AssembleResult con:
messagesMessage[]requiredI messaggi ordinati da inviare al modello.
estimatedTokensnumberrequiredLa stima del motore del totale dei token nel contesto assemblato. OpenClaw la usa per le decisioni sulla soglia di Compaction e per i report diagnostici.
systemPromptAdditionstringAnteposto al prompt di sistema.
promptAuthority"assembled" | "preassembly_may_overflow"Controlla quale stima dei token usa il runner per i precontrolli preventivi di overflow. Il valore predefinito è "assembled", il che significa che per i motori che non possiedono Compaction viene controllata solo la stima del prompt assemblato. I motori che impostano ownsCompaction: true gestiscono autonomamente l'ammissione del proprio prompt, quindi OpenClaw salta per impostazione predefinita il precontrollo generico pre-prompt. Imposta "preassembly_may_overflow" solo quando la vista assemblata può nascondere il rischio di overflow nella trascrizione sottostante; il runner mantiene quindi attivo il precontrollo generico e prende il massimo tra la stima assemblata e la stima della cronologia della sessione pre-assemblaggio (senza finestra) quando decide se eseguire preventivamente la Compaction. In ogni caso, i messaggi restituiti sono comunque quelli che il modello vede: promptAuthority influisce solo sul precontrollo.
compact restituisce un CompactResult. Quando la Compaction ruota la trascrizione attiva, result.sessionId e result.sessionFile identificano la sessione successiva che il prossimo tentativo o turno deve usare.
Membri facoltativi:
| Membro | Tipo | Scopo |
|---|---|---|
bootstrap(params) |
Metodo | Inizializza lo stato del motore per una sessione. Chiamato una volta quando il motore vede per la prima volta una sessione (ad esempio, importazione della cronologia). |
ingestBatch(params) |
Metodo | Acquisisce un turno completato come batch. Chiamato al completamento di un'esecuzione, con tutti i messaggi di quel turno in una sola volta. |
afterTurn(params) |
Metodo | Lavoro del ciclo di vita post-esecuzione (persistere lo stato, attivare la Compaction in background). |
prepareSubagentSpawn(params) |
Metodo | Configura lo stato condiviso per una sessione figlia prima che inizi. |
onSubagentEnded(params) |
Metodo | Esegue la pulizia dopo la fine di un subagent. |
dispose() |
Metodo | Rilascia le risorse. Chiamato durante l'arresto del Gateway o il ricaricamento del Plugin, non per sessione. |
Impostazioni di runtime
Gli hook del ciclo di vita eseguiti all'interno di OpenClaw ricevono un oggetto
runtimeSettings facoltativo. È una superficie API interna produttore/consumatore,
versionata e di sola lettura: OpenClaw la produce per il motore di contesto
selezionato e il motore di contesto la consuma all'interno degli hook del ciclo
di vita. Non viene resa direttamente agli utenti e non crea una superficie di
reporting dedicata.
schemaVersion: attualmente1runtime: host OpenClaw, modalità runtime (normal,fallbackodegraded) e id harness/runtime facoltativicontextEngineSelection: id del motore di contesto selezionato e origine della selezioneexecutionHost: id host ed etichetta per la superficie che invoca l'hookmodel: modello richiesto, modello risolto, provider e famiglia di modelli facoltativalimits: budget di token del prompt e token massimi di output quando notidiagnostics: codici chiusi di fallback e motivo degraded quando noti
I campi che possono essere sconosciuti sono rappresentati come null; i campi
discriminatore come la modalità runtime e l'origine della selezione restano non
nullable. I motori più vecchi rimangono compatibili: se un motore legacy rigoroso
rifiuta runtimeSettings come proprietà sconosciuta, OpenClaw riprova la chiamata
del ciclo di vita senza di essa invece di mettere il motore in quarantena.
Requisiti dell'host
I motori di contesto possono dichiarare requisiti di capacità dell'host su info.hostRequirements.
OpenClaw verifica questi requisiti prima di avviare l'operazione e fallisce in modo chiuso
con un errore descrittivo quando il runtime selezionato non può soddisfarli.
Per le esecuzioni degli agenti, dichiara assemble-before-prompt quando il motore deve controllare il
prompt effettivo del modello tramite assemble():
info: { id: "my-context-engine", name: "My Context Engine", hostRequirements: { "agent-run": { requiredCapabilities: ["assemble-before-prompt"], unsupportedMessage: "Use the native Codex or OpenClaw embedded runtime, or select the legacy context engine.", }, },}Le esecuzioni agente native di Codex e OpenClaw embedded soddisfano assemble-before-prompt.
I backend CLI generici no, quindi i motori che lo richiedono vengono rifiutati prima dell'avvio
del processo CLI.
Isolamento degli errori
OpenClaw isola il motore Plugin selezionato dal percorso di risposta principale. Se un
motore non legacy manca, non supera la convalida del contratto, genera un'eccezione durante la creazione
della factory o genera un'eccezione da un metodo del ciclo di vita, OpenClaw mette in quarantena quel motore
per il processo Gateway corrente e degrada il lavoro del motore di contesto al
motore legacy integrato. L'errore viene registrato con l'operazione non riuscita, così
l'operatore può riparare, aggiornare o disabilitare il Plugin senza che l'agente resti
silenzioso.
Gli errori dei requisiti dell'host sono diversi: quando un motore dichiara che un runtime non dispone di una capacità richiesta, OpenClaw si arresta in modo fail-closed prima di avviare l'esecuzione. Questo protegge i motori che corromperebbero lo stato se venissero eseguiti in un host non supportato.
ownsCompaction
ownsCompaction controlla se l'auto-compaction integrata nel runtime OpenClaw durante il tentativo resta abilitata per l'esecuzione:
ownsCompaction: true
Il motore possiede il comportamento di compaction. OpenClaw disabilita l'auto-compaction integrata nel runtime OpenClaw e il precontrollo generico di overflow pre-prompt per quell'esecuzione, e l'implementazione compact() del motore è responsabile di /compact, della compaction di recupero dall'overflow del provider e di qualsiasi compaction proattiva che voglia eseguire in afterTurn(). OpenClaw esegue comunque la salvaguardia di overflow pre-prompt quando il motore restituisce promptAuthority: "preassembly_may_overflow" da assemble().
ownsCompaction: false o non impostato
L'auto-compaction integrata nel runtime OpenClaw può comunque essere eseguita durante l'esecuzione del prompt, ma il metodo compact() del motore attivo viene comunque chiamato per /compact e per il recupero dall'overflow.
Questo significa che esistono due pattern Plugin validi:
Modalità proprietaria
Implementa il tuo algoritmo di compaction e imposta ownsCompaction: true.
Modalità delegata
Imposta ownsCompaction: false e fai in modo che compact() chiami delegateCompactionToRuntime(...) da openclaw/plugin-sdk/core per usare il comportamento di compaction integrato di OpenClaw.
Un compact() no-op non è sicuro per un motore attivo che non possiede la compaction, perché disabilita il normale percorso di compaction /compact e di recupero dall'overflow per quello slot del motore.
Riferimento di configurazione
{ plugins: { slots: { // Select the active context engine. Default: "legacy". // Set to a plugin id to use a plugin engine. contextEngine: "legacy", }, },}Relazione con compaction e memoria
Compaction
Compaction è una responsabilità del motore di contesto. Il motore legacy delega alla summarization integrata di OpenClaw. I motori Plugin possono implementare qualsiasi strategia di compaction (riepiloghi DAG, recupero vettoriale, ecc.).
Plugin di memoria
I Plugin di memoria (plugins.slots.memory) sono separati dai motori di contesto. I Plugin di memoria forniscono ricerca/recupero; i motori di contesto controllano ciò che vede il modello. Possono lavorare insieme: un motore di contesto potrebbe usare dati del Plugin di memoria durante l'assemblaggio. I motori Plugin che vogliono il percorso attivo del prompt di memoria dovrebbero preferire buildMemorySystemPromptAddition(...) da openclaw/plugin-sdk/core, che converte le sezioni attive del prompt di memoria in un systemPromptAddition pronto da anteporre. Se un motore necessita di controllo a livello più basso, può comunque estrarre righe grezze da openclaw/plugin-sdk/memory-host-core tramite buildActiveMemoryPromptSection(...).
Potatura della sessione
Il trimming in memoria dei vecchi risultati degli strumenti viene comunque eseguito indipendentemente dal motore di contesto attivo.
Suggerimenti
- Usa
openclaw doctorper verificare che il tuo motore venga caricato correttamente. - Se cambi motore, le sessioni esistenti continuano con la loro cronologia corrente. Il nuovo motore prende il controllo per le esecuzioni future.
- Gli errori del motore vengono registrati e il motore Plugin selezionato viene messo in quarantena per il processo Gateway corrente. OpenClaw ripiega su
legacyper i turni utente così le risposte possono continuare, ma dovresti comunque riparare, aggiornare, disabilitare o disinstallare il Plugin rotto. - Per lo sviluppo, usa
openclaw plugins install -l ./my-engineper collegare una directory Plugin locale senza copiarla.
Correlati
- Compaction - riepilogo delle conversazioni lunghe
- Contesto - come viene costruito il contesto per i turni dell'agente
- Architettura dei Plugin - registrazione dei Plugin motore di contesto
- Manifest Plugin - campi del manifest Plugin
- Plugin - panoramica dei Plugin