Gateway
Configurazione — agenti
Chiavi di configurazione con ambito agente in agents.*, multiAgent.*, session.*,
messages.* e talk.*. Per canali, strumenti, runtime del Gateway e altre
chiavi di primo livello, consultare il riferimento della configurazione.
Valori predefiniti degli agenti
agents.defaults.workspace
Valore predefinito: OPENCLAW_WORKSPACE_DIR quando impostato, altrimenti ~/.openclaw/workspace (oppure ~/.openclaw/workspace-<profile> quando OPENCLAW_PROFILE è impostato su un profilo non predefinito).
{ agents: { defaults: { workspace: "~/.openclaw/workspace" } },}Un valore agents.defaults.workspace esplicito ha la precedenza su
OPENCLAW_WORKSPACE_DIR. Usare la variabile di ambiente per indirizzare gli agenti predefiniti
a uno spazio di lavoro montato quando non si desidera scrivere tale percorso nella configurazione.
agents.defaults.repoRoot
Radice facoltativa del repository mostrata nella riga Runtime del prompt di sistema. Se non impostata, OpenClaw la rileva automaticamente risalendo dallo spazio di lavoro.
{ agents: { defaults: { repoRoot: "~/Projects/openclaw" } },}agents.defaults.skills
Allowlist predefinita facoltativa delle Skills per gli agenti che non impostano
agents.list[].skills.
{ agents: { defaults: { skills: ["github", "weather"] }, list: [ { id: "writer" }, // eredita github, weather { id: "docs", skills: ["docs-search"] }, // sostituisce i valori predefiniti { id: "locked-down", skills: [] }, // nessuna skill ], },}- Omettere
agents.defaults.skillsper consentire per impostazione predefinita Skills senza restrizioni. - Omettere
agents.list[].skillsper ereditare i valori predefiniti. - Impostare
agents.list[].skills: []per non consentire alcuna skill. - Un elenco
agents.list[].skillsnon vuoto costituisce l'insieme definitivo per tale agente; non viene unito ai valori predefiniti.
agents.defaults.skipBootstrap
Disabilita la creazione automatica dei file di bootstrap dello spazio di lavoro (AGENTS.md, SOUL.md, TOOLS.md, IDENTITY.md, USER.md, HEARTBEAT.md, BOOTSTRAP.md).
{ agents: { defaults: { skipBootstrap: true } },}agents.defaults.skipOptionalBootstrapFiles
Ignora la creazione di determinati file facoltativi dello spazio di lavoro, continuando comunque a scrivere i file di bootstrap obbligatori (AGENTS.md, TOOLS.md, BOOTSTRAP.md). Valori validi: SOUL.md, USER.md, HEARTBEAT.md e IDENTITY.md.
{ agents: { defaults: { skipOptionalBootstrapFiles: ["SOUL.md", "USER.md"], }, },}agents.defaults.contextInjection
Controlla quando i file di bootstrap dello spazio di lavoro vengono inseriti nel prompt di sistema. Valore predefinito: "always".
"continuation-skip": nei turni di continuazione sicuri (dopo una risposta completata dell'assistente) viene omesso il reinserimento del bootstrap dello spazio di lavoro, riducendo le dimensioni del prompt. Le esecuzioni Heartbeat e i nuovi tentativi successivi alla Compaction ricostruiscono comunque il contesto."never": disabilita l'inserimento del bootstrap dello spazio di lavoro e dei file di contesto a ogni turno. Usare questa opzione solo per gli agenti che gestiscono integralmente il proprio ciclo di vita del prompt (motori di contesto personalizzati, runtime nativi che costruiscono il proprio contesto o flussi di lavoro specializzati senza bootstrap). Anche i turni Heartbeat e di ripristino dalla Compaction omettono l'inserimento.
{ agents: { defaults: { contextInjection: "continuation-skip" } },}Override per agente: agents.list[].contextInjection. I valori omessi ereditano
agents.defaults.contextInjection.
agents.defaults.bootstrapMaxChars
Numero massimo di caratteri per ciascun file di bootstrap dello spazio di lavoro prima del troncamento. Valore predefinito: 20000.
{ agents: { defaults: { bootstrapMaxChars: 20000 } },}Override per agente: agents.list[].bootstrapMaxChars. I valori omessi ereditano
agents.defaults.bootstrapMaxChars.
agents.defaults.bootstrapTotalMaxChars
Numero totale massimo di caratteri inseriti da tutti i file di bootstrap dello spazio di lavoro. Valore predefinito: 60000.
{ agents: { defaults: { bootstrapTotalMaxChars: 60000 } },}Override per agente: agents.list[].bootstrapTotalMaxChars. I valori omessi
ereditano agents.defaults.bootstrapTotalMaxChars.
Override del profilo di bootstrap per agente
Usare gli override del profilo di bootstrap per agente quando un agente richiede un comportamento di inserimento nel prompt
diverso dai valori predefiniti condivisi. I campi omessi ereditano da
agents.defaults.
{ agents: { defaults: { contextInjection: "continuation-skip", bootstrapMaxChars: 20000, bootstrapTotalMaxChars: 60000, }, list: [ { id: "strict-worker", contextInjection: "always", bootstrapMaxChars: 50000, bootstrapTotalMaxChars: 300000, }, ], },}agents.defaults.bootstrapPromptTruncationWarning
Controlla l'avviso nel prompt di sistema visibile all'agente quando il contesto di bootstrap viene troncato.
Valore predefinito: "always".
"off": non inserire mai il testo dell'avviso di troncamento nel prompt di sistema."once": inserire un avviso conciso una volta per ogni firma di troncamento univoca."always": inserire un avviso conciso a ogni esecuzione quando è presente un troncamento (consigliato).
I conteggi grezzi/inseriti dettagliati e i campi per l'ottimizzazione della configurazione rimangono nella diagnostica, ad esempio nei report di contesto/stato e nei log; il normale contesto utente/runtime di WebChat riceve soltanto l'avviso conciso di ripristino.
{ agents: { defaults: { bootstrapPromptTruncationWarning: "always" } }, // off | once | always}Mappa della titolarità dei budget di contesto
OpenClaw dispone di più budget ad alto volume per prompt/contesto, intenzionalmente suddivisi per sottosistema anziché gestiti tutti tramite un'unica opzione generica.
| Budget | Include |
|---|---|
agents.defaults.bootstrapMaxChars / bootstrapTotalMaxChars |
Normale inserimento del bootstrap dello spazio di lavoro |
agents.defaults.startupContext.* |
Preambolo una tantum per l'esecuzione del modello all'avvio o dopo il ripristino, inclusi i file memory/*.md giornalieri recenti. I semplici comandi di chat /new e /reset vengono confermati senza richiamare il modello |
skills.limits.* |
L'elenco compatto delle Skills inserito nel prompt di sistema |
agents.defaults.contextLimits.* |
Estratti limitati del runtime e blocchi inseriti di proprietà del runtime |
memory.qmd.limits.* |
Dimensionamento degli estratti indicizzati della ricerca in memoria e del relativo inserimento |
Override corrispondenti per agente:
agents.list[].skillsLimits.maxSkillsPromptCharsagents.list[].contextInjectionagents.list[].bootstrapMaxCharsagents.list[].bootstrapTotalMaxCharsagents.list[].contextLimits.*
agents.defaults.startupContext
Controlla il preambolo di avvio del primo turno inserito nelle esecuzioni del modello all'avvio o dopo il ripristino.
I semplici comandi di chat /new e /reset confermano il ripristino senza richiamare
il modello, pertanto non caricano questo preambolo.
{ agents: { defaults: { startupContext: { enabled: true, applyOn: ["new", "reset"], dailyMemoryDays: 2, maxFileBytes: 16384, maxFileChars: 1200, maxTotalChars: 2800, }, }, },}agents.defaults.contextLimits
Valori predefiniti condivisi per le superfici di contesto del runtime con dimensioni limitate.
{ agents: { defaults: { contextLimits: { memoryGetMaxChars: 12000, memoryGetDefaultLines: 120, postCompactionMaxChars: 1800, }, }, },}memoryGetMaxChars: limite predefinito dell'estrattomemory_getprima dell'aggiunta dei metadati di troncamento e dell'avviso di continuazione.memoryGetDefaultLines: intervallo predefinito di righememory_getquandolinesviene omesso.toolResultMaxChars: limite avanzato dei risultati live degli strumenti, utilizzato per i risultati persistenti e il ripristino in caso di superamento. Lasciare non impostato per il limite automatico del contesto del modello:16000caratteri sotto i 100K token,32000caratteri con almeno 100K token e64000caratteri con almeno 200K token. Per i modelli con contesto esteso sono accettati valori espliciti fino a1000000, ma il limite effettivo resta comunque circoscritto a circa il 30% della finestra di contesto del modello.openclaw doctor --deepmostra il limite effettivo e doctor genera un avviso solo quando un override esplicito è obsoleto o non produce effetti.postCompactionMaxChars: limite dell'estratto di AGENTS.md utilizzato durante l'inserimento di aggiornamento successivo alla Compaction.
agents.list[].contextLimits
Override per agente delle opzioni condivise contextLimits. I campi omessi ereditano
da agents.defaults.contextLimits.
{ agents: { defaults: { contextLimits: { memoryGetMaxChars: 12000 }, }, list: [ { id: "tiny-local", contextLimits: { memoryGetMaxChars: 6000, toolResultMaxChars: 8000, // limite avanzato per questo agente }, }, ], },}skills.limits.maxSkillsPromptChars
Limite globale per l'elenco compatto delle Skills inserito nel prompt di sistema. Ciò
non influisce sulla lettura su richiesta dei file SKILL.md.
{ skills: { limits: { maxSkillsPromptChars: 18000 } },}agents.list[].skillsLimits.maxSkillsPromptChars
Override per agente del budget del prompt delle Skills.
{ agents: { list: [{ id: "tiny-local", skillsLimits: { maxSkillsPromptChars: 6000 } }], },}agents.defaults.imageMaxDimensionPx
Dimensione massima in pixel del lato più lungo delle immagini nei blocchi immagine di trascrizioni/strumenti prima delle chiamate al provider.
Valore predefinito: 1200.
Valori inferiori generalmente riducono l'uso dei token di visione e le dimensioni del payload delle richieste per le esecuzioni con molte schermate. Valori superiori preservano più dettagli visivi.
{ agents: { defaults: { imageMaxDimensionPx: 1200 } },}agents.defaults.imageQuality
Preferenza di compressione/dettaglio dello strumento immagini per le immagini caricate da percorsi di file, URL e riferimenti multimediali.
Valore predefinito: auto.
OpenClaw adatta la sequenza di ridimensionamento al modello di immagini selezionato. Ad esempio, Claude Opus 4.8, OpenAI GPT-5.6 Sol, Qwen VL e i modelli di visione Llama 4 ospitati possono usare immagini più grandi rispetto ai percorsi di visione più datati/predefiniti ad alto dettaglio, mentre i turni con più immagini vengono compressi più aggressivamente in modalità auto per controllare il costo in termini di token e latenza.
Valori:
auto: adattamento ai limiti del modello e al numero di immagini.efficient: preferenza per immagini più piccole per ridurre l'uso di token e byte.balanced: uso della sequenza intermedia standard.high: conservazione di maggiori dettagli per schermate, diagrammi e immagini di documenti.
{ agents: { defaults: { imageQuality: "auto" } },}agents.defaults.userTimezone
Fuso orario per il contesto del prompt di sistema (non per i timestamp dei messaggi). In assenza di un valore, viene usato il fuso orario dell'host.
{ agents: { defaults: { userTimezone: "America/Chicago" } },}agents.defaults.timeFormat
Formato dell'ora nel prompt di sistema. Valore predefinito: auto (preferenza del sistema operativo).
{ agents: { defaults: { timeFormat: "auto" } }, // auto | 12 | 24}agents.defaults.model
{ agents: { defaults: { models: { "anthropic/claude-opus-4-6": { alias: "opus" }, "minimax/MiniMax-M2.7": { alias: "minimax" }, }, model: { primary: "anthropic/claude-opus-4-6", fallbacks: ["minimax/MiniMax-M2.7"], }, utilityModel: "openai/gpt-5.4-mini", imageModel: { primary: "openrouter/qwen/qwen-2.5-vl-72b-instruct:free", fallbacks: ["openrouter/google/gemini-2.0-flash-vision:free"], }, imageGenerationModel: { primary: "openai/gpt-image-2", fallbacks: ["google/gemini-3.1-flash-image-preview"], }, videoGenerationModel: { primary: "qwen/wan2.6-t2v", fallbacks: ["qwen/wan2.6-i2v"], }, pdfModel: { primary: "anthropic/claude-opus-4-6", fallbacks: ["openai/gpt-5.4-mini"], }, params: { cacheRetention: "long" }, // parametri globali predefiniti del provider pdfMaxBytesMb: 10, pdfMaxPages: 20, thinkingDefault: "low", verboseDefault: "off", toolProgressDetail: "explain", reasoningDefault: "off", elevatedDefault: "on", timeoutSeconds: 600, mediaMaxMb: 5, contextTokens: 200000, maxConcurrent: 4, }, },}model: accetta una stringa ("provider/model") oppure un oggetto ({ primary, fallbacks }).- La forma stringa imposta solo il modello principale.
- La forma oggetto imposta il modello principale e i modelli di failover ordinati.
utilityModel: riferimento o aliasprovider/modelfacoltativo per brevi attività interne. Attualmente viene utilizzato per i titoli generati delle sessioni della Control UI, i titoli degli argomenti dei messaggi diretti di Telegram, i titoli automatici dei thread di Discord e la narrazione delle bozze di avanzamento. Quando non è impostato, OpenClaw ricava il modello piccolo predefinito dichiarato dal provider principale, se disponibile (OpenAI →gpt-5.6-luna, Anthropic →claude-haiku-4-5); in caso contrario, le attività relative ai titoli utilizzano il modello principale dell'agente, mentre la narrazione rimane disattivata. ImpostareutilityModel: ""per disabilitare completamente l'instradamento delle attività di utilità.agents.list[].utilityModelsostituisce il valore predefinito (un valore vuoto specifico per agente lo disabilita per tale agente) e un override del modello specifico per l'operazione ha la precedenza su entrambi. Le attività di utilità effettuano chiamate separate al modello e inviano contenuti specifici dell'attività al provider del modello selezionato. La generazione dei titoli della dashboard invia al massimo i primi 1.000 caratteri del primo messaggio che non sia un comando; la narrazione invia la richiesta in ingresso insieme a riepiloghi compatti e oscurati degli strumenti. Scegliere un provider conforme ai propri requisiti di costo e trattamento dei dati.imageModel: accetta una stringa ("provider/model") oppure un oggetto ({ primary, fallbacks }).- Viene utilizzato dal percorso dello strumento
imagecome configurazione del modello di visione quando il modello attivo non può accettare immagini. I modelli con visione nativa ricevono invece direttamente i byte delle immagini caricate. - Viene utilizzato anche come instradamento di fallback quando il modello selezionato o predefinito non può accettare immagini in input.
- Preferire riferimenti
provider/modelespliciti. Gli ID senza qualificatore sono accettati per compatibilità; se un ID senza qualificatore corrisponde in modo univoco a una voce configurata in grado di elaborare immagini inmodels.providers.*.models, OpenClaw lo qualifica con tale provider. Le corrispondenze configurate ambigue richiedono un prefisso del provider esplicito.
- Viene utilizzato dal percorso dello strumento
imageGenerationModel: accetta una stringa ("provider/model") oppure un oggetto ({ primary, fallbacks }).- Viene utilizzato dalla funzionalità condivisa di generazione di immagini e da qualsiasi futura superficie di strumenti o Plugin che generi immagini.
- Valori tipici:
google/gemini-3.1-flash-image-previewper la generazione nativa di immagini Gemini,fal/fal-ai/flux/devper fal,openai/gpt-image-2per OpenAI Images oppureopenai/gpt-image-1.5per l'output OpenAI PNG/WebP con sfondo trasparente. - Se si seleziona direttamente un provider/modello, configurare anche l'autenticazione del provider corrispondente (ad esempio
GEMINI_API_KEYoGOOGLE_API_KEYpergoogle/*,OPENAI_API_KEYo OpenAI Codex OAuth peropenai/gpt-image-2/openai/gpt-image-1.5,FAL_KEYperfal/*). - Se omesso,
image_generatepuò comunque determinare un provider predefinito dotato di autenticazione. Prova prima il provider predefinito corrente, quindi i restanti provider registrati per la generazione di immagini in ordine di ID del provider.
musicGenerationModel: accetta una stringa ("provider/model") oppure un oggetto ({ primary, fallbacks }).- Viene utilizzato dalla funzionalità condivisa di generazione musicale e dallo strumento integrato
music_generate. - Valori tipici:
google/lyria-3-clip-preview,google/lyria-3-pro-previewoppureminimax/music-2.6. - Se omesso,
music_generatepuò comunque determinare un provider predefinito dotato di autenticazione. Prova prima il provider predefinito corrente, quindi i restanti provider registrati per la generazione musicale in ordine di ID del provider. - Se si seleziona direttamente un provider/modello, configurare anche l'autenticazione o la chiave API del provider corrispondente.
- Viene utilizzato dalla funzionalità condivisa di generazione musicale e dallo strumento integrato
videoGenerationModel: accetta una stringa ("provider/model") oppure un oggetto ({ primary, fallbacks }).- Viene utilizzato dalla funzionalità condivisa di generazione video e dallo strumento integrato
video_generate. - Valori tipici:
qwen/wan2.6-t2v,qwen/wan2.6-i2v,qwen/wan2.6-r2v,qwen/wan2.6-r2v-flashoppureqwen/wan2.7-r2v. - Se omesso,
video_generatepuò comunque determinare un provider predefinito dotato di autenticazione. Prova prima il provider predefinito corrente, quindi i restanti provider registrati per la generazione video in ordine di ID del provider. - Se si seleziona direttamente un provider/modello, configurare anche l'autenticazione o la chiave API del provider corrispondente.
- Il Plugin ufficiale di Qwen per la generazione video supporta fino a 1 video di output, 1 immagine di input, 4 video di input, una durata di 10 secondi e le opzioni a livello di provider
size,aspectRatio,resolution,audioewatermark.
- Viene utilizzato dalla funzionalità condivisa di generazione video e dallo strumento integrato
pdfModel: accetta una stringa ("provider/model") oppure un oggetto ({ primary, fallbacks }).- Viene utilizzato dallo strumento
pdfper l'instradamento del modello. - Se omesso, lo strumento PDF utilizza come fallback
imageModel, quindi il modello risolto per la sessione o quello predefinito.
- Viene utilizzato dallo strumento
pdfMaxBytesMb: limite predefinito per le dimensioni dei PDF dello strumentopdfquandomaxBytesMbnon viene passato al momento della chiamata.pdfMaxPages: numero massimo predefinito di pagine considerate dalla modalità di fallback per l'estrazione nello strumentopdf.verboseDefault: livello di verbosità predefinito per gli agenti. Valori:"off","on","full". Valore predefinito:"off".toolProgressDetail: modalità di dettaglio per i riepiloghi dello strumento/verbosee le righe degli strumenti nelle bozze di avanzamento. Valori:"explain"(predefinito, etichette sintetiche e leggibili) oppure"raw"(aggiunge il comando o il dettaglio non elaborato, quando disponibile). Il valoreagents.list[].toolProgressDetailspecifico per agente sostituisce questa impostazione predefinita.reasoningDefault: visibilità predefinita del ragionamento per gli agenti. Valori:"off","on","stream". Il valoreagents.list[].reasoningDefaultspecifico per agente sostituisce questa impostazione predefinita. Le impostazioni predefinite del ragionamento configurate vengono applicate solo per proprietari, mittenti autorizzati o contesti Gateway di amministratori operatori, quando non è impostato alcun override del ragionamento per messaggio o sessione.elevatedDefault: livello predefinito dell'output con privilegi elevati per gli agenti. Valori:"off","on","ask","full". Valore predefinito:"on".model.primary: formatoprovider/model(ad esempioopenai/gpt-5.6-solper l'accesso OAuth di Codex). Se si omette il provider, OpenClaw prova prima un alias, poi una corrispondenza univoca tra i provider configurati per l'ID esatto del modello e solo successivamente utilizza come fallback il provider predefinito configurato (comportamento di compatibilità deprecato; preferire quindiprovider/modelesplicito). Se tale provider non espone più il modello predefinito configurato, OpenClaw utilizza come fallback il primo provider/modello configurato anziché segnalare un valore predefinito obsoleto relativo a un provider rimosso.models: il catalogo dei modelli configurato e l'elenco consentito per/model. Ogni voce può includerealias(scorciatoia) eparams(specifico del provider, ad esempiotemperature,maxTokens,cacheRetention,context1m,responsesServerCompaction,responsesCompactThreshold, instradamentoproviderdi OpenRouter,chat_template_kwargs,extra_body/extraBody).- Utilizzare voci
provider/*come"openai/*": {}o"vllm/*": {}per mostrare tutti i modelli rilevati per i provider selezionati senza elencare manualmente ogni ID di modello. - Aggiungere
agentRuntimea una voceprovider/*quando tutti i modelli rilevati dinamicamente per tale provider devono utilizzare lo stesso runtime. La politica di runtimeprovider/modelesatta mantiene comunque la precedenza sul carattere jolly. - Modifiche sicure: utilizzare
openclaw config set agents.defaults.models '<json>' --strict-json --mergeper aggiungere voci.config setrifiuta le sostituzioni che rimuoverebbero voci esistenti dall'elenco consentito, a meno che non venga passato--replace. - I flussi di configurazione/onboarding circoscritti al provider uniscono in questa mappa i modelli del provider selezionato e conservano i provider non correlati già configurati.
- Per i modelli OpenAI Responses diretti, la Compaction lato server viene abilitata automaticamente. Utilizzare
params.responsesServerCompaction: falseper interrompere l'inserimento dicontext_managementoppureparams.responsesCompactThresholdper sostituire la soglia. Consultare Compaction lato server di OpenAI.
- Utilizzare voci
params: parametri globali predefiniti del provider applicati a tutti i modelli. Impostare inagents.defaults.params(ad esempio{ cacheRetention: "long" }).- Precedenza di unione di
params(configurazione):agents.defaults.params(base globale) viene sostituito daagents.defaults.models["provider/model"].params(per modello), quindiagents.list[].params(ID agente corrispondente) sostituisce i valori per chiave. Per i dettagli, consultare Caching dei prompt. models.providers.openrouter.params.provider: politica predefinita di instradamento dei provider valida per l'intero OpenRouter. OpenClaw la inoltra all'oggettoproviderdella richiesta di OpenRouter;agents.defaults.models["openrouter/<model>"].params.providerper modello e i parametri dell'agente sostituiscono i valori per chiave. Consultare Instradamento dei provider di OpenRouter.params.extra_body/params.extraBody: JSON avanzato inoltrato senza modifiche e unito nei corpi delle richiesteapi: "openai-completions"per proxy compatibili con OpenAI. In caso di conflitto con le chiavi di richiesta generate, prevale il corpo aggiuntivo; le route di completamento non native rimuovono comunque in seguitostore, specifico di OpenAI.params.chat_template_kwargs: argomenti dei template di chat compatibili con vLLM/OpenAI uniti nei corpi delle richiesteapi: "openai-completions"di primo livello. Pervllm/nemotron-3-*con il ragionamento disattivato, il Plugin vLLM incluso invia automaticamenteenable_thinking: falseeforce_nonempty_content: true; i valorichat_template_kwargsespliciti sostituiscono le impostazioni predefinite generate eextra_body.chat_template_kwargsmantiene la precedenza finale. I modelli di ragionamento Qwen e Nemotron configurati per vLLM espongono scelte binarie/think(off,on) anziché la scala di intensità multilivello.compat.thinkingFormat: stile del payload di ragionamento compatibile con OpenAI. Utilizzare"together"perreasoning.enabledin stile Together,"qwen"perenable_thinkingdi primo livello in stile Qwen oppure"qwen-chat-template"perchat_template_kwargs.enable_thinkingsui backend della famiglia Qwen che supportano argomenti del template di chat a livello di richiesta, come vLLM. OpenClaw associa il ragionamento disabilitato afalsee quello abilitato atrue; i modelli Qwen configurati per vLLM espongono scelte binarie/thinkper questi formati.compat.supportedReasoningEfforts: elenco per modello dei livelli di intensità del ragionamento compatibili con OpenAI. Includere"xhigh"per gli endpoint personalizzati che lo accettano effettivamente; OpenClaw espone quindi/think xhighnei menu dei comandi, nelle righe delle sessioni del Gateway, nella convalida delle patch delle sessioni, nella convalida della CLI dell'agente e nella convalida dillm-taskper quel provider/modello configurato. Utilizzarecompat.reasoningEffortMapquando il backend richiede un valore specifico del provider per un livello canonico.params.preserveThinking: opzione di consenso esplicito, riservata a Z.AI, per conservare il ragionamento. Quando è abilitata e il ragionamento è attivo, OpenClaw inviathinking.clear_thinking: falsee riproduce i precedentireasoning_content; consultare Ragionamento e conservazione del ragionamento di Z.AI.localService: gestore di processi facoltativo a livello di provider per server di modelli locali/self-hosted. Quando il modello selezionato appartiene a tale provider, OpenClaw verificahealthUrl(obaseUrl + "/models"), avviacommandconargsse l'endpoint non è disponibile, attende fino areadyTimeoutMs, quindi invia la richiesta al modello.commanddeve essere un percorso assoluto.idleStopMs: 0mantiene attivo il processo fino alla chiusura di OpenClaw; un valore positivo arresta il processo avviato da OpenClaw dopo il numero specificato di millisecondi di inattività. Consultare Servizi di modelli locali.- I criteri di runtime devono essere definiti nei provider o nei modelli, non in
agents.defaults. Usaremodels.providers.<provider>.agentRuntimeper le regole applicabili all'intero provider oppureagents.defaults.models["provider/model"].agentRuntime/agents.list[].models["provider/model"].agentRuntimeper le regole specifiche del modello. Il solo prefisso del provider/modello non seleziona mai un harness. Se il runtime non è impostato o èauto, OpenAI può selezionare implicitamente Codex solo per una route HTTPS ufficiale esatta Platform Responses o ChatGPT Responses, senza alcuna sostituzione definita nella richiesta. Consultare runtime dell'agente implicito di OpenAI. - Gli strumenti di scrittura della configurazione che modificano questi campi (ad esempio
/models set,/models set-imagee i comandi per aggiungere/rimuovere fallback) salvano la forma canonica dell'oggetto e, ove possibile, mantengono gli elenchi di fallback esistenti. maxConcurrent: numero massimo di esecuzioni parallele di agenti tra le sessioni (ogni sessione rimane comunque serializzata). Valore predefinito:4.
Criteri di runtime
{ models: { providers: { openai: { agentRuntime: { id: "codex" }, }, }, }, agents: { defaults: { model: "openai/gpt-5.6-sol", models: { "anthropic/claude-opus-4-8": { agentRuntime: { id: "claude-cli" }, }, "vllm/*": { agentRuntime: { id: "openclaw" }, }, }, }, },}id:"auto","openclaw", un id di harness di Plugin registrato o un alias di backend CLI supportato. Il Plugin Codex incluso registracodex; il Plugin Anthropic incluso fornisce il backend CLIclaude-cli.id: "auto"consente agli harness di Plugin registrati di gestire le route effettive che dichiarano o soddisfano in altro modo il relativo contratto di supporto e usa OpenClaw quando nessun harness corrisponde. Un runtime di Plugin esplicito comeid: "codex"richiede tale harness e una route effettiva compatibile; in caso di indisponibilità di uno dei due o di errore di esecuzione, genera un errore senza ripiego.id: "pi"è accettato solo come alias deprecato diopenclawper preservare le configurazioni distribuite con v2026.5.22 e versioni precedenti. Le nuove configurazioni devono usareopenclaw.- La precedenza del runtime applica prima i criteri del modello esatto (
agents.list[].models["provider/model"],agents.defaults.models["provider/model"]omodels.providers.<provider>.models[]), quindiagents.list[]/agents.defaults.models["provider/*"]e infine i criteri a livello di provider inmodels.providers.<provider>.agentRuntime. - Le chiavi di runtime per l'intero agente sono obsolete.
agents.defaults.agentRuntime,agents.list[].agentRuntime, i vincoli del runtime di sessione eOPENCLAW_AGENT_RUNTIMEvengono ignorati dalla selezione del runtime. Eseguireopenclaw doctor --fixper rimuovere i valori obsoleti. - Le route HTTPS ufficiali OpenAI Responses/ChatGPT esatte e idonee, prive di sostituzioni esplicite nella richiesta, possono usare implicitamente l'harness Codex. Il valore
agentRuntime.id: "codex"del provider/modello rende Codex un requisito senza ripiego in caso di errore, ma non rende compatibile una route incompatibile. - Per le distribuzioni Claude CLI, preferire
model: "anthropic/claude-opus-4-8"insieme aagentRuntime.id: "claude-cli"con ambito di modello. I riferimenticlaude-cli/<model>obsoleti continuano a funzionare per compatibilità, ma le nuove configurazioni devono mantenere canonica la selezione di provider/modello e specificare il backend di esecuzione nei criteri di runtime del provider/modello. - Questa impostazione controlla solo l'esecuzione dei turni testuali dell'agente. La generazione multimediale, la visione, i PDF, la musica, i video e il TTS continuano a usare le rispettive impostazioni di provider/modello.
Abbreviazioni degli alias integrate (si applicano solo quando il modello è in agents.defaults.models):
| Alias | Modello |
|---|---|
opus |
anthropic/claude-opus-4-8 |
sonnet |
anthropic/claude-sonnet-4-6 |
gpt |
openai/gpt-5.4 |
gpt-mini |
openai/gpt-5.4-mini |
gpt-nano |
openai/gpt-5.4-nano |
gemini |
google/gemini-3.1-pro-preview |
gemini-flash |
google/gemini-3-flash-preview |
gemini-flash-lite |
google/gemini-3.1-flash-lite |
Gli alias configurati hanno sempre la precedenza sui valori predefiniti.
I modelli Z.AI GLM-4.x abilitano automaticamente la modalità di ragionamento, a meno che non venga impostato --thinking off o definito direttamente agents.defaults.models["zai/<model>"].params.thinking.
I modelli Z.AI abilitano tool_stream per impostazione predefinita per lo streaming delle chiamate agli strumenti. Impostare agents.defaults.models["zai/<model>"].params.tool_stream su false per disabilitarlo.
In OpenClaw, Anthropic Claude Opus 4.8 mantiene il ragionamento disattivato per impostazione predefinita; quando il ragionamento adattivo viene abilitato esplicitamente, il valore predefinito dell'impegno gestito dal provider Anthropic è high. I modelli Claude 4.6 usano per impostazione predefinita adaptive quando non è impostato esplicitamente alcun livello di ragionamento.
agents.defaults.cliBackends
Backend CLI facoltativi per esecuzioni di ripiego esclusivamente testuali (senza chiamate agli strumenti). Utili come riserva quando i provider API non funzionano.
{ agents: { defaults: { cliBackends: { "claude-cli": { command: "/opt/homebrew/bin/claude", }, "my-cli": { command: "my-cli", args: ["--json"], output: "json", modelArg: "--model", sessionArg: "--session", sessionMode: "existing", systemPromptArg: "--system", // In alternativa, usare systemPromptFileArg quando la CLI accetta un flag per il file del prompt. systemPromptWhen: "first", imageArg: "--image", imageMode: "repeat", }, }, }, },}- I backend CLI sono progettati principalmente per il testo; gli strumenti sono sempre disabilitati.
- Le sessioni sono supportate quando è impostato
sessionArg. - Il pass-through delle immagini è supportato quando
imageArgaccetta percorsi di file. reseedFromRawTranscriptWhenUncompacted: trueconsente a un backend di recuperare in modo sicuro le sessioni invalidate da una parte finale limitata della trascrizione OpenClaw non elaborata prima che sia disponibile il primo riepilogo di Compaction. Le modifiche al profilo di autenticazione o all'epoca delle credenziali non eseguono comunque mai un nuovo seeding dai dati non elaborati.
agents.defaults.promptOverlays
Sovrapposizioni del prompt indipendenti dal provider, applicate in base alla famiglia del modello sulle superfici del prompt assemblate da OpenClaw. Gli id dei modelli della famiglia GPT-5 ricevono il contratto di comportamento condiviso su tutte le route OpenClaw/provider; personality controlla solo il livello dello stile di interazione cordiale. Le route native dell'app-server Codex mantengono le istruzioni di base e del modello gestite da Codex anziché questa sovrapposizione GPT-5 di OpenClaw, e OpenClaw disabilita la personalità integrata di Codex per i thread nativi.
{ agents: { defaults: { promptOverlays: { gpt5: { personality: "friendly", // cordiale | attiva | disattiva }, }, }, },}"friendly"(valore predefinito) e"on"abilitano il livello dello stile di interazione cordiale."off"disabilita solo il livello cordiale; il contratto di comportamento GPT-5 contrassegnato rimane abilitato.- Il valore obsoleto
plugins.entries.openai.config.personalityviene ancora letto quando questa impostazione condivisa non è definita.
agents.defaults.heartbeat
Esecuzioni periodiche di Heartbeat.
{ agents: { defaults: { heartbeat: { every: "30m", // 0m disabilita model: "openai/gpt-5.4-mini", includeReasoning: false, includeSystemPromptSection: true, // valore predefinito: true; false omette la sezione Heartbeat dal prompt di sistema lightContext: false, // valore predefinito: false; true mantiene solo HEARTBEAT.md dai file di bootstrap dello spazio di lavoro isolatedSession: false, // valore predefinito: false; true esegue ogni Heartbeat in una nuova sessione (senza cronologia della conversazione) skipWhenBusy: false, // valore predefinito: false; true attende anche le corsie del sottoagente/annidate di questo agente session: "main", to: "+15555550123", directPolicy: "allow", // allow (valore predefinito) | block target: "none", // valore predefinito: none | opzioni: last | whatsapp | telegram | discord | ... prompt: "Leggi HEARTBEAT.md se esiste...", ackMaxChars: 300, suppressToolErrorWarnings: false, timeoutSeconds: 45, }, }, },}every: stringa di durata (ms/s/m/h). Valore predefinito:30m(autenticazione tramite chiave API) o1h(autenticazione OAuth). Impostare su0mper disabilitare.includeSystemPromptSection: quando è false, omette la sezione Heartbeat dal prompt di sistema e non inserisceHEARTBEAT.mdnel contesto di bootstrap. Valore predefinito:true.suppressToolErrorWarnings: quando è true, elimina i payload degli avvisi di errore degli strumenti durante le esecuzioni di Heartbeat.timeoutSeconds: tempo massimo in secondi consentito per un turno dell'agente Heartbeat prima dell'interruzione. Lasciare non impostato per usareagents.defaults.timeoutSeconds, se definito; in caso contrario viene usata la cadenza di Heartbeat, con un limite massimo di 600 secondi.directPolicy: criterio di consegna diretta/DM.allow(valore predefinito) consente la consegna a destinazioni dirette.blockimpedisce la consegna a destinazioni dirette ed emettereason=dm-blocked.lightContext: quando è true, le esecuzioni di Heartbeat usano un contesto di bootstrap leggero e mantengono soloHEARTBEAT.mddai file di bootstrap dello spazio di lavoro.isolatedSession: quando è true, ogni Heartbeat viene eseguito in una nuova sessione senza la cronologia delle conversazioni precedenti. Usa lo stesso modello di isolamento di CronsessionTarget: "isolated". Riduce il costo in token per Heartbeat da ~100K a ~2-5K token.skipWhenBusy: quando è true, le esecuzioni di Heartbeat vengono rinviate se le corsie aggiuntive dell'agente sono occupate: il lavoro del relativo sottoagente associato alla chiave di sessione o dei comandi annidati. Le corsie Cron rinviano sempre gli Heartbeat, anche senza questo flag.- Per agente: impostare
agents.list[].heartbeat. Quando un agente qualsiasi definisceheartbeat, solo tali agenti eseguono gli Heartbeat. - Gli Heartbeat eseguono turni completi dell'agente: intervalli più brevi consumano più token.
agents.defaults.compaction
{ agents: { defaults: { compaction: { mode: "safeguard", // default | safeguard provider: "my-provider", // id di un Plugin provider di Compaction registrato (facoltativo) timeoutSeconds: 180, reserveTokensFloor: 24000, keepRecentTokens: 50000, recentTurnsPreserve: 3, maxHistoryShare: 0.7, identifierPolicy: "strict", // strict | off | custom identifierInstructions: "Conserva esattamente gli ID di distribuzione, gli ID dei ticket e le coppie host:porta.", // usato quando identifierPolicy=custom qualityGuard: { enabled: true, maxRetries: 1 }, midTurnPrecheck: { enabled: false }, // controllo facoltativo della pressione del ciclo degli strumenti postIndexSync: "async", // off | async | await postCompactionSections: ["Session Startup", "Red Lines"], // abilita il reinserimento delle sezioni di AGENTS.md model: "openrouter/anthropic/claude-sonnet-4-6", // sostituzione facoltativa del modello solo per la Compaction truncateAfterCompaction: true, // passa a un file JSONL successivo più piccolo dopo la Compaction maxActiveTranscriptBytes: "20mb", // attivatore facoltativo della Compaction locale preliminare notifyUser: true, // notifiche all'avvio/completamento della Compaction e in caso di degradazione dello svuotamento della memoria (valore predefinito: false) memoryFlush: { enabled: true, model: "ollama/qwen3:8b", // sostituzione facoltativa del modello solo per lo svuotamento della memoria softThresholdTokens: 6000, forceFlushTranscriptBytes: "2mb", systemPrompt: "La sessione si avvicina alla Compaction. Memorizza ora i ricordi persistenti.", prompt: "Scrivi eventuali note durature in memory/YYYY-MM-DD.md; se non c'è nulla da memorizzare, rispondi con l'esatto token silenzioso NO_REPLY.", }, }, }, },}mode:defaultosafeguard(riepilogo suddiviso in blocchi per cronologie lunghe). Vedere Compaction.provider: ID di un Plugin provider di Compaction registrato. Quando è impostato, viene chiamatosummarize()del provider anziché il riepilogo LLM integrato. In caso di errore, viene usato quello integrato. L'impostazione di un provider forzamode: "safeguard". Vedere Compaction.timeoutSeconds: numero massimo di secondi consentito per una singola operazione di Compaction prima che OpenClaw la interrompa. Valore predefinito:180.reserveTokens: margine di token mantenuto disponibile per l'output del modello e i futuri risultati degli strumenti dopo la Compaction. Quando la finestra di contesto del modello è nota, OpenClaw limita la riserva effettiva affinché non consumi il budget del prompt.reserveTokensFloor: riserva minima applicata dal runtime incorporato. Impostare0per disabilitare il limite minimo. Il limite minimo resta soggetto al limite massimo della finestra di contesto attiva.keepRecentTokens: budget del punto di taglio dell'agente per mantenere testualmente la parte finale più recente della trascrizione. Il comando manuale/compactrispetta questo valore quando è impostato esplicitamente; in caso contrario, la Compaction manuale costituisce un checkpoint rigido.recentTurnsPreserve: numero di turni utente/assistente più recenti mantenuti testualmente al di fuori del riepilogo di salvaguardia. Valore predefinito:3.maxHistoryShare: frazione massima del budget di contesto totale consentita per la cronologia conservata dopo la Compaction (intervallo0.1-0.9).identifierPolicy:strict(valore predefinito),offocustom.strictantepone indicazioni integrate per la conservazione degli identificatori opachi durante il riepilogo della Compaction.identifierInstructions: testo personalizzato facoltativo per la conservazione degli identificatori, usato quandoidentifierPolicy=custom.qualityGuard: controlli di nuovo tentativo in caso di output non valido per i riepiloghi di salvaguardia. Abilitati per impostazione predefinita in modalità salvaguardia; impostareenabled: falseper ignorare la verifica.midTurnPrecheck: controllo facoltativo della pressione del ciclo degli strumenti. Quandoenabled: true, OpenClaw controlla la pressione del contesto dopo l'aggiunta dei risultati degli strumenti e prima della chiamata successiva al modello. Se il contesto non è più contenibile, interrompe il tentativo corrente prima di inviare il prompt e riutilizza il percorso di ripristino del controllo preliminare esistente per troncare i risultati degli strumenti oppure eseguire la Compaction e riprovare. Funziona con entrambe le modalità di Compactiondefaultesafeguard. Valore predefinito: disabilitato.postIndexSync: modalità di reindicizzazione della memoria di sessione dopo la Compaction. Valore predefinito:"async". Usare"await"per la massima attualità,"async"per una latenza di Compaction inferiore oppure"off"solo quando la sincronizzazione della memoria di sessione viene gestita altrove.postCompactionSections: nomi facoltativi di sezioni H2/H3 di AGENTS.md da reinserire dopo la Compaction. Il reinserimento è disabilitato quando il valore non è impostato o è impostato su[]. L'impostazione esplicita di["Session Startup", "Red Lines"]abilita tale coppia e mantiene il fallback precedenteEvery Session/Safety. Abilitare questa opzione solo quando il contesto aggiuntivo giustifica il rischio di duplicare le indicazioni del progetto già incluse nel riepilogo della Compaction.model:provider/model-idfacoltativo o alias semplice daagents.defaults.models, usato esclusivamente per il riepilogo della Compaction. Gli alias semplici vengono risolti prima dell'invio; in caso di collisione, gli ID modello letterali configurati mantengono la precedenza. Usare questa opzione quando la sessione principale deve mantenere un modello, ma i riepiloghi della Compaction devono essere eseguiti su un altro; se non impostata, la Compaction usa il modello principale della sessione.truncateAfterCompaction: ruota la trascrizione della sessione attiva dopo la Compaction, in modo che i turni futuri carichino solo il riepilogo e la parte finale non riepilogata, mentre la trascrizione completa precedente resta archiviata. Impedisce la crescita illimitata della trascrizione attiva nelle sessioni di lunga durata. Valore predefinito:false.maxActiveTranscriptBytes: soglia facoltativa in byte (numbero stringhe come"20mb") che attiva la normale Compaction locale prima di un'esecuzione quando la cronologia della trascrizione supera la soglia. RichiedetruncateAfterCompaction, affinché una Compaction riuscita possa passare a una trascrizione successiva più piccola. Disabilitata quando non impostata o quando è0.notifyUser: quandotrue, invia all'utente brevi notifiche sulla manutenzione del contesto: quando la Compaction inizia e termina (ad esempio, "Compattazione del contesto in corso..." e "Compattazione completata") e quando lo svuotamento della memoria precedente alla Compaction esaurisce le risorse, per cui la risposta prosegue in uno stato degradato (ad esempio, "La manutenzione della memoria è temporaneamente non riuscita; la risposta prosegue."). Disabilitato per impostazione predefinita per non mostrare queste notifiche.memoryFlush: turno agentico silenzioso prima della Compaction automatica per archiviare memorie persistenti. Impostaremodelsu un provider/modello esatto, ad esempioollama/qwen3:8b, quando questo turno di manutenzione deve rimanere su un modello locale; la sostituzione non eredita la catena di fallback della sessione attiva.forceFlushTranscriptBytesforza lo svuotamento quando la dimensione della trascrizione raggiunge la soglia, anche se i contatori dei token non sono aggiornati. Viene ignorato quando lo spazio di lavoro è di sola lettura.
agents.defaults.runRetries
Limiti delle iterazioni dei nuovi tentativi del ciclo di esecuzione esterno per il runtime dell'agente incorporato, volti a impedire cicli di esecuzione infiniti durante il ripristino da errori. Questa impostazione si applica solo al runtime dell'agente incorporato, non ai runtime ACP o CLI.
{ agents: { defaults: { runRetries: { base: 24, perProfile: 8, min: 32, max: 160, }, }, list: [ { id: "main", runRetries: { max: 50 }, // sostituzioni facoltative per agente }, ], },}base: numero base di iterazioni dei nuovi tentativi di esecuzione per il ciclo di esecuzione esterno. Valore predefinito:24.perProfile: iterazioni aggiuntive dei nuovi tentativi di esecuzione concesse per ciascun candidato del profilo di fallback. Valore predefinito:8.min: limite assoluto minimo per le iterazioni dei nuovi tentativi di esecuzione. Valore predefinito:32.max: limite assoluto massimo per le iterazioni dei nuovi tentativi di esecuzione, volto a impedire esecuzioni incontrollate. Valore predefinito:160.
agents.defaults.contextPruning
Rimuove i vecchi risultati degli strumenti dal contesto in memoria prima dell'invio all'LLM. Non modifica la cronologia della sessione su disco. Disabilitato per impostazione predefinita; impostare mode: "cache-ttl" per abilitarlo.
{ agents: { defaults: { contextPruning: { mode: "cache-ttl", // off (predefinito) | cache-ttl ttl: "1h", // durata (ms/s/m/h), unità predefinita: minuti; valore predefinito: 5m keepLastAssistants: 3, softTrimRatio: 0.3, hardClearRatio: 0.5, minPrunableToolChars: 50000, softTrim: { maxChars: 4000, headChars: 1500, tailChars: 1500 }, hardClear: { enabled: true, placeholder: "[Contenuto del vecchio risultato dello strumento cancellato]" }, tools: { deny: ["browser", "canvas"] }, }, }, },}Comportamento della modalità cache-ttl
mode: "cache-ttl"abilita i passaggi di eliminazione.ttldetermina la frequenza con cui l'eliminazione può essere eseguita di nuovo (dopo l'ultimo aggiornamento della cache). Valore predefinito:5m.- L'eliminazione prima tronca parzialmente i risultati degli strumenti troppo grandi, quindi, se necessario, cancella completamente quelli meno recenti.
softTrimRatioehardClearRatioaccettano valori da0.0a1.0; la convalida della configurazione rifiuta i valori esterni a tale intervallo.
Il troncamento parziale mantiene l'inizio e la fine e inserisce ... al centro.
La cancellazione completa sostituisce l'intero risultato dello strumento con il segnaposto.
Note:
- I blocchi di immagini non vengono mai troncati o cancellati.
- I rapporti sono basati sui caratteri (in modo approssimativo), non sul conteggio esatto dei token.
- Se sono presenti meno di
keepLastAssistantsmessaggi dell'assistente, l'eliminazione viene ignorata.
Per i dettagli sul comportamento, vedere Eliminazione della sessione.
Streaming a blocchi
{ agents: { defaults: { blockStreamingDefault: "off", // on | off blockStreamingBreak: "text_end", // text_end | message_end blockStreamingChunk: { minChars: 800, maxChars: 1200, breakPreference: "paragraph" }, blockStreamingCoalesce: { idleMs: 1000 }, humanDelay: { mode: "natural" }, // off (predefinito) | natural | custom (usa minMs/maxMs) }, },}- I canali diversi da Telegram richiedono
*.streaming.block.enabled: trueesplicito per abilitare le risposte a blocchi. QQ Bot costituisce un'eccezione: non dispone di chiavistreaming.blocke trasmette le risposte a blocchi, a meno chechannels.qqbot.streaming.modenon sia"off". - Sostituzioni per canale:
channels.<channel>.streaming.block.coalesce(e varianti per account). Discord, Google Chat, Mattermost, MS Teams, Signal e Slack usano per impostazione predefinitaminChars: 1500/idleMs: 1000. blockStreamingChunk.breakPreference: limite preferito dei blocchi ("paragraph" | "newline" | "sentence").humanDelay: pausa casuale tra le risposte a blocchi. Valore predefinito:off.natural= 800-2500ms.customusaminMs/maxMs(per ogni limite non impostato, viene usato l'intervallo naturale). Sostituzione per agente:agents.list[].humanDelay.
Per i dettagli sul comportamento e sulla suddivisione in blocchi, vedere Streaming.
Indicatori di digitazione
{ agents: { defaults: { typingMode: "instant", // never | instant | thinking | message typingIntervalSeconds: 6, }, },}- Valori predefiniti:
instantper chat dirette/menzioni,messageper chat di gruppo senza menzioni. - Valore predefinito di
typingIntervalSeconds:6. - Sostituzioni per sessione:
session.typingMode,session.typingIntervalSeconds.
Vedere Indicatori di digitazione.
agents.defaults.sandbox
Esecuzione facoltativa in sandbox per l'agente incorporato. Per la guida completa, vedere Esecuzione in sandbox.
{ agents: { defaults: { sandbox: { mode: "non-main", // off (default) | non-main | all backend: "docker", // docker (default) | ssh | openshell scope: "agent", // session | agent (default) | shared workspaceAccess: "none", // none (default) | ro | rw workspaceRoot: "~/.openclaw/sandboxes", docker: { image: "openclaw-sandbox:bookworm-slim", containerPrefix: "openclaw-sbx-", workdir: "/workspace", readOnlyRoot: true, tmpfs: ["/tmp", "/var/tmp", "/run"], network: "none", user: "1000:1000", capDrop: ["ALL"], env: { LANG: "C.UTF-8" }, setupCommand: "apt-get update && apt-get install -y git curl jq", pidsLimit: 256, memory: "1g", memorySwap: "2g", cpus: 1, gpus: "all", ulimits: { nofile: { soft: 1024, hard: 2048 }, nproc: 256, }, seccompProfile: "/path/to/seccomp.json", apparmorProfile: "openclaw-sandbox", dns: ["1.1.1.1", "8.8.8.8"], extraHosts: ["internal.service:10.0.0.5"], binds: ["/home/user/source:/source:rw"], }, ssh: { target: "user@gateway-host:22", command: "ssh", workspaceRoot: "/tmp/openclaw-sandboxes", strictHostKeyChecking: true, updateHostKeys: true, identityFile: "~/.ssh/id_ed25519", certificateFile: "~/.ssh/id_ed25519-cert.pub", knownHostsFile: "~/.ssh/known_hosts", // SecretRefs / inline contents also supported: // identityData: { source: "env", provider: "default", id: "SSH_IDENTITY" }, // certificateData: { source: "env", provider: "default", id: "SSH_CERTIFICATE" }, // knownHostsData: { source: "env", provider: "default", id: "SSH_KNOWN_HOSTS" }, }, browser: { enabled: false, image: "openclaw-sandbox-browser:bookworm-slim", network: "openclaw-sandbox-browser", cdpPort: 9222, cdpSourceRange: "172.21.0.1/32", vncPort: 5900, noVncPort: 6080, headless: false, enableNoVnc: true, allowHostControl: false, autoStart: true, autoStartTimeoutMs: 12000, }, prune: { idleHours: 24, maxAgeDays: 7, }, }, }, }, tools: { sandbox: { tools: { allow: [ "exec", "process", "read", "write", "edit", "apply_patch", "sessions_list", "sessions_history", "sessions_send", "sessions_spawn", "session_status", ], deny: ["browser", "canvas", "nodes", "cron", "discord", "gateway"], }, }, },}I valori predefiniti mostrati sopra (off/docker/agent/none/immagine bookworm-slim/rete none/ecc.) sono i valori predefiniti effettivi di OpenClaw, non semplici valori illustrativi.
Dettagli della sandbox
Backend:
docker: runtime Docker locale (predefinito)ssh: runtime remoto generico basato su SSHopenshell: runtime OpenShell
Quando si seleziona backend: "openshell", le impostazioni specifiche del runtime vengono spostate in
plugins.entries.openshell.config.
Configurazione del backend SSH:
target: destinazione SSH nel formatouser@host[:port]command: comando del client SSH (predefinito:ssh)workspaceRoot: radice remota assoluta usata per gli spazi di lavoro di ciascun ambito (predefinita:/tmp/openclaw-sandboxes)identityFile/certificateFile/knownHostsFile: file locali esistenti passati a OpenSSHidentityData/certificateData/knownHostsData: contenuti incorporati o SecretRef che OpenClaw materializza in file temporanei durante il runtimestrictHostKeyChecking/updateHostKeys: opzioni dei criteri per le chiavi host di OpenSSH (entrambe con valore predefinitotrue)
Precedenza dell'autenticazione SSH:
identityDataha la precedenza suidentityFilecertificateDataha la precedenza sucertificateFileknownHostsDataha la precedenza suknownHostsFile- I valori
*Databasati su SecretRef vengono risolti dall'istantanea attiva del runtime dei segreti prima dell'avvio della sessione sandbox
Comportamento del backend SSH:
- inizializza lo spazio di lavoro remoto una volta dopo la creazione o la ricreazione
- quindi mantiene canonico lo spazio di lavoro SSH remoto
- instrada
exec, gli strumenti per i file e i percorsi multimediali tramite SSH - non sincronizza automaticamente con l'host le modifiche remote
- non supporta i container del browser della sandbox
Accesso allo spazio di lavoro:
none: spazio di lavoro della sandbox per ciascun ambito in~/.openclaw/sandboxes(predefinito)ro: spazio di lavoro della sandbox in/workspace, spazio di lavoro dell'agente montato in sola lettura in/agentrw: spazio di lavoro dell'agente montato in lettura/scrittura in/workspace
Ambito:
session: container e spazio di lavoro per ogni sessioneagent: un container e uno spazio di lavoro per ogni agente (predefinito)shared: container e spazio di lavoro condivisi (nessun isolamento tra sessioni)
Configurazione del plugin OpenShell:
{plugins: { entries: { openshell: { enabled: true, config: { mode: "mirror", // mirror (default) | remote command: "openshell", from: "openclaw", remoteWorkspaceDir: "/sandbox", remoteAgentWorkspaceDir: "/agent", gateway: "lab", // optional gatewayEndpoint: "https://lab.example", // optional policy: "strict", // optional OpenShell policy id providers: ["openai"], // optional autoProviders: true, timeoutSeconds: 120, }, }, },},}Modalità OpenShell:
mirror: inizializza l'ambiente remoto da quello locale prima dell'esecuzione e lo sincronizza al termine; lo spazio di lavoro locale rimane canonicoremote: inizializza l'ambiente remoto una volta alla creazione della sandbox, quindi mantiene canonico lo spazio di lavoro remoto
In modalità remote, le modifiche locali sull'host effettuate al di fuori di OpenClaw non vengono sincronizzate automaticamente nella sandbox dopo la fase di inizializzazione.
Il trasporto avviene tramite SSH nella sandbox OpenShell, ma il plugin gestisce il ciclo di vita della sandbox e la sincronizzazione speculare facoltativa.
setupCommand viene eseguito una sola volta dopo la creazione del container (tramite sh -lc). Richiede accesso di rete in uscita, radice scrivibile e utente root.
Per impostazione predefinita, i container usano network: "none" — impostare "bridge" (o una rete bridge personalizzata) se l'agente necessita di accesso in uscita.
"host" è bloccato. "container:<id>" è bloccato per impostazione predefinita, a meno che non si imposti esplicitamente
sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true (misura di emergenza).
I turni del server applicativo Codex in una sandbox OpenClaw attiva usano la stessa impostazione per l'accesso di rete nativo in modalità codice.
Gli allegati in ingresso vengono predisposti in media/inbound/* nello spazio di lavoro attivo.
docker.binds monta directory host aggiuntive; i mount globali e quelli per agente vengono uniti.
Browser nella sandbox (sandbox.browser.enabled, valore predefinito false): Chromium + CDP in un container. L'URL noVNC viene inserito nel prompt di sistema. Non richiede browser.enabled in openclaw.json.
L'accesso di osservazione noVNC usa per impostazione predefinita l'autenticazione VNC e OpenClaw emette un URL con token di breve durata, invece di esporre la password nell'URL condiviso.
allowHostControl: false(predefinito) impedisce alle sessioni nella sandbox di indirizzarsi al browser dell'host.networkusa per impostazione predefinitaopenclaw-sandbox-browser(rete bridge dedicata). Impostarebridgesolo quando si desidera esplicitamente la connettività bridge globale. Anche"host"è bloccato in questo caso.cdpSourceRangelimita facoltativamente l'ingresso CDP sul perimetro del container a un intervallo CIDR (ad esempio172.21.0.1/32).sandbox.browser.bindsmonta directory host aggiuntive esclusivamente nel container del browser della sandbox. Quando è impostato (incluso[]), sostituiscedocker.bindsper il container del browser.- Chromium nel container del browser della sandbox viene sempre avviato con
--no-sandbox --disable-setuid-sandbox(i container non dispongono delle primitive del kernel necessarie alla sandbox di Chrome); non esiste un'opzione di configurazione per modificarlo. - I valori predefiniti di avvio sono definiti in
scripts/sandbox-browser-entrypoint.she ottimizzati per gli host dei container: --remote-debugging-address=127.0.0.1--remote-debugging-port=<derived from OPENCLAW_BROWSER_CDP_PORT>--user-data-dir=${HOME}/.chrome--no-first-run--no-default-browser-check--disable-dev-shm-usage--disable-background-networking--disable-breakpad--disable-crash-reporter--no-zygote--metrics-recording-only--password-store=basic--use-mock-keychain--disable-3d-apis,--disable-gpue--disable-software-rasterizersono abilitati per impostazione predefinita e possono essere disabilitati conOPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0se l'uso di WebGL/3D lo richiede.--disable-extensions(abilitato per impostazione predefinita);OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0riabilita le estensioni se il flusso di lavoro dipende da esse.--renderer-process-limit=2per impostazione predefinita; modificare conOPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=<N>, impostare0per usare il limite di processi predefinito di Chromium.--headless=newsolo quandoheadlessè abilitato.- I valori predefiniti costituiscono la configurazione di base dell'immagine del container; per modificare i valori predefiniti del container, usare un'immagine del browser personalizzata con un punto di ingresso personalizzato.
L'esecuzione del browser nella sandbox e sandbox.docker.binds sono disponibili solo con Docker.
Creare le immagini (da un checkout del codice sorgente):
scripts/sandbox-setup.sh # main sandbox imagescripts/sandbox-browser-setup.sh # optional browser imagePer le installazioni npm senza un checkout del codice sorgente, consultare Sandboxing § Immagini e configurazione per i comandi docker build incorporati.
agents.list (override per agente)
Usare agents.list[].tts per assegnare a un agente un provider TTS, una voce, un modello,
uno stile o una modalità TTS automatica specifici. Il blocco dell'agente viene unito in profondità alla configurazione globale
messages.tts, consentendo di mantenere le credenziali condivise in un'unica posizione mentre i singoli
agenti sostituiscono solo i campi relativi alla voce o al provider necessari. L'override dell'agente attivo
si applica alle risposte vocali automatiche, a /tts audio, /tts status e
allo strumento agente tts. Consultare Sintesi vocale
per esempi di provider e regole di precedenza.
{ agents: { list: [ { id: "main", default: true, name: "Agente principale", workspace: "~/.openclaw/workspace", agentDir: "~/.openclaw/agents/main/agent", model: "anthropic/claude-opus-4-6", // oppure { primary, fallbacks } utilityModel: "openai/gpt-5.4-mini", thinkingDefault: "high", // sostituzione del livello di elaborazione per agente reasoningDefault: "on", // sostituzione della visibilità del ragionamento per agente fastModeDefault: false, // sostituzione della modalità rapida per agente params: { cacheRetention: "none" }, // sostituisce per chiave i parametri corrispondenti di defaults.models tts: { providers: { elevenlabs: { speakerVoiceId: "EXAVITQu4vr4xnSDxMaL" }, }, }, skills: ["docs-search"], // se impostato, sostituisce agents.defaults.skills identity: { name: "Samantha", theme: "bradipo disponibile", emoji: "🦥", avatar: "avatars/samantha.png", }, groupChat: { mentionPatterns: ["@openclaw"] }, sandbox: { mode: "off" }, runtime: { type: "acp", acp: { agent: "codex", backend: "acpx", mode: "persistent", // persistent | oneshot cwd: "/workspace/openclaw", }, }, subagents: { allowAgents: ["*"] }, tools: { profile: "coding", allow: ["browser"], deny: ["canvas"], elevated: { enabled: true }, }, }, ], },}id: ID stabile dell'agente (obbligatorio).default: se ne sono impostati più di uno, prevale il primo (viene registrato un avviso). Se non ne è impostato alcuno, la prima voce dell'elenco è quella predefinita.model: la forma stringa imposta un modello primario rigoroso per agente senza fallback del modello; anche la forma oggetto{ primary }è rigorosa, a meno che non venga aggiuntofallbacks. Usare{ primary, fallbacks: [...] }per abilitare il fallback per tale agente oppure{ primary, fallbacks: [] }per rendere esplicito il comportamento rigoroso. I processi Cron che sostituiscono soloprimarycontinuano a ereditare i fallback predefiniti, a meno che non venga impostatofallbacks: [].utilityModel: sostituzione facoltativa per agente per attività interne brevi, come i titoli generati di sessioni e thread. In assenza di un valore, usaagents.defaults.utilityModel, quindi il modello piccolo predefinito dichiarato dal provider primario e infine il modello primario di questo agente. Una stringa vuota disabilita l'instradamento delle attività di utilità per questo agente.params: parametri del flusso per agente uniti alla voce del modello selezionata inagents.defaults.models. Usare questa opzione per sostituzioni specifiche dell'agente, comecacheRetention,temperatureomaxTokens, senza duplicare l'intero catalogo dei modelli.tts: sostituzioni facoltative della sintesi vocale per agente. Il blocco viene unito in profondità amessages.tts; mantenere quindi le credenziali condivise dei provider e la politica di fallback inmessages.ttse impostare qui soltanto i valori specifici della persona, come provider, voce, modello, stile o modalità automatica.skills: elenco consentito facoltativo delle Skills per agente. Se omesso, l'agente ereditaagents.defaults.skills, se impostato; un elenco esplicito sostituisce i valori predefiniti anziché unirli e[]indica che non è consentita alcuna Skills.thinkingDefault: livello di elaborazione predefinito facoltativo per agente (off | minimal | low | medium | high | xhigh | adaptive | max). Sostituisceagents.defaults.thinkingDefaultper questo agente quando non è impostata alcuna sostituzione per messaggio o sessione. Il profilo del provider/modello selezionato determina quali valori sono validi; per Google Gemini,adaptivemantiene l'elaborazione dinamica gestita dal provider (thinkingLevelomesso in Gemini 3/3.1,thinkingBudget: -1in Gemini 2.5).reasoningDefault: visibilità predefinita facoltativa del ragionamento per agente (on | off | stream). Sostituisceagents.defaults.reasoningDefaultper questo agente quando non è impostata alcuna sostituzione del ragionamento per messaggio o sessione.fastModeDefault: valore predefinito facoltativo della modalità rapida per agente ("auto" | true | false). Si applica quando non è impostata alcuna sostituzione della modalità rapida per messaggio o sessione.models: sostituzioni facoltative del catalogo dei modelli/runtime per agente, indicizzate tramite gli IDprovider/modelcompleti. Usaremodels["provider/model"].agentRuntimeper le eccezioni del runtime per agente.runtime: descrittore facoltativo del runtime per agente. Usaretype: "acp"con i valori predefiniti diruntime.acp(agent,backend,mode,cwd) quando l'agente deve usare per impostazione predefinita sessioni dell'harness ACP.identity.avatar: percorso relativo all'area di lavoro, URLhttp(s)o URIdata:.- I file di immagine
identity.avatarlocali relativi all'area di lavoro sono limitati a 2 MB. Gli URLhttp(s)e gli URIdata:non vengono verificati rispetto al limite di dimensione dei file locali. identityderiva i valori predefiniti:ackReactiondaemoji,mentionPatternsdaname/emoji.subagents.allowAgents: elenco consentito degli ID degli agenti configurati per destinazionisessions_spawn.agentIdesplicite (["*"]= qualsiasi destinazione configurata; valore predefinito: solo lo stesso agente). Includere l'ID del richiedente quando devono essere consentite le chiamateagentIdindirizzate a se stesso. Le voci obsolete la cui configurazione dell'agente è stata eliminata vengono rifiutate dasessions_spawne omesse daagents_list; eseguireopenclaw doctor --fixper rimuoverle oppure aggiungere una voceagents.list[]minima se tale destinazione deve rimanere avviabile ereditando i valori predefiniti.- Protezione dell'ereditarietà della sandbox: se la sessione richiedente è in sandbox,
sessions_spawnrifiuta le destinazioni che verrebbero eseguite senza sandbox. subagents.requireAgentId: quando è true, blocca le chiamatesessions_spawnche omettonoagentId(impone la selezione esplicita del profilo; valore predefinito: false).subagents.maxConcurrent: numero massimo di esecuzioni simultanee di agenti figli nell'esecuzione dei sottoagenti. Valore predefinito:8.subagents.maxChildrenPerAgent: numero massimo di figli attivi che una singola sessione agente può avviare. Valore predefinito:5.subagents.maxSpawnDepth: profondità massima di annidamento per l'avvio dei sottoagenti (1-5). Valore predefinito:1(nessun annidamento).subagents.archiveAfterMinutes: tempo trascorso il quale lo stato dei sottoagenti completati viene archiviato. Valore predefinito:60.
Instradamento multi-agente
Eseguire più agenti isolati all'interno di un unico Gateway. Consultare Multi-agente.
{ agents: { list: [ { id: "home", default: true, workspace: "~/.openclaw/workspace-home" }, { id: "work", workspace: "~/.openclaw/workspace-work" }, ], }, bindings: [ { agentId: "home", match: { channel: "whatsapp", accountId: "personal" } }, { agentId: "work", match: { channel: "whatsapp", accountId: "biz" } }, ],}Campi di corrispondenza delle associazioni
type(facoltativo):routeper l'instradamento normale (se il tipo è assente, il valore predefinito è route),acpper associazioni persistenti delle conversazioni ACP.match.channel(obbligatorio)match.accountId(facoltativo;*= qualsiasi account; omesso = account predefinito)match.peer(facoltativo;{ kind: direct|group|channel, id })match.guildId/match.teamId(facoltativo; specifico del canale)acp(facoltativo; solo pertype: "acp"):{ mode, label, cwd, backend }
Ordine di corrispondenza deterministico:
match.peermatch.guildIdmatch.teamIdmatch.accountId(esatto, senza peer/guild/team)match.accountId: "*"(intero canale)- Agente predefinito
All'interno di ciascun livello, prevale la prima voce bindings corrispondente.
Per le voci type: "acp", OpenClaw esegue la risoluzione in base all'identità esatta della conversazione (match.channel + account + match.peer.id) e non usa l'ordine dei livelli delle associazioni di instradamento indicato sopra.
Profili di accesso per agente
Accesso completo (senza sandbox)
{agents: { list: [ { id: "personal", workspace: "~/.openclaw/workspace-personal", sandbox: { mode: "off" }, }, ],},}Strumenti di sola lettura + area di lavoro
{agents: { list: [ { id: "family", workspace: "~/.openclaw/workspace-family", sandbox: { mode: "all", scope: "agent", workspaceAccess: "ro" }, tools: { allow: [ "read", "sessions_list", "sessions_history", "sessions_send", "sessions_spawn", "session_status", ], deny: ["write", "edit", "apply_patch", "exec", "process", "browser"], }, }, ],},}Nessun accesso al file system (solo messaggistica)
{agents: { list: [ { id: "public", workspace: "~/.openclaw/workspace-public", sandbox: { mode: "all", scope: "agent", workspaceAccess: "none" }, tools: { allow: [ "sessions_list", "sessions_history", "sessions_send", "sessions_spawn", "session_status", "whatsapp", "telegram", "slack", "discord", "gateway", ], deny: [ "read", "write", "edit", "apply_patch", "exec", "process", "browser", "canvas", "nodes", "cron", "gateway", "image", ], }, }, ],},}Consultare Sandbox e strumenti multi-agente per i dettagli sulla precedenza.
Sessione
{ session: { scope: "per-sender", dmScope: "main", // main | per-peer | per-channel-peer | per-account-channel-peer identityLinks: { alice: ["telegram:123456789", "discord:987654321012345678"], }, reset: { mode: "daily", // daily | idle atHour: 4, idleMinutes: 60, }, resetByType: { thread: { mode: "daily", atHour: 4 }, direct: { mode: "idle", idleMinutes: 240 }, group: { mode: "idle", idleMinutes: 120 }, }, resetByChannel: { discord: { mode: "idle", idleMinutes: 30 }, }, resetTriggers: ["/new", "/reset"], store: "~/.openclaw/agents/{agentId}/sessions/sessions.json", maintenance: { mode: "enforce", // enforce (predefinito) | warn pruneAfter: "30d", maxEntries: 500, resetArchiveRetention: "30d", // durata oppure false maxDiskBytes: "500mb", // limite rigido facoltativo highWaterBytes: "400mb", // obiettivo di pulizia facoltativo }, writeLock: { acquireTimeoutMs: 60000, staleMs: 1800000, maxHoldMs: 300000, }, threadBindings: { enabled: true, idleHours: 24, // disattivazione automatica predefinita dopo inattività, in ore (`0` la disabilita) maxAgeHours: 0, // età massima rigida predefinita in ore (`0` la disabilita) }, mainKey: "main", // precedente (il runtime usa sempre "main") agentToAgent: { maxPingPongTurns: 5 }, sendPolicy: { rules: [{ action: "deny", match: { channel: "discord", chatType: "group" } }], default: "allow", }, },}Dettagli dei campi della sessione
scope: strategia di raggruppamento di base delle sessioni per i contesti di chat di gruppo.per-sender(predefinito): ogni mittente dispone di una sessione isolata all'interno di un contesto di canale.global: tutti i partecipanti a un contesto di canale condividono un'unica sessione (utilizzare solo quando è previsto un contesto condiviso).dmScope: modalità di raggruppamento dei messaggi diretti.main: tutti i messaggi diretti condividono la sessione principale.per-peer: isolamento per ID mittente tra i vari canali.per-channel-peer: isolamento per canale + mittente (consigliato per le caselle di posta multiutente).per-account-channel-peer: isolamento per account + canale + mittente (consigliato per configurazioni multi-account).identityLinks: associa gli ID canonici ai peer con prefisso del provider per condividere le sessioni tra canali. I comandi di aggancio come/dock_discordutilizzano la stessa mappa per trasferire il percorso di risposta della sessione attiva a un altro peer di canale collegato; vedere Aggancio dei canali.reset: criterio di reimpostazione principale.dailyesegue la reimpostazione alleatHourora locale;idleesegue la reimpostazione dopoidleMinutes. Quando sono configurati entrambi, prevale quello che scade per primo. La validità della reimpostazione giornaliera utilizzasessionStartedAtdella riga della sessione; la validità della reimpostazione per inattività utilizzalastInteractionAt. Le scritture di eventi in background/di sistema, come Heartbeat, riattivazioni Cron, notifiche di esecuzione e operazioni amministrative del Gateway, possono aggiornareupdatedAt, ma non mantengono valide le sessioni giornaliere/per inattività.resetByType: sostituzioni specifiche per tipo (direct,group,thread). Il valore legacydmè accettato come alias didirect.resetByChannel: sostituzioni della reimpostazione per canale, indicizzate per ID provider/canale. Quando il canale della sessione dispone di una voce corrispondente, questa prevale completamente suresetByType/resetper quella sessione. Utilizzare solo quando un canale richiede un comportamento di reimpostazione diverso dal criterio a livello di tipo.mainKey: campo legacy. Il runtime utilizza sempre"main"per il contenitore principale delle chat dirette.agentToAgent.maxPingPongTurns: numero massimo di turni di risposta tra agenti durante gli scambi da agente ad agente (numero intero, intervallo:0-20, valore predefinito:5).0disabilita il concatenamento ping-pong.sendPolicy: corrispondenza perchannel,chatType(direct|group|channel, con l'alias legacydm),keyPrefixorawKeyPrefix. Prevale il primo divieto.maintenance: controlli di pulizia e conservazione dell'archivio delle sessioni.mode:enforceapplica la pulizia ed è il valore predefinito;warnemette solo avvisi.pruneAfter: soglia di età per le voci obsolete (valore predefinito30d).maxEntries: numero massimo di voci di sessione SQLite (valore predefinito500). Le scritture del runtime eseguono la pulizia in batch con un piccolo margine superiore per limiti adatti alla produzione;openclaw sessions cleanup --enforceapplica immediatamente il limite.- Le sessioni di verifica dell'esecuzione del modello del Gateway di breve durata utilizzano una conservazione fissa di
24h, ma la pulizia è subordinata alla pressione: rimuove le righe obsolete delle verifiche rigorose dell'esecuzione del modello solo quando viene raggiunta la pressione dovuta alla manutenzione/al limite delle voci di sessione. Sono ammesse solo le chiavi di verifica esplicite e rigorose corrispondenti aagent:*:explicit:model-run-<uuid>; le normali sessioni dirette, di gruppo, di thread, Cron, hook, Heartbeat, ACP e dei sottoagenti non ereditano questa conservazione di 24h. Quando viene eseguita, la pulizia dell'esecuzione del modello avviene prima della pulizia più generale delle voci obsoletepruneAftere del limitemaxEntries. - Il valore legacy
rotateBytesviene rifiutato dallo schema attuale;openclaw doctor --fixlo rimuove dalle configurazioni meno recenti. resetArchiveRetention: conservazione basata sull'età per gli archivi delle trascrizioni reimpostate/eliminate. Per impostazione predefinita, gli archivi rimangono fino all'eliminazione dovuta al budget del disco; impostare una durata per abilitare l'eliminazione in base al tempo trascorso oppurefalseper disabilitarla esplicitamente.maxDiskBytes: budget del disco facoltativo per la directory delle sessioni. In modalitàwarnregistra avvisi; in modalitàenforcerimuove prima gli artefatti/le sessioni meno recenti.highWaterBytes: obiettivo facoltativo dopo la pulizia del budget. Il valore predefinito è80%dimaxDiskBytes.writeLock: controlli del blocco di scrittura delle trascrizioni delle sessioni. Modificare solo quando operazioni legittime di preparazione delle trascrizioni, pulizia, Compaction o mirroring rimangono in conflitto più a lungo rispetto ai criteri predefiniti.acquireTimeoutMs: millisecondi di attesa durante l'acquisizione di un blocco prima di segnalare la sessione come occupata. Valore predefinito:60000; sostituzione tramite variabile d'ambienteOPENCLAW_SESSION_WRITE_LOCK_ACQUIRE_TIMEOUT_MS.staleMs: millisecondi dopo i quali un blocco esistente viene considerato obsoleto e recuperato. Valore predefinito:1800000; sostituzione tramite variabile d'ambienteOPENCLAW_SESSION_WRITE_LOCK_STALE_MS.maxHoldMs: millisecondi durante i quali un blocco mantenuto nel processo può rimanere attivo prima che il watchdog lo rilasci. Valore predefinito:300000; sostituzione tramite variabile d'ambienteOPENCLAW_SESSION_WRITE_LOCK_MAX_HOLD_MS.threadBindings: valori predefiniti globali per le funzionalità delle sessioni associate ai thread.enabled: interruttore principale predefinito (i provider possono sostituirlo; Discord utilizzachannels.discord.threadBindings.enabled)idleHours: disattivazione automatica predefinita dello stato attivo dopo un periodo di inattività, in ore (0la disabilita; i provider possono sostituirla)maxAgeHours: età massima assoluta predefinita in ore (0la disabilita; i provider possono sostituirla)spawnSessions: controllo predefinito per la creazione di sessioni di lavoro associate ai thread dasessions_spawne dalle generazioni di thread ACP. Il valore predefinito ètruequando le associazioni ai thread sono abilitate; i provider/account possono sostituirlo.defaultSpawnContext: contesto nativo predefinito del sottoagente per le generazioni associate ai thread ("fork"o"isolated"). Il valore predefinito è"fork".
Messaggi
{ messages: { responsePrefix: "🦞", // oppure "auto" ackReaction: "👀", ackReactionScope: "group-mentions", // group-mentions | group-all | direct | all | off | none removeAckAfterReply: false, queue: { mode: "steer", // steer (predefinito) | followup | collect | interrupt debounceMs: 500, cap: 20, drop: "summarize", // old | new | summarize (predefinito) byChannel: { whatsapp: "followup", telegram: "followup", }, }, inbound: { debounceMs: 2000, // 0 disabilita byChannel: { whatsapp: 5000, slack: 1500, }, }, },}Prefisso della risposta
Sostituzioni per canale/account: channels.<channel>.responsePrefix, channels.<channel>.accounts.<id>.responsePrefix.
Risoluzione (prevale il valore più specifico): account → canale → globale. "" disabilita e interrompe la propagazione. "auto" deriva [{identity.name}].
Variabili del modello:
| Variabile | Descrizione | Esempio |
|---|---|---|
{model} |
Nome breve del modello | claude-opus-4-6 |
{modelFull} |
Identificatore completo del modello | anthropic/claude-opus-4-6 |
{provider} |
Nome del provider | anthropic |
{thinkingLevel} |
Livello di ragionamento attuale | high, low, off |
{identity.name} |
Nome dell'identità dell'agente | (uguale a "auto") |
Le variabili non distinguono tra maiuscole e minuscole. {think} è un alias di {thinkingLevel}.
Reazione di conferma
- Il valore predefinito è
identity.emojidell'agente attivo oppure, in sua assenza,"👀". Impostare""per disabilitare. - Sostituzioni per canale:
channels.<channel>.ackReaction,channels.<channel>.accounts.<id>.ackReaction. - Ordine di risoluzione: account → canale →
messages.ackReaction→ identità di riserva. - Ambito:
group-mentions(predefinito),group-all,direct,alloppureoff/none(disabilita completamente le reazioni di conferma). removeAckAfterReply: rimuove la conferma dopo la risposta sui canali che supportano le reazioni, come Slack, Discord, Signal, Telegram, WhatsApp e iMessage.messages.statusReactions.enabled: abilita le reazioni di stato del ciclo di vita su Slack, Discord, Signal, Telegram e WhatsApp. Su Discord, se non è impostato, mantiene abilitate le reazioni di stato quando sono attive le reazioni di conferma. Su Slack, Signal, Telegram e WhatsApp, impostarlo esplicitamente sutrueper abilitare le reazioni di stato del ciclo di vita. Per impostazione predefinita, Slack utilizza lo stato nativo del thread dell'assistente e messaggi di caricamento a rotazione per indicare l'avanzamento, mantenendo statica la reazione di conferma configurata.messages.statusReactions.emojis: sostituisce le chiavi emoji del ciclo di vita:queued,thinking,compacting,tool,coding,web,deploy,build,concierge,done,error,stallSoftestallHard. Telegram consente solo un insieme fisso di reazioni, quindi le emoji configurate non supportate vengono sostituite con la variante di stato supportata più simile per quella chat.
Coda
mode: strategia di accodamento per i messaggi in entrata che arrivano mentre è attiva l'esecuzione di una sessione. Valore predefinito:"steer".steer: inserisce il nuovo prompt nell'esecuzione attiva.followup: esegue il nuovo prompt al termine dell'esecuzione attiva.collect: raggruppa i messaggi compatibili e li esegue insieme in seguito.interrupt: interrompe l'esecuzione attiva prima di avviare il prompt più recente.
debounceMs: ritardo prima dell'invio di un messaggio accodato/reindirizzato. Valore predefinito:500.cap: numero massimo di messaggi accodati prima dell'applicazione del criterio di eliminazione. Valore predefinito:20.drop: strategia adottata quando viene superato il limite."summarize"(predefinito) elimina le voci meno recenti ma conserva riepiloghi compatti;"old"elimina le voci meno recenti senza riepiloghi;"new"rifiuta l'elemento più recente.byChannel: sostituzioni dimodeper canale, indicizzate per ID provider.debounceMsByChannel: sostituzioni didebounceMsper canale, indicizzate per ID provider.
Debounce in entrata
Raggruppa i messaggi rapidi contenenti solo testo provenienti dallo stesso mittente in un unico turno dell'agente. I contenuti multimediali/gli allegati causano l'invio immediato. I comandi di controllo ignorano il debounce. Valore predefinito di debounceMs: 2000.
Altre chiavi dei messaggi
messages.messagePrefix: testo prefisso aggiunto ai messaggi utente in entrata prima che raggiungano il runtime dell'agente. Utilizzare con moderazione per gli indicatori di contesto del canale.messages.visibleReplies: controlla le risposte visibili alla fonte nelle conversazioni dirette, di gruppo e di canale ("message_tool"richiedemessage(action=send)per produrre un output visibile;"automatic"pubblica le normali risposte come in precedenza).messages.usageTemplate/messages.responseUsage: modello personalizzato del piè di pagina/usagee modalità predefinita di utilizzo per risposta (off | tokens | full, oltre all'alias legacyonpertokens).messages.groupChat.mentionPatterns/historyLimit: trigger delle menzioni nei messaggi di gruppo e dimensionamento della finestra della cronologia.messages.suppressToolErrors: quando ètrue, nasconde gli avvisi di errore dello strumento⚠️mostrati all'utente (l'agente continua a vedere gli errori nel contesto e può riprovare). Valore predefinito:false.
TTS (sintesi vocale)
{ messages: { tts: { auto: "off", // off (default) | always | inbound | tagged mode: "final", // final | all provider: "elevenlabs", summaryModel: "openai/gpt-5.4-mini", modelOverrides: { enabled: true }, maxTextLength: 4000, timeoutMs: 30000, prefsPath: "~/.openclaw/settings/tts.json", providers: { elevenlabs: { apiKey: "elevenlabs_api_key", baseUrl: "https://api.elevenlabs.io", speakerVoiceId: "voice_id", modelId: "eleven_multilingual_v2", seed: 42, applyTextNormalization: "auto", languageCode: "en", voiceSettings: { stability: 0.5, similarityBoost: 0.75, style: 0.0, useSpeakerBoost: true, speed: 1.0, }, }, microsoft: { speakerVoice: "en-US-MichelleNeural", lang: "en-US", outputFormat: "audio-24khz-48kbitrate-mono-mp3", }, openai: { apiKey: "openai_api_key", baseUrl: "https://api.openai.com/v1", model: "gpt-4o-mini-tts", speakerVoice: "coral", }, }, }, },}autocontrolla la modalità TTS automatica predefinita:off,always,inboundotagged./tts on|offpuò sostituire le preferenze locali e/tts statusmostra lo stato effettivo.summaryModelsostituisceagents.defaults.model.primaryper il riepilogo automatico.modelOverridesè abilitato per impostazione predefinita (enabled !== false);modelOverrides.allowProviderrichiede l'attivazione esplicita.- Le chiavi API utilizzano come fallback
ELEVENLABS_API_KEY/XI_API_KEYeOPENAI_API_KEY. - I provider vocali inclusi sono di proprietà dei Plugin. Se
plugins.allowè impostato, includere ogni Plugin del provider TTS che si desidera utilizzare, ad esempiomicrosoftper Edge TTS. L'ID provider precedenteedgeè accettato come alias dimicrosoft. providers.openai.baseUrlsostituisce l'endpoint TTS di OpenAI. L'ordine di risoluzione è: configurazione, quindiOPENAI_TTS_BASE_URL, infinehttps://api.openai.com/v1.- Quando
providers.openai.baseUrlpunta a un endpoint non OpenAI, OpenClaw lo considera un server TTS compatibile con OpenAI e applica una convalida meno restrittiva del modello e della voce.
Conversazione
Impostazioni predefinite per la modalità Conversazione (macOS/iOS/Android e l'interfaccia di controllo nel browser).
{ talk: { provider: "elevenlabs", providers: { elevenlabs: { speakerVoiceId: "elevenlabs_voice_id", voiceAliases: { Clawd: "EXAVITQu4vr4xnSDxMaL", Roger: "CwhRBWXzGAHq8TQ4Fs17", }, modelId: "eleven_multilingual_v2", outputFormat: "mp3_44100_128", apiKey: "elevenlabs_api_key", }, mlx: { modelId: "mlx-community/Soprano-80M-bf16", }, system: {}, }, consultThinkingLevel: "low", consultFastMode: true, speechLocale: "ru-RU", silenceTimeoutMs: 1500, interruptOnSpeech: true, realtime: { provider: "openai", providers: { openai: { model: "gpt-realtime-2.1", speakerVoice: "cedar", }, }, instructions: "Parla con cordialità e mantieni brevi le risposte.", mode: "realtime", // realtime | stt-tts | transcription transport: "webrtc", // webrtc | provider-websocket | gateway-relay | managed-room vadThreshold: 0.5, silenceDurationMs: 500, prefixPaddingMs: 300, reasoningEffort: "medium", brain: "agent-consult", // agent-consult | direct-tools | none }, },}talk.providerdeve corrispondere a una chiave intalk.providersquando sono configurati più provider per la modalità Conversazione.- Le precedenti chiavi non annidate della modalità Conversazione (
talk.voiceId,talk.voiceAliases,talk.modelId,talk.outputFormat,talk.apiKey) sono mantenute solo per compatibilità. Eseguireopenclaw doctor --fixper riscrivere la configurazione persistente intalk.providers.<provider>. - Gli ID vocali utilizzano come fallback
ELEVENLABS_VOICE_IDoSAG_VOICE_ID(comportamento del client Conversazione per macOS). providers.*.apiKeyaccetta stringhe di testo normale o oggetti SecretRef.- Il fallback
ELEVENLABS_API_KEYsi applica solo quando non è configurata alcuna chiave API per la modalità Conversazione. providers.*.voiceAliasesconsente alle direttive della modalità Conversazione di utilizzare nomi descrittivi.providers.mlx.modelIdseleziona il repository Hugging Face utilizzato dall'helper MLX locale di macOS. Se omesso, macOS utilizzamlx-community/Soprano-80M-bf16.- La riproduzione MLX su macOS utilizza l'helper incluso
openclaw-mlx-tts, se presente, oppure un eseguibile disponibile inPATH;OPENCLAW_MLX_TTS_BINsostituisce il percorso dell'helper per lo sviluppo. consultThinkingLevelcontrolla il livello di ragionamento dell'esecuzione completa dell'agente OpenClaw sottostante alle chiamateopenclaw_agent_consultin tempo reale della modalità Conversazione dell'interfaccia di controllo. Lasciare non impostato per mantenere il normale comportamento della sessione e del modello.consultFastModeimposta una sostituzione temporanea e valida una sola volta della modalità rapida per le consultazioni in tempo reale della modalità Conversazione dell'interfaccia di controllo, senza modificare la normale impostazione della modalità rapida della sessione.speechLocaleimposta l'ID delle impostazioni locali BCP 47 utilizzato dal riconoscimento vocale della modalità Conversazione su iOS/macOS. Lasciare non impostato per utilizzare il valore predefinito del dispositivo.silenceTimeoutMscontrolla per quanto tempo la modalità Conversazione attende dopo il silenzio dell'utente prima di inviare la trascrizione. Se non impostato, mantiene l'intervallo di pausa predefinito della piattaforma (700 ms on macOS and Android, 900 ms on iOS).realtime.instructionsaggiunge istruzioni di sistema destinate al provider al prompt in tempo reale integrato di OpenClaw, consentendo di configurare lo stile vocale senza perdere le indicazioni predefinite diopenclaw_agent_consult.realtime.vadThresholdimposta la soglia di rilevamento dell'attività vocale del provider da0(sensibilità massima) a1(sensibilità minima). Se non impostato, mantiene il valore predefinito del provider.realtime.silenceDurationMsimposta l'intervallo di silenzio, espresso come numero intero positivo, prima che il provider confermi un turno utente in tempo reale. Se non impostato, mantiene il valore predefinito del provider.realtime.prefixPaddingMsimposta la quantità di audio, espressa come numero intero non negativo, conservata prima dell'inizio del parlato rilevato. Se non impostato, mantiene il valore predefinito del provider.realtime.reasoningEffortimposta il livello di ragionamento specifico del provider per le sessioni in tempo reale. Se non impostato, mantiene il valore predefinito del provider.realtime.consultRouting:"provider-direct"(impostazione predefinita) mantiene le risposte dirette del provider quando il provider in tempo reale produce una trascrizione utente finale senzaopenclaw_agent_consult."force-agent-consult"instrada invece la richiesta finalizzata attraverso OpenClaw.
Contenuti correlati
- Riferimento per la configurazione — tutte le altre chiavi di configurazione
- Configurazione — attività comuni e configurazione rapida
- Esempi di configurazione