Khi nào dùng harness
Đăng ký harness tác tử khi một họ mô hình có runtime phiên gốc riêng và transport nhà cung cấp OpenClaw thông thường là lớp trừu tượng không phù hợp. Ví dụ:- một máy chủ tác tử lập trình gốc sở hữu luồng và Compaction
- một CLI hoặc daemon cục bộ phải stream các sự kiện kế hoạch/lập luận/công cụ gốc
- một runtime mô hình cần resume id riêng ngoài bản ghi phiên OpenClaw
Core vẫn sở hữu gì
Trước khi một harness được chọn, OpenClaw đã phân giải:- nhà cung cấp và mô hình
- trạng thái xác thực runtime
- mức suy nghĩ và ngân sách ngữ cảnh
- tệp bản ghi/phiên OpenClaw
- workspace, sandbox, và chính sách công cụ
- callback trả lời kênh và callback streaming
- chính sách fallback mô hình và chuyển đổi mô hình trực tiếp
params.runtimePlan, một gói chính sách do OpenClaw sở hữu cho các quyết định runtime phải được chia sẻ giữa OpenClaw và các harness gốc:
runtimePlan.tools.normalize(...)vàruntimePlan.tools.logDiagnostics(...)cho chính sách schema công cụ nhận biết nhà cung cấpruntimePlan.transcript.resolvePolicy(...)cho chính sách làm sạch bản ghi và sửa tool-callruntimePlan.delivery.isSilentPayload(...)cho việc chặn phân phốiNO_REPLYvà media dùng chungruntimePlan.outcome.classifyRunResult(...)cho phân loại fallback mô hìnhruntimePlan.observabilitycho metadata nhà cung cấp/mô hình/harness đã phân giải
Đăng ký harness
Import:openclaw/plugin-sdk/agent-harness
Chính sách chọn
OpenClaw chọn harness sau khi phân giải nhà cung cấp/mô hình:- Chính sách runtime theo phạm vi mô hình được ưu tiên.
- Chính sách runtime theo phạm vi nhà cung cấp đứng tiếp theo.
autohỏi các harness đã đăng ký liệu chúng có hỗ trợ nhà cung cấp/mô hình đã phân giải không.- Nếu không có harness đã đăng ký nào khớp, OpenClaw dùng runtime nhúng của nó.
auto, fallback nhúng chỉ được dùng khi không có harness Plugin đã đăng ký nào hỗ trợ nhà cung cấp/mô hình đã phân giải. Khi một harness Plugin đã nhận một lượt chạy, OpenClaw không phát lại chính lượt đó qua runtime khác vì việc đó có thể thay đổi ngữ nghĩa xác thực/runtime hoặc nhân đôi tác dụng phụ.
Các ghim runtime toàn phiên và toàn tác tử bị bỏ qua khi chọn. Điều đó bao gồm các giá trị agentHarnessId phiên lỗi thời, agents.defaults.agentRuntime, agents.list[].agentRuntime, và OPENCLAW_AGENT_RUNTIME. /status hiển thị runtime hiệu lực được chọn từ tuyến nhà cung cấp/mô hình. Nếu harness được chọn gây bất ngờ, hãy bật ghi log debug agents/harness và kiểm tra bản ghi có cấu trúc agent harness selected của Gateway. Bản ghi này bao gồm id harness được chọn, lý do chọn, chính sách runtime/fallback, và ở chế độ auto, kết quả hỗ trợ của từng ứng viên Plugin.
Plugin Codex đóng gói sẵn đăng ký codex làm id harness của nó. Core xem đó như một id harness Plugin thông thường; các bí danh dành riêng cho Codex thuộc về Plugin hoặc cấu hình operator, không thuộc bộ chọn runtime dùng chung.
Ghép cặp nhà cung cấp và harness
Hầu hết harness cũng nên đăng ký một nhà cung cấp. Nhà cung cấp làm cho ref mô hình, trạng thái xác thực, metadata mô hình, và lựa chọn/model hiển thị với phần còn lại của OpenClaw. Sau đó harness nhận nhà cung cấp đó trong supports(...).
Plugin Codex đóng gói sẵn theo mẫu này:
- ref mô hình người dùng ưu tiên:
openai/gpt-5.5 - ref tương thích: các ref
codex/gpt-*legacy vẫn được chấp nhận, nhưng cấu hình mới không nên dùng chúng làm ref nhà cung cấp/mô hình thông thường - id harness:
codex - xác thực: trạng thái sẵn sàng nhà cung cấp tổng hợp, vì harness Codex sở hữu đăng nhập/phiên Codex gốc
- yêu cầu app-server: OpenClaw gửi id mô hình trần cho Codex và để harness nói chuyện với giao thức app-server gốc
openai/gpt-* thuần trên nhà cung cấp OpenAI chính thức mặc định chọn harness Codex. Các ref codex/gpt-* cũ vẫn chọn nhà cung cấp và harness Codex để tương thích.
Để xem thiết lập operator, ví dụ tiền tố mô hình, và cấu hình chỉ dành cho Codex, hãy xem Codex Harness.
OpenClaw yêu cầu Codex app-server 0.125.0 hoặc mới hơn. Plugin Codex kiểm tra handshake khởi tạo app-server và chặn các máy chủ cũ hơn hoặc không có phiên bản để OpenClaw chỉ chạy với bề mặt giao thức đã được kiểm thử. Mức sàn 0.125.0 bao gồm hỗ trợ payload hook MCP gốc đã xuất hiện trong Codex 0.124.0, đồng thời ghim OpenClaw vào dòng ổn định mới hơn đã được kiểm thử.
Middleware kết quả công cụ
Các Plugin đóng gói sẵn và Plugin đã cài đặt được bật rõ ràng với hợp đồng manifest khớp có thể gắn middleware kết quả công cụ trung lập runtime thông quaapi.registerAgentToolResultMiddleware(...) khi manifest của chúng khai báo các id runtime mục tiêu trong contracts.agentToolResultMiddleware. Bề mặt đáng tin cậy này dành cho các biến đổi kết quả công cụ bất đồng bộ phải chạy trước khi OpenClaw hoặc Codex đưa đầu ra công cụ trở lại mô hình.
Các Plugin legacy đóng gói sẵn vẫn có thể dùng api.registerCodexAppServerExtensionFactory(...) cho middleware chỉ dành cho Codex app-server, nhưng các biến đổi kết quả mới nên dùng API trung lập runtime. Hook api.registerEmbeddedExtensionFactory(...) chỉ dành cho embedded-runner đã bị loại bỏ; các biến đổi kết quả công cụ nhúng phải dùng middleware trung lập runtime.
Phân loại kết quả terminal
Các harness gốc sở hữu phép chiếu giao thức riêng có thể dùngclassifyAgentHarnessTerminalOutcome(...) từ openclaw/plugin-sdk/agent-harness-runtime khi một lượt hoàn tất không tạo ra văn bản trợ lý hiển thị. Helper trả về empty, reasoning-only, hoặc planning-only để chính sách fallback của OpenClaw có thể quyết định có thử lại trên mô hình khác hay không. planning-only yêu cầu trường planText rõ ràng của harness; OpenClaw không suy luận nó từ văn xuôi của trợ lý. Helper cố ý không phân loại lỗi prompt, lượt đang chạy, và các trả lời im lặng có chủ đích như NO_REPLY.
Tác dụng phụ khi tác tử kết thúc
Các harness gốc phải gọirunAgentEndSideEffects(...) từ openclaw/plugin-sdk/agent-harness-runtime sau khi chúng hoàn tất một lần thử. Nó dispatch hook agent_end portable và capture nghiên cứu của OpenClaw mà không trì hoãn các trả lời tương tác. Dùng awaitAgentEndSideEffects(...) cho các lượt chạy cục bộ, không tương tác, nơi lần thử không được resolve cho đến khi các tác dụng phụ đó hoàn tất. Cả hai helper đều chấp nhận payload { event, ctx } giống runAgentHarnessAgentEndHook(...); lỗi của chúng không làm thay đổi kết quả lần thử đã hoàn tất.
Đầu vào người dùng và bề mặt công cụ
Các harness gốc cung cấp yêu cầu đầu vào người dùng cấp runtime nên dùng các helper đầu vào người dùng từopenclaw/plugin-sdk/agent-harness-runtime để định dạng prompt, phân phối nó qua đường dẫn trả lời chặn của OpenClaw, và chuẩn hóa các câu trả lời lựa chọn/tự do trở lại hình dạng phản hồi gốc của runtime. Helper giữ phần trình bày kênh/TUI nhất quán trong khi mỗi harness giữ vòng đời phân tích giao thức và yêu cầu đang chờ riêng.
Các harness gốc cần định tuyến công cụ gọn kiểu PI nên dùng createAgentHarnessToolSurfaceRuntime(...) từ openclaw/plugin-sdk/agent-harness-tool-runtime. Nó sở hữu lựa chọn điều khiển tìm kiếm công cụ/chế độ mã, mặc định nhẹ cho mô hình cục bộ, lọc schema tương thích runtime, thực thi catalog ẩn, nạp thư mục, và dọn dẹp catalog. Harness vẫn sở hữu việc chuyển đổi công cụ dành riêng cho SDK và callback thực thi gốc.
Chế độ harness Codex gốc
Harnesscodex đóng gói sẵn là chế độ Codex gốc cho các lượt tác tử OpenClaw nhúng. Trước tiên hãy bật Plugin codex đóng gói sẵn, và bao gồm codex trong plugins.allow nếu cấu hình của bạn dùng allowlist hạn chế. Cấu hình app-server gốc nên dùng openai/gpt-*; các lượt tác tử OpenAI chọn harness Codex theo mặc định. Các tuyến ref mô hình Codex legacy nên được sửa bằng openclaw doctor --fix, và các ref mô hình codex/* legacy vẫn là bí danh tương thích cho harness gốc.
Khi chế độ này chạy, Codex sở hữu id luồng gốc, hành vi resume, Compaction, và thực thi app-server. OpenClaw vẫn sở hữu kênh chat, bản sao bản ghi hiển thị, chính sách công cụ, phê duyệt, phân phối media, và lựa chọn phiên. Dùng nhà cung cấp/mô hình agentRuntime.id: "codex" khi bạn cần chứng minh rằng chỉ đường dẫn Codex app-server mới có thể nhận lượt chạy. Runtime Plugin rõ ràng sẽ fail closed; lỗi chọn Codex app-server và lỗi runtime không được thử lại qua runtime khác.
Độ nghiêm ngặt runtime
Theo mặc định, OpenClaw dùng chính sách runtime nhà cung cấp/mô hìnhauto: các harness Plugin đã đăng ký có thể nhận một cặp nhà cung cấp/mô hình, và runtime nhúng xử lý lượt khi không có harness nào khớp. Ref tác tử OpenAI trên nhà cung cấp OpenAI chính thức mặc định dùng Codex. Dùng một runtime Plugin nhà cung cấp/mô hình rõ ràng như agentRuntime.id: "codex" khi việc thiếu lựa chọn harness nên thất bại thay vì định tuyến qua runtime nhúng. Lỗi harness Plugin đã chọn luôn thất bại cứng. Điều này không chặn một agentRuntime.id: "openclaw" nhà cung cấp/mô hình rõ ràng.
Cho các lượt chạy nhúng chỉ dành cho Codex:
Phiên gốc và bản sao transcript
Một bộ khung chạy có thể giữ một ID phiên gốc, ID luồng hoặc token tiếp tục phía daemon. Hãy giữ liên kết đó được gắn rõ ràng với phiên OpenClaw, đồng thời tiếp tục sao chép đầu ra trợ lý/công cụ hiển thị với người dùng vào transcript OpenClaw. Transcript OpenClaw vẫn là lớp tương thích cho:- lịch sử phiên hiển thị trên kênh
- tìm kiếm và lập chỉ mục transcript
- chuyển lại sang bộ khung OpenClaw tích hợp sẵn ở một lượt sau
- hành vi chung của
/new,/resetvà xóa phiên
reset(...) để OpenClaw có thể xóa liên kết đó khi phiên OpenClaw sở hữu nó được đặt lại.
Kết quả công cụ và phương tiện
Core xây dựng danh sách công cụ OpenClaw và truyền danh sách đó vào lần thử đã chuẩn bị. Khi một bộ khung chạy thực thi một lệnh gọi công cụ động, hãy trả kết quả công cụ lại thông qua dạng kết quả của bộ khung chạy thay vì tự gửi phương tiện qua kênh. Điều này giữ đầu ra văn bản, hình ảnh, video, nhạc, TTS, phê duyệt và công cụ nhắn tin trên cùng đường dẫn phân phối như các lần chạy do OpenClaw hỗ trợ.Giới hạn hiện tại
- Đường dẫn import công khai là chung, nhưng một số bí danh kiểu lần thử/kết quả vẫn mang tên cũ để tương thích.
- Việc cài đặt bộ khung chạy của bên thứ ba còn mang tính thử nghiệm. Hãy ưu tiên Plugin nhà cung cấp cho đến khi bạn cần một thời gian chạy phiên gốc.
- Việc chuyển đổi bộ khung chạy được hỗ trợ giữa các lượt. Không chuyển đổi bộ khung chạy ở giữa một lượt sau khi các công cụ gốc, phê duyệt, văn bản trợ lý hoặc gửi tin nhắn đã bắt đầu.