Plugins
Plugin harness agen
agent harness adalah eksekutor tingkat rendah untuk satu giliran agent OpenClaw yang sudah disiapkan. Ini bukan penyedia model, bukan saluran, dan bukan registri alat. Untuk model mental yang berorientasi pengguna, lihat runtime agent.
Gunakan permukaan ini hanya untuk Plugin native bawaan atau tepercaya. Kontrak ini masih eksperimental karena jenis parameternya sengaja mencerminkan runner tertanam saat ini.
Kapan menggunakan harness
Daftarkan agent harness ketika keluarga model memiliki runtime sesi native sendiri dan transport penyedia OpenClaw normal bukan abstraksi yang tepat.
Contoh:
- server coding-agent native yang memiliki thread dan Compaction
- CLI atau daemon lokal yang harus melakukan stream peristiwa rencana/penalaran/alat native
- runtime model yang memerlukan id resume sendiri selain transkrip sesi OpenClaw
Jangan daftarkan harness hanya untuk menambahkan API LLM baru. Untuk API model HTTP atau WebSocket normal, buat Plugin penyedia.
Apa yang tetap dimiliki core
Sebelum harness dipilih, OpenClaw sudah menyelesaikan:
- penyedia dan model
- status autentikasi runtime
- tingkat berpikir dan anggaran konteks
- file transkrip/sesi OpenClaw
- workspace, sandbox, dan kebijakan alat
- callback balasan saluran dan callback streaming
- fallback model dan kebijakan peralihan model live
Pemisahan itu disengaja. Harness menjalankan upaya yang sudah disiapkan; harness tidak memilih penyedia, mengganti pengiriman saluran, atau mengganti model secara diam-diam.
Upaya yang disiapkan juga menyertakan params.runtimePlan, sebuah bundel kebijakan milik OpenClaw untuk keputusan runtime yang harus tetap dibagikan antara PI dan harness native:
runtimePlan.tools.normalize(...)danruntimePlan.tools.logDiagnostics(...)untuk kebijakan skema alat yang sadar penyediaruntimePlan.transcript.resolvePolicy(...)untuk sanitasi transkrip dan kebijakan perbaikan panggilan alatruntimePlan.delivery.isSilentPayload(...)untukNO_REPLYbersama dan penekanan pengiriman mediaruntimePlan.outcome.classifyRunResult(...)untuk klasifikasi fallback modelruntimePlan.observabilityuntuk metadata penyedia/model/harness yang sudah diselesaikan
Harness dapat menggunakan rencana tersebut untuk keputusan yang perlu cocok dengan perilaku PI, tetapi tetap harus memperlakukannya sebagai status upaya milik host. Jangan memutasinya atau menggunakannya untuk mengganti penyedia/model di dalam satu giliran.
Mendaftarkan harness
Impor: openclaw/plugin-sdk/agent-harness
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);
},
});
Kebijakan pemilihan
OpenClaw memilih harness setelah penyedia/model diselesaikan:
- id harness yang tercatat pada sesi yang sudah ada menang, sehingga perubahan config/env tidak mengalihkan transkrip tersebut secara langsung ke runtime lain.
OPENCLAW_AGENT_RUNTIME=<id>memaksa harness terdaftar dengan id tersebut untuk sesi yang belum dipasangkan.OPENCLAW_AGENT_RUNTIME=pimemaksa harness PI bawaan.OPENCLAW_AGENT_RUNTIME=automeminta harness terdaftar menyatakan apakah mereka mendukung penyedia/model yang sudah diselesaikan.- Jika tidak ada harness terdaftar yang cocok, OpenClaw menggunakan PI kecuali fallback PI dinonaktifkan.
Kegagalan harness Plugin muncul sebagai kegagalan run. Dalam mode auto, fallback PI hanya digunakan ketika tidak ada harness Plugin terdaftar yang mendukung penyedia/model yang sudah diselesaikan. Setelah harness Plugin mengklaim sebuah run, OpenClaw tidak memutar ulang giliran yang sama melalui PI karena itu dapat mengubah semantik autentikasi/runtime atau menggandakan efek samping.
id harness terpilih dipertahankan bersama id sesi setelah run tertanam. Sesi lama yang dibuat sebelum pin harness diperlakukan sebagai sudah dipin ke PI setelah memiliki riwayat transkrip. Gunakan sesi baru/direset saat berpindah antara PI dan harness Plugin native. /status menampilkan id harness non-default seperti codex di sebelah Fast; PI tetap disembunyikan karena merupakan jalur kompatibilitas default. Jika harness yang dipilih mengejutkan, aktifkan logging debug agents/harness dan periksa catatan terstruktur agent harness selected milik gateway. Catatan itu menyertakan id harness terpilih, alasan pemilihan, kebijakan runtime/fallback, dan, dalam mode auto, hasil dukungan setiap kandidat Plugin.
Plugin Codex bawaan mendaftarkan codex sebagai id harness-nya. Core memperlakukannya sebagai id harness Plugin biasa; alias khusus Codex berada di Plugin atau config operator, bukan di pemilih runtime bersama.
Penyandingan penyedia plus harness
Sebagian besar harness juga harus mendaftarkan penyedia. Penyedia membuat ref model, status autentikasi, metadata model, dan pilihan /model terlihat oleh bagian OpenClaw lainnya. Harness kemudian mengklaim penyedia tersebut di supports(...).
Plugin Codex bawaan mengikuti pola ini:
- ref model pengguna yang disukai:
openai/gpt-5.5plusagentRuntime.id: "codex" - ref kompatibilitas: ref lama
codex/gpt-*tetap diterima, tetapi config baru tidak boleh menggunakannya sebagai ref penyedia/model normal - id harness:
codex - autentikasi: ketersediaan penyedia sintetis, karena harness Codex memiliki login/sesi Codex native
- permintaan app-server: OpenClaw mengirim id model polos ke Codex dan membiarkan harness berbicara dengan protokol app-server native
Plugin Codex bersifat aditif. Ref openai/gpt-* biasa tetap menggunakan jalur penyedia OpenClaw normal kecuali Anda memaksa harness Codex dengan agentRuntime.id: "codex". Ref lama codex/gpt-* masih memilih penyedia dan harness Codex untuk kompatibilitas.
Untuk penyiapan operator, contoh prefiks model, dan config khusus Codex, lihat Codex Harness.
OpenClaw memerlukan app-server Codex 0.125.0 atau lebih baru. Plugin Codex memeriksa handshake inisialisasi app-server dan memblokir server yang lebih lama atau tidak berversi sehingga OpenClaw hanya berjalan terhadap permukaan protokol yang sudah diuji. Batas minimum 0.125.0 mencakup dukungan payload hook MCP native yang hadir di Codex 0.124.0, sambil mematok OpenClaw ke lini stabil lebih baru yang sudah diuji.
Middleware hasil alat
Plugin bawaan dapat melampirkan middleware hasil alat yang netral runtime melalui api.registerAgentToolResultMiddleware(...) ketika manifesnya mendeklarasikan id runtime target di contracts.agentToolResultMiddleware. Seam tepercaya ini ditujukan untuk transformasi hasil alat async yang harus berjalan sebelum PI atau Codex memasukkan output alat kembali ke model.
Plugin bawaan lama masih dapat menggunakan api.registerCodexAppServerExtensionFactory(...) untuk middleware khusus app-server Codex, tetapi transformasi hasil baru harus menggunakan API netral runtime. Hook khusus Pi api.registerEmbeddedExtensionFactory(...) telah dihapus; transformasi hasil alat Pi harus menggunakan middleware netral runtime.
Klasifikasi hasil terminal
Harness native yang memiliki proyeksi protokol sendiri dapat menggunakan classifyAgentHarnessTerminalOutcome(...) dari openclaw/plugin-sdk/agent-harness-runtime ketika giliran yang selesai tidak menghasilkan teks asisten yang terlihat. Helper mengembalikan empty, reasoning-only, atau planning-only sehingga kebijakan fallback OpenClaw dapat memutuskan apakah akan mencoba ulang pada model lain. Helper ini sengaja tidak mengklasifikasikan error prompt, giliran yang masih berjalan, dan balasan diam yang disengaja seperti NO_REPLY.
Mode harness Codex native
Harness codex bawaan adalah mode Codex native untuk giliran agent OpenClaw tertanam. Aktifkan Plugin codex bawaan terlebih dahulu, dan sertakan codex dalam plugins.allow jika config Anda menggunakan allowlist restriktif. Config app-server native harus menggunakan openai/gpt-* dengan agentRuntime.id: "codex". Gunakan openai-codex/* untuk OAuth Codex melalui PI. Ref model lama codex/* tetap menjadi alias kompatibilitas untuk harness native.
Saat mode ini berjalan, Codex memiliki id thread native, perilaku resume, Compaction, dan eksekusi app-server. OpenClaw tetap memiliki saluran chat, mirror transkrip yang terlihat, kebijakan alat, persetujuan, pengiriman media, dan pemilihan sesi. Gunakan agentRuntime.id: "codex" ketika Anda perlu membuktikan bahwa hanya jalur app-server Codex yang dapat mengklaim run. Runtime Plugin eksplisit gagal secara tertutup; kegagalan pemilihan app-server Codex dan kegagalan runtime tidak dicoba ulang melalui PI.
Ketegasan runtime
Secara default, OpenClaw menjalankan agent tertanam dengan OpenClaw Pi. Dalam mode auto, harness Plugin terdaftar dapat mengklaim pasangan penyedia/model, dan PI menangani giliran ketika tidak ada yang cocok. Gunakan runtime Plugin eksplisit seperti agentRuntime.id: "codex" ketika pemilihan harness yang hilang harus gagal alih-alih dirutekan melalui PI. Kegagalan harness Plugin terpilih selalu gagal keras. Ini tidak memblokir agentRuntime.id: "pi" eksplisit atau OPENCLAW_AGENT_RUNTIME=pi.
Untuk run tertanam khusus Codex:
{
"agents": {
"defaults": {
"model": "openai/gpt-5.5",
"agentRuntime": {
"id": "codex"
}
}
}
}
Jika Anda ingin harness Plugin terdaftar mana pun mengklaim model yang cocok dan selain itu menggunakan PI, tetapkan id: "auto":
{
"agents": {
"defaults": {
"agentRuntime": {
"id": "auto"
}
}
}
}
Override per-agent menggunakan bentuk yang sama:
{
"agents": {
"defaults": {
"agentRuntime": { "id": "auto" }
},
"list": [
{
"id": "codex-only",
"model": "openai/gpt-5.5",
"agentRuntime": { "id": "codex" }
}
]
}
}
OPENCLAW_AGENT_RUNTIME tetap menimpa runtime yang dikonfigurasi.
OPENCLAW_AGENT_RUNTIME=codex openclaw gateway run
Dengan runtime Plugin eksplisit, sesi gagal sejak awal ketika harness yang diminta tidak terdaftar, tidak mendukung penyedia/model yang sudah diselesaikan, atau gagal sebelum menghasilkan efek samping giliran. Ini disengaja untuk deployment khusus Codex dan untuk pengujian live yang harus membuktikan bahwa jalur app-server Codex benar-benar digunakan.
Pengaturan ini hanya mengontrol harness agent tertanam. Pengaturan ini tidak menonaktifkan routing model khusus penyedia untuk gambar, video, musik, TTS, PDF, atau lainnya.
Sesi native dan mirror transkrip
Harness dapat menyimpan id sesi native, id thread, atau token resume di sisi daemon. Jaga agar binding tersebut secara eksplisit dikaitkan dengan sesi OpenClaw, dan tetap mirror output asisten/alat yang terlihat pengguna ke dalam transkrip OpenClaw.
Transkrip OpenClaw tetap menjadi lapisan kompatibilitas untuk:
- riwayat sesi yang terlihat saluran
- pencarian dan pengindeksan transkrip
- beralih kembali ke harness PI bawaan pada giliran berikutnya
- perilaku umum
/new,/reset, dan penghapusan sesi
Jika harness Anda menyimpan binding sidecar, implementasikan reset(...) sehingga OpenClaw dapat menghapusnya saat sesi OpenClaw pemilik direset.
Hasil alat dan media
Core menyusun daftar alat OpenClaw dan meneruskannya ke upaya yang disiapkan. Ketika harness menjalankan panggilan alat dinamis, kembalikan hasil alat melalui bentuk hasil harness alih-alih mengirim media saluran sendiri.
Ini menjaga output teks, gambar, video, musik, TTS, persetujuan, dan alat perpesanan pada jalur pengiriman yang sama seperti run yang didukung PI.
Batasan saat ini
- Jalur impor publik bersifat generik, tetapi beberapa alias tipe upaya/hasil masih
memakai nama
Pidemi kompatibilitas. - Instalasi harness pihak ketiga bersifat eksperimental. Utamakan Plugin penyedia hingga Anda memerlukan runtime sesi native.
- Pergantian harness didukung lintas giliran. Jangan mengganti harness di tengah giliran setelah alat native, persetujuan, teks asisten, atau pengiriman pesan sudah dimulai.