Kiedy używać harnessu
Zarejestruj harness agenta, gdy rodzina modeli ma własne natywne środowisko sesji, a zwykły transport dostawcy OpenClaw jest niewłaściwą abstrakcją. Przykłady:- natywny serwer agenta kodującego, który jest właścicielem wątków i Compaction
- lokalny CLI lub daemon, który musi strumieniować natywne zdarzenia planu, rozumowania i narzędzi
- środowisko uruchomieniowe modelu, które potrzebuje własnego identyfikatora wznowienia oprócz transkrypcji sesji OpenClaw
Co nadal należy do rdzenia
Zanim harness zostanie wybrany, OpenClaw rozwiązał już:- dostawcę i model
- stan uwierzytelniania środowiska uruchomieniowego
- poziom myślenia i budżet kontekstu
- plik transkrypcji/sesji OpenClaw
- obszar roboczy, sandbox i zasady narzędzi
- wywołania zwrotne odpowiedzi kanału i wywołania zwrotne strumieniowania
- zasady awaryjnego przełączania modelu i przełączania modeli na żywo
params.runtimePlan, należący do OpenClaw
pakiet zasad dla decyzji środowiska uruchomieniowego, które muszą pozostać wspólne dla OpenClaw i natywnych
harnessów:
runtimePlan.tools.normalize(...)iruntimePlan.tools.logDiagnostics(...)dla zasad schematu narzędzi świadomych dostawcyruntimePlan.transcript.resolvePolicy(...)dla sanityzacji transkrypcji i zasad naprawy wywołań narzędziruntimePlan.delivery.isSilentPayload(...)dla współdzielonegoNO_REPLYi tłumienia dostarczania mediówruntimePlan.outcome.classifyRunResult(...)dla klasyfikacji awaryjnego przełączania modeluruntimePlan.observabilitydla rozwiązanych metadanych dostawcy/modelu/harnessu
Rejestrowanie harnessu
Import:openclaw/plugin-sdk/agent-harness
Zasady wyboru
OpenClaw wybiera harness po rozwiązaniu dostawcy/modelu:- Wygrywa zasada środowiska uruchomieniowego przypisana do modelu.
- Następna jest zasada środowiska uruchomieniowego przypisana do dostawcy.
autopyta zarejestrowane harnessy, czy obsługują rozwiązany dostawca/model.- Jeśli żaden zarejestrowany harness nie pasuje, OpenClaw używa swojego osadzonego środowiska uruchomieniowego.
auto osadzona ścieżka awaryjna jest
używana tylko wtedy, gdy żaden zarejestrowany harness Pluginu nie obsługuje rozwiązanego
dostawcy/modelu. Gdy harness Pluginu przejmie uruchomienie, OpenClaw nie
odtwarza tej samej tury przez inne środowisko uruchomieniowe, ponieważ może to zmienić
semantykę uwierzytelniania/środowiska uruchomieniowego lub zduplikować skutki uboczne.
Przypięcia środowiska uruchomieniowego dla całej sesji i całego agenta są ignorowane przez wybór. Obejmuje to
nieaktualne wartości sesji agentHarnessId, agents.defaults.agentRuntime,
agents.list[].agentRuntime i OPENCLAW_AGENT_RUNTIME. /status pokazuje
efektywne środowisko uruchomieniowe wybrane z trasy dostawcy/modelu.
Jeśli wybrany harness jest zaskakujący, włącz logowanie debugowania agents/harness i
sprawdź ustrukturyzowany rekord Gateway agent harness selected. Zawiera on
identyfikator wybranego harnessu, powód wyboru, zasadę środowiska uruchomieniowego/awaryjną oraz, w
trybie auto, wynik obsługi każdego kandydata Pluginu.
Dołączony Plugin Codex rejestruje codex jako identyfikator swojego harnessu. Rdzeń traktuje go
jak zwykły identyfikator harnessu Pluginu; aliasy specyficzne dla Codex należą do Pluginu
lub konfiguracji operatora, a nie do współdzielonego selektora środowiska uruchomieniowego.
Parowanie dostawcy i harnessu
Większość harnessów powinna również rejestrować dostawcę. Dostawca udostępnia reszcie OpenClaw referencje modeli, stan uwierzytelniania, metadane modeli i wybór/model.
Następnie harness przejmuje tego dostawcę w supports(...).
Dołączony Plugin Codex stosuje ten wzorzec:
- preferowane referencje modelu użytkownika:
openai/gpt-5.5 - referencje zgodności: starsze referencje
codex/gpt-*pozostają akceptowane, ale nowe konfiguracje nie powinny używać ich jako zwykłych referencji dostawcy/modelu - identyfikator harnessu:
codex - uwierzytelnianie: syntetyczna dostępność dostawcy, ponieważ harness Codex jest właścicielem natywnego logowania/sesji Codex
- żądanie app-server: OpenClaw wysyła do Codex sam identyfikator modelu i pozwala harnessowi komunikować się z natywnym protokołem app-server
openai/gpt-* u oficjalnego
dostawcy OpenAI domyślnie wybierają harness Codex. Starsze referencje codex/gpt-*
nadal wybierają dostawcę i harness Codex ze względu na zgodność.
Konfigurację operatora, przykłady prefiksów modeli i konfiguracje wyłącznie dla Codex opisano w
Harnessie Codex.
OpenClaw wymaga app-server Codex 0.125.0 lub nowszego. Plugin Codex sprawdza
uzgadnianie inicjalizacji app-server i blokuje starsze lub niewersjonowane serwery, aby
OpenClaw działał tylko względem powierzchni protokołu, z którą został przetestowany. Minimalna wersja
0.125.0 obejmuje obsługę natywnego payloadu hooka MCP, która trafiła do
Codex 0.124.0, jednocześnie przypinając OpenClaw do nowszej przetestowanej stabilnej linii.
Warstwa pośrednia wyników narzędzi
Dołączone Pluginy i jawnie włączone zainstalowane Pluginy z pasującymi kontraktami manifestu mogą dołączać neutralną względem środowiska uruchomieniowego warstwę pośrednią wyników narzędzi przezapi.registerAgentToolResultMiddleware(...), gdy ich manifest deklaruje
docelowe identyfikatory środowisk uruchomieniowych w contracts.agentToolResultMiddleware. Ta zaufana
powierzchnia jest przeznaczona dla asynchronicznych transformacji wyników narzędzi, które muszą działać, zanim OpenClaw lub Codex
przekaże wynik narzędzia z powrotem do modelu.
Starsze dołączone Pluginy nadal mogą używać
api.registerCodexAppServerExtensionFactory(...) dla warstwy pośredniej wyłącznie app-server Codex,
ale nowe transformacje wyników powinny używać API neutralnego względem środowiska uruchomieniowego.
Hook wyłącznie osadzonego runnera api.registerEmbeddedExtensionFactory(...) został usunięty;
osadzone transformacje wyników narzędzi muszą używać neutralnej względem środowiska uruchomieniowego warstwy pośredniej.
Klasyfikacja końcowego wyniku
Natywne harnessy, które są właścicielami własnej projekcji protokołu, mogą używaćclassifyAgentHarnessTerminalOutcome(...) z
openclaw/plugin-sdk/agent-harness-runtime, gdy ukończona tura nie wytworzyła
widocznego tekstu asystenta. Helper zwraca empty, reasoning-only albo
planning-only, aby zasada awaryjna OpenClaw mogła zdecydować, czy ponowić próbę z
innym modelem. planning-only wymaga jawnego pola planText harnessu;
OpenClaw nie wnioskuje go z prozy asystenta. Helper celowo pozostawia
błędy promptu, trwające tury i celowe ciche odpowiedzi takie jak
NO_REPLY bez klasyfikacji.
Skutki uboczne końca agenta
Natywne harnessy muszą wywołaćrunAgentEndSideEffects(...) z
openclaw/plugin-sdk/agent-harness-runtime po sfinalizowaniu próby. Funkcja
wysyła przenośny hook agent_end i przechwytywanie badań OpenClaw bez
opóźniania interaktywnych odpowiedzi. Użyj awaitAgentEndSideEffects(...) dla lokalnych,
nieinteraktywnych uruchomień, w których próba nie może zostać rozwiązana przed zakończeniem tych skutków ubocznych.
Oba helpery akceptują ten sam payload { event, ctx } co
runAgentHarnessAgentEndHook(...); ich awarie nie zmieniają wyniku ukończonej
próby.
Dane wejściowe użytkownika i powierzchnie narzędzi
Natywne harnessy, które udostępniają żądanie danych wejściowych użytkownika na poziomie środowiska uruchomieniowego, powinny używać helperów danych wejściowych użytkownika zopenclaw/plugin-sdk/agent-harness-runtime, aby sformatować
prompt, dostarczyć go przez blokującą ścieżkę odpowiedzi OpenClaw i znormalizować
odpowiedzi wyboru/swobodne z powrotem do natywnego kształtu odpowiedzi środowiska uruchomieniowego. Helper
utrzymuje spójną prezentację kanału/TUI, podczas gdy każdy harness zachowuje własne
parsowanie protokołu i cykl życia oczekującego żądania.
Natywne harnessy, które potrzebują kompaktowego routingu narzędzi podobnego do PI, powinny używać
createAgentHarnessToolSurfaceRuntime(...) z
openclaw/plugin-sdk/agent-harness-tool-runtime. Jest on właścicielem
wyboru kontroli wyszukiwania narzędzi/trybu kodu, oszczędnych domyślnych ustawień modeli lokalnych,
filtrowania schematów zgodnych ze środowiskiem uruchomieniowym, wykonywania ukrytego katalogu, hydratacji
katalogów i czyszczenia katalogu. Harnessy nadal są właścicielami swojej specyficznej dla SDK
konwersji narzędzi i natywnego wywołania zwrotnego wykonania.
Natywny tryb harnessu Codex
Dołączony harnesscodex jest natywnym trybem Codex dla osadzonych tur agentów
OpenClaw. Najpierw włącz dołączony Plugin codex, a jeśli Twoja konfiguracja używa restrykcyjnej listy dozwolonych, uwzględnij codex w
plugins.allow. Konfiguracje natywnego app-server powinny używać openai/gpt-*; tury agentów OpenAI
domyślnie wybierają harness Codex. Starsze trasy referencji modeli Codex powinny zostać naprawione za pomocą
openclaw doctor --fix, a starsze referencje modeli codex/* pozostają aliasami zgodności
dla natywnego harnessu.
Gdy ten tryb działa, Codex jest właścicielem natywnego identyfikatora wątku, zachowania wznowienia,
Compaction i wykonywania app-server. OpenClaw nadal jest właścicielem kanału czatu,
widocznego lustra transkrypcji, zasad narzędzi, zatwierdzeń, dostarczania mediów i wyboru
sesji. Użyj agentRuntime.id: "codex" dostawcy/modelu, gdy musisz udowodnić,
że tylko ścieżka app-server Codex może przejąć uruchomienie. Jawne środowiska uruchomieniowe Pluginów
zamykają się awaryjnie; awarie wyboru app-server Codex i awarie środowiska uruchomieniowego nie są
ponawiane przez inne środowisko uruchomieniowe.
Rygor środowiska uruchomieniowego
Domyślnie OpenClaw używa zasady środowiska uruchomieniowego dostawcy/modeluauto: zarejestrowane
harnessy Pluginów mogą przejąć parę dostawca/model, a osadzone środowisko uruchomieniowe
obsługuje turę, gdy żaden nie pasuje. Referencje agentów OpenAI u oficjalnego dostawcy OpenAI domyślnie wybierają Codex.
Użyj jawnego środowiska uruchomieniowego Pluginu dostawcy/modelu, takiego jak
agentRuntime.id: "codex", gdy brak wyboru harnessu powinien zakończyć się awarią zamiast
routingu przez osadzone środowisko uruchomieniowe. Awarie wybranych harnessów Pluginów zawsze
kończą się twardą awarią. Nie blokuje to jawnego agentRuntime.id: "openclaw" dostawcy/modelu.
Dla osadzonych uruchomień wyłącznie Codex:
Sesje natywne i lustrzana kopia transkrypcji
Harness może przechowywać natywny identyfikator sesji, identyfikator wątku lub token wznowienia po stronie demona. Utrzymuj to powiązanie jawnie skojarzone z sesją OpenClaw i nadal odzwierciedlaj widoczne dla użytkownika dane wyjściowe asystenta/narzędzi w transkrypcji OpenClaw. Transkrypcja OpenClaw pozostaje warstwą zgodności dla:- historii sesji widocznej w kanale
- wyszukiwania i indeksowania transkrypcji
- przełączenia z powrotem na wbudowany harness OpenClaw w późniejszej turze
- ogólnego zachowania
/new,/reseti usuwania sesji
reset(...), aby OpenClaw mógł
wyczyścić je po zresetowaniu właścicielskiej sesji OpenClaw.
Wyniki narzędzi i mediów
Rdzeń tworzy listę narzędzi OpenClaw i przekazuje ją do przygotowanej próby. Gdy harness wykonuje dynamiczne wywołanie narzędzia, zwróć wynik narzędzia przez kształt wyniku harnessu zamiast samodzielnie wysyłać media do kanału. Dzięki temu dane wyjściowe tekstu, obrazu, wideo, muzyki, TTS, zatwierdzeń i narzędzi komunikacyjnych pozostają na tej samej ścieżce dostarczania co uruchomienia obsługiwane przez OpenClaw.Obecne ograniczenia
- Publiczna ścieżka importu jest generyczna, ale niektóre aliasy typów prób/wyników nadal zachowują starsze nazwy ze względu na zgodność.
- Instalacja harnessów firm trzecich jest eksperymentalna. Preferuj Pluginy dostawców, dopóki nie potrzebujesz natywnego środowiska uruchomieniowego sesji.
- Przełączanie harnessów jest obsługiwane między turami. Nie przełączaj harnessów w środku tury po rozpoczęciu działania natywnych narzędzi, zatwierdzeń, tekstu asystenta lub wysyłania wiadomości.