Quando usar um harness
Registre um harness de agente quando uma família de modelos tiver seu próprio runtime de sessão nativo e o transporte normal de provedor do OpenClaw for a abstração errada. Exemplos:- um servidor de agente de codificação nativo que possui threads e Compaction
- uma CLI ou daemon local que precisa transmitir eventos nativos de plano/raciocínio/ferramenta
- um runtime de modelo que precisa do seu próprio ID de retomada além da transcrição de sessão do OpenClaw
O que o núcleo ainda controla
Antes de um harness ser selecionado, o OpenClaw já resolveu:- provedor e modelo
- estado de autenticação do runtime
- nível de pensamento e orçamento de contexto
- o arquivo de transcrição/sessão do OpenClaw
- workspace, sandbox e política de ferramentas
- callbacks de resposta do canal e callbacks de streaming
- fallback de modelo e política de troca de modelo ao vivo
params.runtimePlan, um pacote de políticas controlado pelo OpenClaw
para decisões de runtime que devem permanecer compartilhadas entre o OpenClaw e harnesses nativos:
runtimePlan.tools.normalize(...)eruntimePlan.tools.logDiagnostics(...)para política de esquema de ferramentas ciente do provedorruntimePlan.transcript.resolvePolicy(...)para sanitização de transcrição e política de reparo de chamadas de ferramentaruntimePlan.delivery.isSilentPayload(...)para supressão compartilhada de entrega de mídia eNO_REPLYruntimePlan.outcome.classifyRunResult(...)para classificação de fallback de modeloruntimePlan.observabilitypara metadados resolvidos de provedor/modelo/harness
Registrar um harness
Importação:openclaw/plugin-sdk/agent-harness
Política de seleção
O OpenClaw escolhe um harness após a resolução de provedor/modelo:- A política de runtime com escopo de modelo vence.
- A política de runtime com escopo de provedor vem em seguida.
autopergunta aos harnesses registrados se eles oferecem suporte ao provedor/modelo resolvido.- Se nenhum harness registrado corresponder, o OpenClaw usa seu runtime embarcado.
auto, o fallback embarcado é
usado apenas quando nenhum harness de Plugin registrado oferece suporte ao
provedor/modelo resolvido. Depois que um harness de Plugin reivindica uma execução, o OpenClaw não
repete essa mesma rodada por outro runtime porque isso pode alterar
semânticas de autenticação/runtime ou duplicar efeitos colaterais.
Pins de runtime para a sessão inteira e para o agente inteiro são ignorados pela seleção. Isso
inclui valores obsoletos de sessão agentHarnessId, agents.defaults.agentRuntime,
agents.list[].agentRuntime e OPENCLAW_AGENT_RUNTIME. /status mostra o
runtime efetivo selecionado a partir da rota de provedor/modelo.
Se o harness selecionado for inesperado, habilite o log de depuração agents/harness e
inspecione o registro estruturado agent harness selected do Gateway. Ele inclui
o ID do harness selecionado, o motivo da seleção, a política de runtime/fallback e, no
modo auto, o resultado de suporte de cada candidato de Plugin.
O Plugin Codex integrado registra codex como seu ID de harness. O núcleo trata isso
como um ID comum de harness de Plugin; aliases específicos do Codex pertencem ao Plugin
ou à configuração do operador, não ao seletor de runtime compartilhado.
Pareamento de provedor e harness
A maioria dos harnesses também deve registrar um provedor. O provedor torna referências de modelo, estado de autenticação, metadados de modelo e seleção/model visíveis para o restante do
OpenClaw. O harness então reivindica esse provedor em supports(...).
O Plugin Codex integrado segue este padrão:
- refs de modelo de usuário preferenciais:
openai/gpt-5.5 - refs de compatibilidade: refs legadas
codex/gpt-*continuam aceitas, mas novas configurações não devem usá-las como refs normais de provedor/modelo - ID de harness:
codex - autenticação: disponibilidade sintética de provedor, porque o harness Codex controla o login/sessão nativo do Codex
- solicitação ao servidor de aplicativo: o OpenClaw envia o ID simples do modelo ao Codex e deixa o harness falar com o protocolo nativo do servidor de aplicativo
openai/gpt-* simples no provedor oficial
OpenAI selecionam o harness Codex por padrão. Refs antigas codex/gpt-*
ainda selecionam o provedor e o harness Codex por compatibilidade.
Para configuração de operador, exemplos de prefixo de modelo e configurações somente do Codex, consulte
Harness Codex.
O OpenClaw exige Codex app-server 0.125.0 ou mais recente. O Plugin Codex verifica
o handshake de inicialização do app-server e bloqueia servidores mais antigos ou sem versão para que
o OpenClaw execute apenas contra a superfície de protocolo com a qual foi testado. O
piso 0.125.0 inclui o suporte nativo a payload de hook MCP que chegou no
Codex 0.124.0, enquanto fixa o OpenClaw na linha estável testada mais recente.
Middleware de resultado de ferramenta
Plugins integrados e Plugins instalados explicitamente habilitados com contratos de manifesto correspondentes podem anexar middleware de resultado de ferramenta neutro em relação ao runtime por meio deapi.registerAgentToolResultMiddleware(...) quando o manifesto declarar os
IDs de runtime alvo em contracts.agentToolResultMiddleware. Esta interface confiável
serve para transformações assíncronas de resultado de ferramenta que devem ser executadas antes que o OpenClaw ou o Codex
alimente a saída da ferramenta de volta ao modelo.
Plugins integrados legados ainda podem usar
api.registerCodexAppServerExtensionFactory(...) para middleware somente de app-server do Codex,
mas novas transformações de resultado devem usar a API neutra em relação ao runtime.
O hook api.registerEmbeddedExtensionFactory(...), exclusivo do executor embarcado, foi removido;
transformações de resultado de ferramenta embarcadas devem usar middleware neutro em relação ao runtime.
Classificação de resultado terminal
Harnesses nativos que controlam sua própria projeção de protocolo podem usarclassifyAgentHarnessTerminalOutcome(...) de
openclaw/plugin-sdk/agent-harness-runtime quando uma rodada concluída não produzir
texto de assistente visível. O helper retorna empty, reasoning-only ou
planning-only para que a política de fallback do OpenClaw possa decidir se deve tentar novamente em um
modelo diferente. planning-only exige o campo explícito planText do harness;
o OpenClaw não o infere a partir da prosa do assistente. O helper intencionalmente
deixa erros de prompt, rodadas em andamento e respostas silenciosas intencionais, como
NO_REPLY, sem classificação.
Efeitos colaterais de fim do agente
Harnesses nativos devem chamarrunAgentEndSideEffects(...) de
openclaw/plugin-sdk/agent-harness-runtime depois de finalizar uma tentativa. Ele
dispara o hook portátil agent_end e a captura de pesquisa do OpenClaw sem
atrasar respostas interativas. Use awaitAgentEndSideEffects(...) para execuções locais,
não interativas, nas quais a tentativa não deve ser resolvida até que esses efeitos colaterais
terminem. Ambos os helpers aceitam o mesmo payload { event, ctx } que
runAgentHarnessAgentEndHook(...); suas falhas não alteram o resultado da tentativa
concluída.
Entrada do usuário e superfícies de ferramenta
Harnesses nativos que expõem uma solicitação de entrada do usuário no nível de runtime devem usar os helpers de entrada do usuário deopenclaw/plugin-sdk/agent-harness-runtime para formatar
o prompt, entregá-lo pelo caminho de resposta bloqueante do OpenClaw e normalizar
respostas de escolha/texto livre de volta para o formato de resposta nativo do runtime. O
helper mantém a apresentação de canal/TUI consistente enquanto cada harness mantém seu
próprio parsing de protocolo e ciclo de vida de solicitações pendentes.
Harnesses nativos que precisam de roteamento compacto de ferramentas semelhante ao PI devem usar
createAgentHarnessToolSurfaceRuntime(...) de
openclaw/plugin-sdk/agent-harness-tool-runtime. Ele controla
seleção de controle de busca de ferramentas/modo de código, padrões enxutos de modelo local,
filtragem de esquema compatível com runtime, execução de catálogo oculto, hidratação de diretório
e limpeza de catálogo. Harnesses ainda controlam sua conversão de ferramentas específica do SDK
e o callback de execução nativa.
Modo de harness Codex nativo
O harnesscodex integrado é o modo Codex nativo para rodadas de agente OpenClaw
embarcadas. Primeiro habilite o Plugin codex integrado e inclua codex em
plugins.allow se sua configuração usar uma allowlist restritiva. Configurações de app-server
nativo devem usar openai/gpt-*; rodadas de agente OpenAI selecionam o harness Codex
por padrão. Rotas legadas de refs de modelo Codex devem ser reparadas com
openclaw doctor --fix, e refs de modelo legadas codex/* permanecem aliases de
compatibilidade para o harness nativo.
Quando este modo executa, o Codex controla o ID de thread nativo, comportamento de retomada,
Compaction e execução do app-server. O OpenClaw ainda controla o canal de chat,
espelho de transcrição visível, política de ferramentas, aprovações, entrega de mídia e seleção
de sessão. Use agentRuntime.id: "codex" de provedor/modelo quando precisar provar
que apenas o caminho do app-server Codex pode reivindicar a execução. Runtimes de Plugin explícitos
falham de forma fechada; falhas de seleção do app-server Codex e falhas de runtime não são
tentadas novamente por outro runtime.
Rigidez de runtime
Por padrão, o OpenClaw usa a política de runtime de provedor/modeloauto: harnesses de
Plugin registrados podem reivindicar um par provedor/modelo, e o runtime embarcado
lida com a rodada quando nenhum corresponde. Refs de agente OpenAI no provedor oficial OpenAI usam Codex por padrão.
Use um runtime de Plugin explícito de provedor/modelo, como
agentRuntime.id: "codex", quando a ausência de seleção de harness deve falhar em vez
de rotear pelo runtime embarcado. Falhas de harness de Plugin selecionado sempre
falham de forma rígida. Isso não bloqueia um agentRuntime.id: "openclaw" explícito de provedor/modelo.
Para execuções embarcadas somente do Codex:
Sessões nativas e espelho de transcrição
Um harness pode manter um ID de sessão nativa, ID de thread ou token de retomada do lado do daemon. Mantenha esse vínculo explicitamente associado à sessão do OpenClaw e continue espelhando a saída de assistente/ferramenta visível ao usuário na transcrição do OpenClaw. A transcrição do OpenClaw continua sendo a camada de compatibilidade para:- histórico de sessão visível no canal
- busca e indexação de transcrições
- alternância de volta para o harness embutido do OpenClaw em um turno posterior
- comportamento genérico de
/new,/resete exclusão de sessão
reset(...) para que o OpenClaw possa limpá-lo quando a sessão proprietária do OpenClaw for redefinida.
Resultados de ferramentas e mídia
O núcleo constrói a lista de ferramentas do OpenClaw e a passa para a tentativa preparada. Quando um harness executa uma chamada de ferramenta dinâmica, retorne o resultado da ferramenta por meio do formato de resultado do harness em vez de enviar mídia pelo canal você mesmo. Isso mantém saídas de texto, imagem, vídeo, música, TTS, aprovação e ferramentas de mensagens no mesmo caminho de entrega das execuções apoiadas pelo OpenClaw.Limitações atuais
- O caminho de importação público é genérico, mas alguns aliases de tipo de tentativa/resultado ainda carregam nomes legados para compatibilidade.
- A instalação de harnesses de terceiros é experimental. Prefira Plugins de provedores até precisar de um runtime de sessão nativa.
- Há suporte para alternância de harness entre turnos. Não alterne harnesses no meio de um turno depois que ferramentas nativas, aprovações, texto do assistente ou envios de mensagem tiverem começado.