chore(i18n): refresh id translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-08 06:07:01 +00:00
parent 78ba8133cc
commit 48854f7e29
13 changed files with 2139 additions and 1723 deletions

View File

@ -1,26 +1,26 @@
---
read_when:
- Menyiapkan Slack atau men-debug mode socket/HTTP Slack
summary: Pengaturan Slack dan perilaku runtime (Socket Mode + URL Permintaan HTTP)
summary: Penyiapan Slack dan perilaku runtime (Socket Mode + HTTP Request URLs)
title: Slack
x-i18n:
generated_at: "2026-04-07T09:13:54Z"
generated_at: "2026-04-08T06:01:53Z"
model: gpt-5.4
provider: openai
source_hash: 2b8fd2cc6c638ee82069f0af2c2b6f6f49c87da709b941433a0343724a9907ea
source_hash: cad132131ddce688517def7c14703ad314441c67aacc4cc2a2a721e1d1c01942
source_path: channels/slack.md
workflow: 15
---
# Slack
Status: siap produksi untuk DM + channel melalui integrasi aplikasi Slack. Mode default adalah Socket Mode; URL Permintaan HTTP juga didukung.
Status: siap produksi untuk DM + channel melalui integrasi aplikasi Slack. Mode default adalah Socket Mode; HTTP Request URLs juga didukung.
<CardGroup cols={3}>
<Card title="Pemasangan" icon="link" href="/id/channels/pairing">
DM Slack secara default menggunakan mode pemasangan.
<Card title="Pairing" icon="link" href="/id/channels/pairing">
DM Slack secara default menggunakan mode pairing.
</Card>
<Card title="Perintah slash" icon="terminal" href="/id/tools/slash-commands">
<Card title="Slash commands" icon="terminal" href="/id/tools/slash-commands">
Perilaku perintah native dan katalog perintah.
</Card>
<Card title="Pemecahan masalah channel" icon="wrench" href="/id/channels/troubleshooting">
@ -34,10 +34,10 @@ Status: siap produksi untuk DM + channel melalui integrasi aplikasi Slack. Mode
<Tab title="Socket Mode (default)">
<Steps>
<Step title="Buat aplikasi Slack baru">
Di pengaturan aplikasi Slack, tekan tombol **[Create New App](https://api.slack.com/apps/new)**:
Di pengaturan aplikasi Slack tekan tombol **[Create New App](https://api.slack.com/apps/new)**:
- pilih **from a manifest** dan pilih workspace untuk aplikasi Anda
- tempel [manifest contoh](#manifest-and-scope-checklist) di bawah ini lalu lanjutkan untuk membuat
- tempel [manifest contoh](#manifest-and-scope-checklist) dari bawah dan lanjutkan untuk membuat
- buat **App-Level Token** (`xapp-...`) dengan `connections:write`
- instal aplikasi dan salin **Bot Token** (`xoxb-...`) yang ditampilkan
</Step>
@ -77,10 +77,10 @@ openclaw gateway
</Tab>
<Tab title="URL Permintaan HTTP">
<Tab title="HTTP Request URLs">
<Steps>
<Step title="Buat aplikasi Slack baru">
Di pengaturan aplikasi Slack, tekan tombol **[Create New App](https://api.slack.com/apps/new)**:
Di pengaturan aplikasi Slack tekan tombol **[Create New App](https://api.slack.com/apps/new)**:
- pilih **from a manifest** dan pilih workspace untuk aplikasi Anda
- tempel [manifest contoh](#manifest-and-scope-checklist) dan perbarui URL sebelum membuat
@ -106,9 +106,9 @@ openclaw gateway
```
<Note>
Gunakan path webhook unik untuk HTTP multi-akun
Gunakan jalur webhook unik untuk HTTP multi-akun
Berikan setiap akun `webhookPath` yang berbeda (default `/slack/events`) agar pendaftaran tidak berbenturan.
Berikan setiap akun `webhookPath` yang berbeda (default `/slack/events`) agar pendaftaran tidak bertabrakan.
</Note>
</Step>
@ -205,7 +205,7 @@ openclaw gateway
</Tab>
<Tab title="URL Permintaan HTTP">
<Tab title="HTTP Request URLs">
```json
{
@ -290,13 +290,12 @@ openclaw gateway
</Tabs>
<AccordionGroup>
<Accordion title="Scope authoring opsional (operasi tulis)">
Tambahkan scope bot `chat:write.customize` jika Anda ingin pesan keluar menggunakan identitas agen aktif (nama pengguna dan ikon kustom) alih-alih identitas aplikasi Slack default.
<Accordion title="Scope authorship opsional (operasi tulis)">
Tambahkan bot scope `chat:write.customize` jika Anda ingin pesan keluar menggunakan identitas agen aktif (username dan ikon kustom) alih-alih identitas aplikasi Slack default.
Jika Anda menggunakan ikon emoji, Slack mengharapkan sintaks `:emoji_name:`.
</Accordion>
<Accordion title="Scope token pengguna opsional (operasi baca)">
<Accordion title="Scope user-token opsional (operasi baca)">
Jika Anda mengonfigurasi `channels.slack.userToken`, scope baca yang umum adalah:
- `channels:history`, `groups:history`, `im:history`, `mpim:history`
@ -314,34 +313,34 @@ openclaw gateway
- `botToken` + `appToken` wajib untuk Socket Mode.
- Mode HTTP memerlukan `botToken` + `signingSecret`.
- `botToken`, `appToken`, `signingSecret`, dan `userToken` menerima string plaintext
atau objek SecretRef.
- Token konfigurasi mengesampingkan fallback env.
- `botToken`, `appToken`, `signingSecret`, dan `userToken` menerima string
plaintext atau objek SecretRef.
- Token config mengesampingkan fallback env.
- Fallback env `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` hanya berlaku untuk akun default.
- `userToken` (`xoxp-...`) hanya untuk konfigurasi (tanpa fallback env) dan default ke perilaku hanya-baca (`userTokenReadOnly: true`).
- `userToken` (`xoxp-...`) hanya config (tanpa fallback env) dan default ke perilaku hanya-baca (`userTokenReadOnly: true`).
Perilaku snapshot status:
- Inspeksi akun Slack melacak field `*Source` dan `*Status`
per kredensial (`botToken`, `appToken`, `signingSecret`, `userToken`).
- Inspeksi akun Slack melacak field `*Source` dan `*Status` per kredensial
(`botToken`, `appToken`, `signingSecret`, `userToken`).
- Status adalah `available`, `configured_unavailable`, atau `missing`.
- `configured_unavailable` berarti akun dikonfigurasi melalui SecretRef
atau sumber secret non-inline lain, tetapi path perintah/runtime saat ini
tidak dapat menyelesaikan nilai sebenarnya.
atau sumber secret non-inline lainnya, tetapi jalur perintah/runtime saat ini
tidak dapat me-resolve nilai sebenarnya.
- Dalam mode HTTP, `signingSecretStatus` disertakan; dalam Socket Mode,
pasangan yang diperlukan adalah `botTokenStatus` + `appTokenStatus`.
<Tip>
Untuk tindakan/pembacaan direktori, token pengguna dapat diprioritaskan jika dikonfigurasi. Untuk penulisan, token bot tetap diprioritaskan; penulisan token pengguna hanya diizinkan saat `userTokenReadOnly: false` dan token bot tidak tersedia.
Untuk aksi/pembacaan direktori, user token dapat diprioritaskan bila dikonfigurasi. Untuk penulisan, bot token tetap diprioritaskan; penulisan dengan user-token hanya diizinkan saat `userTokenReadOnly: false` dan bot token tidak tersedia.
</Tip>
## Tindakan dan gate
## Aksi dan gate
Tindakan Slack dikendalikan oleh `channels.slack.actions.*`.
Aksi Slack dikendalikan oleh `channels.slack.actions.*`.
Grup tindakan yang tersedia dalam tooling Slack saat ini:
Grup aksi yang tersedia dalam tooling Slack saat ini:
| Grup | Default |
| Group | Default |
| ---------- | ------- |
| messages | enabled |
| reactions | enabled |
@ -349,7 +348,7 @@ Grup tindakan yang tersedia dalam tooling Slack saat ini:
| memberInfo | enabled |
| emojiList | enabled |
Tindakan pesan Slack saat ini mencakup `send`, `upload-file`, `download-file`, `read`, `edit`, `delete`, `pin`, `unpin`, `list-pins`, `member-info`, dan `emoji-list`.
Aksi pesan Slack saat ini mencakup `send`, `upload-file`, `download-file`, `read`, `edit`, `delete`, `pin`, `unpin`, `list-pins`, `member-info`, dan `emoji-list`.
## Kontrol akses dan routing
@ -367,16 +366,16 @@ Tindakan pesan Slack saat ini mencakup `send`, `upload-file`, `download-file`, `
- `dm.enabled` (default true)
- `channels.slack.allowFrom` (disarankan)
- `dm.allowFrom` (legacy)
- `dm.groupEnabled` (DM grup default false)
- `dm.groupEnabled` (default DM grup false)
- `dm.groupChannels` (allowlist MPIM opsional)
Prioritas multi-akun:
- `channels.slack.accounts.default.allowFrom` hanya berlaku untuk akun `default`.
- Akun bernama mewarisi `channels.slack.allowFrom` saat `allowFrom` miliknya sendiri tidak disetel.
- Akun bernama mewarisi `channels.slack.allowFrom` ketika `allowFrom` milik mereka sendiri tidak disetel.
- Akun bernama tidak mewarisi `channels.slack.accounts.default.allowFrom`.
Pemasangan di DM menggunakan `openclaw pairing approve slack <code>`.
Pairing di DM menggunakan `openclaw pairing approve slack <code>`.
</Tab>
@ -389,24 +388,24 @@ Tindakan pesan Slack saat ini mencakup `send`, `upload-file`, `download-file`, `
Allowlist channel berada di bawah `channels.slack.channels` dan sebaiknya menggunakan ID channel yang stabil.
Catatan runtime: jika `channels.slack` benar-benar tidak ada (penyiapan hanya env), runtime akan fallback ke `groupPolicy="allowlist"` dan mencatat peringatan (bahkan jika `channels.defaults.groupPolicy` disetel).
Catatan runtime: jika `channels.slack` benar-benar tidak ada (penyiapan hanya-env), runtime akan fallback ke `groupPolicy="allowlist"` dan mencatat peringatan (bahkan jika `channels.defaults.groupPolicy` disetel).
Resolusi nama/ID:
- entri allowlist channel dan entri allowlist DM diselesaikan saat startup ketika akses token memungkinkan
- entri nama channel yang tidak terselesaikan tetap dipertahankan seperti dikonfigurasi tetapi diabaikan untuk routing secara default
- otorisasi inbound dan routing channel secara default berbasis ID; pencocokan langsung nama pengguna/slug memerlukan `channels.slack.dangerouslyAllowNameMatching: true`
- entri allowlist channel dan entri allowlist DM di-resolve saat startup ketika akses token mengizinkan
- entri nama channel yang tidak terselesaikan tetap dipertahankan seperti dikonfigurasi tetapi secara default diabaikan untuk routing
- otorisasi inbound dan routing channel secara default mengutamakan ID; pencocokan langsung username/slug memerlukan `channels.slack.dangerouslyAllowNameMatching: true`
</Tab>
<Tab title="Mention dan pengguna channel">
Pesan channel secara default digate oleh mention.
Pesan channel secara default dibatasi oleh mention.
Sumber mention:
- mention aplikasi eksplisit (`<@botId>`)
- pola regex mention (`agents.list[].groupChat.mentionPatterns`, fallback `messages.groupChat.mentionPatterns`)
- perilaku thread balas-ke-bot implisit (dinonaktifkan saat `thread.requireExplicitMention` bernilai `true`)
- perilaku thread balasan-ke-bot implisit (dinonaktifkan saat `thread.requireExplicitMention` bernilai `true`)
Kontrol per channel (`channels.slack.channels.<id>`; nama hanya melalui resolusi startup atau `dangerouslyAllowNameMatching`):
@ -416,8 +415,8 @@ Tindakan pesan Slack saat ini mencakup `send`, `upload-file`, `download-file`, `
- `skills`
- `systemPrompt`
- `tools`, `toolsBySender`
- format key `toolsBySender`: `id:`, `e164:`, `username:`, `name:`, atau wildcard `"*"`
(key legacy tanpa prefiks tetap dipetakan hanya ke `id:`)
- format kunci `toolsBySender`: `id:`, `e164:`, `username:`, `name:`, atau wildcard `"*"`
(kunci legacy tanpa prefiks masih dipetakan hanya ke `id:`)
</Tab>
</Tabs>
@ -425,36 +424,36 @@ Tindakan pesan Slack saat ini mencakup `send`, `upload-file`, `download-file`, `
## Threading, sesi, dan tag balasan
- DM dirutekan sebagai `direct`; channel sebagai `channel`; MPIM sebagai `group`.
- Dengan `session.dmScope=main` default, DM Slack digabungkan ke sesi utama agen.
- Dengan default `session.dmScope=main`, DM Slack digabungkan ke sesi utama agen.
- Sesi channel: `agent:<agentId>:slack:channel:<channelId>`.
- Balasan thread dapat membuat sufiks sesi thread (`:thread:<threadTs>`) jika berlaku.
- Balasan thread dapat membuat sufiks sesi thread (`:thread:<threadTs>`) bila berlaku.
- Default `channels.slack.thread.historyScope` adalah `thread`; default `thread.inheritParent` adalah `false`.
- `channels.slack.thread.initialHistoryLimit` mengontrol berapa banyak pesan thread yang sudah ada diambil saat sesi thread baru dimulai (default `20`; setel `0` untuk menonaktifkan).
- `channels.slack.thread.requireExplicitMention` (default `false`): saat `true`, menekan mention thread implisit sehingga bot hanya merespons mention `@bot` eksplisit di dalam thread, bahkan saat bot sudah berpartisipasi di thread tersebut. Tanpa ini, balasan dalam thread yang diikuti bot melewati gate `requireMention`.
- `channels.slack.thread.requireExplicitMention` (default `false`): saat `true`, menekan mention thread implisit sehingga bot hanya merespons mention `@bot` yang eksplisit di dalam thread, bahkan ketika bot sudah berpartisipasi dalam thread. Tanpa ini, balasan dalam thread yang diikuti bot akan melewati gate `requireMention`.
Kontrol threading balasan:
- `channels.slack.replyToMode`: `off|first|all|batched` (default `off`)
- `channels.slack.replyToModeByChatType`: per `direct|group|channel`
- fallback legacy untuk chat direct: `channels.slack.dm.replyToMode`
- fallback legacy untuk chat langsung: `channels.slack.dm.replyToMode`
Tag balasan manual didukung:
- `[[reply_to_current]]`
- `[[reply_to:<id>]]`
Catatan: `replyToMode="off"` menonaktifkan **semua** threading balasan di Slack, termasuk tag `[[reply_to_*]]` eksplisit. Ini berbeda dari Telegram, di mana tag eksplisit tetap dihormati dalam mode `"off"`. Perbedaan ini mencerminkan model threading platform: thread Slack menyembunyikan pesan dari channel, sedangkan balasan Telegram tetap terlihat di alur chat utama.
Catatan: `replyToMode="off"` menonaktifkan **semua** threading balasan di Slack, termasuk tag `[[reply_to_*]]` yang eksplisit. Ini berbeda dari Telegram, di mana tag eksplisit tetap dihormati dalam mode `"off"`. Perbedaan ini mencerminkan model threading platform: thread Slack menyembunyikan pesan dari channel, sementara balasan Telegram tetap terlihat dalam alur chat utama.
## Reaksi ack
`ackReaction` mengirim emoji acknowledgement saat OpenClaw memproses pesan inbound.
`ackReaction` mengirim emoji pengakuan saat OpenClaw sedang memproses pesan inbound.
Urutan resolusi:
- `channels.slack.accounts.<accountId>.ackReaction`
- `channels.slack.ackReaction`
- `messages.ackReaction`
- fallback emoji identitas agen (`agents.list[].identity.emoji`, jika tidak ada `"👀"`)
- fallback emoji identitas agen (`agents.list[].identity.emoji`, jika tidak ada "👀")
Catatan:
@ -467,14 +466,16 @@ Catatan:
- `off`: nonaktifkan streaming pratinjau langsung.
- `partial` (default): ganti teks pratinjau dengan output parsial terbaru.
- `block`: tambahkan pembaruan pratinjau yang dipotong-potong.
- `block`: tambahkan pembaruan pratinjau bertahap.
- `progress`: tampilkan teks status progres saat menghasilkan, lalu kirim teks final.
`channels.slack.nativeStreaming` mengontrol streaming teks native Slack saat `streaming` bernilai `partial` (default: `true`).
`channels.slack.streaming.nativeTransport` mengontrol streaming teks native Slack saat `channels.slack.streaming.mode` adalah `partial` (default: `true`).
- Thread balasan harus tersedia agar streaming teks native muncul. Pemilihan thread tetap mengikuti `replyToMode`. Tanpanya, pratinjau draf normal digunakan.
- Payload media dan non-teks fallback ke pengiriman normal.
- Jika streaming gagal di tengah balasan, OpenClaw fallback ke pengiriman normal untuk payload yang tersisa.
- Thread balasan harus tersedia agar streaming teks native dan status thread assistant Slack dapat muncul. Pemilihan thread tetap mengikuti `replyToMode`.
- Root channel dan chat grup tetap dapat menggunakan pratinjau draf normal saat streaming native tidak tersedia.
- DM Slack tingkat atas secara default tetap di luar thread, sehingga tidak menampilkan pratinjau bergaya thread; gunakan balasan thread atau `typingReaction` jika Anda ingin progres terlihat di sana.
- Payload media dan non-teks akan fallback ke pengiriman normal.
- Jika streaming gagal di tengah balasan, OpenClaw akan fallback ke pengiriman normal untuk payload yang tersisa.
Gunakan pratinjau draf alih-alih streaming teks native Slack:
@ -482,17 +483,20 @@ Gunakan pratinjau draf alih-alih streaming teks native Slack:
{
channels: {
slack: {
streaming: "partial",
nativeStreaming: false,
streaming: {
mode: "partial",
nativeTransport: false,
},
},
},
}
```
Key legacy:
Kunci legacy:
- `channels.slack.streamMode` (`replace | status_final | append`) dimigrasikan otomatis ke `channels.slack.streaming`.
- boolean `channels.slack.streaming` dimigrasikan otomatis ke `channels.slack.nativeStreaming`.
- `channels.slack.streamMode` (`replace | status_final | append`) dimigrasikan otomatis ke `channels.slack.streaming.mode`.
- boolean `channels.slack.streaming` dimigrasikan otomatis ke `channels.slack.streaming.mode` dan `channels.slack.streaming.nativeTransport`.
- `channels.slack.nativeStreaming` legacy dimigrasikan otomatis ke `channels.slack.streaming.nativeTransport`.
## Fallback reaksi mengetik
@ -512,7 +516,7 @@ Catatan:
<AccordionGroup>
<Accordion title="Lampiran inbound">
Lampiran file Slack diunduh dari URL privat yang dihosting Slack (alur permintaan dengan autentikasi token) dan ditulis ke media store saat pengambilan berhasil dan batas ukuran mengizinkan.
Lampiran file Slack diunduh dari URL privat yang di-host Slack (alur permintaan terautentikasi token) dan ditulis ke media store ketika pengambilan berhasil dan batas ukuran mengizinkan.
Batas ukuran inbound runtime secara default adalah `20MB` kecuali diganti oleh `channels.slack.mediaMaxMb`.
@ -520,7 +524,7 @@ Catatan:
<Accordion title="Teks dan file outbound">
- chunk teks menggunakan `channels.slack.textChunkLimit` (default 4000)
- `channels.slack.chunkMode="newline"` mengaktifkan pemisahan dengan paragraf terlebih dahulu
- `channels.slack.chunkMode="newline"` mengaktifkan pemisahan yang mengutamakan paragraf
- pengiriman file menggunakan API upload Slack dan dapat menyertakan balasan thread (`thread_ts`)
- batas media outbound mengikuti `channels.slack.mediaMaxMb` saat dikonfigurasi; jika tidak, pengiriman channel menggunakan default jenis MIME dari pipeline media
</Accordion>
@ -540,24 +544,24 @@ Catatan:
- Mode otomatis perintah native adalah **off** untuk Slack (`commands.native: "auto"` tidak mengaktifkan perintah native Slack).
- Aktifkan handler perintah Slack native dengan `channels.slack.commands.native: true` (atau global `commands.native: true`).
- Saat perintah native diaktifkan, daftarkan perintah slash yang cocok di Slack (nama `/<command>`), dengan satu pengecualian:
- Saat perintah native diaktifkan, daftarkan slash command yang cocok di Slack (nama `/<command>`), dengan satu pengecualian:
- daftarkan `/agentstatus` untuk perintah status (Slack mencadangkan `/status`)
- Jika perintah native tidak diaktifkan, Anda dapat menjalankan satu perintah slash yang dikonfigurasi melalui `channels.slack.slashCommand`.
- Menu argumen native kini menyesuaikan strategi render-nya:
- Jika perintah native tidak diaktifkan, Anda dapat menjalankan satu slash command yang dikonfigurasi melalui `channels.slack.slashCommand`.
- Menu argumen native sekarang menyesuaikan strategi render-nya:
- hingga 5 opsi: blok tombol
- 6-100 opsi: menu pilihan statis
- lebih dari 100 opsi: pilihan eksternal dengan pemfilteran opsi async saat handler opsi interaktivitas tersedia
- jika nilai opsi yang dienkode melebihi batas Slack, alur fallback ke tombol
- Untuk payload opsi yang panjang, menu argumen perintah slash menggunakan dialog konfirmasi sebelum mengirim nilai yang dipilih.
- 6-100 opsi: menu pilih statis
- lebih dari 100 opsi: external select dengan penyaringan opsi async saat handler opsi interactivity tersedia
- jika nilai opsi yang dienkode melebihi batas Slack, alur akan fallback ke tombol
- Untuk payload opsi yang panjang, menu argumen Slash command menggunakan dialog konfirmasi sebelum mengirim nilai yang dipilih.
Pengaturan default perintah slash:
Pengaturan default slash command:
- `enabled: false`
- `name: "openclaw"`
- `sessionPrefix: "slack:slash"`
- `ephemeral: true`
Sesi slash menggunakan key terisolasi:
Sesi slash menggunakan kunci terisolasi:
- `agent:<agentId>:slack:slash:<userId>`
@ -599,44 +603,44 @@ Atau aktifkan hanya untuk satu akun Slack:
}
```
Saat diaktifkan, agen dapat mengeluarkan directive balasan khusus Slack:
Saat diaktifkan, agen dapat mengeluarkan direktif balasan khusus Slack:
- `[[slack_buttons: Approve:approve, Reject:reject]]`
- `[[slack_select: Choose a target | Canary:canary, Production:production]]`
Directive ini dikompilasi menjadi Slack Block Kit dan merutekan klik atau pilihan kembali melalui path event interaksi Slack yang ada.
Direktif ini dikompilasi menjadi Slack Block Kit dan merutekan klik atau pilihan kembali melalui jalur event interaksi Slack yang sudah ada.
Catatan:
- Ini adalah UI khusus Slack. Channel lain tidak menerjemahkan directive Slack Block Kit ke sistem tombol mereka sendiri.
- Nilai callback interaktif adalah token buram yang dibuat OpenClaw, bukan nilai mentah yang ditulis agen.
- Jika blok interaktif yang dihasilkan melebihi batas Slack Block Kit, OpenClaw fallback ke balasan teks asli alih-alih mengirim payload blok yang tidak valid.
- Ini adalah UI khusus Slack. Channel lain tidak menerjemahkan direktif Slack Block Kit ke sistem tombol mereka sendiri.
- Nilai callback interaktif adalah token opak yang dibuat OpenClaw, bukan nilai mentah yang ditulis agen.
- Jika blok interaktif yang dihasilkan melebihi batas Slack Block Kit, OpenClaw akan fallback ke balasan teks asli alih-alih mengirim payload blocks yang tidak valid.
## Persetujuan exec di Slack
Slack dapat bertindak sebagai klien persetujuan native dengan tombol interaktif dan interaksi, alih-alih fallback ke UI Web atau terminal.
Slack dapat bertindak sebagai klien persetujuan native dengan tombol interaktif dan interaksi, alih-alih fallback ke Web UI atau terminal.
- Persetujuan exec menggunakan `channels.slack.execApprovals.*` untuk routing DM/channel native.
- Persetujuan plugin masih dapat diselesaikan melalui permukaan tombol native Slack yang sama saat permintaan sudah masuk ke Slack dan jenis id persetujuannya adalah `plugin:`.
- Persetujuan plugin tetap dapat diselesaikan melalui permukaan tombol native Slack yang sama ketika permintaan sudah masuk di Slack dan jenis id persetujuannya adalah `plugin:`.
- Otorisasi approver tetap ditegakkan: hanya pengguna yang diidentifikasi sebagai approver yang dapat menyetujui atau menolak permintaan melalui Slack.
Ini menggunakan permukaan tombol persetujuan bersama yang sama seperti channel lain. Saat `interactivity` diaktifkan di pengaturan aplikasi Slack Anda, prompt persetujuan dirender sebagai tombol Block Kit langsung di percakapan.
Saat tombol tersebut ada, itulah UX persetujuan utama; OpenClaw
hanya boleh menyertakan perintah `/approve` manual saat hasil tool menyatakan persetujuan chat
tidak tersedia atau persetujuan manual adalah satu-satunya jalur.
Ketika tombol tersebut ada, tombol itu menjadi UX persetujuan utama; OpenClaw
hanya boleh menyertakan perintah `/approve` manual ketika hasil tool menyatakan
persetujuan chat tidak tersedia atau persetujuan manual adalah satu-satunya jalur.
Path konfigurasi:
Jalur config:
- `channels.slack.execApprovals.enabled`
- `channels.slack.execApprovals.approvers` (opsional; fallback ke `commands.ownerAllowFrom` jika memungkinkan)
- `channels.slack.execApprovals.approvers` (opsional; fallback ke `commands.ownerAllowFrom` bila memungkinkan)
- `channels.slack.execApprovals.target` (`dm` | `channel` | `both`, default: `dm`)
- `agentFilter`, `sessionFilter`
Slack secara otomatis mengaktifkan persetujuan exec native saat `enabled` tidak disetel atau `"auto"` dan setidaknya satu
approver berhasil diselesaikan. Setel `enabled: false` untuk menonaktifkan Slack sebagai klien persetujuan native secara eksplisit.
Setel `enabled: true` untuk memaksa persetujuan native aktif saat approver berhasil diselesaikan.
Slack otomatis mengaktifkan persetujuan exec native saat `enabled` tidak disetel atau `"auto"` dan setidaknya
satu approver berhasil di-resolve. Setel `enabled: false` untuk menonaktifkan Slack secara eksplisit sebagai klien persetujuan native.
Setel `enabled: true` untuk memaksa persetujuan native aktif saat approver berhasil di-resolve.
Perilaku default tanpa konfigurasi persetujuan exec Slack eksplisit:
Perilaku default tanpa config persetujuan exec Slack yang eksplisit:
```json5
{
@ -646,8 +650,8 @@ Perilaku default tanpa konfigurasi persetujuan exec Slack eksplisit:
}
```
Konfigurasi native Slack eksplisit hanya diperlukan saat Anda ingin mengganti approver, menambahkan filter, atau
memilih pengiriman origin-chat:
Config native Slack yang eksplisit hanya diperlukan ketika Anda ingin mengesampingkan approver, menambahkan filter, atau
ikut serta dalam pengiriman origin-chat:
```json5
{
@ -663,26 +667,26 @@ memilih pengiriman origin-chat:
}
```
Penerusan bersama `approvals.exec` terpisah. Gunakan hanya saat prompt persetujuan exec juga harus
dirutekan ke chat lain atau target out-of-band eksplisit. Penerusan bersama `approvals.plugin` juga
terpisah; tombol native Slack masih dapat menyelesaikan persetujuan plugin saat permintaan tersebut sudah masuk
ke Slack.
Penerusan bersama `approvals.exec` bersifat terpisah. Gunakan hanya ketika prompt persetujuan exec juga harus
dirutekan ke chat lain atau target out-of-band yang eksplisit. Penerusan bersama `approvals.plugin` juga
terpisah; tombol native Slack tetap dapat menyelesaikan persetujuan plugin saat permintaan tersebut sudah masuk
di Slack.
`/approve` pada chat yang sama juga berfungsi di channel dan DM Slack yang sudah mendukung perintah. Lihat [Persetujuan exec](/id/tools/exec-approvals) untuk model penerusan persetujuan lengkap.
`/approve` di chat yang sama juga berfungsi di channel dan DM Slack yang sudah mendukung perintah. Lihat [Exec approvals](/id/tools/exec-approvals) untuk model lengkap penerusan persetujuan.
## Event dan perilaku operasional
- Edit/hapus pesan/siaran thread dipetakan ke event sistem.
- Event tambah/hapus reaksi dipetakan ke event sistem.
- Event anggota masuk/keluar, channel dibuat/diubah nama, dan tambah/hapus pin dipetakan ke event sistem.
- `channel_id_changed` dapat memigrasikan key konfigurasi channel saat `configWrites` diaktifkan.
- Event anggota bergabung/keluar, channel dibuat/diubah namanya, dan tambah/hapus pin dipetakan ke event sistem.
- `channel_id_changed` dapat memigrasikan kunci config channel saat `configWrites` diaktifkan.
- Metadata topik/tujuan channel diperlakukan sebagai konteks tidak tepercaya dan dapat disuntikkan ke konteks routing.
- Pemula thread dan penanaman konteks riwayat thread awal difilter oleh allowlist pengirim yang dikonfigurasi bila berlaku.
- Aksi blok dan interaksi modal menghasilkan event sistem terstruktur `Slack interaction: ...` dengan field payload kaya:
- Pemula thread dan penyemaian konteks riwayat thread awal difilter oleh allowlist pengirim yang dikonfigurasi bila berlaku.
- Aksi blok dan interaksi modal mengeluarkan event sistem terstruktur `Slack interaction: ...` dengan field payload yang kaya:
- aksi blok: nilai terpilih, label, nilai picker, dan metadata `workflow_*`
- event modal `view_submission` dan `view_closed` dengan metadata channel terarah dan input formulir
- event modal `view_submission` dan `view_closed` dengan metadata channel yang dirutekan dan input formulir
## Pointer referensi konfigurasi
## Penunjuk referensi konfigurasi
Referensi utama:
@ -694,7 +698,7 @@ Referensi utama:
- toggle kompatibilitas: `dangerouslyAllowNameMatching` (break-glass; biarkan nonaktif kecuali diperlukan)
- akses channel: `groupPolicy`, `channels.*`, `channels.*.users`, `channels.*.requireMention`
- threading/riwayat: `replyToMode`, `replyToModeByChatType`, `thread.*`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit`
- pengiriman: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `streaming`, `nativeStreaming`
- pengiriman: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `streaming`, `streaming.nativeTransport`
- operasi/fitur: `configWrites`, `commands.native`, `slashCommand.*`, `actions.*`, `userToken`, `userTokenReadOnly`
## Pemecahan masalah
@ -723,7 +727,7 @@ openclaw doctor
- `channels.slack.dm.enabled`
- `channels.slack.dmPolicy` (atau legacy `channels.slack.dm.policy`)
- persetujuan pairing / entri allowlist
- pairing approval / entri allowlist
```bash
openclaw pairing list slack
@ -731,35 +735,35 @@ openclaw pairing list slack
</Accordion>
<Accordion title="Mode socket tidak terhubung">
<Accordion title="Socket mode tidak terhubung">
Validasi token bot + aplikasi dan aktivasi Socket Mode di pengaturan aplikasi Slack.
Jika `openclaw channels status --probe --json` menampilkan `botTokenStatus` atau
`appTokenStatus: "configured_unavailable"`, akun Slack
telah dikonfigurasi tetapi runtime saat ini tidak dapat menyelesaikan nilai
`appTokenStatus: "configured_unavailable"`, akun Slack tersebut
sudah dikonfigurasi tetapi runtime saat ini tidak dapat me-resolve nilai
yang didukung SecretRef.
</Accordion>
<Accordion title="Mode HTTP tidak menerima event">
<Accordion title="HTTP mode tidak menerima event">
Validasi:
- signing secret
- path webhook
- URL Permintaan Slack (Events + Interactivity + Slash Commands)
- jalur webhook
- Slack Request URLs (Events + Interactivity + Slash Commands)
- `webhookPath` unik per akun HTTP
Jika `signingSecretStatus: "configured_unavailable"` muncul di snapshot akun,
akun HTTP telah dikonfigurasi tetapi runtime saat ini tidak dapat
menyelesaikan signing secret yang didukung SecretRef.
me-resolve signing secret yang didukung SecretRef.
</Accordion>
<Accordion title="Perintah native/slash tidak berjalan">
Verifikasi apakah yang Anda maksud adalah:
- mode perintah native (`channels.slack.commands.native: true`) dengan perintah slash yang cocok didaftarkan di Slack
- atau mode perintah slash tunggal (`channels.slack.slashCommand.enabled: true`)
- mode perintah native (`channels.slack.commands.native: true`) dengan slash command yang cocok didaftarkan di Slack
- atau mode satu slash command (`channels.slack.slashCommand.enabled: true`)
Periksa juga `commands.useAccessGroups` dan allowlist channel/pengguna.
@ -768,10 +772,10 @@ openclaw pairing list slack
## Terkait
- [Pemasangan](/id/channels/pairing)
- [Pairing](/id/channels/pairing)
- [Grup](/id/channels/groups)
- [Keamanan](/id/gateway/security)
- [Routing channel](/id/channels/channel-routing)
- [Pemecahan masalah](/id/channels/troubleshooting)
- [Konfigurasi](/id/gateway/configuration)
- [Perintah slash](/id/tools/slash-commands)
- [Slash commands](/id/tools/slash-commands)

View File

@ -1,19 +1,19 @@
---
read_when:
- Anda ingin memahami cara kerja memory
- Anda ingin mengetahui file memory apa yang harus ditulis
summary: Cara OpenClaw mengingat berbagai hal di seluruh sesi
title: Ikhtisar Memory
- Anda ingin memahami cara kerja memori
- Anda ingin mengetahui file memori apa yang harus ditulis
summary: Bagaimana OpenClaw mengingat berbagai hal di seluruh sesi
title: Ikhtisar Memori
x-i18n:
generated_at: "2026-04-06T03:06:30Z"
generated_at: "2026-04-08T06:00:59Z"
model: gpt-5.4
provider: openai
source_hash: d19d4fa9c4b3232b7a97f7a382311d2a375b562040de15e9fe4a0b1990b825e7
source_hash: 3bb8552341b0b651609edaaae826a22fdc535d240aed4fad4af4b069454004af
source_path: concepts/memory.md
workflow: 15
---
# Ikhtisar Memory
# Ikhtisar Memori
OpenClaw mengingat berbagai hal dengan menulis **file Markdown biasa** di
workspace agen Anda. Model hanya "mengingat" apa yang disimpan ke disk -- tidak ada
@ -21,53 +21,73 @@ status tersembunyi.
## Cara kerjanya
Agen Anda memiliki tiga file yang terkait dengan memory:
Agen Anda memiliki tiga file yang terkait dengan memori:
- **`MEMORY.md`** -- memory jangka panjang. Fakta, preferensi, dan
- **`MEMORY.md`** -- memori jangka panjang. Fakta, preferensi, dan
keputusan yang tahan lama. Dimuat pada awal setiap sesi DM.
- **`memory/YYYY-MM-DD.md`** -- catatan harian. Konteks berjalan dan pengamatan.
Catatan hari ini dan kemarin dimuat secara otomatis.
- **`DREAMS.md`** (eksperimental, opsional) -- Dream Diary dan ringkasan sapuan
dreaming untuk tinjauan manusia.
- **`DREAMS.md`** (eksperimental, opsional) -- Buku Harian Mimpi dan ringkasan
penyapuan dreaming untuk ditinjau manusia.
File-file ini berada di workspace agen (default `~/.openclaw/workspace`).
<Tip>
Jika Anda ingin agen Anda mengingat sesuatu, cukup minta: "Ingat bahwa saya
lebih suka TypeScript." Agen akan menuliskannya ke file yang sesuai.
lebih memilih TypeScript." Agen akan menuliskannya ke file yang sesuai.
</Tip>
## Alat memory
## Alat memori
Agen memiliki dua alat untuk bekerja dengan memory:
Agen memiliki dua alat untuk bekerja dengan memori:
- **`memory_search`** -- menemukan catatan yang relevan menggunakan pencarian semantik, bahkan ketika
susunan katanya berbeda dari aslinya.
- **`memory_get`** -- membaca file memory tertentu atau rentang baris.
- **`memory_search`** -- menemukan catatan yang relevan menggunakan pencarian semantik, bahkan saat
kata-katanya berbeda dari aslinya.
- **`memory_get`** -- membaca file memori tertentu atau rentang baris.
Kedua alat disediakan oleh plugin memory yang aktif (default: `memory-core`).
Kedua alat ini disediakan oleh plugin memori yang aktif (default: `memory-core`).
## Pencarian memory
## Plugin pendamping Memory Wiki
Saat provider embedding dikonfigurasi, `memory_search` menggunakan **pencarian
Jika Anda ingin memori tahan lama berperilaku lebih seperti basis pengetahuan yang dipelihara daripada
sekadar catatan mentah, gunakan plugin bawaan `memory-wiki`.
`memory-wiki` menyusun pengetahuan tahan lama ke dalam vault wiki dengan:
- struktur halaman yang deterministik
- klaim dan bukti yang terstruktur
- pelacakan kontradiksi dan kebaruan
- dasbor yang dihasilkan
- ringkasan terkompilasi untuk konsumen agen/runtime
- alat native wiki seperti `wiki_search`, `wiki_get`, `wiki_apply`, dan `wiki_lint`
Ini tidak menggantikan plugin memori aktif. Plugin memori aktif tetap
memiliki recall, promosi, dan dreaming. `memory-wiki` menambahkan
lapisan pengetahuan kaya provenance di sampingnya.
Lihat [Memory Wiki](/id/plugins/memory-wiki).
## Pencarian memori
Saat penyedia embedding dikonfigurasi, `memory_search` menggunakan **pencarian
hibrida** -- menggabungkan kemiripan vektor (makna semantik) dengan pencocokan kata kunci
(istilah persis seperti ID dan simbol kode). Ini langsung berfungsi setelah Anda memiliki
API key untuk provider yang didukung.
kunci API untuk penyedia yang didukung.
<Info>
OpenClaw mendeteksi otomatis provider embedding Anda dari API key yang tersedia. Jika Anda
mengonfigurasi key OpenAI, Gemini, Voyage, atau Mistral, pencarian memory akan
OpenClaw mendeteksi otomatis penyedia embedding Anda dari kunci API yang tersedia. Jika Anda
telah mengonfigurasi kunci OpenAI, Gemini, Voyage, atau Mistral, pencarian memori
diaktifkan secara otomatis.
</Info>
Untuk detail tentang cara kerja pencarian, opsi penyetelan, dan penyiapan provider, lihat
[Memory Search](/id/concepts/memory-search).
Untuk detail tentang cara kerja pencarian, opsi penyesuaian, dan penyiapan penyedia, lihat
[Pencarian Memori](/id/concepts/memory-search).
## Backend memory
## Backend memori
<CardGroup cols={3}>
<Card title="Bawaan (default)" icon="database" href="/id/concepts/memory-builtin">
Berbasis SQLite. Langsung berfungsi dengan pencarian kata kunci, kemiripan vektor, dan
Berbasis SQLite. Berfungsi langsung dengan pencarian kata kunci, kemiripan vektor, dan
pencarian hibrida. Tanpa dependensi tambahan.
</Card>
<Card title="QMD" icon="search" href="/id/concepts/memory-qmd">
@ -75,58 +95,68 @@ Sidecar local-first dengan reranking, perluasan kueri, dan kemampuan untuk mengi
direktori di luar workspace.
</Card>
<Card title="Honcho" icon="brain" href="/id/concepts/memory-honcho">
Memory lintas sesi yang AI-native dengan pemodelan pengguna, pencarian semantik, dan
kesadaran multi-agen. Instal plugin.
Memori lintas sesi native AI dengan pemodelan pengguna, pencarian semantik, dan
kesadaran multi-agen. Instalasi plugin.
</Card>
</CardGroup>
## Flush memory otomatis
## Lapisan wiki pengetahuan
<CardGroup cols={1}>
<Card title="Memory Wiki" icon="book" href="/id/plugins/memory-wiki">
Menyusun memori tahan lama menjadi vault wiki kaya provenance dengan klaim,
dasbor, mode bridge, dan alur kerja yang ramah Obsidian.
</Card>
</CardGroup>
## Flush memori otomatis
Sebelum [compaction](/id/concepts/compaction) merangkum percakapan Anda, OpenClaw
menjalankan giliran senyap yang mengingatkan agen untuk menyimpan konteks penting ke file
memory. Ini aktif secara default -- Anda tidak perlu mengonfigurasi apa pun.
memori. Ini aktif secara default -- Anda tidak perlu mengonfigurasi apa pun.
<Tip>
Flush memory mencegah hilangnya konteks selama compaction. Jika agen Anda memiliki
Flush memori mencegah hilangnya konteks selama compaction. Jika agen Anda memiliki
fakta penting dalam percakapan yang belum ditulis ke file, fakta tersebut
akan disimpan secara otomatis sebelum peringkasan terjadi.
akan disimpan secara otomatis sebelum ringkasan dibuat.
</Tip>
## Dreaming (eksperimental)
Dreaming adalah proses konsolidasi latar belakang opsional untuk memory. Ini mengumpulkan
sinyal jangka pendek, menilai kandidat, dan hanya mempromosikan item yang memenuhi syarat ke
memory jangka panjang (`MEMORY.md`).
Dreaming adalah proses konsolidasi latar belakang opsional untuk memori. Ini mengumpulkan
sinyal jangka pendek, memberi skor pada kandidat, dan hanya mempromosikan item yang memenuhi syarat ke
memori jangka panjang (`MEMORY.md`).
Ini dirancang untuk menjaga memory jangka panjang tetap memiliki sinyal tinggi:
Ini dirancang untuk menjaga memori jangka panjang tetap bernilai tinggi:
- **Opt-in**: dinonaktifkan secara default.
- **Terjadwal**: saat diaktifkan, `memory-core` mengelola otomatis satu cron job berulang
untuk satu sapuan dreaming penuh.
- **Berambang batas**: promosi harus lolos ambang skor, frekuensi recall, dan
- **Terjadwal**: saat diaktifkan, `memory-core` mengelola otomatis satu pekerjaan cron berulang
untuk penyapuan dreaming penuh.
- **Berambang batas**: promosi harus lolos gerbang skor, frekuensi recall, dan
keragaman kueri.
- **Dapat ditinjau**: ringkasan fase dan entri diary ditulis ke `DREAMS.md`
untuk tinjauan manusia.
- **Dapat ditinjau**: ringkasan fase dan entri buku harian ditulis ke `DREAMS.md`
untuk ditinjau manusia.
Untuk perilaku fase, sinyal penilaian, dan detail Dream Diary, lihat
[Dreaming (eksperimental)](/concepts/dreaming).
Untuk perilaku fase, sinyal penilaian, dan detail Buku Harian Mimpi, lihat
[Dreaming (eksperimental)](/id/concepts/dreaming).
## CLI
```bash
openclaw memory status # Periksa status indeks dan provider
openclaw memory search "query" # Cari dari command line
openclaw memory status # Periksa status indeks dan penyedia
openclaw memory search "query" # Cari dari baris perintah
openclaw memory index --force # Bangun ulang indeks
```
## Bacaan lebih lanjut
- [Builtin Memory Engine](/id/concepts/memory-builtin) -- backend SQLite default
- [QMD Memory Engine](/id/concepts/memory-qmd) -- sidecar local-first tingkat lanjut
- [Honcho Memory](/id/concepts/memory-honcho) -- memory lintas sesi AI-native
- [Memory Search](/id/concepts/memory-search) -- pipeline pencarian, provider, dan
penyetelan
- [Dreaming (eksperimental)](/concepts/dreaming) -- promosi latar belakang
dari recall jangka pendek ke memory jangka panjang
- [Referensi konfigurasi Memory](/id/reference/memory-config) -- semua opsi konfigurasi
- [Compaction](/id/concepts/compaction) -- cara compaction berinteraksi dengan memory
- [QMD Memory Engine](/id/concepts/memory-qmd) -- sidecar local-first lanjutan
- [Honcho Memory](/id/concepts/memory-honcho) -- memori lintas sesi native AI
- [Memory Wiki](/id/plugins/memory-wiki) -- vault pengetahuan terkompilasi dan alat native wiki
- [Memory Search](/id/concepts/memory-search) -- pipeline pencarian, penyedia, dan
penyesuaian
- [Dreaming (eksperimental)](/id/concepts/dreaming) -- promosi latar belakang
dari recall jangka pendek ke memori jangka panjang
- [Referensi konfigurasi memori](/id/reference/memory-config) -- semua opsi konfigurasi
- [Compaction](/id/concepts/compaction) -- bagaimana compaction berinteraksi dengan memori

View File

@ -1,40 +1,40 @@
---
read_when:
- Anda memerlukan referensi penyiapan model per penyedia
- Anda ingin contoh konfigurasi atau perintah onboarding CLI untuk penyedia model
- Anda menginginkan contoh konfigurasi atau perintah onboarding CLI untuk penyedia model
summary: Ikhtisar penyedia model dengan contoh konfigurasi + alur CLI
title: Penyedia Model
x-i18n:
generated_at: "2026-04-08T02:15:44Z"
generated_at: "2026-04-08T06:02:39Z"
model: gpt-5.4
provider: openai
source_hash: 26b36a2bc19a28a7ef39aa8e81a0050fea1d452ac4969122e5cdf8755e690258
source_hash: 558ac9e34b67fcc3dd6791a01bebc17e1c34152fa6c5611593d681e8cfa532d9
source_path: concepts/model-providers.md
workflow: 15
---
# Penyedia model
Halaman ini membahas **penyedia LLM/model** (bukan saluran chat seperti WhatsApp/Telegram).
Halaman ini membahas **LLM/penyedia model** (bukan saluran chat seperti WhatsApp/Telegram).
Untuk aturan pemilihan model, lihat [/concepts/models](/id/concepts/models).
## Aturan cepat
- Ref model menggunakan `provider/model` (contoh: `opencode/claude-opus-4-6`).
- Referensi model menggunakan `provider/model` (contoh: `opencode/claude-opus-4-6`).
- Jika Anda menetapkan `agents.defaults.models`, itu menjadi allowlist.
- Helper CLI: `openclaw onboard`, `openclaw models list`, `openclaw models set <provider/model>`.
- Aturan fallback runtime, probe cooldown, dan persistensi override sesi
- Pembantu CLI: `openclaw onboard`, `openclaw models list`, `openclaw models set <provider/model>`.
- Aturan runtime fallback, probe cooldown, dan persistensi override sesi
didokumentasikan di [/concepts/model-failover](/id/concepts/model-failover).
- `models.providers.*.models[].contextWindow` adalah metadata model native;
`models.providers.*.models[].contextTokens` adalah batas runtime efektif.
- Plugin provider dapat menyuntikkan katalog model melalui `registerProvider({ catalog })`;
OpenClaw menggabungkan output tersebut ke dalam `models.providers` sebelum menulis
- Plugin penyedia dapat menyuntikkan katalog model melalui `registerProvider({ catalog })`;
OpenClaw menggabungkan output tersebut ke `models.providers` sebelum menulis
`models.json`.
- Manifes provider dapat mendeklarasikan `providerAuthEnvVars` agar probe auth berbasis env
generik tidak perlu memuat runtime plugin. Peta env-var inti yang tersisa
kini hanya untuk penyedia non-plugin/inti dan beberapa kasus prioritas generik
seperti onboarding Anthropic dengan API key terlebih dahulu.
- Plugin provider juga dapat memiliki perilaku runtime provider melalui
- Manifest penyedia dapat mendeklarasikan `providerAuthEnvVars` sehingga probe auth
berbasis env generik tidak perlu memuat runtime plugin. Peta env-var inti yang
tersisa sekarang hanya untuk penyedia inti/non-plugin dan beberapa kasus
prioritas generik seperti onboarding Anthropic dengan API key lebih dulu.
- Plugin penyedia juga dapat memiliki perilaku runtime penyedia melalui
`normalizeModelId`, `normalizeTransport`, `normalizeConfig`,
`applyNativeStreamingUsageCompat`, `resolveConfigApiKey`,
`resolveSyntheticAuth`, `shouldDeferSyntheticProfileAuth`,
@ -52,212 +52,213 @@ Untuk aturan pemilihan model, lihat [/concepts/models](/id/concepts/models).
`resolveDefaultThinkingLevel`, `applyConfigDefaults`, `isModernModelRef`,
`prepareRuntimeAuth`, `resolveUsageAuth`, `fetchUsageSnapshot`, dan
`onModelSelected`.
- Catatan: runtime provider `capabilities` adalah metadata runner bersama (keluarga provider, kekhasan transkrip/tooling, petunjuk transport/cache). Ini tidak sama dengan [model capability publik](/id/plugins/architecture#public-capability-model)
- Catatan: `capabilities` runtime penyedia adalah metadata runner bersama (keluarga penyedia,
keanehan transkrip/perkakas, petunjuk transport/cache). Ini bukan
hal yang sama dengan [model capability publik](/id/plugins/architecture#public-capability-model)
yang menjelaskan apa yang didaftarkan sebuah plugin (inferensi teks, ucapan, dll.).
## Perilaku provider yang dimiliki plugin
## Perilaku penyedia yang dimiliki plugin
Plugin provider kini dapat memiliki sebagian besar logika spesifik provider sementara OpenClaw menjaga
Plugin penyedia kini dapat memiliki sebagian besar logika khusus penyedia sementara OpenClaw mempertahankan
loop inferensi generik.
Pembagian umum:
Pemisahan tipikal:
- `auth[].run` / `auth[].runNonInteractive`: provider memiliki alur onboarding/login
- `auth[].run` / `auth[].runNonInteractive`: penyedia memiliki alur onboarding/login
untuk `openclaw onboard`, `openclaw models auth`, dan penyiapan headless
- `wizard.setup` / `wizard.modelPicker`: provider memiliki label pilihan auth,
alias lama, petunjuk allowlist onboarding, dan entri setup di pemilih onboarding/model
- `catalog`: provider muncul di `models.providers`
- `normalizeModelId`: provider menormalkan id model lama/pratinjau sebelum
- `wizard.setup` / `wizard.modelPicker`: penyedia memiliki label pilihan auth,
alias lama, petunjuk allowlist onboarding, dan entri penyiapan di pemilih onboarding/model
- `catalog`: penyedia muncul di `models.providers`
- `normalizeModelId`: penyedia menormalkan id model lama/pratinjau sebelum
lookup atau kanonisasi
- `normalizeTransport`: provider menormalkan `api` / `baseUrl` keluarga transport
sebelum perakitan model generik; OpenClaw memeriksa provider yang cocok terlebih dahulu,
lalu plugin provider lain yang mendukung hook sampai salah satunya benar-benar mengubah
- `normalizeTransport`: penyedia menormalkan keluarga transport `api` / `baseUrl`
sebelum perakitan model generik; OpenClaw memeriksa penyedia yang cocok terlebih dahulu,
lalu plugin penyedia lain yang mendukung hook sampai salah satunya benar-benar mengubah
transport
- `normalizeConfig`: provider menormalkan konfigurasi `models.providers.<id>` sebelum
digunakan runtime; OpenClaw memeriksa provider yang cocok terlebih dahulu, lalu provider lain
- `normalizeConfig`: penyedia menormalkan konfigurasi `models.providers.<id>` sebelum
digunakan runtime; OpenClaw memeriksa penyedia yang cocok terlebih dahulu, lalu plugin penyedia lain
yang mendukung hook sampai salah satunya benar-benar mengubah konfigurasi. Jika tidak ada
hook provider yang menulis ulang konfigurasi, helper keluarga Google bawaan yang dibundel tetap
menormalkan entri provider Google yang didukung.
- `applyNativeStreamingUsageCompat`: provider menerapkan penulisan ulang kompatibilitas penggunaan streaming native berbasis endpoint untuk provider konfigurasi
- `resolveConfigApiKey`: provider menyelesaikan auth penanda env untuk provider konfigurasi
hook penyedia yang menulis ulang konfigurasi, helper keluarga Google bawaan yang dibundel tetap
menormalkan entri penyedia Google yang didukung.
- `applyNativeStreamingUsageCompat`: penyedia menerapkan penulisan ulang kompatibilitas penggunaan streaming native berbasis endpoint untuk penyedia konfigurasi
- `resolveConfigApiKey`: penyedia menyelesaikan auth penanda env untuk penyedia konfigurasi
tanpa memaksa pemuatan auth runtime penuh. `amazon-bedrock` juga memiliki
resolver penanda env AWS bawaan di sini, meskipun auth runtime Bedrock menggunakan
rantai default AWS SDK.
- `resolveSyntheticAuth`: provider dapat mengekspos ketersediaan auth lokal/self-hosted atau auth
berbasis konfigurasi lain tanpa menyimpan secret plaintext
- `shouldDeferSyntheticProfileAuth`: provider dapat menandai placeholder profil sintetis yang tersimpan
sebagai prioritas lebih rendah daripada auth berbasis env/konfigurasi
- `resolveDynamicModel`: provider menerima id model yang belum ada di katalog statis lokal
- `prepareDynamicModel`: provider memerlukan refresh metadata sebelum mencoba lagi
- `resolveSyntheticAuth`: penyedia dapat mengekspos ketersediaan auth lokal/self-hosted atau auth berbasis konfigurasi lainnya
tanpa menyimpan secret plaintext
- `shouldDeferSyntheticProfileAuth`: penyedia dapat menandai placeholder profil sintetis yang tersimpan
memiliki prioritas lebih rendah daripada auth berbasis env/konfigurasi
- `resolveDynamicModel`: penyedia menerima id model yang belum ada di katalog statis lokal
- `prepareDynamicModel`: penyedia memerlukan refresh metadata sebelum mencoba lagi
resolusi dinamis
- `normalizeResolvedModel`: provider memerlukan penulisan ulang transport atau base URL
- `contributeResolvedModelCompat`: provider menyumbangkan flag kompatibilitas untuk
model vendor mereka bahkan ketika model tersebut datang melalui transport kompatibel lain
- `capabilities`: provider memublikasikan kekhasan transkrip/tooling/keluarga provider
- `normalizeToolSchemas`: provider membersihkan skema tool sebelum
runner tersemat melihatnya
- `inspectToolSchemas`: provider menampilkan peringatan skema spesifik transport
- `normalizeResolvedModel`: penyedia memerlukan penulisan ulang transport atau base URL
- `contributeResolvedModelCompat`: penyedia menyumbangkan flag compat untuk
model vendornya bahkan ketika model itu datang melalui transport kompatibel lain
- `capabilities`: penyedia menerbitkan keanehan transkrip/perkakas/keluarga penyedia
- `normalizeToolSchemas`: penyedia membersihkan schema tool sebelum runner
tersemat melihatnya
- `inspectToolSchemas`: penyedia memunculkan peringatan schema khusus transport
setelah normalisasi
- `resolveReasoningOutputMode`: provider memilih kontrak output reasoning
native vs bertag
- `prepareExtraParams`: provider menetapkan default atau menormalkan param permintaan per-model
- `createStreamFn`: provider mengganti jalur stream normal dengan transport
kustom sepenuhnya
- `wrapStreamFn`: provider menerapkan wrapper kompatibilitas request header/body/model
- `resolveTransportTurnState`: provider menyediakan header atau metadata
- `resolveReasoningOutputMode`: penyedia memilih kontrak output reasoning native vs bertag
- `prepareExtraParams`: penyedia menetapkan default atau menormalkan parameter permintaan per model
- `createStreamFn`: penyedia mengganti jalur stream normal dengan transport kustom sepenuhnya
- `wrapStreamFn`: penyedia menerapkan wrapper kompatibilitas header/body/model permintaan
- `resolveTransportTurnState`: penyedia memasok header atau metadata
transport native per giliran
- `resolveWebSocketSessionPolicy`: provider menyediakan header sesi WebSocket native
- `resolveWebSocketSessionPolicy`: penyedia memasok header sesi WebSocket native
atau kebijakan cooldown sesi
- `createEmbeddingProvider`: provider memiliki perilaku embedding memori ketika
itu semestinya berada di plugin provider, bukan di switchboard embedding inti
- `formatApiKey`: provider memformat profil auth yang tersimpan menjadi string
`apiKey` runtime yang diharapkan oleh transport
- `refreshOAuth`: provider memiliki refresh OAuth ketika refresher bersama `pi-ai`
tidak cukup
- `buildAuthDoctorHint`: provider menambahkan panduan perbaikan ketika refresh OAuth
- `createEmbeddingProvider`: penyedia memiliki perilaku embedding memori ketika
hal itu lebih tepat berada di plugin penyedia daripada switchboard embedding inti
- `formatApiKey`: penyedia memformat profil auth yang tersimpan ke dalam string
`apiKey` runtime yang diharapkan transport
- `refreshOAuth`: penyedia memiliki refresh OAuth ketika refresher bersama `pi-ai`
tidak memadai
- `buildAuthDoctorHint`: penyedia menambahkan panduan perbaikan ketika refresh OAuth
gagal
- `matchesContextOverflowError`: provider mengenali
error overflow context-window spesifik provider yang akan terlewat oleh heuristik generik
- `classifyFailoverReason`: provider memetakan error transport/API mentah spesifik provider
ke alasan failover seperti rate limit atau overload
- `isCacheTtlEligible`: provider menentukan id model upstream mana yang mendukung TTL cache prompt
- `buildMissingAuthMessage`: provider mengganti error auth-store generik
dengan petunjuk pemulihan spesifik provider
- `suppressBuiltInModel`: provider menyembunyikan baris upstream yang usang dan dapat mengembalikan
- `matchesContextOverflowError`: penyedia mengenali error overflow jendela konteks
khusus penyedia yang akan terlewat oleh heuristik generik
- `classifyFailoverReason`: penyedia memetakan error mentah transport/API
khusus penyedia ke alasan failover seperti rate limit atau overload
- `isCacheTtlEligible`: penyedia menentukan id model upstream mana yang mendukung TTL prompt-cache
- `buildMissingAuthMessage`: penyedia mengganti error auth-store generik
dengan petunjuk pemulihan khusus penyedia
- `suppressBuiltInModel`: penyedia menyembunyikan baris upstream yang usang dan dapat mengembalikan
error milik vendor untuk kegagalan resolusi langsung
- `augmentModelCatalog`: provider menambahkan baris katalog sintetis/akhir setelah
- `augmentModelCatalog`: penyedia menambahkan baris katalog sintetis/final setelah
discovery dan penggabungan konfigurasi
- `isBinaryThinking`: provider memiliki UX thinking on/off biner
- `supportsXHighThinking`: provider mengikutkan model tertentu ke `xhigh`
- `resolveDefaultThinkingLevel`: provider memiliki kebijakan default `/think` untuk
- `isBinaryThinking`: penyedia memiliki UX thinking biner nyala/mati
- `supportsXHighThinking`: penyedia mengikutkan model terpilih ke `xhigh`
- `resolveDefaultThinkingLevel`: penyedia memiliki kebijakan default `/think` untuk
keluarga model
- `applyConfigDefaults`: provider menerapkan default global spesifik provider
- `applyConfigDefaults`: penyedia menerapkan default global khusus penyedia
selama materialisasi konfigurasi berdasarkan mode auth, env, atau keluarga model
- `isModernModelRef`: provider memiliki pencocokan model pilihan live/smoke
- `prepareRuntimeAuth`: provider mengubah kredensial yang dikonfigurasi menjadi token runtime
berumur pendek
- `resolveUsageAuth`: provider menyelesaikan kredensial penggunaan/kuota untuk `/usage`
- `isModernModelRef`: penyedia memiliki pencocokan model pilihan live/smoke
- `prepareRuntimeAuth`: penyedia mengubah kredensial terkonfigurasi menjadi token runtime
berumur singkat
- `resolveUsageAuth`: penyedia menyelesaikan kredensial usage/kuota untuk `/usage`
dan permukaan status/pelaporan terkait
- `fetchUsageSnapshot`: provider memiliki pengambilan/penguraian endpoint penggunaan sementara
- `fetchUsageSnapshot`: penyedia memiliki pengambilan/parsing endpoint usage sementara
inti tetap memiliki shell ringkasan dan pemformatannya
- `onModelSelected`: provider menjalankan efek samping pasca-pemilihan seperti
telemetri atau pembukuan sesi milik provider
- `onModelSelected`: penyedia menjalankan efek samping pasca-pemilihan seperti
telemetri atau pencatatan sesi milik penyedia
Contoh bawaan saat ini:
Contoh bundel saat ini:
- `anthropic`: fallback kompatibilitas-maju Claude 4.6, petunjuk perbaikan auth, pengambilan endpoint
penggunaan, metadata cache-TTL/keluarga provider, dan default konfigurasi global
- `anthropic`: fallback kompatibilitas maju Claude 4.6, petunjuk perbaikan auth, pengambilan
endpoint usage, metadata cache-TTL/keluarga penyedia, dan default konfigurasi global
yang sadar auth
- `amazon-bedrock`: pencocokan context-overflow dan klasifikasi alasan
failover milik provider untuk error throttle/belum-siap spesifik Bedrock, ditambah
- `amazon-bedrock`: pencocokan context-overflow milik penyedia dan klasifikasi
alasan failover untuk error throttle/not-ready khusus Bedrock, ditambah
keluarga replay bersama `anthropic-by-model` untuk guard kebijakan replay khusus Claude
pada trafik Anthropic
- `anthropic-vertex`: guard kebijakan replay khusus Claude pada
trafik pesan Anthropic
- `openrouter`: id model pass-through, wrapper request, petunjuk capability provider,
sanitasi thought-signature Gemini pada trafik proxy Gemini,
injeksi reasoning proxy melalui keluarga stream `openrouter-thinking`, penerusan metadata routing, dan kebijakan cache-TTL
- `github-copilot`: onboarding/login perangkat, fallback model kompatibilitas-maju,
pada lalu lintas Anthropic
- `anthropic-vertex`: guard kebijakan replay khusus Claude pada lalu lintas
pesan Anthropic
- `openrouter`: id model pass-through, wrapper permintaan, petunjuk capability penyedia,
sanitasi thought-signature Gemini pada lalu lintas proxy Gemini, injeksi reasoning proxy
melalui keluarga stream `openrouter-thinking`, penerusan metadata routing,
dan kebijakan cache-TTL
- `github-copilot`: onboarding/login perangkat, fallback model kompatibilitas maju,
petunjuk transkrip Claude-thinking, pertukaran token runtime, dan pengambilan endpoint
penggunaan
- `openai`: fallback kompatibilitas-maju GPT-5.4, normalisasi transport OpenAI langsung,
petunjuk auth hilang yang sadar Codex, penekanan Spark, baris katalog
OpenAI/Codex sintetis, kebijakan thinking/model live, normalisasi alias token penggunaan
usage
- `openai`: fallback kompatibilitas maju GPT-5.4, normalisasi transport OpenAI langsung,
petunjuk auth hilang yang sadar Codex, penekanan Spark, baris katalog sintetis
OpenAI/Codex, kebijakan thinking/model live, normalisasi alias token usage
(`input` / `output` dan keluarga `prompt` / `completion`), keluarga stream bersama
`openai-responses-defaults` untuk wrapper OpenAI/Codex native, metadata keluarga provider,
pendaftaran provider generasi gambar terbundel untuk `gpt-image-1`, dan pendaftaran provider generasi video
terbundel untuk `sora-2`
- `google` dan `google-gemini-cli`: fallback kompatibilitas-maju Gemini 3.1,
`openai-responses-defaults` untuk wrapper OpenAI/Codex native, metadata keluarga penyedia,
registrasi penyedia pembuatan gambar bundel untuk `gpt-image-1`, dan registrasi penyedia
pembuatan video bundel untuk `sora-2`
- `google` dan `google-gemini-cli`: fallback kompatibilitas maju Gemini 3.1,
validasi replay Gemini native, sanitasi replay bootstrap, mode output
reasoning bertag, pencocokan model modern, pendaftaran provider generasi gambar
terbundel untuk model pratinjau gambar Gemini, dan pendaftaran provider generasi
video terbundel untuk model Veo; OAuth Gemini CLI juga
memiliki pemformatan token profil auth, penguraian token penggunaan, dan pengambilan endpoint kuota
untuk permukaan penggunaan
reasoning bertag, pencocokan model modern, registrasi penyedia pembuatan gambar bundel
untuk model pratinjau gambar Gemini, dan registrasi penyedia pembuatan
video bundel untuk model Veo; OAuth Gemini CLI juga memiliki pemformatan token profil auth,
parsing token usage, dan pengambilan endpoint kuota untuk permukaan usage
- `moonshot`: transport bersama, normalisasi payload thinking milik plugin
- `kilocode`: transport bersama, header request milik plugin, normalisasi payload reasoning,
- `kilocode`: transport bersama, header permintaan milik plugin, normalisasi payload reasoning,
sanitasi thought-signature proxy-Gemini, dan kebijakan cache-TTL
- `zai`: fallback kompatibilitas-maju GLM-5, default `tool_stream`, kebijakan cache-TTL,
kebijakan thinking biner/model live, dan auth penggunaan + pengambilan kuota;
id `glm-5*` yang tidak dikenal disintesis dari templat `glm-4.7` terbundel
- `zai`: fallback kompatibilitas maju GLM-5, default `tool_stream`, kebijakan cache-TTL,
kebijakan thinking biner/model live, serta auth usage + pengambilan kuota;
id `glm-5*` yang tidak dikenal disintesis dari templat `glm-4.7` bawaan
- `xai`: normalisasi transport Responses native, penulisan ulang alias `/fast` untuk
varian cepat Grok, default `tool_stream`, pembersihan skema tool /
payload reasoning spesifik xAI, dan pendaftaran provider generasi video terbundel
varian cepat Grok, default `tool_stream`, pembersihan schema tool /
payload reasoning khusus xAI, dan registrasi penyedia pembuatan video bundel
untuk `grok-imagine-video`
- `mistral`: metadata capability milik plugin
- `opencode` dan `opencode-go`: metadata capability milik plugin ditambah
- `opencode` dan `opencode-go`: metadata capability milik plugin plus
sanitasi thought-signature proxy-Gemini
- `alibaba`: katalog generasi video milik plugin untuk ref model Wan langsung
- `alibaba`: katalog pembuatan video milik plugin untuk referensi model Wan langsung
seperti `alibaba/wan2.6-t2v`
- `byteplus`: katalog milik plugin ditambah pendaftaran provider generasi video
terbundel untuk model text-to-video/image-to-video Seedance
- `fal`: pendaftaran provider generasi video terbundel untuk
pendaftaran provider generasi gambar pihak ketiga yang di-host untuk model gambar FLUX ditambah pendaftaran provider generasi
video terbundel untuk model video pihak ketiga yang di-host
- `byteplus`: katalog milik plugin plus registrasi penyedia pembuatan video bundel
untuk model text-to-video/image-to-video Seedance
- `fal`: registrasi penyedia pembuatan video bundel untuk image-generation pihak ketiga terhosting
registrasi penyedia pembuatan gambar untuk model gambar FLUX plus registrasi penyedia
pembuatan video bundel untuk model video pihak ketiga terhosting
- `cloudflare-ai-gateway`, `huggingface`, `kimi`, `nvidia`, `qianfan`,
`stepfun`, `synthetic`, `venice`, `vercel-ai-gateway`, dan `volcengine`:
hanya katalog milik plugin
- `qwen`: katalog milik plugin untuk model teks ditambah pendaftaran provider
media-understanding dan generasi video bersama untuk permukaan multimodalnya;
generasi video Qwen menggunakan endpoint video DashScope Standar
dengan model Wan terbundel seperti `wan2.6-t2v` dan `wan2.7-r2v`
- `runway`: pendaftaran provider generasi video milik plugin untuk model native
Runway berbasis task seperti `gen4.5`
- `minimax`: katalog milik plugin, pendaftaran provider generasi video terbundel
untuk model video Hailuo, pendaftaran provider generasi gambar terbundel
untuk `image-01`, pemilihan kebijakan replay Anthropic/OpenAI hibrida, dan logika auth/snapshot penggunaan
- `together`: katalog milik plugin ditambah pendaftaran provider generasi video terbundel
- `qwen`: katalog milik plugin untuk model teks plus registrasi penyedia
media-understanding dan pembuatan video bersama untuk permukaan multimodalnya;
pembuatan video Qwen menggunakan endpoint video DashScope Standar dengan model Wan
bundel seperti `wan2.6-t2v` dan `wan2.7-r2v`
- `runway`: registrasi penyedia pembuatan video milik plugin untuk model native
berbasis tugas Runway seperti `gen4.5`
- `minimax`: katalog milik plugin, registrasi penyedia pembuatan video bundel
untuk model video Hailuo, registrasi penyedia pembuatan gambar bundel
untuk `image-01`, pemilihan kebijakan replay Anthropic/OpenAI hibrida,
dan logika auth/snapshot usage
- `together`: katalog milik plugin plus registrasi penyedia pembuatan video bundel
untuk model video Wan
- `xiaomi`: katalog milik plugin ditambah logika auth/snapshot penggunaan
- `xiaomi`: katalog milik plugin plus logika auth/snapshot usage
Plugin `openai` terbundel kini memiliki kedua id provider: `openai` dan
Plugin `openai` yang dibundel sekarang memiliki kedua id penyedia: `openai` dan
`openai-codex`.
Itu mencakup provider yang masih cocok dengan transport normal OpenClaw. Provider
yang memerlukan eksekutor request kustom sepenuhnya adalah permukaan ekstensi
yang terpisah dan lebih mendalam.
Itu mencakup penyedia yang masih sesuai dengan transport normal OpenClaw. Penyedia
yang membutuhkan eksekutor permintaan kustom sepenuhnya adalah permukaan ekstensi
terpisah yang lebih dalam.
## Rotasi API key
- Mendukung rotasi provider generik untuk provider yang dipilih.
- Mendukung rotasi penyedia generik untuk penyedia tertentu yang dipilih.
- Konfigurasikan beberapa key melalui:
- `OPENCLAW_LIVE_<PROVIDER>_KEY` (satu override live, prioritas tertinggi)
- `OPENCLAW_LIVE_<PROVIDER>_KEY` (override live tunggal, prioritas tertinggi)
- `<PROVIDER>_API_KEYS` (daftar dipisahkan koma atau titik koma)
- `<PROVIDER>_API_KEY` (key utama)
- `<PROVIDER>_API_KEY_*` (daftar bernomor, misalnya `<PROVIDER>_API_KEY_1`)
- Untuk provider Google, `GOOGLE_API_KEY` juga disertakan sebagai fallback.
- Untuk penyedia Google, `GOOGLE_API_KEY` juga disertakan sebagai fallback.
- Urutan pemilihan key mempertahankan prioritas dan menghapus duplikasi nilai.
- Permintaan dicoba ulang dengan key berikutnya hanya pada respons rate-limit (misalnya
`429`, `rate_limit`, `quota`, `resource exhausted`, `Too many
concurrent requests`, `ThrottlingException`, `concurrency limit reached`,
`workers_ai ... quota limit exceeded`, atau pesan batas penggunaan berkala).
- Kegagalan non-rate-limit langsung gagal; rotasi key tidak dicoba.
`workers_ai ... quota limit exceeded`, atau pesan batas penggunaan periodik).
- Kegagalan non-rate-limit langsung gagal; tidak ada rotasi key yang dicoba.
- Ketika semua key kandidat gagal, error akhir dikembalikan dari percobaan terakhir.
## Provider bawaan (katalog pi-ai)
## Penyedia bawaan (katalog pi-ai)
OpenClaw dikirim dengan katalog piai. Provider ini tidak memerlukan konfigurasi
OpenClaw disertakan dengan katalog piai. Penyedia ini tidak memerlukan konfigurasi
`models.providers`; cukup tetapkan auth + pilih model.
### OpenAI
- Provider: `openai`
- Penyedia: `openai`
- Auth: `OPENAI_API_KEY`
- Rotasi opsional: `OPENAI_API_KEYS`, `OPENAI_API_KEY_1`, `OPENAI_API_KEY_2`, ditambah `OPENCLAW_LIVE_OPENAI_KEY` (satu override)
- Rotasi opsional: `OPENAI_API_KEYS`, `OPENAI_API_KEY_1`, `OPENAI_API_KEY_2`, plus `OPENCLAW_LIVE_OPENAI_KEY` (override tunggal)
- Contoh model: `openai/gpt-5.4`, `openai/gpt-5.4-pro`
- CLI: `openclaw onboard --auth-choice openai-api-key`
- Transport default adalah `auto` (WebSocket-first, fallback SSE)
- Transport default adalah `auto` (WebSocket lebih dulu, fallback SSE)
- Override per model melalui `agents.defaults.models["openai/<model>"].params.transport` (`"sse"`, `"websocket"`, atau `"auto"`)
- Warm-up WebSocket OpenAI Responses default-nya aktif melalui `params.openaiWsWarmup` (`true`/`false`)
- Pemanasan WebSocket OpenAI Responses secara default aktif melalui `params.openaiWsWarmup` (`true`/`false`)
- Pemrosesan prioritas OpenAI dapat diaktifkan melalui `agents.defaults.models["openai/<model>"].params.serviceTier`
- `/fast` dan `params.fastMode` memetakan request Responses `openai/*` langsung ke `service_tier=priority` pada `api.openai.com`
- Gunakan `params.serviceTier` saat Anda ingin tier eksplisit alih-alih toggle `/fast` bersama
- `/fast` dan `params.fastMode` memetakan permintaan Responses `openai/*` langsung ke `service_tier=priority` pada `api.openai.com`
- Gunakan `params.serviceTier` bila Anda menginginkan tier eksplisit alih-alih toggle `/fast` bersama
- Header atribusi OpenClaw tersembunyi (`originator`, `version`,
`User-Agent`) hanya berlaku pada trafik OpenAI native ke `api.openai.com`, bukan
proxy kompatibel OpenAI generik
- Rute OpenAI native juga mempertahankan Responses `store`, petunjuk prompt-cache, dan
`User-Agent`) hanya berlaku pada lalu lintas OpenAI native ke `api.openai.com`, bukan
proxy generik yang kompatibel dengan OpenAI
- Rute OpenAI native juga mempertahankan `store` Responses, petunjuk prompt-cache, dan
pembentukan payload kompatibilitas reasoning OpenAI; rute proxy tidak
- `openai/gpt-5.3-codex-spark` sengaja disembunyikan di OpenClaw karena API OpenAI live menolaknya; Spark diperlakukan sebagai khusus Codex
- `openai/gpt-5.3-codex-spark` sengaja ditekan di OpenClaw karena API OpenAI live menolaknya; Spark diperlakukan sebagai khusus Codex
```json5
{
@ -267,14 +268,14 @@ OpenClaw dikirim dengan katalog piai. Provider ini tidak memerlukan konfigura
### Anthropic
- Provider: `anthropic`
- Penyedia: `anthropic`
- Auth: `ANTHROPIC_API_KEY`
- Rotasi opsional: `ANTHROPIC_API_KEYS`, `ANTHROPIC_API_KEY_1`, `ANTHROPIC_API_KEY_2`, ditambah `OPENCLAW_LIVE_ANTHROPIC_KEY` (satu override)
- Rotasi opsional: `ANTHROPIC_API_KEYS`, `ANTHROPIC_API_KEY_1`, `ANTHROPIC_API_KEY_2`, plus `OPENCLAW_LIVE_ANTHROPIC_KEY` (override tunggal)
- Contoh model: `anthropic/claude-opus-4-6`
- CLI: `openclaw onboard --auth-choice apiKey`
- Permintaan Anthropic publik langsung mendukung toggle `/fast` bersama dan `params.fastMode`, termasuk trafik terautentikasi API key dan OAuth yang dikirim ke `api.anthropic.com`; OpenClaw memetakannya ke Anthropic `service_tier` (`auto` vs `standard_only`)
- Catatan Anthropic: staf Anthropic memberi tahu kami bahwa penggunaan Claude CLI gaya OpenClaw kembali diizinkan, jadi OpenClaw menganggap penggunaan ulang Claude CLI dan `claude -p` diizinkan untuk integrasi ini kecuali Anthropic menerbitkan kebijakan baru.
- Token setup Anthropic tetap tersedia sebagai jalur token OpenClaw yang didukung, tetapi OpenClaw kini lebih memilih penggunaan ulang Claude CLI dan `claude -p` bila tersedia.
- Permintaan Anthropic publik langsung mendukung toggle `/fast` bersama dan `params.fastMode`, termasuk lalu lintas terautentikasi API key dan OAuth yang dikirim ke `api.anthropic.com`; OpenClaw memetakannya ke Anthropic `service_tier` (`auto` vs `standard_only`)
- Catatan Anthropic: staf Anthropic memberi tahu kami bahwa penggunaan Claude CLI gaya OpenClaw diizinkan lagi, jadi OpenClaw memperlakukan penggunaan ulang Claude CLI dan penggunaan `claude -p` sebagai diizinkan untuk integrasi ini kecuali Anthropic menerbitkan kebijakan baru.
- Token setup Anthropic tetap tersedia sebagai jalur token OpenClaw yang didukung, tetapi OpenClaw sekarang lebih mengutamakan penggunaan ulang Claude CLI dan `claude -p` saat tersedia.
```json5
{
@ -284,20 +285,20 @@ OpenClaw dikirim dengan katalog piai. Provider ini tidak memerlukan konfigura
### OpenAI Code (Codex)
- Provider: `openai-codex`
- Penyedia: `openai-codex`
- Auth: OAuth (ChatGPT)
- Contoh model: `openai-codex/gpt-5.4`
- CLI: `openclaw onboard --auth-choice openai-codex` atau `openclaw models auth login --provider openai-codex`
- Transport default adalah `auto` (WebSocket-first, fallback SSE)
- Transport default adalah `auto` (WebSocket lebih dulu, fallback SSE)
- Override per model melalui `agents.defaults.models["openai-codex/<model>"].params.transport` (`"sse"`, `"websocket"`, atau `"auto"`)
- `params.serviceTier` juga diteruskan pada request Responses Codex native (`chatgpt.com/backend-api`)
- `params.serviceTier` juga diteruskan pada permintaan Responses Codex native (`chatgpt.com/backend-api`)
- Header atribusi OpenClaw tersembunyi (`originator`, `version`,
`User-Agent`) hanya dilampirkan pada trafik Codex native ke
`chatgpt.com/backend-api`, bukan proxy kompatibel OpenAI generik
- Berbagi toggle `/fast` dan konfigurasi `params.fastMode` yang sama dengan `openai/*` langsung; OpenClaw memetakannya ke `service_tier=priority`
- `openai-codex/gpt-5.3-codex-spark` tetap tersedia saat katalog OAuth Codex mengeksposnya; bergantung pada entitlement
- `openai-codex/gpt-5.4` mempertahankan `contextWindow = 1050000` native dan default runtime `contextTokens = 272000`; override batas runtime dengan `models.providers.openai-codex.models[].contextTokens`
- Catatan kebijakan: OpenAI Codex OAuth secara eksplisit didukung untuk tool/alur kerja eksternal seperti OpenClaw.
`User-Agent`) hanya dilampirkan pada lalu lintas Codex native ke
`chatgpt.com/backend-api`, bukan proxy generik yang kompatibel dengan OpenAI
- Berbagi toggle `/fast` dan konfigurasi `params.fastMode` yang sama seperti `openai/*` langsung; OpenClaw memetakannya ke `service_tier=priority`
- `openai-codex/gpt-5.3-codex-spark` tetap tersedia ketika katalog OAuth Codex mengeksposnya; bergantung pada entitlement
- `openai-codex/gpt-5.4` mempertahankan `contextWindow = 1050000` native dan runtime default `contextTokens = 272000`; override batas runtime dengan `models.providers.openai-codex.models[].contextTokens`
- Catatan kebijakan: OAuth OpenAI Codex secara eksplisit didukung untuk tool/alur kerja eksternal seperti OpenClaw.
```json5
{
@ -317,17 +318,17 @@ OpenClaw dikirim dengan katalog piai. Provider ini tidak memerlukan konfigura
}
```
### Opsi hosted bergaya langganan lainnya
### Opsi terhosting bergaya langganan lainnya
- [Qwen Cloud](/id/providers/qwen): permukaan provider Qwen Cloud ditambah pemetaan endpoint Alibaba DashScope dan Coding Plan
- [Qwen Cloud](/id/providers/qwen): permukaan penyedia Qwen Cloud plus pemetaan endpoint Alibaba DashScope dan Coding Plan
- [MiniMax](/id/providers/minimax): akses OAuth atau API key MiniMax Coding Plan
- [GLM Models](/id/providers/glm): endpoint Z.AI Coding Plan atau API umum
### OpenCode
- Auth: `OPENCODE_API_KEY` (atau `OPENCODE_ZEN_API_KEY`)
- Provider runtime Zen: `opencode`
- Provider runtime Go: `opencode-go`
- Penyedia runtime Zen: `opencode`
- Penyedia runtime Go: `opencode-go`
- Contoh model: `opencode/claude-opus-4-6`, `opencode-go/kimi-k2.5`
- CLI: `openclaw onboard --auth-choice opencode-zen` atau `openclaw onboard --auth-choice opencode-go`
@ -339,21 +340,21 @@ OpenClaw dikirim dengan katalog piai. Provider ini tidak memerlukan konfigura
### Google Gemini (API key)
- Provider: `google`
- Penyedia: `google`
- Auth: `GEMINI_API_KEY`
- Rotasi opsional: `GEMINI_API_KEYS`, `GEMINI_API_KEY_1`, `GEMINI_API_KEY_2`, fallback `GOOGLE_API_KEY`, dan `OPENCLAW_LIVE_GEMINI_KEY` (satu override)
- Rotasi opsional: `GEMINI_API_KEYS`, `GEMINI_API_KEY_1`, `GEMINI_API_KEY_2`, fallback `GOOGLE_API_KEY`, dan `OPENCLAW_LIVE_GEMINI_KEY` (override tunggal)
- Contoh model: `google/gemini-3.1-pro-preview`, `google/gemini-3-flash-preview`
- Kompatibilitas: konfigurasi OpenClaw lama yang menggunakan `google/gemini-3.1-flash-preview` dinormalkan menjadi `google/gemini-3-flash-preview`
- CLI: `openclaw onboard --auth-choice gemini-api-key`
- Proses Gemini langsung juga menerima `agents.defaults.models["google/<model>"].params.cachedContent`
(atau `cached_content` lama) untuk meneruskan handle
`cachedContents/...` native provider; hit cache Gemini muncul sebagai OpenClaw `cacheRead`
- Eksekusi Gemini langsung juga menerima `agents.defaults.models["google/<model>"].params.cachedContent`
(atau `cached_content` lama) untuk meneruskan handle `cachedContents/...`
native penyedia; cache hit Gemini muncul sebagai OpenClaw `cacheRead`
### Google Vertex dan Gemini CLI
- Provider: `google-vertex`, `google-gemini-cli`
- Penyedia: `google-vertex`, `google-gemini-cli`
- Auth: Vertex menggunakan gcloud ADC; Gemini CLI menggunakan alur OAuth-nya
- Perhatian: OAuth Gemini CLI di OpenClaw adalah integrasi tidak resmi. Beberapa pengguna melaporkan pembatasan akun Google setelah menggunakan klien pihak ketiga. Tinjau persyaratan Google dan gunakan akun yang tidak kritis jika Anda memilih untuk melanjutkan.
- Peringatan: OAuth Gemini CLI di OpenClaw adalah integrasi tidak resmi. Beberapa pengguna melaporkan pembatasan akun Google setelah menggunakan klien pihak ketiga. Tinjau persyaratan Google dan gunakan akun yang tidak kritis jika Anda memilih untuk melanjutkan.
- OAuth Gemini CLI dikirim sebagai bagian dari plugin `google` yang dibundel.
- Instal Gemini CLI terlebih dahulu:
- `brew install gemini-cli`
@ -361,66 +362,67 @@ OpenClaw dikirim dengan katalog piai. Provider ini tidak memerlukan konfigura
- Aktifkan: `openclaw plugins enable google`
- Login: `openclaw models auth login --provider google-gemini-cli --set-default`
- Model default: `google-gemini-cli/gemini-3-flash-preview`
- Catatan: Anda **tidak** menempelkan client id atau secret ke `openclaw.json`. Alur login CLI menyimpan
- Catatan: Anda **tidak** menempelkan client id atau secret ke dalam `openclaw.json`. Alur login CLI menyimpan
token di profil auth pada host gateway.
- Jika permintaan gagal setelah login, tetapkan `GOOGLE_CLOUD_PROJECT` atau `GOOGLE_CLOUD_PROJECT_ID` pada host gateway.
- Balasan JSON Gemini CLI diurai dari `response`; penggunaan fallback ke
- Balasan JSON Gemini CLI diparsing dari `response`; usage menggunakan fallback ke
`stats`, dengan `stats.cached` dinormalkan menjadi OpenClaw `cacheRead`.
### Z.AI (GLM)
- Provider: `zai`
- Penyedia: `zai`
- Auth: `ZAI_API_KEY`
- Contoh model: `zai/glm-5`
- Contoh model: `zai/glm-5.1`
- CLI: `openclaw onboard --auth-choice zai-api-key`
- Alias: `z.ai/*` dan `z-ai/*` dinormalkan menjadi `zai/*`
- `zai-api-key` mendeteksi otomatis endpoint Z.AI yang cocok; `zai-coding-global`, `zai-coding-cn`, `zai-global`, dan `zai-cn` memaksa permukaan tertentu
### Vercel AI Gateway
- Provider: `vercel-ai-gateway`
- Penyedia: `vercel-ai-gateway`
- Auth: `AI_GATEWAY_API_KEY`
- Contoh model: `vercel-ai-gateway/anthropic/claude-opus-4.6`
- CLI: `openclaw onboard --auth-choice ai-gateway-api-key`
### Kilo Gateway
- Provider: `kilocode`
- Penyedia: `kilocode`
- Auth: `KILOCODE_API_KEY`
- Contoh model: `kilocode/kilo/auto`
- CLI: `openclaw onboard --auth-choice kilocode-api-key`
- Base URL: `https://api.kilo.ai/api/gateway/`
- Katalog fallback statis menyertakan `kilocode/kilo/auto`; discovery live
- Katalog fallback statis mengirim `kilocode/kilo/auto`; discovery live
`https://api.kilo.ai/api/gateway/models` dapat memperluas katalog runtime
lebih jauh.
lebih lanjut.
- Routing upstream yang tepat di balik `kilocode/kilo/auto` dimiliki oleh Kilo Gateway,
bukan di-hardcode di OpenClaw.
Lihat [/providers/kilocode](/id/providers/kilocode) untuk detail penyiapan.
### Plugin provider terbundel lainnya
### Plugin penyedia bundel lainnya
- OpenRouter: `openrouter` (`OPENROUTER_API_KEY`)
- Contoh model: `openrouter/auto`
- OpenClaw menerapkan header atribusi aplikasi terdokumentasi OpenRouter hanya ketika
request benar-benar menargetkan `openrouter.ai`
- Penanda `cache_control` Anthropic spesifik OpenRouter juga dibatasi ke
- OpenClaw menerapkan header atribusi aplikasi yang didokumentasikan OpenRouter hanya ketika
permintaan benar-benar menargetkan `openrouter.ai`
- Penanda `cache_control` Anthropic khusus OpenRouter juga dibatasi ke
rute OpenRouter yang terverifikasi, bukan URL proxy sembarang
- OpenRouter tetap berada di jalur kompatibel OpenAI bergaya proxy, jadi pembentukan request yang hanya native OpenAI (`serviceTier`, Responses `store`,
- OpenRouter tetap berada pada jalur kompatibel OpenAI bergaya proxy, jadi pembentukan permintaan
native khusus OpenAI (`serviceTier`, Responses `store`,
petunjuk prompt-cache, payload kompatibilitas reasoning OpenAI) tidak diteruskan
- Ref OpenRouter berbasis Gemini hanya mempertahankan sanitasi thought-signature proxy-Gemini;
- Referensi OpenRouter berbasis Gemini hanya mempertahankan sanitasi thought-signature proxy-Gemini;
validasi replay Gemini native dan penulisan ulang bootstrap tetap nonaktif
- Kilo Gateway: `kilocode` (`KILOCODE_API_KEY`)
- Contoh model: `kilocode/kilo/auto`
- Ref Kilo berbasis Gemini mempertahankan jalur sanitasi thought-signature
- Referensi Kilo berbasis Gemini mempertahankan jalur sanitasi thought-signature
proxy-Gemini yang sama; `kilocode/kilo/auto` dan petunjuk lain yang tidak mendukung proxy-reasoning
melewati injeksi reasoning proxy
- MiniMax: `minimax` (API key) dan `minimax-portal` (OAuth)
- Auth: `MINIMAX_API_KEY` untuk `minimax`; `MINIMAX_OAUTH_TOKEN` atau `MINIMAX_API_KEY` untuk `minimax-portal`
- Contoh model: `minimax/MiniMax-M2.7` atau `minimax-portal/MiniMax-M2.7`
- Onboarding/penyiapan API key MiniMax menulis definisi model M2.7 eksplisit dengan
`input: ["text", "image"]`; katalog provider terbundel mempertahankan ref chat
hanya-teks sampai konfigurasi provider tersebut dimaterialisasi
- Penyiapan onboarding/API key MiniMax menulis definisi model M2.7 eksplisit dengan
`input: ["text", "image"]`; katalog penyedia bundel mempertahankan referensi chat
hanya teks sampai konfigurasi penyedia itu dimaterialisasikan
- Moonshot: `moonshot` (`MOONSHOT_API_KEY`)
- Contoh model: `moonshot/kimi-k2.5`
- Kimi Coding: `kimi` (`KIMI_API_KEY` atau `KIMICODE_API_KEY`)
@ -446,10 +448,10 @@ Lihat [/providers/kilocode](/id/providers/kilocode) untuk detail penyiapan.
- BytePlus: `byteplus` (`BYTEPLUS_API_KEY`)
- Contoh model: `byteplus-plan/ark-code-latest`
- xAI: `xai` (`XAI_API_KEY`)
- Request xAI terbundel native menggunakan jalur xAI Responses
- Permintaan xAI bundel native menggunakan jalur xAI Responses
- `/fast` atau `params.fastMode: true` menulis ulang `grok-3`, `grok-3-mini`,
`grok-4`, dan `grok-4-0709` ke varian `*-fast`
- `tool_stream` default-nya aktif; tetapkan
`grok-4`, dan `grok-4-0709` ke varian `*-fast` mereka
- `tool_stream` default aktif; tetapkan
`agents.defaults.models["xai/<model>"].params.tool_stream` ke `false` untuk
menonaktifkannya
- Mistral: `mistral` (`MISTRAL_API_KEY`)
@ -457,27 +459,27 @@ Lihat [/providers/kilocode](/id/providers/kilocode) untuk detail penyiapan.
- CLI: `openclaw onboard --auth-choice mistral-api-key`
- Groq: `groq` (`GROQ_API_KEY`)
- Cerebras: `cerebras` (`CEREBRAS_API_KEY`)
- Model GLM di Cerebras menggunakan id `zai-glm-4.7` dan `zai-glm-4.6`.
- Model GLM pada Cerebras menggunakan id `zai-glm-4.7` dan `zai-glm-4.6`.
- Base URL kompatibel OpenAI: `https://api.cerebras.ai/v1`.
- GitHub Copilot: `github-copilot` (`COPILOT_GITHUB_TOKEN` / `GH_TOKEN` / `GITHUB_TOKEN`)
- Contoh model Hugging Face Inference: `huggingface/deepseek-ai/DeepSeek-R1`; CLI: `openclaw onboard --auth-choice huggingface-api-key`. Lihat [Hugging Face (Inference)](/id/providers/huggingface).
## Provider melalui `models.providers` (kustom/base URL)
## Penyedia melalui `models.providers` (kustom/base URL)
Gunakan `models.providers` (atau `models.json`) untuk menambahkan provider
**kustom** atau proxy yang kompatibel OpenAI/Anthropic.
Gunakan `models.providers` (atau `models.json`) untuk menambahkan penyedia **kustom**
atau proxy yang kompatibel dengan OpenAI/Anthropic.
Banyak plugin provider terbundel di bawah ini sudah memublikasikan katalog default.
Gunakan entri `models.providers.<id>` eksplisit hanya jika Anda ingin mengganti
Banyak plugin penyedia bundel di bawah ini sudah menerbitkan katalog default.
Gunakan entri `models.providers.<id>` yang eksplisit hanya ketika Anda ingin menimpa
base URL, header, atau daftar model default.
### Moonshot AI (Kimi)
Moonshot dikirim sebagai plugin provider terbundel. Gunakan provider bawaan secara
default, dan tambahkan entri `models.providers.moonshot` eksplisit hanya ketika Anda
perlu mengganti base URL atau metadata model:
Moonshot dikirim sebagai plugin penyedia bundel. Gunakan penyedia bawaan secara
default, dan tambahkan entri `models.providers.moonshot` yang eksplisit hanya ketika Anda
perlu menimpa base URL atau metadata model:
- Provider: `moonshot`
- Penyedia: `moonshot`
- Auth: `MOONSHOT_API_KEY`
- Contoh model: `moonshot/kimi-k2.5`
- CLI: `openclaw onboard --auth-choice moonshot-api-key` atau `openclaw onboard --auth-choice moonshot-api-key-cn`
@ -514,9 +516,9 @@ ID model Kimi K2:
### Kimi Coding
Kimi Coding menggunakan endpoint kompatibel Anthropic milik Moonshot AI:
Kimi Coding menggunakan endpoint Moonshot AI yang kompatibel dengan Anthropic:
- Provider: `kimi`
- Penyedia: `kimi`
- Auth: `KIMI_API_KEY`
- Contoh model: `kimi/kimi-code`
@ -533,9 +535,9 @@ Kimi Coding menggunakan endpoint kompatibel Anthropic milik Moonshot AI:
### Volcano Engine (Doubao)
Volcano Engine (火山引擎) menyediakan akses ke Doubao dan model lain di China.
Volcano Engine (火山引擎) menyediakan akses ke Doubao dan model lain di Tiongkok.
- Provider: `volcengine` (coding: `volcengine-plan`)
- Penyedia: `volcengine` (coding: `volcengine-plan`)
- Auth: `VOLCANO_ENGINE_API_KEY`
- Contoh model: `volcengine-plan/ark-code-latest`
- CLI: `openclaw onboard --auth-choice volcengine-api-key`
@ -548,13 +550,13 @@ Volcano Engine (火山引擎) menyediakan akses ke Doubao dan model lain di Chin
}
```
Onboarding default-nya menggunakan permukaan coding, tetapi katalog umum `volcengine/*`
Onboarding default ke permukaan coding, tetapi katalog umum `volcengine/*`
didaftarkan pada saat yang sama.
Dalam pemilih model onboarding/konfigurasi, pilihan auth Volcengine memprioritaskan
baris `volcengine/*` dan `volcengine-plan/*`. Jika model tersebut belum dimuat,
OpenClaw fallback ke katalog tanpa filter alih-alih menampilkan pemilih
bercakupan provider yang kosong.
Dalam pemilih model onboarding/konfigurasi, pilihan auth Volcengine lebih mengutamakan kedua
baris `volcengine/*` dan `volcengine-plan/*`. Jika model-model itu belum dimuat,
OpenClaw kembali ke katalog yang tidak difilter alih-alih menampilkan pemilih
bercakupan penyedia yang kosong.
Model yang tersedia:
@ -576,7 +578,7 @@ Model coding (`volcengine-plan`):
BytePlus ARK menyediakan akses ke model yang sama seperti Volcano Engine untuk pengguna internasional.
- Provider: `byteplus` (coding: `byteplus-plan`)
- Penyedia: `byteplus` (coding: `byteplus-plan`)
- Auth: `BYTEPLUS_API_KEY`
- Contoh model: `byteplus-plan/ark-code-latest`
- CLI: `openclaw onboard --auth-choice byteplus-api-key`
@ -589,13 +591,13 @@ BytePlus ARK menyediakan akses ke model yang sama seperti Volcano Engine untuk p
}
```
Onboarding default-nya menggunakan permukaan coding, tetapi katalog umum `byteplus/*`
Onboarding default ke permukaan coding, tetapi katalog umum `byteplus/*`
didaftarkan pada saat yang sama.
Dalam pemilih model onboarding/konfigurasi, pilihan auth BytePlus memprioritaskan
baris `byteplus/*` dan `byteplus-plan/*`. Jika model tersebut belum dimuat,
OpenClaw fallback ke katalog tanpa filter alih-alih menampilkan pemilih
bercakupan provider yang kosong.
Dalam pemilih model onboarding/konfigurasi, pilihan auth BytePlus lebih mengutamakan kedua
baris `byteplus/*` dan `byteplus-plan/*`. Jika model-model itu belum dimuat,
OpenClaw kembali ke katalog yang tidak difilter alih-alih menampilkan pemilih
bercakupan penyedia yang kosong.
Model yang tersedia:
@ -613,9 +615,9 @@ Model coding (`byteplus-plan`):
### Synthetic
Synthetic menyediakan model kompatibel Anthropic di balik provider `synthetic`:
Synthetic menyediakan model yang kompatibel dengan Anthropic di balik penyedia `synthetic`:
- Provider: `synthetic`
- Penyedia: `synthetic`
- Auth: `SYNTHETIC_API_KEY`
- Contoh model: `synthetic/hf:MiniMaxAI/MiniMax-M2.5`
- CLI: `openclaw onboard --auth-choice synthetic-api-key`
@ -643,37 +645,37 @@ Synthetic menyediakan model kompatibel Anthropic di balik provider `synthetic`:
MiniMax dikonfigurasi melalui `models.providers` karena menggunakan endpoint kustom:
- OAuth MiniMax (Global): `--auth-choice minimax-global-oauth`
- OAuth MiniMax (CN): `--auth-choice minimax-cn-oauth`
- MiniMax OAuth (Global): `--auth-choice minimax-global-oauth`
- MiniMax OAuth (CN): `--auth-choice minimax-cn-oauth`
- API key MiniMax (Global): `--auth-choice minimax-global-api`
- API key MiniMax (CN): `--auth-choice minimax-cn-api`
- Auth: `MINIMAX_API_KEY` untuk `minimax`; `MINIMAX_OAUTH_TOKEN` atau
`MINIMAX_API_KEY` untuk `minimax-portal`
Lihat [/providers/minimax](/id/providers/minimax) untuk detail penyiapan, opsi model, dan cuplikan konfigurasi.
Lihat [/providers/minimax](/id/providers/minimax) untuk detail penyiapan, opsi model, dan snippet konfigurasi.
Pada jalur streaming kompatibel Anthropic MiniMax, OpenClaw menonaktifkan thinking
secara default kecuali Anda menetapkannya secara eksplisit, dan `/fast on` menulis ulang
Pada jalur streaming MiniMax yang kompatibel dengan Anthropic, OpenClaw menonaktifkan thinking secara
default kecuali Anda menetapkannya secara eksplisit, dan `/fast on` menulis ulang
`MiniMax-M2.7` menjadi `MiniMax-M2.7-highspeed`.
Pemisahan capability milik plugin:
- Default teks/chat tetap pada `minimax/MiniMax-M2.7`
- Generasi gambar adalah `minimax/image-01` atau `minimax-portal/image-01`
- Pembuatan gambar adalah `minimax/image-01` atau `minimax-portal/image-01`
- Pemahaman gambar adalah `MiniMax-VL-01` milik plugin pada kedua jalur auth MiniMax
- Pencarian web tetap pada id provider `minimax`
- Web search tetap pada id penyedia `minimax`
### Ollama
Ollama dikirim sebagai plugin provider terbundel dan menggunakan API native Ollama:
Ollama dikirim sebagai plugin penyedia bundel dan menggunakan API native Ollama:
- Provider: `ollama`
- Penyedia: `ollama`
- Auth: Tidak diperlukan (server lokal)
- Contoh model: `ollama/llama3.3`
- Instalasi: [https://ollama.com/download](https://ollama.com/download)
```bash
# Instal Ollama, lalu tarik sebuah model:
# Install Ollama, then pull a model:
ollama pull llama3.3
```
@ -685,27 +687,26 @@ ollama pull llama3.3
}
```
Ollama terdeteksi secara lokal di `http://127.0.0.1:11434` saat Anda ikut serta dengan
`OLLAMA_API_KEY`, dan plugin provider terbundel menambahkan Ollama langsung ke
Ollama terdeteksi secara lokal di `http://127.0.0.1:11434` ketika Anda memilih ikut serta dengan
`OLLAMA_API_KEY`, dan plugin penyedia bundel menambahkan Ollama langsung ke
`openclaw onboard` dan pemilih model. Lihat [/providers/ollama](/id/providers/ollama)
untuk onboarding, mode cloud/lokal, dan konfigurasi kustom.
### vLLM
vLLM dikirim sebagai plugin provider terbundel untuk server
kompatibel OpenAI lokal/self-hosted:
vLLM dikirim sebagai plugin penyedia bundel untuk server OpenAI-compatible lokal/self-hosted:
- Provider: `vllm`
- Penyedia: `vllm`
- Auth: Opsional (tergantung server Anda)
- Base URL default: `http://127.0.0.1:8000/v1`
Untuk ikut serta dalam auto-discovery secara lokal (nilai apa pun berfungsi jika server Anda tidak menerapkan auth):
Untuk ikut serta dalam auto-discovery secara lokal (nilai apa pun bisa digunakan jika server Anda tidak memaksa auth):
```bash
export VLLM_API_KEY="vllm-local"
```
Lalu tetapkan model (ganti dengan salah satu ID yang dikembalikan oleh `/v1/models`):
Lalu tetapkan model (ganti dengan salah satu id yang dikembalikan oleh `/v1/models`):
```json5
{
@ -715,25 +716,25 @@ Lalu tetapkan model (ganti dengan salah satu ID yang dikembalikan oleh `/v1/mode
}
```
Lihat [/providers/vllm](/id/providers/vllm) untuk detailnya.
Lihat [/providers/vllm](/id/providers/vllm) untuk detail.
### SGLang
SGLang dikirim sebagai plugin provider terbundel untuk server
kompatibel OpenAI self-hosted yang cepat:
SGLang dikirim sebagai plugin penyedia bundel untuk server
OpenAI-compatible self-hosted yang cepat:
- Provider: `sglang`
- Penyedia: `sglang`
- Auth: Opsional (tergantung server Anda)
- Base URL default: `http://127.0.0.1:30000/v1`
Untuk ikut serta dalam auto-discovery secara lokal (nilai apa pun berfungsi jika server Anda tidak
menerapkan auth):
Untuk ikut serta dalam auto-discovery secara lokal (nilai apa pun bisa digunakan jika server Anda tidak
memaksa auth):
```bash
export SGLANG_API_KEY="sglang-local"
```
Lalu tetapkan model (ganti dengan salah satu ID yang dikembalikan oleh `/v1/models`):
Lalu tetapkan model (ganti dengan salah satu id yang dikembalikan oleh `/v1/models`):
```json5
{
@ -743,7 +744,7 @@ Lalu tetapkan model (ganti dengan salah satu ID yang dikembalikan oleh `/v1/mode
}
```
Lihat [/providers/sglang](/id/providers/sglang) untuk detailnya.
Lihat [/providers/sglang](/id/providers/sglang) untuk detail.
### Proxy lokal (LM Studio, vLLM, LiteLLM, dll.)
@ -782,16 +783,19 @@ Contoh (kompatibel OpenAI):
Catatan:
- Untuk provider kustom, `reasoning`, `input`, `cost`, `contextWindow`, dan `maxTokens` bersifat opsional.
Jika dihilangkan, OpenClaw menggunakan default:
- Untuk penyedia kustom, `reasoning`, `input`, `cost`, `contextWindow`, dan `maxTokens` bersifat opsional.
Jika dihilangkan, default OpenClaw adalah:
- `reasoning: false`
- `input: ["text"]`
- `cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }`
- `contextWindow: 200000`
- `maxTokens: 8192`
- Rekomendasi: tetapkan nilai eksplisit yang sesuai dengan batas proxy/model Anda.
- Untuk `api: "openai-completions"` pada endpoint non-native (setiap `baseUrl` tidak kosong yang host-nya bukan `api.openai.com`), OpenClaw memaksa `compat.supportsDeveloperRole: false` untuk menghindari error provider 400 untuk role `developer` yang tidak didukung.
- Rute kompatibel OpenAI bergaya proxy juga melewati pembentukan request khusus OpenAI native: tidak ada `service_tier`, tidak ada Responses `store`, tidak ada petunjuk prompt-cache, tidak ada pembentukan payload kompatibilitas reasoning OpenAI, dan tidak ada header atribusi OpenClaw tersembunyi.
- Disarankan: tetapkan nilai eksplisit yang sesuai dengan batas proxy/model Anda.
- Untuk `api: "openai-completions"` pada endpoint non-native (setiap `baseUrl` tidak kosong yang host-nya bukan `api.openai.com`), OpenClaw memaksa `compat.supportsDeveloperRole: false` untuk menghindari error 400 penyedia untuk role `developer` yang tidak didukung.
- Rute kompatibel OpenAI bergaya proxy juga melewati pembentukan permintaan native khusus OpenAI:
tidak ada `service_tier`, tidak ada Responses `store`, tidak ada petunjuk prompt-cache, tidak ada
pembentukan payload kompatibilitas reasoning OpenAI, dan tidak ada header atribusi OpenClaw
tersembunyi.
- Jika `baseUrl` kosong/dihilangkan, OpenClaw mempertahankan perilaku default OpenAI (yang diselesaikan ke `api.openai.com`).
- Demi keamanan, `compat.supportsDeveloperRole: true` yang eksplisit tetap ditimpa pada endpoint `openai-completions` non-native.
@ -808,6 +812,6 @@ Lihat juga: [/gateway/configuration](/id/gateway/configuration) untuk contoh kon
## Terkait
- [Models](/id/concepts/models) — konfigurasi model dan alias
- [Model Failover](/id/concepts/model-failover) — rantai fallback dan perilaku retry
- [Configuration Reference](/id/gateway/configuration-reference#agent-defaults) — key konfigurasi model
- [Model Failover](/id/concepts/model-failover) — rantai fallback dan perilaku percobaan ulang
- [Configuration Reference](/id/gateway/configuration-reference#agent-defaults) — kunci konfigurasi model
- [Providers](/id/providers) — panduan penyiapan per penyedia

View File

@ -2,14 +2,14 @@
read_when:
- Memperluas qa-lab atau qa-channel
- Menambahkan skenario QA yang didukung repo
- Membangun otomasi QA dengan realisme lebih tinggi di sekitar dashboard Gateway
summary: Bentuk otomasi QA privat untuk qa-lab, qa-channel, skenario seed, dan laporan protokol
- Membangun otomasi QA dengan realisme lebih tinggi di sekitar Dashboard Gateway
summary: Bentuk otomasi QA privat untuk qa-lab, qa-channel, skenario seeded, dan laporan protokol
title: Otomasi E2E QA
x-i18n:
generated_at: "2026-04-08T02:14:02Z"
generated_at: "2026-04-08T06:00:49Z"
model: gpt-5.4
provider: openai
source_hash: 3b4aa5acc8e77303f4045d4f04372494cae21b89d2fdaba856dbb4855ced9d27
source_hash: 57da147dc06abf9620290104e01a83b42182db1806514114fd9e8467492cda99
source_path: concepts/qa-e2e-automation.md
workflow: 15
---
@ -17,7 +17,7 @@ x-i18n:
# Otomasi E2E QA
Stack QA privat dimaksudkan untuk menguji OpenClaw dengan cara yang lebih realistis
dan menyerupai channel dibandingkan yang dapat dicakup oleh satu unit test.
dan menyerupai channel dibandingkan yang dapat dilakukan oleh satu unit test.
Komponen saat ini:
@ -30,7 +30,7 @@ Komponen saat ini:
Alur operator QA saat ini adalah situs QA dua panel:
- Kiri: dashboard Gateway (Control UI) dengan agen.
- Kiri: Dashboard Gateway (Control UI) dengan agen.
- Kanan: QA Lab, menampilkan transkrip bergaya Slack dan rencana skenario.
Jalankan dengan:
@ -39,9 +39,9 @@ Jalankan dengan:
pnpm qa:lab:up
```
Perintah itu membangun situs QA, memulai lane gateway berbasis Docker, dan menampilkan
halaman QA Lab tempat operator atau loop otomasi dapat memberikan misi QA
kepada agen, mengamati perilaku channel nyata, serta mencatat apa yang berhasil, gagal, atau
Itu membangun situs QA, memulai lane gateway berbasis Docker, dan mengekspos
halaman QA Lab tempat operator atau loop otomasi dapat memberi agen misi QA,
mengamati perilaku channel nyata, dan mencatat apa yang berhasil, gagal, atau
tetap terblokir.
Untuk iterasi UI QA Lab yang lebih cepat tanpa membangun ulang image Docker setiap kali,
@ -54,27 +54,28 @@ pnpm qa:lab:up:fast
pnpm qa:lab:watch
```
`qa:lab:up:fast` mempertahankan layanan Docker pada image yang sudah dibangun sebelumnya dan melakukan bind-mount
`qa:lab:up:fast` menjaga layanan Docker tetap berjalan pada image yang sudah dibangun sebelumnya dan me-bind-mount
`extensions/qa-lab/web/dist` ke dalam container `qa-lab`. `qa:lab:watch`
membangun ulang bundle tersebut saat ada perubahan, dan browser melakukan muat ulang otomatis ketika hash aset QA Lab berubah.
membangun ulang bundle tersebut saat ada perubahan, dan browser memuat ulang otomatis ketika hash aset QA Lab berubah.
## Seed yang didukung repo
Aset seed berada di `qa/`:
- `qa/scenarios.md`
- `qa/scenarios/index.md`
- `qa/scenarios/*.md`
Aset ini sengaja disimpan di git agar rencana QA terlihat baik oleh manusia maupun
agen. Daftar dasarnya harus tetap cukup luas untuk mencakup:
Ini sengaja disimpan di git agar rencana QA terlihat oleh manusia maupun
agen. Daftar dasar harus tetap cukup luas untuk mencakup:
- obrolan DM dan channel
- perilaku thread
- siklus hidup aksi pesan
- callback cron
- pemanggilan memori
- peralihan model
- pergantian model
- handoff subagen
- membaca repo dan membaca dokumentasi
- membaca repo dan membaca dokumen
- satu tugas build kecil seperti Lobster Invaders
## Pelaporan
@ -87,7 +88,7 @@ Laporan tersebut harus menjawab:
- Apa yang tetap terblokir
- Skenario tindak lanjut apa yang layak ditambahkan
## Dokumentasi terkait
## Dokumen terkait
- [Testing](/id/help/testing)
- [QA Channel](/id/channels/qa-channel)

View File

@ -1,15 +1,15 @@
---
read_when:
- Menjelaskan cara kerja streaming atau chunking di channel
- Mengubah perilaku block streaming atau channel chunking
- Men-debug balasan blok yang duplikat/terlalu awal atau preview streaming channel
summary: Perilaku streaming + chunking (balasan blok, preview streaming channel, pemetaan mode)
- Menjelaskan cara kerja streaming atau chunking pada kanal
- Mengubah perilaku streaming blok atau chunking kanal
- Men-debug balasan blok duplikat/terlalu awal atau streaming pratinjau kanal
summary: Perilaku streaming + chunking (balasan blok, streaming pratinjau kanal, pemetaan mode)
title: Streaming dan Chunking
x-i18n:
generated_at: "2026-04-05T13:52:34Z"
generated_at: "2026-04-08T06:01:04Z"
model: gpt-5.4
provider: openai
source_hash: 44b0d08c7eafcb32030ef7c8d5719c2ea2d34e4bac5fdad8cc8b3f4e9e9fad97
source_hash: a8e847bb7da890818cd79dec7777f6ae488e6d6c0468e948e56b6b6c598e0000
source_path: concepts/streaming.md
workflow: 15
---
@ -18,14 +18,14 @@ x-i18n:
OpenClaw memiliki dua lapisan streaming yang terpisah:
- **Block streaming (channel):** mengirim **blok** yang sudah selesai saat asisten menulis. Ini adalah pesan channel biasa (bukan delta token).
- **Preview streaming (Telegram/Discord/Slack):** memperbarui **pesan preview** sementara selama proses pembuatan.
- **Streaming blok (kanal):** mengirim **blok** yang sudah selesai saat asisten menulis. Ini adalah pesan kanal biasa (bukan delta token).
- **Streaming pratinjau (Telegram/Discord/Slack):** memperbarui **pesan pratinjau** sementara selama pembuatan.
Saat ini **tidak ada true token-delta streaming** ke pesan channel. Preview streaming berbasis pesan (kirim + edit/tambahkan).
Saat ini **tidak ada streaming delta-token yang sebenarnya** ke pesan kanal. Streaming pratinjau berbasis pesan (kirim + edit/tambahkan).
## Block streaming (pesan channel)
## Streaming blok (pesan kanal)
Block streaming mengirim output asisten dalam potongan besar saat tersedia.
Streaming blok mengirim keluaran asisten dalam potongan kasar saat tersedia.
```
Model output
@ -39,130 +39,131 @@ Model output
Legenda:
- `text_delta/events`: event stream model (bisa jarang untuk model non-streaming).
- `chunker`: `EmbeddedBlockChunker` yang menerapkan batas min/maks + preferensi pemisahan.
- `channel send`: pesan keluar yang sebenarnya (balasan blok).
- `text_delta/events`: peristiwa stream model (bisa jarang untuk model non-streaming).
- `chunker`: `EmbeddedBlockChunker` yang menerapkan batas minimum/maksimum + preferensi pemisahan.
- `channel send`: pesan keluar aktual (balasan blok).
**Kontrol:**
- `agents.defaults.blockStreamingDefault`: `"on"`/`"off"` (default off).
- Override channel: `*.blockStreaming` (dan varian per akun) untuk memaksa `"on"`/`"off"` per channel.
- `agents.defaults.blockStreamingDefault`: `"on"`/`"off"` (default mati).
- Override kanal: `*.blockStreaming` (dan varian per akun) untuk memaksa `"on"`/`"off"` per kanal.
- `agents.defaults.blockStreamingBreak`: `"text_end"` atau `"message_end"`.
- `agents.defaults.blockStreamingChunk`: `{ minChars, maxChars, breakPreference? }`.
- `agents.defaults.blockStreamingCoalesce`: `{ minChars?, maxChars?, idleMs? }` (gabungkan blok yang di-stream sebelum dikirim).
- Hard cap channel: `*.textChunkLimit` (misalnya, `channels.whatsapp.textChunkLimit`).
- Mode chunk channel: `*.chunkMode` (`length` sebagai default, `newline` memisahkan pada baris kosong (batas paragraf) sebelum chunking berdasarkan panjang).
- Soft cap Discord: `channels.discord.maxLinesPerMessage` (default 17) memisahkan balasan yang tinggi untuk menghindari pemotongan UI.
- `agents.defaults.blockStreamingCoalesce`: `{ minChars?, maxChars?, idleMs? }` (menggabungkan blok yang di-stream sebelum dikirim).
- Batas keras kanal: `*.textChunkLimit` (misalnya, `channels.whatsapp.textChunkLimit`).
- Mode chunk kanal: `*.chunkMode` (`length` default, `newline` membagi pada baris kosong (batas paragraf) sebelum chunking berdasarkan panjang).
- Batas lunak Discord: `channels.discord.maxLinesPerMessage` (default 17) membagi balasan tinggi untuk menghindari pemotongan UI.
**Semantik batas:**
- `text_end`: stream blok segera setelah chunker mengeluarkan hasil; flush pada setiap `text_end`.
- `message_end`: tunggu hingga pesan asisten selesai, lalu flush output yang dibuffer.
- `message_end`: tunggu sampai pesan asisten selesai, lalu flush keluaran yang dibuffer.
`message_end` tetap menggunakan chunker jika teks dalam buffer melebihi `maxChars`, sehingga bisa mengeluarkan beberapa chunk di akhir.
`message_end` tetap menggunakan chunker jika teks yang dibuffer melebihi `maxChars`, sehingga dapat mengeluarkan beberapa chunk di akhir.
## Algoritma chunking (batas rendah/tinggi)
## Algoritma chunking (batas bawah/atas)
Block chunking diimplementasikan oleh `EmbeddedBlockChunker`:
Chunking blok diimplementasikan oleh `EmbeddedBlockChunker`:
- **Batas rendah:** jangan emit sampai buffer >= `minChars` (kecuali dipaksa).
- **Batas tinggi:** prioritaskan pemisahan sebelum `maxChars`; jika dipaksa, pisahkan di `maxChars`.
- **Preferensi pemisahan:** `paragraph``newline``sentence``whitespace`hard break.
- **Code fence:** jangan pernah memisahkan di dalam fence; ketika dipaksa di `maxChars`, tutup + buka kembali fence agar Markdown tetap valid.
- **Batas bawah:** jangan keluarkan hasil sampai buffer >= `minChars` (kecuali dipaksa).
- **Batas atas:** utamakan pemisahan sebelum `maxChars`; jika dipaksa, pisahkan pada `maxChars`.
- **Preferensi pemisahan:** `paragraph``newline``sentence``whitespace`pemisahan keras.
- **Code fence:** jangan pernah membagi di dalam fence; saat dipaksa pada `maxChars`, tutup + buka kembali fence agar Markdown tetap valid.
`maxChars` dijepit ke `textChunkLimit` channel, sehingga Anda tidak bisa melebihi batas per channel.
`maxChars` dibatasi ke `textChunkLimit` kanal, jadi Anda tidak bisa melebihi batas per kanal.
## Coalescing (menggabungkan blok yang di-stream)
Saat block streaming diaktifkan, OpenClaw dapat **menggabungkan block chunk yang berurutan**
sebelum mengirimkannya. Ini mengurangi “spam satu baris” sambil tetap memberikan
output progresif.
Saat streaming blok diaktifkan, OpenClaw dapat **menggabungkan chunk blok berturut-turut**
sebelum mengirimkannya. Ini mengurangi “spam satu baris” sambil tetap menyediakan
keluaran progresif.
- Coalescing menunggu **jeda idle** (`idleMs`) sebelum flush.
- Buffer dibatasi oleh `maxChars` dan akan flush jika melebihinya.
- `minChars` mencegah fragmen kecil dikirim sampai cukup banyak teks yang terkumpul
(flush akhir selalu mengirim sisa teks).
- Buffer dibatasi oleh `maxChars` dan akan flush jika melampauinya.
- `minChars` mencegah fragmen kecil terkirim sampai cukup banyak teks terkumpul
(flush akhir selalu mengirim teks yang tersisa).
- Joiner diturunkan dari `blockStreamingChunk.breakPreference`
(`paragraph` → `\n\n`, `newline``\n`, `sentence` → spasi).
- Override channel tersedia melalui `*.blockStreamingCoalesce` (termasuk konfigurasi per akun).
- Override kanal tersedia melalui `*.blockStreamingCoalesce` (termasuk konfigurasi per akun).
- Default coalesce `minChars` dinaikkan menjadi 1500 untuk Signal/Slack/Discord kecuali dioverride.
## Tempo seperti manusia di antara blok
## Tempo seperti manusia antarblok
Saat block streaming diaktifkan, Anda dapat menambahkan **jeda acak** di antara
balasan blok (setelah blok pertama). Ini membuat respons multi-bubble terasa
Saat streaming blok diaktifkan, Anda dapat menambahkan **jeda acak** di antara
balasan blok (setelah blok pertama). Ini membuat respons multi-gelembung terasa
lebih alami.
- Konfigurasi: `agents.defaults.humanDelay` (override per agen melalui `agents.list[].humanDelay`).
- Config: `agents.defaults.humanDelay` (override per agen melalui `agents.list[].humanDelay`).
- Mode: `off` (default), `natural` (8002500ms), `custom` (`minMs`/`maxMs`).
- Hanya berlaku untuk **balasan blok**, bukan balasan akhir atau ringkasan tool.
## "Stream chunks or everything"
## "Stream chunk atau semuanya"
Ini dipetakan ke:
- **Stream chunks:** `blockStreamingDefault: "on"` + `blockStreamingBreak: "text_end"` (emit sambil berjalan). Channel non-Telegram juga memerlukan `*.blockStreaming: true`.
- **Stream everything at end:** `blockStreamingBreak: "message_end"` (flush sekali, mungkin beberapa chunk jika sangat panjang).
- **No block streaming:** `blockStreamingDefault: "off"` (hanya balasan akhir).
- **Stream chunk:** `blockStreamingDefault: "on"` + `blockStreamingBreak: "text_end"` (kirim saat berjalan). Kanal non-Telegram juga memerlukan `*.blockStreaming: true`.
- **Stream semuanya di akhir:** `blockStreamingBreak: "message_end"` (flush sekali, mungkin beberapa chunk jika sangat panjang).
- **Tanpa streaming blok:** `blockStreamingDefault: "off"` (hanya balasan akhir).
**Catatan channel:** Block streaming **nonaktif kecuali**
`*.blockStreaming` secara eksplisit disetel ke `true`. Channel dapat men-stream preview langsung
**Catatan kanal:** Streaming blok **mati kecuali**
`*.blockStreaming` secara eksplisit disetel ke `true`. Kanal dapat menayangkan pratinjau langsung
(`channels.<channel>.streaming`) tanpa balasan blok.
Pengingat lokasi konfigurasi: default `blockStreaming*` berada di bawah
`agents.defaults`, bukan konfigurasi root.
Pengingat lokasi config: default `blockStreaming*` berada di bawah
`agents.defaults`, bukan config root.
## Mode preview streaming
## Mode streaming pratinjau
Kunci kanonis: `channels.<channel>.streaming`
Mode:
- `off`: nonaktifkan preview streaming.
- `partial`: satu preview yang diganti dengan teks terbaru.
- `block`: preview diperbarui dalam langkah bertahap yang di-chunk/ditambahkan.
- `progress`: preview status/kemajuan selama pembuatan, jawaban akhir saat selesai.
- `off`: nonaktifkan streaming pratinjau.
- `partial`: satu pratinjau yang diganti dengan teks terbaru.
- `block`: pembaruan pratinjau dalam langkah chunked/appended.
- `progress`: pratinjau progres/status selama pembuatan, jawaban akhir saat selesai.
### Pemetaan channel
### Pemetaan kanal
| Channel | `off` | `partial` | `block` | `progress` |
| -------- | ----- | --------- | ------- | ----------------- |
| Kanal | `off` | `partial` | `block` | `progress` |
| -------- | ----- | --------- | ------- | --------------------- |
| Telegram | ✅ | ✅ | ✅ | dipetakan ke `partial` |
| Discord | ✅ | ✅ | ✅ | dipetakan ke `partial` |
| Slack | ✅ | ✅ | ✅ | ✅ |
| Slack | ✅ | ✅ | ✅ | ✅ |
Khusus Slack:
- `channels.slack.nativeStreaming` mengaktifkan/nonaktifkan panggilan API native streaming Slack ketika `streaming=partial` (default: `true`).
- `channels.slack.streaming.nativeTransport` mengaktifkan/nonaktifkan panggilan API streaming native Slack saat `channels.slack.streaming.mode="partial"` (default: `true`).
- Streaming native Slack dan status thread asisten Slack memerlukan target thread balasan; DM level atas tidak menampilkan pratinjau bergaya thread tersebut.
Migrasi kunci lama:
- Telegram: `streamMode` + boolean `streaming` dimigrasikan otomatis ke enum `streaming`.
- Discord: `streamMode` + boolean `streaming` dimigrasikan otomatis ke enum `streaming`.
- Slack: `streamMode` dimigrasikan otomatis ke enum `streaming`; boolean `streaming` dimigrasikan otomatis ke `nativeStreaming`.
- Slack: `streamMode` dimigrasikan otomatis ke `streaming.mode`; boolean `streaming` dimigrasikan otomatis ke `streaming.mode` plus `streaming.nativeTransport`; `nativeStreaming` lama dimigrasikan otomatis ke `streaming.nativeTransport`.
### Perilaku runtime
Telegram:
- Menggunakan update preview `sendMessage` + `editMessageText` di DM serta grup/topik.
- Preview streaming dilewati ketika Telegram block streaming diaktifkan secara eksplisit (untuk menghindari streaming ganda).
- `/reasoning stream` dapat menulis reasoning ke preview.
- Menggunakan pembaruan pratinjau `sendMessage` + `editMessageText` di DM dan grup/topik.
- Streaming pratinjau dilewati saat streaming blok Telegram diaktifkan secara eksplisit (untuk menghindari streaming ganda).
- `/reasoning stream` dapat menulis penalaran ke pratinjau.
Discord:
- Menggunakan pesan preview send + edit.
- Menggunakan pesan pratinjau kirim + edit.
- Mode `block` menggunakan draft chunking (`draftChunk`).
- Preview streaming dilewati ketika Discord block streaming diaktifkan secara eksplisit.
- Streaming pratinjau dilewati saat streaming blok Discord diaktifkan secara eksplisit.
Slack:
- `partial` dapat menggunakan API native streaming Slack (`chat.startStream`/`append`/`stop`) jika tersedia.
- `block` menggunakan preview draf bergaya append.
- `progress` menggunakan teks preview status, lalu jawaban akhir.
- `partial` dapat menggunakan streaming native Slack (`chat.startStream`/`append`/`stop`) saat tersedia.
- `block` menggunakan pratinjau draft bergaya append.
- `progress` menggunakan teks pratinjau status, lalu jawaban akhir.
## Terkait
- [Messages](/concepts/messages) — siklus hidup dan pengiriman pesan
- [Retry](/concepts/retry) — perilaku retry saat pengiriman gagal
- [Channels](/id/channels) — dukungan streaming per channel
- [Pesan](/id/concepts/messages) — siklus hidup dan pengiriman pesan
- [Coba lagi](/id/concepts/retry) — perilaku percobaan ulang saat pengiriman gagal
- [Kanal](/id/channels) — dukungan streaming per kanal

File diff suppressed because it is too large Load Diff

View File

@ -1,15 +1,15 @@
---
read_when:
- Menyiapkan OpenClaw untuk pertama kalinya
- Mencari pola konfigurasi yang umum
- Menavigasi ke bagian config tertentu
- Mencari pola konfigurasi umum
- Menavigasi ke bagian konfigurasi tertentu
summary: 'Ikhtisar konfigurasi: tugas umum, penyiapan cepat, dan tautan ke referensi lengkap'
title: Konfigurasi
x-i18n:
generated_at: "2026-04-05T13:54:09Z"
generated_at: "2026-04-08T06:01:54Z"
model: gpt-5.4
provider: openai
source_hash: a39a7de09c5f9540785ec67f37d435a7a86201f0f5f640dae663054f35976712
source_hash: 199a1e515bd4003319e71593a2659bb883299a76ff67e273d92583df03c96604
source_path: gateway/configuration.md
workflow: 15
---
@ -21,13 +21,13 @@ OpenClaw membaca config <Tooltip tip="JSON5 mendukung komentar dan koma di akhir
Jika file tidak ada, OpenClaw menggunakan default yang aman. Alasan umum untuk menambahkan config:
- Menghubungkan channel dan mengontrol siapa yang dapat mengirim pesan ke bot
- Menetapkan model, tool, sandboxing, atau otomatisasi (cron, hooks)
- Menetapkan model, alat, sandboxing, atau otomatisasi (cron, hook)
- Menyesuaikan sesi, media, jaringan, atau UI
Lihat [referensi lengkap](/gateway/configuration-reference) untuk setiap field yang tersedia.
Lihat [referensi lengkap](/id/gateway/configuration-reference) untuk setiap field yang tersedia.
<Tip>
**Baru mengenal konfigurasi?** Mulailah dengan `openclaw onboard` untuk penyiapan interaktif, atau lihat panduan [Contoh Konfigurasi](/gateway/configuration-examples) untuk config lengkap yang siap salin-tempel.
**Baru mengenal konfigurasi?** Mulailah dengan `openclaw onboard` untuk penyiapan interaktif, atau lihat panduan [Contoh Konfigurasi](/id/gateway/configuration-examples) untuk config lengkap yang bisa langsung disalin-tempel.
</Tip>
## Config minimal
@ -45,11 +45,11 @@ Lihat [referensi lengkap](/gateway/configuration-reference) untuk setiap field y
<Tabs>
<Tab title="Wizard interaktif">
```bash
openclaw onboard # full onboarding flow
openclaw configure # config wizard
openclaw onboard # alur onboarding lengkap
openclaw configure # wizard config
```
</Tab>
<Tab title="CLI (one-liner)">
<Tab title="CLI (satu baris)">
```bash
openclaw config get agents.defaults.workspace
openclaw config set agents.defaults.heartbeat.every "2h"
@ -58,10 +58,11 @@ Lihat [referensi lengkap](/gateway/configuration-reference) untuk setiap field y
</Tab>
<Tab title="Control UI">
Buka [http://127.0.0.1:18789](http://127.0.0.1:18789) dan gunakan tab **Config**.
Control UI merender formulir dari skema config live, termasuk metadata docs `title` / `description` pada field serta skema plugin dan channel saat
tersedia, dengan editor **Raw JSON** sebagai jalan keluar. Untuk UI
drill-down dan tooling lainnya, gateway juga mengekspos `config.schema.lookup` untuk
mengambil satu node skema yang dicakup path beserta ringkasan child langsung.
Control UI merender formulir dari skema config aktif, termasuk metadata docs
`title` / `description` field serta skema plugin dan channel jika tersedia,
dengan editor **Raw JSON** sebagai jalan keluar. Untuk UI penelusuran mendalam
dan alat lainnya, gateway juga mengekspos `config.schema.lookup` untuk
mengambil satu node skema dengan cakupan path beserta ringkasan turunan langsung.
</Tab>
<Tab title="Edit langsung">
Edit `~/.openclaw/openclaw.json` secara langsung. Gateway memantau file tersebut dan menerapkan perubahan secara otomatis (lihat [hot reload](#config-hot-reload)).
@ -71,29 +72,33 @@ Lihat [referensi lengkap](/gateway/configuration-reference) untuk setiap field y
## Validasi ketat
<Warning>
OpenClaw hanya menerima konfigurasi yang sepenuhnya cocok dengan skema. Key yang tidak dikenal, tipe yang salah format, atau nilai yang tidak valid akan membuat Gateway **menolak untuk memulai**. Satu-satunya pengecualian di level root adalah `$schema` (string), sehingga editor dapat melampirkan metadata JSON Schema.
OpenClaw hanya menerima konfigurasi yang sepenuhnya cocok dengan skema. Key yang tidak dikenal, tipe yang salah format, atau nilai yang tidak valid akan membuat Gateway **menolak untuk memulai**. Satu-satunya pengecualian di level root adalah `$schema` (string), agar editor dapat melampirkan metadata JSON Schema.
</Warning>
Catatan tooling skema:
Catatan alat skema:
- `openclaw config schema` mencetak keluarga JSON Schema yang sama yang digunakan oleh Control UI
dan validasi config.
- Nilai field `title` dan `description` dibawa ke output skema untuk
tooling editor dan formulir.
- Entri nested object, wildcard (`*`), dan array-item (`[]`) mewarisi metadata
docs yang sama ketika dokumentasi field yang cocok tersedia.
- Branch komposisi `anyOf` / `oneOf` / `allOf` juga mewarisi metadata docs
- Perlakukan keluaran skema tersebut sebagai kontrak kanonis yang dapat dibaca mesin untuk
`openclaw.json`; ikhtisar ini dan referensi konfigurasi merangkumnya.
- Nilai `title` dan `description` field dibawa ke keluaran skema untuk
alat editor dan formulir.
- Entri objek bertingkat, wildcard (`*`), dan item array (`[]`) mewarisi metadata docs yang sama
ketika dokumentasi field yang cocok tersedia.
- Cabang komposisi `anyOf` / `oneOf` / `allOf` juga mewarisi metadata docs
yang sama, sehingga varian union/intersection tetap memiliki bantuan field yang sama.
- `config.schema.lookup` mengembalikan satu path config yang dinormalisasi dengan node
skema dangkal (`title`, `description`, `type`, `enum`, `const`, batas umum,
dan field validasi serupa), metadata petunjuk UI yang cocok, dan ringkasan child langsung
untuk tooling drill-down.
- Skema plugin/channel runtime digabungkan saat gateway dapat memuat
registri manifest saat ini.
- `config.schema.lookup` mengembalikan satu path config yang dinormalisasi dengan node skema
dangkal (`title`, `description`, `type`, `enum`, `const`, batas umum,
dan field validasi serupa), metadata petunjuk UI yang cocok, dan ringkasan turunan langsung
untuk alat penelusuran mendalam.
- Skema plugin/channel runtime digabungkan ketika gateway dapat memuat
registri manifes saat ini.
- `pnpm config:docs:check` mendeteksi ketidaksesuaian antara artefak baseline config
yang berhadapan dengan docs dan permukaan skema saat ini.
Saat validasi gagal:
- Gateway tidak melakukan boot
- Gateway tidak akan berjalan
- Hanya perintah diagnostik yang berfungsi (`openclaw doctor`, `openclaw logs`, `openclaw health`, `openclaw status`)
- Jalankan `openclaw doctor` untuk melihat masalah yang tepat
- Jalankan `openclaw doctor --fix` (atau `--yes`) untuk menerapkan perbaikan
@ -101,11 +106,11 @@ Saat validasi gagal:
## Tugas umum
<AccordionGroup>
<Accordion title="Menyiapkan channel (WhatsApp, Telegram, Discord, dll.)">
<Accordion title="Siapkan channel (WhatsApp, Telegram, Discord, dll.)">
Setiap channel memiliki bagian config sendiri di bawah `channels.<provider>`. Lihat halaman channel khusus untuk langkah penyiapan:
- [WhatsApp](/id/channels/whatsapp) — `channels.whatsapp`
- [Telegram](/channels/telegram) — `channels.telegram`
- [Telegram](/id/channels/telegram) — `channels.telegram`
- [Discord](/id/channels/discord) — `channels.discord`
- [Feishu](/id/channels/feishu) — `channels.feishu`
- [Google Chat](/id/channels/googlechat) — `channels.googlechat`
@ -132,7 +137,7 @@ Saat validasi gagal:
</Accordion>
<Accordion title="Memilih dan mengonfigurasi model">
<Accordion title="Pilih dan konfigurasikan model">
Tetapkan model utama dan fallback opsional:
```json5
@ -152,29 +157,29 @@ Saat validasi gagal:
}
```
- `agents.defaults.models` mendefinisikan katalog model dan bertindak sebagai allowlist untuk `/model`.
- Ref model menggunakan format `provider/model` (misalnya `anthropic/claude-opus-4-6`).
- `agents.defaults.imageMaxDimensionPx` mengontrol downscaling gambar transkrip/tool (default `1200`); nilai yang lebih rendah biasanya mengurangi penggunaan vision-token pada eksekusi yang banyak screenshot.
- Lihat [Models CLI](/concepts/models) untuk mengganti model di chat dan [Failover Model](/concepts/model-failover) untuk perilaku rotasi auth dan fallback.
- Untuk provider kustom/self-hosted, lihat [Provider kustom](/gateway/configuration-reference#custom-providers-and-base-urls) di referensi.
- `agents.defaults.models` mendefinisikan katalog model dan berfungsi sebagai allowlist untuk `/model`.
- Referensi model menggunakan format `provider/model` (misalnya `anthropic/claude-opus-4-6`).
- `agents.defaults.imageMaxDimensionPx` mengontrol downscaling gambar transkrip/alat (default `1200`); nilai yang lebih rendah biasanya mengurangi penggunaan vision-token pada proses yang banyak screenshot.
- Lihat [Models CLI](/id/concepts/models) untuk mengganti model di chat dan [Model Failover](/id/concepts/model-failover) untuk rotasi auth dan perilaku fallback.
- Untuk provider kustom/self-hosted, lihat [Custom providers](/id/gateway/configuration-reference#custom-providers-and-base-urls) di referensi.
</Accordion>
<Accordion title="Mengontrol siapa yang dapat mengirim pesan ke bot">
<Accordion title="Kontrol siapa yang dapat mengirim pesan ke bot">
Akses DM dikontrol per channel melalui `dmPolicy`:
- `"pairing"` (default): pengirim yang tidak dikenal mendapatkan pairing code satu kali untuk disetujui
- `"allowlist"`: hanya pengirim di `allowFrom` (atau penyimpanan allow berpasangan)
- `"pairing"` (default): pengirim yang tidak dikenal mendapatkan kode pairing sekali pakai untuk persetujuan
- `"allowlist"`: hanya pengirim di `allowFrom` (atau penyimpanan izin hasil pairing)
- `"open"`: izinkan semua DM masuk (memerlukan `allowFrom: ["*"]`)
- `"disabled"`: abaikan semua DM
Untuk grup, gunakan `groupPolicy` + `groupAllowFrom` atau allowlist khusus channel.
Lihat [referensi lengkap](/gateway/configuration-reference#dm-and-group-access) untuk detail per channel.
Lihat [referensi lengkap](/id/gateway/configuration-reference#dm-and-group-access) untuk detail per channel.
</Accordion>
<Accordion title="Menyiapkan mention gating obrolan grup">
<Accordion title="Siapkan penyaringan mention untuk chat grup">
Pesan grup secara default **memerlukan mention**. Konfigurasikan pola per agen:
```json5
@ -197,15 +202,14 @@ Saat validasi gagal:
}
```
- **Mention metadata**: @-mention native (WhatsApp tap-to-mention, Telegram @bot, dll.)
- **Pola teks**: pola regex aman dalam `mentionPatterns`
- Lihat [referensi lengkap](/gateway/configuration-reference#group-chat-mention-gating) untuk override per channel dan mode self-chat.
- **Metadata mentions**: @-mention native (WhatsApp tap-to-mention, Telegram @bot, dll.)
- **Pola teks**: pola regex aman di `mentionPatterns`
- Lihat [referensi lengkap](/id/gateway/configuration-reference#group-chat-mention-gating) untuk override per channel dan mode chat dengan diri sendiri.
</Accordion>
<Accordion title="Membatasi Skills per agen">
Gunakan `agents.defaults.skills` untuk baseline bersama, lalu override agen tertentu
dengan `agents.list[].skills`:
<Accordion title="Batasi Skills per agen">
Gunakan `agents.defaults.skills` untuk baseline bersama, lalu override agen tertentu dengan `agents.list[].skills`:
```json5
{
@ -222,16 +226,16 @@ Saat validasi gagal:
}
```
- Hilangkan `agents.defaults.skills` untuk Skills tak terbatas secara default.
- Hilangkan `agents.defaults.skills` agar Skills tidak dibatasi secara default.
- Hilangkan `agents.list[].skills` untuk mewarisi default.
- Setel `agents.list[].skills: []` untuk tanpa Skills.
- Lihat [Skills](/tools/skills), [Config Skills](/tools/skills-config), dan
[Referensi Konfigurasi](/gateway/configuration-reference#agentsdefaultsskills).
- Tetapkan `agents.list[].skills: []` agar tidak ada Skills.
- Lihat [Skills](/id/tools/skills), [Skills config](/id/tools/skills-config), dan
[Configuration Reference](/id/gateway/configuration-reference#agentsdefaultsskills).
</Accordion>
<Accordion title="Menyesuaikan pemantauan kesehatan channel gateway">
Kendalikan seberapa agresif gateway memulai ulang channel yang terlihat usang:
<Accordion title="Sesuaikan pemantauan kesehatan channel gateway">
Kontrol seberapa agresif gateway me-restart channel yang terlihat stale:
```json5
{
@ -253,15 +257,15 @@ Saat validasi gagal:
}
```
- Setel `gateway.channelHealthCheckMinutes: 0` untuk menonaktifkan restart health-monitor secara global.
- Tetapkan `gateway.channelHealthCheckMinutes: 0` untuk menonaktifkan restart pemantauan kesehatan secara global.
- `channelStaleEventThresholdMinutes` harus lebih besar atau sama dengan interval pemeriksaan.
- Gunakan `channels.<provider>.healthMonitor.enabled` atau `channels.<provider>.accounts.<id>.healthMonitor.enabled` untuk menonaktifkan auto-restart bagi satu channel atau akun tanpa menonaktifkan monitor global.
- Lihat [Pemeriksaan Kesehatan](/gateway/health) untuk pen-debug-an operasional dan [referensi lengkap](/gateway/configuration-reference#gateway) untuk semua field.
- Gunakan `channels.<provider>.healthMonitor.enabled` atau `channels.<provider>.accounts.<id>.healthMonitor.enabled` untuk menonaktifkan restart otomatis pada satu channel atau akun tanpa menonaktifkan pemantau global.
- Lihat [Health Checks](/id/gateway/health) untuk debugging operasional dan [referensi lengkap](/id/gateway/configuration-reference#gateway) untuk semua field.
</Accordion>
<Accordion title="Mengonfigurasi sesi dan reset">
Sesi mengontrol kontinuitas dan isolasi percakapan:
<Accordion title="Konfigurasikan sesi dan reset">
Sesi mengontrol kesinambungan dan isolasi percakapan:
```json5
{
@ -281,15 +285,15 @@ Saat validasi gagal:
}
```
- `dmScope`: `main` (bersama) | `per-peer` | `per-channel-peer` | `per-account-channel-peer`
- `dmScope`: `main` (dibagikan) | `per-peer` | `per-channel-peer` | `per-account-channel-peer`
- `threadBindings`: default global untuk perutean sesi yang terikat thread (Discord mendukung `/focus`, `/unfocus`, `/agents`, `/session idle`, dan `/session max-age`).
- Lihat [Manajemen Sesi](/concepts/session) untuk cakupan, tautan identitas, dan kebijakan pengiriman.
- Lihat [referensi lengkap](/gateway/configuration-reference#session) untuk semua field.
- Lihat [Session Management](/id/concepts/session) untuk cakupan, tautan identitas, dan kebijakan pengiriman.
- Lihat [referensi lengkap](/id/gateway/configuration-reference#session) untuk semua field.
</Accordion>
<Accordion title="Mengaktifkan sandboxing">
Jalankan sesi agen di container Docker yang terisolasi:
<Accordion title="Aktifkan sandboxing">
Jalankan sesi agen dalam container Docker yang terisolasi:
```json5
{
@ -306,14 +310,14 @@ Saat validasi gagal:
Bangun image terlebih dahulu: `scripts/sandbox-setup.sh`
Lihat [Sandboxing](/gateway/sandboxing) untuk panduan lengkap dan [referensi lengkap](/gateway/configuration-reference#agentsdefaultssandbox) untuk semua opsi.
Lihat [Sandboxing](/id/gateway/sandboxing) untuk panduan lengkap dan [referensi lengkap](/id/gateway/configuration-reference#agentsdefaultssandbox) untuk semua opsi.
</Accordion>
<Accordion title="Mengaktifkan push berbasis relay untuk build iOS resmi">
<Accordion title="Aktifkan push berbasis relay untuk build iOS resmi">
Push berbasis relay dikonfigurasi di `openclaw.json`.
Setel ini di config gateway:
Tetapkan ini di config gateway:
```json5
{
@ -322,7 +326,7 @@ Saat validasi gagal:
apns: {
relay: {
baseUrl: "https://relay.example.com",
// Optional. Default: 10000
// Opsional. Default: 10000
timeoutMs: 10000,
},
},
@ -331,7 +335,7 @@ Saat validasi gagal:
}
```
Padanan CLI:
Setara CLI:
```bash
openclaw config set gateway.push.apns.relay.baseUrl https://relay.example.com
@ -339,35 +343,35 @@ Saat validasi gagal:
Yang dilakukan ini:
- Memungkinkan gateway mengirim `push.test`, wake nudge, dan reconnect wake melalui relay eksternal.
- Menggunakan izin kirim yang dicakup registrasi dan diteruskan oleh app iOS yang dipasangkan. Gateway tidak memerlukan token relay untuk seluruh deployment.
- Memungkinkan gateway mengirim `push.test`, dorongan bangun, dan bangun penyambungan ulang melalui relay eksternal.
- Menggunakan izin kirim dengan cakupan registrasi yang diteruskan oleh app iOS yang dipasangkan. Gateway tidak memerlukan token relay cakupan deployment.
- Mengikat setiap registrasi berbasis relay ke identitas gateway yang dipasangkan oleh app iOS, sehingga gateway lain tidak dapat menggunakan kembali registrasi yang tersimpan.
- Mempertahankan build iOS lokal/manual pada APNs langsung. Pengiriman berbasis relay hanya berlaku untuk build terdistribusi resmi yang mendaftar melalui relay.
- Harus cocok dengan URL dasar relay yang ditanamkan ke dalam build iOS resmi/TestFlight, sehingga lalu lintas registrasi dan pengiriman mencapai deployment relay yang sama.
- Mempertahankan build iOS lokal/manual pada APNs langsung. Pengiriman berbasis relay hanya berlaku untuk build resmi yang didistribusikan dan mendaftar melalui relay.
- Harus cocok dengan base URL relay yang ditanamkan ke dalam build iOS resmi/TestFlight, sehingga lalu lintas registrasi dan pengiriman mencapai deployment relay yang sama.
Alur end-to-end:
1. Instal build iOS resmi/TestFlight yang dikompilasi dengan URL dasar relay yang sama.
1. Instal build iOS resmi/TestFlight yang dikompilasi dengan base URL relay yang sama.
2. Konfigurasikan `gateway.push.apns.relay.baseUrl` pada gateway.
3. Pasangkan app iOS ke gateway dan biarkan sesi node serta operator sama-sama terhubung.
4. App iOS mengambil identitas gateway, mendaftar ke relay menggunakan App Attest plus app receipt, lalu memublikasikan payload `push.apns.register` berbasis relay ke gateway yang dipasangkan.
5. Gateway menyimpan handle relay dan izin kirim, lalu menggunakannya untuk `push.test`, wake nudge, dan reconnect wake.
3. Pasangkan app iOS ke gateway dan biarkan sesi node serta operator terhubung.
4. App iOS mengambil identitas gateway, mendaftar ke relay menggunakan App Attest plus receipt app, lalu memublikasikan payload `push.apns.register` berbasis relay ke gateway yang dipasangkan.
5. Gateway menyimpan handle relay dan izin kirim, lalu menggunakannya untuk `push.test`, dorongan bangun, dan bangun penyambungan ulang.
Catatan operasional:
- Jika Anda memindahkan app iOS ke gateway yang berbeda, sambungkan kembali app agar dapat memublikasikan registrasi relay baru yang terikat ke gateway tersebut.
- Jika Anda merilis build iOS baru yang mengarah ke deployment relay berbeda, app akan menyegarkan registrasi relay cache alih-alih menggunakan kembali asal relay yang lama.
- Jika Anda memindahkan app iOS ke gateway yang berbeda, sambungkan ulang app agar dapat memublikasikan registrasi relay baru yang terikat ke gateway tersebut.
- Jika Anda merilis build iOS baru yang mengarah ke deployment relay berbeda, app akan menyegarkan registrasi relay cache-nya alih-alih menggunakan kembali origin relay lama.
Catatan kompatibilitas:
- `OPENCLAW_APNS_RELAY_BASE_URL` dan `OPENCLAW_APNS_RELAY_TIMEOUT_MS` masih berfungsi sebagai override env sementara.
- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true` tetap menjadi jalan keluar pengembangan khusus loopback; jangan simpan URL relay HTTP dalam config.
- `OPENCLAW_APNS_RELAY_BASE_URL` dan `OPENCLAW_APNS_RELAY_TIMEOUT_MS` tetap berfungsi sebagai override env sementara.
- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true` tetap menjadi jalan keluar pengembangan khusus loopback; jangan simpan URL relay HTTP di config.
Lihat [App iOS](/platforms/ios#relay-backed-push-for-official-builds) untuk alur end-to-end dan [Alur autentikasi dan kepercayaan](/platforms/ios#authentication-and-trust-flow) untuk model keamanan relay.
Lihat [iOS App](/id/platforms/ios#relay-backed-push-for-official-builds) untuk alur end-to-end dan [Authentication and trust flow](/id/platforms/ios#authentication-and-trust-flow) untuk model keamanan relay.
</Accordion>
<Accordion title="Menyiapkan heartbeat (check-in berkala)">
<Accordion title="Siapkan heartbeat (check-in berkala)">
```json5
{
agents: {
@ -381,14 +385,14 @@ Saat validasi gagal:
}
```
- `every`: string durasi (`30m`, `2h`). Setel `0m` untuk menonaktifkan.
- `every`: string durasi (`30m`, `2h`). Tetapkan `0m` untuk menonaktifkan.
- `target`: `last` | `none` | `<channel-id>` (misalnya `discord`, `matrix`, `telegram`, atau `whatsapp`)
- `directPolicy`: `allow` (default) atau `block` untuk target heartbeat bergaya DM
- Lihat [Heartbeat](/gateway/heartbeat) untuk panduan lengkap.
- Lihat [Heartbeat](/id/gateway/heartbeat) untuk panduan lengkap.
</Accordion>
<Accordion title="Mengonfigurasi tugas cron">
<Accordion title="Konfigurasikan job cron">
```json5
{
cron: {
@ -403,13 +407,13 @@ Saat validasi gagal:
}
```
- `sessionRetention`: pangkas sesi eksekusi terisolasi yang telah selesai dari `sessions.json` (default `24h`; setel `false` untuk menonaktifkan).
- `sessionRetention`: pangkas sesi proses terisolasi yang sudah selesai dari `sessions.json` (default `24h`; tetapkan `false` untuk menonaktifkan).
- `runLog`: pangkas `cron/runs/<jobId>.jsonl` berdasarkan ukuran dan jumlah baris yang dipertahankan.
- Lihat [Tugas cron](/id/automation/cron-jobs) untuk ikhtisar fitur dan contoh CLI.
- Lihat [Cron jobs](/id/automation/cron-jobs) untuk ikhtisar fitur dan contoh CLI.
</Accordion>
<Accordion title="Menyiapkan webhook (hooks)">
<Accordion title="Siapkan webhook (hook)">
Aktifkan endpoint webhook HTTP pada Gateway:
```json5
@ -437,16 +441,16 @@ Saat validasi gagal:
- Perlakukan semua konten payload hook/webhook sebagai input yang tidak tepercaya.
- Gunakan `hooks.token` khusus; jangan gunakan ulang token Gateway bersama.
- Auth hook hanya melalui header (`Authorization: Bearer ...` atau `x-openclaw-token`); token query-string ditolak.
- `hooks.path` tidak boleh berupa `/`; pertahankan ingress webhook pada subpath khusus seperti `/hooks`.
- Biarkan flag bypass konten tidak aman tetap nonaktif (`hooks.gmail.allowUnsafeExternalContent`, `hooks.mappings[].allowUnsafeExternalContent`) kecuali saat melakukan pen-debug-an yang sangat terbatas.
- Jika Anda mengaktifkan `hooks.allowRequestSessionKey`, setel juga `hooks.allowedSessionKeyPrefixes` untuk membatasi session key yang dipilih pemanggil.
- Untuk agen yang digerakkan hook, utamakan tier model modern yang kuat dan kebijakan tool yang ketat (misalnya hanya messaging plus sandboxing jika memungkinkan).
- `hooks.path` tidak boleh `/`; pertahankan ingress webhook pada subpath khusus seperti `/hooks`.
- Biarkan flag bypass konten tidak aman tetap dinonaktifkan (`hooks.gmail.allowUnsafeExternalContent`, `hooks.mappings[].allowUnsafeExternalContent`) kecuali untuk debugging yang sangat terbatas.
- Jika Anda mengaktifkan `hooks.allowRequestSessionKey`, tetapkan juga `hooks.allowedSessionKeyPrefixes` untuk membatasi session key yang dipilih pemanggil.
- Untuk agen yang digerakkan hook, utamakan tier model modern yang kuat dan kebijakan alat yang ketat (misalnya hanya pengiriman pesan ditambah sandboxing jika memungkinkan).
Lihat [referensi lengkap](/gateway/configuration-reference#hooks) untuk semua opsi pemetaan dan integrasi Gmail.
Lihat [referensi lengkap](/id/gateway/configuration-reference#hooks) untuk semua opsi mapping dan integrasi Gmail.
</Accordion>
<Accordion title="Mengonfigurasi perutean multi-agen">
<Accordion title="Konfigurasikan routing multi-agent">
Jalankan beberapa agen terisolasi dengan workspace dan sesi terpisah:
```json5
@ -464,12 +468,12 @@ Saat validasi gagal:
}
```
Lihat [Multi-Agent](/concepts/multi-agent) dan [referensi lengkap](/gateway/configuration-reference#multi-agent-routing) untuk aturan binding dan profil akses per agen.
Lihat [Multi-Agent](/id/concepts/multi-agent) dan [referensi lengkap](/id/gateway/configuration-reference#multi-agent-routing) untuk aturan binding dan profil akses per agen.
</Accordion>
<Accordion title="Membagi config ke beberapa file ($include)">
Gunakan `$include` untuk mengatur config yang besar:
<Accordion title="Pisahkan config ke beberapa file ($include)">
Gunakan `$include` untuk mengatur config besar:
```json5
// ~/.openclaw/openclaw.json
@ -482,11 +486,11 @@ Saat validasi gagal:
}
```
- **Satu file**: menggantikan object yang memuatnya
- **Array file**: di-deep-merge secara berurutan (yang belakangan menang)
- **Key saudara**: digabungkan setelah include (menimpa nilai yang di-include)
- **Include bertingkat**: didukung hingga 10 level
- **Path relatif**: diresolusikan relatif terhadap file yang meng-include
- **File tunggal**: menggantikan objek yang memuatnya
- **Array file**: digabungkan secara deep-merge sesuai urutan (yang belakangan menang)
- **Key saudara**: digabungkan setelah include (menimpa nilai yang disertakan)
- **Include bertingkat**: didukung hingga 10 level kedalaman
- **Path relatif**: diselesaikan relatif terhadap file yang menyertakan
- **Penanganan error**: error yang jelas untuk file yang hilang, parse error, dan include melingkar
</Accordion>
@ -494,16 +498,16 @@ Saat validasi gagal:
## Hot reload config
Gateway memantau `~/.openclaw/openclaw.json` dan menerapkan perubahan secara otomatis — tidak perlu mulai ulang manual untuk sebagian besar pengaturan.
Gateway memantau `~/.openclaw/openclaw.json` dan menerapkan perubahan secara otomatis — tidak perlu restart manual untuk sebagian besar pengaturan.
### Mode reload
| Mode | Perilaku |
| ---------------------- | -------------------------------------------------------------------------------------- |
| **`hybrid`** (default) | Menerapkan perubahan aman secara hot seketika. Secara otomatis memulai ulang untuk perubahan kritis. |
| **`hot`** | Hanya menerapkan perubahan aman secara hot. Mencatat peringatan saat perlu mulai ulang — Anda yang menanganinya. |
| **`restart`** | Memulai ulang Gateway pada setiap perubahan config, aman atau tidak. |
| **`off`** | Menonaktifkan pemantauan file. Perubahan berlaku pada mulai ulang manual berikutnya. |
| Mode | Perilaku |
| ---------------------- | --------------------------------------------------------------------------------------- |
| **`hybrid`** (default) | Menerapkan hot perubahan yang aman secara instan. Otomatis restart untuk yang kritis. |
| **`hot`** | Hanya menerapkan hot perubahan yang aman. Mencatat peringatan saat restart diperlukan — Anda yang menanganinya. |
| **`restart`** | Me-restart Gateway pada setiap perubahan config, aman atau tidak. |
| **`off`** | Menonaktifkan pemantauan file. Perubahan berlaku pada restart manual berikutnya. |
```json5
{
@ -513,60 +517,60 @@ Gateway memantau `~/.openclaw/openclaw.json` dan menerapkan perubahan secara oto
}
```
### Apa yang diterapkan secara hot vs apa yang perlu mulai ulang
### Apa yang diterapkan hot vs apa yang perlu restart
Sebagian besar field diterapkan secara hot tanpa downtime. Dalam mode `hybrid`, perubahan yang memerlukan mulai ulang ditangani secara otomatis.
Sebagian besar field diterapkan secara hot tanpa downtime. Dalam mode `hybrid`, perubahan yang memerlukan restart ditangani secara otomatis.
| Kategori | Fields | Perlu mulai ulang? |
| ------------------- | -------------------------------------------------------------------- | ------------------ |
| Channel | `channels.*`, `web` (WhatsApp) — semua channel bawaan dan extension | Tidak |
| Agen & model | `agent`, `agents`, `models`, `routing` | Tidak |
| Otomatisasi | `hooks`, `cron`, `agent.heartbeat` | Tidak |
| Sesi & pesan | `session`, `messages` | Tidak |
| Tool & media | `tools`, `browser`, `skills`, `audio`, `talk` | Tidak |
| UI & lain-lain | `ui`, `logging`, `identity`, `bindings` | Tidak |
| Server gateway | `gateway.*` (port, bind, auth, tailscale, TLS, HTTP) | **Ya** |
| Infrastruktur | `discovery`, `canvasHost`, `plugins` | **Ya** |
| Kategori | Field | Perlu restart? |
| ------------------- | -------------------------------------------------------------------- | -------------- |
| Channel | `channels.*`, `web` (WhatsApp) — semua channel bawaan dan ekstensi | Tidak |
| Agen & model | `agent`, `agents`, `models`, `routing` | Tidak |
| Otomatisasi | `hooks`, `cron`, `agent.heartbeat` | Tidak |
| Sesi & pesan | `session`, `messages` | Tidak |
| Alat & media | `tools`, `browser`, `skills`, `audio`, `talk` | Tidak |
| UI & lain-lain | `ui`, `logging`, `identity`, `bindings` | Tidak |
| Server gateway | `gateway.*` (port, bind, auth, tailscale, TLS, HTTP) | **Ya** |
| Infrastruktur | `discovery`, `canvasHost`, `plugins` | **Ya** |
<Note>
`gateway.reload` dan `gateway.remote` adalah pengecualian — mengubahnya **tidak** memicu mulai ulang.
`gateway.reload` dan `gateway.remote` adalah pengecualian — mengubahnya **tidak** memicu restart.
</Note>
## RPC config (pembaruan terprogram)
<Note>
RPC penulisan control-plane (`config.apply`, `config.patch`, `update.run`) dibatasi lajunya hingga **3 permintaan per 60 detik** per `deviceId+clientIp`. Saat dibatasi, RPC mengembalikan `UNAVAILABLE` dengan `retryAfterMs`.
RPC penulisan control-plane (`config.apply`, `config.patch`, `update.run`) dibatasi hingga **3 permintaan per 60 detik** per `deviceId+clientIp`. Saat dibatasi, RPC mengembalikan `UNAVAILABLE` dengan `retryAfterMs`.
</Note>
Alur aman/default:
- `config.schema.lookup`: periksa satu subtree config yang dicakup path dengan node
skema dangkal, metadata petunjuk yang cocok, dan ringkasan child langsung
- `config.schema.lookup`: periksa satu subtree config dengan cakupan path dengan node skema dangkal,
metadata petunjuk yang cocok, dan ringkasan turunan langsung
- `config.get`: ambil snapshot + hash saat ini
- `config.patch`: jalur pembaruan parsial yang disarankan
- `config.patch`: jalur pembaruan parsial yang disukai
- `config.apply`: hanya untuk penggantian config penuh
- `update.run`: pembaruan mandiri + mulai ulang eksplisit
- `update.run`: self-update + restart eksplisit
Saat Anda tidak mengganti seluruh config, utamakan `config.schema.lookup`
Jika Anda tidak mengganti seluruh config, utamakan `config.schema.lookup`
lalu `config.patch`.
<AccordionGroup>
<Accordion title="config.apply (ganti penuh)">
Memvalidasi + menulis seluruh config dan memulai ulang Gateway dalam satu langkah.
Memvalidasi + menulis config penuh dan me-restart Gateway dalam satu langkah.
<Warning>
`config.apply` mengganti **seluruh config**. Gunakan `config.patch` untuk pembaruan parsial, atau `openclaw config set` untuk key tunggal.
`config.apply` menggantikan **seluruh config**. Gunakan `config.patch` untuk pembaruan parsial, atau `openclaw config set` untuk key tunggal.
</Warning>
Parameter:
- `raw` (string) — payload JSON5 untuk seluruh config
- `baseHash` (opsional) — hash config dari `config.get` (wajib saat config sudah ada)
- `sessionKey` (opsional) — session key untuk ping bangun pasca-mulai-ulang
- `note` (opsional) — catatan untuk sentinel mulai ulang
- `restartDelayMs` (opsional) — penundaan sebelum mulai ulang (default 2000)
- `sessionKey` (opsional) — session key untuk ping bangun pasca-restart
- `note` (opsional) — catatan untuk sentinel restart
- `restartDelayMs` (opsional) — jeda sebelum restart (default 2000)
Permintaan mulai ulang digabungkan saat satu permintaan sudah tertunda/sedang berlangsung, dan cooldown 30 detik berlaku antar siklus mulai ulang.
Permintaan restart digabungkan saat satu restart sudah tertunda/sedang berlangsung, dan cooldown 30 detik berlaku di antara siklus restart.
```bash
openclaw gateway call config.get --params '{}' # capture payload.hash
@ -580,19 +584,19 @@ lalu `config.patch`.
</Accordion>
<Accordion title="config.patch (pembaruan parsial)">
Menggabungkan pembaruan parsial ke dalam config yang ada (semantik JSON merge patch):
Menggabungkan pembaruan parsial ke config yang ada (semantik JSON merge patch):
- Object digabungkan secara rekursif
- Objek digabungkan secara rekursif
- `null` menghapus key
- Array menggantikan
Parameter:
- `raw` (string) — JSON5 yang hanya berisi key yang diubah
- `raw` (string) — JSON5 hanya dengan key yang akan diubah
- `baseHash` (wajib) — hash config dari `config.get`
- `sessionKey`, `note`, `restartDelayMs` — sama seperti `config.apply`
Perilaku mulai ulang cocok dengan `config.apply`: mulai ulang tertunda yang digabungkan plus cooldown 30 detik antar siklus mulai ulang.
Perilaku restart sama dengan `config.apply`: restart tertunda digabungkan ditambah cooldown 30 detik di antara siklus restart.
```bash
openclaw gateway call config.patch --params '{
@ -604,14 +608,14 @@ lalu `config.patch`.
</Accordion>
</AccordionGroup>
## Environment variable
## Variabel lingkungan
OpenClaw membaca env vars dari parent process ditambah:
OpenClaw membaca env vars dari proses induk ditambah:
- `.env` dari current working directory (jika ada)
- `.env` dari direktori kerja saat ini (jika ada)
- `~/.openclaw/.env` (fallback global)
Kedua file tidak menimpa env vars yang sudah ada. Anda juga dapat menetapkan env vars inline dalam config:
Keduanya tidak menimpa env vars yang sudah ada. Anda juga dapat menetapkan env vars inline di config:
```json5
{
@ -623,7 +627,7 @@ Kedua file tidak menimpa env vars yang sudah ada. Anda juga dapat menetapkan env
```
<Accordion title="Impor env shell (opsional)">
Jika diaktifkan dan key yang diharapkan belum disetel, OpenClaw menjalankan login shell Anda dan hanya mengimpor key yang hilang:
Jika diaktifkan dan key yang diharapkan belum ditetapkan, OpenClaw menjalankan shell login Anda dan hanya mengimpor key yang hilang:
```json5
{
@ -633,11 +637,11 @@ Kedua file tidak menimpa env vars yang sudah ada. Anda juga dapat menetapkan env
}
```
Padanan env var: `OPENCLAW_LOAD_SHELL_ENV=1`
Setara env var: `OPENCLAW_LOAD_SHELL_ENV=1`
</Accordion>
<Accordion title="Substitusi env var dalam nilai config">
Referensikan env vars dalam nilai string config mana pun dengan `${VAR_NAME}`:
Referensikan env vars dalam nilai string config apa pun dengan `${VAR_NAME}`:
```json5
{
@ -649,15 +653,15 @@ Padanan env var: `OPENCLAW_LOAD_SHELL_ENV=1`
Aturan:
- Hanya nama huruf besar yang cocok: `[A-Z_][A-Z0-9_]*`
- Env var yang hilang/kosong memunculkan error saat waktu muat
- Escape dengan `$${VAR}` untuk output literal
- Variabel yang hilang/kosong memunculkan error saat waktu muat
- Escape dengan `$${VAR}` untuk keluaran literal
- Berfungsi di dalam file `$include`
- Substitusi inline: `"${BASE}/v1"``"https://api.example.com/v1"`
</Accordion>
<Accordion title="Secret refs (env, file, exec)">
Untuk field yang mendukung object SecretRef, Anda dapat menggunakan:
<Accordion title="Referensi rahasia (env, file, exec)">
Untuk field yang mendukung objek SecretRef, Anda dapat menggunakan:
```json5
{
@ -689,16 +693,16 @@ Aturan:
}
```
Detail SecretRef (termasuk `secrets.providers` untuk `env`/`file`/`exec`) ada di [Manajemen Secret](/gateway/secrets).
Path kredensial yang didukung tercantum di [Permukaan Kredensial SecretRef](/reference/secretref-credential-surface).
Detail SecretRef (termasuk `secrets.providers` untuk `env`/`file`/`exec`) ada di [Secrets Management](/id/gateway/secrets).
Path kredensial yang didukung tercantum di [SecretRef Credential Surface](/id/reference/secretref-credential-surface).
</Accordion>
Lihat [Environment](/help/environment) untuk prioritas dan sumber lengkap.
Lihat [Environment](/id/help/environment) untuk prioritas dan sumber lengkap.
## Referensi lengkap
Untuk referensi lengkap per field, lihat **[Referensi Konfigurasi](/gateway/configuration-reference)**.
Untuk referensi lengkap per field, lihat **[Configuration Reference](/id/gateway/configuration-reference)**.
---
_Terkait: [Contoh Konfigurasi](/gateway/configuration-examples) · [Referensi Konfigurasi](/gateway/configuration-reference) · [Doctor](/gateway/doctor)_
_Terkait: [Configuration Examples](/id/gateway/configuration-examples) · [Configuration Reference](/id/gateway/configuration-reference) · [Doctor](/id/gateway/doctor)_

View File

@ -0,0 +1,370 @@
---
read_when:
- Anda menginginkan pengetahuan persisten melampaui catatan MEMORY.md biasa
- Anda sedang mengonfigurasi plugin memory-wiki bawaan
- Anda ingin memahami wiki_search, wiki_get, atau mode bridge
summary: 'memory-wiki: brankas pengetahuan terkompilasi dengan provenance, klaim, dasbor, dan mode bridge'
title: Memory Wiki
x-i18n:
generated_at: "2026-04-08T06:01:18Z"
model: gpt-5.4
provider: openai
source_hash: b78dd6a4ef4451dae6b53197bf0c7c2a2ba846b08e4a3a93c1026366b1598d82
source_path: plugins/memory-wiki.md
workflow: 15
---
# Memory Wiki
`memory-wiki` adalah plugin bawaan yang mengubah memori tahan lama menjadi
brankas pengetahuan terkompilasi.
Plugin ini **tidak** menggantikan plugin memori aktif. Plugin memori aktif tetap
mengelola recall, promotion, indexing, dan dreaming. `memory-wiki` berada di
sampingnya dan mengompilasi pengetahuan tahan lama menjadi wiki yang dapat
dinavigasi dengan halaman deterministik, klaim terstruktur, provenance, dasbor,
dan digest yang dapat dibaca mesin.
Gunakan ini ketika Anda ingin memori berperilaku lebih seperti lapisan
pengetahuan yang dipelihara dan lebih sedikit seperti tumpukan file Markdown.
## Yang ditambahkan
- Brankas wiki khusus dengan tata letak halaman deterministik
- Metadata klaim dan bukti yang terstruktur, bukan sekadar prosa
- Provenance, confidence, contradiction, dan open question pada tingkat halaman
- Digest terkompilasi untuk konsumen agent/runtime
- Tool wiki-native untuk search/get/apply/lint
- Mode bridge opsional yang mengimpor artifact publik dari plugin memori aktif
- Mode render yang ramah Obsidian dan integrasi CLI opsional
## Bagaimana ini sesuai dengan memori
Anggap pembagiannya seperti ini:
| Lapisan | Mengelola |
| ------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
| Plugin memori aktif (`memory-core`, QMD, Honcho, dll.) | Recall, semantic search, promotion, dreaming, runtime memori |
| `memory-wiki` | Halaman wiki terkompilasi, sintesis kaya provenance, dasbor, wiki-specific search/get/apply |
Jika plugin memori aktif mengekspos artifact recall bersama, OpenClaw dapat
mencari di kedua lapisan dalam satu lintasan dengan `memory_search corpus=all`.
Saat Anda membutuhkan ranking, provenance, atau akses halaman langsung yang
khusus wiki, gunakan tool wiki-native sebagai gantinya.
## Mode brankas
`memory-wiki` mendukung tiga mode brankas:
### `isolated`
Brankas sendiri, sumber sendiri, tanpa ketergantungan pada `memory-core`.
Gunakan ini ketika Anda ingin wiki menjadi penyimpanan pengetahuan terkurasi
miliknya sendiri.
### `bridge`
Membaca artifact memori publik dan event memori dari plugin memori aktif
melalui seam SDK plugin publik.
Gunakan ini ketika Anda ingin wiki mengompilasi dan mengatur artifact yang
diekspor plugin memori tanpa menjangkau internal plugin privat.
Mode bridge dapat mengindeks:
- artifact memori yang diekspor
- laporan dream
- catatan harian
- file root memori
- log event memori
### `unsafe-local`
Escape hatch eksplisit pada mesin yang sama untuk path privat lokal.
Mode ini sengaja bersifat eksperimental dan tidak portabel. Gunakan hanya
ketika Anda memahami trust boundary dan secara khusus memerlukan akses sistem
berkas lokal yang tidak dapat disediakan oleh mode bridge.
## Tata letak brankas
Plugin menginisialisasi brankas seperti ini:
```text
<vault>/
AGENTS.md
WIKI.md
index.md
inbox.md
entities/
concepts/
syntheses/
sources/
reports/
_attachments/
_views/
.openclaw-wiki/
```
Konten terkelola tetap berada di dalam blok yang dihasilkan. Blok catatan
manusia dipertahankan.
Kelompok halaman utama adalah:
- `sources/` untuk bahan mentah yang diimpor dan halaman yang didukung bridge
- `entities/` untuk hal, orang, sistem, proyek, dan objek yang tahan lama
- `concepts/` untuk ide, abstraksi, pola, dan kebijakan
- `syntheses/` untuk ringkasan terkompilasi dan rollup yang dipelihara
- `reports/` untuk dasbor yang dihasilkan
## Klaim dan bukti terstruktur
Halaman dapat membawa frontmatter `claims` terstruktur, bukan hanya teks bebas.
Setiap klaim dapat mencakup:
- `id`
- `text`
- `status`
- `confidence`
- `evidence[]`
- `updatedAt`
Entri bukti dapat mencakup:
- `sourceId`
- `path`
- `lines`
- `weight`
- `note`
- `updatedAt`
Inilah yang membuat wiki bertindak lebih seperti lapisan keyakinan daripada
sekadar tumpukan catatan pasif. Klaim dapat dilacak, diberi skor,
dipersengketakan, dan diselesaikan kembali ke sumber.
## Pipeline compile
Langkah compile membaca halaman wiki, menormalkan ringkasan, dan menghasilkan
artifact stabil yang menghadap mesin di bawah:
- `.openclaw-wiki/cache/agent-digest.json`
- `.openclaw-wiki/cache/claims.jsonl`
Digest ini ada agar agent dan kode runtime tidak perlu mengikis halaman
Markdown.
Output terkompilasi juga mendukung:
- pengindeksan wiki lintasan pertama untuk alur search/get
- lookup claim-id kembali ke halaman pemiliknya
- suplemen prompt yang ringkas
- pembuatan laporan/dasbor
## Dasbor dan laporan kesehatan
Saat `render.createDashboards` diaktifkan, compile memelihara dasbor di bawah
`reports/`.
Laporan bawaan mencakup:
- `reports/open-questions.md`
- `reports/contradictions.md`
- `reports/low-confidence.md`
- `reports/claim-health.md`
- `reports/stale-pages.md`
Laporan ini melacak hal-hal seperti:
- cluster catatan contradiction
- cluster klaim yang saling bersaing
- klaim yang tidak memiliki bukti terstruktur
- halaman dan klaim dengan confidence rendah
- kesegaran basi atau tidak diketahui
- halaman dengan pertanyaan yang belum terselesaikan
## Pencarian dan pengambilan
`memory-wiki` mendukung dua backend pencarian:
- `shared`: gunakan alur pencarian memori bersama jika tersedia
- `local`: cari wiki secara lokal
Plugin ini juga mendukung tiga corpus:
- `wiki`
- `memory`
- `all`
Perilaku penting:
- `wiki_search` dan `wiki_get` menggunakan digest terkompilasi sebagai lintasan
pertama jika memungkinkan
- id klaim dapat diselesaikan kembali ke halaman pemiliknya
- klaim contested/stale/fresh memengaruhi ranking
- label provenance dapat dipertahankan hingga ke hasil
Aturan praktis:
- gunakan `memory_search corpus=all` untuk satu lintasan recall yang luas
- gunakan `wiki_search` + `wiki_get` ketika Anda peduli pada ranking khusus
wiki, provenance, atau struktur keyakinan tingkat halaman
## Tool agent
Plugin mendaftarkan tool berikut:
- `wiki_status`
- `wiki_search`
- `wiki_get`
- `wiki_apply`
- `wiki_lint`
Fungsinya:
- `wiki_status`: mode brankas saat ini, kesehatan, ketersediaan CLI Obsidian
- `wiki_search`: mencari halaman wiki dan, saat dikonfigurasi, corpus memori bersama
- `wiki_get`: membaca halaman wiki berdasarkan id/path atau fallback ke corpus memori bersama
- `wiki_apply`: mutasi sintesis/metadata sempit tanpa operasi bebas pada halaman
- `wiki_lint`: pemeriksaan struktural, celah provenance, contradiction, open question
Plugin ini juga mendaftarkan suplemen corpus memori non-eksklusif, sehingga
`memory_search` dan `memory_get` bersama dapat menjangkau wiki saat plugin
memori aktif mendukung pemilihan corpus.
## Perilaku prompt dan konteks
Saat `context.includeCompiledDigestPrompt` diaktifkan, bagian prompt memori
menambahkan snapshot terkompilasi yang ringkas dari `agent-digest.json`.
Snapshot itu sengaja kecil dan bernilai sinyal tinggi:
- hanya halaman teratas
- hanya klaim teratas
- jumlah contradiction
- jumlah pertanyaan
- qualifier confidence/freshness
Ini bersifat opt-in karena mengubah bentuk prompt dan terutama berguna untuk
engine konteks atau perakitan prompt lama yang secara eksplisit mengonsumsi
suplemen memori.
## Konfigurasi
Tempatkan konfigurasi di bawah `plugins.entries.memory-wiki.config`:
```json5
{
plugins: {
entries: {
"memory-wiki": {
enabled: true,
config: {
vaultMode: "isolated",
vault: {
path: "~/.openclaw/wiki/main",
renderMode: "obsidian",
},
obsidian: {
enabled: true,
useOfficialCli: true,
vaultName: "OpenClaw Wiki",
openAfterWrites: false,
},
bridge: {
enabled: false,
readMemoryArtifacts: true,
indexDreamReports: true,
indexDailyNotes: true,
indexMemoryRoot: true,
followMemoryEvents: true,
},
ingest: {
autoCompile: true,
maxConcurrentJobs: 1,
allowUrlIngest: true,
},
search: {
backend: "shared",
corpus: "wiki",
},
context: {
includeCompiledDigestPrompt: false,
},
render: {
preserveHumanBlocks: true,
createBacklinks: true,
createDashboards: true,
},
},
},
},
},
}
```
Toggle utama:
- `vaultMode`: `isolated`, `bridge`, `unsafe-local`
- `vault.renderMode`: `native` atau `obsidian`
- `bridge.readMemoryArtifacts`: impor artifact publik plugin memori aktif
- `bridge.followMemoryEvents`: sertakan log event dalam mode bridge
- `search.backend`: `shared` atau `local`
- `search.corpus`: `wiki`, `memory`, atau `all`
- `context.includeCompiledDigestPrompt`: tambahkan snapshot digest ringkas ke bagian prompt memori
- `render.createBacklinks`: hasilkan blok terkait yang deterministik
- `render.createDashboards`: hasilkan halaman dasbor
## CLI
`memory-wiki` juga mengekspos permukaan CLI tingkat atas:
```bash
openclaw wiki status
openclaw wiki doctor
openclaw wiki init
openclaw wiki ingest ./notes/alpha.md
openclaw wiki compile
openclaw wiki lint
openclaw wiki search "alpha"
openclaw wiki get entity.alpha
openclaw wiki apply synthesis "Alpha Summary" --body "..." --source-id source.alpha
openclaw wiki bridge import
openclaw wiki obsidian status
```
Lihat [CLI: wiki](/cli/wiki) untuk referensi perintah lengkap.
## Dukungan Obsidian
Saat `vault.renderMode` adalah `obsidian`, plugin menulis Markdown yang ramah
Obsidian dan dapat secara opsional menggunakan CLI `obsidian` resmi.
Alur kerja yang didukung mencakup:
- probe status
- pencarian brankas
- membuka halaman
- memanggil perintah Obsidian
- melompat ke catatan harian
Ini bersifat opsional. Wiki tetap berfungsi dalam mode native tanpa Obsidian.
## Alur kerja yang direkomendasikan
1. Pertahankan plugin memori aktif Anda untuk recall/promotion/dreaming.
2. Aktifkan `memory-wiki`.
3. Mulailah dengan mode `isolated` kecuali Anda secara eksplisit menginginkan mode bridge.
4. Gunakan `wiki_search` / `wiki_get` saat provenance penting.
5. Gunakan `wiki_apply` untuk sintesis sempit atau pembaruan metadata.
6. Jalankan `wiki_lint` setelah perubahan yang bermakna.
7. Aktifkan dasbor jika Anda menginginkan visibilitas stale/contradiction.
## Dokumen terkait
- [Ikhtisar Memori](/id/concepts/memory)
- [CLI: memory](/cli/memory)
- [CLI: wiki](/cli/wiki)
- [Ikhtisar SDK Plugin](/id/plugins/sdk-overview)

View File

@ -1,14 +1,14 @@
---
read_when:
- Anda menginginkan model GLM di OpenClaw
- Anda ingin model GLM di OpenClaw
- Anda memerlukan konvensi penamaan model dan penyiapannya
summary: Ikhtisar keluarga model GLM + cara menggunakannya di OpenClaw
title: Model GLM
x-i18n:
generated_at: "2026-04-05T14:03:20Z"
generated_at: "2026-04-08T06:00:59Z"
model: gpt-5.4
provider: openai
source_hash: 59622edab5094d991987f9788fbf08b33325e737e7ff88632b0c3ac89412d4c7
source_hash: 79a55acfa139847b4b85dbc09f1068cbd2febb1e49f984a23ea9e3b43bc910eb
source_path: providers/glm.md
workflow: 15
---
@ -21,7 +21,7 @@ GLM diakses melalui provider `zai` dan ID model seperti `zai/glm-5`.
## Penyiapan CLI
```bash
# Penyiapan API key generik dengan deteksi endpoint otomatis
# Penyiapan kunci API generik dengan deteksi endpoint otomatis
openclaw onboard --auth-choice zai-api-key
# Coding Plan Global, direkomendasikan untuk pengguna Coding Plan
@ -42,17 +42,17 @@ openclaw onboard --auth-choice zai-cn
```json5
{
env: { ZAI_API_KEY: "sk-..." },
agents: { defaults: { model: { primary: "zai/glm-5" } } },
agents: { defaults: { model: { primary: "zai/glm-5.1" } } },
}
```
`zai-api-key` memungkinkan OpenClaw mendeteksi endpoint Z.AI yang cocok dari key tersebut dan
menerapkan base URL yang benar secara otomatis. Gunakan pilihan regional eksplisit saat
Anda ingin memaksa permukaan Coding Plan atau API umum tertentu.
`zai-api-key` memungkinkan OpenClaw mendeteksi endpoint Z.AI yang cocok dari kunci tersebut dan
menerapkan base URL yang benar secara otomatis. Gunakan pilihan regional eksplisit jika
Anda ingin memaksakan Coding Plan tertentu atau permukaan API umum tertentu.
## Model GLM bawaan saat ini
OpenClaw saat ini mengisi provider `zai` bawaan dengan referensi GLM berikut:
OpenClaw saat ini menginisialisasi provider `zai` bawaan dengan referensi GLM berikut:
- `glm-5.1`
- `glm-5`
@ -71,5 +71,5 @@ OpenClaw saat ini mengisi provider `zai` bawaan dengan referensi GLM berikut:
## Catatan
- Versi dan ketersediaan GLM dapat berubah; periksa dokumentasi Z.AI untuk yang terbaru.
- Referensi model bawaan default adalah `zai/glm-5`.
- Untuk detail provider, lihat [/providers/zai](/providers/zai).
- Referensi model bawaan default adalah `zai/glm-5.1`.
- Untuk detail provider, lihat [/providers/zai](/id/providers/zai).

View File

@ -1,55 +1,55 @@
---
read_when:
- Anda ingin menggunakan model Z.AI / GLM di OpenClaw
- Anda memerlukan penyiapan sederhana ZAI_API_KEY
- Anda ingin menggunakan Z.AI / model GLM di OpenClaw
- Anda memerlukan penyiapan `ZAI_API_KEY` yang sederhana
summary: Gunakan Z.AI (model GLM) dengan OpenClaw
title: Z.AI
x-i18n:
generated_at: "2026-04-05T14:04:25Z"
generated_at: "2026-04-08T06:01:07Z"
model: gpt-5.4
provider: openai
source_hash: 48006cdd580484f0c62e2877b27a6a68d7bc44795b3e97a28213d95182d9acf9
source_hash: 66cbd9813ee28d202dcae34debab1b0cf9927793acb00743c1c62b48d9e381f9
source_path: providers/zai.md
workflow: 15
---
# Z.AI
Z.AI adalah platform API untuk model **GLM**. Platform ini menyediakan REST API untuk GLM dan menggunakan API key
untuk autentikasi. Buat API key Anda di konsol Z.AI. OpenClaw menggunakan provider `zai`
dengan API key Z.AI.
Z.AI adalah platform API untuk model **GLM**. Platform ini menyediakan REST API untuk GLM dan menggunakan kunci API
untuk autentikasi. Buat kunci API Anda di konsol Z.AI. OpenClaw menggunakan provider `zai`
dengan kunci API Z.AI.
## Penyiapan CLI
```bash
# Penyiapan API key umum dengan deteksi endpoint otomatis
# Penyiapan kunci API generik dengan deteksi otomatis endpoint
openclaw onboard --auth-choice zai-api-key
# Coding Plan Global, direkomendasikan untuk pengguna Coding Plan
openclaw onboard --auth-choice zai-coding-global
# Coding Plan CN (region China), direkomendasikan untuk pengguna Coding Plan
# Coding Plan CN (wilayah Tiongkok), direkomendasikan untuk pengguna Coding Plan
openclaw onboard --auth-choice zai-coding-cn
# API umum
openclaw onboard --auth-choice zai-global
# API umum CN (region China)
# API umum CN (wilayah Tiongkok)
openclaw onboard --auth-choice zai-cn
```
## Cuplikan config
## Cuplikan konfigurasi
```json5
{
env: { ZAI_API_KEY: "sk-..." },
agents: { defaults: { model: { primary: "zai/glm-5" } } },
agents: { defaults: { model: { primary: "zai/glm-5.1" } } },
}
```
`zai-api-key` memungkinkan OpenClaw mendeteksi endpoint Z.AI yang cocok dari key tersebut dan
menerapkan base URL yang benar secara otomatis. Gunakan pilihan regional eksplisit ketika
Anda ingin memaksa permukaan Coding Plan atau API umum tertentu.
`zai-api-key` memungkinkan OpenClaw mendeteksi endpoint Z.AI yang cocok dari kunci tersebut dan
menerapkan URL dasar yang benar secara otomatis. Gunakan pilihan regional yang eksplisit saat
Anda ingin memaksakan permukaan Coding Plan atau API umum tertentu.
## Katalog GLM bawaan
@ -72,11 +72,11 @@ Saat ini OpenClaw mengisi provider `zai` bawaan dengan:
## Catatan
- Model GLM tersedia sebagai `zai/<model>` (contoh: `zai/glm-5`).
- Referensi model bawaan default: `zai/glm-5`
- ID `glm-5*` yang tidak dikenal tetap di-resolve ke depan pada jalur provider bawaan dengan
mensintesis metadata milik provider dari template `glm-4.7` ketika ID tersebut
- Referensi model bawaan default: `zai/glm-5.1`
- ID `glm-5*` yang tidak dikenal tetap di-resolve secara forward pada jalur provider bawaan dengan
menyintesis metadata milik provider dari template `glm-4.7` saat ID tersebut
cocok dengan bentuk keluarga GLM-5 saat ini.
- `tool_stream` diaktifkan secara default untuk streaming tool-call Z.AI. Setel
- `tool_stream` diaktifkan secara default untuk streaming pemanggilan alat Z.AI. Setel
`agents.defaults.models["zai/<model>"].params.tool_stream` ke `false` untuk menonaktifkannya.
- Lihat [/providers/glm](/providers/glm) untuk gambaran umum keluarga model.
- Z.AI menggunakan auth Bearer dengan API key Anda.
- Lihat [/providers/glm](/id/providers/glm) untuk ikhtisar keluarga model.
- Z.AI menggunakan autentikasi Bearer dengan kunci API Anda.

View File

@ -1,9 +1,9 @@
---
x-i18n:
generated_at: "2026-04-08T02:17:41Z"
generated_at: "2026-04-08T06:01:43Z"
model: gpt-5.4
provider: openai
source_hash: 0e156cc8e2fe946a0423862f937754a7caa1fe7e6863b50a80bff49a1c86e1e8
source_hash: 4a9066b2a939c5a9ba69141d75405f0e8097997b523164340e2f0e9a0d5060dd
source_path: refactor/qa.md
workflow: 15
---
@ -14,39 +14,43 @@ Status: migrasi fondasional telah diterapkan.
## Tujuan
Pindahkan QA OpenClaw dari model definisi terpisah ke satu sumber kebenaran:
Memindahkan QA OpenClaw dari model definisi terpisah ke satu sumber kebenaran:
- metadata skenario
- prompt yang dikirim ke model
- setup dan teardown
- logika harness
- assertion dan kriteria keberhasilan
- asersi dan kriteria keberhasilan
- artefak dan petunjuk laporan
Keadaan akhir yang diinginkan adalah harness QA generik yang memuat file definisi skenario yang kuat alih-alih meng-hardcode sebagian besar perilaku di TypeScript.
## Kondisi Saat Ini
## Status Saat Ini
Sumber kebenaran utama sekarang berada di `qa/scenarios.md`.
Sumber kebenaran utama sekarang berada di `qa/scenarios/index.md` ditambah satu file per
skenario di bawah `qa/scenarios/*.md`.
Yang sudah diimplementasikan:
Yang sudah diterapkan:
- `qa/scenarios.md`
- paket QA kanonis
- `qa/scenarios/index.md`
- metadata paket QA kanonis
- identitas operator
- misi kickoff
- misi awal
- `qa/scenarios/*.md`
- satu file markdown per skenario
- metadata skenario
- binding handler
- konfigurasi eksekusi spesifik skenario
- `extensions/qa-lab/src/scenario-catalog.ts`
- parser paket markdown + validasi zod
- `extensions/qa-lab/src/qa-agent-bootstrap.ts`
- rendering rencana dari paket markdown
- `extensions/qa-lab/src/qa-agent-workspace.ts`
- menanam file kompatibilitas yang dihasilkan plus `QA_SCENARIOS.md`
- seed file kompatibilitas yang dihasilkan plus `QA_SCENARIOS.md`
- `extensions/qa-lab/src/suite.ts`
- memilih skenario yang dapat dieksekusi melalui binding handler yang didefinisikan di markdown
- Protokol bus QA + UI
- attachment inline generik untuk rendering image/video/audio/file
- protokol bus QA + UI
- lampiran inline generik untuk rendering gambar/video/audio/file
Permukaan terpisah yang masih tersisa:
@ -55,7 +59,7 @@ Permukaan terpisah yang masih tersisa:
- `extensions/qa-lab/src/report.ts`
- masih menurunkan struktur laporan dari output runtime
Jadi pemisahan sumber kebenaran sudah diperbaiki, tetapi eksekusi masih sebagian besar didukung handler, belum sepenuhnya deklaratif.
Jadi pembagian sumber kebenaran sudah diperbaiki, tetapi eksekusi masih sebagian besar didukung handler, bukan sepenuhnya deklaratif.
## Seperti Apa Permukaan Skenario Nyata
@ -67,55 +71,55 @@ Membaca suite saat ini menunjukkan beberapa kelas skenario yang berbeda.
- baseline DM
- tindak lanjut ber-thread
- pergantian model
- kelanjutan approval
- reaction/edit/delete
- tindak lanjut persetujuan
- reaksi/edit/hapus
### Mutasi config dan runtime
### Mutasi konfigurasi dan runtime
- menonaktifkan skill dengan patch config
- config apply restart wake-up
- penonaktifan skill lewat patch config
- apply config restart wake-up
- pembalikan kapabilitas saat restart config
- pemeriksaan drift inventaris runtime
### Assertion filesystem dan repo
### Asersi filesystem dan repo
- laporan penemuan source/docs
- laporan penemuan source/dokumen
- build Lobster Invaders
- pencarian artefak gambar yang dihasilkan
### Orkestrasi memori
- memory recall
- pemanggilan memori
- tool memori dalam konteks channel
- fallback kegagalan memori
- pemeringkatan memori sesi
- peringkat memori sesi
- isolasi memori thread
- memory dreaming sweep
### Integrasi tool dan plugin
- panggilan MCP plugin-tools
- panggilan plugin-tools MCP
- visibilitas skill
- hot install skill
- pembuatan gambar native
- image roundtrip
- pemahaman gambar dari attachment
- pemahaman gambar dari lampiran
### Multi-turn dan multi-aktor
- handoff subagent
- sintesis fanout subagent
- alur bergaya pemulihan restart
- handoff subagen
- sintesis fanout subagen
- alur bergaya pemulihan setelah restart
Kategori ini penting karena mendorong kebutuhan DSL. Daftar datar prompt + teks yang diharapkan saja tidak cukup.
Kategori-kategori ini penting karena mendorong kebutuhan DSL. Daftar datar berisi prompt + teks yang diharapkan saja tidak cukup.
## Arah
### Satu sumber kebenaran
Gunakan `qa/scenarios.md` sebagai sumber kebenaran yang ditulis.
Gunakan `qa/scenarios/index.md` ditambah `qa/scenarios/*.md` sebagai sumber kebenaran yang ditulis.
Paket tersebut harus tetap:
Paket harus tetap:
- mudah dibaca manusia dalam review
- dapat di-parse mesin
@ -126,21 +130,21 @@ Paket tersebut harus tetap:
- prompt docs/discovery
- pembuatan laporan
### Format penulisan yang disukai
### Format penulisan yang disarankan
Gunakan markdown sebagai format tingkat atas, dengan YAML terstruktur di dalamnya.
Bentuk yang direkomendasikan:
- YAML frontmatter
- frontmatter YAML
- id
- title
- surface
- tags
- refs docs
- refs code
- referensi dokumen
- referensi kode
- override model/provider
- prerequisite
- prasyarat
- bagian prosa
- objective
- notes
@ -157,7 +161,7 @@ Ini memberikan:
- konteks yang lebih kaya daripada YAML murni
- parsing ketat dan validasi zod
JSON mentah dapat diterima hanya sebagai bentuk perantara yang dihasilkan.
JSON mentah dapat diterima hanya sebagai bentuk hasil generate antara.
## Bentuk File Skenario yang Diusulkan
@ -232,11 +236,11 @@ Verify generated media is reattached on the follow-up turn.
```
````
## Kapabilitas Runner yang Harus Dicakup DSL
## Kemampuan Runner yang Harus Dicakup DSL
Berdasarkan suite saat ini, runner generik membutuhkan lebih dari sekadar eksekusi prompt.
Berdasarkan suite saat ini, runner generik memerlukan lebih dari sekadar eksekusi prompt.
### Action environment dan setup
### Tindakan environment dan setup
- `bus.reset`
- `gateway.waitHealthy`
@ -245,14 +249,14 @@ Berdasarkan suite saat ini, runner generik membutuhkan lebih dari sekadar ekseku
- `thread.create`
- `workspace.writeSkill`
### Action giliran agen
### Tindakan giliran agen
- `agent.send`
- `agent.wait`
- `bus.injectInbound`
- `bus.injectOutbound`
### Action config dan runtime
### Tindakan konfigurasi dan runtime
- `config.get`
- `config.patch`
@ -261,7 +265,7 @@ Berdasarkan suite saat ini, runner generik membutuhkan lebih dari sekadar ekseku
- `tools.effective`
- `skills.status`
### Action file dan artefak
### Tindakan file dan artefak
- `file.write`
- `file.read`
@ -270,7 +274,7 @@ Berdasarkan suite saat ini, runner generik membutuhkan lebih dari sekadar ekseku
- `artifact.captureGeneratedImage`
- `artifact.capturePath`
### Action memori dan cron
### Tindakan memori dan cron
- `memory.indexForce`
- `memory.searchCli`
@ -280,11 +284,11 @@ Berdasarkan suite saat ini, runner generik membutuhkan lebih dari sekadar ekseku
- `cron.waitCompletion`
- `sessionTranscript.write`
### Action MCP
### Tindakan MCP
- `mcp.callTool`
### Assertion
### Asersi
- `outbound.textIncludes`
- `outbound.inThread`
@ -306,17 +310,17 @@ DSL harus mendukung output yang disimpan dan referensi berikutnya.
Contoh dari suite saat ini:
- buat thread, lalu gunakan kembali `threadId`
- buat sesi, lalu gunakan kembali `sessionKey`
- hasilkan gambar, lalu lampirkan file pada giliran berikutnya
- hasilkan string wake marker, lalu assert bahwa string itu muncul nanti
- membuat thread, lalu menggunakan ulang `threadId`
- membuat sesi, lalu menggunakan ulang `sessionKey`
- menghasilkan gambar, lalu melampirkan file pada giliran berikutnya
- menghasilkan string penanda wake, lalu mengasertikan bahwa string itu muncul nanti
Kapabilitas yang dibutuhkan:
Kemampuan yang dibutuhkan:
- `saveAs`
- `${vars.name}`
- `${artifacts.name}`
- referensi bertipe untuk path, key sesi, ID thread, marker, output tool
- referensi bertipe untuk path, kunci sesi, id thread, penanda, output tool
Tanpa dukungan variabel, harness akan terus membocorkan logika skenario kembali ke TypeScript.
@ -324,22 +328,22 @@ Tanpa dukungan variabel, harness akan terus membocorkan logika skenario kembali
Runner deklaratif yang sepenuhnya murni tidak realistis pada fase 1.
Beberapa skenario memang secara inheren berat pada orkestrasi:
Beberapa skenario secara inheren berat pada orkestrasi:
- memory dreaming sweep
- config apply restart wake-up
- pembalikan kapabilitas saat restart config
- config restart capability flip
- resolusi artefak gambar yang dihasilkan berdasarkan timestamp/path
- evaluasi discovery-report
Untuk saat ini, skenario ini harus menggunakan handler kustom eksplisit.
Untuk saat ini, ini sebaiknya menggunakan handler kustom eksplisit.
Aturan yang direkomendasikan:
- 85-90% deklaratif
- `customHandler` steps eksplisit untuk sisa yang sulit
- hanya handler kustom yang bernama dan terdokumentasi
- tidak ada kode inline anonim dalam file skenario
- langkah `customHandler` eksplisit untuk sisa yang sulit
- hanya handler kustom bernama dan terdokumentasi
- tidak ada kode inline anonim di file skenario
Itu menjaga engine generik tetap bersih sambil tetap memungkinkan kemajuan.
@ -357,77 +361,78 @@ Markdown skenario sudah menjadi sumber kebenaran untuk:
Kompatibilitas yang dihasilkan:
- workspace yang ditanam masih menyertakan `QA_KICKOFF_TASK.md`
- workspace yang ditanam masih menyertakan `QA_SCENARIO_PLAN.md`
- workspace yang ditanam sekarang juga menyertakan `QA_SCENARIOS.md`
- workspace seeded masih menyertakan `QA_KICKOFF_TASK.md`
- workspace seeded masih menyertakan `QA_SCENARIO_PLAN.md`
- workspace seeded sekarang juga menyertakan `QA_SCENARIOS.md`
## Rencana Refaktor
### Fase 1: loader dan schema
### Fase 1: loader dan skema
Selesai.
- menambahkan `qa/scenarios.md`
- menambahkan `qa/scenarios/index.md`
- memisahkan skenario ke `qa/scenarios/*.md`
- menambahkan parser untuk konten paket YAML markdown bernama
- memvalidasi dengan zod
- mengalihkan consumer ke paket yang sudah di-parse
- menghapus `qa/seed-scenarios.json` dan `qa/QA_KICKOFF_TASK.md` tingkat repo
- mengganti konsumen ke paket yang telah di-parse
- menghapus `qa/seed-scenarios.json` dan `qa/QA_KICKOFF_TASK.md` di tingkat repo
### Fase 2: engine generik
- pecah `extensions/qa-lab/src/suite.ts` menjadi:
- memisahkan `extensions/qa-lab/src/suite.ts` menjadi:
- loader
- engine
- registry action
- registry assertion
- registry tindakan
- registry asersi
- handler kustom
- pertahankan fungsi helper yang ada sebagai operasi engine
- mempertahankan fungsi helper yang ada sebagai operasi engine
Hasil kerja:
- engine mengeksekusi skenario deklaratif sederhana
Mulai dengan skenario yang sebagian besar berupa prompt + wait + assert:
Mulai dengan skenario yang sebagian besar berupa prompt + tunggu + asersi:
- tindak lanjut ber-thread
- pemahaman gambar dari attachment
- pemahaman gambar dari lampiran
- visibilitas dan pemanggilan skill
- baseline channel
Hasil kerja:
- skenario nyata pertama yang didefinisikan di markdown dikirim melalui engine generik
- skenario pertama yang benar-benar didefinisikan dalam markdown dikirim melalui engine generik
### Fase 4: migrasikan skenario tingkat menengah
- image generation roundtrip
- tool memori dalam konteks channel
- pemeringkatan memori sesi
- handoff subagent
- sintesis fanout subagent
- peringkat memori sesi
- handoff subagen
- sintesis fanout subagen
Hasil kerja:
- variabel, artefak, assertion tool, assertion request-log terbukti berjalan
- variabel, artefak, asersi tool, dan asersi request-log terbukti berfungsi
### Fase 5: pertahankan skenario sulit pada handler kustom
### Fase 5: biarkan skenario sulit tetap memakai handler kustom
- memory dreaming sweep
- config apply restart wake-up
- pembalikan kapabilitas saat restart config
- runtime inventory drift
- config restart capability flip
- drift inventaris runtime
Hasil kerja:
- format penulisan yang sama, tetapi dengan blok custom-step eksplisit bila diperlukan
- format penulisan yang sama, tetapi dengan blok langkah kustom eksplisit saat diperlukan
### Fase 6: hapus peta skenario yang di-hardcode
### Fase 6: hapus map skenario yang di-hardcode
Setelah cakupan paket cukup baik:
- hapus sebagian besar percabangan TypeScript khusus skenario dari `extensions/qa-lab/src/suite.ts`
- hapus sebagian besar percabangan TypeScript spesifik skenario dari `extensions/qa-lab/src/suite.ts`
## Dukungan Fake Slack / Rich Media
## Slack Palsu / Dukungan Media Kaya
Bus QA saat ini berfokus pada teks.
@ -442,14 +447,14 @@ File yang relevan:
Saat ini bus QA mendukung:
- teks
- reaction
- reaksi
- thread
Bus ini belum memodelkan attachment media inline.
Bus ini belum memodelkan lampiran media inline.
### Kontrak transport yang dibutuhkan
Tambahkan model attachment bus QA generik:
Tambahkan model lampiran bus QA generik:
```ts
type QaBusAttachment = {
@ -474,61 +479,61 @@ Lalu tambahkan `attachments?: QaBusAttachment[]` ke:
- `QaBusInboundMessageInput`
- `QaBusOutboundMessageInput`
### Mengapa generik terlebih dahulu
### Mengapa generik dulu
Jangan membangun model media yang khusus Slack saja.
Jangan membangun model media khusus Slack.
Sebaliknya:
- satu model transport QA generik
- beberapa renderer di atasnya
- chat QA Lab saat ini
- web Slack palsu di masa depan
- fake Slack web di masa depan
- tampilan transport palsu lainnya
Ini mencegah logika duplikat dan memungkinkan skenario media tetap agnostik terhadap transport.
Ini mencegah duplikasi logika dan memungkinkan skenario media tetap agnostik terhadap transport.
### Pekerjaan UI yang dibutuhkan
Perbarui UI QA agar merender:
Perbarui UI QA untuk merender:
- pratinjau gambar inline
- pemutar audio inline
- pemutar video inline
- chip attachment file
- chip lampiran file
UI saat ini sudah dapat merender thread dan reaction, jadi rendering attachment seharusnya dapat dilapiskan ke model kartu pesan yang sama.
UI saat ini sudah dapat merender thread dan reaksi, jadi rendering lampiran seharusnya dapat dilapiskan ke model kartu pesan yang sama.
### Pekerjaan skenario yang dimungkinkan oleh transport media
Setelah attachment mengalir melalui bus QA, kita dapat menambahkan skenario fake-chat yang lebih kaya:
Setelah lampiran mengalir melalui bus QA, kita dapat menambahkan skenario fake-chat yang lebih kaya:
- balasan gambar inline di fake Slack
- pemahaman attachment audio
- pemahaman attachment video
- urutan attachment campuran
- balasan thread dengan media tetap dipertahankan
- pemahaman lampiran audio
- pemahaman lampiran video
- pengurutan lampiran campuran
- balasan thread dengan media yang dipertahankan
## Rekomendasi
Bagian implementasi berikutnya seharusnya adalah:
Bagian implementasi berikutnya sebaiknya adalah:
1. tambahkan loader skenario markdown + schema zod
2. hasilkan katalog saat ini dari markdown
3. migrasikan beberapa skenario sederhana terlebih dahulu
4. tambahkan dukungan attachment bus QA generik
5. render gambar inline di UI QA
6. lalu perluas ke audio dan video
1. menambahkan loader skenario markdown + skema zod
2. menghasilkan katalog saat ini dari markdown
3. memigrasikan beberapa skenario sederhana terlebih dahulu
4. menambahkan dukungan lampiran bus QA generik
5. merender gambar inline di UI QA
6. lalu memperluas ke audio dan video
Ini adalah jalur terkecil yang membuktikan kedua tujuan:
- QA generik yang didefinisikan di markdown
- permukaan messaging palsu yang lebih kaya
- QA generik yang didefinisikan dengan markdown
- permukaan pesan palsu yang lebih kaya
## Pertanyaan Terbuka
- apakah file skenario sebaiknya mengizinkan template prompt markdown tertanam dengan interpolasi variabel
- apakah setup/cleanup sebaiknya berupa bagian bernama atau hanya daftar action berurutan
- apakah referensi artefak sebaiknya bertipe kuat di schema atau berbasis string
- apakah handler kustom sebaiknya berada dalam satu registry atau registry per-surface
- apakah file kompatibilitas JSON yang dihasilkan sebaiknya tetap dicentang selama migrasi
- apakah file skenario sebaiknya mengizinkan templat prompt markdown tertanam dengan interpolasi variabel
- apakah setup/cleanup sebaiknya berupa bagian bernama atau hanya daftar tindakan berurutan
- apakah referensi artefak sebaiknya bertipe kuat di skema atau berbasis string
- apakah handler kustom sebaiknya berada dalam satu registry atau registry per permukaan
- apakah file kompatibilitas JSON yang dihasilkan sebaiknya tetap di-check-in selama migrasi

View File

@ -1,14 +1,14 @@
---
read_when:
- Menggunakan atau mengonfigurasi perintah chat
- Men-debug perutean atau izin perintah
- Men-debug perutean perintah atau izin
summary: 'Slash command: teks vs native, config, dan perintah yang didukung'
title: Slash Commands
x-i18n:
generated_at: "2026-04-06T03:13:07Z"
generated_at: "2026-04-08T06:02:13Z"
model: gpt-5.4
provider: openai
source_hash: 417e35b9ddd87f25f6c019111b55b741046ea11039dde89210948185ced5696d
source_hash: 4a7ee7f1a8012058279b9e632889b291d4e659e4ec81209ca8978afbb9ad4b96
source_path: tools/slash-commands.md
workflow: 15
---
@ -21,16 +21,16 @@ Perintah chat bash khusus host menggunakan `! <cmd>` (dengan `/bash <cmd>` sebag
Ada dua sistem yang terkait:
- **Perintah**: pesan mandiri `/...`.
- **Directive**: `/think`, `/fast`, `/verbose`, `/reasoning`, `/elevated`, `/exec`, `/model`, `/queue`.
- Directive dihapus dari pesan sebelum model melihatnya.
- Dalam pesan chat normal (bukan hanya directive), directive diperlakukan sebagai “petunjuk inline” dan **tidak** menyimpan setelan sesi.
- Dalam pesan yang hanya berisi directive (pesan hanya berisi directive), directive disimpan ke sesi dan membalas dengan pengakuan.
- Directive hanya diterapkan untuk **pengirim yang diotorisasi**. Jika `commands.allowFrom` disetel, itu adalah satu-satunya
allowlist yang digunakan; jika tidak, otorisasi berasal dari allowlist/pairing channel plus `commands.useAccessGroups`.
Pengirim yang tidak diotorisasi akan melihat directive diperlakukan sebagai teks biasa.
- **Direktif**: `/think`, `/fast`, `/verbose`, `/reasoning`, `/elevated`, `/exec`, `/model`, `/queue`.
- Direktif dihapus dari pesan sebelum model melihatnya.
- Dalam pesan chat normal (bukan hanya direktif), direktif diperlakukan sebagai “petunjuk inline” dan **tidak** menyimpan pengaturan sesi.
- Dalam pesan yang hanya berisi direktif (pesan hanya berisi direktif), direktif disimpan ke sesi dan membalas dengan pengakuan.
- Direktif hanya diterapkan untuk **pengirim yang diotorisasi**. Jika `commands.allowFrom` disetel, itu adalah satu-satunya
allowlist yang digunakan; jika tidak, otorisasi berasal dari allowlist/pairing kanal ditambah `commands.useAccessGroups`.
Pengirim yang tidak diotorisasi akan melihat direktif diperlakukan sebagai teks biasa.
Ada juga beberapa **pintasan inline** (hanya untuk pengirim yang di-allowlist/diotorisasi): `/help`, `/commands`, `/status`, `/whoami` (`/id`).
Pintasan ini langsung dijalankan, dihapus sebelum model melihat pesan, dan teks yang tersisa melanjutkan alur normal.
Ada juga beberapa **shortcut inline** (hanya untuk pengirim yang di-allowlist/diotorisasi): `/help`, `/commands`, `/status`, `/whoami` (`/id`).
Shortcut ini langsung dijalankan, dihapus sebelum model melihat pesan, dan sisa teks melanjutkan melalui alur normal.
## Config
@ -46,7 +46,10 @@ Pintasan ini langsung dijalankan, dihapus sebelum model melihat pesan, dan teks
mcp: false,
plugins: false,
debug: false,
restart: false,
restart: true,
ownerAllowFrom: ["discord:123456789012345678"],
ownerDisplay: "raw",
ownerDisplaySecret: "${OWNER_ID_HASH_SECRET}",
allowFrom: {
"*": ["user1"],
discord: ["user:123"],
@ -56,148 +59,183 @@ Pintasan ini langsung dijalankan, dihapus sebelum model melihat pesan, dan teks
}
```
- `commands.text` (default `true`) mengaktifkan parsing `/...` dalam pesan chat.
- Pada permukaan tanpa native command (WhatsApp/WebChat/Signal/iMessage/Google Chat/Microsoft Teams), perintah teks tetap berfungsi bahkan jika Anda menyetelnya ke `false`.
- `commands.native` (default `"auto"`) mendaftarkan native command.
- `commands.text` (default `true`) mengaktifkan parsing `/...` di pesan chat.
- Pada surface tanpa perintah native (WhatsApp/WebChat/Signal/iMessage/Google Chat/Microsoft Teams), perintah teks tetap berfungsi meskipun Anda menyetelnya ke `false`.
- `commands.native` (default `"auto"`) mendaftarkan perintah native.
- Auto: aktif untuk Discord/Telegram; nonaktif untuk Slack (sampai Anda menambahkan slash command); diabaikan untuk provider tanpa dukungan native.
- Setel `channels.discord.commands.native`, `channels.telegram.commands.native`, atau `channels.slack.commands.native` untuk override per provider (bool atau `"auto"`).
- `false` menghapus perintah yang sebelumnya terdaftar di Discord/Telegram saat startup. Perintah Slack dikelola di app Slack dan tidak dihapus secara otomatis.
- `false` menghapus perintah yang sebelumnya terdaftar di Discord/Telegram saat startup. Perintah Slack dikelola di aplikasi Slack dan tidak dihapus secara otomatis.
- `commands.nativeSkills` (default `"auto"`) mendaftarkan perintah **skill** secara native saat didukung.
- Auto: aktif untuk Discord/Telegram; nonaktif untuk Slack (Slack mengharuskan pembuatan satu slash command per skill).
- Auto: aktif untuk Discord/Telegram; nonaktif untuk Slack (Slack memerlukan pembuatan satu slash command per skill).
- Setel `channels.discord.commands.nativeSkills`, `channels.telegram.commands.nativeSkills`, atau `channels.slack.commands.nativeSkills` untuk override per provider (bool atau `"auto"`).
- `commands.bash` (default `false`) mengaktifkan `! <cmd>` untuk menjalankan perintah shell host (`/bash <cmd>` adalah alias; memerlukan allowlist `tools.elevated`).
- `commands.bashForegroundMs` (default `2000`) mengontrol berapa lama bash menunggu sebelum beralih ke mode background (`0` langsung ke background).
- `commands.bashForegroundMs` (default `2000`) mengontrol berapa lama bash menunggu sebelum beralih ke mode latar belakang (`0` langsung ke latar belakang).
- `commands.config` (default `false`) mengaktifkan `/config` (membaca/menulis `openclaw.json`).
- `commands.mcp` (default `false`) mengaktifkan `/mcp` (membaca/menulis config MCP yang dikelola OpenClaw di bawah `mcp.servers`).
- `commands.plugins` (default `false`) mengaktifkan `/plugins` (penemuan/status plugin plus kontrol install + enable/disable).
- `commands.debug` (default `false`) mengaktifkan `/debug` (override khusus runtime).
- `commands.plugins` (default `false`) mengaktifkan `/plugins` (penemuan/status plugin plus kontrol install + aktifkan/nonaktifkan).
- `commands.debug` (default `false`) mengaktifkan `/debug` (override hanya runtime).
- `commands.restart` (default `true`) mengaktifkan `/restart` plus aksi tool restart gateway.
- `commands.ownerAllowFrom` (opsional) menetapkan allowlist pemilik eksplisit untuk surface perintah/tool yang hanya untuk pemilik. Ini terpisah dari `commands.allowFrom`.
- `commands.ownerDisplay` mengontrol bagaimana ID pemilik muncul dalam system prompt: `raw` atau `hash`.
- `commands.ownerDisplaySecret` secara opsional menetapkan secret HMAC yang digunakan saat `commands.ownerDisplay="hash"`.
- `commands.allowFrom` (opsional) menetapkan allowlist per provider untuk otorisasi perintah. Saat dikonfigurasi, ini menjadi
satu-satunya sumber otorisasi untuk perintah dan directive (`commands.useAccessGroups`
dan allowlist/pairing channel diabaikan). Gunakan `"*"` untuk default global; kunci khusus provider menimpanya.
satu-satunya sumber otorisasi untuk perintah dan direktif (allowlist/pairing kanal dan `commands.useAccessGroups`
diabaikan). Gunakan `"*"` untuk default global; kunci spesifik provider menimpanya.
- `commands.useAccessGroups` (default `true`) menegakkan allowlist/kebijakan untuk perintah saat `commands.allowFrom` tidak disetel.
## Daftar perintah
Teks + native (saat diaktifkan):
Sumber kebenaran saat ini:
- `/help`
- `/commands`
- `/tools [compact|verbose]` (tampilkan apa yang dapat digunakan agent saat ini sekarang juga; `verbose` menambahkan deskripsi)
- `/skill <name> [input]` (jalankan skill berdasarkan nama)
- `/status` (tampilkan status saat ini; mencakup penggunaan/kuota provider untuk provider model saat ini bila tersedia)
- `/tasks` (daftarkan background task untuk sesi saat ini; menampilkan detail task aktif dan terbaru dengan hitungan fallback lokal agent)
- `/allowlist` (daftarkan/tambahkan/hapus entri allowlist)
- `/approve <id> <decision>` (selesaikan prompt persetujuan exec; gunakan pesan persetujuan tertunda untuk keputusan yang tersedia)
- `/context [list|detail|json]` (jelaskan “context”; `detail` menampilkan ukuran per-file + per-tool + per-skill + system prompt)
- `/btw <question>` (ajukan pertanyaan sampingan sementara tentang sesi saat ini tanpa mengubah konteks sesi di masa depan; lihat [/tools/btw](/id/tools/btw))
- `/export-session [path]` (alias: `/export`) (ekspor sesi saat ini ke HTML dengan system prompt lengkap)
- `/whoami` (tampilkan id pengirim Anda; alias: `/id`)
- `/session idle <duration|off>` (kelola auto-unfocus karena tidak aktif untuk thread binding yang difokuskan)
- `/session max-age <duration|off>` (kelola auto-unfocus hard max-age untuk thread binding yang difokuskan)
- `/subagents list|kill|log|info|send|steer|spawn` (inspeksi, kontrol, atau spawn run sub-agent untuk sesi saat ini)
- `/acp spawn|cancel|steer|close|status|set-mode|set|cwd|permissions|timeout|model|reset-options|doctor|install|sessions` (inspeksi dan kontrol sesi runtime ACP)
- `/agents` (daftar agent yang dibinding ke thread untuk sesi ini)
- `/focus <target>` (Discord: bind thread ini, atau thread baru, ke target sesi/subagent)
- `/unfocus` (Discord: hapus thread binding saat ini)
- `/kill <id|#|all>` (segera hentikan satu atau semua sub-agent yang sedang berjalan untuk sesi ini; tanpa pesan konfirmasi)
- `/steer <id|#> <message>` (arahkan sub-agent yang sedang berjalan segera: di dalam run bila memungkinkan, jika tidak hentikan pekerjaan saat ini dan mulai ulang dengan pesan pengarahan)
- `/tell <id|#> <message>` (alias untuk `/steer`)
- `/config show|get|set|unset` (persistenkan config ke disk, hanya pemilik; memerlukan `commands.config: true`)
- `/mcp show|get|set|unset` (kelola config server MCP OpenClaw, hanya pemilik; memerlukan `commands.mcp: true`)
- `/plugins list|show|get|install|enable|disable` (inspeksi plugin yang ditemukan, instal plugin baru, dan ubah status enable; hanya pemilik untuk penulisan; memerlukan `commands.plugins: true`)
- `/plugin` adalah alias untuk `/plugins`.
- `/plugin install <spec>` menerima spesifikasi plugin yang sama seperti `openclaw plugins install`: path/arsip lokal, package npm, atau `clawhub:<pkg>`.
- Penulisan enable/disable tetap membalas dengan petunjuk restart. Pada gateway foreground yang diawasi, OpenClaw mungkin melakukan restart itu secara otomatis tepat setelah penulisan.
- `/debug show|set|unset|reset` (override runtime, hanya pemilik; memerlukan `commands.debug: true`)
- `/usage off|tokens|full|cost` (footer penggunaan per respons atau ringkasan biaya lokal)
- `/tts off|always|inbound|tagged|status|provider|limit|summary|audio` (kontrol TTS; lihat [/tts](/id/tools/tts))
- Discord: native command adalah `/voice` (Discord mencadangkan `/tts`); teks `/tts` tetap berfungsi.
- `/stop`
- `/restart`
- `/dock-telegram` (alias: `/dock_telegram`) (alihkah balasan ke Telegram)
- `/dock-discord` (alias: `/dock_discord`) (alihkah balasan ke Discord)
- `/dock-slack` (alias: `/dock_slack`) (alihkah balasan ke Slack)
- `/activation mention|always` (khusus grup)
- `/send on|off|inherit` (hanya pemilik)
- `/reset` atau `/new [model]` (petunjuk model opsional; sisa pesan diteruskan)
- `/think <off|minimal|low|medium|high|xhigh>` (pilihan dinamis menurut model/provider; alias: `/thinking`, `/t`)
- `/fast status|on|off` (menghilangkan argumen akan menampilkan status mode cepat efektif saat ini)
- `/verbose on|full|off` (alias: `/v`)
- `/reasoning on|off|stream` (alias: `/reason`; saat aktif, mengirim pesan terpisah dengan prefiks `Reasoning:`; `stream` = hanya draf Telegram)
- `/elevated on|off|ask|full` (alias: `/elev`; `full` melewati persetujuan exec)
- `/exec host=<auto|sandbox|gateway|node> security=<deny|allowlist|full> ask=<off|on-miss|always> node=<id>` (kirim `/exec` untuk menampilkan status saat ini)
- `/model <name>` (alias: `/models`; atau `/<alias>` dari `agents.defaults.models.*.alias`)
- `/queue <mode>` (ditambah opsi seperti `debounce:2s cap:25 drop:summarize`; kirim `/queue` untuk melihat setelan saat ini)
- `/bash <command>` (khusus host; alias untuk `! <command>`; memerlukan `commands.bash: true` + allowlist `tools.elevated`)
- `/dreaming [on|off|status|help]` (aktifkan/nonaktifkan dreaming global atau tampilkan status; lihat [Dreaming](/concepts/dreaming))
- built-in inti berasal dari `src/auto-reply/commands-registry.shared.ts`
- dock command yang dihasilkan berasal dari `src/auto-reply/commands-registry.data.ts`
- perintah plugin berasal dari pemanggilan `registerCommand()` plugin
- ketersediaan aktual di gateway Anda tetap bergantung pada flag config, surface kanal, dan plugin yang terinstal/diaktifkan
Hanya teks:
### Perintah built-in inti
- `/compact [instructions]` (lihat [/concepts/compaction](/id/concepts/compaction))
- `! <command>` (khusus host; satu per satu; gunakan `!poll` + `!stop` untuk pekerjaan berjalan lama)
- `!poll` (periksa output / status; menerima `sessionId` opsional; `/bash poll` juga berfungsi)
- `!stop` (hentikan pekerjaan bash yang sedang berjalan; menerima `sessionId` opsional; `/bash stop` juga berfungsi)
Perintah built-in yang tersedia saat ini:
- `/new [model]` memulai sesi baru; `/reset` adalah alias reset.
- `/compact [instructions]` memadatkan konteks sesi. Lihat [/concepts/compaction](/id/concepts/compaction).
- `/stop` membatalkan run saat ini.
- `/session idle <duration|off>` dan `/session max-age <duration|off>` mengelola kedaluwarsa pengikatan thread.
- `/think <off|minimal|low|medium|high|xhigh>` menetapkan tingkat thinking. Alias: `/thinking`, `/t`.
- `/verbose on|off|full` mengaktifkan/menonaktifkan keluaran verbose. Alias: `/v`.
- `/fast [status|on|off]` menampilkan atau menetapkan mode cepat.
- `/reasoning [on|off|stream]` mengaktifkan/menonaktifkan visibilitas reasoning. Alias: `/reason`.
- `/elevated [on|off|ask|full]` mengaktifkan/menonaktifkan mode elevated. Alias: `/elev`.
- `/exec host=<auto|sandbox|gateway|node> security=<deny|allowlist|full> ask=<off|on-miss|always> node=<id>` menampilkan atau menetapkan default exec.
- `/model [name|#|status]` menampilkan atau menetapkan model.
- `/models [provider] [page] [limit=<n>|size=<n>|all]` mencantumkan provider atau model untuk sebuah provider.
- `/queue <mode>` mengelola perilaku antrean (`steer`, `interrupt`, `followup`, `collect`, `steer-backlog`) plus opsi seperti `debounce:2s cap:25 drop:summarize`.
- `/help` menampilkan ringkasan bantuan singkat.
- `/commands` menampilkan katalog perintah yang dihasilkan.
- `/tools [compact|verbose]` menampilkan apa yang dapat digunakan agen saat ini sekarang juga.
- `/status` menampilkan status runtime, termasuk penggunaan/kuota provider saat tersedia.
- `/tasks` mencantumkan tugas latar belakang aktif/terbaru untuk sesi saat ini.
- `/context [list|detail|json]` menjelaskan bagaimana konteks dirakit.
- `/export-session [path]` mengekspor sesi saat ini ke HTML. Alias: `/export`.
- `/whoami` menampilkan ID pengirim Anda. Alias: `/id`.
- `/skill <name> [input]` menjalankan skill berdasarkan nama.
- `/allowlist [list|add|remove] ...` mengelola entri allowlist. Hanya teks.
- `/approve <id> <decision>` menyelesaikan prompt persetujuan exec.
- `/btw <question>` mengajukan pertanyaan sampingan tanpa mengubah konteks sesi di masa depan. Lihat [/tools/btw](/id/tools/btw).
- `/subagents list|kill|log|info|send|steer|spawn` mengelola run sub-agent untuk sesi saat ini.
- `/acp spawn|cancel|steer|close|sessions|status|set-mode|set|cwd|permissions|timeout|model|reset-options|doctor|install|help` mengelola sesi ACP dan opsi runtime.
- `/focus <target>` mengikat thread Discord atau topik/percakapan Telegram saat ini ke target sesi.
- `/unfocus` menghapus pengikatan saat ini.
- `/agents` mencantumkan agen yang terikat ke thread untuk sesi saat ini.
- `/kill <id|#|all>` membatalkan satu atau semua sub-agent yang sedang berjalan.
- `/steer <id|#> <message>` mengirim steer ke sub-agent yang sedang berjalan. Alias: `/tell`.
- `/config show|get|set|unset` membaca atau menulis `openclaw.json`. Hanya pemilik. Memerlukan `commands.config: true`.
- `/mcp show|get|set|unset` membaca atau menulis config server MCP yang dikelola OpenClaw di bawah `mcp.servers`. Hanya pemilik. Memerlukan `commands.mcp: true`.
- `/plugins list|inspect|show|get|install|enable|disable` memeriksa atau mengubah status plugin. `/plugin` adalah alias. Penulisan hanya untuk pemilik. Memerlukan `commands.plugins: true`.
- `/debug show|set|unset|reset` mengelola override config hanya runtime. Hanya pemilik. Memerlukan `commands.debug: true`.
- `/usage off|tokens|full|cost` mengontrol footer penggunaan per respons atau mencetak ringkasan biaya lokal.
- `/tts on|off|status|provider|limit|summary|audio|help` mengontrol TTS. Lihat [/tools/tts](/id/tools/tts).
- `/restart` me-restart OpenClaw saat diaktifkan. Default: aktif; setel `commands.restart: false` untuk menonaktifkannya.
- `/activation mention|always` menetapkan mode aktivasi grup.
- `/send on|off|inherit` menetapkan kebijakan kirim. Hanya pemilik.
- `/bash <command>` menjalankan perintah shell host. Hanya teks. Alias: `! <command>`. Memerlukan `commands.bash: true` plus allowlist `tools.elevated`.
- `!poll [sessionId]` memeriksa job bash latar belakang.
- `!stop [sessionId]` menghentikan job bash latar belakang.
### Dock command yang dihasilkan
Dock command dihasilkan dari plugin kanal dengan dukungan perintah native. Set bundel saat ini:
- `/dock-discord` (alias: `/dock_discord`)
- `/dock-mattermost` (alias: `/dock_mattermost`)
- `/dock-slack` (alias: `/dock_slack`)
- `/dock-telegram` (alias: `/dock_telegram`)
### Perintah plugin bundel
Plugin bundel dapat menambahkan lebih banyak slash command. Perintah bundel saat ini di repo ini:
- `/dreaming [on|off|status|help]` mengaktifkan/menonaktifkan memory dreaming. Lihat [Dreaming](/id/concepts/dreaming).
- `/pair [qr|status|pending|approve|cleanup|notify]` mengelola alur pairing/penyiapan perangkat. Lihat [Pairing](/id/channels/pairing).
- `/phone status|arm <camera|screen|writes|all> [duration]|disarm` sementara mengaktifkan perintah node ponsel berisiko tinggi.
- `/voice status|list [limit]|set <voiceId|name>` mengelola config suara Talk. Di Discord, nama perintah native-nya adalah `/talkvoice`.
- `/card ...` mengirim preset rich card LINE. Lihat [LINE](/id/channels/line).
- Perintah khusus QQBot:
- `/bot-ping`
- `/bot-version`
- `/bot-help`
- `/bot-upgrade`
- `/bot-logs`
### Dynamic skill command
Skill yang dapat dipanggil pengguna juga diekspos sebagai slash command:
- `/skill <name> [input]` selalu berfungsi sebagai entrypoint generik.
- skill juga dapat muncul sebagai perintah langsung seperti `/prose` ketika skill/plugin mendaftarkannya.
- pendaftaran perintah skill native dikendalikan oleh `commands.nativeSkills` dan `channels.<provider>.commands.nativeSkills`.
Catatan:
- Perintah menerima `:` opsional antara perintah dan argumen (misalnya `/think: high`, `/send: on`, `/help:`).
- `/new <model>` menerima alias model, `provider/model`, atau nama provider (fuzzy match); jika tidak ada kecocokan, teks diperlakukan sebagai body pesan.
- Untuk rincian lengkap penggunaan provider, gunakan `openclaw status --usage`.
- `/allowlist add|remove` memerlukan `commands.config=true` dan menghormati `configWrites` channel.
- Dalam channel multi-akun, `/allowlist --account <id>` yang menargetkan config dan `/config set channels.<provider>.accounts.<id>...` juga menghormati `configWrites` akun target.
- Perintah menerima `:` opsional antara perintah dan argumen (misalnya, `/think: high`, `/send: on`, `/help:`).
- `/new <model>` menerima alias model, `provider/model`, atau nama provider (fuzzy match); jika tidak ada kecocokan, teks diperlakukan sebagai isi pesan.
- Untuk perincian lengkap penggunaan provider, gunakan `openclaw status --usage`.
- `/allowlist add|remove` memerlukan `commands.config=true` dan menghormati `configWrites` kanal.
- Pada kanal multi-akun, `/allowlist --account <id>` yang menargetkan config dan `/config set channels.<provider>.accounts.<id>...` juga menghormati `configWrites` akun target.
- `/usage` mengontrol footer penggunaan per respons; `/usage cost` mencetak ringkasan biaya lokal dari log sesi OpenClaw.
- `/restart` aktif secara default; setel `commands.restart: false` untuk menonaktifkannya.
- Native command khusus Discord: `/vc join|leave|status` mengontrol voice channel (memerlukan `channels.discord.voice` dan native command; tidak tersedia sebagai teks).
- Perintah Discord thread-binding (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age`) memerlukan thread binding efektif diaktifkan (`session.threadBindings.enabled` dan/atau `channels.discord.threadBindings.enabled`).
- `/restart` diaktifkan secara default; setel `commands.restart: false` untuk menonaktifkannya.
- `/plugins install <spec>` menerima spesifikasi plugin yang sama dengan `openclaw plugins install`: path/arsip lokal, paket npm, atau `clawhub:<pkg>`.
- `/plugins enable|disable` memperbarui config plugin dan mungkin meminta restart.
- Perintah native khusus Discord: `/vc join|leave|status` mengontrol kanal suara (memerlukan `channels.discord.voice` dan perintah native; tidak tersedia sebagai teks).
- Perintah pengikatan thread Discord (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age`) memerlukan pengikatan thread efektif diaktifkan (`session.threadBindings.enabled` dan/atau `channels.discord.threadBindings.enabled`).
- Referensi perintah ACP dan perilaku runtime: [ACP Agents](/id/tools/acp-agents).
- `/verbose` ditujukan untuk debugging dan visibilitas tambahan; biarkan **nonaktif** dalam penggunaan normal.
- `/fast on|off` menyimpan override sesi. Gunakan opsi `inherit` di UI Sessions untuk menghapusnya dan fallback ke default config.
- `/fast` bersifat khusus provider: OpenAI/OpenAI Codex memetakannya ke `service_tier=priority` pada endpoint Responses native, sedangkan permintaan Anthropic publik langsung, termasuk lalu lintas terautentikasi OAuth yang dikirim ke `api.anthropic.com`, memetakannya ke `service_tier=auto` atau `standard_only`. Lihat [OpenAI](/id/providers/openai) dan [Anthropic](/id/providers/anthropic).
- Ringkasan kegagalan tool tetap ditampilkan saat relevan, tetapi teks kegagalan rinci hanya disertakan saat `/verbose` bernilai `on` atau `full`.
- `/reasoning` (dan `/verbose`) berisiko dalam pengaturan grup: keduanya dapat mengungkap reasoning internal atau output tool yang tidak Anda maksudkan untuk ditampilkan. Sebaiknya biarkan nonaktif, terutama di chat grup.
- `/model` segera menyimpan model sesi baru.
- Jika agent sedang idle, run berikutnya langsung menggunakannya.
- Jika run sudah aktif, OpenClaw menandai live switch sebagai tertunda dan hanya memulai ulang ke model baru pada titik retry yang bersih.
- Jika aktivitas tool atau output balasan sudah dimulai, live switch tertunda dapat tetap antre sampai kesempatan retry berikutnya atau giliran pengguna berikutnya.
- **Jalur cepat:** pesan khusus perintah dari pengirim yang di-allowlist ditangani segera (melewati antrean + model).
- **Mention gating grup:** pesan khusus perintah dari pengirim yang di-allowlist melewati persyaratan mention.
- **Pintasan inline (hanya pengirim yang di-allowlist):** beberapa perintah juga berfungsi saat disematkan dalam pesan normal dan dihapus sebelum model melihat teks yang tersisa.
- Contoh: `hey /status` memicu balasan status, dan teks yang tersisa melanjutkan alur normal.
- `/verbose` dimaksudkan untuk debugging dan visibilitas tambahan; biarkan **off** dalam penggunaan normal.
- `/fast on|off` menyimpan override sesi. Gunakan opsi `inherit` di UI Sessions untuk menghapusnya dan kembali ke default config.
- `/fast` bersifat spesifik provider: OpenAI/OpenAI Codex memetakannya ke `service_tier=priority` pada endpoint Responses native, sedangkan permintaan Anthropic publik langsung, termasuk trafik terautentikasi OAuth yang dikirim ke `api.anthropic.com`, memetakannya ke `service_tier=auto` atau `standard_only`. Lihat [OpenAI](/id/providers/openai) dan [Anthropic](/id/providers/anthropic).
- Ringkasan kegagalan tool tetap ditampilkan saat relevan, tetapi teks kegagalan terperinci hanya disertakan saat `/verbose` bernilai `on` atau `full`.
- `/reasoning` (dan `/verbose`) berisiko dalam pengaturan grup: keduanya dapat mengungkap reasoning internal atau keluaran tool yang tidak ingin Anda tampilkan. Sebaiknya biarkan nonaktif, terutama di chat grup.
- `/model` langsung menyimpan model sesi yang baru.
- Jika agen sedang idle, run berikutnya langsung menggunakannya.
- Jika sebuah run sudah aktif, OpenClaw menandai perpindahan langsung sebagai tertunda dan hanya me-restart ke model baru pada titik retry yang bersih.
- Jika aktivitas tool atau keluaran balasan sudah dimulai, perpindahan yang tertunda dapat tetap antre sampai peluang retry berikutnya atau giliran pengguna berikutnya.
- **Jalur cepat:** pesan yang hanya berisi perintah dari pengirim yang di-allowlist ditangani langsung (melewati antrean + model).
- **Penyaringan mention grup:** pesan yang hanya berisi perintah dari pengirim yang di-allowlist melewati persyaratan mention.
- **Shortcut inline (hanya pengirim yang di-allowlist):** perintah tertentu juga berfungsi saat disematkan dalam pesan normal dan dihapus sebelum model melihat sisa teks.
- Contoh: `hey /status` memicu balasan status, dan sisa teks melanjutkan melalui alur normal.
- Saat ini: `/help`, `/commands`, `/status`, `/whoami` (`/id`).
- Pesan khusus perintah dari pengirim yang tidak diotorisasi diabaikan secara senyap, dan token inline `/...` diperlakukan sebagai teks biasa.
- **Perintah skill:** skill `user-invocable` diekspos sebagai slash command. Nama dibersihkan menjadi `a-z0-9_` (maks 32 karakter); bentrokan akan diberi sufiks numerik (misalnya `_2`).
- `/skill <name> [input]` menjalankan skill berdasarkan nama (berguna saat batas native command mencegah perintah per skill).
- Secara default, perintah skill diteruskan ke model sebagai permintaan normal.
- Pesan yang hanya berisi perintah dari pengirim tidak sah diabaikan secara diam-diam, dan token `/...` inline diperlakukan sebagai teks biasa.
- **Skill command:** skill `user-invocable` diekspos sebagai slash command. Nama disanitasi menjadi `a-z0-9_` (maks 32 karakter); tabrakan mendapat sufiks numerik (misalnya, `_2`).
- `/skill <name> [input]` menjalankan skill berdasarkan nama (berguna saat batas perintah native mencegah per-skill command).
- Secara default, skill command diteruskan ke model sebagai permintaan normal.
- Skill secara opsional dapat mendeklarasikan `command-dispatch: tool` untuk merutekan perintah langsung ke tool (deterministik, tanpa model).
- Contoh: `/prose` (plugin OpenProse) — lihat [OpenProse](/id/prose).
- **Argumen native command:** Discord menggunakan autocomplete untuk opsi dinamis (dan menu tombol saat Anda menghilangkan argumen wajib). Telegram dan Slack menampilkan menu tombol saat sebuah perintah mendukung pilihan dan Anda menghilangkan argumen.
- **Argumen perintah native:** Discord menggunakan autocomplete untuk opsi dinamis (dan menu tombol saat Anda menghilangkan argumen wajib). Telegram dan Slack menampilkan menu tombol saat perintah mendukung pilihan dan Anda menghilangkan argumen.
## `/tools`
`/tools` menjawab pertanyaan runtime, bukan pertanyaan config: **apa yang dapat digunakan agent ini saat ini dalam
percakapan ini**.
`/tools` menjawab pertanyaan runtime, bukan pertanyaan config: **apa yang dapat digunakan agen ini sekarang
dalam percakapan ini**.
- Default `/tools` ringkas dan dioptimalkan untuk pemindaian cepat.
- `/tools verbose` menambahkan deskripsi singkat.
- Permukaan native command yang mendukung argumen mengekspos sakelar mode yang sama seperti `compact|verbose`.
- Hasil dibatasi ke sesi, sehingga mengubah agent, channel, thread, otorisasi pengirim, atau model dapat
mengubah output.
- Surface perintah native yang mendukung argumen mengekspos sakelar mode yang sama seperti `compact|verbose`.
- Hasil bersifat cakupan sesi, jadi mengganti agen, kanal, thread, otorisasi pengirim, atau model dapat
mengubah keluarannya.
- `/tools` mencakup tool yang benar-benar dapat dijangkau saat runtime, termasuk tool inti, tool plugin
yang terhubung, dan tool milik channel.
yang terhubung, dan tool milik kanal.
Untuk pengeditan profil dan override, gunakan panel Tools di Control UI atau permukaan config/katalog
Untuk mengedit profil dan override, gunakan panel Tools di UI kontrol atau surface config/katalog
alih-alih memperlakukan `/tools` sebagai katalog statis.
## Permukaan penggunaan (apa yang tampil di mana)
## Surface penggunaan (apa yang muncul di mana)
- **Penggunaan/kuota provider** (contoh: “Claude 80% tersisa”) muncul di `/status` untuk provider model saat ini ketika pelacakan penggunaan diaktifkan. OpenClaw menormalkan jendela provider menjadi `% tersisa`; untuk MiniMax, field persentase remaining-only dibalik sebelum ditampilkan, dan respons `model_remains` mengutamakan entri chat-model ditambah label paket bertag model.
- **Baris token/cache** di `/status` dapat fallback ke entri penggunaan transkrip terbaru saat snapshot sesi live jarang. Nilai live bukan nol yang ada tetap diutamakan, dan fallback transkrip juga dapat memulihkan label model runtime aktif plus total yang lebih besar berorientasi prompt saat total tersimpan hilang atau lebih kecil.
- **Penggunaan/kuota provider** (contoh: “Claude 80% left”) muncul di `/status` untuk provider model saat ini ketika pelacakan penggunaan diaktifkan. OpenClaw menormalkan jendela provider ke `% left`; untuk MiniMax, field persentase sisa-saja dibalik sebelum ditampilkan, dan respons `model_remains` mengutamakan entri model chat plus label paket bertag model.
- **Baris token/cache** di `/status` dapat fallback ke entri penggunaan transkrip terbaru saat snapshot sesi live jarang. Nilai live nonnol yang ada tetap diutamakan, dan fallback transkrip juga dapat memulihkan label model runtime aktif plus total berorientasi prompt yang lebih besar saat total tersimpan hilang atau lebih kecil.
- **Token/biaya per respons** dikendalikan oleh `/usage off|tokens|full` (ditambahkan ke balasan normal).
- `/model status` adalah tentang **model/auth/endpoint**, bukan penggunaan.
- `/model status` berkaitan dengan **model/auth/endpoint**, bukan penggunaan.
## Pemilihan model (`/model`)
`/model` diimplementasikan sebagai directive.
`/model` diimplementasikan sebagai direktif.
Contoh:
@ -214,12 +252,12 @@ Catatan:
- `/model` dan `/model list` menampilkan pemilih ringkas bernomor (keluarga model + provider yang tersedia).
- Di Discord, `/model` dan `/models` membuka pemilih interaktif dengan dropdown provider dan model plus langkah Submit.
- `/model <#>` memilih dari pemilih tersebut (dan lebih memilih provider saat ini jika memungkinkan).
- `/model status` menampilkan tampilan detail, termasuk endpoint provider yang dikonfigurasi (`baseUrl`) dan mode API (`api`) bila tersedia.
- `/model <#>` memilih dari pemilih tersebut (dan sebisa mungkin mengutamakan provider saat ini).
- `/model status` menampilkan tampilan detail, termasuk endpoint provider yang dikonfigurasi (`baseUrl`) dan mode API (`api`) saat tersedia.
## Override debug
`/debug` memungkinkan Anda menetapkan override config **khusus runtime** (memori, bukan disk). Hanya pemilik. Nonaktif secara default; aktifkan dengan `commands.debug: true`.
`/debug` memungkinkan Anda menetapkan override config **hanya runtime** (memori, bukan disk). Hanya pemilik. Nonaktif secara default; aktifkan dengan `commands.debug: true`.
Contoh:
@ -233,7 +271,7 @@ Contoh:
Catatan:
- Override segera berlaku untuk pembacaan config baru, tetapi **tidak** menulis ke `openclaw.json`.
- Override langsung diterapkan ke pembacaan config baru, tetapi **tidak** menulis ke `openclaw.json`.
- Gunakan `/debug reset` untuk menghapus semua override dan kembali ke config di disk.
## Pembaruan config
@ -252,7 +290,7 @@ Contoh:
Catatan:
- Config divalidasi sebelum penulisan; perubahan yang tidak valid ditolak.
- Config divalidasi sebelum ditulis; perubahan yang tidak valid ditolak.
- Pembaruan `/config` tetap bertahan setelah restart.
## Pembaruan MCP
@ -270,12 +308,12 @@ Contoh:
Catatan:
- `/mcp` menyimpan config di config OpenClaw, bukan setelan proyek milik Pi.
- Adapter runtime memutuskan transport mana yang benar-benar dapat dieksekusi.
- `/mcp` menyimpan config di config OpenClaw, bukan pengaturan proyek milik Pi.
- Adaptor runtime menentukan transport mana yang benar-benar dapat dieksekusi.
## Pembaruan plugin
`/plugins` memungkinkan operator menginspeksi plugin yang ditemukan dan mengubah status enable di config. Alur read-only dapat menggunakan `/plugin` sebagai alias. Nonaktif secara default; aktifkan dengan `commands.plugins: true`.
`/plugins` memungkinkan operator memeriksa plugin yang ditemukan dan mengaktifkan/menonaktifkannya di config. Alur baca-saja dapat menggunakan `/plugin` sebagai alias. Nonaktif secara default; aktifkan dengan `commands.plugins: true`.
Contoh:
@ -290,34 +328,34 @@ Contoh:
Catatan:
- `/plugins list` dan `/plugins show` menggunakan penemuan plugin nyata terhadap workspace saat ini plus config di disk.
- `/plugins enable|disable` hanya memperbarui config plugin; perintah ini tidak menginstal atau menghapus plugin.
- Setelah perubahan enable/disable, mulai ulang gateway untuk menerapkannya.
- `/plugins enable|disable` hanya memperbarui config plugin; tidak menginstal atau menghapus instalasi plugin.
- Setelah perubahan enable/disable, restart gateway untuk menerapkannya.
## Catatan permukaan
## Catatan surface
- **Perintah teks** berjalan di sesi chat normal (DM berbagi `main`, grup memiliki sesi sendiri).
- **Native command** menggunakan sesi terisolasi:
- **Perintah teks** berjalan dalam sesi chat normal (DM berbagi `main`, grup memiliki sesi sendiri).
- **Perintah native** menggunakan sesi terisolasi:
- Discord: `agent:<agentId>:discord:slash:<userId>`
- Slack: `agent:<agentId>:slack:slash:<userId>` (prefiks dapat dikonfigurasi melalui `channels.slack.slashCommand.sessionPrefix`)
- Telegram: `telegram:slash:<userId>` (menargetkan sesi chat melalui `CommandTargetSessionKey`)
- **`/stop`** menargetkan sesi chat aktif sehingga dapat menghentikan run saat ini.
- **Slack:** `channels.slack.slashCommand` masih didukung untuk satu perintah gaya `/openclaw`. Jika Anda mengaktifkan `commands.native`, Anda harus membuat satu slash command Slack per perintah bawaan (nama sama seperti `/help`). Menu argumen perintah untuk Slack dikirim sebagai tombol Block Kit ephemeral.
- Pengecualian native Slack: daftarkan `/agentstatus` (bukan `/status`) karena Slack mencadangkan `/status`. Teks `/status` tetap berfungsi dalam pesan Slack.
- **`/stop`** menargetkan sesi chat aktif sehingga dapat membatalkan run saat ini.
- **Slack:** `channels.slack.slashCommand` masih didukung untuk satu perintah bergaya `/openclaw`. Jika Anda mengaktifkan `commands.native`, Anda harus membuat satu slash command Slack per perintah built-in (nama yang sama seperti `/help`). Menu argumen perintah untuk Slack dikirim sebagai tombol Block Kit ephemeral.
- Pengecualian native Slack: daftarkan `/agentstatus` (bukan `/status`) karena Slack mencadangkan `/status`. Teks `/status` tetap berfungsi di pesan Slack.
## Pertanyaan sampingan BTW
`/btw` adalah **pertanyaan sampingan** singkat tentang sesi saat ini.
Tidak seperti chat normal:
Berbeda dari chat normal:
- perintah ini menggunakan sesi saat ini sebagai konteks latar,
- menggunakan sesi saat ini sebagai konteks latar belakang,
- berjalan sebagai panggilan one-shot **tanpa tool** yang terpisah,
- tidak mengubah konteks sesi di masa depan,
- tidak ditulis ke riwayat transkrip,
- dikirim sebagai hasil sampingan live alih-alih sebagai pesan assistant normal.
- dikirim sebagai hasil sampingan live, bukan sebagai pesan asisten normal.
Ini membuat `/btw` berguna saat Anda menginginkan klarifikasi sementara sementara
tugas utama tetap berjalan.
Hal ini membuat `/btw` berguna ketika Anda menginginkan klarifikasi sementara saat tugas utama
tetap berjalan.
Contoh:

View File

@ -1,55 +1,57 @@
---
read_when:
- Mengaktifkan text-to-speech untuk balasan
- Mengonfigurasi provider atau batas TTS
- Mengonfigurasi penyedia atau batas TTS
- Menggunakan perintah /tts
summary: Text-to-speech (TTS) untuk balasan outbound
summary: Text-to-speech (TTS) untuk balasan keluar
title: Text-to-Speech
x-i18n:
generated_at: "2026-04-05T14:10:05Z"
generated_at: "2026-04-08T06:01:52Z"
model: gpt-5.4
provider: openai
source_hash: 8487c8acef7585bd4eb5e3b39e2a063ebc6b5f0103524abdcbadd3a7781ffc46
source_hash: 6e0fbcaf61282733c134f682e05a71f94d2169c03a85131ce9ad233c71a1e533
source_path: tools/tts.md
workflow: 15
---
# Text-to-speech (TTS)
OpenClaw dapat mengubah balasan outbound menjadi audio menggunakan ElevenLabs, Microsoft, MiniMax, atau OpenAI.
OpenClaw dapat mengubah balasan keluar menjadi audio menggunakan ElevenLabs, Microsoft, MiniMax, atau OpenAI.
Ini berfungsi di mana pun OpenClaw dapat mengirim audio.
## Layanan yang didukung
- **ElevenLabs** (provider utama atau fallback)
- **Microsoft** (provider utama atau fallback; implementasi bundled saat ini menggunakan `node-edge-tts`)
- **MiniMax** (provider utama atau fallback; menggunakan API T2A v2)
- **OpenAI** (provider utama atau fallback; juga digunakan untuk ringkasan)
- **ElevenLabs** (penyedia utama atau fallback)
- **Microsoft** (penyedia utama atau fallback; implementasi bawaan saat ini menggunakan `node-edge-tts`)
- **MiniMax** (penyedia utama atau fallback; menggunakan API T2A v2)
- **OpenAI** (penyedia utama atau fallback; juga digunakan untuk ringkasan)
### Catatan speech Microsoft
Provider speech Microsoft bundled saat ini menggunakan layanan TTS neural online Microsoft Edge melalui library `node-edge-tts`. Ini adalah layanan terhosting (bukan lokal), menggunakan endpoint Microsoft, dan tidak memerlukan API key.
Penyedia speech Microsoft bawaan saat ini menggunakan layanan
TTS neural online Microsoft Edge melalui library `node-edge-tts`. Ini adalah layanan yang dihosting (bukan
lokal), menggunakan endpoint Microsoft, dan tidak memerlukan kunci API.
`node-edge-tts` mengekspos opsi konfigurasi speech dan format output, tetapi
tidak semua opsi didukung oleh layanan. Input config dan directive legacy yang
menggunakan `edge` tetap berfungsi dan dinormalisasi menjadi `microsoft`.
tidak semua opsi didukung oleh layanan. Konfigurasi lama dan input directive
yang menggunakan `edge` masih berfungsi dan dinormalisasi menjadi `microsoft`.
Karena jalur ini adalah layanan web publik tanpa SLA atau kuota yang dipublikasikan,
perlakukan sebagai best-effort. Jika Anda memerlukan batas dan dukungan yang terjamin, gunakan OpenAI
anggap ini sebagai upaya terbaik. Jika Anda membutuhkan batas dan dukungan yang terjamin, gunakan OpenAI
atau ElevenLabs.
## Key opsional
## Kunci opsional
Jika Anda ingin OpenAI, ElevenLabs, atau MiniMax:
Jika Anda ingin menggunakan OpenAI, ElevenLabs, atau MiniMax:
- `ELEVENLABS_API_KEY` (atau `XI_API_KEY`)
- `MINIMAX_API_KEY`
- `OPENAI_API_KEY`
Speech Microsoft **tidak** memerlukan API key.
Speech Microsoft **tidak** memerlukan kunci API.
Jika beberapa provider dikonfigurasi, provider yang dipilih digunakan terlebih dahulu dan yang lain menjadi opsi fallback.
Jika beberapa penyedia dikonfigurasi, penyedia yang dipilih digunakan terlebih dahulu dan yang lain menjadi opsi fallback.
Auto-summary menggunakan `summaryModel` yang dikonfigurasi (atau `agents.defaults.model.primary`),
jadi provider tersebut juga harus diautentikasi jika Anda mengaktifkan ringkasan.
jadi penyedia tersebut juga harus diautentikasi jika Anda mengaktifkan ringkasan.
## Tautan layanan
@ -61,20 +63,20 @@ jadi provider tersebut juga harus diautentikasi jika Anda mengaktifkan ringkasan
- [node-edge-tts](https://github.com/SchneeHertz/node-edge-tts)
- [Format output Microsoft Speech](https://learn.microsoft.com/azure/ai-services/speech-service/rest-text-to-speech#audio-outputs)
## Apakah ini aktif secara default?
## Apakah ini diaktifkan secara default?
Tidak. AutoTTS **nonaktif** secara default. Aktifkan di config dengan
`messages.tts.auto` atau per sesi dengan `/tts always` (alias: `/tts on`).
Tidak. AutoTTS **nonaktif** secara default. Aktifkan di konfigurasi dengan
`messages.tts.auto` atau secara lokal dengan `/tts on`.
Ketika `messages.tts.provider` tidak disetel, OpenClaw memilih provider
speech pertama yang dikonfigurasi dalam urutan auto-select registry.
Ketika `messages.tts.provider` tidak disetel, OpenClaw memilih penyedia
speech pertama yang dikonfigurasi dalam urutan auto-select registri.
## Config
## Konfigurasi
Config TTS berada di bawah `messages.tts` di `openclaw.json`.
Skema lengkap ada di [Konfigurasi Gateway](/id/gateway/configuration).
Konfigurasi TTS berada di bawah `messages.tts` dalam `openclaw.json`.
Skema lengkap ada di [Konfigurasi gateway](/id/gateway/configuration).
### Config minimal (aktifkan + provider)
### Konfigurasi minimal (aktifkan + penyedia)
```json5
{
@ -87,7 +89,7 @@ Skema lengkap ada di [Konfigurasi Gateway](/id/gateway/configuration).
}
```
### OpenAI utama dengan fallback ElevenLabs
### OpenAI sebagai utama dengan fallback ElevenLabs
```json5
{
@ -128,7 +130,7 @@ Skema lengkap ada di [Konfigurasi Gateway](/id/gateway/configuration).
}
```
### Microsoft utama (tanpa API key)
### Microsoft sebagai utama (tanpa kunci API)
```json5
{
@ -151,7 +153,7 @@ Skema lengkap ada di [Konfigurasi Gateway](/id/gateway/configuration).
}
```
### MiniMax utama
### MiniMax sebagai utama
```json5
{
@ -191,7 +193,7 @@ Skema lengkap ada di [Konfigurasi Gateway](/id/gateway/configuration).
}
```
### Batas kustom + path preferensi
### Batas khusus + path preferensi
```json5
{
@ -240,58 +242,58 @@ Lalu jalankan:
- `auto`: mode autoTTS (`off`, `always`, `inbound`, `tagged`).
- `inbound` hanya mengirim audio setelah pesan suara masuk.
- `tagged` hanya mengirim audio saat balasan menyertakan tag `[[tts]]`.
- `enabled`: toggle legacy (doctor memigrasikan ini ke `auto`).
- `tagged` hanya mengirim audio ketika balasan menyertakan tag `[[tts]]`.
- `enabled`: toggle lama (doctor memigrasikan ini ke `auto`).
- `mode`: `"final"` (default) atau `"all"` (termasuk balasan tool/block).
- `provider`: id provider speech seperti `"elevenlabs"`, `"microsoft"`, `"minimax"`, atau `"openai"` (fallback otomatis).
- Jika `provider` **tidak** disetel, OpenClaw menggunakan provider speech pertama yang dikonfigurasi dalam urutan auto-select registry.
- Legacy `provider: "edge"` tetap berfungsi dan dinormalisasi menjadi `microsoft`.
- `provider`: id penyedia speech seperti `"elevenlabs"`, `"microsoft"`, `"minimax"`, atau `"openai"` (fallback berjalan otomatis).
- Jika `provider` **tidak disetel**, OpenClaw menggunakan penyedia speech pertama yang dikonfigurasi dalam urutan auto-select registri.
- `provider: "edge"` lama masih berfungsi dan dinormalisasi menjadi `microsoft`.
- `summaryModel`: model murah opsional untuk auto-summary; default ke `agents.defaults.model.primary`.
- Menerima `provider/model` atau alias model yang dikonfigurasi.
- `modelOverrides`: memungkinkan model mengeluarkan directive TTS (aktif secara default).
- `allowProvider` default ke `false` (pergantian provider perlu opt-in).
- `providers.<id>`: pengaturan milik provider yang diberi key menurut id provider speech.
- Blok provider langsung legacy (`messages.tts.openai`, `messages.tts.elevenlabs`, `messages.tts.microsoft`, `messages.tts.edge`) dimigrasikan otomatis ke `messages.tts.providers.<id>` saat load.
- `maxTextLength`: batas keras untuk input TTS (karakter). `/tts audio` gagal jika melebihi.
- `timeoutMs`: batas waktu request (ms).
- `prefsPath`: override path JSON preferensi lokal (provider/limit/summary).
- `modelOverrides`: mengizinkan model mengeluarkan directive TTS (aktif secara default).
- `allowProvider` default ke `false` (peralihan penyedia bersifat opt-in).
- `providers.<id>`: pengaturan milik penyedia yang dikunci dengan id penyedia speech.
- Blok penyedia langsung lama (`messages.tts.openai`, `messages.tts.elevenlabs`, `messages.tts.microsoft`, `messages.tts.edge`) dimigrasikan otomatis ke `messages.tts.providers.<id>` saat dimuat.
- `maxTextLength`: batas keras untuk input TTS (karakter). `/tts audio` gagal jika terlampaui.
- `timeoutMs`: batas waktu permintaan (ms).
- `prefsPath`: menimpa path JSON preferensi lokal (penyedia/batas/ringkasan).
- Nilai `apiKey` fallback ke env vars (`ELEVENLABS_API_KEY`/`XI_API_KEY`, `MINIMAX_API_KEY`, `OPENAI_API_KEY`).
- `providers.elevenlabs.baseUrl`: override base URL API ElevenLabs.
- `providers.openai.baseUrl`: override endpoint TTS OpenAI.
- `providers.elevenlabs.baseUrl`: timpa URL dasar API ElevenLabs.
- `providers.openai.baseUrl`: timpa endpoint TTS OpenAI.
- Urutan resolusi: `messages.tts.providers.openai.baseUrl` -> `OPENAI_TTS_BASE_URL` -> `https://api.openai.com/v1`
- Nilai non-default diperlakukan sebagai endpoint TTS yang kompatibel dengan OpenAI, sehingga nama model dan voice kustom diterima.
- Nilai non-default diperlakukan sebagai endpoint TTS yang kompatibel dengan OpenAI, sehingga nama model dan suara kustom diterima.
- `providers.elevenlabs.voiceSettings`:
- `stability`, `similarityBoost`, `style`: `0..1`
- `useSpeakerBoost`: `true|false`
- `speed`: `0.5..2.0` (1.0 = normal)
- `providers.elevenlabs.applyTextNormalization`: `auto|on|off`
- `providers.elevenlabs.languageCode`: ISO 639-1 2 huruf (mis. `en`, `de`)
- `providers.elevenlabs.seed`: integer `0..4294967295` (determinisme best-effort)
- `providers.minimax.baseUrl`: override base URL API MiniMax (default `https://api.minimax.io`, env: `MINIMAX_API_HOST`).
- `providers.elevenlabs.languageCode`: ISO 639-1 2 huruf (misalnya `en`, `de`)
- `providers.elevenlabs.seed`: bilangan bulat `0..4294967295` (determinisme upaya terbaik)
- `providers.minimax.baseUrl`: timpa URL dasar API MiniMax (default `https://api.minimax.io`, env: `MINIMAX_API_HOST`).
- `providers.minimax.model`: model TTS (default `speech-2.8-hd`, env: `MINIMAX_TTS_MODEL`).
- `providers.minimax.voiceId`: pengenal voice (default `English_expressive_narrator`, env: `MINIMAX_TTS_VOICE_ID`).
- `providers.minimax.voiceId`: pengenal suara (default `English_expressive_narrator`, env: `MINIMAX_TTS_VOICE_ID`).
- `providers.minimax.speed`: kecepatan pemutaran `0.5..2.0` (default 1.0).
- `providers.minimax.vol`: volume `(0, 10]` (default 1.0; harus lebih besar dari 0).
- `providers.minimax.pitch`: pergeseran pitch `-12..12` (default 0).
- `providers.microsoft.enabled`: izinkan penggunaan speech Microsoft (default `true`; tanpa API key).
- `providers.microsoft.voice`: nama voice neural Microsoft (mis. `en-US-MichelleNeural`).
- `providers.microsoft.lang`: kode bahasa (mis. `en-US`).
- `providers.microsoft.outputFormat`: format output Microsoft (mis. `audio-24khz-48kbitrate-mono-mp3`).
- Lihat format output Microsoft Speech untuk nilai yang valid; tidak semua format didukung oleh transport bundled berbasis Edge.
- `providers.microsoft.rate` / `providers.microsoft.pitch` / `providers.microsoft.volume`: string persen (mis. `+10%`, `-5%`).
- `providers.microsoft.enabled`: izinkan penggunaan speech Microsoft (default `true`; tanpa kunci API).
- `providers.microsoft.voice`: nama suara neural Microsoft (misalnya `en-US-MichelleNeural`).
- `providers.microsoft.lang`: kode bahasa (misalnya `en-US`).
- `providers.microsoft.outputFormat`: format output Microsoft (misalnya `audio-24khz-48kbitrate-mono-mp3`).
- Lihat format output Microsoft Speech untuk nilai yang valid; tidak semua format didukung oleh transport bawaan berbasis Edge.
- `providers.microsoft.rate` / `providers.microsoft.pitch` / `providers.microsoft.volume`: string persen (misalnya `+10%`, `-5%`).
- `providers.microsoft.saveSubtitles`: tulis subtitle JSON di samping file audio.
- `providers.microsoft.proxy`: URL proxy untuk request speech Microsoft.
- `providers.microsoft.timeoutMs`: override batas waktu request (ms).
- `edge.*`: alias legacy untuk pengaturan Microsoft yang sama.
- `providers.microsoft.proxy`: URL proxy untuk permintaan speech Microsoft.
- `providers.microsoft.timeoutMs`: timpa batas waktu permintaan (ms).
- `edge.*`: alias lama untuk pengaturan Microsoft yang sama.
## Override berbasis model (aktif secara default)
Secara default, model **dapat** mengeluarkan directive TTS untuk satu balasan.
Ketika `messages.tts.auto` adalah `tagged`, directive ini diperlukan untuk memicu audio.
Ketika `messages.tts.auto` adalah `tagged`, directive ini wajib untuk memicu audio.
Saat diaktifkan, model dapat mengeluarkan directive `[[tts:...]]` untuk mengoverride voice
Saat diaktifkan, model dapat mengeluarkan directive `[[tts:...]]` untuk menimpa suara
untuk satu balasan, ditambah blok `[[tts:text]]...[[/tts:text]]` opsional untuk
memberikan tag ekspresif (tawa, isyarat bernyanyi, dll.) yang seharusnya hanya muncul di
memberikan tag ekspresif (tawa, petunjuk bernyanyi, dan sebagainya) yang seharusnya hanya muncul di
audio.
Directive `provider=...` diabaikan kecuali `modelOverrides.allowProvider: true`.
@ -299,20 +301,20 @@ Directive `provider=...` diabaikan kecuali `modelOverrides.allowProvider: true`.
Contoh payload balasan:
```
Here you go.
Ini dia.
[[tts:voiceId=pMsXgVXv3BLzUgSXRplE model=eleven_v3 speed=1.1]]
[[tts:text]](laughs) Read the song once more.[[/tts:text]]
[[tts:text]](tertawa) Bacakan lagunya sekali lagi.[[/tts:text]]
```
Key directive yang tersedia (saat diaktifkan):
Kunci directive yang tersedia (saat diaktifkan):
- `provider` (id provider speech terdaftar, misalnya `openai`, `elevenlabs`, `minimax`, atau `microsoft`; memerlukan `allowProvider: true`)
- `voice` (voice OpenAI) atau `voiceId` (ElevenLabs / MiniMax)
- `provider` (id penyedia speech terdaftar, misalnya `openai`, `elevenlabs`, `minimax`, atau `microsoft`; memerlukan `allowProvider: true`)
- `voice` (suara OpenAI) atau `voiceId` (ElevenLabs / MiniMax)
- `model` (model TTS OpenAI, id model ElevenLabs, atau model MiniMax)
- `stability`, `similarityBoost`, `style`, `speed`, `useSpeakerBoost`
- `vol` / `volume` (volume MiniMax, 0-10)
- `pitch` (pitch MiniMax, -12 sampai 12)
- `pitch` (pitch MiniMax, -12 hingga 12)
- `applyTextNormalization` (`auto|on|off`)
- `languageCode` (ISO 639-1)
- `seed`
@ -331,7 +333,7 @@ Nonaktifkan semua override model:
}
```
Allowlist opsional (aktifkan pergantian provider sambil mempertahankan knob lain tetap dapat dikonfigurasi):
Allowlist opsional (aktifkan peralihan penyedia sambil tetap menjaga knob lain dapat dikonfigurasi):
```json5
{
@ -349,8 +351,8 @@ Allowlist opsional (aktifkan pergantian provider sambil mempertahankan knob lain
## Preferensi per pengguna
Slash command menulis override lokal ke `prefsPath` (default:
`~/.openclaw/settings/tts.json`, override dengan `OPENCLAW_TTS_PREFS` atau
Perintah slash menulis override lokal ke `prefsPath` (default:
`~/.openclaw/settings/tts.json`, timpa dengan `OPENCLAW_TTS_PREFS` atau
`messages.tts.prefsPath`).
Field yang disimpan:
@ -360,65 +362,63 @@ Field yang disimpan:
- `maxLength` (ambang ringkasan; default 1500 karakter)
- `summarize` (default `true`)
Field-field ini mengoverride `messages.tts.*` untuk host tersebut.
Ini menimpa `messages.tts.*` untuk host tersebut.
## Format output (tetap)
- **Feishu / Matrix / Telegram / WhatsApp**: pesan suara Opus (`opus_48000_64` dari ElevenLabs, `opus` dari OpenAI).
- 48kHz / 64kbps adalah kompromi yang baik untuk pesan suara.
- **Channel lain**: MP3 (`mp3_44100_128` dari ElevenLabs, `mp3` dari OpenAI).
- 44.1kHz / 128kbps adalah keseimbangan default untuk kejernihan speech.
- **MiniMax**: MP3 (model `speech-2.8-hd`, sample rate 32kHz). Format voice-note tidak didukung secara native; gunakan OpenAI atau ElevenLabs untuk pesan suara Opus yang terjamin.
- **Kanal lain**: MP3 (`mp3_44100_128` dari ElevenLabs, `mp3` dari OpenAI).
- 44.1kHz / 128kbps adalah keseimbangan default untuk kejernihan ucapan.
- **MiniMax**: MP3 (model `speech-2.8-hd`, sample rate 32kHz). Format voice note tidak didukung secara native; gunakan OpenAI atau ElevenLabs untuk pesan suara Opus yang terjamin.
- **Microsoft**: menggunakan `microsoft.outputFormat` (default `audio-24khz-48kbitrate-mono-mp3`).
- Transport bundled menerima `outputFormat`, tetapi tidak semua format tersedia dari layanan.
- Transport bawaan menerima `outputFormat`, tetapi tidak semua format tersedia dari layanan.
- Nilai format output mengikuti format output Microsoft Speech (termasuk Ogg/WebM Opus).
- Telegram `sendVoice` menerima OGG/MP3/M4A; gunakan OpenAI/ElevenLabs jika Anda memerlukan
- Telegram `sendVoice` menerima OGG/MP3/M4A; gunakan OpenAI/ElevenLabs jika Anda membutuhkan
pesan suara Opus yang terjamin.
- Jika format output Microsoft yang dikonfigurasi gagal, OpenClaw mencoba ulang dengan MP3.
- Jika format output Microsoft yang dikonfigurasi gagal, OpenClaw mencoba lagi dengan MP3.
Format output OpenAI/ElevenLabs tetap per channel (lihat di atas).
Format output OpenAI/ElevenLabs ditetapkan per kanal (lihat di atas).
## Perilaku auto-TTS
## Perilaku Auto-TTS
Saat diaktifkan, OpenClaw:
- melewati TTS jika balasan sudah berisi media atau directive `MEDIA:`.
- melewati balasan yang sangat singkat (< 10 karakter).
- melewati balasan yang sangat pendek (< 10 karakter).
- meringkas balasan panjang saat diaktifkan menggunakan `agents.defaults.model.primary` (atau `summaryModel`).
- melampirkan audio yang dihasilkan ke balasan.
Jika balasan melebihi `maxLength` dan ringkasan nonaktif (atau tidak ada API key untuk
Jika balasan melebihi `maxLength` dan ringkasan nonaktif (atau tidak ada kunci API untuk
model ringkasan), audio
dilewati dan balasan teks normal dikirim.
## Diagram alur
```
Reply -> TTS enabled?
no -> kirim teks
yes -> ada media / MEDIA: / pendek?
yes -> kirim teks
no -> panjang > batas?
no -> TTS -> lampirkan audio
yes -> ringkasan aktif?
no -> kirim teks
yes -> ringkas (summaryModel atau agents.defaults.model.primary)
-> TTS -> lampirkan audio
Balasan -> TTS diaktifkan?
tidak -> kirim teks
ya -> ada media / MEDIA: / pendek?
ya -> kirim teks
tidak -> panjang > batas?
tidak -> TTS -> lampirkan audio
ya -> ringkasan diaktifkan?
tidak -> kirim teks
ya -> ringkas (summaryModel atau agents.defaults.model.primary)
-> TTS -> lampirkan audio
```
## Penggunaan slash command
## Penggunaan perintah slash
Ada satu command: `/tts`.
Lihat [Slash commands](/tools/slash-commands) untuk detail pengaktifan.
Ada satu perintah: `/tts`.
Lihat [Perintah slash](/id/tools/slash-commands) untuk detail pengaktifannya.
Catatan Discord: `/tts` adalah command bawaan Discord, jadi OpenClaw mendaftarkan
`/voice` sebagai command native di sana. Teks `/tts ...` tetap berfungsi.
Catatan Discord: `/tts` adalah perintah bawaan Discord, jadi OpenClaw mendaftarkan
`/voice` sebagai perintah native di sana. Teks `/tts ...` tetap berfungsi.
```
/tts off
/tts always
/tts inbound
/tts tagged
/tts on
/tts status
/tts provider openai
/tts limit 2000
@ -428,26 +428,28 @@ Catatan Discord: `/tts` adalah command bawaan Discord, jadi OpenClaw mendaftarka
Catatan:
- Command memerlukan pengirim yang berwenang (aturan allowlist/owner tetap berlaku).
- `commands.text` atau pendaftaran command native harus diaktifkan.
- `off|always|inbound|tagged` adalah toggle per sesi (`/tts on` adalah alias untuk `/tts always`).
- `limit` dan `summary` disimpan dalam preferensi lokal, bukan config utama.
- Perintah memerlukan pengirim yang diotorisasi (aturan allowlist/owner tetap berlaku).
- `commands.text` atau pendaftaran perintah native harus diaktifkan.
- Konfigurasi `messages.tts.auto` menerima `off|always|inbound|tagged`.
- `/tts on` menulis preferensi TTS lokal menjadi `always`; `/tts off` menulisnya menjadi `off`.
- Gunakan konfigurasi jika Anda ingin default `inbound` atau `tagged`.
- `limit` dan `summary` disimpan dalam preferensi lokal, bukan konfigurasi utama.
- `/tts audio` menghasilkan balasan audio satu kali (tidak mengaktifkan TTS).
- `/tts status` mencakup visibilitas fallback untuk percobaan terbaru:
- fallback berhasil: `Fallback: <primary> -> <used>` plus `Attempts: ...`
- gagal: `Error: ...` plus `Attempts: ...`
- fallback berhasil: `Fallback: <primary> -> <used>` ditambah `Attempts: ...`
- gagal: `Error: ...` ditambah `Attempts: ...`
- diagnostik terperinci: `Attempt details: provider:outcome(reasonCode) latency`
- Kegagalan API OpenAI dan ElevenLabs sekarang menyertakan detail error provider yang sudah diparse dan request id (jika dikembalikan oleh provider), yang ditampilkan dalam error/log TTS.
- Kegagalan API OpenAI dan ElevenLabs kini mencakup detail error penyedia yang telah di-parse dan request id (saat dikembalikan oleh penyedia), yang ditampilkan dalam error/log TTS.
## Tool agen
Tool `tts` mengubah teks menjadi speech dan mengembalikan lampiran audio untuk
pengiriman balasan. Ketika channel adalah Feishu, Matrix, Telegram, atau WhatsApp,
audio dikirim sebagai pesan suara, bukan lampiran file.
pengiriman balasan. Ketika kanalnya adalah Feishu, Matrix, Telegram, atau WhatsApp,
audio dikirim sebagai pesan suara, bukan sebagai lampiran file.
## Gateway RPC
Method Gateway:
Metode gateway:
- `tts.status`
- `tts.enable`