Przejdź do głównej treści
Harness agenta to niskopoziomowy wykonawca jednej przygotowanej tury agenta OpenClaw. Nie jest dostawcą modelu, kanałem ani rejestrem narzędzi. Model pojęciowy przeznaczony dla użytkowników opisano w Środowiskach uruchomieniowych agentów. Używaj tej powierzchni tylko dla dołączonych lub zaufanych natywnych Pluginów. Kontrakt wciąż jest eksperymentalny, ponieważ typy parametrów celowo odzwierciedlają bieżący osadzony runner.

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
Nie rejestruj harnessu tylko po to, aby dodać nowe API LLM. Dla zwykłych API modeli HTTP lub WebSocket zbuduj Plugin dostawcy.

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
Ten podział jest celowy. Harness uruchamia przygotowaną próbę; nie wybiera dostawców, nie zastępuje dostarczania kanałem ani nie przełącza po cichu modeli. Przygotowana próba zawiera także 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(...) i runtimePlan.tools.logDiagnostics(...) dla zasad schematu narzędzi świadomych dostawcy
  • runtimePlan.transcript.resolvePolicy(...) dla sanityzacji transkrypcji i zasad naprawy wywołań narzędzi
  • runtimePlan.delivery.isSilentPayload(...) dla współdzielonego NO_REPLY i tłumienia dostarczania mediów
  • runtimePlan.outcome.classifyRunResult(...) dla klasyfikacji awaryjnego przełączania modelu
  • runtimePlan.observability dla rozwiązanych metadanych dostawcy/modelu/harnessu
Harnessy mogą używać planu do decyzji, które muszą odpowiadać zachowaniu OpenClaw, ale nadal powinny traktować go jako należący do hosta stan próby. Nie mutuj go ani nie używaj do przełączania dostawców/modeli wewnątrz tury.

Rejestrowanie harnessu

Import: openclaw/plugin-sdk/agent-harness
import type { AgentHarness } from "openclaw/plugin-sdk/agent-harness";
import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";

const myHarness: AgentHarness = {
  id: "my-harness",
  label: "My native agent harness",

  supports(ctx) {
    return ctx.provider === "my-provider"
      ? { supported: true, priority: 100 }
      : { supported: false };
  },

  async runAttempt(params) {
    // Start or resume your native thread.
    // Use params.prompt, params.tools, params.images, params.onPartialReply,
    // params.onAgentEvent, and the other prepared attempt fields.
    return await runMyNativeTurn(params);
  },
};

export default definePluginEntry({
  id: "my-native-agent",
  name: "My Native Agent",
  description: "Runs selected models through a native agent daemon.",
  register(api) {
    api.registerAgentHarness(myHarness);
  },
});

Zasady wyboru

OpenClaw wybiera harness po rozwiązaniu dostawcy/modelu:
  1. Wygrywa zasada środowiska uruchomieniowego przypisana do modelu.
  2. Następna jest zasada środowiska uruchomieniowego przypisana do dostawcy.
  3. auto pyta zarejestrowane harnessy, czy obsługują rozwiązany dostawca/model.
  4. Jeśli żaden zarejestrowany harness nie pasuje, OpenClaw używa swojego osadzonego środowiska uruchomieniowego.
Awarie harnessów Pluginów są widoczne jako awarie uruchomienia. W trybie 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
Plugin Codex jest addytywny. Zwykłe referencje agentów 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 przez api.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 z openclaw/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 harness codex 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/modelu auto: 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:
{
  "models": {
    "providers": {
      "openai": {
        "agentRuntime": {
          "id": "codex"
        }
      }
    }
  },
  "agents": {
    "defaults": {
      "model": "openai/gpt-5.5"
    }
  }
}
Jeśli chcesz backend CLI dla jednego kanonicznego modelu, umieść środowisko uruchomieniowe w tym wpisie modelu:
{
  "agents": {
    "defaults": {
      "model": "anthropic/claude-opus-4-8",
      "models": {
        "anthropic/claude-opus-4-8": {
          "agentRuntime": {
            "id": "claude-cli"
          }
        }
      }
    }
  }
}
Nadpisania dla poszczególnych agentów używają tego samego kształtu przypisanego do modelu:
{
  "agents": {
    "list": [
      {
        "id": "codex-only",
        "model": "openai/gpt-5.5",
        "models": {
          "openai/gpt-5.5": {
            "agentRuntime": { "id": "codex" }
          }
        }
      }
    ]
  }
}
Starsze przykłady środowiska uruchomieniowego całego agenta, takie jak ten, są ignorowane:
{
  "agents": {
    "defaults": {
      "agentRuntime": {
        "id": "codex"
      }
    }
  }
}
Przy jawnym środowisku uruchomieniowym Plugin sesja kończy się błędem wcześnie, gdy żądany harness nie jest zarejestrowany, nie obsługuje rozwiązanego dostawcy/modelu albo kończy się błędem przed wytworzeniem efektów ubocznych tury. Jest to celowe w przypadku wdrożeń wyłącznie z Codex oraz testów live, które muszą dowieść, że ścieżka serwera aplikacji Codex jest rzeczywiście używana. To ustawienie kontroluje tylko osadzony harness agenta. Nie wyłącza routingu modeli specyficznego dla dostawcy dla obrazów, wideo, muzyki, TTS, PDF ani innych typów.

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, /reset i usuwania sesji
Jeśli Twój harness przechowuje powiązanie pomocnicze, zaimplementuj 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.

Powiązane