SpyBara
Go Premium

Documentation 2026-10-25 23:58 UTC to 2026-10-26 22:57 UTC

38 files changed +968 −405. View all changes and history on the product overview
2026
Fri 30 23:01 Thu 29 23:57 Wed 28 23:57 Tue 27 22:59 Mon 26 22:57 Sun 25 23:58 Sat 24 22:59 Fri 23 22:59 Thu 22 22:58 Wed 21 23:02 Tue 20 23:00 Mon 19 23:58 Sat 17 23:57 Fri 16 22:59 Thu 15 23:58 Wed 14 22:58 Tue 13 23:57 Sun 11 23:57 Sat 10 23:01 Fri 9 23:02 Thu 8 22:58 Wed 7 23:59 Tue 6 23:59 Mon 5 23:58 Sun 4 23:58 Sat 3 23:57 Fri 2 22:59 Thu 1 23:59

admin-setup.md +1 −1

Details

93| [Sandboxing](https://code.claude.com/docs/id/sandboxing.md) | Isolasi filesystem dan jaringan tingkat OS dengan daftar allowlist domain | `sandbox.enabled`, `sandbox.network.allowedDomains` |93| [Sandboxing](https://code.claude.com/docs/id/sandboxing.md) | Isolasi filesystem dan jaringan tingkat OS dengan daftar allowlist domain | `sandbox.enabled`, `sandbox.network.allowedDomains` |

94| [Managed policy CLAUDE.md](https://code.claude.com/docs/id/memory.md#deploy-organization-wide-claude-md) | Panduan perilaku di seluruh organisasi untuk Claude, bukan aturan yang diberlakukan oleh klien | File di jalur kebijakan terkelola |94| [Managed policy CLAUDE.md](https://code.claude.com/docs/id/memory.md#deploy-organization-wide-claude-md) | Panduan perilaku di seluruh organisasi untuk Claude, bukan aturan yang diberlakukan oleh klien | File di jalur kebijakan terkelola |

95| [MCP server control](https://code.claude.com/docs/id/managed-mcp.md) | Batasi server MCP mana yang dapat ditambahkan atau dihubungkan pengguna, terapkan set tetap, atau sediakan server jarak jauh kepada setiap pengguna bersama dengan server mereka sendiri | `allowedMcpServers`, `deniedMcpServers`, `allowManagedMcpServersOnly`, `managedMcpServers`, atau file `managed-mcp.json` yang diterapkan |95| [MCP server control](https://code.claude.com/docs/id/managed-mcp.md) | Batasi server MCP mana yang dapat ditambahkan atau dihubungkan pengguna, terapkan set tetap, atau sediakan server jarak jauh kepada setiap pengguna bersama dengan server mereka sendiri | `allowedMcpServers`, `deniedMcpServers`, `allowManagedMcpServersOnly`, `managedMcpServers`, atau file `managed-mcp.json` yang diterapkan |

96| [Plugin marketplace control](https://code.claude.com/docs/id/plugins/org.md#restrict-what-users-can-install) | Batasi sumber marketplace mana yang dapat ditambahkan dan diinstal pengguna, tolak flag CLI yang memuat plugin, agent, dan server MCP untuk satu kali berjalan, blokir [sumber plugin `command`](https://code.claude.com/docs/id/plugins/marketplace-reference#command-plugin-source), dan daftar allowlist plugin marketplace mana yang dapat disarankan | `strictKnownMarketplaces`, `blockedMarketplaces`, `disableSideloadFlags`, `disableCommandPluginSources`, `pluginSuggestionMarketplaces` |96| [Plugin marketplace control](https://code.claude.com/docs/id/plugins/org.md#restrict-what-users-can-install) | Batasi sumber marketplace mana yang dapat ditambahkan dan diinstal pengguna, dan tolak flag CLI yang memuat plugin, agent, dan server MCP secara sideload untuk satu kali berjalan. Blokir [sumber plugin `command`](https://code.claude.com/docs/id/plugins/marketplace-reference#command-plugin-source), dan tetapkan allowlist marketplace mana yang plugin-nya dapat disarankan di terminal | `strictKnownMarketplaces`, `blockedMarketplaces`, `disableSideloadFlags`, `disableCommandPluginSources`, `pluginSuggestionMarketplaces` |

97| [Customization lockdown](https://code.claude.com/docs/id/settings-reference.md#strictpluginonlycustomization) | Blokir skills, agents, hooks, dan server MCP dari sumber pengguna dan proyek, sehingga mereka hanya dapat berasal dari plugin atau pengaturan terkelola. Mengunci skills juga menghentikan [skills yang diaktifkan pengembang Anda di claude.ai](https://code.claude.com/docs/id/skills.md#where-synced-skills-load) dari sinkronisasi | `strictPluginOnlyCustomization` |97| [Customization lockdown](https://code.claude.com/docs/id/settings-reference.md#strictpluginonlycustomization) | Blokir skills, agents, hooks, dan server MCP dari sumber pengguna dan proyek, sehingga mereka hanya dapat berasal dari plugin atau pengaturan terkelola. Mengunci skills juga menghentikan [skills yang diaktifkan pengembang Anda di claude.ai](https://code.claude.com/docs/id/skills.md#where-synced-skills-load) dari sinkronisasi | `strictPluginOnlyCustomization` |

98| [Disable claude.ai sync](https://code.claude.com/docs/id/settings-reference.md#syncclaudeaiskills) | Hentikan Claude Code dari memuat [skills](https://code.claude.com/docs/id/skills.md#how-synced-skills-behave) dan [plugins](https://code.claude.com/docs/id/plugins/loading.md#synced-plugins) yang diaktifkan pengembang Anda di claude.ai. Jika Anda mematikan Skills untuk organisasi Anda di claude.ai, Claude Code berhenti menyinkronkan keduanya, dan pada v2.1.273 atau lebih baru juga menghapus yang sudah disinkronkan. Untuk menghentikan salah satu tanpa mematikan Skills, atur kuncinya ke `false` dalam pengaturan terkelola | `syncClaudeAiSkills`, `syncClaudeAiPlugins` |98| [Disable claude.ai sync](https://code.claude.com/docs/id/settings-reference.md#syncclaudeaiskills) | Hentikan Claude Code dari memuat [skills](https://code.claude.com/docs/id/skills.md#how-synced-skills-behave) dan [plugins](https://code.claude.com/docs/id/plugins/loading.md#synced-plugins) yang diaktifkan pengembang Anda di claude.ai. Jika Anda mematikan Skills untuk organisasi Anda di claude.ai, Claude Code berhenti menyinkronkan keduanya, dan pada v2.1.273 atau lebih baru juga menghapus yang sudah disinkronkan. Untuk menghentikan salah satu tanpa mematikan Skills, atur kuncinya ke `false` dalam pengaturan terkelola | `syncClaudeAiSkills`, `syncClaudeAiPlugins` |

99| [Hook restrictions](https://code.claude.com/docs/id/settings-reference.md#allowmanagedhooksonly) | Batasi hook mana yang berjalan dan batasi URL hook HTTP; lihat [apa yang berjalan di bawah `allowManagedHooksOnly`](https://code.claude.com/docs/id/settings-reference#what-runs-under-allowmanagedhooksonly) untuk daftar efek lengkap | `allowManagedHooksOnly`, `allowedHttpHookUrls` |99| [Hook restrictions](https://code.claude.com/docs/id/settings-reference.md#allowmanagedhooksonly) | Batasi hook mana yang berjalan dan batasi URL hook HTTP; lihat [apa yang berjalan di bawah `allowManagedHooksOnly`](https://code.claude.com/docs/id/settings-reference#what-runs-under-allowmanagedhooksonly) untuk daftar efek lengkap | `allowManagedHooksOnly`, `allowedHttpHookUrls` |

Details

233| `"default"` | Tool calls yang memerlukan approval dan tidak tercakup oleh allow rules memicu `canUseTool` callback Anda; tidak ada callback berarti deny | Interactive applications dengan custom approval callback |233| `"default"` | Tool calls yang memerlukan approval dan tidak tercakup oleh allow rules memicu `canUseTool` callback Anda; tidak ada callback berarti deny | Interactive applications dengan custom approval callback |

234| `"acceptEdits"` | Auto-approves file edits dan common filesystem commands (`mkdir`, `touch`, `mv`, `cp`, dll.); Bash commands lainnya mengikuti default rules | Anda mempercayai edits Claude dan menginginkan iterasi lebih cepat, seperti selama prototyping atau saat bekerja dalam isolated directory |234| `"acceptEdits"` | Auto-approves file edits dan common filesystem commands (`mkdir`, `touch`, `mv`, `cp`, dll.); Bash commands lainnya mengikuti default rules | Anda mempercayai edits Claude dan menginginkan iterasi lebih cepat, seperti selama prototyping atau saat bekerja dalam isolated directory |

235| `"plan"` | Claude mengeksplorasi dan merencanakan tanpa mengedit source files Anda; file edits tidak pernah auto-approved dan prompt melalui `canUseTool` callback Anda | Anda menginginkan Claude untuk mengusulkan changes tanpa mengeksekusinya, seperti selama code review atau ketika Anda perlu approve changes sebelum dibuat |235| `"plan"` | Claude mengeksplorasi dan merencanakan tanpa mengedit source files Anda; file edits tidak pernah auto-approved dan prompt melalui `canUseTool` callback Anda | Anda menginginkan Claude untuk mengusulkan changes tanpa mengeksekusinya, seperti selama code review atau ketika Anda perlu approve changes sebelum dibuat |

236| `"dontAsk"` | Tidak pernah prompt. Tools pre-approved oleh [permission rules](https://code.claude.com/docs/id/settings-reference.md#permission-settings) berjalan, dan begitu juga calls yang tidak memerlukan approval dalam mode `default`, seperti file reads di dalam working directories Anda. Setiap call yang sebaliknya akan prompt ditolak, meskipun [mod](https://code.claude.com/docs/id/plugins/mods/overview.md) yang Anda instal masih dapat menyetujui [beberapa dari calls tersebut](https://code.claude.com/docs/id/permissions.md#precedence-among-rules-hooks-and-mods). `AskUserQuestion`, connector tools [organisasi Anda set ke `ask`](https://code.claude.com/docs/id/mcp#organization-controls-on-connector-tools), MCP tools yang ditandai [`requiresUserInteraction`](https://code.claude.com/docs/id/mcp#require-approval-for-a-specific-tool), dan [pembacaan dari network paths](https://code.claude.com/docs/id/permissions.md#network-paths) ditolak bahkan jika Anda telah mengizinkannya | Anda menginginkan fixed, explicit tool surface untuk headless agent dan lebih memilih hard deny daripada silent reliance pada `canUseTool` yang absent |236| `"dontAsk"` | Tidak pernah prompt. Tools pre-approved oleh [permission rules](https://code.claude.com/docs/id/settings-reference.md#permission-settings) berjalan, dan begitu juga calls yang tidak memerlukan approval dalam mode `default`, seperti file reads di dalam working directories Anda. Setiap call yang sebaliknya akan prompt ditolak, meskipun [mod](https://code.claude.com/docs/id/plugins/mods/overview.md) yang Anda instal masih dapat menyetujui [beberapa dari calls tersebut](https://code.claude.com/docs/id/permissions.md#precedence-among-rules-hooks-and-mods). Beberapa calls, seperti [pembacaan dari network paths](https://code.claude.com/docs/id/permissions.md#network-paths), ditolak bahkan jika Anda telah mengizinkannya. Untuk daftarnya, lihat [Don't ask mode](https://code.claude.com/docs/id/agent-sdk/permissions.md#don’t-ask-mode-dontask) | Headless agents tanpa ada yang dapat menyetujui calls |

237| `"auto"` | Menggunakan model classifier untuk review actions seperti shell commands dan network requests, allowing atau blocking masing-masing yang direview. Lihat [Auto mode](https://code.claude.com/docs/id/permission-modes.md#eliminate-prompts-with-auto-mode) untuk availability dan decision order | Autonomous agents yang masih menginginkan safety guardrails pada tool use |237| `"auto"` | Menggunakan model classifier untuk review actions seperti shell commands dan network requests, allowing atau blocking masing-masing yang direview. Lihat [Auto mode](https://code.claude.com/docs/id/permission-modes.md#eliminate-prompts-with-auto-mode) untuk availability dan decision order | Autonomous agents yang masih menginginkan safety guardrails pada tool use |

238| `"bypassPermissions"` | Menjalankan semua allowed tools tanpa bertanya, kecuali tools yang cocok dengan explicit [`ask` rule](https://code.claude.com/docs/id/settings-reference#permission-settings), connector tools [organisasi Anda set ke `ask`](https://code.claude.com/docs/id/mcp#organization-controls-on-connector-tools), dan tools yang memerlukan user interaction. [Cross-session messaging safeguards](https://code.claude.com/docs/id/permission-modes.md#skip-all-checks-with-bypasspermissions-mode) masih berlaku. Lihat [How permissions are evaluated](https://code.claude.com/docs/id/agent-sdk/permissions.md#how-permissions-are-evaluated) untuk urutan precedence. Dalam TypeScript SDK, juga memerlukan `allowDangerouslySkipPermissions: true` dalam `options`. Tidak dapat digunakan saat berjalan sebagai root pada Unix. Gunakan hanya dalam isolated environments di mana tindakan agent tidak dapat mempengaruhi systems yang Anda pedulikan | CI, containers, atau isolated environments lainnya |238| `"bypassPermissions"` | Menjalankan panggilan tool tanpa meminta persetujuan, termasuk panggilan ke tools yang tidak Anda cantumkan dalam `allowedTools`. Beberapa panggilan tetap diteruskan ke `canUseTool` callback Anda, sebagaimana tercantum di bawah [Bypass permissions mode](https://code.claude.com/docs/id/agent-sdk/permissions.md#bypass-permissions-mode-bypasspermissions). Dalam TypeScript SDK, juga memerlukan `allowDangerouslySkipPermissions: true` dalam `options`. Tidak dapat digunakan saat berjalan sebagai root pada Unix. Gunakan hanya dalam isolated environments di mana tindakan agent tidak dapat mempengaruhi systems yang Anda pedulikan | CI, containers, atau isolated environments lainnya |

239 239 

240Untuk interactive applications, gunakan `"default"` dengan tool approval callback untuk surface approval prompts. Untuk autonomous agents pada dev machine, `"acceptEdits"` auto-approves file edits dan common filesystem commands (`mkdir`, `touch`, `mv`, `cp`, dll.) sambil masih gating `Bash` commands lainnya di belakang allow rules. Reserve `"bypassPermissions"` untuk CI, containers, atau isolated environments lainnya. Lihat [Permissions](https://code.claude.com/docs/id/agent-sdk/permissions.md) untuk full details.240Untuk interactive applications, gunakan `"default"` dengan tool approval callback untuk surface approval prompts. Untuk autonomous agents pada dev machine, `"acceptEdits"` auto-approves file edits dan common filesystem commands (`mkdir`, `touch`, `mv`, `cp`, dll.) sambil masih gating `Bash` commands lainnya di belakang allow rules. Reserve `"bypassPermissions"` untuk CI, containers, atau isolated environments lainnya. Lihat [Permissions](https://code.claude.com/docs/id/agent-sdk/permissions.md) untuk full details.

241 241 

Details

16| Membuat parameter menjadi opsional | Deklarasikan sebagai opsional dalam skema dan terapkan nilai default dalam penangan. Lihat [Buat parameter menjadi opsional](#make-a-parameter-optional). |16| Membuat parameter menjadi opsional | Deklarasikan sebagai opsional dalam skema dan terapkan nilai default dalam penangan. Lihat [Buat parameter menjadi opsional](#make-a-parameter-optional). |

17| Mendaftarkan alat dengan Claude | Bungkus dalam `create_sdk_mcp_server` / `createSdkMcpServer` dan teruskan ke `mcpServers` dalam `query()`. Lihat [Panggil alat kustom](#call-a-custom-tool). |17| Mendaftarkan alat dengan Claude | Bungkus dalam `create_sdk_mcp_server` / `createSdkMcpServer` dan teruskan ke `mcpServers` dalam `query()`. Lihat [Panggil alat kustom](#call-a-custom-tool). |

18| Pra-setujui alat | Tambahkan ke alat yang diizinkan Anda. Lihat [Konfigurasi alat yang diizinkan](#configure-allowed-tools). |18| Pra-setujui alat | Tambahkan ke alat yang diizinkan Anda. Lihat [Konfigurasi alat yang diizinkan](#configure-allowed-tools). |

19| Wajibkan persetujuan untuk panggilan ke tool, atau blokir tool tersebut | Di TypeScript SDK, tambahkan `permission_policy` untuk tool tersebut ke objek konfigurasi yang dikembalikan oleh `createSdkMcpServer()`. Lihat [Wajibkan persetujuan untuk tool tertentu](#require-approval-for-specific-tools). |

19| Hapus alat bawaan dari konteks Claude | Teruskan array `tools` yang hanya mencantumkan bawaan yang Anda inginkan. Lihat [Konfigurasi alat yang diizinkan](#configure-allowed-tools). |20| Hapus alat bawaan dari konteks Claude | Teruskan array `tools` yang hanya mencantumkan bawaan yang Anda inginkan. Lihat [Konfigurasi alat yang diizinkan](#configure-allowed-tools). |

20| Biarkan Claude memanggil alat secara paralel | Atur `readOnlyHint: true` pada alat tanpa efek samping. Lihat [Tambahkan anotasi alat](#add-tool-annotations). |21| Biarkan Claude memanggil alat secara paralel | Atur `readOnlyHint: true` pada alat tanpa efek samping. Lihat [Tambahkan anotasi alat](#add-tool-annotations). |

21| Kontrol pesan kesalahan yang dibaca Claude | Kembalikan `isError: true` untuk menyusun pesan alih-alih menampilkan pengecualian mentah. Lihat [Tangani kesalahan](#handle-errors). |22| Kontrol pesan kesalahan yang dibaca Claude | Kembalikan `isError: true` untuk menyusun pesan alih-alih menampilkan pengecualian mentah. Lihat [Tangani kesalahan](#handle-errors). |


327| Bidang | Default | Arti |328| Bidang | Default | Arti |

328| :- | :- | :- |329| :- | :- | :- |

329| `readOnlyHint` | `false` | Alat tidak memodifikasi lingkungannya. Mengontrol apakah alat dapat dipanggil secara paralel dengan alat baca-saja lainnya. |330| `readOnlyHint` | `false` | Alat tidak memodifikasi lingkungannya. Mengontrol apakah alat dapat dipanggil secara paralel dengan alat baca-saja lainnya. |

330| `destructiveHint` | `true` | Alat dapat melakukan pembaruan destruktif. Hanya informatif. |331| `destructiveHint` | `true` | Tool dapat melakukan pembaruan destruktif. Atur secara eksplisit ke `true` pada setiap tool yang Anda [tandai `always_ask`](#require-approval-for-specific-tools). |

331| `idempotentHint` | `false` | Panggilan berulang dengan argumen yang sama tidak memiliki efek tambahan. Hanya informatif. |332| `idempotentHint` | `false` | Panggilan berulang dengan argumen yang sama tidak memiliki efek tambahan. Hanya informatif. |

332| `openWorldHint` | `true` | Alat menjangkau sistem di luar proses Anda. Hanya informatif. |333| `openWorldHint` | `true` | Alat menjangkau sistem di luar proses Anda. Hanya informatif. |

333 334 


383 384 

384Untuk menghapus built-in sepenuhnya, hilangkan dari `tools` atau cantumkan nama barenya dalam `disallowedTools` (Python: `disallowed_tools`); keduanya membuat tool tetap keluar dari konteks sehingga Claude tidak pernah mencobanya. Aturan `disallowedTools` yang scoped memblokir panggilan yang cocok tetapi membiarkan tool tetap terlihat, jadi Claude mungkin membuang giliran mencobanya. Lihat [Configure permissions](https://code.claude.com/docs/id/agent-sdk/permissions.md) untuk urutan evaluasi lengkap.385Untuk menghapus built-in sepenuhnya, hilangkan dari `tools` atau cantumkan nama barenya dalam `disallowedTools` (Python: `disallowed_tools`); keduanya membuat tool tetap keluar dari konteks sehingga Claude tidak pernah mencobanya. Aturan `disallowedTools` yang scoped memblokir panggilan yang cocok tetapi membiarkan tool tetap terlihat, jadi Claude mungkin membuang giliran mencobanya. Lihat [Configure permissions](https://code.claude.com/docs/id/agent-sdk/permissions.md) untuk urutan evaluasi lengkap.

385 386 

387### Wajibkan persetujuan untuk tools tertentu

388 

389Atur `permission_policy` sebuah tool ke `always_ask`, maka `allowedTools` berhenti menyetujui panggilan tool tersebut, sehingga panggilan tersebut dapat mencapai callback [`canUseTool`](https://code.claude.com/docs/id/agent-sdk/user-input) Anda meskipun tool tersebut tercantum. Jika Anda mengatur `always_deny` sebagai gantinya, [panggilan ke tool tersebut ditolak](https://code.claude.com/docs/id/agent-sdk/permissions.md#how-permissions-are-evaluated), tetapi sebuah [mod](https://code.claude.com/docs/id/plugins/mods/overview.md) dalam plugin yang Anda muat [masih dapat menyetujuinya](https://code.claude.com/docs/id/permissions.md#precedence-among-rules-hooks-and-mods). Field ini hanya tersedia untuk TypeScript dan memerlukan Agent SDK v0.3.301 atau yang lebih baru.

390 

391Letakkan entri kebijakan dalam array `tools` pada objek konfigurasi yang dikembalikan oleh `createSdkMcpServer()`, bukan dalam opsi `tools` yang Anda teruskan ke fungsi tersebut. Contoh ini menyebarkan `weatherServer` dari [contoh weather tool](#weather-tool-example) dan menambahkan array `tools` yang memberikan kebijakan `always_ask` kepada `get_temperature`:

392 

393```typescript TypeScript theme={null}

394options: {

395 mcpServers: {

396 weather: {

397 ...weatherServer,

398 tools: [{ name: "get_temperature", permission_policy: "always_ask" as const }]

399 }

400 },

401 allowedTools: ["mcp__weather__get_temperature"],

402 permissionMode: "default",

403 canUseTool: async (toolName, input) => {

404 console.log(`Approval requested for ${toolName}`);

405 return { behavior: "allow", updatedInput: input };

406 }

407}

408```

409 

410Untuk mencoba kebijakan ini, ganti `options` dalam skrip [Call a custom tool](#call-a-custom-tool) dengan `options` dari contoh ini, lalu jalankan skrip tersebut dari terminal Anda. Skrip mencetak `Approval requested for mcp__weather__get_temperature`, diikuti oleh jawaban Claude tentang suhu. Untuk skrip lengkap, lihat [referensi TypeScript](https://code.claude.com/docs/id/agent-sdk/typescript.md#mcpsdkserverconfigwithinstance).

411 

412Jika Anda menggunakan [mode izin](https://code.claude.com/docs/id/agent-sdk/permissions.md#permission-modes) `auto` atau `plan`, atur `destructiveHint: true` dalam [anotasi](#add-tool-annotations) tool agar panggilan ke tool tersebut tetap mencapai callback Anda. Jika tidak, [pengklasifikasi auto mode](https://code.claude.com/docs/id/permission-modes.md#eliminate-prompts-with-auto-mode) dapat menyetujui beberapa panggilan `always_ask`, dalam [kondisi yang tercantum di referensi TypeScript](https://code.claude.com/docs/id/agent-sdk/typescript.md#permission-modes-that-can-approve-an-always_ask-call), dan panggilan yang disetujuinya tidak mencapai callback Anda. Atur hint ini secara eksplisit, karena `destructiveHint` yang tidak diatur dihitung sebagai `false` untuk panggilan `always_ask`, alih-alih default ke `true`.

413 

386## Menangani kesalahan414## Menangani kesalahan

387 415 

388Kesalahan handler tidak menghentikan loop agen. Server MCP in-process SDK menangkap pengecualian yang tidak tertangani dan mengembalikannya sebagai hasil kesalahan, jadi cara Anda melaporkan kesalahan menentukan apa yang Claude baca, bukan apakah kueri gagal:416Kesalahan handler tidak menghentikan loop agen. Server MCP in-process SDK menangkap pengecualian yang tidak tertangani dan mengembalikannya sebagai hasil kesalahan, jadi cara Anda melaporkan kesalahan menentukan apa yang Claude baca, bukan apakah kueri gagal:

Details

10 10 

11## Cara izin dievaluasi11## Cara izin dievaluasi

12 12 

13> [!NOTE]

14>

15> Jika Anda memuat plugin yang berisi [mod](https://code.claude.com/docs/id/plugins/mods/overview.md), lihat [di mana keputusan mod berada di antara aturan dan hook](https://code.claude.com/docs/id/permissions.md#precedence-among-rules-hooks-and-mods).

16 

13Saat Claude meminta sebuah tool, SDK memeriksa izin dengan urutan berikut:17Saat Claude meminta sebuah tool, SDK memeriksa izin dengan urutan berikut:

14 18 

15**1. Hooks**19**1. Hooks**


20 24 

21**2. Deny rules**25**2. Deny rules**

22 26 

23Periksa aturan `deny` (dari `disallowed_tools` dan [settings.json](https://code.claude.com/docs/id/settings-reference.md#permission-settings)). Jika aturan deny cocok, tool tersebut diblokir, bahkan dalam mode `bypassPermissions`. Aturan deny dengan nama saja seperti `Bash` menghapus tool tersebut dari konteks Claude sebelum evaluasi ini dimulai, sehingga hanya aturan bercakupan seperti `Bash(rm *)` yang diperiksa pada langkah ini.27Jika aturan deny dari `disallowed_tools` atau [settings.json](https://code.claude.com/docs/id/settings-reference.md#permission-settings) cocok, panggilan tersebut ditolak dan [`canUseTool`](https://code.claude.com/docs/id/agent-sdk/user-input) tidak dipanggil, bahkan dalam mode [`bypassPermissions`](#bypass-permissions-mode-bypasspermissions) dan bahkan ketika hook mengembalikan `allow`.

28 

29Di TypeScript SDK, jika Anda menetapkan `permission_policy` dari [tool kustom](https://code.claude.com/docs/id/agent-sdk/custom-tools.md#require-approval-for-specific-tools) ke [`always_deny`](https://code.claude.com/docs/id/agent-sdk/typescript#mcpservertoolpolicy), panggilan ke tool tersebut ditolak pada langkah ini.

24 30 

25**3. Ask rules**31**3. Ask rules**

26 32 


30 36 

31Tool [konektor claude.ai](https://code.claude.com/docs/id/mcp.md#organization-controls-on-connector-tools) yang telah ditetapkan organisasi Anda ke `ask` juga keluar dari alur pada langkah ini. Setiap panggilan diteruskan ke callback, bahkan dalam mode `bypassPermissions` dan bahkan ketika aturan allow cocok. Callback menerima alasan `Your organization requires approval for this tool`. Dalam mode `dontAsk`, panggilan tersebut justru ditolak, karena mode tersebut tidak pernah menampilkan permintaan izin.37Tool [konektor claude.ai](https://code.claude.com/docs/id/mcp.md#organization-controls-on-connector-tools) yang telah ditetapkan organisasi Anda ke `ask` juga keluar dari alur pada langkah ini. Setiap panggilan diteruskan ke callback, bahkan dalam mode `bypassPermissions` dan bahkan ketika aturan allow cocok. Callback menerima alasan `Your organization requires approval for this tool`. Dalam mode `dontAsk`, panggilan tersebut justru ditolak, karena mode tersebut tidak pernah menampilkan permintaan izin.

32 38 

39Di TypeScript SDK, jika Anda menetapkan `permission_policy` tool kustom ke [`always_ask`](https://code.claude.com/docs/id/agent-sdk/custom-tools#require-approval-for-specific-tools), tidak ada aturan allow yang menyetujui panggilannya, bahkan entri `allowedTools` sekalipun. Dalam mode `dontAsk`, Claude Code menolak panggilan tersebut, dan dalam mode `auto`, `plan`, atau `bypassPermissions`, Claude Code [dapat menyetujuinya](https://code.claude.com/docs/id/agent-sdk/typescript.md#permission-modes-that-can-approve-an-always_ask-call) sebelum callback Anda berjalan.

40 

33**4. Permission mode**41**4. Permission mode**

34 42 

35Terapkan [mode izin](#permission-modes) yang aktif:43Terapkan [mode izin](#permission-modes) yang aktif:

36 44 

37* Dalam mode `bypassPermissions`, Claude Code menyetujui semua yang mencapai langkah ini kecuali [penghapusan jalur kritis](https://code.claude.com/docs/id/permission-modes.md#critical-paths) yang dikenali, yang justru diteruskan ke langkah berikutnya.45* Dalam mode `bypassPermissions`, Claude Code menyetujui semua yang mencapai langkah ini kecuali [penghapusan jalur kritis](https://code.claude.com/docs/id/permission-modes.md#critical-paths) yang dikenali dan perintah Bash yang ditandai [`Dangerous rm operation not ruled out`](https://code.claude.com/docs/id/permission-modes#dangerous-rm-operation-not-ruled-out), yang justru diteruskan ke langkah berikutnya.

38* Dalam mode `acceptEdits`, Claude Code menyetujui operasi file yang tercantum di bawah [Mode accept edits](#accept-edits-mode-acceptedits).46* Dalam mode `acceptEdits`, Claude Code menyetujui operasi file yang tercantum di bawah [Mode accept edits](#accept-edits-mode-acceptedits).

39* Dalam mode `plan`, Claude Code mengirimkan tool pengeditan file dan tool penulisan shell ke callback `canUseTool` Anda terlepas dari aturan allow, sehingga operasi tulis tidak dapat disetujui secara otomatis selama perencanaan.47* Dalam mode `plan`, Claude Code mengirimkan tool pengeditan file ke callback `canUseTool` Anda terlepas dari aturan allow.

40* Dalam mode lain, permintaan diteruskan ke langkah berikutnya.48* Dalam mode lain, permintaan diteruskan ke langkah berikutnya.

41 49 

42**5. Allow rules**50**5. Allow rules**

43 51 

44Periksa aturan `allow` (dari `allowed_tools` dan settings.json). Jika aturan cocok, tool tersebut disetujui. Panggilan yang disetujui oleh tool itu sendiri juga diselesaikan pada langkah ini, tanpa memerlukan aturan: misalnya pembacaan file di dalam direktori kerja Anda atau [perintah Bash read-only](https://code.claude.com/docs/id/permissions.md#read-only-commands).52Periksa aturan `allow` (dari `allowed_tools` dan settings.json). Jika aturan cocok, tool tersebut disetujui. Panggilan yang disetujui oleh tool itu sendiri juga diselesaikan pada langkah ini, tanpa memerlukan aturan: misalnya pembacaan file di dalam direktori kerja Anda atau [perintah Bash read-only](https://code.claude.com/docs/id/permissions.md#read-only-commands).

45 53 

46[Penghapusan jalur kritis](https://code.claude.com/docs/id/permission-modes.md#critical-paths) yang dikenali tidak disetujui oleh aturan allow. Apakah penghapusan tersebut kemudian mencapai callback Anda bergantung pada mode izin: dalam sesi Agent SDK dalam mode `auto`, misalnya, Claude Code menolaknya secara default tanpa memanggil callback. [Tabel mode jalur kritis](https://code.claude.com/docs/id/permission-modes.md#critical-path-removals-in-each-permission-mode) mencantumkan apa yang dilakukan setiap mode terhadapnya.54[Penghapusan jalur kritis](https://code.claude.com/docs/id/permission-modes.md#critical-paths) yang dikenali tidak disetujui oleh aturan allow, dan perintah yang ditandai `Dangerous rm operation not ruled out` tidak disetujui oleh aturan `Bash` atau `Bash(*)`. Apakah perintah tersebut kemudian mencapai callback Anda bergantung pada mode izin: dalam sesi Agent SDK dalam mode `auto`, misalnya, Claude Code menolaknya secara default tanpa memanggil callback. [Tabel mode jalur kritis](https://code.claude.com/docs/id/permission-modes.md#critical-path-removals-in-each-permission-mode) mencantumkan apa yang dilakukan setiap mode terhadapnya.

47 55 

48Aturan allow tidak menyetujui pembacaan dari [jalur jaringan](https://code.claude.com/docs/id/permissions.md#network-paths).56Aturan allow tidak menyetujui pembacaan dari [jalur jaringan](https://code.claude.com/docs/id/permissions.md#network-paths).

49 57 


57 65 

58Jika Anda meneruskan callback `canUseTool` dalam konfigurasi di mana TypeScript SDK memperkirakan urutan evaluasi akan menyetujui panggilan secara otomatis sebelum callback dikonsultasikan, SDK mengeluarkan peringatan proses Node.js satu kali saat query dibuat. Kode peringatan tersebut adalah `CLAUDE_SDK_CAN_USE_TOOL_SHADOWED`. Dua konfigurasi memicunya:66Jika Anda meneruskan callback `canUseTool` dalam konfigurasi di mana TypeScript SDK memperkirakan urutan evaluasi akan menyetujui panggilan secara otomatis sebelum callback dikonsultasikan, SDK mengeluarkan peringatan proses Node.js satu kali saat query dibuat. Kode peringatan tersebut adalah `CLAUDE_SDK_CAN_USE_TOOL_SHADOWED`. Dua konfigurasi memicunya:

59 67 

60* `permissionMode: 'bypassPermissions'`, yang secara otomatis menyetujui setiap panggilan yang mencapai langkah mode izin, kecuali [tindakan yang tidak disetujui otomatis oleh mode mana pun](https://code.claude.com/docs/id/permission-modes.md#actions-no-mode-auto-approves)68* `permissionMode: 'bypassPermissions'`: teks peringatan diawali dengan `canUseTool will not be invoked: permissionMode 'bypassPermissions'`. Panggilan tool disetujui sebelum `canUseTool` dikonsultasikan, sehingga callback Anda hanya berjalan untuk beberapa panggilan, seperti panggilan yang tercantum di bawah [Mode bypass permissions](#bypass-permissions-mode-bypasspermissions). Untuk memeriksa panggilan yang disetujui juga, letakkan pemeriksaan callback Anda di [hook `PreToolUse`](https://code.claude.com/docs/id/agent-sdk/hooks)

61* Setiap entri `allowedTools` dengan nama saja seperti `"Read"`, yang secara otomatis menyetujui seluruh tool tersebut sebelum callback dikonsultasikan, kecuali [tindakan yang tidak disetujui otomatis oleh mode mana pun](https://code.claude.com/docs/id/permission-modes.md#actions-no-mode-auto-approves) dan [pembacaan dari jalur jaringan](https://code.claude.com/docs/id/permissions.md#network-paths)69* Entri `allowedTools` yang hanya berupa nama tool, seperti `"Read"`: peringatan mencantumkan setiap entri semacam itu setelah `canUseTool will not be invoked for:`. Panggilan ke tool yang tercantum disetujui sebelum `canUseTool` dikonsultasikan, kecuali [panggilan yang tidak pernah disetujui oleh aturan allow](#calls-an-allow-rule-never-approves). Agar callback Anda berjalan untuk panggilan tool yang tercantum yang memerlukan persetujuan, hapus entri tool tersebut dari `allowedTools`

62 70 

63Entri dengan penentu seperti `Bash(ls *)` dan mode `acceptEdits` tidak memicunya, dan aturan allow yang berasal dari file pengaturan tidak terlihat oleh pemeriksaan ini.71Entri dengan penentu seperti `Bash(ls *)` dan mode `acceptEdits` tidak memicunya, dan aturan allow yang berasal dari file pengaturan tidak terlihat oleh pemeriksaan ini.

64 72 

65Dengarkan dengan `process.on('warning', ...)` dan cocokkan kodenya untuk menulisnya ke log atau menekannya. Untuk membatasi setiap panggilan tool terlepas dari mode dan aturan, gunakan [hook `PreToolUse`](https://code.claude.com/docs/id/agent-sdk/hooks) sebagai gantinya.73Peringatan ini tidak memblokir panggilan apa pun atau mengubah opsi apa pun. Jika callback Anda sudah menerima setiap panggilan yang ingin Anda periksa, biarkan konfigurasi Anda apa adanya. Untuk menulis peringatan ke log, dengarkan dengan `process.on('warning', ...)` dan cocokkan kode `CLAUDE_SDK_CAN_USE_TOOL_SHADOWED`.

66 74 

67Halaman ini berfokus pada **aturan allow dan deny** serta **mode izin**. Untuk langkah-langkah lainnya:75Halaman ini berfokus pada **aturan allow dan deny** serta **mode izin**. Untuk langkah-langkah lainnya:

68 76 


90>98>

91> **Alat yang disetujui secara otomatis tidak pernah mencapai `canUseTool`.** Panggilan alat yang disetujui pada langkah sebelumnya apa pun, oleh `acceptEdits` atau `bypassPermissions`, atau oleh aturan izin, melewati callback `canUseTool` Anda, sehingga pemeriksaan izin yang Anda letakkan di sana diam-diam dilewati untuk alat tersebut.99> **Alat yang disetujui secara otomatis tidak pernah mencapai `canUseTool`.** Panggilan alat yang disetujui pada langkah sebelumnya apa pun, oleh `acceptEdits` atau `bypassPermissions`, atau oleh aturan izin, melewati callback `canUseTool` Anda, sehingga pemeriksaan izin yang Anda letakkan di sana diam-diam dilewati untuk alat tersebut.

92>100>

93> Tidak ada aturan izin yang menyetujui secara otomatis `AskUserQuestion`, tool MCP yang ditandai [`_meta["anthropic/requiresUserInteraction"]`](https://code.claude.com/docs/id/mcp#require-approval-for-a-specific-tool), tool konektor yang [diatur organisasi Anda ke `ask`](https://code.claude.com/docs/id/mcp#organization-controls-on-connector-tools), atau [penghapusan jalur kritis](https://code.claude.com/docs/id/permission-modes.md#critical-paths) `rm` dan `rmdir` yang dikenali. Dalam mode `dontAsk` Claude Code menolak panggilan ini tanpa memanggil callback. Dalam mode lain tiga yang pertama mencapai callback. [Tabel mode jalur kritis](https://code.claude.com/docs/id/permission-modes.md#critical-path-removals-in-each-permission-mode) mencantumkan apa yang dilakukan setiap mode terhadap penghapusan jalur kritis. Pemeriksaan yang mengenali penghapusan ini [dapat melewatkan beberapa perintah](https://code.claude.com/docs/id/permission-modes.md#critical-paths).101> Jika panggilan ke tool dalam `allowed_tools` masih mencapai callback `canUseTool` Anda, atau ditolak dalam mode `dontAsk`, periksa apakah panggilan tersebut merupakan [pembacaan dari jalur jaringan](https://code.claude.com/docs/id/permissions.md#network-paths) atau termasuk di antara panggilan berikut. Tidak ada aturan izin yang menyetujui panggilan ini. Dalam mode `dontAsk`, yang tidak pernah memunculkan permintaan izin, Claude Code menolaknya tanpa memanggil `canUseTool`, dan dalam mode izin lainnya Anda menanganinya seperti yang dijelaskan pada setiap item:

102>

103> * `AskUserQuestion`, tool MCP yang ditandai [`_meta["anthropic/requiresUserInteraction"]`](https://code.claude.com/docs/id/mcp#require-approval-for-a-specific-tool), dan tool konektor yang [diatur organisasi Anda ke `ask`](https://code.claude.com/docs/id/mcp#organization-controls-on-connector-tools): jawab panggilan tersebut di callback. [Menangani pertanyaan klarifikasi](https://code.claude.com/docs/id/agent-sdk/user-input.md#handle-clarifying-questions) menunjukkan cara menjawab `AskUserQuestion`, dan panggilan konektor tiba dengan alasan `Your organization requires approval for this tool`

104>

105> * Tool kustom yang ditandai aplikasi Anda sebagai [`always_ask`](https://code.claude.com/docs/id/agent-sdk/custom-tools#require-approval-for-specific-tools): putuskan panggilan tersebut di callback. Untuk menghentikan kedatangan panggilan ini, [ubah kebijakan di tengah sesi](https://code.claude.com/docs/id/agent-sdk/typescript.md#mcpsdkserverconfigwithinstance). Dalam mode `auto`, `plan`, dan `bypassPermissions`, panggilan tersebut justru dapat disetujui sebelum callback, dalam kasus yang tercantum di bawah [Mode izin yang dapat menyetujui panggilan `always_ask`](https://code.claude.com/docs/id/agent-sdk/typescript#permission-modes-that-can-approve-an-always_ask-call)

94>106>

95> Cakupan tergantung pada bentuk entri: nama polos seperti `Read` atau `mcp__github__get_issue` menyetujui secara otomatis setiap panggilan ke tool tersebut kecuali pengecualian di atas dan [pembacaan dari jalur jaringan](https://code.claude.com/docs/id/permissions.md#network-paths), sementara aturan bercakupan seperti `Bash(npm test *)` hanya menyetujui secara otomatis panggilan yang cocok, dan panggilan `Bash` lainnya yang memerlukan persetujuan tetap diteruskan ke callback. Untuk pemeriksaan yang harus berjalan pada setiap panggilan tool, gunakan [hook `PreToolUse`](https://code.claude.com/docs/id/agent-sdk/hooks): hook berjalan sebelum setiap langkah lainnya, dan penolakan hook tetap berlaku bahkan dalam mode `bypassPermissions`.107> * [Penghapusan jalur kritis](https://code.claude.com/docs/id/permission-modes.md#critical-paths) `rm` dan `rmdir` yang dikenali: dalam mode `default`, `acceptEdits`, dan `bypassPermissions`, izinkan atau tolak penghapusan di callback, di mana [`decisionReason`](https://code.claude.com/docs/id/agent-sdk/typescript#canusetool) diawali dengan `Dangerous rm`. Untuk mode `auto` dan `plan`, lihat [Penghapusan jalur kritis di setiap mode izin](https://code.claude.com/docs/id/permission-modes.md#critical-path-removals-in-each-permission-mode). Pemeriksaan yang mengenali penghapusan ini [dapat melewatkan beberapa perintah](https://code.claude.com/docs/id/permission-modes.md#critical-paths)

108>

109> * **Nama polos**: entri seperti `Read` atau `mcp__github__get_issue` menyetujui secara otomatis setiap panggilan ke tool tersebut kecuali [tindakan yang tidak disetujui otomatis oleh mode mana pun](https://code.claude.com/docs/id/permission-modes.md#actions-no-mode-auto-approves) dan [pembacaan dari jalur jaringan](https://code.claude.com/docs/id/permissions.md#network-paths).

110>

111> * **Aturan bercakupan**: entri seperti `Bash(npm test *)` hanya menyetujui secara otomatis panggilan yang cocok, dan panggilan `Bash` lainnya yang memerlukan persetujuan tetap diteruskan ke callback.

112>

113> Untuk pemeriksaan yang harus berjalan pada setiap panggilan tool, gunakan [hook `PreToolUse`](https://code.claude.com/docs/id/agent-sdk/hooks): hook berjalan sebelum setiap langkah lainnya, dan penolakan hook tetap berlaku bahkan dalam mode `bypassPermissions`.

96 114 

97Untuk agen yang terkunci, pasangkan `allowedTools` dengan `permissionMode: "dontAsk"`:115Untuk agen yang terkunci, pasangkan `allowedTools` dengan `permissionMode: "dontAsk"`:

98 116 


103};121};

104```122```

105 123 

106Tool yang tercantum disetujui, kecuali [tindakan yang tidak disetujui otomatis oleh mode mana pun](https://code.claude.com/docs/id/permission-modes.md#actions-no-mode-auto-approves) dan [pembacaan dari jalur jaringan](https://code.claude.com/docs/id/permissions.md#network-paths). Setiap panggilan lain yang akan memunculkan permintaan izin justru ditolak, meskipun [mod](https://code.claude.com/docs/id/plugins/mods/overview.md) yang Anda instal masih dapat menyetujui [sebagian dari panggilan tersebut](https://code.claude.com/docs/id/permissions.md#precedence-among-rules-hooks-and-mods).124Panggilan `Read`, `Glob`, dan `Grep` yang tercantum disetujui, kecuali [tindakan yang tidak disetujui otomatis oleh mode mana pun](https://code.claude.com/docs/id/permission-modes.md#actions-no-mode-auto-approves) dan [pembacaan dari jalur jaringan](https://code.claude.com/docs/id/permissions.md#network-paths). Setiap panggilan lain yang akan memunculkan permintaan izin justru ditolak, meskipun [mod](https://code.claude.com/docs/id/plugins/mods/overview.md) yang Anda instal masih dapat menyetujui [sebagian dari panggilan tersebut](https://code.claude.com/docs/id/permissions.md#precedence-among-rules-hooks-and-mods).

107 125 

108Panggilan yang tidak memerlukan persetujuan dalam mode `default` tetap berjalan baik Anda mencantumkannya atau tidak. Panggilan tersebut mencakup [perintah Bash read-only](https://code.claude.com/docs/id/permissions.md#read-only-commands), tool seperti `Agent` yang tidak meminta persetujuan sebelum berjalan, dan pembacaan file di dalam direktori kerja Anda. Untuk menghapus tool sepenuhnya dari permintaan, tambahkan nama polosnya ke `disallowedTools`.126Panggilan yang tidak memerlukan persetujuan dalam mode `default` tetap berjalan baik Anda mencantumkannya atau tidak. Panggilan tersebut mencakup [perintah Bash read-only](https://code.claude.com/docs/id/permissions.md#read-only-commands), tool seperti `Agent` yang tidak meminta persetujuan sebelum berjalan, dan pembacaan file di dalam direktori kerja Anda. Untuk menyembunyikan tool bawaan sepenuhnya dari Claude alih-alih menolak panggilannya, tambahkan nama polosnya ke `disallowedTools`.

109 127 

110> [!WARNING]128> [!WARNING]

111>129>


128| `default` | Perilaku izin standar | Tidak ada persetujuan otomatis berbasis mode; panggilan yang memerlukan persetujuan dan tidak cocok dengan aturan izin memicu callback `canUseTool` Anda |146| `default` | Perilaku izin standar | Tidak ada persetujuan otomatis berbasis mode; panggilan yang memerlukan persetujuan dan tidak cocok dengan aturan izin memicu callback `canUseTool` Anda |

129| `dontAsk` | Tolak alih-alih meminta | Setiap panggilan yang sebaliknya akan meminta ditolak tanpa memanggil `canUseTool`, meskipun [mod](https://code.claude.com/docs/id/plugins/mods/overview.md) yang Anda instal masih dapat menyetujui [sebagian panggilan tersebut](https://code.claude.com/docs/id/permissions.md#precedence-among-rules-hooks-and-mods). Panggilan yang disetujui oleh `allowed_tools` atau aturan allow `settings.json` berjalan, begitu juga panggilan yang tidak memerlukan persetujuan dalam mode `default`. Beberapa panggilan, seperti [pembacaan dari jalur jaringan](https://code.claude.com/docs/id/permissions.md#network-paths), ditolak bahkan ketika `allowed_tools` atau aturan allow cocok dengannya. Untuk daftarnya, lihat [Mode jangan tanya](#don’t-ask-mode-dontask) |147| `dontAsk` | Tolak alih-alih meminta | Setiap panggilan yang sebaliknya akan meminta ditolak tanpa memanggil `canUseTool`, meskipun [mod](https://code.claude.com/docs/id/plugins/mods/overview.md) yang Anda instal masih dapat menyetujui [sebagian panggilan tersebut](https://code.claude.com/docs/id/permissions.md#precedence-among-rules-hooks-and-mods). Panggilan yang disetujui oleh `allowed_tools` atau aturan allow `settings.json` berjalan, begitu juga panggilan yang tidak memerlukan persetujuan dalam mode `default`. Beberapa panggilan, seperti [pembacaan dari jalur jaringan](https://code.claude.com/docs/id/permissions.md#network-paths), ditolak bahkan ketika `allowed_tools` atau aturan allow cocok dengannya. Untuk daftarnya, lihat [Mode jangan tanya](#don’t-ask-mode-dontask) |

130| `acceptEdits` | Terima otomatis pengeditan file | Pengeditan file dan [operasi sistem file](#accept-edits-mode-acceptedits) (`mkdir`, `rm`, `mv`, dll.) secara otomatis disetujui |148| `acceptEdits` | Terima otomatis pengeditan file | Pengeditan file dan [operasi sistem file](#accept-edits-mode-acceptedits) (`mkdir`, `rm`, `mv`, dll.) secara otomatis disetujui |

131| `bypassPermissions` | Lewati pemeriksaan izin | Tools berjalan tanpa prompt izin, kecuali untuk [tindakan yang tidak disetujui otomatis oleh mode mana pun](https://code.claude.com/docs/id/permission-modes.md#actions-no-mode-auto-approves). Gunakan dengan hati-hati |149| `bypassPermissions` | Lewati pemeriksaan izin | Tools berjalan tanpa prompt izin, kecuali untuk [tindakan yang tidak disetujui otomatis oleh mode mana pun](https://code.claude.com/docs/id/permission-modes.md#actions-no-mode-auto-approves) dan, di luar [sesi cloud](https://code.claude.com/docs/id/claude-code-on-the-web.md), tool kustom yang [ditandai `always_ask`](https://code.claude.com/docs/id/agent-sdk/custom-tools#require-approval-for-specific-tools) oleh aplikasi Anda. Gunakan dengan hati-hati |

132| `plan` | Mode perencanaan | Claude menjelajahi dan merencanakan tanpa mengedit file sumber Anda; pengeditan file tidak pernah auto-approved dan meminta melalui callback `canUseTool` Anda |150| `plan` | Mode perencanaan | Claude menjelajahi dan merencanakan tanpa mengedit file sumber Anda; pengeditan file tidak pernah auto-approved dan meminta melalui callback `canUseTool` Anda |

133| `auto` | Persetujuan yang diklasifikasikan model | Pengklasifikasi model meninjau tindakan seperti perintah shell dan permintaan jaringan, memungkinkan atau memblokir masing-masing yang ditinjau. Lihat [Mode Auto](https://code.claude.com/docs/id/permission-modes.md#eliminate-prompts-with-auto-mode) untuk ketersediaan dan urutan keputusan |151| `auto` | Persetujuan yang diklasifikasikan model | Pengklasifikasi model meninjau tindakan seperti perintah shell dan permintaan jaringan, memungkinkan atau memblokir masing-masing yang ditinjau. Lihat [Mode Auto](https://code.claude.com/docs/id/permission-modes.md#eliminate-prompts-with-auto-mode) untuk ketersediaan dan urutan keputusan |

134 152 


256* Bekerja pada jalur di luar cakupan itu274* Bekerja pada jalur di luar cakupan itu

257* Menulis ke jalur yang dilindungi275* Menulis ke jalur yang dilindungi

258* Menghapus jalur yang dikenali Claude Code sebagai [jalur kritis](https://code.claude.com/docs/id/permission-modes.md#critical-paths) dengan `rm` atau `rmdir`276* Menghapus jalur yang dikenali Claude Code sebagai [jalur kritis](https://code.claude.com/docs/id/permission-modes.md#critical-paths) dengan `rm` atau `rmdir`

277* Menjalankan [`touch`](https://code.claude.com/docs/id/permission-modes#auto-approve-file-edits-with-acceptedits-mode) dengan, misalnya, sebuah opsi, glob, atau prefiks `timeout 5` atau `LANG=C`

259 278 

260**Gunakan ketika:** Anda mempercayai pengeditan Claude dan menginginkan iterasi yang lebih cepat, seperti selama prototyping atau saat bekerja di direktori terisolasi.279**Gunakan ketika:** Anda mempercayai pengeditan Claude dan menginginkan iterasi yang lebih cepat, seperti selama prototyping atau saat bekerja di direktori terisolasi.

261 280 

262#### Mode jangan tanya (`dontAsk`)281#### Mode jangan tanya (`dontAsk`)

263 282 

264Mengonversi prompt izin apa pun menjadi penolakan, tanpa memanggil `canUseTool`, meskipun [mod](https://code.claude.com/docs/id/plugins/mods/overview.md) yang Anda instal masih dapat menyetujui [sebagian panggilan tersebut](https://code.claude.com/docs/id/permissions.md#precedence-among-rules-hooks-and-mods). Tools yang disetujui sebelumnya oleh `allowed_tools`, aturan allow `settings.json`, atau hook berjalan seperti biasa. Panggilan yang tidak memerlukan persetujuan dalam mode `default` juga berjalan, seperti pembacaan file di dalam direktori kerja Anda dan panggilan ke `Agent`.283Mengonversi prompt izin apa pun menjadi penolakan, tanpa memanggil `canUseTool`, meskipun [mod](https://code.claude.com/docs/id/plugins/mods/overview.md) yang Anda instal masih dapat menyetujui [sebagian panggilan tersebut](https://code.claude.com/docs/id/permissions.md#precedence-among-rules-hooks-and-mods). Tools yang disetujui sebelumnya oleh `allowed_tools`, aturan allow `settings.json`, atau hook berjalan seperti biasa. Panggilan yang tidak memerlukan persetujuan dalam mode `default` juga berjalan seperti biasa, seperti pembacaan file di dalam direktori kerja Anda dan panggilan ke `Agent`.

265 284 

266Tool konektor [yang diatur organisasi Anda ke `ask`](https://code.claude.com/docs/id/mcp#organization-controls-on-connector-tools), tools yang memerlukan interaksi pengguna, [pembacaan dari jalur jaringan](https://code.claude.com/docs/id/permissions.md#network-paths), dan [penghapusan jalur kritis](https://code.claude.com/docs/id/permission-modes.md#critical-paths) yang dikenali ditolak bahkan ketika aturan allow cocok. Hook allow `PreToolUse` juga tidak meloloskan penghapusan jalur kritis yang dikenali maupun pembacaan dari jalur jaringan. Pemeriksaan yang mengenali penghapusan ini [dapat melewatkan beberapa perintah](https://code.claude.com/docs/id/permission-modes.md#critical-paths).285Panggilan berikut ditolak bahkan ketika aturan allow cocok:

286 

287* Tool konektor [yang diatur organisasi Anda ke `ask`](https://code.claude.com/docs/id/mcp#organization-controls-on-connector-tools)

288* Tools yang memerlukan interaksi pengguna, seperti `AskUserQuestion` dan tool MCP yang server-nya mengatur [`_meta["anthropic/requiresUserInteraction"]`](https://code.claude.com/docs/id/mcp#require-approval-for-a-specific-tool)

289* Tool kustom yang `permission_policy`-nya diatur oleh aplikasi Anda ke [`always_ask`](https://code.claude.com/docs/id/agent-sdk/custom-tools#require-approval-for-specific-tools)

290* [Pembacaan dari jalur jaringan](https://code.claude.com/docs/id/permissions.md#network-paths)

291* [Penghapusan jalur kritis](https://code.claude.com/docs/id/permission-modes.md#critical-paths) yang dikenali

292 

293Jika hook `PreToolUse` Anda mengembalikan `allow` untuk penghapusan jalur kritis yang dikenali, pembacaan dari jalur jaringan, atau panggilan ke tool yang ditandai `always_ask`, panggilan tersebut tetap ditolak. Pemeriksaan yang mengenali penghapusan ini [dapat melewatkan beberapa perintah](https://code.claude.com/docs/id/permission-modes.md#critical-paths).

267 294 

268**Gunakan ketika:** Anda menginginkan permukaan tool yang tetap dan eksplisit untuk agen headless dan lebih suka penolakan keras daripada ketergantungan diam pada `canUseTool` yang tidak ada.295**Gunakan ketika:** Anda menginginkan permukaan tool yang tetap dan eksplisit untuk agen headless dan lebih suka penolakan keras daripada ketergantungan diam pada `canUseTool` yang tidak ada.

269 296 

270#### Mode lewati izin (`bypassPermissions`)297#### Mode lewati izin (`bypassPermissions`)

271 298 

272Auto-approve penggunaan tool tanpa meminta, kecuali kasus yang tercantum dalam peringatan di bawah. Hook masih dijalankan dan dapat memblokir operasi jika diperlukan. Pada Linux dan macOS, Claude Code menolak untuk memulai dalam mode ini sebagai root atau di bawah `sudo` di luar [sandbox yang diakui](https://code.claude.com/docs/id/permission-modes.md#skip-all-checks-with-bypasspermissions-mode), dan query gagal sebelum giliran pertama.299Auto-approve penggunaan tool tanpa meminta, kecuali [tindakan yang tidak disetujui otomatis oleh mode mana pun](https://code.claude.com/docs/id/permission-modes.md#actions-no-mode-auto-approves). Hook masih dijalankan dan dapat memblokir operasi jika diperlukan. Pada Linux dan macOS, Claude Code menolak untuk memulai dalam mode ini sebagai root atau di bawah `sudo` di luar [sandbox yang diakui](https://code.claude.com/docs/id/permission-modes.md#skip-all-checks-with-bypasspermissions-mode), dan query gagal sebelum giliran pertama.

273 300 

274> [!WARNING]301> [!WARNING]

275>302>


278> `allowed_tools` tidak membatasi mode ini. Setiap tool disetujui, bukan hanya yang Anda daftarkan. Kontrol ini masih berlaku:305> `allowed_tools` tidak membatasi mode ini. Setiap tool disetujui, bukan hanya yang Anda daftarkan. Kontrol ini masih berlaku:

279>306>

280> * Aturan penolakan, aturan `ask` eksplisit, dan hook dievaluasi sebelum pemeriksaan mode dan masih dapat memblokir tool.307> * Aturan penolakan, aturan `ask` eksplisit, dan hook dievaluasi sebelum pemeriksaan mode dan masih dapat memblokir tool.

281> * Tool konektor [yang diatur organisasi Anda ke `ask`](https://code.claude.com/docs/id/mcp#organization-controls-on-connector-tools), tools yang memerlukan interaksi pengguna, dan [penghapusan jalur kritis](https://code.claude.com/docs/id/permission-modes.md#critical-paths) yang dikenali masih jatuh ke callback `canUseTool` Anda. Pemeriksaan yang mengenali penghapusan ini [dapat melewatkan beberapa perintah](https://code.claude.com/docs/id/permission-modes.md#critical-paths).308> * Tool konektor [yang diatur organisasi Anda ke `ask`](https://code.claude.com/docs/id/mcp#organization-controls-on-connector-tools), tools yang memerlukan interaksi pengguna, dan [penghapusan jalur kritis](https://code.claude.com/docs/id/permission-modes.md#critical-paths) yang dikenali masih jatuh ke callback `canUseTool` Anda. Pemeriksaan yang mengenali penghapusan ini [dapat melewatkan beberapa perintah](https://code.claude.com/docs/id/permission-modes.md#critical-paths). Di luar [sesi cloud](https://code.claude.com/docs/id/claude-code-on-the-web.md), panggilan ke tool kustom yang [ditandai `always_ask`](https://code.claude.com/docs/id/agent-sdk/custom-tools#require-approval-for-specific-tools) oleh aplikasi Anda juga jatuh ke callback tersebut.

282> * [Perlindungan pesan lintas sesi](https://code.claude.com/docs/id/permission-modes.md#skip-all-checks-with-bypasspermissions-mode) masih berlaku.309> * [Perlindungan pesan lintas sesi](https://code.claude.com/docs/id/permission-modes.md#skip-all-checks-with-bypasspermissions-mode) masih berlaku.

283 310 

284#### Mode rencana (`plan`)311#### Mode rencana (`plan`)

285 312 

286Claude menjelajahi basis kode dan menghasilkan rencana tanpa mengedit file sumber Anda. Tools read-only berjalan seperti dalam mode izin `default`.313Claude menjelajahi codebase dan menghasilkan rencana tanpa mengedit file sumber Anda. Pengeditan file tidak pernah auto-approved dalam plan mode, bahkan ketika aturan allow cocok atau hook `PreToolUse` mengembalikan `allow`. Pengeditan tersebut meminta melalui callback `canUseTool` Anda sebagai gantinya.

287 314 

288Pengeditan file tidak pernah auto-approved dalam plan mode, bahkan ketika aturan allow cocok atau hook `PreToolUse` mengembalikan `allow`. Pengeditan tersebut meminta melalui callback `canUseTool` Anda sebagai gantinya. Pada Claude Code v2.1.212 atau lebih baru, perintah shell yang memodifikasi file, seperti `touch` dan `rm`, mencapai callback `canUseTool` Anda dengan cara yang sama.315Selama auto mode tersedia untuk sesi, perintah yang dijalankan Claude selama perencanaan secara default tidak mencapai callback Anda, karena model pengklasifikasi yang digunakan [auto mode](https://code.claude.com/docs/id/permission-modes.md#eliminate-prompts-with-auto-mode) [meninjaunya sebagai gantinya](https://code.claude.com/docs/id/permission-modes.md#analyze-before-you-edit-with-plan-mode). Dengan peninjauan tersebut aktif, pengklasifikasi juga dapat menyetujui panggilan read-only yang sebaliknya akan mencapai callback Anda, seperti panggilan `WebFetch` tanpa aturan allow.

289 316 

290Dalam SDK TypeScript, jika Anda mengatur `allowDangerouslySkipPermissions: true` bersama dengan `permissionMode: 'plan'`, pengeditan file dan perintah shell yang memodifikasi file masih mencapai callback `canUseTool` Anda. Opsi ini memungkinkan Anda untuk beralih ke `bypassPermissions` nanti dengan `setPermissionMode()`.317> [!NOTE]

318>

319> Dalam SDK TypeScript, jika Anda mengatur `allowDangerouslySkipPermissions: true` bersama dengan `permissionMode: 'plan'`, pengeditan file masih mencapai callback `canUseTool` Anda. Untuk mengalihkan sesi yang dimulai dalam plan mode ke `bypassPermissions` nanti dengan `setPermissionMode()`, Anda memerlukan `allowDangerouslySkipPermissions` yang diatur sejak awal.

291 320 

292Claude dapat menggunakan `AskUserQuestion` untuk mengklarifikasi persyaratan sebelum menyelesaikan rencana. Lihat [Tangani persetujuan dan input pengguna](https://code.claude.com/docs/id/agent-sdk/user-input.md#handle-clarifying-questions) untuk menangani prompt ini.321Claude dapat menggunakan `AskUserQuestion` untuk mengklarifikasi persyaratan sebelum menyelesaikan rencana. Lihat [Tangani persetujuan dan input pengguna](https://code.claude.com/docs/id/agent-sdk/user-input.md#handle-clarifying-questions) untuk menangani prompt ini.

293 322 

Details

70>70>

71> Jalur harus menunjuk ke direktori root plugin: induk dari `skills/`, `agents/`, `hooks/`, `commands/`, atau `.claude-plugin/`.71> Jalur harus menunjuk ke direktori root plugin: induk dari `skills/`, `agents/`, `hooks/`, `commands/`, atau `.claude-plugin/`.

72 72 

73### Menambahkan plugins ke sesi yang sedang berjalan

74 

75Di TypeScript SDK, panggil [`reloadPlugins()`](https://code.claude.com/docs/id/agent-sdk/typescript#load-more-plugin-folders-with-addplugins) pada objek `Query` yang dikembalikan oleh `query()`, dan cantumkan direktori plugin dalam opsi `addPlugins` pada panggilan tersebut. Setiap entri `addPlugins` adalah objek `{ type: "local", path }` dengan `path` absolut. Memerlukan TypeScript Agent SDK v0.3.301 atau yang lebih baru.

76 

77Dalam contoh ini, `q` adalah objek `Query` yang dikembalikan oleh `query()`. Contoh ini menambahkan satu direktori plugin ke sesi yang sedang berjalan dan, setelah `reloadPlugins()` selesai, mencetak jalur setiap plugin dalam sesi:

78 

79```typescript theme={null}

80const result = await q.reloadPlugins({

81 addPlugins: [{ type: "local", path: "/home/user/plugins/another-plugin" }]

82});

83 

84console.log(result.plugins.map((plugin) => plugin.path));

85```

86 

87Jika plugin berhasil dimuat, daftar yang dicetak mencakup `/home/user/plugins/another-plugin`. Jika jalur tersebut tidak ada dalam daftar, atau `reloadPlugins()` ditolak, lihat [Saat `reloadPlugins()` tidak memuat folder `addPlugins`](https://code.claude.com/docs/id/agent-sdk/typescript#when-reloadplugins-doesnt-load-the-addplugins-folders) untuk mengetahui penyebabnya.

88 

73## Memverifikasi instalasi plugin89## Memverifikasi instalasi plugin

74 90 

75Ketika plugins dimuat dengan berhasil, mereka muncul dalam pesan inisialisasi sistem. Anda dapat memverifikasi bahwa plugins Anda tersedia:91Ketika plugins dimuat dengan berhasil, mereka muncul dalam pesan inisialisasi sistem. Anda dapat memverifikasi bahwa plugins Anda tersedia:

Details

200| :- | :- | :- | :- |200| :- | :- | :- | :- |

201| `title` | `string` | `undefined` | Judul yang dapat dibaca manusia untuk tool |201| `title` | `string` | `undefined` | Judul yang dapat dibaca manusia untuk tool |

202| `readOnlyHint` | `boolean` | `false` | Jika `true`, tool tidak memodifikasi lingkungannya |202| `readOnlyHint` | `boolean` | `false` | Jika `true`, tool tidak memodifikasi lingkungannya |

203| `destructiveHint` | `boolean` | `true` | Jika `true`, tool dapat melakukan pembaruan destruktif (hanya bermakna ketika `readOnlyHint` adalah `false`) |203| `destructiveHint` | `boolean` | `true` | Jika `true`, tool dapat melakukan pembaruan destruktif. Tetapkan `destructiveHint: true` secara eksplisit pada setiap tool yang Anda tandai [`always_ask`](#mcpservertoolpolicy), atau pengklasifikasi auto mode dapat menyetujui panggilan tool tersebut sebagai pengganti callback `canUseTool` Anda. Membiarkan `destructiveHint` tidak diatur tidaklah cukup, karena Claude Code memperlakukan `destructiveHint` yang tidak diatur sebagai `false` saat menangani panggilan `always_ask`, meskipun default spesifikasi MCP adalah `true` |

204| `idempotentHint` | `boolean` | `false` | Jika `true`, panggilan berulang dengan argumen yang sama tidak memiliki efek tambahan (hanya bermakna ketika `readOnlyHint` adalah `false`) |204| `idempotentHint` | `boolean` | `false` | Jika `true`, panggilan berulang dengan argumen yang sama tidak memiliki efek tambahan (hanya bermakna ketika `readOnlyHint` adalah `false`) |

205| `openWorldHint` | `boolean` | `true` | Jika `true`, tool berinteraksi dengan entitas eksternal (misalnya, pencarian web). Jika `false`, domain tool ditutup (misalnya, tool memori) |205| `openWorldHint` | `boolean` | `true` | Jika `true`, tool berinteraksi dengan entitas eksternal (misalnya, pencarian web). Jika `false`, domain tool ditutup (misalnya, tool memori) |

206 206 


630 ): Promise<SDKControlReadFileResponse | null>;630 ): Promise<SDKControlReadFileResponse | null>;

631 reloadPlugins(options?: {631 reloadPlugins(options?: {

632 holdOnCacheImpact?: boolean;632 holdOnCacheImpact?: boolean;

633 addPlugins?: SdkPluginConfig[];

633 }): Promise<SDKControlReloadPluginsResponse>;634 }): Promise<SDKControlReloadPluginsResponse>;

634 reloadSkills(): Promise<SDKControlReloadSkillsResponse>;635 reloadSkills(): Promise<SDKControlReloadSkillsResponse>;

635 reloadOutputStyles(): Promise<SDKControlReloadOutputStylesResponse>;636 reloadOutputStyles(): Promise<SDKControlReloadOutputStylesResponse>;


669| `mcpServerStatus()` | Mengembalikan status server MCP yang terhubung sebagai [`McpServerStatus`](#mcpserverstatus)`[]` |670| `mcpServerStatus()` | Mengembalikan status server MCP yang terhubung sebagai [`McpServerStatus`](#mcpserverstatus)`[]` |

670| `getContextUsage(opts?)` | Mengembalikan [`SDKControlGetContextUsageResponse`](#sdkcontrolgetcontextusageresponse) yang merinci penggunaan context window sesi berdasarkan kategori, skill, dan tool. Dengan `detail` default, respons ini menyertakan data yang ditampilkan `/context` dalam sesi interaktif, yang dihitung dengan permintaan API penghitungan token yang tidak muncul dalam aliran pesan; lihat [bagaimana permintaan ini ditangani](#sdkcontrolgetcontextusageresponse). [Opsi `detail`](#sdkcontrolgetcontextusageresponse) memerlukan Agent SDK v0.3.257 atau lebih baru |671| `getContextUsage(opts?)` | Mengembalikan [`SDKControlGetContextUsageResponse`](#sdkcontrolgetcontextusageresponse) yang merinci penggunaan context window sesi berdasarkan kategori, skill, dan tool. Dengan `detail` default, respons ini menyertakan data yang ditampilkan `/context` dalam sesi interaktif, yang dihitung dengan permintaan API penghitungan token yang tidak muncul dalam aliran pesan; lihat [bagaimana permintaan ini ditangani](#sdkcontrolgetcontextusageresponse). [Opsi `detail`](#sdkcontrolgetcontextusageresponse) memerlukan Agent SDK v0.3.257 atau lebih baru |

671| `readFile(path, options?)` | Membaca file dari filesystem sesi. Claude Code meresolusi path terhadap `cwd`; [Apa yang dapat dibaca `readFile()`](#what-readfile-can-read) mencantumkan file yang dilayaninya. Teruskan `{ maxBytes }` untuk mengubah batas baca (default 1 MB, maksimum 10 MB) dan `{ encoding: 'base64' }` untuk file biner seperti gambar. Diselesaikan dengan [`SDKControlReadFileResponse`](#sdkcontrolreadfileresponse), atau `null` jika izin ditolak, file tidak ada, atau terjadi error transport. Memerlukan TypeScript SDK v0.2.121 atau lebih baru |672| `readFile(path, options?)` | Membaca file dari filesystem sesi. Claude Code meresolusi path terhadap `cwd`; [Apa yang dapat dibaca `readFile()`](#what-readfile-can-read) mencantumkan file yang dilayaninya. Teruskan `{ maxBytes }` untuk mengubah batas baca (default 1 MB, maksimum 10 MB) dan `{ encoding: 'base64' }` untuk file biner seperti gambar. Diselesaikan dengan [`SDKControlReadFileResponse`](#sdkcontrolreadfileresponse), atau `null` jika izin ditolak, file tidak ada, atau terjadi error transport. Memerlukan TypeScript SDK v0.2.121 atau lebih baru |

672| `reloadPlugins(options?)` | Memuat ulang plugin dari disk, sehingga plugin yang Anda instal atau edit di tengah sesi sampai ke sesi yang sedang berjalan. Diselesaikan dengan [`SDKControlReloadPluginsResponse`](#sdkcontrolreloadpluginsresponse) yang mencantumkan perintah, subagent, plugin, dan status server MCP sesi. Memerlukan Agent SDK v0.2.85 atau lebih baru. [Opsi `holdOnCacheImpact`](#sdkcontrolreloadpluginsresponse) memerlukan Agent SDK v0.3.268 atau lebih baru |673| `reloadPlugins(options?)` | Memuat ulang plugin dari disk, sehingga plugin yang Anda instal atau edit di tengah sesi mencapai sesi yang sedang berjalan. Resolve dengan [`SDKControlReloadPluginsResponse`](#sdkcontrolreloadpluginsresponse) yang mencantumkan perintah, subagent, plugin, dan status server MCP sesi. Memerlukan Agent SDK v0.2.85 atau lebih baru. [Opsi `holdOnCacheImpact`](#sdkcontrolreloadpluginsresponse) memerlukan Agent SDK v0.3.268 atau lebih baru. [Opsi `addPlugins`](#load-more-plugin-folders-with-addplugins) memerlukan Agent SDK v0.3.301 atau lebih baru |

673| `reloadSkills()` | Memuat ulang skill dari disk, sehingga skill yang Anda tambahkan atau edit di tengah sesi menjadi tersedia bagi sesi yang sedang berjalan. Diselesaikan dengan [`SDKControlReloadSkillsResponse`](#sdkcontrolreloadskillsresponse) yang mencantumkan skill yang tersedia setelah pemuatan ulang. Memerlukan Agent SDK v0.3.163 atau lebih baru |674| `reloadSkills()` | Memuat ulang skill dari disk, sehingga skill yang Anda tambahkan atau edit di tengah sesi menjadi tersedia bagi sesi yang sedang berjalan. Diselesaikan dengan [`SDKControlReloadSkillsResponse`](#sdkcontrolreloadskillsresponse) yang mencantumkan skill yang tersedia setelah pemuatan ulang. Memerlukan Agent SDK v0.3.163 atau lebih baru |

674| `reloadOutputStyles()` | Membaca ulang [gaya output](https://code.claude.com/docs/id/output-styles.md) dari disk, sehingga file gaya yang Anda tambahkan atau edit di tengah sesi menjadi tersedia bagi sesi yang sedang berjalan. Diselesaikan dengan [`SDKControlReloadOutputStylesResponse`](#sdkcontrolreloadoutputstylesresponse) yang mencantumkan nama gaya yang tersedia setelah pemuatan ulang. Memerlukan Agent SDK v0.3.261 atau lebih baru |675| `reloadOutputStyles()` | Membaca ulang [gaya output](https://code.claude.com/docs/id/output-styles.md) dari disk, sehingga file gaya yang Anda tambahkan atau edit di tengah sesi menjadi tersedia bagi sesi yang sedang berjalan. Diselesaikan dengan [`SDKControlReloadOutputStylesResponse`](#sdkcontrolreloadoutputstylesresponse) yang mencantumkan nama gaya yang tersedia setelah pemuatan ulang. Memerlukan Agent SDK v0.3.261 atau lebih baru |

675| `seedReadState(path, mtime)` | Menandai file sebagai sudah dibaca sehingga Edit berikutnya tidak gagal dengan `File has not been read yet`. Lihat [`seedReadState()`](#seedreadstate). Memerlukan TypeScript SDK v0.2.83 atau lebih baru |676| `seedReadState(path, mtime)` | Menandai file sebagai sudah dibaca sehingga Edit berikutnya tidak gagal dengan `File has not been read yet`. Lihat [`seedReadState()`](#seedreadstate). Memerlukan TypeScript SDK v0.2.83 atau lebih baru |


1135 1136 

1136`cache_impact` hanya ada bersama `held: true`. `mcp_servers_added` dan `mcp_servers_removed` menyebutkan server MCP plugin yang akan didaftarkan atau dihapus oleh pemuatan ulang, sebagai nama dengan cakupan `plugin:<plugin>:<server>`. Nama-nama tersebut dibuat oleh pembuat plugin, jadi validasi sebelum menampilkannya. `lsp_tool_change` menyatakan apakah penerapan akan menambahkan atau menghapus tool LSP, atau `null` jika tidak melakukan keduanya. Bentuk `may-` berarti pemeriksaan tidak dapat sepenuhnya melihat kumpulan plugin yang tertunda.1137`cache_impact` hanya ada bersama `held: true`. `mcp_servers_added` dan `mcp_servers_removed` menyebutkan server MCP plugin yang akan didaftarkan atau dihapus oleh pemuatan ulang, sebagai nama dengan cakupan `plugin:<plugin>:<server>`. Nama-nama tersebut dibuat oleh pembuat plugin, jadi validasi sebelum menampilkannya. `lsp_tool_change` menyatakan apakah penerapan akan menambahkan atau menghapus tool LSP, atau `null` jika tidak melakukan keduanya. Bentuk `may-` berarti pemeriksaan tidak dapat sepenuhnya melihat kumpulan plugin yang tertunda.

1137 1138 

1139#### Memuat lebih banyak folder plugin dengan `addPlugins`

1140 

1141Untuk memuat folder plugin yang tidak ada dalam opsi [`plugins`](#options) saat startup, berikan folder tersebut ke `reloadPlugins()` sebagai `addPlugins`, yaitu daftar entri [`SdkPluginConfig`](#sdkpluginconfig) yang `path`-nya absolut. Claude Code memuat folder baru dan me-reload plugin yang sudah ada di sesi dalam satu kali proses. Server MCP dari setiap plugin yang ditambahkan juga terhubung, kecuali Anda mengatur [`skipMcpDiscovery`](#sdkpluginconfig) pada entri folder tersebut. Memerlukan Agent SDK v0.3.301 atau lebih baru dan Claude Code v2.1.301 atau lebih baru.

1142 

1143Contoh ini menambahkan satu folder ke query `q` yang sedang berjalan dan mencetak path instalasi setiap plugin yang telah dimuat sesi ketika panggilan selesai:

1144 

1145```typescript theme={null}

1146const result = await q.reloadPlugins({

1147 addPlugins: [{ type: "local", path: "/opt/my-app/plugins/reports" }]

1148});

1149 

1150console.log(result.plugins.map((plugin) => plugin.path));

1151```

1152 

1153Jika folder berhasil dimuat, daftar yang dicetak menyertakan `/opt/my-app/plugins/reports`, dan perintah serta subagent plugin tersebut muncul di `result.commands` dan `result.agents`.

1154 

1155Folder yang ditambahkan tetap menjadi bagian dari sesi. Ketika Anda memanggil `reloadPlugins()` lagi, Claude Code me-reload folder tersebut bersama plugin lainnya, dan Anda tidak perlu memberikannya di `addPlugins` lagi.

1156 

1157##### Ketika `reloadPlugins()` tidak memuat folder `addPlugins`

1158 

1159Jika `reloadPlugins()` ditolak (reject), tidak ada folder `addPlugins` yang ditambahkan, jadi berikan folder tersebut di `addPlugins` lagi saat Anda mencoba ulang. Ketika penolakan memiliki salah satu penyebab berikut, sesi tetap mempertahankan plugin yang sudah dimilikinya:

1160 

1161* **`path` relatif atau entri yang salah bentuk**: pesan error berbunyi `add_plugins must be a list of { type: "local", path } entries with absolute paths`. Claude Code menolak seluruh daftar karena satu entri yang buruk, jadi berikan setiap entri sebagai `{ type: "local", path }` dengan `path` absolut

1162* **Seorang administrator telah mengaktifkan [`disableSideloadFlags`](https://code.claude.com/docs/id/settings-reference#disablesideloadflags) di pengaturan terkelola Anda**: pesan berbunyi `reload_plugins add_plugins is disabled by managed settings (disableSideloadFlags)`. Untuk memuat folder tersebut, minta administrator tersebut untuk menghapus pengaturan itu

1163* **[Sandbox](https://code.claude.com/docs/id/sandboxing.md) tidak dapat dibangun ulang**: dengan [sandboxing](#sandboxsettings) aktif, Claude Code membangun ulang konfigurasi sandbox agar perintah shell yang di-sandbox tidak dapat menulis ke folder yang Anda tambahkan. Pesan berbunyi `the sandbox could not be rebuilt to keep shell commands out of this folder`. Periksa apakah [pengaturan sandbox](#sandboxsettings) Anda masih membentuk konfigurasi yang valid

1164 

1165Jika Anda memberikan `holdOnCacheImpact` dan panggilan di-resolve dengan [`held: true`](#sdkcontrolreloadpluginsresponse), folder `addPlugins` tidak ditambahkan. Untuk tetap menambahkannya, panggil `reloadPlugins()` lagi dengan daftar `addPlugins` yang sama dan tanpa `holdOnCacheImpact`.

1166 

1167Ketika panggilan di-resolve tanpa `held: true` dan sebuah folder masih tidak ada di `result.plugins`, mulailah dengan memeriksa penyebab berikut:

1168 

1169* **Folder tidak ada atau plugin-nya gagal dimuat**: `result.error_count` bernilai `1` atau lebih. Meski demikian, folder tetap menjadi bagian dari sesi. Setelah Anda memperbaiki folder tersebut, panggil `reloadPlugins()` lagi untuk memuatnya, kali ini tanpa mencantumkannya di `addPlugins`

1170* **Executable Claude Code lebih lama dari v2.1.301**: executable yang lebih lama dari v2.1.301 mengabaikan `addPlugins` dan hanya me-reload plugin yang sudah dimiliki sesi. Periksa `claude_code_version` pada [pesan init](#sdksystemmessage), dan jalankan executable versi v2.1.301 atau lebih baru

1171 

1138### `SDKControlReloadSkillsResponse`1172### `SDKControlReloadSkillsResponse`

1139 1173 

1140Tipe kembalian dari [`reloadSkills()`](#query-object).1174Tipe kembalian dari [`reloadSkills()`](#query-object).


1430 1464 

1431#### `McpSdkServerConfigWithInstance`1465#### `McpSdkServerConfigWithInstance`

1432 1466 

1467Konfigurasi untuk server MCP in-process, yaitu server yang dibuat oleh [`createSdkMcpServer()`](#createsdkmcpserver) dan berjalan di dalam proses aplikasi Anda. Ini adalah objek yang dikembalikan oleh `createSdkMcpServer()`, ditambah daftar `tools` opsional berisi entri [`McpServerToolPolicy`](#mcpservertoolpolicy) yang Anda tambahkan sendiri. Untuk mewajibkan persetujuan bagi panggilan ke salah satu tool server, atau untuk menolaknya, tambahkan entri yang menyebutkan tool tersebut.

1468 

1433```typescript theme={null}1469```typescript theme={null}

1434type McpSdkServerConfigWithInstance = {1470type McpSdkServerConfigWithInstance = {

1435 type: "sdk";1471 type: "sdk";

1436 name: string;1472 name: string;

1437 timeout?: number;1473 timeout?: number;

1474 tools?: McpServerToolPolicy[];

1438 instance: McpServer;1475 instance: McpServer;

1439};1476};

1440```1477```

1441 1478 

1479Untuk mengatur kebijakan, sebarkan (spread) objek yang dikembalikan oleh `createSdkMcpServer()` ke dalam objek baru di `mcpServers` dan tambahkan daftar `tools` ke objek baru tersebut. Opsi `tools` dari `createSdkMcpServer()` itu sendiri adalah daftar yang berbeda, yang berisi definisi tool dan tidak menerima entri kebijakan. Daftar kebijakan memerlukan Agent SDK v0.3.301 atau lebih baru, dan [`McpServerToolPolicy`](#mcpservertoolpolicy) menjelaskan fungsi setiap nilai `permission_policy`.

1480 

1481Contoh ini menyetujui terlebih dahulu setiap tool pada server `records` dengan wildcard `allowedTools`, lalu menandai `delete_record` sebagai `always_ask` sehingga panggilan ke tool tersebut tetap diteruskan ke `canUseTool`. Dengan anotasi `destructiveHint: true`, panggilan tetap mencapai callback jika sesi berjalan dalam mode `auto`, di mana [pengklasifikasi](https://code.claude.com/docs/id/permission-modes.md#eliminate-prompts-with-auto-mode) auto mode dapat menyetujuinya jika tidak demikian.

1482 

1483```typescript theme={null}

1484import { query, tool, createSdkMcpServer } from "@anthropic-ai/claude-agent-sdk";

1485import { z } from "zod";

1486 

1487const deleteRecord = tool(

1488 "delete_record",

1489 "Delete a customer record by ID",

1490 { id: z.string() },

1491 async ({ id }) => ({ content: [{ type: "text", text: `Deleted record ${id}` }] }),

1492 { annotations: { destructiveHint: true } }

1493);

1494 

1495const records = createSdkMcpServer({ name: "records", tools: [deleteRecord] });

1496 

1497for await (const message of query({

1498 prompt: "Delete customer record 42",

1499 options: {

1500 mcpServers: {

1501 // Spread the returned config and add the policy list beside it

1502 records: {

1503 ...records,

1504 tools: [{ name: "delete_record", permission_policy: "always_ask" as const }]

1505 }

1506 },

1507 allowedTools: ["mcp__records__*"],

1508 canUseTool: async (toolName, input) => {

1509 console.log(`Approval requested for ${toolName}`);

1510 return { behavior: "allow", updatedInput: input };

1511 }

1512 }

1513})) {

1514 if (message.type === "result" && message.subtype === "success") {

1515 console.log(message.result);

1516 }

1517}

1518```

1519 

1520Ketika Claude memanggil tool tersebut, skrip mencetak `Approval requested for mcp__records__delete_record` sebelum tool `delete_record` berjalan, meskipun entri `allowedTools` sebenarnya akan menyetujui panggilan tersebut.

1521 

1522Untuk mengubah atau mencabut kebijakan tool saat sesi berjalan, berikan konfigurasi server dengan nilai `tools` baru ke [`setMcpServers()`](#mcpsetserversresult). Nilai `tools` yang Anda berikan berlaku mulai dari panggilan Claude berikutnya ke tool server tersebut:

1523 

1524* **Daftar dengan entri**: entri-entri tersebut menggantikan kebijakan saat ini

1525* **Daftar kosong**: setiap kebijakan pada server dihapus

1526* **Tanpa kunci `tools`**: kebijakan saat ini tetap berlaku

1527 

1528Sertakan dalam panggilan tersebut server in-process Anda yang lain dan server apa pun yang ditambahkan oleh panggilan `setMcpServers()` sebelumnya, atau panggilan tersebut akan memutus koneksinya.

1529 

1530#### `McpServerToolPolicy`

1531 

1532Satu entri dalam daftar `tools` dari [`McpSdkServerConfigWithInstance`](#mcpsdkserverconfigwithinstance), yang menyebutkan salah satu tool server dan mengatur kebijakan izin untuk panggilan ke tool tersebut. Daftar ini memerlukan Agent SDK v0.3.301 atau lebih baru dan Claude Code v2.1.301 atau lebih baru. Executable Claude Code yang lebih lama, seperti executable yang Anda tunjuk dengan `pathToClaudeCodeExecutable`, mengabaikan daftar ini. Dalam hal ini `always_ask` dan `always_deny` tidak diberlakukan, dan setiap panggilan melewati [alur izin](https://code.claude.com/docs/id/agent-sdk/permissions.md#how-permissions-are-evaluated).

1533 

1534```typescript theme={null}

1535type McpServerToolPolicy = {

1536 name: string;

1537 permission_policy?: "always_allow" | "always_ask" | "always_deny";

1538 org_max_permission?: "allow" | "ask" | "blocked";

1539};

1540```

1541 

1542| Field | Tipe | Deskripsi |

1543| :- | :- | :- |

1544| `name` | `string` | Nama polos tool sebagaimana diberikan ke [`tool()`](#tool), tanpa prefiks `mcp__<server>__` |

1545| `permission_policy` | `'always_allow' \| 'always_ask' \| 'always_deny'` | Kebijakan persetujuan untuk panggilan tool, [`always_ask` atau `always_deny`](#permission-policy-values). `always_allow` diabaikan pada server in-process: untuk menyetujui tool terlebih dahulu, cantumkan di [`allowedTools`](#options) sebagai gantinya |

1546| `org_max_permission` | `'allow' \| 'ask' \| 'blocked'` | Batas atas per tool yang diatur oleh admin organisasi. Diabaikan pada server in-process, jadi biarkan tidak diatur |

1547 

1548##### Nilai `permission_policy`

1549 

1550Pilih `always_ask` untuk menyetujui setiap panggilan sendiri, atau `always_deny` untuk memblokir tool sepenuhnya:

1551 

1552* **`always_ask`**: setiap panggilan ke tool [memerlukan persetujuan](https://code.claude.com/docs/id/agent-sdk/permissions.md#how-permissions-are-evaluated), meskipun entri `allowedTools` atau aturan allow mencakupnya. Panggilan diteruskan ke callback `canUseTool` atau tool [`permissionPromptToolName`](#options) Anda, kecuali sudah diputuskan terlebih dahulu. Sebuah [mod](https://code.claude.com/docs/id/plugins/mods/overview.md) dalam plugin yang Anda muat [dapat menyetujuinya terlebih dahulu](https://code.claude.com/docs/id/permissions.md#precedence-among-rules-hooks-and-mods). Jika tidak, dalam mode `dontAsk` panggilan ditolak, dan dalam [mode `auto`, `plan`, dan `bypassPermissions`](#permission-modes-that-can-approve-an-always_ask-call) panggilan dapat disetujui sebelum mencapai callback Anda

1553* **`always_deny`**: panggilan ke tool [ditolak](https://code.claude.com/docs/id/agent-sdk/permissions.md#how-permissions-are-evaluated) di setiap mode izin, termasuk `bypassPermissions`, tetapi mod dalam plugin yang Anda muat [masih dapat menyetujuinya](https://code.claude.com/docs/id/permissions.md#precedence-among-rules-hooks-and-mods)

1554 

1555Jika Anda tidak memberikan `canUseTool` maupun `permissionPromptToolName`, atau mengatur [`permissionPrompts`](#options) ke `'none'`, panggilan `always_ask` yang belum diputuskan terlebih dahulu akan ditolak kecuali [hook `PermissionRequest`](https://code.claude.com/docs/id/hooks#permissionrequest) mengizinkannya.

1556 

1557##### Mode izin yang dapat menyetujui panggilan `always_ask`

1558 

1559Dalam mode `auto`, `plan`, dan `bypassPermissions`, panggilan ke tool yang ditandai [`always_ask`](#permission-policy-values) dapat disetujui sebelum mencapai callback `canUseTool` Anda. Temukan mode sesi Anda dalam daftar ini untuk melihat kapan persetujuan tersebut terjadi dan apa yang harus diatur agar panggilan tetap mencapai callback Anda:

1560 

1561* **`auto`**: [pengklasifikasi](https://code.claude.com/docs/id/permission-modes.md#eliminate-prompts-with-auto-mode) auto mode meninjau panggilan dan dapat mengizinkannya. Agar setiap panggilan mencapai callback Anda dalam mode `auto`, atur `destructiveHint: true` dalam [anotasi](#toolannotations) tool

1562* **`plan`**: selama [auto mode tersedia](https://code.claude.com/docs/id/permission-modes.md#eliminate-prompts-with-auto-mode) untuk sesi, panggilan ke tool `always_ask` yang dianotasi `readOnlyHint: true` diteruskan ke pengklasifikasi auto mode, yang dapat mengizinkannya. Panggilan ke tool `always_ask` lainnya mencapai callback Anda. Agar panggilan tool read-only juga mencapai callback Anda, tambahkan `destructiveHint: true` ke anotasi tool tersebut bersama `readOnlyHint: true`. Sebagai alternatif, atur [`useAutoModeDuringPlan`](https://code.claude.com/docs/id/settings-reference#useautomodeduringplan) ke `false`, yang mematikan pengklasifikasi selama perencanaan

1563* **`bypassPermissions`**: ketika environment variable [`CLAUDE_CODE_REMOTE`](https://code.claude.com/docs/id/env-vars#variables) bernilai `true`, seperti dalam [sesi cloud](https://code.claude.com/docs/id/claude-code-on-the-web.md), panggilan disetujui tanpa callback Anda, apa pun anotasi tool-nya. Di tempat lain, panggilan mencapai callback Anda. Agar panggilan juga mencapai callback Anda dalam sesi cloud, jalankan sesi dalam mode `default` atau `acceptEdits` sebagai gantinya

1564 

1565Atur `destructiveHint` ke `true` secara eksplisit dalam mode `auto` dan `plan`. Untuk panggilan `always_ask`, Claude Code membaca `destructiveHint` yang tidak diatur sebagai `false`, meskipun default yang tercantum di bawah [`ToolAnnotations`](#toolannotations) adalah `true`.

1566 

1442#### `McpClaudeAIProxyServerConfig`1567#### `McpClaudeAIProxyServerConfig`

1443 1568 

1444```typescript theme={null}1569```typescript theme={null}


1464| Field | Tipe | Deskripsi |1589| Field | Tipe | Deskripsi |

1465| :- | :- | :- |1590| :- | :- | :- |

1466| `type` | `'local'` | Harus `'local'` (saat ini hanya plugin lokal yang didukung) |1591| `type` | `'local'` | Harus `'local'` (saat ini hanya plugin lokal yang didukung) |

1467| `path` | `string` | Jalur absolut atau relatif ke direktori plugin |1592| `path` | `string` | Path ke direktori plugin. Path relatif di-resolve terhadap opsi [`cwd`](#options) saat sesi dimulai. Path harus absolut ketika Anda memuat plugin di tengah sesi dengan [`addPlugins`](#load-more-plugin-folders-with-addplugins) |

1468| `skipMcpDiscovery` | `boolean` | Ketika `true`, SDK memuat skill, hook, agent, dan perintah dari plugin ini tetapi tidak membaca `.mcp.json` atau `mcpServers` pada manifesnya. Atur ini ketika aplikasi Anda yang mengelola koneksi MCP plugin tersebut. |1593| `skipMcpDiscovery` | `boolean` | Ketika `true`, SDK memuat skill, hook, agent, dan perintah dari plugin ini tetapi tidak membaca `.mcp.json` atau `mcpServers` pada manifesnya. Atur ini ketika aplikasi Anda yang mengelola koneksi MCP plugin tersebut. |

1469 1594 

1470**Contoh:**1595**Contoh:**


5076};5201};

5077```5202```

5078 5203 

5079`source` menyatakan tempat asal definisi server, dengan nilai dan aturan kepercayaan yang sama seperti `source` pada [`McpServerProvenance`](#mcpserverprovenance). Field ini memerlukan Agent SDK v0.3.274 atau lebih baru dan tidak ada pada versi sebelumnya.5204Gunakan `source` untuk memutuskan seberapa jauh mempercayai server, dan `_meta` pada setiap entri `tools` untuk menemukan sumber daya UI yang dilampirkan server ke tool tersebut:

5205 

5206* **`source`**: tempat asal definisi server, dengan nilai yang sama seperti `source` pada [`McpServerProvenance`](#mcpserverprovenance). Dasarkan keputusan kepercayaan pada `source` alih-alih pada `name`, karena hanya server dalam proses milik Anda sendiri yang melaporkan `sdk`, apa pun nama yang didaftarkan untuk server lain. Jika Anda tidak mengenali suatu nilai `source`, perlakukan server itu seperti Anda memperlakukan server apa pun yang `source`-nya bukan `sdk`. Memerlukan Agent SDK v0.3.274 atau lebih baru

5207* **`_meta`**: objek `ui` dan string `ui/resourceUri` dari `_meta` yang dideklarasikan server untuk tool tersebut. Claude Code menahan setiap kunci `_meta` lainnya. `ui/resourceUri` adalah ejaan tingkat atas yang lebih lama dari `ui.resourceUri`. Ketika server melampirkan [sumber daya UI MCP Apps](https://code.claude.com/docs/id/mcp.md#reference-mcp-resources) ke tool, `ui.resourceUri` atau `ui/resourceUri` menyimpan URI `ui://` sumber daya tersebut. Ambil URI itu dengan [`readMcpResource()`](#query-object) dan render sumber daya tersebut di aplikasi Anda. Memerlukan Agent SDK v0.3.280 atau lebih baru

5208 

5209Claude Code mengirimkan `_meta` hanya ketika array [`capabilities`](#sdksystemmessage) dari pesan `system` dengan subtype `init` mencantumkan `mcp_tool_ui_meta_v1`. Anda tidak mengaktifkan `mcp_tool_ui_meta_v1` sendiri.

5210 

5211#### Ketika `_meta.ui` suatu tool hanya berisi `visibility`

5212 

5213Jika server Anda mendeklarasikan `ui.resourceUri` untuk suatu tool tetapi `_meta.ui` yang diterima aplikasi Anda hanya berisi `visibility`, objek `ui` yang dikirim server gagal dalam salah satu pemeriksaan Claude Code. Claude Code memeriksa `ui` dan `ui/resourceUri` secara terpisah, sehingga satu kunci dapat mencapai aplikasi Anda ketika kunci lainnya gagal. Bandingkan `_meta` dalam respons `tools/list` server Anda dengan pemeriksaan untuk setiap kunci:

5214 

5215* **`ui`**: mencapai aplikasi Anda tanpa perubahan, termasuk anggota apa pun selain `resourceUri` dan `visibility`, jika ketiga pemeriksaan lolos:

5216 

5217 * `resourceUri` tidak ada, atau berupa string yang diawali dengan `ui://`

5218 * `visibility` tidak ada, atau hanya mencantumkan `"model"` dan `"app"`

5219 * Seluruh objek berukuran paling banyak 4.096 karakter ketika diserialisasi sebagai JSON

5220 

5221 Jika salah satu pemeriksaan gagal, aplikasi Anda paling banyak menerima `ui` yang satu-satunya anggotanya adalah array `visibility` dengan entri `"model"` dan `"app"` yang dicantumkan server.

5222* **`ui/resourceUri`**: mencapai aplikasi Anda jika berupa string yang diawali dengan `ui://` dan berukuran paling banyak 4.096 karakter. Jika tidak, Claude Code menghapusnya

5080 5223 

5081`_meta` pada entri `tools` membawa anggota MCP Apps dari `_meta` tool itu, sehingga aplikasi Anda dapat menemukan sumber daya `ui://` untuk dirender dengan [`readMcpResource()`](#query-object). Claude Code meneruskan objek `ui` dan string datar `ui/resourceUri` yang sudah deprecated, dan menahan setiap kunci lainnya. Di dalam `ui`, `resourceUri` adalah string `ui://` dan `visibility` adalah array `"model"` dan `"app"` ketika server menetapkannya, dan anggota lainnya diteruskan tanpa perubahan. Claude Code menghapus salah satu kunci tersebut ketika nilainya tidak valid, dan menghilangkan `_meta` dari tool yang tidak mendeklarasikan keduanya. Field ini hadir hanya ketika [`capabilities`](#sdksystemmessage) pesan inisialisasi mencakup `mcp_tool_ui_meta_v1`, dan memerlukan TypeScript Agent SDK v0.3.280 atau lebih baru.5224Ketika Claude Code tidak memiliki anggota `ui` maupun string `ui/resourceUri` untuk dikirim, entri `tools` sama sekali tidak memiliki `_meta`.

5082 5225 

5083### `McpServerStatusConfig`5226### `McpServerStatusConfig`

5084 5227 


5313Ketika Anda memanggil `setMcpServers()`, Claude Code menerapkan aturan berikut:5456Ketika Anda memanggil `setMcpServers()`, Claude Code menerapkan aturan berikut:

5314 5457 

5315* **Server yang tidak disebutkan dalam panggilan**: di luar [sesi cloud](https://code.claude.com/docs/id/claude-code-on-the-web.md), Claude Code memutuskan koneksi server yang ditambahkan oleh panggilan `setMcpServers()` sebelumnya dan server SDK dalam proses, lalu mencantumkannya dalam `removed`. Server lainnya tetap berjalan dan tidak dicantumkan dalam `removed`, di antaranya server stdio, HTTP, dan SSE dari opsi [`mcpServers`](#options), server dari file pengaturan, dan server yang disediakan plugin.5458* **Server yang tidak disebutkan dalam panggilan**: di luar [sesi cloud](https://code.claude.com/docs/id/claude-code-on-the-web.md), Claude Code memutuskan koneksi server yang ditambahkan oleh panggilan `setMcpServers()` sebelumnya dan server SDK dalam proses, lalu mencantumkannya dalam `removed`. Server lainnya tetap berjalan dan tidak dicantumkan dalam `removed`, di antaranya server stdio, HTTP, dan SSE dari opsi [`mcpServers`](#options), server dari file pengaturan, dan server yang disediakan plugin.

5316* **Server yang disebutkan dalam panggilan**: Claude Code mengganti server stdio, HTTP, atau SSE yang ditambahkan oleh panggilan `setMcpServers()` sebelumnya hanya ketika konfigurasinya berbeda dari yang Anda teruskan. Server SDK dalam proses yang sudah terdaftar dengan nama tersebut tetap seperti apa adanya, jadi untuk menggantinya, keluarkan server itu dari satu panggilan dan tambahkan pada panggilan berikutnya.5459* **Server stdio, HTTP, dan SSE yang ditambahkan oleh panggilan `setMcpServers()` sebelumnya**: di luar sesi cloud, server yang Anda sebutkan lagi dengan konfigurasi yang identik mempertahankan koneksi dan tool-nya. Server tersebut tidak muncul di `added` maupun `removed`. Jika Anda meneruskan konfigurasi yang berubah, Claude Code menghubungkan ulang server menggunakan konfigurasi itu dan mencantumkannya dalam `added`, bukan dalam `removed`.

5460* **Server stdio, HTTP, dan SSE yang disebutkan dalam panggilan dan tidak ditambahkan oleh panggilan sebelumnya**: di luar sesi cloud, Claude Code menambahkan server tersebut dan mencantumkannya dalam `added`, atau dalam `errors` jika Claude Code menolak server tersebut.

5461* **Server SDK dalam proses yang disebutkan dalam panggilan**: server yang sudah terdaftar melalui `mcpServers` atau panggilan sebelumnya mempertahankan instance yang sedang berjalan dan timeout-nya. Jika Anda meneruskan [daftar kebijakan `tools`](#mcpsdkserverconfigwithinstance) untuknya, bahkan daftar yang kosong, Anda mengganti kebijakannya; jika tidak, kebijakan tersebut tetap. Untuk menjalankan instance baru di luar sesi cloud, keluarkan server itu dari satu panggilan dan sebutkan di panggilan berikutnya.

5317* **Server bawaan yang dimulai CLI saat startup**: jika panggilan menyebutkan salah satunya, Claude Code menghapus entri itu dan melaporkannya dalam `errors`.5462* **Server bawaan yang dimulai CLI saat startup**: jika panggilan menyebutkan salah satunya, Claude Code menghapus entri itu dan melaporkannya dalam `errors`.

5318* **Server stdio, HTTP, atau SSE yang memiliki nama yang sama dengan server dari cakupan instalasi MCP seperti `.mcp.json`**: dengan nama tersebut, sesi menggunakan tool server Anda alih-alih tool [server cakupan instalasi](https://code.claude.com/docs/id/mcp.md#mcp-installation-scopes). Sebelum Claude Code v2.1.305, Claude Code dapat memutuskan koneksi server Anda dan menghubungkan server cakupan instalasi ketika aplikasi Anda [memuat ulang plugin](#query-object).5463* **Server stdio, HTTP, atau SSE yang memiliki nama yang sama dengan server dari cakupan instalasi MCP seperti `.mcp.json`**: dengan nama tersebut, sesi menggunakan tool server Anda alih-alih tool [server cakupan instalasi](https://code.claude.com/docs/id/mcp.md#mcp-installation-scopes). Sebelum Claude Code v2.1.305, Claude Code dapat memutuskan koneksi server Anda dan menghubungkan server cakupan instalasi ketika aplikasi Anda [memuat ulang plugin](#query-object).

5319 5464 


5800 5945 

5801Typing yang dipublikasikan SDK mendeklarasikan `SDKConversationResetMessage` dalam Claude Code v2.1.203 dan yang lebih baru. Sebelum v2.1.203, `SDKMessage` mereferensikan tipe tersebut tanpa mendeklarasikannya, sehingga penyempitan pada `type === "conversation_reset"` gagal dalam typecheck ketika `skipLibCheck` dinonaktifkan.5946Typing yang dipublikasikan SDK mendeklarasikan `SDKConversationResetMessage` dalam Claude Code v2.1.203 dan yang lebih baru. Sebelum v2.1.203, `SDKMessage` mereferensikan tipe tersebut tanpa mendeklarasikannya, sehingga penyempitan pada `type === "conversation_reset"` gagal dalam typecheck ketika `skipLibCheck` dinonaktifkan.

5802 5947 

5948### `BUILTIN_TOOL_NAMES` dan `LEGACY_TOOL_NAME_ALIASES`

5949 

5950Gunakan kedua konstanta ini untuk memeriksa nama tool yang dimasukkan pengguna aplikasi Anda. Keduanya mengeja setiap nama sesuai cara Anda menuliskannya dalam aturan izin, matcher hook, serta opsi `tools` dan `disallowedTools`. Impor keduanya dari `@anthropic-ai/claude-agent-sdk` atau dari `@anthropic-ai/claude-agent-sdk/core`. Keduanya memerlukan Agent SDK v0.3.301 atau lebih baru dan berstatus alpha.

5951 

5952Deklarasi tipe SDK memberikan `BUILTIN_TOOL_NAMES` tipe tuple readonly dan `LEGACY_TOOL_NAME_ALIASES` tipe record string-ke-string:

5953 

5954```typescript theme={null}

5955const BUILTIN_TOOL_NAMES: readonly ["Agent", /* ...more names... */ "Write"];

5956const LEGACY_TOOL_NAME_ALIASES: Readonly<Record<string, string>>;

5957```

5958 

5959* **`BUILTIN_TOOL_NAMES`**: nama tool bawaan Claude Code dalam urutan abjad, seperti `Agent`, `Bash`, dan `Read`. Nama tool MCP tidak disertakan. Karena tipenya adalah tuple literal string, `(typeof BUILTIN_TOOL_NAMES)[number]` memberi Anda tipe union dari nama-nama tersebut

5960* **`LEGACY_TOOL_NAME_ALIASES`**: nama tool lama yang masih diterima oleh aturan izin, matcher hook, serta opsi `tools` dan `disallowedTools`. Setiap kunci adalah nama lama dan nilainya adalah nama saat ini: misalnya, `Task` dipetakan ke `Agent`, serta `KillShell` dan `KillBash` dipetakan ke `TaskStop`

5961 

5962Anda dapat mengonfirmasi sebuah nama dengan salah satu dari dua pengujian: `BUILTIN_TOOL_NAMES` mencakupnya, atau `Object.hasOwn(LEGACY_TOOL_NAME_ALIASES, name)` mengembalikan `true`. Nama yang gagal dalam kedua pengujian tersebut masih bisa valid, karena `BUILTIN_TOOL_NAMES` tidak mencantumkan tool MCP dan beberapa tool bawaan. Jika Anda membangun daftar penolakan dari `BUILTIN_TOOL_NAMES`, Claude masih dapat menggunakan tool yang tidak dicantumkan konstanta tersebut. Untuk menolak setiap tool, atur [`disallowedTools: ["*"]`](https://code.claude.com/docs/id/agent-sdk/permissions#allow-and-deny-rules) sebagai gantinya.

5963 

5964Menemukan sebuah nama di `BUILTIN_TOOL_NAMES` tidak memberi tahu Anda bahwa sesi memiliki tool tersebut: `TodoWrite` tercantum meskipun [dinonaktifkan secara default](https://code.claude.com/docs/id/tools-reference.md). Untuk melihat tool mana yang dimiliki sesi, baca array `tools` dari [`SDKSystemMessage`](#sdksystemmessage)-nya. Array tersebut mencakup tool MCP dan mencantumkan tool Agent sebagai `Task`, jadi petakan setiap nama melalui `LEGACY_TOOL_NAME_ALIASES` sebelum membandingkannya dengan `BUILTIN_TOOL_NAMES`.

5965 

5803### `AbortError`5966### `AbortError`

5804 5967 

5805Kelas error kustom untuk operasi abort.5968Kelas error kustom untuk operasi abort.

agent-teams.md +1 −1

Details

188 188 

189### Tetapkan dan klaim tugas189### Tetapkan dan klaim tugas

190 190 

191Daftar tugas bersama mengoordinasikan pekerjaan di seluruh tim. Lead membuat tugas dan rekan tim mengerjakannya. Tugas memiliki tiga status: pending, in progress, dan completed. Tugas juga dapat bergantung pada tugas lain: tugas pending dengan dependensi yang tidak terselesaikan tidak dapat diklaim sampai dependensi tersebut selesai.191Daftar tugas bersama mengoordinasikan pekerjaan di seluruh tim. Lead membuat tugas dan rekan tim mengerjakannya. Tugas memiliki tiga status: pending, in progress, dan completed. Tugas juga dapat bergantung pada tugas lain dan ditampilkan sebagai terblokir di daftar tugas sampai tugas-tugas tersebut selesai. Rekan tim tidak melakukan self-claim atas tugas yang terblokir, tetapi Anda atau lead tetap dapat menugaskannya.

192 192 

193Agent [tanpa Task tools](https://code.claude.com/docs/id/tools-reference.md#task-tool-availability) mengoordinasikan melalui pesan sebagai gantinya dari daftar tugas bersama.193Agent [tanpa Task tools](https://code.claude.com/docs/id/tools-reference.md#task-tool-availability) mengoordinasikan melalui pesan sebagai gantinya dari daftar tugas bersama.

194 194 

agent-view.md +18 −9

Details

206* Sesi yang selesai: hasilnya206* Sesi yang selesai: hasilnya

207* Sesi yang bekerja: kalimat status lengkapnya207* Sesi yang bekerja: kalimat status lengkapnya

208 208 

209Pull request apa pun yang tertaut ke sesi tercantum selanjutnya. Untuk sesi yang menunggu Anda, baris seperti `waiting 3m` di bawahnya menunjukkan berapa lama ia telah menunggu, dan itu adalah satu-satunya waktu yang ditampilkan di panel. Usia di tepi kanan baris adalah angka yang berbeda: itu dihitung dari saat sesi dimulai.209Pull request apa pun yang tertaut ke sesi tercantum selanjutnya. Satu baris lagi muncul di bawahnya untuk sesi yang menunggu Anda atau berjalan dalam mode aman:

210 

211* Baris seperti `waiting 3m`: berapa lama sesi telah menunggu Anda. Usia di tepi kanan baris adalah angka yang berbeda: itu dihitung dari saat sesi dimulai

212* `safe mode · customizations are off`: sesi ini berjalan dengan [kustomisasi Anda dimatikan](https://code.claude.com/docs/id/debug-your-config.md#test-against-a-clean-configuration) karena Anda memulainya dari shell Anda dengan `claude --bg --safe-mode`. Anda dapat membiarkannya apa adanya. Untuk melanjutkan percakapan dengan kustomisasi Anda aktif kembali, jalankan [`claude stop <id>`](#manage-sessions-from-the-shell) lalu [`claude --resume`](https://code.claude.com/docs/id/sessions#resume-a-session), keduanya di shell Anda

210 213 

211Sebagian besar waktu panel intip cukup dan Anda tidak perlu membuka transkrip lengkap.214Sebagian besar waktu panel intip cukup dan Anda tidak perlu membuka transkrip lengkap.

212 215 


468 471 

469#### What carries over when you background472#### What carries over when you background

470 473 

471Memindahkan ke latar belakang memulai proses baru yang melanjutkan dari percakapan yang disimpan, dan pekerjaan latar belakang yang sedang berlangsung pindah ke sana. Perintah shell latar belakang yang sedang berjalan, subagent yang di-background, workflow dinamis, tugas terjadwal yang Anda buat dengan [`/loop`](https://code.claude.com/docs/id/scheduled-tasks), dan [balasan otomatis Claude terhadap komentar artifact](https://code.claude.com/docs/id/artifacts.md#let-claude-reply-to-comments-on-its-own) semuanya terbawa dan terus berjalan di sana. Subagent berpindah bersama dengan semua yang dimulainya, jadi subagent hanya terbawa ketika semua pekerjaan itu juga dapat berpindah.474Ketika Anda memindahkan sesi ke latar belakang, setiap jenis pekerjaan latar belakang yang sedang berlangsung akan terbawa ke sesi latar belakang, berlanjut hanya ketika Claude meluncurkannya kembali di sana, atau berhenti:

472 

473Ketika [workflow dinamis](https://code.claude.com/docs/id/workflows.md) masih memiliki subagent yang berjalan, Claude Code bertanya sebelum memindahkan ke latar belakang dengan dialog `Background this session?`, yang menyebutkan berapa banyak subagent yang akan dimulai ulang. Pilih `Stay` untuk membiarkan mereka selesai terlebih dahulu. Jika Anda mengonfirmasi, Claude Code memutar ulang run tersebut dalam sesi latar belakang: subagent yang masih berjalan dimulai dari awal, jadi token yang telah mereka gunakan sejauh ini dihabiskan lagi. Lihat [Resume after a pause](https://code.claude.com/docs/id/workflows.md#resume-after-a-pause) untuk subagent selesai mana yang mengembalikan hasil tersimpannya dan mana yang berjalan lagi.

474 475 

475Claude Code menghentikan pekerjaan latar belakang yang tidak dapat terbawa, seperti [monitor](https://code.claude.com/docs/id/tools-reference.md#monitor-tool) yang sedang berjalan, dan menghentikan subagent yang di-background yang memiliki monitor bersamanya. Ketika ada pekerjaan seperti itu yang berjalan, Claude Code menampilkan dialog `Background this session?` sehingga Anda dapat mengonfirmasi sebelum pekerjaan itu dihentikan.476* **Terbawa**: perintah shell latar belakang yang sedang berjalan, subagent yang di-background, tugas terjadwal yang Anda buat dengan [`/loop`](https://code.claude.com/docs/id/scheduled-tasks), dan [balasan otomatis Claude terhadap komentar artifact](https://code.claude.com/docs/id/artifacts.md#let-claude-reply-to-comments-on-its-own) terus berjalan dalam sesi latar belakang. Subagent berpindah bersama dengan semua yang dimulainya, jadi subagent hanya terbawa ketika semua pekerjaan itu juga dapat berpindah.

477* **Berlanjut hanya ketika Claude meluncurkannya kembali**: [workflow dinamis](https://code.claude.com/docs/id/workflows.md) yang sedang berjalan. Jika workflow belum berlanjut ketika Anda memeriksa sesi latar belakang, [minta Claude untuk meluncurkannya kembali](#dynamic-workflows-when-you-background).

478* **Berhenti**: pekerjaan yang tidak dapat berpindah ke sesi latar belakang, seperti [monitor](https://code.claude.com/docs/id/tools-reference.md#monitor-tool) yang sedang berjalan. Ketika ada pekerjaan seperti itu yang berjalan, Claude Code menampilkan dialog `Background this session?` sehingga Anda dapat mengonfirmasi sebelum pekerjaan itu dihentikan. Subagent yang di-background yang memiliki monitor berhenti bersama monitor tersebut.

476 479 

477Setelah berada di latar belakang, sesi dapat memulai subagent, monitor, dan perintah latar belakang baru, dan semuanya terus berjalan melewati detach dan reattach berikutnya.480Setelah berada di latar belakang, sesi dapat memulai subagent, monitor, dan perintah latar belakang baru, dan semuanya terus berjalan melewati detach dan reattach berikutnya.

478 481 


488 491 

489Direktori yang Anda tambahkan selama sesi dengan [`/add-dir`](https://code.claude.com/docs/id/permissions#additional-directories-grant-file-access-not-configuration) juga terbawa. Membawa `--allow-dangerously-skip-permissions` membuat `bypassPermissions` tetap dapat dijangkau dalam sesi yang di-background, tetapi tidak memberikan apa pun yang baru: mode tersebut tetap memerlukan [penerimaan penafian bypass](https://code.claude.com/docs/id/permission-modes.md#skip-all-checks-with-bypasspermissions-mode) Anda yang sudah tercatat.492Direktori yang Anda tambahkan selama sesi dengan [`/add-dir`](https://code.claude.com/docs/id/permissions#additional-directories-grant-file-access-not-configuration) juga terbawa. Membawa `--allow-dangerously-skip-permissions` membuat `bypassPermissions` tetap dapat dijangkau dalam sesi yang di-background, tetapi tidak memberikan apa pun yang baru: mode tersebut tetap memerlukan [penerimaan penafian bypass](https://code.claude.com/docs/id/permission-modes.md#skip-all-checks-with-bypasspermissions-mode) Anda yang sudah tercatat.

490 493 

494##### Dynamic workflows when you background

495 

496Jika [workflow dinamis](https://code.claude.com/docs/id/workflows.md) belum berlanjut setelah Anda memindahkan sesinya ke latar belakang, minta Claude untuk [meluncurkan kembali workflow tersebut](https://code.claude.com/docs/id/workflows.md#resume-after-you-leave-the-session). Run berlanjut hanya ketika Claude meluncurkannya kembali dalam sesi latar belakang, dan Claude Code dapat meminta Anda menyetujui peluncuran ulang itu terlebih dahulu. Percakapan sesi menampilkan pemberitahuan bahwa workflow `could not be resumed`.

497 

498Ketika Claude meluncurkan kembali workflow, subagent-nya yang masih berjalan saat Anda memindahkan sesi ke latar belakang dimulai dari awal dan menghabiskan token mereka lagi. Jika Anda menekan `←` atau menjalankan `/background` selagi masih ada yang berjalan, dialog `Background this session?` menyebutkan berapa banyak. Untuk membiarkan mereka selesai terlebih dahulu, pilih `Stay`.

499 

491### Dispatch an agent from your shell500### Dispatch an agent from your shell

492 501 

493Berikan `--bg` atau bentuk panjangnya `--background` untuk memulai sesi yang langsung masuk ke latar belakang:502Berikan `--bg` atau bentuk panjangnya `--background` untuk memulai sesi yang langsung masuk ke latar belakang:


844* **Setelah auto-update**: supervisor memulai ulang dirinya sendiri ke versi baru dan memindahkan sesi idle ke latar belakang. Sesi yang bekerja, menunggu Anda, atau terhubung tidak terganggu.853* **Setelah auto-update**: supervisor memulai ulang dirinya sendiri ke versi baru dan memindahkan sesi idle ke latar belakang. Sesi yang bekerja, menunggu Anda, atau terhubung tidak terganggu.

845* **Supervisor itu sendiri berhenti**, misalnya karena prosesnya diakhiri dari luar Claude Code: di macOS dan Linux, sesi Anda berhenti kecuali supervisor baru terhubung dalam waktu sekitar satu menit. Untuk memulainya, jalankan `claude agents` di shell Anda. Setelah satu menit tersebut, lihat [Menjaga sesi tetap berjalan setelah supervisor berhenti](#keep-sessions-running-after-the-supervisor-stops).854* **Supervisor itu sendiri berhenti**, misalnya karena prosesnya diakhiri dari luar Claude Code: di macOS dan Linux, sesi Anda berhenti kecuali supervisor baru terhubung dalam waktu sekitar satu menit. Untuk memulainya, jalankan `claude agents` di shell Anda. Setelah satu menit tersebut, lihat [Menjaga sesi tetap berjalan setelah supervisor berhenti](#keep-sessions-running-after-the-supervisor-stops).

846 855 

847Ketika proses sesi berhenti atau dimulai ulang, perintah shell latar belakang, alur kerja dinamis, dan subagent latar belakang yang Claude mulai di dalamnya dibawa ke proses berikutnya; monitor yang berjalan dan perintah shell yang subagent mulai berhenti dengan proses. Menghapus sesi menghentikan semua yang dibawanya. Untuk menghentikan semuanya dengan proses alih-alih membawanya, atur [`CLAUDE_CODE_DISABLE_BG_EXIT_HANDOFF`](https://code.claude.com/docs/id/env-vars#variables) ke `1`.856Ketika proses sesi berhenti atau dimulai ulang, perintah shell latar belakang dan subagent latar belakang yang Claude mulai di dalamnya dibawa ke proses berikutnya. Alur kerja dinamis [hanya berlanjut ketika Claude meluncurkannya kembali](#dynamic-workflows-when-you-background). Monitor yang berjalan dan perintah shell yang dimulai subagent berhenti bersama proses. Jika Anda menghapus sesi, semua yang dibawanya akan berhenti. Untuk menghentikan semuanya bersama proses, atur [`CLAUDE_CODE_DISABLE_BG_EXIT_HANDOFF`](https://code.claude.com/docs/id/env-vars#variables) ke `1`.

848 857 

849Supervisor dan sesinya mengautentikasi dengan kredensial yang disimpan sama seperti sesi interaktif Anda. Untuk pengaturan dan variabel shell mana yang mencapai sesi, termasuk `PATH`, lihat [Pengaturan dan penyedia](#settings-and-provider). Untuk endpoint gateway, lihat [Gateway LLM](#llm-gateway).858Supervisor dan sesinya mengautentikasi dengan kredensial yang disimpan sama seperti sesi interaktif Anda. Untuk pengaturan dan variabel shell mana yang mencapai sesi, termasuk `PATH`, lihat [Pengaturan dan penyedia](#settings-and-provider). Untuk endpoint gateway, lihat [Gateway LLM](#llm-gateway).

850 859 


897 906 

898### Melepaskan menunjukkan dialog `Background this session?`907### Melepaskan menunjukkan dialog `Background this session?`

899 908 

900Jika Anda menekan `←` untuk melepaskan sesi saat ini dan Claude Code menampilkan dialog `Background this session?`, sesi memiliki pekerjaan latar belakang yang sedang berlangsung yang akan dihentikan, dimulai ulang, atau dibiarkan berjalan tanpa pengawasan jika dilepaskan, dan Claude Code bertanya sebelum melakukan salah satu dari hal tersebut:909Saat Anda menekan `←` untuk melepaskan sesi, dialog `Background this session?` berarti sesi memiliki pekerjaan latar belakang yang sedang berlangsung yang akan berhenti, terputus, atau tetap berjalan tanpa pengawasan:

901 910 

902* **Pekerjaan yang tidak dapat dipindahkan**: sesi memiliki pekerjaan yang tidak dapat dipindahkan ke sesi latar belakang, seperti [monitor](https://code.claude.com/docs/id/tools-reference.md#monitor-tool) yang sedang berjalan. Dialog menyebutkan pekerjaan latar belakang yang akan dihentikan Claude Code dan, secara terpisah, menghitung tugas yang dibawa.911* **Pekerjaan yang tidak dapat dipindahkan**: sesi memiliki pekerjaan yang tidak dapat dipindahkan ke sesi latar belakang, seperti [monitor](https://code.claude.com/docs/id/tools-reference.md#monitor-tool) yang sedang berjalan. Dialog menyebutkan pekerjaan latar belakang yang akan dihentikan Claude Code dan, secara terpisah, menghitung tugas yang dibawa.

903* **Alur kerja dengan subagent yang sedang berjalan**: [alur kerja dinamis](https://code.claude.com/docs/id/workflows.md) masih memiliki subagent yang sedang berjalan. Alur kerja itu sendiri dibawa, tetapi subagent yang sedang berjalannya dimulai ulang dari awal, dan dialog mengatakan berapa banyak.912* **Alur kerja dengan subagent yang sedang berjalan**: [alur kerja dinamis](https://code.claude.com/docs/id/workflows.md) masih memiliki subagent yang sedang berjalan. Subagent tersebut berhenti jika Anda tetap melepaskan, dan dialog mengatakan berapa banyak. Subagent tersebut dimulai ulang dari awal ketika Claude [meluncurkan ulang alur kerja di sesi latar belakang](#dynamic-workflows-when-you-background).

904* **Balasan artifact otomatis**: Claude [membalas komentar pada artifact dengan sendirinya](https://code.claude.com/docs/id/artifacts.md#let-claude-reply-to-comments-on-its-own). Balasan tersebut berlanjut dalam sesi latar belakang, dan dialog mengatakan demikian.913* **Balasan artifact otomatis**: Claude [membalas komentar pada artifact dengan sendirinya](https://code.claude.com/docs/id/artifacts.md#let-claude-reply-to-comments-on-its-own). Balasan tersebut berlanjut dalam sesi latar belakang, dan dialog mengatakan demikian.

905 914 

906Jalankan `/tasks` untuk melihat semua yang sedang berjalan, kemudian konfirmasi untuk tetap melepaskan atau pilih `Stay` untuk membiarkan pekerjaan selesai terlebih dahulu. Lihat [Apa yang dibawa saat Anda melepaskan](#what-carries-over-when-you-background) untuk jenis pekerjaan mana yang dibawa dan mana yang dihentikan Claude Code.915Jalankan `/tasks` untuk melihat semua yang sedang berjalan, kemudian konfirmasi untuk tetap melepaskan atau pilih `Stay` untuk membiarkan pekerjaan selesai terlebih dahulu. Lihat [Apa yang dibawa saat Anda melepaskan](#what-carries-over-when-you-background) untuk jenis pekerjaan mana yang dibawa dan mana yang dihentikan Claude Code.


1118| v2.1.200 | Versi Claude Code yang lebih lama yang menulis ulang daftar sesi dalam `roster.json` mempertahankan field yang ditulis oleh versi yang lebih baru, sesuai dengan jaminan `state.json` yang ada, sehingga sesi yang dimulai oleh versi yang lebih baru tetap menerima input setelah supervisor dimulai ulang. Ketika Anda membuka sesi yang telah berhenti merespons, supervisor memulai ulang prosesnya dan sesi melanjutkan respons yang terputus dari tempat ia berhenti. Agent view menerapkan flag `--plugin-dir` yang ditempatkan setelah `agents` ke autocomplete subagent dan skill miliknya sendiri dalam input dispatch serta ke sesi yang didispatch. |1127| v2.1.200 | Versi Claude Code yang lebih lama yang menulis ulang daftar sesi dalam `roster.json` mempertahankan field yang ditulis oleh versi yang lebih baru, sesuai dengan jaminan `state.json` yang ada, sehingga sesi yang dimulai oleh versi yang lebih baru tetap menerima input setelah supervisor dimulai ulang. Ketika Anda membuka sesi yang telah berhenti merespons, supervisor memulai ulang prosesnya dan sesi melanjutkan respons yang terputus dari tempat ia berhenti. Agent view menerapkan flag `--plugin-dir` yang ditempatkan setelah `agents` ke autocomplete subagent dan skill miliknya sendiri dalam input dispatch serta ke sesi yang didispatch. |

1119| v2.1.199 | Sesi latar belakang yang prosesnya keluar sebelum selesai dimulai pada host dengan memori rendah menampilkan `possibly low memory — free some up and retry` dalam status barisnya alih-alih hanya alasan keluar mentah. Memindahkan sesi ke latar belakang dengan `←` atau `/background` membawa `/color`-nya ke baris baru. |1128| v2.1.199 | Sesi latar belakang yang prosesnya keluar sebelum selesai dimulai pada host dengan memori rendah menampilkan `possibly low memory — free some up and retry` dalam status barisnya alih-alih hanya alasan keluar mentah. Memindahkan sesi ke latar belakang dengan `←` atau `/background` membawa `/color`-nya ke baris baru. |

1120| v2.1.198 | Agent view mengirim notifikasi melalui `preferredNotifChannel` ketika sesi latar belakang memerlukan input, selesai, atau gagal, dan memicu hook `Notification` dengan tipe `agent_needs_input` atau `agent_completed`. `←` dan `/exit` di dalam `claude attach <id>` kembali ke agent view alih-alih keluar ke shell; `Ctrl+Z` kembali ke shell. Sesi latar belakang yang mengisolasi pekerjaannya dalam worktree melakukan commit, mem-push branch terisolasinya sendiri, tidak pernah `main` atau `master`, dan membuka pull request draf ketika selesai alih-alih bertanya terlebih dahulu. `/login` berjalan dalam agent view dan membuka dialog masuk. Dialog keluar `Background work is running` menawarkan `Move to background and exit`. Handoff saat keluar juga mencakup subagent latar belakang, yang dilanjutkan dari transkrip mereka pada saat dibangunkan berikutnya alih-alih dilaporkan gagal. `claude --bg` yang dikombinasikan dengan `-p` atau `--print` ditolak dengan kesalahan. Host sesi latar belakang meminta izin Local Network macOS pada akses LAN pertama alih-alih gagal dengan `connect: no route to host`. |1129| v2.1.198 | Agent view mengirim notifikasi melalui `preferredNotifChannel` ketika sesi latar belakang memerlukan input, selesai, atau gagal, dan memicu hook `Notification` dengan tipe `agent_needs_input` atau `agent_completed`. `←` dan `/exit` di dalam `claude attach <id>` kembali ke agent view alih-alih keluar ke shell; `Ctrl+Z` kembali ke shell. Sesi latar belakang yang mengisolasi pekerjaannya dalam worktree melakukan commit, mem-push branch terisolasinya sendiri, tidak pernah `main` atau `master`, dan membuka pull request draf ketika selesai alih-alih bertanya terlebih dahulu. `/login` berjalan dalam agent view dan membuka dialog masuk. Dialog keluar `Background work is running` menawarkan `Move to background and exit`. Handoff saat keluar juga mencakup subagent latar belakang, yang dilanjutkan dari transkrip mereka pada saat dibangunkan berikutnya alih-alih dilaporkan gagal. `claude --bg` yang dikombinasikan dengan `-p` atau `--print` ditolak dengan kesalahan. Host sesi latar belakang meminta izin Local Network macOS pada akses LAN pertama alih-alih gagal dengan `connect: no route to host`. |

1121| v2.1.196 | Satu tekan `←` memindahkan sesi latar depan ke latar belakang; versi sebelumnya memerlukan dua tekan, dengan hint footer dan konfirmasi. `--dangerously-skip-permissions` yang diteruskan ke `claude agents` menampilkan penafian bypass alih-alih diam-diam dijatuhkan. Sesi interaktif yang tidak pernah Anda beri nama membawa nama default seperti `my-app-3f` dalam daftar sesi dan `claude agents --json`. Perintah shell latar belakang dan alur kerja dinamis bertahan ketika proses sesi dihentikan, dimulai ulang, atau diperbarui, termasuk di Windows; atur `CLAUDE_CODE_DISABLE_BG_EXIT_HANDOFF=1` untuk mematikan handoff. Transkrip yang salah terbaca sebagai kosong saat restart diberi nama baru dengan akhiran `.orphaned-` alih-alih dihapus. |1130| v2.1.196 | Satu tekan `←` memindahkan sesi latar depan ke latar belakang; versi sebelumnya memerlukan dua tekan, dengan hint footer dan konfirmasi. `--dangerously-skip-permissions` yang diteruskan ke `claude agents` menampilkan penafian bypass alih-alih diam-diam dijatuhkan. Sesi interaktif yang tidak pernah Anda beri nama membawa nama default seperti `my-app-3f` dalam daftar sesi dan `claude agents --json`. Perintah shell latar belakang bertahan ketika proses sesi dihentikan, dimulai ulang, atau diperbarui, termasuk di Windows; atur `CLAUDE_CODE_DISABLE_BG_EXIT_HANDOFF=1` untuk mematikan handoff. Transkrip yang salah terbaca sebagai kosong saat restart diberi nama baru dengan akhiran `.orphaned-` alih-alih dihapus. |

1122| v2.1.195 | Pekerjaan latar belakang yang sedang berlangsung juga terbawa ketika Anda memindahkan sesi ke latar belakang di Windows. Grup `Completed` mengisi ruang vertikal yang tersisa dan header dipadatkan pada terminal yang pendek. Versi Claude Code yang lebih lama tidak lagi menjatuhkan field `state.json` sesi yang lebih baru atau menyembunyikan sesi tersebut dari `claude agents`. Melampirkan ke sesi yang dihentikan beralih segera alih-alih menampilkan layar kosong hingga lima detik. Supervisor yang tidak dapat menerima koneksi akan keluar dan melepaskan lock-nya dengan sendirinya. |1131| v2.1.195 | Pekerjaan latar belakang yang sedang berlangsung juga terbawa ketika Anda memindahkan sesi ke latar belakang di Windows. Grup `Completed` mengisi ruang vertikal yang tersisa dan header dipadatkan pada terminal yang pendek. Versi Claude Code yang lebih lama tidak lagi menjatuhkan field `state.json` sesi yang lebih baru atau menyembunyikan sesi tersebut dari `claude agents`. Melampirkan ke sesi yang dihentikan beralih segera alih-alih menampilkan layar kosong hingga lima detik. Supervisor yang tidak dapat menerima koneksi akan keluar dan melepaskan lock-nya dengan sendirinya. |

1123| v2.1.191 | `claude --bg` dengan nama `--agent` yang tidak cocok dengan subagent Anda mana pun menggagalkan peluncuran: sesi langsung keluar dengan kesalahan `--agent '<name>' not found` alih-alih berjalan dengan agent default. |1132| v2.1.191 | `claude --bg` dengan nama `--agent` yang tidak cocok dengan subagent Anda mana pun menggagalkan peluncuran: sesi langsung keluar dengan kesalahan `--agent '<name>' not found` alih-alih berjalan dengan agent default. |

1124| v2.1.174 | Sesi latar belakang tidak lagi mewarisi variabel endpoint gateway seperti `ANTHROPIC_BASE_URL` dari shell peluncuran supervisor; supervisor menyediakan snapshot kredensial baru ke worker yang sudah dihangatkan, memperbaiki kesalahan `Could not resolve authentication method` yang keliru. |1133| v2.1.174 | Sesi latar belakang tidak lagi mewarisi variabel endpoint gateway seperti `ANTHROPIC_BASE_URL` dari shell peluncuran supervisor; supervisor menyediakan snapshot kredensial baru ke worker yang sudah dihangatkan, memperbaiki kesalahan `Could not resolve authentication method` yang keliru. |

Details

689 689 

690### `admin`690### `admin`

691 691 

692Opsional. Mengaktifkan `/v1/organizations/spend_limits`, yang mencerminkan Admin API publik Anthropic, dan penegakan pengeluaran per-pengembang di `/v1/messages`. Lihat [Batas pengeluaran](https://code.claude.com/docs/id/claude-apps-gateway-spend-limits.md) untuk cara batas ditetapkan dan diterapkan; bagian ini mencakup kunci `gateway.yaml` yang mengaktifkan fitur dan menyetelnya.692Opsional. Mengaktifkan `/v1/organizations/spend_limits`, yang mencerminkan Admin API publik Anthropic, serta penegakan batas pengeluaran per developer pada `/v1/messages`. Lihat [Batas pengeluaran](https://code.claude.com/docs/id/claude-apps-gateway-spend-limits.md) untuk cara batas ditetapkan dan ditegakkan; bagian ini membahas kunci `gateway.yaml` yang mengaktifkan fitur tersebut dan menyesuaikannya.

693 693 

694```yaml theme={null}694```yaml theme={null}

695admin:695admin:


707 blocked_message: request an increase at https://go.example.com/claude-limits707 blocked_message: request an increase at https://go.example.com/claude-limits

708```708```

709 709 

710| Field | Diperlukan | Deskripsi |710| Bidang | Wajib | Deskripsi |

711| - | - | - |711| - | - | - |

712| `write_keys` | Tidak | Array dari `{id, key}`. `x-api-key` yang cocok dengan salah satu dari ini dapat mendaftar, menetapkan, dan menghapus batas pengeluaran. Nilai kunci harus setidaknya 32 karakter; `id` harus unik di seluruh `read_keys` dan `write_keys`. |712| `write_keys` | Tidak | Array `{id, key}`. `x-api-key` yang cocok dengan salah satunya dapat mencantumkan, menetapkan, dan menghapus batas pengeluaran. Nilai kunci harus minimal 32 karakter; `id` harus unik di seluruh `read_keys` dan `write_keys`. |

713| `read_keys` | Tidak | Array dari `{id, key}`. Read-only: setiap endpoint `GET`, termasuk mendaftar batas, mengambil satu berdasarkan ID, dan membaca [`/effective`](https://code.claude.com/docs/id/claude-apps-gateway-spend-limits#%2Feffective) dan [`/audit`](https://code.claude.com/docs/id/claude-apps-gateway-spend-limits#%2Faudit). |713| `read_keys` | Tidak | Array `{id, key}`. Read-only: setiap endpoint `GET`, termasuk mencantumkan batas, mengambil satu batas berdasarkan ID, serta membaca [`/effective`](https://code.claude.com/docs/id/claude-apps-gateway-spend-limits#%2Feffective) dan [`/audit`](https://code.claude.com/docs/id/claude-apps-gateway-spend-limits#%2Faudit). |

714| `admin_groups` | Tidak | Nama grup IdP. Gateway JWT yang klaim `groups` mencakup salah satu dari ini memiliki akses admin penuh, baca dan tulis, dan audit sebagai `oidc:<sub>`. Gunakan ini untuk admin manusia; gunakan kunci API untuk mesin. Entri kosong dalam daftar ini menghentikan gateway saat boot. Lihat [Nilai matcher yang menghentikan gateway saat boot](#matcher-values-that-stop-the-gateway-at-boot). |714| `admin_groups` | Tidak | Nama grup IdP. JWT gateway yang klaim `groups`-nya menyertakan salah satu grup ini memiliki akses admin penuh, baca dan tulis, dan tercatat di audit sebagai `oidc:<sub>`. Gunakan ini untuk admin manusia; gunakan kunci API untuk mesin. Entri kosong dalam daftar ini menghentikan gateway saat boot. Lihat [Nilai matcher yang menghentikan gateway saat boot](#matcher-values-that-stop-the-gateway-at-boot). |

715| `blocked_message` | Tidak | Ditambahkan verbatim ke `429 billing_error` yang dilihat pengembang yang diblokir. Tulis seluruh instruksi, seperti URL atau saluran Slack. Jika tidak diatur, gateway mengirim hanya pesan default. Lihat [Cara kerja penegakan](https://code.claude.com/docs/id/claude-apps-gateway-spend-limits.md#how-enforcement-works). |715| `blocked_message` | Tidak | Ditambahkan apa adanya ke `429 billing_error` yang dilihat developer yang diblokir. Tulis instruksi lengkapnya, seperti URL atau channel Slack. Jika tidak disetel, gateway hanya mengirim pesan default. Lihat [Cara kerja penegakan](https://code.claude.com/docs/id/claude-apps-gateway-spend-limits.md#how-enforcement-works). |

716| `audit_retention_days` | Tidak | Default `365`. Baris `admin_audit` yang lebih lama disapu. |716| `audit_retention_days` | Tidak | Default `365`. Baris `admin_audit` yang lebih lama akan dihapus. |

717| `spend_retention_months` | Tidak | Default `13`. Baris penghitung `spend` yang lebih lama dari ini disapu. Default menjaga tahun penuh ditambah bulan parsial saat ini untuk pelaporan tahun-ke-tahun. |717| `spend_retention_months` | Tidak | Default `13`. Baris penghitung `spend` yang lebih lama dari ini akan dihapus. Default ini menyimpan satu tahun penuh ditambah bulan parsial saat ini untuk pelaporan tahun ke tahun. |

718| `identity_retention_days` | Tidak | Default `90`. TTL terakhir dilihat untuk baris `principal_emails`, yang menyimpan email, nama tampilan, dan grup setiap pengembang (PII). Sengaja lebih pendek dari retensi pengeluaran sehingga identitas yang dihapus provisioning habis masa berlaku sementara penghitung pengeluaran anonimnya tetap ada. |718| `identity_retention_days` | Tidak | Default `90`. TTL sejak terakhir terlihat untuk baris `principal_emails`, yang menyimpan email, nama tampilan, dan grup setiap developer (PII). Sengaja dibuat lebih pendek daripada retensi pengeluaran agar identitas yang aksesnya sudah dicabut kedaluwarsa sementara penghitung pengeluaran anonimnya tetap ada. |

719| `group_limit_mode` | Tidak | `min` (default) atau `max`. Ketika pengembang berada di beberapa grup dengan batas, `min` menegakkan yang paling ketat dan `max` yang paling longgar. Digunakan oleh penegakan dan `/effective`. |719| `group_limit_mode` | Tidak | `min` (default) atau `max`. Jika developer berada di beberapa grup yang memiliki batas, `min` menegakkan yang paling ketat dan `max` yang paling longgar. Digunakan oleh penegakan dan `/effective`. |

720 720 

721### `enforcement`721### `enforcement`

722 722 

723Blok `enforcement` mengontrol bagaimana pemeriksaan batas pengeluaran berperilaku ketika penyimpanan tidak tersedia.723Blok `enforcement` mengontrol perilaku pemeriksaan batas pengeluaran saat penyimpanan tidak tersedia.

724 724 

725| Field | Diperlukan | Deskripsi |725| Bidang | Wajib | Deskripsi |

726| - | - | - |726| - | - | - |

727| `fail_closed_on_error` | Tidak | Default `false`. Penegakan pengeluaran gagal terbuka pada pemadaman Postgres, sehingga inferensi tetap aktif. Atur `true` untuk gagal tertutup: pengembang yang melebihi batas diblokir, tetapi begitu juga semua orang jika penyimpanan tidak dapat dijangkau. Memerlukan blok [`admin:`](#admin): penegakan pengeluaran hanya berjalan ketika `admin` dikonfigurasi, dan gateway menolak untuk memulai jika Anda menetapkan ini `true` tanpa satu. |727| `fail_closed_on_error` | Tidak | Default `false`. Penegakan pengeluaran fail open saat Postgres mengalami gangguan, sehingga inferensi tetap berjalan. Setel `true` untuk fail closed: developer yang melebihi batas diblokir, tetapi begitu juga semua orang lainnya jika penyimpanan tidak dapat dijangkau. Memerlukan blok [`admin:`](#admin): penegakan pengeluaran hanya berjalan saat `admin` dikonfigurasi, dan gateway menolak untuk mulai jika Anda menyetel ini ke `true` tanpa blok tersebut. |

728 728 

729### `pricing`729### `pricing`

730 730 

731Blok `pricing` memberi tahu meter pengeluaran apa yang harus dikenakan alih-alih harga daftar USD, sehingga batas dan [`/effective`](https://code.claude.com/docs/id/claude-apps-gateway-spend-limits#%2Feffective) mencerminkan tarif kontrak Anda. Jumlah tetap dalam USD dan tetap merupakan perkiraan, bukan faktur. Dua prasyarat:731Blok `pricing` memberi tahu meter pengeluaran tarif apa yang dikenakan sebagai pengganti harga daftar USD, sehingga batas dan [`/effective`](https://code.claude.com/docs/id/claude-apps-gateway-spend-limits#%2Feffective) mencerminkan tarif kontrak Anda. Jumlah tetap dalam USD dan tetap merupakan estimasi, bukan faktur. Ada dua prasyarat:

732 732 

733* Claude Code v2.1.227 atau lebih baru di server gateway. Versi sebelumnya menolak kunci yang tidak dikenal saat boot.733* Claude Code v2.1.227 atau yang lebih baru di server gateway. Versi sebelumnya menolak kunci yang tidak dikenal saat boot.

734* Blok [`admin:`](#admin) atau, di v2.1.268 atau lebih baru, blok [`managed:`](#managed) dengan setidaknya satu kebijakan. Gateway menolak untuk memulai dengan `pricing` diatur dan tidak ada blok, karena tidak ada yang akan membacanya.734* Blok [`admin:`](#admin) atau, pada v2.1.268 atau yang lebih baru, blok [`managed:`](#managed) dengan setidaknya satu kebijakan. Gateway menolak untuk mulai jika `pricing` disetel tanpa salah satu blok tersebut, karena tidak ada yang akan membacanya.

735 735 

736```yaml theme={null}736```yaml theme={null}

737pricing:737pricing:


745 cache_write: 4.125745 cache_write: 4.125

746```746```

747 747 

748| Field | Diperlukan | Deskripsi |748| Bidang | Wajib | Deskripsi |

749| - | - | - |749| - | - | - |

750| `multiplier` | Tidak | Default `1`. Meter mengalikan setiap jumlah yang diukur dengan ini, baik harga daftar atau ditimpa, jadi `0.85` menagih 85% dari harga. Harus lebih besar dari 0 dan paling banyak 10, dan nilai di atas 1 adalah [markup](#mark-prices-up). |750| `multiplier` | Tidak | Default `1`. Meter mengalikan setiap jumlah yang diukur dengan nilai ini, baik berdasarkan harga daftar maupun yang ditimpa, sehingga `0.85` menagih 85% dari harga. Harus lebih besar dari 0 dan paling banyak 10, dan nilai di atas 1 merupakan [markup](#mark-prices-up). |

751| `overrides` | Tidak | Baris dari `{upstream, model, input, output, cache_read, cache_write}` dalam USD per juta token. Keempat tarif diperlukan. Masing-masing harus lebih besar dari 0 dan paling banyak 10000. |751| `overrides` | Tidak | Baris `{upstream, model, input, output, cache_read, cache_write}` dalam USD per juta token. Keempat tarif wajib diisi. Masing-masing harus lebih besar dari 0 dan paling banyak 10000. |

752 752 

753Bagaimana meter mencocokkan baris override:753Cara meter mencocokkan baris override:

754 754 

755* Baris menggantikan harga daftar untuk permintaan yang `upstream`, [`upstreams[].name`](#upstreams), layani untuk `model`. Itu termasuk tarif [fast mode](https://code.claude.com/docs/id/fast-mode.md#understand-the-cost-tradeoff) yang lebih tinggi, jadi permintaan fast dan standard diukur dengan tarif yang sama empat.755* Sebuah baris menggantikan harga daftar untuk permintaan yang dilayani `upstream`, sebuah [`upstreams[].name`](#upstreams), untuk `model`. Itu termasuk tarif [fast mode](https://code.claude.com/docs/id/fast-mode.md#understand-the-cost-tradeoff) yang lebih tinggi, sehingga permintaan fast dan standar diukur dengan empat tarif yang sama.

756* ID bawaan seperti `claude-sonnet-4-6`, dicocokkan seperti [`models[].id`](#models), mencakup setiap bentuk tertanggal, bentuk Amazon Bedrock regional, atau bentuk Google Cloud's Agent Platform yang meter hargai sebagai model itu. String lain apa pun, seperti alias atau ARN profil inferensi, cocok dengan ID yang dikirim klien atau string yang dikirim upstream, tidak peka huruf besar-kecil.756* ID bawaan seperti `claude-sonnet-4-6`, yang dicocokkan seperti [`models[].id`](#models), mencakup setiap bentuk bertanggal, bentuk regional Amazon Bedrock, atau bentuk Agent Platform Google Cloud yang diberi harga oleh meter sebagai model tersebut. String lain, seperti alias atau ARN inference-profile, dicocokkan dengan ID yang dikirim klien atau string yang dikirim ke upstream, tanpa membedakan huruf besar-kecil.

757* Di mana baris tumpang tindih, meter memilih baris yang paling spesifik daripada baris pertama: baris yang `model` adalah string model yang tepat dikirim upstream, kemudian baris yang cocok dengan ID yang tepat yang dikirim klien, kemudian baris yang menamai model bawaan.757* Jika baris tumpang tindih, meter memilih baris yang paling spesifik, bukan baris pertama: baris yang `model`-nya adalah string model persis yang dikirim ke upstream, lalu baris yang cocok dengan ID persis yang dikirim klien, lalu baris yang menyebut model bawaan.

758* Nama upstream yang tidak dikenal gagal boot, begitu juga dua baris untuk satu upstream yang menamai model yang sama, termasuk dua ejaan dari satu model bawaan. Gateway memperingatkan saat boot tentang baris yang tidak ada model yang dapat diminta yang dapat menggunakannya.758* Nama upstream yang tidak dikenal menggagalkan boot, begitu pula dua baris untuk satu upstream yang menyebut model yang sama, termasuk dua ejaan dari satu model bawaan. Gateway memberi peringatan saat boot tentang baris yang tidak dapat digunakan oleh model apa pun yang dapat diminta.

759* Permintaan pencarian web tetap pada harga daftar \$0.01; pengali masih berlaku untuk mereka.759* Permintaan web-search tetap pada harga daftar \$0.01; multiplier tetap berlaku untuk permintaan tersebut.

760 760 

761Untuk tarif per-region, berikan setiap region upstream bernama sendiri dan satu baris per upstream.761Untuk tarif per region, berikan setiap region upstream bernama miliknya sendiri dan satu baris per upstream.

762 762 

763#### Tandai harga naik763#### Menaikkan harga

764 764 

765Dengan v2.1.271 atau lebih baru di server gateway, Anda dapat menetapkan `multiplier` di atas 1, hingga 10, untuk mengukur lebih dari yang dikenakan penyedia, misalnya tarif chargeback internal. Contoh ini mengukur setiap permintaan pada 120% dari harga:765Dengan v2.1.271 atau yang lebih baru di server gateway, Anda dapat menyetel `multiplier` di atas 1, hingga 10, untuk mengukur lebih dari yang dikenakan penyedia, misalnya tarif chargeback internal. Contoh ini mengukur setiap permintaan pada 120% dari harga:

766 766 

767```yaml theme={null}767```yaml theme={null}

768pricing:768pricing:

769 multiplier: 1.2769 multiplier: 1.2

770```770```

771 771 

772Dengan blok [`admin:`](#admin), markup juga berlaku untuk batas pengeluaran. Meter menghitung 120% dari harga, sehingga pengembang mencapai batas mereka lebih cepat. Gateway mencatat peringatan saat boot yang mengatakan demikian.772Dengan blok [`admin:`](#admin), markup juga berlaku untuk batas pengeluaran. Meter menghitung 120% dari harga, sehingga developer mencapai batasnya lebih cepat. Gateway mencatat peringatan saat boot yang menyatakan hal tersebut.

773 773 

774Pengali tidak mengubah apa yang dikenakan penyedia upstream untuk permintaan.774Multiplier tidak mengubah apa yang dikenakan penyedia upstream untuk permintaan tersebut.

775 775 

776Jika gateway juga [mengirim tarif ke klien yang masuk](#send-the-rates-to-signed-in-clients), pengembang memerlukan Claude Code v2.1.271 atau lebih baru untuk melihat markup. Klien sebelumnya mengabaikan `multiplier` di atas 1 dan menunjukkan biaya tanpanya.776Jika gateway juga [mengirim tarif ke klien yang sudah masuk](#send-the-rates-to-signed-in-clients), developer memerlukan Claude Code v2.1.271 atau yang lebih baru untuk melihat markup. Klien sebelumnya mengabaikan `multiplier` di atas 1 dan menampilkan biaya tanpanya.

777 777 

778Server gateway sebelumnya dari v2.1.271 menolak untuk memulai jika Anda menetapkan `multiplier` di atas 1.778Server gateway yang lebih lama dari v2.1.271 menolak untuk mulai jika Anda menyetel `multiplier` di atas 1.

779 779 

780#### Kirim tarif ke klien yang masuk780#### Mengirim tarif ke klien yang sudah masuk

781 781 

782Dengan v2.1.268 atau lebih baru di server gateway, gateway juga menempatkan tarif dari `pricing` ke dalam kebijakan [`managed`](#managed) yang disajikannya, sebagai pengaturan terkelola [`modelPricing`](https://code.claude.com/docs/id/settings-reference#modelpricing). Pengembang yang cocok dengan kebijakan kemudian melihat tarif `pricing` untuk upstream pertama yang melayani setiap ID model di `/usage`, baris status, dan OpenTelemetry. Pengembang yang tidak cocok dengan kebijakan apa pun tidak menerima pengaturan terkelola, sehingga angka mereka tetap pada harga daftar. Klien menerapkan pengaturan di Claude Code v2.1.242 atau lebih baru.782Dengan v2.1.268 atau yang lebih baru di server gateway, gateway juga memasukkan tarif dari `pricing` ke dalam kebijakan [`managed`](#managed) yang dilayaninya, sebagai pengaturan terkelola [`modelPricing`](https://code.claude.com/docs/id/settings-reference#modelpricing). Developer yang cocok dengan suatu kebijakan kemudian melihat tarif `pricing` untuk upstream pertama yang melayani setiap ID model di `/usage`, baris status, dan OpenTelemetry. Developer yang tidak cocok dengan kebijakan apa pun tidak menerima pengaturan terkelola, sehingga angka mereka tetap pada harga daftar. Klien menerapkan pengaturan ini di Claude Code v2.1.242 atau yang lebih baru.

783 783 

784* Apa yang ditambahkan gateway: kecuali blok `cli` kebijakan sudah menetapkan `modelPricing`, gateway menambahkan `multiplier` dan, untuk setiap ID model yang dapat diminta klien, baris override dari upstream pertama yang melayani ID itu. Tarif yang hanya upstream failover yang mengenakan tetap di gateway.784* Apa yang ditambahkan gateway: kecuali blok `cli` suatu kebijakan sudah menyetel `modelPricing`, gateway menambahkan `multiplier` dan, untuk setiap ID model yang dapat diminta klien, baris override dari upstream pertama yang melayani ID tersebut. Tarif yang hanya dikenakan oleh upstream failover tetap di gateway.

785* Opt satu kebijakan keluar: atur `modelPricing` ke `{}` dalam blok `cli` kebijakan itu, dan pengembangnya tetap pada harga daftar.785* Mengecualikan satu kebijakan: setel `modelPricing` ke `{}` di blok `cli` kebijakan tersebut, dan developer-nya tetap pada harga daftar.

786* Pertahankan tarif kebijakan sendiri: kebijakan yang blok `cli` menetapkan `modelPricing` dengan `multiplier` atau `overrides` sendiri menyimpan `modelPricing` itu utuh, dan gateway tidak menambahkan tarif sendiri ke dalamnya.786* Mempertahankan tarif milik kebijakan: kebijakan yang blok `cli`-nya menyetel `modelPricing` dengan `multiplier` atau `overrides` sendiri mempertahankan `modelPricing` tersebut secara utuh, dan gateway tidak menambahkan tarifnya sendiri ke dalamnya.

787 787 

788### `models`788### `models`

789 789 

790Blok `models` adalah daftar model yang dikurasi admin opsional, disajikan di `/v1/models` dan digunakan untuk menerjemahkan ID model per upstream. Diperlukan untuk region Amazon Bedrock non-AS, ARN throughput-provisioned Amazon Bedrock, dan nama deployment Microsoft Foundry.790Blok `models` adalah daftar model opsional yang dikurasi admin, dilayani di `/v1/models` dan digunakan untuk menerjemahkan ID model per upstream. Blok ini wajib untuk region Amazon Bedrock di luar AS, ARN provisioned-throughput Amazon Bedrock, dan nama deployment Microsoft Foundry.

791 791 

792```yaml theme={null}792```yaml theme={null}

793auto_include_builtin_models: true # false: expose only the list below793auto_include_builtin_models: true # false: expose only the list below


801 foundry: your-opus-deployment-name801 foundry: your-opus-deployment-name

802```802```

803 803 

804Setiap kunci di bawah `upstream_model` harus cocok dengan `name` dari upstream yang dikonfigurasi, yang default ke nama penyedia. Kunci yang tidak cocok dengan upstream apa pun gagal boot, jadi abaikan baris untuk penyedia yang tidak Anda gunakan.804Setiap kunci di bawah `upstream_model` harus cocok dengan `name` dari upstream yang dikonfigurasi, yang secara default adalah nama penyedia. Kunci yang tidak cocok dengan upstream mana pun menggagalkan boot, jadi hapus baris untuk penyedia yang tidak Anda gunakan.

805 805 

806### `managed`806### `managed`

807 807 

808Blok `managed` mendefinisikan kebijakan akses berbasis peran yang dikunci pada grup IdP atau domain email. Kebijakan dievaluasi secara berurutan; kecocokan pertama dipilih, kemudian digabungkan ke basis catch-all `match: {}`. Mereka disajikan per-pengguna di `GET /managed/settings` dengan caching ETag/304.808Blok `managed` mendefinisikan kebijakan akses berbasis peran yang didasarkan pada grup IdP atau domain email. Kebijakan dievaluasi secara berurutan; kecocokan pertama dipilih, lalu digabungkan ke dasar catch-all `match: {}`. Kebijakan dilayani per pengguna di `GET /managed/settings` dengan caching ETag/304.

809 809 

810```yaml theme={null}810```yaml theme={null}

811managed:811managed:


824 enforceAvailableModels: true824 enforceAvailableModels: true

825```825```

826 826 

827Catch-all `match: {}`, secara konvensional terdaftar terakhir, diperlakukan sebagai lapisan dasar. Setiap kebijakan lain mewarisi kunci apa pun yang tidak ditetapkannya dari catch-all, sehingga entri per-peran hanya perlu mencantumkan apa yang berbeda dari default org. Aturan penggabungan tergantung pada jenis kunci:827Catch-all `match: {}`, yang secara konvensi dicantumkan terakhir, diperlakukan sebagai lapisan dasar. Setiap kebijakan lain mewarisi kunci apa pun yang tidak disetelnya dari catch-all, sehingga entri per peran hanya perlu mencantumkan apa yang berbeda dari default organisasi. Aturan penggabungan bergantung pada jenis kunci:

828 828 

829* **Allow-lists**: `availableModels` dan `permissions.allow`. Daftar kebijakan spesifik sepenuhnya menggantikan dasar.829* **Allow-list**: `availableModels` dan `permissions.allow`. Daftar kebijakan spesifik sepenuhnya menggantikan daftar dasar.

830* **Deny-list dan array hook**: `permissions.deny`, `permissions.ask`, `disabledMcpjsonServers`, `deniedMcpServers`, `blockedMarketplaces`, `deniedModels`, dan setiap array jenis event `hooks`. Ini mengambil gabungan (union) dari basis dan kebijakan, sehingga deny atau hook audit untuk seluruh organisasi tidak dapat secara tidak sengaja terhapus oleh override per peran.830* **Deny-list dan array hook**: `permissions.deny`, `permissions.ask`, `disabledMcpjsonServers`, `deniedMcpServers`, `blockedMarketplaces`, `deniedModels`, dan setiap array tipe event `hooks`. Kunci ini mengambil gabungan (union) dari dasar dan kebijakan, sehingga deny atau hook audit di seluruh organisasi tidak dapat terhapus secara tidak sengaja oleh override per peran.

831* **Record-typed keys**: `env`, `modelOverrides`, dan `skillOverrides`. Ini shallow-merge, jadi blok `env` per-peran menimpa kunci yang ditetapkannya dan mewarisi sisanya dari dasar.831* **Kunci bertipe record**: `env`, `modelOverrides`, dan `skillOverrides`. Kunci ini digabungkan secara dangkal (shallow-merge), sehingga blok `env` per peran menimpa kunci yang disetelnya dan mewarisi sisanya dari dasar.

832 832 

833`availableModels` juga diterapkan server-side di `/v1/messages`, jadi model yang ditolak mengembalikan `400` terlepas dari apa yang dikirim klien. Daftar kosong menolak setiap model. Pemeriksaan ini juga mencakup model tempat sesi dimulai sebelum pengembang memilih model, jadi [mulai sesi pada model yang diizinkan kebijakan](#start-sessions-on-a-model-the-policy-allows).833`availableModels` juga ditegakkan di sisi server pada `/v1/messages`, sehingga model yang ditolak mengembalikan `400` terlepas dari apa yang dikirim klien. Daftar kosong menolak setiap model. Pemeriksaan ini juga mencakup model yang digunakan sesi saat dimulai sebelum developer memilih model, jadi [mulai sesi pada model yang diizinkan kebijakan](#start-sessions-on-a-model-the-policy-allows).

834 834 

835Gateway memvalidasi nilai `model` itu sendiri sebelum meneruskan permintaan, sehingga nilai yang salah format tidak pernah mencapai upstream. Ini menolak permintaan dengan `400` dalam dua kasus:835Gateway memvalidasi nilai `model` sendiri sebelum meneruskan permintaan, sehingga nilai yang salah format tidak pernah mencapai upstream. Gateway menolak permintaan dengan `400` dalam dua kasus:

836 836 

837* Ketika nilai hilang atau kosong, gateway menolak permintaan dengan pesan `model is required`. Pemeriksaan itu memerlukan gateway yang menjalankan Claude Code v2.1.228 atau lebih baru.837* Jika nilainya tidak ada atau kosong, gateway menolak permintaan dengan pesan `model is required`. Pemeriksaan itu memerlukan gateway yang menjalankan Claude Code v2.1.228 atau yang lebih baru.

838* Ketika nilai ada tetapi bukan string, gateway menolak permintaan dengan pesan `model must be a string`. Memerlukan gateway yang menjalankan Claude Code v2.1.221 atau lebih baru.838* Jika nilainya ada tetapi bukan string, gateway menolak permintaan dengan pesan `model must be a string`. Memerlukan gateway yang menjalankan Claude Code v2.1.221 atau yang lebih baru.

839 839 

840| Matcher | Perilaku |840| Matcher | Perilaku |

841| - | - |841| - | - |

842| `match: {}` | Cocok dengan setiap pengguna yang diautentikasi. Mulai dengan salah satu dari ini dan tambahkan kebijakan yang dibatasi grup di atasnya nanti. |842| `match: {}` | Cocok dengan setiap pengguna yang terautentikasi. Mulailah dengan salah satu dari ini dan tambahkan kebijakan berlingkup grup di atasnya nanti. |

843| `match: { groups: [a, b] }` | Cocok jika klaim `groups` JWT berisi salah satu grup yang terdaftar. Peka huruf besar-kecil: grup harus cocok dengan casing yang tepat dari IdP. |843| `match: { groups: [a, b] }` | Cocok jika klaim `groups` JWT berisi salah satu grup yang tercantum. Peka huruf besar-kecil: grup harus cocok dengan penulisan huruf persis di IdP. |

844| `match: { email_domain: example.com }` | Cocok dengan bagian setelah `@` terakhir dalam klaim `email` JWT, tidak peka huruf besar-kecil. Menerima satu domain per kebijakan. |844| `match: { email_domain: example.com }` | Mencocokkan bagian setelah `@` terakhir dalam klaim `email` JWT, tanpa membedakan huruf besar-kecil. Menerima satu domain per kebijakan. |

845| `match: { groups: [a], email_domain: example.com }` | Kedua kondisi harus cocok |845| `match: { groups: [a], email_domain: example.com }` | Kedua kondisi harus cocok |

846 846 

847Pengguna yang diautentikasi yang tidak cocok dengan kebijakan apa pun mendapatkan default gateway, yang berarti setiap model dalam katalog dan tidak ada pengaturan terkelola. Tambahkan catch-all `match: {}` terakhir jika Anda menginginkan kebijakan default yang dijamin.847Pengguna terautentikasi yang tidak cocok dengan kebijakan apa pun mendapatkan default gateway, yang berarti setiap model dalam katalog dan tanpa pengaturan terkelola. Tambahkan catch-all `match: {}` di akhir jika Anda menginginkan kebijakan default yang terjamin.

848 848 

849> [!NOTE]849> [!NOTE]

850>850>

851> Gateway tidak menyimpan direktori pengguna sendiri. Ini mengotorisasi setiap permintaan dari token IdP pengguna, membaca keanggotaan grup dari klaim `groups` token dan mengevaluasi kebijakan terhadapnya. Tidak ada roster untuk menghitung dan tidak ada akun untuk dibuat sebelumnya, dan oleh karena itu tidak ada endpoint SCIM, karena tidak ada yang dapat disinkronkan SCIM ke dalamnya.851> Gateway tidak menyimpan direktori pengguna sendiri. Gateway mengotorisasi setiap permintaan dari token IdP pengguna, membaca keanggotaan grup dari klaim `groups` token dan mengevaluasi kebijakan terhadapnya. Tidak ada daftar pengguna untuk dienumerasi dan tidak ada akun untuk dibuat sebelumnya, dan karena itu tidak ada endpoint SCIM, karena tidak ada yang perlu disinkronkan oleh SCIM.

852>852>

853> Jalankan manajemen siklus hidup pengguna dan grup di sumber kebenaran, yang merupakan penyediaan SCIM asli IdP Anda atau platform tata kelola identitas khusus. Keanggotaan dan deprovisioning yang diatur di sana mengalir ke gateway secara otomatis melalui token. Jika Anda menginginkan penyediaan SCIM dari akun Claude itu sendiri, itu adalah kemampuan [Claude for Enterprise](https://code.claude.com/docs/id/admin-setup.md).853> Jalankan manajemen siklus hidup pengguna dan grup di sumber kebenaran, yaitu provisioning SCIM bawaan IdP Anda atau platform tata kelola identitas khusus. Keanggotaan dan deprovisioning yang diatur di sana mengalir ke gateway secara otomatis melalui token. Jika Anda menginginkan provisioning SCIM untuk akun Claude itu sendiri, itu adalah kemampuan [Claude for Enterprise](https://code.claude.com/docs/id/admin-setup.md).

854>854>

855> Dua jam propagasi berlaku:855> Ada dua waktu propagasi yang berlaku:

856>856>

857> * **Konten kebijakan**: mengedit kebijakan dan men-deploy ulang mencapai klien Claude Code yang terhubung pada polling pengaturan terkelola berikutnya, dalam satu jam, kecuali [perubahan yang hanya berlaku pada peluncuran berikutnya](https://code.claude.com/docs/id/server-managed-settings.md#fetch-and-caching-behavior)857> * **Isi kebijakan**: mengedit kebijakan dan men-deploy ulang menjangkau klien Claude Code yang terhubung pada polling pengaturan terkelola berikutnya, dalam satu jam, kecuali [perubahan yang hanya berlaku pada peluncuran berikutnya](https://code.claude.com/docs/id/server-managed-settings.md#fetch-and-caching-behavior)

858> * **Keanggotaan grup**: mengubah keanggotaan grup pengguna mengubah kebijakan mana yang cocok dengan mereka. Ini berlaku pada pembaruan sesi berikutnya, yang berarti penyegaran senyap berikutnya, dibatasi oleh `session.ttl_hours`.858> * **Keanggotaan grup**: mengubah keanggotaan grup pengguna mengubah kebijakan mana yang cocok dengannya. Ini berlaku pada penerbitan ulang sesi berikutnya, yaitu refresh senyap berikutnya, yang dibatasi oleh `session.ttl_hours`.

859>859>

860> Claude Desktop mengikuti [jadwalnya sendiri](#when-a-policy-change-reaches-claude-desktop).860> Claude Desktop mengikuti [jadwalnya sendiri](#when-a-policy-change-reaches-claude-desktop).

861 861 

862#### Mulai sesi pada model yang diizinkan kebijakan862#### Memulai sesi pada model yang diizinkan kebijakan

863 863 

864Jika `availableModels` tidak mencantumkan model default Claude Code, sesi mendapatkan respons `400` hingga pengembang memilih model yang terdaftar, misalnya dengan `/model`. Dalam sesi gateway, default-nya adalah model Opus yang dituju oleh alias `opus`, dan `availableModels` saja tidak mengubahnya.864Jika `availableModels` tidak menyertakan model default Claude Code, sesi mendapatkan respons `400` hingga developer memilih model yang tercantum, misalnya dengan `/model`. Dalam sesi gateway, default-nya adalah model Opus yang dituju alias `opus`, dan `availableModels` saja tidak mengubahnya.

865 865 

866Untuk memperbaikinya, atur [`enforceAvailableModels: true`](https://code.claude.com/docs/id/model-config#enforce-the-allowlist-for-the-default-model) dalam blok `cli` yang sama, lalu periksa jenis entri apa yang ada dalam daftar:866Untuk memperbaikinya, setel [`enforceAvailableModels: true`](https://code.claude.com/docs/id/model-config#enforce-the-allowlist-for-the-default-model) di blok `cli` yang sama, lalu periksa jenis entri yang ada dalam daftar:

867 867 

868* **Alias seperti `sonnet`, atau ID bawaan seperti `claude-sonnet-4-6`**: sesi dimulai pada salah satu model tersebut, dan opsi Default di `/model` mengarah ke model itu868* **Alias seperti `sonnet`, atau ID bawaan seperti `claude-sonnet-4-6`**: sesi dimulai pada salah satu model tersebut, dan opsi Default di `/model` mengarah ke model itu

869* **Tidak ada alias atau ID bawaan dalam daftar**: sesi masih dapat dimulai pada default bawaan, jadi atur juga [`model`](https://code.claude.com/docs/id/model-config#control-the-model-users-run-on) ke salah satu ID yang terdaftar dalam blok `cli` kebijakan itu869* **Tidak ada alias atau ID bawaan dalam daftar**: sesi dapat tetap dimulai pada default bawaan, jadi setel juga [`model`](https://code.claude.com/docs/id/model-config#control-the-model-users-run-on) ke salah satu ID yang tercantum di blok `cli` kebijakan tersebut

870 870 

871Kebijakan ini mencantumkan satu ID kustom yang didefinisikan oleh [`models`](#models), dan memulai sesi pada ID tersebut:871Kebijakan ini mencantumkan satu ID kustom yang didefinisikan [`models`](#models), dan memulai sesi pada ID tersebut:

872 872 

873```yaml theme={null}873```yaml theme={null}

874managed:874managed:


882 882 

883#### Nilai matcher yang menghentikan gateway saat boot883#### Nilai matcher yang menghentikan gateway saat boot

884 884 

885Saat boot, gateway memeriksa blok `match` dari setiap kebijakan dan daftar [`admin_groups`](#admin). Salah satu dari nilai ini menghentikan gateway dengan kesalahan yang menamai bidang:885Saat boot, gateway memeriksa blok `match` setiap kebijakan dan daftar [`admin_groups`](#admin). Salah satu nilai berikut menghentikan gateway dengan error yang menyebutkan bidangnya:

886 886 

887* Daftar `groups` kosong887* Daftar `groups` yang kosong

888* Entri kosong dalam `groups` atau dalam `admin_groups`888* Entri kosong di `groups` atau di `admin_groups`

889* `email_domain` kosong889* `email_domain` yang kosong

890* `email_domain` yang berisi `@`, whitespace, atau koma. Gateway memangkas nilai dan menghapus satu `@` terkemuka sebelum pemeriksaan ini. Tulis satu domain telanjang, seperti `example.com`.890* `email_domain` yang berisi `@`, spasi, atau koma. Gateway memangkas nilai tersebut dan menghapus satu `@` di awal sebelum pemeriksaan ini. Tulis satu domain polos, seperti `example.com`.

891 891 

892Sebelum v2.1.232, gateway dimulai dengan nilai-nilai ini. Setiap nilai memiliki efek ini:892Sebelum v2.1.232, gateway tetap mulai dengan nilai-nilai ini. Setiap nilai memiliki efek berikut:

893 893 

894* `email_domain` kosong: gateway melewati pemeriksaan domain, jadi kebijakan dengan `email_domain` kosong dan tidak ada daftar `groups` cocok dengan setiap pengguna yang diautentikasi894* `email_domain` kosong: gateway melewati pemeriksaan domain, sehingga kebijakan dengan `email_domain` kosong dan tanpa daftar `groups` cocok dengan setiap pengguna yang terautentikasi

895* Daftar `groups` kosong: kebijakan tidak cocok dengan siapa pun895* Daftar `groups` kosong: kebijakan tidak cocok dengan siapa pun

896* `email_domain` berisi `@`, whitespace, atau koma: kebijakan tidak cocok dengan siapa pun896* `email_domain` yang berisi `@`, spasi, atau koma: kebijakan tidak cocok dengan siapa pun

897* Entri kosong dalam `groups` atau dalam `admin_groups`: entri cocok dengan pengguna hanya ketika klaim IdP `groups` pengguna itu juga berisi entri kosong. Dalam `admin_groups`, kecocokan itu memberikan akses admin. Jika daftar `admin_groups` Anda tidak pernah berisi entri kosong, tidak ada yang mendapatkan akses admin dengan cara ini.897* Entri kosong di `groups` atau di `admin_groups`: entri tersebut hanya cocok dengan pengguna jika klaim `groups` IdP pengguna itu juga berisi entri kosong. Di `admin_groups`, kecocokan itu memberikan akses admin. Jika daftar `admin_groups` Anda tidak pernah berisi entri kosong, tidak ada yang memperoleh akses admin dengan cara ini.

898 898 

899#### Memilih `cli` atau `code`899#### Memilih `cli` atau `code`

900 900 

901> [!WARNING]901> [!WARNING]

902>902>

903> Ketika suatu kebijakan menggunakan kunci `code`, masing-masing hal berikut menghentikan gateway untuk mulai:903> Jika kebijakan menggunakan kunci `code`, masing-masing hal berikut mencegah gateway untuk mulai:

904>904>

905> * **Versi gateway**: `code` memerlukan Claude Code v2.1.296 atau yang lebih baru di server gateway. Gateway versi lebih lama menolak untuk mulai ketika menemukan kunci tersebut. Tingkatkan setiap replika sebelum Anda menambahkan kunci, dan ubah `code` kembali ke `cli` sebelum Anda melakukan rollback ke versi sebelumnya.905> * **Versi gateway**: `code` memerlukan Claude Code v2.1.296 atau yang lebih baru di server gateway. Gateway yang lebih lama menolak untuk mulai saat menemukan kunci tersebut. Tingkatkan setiap replika sebelum Anda menambahkan kunci, dan ubah `code` kembali ke `cli` sebelum Anda melakukan rollback ke versi sebelumnya.

906> * **Kunci campuran**: file yang memiliki `code` dan `cli` sekaligus, atau ejaan lamanya `settings`, menghentikan gateway saat boot. Letakkan setiap blok di bawah satu kunci, dalam satu kali edit.906> * **Kunci campuran**: file yang memiliki `code` dan `cli`, atau ejaan sebelumnya `settings`, menghentikan gateway saat boot. Letakkan setiap blok di bawah satu kunci, dalam satu pengeditan.

907 907 

908Pengaturan Claude Code suatu kebijakan, seperti aturan yang menolak pembacaan file `.env`, diletakkan dalam blok di bawah kunci `cli` atau `code`. `code` adalah kunci yang direkomendasikan, dan `cli` adalah kunci lama. Kedua kunci menerima isi yang sama. Kunci tersebut menentukan di mana pengaturan ditegakkan:908Pengaturan Claude Code suatu kebijakan, seperti aturan yang menolak membaca file `.env`, ditempatkan dalam blok di bawah kunci `cli` atau `code`. `code` adalah kunci yang direkomendasikan, dan `cli` adalah kunci lama. Kedua kunci menerima isi yang sama. Kunci menentukan di mana pengaturan ditegakkan:

909 909 

910* **`cli`**: terminal, ekstensi VS Code dan JetBrains, serta Agent SDK. Di bawah `cli`, tab Code di Claude Desktop mendapatkan [pengaturan turunan](#claude-desktop-overlay), sehingga aturan berlingkup seperti `Read(./.env)` tidak menghentikan pengguna di sana.910* **`cli`**: terminal, ekstensi VS Code dan JetBrains, dan Agent SDK. Di bawah `cli`, tab Code di Claude Desktop mendapatkan [pengaturan turunan](#claude-desktop-overlay), sehingga aturan berlingkup seperti `Read(./.env)` tidak menghentikan pengguna di sana.

911* **`code`**: tempat yang sama, dan tab Code di Claude Desktop juga dapat dicakup.911* **`code`**: tempat yang sama, dan tab Code di Claude Desktop juga dapat dicakup.

912 912 

913File yang menggunakan `cli` tetap berfungsi seperti sebelumnya, dan gateway yang menemukan `cli` dalam kebijakan dengan kunci [`desktop`](#claude-desktop-overlay) memberi peringatan saat boot dan tetap dimulai. Beralihlah ke `code` agar pengaturan juga dapat mencakup tab Code.913File yang menggunakan `cli` berfungsi seperti sebelumnya, dan gateway yang menemukan `cli` dalam kebijakan dengan kunci [`desktop`](#claude-desktop-overlay) memberi peringatan saat boot dan tetap mulai. Beralihlah ke `code` agar pengaturan juga dapat mencakup tab Code.

914 914 

915Sebelum beralih, baca [Menerapkan pengaturan `code` di tab Code](#apply-code-settings-in-the-code-tab). Kebijakan memerlukan kunci `desktop` dan mesin pengguna memerlukan penyiapan sebelum pengaturan berlaku di sana, dan pencarian web dimatikan di Claude Desktop.915Sebelum beralih, baca [Menerapkan pengaturan `code` di tab Code](#apply-code-settings-in-the-code-tab). Kebijakan memerlukan kunci `desktop` dan mesin pengguna memerlukan penyiapan sebelum pengaturan berlaku di sana, dan pencarian web dimatikan di Claude Desktop.

916 916 

917Kebijakan ini menempatkan aturan penolakan di bawah `code`, dengan kunci `desktop` kosong:917Kebijakan ini menempatkan aturan deny di bawah `code`, dengan kunci `desktop` kosong:

918 918 

919```yaml theme={null}919```yaml theme={null}

920managed:920managed:


925 desktop: {}925 desktop: {}

926```926```

927 927 

928Saat Anda beralih, hapus baris `serve_to_desktop` apa pun dalam edit yang sama yang mengganti nama blok. Ketika suatu instruksi menyebut blok `cli`, gunakan blok `code` Anda.928Saat beralih, hapus baris `serve_to_desktop` apa pun dalam pengeditan yang sama yang mengganti nama blok. Di mana suatu instruksi menyebut blok `cli`, gunakan blok `code` Anda.

929 929 

930#### Apa yang masuk dalam `cli`930`serve_to_desktop: true` adalah cara lama untuk menawarkan pengaturan `cli` suatu kebijakan ke tab Code. Ini tidak berpengaruh ketika Claude Desktop terhubung melalui [`bootstrapUrl`](#claude-desktop-overlay). Selama kebijakan Anda menggunakan `cli`, peringatan boot yang menyebut kunci ini berarti pengaturan tersebut tidak mencapai tab Code:

931 931 

932Setiap nilai `code` atau `cli` adalah dokumen `managed-settings.json` Claude Code yang lengkap, dengan skema yang sama yang akan Anda deploy melalui MDM atau `/etc/claude-code/managed-settings.json`, yang di sini dinyatakan sebagai YAML. CLI menerapkan dokumen yang dikirim pada tingkat terkelola, di atas pengaturan pengguna dan proyek, sebagai pengganti pengaturan terkelola server. Karena itu, CLI mengabaikan pengaturan yang [dibatasi untuk sumber kebijakan tingkat OS](https://code.claude.com/docs/id/server-managed-settings.md#current-limitations), seperti `policyHelper` dan `wslInheritsWindowsSettings`.932* **Untuk mencakup tab Code**: beralih ke `code`, setelah mesin pengguna memenuhi kondisi di [Menerapkan pengaturan `code` di tab Code](#apply-code-settings-in-the-code-tab)

933* **Untuk tetap menggunakan `cli`**: tetapkan `serve_to_desktop: false` di samping `cli` dalam suatu kebijakan untuk menyembunyikan peringatan

933 934 

934Gateway memvalidasi setiap dokumen terhadap skema pengaturan CLI saat boot, jadi kunci tingkat atas yang tidak dikenali gagal boot dengan kesalahan yang menamai setiap kunci yang menyinggung. Bagian skema yang sengaja terbuka masih menerima nilai arbitrer, karena klien yang lebih baru mungkin mengenali entri yang skema gateway tidak. Kunci terbuka ini termasuk `env`, `pluginConfigs`, dan kunci bersarang di bawah `permissions`.935#### Apa yang dimasukkan ke `cli`

935 936 

936Karena validasi menggunakan skema yang disertakan dengan versi gateway yang diinstal, menempatkan kunci pengaturan tingkat atas yang diperkenalkan oleh rilis Claude Code yang lebih baru ke dalam konfigurasi terkelola memerlukan upgrade gateway terlebih dahulu. Smoke-test kebijakan baru pada satu klien sebelum menggulirnya.937Setiap nilai `code` atau `cli` adalah dokumen `managed-settings.json` Claude Code yang lengkap, skema yang sama yang akan Anda deploy melalui MDM atau `/etc/claude-code/managed-settings.json`, yang dinyatakan di sini sebagai YAML. CLI menerapkan dokumen yang dikirim pada tingkat terkelola, di atas pengaturan pengguna dan proyek, sebagai pengganti pengaturan terkelola server. Karena itu CLI mengabaikan pengaturan yang [dibatasi untuk sumber kebijakan tingkat OS](https://code.claude.com/docs/id/server-managed-settings.md#current-limitations), seperti `policyHelper` dan `wslInheritsWindowsSettings`.

937 938 

938Referensi kunci lengkap ada di [Pengaturan Claude Code](https://code.claude.com/docs/id/settings-reference.md#all-settings). Kunci yang paling sering digunakan operator:939Gateway memvalidasi setiap dokumen terhadap skema pengaturan CLI saat boot, sehingga kunci tingkat atas yang tidak dikenali menggagalkan boot dengan error yang menyebutkan setiap kunci yang bermasalah. Bagian skema yang sengaja dibuat terbuka tetap menerima nilai arbitrer, karena klien yang lebih baru mungkin mengenali entri yang tidak dikenali skema gateway. Kunci terbuka ini mencakup `env`, `pluginConfigs`, dan kunci yang bersarang di bawah `permissions`.

940 

941Karena validasi menggunakan skema yang dibundel dengan versi gateway yang terpasang, memasukkan kunci pengaturan tingkat atas yang diperkenalkan oleh rilis Claude Code yang lebih baru ke dalam konfigurasi terkelola memerlukan peningkatan gateway terlebih dahulu. Lakukan smoke test pada kebijakan baru di satu klien sebelum meluncurkannya.

942 

943Referensi kunci lengkap ada di [Pengaturan Claude Code](https://code.claude.com/docs/id/settings-reference.md#all-settings). Kunci yang paling sering digunakan operator terlebih dahulu:

939 944 

940```yaml theme={null}945```yaml theme={null}

941managed:946managed:


970 - { type: command, command: /usr/local/bin/audit-edit.sh }975 - { type: command, command: /usr/local/bin/audit-edit.sh }

971```976```

972 977 

973| Kunci | Diterapkan oleh | Efek |978| Kunci | Ditegakkan oleh | Efek |

974| - | - | - |979| - | - | - |

975| `availableModels` | Gateway + CLI | Allowlist model. Juga diperiksa di `/v1/messages`, jadi klien yang dipatch tidak dapat membypassnya. |980| `availableModels` | Gateway + CLI | Allowlist model. Juga diperiksa di `/v1/messages`, sehingga klien yang dimodifikasi tidak dapat melewatinya. |

976| [`deniedModels`](https://code.claude.com/docs/id/settings-reference#deniedmodels), [`availableModelsMatch`](https://code.claude.com/docs/id/settings-reference#availablemodelsmatch) | Gateway + CLI | [Memblokir model atau versi tertentu](https://code.claude.com/docs/id/model-config.md#block-specific-models-or-versions) yang sebaliknya diizinkan oleh `availableModels`. Model yang diblokir ditolak dengan `400` di `/v1/messages` dan tidak disertakan di `/v1/models`. Pemeriksaan milik gateway memerlukan Claude Code v2.1.299 atau lebih baru di server gateway. Pemeriksaan CLI memerlukan v2.1.283 atau lebih baru di klien, dan klien sebelumnya mengabaikan kedua kunci. |981| [`deniedModels`](https://code.claude.com/docs/id/settings-reference#deniedmodels), [`availableModelsMatch`](https://code.claude.com/docs/id/settings-reference#availablemodelsmatch) | Gateway + CLI | [Memblokir model atau versi tertentu](https://code.claude.com/docs/id/model-config.md#block-specific-models-or-versions) yang sebaliknya akan diizinkan oleh `availableModels`. Model yang diblokir ditolak dengan `400` di `/v1/messages` dan tidak disertakan di `/v1/models`. Pemeriksaan gateway sendiri memerlukan Claude Code v2.1.299 atau yang lebih baru di server gateway. Pemeriksaan CLI memerlukan v2.1.283 atau yang lebih baru di klien, dan klien sebelumnya mengabaikan kedua kunci. |

977| `permissions.allow` / `.deny` | CLI | Aturan tool dan perintah. Lihat [Permissions](https://code.claude.com/docs/id/permissions.md). |982| `permissions.allow` / `.deny` | CLI | Aturan tool dan perintah. Lihat [Izin](https://code.claude.com/docs/id/permissions.md) dan [apa yang tidak dicocokkan oleh aturan Bash](https://code.claude.com/docs/id/permissions.md#bash-rule-limits). |

978| `permissions.disableBypassPermissionsMode` | CLI | Atur ke `disable` untuk memblokir [`bypassPermissions`](https://code.claude.com/docs/id/permission-modes#skip-all-checks-with-bypasspermissions-mode), mode yang melewati permintaan izin, dan flag `--dangerously-skip-permissions` |983| `permissions.disableBypassPermissionsMode` | CLI | Setel ke `disable` untuk memblokir [`bypassPermissions`](https://code.claude.com/docs/id/permission-modes#skip-all-checks-with-bypasspermissions-mode), mode yang melewati permintaan izin, dan flag `--dangerously-skip-permissions` |

979| `allowManagedPermissionRulesOnly` | CLI | Ketika `true`, pengaturan terkelola menjadi satu-satunya sumber pengaturan aturan izin. Entri [`allowManagedPermissionRulesOnly`](https://code.claude.com/docs/id/settings-reference#allowmanagedpermissionrulesonly) mencantumkan setiap sumber yang Claude Code kemudian abaikan. |984| `allowManagedPermissionRulesOnly` | CLI | Jika `true`, pengaturan terkelola menjadi satu-satunya sumber pengaturan untuk aturan izin. Entri [`allowManagedPermissionRulesOnly`](https://code.claude.com/docs/id/settings-reference#allowmanagedpermissionrulesonly) mencantumkan setiap sumber yang kemudian diabaikan Claude Code. |

980| `env` | CLI | Environment variable yang digabungkan ke dalam proses CLI. Gunakan untuk telemetri, auto-update, dan override nama model. |985| `env` | CLI | Environment variable yang digabungkan ke dalam proses CLI. Gunakan untuk telemetri, pembaruan otomatis, dan override nama model. |

981| `hooks` | CLI | [Hooks](https://code.claude.com/docs/id/hooks.md) di seluruh org |986| `hooks` | CLI | [Hook](https://code.claude.com/docs/id/hooks.md) di seluruh organisasi |

982| `managedMcpServers` | CLI | Server MCP remote [disediakan untuk setiap pengembang yang cocok](https://code.claude.com/docs/id/managed-mcp.md#provide-servers-through-managed-settings) bersama server yang mereka tambahkan sendiri, `http` dan `sse` saja. Lihat [Server MCP dalam kebijakan](#mcp-servers-in-a-policy). Memerlukan Claude Code v2.1.259 atau lebih baru di server gateway dan pada klien. Klien sebelumnya mengabaikan kunci. |987| `managedMcpServers` | CLI | Server MCP jarak jauh yang [disediakan untuk setiap developer yang cocok](https://code.claude.com/docs/id/managed-mcp.md#provide-servers-through-managed-settings) bersama server yang mereka tambahkan sendiri, hanya `http` dan `sse`. Lihat [Server MCP dalam kebijakan](#mcp-servers-in-a-policy). Memerlukan Claude Code v2.1.259 atau yang lebih baru di server gateway dan di klien. Klien sebelumnya mengabaikan kunci ini. |

983 988 

984Karena pengaturan ini tiba melalui jaringan, CLI menunjukkan kepada setiap pengembang dialog persetujuan keamanan sebelum menerapkan pengaturan yang tercantum di bawah:989Karena pengaturan ini datang melalui jaringan, CLI menampilkan dialog persetujuan keamanan kepada setiap developer sebelum menerapkan pengaturan yang tercantum di bawah ini:

985 990 

986* `hooks`991* `hooks`

987* Variabel `env` yang memerlukan persetujuan pengembang, seperti proxy dan variabel URL dasar992* variabel `env` yang memerlukan persetujuan developer, seperti variabel proxy dan base-URL

988* pengaturan eksekusi shell seperti `apiKeyHelper` dan `statusLine`993* pengaturan eksekusi shell seperti `apiKeyHelper` dan `statusLine`

989* pengaturan biner sandbox `sandbox.bwrapPath`, `sandbox.socatPath`, dan `sandbox.ripgrep`994* pengaturan biner sandbox `sandbox.bwrapPath`, `sandbox.socatPath`, dan `sandbox.ripgrep`

990* Pengaturan sandbox yang mencegat lalu lintas, menyuntikkan kredensial, atau melemahkan isolasi, seperti `sandbox.network.tlsTerminate` dan pengaturan port proxy. [Dialog persetujuan keamanan](https://code.claude.com/docs/id/server-managed-settings.md#security-approval-dialogs) mencantumkan semuanya.995* Pengaturan sandbox yang mencegat lalu lintas, menyuntikkan kredensial, atau melemahkan isolasi, seperti `sandbox.network.tlsTerminate` dan pengaturan port proxy. [Dialog persetujuan keamanan](https://code.claude.com/docs/id/server-managed-settings.md#security-approval-dialogs) mencantumkan semuanya.

991 996 

992[Memori persetujuan](https://code.claude.com/docs/id/server-managed-settings.md#approval-memory) mencakup berapa lama persetujuan berlangsung dan kapan dialog muncul lagi.997[Memori persetujuan](https://code.claude.com/docs/id/server-managed-settings.md#approval-memory) membahas berapa lama persetujuan bertahan dan kapan dialog muncul lagi.

993 998 

994Claude Code menerapkan beberapa variabel `env` yang dikirimkan tanpa menunjukkan dialog persetujuan kepada pengembang, seperti pengaturan pemilihan model dan batas numerik. Variabel yang dikirimkan lainnya dapat memerlukan persetujuan pengembang sebelum berlaku; nilai proxy, URL dasar, atau `OTEL_EXPORTER_OTLP_ENDPOINT` yang tidak kosong selalu demikian. Ketika variabel yang dikirimkan memerlukan persetujuan, dialog menamakannya.999Claude Code menerapkan beberapa variabel `env` yang dikirim tanpa menampilkan dialog persetujuan kepada developer, seperti pengaturan pemilihan model dan batas numerik. Variabel lain yang dikirim dapat memerlukan persetujuan developer sebelum berlaku; nilai proxy, base-URL, atau `OTEL_EXPORTER_OTLP_ENDPOINT` yang tidak kosong selalu memerlukannya. Jika variabel yang dikirim memerlukan persetujuan, dialog akan menyebutkannya.

995 1000 

996[Environment variable dan dialog persetujuan](https://code.claude.com/docs/id/server-managed-settings.md#environment-variables-and-the-approval-dialog) memiliki detail, termasuk empat toggle privasi yang nilai yang dikirimkan memutuskan apakah mereka memerlukan persetujuan. Sebelum v2.1.218, Claude Code menerapkan lebih sedikit variabel tanpa bertanya kepada pengembang, jadi lebih banyak variabel yang dikirimkan memicu dialog.1001[Environment variable dan dialog persetujuan](https://code.claude.com/docs/id/server-managed-settings.md#environment-variables-and-the-approval-dialog) memuat detailnya, termasuk empat toggle privasi yang nilai kirimannya menentukan apakah toggle tersebut memerlukan persetujuan. Sebelum v2.1.218, Claude Code menerapkan lebih sedikit variabel tanpa bertanya kepada developer, sehingga lebih banyak variabel yang dikirim memicu dialog.

997 1002 

998Konfigurasi [telemetri](#telemetry) gateway mendorong `OTEL_EXPORTER_OTLP_ENDPOINT`, jadi menetapkan `telemetry.forward_to` memicu dialog pada setiap klien interaktif. Dialog melindungi mesin pengembang dari gateway yang dikompromikan atau bermusuhan, bukan organisasi dari pengembang.1003Konfigurasi [telemetri](#telemetry) gateway mengirim `OTEL_EXPORTER_OTLP_ENDPOINT`, sehingga menyetel `telemetry.forward_to` memicu dialog pada setiap klien interaktif. Dialog ini melindungi mesin developer dari gateway yang disusupi atau berniat jahat, bukan melindungi organisasi dari developer.

999 1004 

1000[Eksekusi non-interaktif](https://code.claude.com/docs/id/server-managed-settings.md#security-approval-dialogs), seperti `claude -p`, sesi Agent SDK, atau sesi di tab Code Claude Desktop, tidak dapat menampilkan dialog. Eksekusi tersebut menerapkan pengaturan yang dikirim hanya untuk eksekusi itu dan tidak mencatatnya sebagai disetujui, sehingga sesi interaktif developer berikutnya tetap menampilkan dialog.1005[Eksekusi non-interaktif](https://code.claude.com/docs/id/server-managed-settings.md#security-approval-dialogs), seperti `claude -p`, sesi Agent SDK, atau sesi di tab Code Claude Desktop, tidak dapat menampilkan dialog. Eksekusi tersebut menerapkan pengaturan yang dikirim hanya untuk eksekusi itu dan tidak mencatatnya sebagai disetujui, sehingga sesi interaktif developer berikutnya tetap menampilkan dialog.

1001 1006 

1002Jika pengembang menolak, Claude Code keluar dari sesi itu daripada menerapkan kebijakan. Ketika Anda mendorong hook baru, atau variabel env apa pun yang memicu dialog, ke kebijakan yang luas, setiap pengembang yang cocok oleh karena itu melihat dialog dalam sesi interaktif mereka. Sesi interaktif yang berjalan menunjukkannya pada polling per jam berikutnya, dan sebaliknya muncul pada startup interaktif pengembang berikutnya.1007Jika developer menolak, Claude Code keluar dari sesi tersebut alih-alih menerapkan kebijakan. Karena itu, saat Anda mengirim hook baru, atau env var apa pun yang memicu dialog, ke kebijakan yang luas, setiap developer yang cocok akan melihat dialog dalam sesi interaktif mereka. Sesi interaktif yang sedang berjalan menampilkannya pada polling per jam berikutnya, dan jika tidak, dialog muncul pada startup interaktif developer berikutnya.

1008 

1009Kunci `cli` bernama `settings` pada rilis sebelumnya, dan gateway masih menerima ejaan tersebut sebagai alias. Untuk deployment baru, gunakan [`code`](#choose-cli-or-code).

1003 1010 

1004Kunci `cli` bernama `settings` di rilis sebelumnya, dan gateway masih menerima ejaan tersebut sebagai alias. Untuk deployment baru, gunakan [`code`](#choose-cli-or-code).1011#### Menguji kebijakan sebelum deployment

1012 

1013Untuk menguji perubahan kebijakan, mulai gateway dengan database Postgres sekali pakai. Gateway terhubung ke Postgres dan menerapkan migrasi skemanya sebelum memeriksa isi blok `cli`, `code`, dan `desktop`. Ketika tidak dapat menjangkau database, proses mulai berhenti di `could not connect to Postgres` dan tidak melaporkan apa pun tentang isinya.

1005 1014 

1006#### Context window dalam sesi terminal1015#### Context window dalam sesi terminal

1007 1016 

1008Sesi terminal yang masuk melalui `/login` menggunakan context window 1M untuk Opus 4.7 dan yang lebih baru, Sonnet 5 dan yang lebih baru, serta model Fable. ID model tidak memerlukan sufiks `[1m]`, dan sesi melakukan compact pada sekitar 967K token. Sebelum Claude Code v2.1.287 di mesin pengembang, Claude Code memperlakukan model Opus dan Fable sebagai memiliki window 200K kecuali ID model diakhiri dengan `[1m]`.1017Sesi terminal yang masuk melalui `/login` menggunakan context window 1M untuk Opus 4.7 dan yang lebih baru, Sonnet 5 dan yang lebih baru, serta model Fable. ID model tidak memerlukan akhiran `[1m]`, dan sesi melakukan compact pada sekitar 967K token. Sebelum Claude Code v2.1.287 di mesin developer, Claude Code memperlakukan model Opus dan Fable sebagai memiliki window 200K kecuali ID model diakhiri dengan `[1m]`.

1009 1018 

1010Agar sesi terminal melakukan compact pada batas 200K sebagai gantinya, atur [window auto-compact](https://code.claude.com/docs/id/model-config.md#set-the-auto-compact-window) dalam `env` kebijakan:1019Agar sesi terminal melakukan compact pada batas 200K, setel [window auto-compact](https://code.claude.com/docs/id/model-config.md#set-the-auto-compact-window) di `env` kebijakan:

1011 1020 

1012```yaml theme={null}1021```yaml theme={null}

1013managed:1022managed:


1018 CLAUDE_CODE_AUTO_COMPACT_WINDOW: "200000"1027 CLAUDE_CODE_AUTO_COMPACT_WINDOW: "200000"

1019```1028```

1020 1029 

1021Claude Code menerapkan variabel ini tanpa menunjukkan dialog persetujuan kepada pengembang. Variabel ini berlaku untuk setiap model, termasuk ID model yang diakhiri `[1m]`.1030Claude Code menerapkan variabel ini tanpa menampilkan dialog persetujuan kepada developer. Variabel ini berlaku untuk setiap model, termasuk ID model yang diakhiri dengan `[1m]`.

1022 1031 

1023Untuk menonaktifkan konteks 1M sebagai gantinya, atur [`CLAUDE_CODE_DISABLE_1M_CONTEXT: "1"`](https://code.claude.com/docs/id/model-config#extended-context) dalam blok `env` yang sama. Claude Code kemudian memperlakukan setiap model sebagai memiliki window 200K. Dalam sesi interaktif, setiap pengembang menyetujui variabel ini dalam [dialog persetujuan](#what-goes-in-cli) sebelum berlaku.1032Untuk mematikan konteks 1M, setel [`CLAUDE_CODE_DISABLE_1M_CONTEXT: "1"`](https://code.claude.com/docs/id/model-config#extended-context) di blok `env` yang sama. Claude Code kemudian memperlakukan setiap model sebagai memiliki window 200K. Dalam sesi interaktif, setiap developer menyetujui variabel ini di [dialog persetujuan](#what-goes-in-cli) sebelum variabel tersebut berlaku.

1024 1033 

1025#### Prompt cache satu jam1034#### Prompt cache satu jam

1026 1035 

1027Untuk meminta [TTL prompt cache](https://code.claude.com/docs/id/prompt-caching.md#cache-lifetime) satu jam alih-alih lima menit default, tambahkan kunci-kunci ini ke [blok `code`, `cli`, atau `settings`](#choose-cli-or-code) yang sudah ada pada kebijakan dan restart gateway. Kunci-kunci ini memerlukan Claude Code v2.1.242 atau yang lebih baru di server gateway dan di klien.1036Untuk meminta [TTL prompt cache](https://code.claude.com/docs/id/prompt-caching.md#cache-lifetime) satu jam alih-alih lima menit default, tambahkan kunci ini ke [blok `code`, `cli`, atau `settings`](#choose-cli-or-code) yang sudah ada di kebijakan, lalu mulai ulang gateway. Kunci ini memerlukan Claude Code v2.1.242 atau yang lebih baru di server gateway dan di klien.

1028 1037 

1029`promptCacheTtl` mencakup percakapan utama. `subagentPromptCacheTtl` bersifat opsional dan mencakup subagent, alur kerja, dan permintaan latar belakang. Contoh ini menambahkan keduanya ke kebijakan `match: {}` dengan kunci `cli`:1038`promptCacheTtl` mencakup percakapan utama. `subagentPromptCacheTtl` bersifat opsional dan mencakup subagent, workflow, dan permintaan latar belakang. Contoh ini menambahkan keduanya ke kebijakan `match: {}` dengan kunci `cli`:

1030 1039 

1031```yaml theme={null}1040```yaml theme={null}

1032managed:1041managed:


1039 1048 

1040> [!WARNING]1049> [!WARNING]

1041>1050>

1042> Atur kunci ini hanya jika upstream Anda menawarkan TTL satu jam untuk setiap model yang dilayani gateway. Jika upstream menolak TTL tersebut, permintaan gagal, dan baik gateway maupun Claude Code tidak mencoba ulang dengan TTL lima menit. Untuk Amazon Bedrock, periksa [model, region, dan batas yang didukung](https://docs.aws.amazon.com/bedrock/latest/userguide/prompt-caching.html#prompt-caching-models).1051> Setel kunci ini hanya jika upstream Anda menawarkan TTL satu jam untuk setiap model yang dilayani gateway. Jika upstream menolak TTL tersebut, permintaan gagal, dan baik gateway maupun Claude Code tidak mencoba ulang permintaan dengan TTL lima menit. Untuk Amazon Bedrock, periksa [model, region, dan batas yang didukung](https://docs.aws.amazon.com/bedrock/latest/userguide/prompt-caching.html#prompt-caching-models).

1043 1052 

1044Untuk mengonfirmasi `promptCacheTtl`, masuk ke gateway sebagai pengguna yang cocok dengan kebijakan dan [periksa TTL mana yang digunakan penulisan cache Anda](https://code.claude.com/docs/id/prompt-caching.md#choose-the-ttl-yourself). Berikan `--model` untuk mengulangi pemeriksaan bagi setiap model yang dilayani gateway.1053Untuk mengonfirmasi `promptCacheTtl`, masuk ke gateway sebagai pengguna yang cocok dengan kebijakan dan [periksa TTL mana yang digunakan oleh penulisan cache Anda](https://code.claude.com/docs/id/prompt-caching.md#choose-the-ttl-yourself). Berikan `--model` untuk mengulangi pemeriksaan bagi setiap model yang dilayani gateway.

1045 1054 

1046Penulisan cache satu jam [lebih mahal](https://code.claude.com/docs/id/prompt-caching.md#cache-lifetime) daripada penulisan lima menit. Agar [batas pengeluaran](https://code.claude.com/docs/id/claude-apps-gateway-spend-limits.md#how-requests-are-priced) menghitung tarif yang lebih tinggi tersebut, Anda memerlukan v2.1.286 atau yang lebih baru di server gateway.1055Penulisan cache satu jam [lebih mahal](https://code.claude.com/docs/id/prompt-caching.md#cache-lifetime) daripada penulisan lima menit. Agar [batas pengeluaran](https://code.claude.com/docs/id/claude-apps-gateway-spend-limits.md#how-requests-are-priced) menghitung tarif yang lebih tinggi tersebut, Anda memerlukan v2.1.286 atau yang lebih baru di server gateway.

1047 1056 

1048#### Server MCP dalam kebijakan1057#### Server MCP dalam kebijakan

1049 1058 

1050Untuk menyediakan server MCP ke klien Claude Code yang cocok dengan kebijakan, atur [`managedMcpServers`](https://code.claude.com/docs/id/managed-mcp#provide-servers-through-managed-settings) dalam blok `cli` kebijakan itu. Anda memerlukan Claude Code v2.1.259 atau lebih baru di server gateway dan pada klien.1059Untuk menyediakan server MCP ke klien Claude Code yang cocok dengan suatu kebijakan, setel [`managedMcpServers`](https://code.claude.com/docs/id/managed-mcp#provide-servers-through-managed-settings) di blok `cli` kebijakan tersebut. Anda memerlukan Claude Code v2.1.259 atau yang lebih baru di server gateway dan di klien.

1051 1060 

1052Gateway memeriksa setiap entri saat boot dengan [aturan yang sama yang diterapkan Claude Code pada klien](https://code.claude.com/docs/id/managed-mcp.md#what-an-entry-can-contain), dan jika entri gagal pemeriksaan, gateway menolak untuk memulai dan menamai entri.1061Gateway memeriksa setiap entri saat boot dengan [aturan yang sama yang diterapkan Claude Code di klien](https://code.claude.com/docs/id/managed-mcp.md#what-an-entry-can-contain), dan jika suatu entri gagal dalam pemeriksaan, gateway menolak untuk mulai dan menyebutkan entri tersebut.

1053 1062 

1054Jika Anda menulis referensi `${VAR}` dalam `gateway.yaml`, gateway menyelesaikannya dari lingkungannya saat boot melalui [ekspansi rahasia](#secret-expansion) sebelum menjalankan pemeriksaan entri, sehingga setiap klien yang cocok menerima nilai literal dan dapat membacanya. [Panduan header untuk server yang disediakan](https://code.claude.com/docs/id/managed-mcp.md#provide-servers-through-managed-settings) berlaku untuk nilai yang diperluas.1063Jika Anda menulis referensi `${VAR}` di `gateway.yaml`, gateway menyelesaikannya dari environment-nya saat boot melalui [ekspansi secret](#secret-expansion) sebelum menjalankan pemeriksaan entri, sehingga setiap klien yang cocok menerima nilai literal dan dapat membacanya. [Panduan header untuk server yang disediakan](https://code.claude.com/docs/id/managed-mcp.md#provide-servers-through-managed-settings) berlaku untuk nilai yang sudah diekspansi.

1055 1064 

1056Gateway menolak ejaan `.mcp.json` `mcpServers` dalam blok `cli`, dan kesalahan bootnya menamai `managedMcpServers` sebagai kunci yang digunakan. Sebelum v2.1.259, gateway menolak definisi server MCP apa pun dalam blok `cli`.1065Gateway menolak ejaan `.mcp.json` `mcpServers` di blok `cli`, dan error boot-nya menyebut `managedMcpServers` sebagai kunci yang harus digunakan. Sebelum v2.1.259, gateway menolak definisi server MCP apa pun di blok `cli`.

1057 1066 

1058#### Overlay Claude Desktop1067#### Overlay Claude Desktop

1059 1068 

1060Jika organisasi Anda juga men-deploy [Claude Desktop](https://code.claude.com/docs/id/desktop.md), gateway yang sama melayani kedua klien. Arahkan `bootstrapUrl`, dalam [konfigurasi terkelola](https://claude.com/docs/third-party/claude-desktop/configuration) Claude Desktop, ke `<listen.public_url>/user/bootstrap`. Claude Desktop menurunkan penerbit OAuth dari URL itu, menjalankan sign-in kode perangkat yang sama terhadap gateway ini, dan mengambil konfigurasinya dari respons.1069Jika organisasi Anda juga men-deploy [Claude Desktop](https://code.claude.com/docs/id/desktop.md), gateway yang sama melayani kedua klien. Arahkan `bootstrapUrl`, di [konfigurasi terkelola](https://claude.com/docs/third-party/claude-desktop/configuration) Claude Desktop, ke `<listen.public_url>/user/bootstrap`. Claude Desktop menurunkan penerbit OAuth dari URL tersebut, menjalankan proses masuk device-code yang sama terhadap gateway ini, dan mengambil konfigurasinya dari respons.

1061 1070 

1062> [!NOTE]1071> [!NOTE]

1063>1072>

1064> Memerlukan Claude Code v2.1.203 atau lebih baru di server gateway, dan opt-in eksplisit: `/user/bootstrap` mengembalikan 404 kecuali kebijakan yang cocok dengan pengguna membawa kunci `desktop`. `desktop: {}` kosong memilih kebijakan, dan kunci `desktop` pada lapisan dasar `match: {}` memilih setiap kebijakan yang mewarisnya. Log audit merekam setiap permintaan sebagai `desktop_bootstrap.serve` atau `desktop_bootstrap.denied`.1073> Memerlukan Claude Code v2.1.203 atau yang lebih baru di server gateway, dan opt-in eksplisit: `/user/bootstrap` mengembalikan 404 kecuali kebijakan yang cocok dengan pengguna memiliki kunci `desktop`. `desktop: {}` kosong mengikutsertakan suatu kebijakan, dan kunci `desktop` pada lapisan dasar `match: {}` mengikutsertakan setiap kebijakan yang mewarisinya. Log audit mencatat setiap permintaan sebagai `desktop_bootstrap.serve` atau `desktop_bootstrap.denied`.

1065 1074 

1066Jika Anda tidak men-deploy Claude Desktop, tinggalkan `desktop` sepenuhnya dari kebijakan Anda; gateway kemudian mengembalikan 404 dari `/user/bootstrap` untuk setiap pengguna.1075Jika Anda tidak men-deploy Claude Desktop, jangan sertakan `desktop` sama sekali dalam kebijakan Anda; gateway kemudian mengembalikan 404 dari `/user/bootstrap` untuk setiap pengguna.

1067 1076 

1068##### Pengaturan yang diturunkan gateway untuk Claude Desktop1077##### Pengaturan yang diturunkan gateway untuk Claude Desktop

1069 1078 

1070Gateway menurunkan sebagian besar respons bootstrap dari blok `cli` atau `code` kebijakan yang cocok dan dari konfigurasi gateway tingkat atas:1079Gateway menurunkan sebagian besar respons bootstrap dari blok `cli` atau `code` kebijakan yang cocok dan dari konfigurasi gateway tingkat atas:

1071 1080 

1072* Daftar model, dari `availableModels`. Daftar ini tidak menyertakan model yang diblokir kebijakan dengan [`deniedModels` atau `availableModelsMatch: exact`](#what-goes-in-cli). Filter ini memerlukan Claude Code v2.1.299 atau lebih baru di server gateway. [Konteks diperluas di Claude Desktop](#extended-context-in-claude-desktop) membahas opsi konteks 1M setiap model1081* Daftar model, dari `availableModels`. Daftar ini tidak menyertakan model yang diblokir kebijakan dengan [`deniedModels` atau `availableModelsMatch: exact`](#what-goes-in-cli). Filter ini memerlukan Claude Code v2.1.299 atau yang lebih baru di server gateway. [Konteks diperluas di Claude Desktop](#extended-context-in-claude-desktop) membahas opsi konteks 1M setiap model

1073* Tool yang dinonaktifkan, dari entri `permissions.deny` nama tool telanjang. Jika Anda menetapkan `disabledBuiltinTools` dalam blok `desktop` kebijakan, gateway melayani gabungan nilai Anda dan daftar yang diturunkan, sehingga Anda dapat menonaktifkan lebih banyak tool dengan cara ini tetapi tidak dapat mengaktifkan kembali yang Anda nonaktifkan melalui `permissions.deny`1082* Tool yang dinonaktifkan, dari entri `permissions.deny` berupa nama tool polos. Jika Anda menyetel `disabledBuiltinTools` di blok `desktop` kebijakan, gateway melayani gabungan nilai Anda dan daftar turunan, sehingga Anda dapat menonaktifkan lebih banyak tool dengan cara ini tetapi tidak dapat mengaktifkan kembali tool yang Anda nonaktifkan melalui `permissions.deny`

1074* Allowlist egress, dari `sandbox.network.allowedDomains`. Jika Anda mengatur `coworkEgressAllowedHosts` di blok `desktop` kebijakan, gateway menggunakan nilai tersebut sebagai pengganti daftar turunan. Jika allowlist yang dilayani gateway mencakup `*` dan gateway tidak juga melayani [`allowedWorkspaceFolders`](https://claude.com/docs/third-party/claude-desktop/code#applied-as-managed-policy) Claude Desktop, Claude Desktop tidak mengaktifkan [sandbox Bash](https://code.claude.com/docs/id/sandboxing.md) di tab Code1083* Allowlist egress, dari `sandbox.network.allowedDomains`. Jika Anda menyetel `coworkEgressAllowedHosts` di blok `desktop` kebijakan, gateway menggunakan nilai tersebut alih-alih daftar turunan. Jika allowlist yang dilayani gateway menyertakan `*` dan gateway tidak juga melayani [`allowedWorkspaceFolders`](https://claude.com/docs/third-party/claude-desktop/code#applied-as-managed-policy) Claude Desktop, Claude Desktop tidak mengaktifkan [sandbox Bash](https://code.claude.com/docs/id/sandboxing.md) di tab Code

1075* Endpoint OTLP yang menunjuk ke gateway itu sendiri, dan atribut identitas pengguna yang masuk. Gateway meneruskan ekspor yang diterimanya di endpoint itu ke tujuan `forward_to` Anda. Ini menyertakan endpoint dan atribut ketika Anda menetapkan [`telemetry.forward_to`](#telemetry) dan `listen.public_url`.1084* Endpoint OTLP yang mengarah ke gateway itu sendiri, dan atribut identitas pengguna yang masuk. Gateway meneruskan ekspor yang diterimanya di endpoint tersebut ke tujuan `forward_to` Anda. Gateway menyertakan endpoint dan atribut tersebut saat Anda menyetel [`telemetry.forward_to`](#telemetry) dan `listen.public_url`.

1076 1085 

1077 Claude Desktop mengekspor setiap sinyal dengan satu pengkodean: `http/protobuf`, atau `http/json` ketika Anda menetapkan `OTEL_EXPORTER_OTLP_PROTOCOL` atau salah satu varian per-sinyal ke `http/json` dalam `env` kebijakan. Sebelum Claude Code v2.1.261 di server gateway, respons menetapkan `http/json` terlepas, jadi kolektor yang hanya menerima protobuf menolak ekspor Claude Desktop1086 Claude Desktop mengekspor setiap sinyal dengan satu encoding: `http/protobuf`, atau `http/json` saat Anda menyetel `OTEL_EXPORTER_OTLP_PROTOCOL` atau salah satu varian per sinyalnya ke `http/json` di `env` kebijakan. Sebelum Claude Code v2.1.261 di server gateway, respons selalu menyetel `http/json`, sehingga collector yang hanya menerima protobuf menolak ekspor Claude Desktop

1078 1087 

1079Untuk menetapkan `disabledBuiltinTools`, `coworkEgressAllowedHosts`, atau pengaturan `managedMcpServers` Claude Desktop sendiri dalam blok `desktop` kebijakan, Anda memerlukan Claude Code v2.1.232 atau lebih baru di server gateway. `managedMcpServers` Claude Desktop mengambil nilai array daripada objek.1088Untuk menyetel `disabledBuiltinTools`, `coworkEgressAllowedHosts`, atau pengaturan `managedMcpServers` milik Claude Desktop di blok `desktop` kebijakan, Anda memerlukan Claude Code v2.1.232 atau yang lebih baru di server gateway. `managedMcpServers` milik Claude Desktop menerima nilai array, bukan objek.

1080 1089 

1081Gateway menghilangkan kunci tanpa padanan Claude Desktop, seperti `hooks` dan aturan izin yang dibatasi seperti `Bash(npm *)`, dari respons bootstrap.1090Gateway menghilangkan kunci yang tidak memiliki padanan di Claude Desktop, seperti `hooks` dan aturan izin berlingkup seperti `Bash(npm *)`, dari respons bootstrap.

1082 1091 

1083##### Menerapkan pengaturan `code` di tab Code1092##### Menerapkan pengaturan `code` di tab Code

1084 1093 

1085Pengaturan Claude Code yang dimiliki kebijakan di bawah kunci [`code`](#choose-cli-or-code) berlaku di tab Code Claude Desktop ketika semua hal berikut terpenuhi:1094Pengaturan Claude Code yang dimiliki kebijakan di bawah kunci [`code`](#choose-cli-or-code) berlaku di tab Code Claude Desktop jika semua kondisi berikut terpenuhi:

1086 1095 

1087* Kebijakan juga memiliki kunci `desktop`, dan `desktop: {}` yang kosong juga dihitung1096* Kebijakan juga memiliki kunci `desktop`, dan `desktop: {}` kosong juga dihitung

1088* Claude Desktop versi 2.9939.2 atau yang lebih baru1097* Claude Desktop versi 2.9939.2 atau yang lebih baru

1089* Pengaturan terkelola Claude Code di mesin tersebut [menyebut gateway ini](#client-side-managed-settings)1098* Pengaturan terkelola Claude Code di mesin [menyebut gateway ini](#client-side-managed-settings)

1090* Mesin tersebut menjangkau gateway melalui HTTPS di jaringan privat1099* Mesin tersebut menjangkau gateway melalui HTTPS di jaringan pribadi

1091 1100 

1092Dua kondisi terakhir berlaku untuk mesin mana pun yang menjalankan Claude Code untuk sesi tersebut. Untuk sesi lokal, itu adalah komputer pengguna sendiri. Untuk sesi tab Code melalui SSH, itu adalah host jarak jauh.1101Dua kondisi terakhir berlaku untuk mesin mana pun yang menjalankan Claude Code untuk sesi tersebut. Untuk sesi lokal, itu adalah komputer pengguna sendiri. Untuk sesi tab Code melalui SSH, itu adalah host jarak jauh.

1093 1102 

1094Deploy [pengaturan terkelola sisi klien](#client-side-managed-settings) ke mesin-mesin tersebut sebelum Anda mengganti nama `cli` menjadi `code`. Ketika dua kondisi pertama terpenuhi dan salah satu dari dua kondisi terakhir gagal, pengguna yang cocok dengan kebijakan mendapatkan salah satu hasil berikut:1103Deploy [pengaturan terkelola sisi klien](#client-side-managed-settings) ke mesin-mesin tersebut sebelum Anda mengganti nama `cli` menjadi `code`. Jika dua kondisi pertama terpenuhi dan salah satu dari dua kondisi terakhir tidak terpenuhi, pengguna yang cocok dengan kebijakan mendapatkan salah satu hasil berikut:

1095 1104 

1096* **Melalui HTTPS, ketika Claude Desktop membundel Claude Code v2.1.296 atau yang lebih baru**: tab Code tidak dimulai, dan balasan atas prompt pengguna menjelaskan alasannya1105* **Melalui HTTPS, jika Claude Desktop membundel Claude Code v2.1.296 atau yang lebih baru**: tab Code tidak dimulai, dan balasan untuk prompt pengguna menjelaskan alasannya

1097* **Melalui HTTPS, ketika Claude Desktop membundel versi yang lebih lama**: tab Code dimulai tanpa pengaturan `code` Anda, dan tidak ada apa pun dalam sesi yang memberitahukannya1106* **Melalui HTTPS, jika Claude Desktop membundel versi yang lebih lama**: tab Code dimulai tanpa pengaturan `code` Anda, dan tidak ada apa pun dalam sesi yang memberitahukannya

1098* **Melalui HTTP biasa**: tab Code dimulai tanpa pengaturan `code` Anda, versi mana pun yang dibundel Claude Desktop1107* **Melalui HTTP biasa**: tab Code dimulai tanpa pengaturan `code` Anda, versi apa pun yang dibundel Claude Desktop

1099 1108 

1100Ketika proxy di depan gateway menjawab `/managed/settings` dengan 404 miliknya sendiri, tab Code juga dimulai tanpa pengaturan `code` Anda, termasuk di mesin yang memenuhi keempat kondisi.1109Jika proxy di depan gateway menjawab `/managed/settings` dengan 404 miliknya sendiri, tab Code juga dimulai tanpa pengaturan `code` Anda, termasuk di mesin yang memenuhi keempat kondisi.

1101 1110 

1102Dalam kebijakan yang memiliki kunci `desktop`, blok `code` yang berisi pengaturan mematikan tool WebSearch di Cowork, Chat, dan tab Code. Untuk server MCP, lihat [Di mana `managedMcpServers` berlaku](https://code.claude.com/docs/id/managed-mcp#where-managedmcpservers-applies).1111Dalam kebijakan yang memiliki kunci `desktop`, blok `code` yang berisi pengaturan mematikan tool WebSearch di Cowork, Chat, dan tab Code. Untuk server MCP, lihat [Tempat `managedMcpServers` berlaku](https://code.claude.com/docs/id/managed-mcp#where-managedmcpservers-applies).

1103 1112 

1104##### Tetapkan pengaturan Claude Desktop secara langsung1113##### Menyetel pengaturan Claude Desktop secara langsung

1105 1114 

1106Tambahkan blok `desktop` opsional bersama `cli` untuk menetapkan pengaturan Claude Desktop secara langsung. Tulis pengaturan dari [referensi konfigurasi terkelola](https://claude.com/docs/third-party/claude-desktop/configuration) Claude Desktop sebagai nama kunci datar. Tinggalkan kunci yang Claude Desktop baca hanya dari MDM atau file lokal, seperti `bootstrapUrl`; gateway menolaknya saat boot.1115Tambahkan blok `desktop` opsional di samping `cli` untuk menyetel pengaturan Claude Desktop secara langsung. Tulis pengaturan dari [referensi konfigurasi terkelola](https://claude.com/docs/third-party/claude-desktop/configuration) Claude Desktop sebagai nama kunci datar. Jangan sertakan kunci yang hanya dibaca Claude Desktop dari MDM atau file lokal, seperti `bootstrapUrl`; gateway menolaknya saat boot.

1107 1116 

1108Contoh ini menetapkan tiga kunci Claude Desktop untuk grup `eng-contractors` bersama pengaturan `cli`-nya:1117Contoh ini menyetel tiga kunci Claude Desktop untuk grup `eng-contractors` di samping pengaturan `cli`-nya:

1109 1118 

1110```yaml theme={null}1119```yaml theme={null}

1111managed:1120managed:


1120 banner: { text: "Contractor build: internal use only" }1129 banner: { text: "Contractor build: internal use only" }

1121```1130```

1122 1131 

1123Setiap kunci opsional; Claude Desktop menerapkan default sendiri untuk kunci apa pun yang Anda abaikan.1132Setiap kunci bersifat opsional; Claude Desktop menerapkan default-nya sendiri untuk kunci apa pun yang Anda hilangkan.

1124 1133 

1125##### Apa yang ditolak gateway saat boot1134##### Apa yang ditolak gateway saat boot

1126 1135 

1127Gateway memvalidasi setiap blok `desktop` saat boot terhadap skema konfigurasi yang Claude Desktop itu sendiri gunakan, jadi kesalahan muncul di startup gateway sebagai kesalahan yang menamai kunci daripada mencapai setiap desktop yang terhubung. Gateway gagal saat boot ketika blok berisi:1136Gateway memvalidasi setiap blok `desktop` saat boot terhadap skema konfigurasi yang digunakan Claude Desktop sendiri, sehingga kesalahan muncul saat gateway dimulai sebagai error yang menyebutkan kunci tersebut, alih-alih menjangkau setiap desktop yang terhubung. Gateway gagal saat boot jika suatu blok berisi:

1128 1137 

1129* Kunci yang tidak dikenal1138* Kunci yang tidak dikenal

1130* Kunci yang dikenali yang nilainya Claude Desktop akan menolak atau diam-diam jatuhkan, seperti nilai kosong atau sub-kunci yang salah eja di dalam entri bersarang. Sebelum v2.1.260, gateway diam-diam menjatuhkan bidang yang salah eja di dalam objek bersarang dari entri `managedMcpServers` atau `orgPluginSettings` alih-alih gagal saat boot.1139* Kunci yang dikenali yang nilainya akan ditolak atau diam-diam dibuang oleh Claude Desktop, seperti nilai kosong atau sub-kunci yang salah eja di dalam entri bersarang. Sebelum v2.1.260, gateway diam-diam membuang bidang yang salah eja di dalam objek bersarang dari entri `managedMcpServers` atau `orgPluginSettings` alih-alih gagal saat boot.

1131* Kunci yang gateway hitung sendiri: koneksi inferensi, daftar model, dan relay OTLP. Konfigurasikan melalui [`upstreams`](#upstreams), [`models`](#models), dan `forward_to` pada bagian [`telemetry`](#telemetry).1140* Kunci yang dihitung gateway sendiri: koneksi inferensi, daftar model, dan relay OTLP. Konfigurasikan semua itu melalui [`upstreams`](#upstreams), [`models`](#models), dan `forward_to` di bagian [`telemetry`](#telemetry).

1132* Alias warisan dari kunci saat ini. Dalam kesalahan boot, gateway menamai kunci kanonis untuk ditulis.1141* Alias lama dari kunci saat ini. Dalam error boot, gateway menyebutkan kunci kanonis yang harus ditulis.

1133 1142 

1134Jika Anda menggunakan nilai atau bentuk entri yang sudah deprecated, seperti entri `managedMcpServers` tanpa `transport`, gateway dimulai dan mencatat peringatan yang menamai pengganti.1143Jika Anda menggunakan nilai atau bentuk entri yang sudah deprecated, seperti entri `managedMcpServers` tanpa `transport`, gateway tetap mulai dan mencatat peringatan yang menyebutkan penggantinya.

1135 1144 

1136Sebelum v2.1.232, gateway menerima daftar tetap 11 kunci gerbang fitur, seperti `chatTabEnabled` dan `disableAutoUpdates`, dan menolak setiap kunci lain saat boot. Sebelum v2.1.227, gateway juga menolak `chatTabEnabled` dan `chatAdvancedFileAnalysisEnabled` saat boot.1145Sebelum v2.1.232, gateway menerima daftar tetap berisi 11 kunci feature-gate, seperti `chatTabEnabled` dan `disableAutoUpdates`, dan menolak setiap kunci lain saat boot. Sebelum v2.1.227, gateway juga menolak `chatTabEnabled` dan `chatAdvancedFileAnalysisEnabled` saat boot.

1137 1146 

1138##### Kunci yang memerlukan versi gateway atau Claude Desktop yang lebih baru1147##### Kunci yang memerlukan versi gateway atau Claude Desktop yang lebih baru

1139 1148 

1140Gateway memvalidasi blok `desktop` terhadap skema yang disertakan dengan versi yang diinstal, seperti yang dilakukannya pada blok `cli`. Untuk mengirimkan pengaturan yang diperkenalkan oleh rilis Claude Desktop yang lebih baru, upgrade gateway terlebih dahulu. Misalnya, `userPluginMarketplacesEnabled` dan `userPluginUploadsEnabled` memerlukan Claude Code v2.1.260 atau lebih baru di server gateway dan Claude Desktop 1.37937.0 atau lebih baru di mesin anggota.1149Gateway memvalidasi blok `desktop` terhadap skema yang dibundel dengan versi terpasangnya, seperti halnya blok `cli`. Untuk mengirim pengaturan yang diperkenalkan oleh rilis Claude Desktop yang lebih baru, tingkatkan gateway terlebih dahulu. Misalnya, `userPluginMarketplacesEnabled` dan `userPluginUploadsEnabled` memerlukan Claude Code v2.1.260 atau yang lebih baru di server gateway dan Claude Desktop 1.37937.0 atau yang lebih baru di mesin anggota.

1141 1150 

1142`blockReadsOutsideWorkingDirectories`, `disableBypassPermissionsMode`, `configRecheckIntervalMinutes`, dan `sshClientPath` memerlukan Claude Code v2.1.281 atau lebih baru di server gateway. Begitu juga nilai `required` dari `microsoftAuthBroker` dan bidang `continuousAccessEvaluation` dari entri `managedMcpServers` Microsoft 365. Rilis Claude Desktop yang mendahului nilai `required` membacanya sebagai `disabled`, jadi atur `required` hanya setelah setiap anggota Claude Desktop mendukungnya. [Referensi konfigurasi terkelola](https://claude.com/docs/third-party/claude-desktop/configuration) Claude Desktop mencantumkan rilis yang pertama kali membaca setiap kunci.1151`blockReadsOutsideWorkingDirectories`, `disableBypassPermissionsMode`, `configRecheckIntervalMinutes`, dan `sshClientPath` memerlukan Claude Code v2.1.281 atau yang lebih baru di server gateway. Begitu pula nilai `required` dari `microsoftAuthBroker` dan bidang `continuousAccessEvaluation` dari entri `managedMcpServers` Microsoft 365. Rilis Claude Desktop yang lebih lama dari nilai `required` membacanya sebagai `disabled`, jadi setel `required` hanya setelah Claude Desktop setiap anggota mendukungnya. [Referensi konfigurasi terkelola](https://claude.com/docs/third-party/claude-desktop/configuration) Claude Desktop mencantumkan rilis yang pertama kali membaca setiap kunci.

1143 1152 

1144Jika Anda menetapkan `orgPluginSettings` dalam blok `desktop` kebijakan, gateway melayaninya dalam bentuk array yang Claude Desktop 1.15200.0 dan lebih baru baca. Desktop yang lebih lama mengabaikan array dan tidak menerapkan kebijakan tool plugin, jadi perbarui anggota ke 1.15200.0 atau lebih baru sebelum Anda mengandalkannya.1153Jika Anda menyetel `orgPluginSettings` di blok `desktop` kebijakan, gateway melayaninya dalam bentuk array yang dibaca Claude Desktop 1.15200.0 dan yang lebih baru. Desktop yang lebih lama mengabaikan array tersebut dan tidak menegakkan kebijakan tool plugin, jadi perbarui anggota ke 1.15200.0 atau yang lebih baru sebelum Anda mengandalkannya.

1145 1154 

1146##### Bagaimana kebijakan peran mewarisi blok `desktop` dasar1155##### Cara kebijakan peran mewarisi blok `desktop` dasar

1147 1156 

1148Gateway mengisi kunci yang blok `desktop` kebijakan tidak ditetapkan dari blok `desktop` catch-all `match: {}`, dengan cara yang sama mengisi blok `cli` kebijakan dari dasar. Jika Anda menetapkan `disabledBuiltinTools` atau `builtinToolPolicy` dalam dasar dan kebijakan peran, gateway menyimpan pembatasan dasar:1157Gateway mengisi kunci yang tidak disetel oleh blok `desktop` suatu kebijakan dari blok `desktop` catch-all `match: {}`, dengan cara yang sama seperti mengisi blok `cli` kebijakan dari dasar. Jika Anda menyetel `disabledBuiltinTools` atau `builtinToolPolicy` di dasar dan di kebijakan peran, gateway mempertahankan pembatasan dasar:

1149 1158 

1150* `disabledBuiltinTools`: gateway menggunakan gabungan daftar dasar dan daftar kebijakan1159* `disabledBuiltinTools`: gateway menggunakan gabungan daftar dasar dan daftar kebijakan

1151* `builtinToolPolicy`: jika Anda menetapkan tool ke nilai selain `allow` dalam dasar, gateway menyimpan nilai itu bahkan jika Anda menetapkan `allow` untuk tool yang sama dalam kebijakan peran1160* `builtinToolPolicy`: jika Anda menyetel suatu tool ke nilai selain `allow` di dasar, gateway mempertahankan nilai tersebut meskipun Anda menyetel `allow` untuk tool yang sama di kebijakan peran

1152 1161 

1153Untuk setiap kunci lain, jika Anda menetapkannya dalam kebijakan peran, gateway menggunakan nilai kebijakan peran. Gateway mengganti array atau objek bersarang seperti `banner` secara keseluruhan, jadi jika Anda menetapkan `banner.text` dalam kebijakan peran, gateway menjatuhkan `banner.backgroundColor` dasar.1162Untuk setiap kunci lain, jika Anda menyetelnya di kebijakan peran, gateway menggunakan nilai kebijakan peran. Gateway menggantikan array atau objek bersarang seperti `banner` secara utuh, sehingga jika Anda menyetel `banner.text` di kebijakan peran, gateway membuang `banner.backgroundColor` dari dasar.

1154 1163 

1155##### Kapan perubahan kebijakan mencapai Claude Desktop1164##### Kapan perubahan kebijakan mencapai Claude Desktop

1156 1165 

1157Setelah Anda men-deploy ulang gateway dengan kebijakan yang diubah, Claude Desktop menerapkan sebagian besar pengaturan hanya saat dimulai berikutnya:1166Setelah Anda men-deploy ulang gateway dengan kebijakan yang diubah, Claude Desktop menerapkan sebagian besar pengaturan hanya saat dimulai berikutnya:

1158 1167 

1159* **Tertutup**: Claude Desktop mengambil respons bootstrap saat dimulai, sehingga perubahan berlaku sejak start berikutnya1168* **Tertutup**: Claude Desktop mengambil respons bootstrap saat dimulai, sehingga perubahan berlaku sejak dimulai berikutnya

1160* **Terbuka**: Claude Desktop memeriksa respons yang berubah setiap 10 menit secara default dan menerapkan beberapa pengaturan tanpa restart. Untuk sisanya, seperti [`skillCreationEnabled`](https://claude.com/docs/third-party/claude-desktop/configuration#skillcreationenabled), pengguna melihat kartu **Relaunch Claude Desktop** di sidebar dan mempertahankan konfigurasi sebelumnya hingga mereka me-restart aplikasi. Setelah 24 jam secara default, Claude Desktop menampilkan dialog restart dan me-restart dengan sendirinya setelah 2 menit tidak aktif1169* **Terbuka**: Claude Desktop memeriksa respons yang berubah setiap 10 menit secara default dan menerapkan beberapa pengaturan tanpa restart. Untuk sisanya, seperti [`skillCreationEnabled`](https://claude.com/docs/third-party/claude-desktop/configuration#skillcreationenabled), pengguna melihat kartu **Relaunch Claude Desktop** di sidebar dan mempertahankan konfigurasi sebelumnya hingga mereka memulai ulang aplikasi. Setelah 24 jam secara default, Claude Desktop menampilkan dialog restart dan memulai ulang dengan sendirinya setelah 2 menit tidak ada aktivitas

1161 1170 

1162Untuk mempersingkat 24 jam tersebut, atur [`relaunchEnforcementHours`](https://claude.com/docs/third-party/claude-desktop/configuration#relaunchenforcementhours) dalam blok `desktop` kebijakan. Anda memerlukan Claude Code v2.1.260 atau lebih baru di server gateway dan Claude Desktop 1.40609.0 atau lebih baru di mesin anggota. Dengan `0`, dialog muncul segera setelah Claude Desktop menemukan perubahan.1171Untuk mempersingkat 24 jam tersebut, setel [`relaunchEnforcementHours`](https://claude.com/docs/third-party/claude-desktop/configuration#relaunchenforcementhours) di blok `desktop` kebijakan. Anda memerlukan Claude Code v2.1.260 atau yang lebih baru di server gateway dan Claude Desktop 1.40609.0 atau yang lebih baru di mesin anggota. Dengan `0`, dialog muncul segera setelah Claude Desktop menemukan perubahan.

1163 1172 

1164#### Konteks diperluas di Claude Desktop1173#### Konteks diperluas di Claude Desktop

1165 1174 

1166Jika Anda menyajikan [Claude Desktop](#claude-desktop-overlay) dari gateway, pemilih modelnya menawarkan opsi konteks 1M untuk setiap model terdaftar yang dapat berjalan dengan context window 1M. Ini mencakup Claude Opus 4.6 dan yang lebih baru, Claude Sonnet 4.6 dan yang lebih baru, serta model Fable. Opsi tersebut adalah varian `[1m]` dari model, yang dijelaskan di [Konteks diperluas](https://code.claude.com/docs/id/model-config.md#extended-context). Anda memerlukan Claude Code v2.1.284 atau lebih baru di server gateway.1175Jika Anda melayani [Claude Desktop](#claude-desktop-overlay) dari gateway, pemilih modelnya menawarkan opsi konteks 1M untuk setiap model tercantum yang dapat berjalan dengan context window 1M. Ini termasuk Claude Opus 4.6 dan yang lebih baru, Claude Sonnet 4.6 dan yang lebih baru, serta model Fable. Opsi tersebut adalah varian `[1m]` model, yang dijelaskan di [Konteks diperluas](https://code.claude.com/docs/id/model-config.md#extended-context). Anda memerlukan Claude Code v2.1.284 atau yang lebih baru di server gateway.

1167 1176 

1168Entri [`models`](#models) tidak mendapatkan opsi 1M ketika:1177Entri [`models`](#models) tidak mendapatkan opsi 1M jika:

1169 1178 

1170* Upstream yang dapat melayani entri memetakannya ke model tanpa dukungan 1M, termasuk upstream yang hanya dijangkau gateway saat failover1179* Upstream yang dapat melayani entri memetakannya ke model tanpa dukungan 1M, termasuk upstream yang dijangkau gateway hanya saat failover

1171* Baik `id` maupun nilai `upstream_model` apa pun dari entri tidak menamai model Claude, seperti alias kustom yang dirutekan ke ARN profil inferensi aplikasi1180* Baik `id`-nya maupun nilai `upstream_model`-nya tidak ada yang menyebut model Claude, seperti alias kustom yang dirutekan ke ARN application inference profile

1172 1181 

1173Untuk mengubah apa yang ditawarkan pemilih, gunakan salah satu dari ini:1182Untuk mengubah apa yang ditawarkan pemilih, gunakan salah satu dari cara berikut:

1174 1183 

1175* **Mulai pengguna pada opsi 1M**: atur `modelPrefer1mContext: true` dalam blok `desktop` kebijakan. Pengguna yang belum memilih model memulai pada opsi 1M ketika model terdaftar pertama memilikinya. Pengguna yang sudah memilih model mempertahankan pilihan mereka.1184* **Memulai pengguna pada opsi 1M**: setel `modelPrefer1mContext: true` di blok `desktop` kebijakan. Pengguna yang belum memilih model mulai pada opsi 1M jika model pertama yang tercantum memilikinya. Pengguna yang sudah memilih model mempertahankan pilihannya.

1176* **Tawarkan opsi secara manual**: lakukan ini jika server gateway Anda menjalankan versi lebih lama dari v2.1.284, atau entri tidak menamai model Claude. Cantumkan model dua kali dalam `models`, sekali dengan ID polosnya dan sekali dengan `[1m]` ditambahkan, keduanya dengan peta `upstream_model` yang sama. Claude Desktop menampilkan pasangan tersebut sebagai satu model dengan opsi 1M. Gateway menyajikan entri `[1m]` tanpa memeriksanya, jadi tambahkan hanya untuk model yang dilayani upstream Anda pada 1M.1185* **Menawarkan opsi secara manual**: lakukan ini jika server gateway Anda menjalankan versi yang lebih lama dari v2.1.284, atau suatu entri tidak menyebut model Claude. Cantumkan model dua kali di `models`, sekali dengan ID polosnya dan sekali dengan `[1m]` ditambahkan, keduanya dengan peta `upstream_model` yang sama. Claude Desktop menampilkan pasangan tersebut sebagai satu model dengan opsi 1M. Gateway melayani entri `[1m]` tanpa memeriksanya, jadi tambahkan entri tersebut hanya untuk model yang dilayani upstream Anda pada 1M.

1177 1186 

1178Contoh ini menawarkan opsi secara manual untuk alias kustom yang dirutekan ke profil inferensi aplikasi, dan memulai pengguna baru pada opsi tersebut:1187Contoh ini menawarkan opsi secara manual untuk alias kustom yang dirutekan ke application inference profile, dan memulai pengguna baru pada opsi tersebut:

1179 1188 

1180```yaml theme={null}1189```yaml theme={null}

1181models:1190models:


1193 modelPrefer1mContext: true1202 modelPrefer1mContext: true

1194```1203```

1195 1204 

1196##### Hapus opsi 1M1205##### Menghapus opsi 1M

1197 1206 

1198Untuk menghapus opsi dari pemilih, atur `CLAUDE_CODE_DISABLE_1M_CONTEXT: "1"` dalam blok `env` di bawah kunci `cli` kebijakan. Jika Anda juga mencantumkan entri yang `id`-nya diakhiri `[1m]`, gateway masih menyajikannya, jadi hapus juga entri tersebut.1207Untuk menghapus opsi dari pemilih, setel `CLAUDE_CODE_DISABLE_1M_CONTEXT: "1"` di blok `env` di bawah kunci `cli` kebijakan. Jika Anda juga mencantumkan entri yang `id`-nya diakhiri `[1m]`, gateway tetap melayaninya, jadi hapus juga entri tersebut.

1199 1208 

1200Variabel tersebut juga mencapai sesi terminal pengembang yang cocok dengan kebijakan. Untuk apa yang diubahnya di sana, lihat [Konteks diperluas](https://code.claude.com/docs/id/model-config.md#extended-context).1209Variabel ini juga menjangkau sesi terminal developer yang cocok dengan kebijakan. Untuk apa yang diubahnya di sana, lihat [Konteks diperluas](https://code.claude.com/docs/id/model-config.md#extended-context).

1201 1210 

1202#### Prioritas dengan sumber terkelola lainnya1211#### Prioritas dengan sumber terkelola lainnya

1203 1212 

1204Jika perangkat juga memiliki kebijakan yang dikirimkan MDM atau `managed-settings.json` lokal, pengaturan yang dikirimkan gateway mendapat peringkat pertama. [Prioritas dalam tingkat terkelola](https://code.claude.com/docs/id/managed-settings.md#precedence-within-the-managed-tier) di halaman pengaturan terkelola mengatakan kapan sumber lokal berlaku, dan memiliki [kunci yang Claude Code baca dari setiap sumber admin](https://code.claude.com/docs/id/managed-settings.md#keys-read-from-every-admin-source) terlepas dari sumber mana yang dipilihnya, seperti kunci penguncian sandbox, `forceRemoteSettingsRefresh`, dan penggabungan `env` per-variabel. [`policyHelper`](https://code.claude.com/docs/id/settings-reference#policyhelper) yang dikonfigurasi dalam profil MDM atau file pengaturan terkelola hanya berjalan ketika gateway tidak mengirimkan pengaturan; entri mengatakan apa yang digantikan oleh outputnya.1213Jika perangkat juga memiliki kebijakan yang dikirim MDM atau `managed-settings.json` lokal, pengaturan yang dikirim gateway berada di peringkat pertama. [Prioritas dalam tingkat terkelola](https://code.claude.com/docs/id/managed-settings.md#precedence-within-the-managed-tier) di halaman pengaturan terkelola menjelaskan kapan sumber lokal berlaku, dan memuat [kunci yang dibaca Claude Code dari setiap sumber admin](https://code.claude.com/docs/id/managed-settings.md#keys-read-from-every-admin-source) terlepas dari sumber mana yang dipilihnya, seperti kunci penguncian sandbox, `forceRemoteSettingsRefresh`, dan penggabungan `env` per variabel. [`policyHelper`](https://code.claude.com/docs/id/settings-reference#policyhelper) yang dikonfigurasi di profil MDM atau file pengaturan terkelola hanya berjalan jika gateway tidak mengirim pengaturan; entri tersebut menjelaskan apa yang digantikan oleh output-nya.

1205 1214 

1206Host penyematan seperti [Claude Desktop](https://code.claude.com/docs/id/desktop.md) dapat memasok kebijakan melalui opsi SDK `managedSettings`. [Pengaturan induk dari host penyematan](https://code.claude.com/docs/id/managed-settings.md#parent-settings-from-embedding-hosts) mengatakan kapan Claude Code menerapkannya, dan [Batasi pengaturan induk](https://code.claude.com/docs/id/claude-apps-gateway#restrict-parent-settings) mencantumkan pengaturan arah allow mana yang masih berlaku tanpa kunci `allowManaged*Only`.1215Host penyemat seperti [Claude Desktop](https://code.claude.com/docs/id/desktop.md) dapat menyediakan kebijakan melalui opsi SDK `managedSettings`. [Pengaturan induk dari host penyemat](https://code.claude.com/docs/id/managed-settings.md#parent-settings-from-embedding-hosts) menjelaskan kapan Claude Code menerapkannya, dan [Membatasi pengaturan induk](https://code.claude.com/docs/id/claude-apps-gateway#restrict-parent-settings) mencantumkan pengaturan berarah izin (allow) mana yang tetap berlaku tanpa kunci `allowManaged*Only`.

1207 1216 

1208Kebijakan gateway berlaku untuk setiap invokasi Claude Code pada mesin, termasuk jalankan `claude -p` non-interaktif dan sesi yang dihasilkan oleh Agent SDK. Jika gateway tidak dapat dijangkau saat startup, sesi yang masuk keluar dengan kesalahan daripada berjalan tanpa kebijakan mereka.1217Kebijakan gateway berlaku untuk setiap pemanggilan Claude Code di mesin, termasuk eksekusi `claude -p` non-interaktif dan sesi yang dibuat oleh Agent SDK. Jika gateway tidak dapat dijangkau saat startup, sesi yang sudah masuk keluar dengan error alih-alih berjalan tanpa kebijakannya.

1209 1218 

1210### `telemetry`1219### `telemetry`

1211 1220 

1212CLI mengirim metrik, log, dan, ketika diaktifkan, jejak ke gateway, yang meneruskannya verbatim ke setiap tujuan yang dikonfigurasi. Ekspor menggunakan OpenTelemetry Protocol (OTLP) melalui HTTP. Untuk melewati relay dan memiliki sesi ekspor langsung ke kolektor Anda, [namai kolektor dalam kebijakan](#export-directly-to-your-collector). Lihat [Monitoring usage](https://code.claude.com/docs/id/monitoring-usage.md) untuk metrik dan acara yang CLI pancarkan.1221CLI mengirim metrik, log, dan, jika diaktifkan, trace ke gateway, yang meneruskannya apa adanya ke setiap tujuan yang dikonfigurasi. Ekspor menggunakan OpenTelemetry Protocol (OTLP) melalui HTTP. Untuk melewati relay dan membuat sesi mengekspor langsung ke collector Anda, [sebutkan collector dalam kebijakan](#export-directly-to-your-collector). Lihat [Memantau penggunaan](https://code.claude.com/docs/id/monitoring-usage.md) untuk metrik dan event yang dipancarkan CLI.

1213 1222 

1214Dalam sesi yang masuk melalui `/login`, CLI membubuhkan identitas pengguna terautentikasi pada setiap ekspor, yang dibaca dari JWT yang diterbitkan gateway: atribut `user.id`, `user.email`, dan `user.groups`. Dengan demikian, atribusi biaya dan penggunaan per developer berfungsi tanpa konfigurasi di sisi developer. Event yang dicatat Claude Code sebelum developer masuk [tidak membawa identitas ini](https://code.claude.com/docs/id/monitoring-usage.md#standard-attributes). Untuk melihat atribut mana yang mengikuti perubahan grup developer, lihat [Perubahan grup selama sesi terbuka](#group-changes-during-an-open-session).1223Dalam sesi yang masuk melalui `/login`, CLI membubuhkan identitas pengguna terautentikasi pada setiap ekspor, yang dibaca dari JWT yang diterbitkan gateway: atribut `user.id`, `user.email`, dan `user.groups`. Karena itu atribusi biaya dan penggunaan per developer berfungsi tanpa konfigurasi di sisi developer. Event yang dicatat Claude Code sebelum developer masuk [tidak membawa identitas ini](https://code.claude.com/docs/id/monitoring-usage.md#standard-attributes). Untuk melihat atribut mana yang mengikuti perubahan grup developer, lihat [Perubahan grup selama sesi terbuka](#group-changes-during-an-open-session).

1215 1224 

1216Sesi [Claude Desktop](#claude-desktop-overlay) dan Cowork yang masuk melalui gateway memberi stempel telemetri mereka dengan `user.email` dan `user.groups` bersama `enduser.id`, sehingga Anda dapat mencakup penggunaan terminal, Desktop, dan Cowork dengan satu kueri di `user.email` atau `user.groups`. `user.groups` adalah daftar grup IdP yang dipisahkan koma.1225Sesi [Claude Desktop](#claude-desktop-overlay) dan Cowork yang masuk melalui gateway membubuhkan `user.email` dan `user.groups` pada telemetrinya bersama `enduser.id`, sehingga Anda dapat mencakup penggunaan terminal, Desktop, dan Cowork dengan satu kueri pada `user.email` atau `user.groups`. `user.groups` adalah daftar grup IdP yang dipisahkan koma.

1217 1226 

1218Telemetri Desktop dan Cowork juga membawa `enduser.sub`, klaim `sub` yang penyedia identitas Anda keluarkan untuk pengguna, yang tetap sama ketika email pengguna berubah. Sesi terminal memberi stempel nilai yang sama di bawah `user.id`, jadi kueri yang cocok `enduser.sub` terhadap terminal `user.id` mencakup penggunaan terminal, Desktop, dan Cowork satu pengguna bersama-sama. Pada ekspor Desktop dan Cowork, `user.id` adalah pengidentifikasi anonim, bukan subjek.1227Telemetri Desktop dan Cowork juga membawa `enduser.sub`, klaim `sub` yang diterbitkan penyedia identitas Anda untuk pengguna, yang tetap sama ketika email pengguna berubah. Sesi terminal membubuhkan nilai yang sama di bawah `user.id`, sehingga kueri yang mencocokkan `enduser.sub` dengan `user.id` terminal mencakup penggunaan terminal, Desktop, dan Cowork satu pengguna sekaligus. Pada ekspor Desktop dan Cowork, `user.id` adalah pengidentifikasi anonim, bukan subjek.

1219 1228 

1220Seperti semua data OpenTelemetry dari Claude Code, atribut ini hanya pergi ke tujuan yang dikonfigurasi organisasi Anda, tidak pernah ke Anthropic.1229Seperti semua data OpenTelemetry dari Claude Code, atribut ini hanya dikirim ke tujuan yang dikonfigurasi organisasi Anda, tidak pernah ke Anthropic.

1221 1230 

1222Jika daftar grup pengguna lebih panjang dari 255 karakter setelah dikodekan persen, atau nama grup berisi koma atau tanda sama dengan, gateway meninggalkan `user.groups` dari telemetri Desktop dan Cowork pengguna itu daripada memotongnya. Sesi terminal pengguna itu masih membawa daftar lengkap.1231Jika daftar grup pengguna lebih panjang dari 255 karakter setelah percent-encoding, atau nama grup berisi koma atau tanda sama dengan, gateway tidak menyertakan `user.groups` pada telemetri Desktop dan Cowork pengguna tersebut alih-alih memotongnya. Sesi terminal pengguna tersebut tetap membawa daftar lengkap.

1223 1232 

1224Gateway meninggalkan `enduser.sub` ketika subjek lebih panjang dari 255 karakter setelah dikodekan persen, atau berisi spasi, karakter di luar ASCII yang dapat dicetak, atau salah satu dari `,` `;` `=` `\` `"` `%`. Telemetri Desktop dan Cowork pengguna itu menyimpan atribut lainnya.1233Gateway tidak menyertakan `enduser.sub` jika subjek lebih panjang dari 255 karakter setelah percent-encoding, atau berisi spasi, karakter di luar ASCII yang dapat dicetak, atau salah satu dari `,` `;` `=` `\` `"` `%`. Telemetri Desktop dan Cowork pengguna tersebut mempertahankan atribut lainnya.

1225 1234 

1226Anda memerlukan Claude Code v2.1.265 atau lebih baru di server gateway untuk `user.email` dan `user.groups` pada telemetri Desktop dan Cowork, dan Claude Desktop 1.24012 atau lebih baru di mesin setiap pengembang untuk `user.groups`.1235Anda memerlukan Claude Code v2.1.265 atau yang lebih baru di server gateway untuk `user.email` dan `user.groups` pada telemetri Desktop dan Cowork, dan Claude Desktop 1.24012 atau yang lebih baru di mesin setiap developer untuk `user.groups`.

1227 1236 

1228Anda memerlukan Claude Code v2.1.274 atau lebih baru di server gateway untuk `enduser.sub`.1237Anda memerlukan Claude Code v2.1.274 atau yang lebih baru di server gateway untuk `enduser.sub`.

1229 1238 

1230```yaml theme={null}1239```yaml theme={null}

1231telemetry:1240telemetry:


1244 1253 

1245> [!WARNING]1254> [!WARNING]

1246>1255>

1247> Setiap tujuan memilih `metrics`, `logs`, dan `traces` secara independen, dan default adalah metrik saja. Sinyal berbeda dalam sensitivitas:1256> Setiap tujuan memilih `metrics`, `logs`, dan `traces` secara independen, dan default-nya hanya metrik. Sinyal-sinyal ini berbeda dalam tingkat sensitivitasnya:

1248>1257>

1249> * **Metrik**: penghitung agregat seperti jumlah token, jumlah permintaan, dan latensi1258> * **Metrik**: penghitung agregat seperti jumlah token, jumlah permintaan, dan latensi

1250> * **Log dan jejak**: dapat membawa perintah Bash lengkap, input tool, dan jalur file, mencakup apa pun yang Claude Code lakukan di mesin pengembang1259> * **Log dan trace**: dapat membawa perintah Bash lengkap, input tool, dan path file, mencakup apa pun yang dilakukan Claude Code di mesin developer

1251>1260>

1252> Aktifkan log dan jejak hanya pada tujuan dengan kontrol akses dan kebijakan retensi yang sesuai untuk data itu.1261> Aktifkan log dan trace hanya pada tujuan dengan kontrol akses dan kebijakan retensi yang sesuai untuk data tersebut.

1253 1262 

1254Setiap URL `forward_to` harus menggunakan `https://`, dengan satu pengecualian untuk kolektor di antarmuka loopback gateway itu sendiri:1263Setiap URL `forward_to` harus menggunakan `https://`, dengan satu pengecualian untuk collector di antarmuka loopback gateway itu sendiri:

1255 1264 

1256* `http://localhost:<port>` melewati validasi konfigurasi, tetapi [penjaga SSRF](https://code.claude.com/docs/id/claude-apps-gateway-deploy.md#threat-model-summary) memblokir setiap ekspor dengan `ECONNREFUSED_SSRF` kecuali Anda menetapkan `CLAUDE_GATEWAY_ALLOW_LOOPBACK=1` dalam lingkungan gateway1265* `http://localhost:<port>` lolos validasi konfigurasi, tetapi [penjaga SSRF](https://code.claude.com/docs/id/claude-apps-gateway-deploy.md#threat-model-summary) memblokir setiap ekspor dengan `ECONNREFUSED_SSRF` kecuali Anda menyetel `CLAUDE_GATEWAY_ALLOW_LOOPBACK=1` di environment gateway

1257* `http://127.0.0.1:<port>` atau `http://[::1]:<port>` gagal boot kecuali variabel itu ditetapkan1266* `http://127.0.0.1:<port>` atau `http://[::1]:<port>` menggagalkan boot kecuali variabel tersebut disetel

1258 1267 

1259Untuk kolektor dalam kluster, paparkan melalui HTTPS di alamat internalnya sendiri, atau jalankan sebagai sidecar dengan variabel yang ditetapkan.1268Untuk collector di dalam cluster, ekspos collector melalui HTTPS di alamat internalnya sendiri, atau jalankan sebagai sidecar dengan variabel tersebut disetel.

1260 1269 

1261Ketika `HTTPS_PROXY` ditetapkan, gateway mengirim ekspor melalui proxy itu.1270Jika `HTTPS_PROXY` disetel, gateway mengirim ekspor melalui proxy tersebut.

1262 1271 

1263Untuk mencapai kolektor internal secara langsung, tambahkan ke `NO_PROXY` berdasarkan nama host atau domain dengan titik terkemuka seperti `.internal.example.com`, yang memerlukan Claude Code v2.1.277 atau lebih baru di server gateway. Pastikan gateway dapat mencapai kolektor tanpa proxy. Entri tanpa titik terkemuka cocok hanya dengan nama yang tepat itu, bukan nama di bawahnya. Rentang CIDR tidak cocok.1272Untuk menjangkau collector internal secara langsung, tambahkan collector ke `NO_PROXY` berdasarkan hostname atau berdasarkan domain dengan titik di awal seperti `.internal.example.com`, yang memerlukan Claude Code v2.1.277 atau yang lebih baru di server gateway. Pastikan gateway dapat menjangkau collector tanpa proxy. Entri tanpa titik di awal hanya cocok dengan nama persis tersebut, bukan nama di bawahnya. Rentang CIDR tidak dicocokkan.

1264 1273 

1265Dengan [proxy-only egress](#proxy-only-egress) diaktifkan, izinkan kolektor dalam proxy sebagai gantinya, karena entri `NO_PROXY` apa pun menjaga proxy-only egress tetap mati.1274Dengan [egress khusus proxy](#proxy-only-egress) diaktifkan, izinkan collector di proxy sebagai gantinya, karena entri `NO_PROXY` apa pun membuat egress khusus proxy tetap nonaktif.

1266 1275 

1267Telemetri dimatikan dalam CLI secara default. Ketika Anda menetapkan `telemetry.forward_to` dan `listen.public_url`, gateway mengaktifkannya untuk klien yang terhubung dengan mendorong enam environment variable melalui `/managed/settings`:1276Telemetri dimatikan di CLI secara default. Saat Anda menyetel `telemetry.forward_to` dan `listen.public_url`, gateway mengaktifkannya untuk klien yang terhubung dengan mengirim enam environment variable melalui `/managed/settings`:

1268 1277 

1269* `CLAUDE_CODE_ENABLE_TELEMETRY=1`1278* `CLAUDE_CODE_ENABLE_TELEMETRY=1`

1270* `OTEL_METRICS_EXPORTER`, `OTEL_LOGS_EXPORTER`, dan `OTEL_TRACES_EXPORTER`, masing-masing ditetapkan ke `otlp` jika setidaknya satu tujuan `forward_to` mengaktifkan sinyal itu dan ke `none` sebaliknya1279* `OTEL_METRICS_EXPORTER`, `OTEL_LOGS_EXPORTER`, dan `OTEL_TRACES_EXPORTER`, masing-masing disetel ke `otlp` jika setidaknya satu tujuan `forward_to` mengaktifkan sinyal tersebut dan ke `none` jika tidak

1271* `OTEL_EXPORTER_OTLP_ENDPOINT=<public_url>`1280* `OTEL_EXPORTER_OTLP_ENDPOINT=<public_url>`

1272* `OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf`1281* `OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf`

1273 1282 

1274Ketika Anda [menambahkan label Anda sendiri](#add-your-own-labels), gateway juga mendorong `OTEL_RESOURCE_ATTRIBUTES`.1283Saat Anda [menambahkan label sendiri](#add-your-own-labels), gateway juga mengirim `OTEL_RESOURCE_ATTRIBUTES`.

1275 1284 

1276Sebelum Claude Code v2.1.265 di server gateway, gateway mendorong ketiga pemilih eksportir sebagai `otlp`, termasuk untuk sinyal yang tidak ada tujuan yang memilih.1285Sebelum Claude Code v2.1.265 di server gateway, gateway mengirim ketiga pemilih exporter sebagai `otlp`, termasuk untuk sinyal yang tidak dipilih oleh tujuan mana pun.

1277 1286 

1278Endpoint yang didorong dibangun dari URL publik, jadi metrik dan log tidak memerlukan konfigurasi OTEL dari pengembang atau kebijakan.1287Endpoint yang dikirim dibangun dari URL publik, sehingga metrik dan log tidak memerlukan konfigurasi OTEL dari developer atau kebijakan.

1279 1288 

1280Pengembang yang masuk melalui `/login` tidak dapat mengalihkan ekspor dengan konfigurasi OTEL mereka sendiri:1289Developer yang masuk melalui `/login` tidak dapat mengalihkan ekspor dengan konfigurasi OTEL mereka sendiri:

1281 1290 

1282* **Variabel yang ditetapkan secara lokal**: Claude Code menerapkan variabel yang didorong di tingkat terkelola, jadi masing-masing menimpa nilai yang ditetapkan pengembang untuk itu secara lokal.1291* **Variabel yang disetel secara lokal**: Claude Code menerapkan variabel yang dikirim pada tingkat terkelola, sehingga masing-masing menimpa nilai yang disetel developer secara lokal.

1283* **Endpoint yang dikonfigurasi secara lokal**: dengan ekspor OTLP/HTTP diaktifkan, CLI mengabaikan endpoint yang dikonfigurasi secara lokal apa pun, terlepas dari apakah gateway mendorong variabel telemetri. Ekspornya pergi ke gateway kecuali kebijakan [menamai kolektor Anda sebagai endpoint](#export-directly-to-your-collector).1292* **Endpoint yang dikonfigurasi secara lokal**: dengan ekspor OTLP/HTTP diaktifkan, CLI mengabaikan endpoint apa pun yang dikonfigurasi secara lokal, baik gateway mengirim variabel telemetri maupun tidak. Ekspornya dikirim ke gateway kecuali kebijakan [menyebut collector Anda sebagai endpoint](#export-directly-to-your-collector).

1284 1293 

1285Tanpa tujuan `forward_to` untuk sinyal, gateway menerima dan membuangnya. Jika pengembang sudah mengekspor telemetri Claude Code ke salah satu kolektor Anda, tambahkan sebagai tujuan `forward_to`, dengan log atau jejak diaktifkan jika mereka mengekspor itu, sehingga terus menerima data mereka setelah mereka masuk. Untuk melewati relay sebagai gantinya, [namai kolektor dalam kebijakan](#export-directly-to-your-collector).1294Tanpa tujuan `forward_to` untuk suatu sinyal, gateway menerima lalu membuangnya. Jika developer sudah mengekspor telemetri Claude Code ke salah satu collector Anda, tambahkan collector itu sebagai tujuan `forward_to`, dengan log atau trace diaktifkan jika mereka mengekspornya, agar collector tetap menerima data mereka setelah mereka masuk. Untuk melewati relay, [sebutkan collector dalam kebijakan](#export-directly-to-your-collector).

1286 1295 

1287[Jejak](https://code.claude.com/docs/id/monitoring-usage.md#traces-beta) juga memerlukan `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1` pada setiap klien. Atur dalam blok `env` kebijakan terkelola, karena gateway tidak mendorongnya. Pengembang menyetujuinya dalam [dialog persetujuan keamanan](#managed) yang sama yang sudah dipicu oleh endpoint yang didorong.1296[Trace](https://code.claude.com/docs/id/monitoring-usage.md#traces-beta) juga memerlukan `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1` di setiap klien. Setel variabel ini di blok `env` kebijakan terkelola, karena gateway tidak mengirimnya. Developer menyetujuinya dalam [dialog persetujuan keamanan](#managed) yang sama yang sudah dipicu oleh endpoint yang dikirim.

1288 1297 

1289Atur ke `1` hanya dalam kebijakan yang grupnya ingin Anda lacak. Kebijakan yang tidak menetapkannya mewarisi nilai dari kebijakan catch-all `match: {}` Anda jika kebijakan itu menetapkan satu, per [aturan penggabungan](#managed). Untuk menjaga klien grup dari mengirim jejak bahkan ketika pengembang menetapkan variabel secara lokal, atur ke `0` dalam kebijakan grup itu.1298Setel ke `1` hanya di kebijakan yang grupnya ingin Anda lacak. Kebijakan yang tidak menyetelnya mewarisi nilai dari kebijakan catch-all `match: {}` Anda jika kebijakan tersebut menyetelnya, sesuai [aturan penggabungan](#managed). Agar klien suatu grup tidak mengirim trace bahkan saat developer menyetel variabel secara lokal, setel ke `0` di kebijakan grup tersebut.

1290 1299 

1291Kedua pengkodean OTLP protobuf dan JSON diteruskan, dan backend yang kompatibel OpenTelemetry apa pun bekerja sebagai tujuan.1300Encoding OTLP protobuf dan JSON sama-sama diteruskan, dan backend apa pun yang kompatibel dengan OpenTelemetry dapat berfungsi sebagai tujuan.

1292 1301 

1293#### Mengirim metrik kumulatif1302#### Mengirim metrik kumulatif

1294 1303 

1295Jika collector Anda hanya menerima metrik kumulatif, atur [`OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE`](https://code.claude.com/docs/id/monitoring-usage#common-configuration-variables) ke `cumulative`. Claude Code mengirim metrik delta secara default, dan gateway meneruskannya tanpa mengonversinya. Atur variabel di tempat setiap jenis sesi membacanya:1304Jika collector Anda hanya menerima metrik kumulatif, setel [`OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE`](https://code.claude.com/docs/id/monitoring-usage#common-configuration-variables) ke `cumulative`. Claude Code mengirim metrik delta secara default, dan gateway meneruskannya tanpa mengonversinya. Setel variabel di tempat setiap jenis sesi membacanya:

1296 1305 

1297* **Sesi terminal**: di blok `env` di bawah [kunci `cli` atau `code`](#choose-cli-or-code) kebijakan1306* **Sesi terminal**: di blok `env` di bawah [kunci `cli` atau `code`](#choose-cli-or-code) kebijakan

1298* **Sesi Cowork yang [berjalan di mesin pengguna](https://code.claude.com/docs/id/managed-settings.md#where-and-when-a-policy-applies)**: di blok `env` dari [pengaturan terkelola sisi klien](#client-side-managed-settings) di mesin tersebut1307* **Sesi Cowork yang [berjalan di mesin pengguna](https://code.claude.com/docs/id/managed-settings.md#where-and-when-a-policy-applies)**: di blok `env` dari [pengaturan terkelola sisi klien](#client-side-managed-settings) di mesin tersebut

1299* **Sesi tab Code di bawah kebijakan `code`**: di blok `env` kebijakan, setelah Anda memenuhi [kondisi agar pengaturan `code` berlaku](#apply-code-settings-in-the-code-tab)1308* **Sesi tab Code di bawah kebijakan `code`**: di blok `env` kebijakan, setelah Anda memenuhi [kondisi agar pengaturan `code` berlaku](#apply-code-settings-in-the-code-tab)

1300* **Sesi tab Code di bawah kebijakan `cli`**: di blok `env` dari pengaturan terkelola sisi klien di mesin yang menjalankan sesi. Melalui SSH, itu adalah host jarak jauh.1309* **Sesi tab Code di bawah kebijakan `cli`**: di blok `env` dari pengaturan terkelola sisi klien di mesin yang menjalankan sesi. Melalui SSH, itu adalah host jarak jauh.

1301 1310 

1302Jika Anda menambahkan variabel ke pengaturan terkelola suatu mesin, atur juga [`parentSettingsBehavior: "merge"`](https://code.claude.com/docs/id/claude-apps-gateway#set-the-opt-in) di sumber dengan prioritas tertinggi di mesin tersebut. Tanpanya, sesi Cowork dan sesi tab Code di bawah kebijakan `cli` berjalan tanpa allowlist egress dan kebijakan lain yang diteruskan Claude Desktop kepadanya sebagai pengaturan induk.1311Jika Anda menambahkan variabel ke pengaturan terkelola suatu mesin, setel juga [`parentSettingsBehavior: "merge"`](https://code.claude.com/docs/id/claude-apps-gateway#set-the-opt-in) di sumber dengan prioritas tertinggi di mesin tersebut. Tanpanya, sesi Cowork dan sesi tab Code di bawah kebijakan `cli` berjalan tanpa allowlist egress dan kebijakan lain yang diteruskan Claude Desktop kepada sesi tersebut sebagai pengaturan induk.

1303 1312 

1304#### Tambahkan label Anda sendiri1313#### Menambahkan label sendiri

1305 1314 

1306Untuk menempatkan label tetap seperti `service.namespace` atau `deployment.environment.name` pada telemetri sesi yang masuk melalui gateway, atur `telemetry.resource_attributes`. Setiap label adalah atribut sumber OpenTelemetry, dan setiap tujuan menerima label yang sama.1315Untuk memasang label tetap seperti `service.namespace` atau `deployment.environment.name` pada telemetri sesi yang masuk melalui gateway, setel `telemetry.resource_attributes`. Setiap label adalah atribut resource OpenTelemetry, dan setiap tujuan menerima label yang sama.

1307 1316 

1308Sesi mendapatkan label hanya ketika Anda juga menetapkan `telemetry.forward_to` dan `listen.public_url`. Contoh ini menambahkan dua label:1317Sesi hanya mendapatkan label jika Anda juga menyetel `telemetry.forward_to` dan `listen.public_url`. Contoh ini menambahkan dua label:

1309 1318 

1310```yaml theme={null}1319```yaml theme={null}

1311telemetry:1320telemetry:


1316 deployment.environment.name: prod1325 deployment.environment.name: prod

1317```1326```

1318 1327 

1319Gateway menolak untuk memulai ketika label melanggar salah satu aturan ini, dan kesalahan startup menamai label:1328Gateway menolak untuk mulai jika suatu label melanggar salah satu aturan berikut, dan error startup menyebutkan label tersebut:

1320 1329 

1321* Nama menggunakan hanya huruf, digit, `.`, `_`, dan `-`1330* Nama hanya menggunakan huruf, angka, `.`, `_`, dan `-`

1322* Nama tidak dicadangkan. Dibandingkan dalam huruf apa pun, nama yang dicadangkan adalah semua yang dimulai dengan `user.`, `enduser.`, atau `identity.`, ditambah `service.name`, `service.version`, `claude.deployment_mode`, `host.arch`, `os.type`, `os.version`, dan `wsl.version`1331* Nama tidak dicadangkan. Dibandingkan tanpa memedulikan huruf besar-kecil, nama yang dicadangkan adalah semua yang diawali `user.`, `enduser.`, atau `identity.`, ditambah `service.name`, `service.version`, `claude.deployment_mode`, `host.arch`, `os.type`, `os.version`, dan `wsl.version`

1323* Nilai adalah ASCII yang dapat dicetak non-kosong tanpa spasi dan tidak ada `, ; = \ " %`1332* Nilai berupa ASCII yang dapat dicetak dan tidak kosong, tanpa spasi dan tanpa `, ; = \ " %`

1324* Nilai paling banyak 255 karakter saat gateway menghitungnya setelah pengkodean persen, jadi `/`, `:`, dan `@` masing-masing menghitung sebagai tiga1333* Nilai paling banyak 255 karakter sebagaimana dihitung gateway setelah percent-encoding, sehingga `/`, `:`, dan `@` masing-masing dihitung sebagai tiga

1325* Nilai adalah teks, jadi kutip angka, `true`, atau `false`1334* Nilai berupa teks, jadi beri tanda kutip pada angka, `true`, atau `false`

1326 1335 

1327Anda memerlukan Claude Code v2.1.281 atau lebih baru di server gateway untuk menetapkan `telemetry.resource_attributes`. Gateway sebelumnya menolak untuk memulai ketika menemukan kunci. Upgrade setiap replika sebelum Anda menambahkan kunci, dan hapus kunci sebelum Anda kembali ke versi sebelumnya.1336Anda memerlukan Claude Code v2.1.281 atau yang lebih baru di server gateway untuk menyetel `telemetry.resource_attributes`. Gateway yang lebih lama menolak untuk mulai saat menemukan kunci tersebut. Tingkatkan setiap replika sebelum Anda menambahkan kunci, dan hapus kunci sebelum Anda melakukan rollback ke versi sebelumnya.

1328 1337 

1329Sesi terminal yang masuk melalui `/login` menerima label sebagai `OTEL_RESOURCE_ATTRIBUTES`, didorong dengan [variabel telemetri](#telemetry) lainnya. Jika Anda menetapkan `OTEL_RESOURCE_ATTRIBUTES` dalam blok `env` kebijakan, sesi terminal yang cocok dengan kebijakan itu mendapatkan nilai itu alih-alih label. Claude Desktop menerima label dari gateway bersama `user.email` dan atribut identitas lainnya.1338Sesi terminal yang masuk melalui `/login` menerima label sebagai `OTEL_RESOURCE_ATTRIBUTES`, yang dikirim bersama [variabel telemetri](#telemetry) lainnya. Jika Anda menyetel `OTEL_RESOURCE_ATTRIBUTES` di blok `env` kebijakan, sesi terminal yang cocok dengan kebijakan tersebut mendapatkan nilai itu alih-alih label. Claude Desktop menerima label dari gateway bersama `user.email` dan atribut identitas lainnya.

1330 1339 

1331Claude Code juga menyalin setiap label ke setiap titik data metrik, sehingga Anda dapat memfilter metrik berdasarkannya di backend yang tidak mengindeks atribut sumber. Untuk mematikan salinan itu, lihat [Kontrol kardinalitas metrik](https://code.claude.com/docs/id/monitoring-usage.md#metrics-cardinality-control).1340Claude Code juga menyalin setiap label ke setiap titik data metrik, sehingga Anda dapat memfilter metrik berdasarkan label tersebut di backend yang tidak mengindeks atribut resource. Untuk mematikan salinan tersebut, lihat [Kontrol kardinalitas metrik](https://code.claude.com/docs/id/monitoring-usage.md#metrics-cardinality-control).

1332 1341 

1333#### Perubahan grup selama sesi terbuka1342#### Perubahan grup selama sesi terbuka

1334 1343 

1335Sesi terminal menempatkan `user.groups` pada resource OTLP dan sekali lagi pada setiap titik data metrik dan event. Jika grup developer berubah saat sesi terbuka, titik data dan event untuk penggunaan setelah [refresh senyap](#session) berikutnya membawa grup yang baru. Resource mempertahankan grup lama hingga developer me-restart Claude Code, jadi kelompokkan berdasarkan atribut pada titik data atau event.1344Sesi terminal menempatkan `user.groups` pada resource OTLP dan juga pada setiap titik data metrik dan event. Jika grup developer berubah saat sesi terbuka, titik data dan event untuk penggunaan setelah [refresh senyap](#session) berikutnya membawa grup baru. Resource mempertahankan grup lama hingga developer memulai ulang Claude Code, jadi kelompokkan berdasarkan atribut pada titik data atau event.

1336 1345 

1337Jika Anda mengaktifkan `resource_to_telemetry_conversion` di exporter Prometheus remote write milik OpenTelemetry Collector, exporter tersebut mengganti `user.groups` setiap titik data dengan milik resource, sehingga setiap titik data menampilkan grup lama. Untuk mempertahankan nilai titik data, hapus `user.groups` dari resource sebelum exporter tersebut.1346Jika Anda mengaktifkan `resource_to_telemetry_conversion` di exporter Prometheus remote write pada OpenTelemetry Collector, exporter menggantikan `user.groups` setiap titik data dengan milik resource, sehingga setiap titik data menampilkan grup lama. Untuk mempertahankan nilai titik data, hapus `user.groups` dari resource sebelum exporter tersebut.

1338 1347 

1339Processor `resource` OpenTelemetry Collector ini menghapus atribut tersebut di pipeline yang mencantumkannya:1348Processor `resource` OpenTelemetry Collector ini menghapus atribut tersebut di pipeline yang mencantumkannya:

1340 1349 


1346 action: delete1355 action: delete

1347```1356```

1348 1357 

1349Setelah Anda menambahkan `resource/drop-user-groups` ke `processors` pipeline metrik, setiap series membawa label `user_groups` dari titik datanya sendiri.1358Setelah Anda menambahkan `resource/drop-user-groups` ke `processors` pipeline metrik, setiap seri membawa label `user_groups` dari titik data miliknya sendiri.

1350 1359 

1351#### Ekspor langsung ke kolektor Anda1360#### Ekspor langsung ke collector Anda

1352 1361 

1353Untuk memiliki sesi yang masuk melalui `/login` mengirim telemetri langsung ke kolektor Anda alih-alih melalui relay, atur `OTEL_EXPORTER_OTLP_ENDPOINT` ke URL dasar `https://` kolektor dalam blok `env` dari [kebijakan terkelola](#managed). Claude Code menambahkan `/v1/metrics`, `/v1/logs`, atau `/v1/traces` ke URL yang Anda atur, seperti `https://otel-collector.example.com:4318`, dan mengekspor setiap sinyal di sana melalui OTLP/HTTP. Memerlukan Claude Code v2.1.265 atau lebih baru di setiap mesin pengembang. Klien sebelumnya mengekspor melalui relay.1362Agar sesi yang masuk melalui `/login` mengirim telemetri langsung ke collector Anda alih-alih melalui relay, atur `OTEL_EXPORTER_OTLP_ENDPOINT` ke URL dasar `https://` milik collector di blok `env` dari [kebijakan terkelola](#managed). Claude Code menambahkan `/v1/metrics`, `/v1/logs`, atau `/v1/traces` ke URL yang Anda atur, seperti `https://otel-collector.example.com:4318`, dan mengekspor setiap sinyal ke sana melalui OTLP/HTTP. Memerlukan Claude Code v2.1.265 atau yang lebih baru di mesin setiap pengembang. Klien yang lebih lama mengekspor melalui relay.

1354 1363 

1355Untuk mengautentikasi ke kolektor, atur `OTEL_EXPORTER_OTLP_HEADERS` dalam blok `env` yang sama. Sesi tidak pernah mengirim token sesi gateway pengembang ke kolektor yang dinamai dengan cara ini.1364Untuk mengautentikasi ke collector, atur `OTEL_EXPORTER_OTLP_HEADERS` di blok `env` yang sama. Sesi tidak pernah mengirim token sesi gateway milik pengembang ke collector yang ditentukan dengan cara ini.

1356 1365 

1357Ketika Anda menambah atau mengubah endpoint ini dalam kebijakan, Claude Code meminta setiap pengembang untuk menyetujuinya dalam [dialog persetujuan keamanan](#managed) sebelum menerapkannya dalam sesi interaktif.1366Saat Anda menambahkan atau mengubah endpoint ini dalam kebijakan, Claude Code meminta setiap pengembang untuk menyetujuinya di [dialog persetujuan keamanan](#managed) sebelum menerapkannya dalam sesi interaktif.

1358 1367 

1359Claude Code memeriksa endpoint sebelum mengekspor sinyal secara langsung, dan menyimpan sinyal itu di relay ketika pemeriksaan gagal. Pemeriksaan termasuk:1368Claude Code memeriksa endpoint sebelum mengekspor sinyal secara langsung, dan mempertahankan sinyal tersebut di relay ketika pemeriksaan gagal. Pemeriksaan tersebut meliputi:

1360 1369 

1361* Endpoint berasal dari gateway itu sendiri. Jika Anda menetapkan variabel yang sama dalam profil MDM atau `managed-settings.json` lokal, ekspor tetap di relay.1370* Endpoint berasal dari gateway itu sendiri. Jika Anda mengatur variabel yang sama di profil MDM atau `managed-settings.json` lokal, ekspor tetap melalui relay.

1362* URL menggunakan `https://`, atau `http://` ke alamat loopback1371* URL menggunakan `https://`, atau `http://` ke alamat loopback

1363* URL diselesaikan ke jalur yang berakhir di `/v1/<signal>`, tanpa kueri atau fragmen. Claude Code membangun jalur itu sendiri dari variabel generik. Ini menggunakan variabel per-sinyal seperti `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` seperti yang ditulis, jadi sertakan jalur lengkap di sana.1372* URL mengarah ke path yang berakhiran `/v1/<signal>`, tanpa query atau fragment. Claude Code membangun path tersebut sendiri dari variabel generik. Variabel per sinyal seperti `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` digunakan apa adanya, jadi sertakan path lengkap di sana.

1364* URL bukan host gateway itu sendiri. Endpoint yang ditujukan ke gateway menyimpan jalur relay dan token sesinya.1373* URL bukan host milik gateway itu sendiri. Endpoint yang ditujukan ke gateway tetap menggunakan jalur relay beserta token sesinya.

1365* Baik Anda maupun pengembang tidak mengonfigurasi [`otelHeadersHelper`](https://code.claude.com/docs/id/settings-reference#otelheadershelper) dalam sumber pengaturan apa pun. Dengan helper yang dikonfigurasi, setiap sinyal tetap di relay.1374* Baik Anda maupun pengembang tidak mengonfigurasi [`otelHeadersHelper`](https://code.claude.com/docs/id/settings-reference#otelheadershelper) di sumber pengaturan mana pun. Jika helper dikonfigurasi, setiap sinyal tetap melalui relay.

1366 1375 

1367Endpoint yang Anda namai mengubah hanya di mana ekspor pergi. Anda masih memilih sinyal mana yang mengekspor sama sekali dengan pemilih `OTEL_*_EXPORTER`.1376Endpoint yang Anda tentukan hanya mengubah ke mana ekspor dikirim. Anda tetap memilih sinyal mana yang diekspor sama sekali dengan selektor `OTEL_*_EXPORTER`.

1368 1377 

1369Endpoint saja tidak mengaktifkan ekspor, jadi juga atur variabel yang melakukannya, kecuali gateway sudah mendorongnya:1378Endpoint saja tidak mengaktifkan ekspor, jadi atur juga variabel yang mengaktifkannya, kecuali gateway sudah mendorongnya:

1370 1379 

1371* Jika gateway sudah [mendorong variabel telemetri](#telemetry), mereka mencakup enablement, pemilih, dan protokol, dan endpoint eksplisit Anda menimpa nilai `<public_url>` yang didorong. Atur pemilih `OTEL_*_EXPORTER` ke `otlp` sendiri hanya untuk sinyal yang tidak ada tujuan `forward_to` yang mengaktifkan.1380* Jika gateway sudah [mendorong variabel telemetri](#telemetry), variabel tersebut mencakup pengaktifan, selektor, dan protokol, dan endpoint eksplisit Anda menimpa nilai `<public_url>` yang didorong. Atur sendiri selektor `OTEL_*_EXPORTER` ke `otlp` hanya untuk sinyal yang tidak diaktifkan oleh tujuan `forward_to` mana pun.

1372* Jika tidak, juga atur `CLAUDE_CODE_ENABLE_TELEMETRY=1`, pemilih `OTEL_*_EXPORTER`, dan `OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf`.1381* Jika tidak, atur juga `CLAUDE_CODE_ENABLE_TELEMETRY=1`, selektor `OTEL_*_EXPORTER`, dan `OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf`.

1373 1382 

1374Ketika pengembang keluar, atau masuk ke gateway yang berbeda, ekspor ke kolektor berhenti dan Claude Code menjatuhkan setiap batch yang tersisa daripada mengirimkannya.1383Saat pengembang keluar, atau masuk ke gateway yang berbeda, ekspor ke collector berhenti dan Claude Code membuang setiap batch yang tersisa alih-alih mengirimkannya.

1375 1384 

1376#### Ketika tujuan gagal1385#### Saat tujuan gagal

1377 1386 

1378Gateway tidak membuffer, mencoba ulang, atau menyimpan telemetri, jadi itu menjatuhkan ekspor yang tidak mencapai tujuan daripada mengirimkannya terlambat. Setiap tujuan berhasil atau gagal sendiri, dan klien yang mengekspor menerima respons sukses bagaimanapun, jadi pengiriman yang gagal muncul hanya dalam log gateway.1387Gateway tidak melakukan buffer, retry, atau menyimpan telemetri, sehingga gateway membuang ekspor yang tidak mencapai tujuan alih-alih mengirimkannya terlambat. Setiap tujuan berhasil atau gagal secara terpisah, dan klien yang mengekspor menerima respons sukses dalam kedua kasus, sehingga pengiriman yang gagal hanya muncul di log gateway.

1379 1388 

1380Setelah lima pengiriman berturut-turut yang gagal ke tujuan, gateway menjeda penerusan ke dalamnya dalam rentang 30 detik, mencatat setiap jeda, sampai pengiriman berhasil. Respons kesalahan apa pun, timeout, atau kesalahan koneksi menghitung sebagai pengiriman yang gagal, kecuali `400`, `413`, `415`, `422`, dan `431`, yang berarti kolektor menolak payload ekspor itu sebagai salah format atau terlalu besar.1389Setelah lima kali pengiriman gagal berturut-turut ke suatu tujuan, gateway menjeda penerusan ke tujuan tersebut dalam rentang 30 detik, mencatat setiap jeda ke log, hingga pengiriman berhasil. Setiap respons error, timeout, atau error koneksi dihitung sebagai pengiriman yang gagal, kecuali `400`, `413`, `415`, `422`, dan `431`, yang berarti collector menolak payload ekspor tersebut karena formatnya salah atau terlalu besar.

1381 1390 

1382Payload yang ditolak tidak memajukan atau mengatur ulang penghitung kegagalan: gateway terus meneruskan ke tujuan dan mencatat peringatan yang menamakannya dan status, pada penolakan pertama tujuan dan setiap seratus setelahnya.1391Payload yang ditolak tidak menambah maupun mereset hitungan kegagalan: gateway tetap meneruskan ke tujuan tersebut dan mencatat peringatan ke log yang menyebutkan tujuan dan statusnya, pada penolakan pertama dari tujuan tersebut dan setiap penolakan keseratus sesudahnya.

1383 1392 

1384### Penyetelan HTTP1393### Penyetelan HTTP

1385 1394 

1386Empat blok tingkat atas opsional, `access_control`, `limits`, `timeouts`, dan `rate_limits`, menyetel surface HTTP. Default cocok untuk sebagian besar deployment.1395Empat blok tingkat atas opsional, `access_control`, `limits`, `timeouts`, dan `rate_limits`, menyesuaikan surface HTTP. Nilai default cocok untuk sebagian besar deployment.

1387 1396 

1388| Blok | Kunci | Default | Deskripsi |1397| Blok | Kunci | Default | Deskripsi |

1389| - | - | - | - |1398| - | - | - | - |

1390| `access_control` | `allow_cidrs` / `deny_cidrs` | kosong | Inbound IP allow/deny berdasarkan alamat klien, setelah resolusi `trusted_proxies`. `deny_cidrs` diperiksa terlebih dahulu; klien yang cocok ditolak bahkan jika `allow_cidrs` juga cocok. Jika `allow_cidrs` tidak kosong gateway adalah default-deny. `/healthz` dan `/readyz` dikecualikan dari `allow_cidrs`. Ketika proxy tepercaya mengirim entri `X-Forwarded-For` yang bukan alamat IP, klien nyata tidak diketahui dan gateway mencatat peringatan sekali yang menamai apa yang harus diperiksa. Di mana daftar apa pun berlaku untuk permintaan, itu menolaknya dengan `403` dan alasan audit `xff_unparseable`. Di mana tidak ada yang berlaku, itu melayani permintaan dan menggunakan alamat proxy sendiri sebagai IP klien untuk rate limit per-IP dan audit. |1399| `access_control` | `allow_cidrs` / `deny_cidrs` | kosong | Izinkan/tolak IP masuk berdasarkan alamat klien, setelah resolusi `trusted_proxies`. `deny_cidrs` diperiksa terlebih dahulu; klien yang cocok dengannya ditolak meskipun `allow_cidrs` juga cocok. Jika `allow_cidrs` tidak kosong, gateway menolak secara default. `/healthz` dan `/readyz` dikecualikan dari `allow_cidrs`. Ketika proxy tepercaya mengirim entri `X-Forwarded-For` yang bukan alamat IP, klien sebenarnya tidak diketahui dan gateway mencatat peringatan satu kali ke log yang menyebutkan apa yang perlu diperiksa. Jika salah satu daftar berlaku untuk permintaan tersebut, gateway menolaknya dengan `403` dan alasan audit `xff_unparseable`. Jika tidak ada yang berlaku, gateway melayani permintaan tersebut dan menggunakan alamat proxy itu sendiri sebagai IP klien untuk rate limit per IP dan audit. |

1391| `limits` | `max_request_bytes` | 32 MiB | Badan permintaan inbound maksimal; permintaan yang terlalu besar mendapatkan `413` sebelum badan dibuffer. Naikkan untuk permintaan file atau gambar besar. |1400| `limits` | `max_request_bytes` | 32 MiB | Ukuran maksimum body permintaan masuk; permintaan yang terlalu besar mendapat `413` sebelum body di-buffer. Naikkan untuk permintaan file atau gambar berukuran besar. |

1392| `limits` | `max_request_header_bytes` | tidak diatur | Menurunkan batas 256 KiB gateway pada total header permintaan. Permintaan yang melebihi batas mengembalikan `431`, dan nilai di atas 256 KiB tidak berpengaruh. Jika pengembang mendapatkan `431` setelah masuk, lihat [Header permintaan terlalu besar setelah masuk](https://code.claude.com/docs/id/claude-apps-gateway-deploy.md#request-headers-too-large-after-sign-in). |1401| `limits` | `max_request_header_bytes` | tidak diatur | Menurunkan batas 256 KiB milik gateway untuk total header permintaan. Permintaan yang melebihi batas mengembalikan `431`, dan nilai di atas 256 KiB tidak berpengaruh. Jika pengembang mendapat `431` setelah masuk, lihat [Header permintaan terlalu besar setelah masuk](https://code.claude.com/docs/id/claude-apps-gateway-deploy.md#request-headers-too-large-after-sign-in). |

1393| `limits` | `max_url_length` | tidak diatur | Ketika diatur, URL yang terlalu panjang mengembalikan `414` |1402| `limits` | `max_url_length` | tidak diatur | Jika diatur, URL yang terlalu panjang mengembalikan `414` |

1394| `timeouts` | `upstream_ttfb_ms` | 120000 | Tunggu maksimal untuk header respons upstream (waktu ke byte pertama). Badan respons kemudian streaming tanpa batas jam dinding. Berlaku untuk jalur upstream Anthropic langsung; di setiap penyedia lain gateway menunggu hingga satu jam untuk respons dimulai. |1403| `timeouts` | `upstream_ttfb_ms` | 120000 | Waktu tunggu maksimum untuk header respons upstream (time to first byte). Body respons kemudian di-stream tanpa batas waktu total. Berlaku untuk jalur upstream Anthropic langsung; pada setiap penyedia lain, gateway menunggu hingga satu jam agar respons dimulai. |

1395| `rate_limits` | `device_authorization.max` / `.window_seconds` | 30 / 600 | Rate limit per-IP pada endpoint otorisasi perangkat yang tidak diautentikasi. Naikkan untuk org besar di belakang IP egress bersama atau NAT. [Peluncuran besar](https://code.claude.com/docs/id/claude-apps-gateway-deploy.md#large-rollouts) menunjukkan cara mengukurnya. Batas ini hanya berlaku untuk alur sign-in hibah perangkat, bukan untuk inferensi `/v1/messages`. Lihat [Resistensi brute-force kode pengguna](https://code.claude.com/docs/id/claude-apps-gateway-deploy.md#user-code-brute-force-resistance). |1404| `rate_limits` | `device_authorization.max` / `.window_seconds` | 30 / 600 | Rate limit per IP pada endpoint otorisasi perangkat yang tidak diautentikasi. Naikkan untuk organisasi besar di balik IP egress bersama atau NAT. [Peluncuran skala besar](https://code.claude.com/docs/id/claude-apps-gateway-deploy.md#large-rollouts) menunjukkan cara menentukan ukurannya. Batas ini hanya berlaku untuk alur masuk device-grant, bukan untuk inferensi `/v1/messages`. Lihat [Ketahanan terhadap brute-force kode pengguna](https://code.claude.com/docs/id/claude-apps-gateway-deploy.md#user-code-brute-force-resistance). |

1396| `rate_limits` | `device_verify.max` / `.window_seconds` | 10 / 600 | Rate limit per-IP pada pengajuan `user_code` di `/device`. Ini adalah apa yang menghentikan seseorang dari menebak kode pengembang lain. [Peluncuran besar](https://code.claude.com/docs/id/claude-apps-gateway-deploy.md#large-rollouts) menunjukkan seberapa jauh untuk menaikkannya. |1405| `rate_limits` | `device_verify.max` / `.window_seconds` | 10 / 600 | Rate limit per IP pada pengiriman `user_code` di `/device`. Inilah yang mencegah seseorang menebak kode pengembang lain. [Peluncuran skala besar](https://code.claude.com/docs/id/claude-apps-gateway-deploy.md#large-rollouts) menunjukkan seberapa tinggi menaikkannya. |

1397 1406 

1398Jika Anda meninggalkan kedua daftar `access_control` kosong, yang merupakan default, gateway melayani alamat klien apa pun, jadi hanya jaringan Anda yang membatasi siapa yang dapat mencapainya. Itu penting karena gateway dapat mendorong [pengaturan terkelola](#managed) yang menjalankan perintah di mesin pengembang.1407Jika Anda membiarkan kedua daftar `access_control` kosong, yang merupakan default, gateway melayani alamat klien mana pun, sehingga hanya jaringan Anda yang membatasi siapa yang dapat menjangkaunya. Hal itu penting karena gateway dapat mendorong [pengaturan terkelola](#managed) yang menjalankan perintah di mesin pengembang.

1399 1408 

1400Sementara `allow_cidrs` kosong, gateway memperingatkan di dua tempat, tanpa mengubah cara itu menjawab permintaan apa pun:1409Selama `allow_cidrs` kosong, gateway memberi peringatan di dua tempat, tanpa mengubah cara gateway menjawab permintaan apa pun:

1401 1410 

1402* **Saat boot**: peringatan dalam log operasional merekomendasikan hanya mengizinkan rentang pribadi `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`, `100.64.0.0/10`, `127.0.0.0/8`, `::1/128`, dan `fc00::/7`, ditambah rentang internal lainnya yang pengembang Anda terhubung dari. Jika Anda mengikat gateway ke alamat loopback dan tidak menetapkan `trusted_proxies` atau `public_url`, seperti dalam pengembangan lokal, peringatan tidak muncul.1411* **Saat boot**: peringatan di log operasional merekomendasikan untuk hanya mengizinkan rentang privat `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`, `100.64.0.0/10`, `127.0.0.0/8`, `::1/128`, dan `fc00::/7`, ditambah rentang internal lain tempat pengembang Anda terhubung. Jika Anda mengikat gateway ke alamat loopback dan tidak mengatur `trusted_proxies` maupun `public_url`, seperti dalam pengembangan lokal, peringatan tersebut tidak muncul.

1403* **Saat runtime**: pertama kali permintaan tiba dari alamat di luar rentang pribadi itu, gateway mencatat peringatan dan memancarkan [acara audit `access.public_client`](https://code.claude.com/docs/id/claude-apps-gateway-deploy#logs) yang membawa IP klien. Keduanya menyala sekali per proses. Alamat link-lokal, `169.254.0.0/16` dan `fe80::/10`, tidak dihitung sebagai publik. Gateway menjawab `/healthz` dan `/readyz` sebelum pemeriksaan ini berjalan, jadi probe kesehatan dari rentang publik tidak memicunya.1412* **Saat runtime**: pertama kali permintaan tiba dari alamat di luar rentang privat tersebut, gateway mencatat peringatan ke log dan memancarkan [audit event `access.public_client`](https://code.claude.com/docs/id/claude-apps-gateway-deploy#logs) yang membawa IP klien. Keduanya hanya terpicu sekali per proses. Alamat link-local, `169.254.0.0/16` dan `fe80::/10`, tidak dihitung sebagai publik. Gateway menjawab `/healthz` dan `/readyz` sebelum pemeriksaan ini berjalan, sehingga probe kesehatan dari rentang publik tidak memicunya.

1404 1413 

1405Kedua sinyal menggunakan alamat klien saat gateway menyelesaikannya. Jika load balancer, port-forward, atau tunnel meneruskan lalu lintas dan tidak terdaftar dalam `listen.trusted_proxies`, gateway melihat alamat relay, yang biasanya pribadi, sehingga baik peringatan runtime maupun daftar allow pribadi tidak menangkap lalu lintas yang diteruskan melaluinya.1414Kedua sinyal menggunakan alamat klien sebagaimana di-resolve oleh gateway. Jika load balancer, port-forward, atau tunnel meneruskan lalu lintas dan tidak tercantum di `listen.trusted_proxies`, gateway melihat alamat relay tersebut, yang biasanya privat, sehingga baik peringatan runtime maupun daftar izin privat tidak menangkap lalu lintas yang diteruskan melaluinya.

1406 1415 

1407Di belakang front end seperti itu, atur [`listen.trusted_proxies`](#listen) terlebih dahulu sehingga gateway melihat alamat klien nyata, dan jaga gateway dan semua yang di depannya tidak dapat dijangkau dari internet publik apa pun keadaannya.1416Di balik front end semacam itu, atur [`listen.trusted_proxies`](#listen) terlebih dahulu agar gateway melihat alamat klien yang sebenarnya, dan bagaimanapun juga pastikan gateway dan semua yang ada di depannya tidak dapat dijangkau dari internet publik.

1408 1417 

1409### `load_test_mode`1418### `load_test_mode`

1410 1419 

1411Blok `load_test_mode` memungkinkan Anda untuk load test gateway tanpa memanggil penyedia model. Sementara itu aktif, gateway membangun dan menandatangani setiap permintaan penyedia seperti biasa, membuangnya alih-alih mengirimkannya, dan streaming respons kalengan kembali melalui jalur respons normalnya. Respons adalah teks pengisi yang dimulai dengan kalimat yang mengatakan itu kalengan.1420Blok `load_test_mode` memungkinkan Anda melakukan uji beban pada gateway tanpa memanggil penyedia model. Selama mode ini aktif, gateway membangun dan menandatangani setiap permintaan penyedia seperti biasa, membuangnya alih-alih mengirimkannya, dan men-stream balasan siap pakai kembali melalui jalur respons normalnya. Balasan tersebut berupa teks pengisi yang diawali dengan kalimat yang menyatakan bahwa balasan itu adalah balasan siap pakai.

1412 1421 

1413Memerlukan Claude Code v2.1.282 atau lebih baru di server gateway. Gateway sebelumnya menolak untuk memulai ketika menemukan kunci. Upgrade setiap replika sebelum Anda menambahkan blok, dan hapus blok sebelum Anda kembali.1422Memerlukan Claude Code v2.1.282 atau yang lebih baru di server gateway. Gateway yang lebih lama menolak untuk dijalankan saat menemukan kunci tersebut. Tingkatkan setiap replika sebelum Anda menambahkan blok ini, dan hapus blok ini sebelum Anda melakukan rollback.

1414 1423 

1415Contoh di bawah mengaktifkan mode dengan default, respons sekitar 750 token teks yang streaming selama sekitar 10 detik:1424Contoh di bawah ini mengaktifkan mode dengan nilai default, yaitu balasan berisi kira-kira 750 token teks yang di-stream selama sekitar 10 detik:

1416 1425 

1417```yaml theme={null}1426```yaml theme={null}

1418load_test_mode:1427load_test_mode:


1421 reply_seconds: 9.5 # how long a streamed reply takes1430 reply_seconds: 9.5 # how long a streamed reply takes

1422```1431```

1423 1432 

1424| Field | Diperlukan | Deskripsi |1433| Field | Wajib | Deskripsi |

1425| - | - | - |1434| - | - | - |

1426| `enabled` | Ya | `true` mengaktifkan mode. `false` menyimpan angka Anda dalam file dengan mode mati. Gateway menolak untuk memulai jika blok ada tanpa itu. |1435| `enabled` | Ya | `true` mengaktifkan mode. `false` mempertahankan angka Anda di file dengan mode nonaktif. Gateway menolak untuk dijalankan jika blok ada tanpa field ini. |

1427| `reply_tokens` | Tidak | Default `750`. Kira-kira berapa banyak token teks yang dibawa setiap respons kalengan, angka bulat dari 1 hingga 100000. |1436| `reply_tokens` | Tidak | Default `750`. Kira-kira berapa banyak token teks yang dibawa setiap balasan siap pakai, berupa bilangan bulat dari 1 hingga 100000. |

1428| `reply_seconds` | Tidak | Default `9.5`. Berapa lama respons yang streaming, dari 0 hingga 600. `0` mengirim seluruh respons sekaligus. Respons terhadap permintaan non-streaming selalu datang sekaligus. |1437| `reply_seconds` | Tidak | Default `9.5`. Berapa lama balasan yang di-stream berlangsung, dari 0 hingga 600. `0` mengirim seluruh balasan sekaligus. Balasan untuk permintaan non-streaming selalu dikembalikan sekaligus. |

1429 1438 

1430Tes beban dalam mode ini mencakup gateway, Postgres Anda, dan semua yang di depan gateway. Itu tidak mencakup batas, kecepatan, atau jalur jaringan penyedia.1439Uji beban dalam mode ini mencakup gateway, Postgres Anda, dan semua yang ada di depan gateway. Uji ini tidak mencakup batas, kecepatan, atau jalur jaringan milik penyedia.

1431 1440 

1432Tidak ada permintaan model yang dikirim ke penyedia, jadi CPU replika per permintaan adalah perkiraan dan terbaca lebih rendah dari produksi, yang juga mengenkripsi lalu lintasnya ke penyedia. Konfirmasi jumlah replika dengan pilot kecil terhadap penyedia nyata. Sebelum v2.1.283, perkiraan terbaca jauh lebih rendah.1441Tidak ada permintaan model yang dikirim ke penyedia, sehingga CPU per permintaan pada replika hanyalah perkiraan dan terbaca lebih rendah daripada di produksi, yang juga mengenkripsi lalu lintasnya ke penyedia. Konfirmasikan jumlah replika dengan pilot kecil terhadap penyedia sebenarnya. Sebelum v2.1.283, perkiraan tersebut terbaca jauh lebih rendah.

1433 1442 

1434Sementara mode aktif, permintaan dapat membawa header `x-load-test-user` yang menyimpan angka bulat hingga tujuh digit. Gateway menghitung setiap angka sebagai pengembang terpisah, dengan email dan grup pengembang yang tokennya datang dengan permintaan.1443Selama mode aktif, permintaan dapat membawa header `x-load-test-user` yang berisi bilangan bulat hingga tujuh digit. Gateway menghitung setiap angka sebagai pengembang terpisah, dengan email dan grup milik pengembang yang tokennya disertakan bersama permintaan.

1435 1444 

1436Berikan deployment load-test database kosongnya sendiri, karena gateway menolak untuk memulai dengan mode aktif terhadap database di mana pengembang apa pun sudah menghabiskan apa pun.1445Berikan deployment uji beban database kosongnya sendiri, karena gateway menolak untuk dijalankan dengan mode aktif terhadap database yang di dalamnya ada pengembang yang sudah menghabiskan biaya apa pun.

1437 1446 

1438> [!WARNING]1447> [!WARNING]

1439>1448>

1440> Jangan pernah mengaktifkan ini untuk gateway yang digunakan pengembang. Setiap permintaan mendapatkan respons kalengan dan tidak ada model yang dipanggil. Gateway mencatat peringatan `load_test_mode is on` saat boot dan menandai setiap [acara audit](https://code.claude.com/docs/id/claude-apps-gateway-deploy.md#logs) `inference` dengan `load_test: true` sementara mode aktif.1449> Jangan pernah mengaktifkan ini untuk gateway yang digunakan oleh pengembang. Setiap permintaan mendapat balasan siap pakai dan tidak ada model yang dipanggil. Gateway mencatat peringatan `load_test_mode is on` ke log saat boot dan menandai setiap [audit event](https://code.claude.com/docs/id/claude-apps-gateway-deploy.md#logs) `inference` dengan `load_test: true` selama mode aktif.

1441 1450 

1442## Contoh lengkap1451## Contoh lengkap

1443 1452 


1589 # The contractors policy inherits this key.1598 # The contractors policy inherits this key.

1590 enforceAvailableModels: true1599 enforceAvailableModels: true

1591 permissions:1600 permissions:

1592 allow: [Read, Grep, Bash, Edit]1601 allow: [Read, Grep, Edit]

1593 deny: ["WebFetch"]1602 deny: ["WebFetch"]

1594 env: { HTTP_PROXY: http://proxy.example.com:8080 }1603 env: { HTTP_PROXY: http://proxy.example.com:8080 }

1595 1604 

Details

393| `/login` pengembang menampilkan pemilih akun standar bukan layar **Cloud gateway** | `forceLoginMethod` atau `forceLoginGatewayUrl` tidak diatur dalam pengaturan terkelola pada mesin itu | Sebarkan [file pengaturan terkelola](https://code.claude.com/docs/id/claude-apps-gateway#set-the-gateway-url) ke perangkat; `/login` membaca URL gateway dari sana |393| `/login` pengembang menampilkan pemilih akun standar bukan layar **Cloud gateway** | `forceLoginMethod` atau `forceLoginGatewayUrl` tidak diatur dalam pengaturan terkelola pada mesin itu | Sebarkan [file pengaturan terkelola](https://code.claude.com/docs/id/claude-apps-gateway#set-the-gateway-url) ke perangkat; `/login` membaca URL gateway dari sana |

394| Permintaan pengembang gagal dengan `Not signed in to the Cloud gateway — run /login.` | Pengaturan terkelola mesin menetapkan `forceLoginMethod: "gateway"` atau `forceLoginGatewayUrl`, dan sesi tidak memiliki masuk gateway. Login claude.ai yang tersisa tidak memenuhi persyaratan. | Minta pengembang menjalankan `/login` dan menyelesaikan masuk gateway. Lihat juga [Kebijakan administrator memerlukan masuk Cloud gateway](https://code.claude.com/docs/id/errors.md#administrator-policy-requires-a-cloud-gateway-sign-in). |394| Permintaan pengembang gagal dengan `Not signed in to the Cloud gateway — run /login.` | Pengaturan terkelola mesin menetapkan `forceLoginMethod: "gateway"` atau `forceLoginGatewayUrl`, dan sesi tidak memiliki masuk gateway. Login claude.ai yang tersisa tidak memenuhi persyaratan. | Minta pengembang menjalankan `/login` dan menyelesaikan masuk gateway. Lihat juga [Kebijakan administrator memerlukan masuk Cloud gateway](https://code.claude.com/docs/id/errors.md#administrator-policy-requires-a-cloud-gateway-sign-in). |

395| Claude Desktop melaporkan bahwa konfigurasi bootstrap-nya tidak dapat diambil | `/user/bootstrap` mengembalikan 404: kebijakan yang cocok dengan pengguna tidak membawa kunci `desktop`, atau tidak ada kebijakan yang cocok. Log audit gateway mencatat setiap penolakan sebagai `desktop_bootstrap.denied` dengan alasannya. | Tambahkan blok `desktop` ke kebijakan yang cocok dengan pengguna, atau ke lapisan dasar `match: {}`; `desktop: {}` kosong sudah cukup. Lihat [overlay Claude Desktop](https://code.claude.com/docs/id/claude-apps-gateway-config.md#claude-desktop-overlay). |395| Claude Desktop melaporkan bahwa konfigurasi bootstrap-nya tidak dapat diambil | `/user/bootstrap` mengembalikan 404: kebijakan yang cocok dengan pengguna tidak membawa kunci `desktop`, atau tidak ada kebijakan yang cocok. Log audit gateway mencatat setiap penolakan sebagai `desktop_bootstrap.denied` dengan alasannya. | Tambahkan blok `desktop` ke kebijakan yang cocok dengan pengguna, atau ke lapisan dasar `match: {}`; `desktop: {}` kosong sudah cukup. Lihat [overlay Claude Desktop](https://code.claude.com/docs/id/claude-apps-gateway-config.md#claude-desktop-overlay). |

396| Log audit menampilkan `auth.denied` dengan `reason: invalid_token` pada `/v1/logs` atau `/v1/metrics` | Anda mengatur [`otelHeadersHelper`](https://code.claude.com/docs/id/settings-reference#otelheadershelper) dalam pengaturan terkelola sebuah mesin. Dalam sesi Claude Desktop pada mesin itu, Claude Code mengirimkan header `Authorization` dari helper tersebut ke relay telemetri gateway sebagai pengganti token sesi. Jika Claude Desktop membundel Claude Code sebelum v2.1.307, Anda mendapatkan penolakan yang sama jika Anda mengatur header `Authorization` dalam `OTEL_EXPORTER_OTLP_HEADERS` atau bentuk per-sinyalnya dalam pengaturan tersebut. | Hapus helper dari pengaturan tersebut. Jika Claude Desktop membundel Claude Code sebelum v2.1.307, hapus variabelnya. |

396| Startup menampilkan `Gateway login is configured in managed settings, but this Claude Code build does not include Cloud gateway support.` | Build Claude Code yang diinstal mendahului dukungan gateway | Minta pengembang memperbarui Claude Code ke rilis yang mencakup dukungan Cloud gateway |397| Startup menampilkan `Gateway login is configured in managed settings, but this Claude Code build does not include Cloud gateway support.` | Build Claude Code yang diinstal mendahului dukungan gateway | Minta pengembang memperbarui Claude Code ke rilis yang mencakup dukungan Cloud gateway |

397| Startup keluar dengan `Administrator policy requires a Cloud gateway sign-in on this machine` | Lingkungan pengembang menetapkan `ANTHROPIC_API_KEY` atau `ANTHROPIC_AUTH_TOKEN`, pengaturan mereka mengonfigurasi [`apiKeyHelper`](https://code.claude.com/docs/id/settings-reference#apikeyhelper), atau kunci API dari login Claude Console sebelumnya masih tersimpan | Minta pengembang menghapus masing-masing yang berlaku: batalkan pengaturan variabel, hapus entri `apiKeyHelper`, atau jalankan `claude auth logout` untuk menghapus kunci yang tersimpan. Sesi yang memilih penyedia cloud dengan `CLAUDE_CODE_USE_*` kemudian dimulai tanpa masuk; untuk setiap sesi lainnya, minta mereka memulai `claude` dan masuk dengan `/login`. Lihat juga [Kebijakan administrator memerlukan masuk Cloud gateway](https://code.claude.com/docs/id/errors.md#administrator-policy-requires-a-cloud-gateway-sign-in). |398| Startup keluar dengan `Administrator policy requires a Cloud gateway sign-in on this machine` | Lingkungan pengembang menetapkan `ANTHROPIC_API_KEY` atau `ANTHROPIC_AUTH_TOKEN`, pengaturan mereka mengonfigurasi [`apiKeyHelper`](https://code.claude.com/docs/id/settings-reference#apikeyhelper), atau kunci API dari login Claude Console sebelumnya masih tersimpan | Minta pengembang menghapus masing-masing yang berlaku: batalkan pengaturan variabel, hapus entri `apiKeyHelper`, atau jalankan `claude auth logout` untuk menghapus kunci yang tersimpan. Sesi yang memilih penyedia cloud dengan `CLAUDE_CODE_USE_*` kemudian dimulai tanpa masuk; untuk setiap sesi lainnya, minta mereka memulai `claude` dan masuk dengan `/login`. Lihat juga [Kebijakan administrator memerlukan masuk Cloud gateway](https://code.claude.com/docs/id/errors.md#administrator-policy-requires-a-cloud-gateway-sign-in). |

398| Startup atau `/login` melaporkan `Claude Code may not be enabled for your organization` setelah 403 pada beban pengaturan terkelola | Gateway, atau sesuatu di depannya, menjawab permintaan `/managed/settings` dengan 403. Rute pengaturan gateway sendiri tidak pernah menjawab 403. Status berasal dari pemeriksaan IP [`access_control`](https://code.claude.com/docs/id/claude-apps-gateway-config#http-tuning) atau dari proxy atau WAF di depan gateway. Log audit mencatat penolakan pemeriksaan IP sebagai `access.denied` dengan alasannya. Pengembang tetap masuk. | Periksa log audit untuk `access.denied` pada waktu kegagalan dan perbaiki daftar `access_control` atau front end, lalu minta pengembang memulai `claude` lagi |399| Startup atau `/login` melaporkan `Claude Code may not be enabled for your organization` setelah 403 pada beban pengaturan terkelola | Gateway, atau sesuatu di depannya, menjawab permintaan `/managed/settings` dengan 403. Rute pengaturan gateway sendiri tidak pernah menjawab 403. Status berasal dari pemeriksaan IP [`access_control`](https://code.claude.com/docs/id/claude-apps-gateway-config#http-tuning) atau dari proxy atau WAF di depan gateway. Log audit mencatat penolakan pemeriksaan IP sebagai `access.denied` dengan alasannya. Pengembang tetap masuk. | Periksa log audit untuk `access.denied` pada waktu kegagalan dan perbaiki daftar `access_control` atau front end, lalu minta pengembang memulai `claude` lagi |

Details

288 288 

289[Agent teams](https://code.claude.com/docs/id/agent-teams.md) dimatikan secara default tetapi dapat diaktifkan dengan menambahkan `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` ke [variabel lingkungan](https://code.claude.com/docs/id/cloud-environments.md#set-environment-variables) Anda.289[Agent teams](https://code.claude.com/docs/id/agent-teams.md) dimatikan secara default tetapi dapat diaktifkan dengan menambahkan `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` ke [variabel lingkungan](https://code.claude.com/docs/id/cloud-environments.md#set-environment-variables) Anda.

290 290 

291### Saran plugin dalam percakapan

292 

293Kartu dalam percakapan yang mencantumkan satu atau beberapa [plugin](https://code.claude.com/docs/id/plugins/overview.md), dengan tombol **Add**, berarti Claude menyarankan plugin untuk tugas Anda. Claude dapat memberikan saran ini tanpa Anda minta. Anda tidak perlu menanggapinya, dan Claude tetap melanjutkan tugas apa pun pilihan Anda.

294 

295#### Tambahkan atau hapus plugin yang disarankan

296 

297Pilih **Add** pada plugin untuk mengaktifkannya di akun claude.ai Anda, dan plugin tersebut tetap aktif setelah sesi berakhir. Untuk membatalkannya, buka plugin yang ditambahkan dari kartu, pilih **Manage** untuk membuka halaman plugin di claude.ai, lalu hapus plugin dari halaman tersebut.

298 

299#### Matikan saran plugin

300 

301Untuk menghentikan Claude menyarankan plugin, tolak tool `SearchPlugins` dan `SuggestPluginInstall` dengan [aturan izin](https://code.claude.com/docs/id/permissions.md#manage-permissions). Dalam sesi dengan satu repositori di luar [proyek](https://code.claude.com/docs/id/claude-projects.md), lakukan commit aturan tersebut ke `.claude/settings.json` repositori tersebut, dengan mencantumkan kedua nama tool di bawah `permissions.deny`:

302 

303```json theme={null}

304{

305 "permissions": {

306 "deny": ["SearchPlugins", "SuggestPluginInstall"]

307 }

308}

309```

310 

311Claude Code mengabaikan aturan izin di `.claude/settings.json` repositori, termasuk aturan penolakan ini, ketika [pengaturan terkelola](https://code.claude.com/docs/id/managed-settings.md) yang berlaku untuk sesi menetapkan [`allowManagedPermissionRulesOnly`](https://code.claude.com/docs/id/settings-reference#allowmanagedpermissionrulesonly). Dalam kasus tersebut, letakkan aturan di pengaturan terkelola tersebut sebagai gantinya. Untuk penyiapan lain, seperti sesi dengan beberapa repositori atau thread cloud dalam proyek, lihat [pengaturan mana yang menjangkau sesi cloud](https://code.claude.com/docs/id/settings.md#settings-in-cloud-sessions).

312 

291### Ambil kembali pesan yang antri313### Ambil kembali pesan yang antri

292 314 

293Jika Anda mengirim pesan saat Claude sedang bekerja, pesan akan antri hingga Claude membacanya. Untuk mengambil kembali pesan yang antri, klik ✕ di atasnya. Teks kembali ke kotak pesan sehingga Anda dapat mengeditnya atau mengirim sesuatu yang lain.315Jika Anda mengirim pesan saat Claude sedang bekerja, pesan akan antri hingga Claude membacanya. Untuk mengambil kembali pesan yang antri, klik ✕ di atasnya. Teks kembali ke kotak pesan sehingga Anda dapat mengeditnya atau mengirim sesuatu yang lain.

Details

103 103 

104Selain konfigurasi yang Anda buat, `~/.claude` menyimpan data yang Claude Code tulis selama sesi. File-file ini adalah plaintext. Apa pun yang melewati alat ditulis ke transkrip di disk: konten file, output perintah, teks yang ditempel.104Selain konfigurasi yang Anda buat, `~/.claude` menyimpan data yang Claude Code tulis selama sesi. File-file ini adalah plaintext. Apa pun yang melewati alat ditulis ke transkrip di disk: konten file, output perintah, teks yang ditempel.

105 105 

106Transkrip juga dapat menyimpan apa yang Claude Code kirimkan ke model bersama pesan Anda:

107 

108* System prompt

109* Definisi tool

110* Parameter permintaan

111* File instruksi yang dimuatnya, seperti CLAUDE.md

112 

106### Dibersihkan secara otomatis113### Dibersihkan secara otomatis

107 114 

108Claude Code menghapus file di jalur di bawah ini setelah mereka lebih tua dari [`cleanupPeriodDays`](https://code.claude.com/docs/id/settings-reference#cleanupperioddays), selama dapat dengan aman menentukan periode retensi. Default adalah 30 hari dan minimum adalah 1; mengatur `0` gagal dengan kesalahan validasi. Cutoff usia yang sama berlaku untuk penghapusan otomatis [worktrees yatim piatu](https://code.claude.com/docs/id/worktrees.md#clean-up-subagent-and-background-session-worktrees).115Claude Code menghapus file di jalur di bawah ini setelah mereka lebih tua dari [`cleanupPeriodDays`](https://code.claude.com/docs/id/settings-reference#cleanupperioddays), selama dapat dengan aman menentukan periode retensi. Default adalah 30 hari dan minimum adalah 1; mengatur `0` gagal dengan kesalahan validasi. Cutoff usia yang sama berlaku untuk penghapusan otomatis [worktrees yatim piatu](https://code.claude.com/docs/id/worktrees.md#clean-up-subagent-and-background-session-worktrees).

109 116 

110| Jalur di bawah `~/.claude/` | Konten |117| Jalur di bawah `~/.claude/` | Konten |

111| - | - |118| - | - |

112| `projects/<project>/<session>.jsonl` | Transkrip percakapan lengkap: setiap pesan, panggilan alat, dan hasil alat |119| `projects/<project>/<session>.jsonl` | Transkrip percakapan: pesan, panggilan tool, dan hasil tool, ditambah system prompt, definisi tool, dan parameter permintaan yang Claude Code kirim ke model |

113| `projects/<project>/<session>.orphaned-<timestamp>-<suffix>.jsonl`, `projects/<project>/<session>.jsonl.superseded-<timestamp>` | Transkrip sebelumnya untuk sesi yang Claude Code sisihkan alih-alih menimpanya atau menghapusnya. Tidak muncul di pemilih sesi |120| `projects/<project>/<session>.orphaned-<timestamp>-<suffix>.jsonl`, `projects/<project>/<session>.jsonl.superseded-<timestamp>` | Transkrip sebelumnya untuk sesi yang Claude Code sisihkan alih-alih menimpanya atau menghapusnya. Tidak muncul di pemilih sesi |

114| `projects/<project>/<session>/subagents/` | Transkrip percakapan [Subagent](https://code.claude.com/docs/id/sub-agents.md), dihapus dengan transkrip sesi induk saat usia habis |121| `projects/<project>/<session>/subagents/` | Transkrip [Subagent](https://code.claude.com/docs/id/sub-agents.md) dalam format yang sama dengan transkrip sesi, dihapus dengan transkrip sesi induk saat usia habis |

115| `projects/<project>/<session>/tool-results/` | Output alat besar yang tumpah ke file terpisah, dan salinan ukuran penuh [gambar yang alat MCP kembalikan](https://code.claude.com/docs/id/mcp.md#images-in-tool-results) |122| `projects/<project>/<session>/tool-results/` | Output alat besar yang tumpah ke file terpisah, dan salinan ukuran penuh [gambar yang alat MCP kembalikan](https://code.claude.com/docs/id/mcp.md#images-in-tool-results) |

116| `projects/<project>/<session>/mcp-tasks/` | Apa yang dibutuhkan sesi yang dilanjutkan untuk kembali mengikuti [tugas MCP](https://code.claude.com/docs/id/mcp.md#mcp-tasks-that-run-on-the-server) yang sedang berjalan, dan hasil tugas yang telah selesai yang belum dibaca Claude |123| `projects/<project>/<session>/mcp-tasks/` | Apa yang dibutuhkan sesi yang dilanjutkan untuk kembali mengikuti [tugas MCP](https://code.claude.com/docs/id/mcp.md#mcp-tasks-that-run-on-the-server) yang sedang berjalan, dan hasil tugas yang telah selesai yang belum dibaca Claude |

117| `file-history/<session>/` | Snapshot pra-edit file yang Claude ubah, digunakan untuk [pemulihan checkpoint](https://code.claude.com/docs/id/checkpointing.md). Menyimpan snapshot untuk 100 checkpoint terbaru; file snapshot yang tidak direferensikan oleh checkpoint yang dipertahankan dihapus, kecuali snapshot pertama setiap file |124| `file-history/<session>/` | Snapshot pra-edit file yang Claude ubah, digunakan untuk [pemulihan checkpoint](https://code.claude.com/docs/id/checkpointing.md). Menyimpan snapshot untuk 100 checkpoint terbaru; file snapshot yang tidak direferensikan oleh checkpoint yang dipertahankan dihapus, kecuali snapshot pertama setiap file |

Details

6 6 

7> Instal plugin Claude Security untuk memindai basis kode Anda mencari kerentanan dalam sesi Claude Code dan ubah temuan menjadi patch yang Anda tinjau dan terapkan.7> Instal plugin Claude Security untuk memindai basis kode Anda mencari kerentanan dalam sesi Claude Code dan ubah temuan menjadi patch yang Anda tinjau dan terapkan.

8 8 

9Plugin Claude Security menjalankan pemindaian kerentanan multi-agen dari basis kode Anda di dalam sesi Claude Code. Sebuah tim agen Claude memetakan arsitektur Anda, membangun model ancaman, berburu kerentanan, dan secara independen meninjau setiap temuan sebelum menulis laporan. Gunakan plugin untuk memindai seluruh repositori atau [hanya serangkaian perubahan](#scan-only-your-changes), seperti diff cabang, diff permintaan tarik, atau komit tunggal, kemudian ubah temuan yang Anda pilih menjadi patch yang Anda tinjau dan terapkan sendiri.9Plugin Claude Security menjalankan pemindaian kerentanan multi-agent dari codebase Anda di dalam sesi Claude Code. [Secara default](#choose-a-scan-effort), saat Anda memindai seluruh repositori, agent Claude memetakan arsitektur Anda, membangun model ancaman, berburu kerentanan, dan secara independen meninjau setiap temuan sebelum menulis laporan.

10 

11Gunakan plugin untuk memindai seluruh repositori atau [hanya serangkaian perubahan](#scan-only-your-changes), seperti diff branch, diff pull request, atau satu commit, kemudian ubah temuan yang Anda pilih menjadi patch yang Anda tinjau dan terapkan sendiri.

10 12 

11Plugin berjalan secara lokal dalam sesi Anda, menggunakan [model mana pun yang Anda miliki akses di Claude Code](#models-and-providers), dan setiap pemindaian dihitung terhadap [penggunaan](https://code.claude.com/docs/id/costs.md) Anda. Jika Anda menginginkan layanan terkelola yang memantau repositori Anda, atau ingin menjalankan pemindaian pada [Claude Mythos](https://platform.claude.com/docs/en/about-claude/models/introducing-claude-fable-5-and-claude-mythos-5), lihat produk [Claude Security](https://claude.com/product/claude-security), tersedia di paket Enterprise.13Plugin berjalan secara lokal dalam sesi Anda, menggunakan [model mana pun yang Anda miliki akses di Claude Code](#models-and-providers), dan setiap pemindaian dihitung terhadap [penggunaan](https://code.claude.com/docs/id/costs.md) Anda. Jika Anda menginginkan layanan terkelola yang memantau repositori Anda, atau ingin menjalankan pemindaian pada [Claude Mythos](https://platform.claude.com/docs/en/about-claude/models/introducing-claude-fable-5-and-claude-mythos-5), lihat produk [Claude Security](https://claude.com/product/claude-security), tersedia di paket Enterprise.

12 14 


51 53 

52Setelah plugin aktif, Anda siap untuk [memindai dan memperbaiki basis kode Anda](#scan-and-fix-your-codebase).54Setelah plugin aktif, Anda siap untuk [memindai dan memperbaiki basis kode Anda](#scan-and-fix-your-codebase).

53 55 

56### Perbarui plugin

57 

58Untuk memperbarui plugin sendiri, lihat [Perbarui plugin sekarang](https://code.claude.com/docs/id/plugins/install.md#update-plugins-now). Claude Code juga [memperbarui plugin secara otomatis](https://code.claude.com/docs/id/plugins/install.md#keep-plugins-updated) kecuali pembaruan otomatis dinonaktifkan.

59 

54### Copot plugin60### Copot plugin

55 61 

56Untuk menghapus plugin, copot dari menu `/plugin`, atau jalankan `claude plugin uninstall claude-security` di terminal Anda.62Untuk menghapus plugin, copot dari menu `/plugin`, atau jalankan `claude plugin uninstall claude-security` di terminal Anda.


95 101 

96Di repositori besar, pindai satu area sekaligus alih-alih seluruh pohon. Pilih salah satu cakupan terfokus yang ditawarkan plugin, seperti lapisan API atau kode autentikasi Anda, dan pemindaian menyesuaikan cakupannya dengan apa yang Anda pilih. Bagian cakupan laporan menyatakan apa yang diperiksa dan tidak diperiksa. Jalankan pemindaian lain di area berbeda kapan saja.102Di repositori besar, pindai satu area sekaligus alih-alih seluruh pohon. Pilih salah satu cakupan terfokus yang ditawarkan plugin, seperti lapisan API atau kode autentikasi Anda, dan pemindaian menyesuaikan cakupannya dengan apa yang Anda pilih. Bagian cakupan laporan menyatakan apa yang diperiksa dan tidak diperiksa. Jalankan pemindaian lain di area berbeda kapan saja.

97 103 

104### Pilih upaya pemindaian

105 

106Upaya pemindaian menentukan seberapa dalam pemindaian dilakukan. Temuan Anda melalui verifikasi independen yang sama pada `low`, `medium`, dan `high`.

107 

108* **`low`**: tinjauan pertama yang cepat. Upaya ini melewati peta arsitektur dan model ancaman saat Anda memindai codebase Anda.

109* **`medium`**: default.

110* **`high`**: apa yang dilakukan `medium`, ditambah perburuan kerentanan yang lebih banyak dalam kode yang sama.

111 

112Sebutkan upaya pemindaian dalam permintaan Anda di prompt Claude Code, seperti `/claude-security scan my public API code at high` atau `/claude-security scan my branch at high`.

113 

114Jika pemindaian repositori besar menemukan lebih sedikit dari yang Anda harapkan, pilih upaya pemindaian `high`, lakukan pemindaian kedua kalinya, atau lakukan keduanya. Masing-masing dapat melaporkan temuan yang tidak dilaporkan oleh satu pemindaian `medium`.

115 

98### Baca hasil pemindaian116### Baca hasil pemindaian

99 117 

100Setiap pemindaian menulis hasilnya ke direktori `CLAUDE-SECURITY-<timestamp>/` dengan stempel waktu di repositori Anda:118Setiap pemindaian menulis hasilnya ke direktori `CLAUDE-SECURITY-<timestamp>/` dengan stempel waktu di repositori Anda:


102* **`CLAUDE-SECURITY-RESULTS.md`**: laporan, dengan ID setiap temuan, seperti `F1`, ditambah dampak, skenario eksploitasi, keparahan, kepercayaan diri, dan rekomendasi120* **`CLAUDE-SECURITY-RESULTS.md`**: laporan, dengan ID setiap temuan, seperti `F1`, ditambah dampak, skenario eksploitasi, keparahan, kepercayaan diri, dan rekomendasi

103* **`CLAUDE-SECURITY-RESULTS.jsonl`**: temuan yang sama dalam bentuk yang dapat dibaca mesin, satu objek JSON per baris121* **`CLAUDE-SECURITY-RESULTS.jsonl`**: temuan yang sama dalam bentuk yang dapat dibaca mesin, satu objek JSON per baris

104* **`CLAUDE-SECURITY-RESULTS.sarif`**: temuan yang sama sebagai log [SARIF 2.1.0](https://docs.oasis-open.org/sarif/sarif/v2.1.0/sarif-v2.1.0.html) untuk pemindaian kode GitHub dan alat lain yang membaca standar. Pemindaian mengklasifikasikan temuan di bawah kategori kelemahan [CWE](https://cwe.mitre.org/) mereka122* **`CLAUDE-SECURITY-RESULTS.sarif`**: temuan yang sama sebagai log [SARIF 2.1.0](https://docs.oasis-open.org/sarif/sarif/v2.1.0/sarif-v2.1.0.html) untuk pemindaian kode GitHub dan alat lain yang membaca standar. Pemindaian mengklasifikasikan temuan di bawah kategori kelemahan [CWE](https://cwe.mitre.org/) mereka

105* **`CLAUDE-SECURITY-REVISION-<commit>.json`**: stempel revisi, mencatat komit mana yang dipindai, dengan upaya apa, apakah perubahan yang tidak berkomit adalah bagian dari pohon yang dipindai, dan seberapa menyeluruh jalannya pemindaian diverifikasi, sehingga laporan selalu terikat pada kode yang dijelaskannya. Pemindaian di luar kontrol versi memberi stempel `UNVERSIONED` sebagai pengganti komit123* **`CLAUDE-SECURITY-REVISION-<commit>.json`**: stempel revisi, mencatat commit mana yang dipindai, pada [upaya pemindaian](#choose-a-scan-effort) apa, apakah perubahan yang belum di-commit merupakan bagian dari pohon yang dipindai, dan seberapa menyeluruh eksekusi diverifikasi, sehingga laporan selalu terikat pada kode yang dijelaskannya. Pemindaian di luar kontrol versi memberi stempel `UNVERSIONED` sebagai pengganti commit

106 124 

107Direktori itu adalah satu-satunya perubahan yang dibuat pemindaian pada checkout Anda, dan membawa `.gitignore` sendiri, sehingga `git add` yang tersesat tidak pernah menyapu laporan ke dalam komit. Untuk menyimpan laporan dalam riwayat untuk jejak audit, hapus satu file `.gitignore` itu dan komit direktori seperti yang lain.125Direktori itu adalah satu-satunya perubahan yang dibuat pemindaian pada checkout Anda, dan membawa `.gitignore` sendiri, sehingga `git add` yang tersesat tidak pernah menyapu laporan ke dalam komit. Untuk menyimpan laporan dalam riwayat untuk jejak audit, hapus satu file `.gitignore` itu dan komit direktori seperti yang lain.

108 126 

desktop.md +64 −0

Details

994* **Shell**: shell yang diatur untuk akun Anda di mesin jarak jauh harus dapat menjalankan perintah yang dikirim melalui SSH, seperti yang dilakukan Bash, Zsh, dan `sh`994* **Shell**: shell yang diatur untuk akun Anda di mesin jarak jauh harus dapat menjalankan perintah yang dikirim melalui SSH, seperti yang dilakukan Bash, Zsh, dan `sh`

995* **Jaringan**: Claude Code berjalan di mesin jarak jauh dan membuat permintaan jaringannya dari sana, sehingga mesin tersebut memerlukan [akses jaringan yang dibutuhkan Claude Code](https://code.claude.com/docs/id/network-config.md#network-access-requirements). Jika mesin tidak dapat mengunduh Claude Code, Desktop mengunduhnya di komputer Anda dan mengunggahnya. Permintaan Claude Code lainnya tetap dikirim dari mesin jarak jauh. Di mesin jarak jauh Linux, jika permintaan tersebut memerlukan proxy, [atur proxy tersebut untuk sesi SSH](#set-a-proxy-or-a-ca-certificate-for-ssh-sessions).995* **Jaringan**: Claude Code berjalan di mesin jarak jauh dan membuat permintaan jaringannya dari sana, sehingga mesin tersebut memerlukan [akses jaringan yang dibutuhkan Claude Code](https://code.claude.com/docs/id/network-config.md#network-access-requirements). Jika mesin tidak dapat mengunduh Claude Code, Desktop mengunduhnya di komputer Anda dan mengunggahnya. Permintaan Claude Code lainnya tetap dikirim dari mesin jarak jauh. Di mesin jarak jauh Linux, jika permintaan tersebut memerlukan proxy, [atur proxy tersebut untuk sesi SSH](#set-a-proxy-or-a-ca-certificate-for-ssh-sessions).

996 996 

997#### Memeriksa host key mesin jarak jauh

998 

999Host key adalah kunci yang ditunjukkan mesin jarak jauh untuk membuktikan identitasnya, dan fingerprint adalah bentuk singkat dari kunci tersebut. Saat Anda memercayai sebuah kunci, komputer Anda menyimpannya dan terhubung ke apa pun yang menunjukkannya, tanpa bertanya lagi. Periksa kunci sebelum Anda memercayainya, karena mungkin ada sesuatu yang mencegat koneksi.

1000 

1001Pertama, cari tahu mesin mana pemilik kunci tersebut, berdasarkan tempat Anda melihat fingerprint:

1002 

1003* **Desktop bertanya `Connect to <host> for the first time?`, atau Anda memilih Review new key**: mesin yang disebutkan Desktop, `<host>`

1004* **Desktop bertanya `Connect through <jump host> for the first time?`**: jump host, yaitu mesin yang dilalui koneksi Anda, bukan mesin yang ingin Anda jangkau

1005* **`ssh` bertanya atau memperingatkan di terminal**: mesin yang disebutkan dalam pesannya, yang mungkin bukan mesin yang Anda ketik

1006 

1007Dapatkan fingerprint mesin tersebut dari mesin itu sendiri, bukan melalui koneksi yang sedang Anda periksa:

1008 

1009* **Orang lain mengelola mesin tersebut**: minta fingerprint host key-nya kepada mereka

1010* **Anda mengelolanya, dan mesin menjalankan Linux atau macOS**: jalankan `ssh-keygen -lf /etc/ssh/ssh_host_<type>_key.pub` di mesin tersebut, di konsolnya atau melalui koneksi yang sudah Anda percayai. Untuk `<type>`, gunakan jenis kunci yang ditampilkan Desktop atau `ssh` di samping fingerprint, dalam huruf kecil: `ed25519` untuk `ED25519` atau `ssh-ed25519`.

1011 

1012Kemudian bandingkan fingerprint mesin itu sendiri dengan yang ditunjukkan kepada Anda:

1013 

1014* **Keduanya cocok**: percayai kunci tersebut. Pilih **Trust and connect** atau **Trust new key** di Desktop, atau jawab `yes` di terminal.

1015* **Keduanya berbeda, atau Anda tidak dapat memeriksanya**: jangan terhubung. Pilih **Cancel** di Desktop, atau jawab `no` di terminal. Jika orang lain mengelola mesin tersebut, beri tahu mereka fingerprint yang ditunjukkan kepada Anda.

1016 

1017Jika langkah pemecahan masalah mengarahkan Anda ke sini, kembali ke langkah tersebut setelah hasil mana pun.

1018 

997#### Mengatur proxy atau sertifikat CA untuk sesi SSH1019#### Mengatur proxy atau sertifikat CA untuk sesi SSH

998 1020 

999Jika mesin jarak jauh Linux menjangkau internet melalui proxy atau memerlukan sertifikat CA, tambahkan [variabel proxy dan CA](https://code.claude.com/docs/id/network-config.md) di bawah `env` di `~/.claude/settings.json` pada mesin tersebut. Tambahkan variabel tersebut meskipun Anda sudah mengekspornya di `~/.profile`, `~/.bash_profile`, `~/.zprofile`, atau `~/.zshrc` di mesin tersebut.1021Jika mesin jarak jauh Linux menjangkau internet melalui proxy atau memerlukan sertifikat CA, tambahkan [variabel proxy dan CA](https://code.claude.com/docs/id/network-config.md) di bawah `env` di `~/.claude/settings.json` pada mesin tersebut. Tambahkan variabel tersebut meskipun Anda sudah mengekspornya di `~/.profile`, `~/.bash_profile`, `~/.zprofile`, atau `~/.zshrc` di mesin tersebut.


2135 2157 

2136Jika toggle MCP server tidak merespons atau server gagal terhubung di Windows, periksa bahwa server dikonfigurasi dengan benar di pengaturan Anda, mulai ulang aplikasi, verifikasi proses server berjalan di Task Manager, dan tinjau log server untuk kesalahan koneksi.2158Jika toggle MCP server tidak merespons atau server gagal terhubung di Windows, periksa bahwa server dikonfigurasi dengan benar di pengaturan Anda, mulai ulang aplikasi, verifikasi proses server berjalan di Task Manager, dan tinjau log server untuk kesalahan koneksi.

2137 2159 

2160### SSH host key verification failed

2161 

2162Setiap pesan berikut berarti Desktop menolak sebuah [host key](#check-a-remote-machines-host-key):

2163 

2164* `SSH host key verification failed` atau `Host denied (verification failed)` di bawah **View details** pada kartu `Couldn't connect to <host>`

2165* `Connection failed: Host key changed or not trusted` di dekat kotak prompt atau setelah **Test connection**

2166* `<host>'s host key is not trusted` atau `<host>'s host key has changed` pada sesi yang terputus

2167 

2168Desktop biasanya menolak sebuah key karena key tersebut berbeda dari key yang tersimpan di komputer Anda, atau karena tidak ada key yang tersimpan untuk mesin tersebut. Mesin yang dibangun ulang atau diinstal ulang biasanya menampilkan key baru, begitu pula sesuatu yang mencegat koneksi. Periksa key sebelum Anda terhubung lagi, dimulai dari apa yang ditampilkan Desktop bersama pesan tersebut:

2169 

2170* **Anda menggunakan Windows, dan Desktop menampilkan `Connection failed: Host key changed or not trusted`**: pertama-tama pastikan masalahnya bukan [klien OpenSSH yang tidak ada](#ssh-host-key-refused-on-windows-without-an-openssh-client)

2171* **Desktop meminta Anda mengatur `UserKnownHostsFile`**: di `~/.ssh/config`, atur nilainya ke `~/.ssh/known_hosts`, lalu [periksa key dari terminal](#check-the-host-key-from-a-terminal)

2172* **Anda melihat tombol Review new key**: pilih tombol tersebut, lalu [bandingkan](#check-a-remote-machines-host-key) fingerprint yang ditampilkan Desktop dengan fingerprint milik mesin itu sendiri. Jika cocok, pilih **Trust new key** untuk mengganti key yang tersimpan. Jika tidak, pilih **Cancel**.

2173* **Anda tidak melihat tombol Review new key, Desktop menampilkan `Couldn't show the new key`, atau Desktop menolak key lagi setelah Trust new key**: [periksa key dari terminal](#check-the-host-key-from-a-terminal)

2174 

2175#### Check the host key from a terminal

2176 

2177Jalankan `ssh <SSH host>` di komputer Anda, dengan nilai **SSH host** dari [koneksi SSH](#ssh-sessions) Anda di Desktop. Tambahkan `-p <SSH port>` jika koneksi memiliki nilai **SSH port**. Di Windows, gunakan PowerShell, karena Desktop tidak terhubung menggunakan `ssh` di Git Bash atau WSL. Jika PowerShell tidak menemukan `ssh`, [instal klien OpenSSH dari Microsoft](#ssh-host-key-refused-on-windows-without-an-openssh-client).

2178 

2179Perhatikan mesin mana yang disebutkan `ssh` dalam pesannya, yang bisa jadi merupakan jump host dan bukan `<SSH host>`, lalu ikuti kasus yang sesuai:

2180 

2181* **`ssh` menanyakan apakah akan melanjutkan koneksi**: [bandingkan](#check-a-remote-machines-host-key) fingerprint yang ditampilkannya dengan fingerprint milik mesin tersebut. Jawab `yes` hanya jika keduanya cocok.

2182* **`ssh` memperingatkan bahwa host key telah berubah**: [bandingkan](#check-a-remote-machines-host-key) fingerprint dalam peringatan dengan fingerprint milik mesin tersebut. Hanya jika keduanya cocok, hapus baris yang disebutkan oleh `Offending <type> key in <file>:<line>` dan jalankan ulang `ssh`. Jika `ssh` memperingatkan lagi tentang baris lain, bandingkan, hapus, dan jalankan ulang seperti sebelumnya.

2183* **`ssh` menolak key yang tidak dikenalinya, tanpa bertanya**: dapatkan baris `known_hosts` mesin tersebut dari pihak yang mengelolanya, bukan melalui koneksi yang sedang Anda periksa. Tambahkan baris tersebut ke file `known_hosts` Anda, dengan nama dari pesan `ssh` sebagai nama host-nya, lalu jalankan ulang `ssh`.

2184* **`ssh` langsung melanjutkan proses masuk tanpa menanyakan host key kepada Anda**: jangan ketik kata sandi dulu. [Periksa key yang sudah dipercaya oleh `ssh`](#check-the-keys-that-ssh-already-trusts).

2185 

2186Setelah `ssh` menerima key yang telah Anda periksa atau tambahkan, coba lagi di Desktop. Jika Desktop menolak key lagi, lihat [Get Desktop's logs for an SSH problem](#get-desktops-logs-for-an-ssh-problem).

2187 

2188##### Check the keys that `ssh` already trusts

2189 

2190Jalankan ulang perintah `ssh` yang sama dengan menambahkan `-v -S none`. Dalam output-nya, baris `Server host key:` menampilkan sebuah fingerprint, dan baris `Host '<name>' is known` berikutnya menyebutkan mesin pemilik fingerprint tersebut. [Bandingkan](#check-a-remote-machines-host-key) setiap fingerprint yang Anda temukan dengan fingerprint milik mesin tersebut.

2191 

2192* **Sebuah jump host tidak memiliki baris `Server host key:`**: jalankan juga `ssh -v -S none <jump host>`, dan bandingkan fingerprint tersebut dengan cara yang sama.

2193* **Sebuah fingerprint tidak cocok, atau Anda tidak dapat memeriksanya**: jangan terhubung lagi. Hapus key yang tersimpan: di bawah `Host '<name>' is known`, baris `Found key in <file>:<line>` menyebutkan file yang menyimpannya. Jalankan `ssh-keygen -R "<name>" -f <file>`. Jika Anda menyimpan host key di lebih dari satu file, hapus key dari setiap file. Jika Anda tidak dapat mengubah sebuah file, beri tahu pihak yang mengelola komputer Anda.

2194* **Setiap fingerprint cocok**: coba lagi di Desktop. Jika Desktop menolak key lagi, lihat [Get Desktop's logs for an SSH problem](#get-desktops-logs-for-an-ssh-problem).

2195 

2196### SSH host key refused on Windows without an OpenSSH client

2197 

2198Di Windows tanpa klien OpenSSH, Desktop menolak bahkan host key yang benar, dengan pesan `Connection failed: Host key changed or not trusted`. Desktop memerlukan klien tersebut untuk mencari key yang tersimpan. Untuk melihat apakah Anda memilikinya, jalankan `ssh` di PowerShell. Jika PowerShell tidak mengenali `ssh`, instal [klien OpenSSH dari Microsoft](https://learn.microsoft.com/windows-server/administration/openssh/openssh_install_firstuse) dan mulai ulang Desktop.

2199 

2200Lalu hubungkan lagi. Jika Desktop menanyakan apakah akan terhubung untuk pertama kalinya, [periksa host key mesin tersebut](#check-a-remote-machines-host-key) sebelum Anda mempercayainya. Jika Desktop masih menolak key, ikuti kasus lainnya di bawah [SSH host key verification failed](#ssh-host-key-verification-failed).

2201 

2138### SSH connection fails after you log in2202### SSH connection fails after you log in

2139 2203 

2140Temukan judul kartu, atau kode yang mengakhiri pesan kesalahan, di tabel ini, lalu lakukan apa yang disebutkan di kolom terakhir. Untuk melihat pesannya, pilih **View details** pada kartu kegagalan.2204Temukan judul kartu, atau kode yang mengakhiri pesan kesalahan, di tabel ini, lalu lakukan apa yang disebutkan di kolom terakhir. Untuk melihat pesannya, pilih **View details** pada kartu kegagalan.

env-vars.md +2 −2

Details

236| `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` | Tetapkan ke `1` untuk menghapus parameter `run_in_background` dari tool Bash, PowerShell, dan subagent serta untuk menonaktifkan pintasan Ctrl+B dan proses latar belakang dari [skill yang di-fork](https://code.claude.com/docs/id/skills.md#run-skills-in-a-subagent). Claude Code kemudian juga berhenti memindahkan subagent, panggilan tool MCP yang lama, dan perintah shell yang mengalami timeout ke latar belakang secara otomatis. [Tugas MCP](https://code.claude.com/docs/id/mcp.md#make-claude-wait-for-the-result-of-an-mcp-task) dan [tool Monitor](https://code.claude.com/docs/id/tools-reference.md#monitor-tool) tetap berjalan di latar belakang |236| `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` | Tetapkan ke `1` untuk menghapus parameter `run_in_background` dari tool Bash, PowerShell, dan subagent serta untuk menonaktifkan pintasan Ctrl+B dan proses latar belakang dari [skill yang di-fork](https://code.claude.com/docs/id/skills.md#run-skills-in-a-subagent). Claude Code kemudian juga berhenti memindahkan subagent, panggilan tool MCP yang lama, dan perintah shell yang mengalami timeout ke latar belakang secara otomatis. [Tugas MCP](https://code.claude.com/docs/id/mcp.md#make-claude-wait-for-the-result-of-an-mcp-task) dan [tool Monitor](https://code.claude.com/docs/id/tools-reference.md#monitor-tool) tetap berjalan di latar belakang |

237| `CLAUDE_CODE_DISABLE_BEDROCK_CONTENT_TYPE_DEFAULT` | Tetapkan ke `1` untuk menghentikan Claude Code memperlakukan respons streaming [Amazon Bedrock](https://code.claude.com/docs/id/amazon-bedrock.md) dengan header `Content-Type` yang hilang atau kosong sebagai event stream biner Amazon Bedrock. Secara default, Claude Code mengasumsikan gateway menghapus header dari respons yang selain itu tidak dimodifikasi, sehingga Claude Code mendekode body dan streaming tetap berfungsi. Tetapkan ini hanya untuk gateway yang juga memancarkan ulang stream sebagai server-sent events; Claude Code kemudian membaca body tanpa header sebagai server-sent events. Memerlukan Claude Code v2.1.239 atau yang lebih baru |237| `CLAUDE_CODE_DISABLE_BEDROCK_CONTENT_TYPE_DEFAULT` | Tetapkan ke `1` untuk menghentikan Claude Code memperlakukan respons streaming [Amazon Bedrock](https://code.claude.com/docs/id/amazon-bedrock.md) dengan header `Content-Type` yang hilang atau kosong sebagai event stream biner Amazon Bedrock. Secara default, Claude Code mengasumsikan gateway menghapus header dari respons yang selain itu tidak dimodifikasi, sehingga Claude Code mendekode body dan streaming tetap berfungsi. Tetapkan ini hanya untuk gateway yang juga memancarkan ulang stream sebagai server-sent events; Claude Code kemudian membaca body tanpa header sebagai server-sent events. Memerlukan Claude Code v2.1.239 atau yang lebih baru |

238| `CLAUDE_CODE_DISABLE_BEDROCK_CONTENT_TYPE_GUARD` | Tetapkan ke `1` untuk melewati pemeriksaan bahwa respons streaming [Amazon Bedrock](https://code.claude.com/docs/id/amazon-bedrock.md) membawa content-type `application/vnd.amazon.eventstream`. Tanpa variabel ini, ketika respons membawa content-type yang berbeda, Claude Code menggagalkan permintaan dengan error yang menyebutkan tipe tersebut, yang berarti [gateway atau proxy sedang mentransformasi respons](https://code.claude.com/docs/id/amazon-bedrock.md#streaming-errors-behind-a-gateway-or-proxy). Konfigurasikan gateway untuk meneruskan header `Content-Type` dan body tanpa modifikasi daripada menetapkan variabel ini. Memerlukan Claude Code v2.1.208 atau yang lebih baru |238| `CLAUDE_CODE_DISABLE_BEDROCK_CONTENT_TYPE_GUARD` | Tetapkan ke `1` untuk melewati pemeriksaan bahwa respons streaming [Amazon Bedrock](https://code.claude.com/docs/id/amazon-bedrock.md) membawa content-type `application/vnd.amazon.eventstream`. Tanpa variabel ini, ketika respons membawa content-type yang berbeda, Claude Code menggagalkan permintaan dengan error yang menyebutkan tipe tersebut, yang berarti [gateway atau proxy sedang mentransformasi respons](https://code.claude.com/docs/id/amazon-bedrock.md#streaming-errors-behind-a-gateway-or-proxy). Konfigurasikan gateway untuk meneruskan header `Content-Type` dan body tanpa modifikasi daripada menetapkan variabel ini. Memerlukan Claude Code v2.1.208 atau yang lebih baru |

239| `CLAUDE_CODE_DISABLE_BG_EXIT_HANDOFF` | Tetapkan ke `1` untuk menghentikan pekerjaan yang sedang berjalan pada [sesi latar belakang](https://code.claude.com/docs/id/agent-view.md) ketika [supervisor](https://code.claude.com/docs/id/agent-view.md#the-supervisor-process) menghentikan, memulai ulang, atau memperbarui proses sesi tersebut, alih-alih menyerahkannya ke proses sesi berikutnya. Pekerjaan tersebut adalah perintah shell latar belakang dan workflow dinamis yang sedang berjalan dalam sesi, ditambah subagent latar belakang sejak v2.1.198. Hanya memengaruhi penyerahan tersebut: memindahkan sesi ke latar belakang dengan `←` atau [`/background`](https://code.claude.com/docs/id/agent-view#from-inside-a-session) tetap membawa pekerjaan latar belakang yang sedang berjalan. Memerlukan Claude Code v2.1.196 atau yang lebih baru |239| `CLAUDE_CODE_DISABLE_BG_EXIT_HANDOFF` | Tetapkan ke `1` untuk menghentikan pekerjaan yang sedang berlangsung dari [sesi latar belakang](https://code.claude.com/docs/id/agent-view.md) ketika [supervisor](https://code.claude.com/docs/id/agent-view.md#the-supervisor-process) menghentikan, memulai ulang, atau memperbarui proses sesi tersebut, alih-alih menyerahkannya ke proses berikutnya dari sesi tersebut. Pekerjaan tersebut adalah perintah shell latar belakang yang sedang berjalan dari sesi, ditambah subagent latar belakang mulai v2.1.198. Hanya memengaruhi penyerahan tersebut: memindahkan sesi ke latar belakang dengan `←` atau [`/background`](https://code.claude.com/docs/id/agent-view#from-inside-a-session) tetap membawa pekerjaan latar belakang yang sedang berlangsung. Memerlukan Claude Code v2.1.196 atau lebih baru |

240| `CLAUDE_CODE_DISABLE_BG_SHELL_PRESSURE_REAP` | Tetapkan ke `1` untuk menghentikan Claude Code mengakhiri [perintah shell latar belakang](https://code.claude.com/docs/id/interactive-mode.md#background-bash-commands) saat tekanan memori. Secara default, di macOS dan Linux, Claude Code mengakhiri shell latar belakang ketika sistem operasi melaporkan tekanan memori kritis dan sesi telah idle selama 30 menit tanpa giliran atau subagent yang berjalan. Windows tidak memiliki sinyal tekanan memori, sehingga variabel ini tidak berpengaruh di sana. Memerlukan Claude Code v2.1.193 atau yang lebih baru |240| `CLAUDE_CODE_DISABLE_BG_SHELL_PRESSURE_REAP` | Tetapkan ke `1` untuk menghentikan Claude Code mengakhiri [perintah shell latar belakang](https://code.claude.com/docs/id/interactive-mode.md#background-bash-commands) saat tekanan memori. Secara default, di macOS dan Linux, Claude Code mengakhiri shell latar belakang ketika sistem operasi melaporkan tekanan memori kritis dan sesi telah idle selama 30 menit tanpa giliran atau subagent yang berjalan. Windows tidak memiliki sinyal tekanan memori, sehingga variabel ini tidak berpengaruh di sana. Memerlukan Claude Code v2.1.193 atau yang lebih baru |

241| `CLAUDE_CODE_DISABLE_BUNDLED_SKILLS` | Tetapkan ke `1` untuk menonaktifkan [skill](https://code.claude.com/docs/id/skills.md) dan workflow yang disertakan dengan Claude Code: skill bawaan dan workflow dihapus seluruhnya, sementara perintah bawaan seperti `/init` tetap dapat diketik tetapi disembunyikan dari model. `/doctor` tetap dapat diketik seperti perintah bawaan; sembunyikan dengan `DISABLE_DOCTOR_COMMAND` sebagai gantinya. Skill dari plugin, `.claude/skills/`, dan `.claude/commands/` tidak terpengaruh. Setara dengan pengaturan [`disableBundledSkills`](https://code.claude.com/docs/id/settings-reference#disablebundledskills) |241| `CLAUDE_CODE_DISABLE_BUNDLED_SKILLS` | Tetapkan ke `1` untuk menonaktifkan [skill](https://code.claude.com/docs/id/skills.md) dan workflow yang disertakan dengan Claude Code: skill bawaan dan workflow dihapus seluruhnya, sementara perintah bawaan seperti `/init` tetap dapat diketik tetapi disembunyikan dari model. `/doctor` tetap dapat diketik seperti perintah bawaan; sembunyikan dengan `DISABLE_DOCTOR_COMMAND` sebagai gantinya. Skill dari plugin, `.claude/skills/`, dan `.claude/commands/` tidak terpengaruh. Setara dengan pengaturan [`disableBundledSkills`](https://code.claude.com/docs/id/settings-reference#disablebundledskills) |

242| `CLAUDE_CODE_DISABLE_CFC_PROMPT` | Tetapkan ke `1` agar tool browser [Claude in Chrome](https://code.claude.com/docs/id/chrome.md) tetap tersedia sambil menghilangkan bagian Chrome dari system prompt dan [skill bawaan](https://code.claude.com/docs/id/skills.md#bundled-skills) `/claude-in-chrome`. Untuk host yang menyematkan Claude Code dan menyediakan panduan browser mereka sendiri. Memerlukan Claude Code v2.1.257 atau yang lebih baru |242| `CLAUDE_CODE_DISABLE_CFC_PROMPT` | Tetapkan ke `1` agar tool browser [Claude in Chrome](https://code.claude.com/docs/id/chrome.md) tetap tersedia sambil menghilangkan bagian Chrome dari system prompt dan [skill bawaan](https://code.claude.com/docs/id/skills.md#bundled-skills) `/claude-in-chrome`. Untuk host yang menyematkan Claude Code dan menyediakan panduan browser mereka sendiri. Memerlukan Claude Code v2.1.257 atau yang lebih baru |

243| `CLAUDE_CODE_DISABLE_CLAUDE_MDS` | Tetapkan ke `1` untuk mencegah pemuatan file memori CLAUDE.md apa pun ke dalam konteks, termasuk file memori pengguna, proyek, dan auto memory |243| `CLAUDE_CODE_DISABLE_CLAUDE_MDS` | Tetapkan ke `1` untuk mencegah pemuatan file memori CLAUDE.md apa pun ke dalam konteks, termasuk file memori pengguna, proyek, dan auto memory |

244| `CLAUDE_CODE_DISABLE_CRON` | Tetapkan ke `1` untuk menonaktifkan [tugas terjadwal yang dicakupkan ke sesi](https://code.claude.com/docs/id/scheduled-tasks.md). Skill `/loop` dan tool cron menjadi tidak tersedia dan tugas apa pun yang sudah dijadwalkan berhenti dipicu, termasuk tugas yang sudah berjalan di tengah sesi |244| `CLAUDE_CODE_DISABLE_CRON` | Tetapkan ke `1` untuk menonaktifkan [tugas terjadwal yang dicakupkan ke sesi](https://code.claude.com/docs/id/scheduled-tasks.md). Skill `/loop` dan tool cron menjadi tidak tersedia dan tugas apa pun yang sudah dijadwalkan berhenti dipicu, termasuk tugas yang sudah berjalan di tengah sesi |

245| `CLAUDE_CODE_DISABLE_DANGEROUS_RM_TIMEOUT` | Tetapkan ke `1` untuk menonaktifkan batas waktu pada permintaan izin [penghapusan path kritis](https://code.claude.com/docs/id/permission-modes.md#critical-paths). Dalam mode `auto`, Claude Code kemudian mengirim penghapusan ini ke pengklasifikasi, dan dalam mode `bypassPermissions` permintaan izin menunggu jawaban Anda. Tetapkan di lingkungan yang menjalankan Claude Code, karena Claude Code mengabaikan salinan yang dikirimkan melalui blok `env` pengaturan. Memerlukan Claude Code v2.1.281 atau yang lebih baru |245| `CLAUDE_CODE_DISABLE_DANGEROUS_RM_TIMEOUT` | Tetapkan ke `1` untuk mematikan [batas waktu dan penolakan](https://code.claude.com/docs/id/permission-modes.md#time-limits-and-denials-in-auto-and-bypasspermissions-modes) `auto` dan `bypassPermissions` pada penghapusan path kritis. Penghapusan ini kemudian dikirim ke pengklasifikasi dalam mode `auto`, dan mendapatkan permintaan izin tanpa batas waktu dalam mode `bypassPermissions` di mana pun Claude Code dapat menampilkannya. Tetapkan di lingkungan yang menjalankan Claude Code, karena Claude Code mengabaikan salinan yang dikirim melalui blok `env` pengaturan. Memerlukan Claude Code v2.1.281 atau yang lebih baru |

246| `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS` | Tetapkan ke `1` untuk menghapus header permintaan `anthropic-beta` pra-rilis, field body yang berpasangan dengannya, dan field skema tool beta seperti `defer_loading` dan `eager_input_streaming` dari permintaan API. Gunakan ini ketika gateway proxy menolak permintaan dengan error `Unexpected value(s)` untuk header `anthropic-beta` atau error `Extra inputs are not permitted`. [Menonaktifkan kemampuan pra-rilis](https://code.claude.com/docs/id/llm-gateway-protocol.md#disable-pre-release-capabilities) mencantumkan apa yang dihapus oleh variabel ini, termasuk [MCP Tool Search](https://code.claude.com/docs/id/mcp.md#scale-with-mcp-tool-search), dan apa yang tetap dikirim Claude Code |246| `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS` | Tetapkan ke `1` untuk menghapus header permintaan `anthropic-beta` pra-rilis, field body yang berpasangan dengannya, dan field skema tool beta seperti `defer_loading` dan `eager_input_streaming` dari permintaan API. Gunakan ini ketika gateway proxy menolak permintaan dengan error `Unexpected value(s)` untuk header `anthropic-beta` atau error `Extra inputs are not permitted`. [Menonaktifkan kemampuan pra-rilis](https://code.claude.com/docs/id/llm-gateway-protocol.md#disable-pre-release-capabilities) mencantumkan apa yang dihapus oleh variabel ini, termasuk [MCP Tool Search](https://code.claude.com/docs/id/mcp.md#scale-with-mcp-tool-search), dan apa yang tetap dikirim Claude Code |

247| `CLAUDE_CODE_DISABLE_EXPLORE_PLAN_AGENTS` | Tetapkan ke `1` untuk menonaktifkan [subagent Explore dan Plan](https://code.claude.com/docs/id/sub-agents.md#built-in-subagents) bawaan. Claude melakukan eksplorasi dengan tool pencariannya atau subagent general-purpose, dan [plan mode](https://code.claude.com/docs/id/permission-modes.md#analyze-before-you-edit-with-plan-mode) membaca file secara langsung alih-alih meluncurkan agent Explore dan Plan. Subagent kustom bernama `Explore` atau `Plan` tidak terpengaruh. Untuk menghapus setiap tipe subagent bawaan di Agent SDK atau mode non-interaktif, gunakan `CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS` sebagai gantinya. Memerlukan Claude Code v2.1.198 atau yang lebih baru |247| `CLAUDE_CODE_DISABLE_EXPLORE_PLAN_AGENTS` | Tetapkan ke `1` untuk menonaktifkan [subagent Explore dan Plan](https://code.claude.com/docs/id/sub-agents.md#built-in-subagents) bawaan. Claude melakukan eksplorasi dengan tool pencariannya atau subagent general-purpose, dan [plan mode](https://code.claude.com/docs/id/permission-modes.md#analyze-before-you-edit-with-plan-mode) membaca file secara langsung alih-alih meluncurkan agent Explore dan Plan. Subagent kustom bernama `Explore` atau `Plan` tidak terpengaruh. Untuk menghapus setiap tipe subagent bawaan di Agent SDK atau mode non-interaktif, gunakan `CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS` sebagai gantinya. Memerlukan Claude Code v2.1.198 atau yang lebih baru |

248| `CLAUDE_CODE_DISABLE_FAST_MODE` | Tetapkan ke `1` untuk menonaktifkan [fast mode](https://code.claude.com/docs/id/fast-mode.md) |248| `CLAUDE_CODE_DISABLE_FAST_MODE` | Tetapkan ke `1` untuk menonaktifkan [fast mode](https://code.claude.com/docs/id/fast-mode.md) |

errors.md +36 −4

Details

244| `MCP server "<name>" was not saved to` / `was not removed from` | [Command-line errors](#mcp-server-was-not-saved-or-removed) |244| `MCP server "<name>" was not saved to` / `was not removed from` | [Command-line errors](#mcp-server-was-not-saved-or-removed) |

245| `MCP server "<name>" may not have been saved` / `may not have been removed` | [Command-line errors](#mcp-server-may-not-have-been-saved-or-removed) |245| `MCP server "<name>" may not have been saved` / `may not have been removed` | [Command-line errors](#mcp-server-may-not-have-been-saved-or-removed) |

246| `Server rejected the Authorization header minted by the configured headersHelper` | [Command-line errors](#server-rejected-the-authorization-header-minted-by-the-configured-headershelper) |246| `Server rejected the Authorization header minted by the configured headersHelper` | [Command-line errors](#server-rejected-the-authorization-header-minted-by-the-configured-headershelper) |

247| `This server (Java MCP SDK 0.17.0 or older) rejected Claude Code's elicitation capability` | [Error baris perintah](#mcp-server-rejected-the-elicitation-capability) |

247| `Error: MCP tool <name> (passed via --permission-prompt-tool) not found` | [Command-line errors](#mcp-permission-prompt-tool-not-found) |248| `Error: MCP tool <name> (passed via --permission-prompt-tool) not found` | [Command-line errors](#mcp-permission-prompt-tool-not-found) |

248| `OAuth callback port <port> is already in use — another process may be holding it` | [Command-line errors](#oauth-callback-port-is-already-in-use) |249| `OAuth callback port <port> is already in use — another process may be holding it` | [Command-line errors](#oauth-callback-port-is-already-in-use) |

249| `No available ports for OAuth redirect` | [Command-line errors](#no-available-ports-for-oauth-redirect) |250| `No available ports for OAuth redirect` | [Command-line errors](#no-available-ports-for-oauth-redirect) |


3280* **`Error: Workspace not trusted. <folder> is your home directory`**: karena kepercayaan untuk direktori home Anda tidak pernah disimpan, menjalankan `claude` di sana terlebih dahulu tidak dapat membantu. Jalankan `claude ultrareview` dari direktori proyek sebagai gantinya, setelah menjalankan `claude` di sana sekali untuk menerima dialog kepercayaan, atau tambahkan `--trust-workspace`.3281* **`Error: Workspace not trusted. <folder> is your home directory`**: karena kepercayaan untuk direktori home Anda tidak pernah disimpan, menjalankan `claude` di sana terlebih dahulu tidak dapat membantu. Jalankan `claude ultrareview` dari direktori proyek sebagai gantinya, setelah menjalankan `claude` di sana sekali untuk menerima dialog kepercayaan, atau tambahkan `--trust-workspace`.

3281* **`No answer in time.` diikuti `Error: Workspace not trusted`**: pertanyaan `Trust <folder>? [y/N]` tidak dijawab selama 5 menit. Jalankan `claude ultrareview` lagi dan jawab pertanyaan tersebut.3282* **`No answer in time.` diikuti `Error: Workspace not trusted`**: pertanyaan `Trust <folder>? [y/N]` tidak dijawab selama 5 menit. Jalankan `claude ultrareview` lagi dan jawab pertanyaan tersebut.

3282* **`Ultrareview did not start: <folder> is not trusted`**: Anda menolak pada pertanyaan `Trust <folder>? [y/N]`, misalnya dengan menjawab `n` atau menekan Enter. Untuk memulai review, jalankan `claude ultrareview` lagi dan jawab `y`.3283* **`Ultrareview did not start: <folder> is not trusted`**: Anda menolak pada pertanyaan `Trust <folder>? [y/N]`, misalnya dengan menjawab `n` atau menekan Enter. Untuk memulai review, jalankan `claude ultrareview` lagi dan jawab `y`.

3283* **``Ultrareview did not start: `--trust-workspace` takes no value``**: sesuatu selain flag mengikuti `--trust-workspace`, seperti nomor PR atau `false`. Jika Anda tidak memercayai folder tersebut, jangan sertakan flag tersebut. Untuk memercayainya untuk eksekusi ini, letakkan nomor PR atau base branch sebelum flag: `claude ultrareview 1234 --trust-workspace`.3284* **``Ultrareview did not start: `--trust-workspace` takes no value``**: sesuatu selain flag mengikuti `--trust-workspace`, seperti nomor PR atau `false`. Jika Anda tidak memercayai folder tersebut, jangan sertakan flag itu. Untuk memercayainya untuk eksekusi ini, letakkan nomor PR atau branch dasar sebelum flag: `claude ultrareview 1234 --trust-workspace`.

3284 3285 

3285Sebelum v2.1.309, `claude ultrareview` tidak menerima `--trust-workspace`.3286Sebelum v2.1.309, `claude ultrareview` tidak menerima `--trust-workspace`.

3286 3287 


3473 3474 

3474Sebelum v2.1.248, Claude Code menjalankan penemuan OAuth untuk server yang helper-nya menyediakan header `Authorization`. Penemuan tersebut dapat gagal dengan `Incompatible auth server: does not support dynamic client registration` alih-alih melaporkan kredensial yang ditolak.3475Sebelum v2.1.248, Claude Code menjalankan penemuan OAuth untuk server yang helper-nya menyediakan header `Authorization`. Penemuan tersebut dapat gagal dengan `Incompatible auth server: does not support dynamic client registration` alih-alih melaporkan kredensial yang ditolak.

3475 3476 

3477### Server MCP menolak kapabilitas elicitation

3478 

3479Server MCP yang dibangun di atas Java MCP SDK 0.11.0 hingga 0.17.0 menolak koneksi. Versi-versi SDK tersebut tidak dapat mem-parse [mode elicitation](https://code.claude.com/docs/id/mcp.md#elicitation-modes-claude-code-declares) `form` dan `url` yang dideklarasikan Claude Code dalam handshake-nya. `claude mcp list` menampilkan server sebagai gagal dengan pesan ini sebagai pengganti kesalahan dari server itu sendiri:

3480 

3481```text theme={null}

3482This server (Java MCP SDK 0.17.0 or older) rejected Claude Code's elicitation capability. Set "bareElicitationCapability": true for it, or upgrade to Java MCP SDK 0.17.1+ (Spring AI 1.0.7+ or 1.1.6+).

3483```

3484 

3485**Yang harus dilakukan:**

3486 

3487* Upgrade server ke Java MCP SDK 0.17.1 atau yang lebih baru, atau ke salah satu rilis Spring AI yang disebutkan dalam pesan

3488* Atau tambahkan `"bareElicitationCapability": true` ke entri server tersebut dalam konfigurasi MCP Anda, lalu restart Claude Code. Field ini diterima pada entri stdio, `sse`, `http`, dan `ws` dan memerlukan Claude Code v2.1.281 atau yang lebih baru

3489 

3490Entri `.mcp.json` berikut mengatur field tersebut untuk satu server HTTP:

3491 

3492```json theme={null}

3493{

3494 "mcpServers": {

3495 "inventory": {

3496 "type": "http",

3497 "url": "https://mcp.example.com/mcp",

3498 "bareElicitationCapability": true

3499 }

3500 }

3501}

3502```

3503 

3504Setelah restart, `/mcp` menampilkan server sebagai terhubung. Claude Code hanya mendeklarasikan mode form ke server tersebut, jadi hapus field tersebut setelah Anda meng-upgrade server.

3505 

3506Server juga dapat gagal dengan teks kesalahannya sendiri, seperti yang berisi `Unrecognized field "form"`. Perbaikan yang sama berlaku.

3507 

3476### Tool prompt izin MCP tidak ditemukan3508### Tool prompt izin MCP tidak ditemukan

3477 3509 

3478Tool yang Anda berikan ke [`--permission-prompt-tool`](https://code.claude.com/docs/id/cli-reference#cli-flags) tidak termasuk di antara tool MCP yang terhubung saat run pertama kali memerlukan keputusan izin, baik karena servernya tidak pernah terhubung atau karena tidak ada server terhubung yang menyediakan tool dengan nama tersebut. Claude Code tetap mengirimkan prompt Anda: run [non-interaktif](https://code.claude.com/docs/id/headless.md) keluar dengan kesalahan ini, dan exit code 1, pada panggilan tool pertama, sehingga tidak menghasilkan jawaban meskipun permintaan telah dibuat. Sebelum prompt pertama, Claude Code menunggu hingga timeout koneksi per server selama 30 detik yang diatur oleh [`MCP_TIMEOUT`](https://code.claude.com/docs/id/env-vars) agar server tersebut terhubung. Sebelum v2.1.206, startup tidak menunggu server selesai terhubung, sehingga server yang lambat dimulai tetapi sehat juga menghasilkan kesalahan ini.3510Tool yang Anda berikan ke [`--permission-prompt-tool`](https://code.claude.com/docs/id/cli-reference#cli-flags) tidak termasuk di antara tool MCP yang terhubung saat run pertama kali memerlukan keputusan izin, baik karena servernya tidak pernah terhubung atau karena tidak ada server terhubung yang menyediakan tool dengan nama tersebut. Claude Code tetap mengirimkan prompt Anda: run [non-interaktif](https://code.claude.com/docs/id/headless.md) keluar dengan kesalahan ini, dan exit code 1, pada panggilan tool pertama, sehingga tidak menghasilkan jawaban meskipun permintaan telah dibuat. Sebelum prompt pertama, Claude Code menunggu hingga timeout koneksi per server selama 30 detik yang diatur oleh [`MCP_TIMEOUT`](https://code.claude.com/docs/id/env-vars) agar server tersebut terhubung. Sebelum v2.1.206, startup tidak menunggu server selesai terhubung, sehingga server yang lambat dimulai tetapi sehat juga menghasilkan kesalahan ini.


3541 3573 

3542String serupa muncul sebelum perintah dijalankan sama sekali:3574String serupa muncul sebelum perintah dijalankan sama sekali:

3543 3575 

3544* `Shell command permission check failed for pattern "..."`: pemeriksaan izin perintah tidak mengizinkannya. [Pemeriksaan izin pada perintah sisipan](https://code.claude.com/docs/id/skills.md#permission-checks-on-injected-commands) menjelaskan hasil mana yang membatalkan di setiap mode izin dan cara menyetujui perintah sebelumnya dengan `allowed-tools`3576* `Shell command permission check failed for pattern "..."`: pemeriksaan izin perintah tidak mengizinkannya. [Pemeriksaan izin pada perintah yang disisipkan](https://code.claude.com/docs/id/skills.md#permission-checks-on-injected-commands) menjelaskan hasil mana yang membatalkan di setiap mode izin dan cara menyetujui perintah terlebih dahulu dengan `allowed-tools`

3545* ``Skill <name> requires bash (`shell: bash` in frontmatter) but Git Bash was not found``: frontmatter skill mengharuskan bash di mesin yang tidak memilikinya. Instal Git for Windows atau ubah frontmatter menjadi `shell: powershell`. Lihat [Cara perintah sisipan dijalankan](https://code.claude.com/docs/id/skills.md#how-injected-commands-run)3577* ``Skill <name> requires bash (`shell: bash` in frontmatter) but Git Bash was not found``: frontmatter skill menuntut bash di mesin yang tidak memilikinya. Instal Git for Windows atau ubah frontmatter menjadi `shell: powershell`. Lihat [Cara perintah yang disisipkan dijalankan](https://code.claude.com/docs/id/skills.md#how-injected-commands-run)

3546* `No shell command in <name> was run`: salah satu perintah `!` di file mengandung karakter kontrol mentah selain tab atau baris baru, sehingga tidak ada satu pun yang dijalankan. Lihat [cara menemukan dan menghapus karakter tersebut](#no-shell-command-was-run)3578* `No shell command in <name> was run`: salah satu perintah `!` di file mengandung karakter kontrol mentah selain tab atau baris baru, sehingga tidak ada satu pun yang dijalankan. Lihat [cara menemukan dan menghapus karakter tersebut](#no-shell-command-was-run)

3547 3579 

3548**Yang perlu dilakukan:**3580**Yang perlu dilakukan:**


3693 3725 

3694* **Anda tidak memberikan branch dasar**: Claude Code membandingkan dengan branch default repositori dan menyarankan untuk memberikan branch dasar Anda secara eksplisit, seperti pada contoh di atas3726* **Anda tidak memberikan branch dasar**: Claude Code membandingkan dengan branch default repositori dan menyarankan untuk memberikan branch dasar Anda secara eksplisit, seperti pada contoh di atas

3695* **Anda memberikan branch dasar yang sudah ada di clone Anda**: petunjuknya berbunyi ``Make sure <branch> exists locally or on origin (try `git fetch origin <branch>`)``3727* **Anda memberikan branch dasar yang sudah ada di clone Anda**: petunjuknya berbunyi ``Make sure <branch> exists locally or on origin (try `git fetch origin <branch>`)``

3696* **Anda meneruskan branch dasar yang tidak ada di clone Anda**: Claude Code mengambilnya dari origin sebelum membandingkan. Petunjuknya berbunyi ``<branch> was fetched from origin but shares no history with HEAD. If another branch is your real base, pass it explicitly (`/code-review ultra <branch>`)``; ketika Claude Code tidak dapat memastikan apakah clone Anda dangkal (shallow), Claude Code menyarankan `git fetch --unshallow origin` sebagai gantinya. Sebelum v2.1.221, petunjuk tersebut menyarankan `git fetch --unshallow origin` untuk setiap branch dasar yang diambil, dan pada clone yang lengkap perintah itu gagal dengan `fatal: --unshallow on a complete repository does not make sense`.3728* **Anda memberikan branch dasar yang tidak ada di clone Anda**: Claude Code mengambilnya dari origin sebelum membandingkan. Petunjuknya berbunyi ``<branch> was fetched from origin but shares no history with HEAD. If another branch is your real base, pass it explicitly (`/code-review ultra <branch>`)``; ketika Claude Code tidak dapat menentukan apakah clone Anda dangkal (shallow), Claude Code menyarankan `git fetch --unshallow origin` sebagai gantinya. Sebelum v2.1.221, petunjuk tersebut menyarankan `git fetch --unshallow origin` untuk setiap branch dasar yang diambil, dan pada clone yang lengkap perintah tersebut gagal dengan `fatal: --unshallow on a complete repository does not make sense`.

3697 3729 

3698**Yang perlu dilakukan:**3730**Yang perlu dilakukan:**

3699 3731 

hooks.md +1 −1

Details

1957 1957 

1958| Kolom | Deskripsi |1958| Kolom | Deskripsi |

1959| :- | :- |1959| :- | :- |

1960| `permissionDecision` | `"allow"` melewati permintaan izin, kecuali untuk [tindakan yang tidak disetujui otomatis oleh mode mana pun](https://code.claude.com/docs/id/permission-modes.md#actions-no-mode-auto-approves) dan [pembacaan dari path jaringan](https://code.claude.com/docs/id/permissions.md#network-paths). `AskUserQuestion` dan `ExitPlanMode` memerlukan [`updatedInput` yang dipasangkan dengan `"allow"`](#allow-with-updatedinput). Untuk plan mode, lihat [Persetujuan hook dalam plan mode](https://code.claude.com/docs/id/permissions.md#hook-approvals-in-plan-mode). `"deny"` mencegah panggilan tool. `"ask"` meminta pengguna untuk mengonfirmasi. `"defer"` mengakhiri giliran sehingga tool dapat dilanjutkan nanti, dan memerlukan [mode non-interaktif](#defer-a-tool-call-for-later) dengan flag `-p`. [Aturan deny dan ask](https://code.claude.com/docs/id/permissions.md#manage-permissions) tetap dievaluasi apa pun yang dikembalikan hook |1960| `permissionDecision` | `"allow"` melewati permintaan izin, kecuali untuk [tindakan yang tidak disetujui otomatis oleh mode mana pun](https://code.claude.com/docs/id/permission-modes.md#actions-no-mode-auto-approves) dan [pembacaan dari path jaringan](https://code.claude.com/docs/id/permissions.md#network-paths). Nilai ini juga tidak melewati persetujuan untuk panggilan ke [tool yang ditandai `always_ask` oleh aplikasi Agent SDK](https://code.claude.com/docs/id/agent-sdk/custom-tools#require-approval-for-specific-tools), kecuali [mode izin menyetujui panggilan tersebut](https://code.claude.com/docs/id/agent-sdk/typescript.md#permission-modes-that-can-approve-an-always_ask-call). `AskUserQuestion` dan `ExitPlanMode` memerlukan [`updatedInput` yang dipasangkan dengan `"allow"`](#allow-with-updatedinput). Untuk plan mode, lihat [Persetujuan hook di plan mode](https://code.claude.com/docs/id/permissions.md#hook-approvals-in-plan-mode). `"deny"` mencegah panggilan tool. `"ask"` meminta pengguna untuk mengonfirmasi. `"defer"` mengakhiri giliran sehingga tool dapat dilanjutkan nanti, dan memerlukan [mode non-interaktif](#defer-a-tool-call-for-later) dengan flag `-p`. [Aturan deny dan ask](https://code.claude.com/docs/id/permissions.md#manage-permissions) tetap dievaluasi terlepas dari apa yang dikembalikan hook |

1961| `permissionDecisionReason` | Untuk `"ask"`, ditampilkan kepada pengguna dalam permintaan izin. Saat Claude Code [menolak panggilan](https://code.claude.com/docs/id/headless.md#turn-off-permission-prompts-in-unattended-runs) dalam eksekusi `-p` tempat tidak ada yang dapat menjawab permintaan tersebut, Claude membaca alasannya di hasil tool sebagai gantinya. Untuk `"deny"`, ditampilkan kepada Claude. Untuk `"allow"` dan `"defer"`, hanya ditulis ke [debug log](#debug-hooks) |1961| `permissionDecisionReason` | Untuk `"ask"`, ditampilkan kepada pengguna dalam permintaan izin. Saat Claude Code [menolak panggilan](https://code.claude.com/docs/id/headless.md#turn-off-permission-prompts-in-unattended-runs) dalam eksekusi `-p` tempat tidak ada yang dapat menjawab permintaan tersebut, Claude membaca alasannya di hasil tool sebagai gantinya. Untuk `"deny"`, ditampilkan kepada Claude. Untuk `"allow"` dan `"defer"`, hanya ditulis ke [debug log](#debug-hooks) |

1962| `updatedInput` | Mengubah parameter input tool sebelum eksekusi. Menggantikan seluruh objek input, jadi sertakan kolom yang tidak berubah bersama kolom yang diubah. Claude Code mengevaluasi aturan izin dan [kelayakan auto-background](https://code.claude.com/docs/id/tools-reference.md#foreground-commands-that-move-to-the-background) perintah Bash terhadap input yang dikembalikan hook Anda, bukan input yang dikirim Claude. Kombinasikan dengan `"allow"` untuk menyetujui otomatis, atau `"ask"` untuk menampilkan input yang diubah kepada pengguna. Untuk `"defer"`, diabaikan |1962| `updatedInput` | Mengubah parameter input tool sebelum eksekusi. Menggantikan seluruh objek input, jadi sertakan kolom yang tidak berubah bersama kolom yang diubah. Claude Code mengevaluasi aturan izin dan [kelayakan auto-background](https://code.claude.com/docs/id/tools-reference.md#foreground-commands-that-move-to-the-background) perintah Bash terhadap input yang dikembalikan hook Anda, bukan input yang dikirim Claude. Kombinasikan dengan `"allow"` untuk menyetujui otomatis, atau `"ask"` untuk menampilkan input yang diubah kepada pengguna. Untuk `"defer"`, diabaikan |

1963| `additionalContext` | String yang ditambahkan ke konteks Claude bersama hasil tool. Diabaikan saat `permissionDecision` bernilai `"defer"`. Lihat [Menambahkan konteks untuk Claude](#add-context-for-claude) |1963| `additionalContext` | String yang ditambahkan ke konteks Claude bersama hasil tool. Diabaikan saat `permissionDecision` bernilai `"defer"`. Lihat [Menambahkan konteks untuk Claude](#add-context-for-claude) |

hooks-guide.md +2 −0

Details

629 629 

630* Pembacaan dari [jalur jaringan](https://code.claude.com/docs/id/permissions.md#network-paths)630* Pembacaan dari [jalur jaringan](https://code.claude.com/docs/id/permissions.md#network-paths)

631* Tool MCP yang ditandai [`requiresUserInteraction`](https://code.claude.com/docs/id/mcp#require-approval-for-a-specific-tool)631* Tool MCP yang ditandai [`requiresUserInteraction`](https://code.claude.com/docs/id/mcp#require-approval-for-a-specific-tool)

632* Panggilan ke [tool yang ditandai `always_ask` oleh aplikasi Agent SDK](https://code.claude.com/docs/id/agent-sdk/custom-tools#require-approval-for-specific-tools), kecuali [mode izin menyetujui panggilan tersebut](https://code.claude.com/docs/id/agent-sdk/typescript.md#permission-modes-that-can-approve-an-always_ask-call)

632* Tool konektor yang [organisasi Anda atur ke `ask`](https://code.claude.com/docs/id/mcp#organization-controls-on-connector-tools) dalam sesi di mana pengaturan itu mencapai Claude Code633* Tool konektor yang [organisasi Anda atur ke `ask`](https://code.claude.com/docs/id/mcp#organization-controls-on-connector-tools) dalam sesi di mana pengaturan itu mencapai Claude Code

633 634 

634 Untuk apa yang dilakukan `"allow"` dalam plan mode, lihat [Persetujuan hook dalam plan mode](https://code.claude.com/docs/id/permissions.md#hook-approvals-in-plan-mode).635 Untuk apa yang dilakukan `"allow"` dalam plan mode, lihat [Persetujuan hook dalam plan mode](https://code.claude.com/docs/id/permissions.md#hook-approvals-in-plan-mode).


963* **Apa yang tetap berlaku di atas `"allow"`**: hook yang mengembalikan `"allow"` tidak melewati aturan deny dari pengaturan, dan tidak dapat menekan permintaan izin untuk:964* **Apa yang tetap berlaku di atas `"allow"`**: hook yang mengembalikan `"allow"` tidak melewati aturan deny dari pengaturan, dan tidak dapat menekan permintaan izin untuk:

964 * Pembacaan dari [jalur jaringan](https://code.claude.com/docs/id/permissions.md#network-paths)965 * Pembacaan dari [jalur jaringan](https://code.claude.com/docs/id/permissions.md#network-paths)

965 * Tool MCP yang ditandai [`requiresUserInteraction`](https://code.claude.com/docs/id/mcp#require-approval-for-a-specific-tool)966 * Tool MCP yang ditandai [`requiresUserInteraction`](https://code.claude.com/docs/id/mcp#require-approval-for-a-specific-tool)

967 * Panggilan ke [tool yang ditandai `always_ask` oleh aplikasi Agent SDK](https://code.claude.com/docs/id/agent-sdk/custom-tools#require-approval-for-specific-tools), kecuali [mode izin menyetujui panggilan tersebut](https://code.claude.com/docs/id/agent-sdk/typescript.md#permission-modes-that-can-approve-an-always_ask-call)

966 * Tool konektor yang [organisasi Anda atur ke `ask`](https://code.claude.com/docs/id/mcp#organization-controls-on-connector-tools) dalam sesi di mana pengaturan itu mencapai Claude Code968 * Tool konektor yang [organisasi Anda atur ke `ask`](https://code.claude.com/docs/id/mcp#organization-controls-on-connector-tools) dalam sesi di mana pengaturan itu mencapai Claude Code

967 969 

968Dalam [plan mode](https://code.claude.com/docs/id/permissions.md#hook-approvals-in-plan-mode), jika hook `PreToolUse` Anda mengembalikan `"allow"` untuk pengeditan file, Anda mendapatkan permintaan izin, pemblokiran, atau persetujuan yang sama seperti yang akan didapat pengeditan tersebut tanpa hook. Untuk mencabut batasan ini pada persetujuan hook, [setujui rencana](https://code.claude.com/docs/id/permission-modes.md#review-and-approve-a-plan) atau beralih ke mode izin lain.970Dalam [plan mode](https://code.claude.com/docs/id/permissions.md#hook-approvals-in-plan-mode), jika hook `PreToolUse` Anda mengembalikan `"allow"` untuk pengeditan file, Anda mendapatkan permintaan izin, pemblokiran, atau persetujuan yang sama seperti yang akan didapat pengeditan tersebut tanpa hook. Untuk mencabut batasan ini pada persetujuan hook, [setujui rencana](https://code.claude.com/docs/id/permission-modes.md#review-and-approve-a-plan) atau beralih ke mode izin lain.

Details

407| [`managedMcpServers`](https://code.claude.com/docs/id/settings-reference#managedmcpservers) | Server MCP jarak jauh yang disediakan untuk setiap pengguna bersama milik mereka sendiri. Ini menyediakan server daripada mengunci apa pun. Lihat [Sediakan server melalui pengaturan terkelola](https://code.claude.com/docs/id/managed-mcp.md#provide-servers-through-managed-settings). Memerlukan Claude Code v2.1.259 atau lebih baru |407| [`managedMcpServers`](https://code.claude.com/docs/id/settings-reference#managedmcpservers) | Server MCP jarak jauh yang disediakan untuk setiap pengguna bersama milik mereka sendiri. Ini menyediakan server daripada mengunci apa pun. Lihat [Sediakan server melalui pengaturan terkelola](https://code.claude.com/docs/id/managed-mcp.md#provide-servers-through-managed-settings). Memerlukan Claude Code v2.1.259 atau lebih baru |

408| [`managedSourcesBehavior`](https://code.claude.com/docs/id/settings-reference#managedsourcesbehavior) | Apakah Claude Code menerapkan hanya sumber terkelola prioritas tertinggi atau [menyusun setiap satu](#compose-every-managed-source) |408| [`managedSourcesBehavior`](https://code.claude.com/docs/id/settings-reference#managedsourcesbehavior) | Apakah Claude Code menerapkan hanya sumber terkelola prioritas tertinggi atau [menyusun setiap satu](#compose-every-managed-source) |

409| [`parentSettingsBehavior`](https://code.claude.com/docs/id/settings-reference#parentsettingsbehavior) | Apakah pengaturan induk yang disediakan host merge di bawah kebijakan terkelola |409| [`parentSettingsBehavior`](https://code.claude.com/docs/id/settings-reference#parentsettingsbehavior) | Apakah pengaturan induk yang disediakan host merge di bawah kebijakan terkelola |

410| [`pluginSuggestionMarketplaces`](https://code.claude.com/docs/id/settings-reference#pluginsuggestionmarketplaces) | Marketplace yang plugin Claude Code dapat sarankan kepada pengguna |410| [`pluginSuggestionMarketplaces`](https://code.claude.com/docs/id/settings-reference#pluginsuggestionmarketplaces) | Marketplace yang plugin-nya dapat disarankan Claude Code kepada pengguna di terminal |

411| [`pluginTrustMessage`](https://code.claude.com/docs/id/settings-reference#plugintrustmessage) | Pesan khusus ditambahkan ke peringatan kepercayaan plugin yang ditampilkan sebelum instalasi |411| [`pluginTrustMessage`](https://code.claude.com/docs/id/settings-reference#plugintrustmessage) | Pesan khusus ditambahkan ke peringatan kepercayaan plugin yang ditampilkan sebelum instalasi |

412| [`policyHelper`](https://code.claude.com/docs/id/settings-reference#policyhelper) | Executable yang menghitung pengaturan terkelola saat startup; lihat [Hitung pengaturan terkelola dengan pembantu kebijakan](https://code.claude.com/docs/id/settings-reference.md#policyhelper) |412| [`policyHelper`](https://code.claude.com/docs/id/settings-reference#policyhelper) | Executable yang menghitung pengaturan terkelola saat startup; lihat [Hitung pengaturan terkelola dengan pembantu kebijakan](https://code.claude.com/docs/id/settings-reference.md#policyhelper) |

413| [`sandbox.filesystem.allowManagedReadPathsOnly`](https://code.claude.com/docs/id/settings-reference#sandbox-filesystem-allowmanagedreadpathsonly) | Ketika `true`, hanya jalur `filesystem.allowRead` dari pengaturan terkelola yang dihormati. `denyRead` masih merge dari semua sumber |413| [`sandbox.filesystem.allowManagedReadPathsOnly`](https://code.claude.com/docs/id/settings-reference#sandbox-filesystem-allowmanagedreadpathsonly) | Ketika `true`, hanya jalur `filesystem.allowRead` dari pengaturan terkelola yang dihormati. `denyRead` masih merge dari semua sumber |

mcp.md +10 −1

Details

1624 1624 

1625Jika Anda membangun server MCP yang menggunakan elicitation, lihat [spesifikasi elicitation MCP](https://modelcontextprotocol.io/docs/learn/client-concepts#elicitation) untuk detail protokol dan contoh skema.1625Jika Anda membangun server MCP yang menggunakan elicitation, lihat [spesifikasi elicitation MCP](https://modelcontextprotocol.io/docs/learn/client-concepts#elicitation) untuk detail protokol dan contoh skema.

1626 1626 

1627Pada koneksi yang menggunakan [revisi protokol 2026-07-28](#mcp-client-runtimes), Claude Code mendeklarasikan `elicitation: {form: {}, url: {}}` dalam kemampuan kliennya, sehingga server di sana dapat meminta mode apa pun melalui permintaan elicitation standar protokol.1627### Mode elicitation yang dideklarasikan Claude Code

1628 

1629Jika Anda membangun server MCP, kemampuan klien yang dikirim Claude Code saat terhubung memberi tahu server Anda mode elicitation mana yang dapat dimintanya. Claude Code mendeklarasikan `elicitation: {form: {}, url: {}}` pada koneksi berikut, sehingga server di koneksi mana pun dari koneksi tersebut dapat meminta kedua mode:

1630 

1631* Koneksi yang menggunakan [revisi protokol 2026-07-28](#mcp-client-runtimes)

1632* Koneksi pada revisi protokol sebelumnya, 2025-11-25 dan yang lebih lama, ke server stdio, `sse`, `http`, dan `ws` dalam konfigurasi MCP Claude Code milik pengguna. Memerlukan Claude Code v2.1.287 atau yang lebih baru

1633 

1634Pada koneksi lainnya di revisi sebelumnya, seperti ke [konektor claude.ai](#use-mcp-servers-from-claude-ai), Claude Code mendeklarasikan `elicitation: {}` polos, yang hanya mengizinkan permintaan elicitation dalam form mode.

1635 

1636Server yang dibangun di atas Java MCP SDK 0.17.0 atau yang lebih lama dapat menolak deklarasi yang berisi `form` dan `url`. Lihat [MCP server rejected the elicitation capability](https://code.claude.com/docs/id/errors.md#mcp-server-rejected-the-elicitation-capability).

1628 1637 

1629## Gunakan sumber daya MCP1638## Gunakan sumber daya MCP

1630 1639 

Details

36* Alat yang cocok dengan [aturan ask](https://code.claude.com/docs/id/permissions.md#manage-permissions) eksplisit36* Alat yang cocok dengan [aturan ask](https://code.claude.com/docs/id/permissions.md#manage-permissions) eksplisit

37* Alat konektor yang organisasi Anda [atur ke `ask`](https://code.claude.com/docs/id/mcp#organization-controls-on-connector-tools), dalam sesi di mana pengaturan itu mencapai Claude Code37* Alat konektor yang organisasi Anda [atur ke `ask`](https://code.claude.com/docs/id/mcp#organization-controls-on-connector-tools), dalam sesi di mana pengaturan itu mencapai Claude Code

38* Alat yang memerlukan interaksi pengguna: alat `AskUserQuestion` bawaan dan alat MCP yang ditandai [`requiresUserInteraction`](https://code.claude.com/docs/id/mcp#require-approval-for-a-specific-tool)38* Alat yang memerlukan interaksi pengguna: alat `AskUserQuestion` bawaan dan alat MCP yang ditandai [`requiresUserInteraction`](https://code.claude.com/docs/id/mcp#require-approval-for-a-specific-tool)

39* [Penghapusan jalur kritis](#critical-paths) oleh `rm` dan `rmdir` yang dikenali, yang tidak dapat disetujui oleh aturan allow mana pun maupun `"allow"` dari hook `PreToolUse`39* [Penghapusan jalur kritis](#critical-paths) oleh `rm` dan `rmdir` yang dikenali, yang tidak dapat disetujui oleh aturan allow mana pun maupun `"allow"` dari hook `PreToolUse`, serta perintah Bash yang ditandai [`Dangerous rm operation not ruled out`](#dangerous-rm-operation-not-ruled-out)

40* [Penjaga pesan lintas sesi](#skip-all-checks-with-bypasspermissions-mode)40* [Penjaga pesan lintas sesi](#skip-all-checks-with-bypasspermissions-mode)

41* Membaca di luar direktori kerja sementara [`permissions.blockReadsOutsideWorkingDirectories`](https://code.claude.com/docs/id/settings-reference#permissions-blockreadsoutsideworkingdirectories) aktif: perintah Bash pembaca file yang dikenali meminta bahkan dalam mode auto dan mode `bypassPermissions`, dan begitu juga dengan [retry tanpa sandbox](https://code.claude.com/docs/id/sandboxing.md#the-unsandboxed-retry-escape-hatch) apa pun yang memerlukan persetujuan untuk berjalan di luar sandbox. Memerlukan Claude Code v2.1.257 atau lebih baru.41* Membaca di luar direktori kerja sementara [`permissions.blockReadsOutsideWorkingDirectories`](https://code.claude.com/docs/id/settings-reference#permissions-blockreadsoutsideworkingdirectories) aktif: perintah Bash pembaca file yang dikenali meminta bahkan dalam mode auto dan mode `bypassPermissions`, dan begitu juga dengan [retry tanpa sandbox](https://code.claude.com/docs/id/sandboxing.md#the-unsandboxed-retry-escape-hatch) apa pun yang memerlukan persetujuan untuk berjalan di luar sandbox. Memerlukan Claude Code v2.1.257 atau lebih baru.

42 42 


265 265 

266Mode `acceptEdits` memungkinkan Claude membuat dan mengedit file di direktori kerja Anda tanpa meminta. Bilah status menunjukkan `⏵⏵ accept edits on` saat mode ini aktif.266Mode `acceptEdits` memungkinkan Claude membuat dan mengedit file di direktori kerja Anda tanpa meminta. Bilah status menunjukkan `⏵⏵ accept edits on` saat mode ini aktif.

267 267 

268Selain pengeditan file, mode `acceptEdits` auto-approve perintah Bash filesystem umum: `mkdir`, `touch`, `rm`, `rmdir`, `mv`, `cp`, dan `sed`. Perintah ini juga auto-approved ketika diawali dengan variabel lingkungan aman seperti `LANG=C` atau `NO_COLOR=1`, atau pembungkus proses seperti `timeout`, `nice`, atau `nohup`. Seperti pengeditan file, auto-approval hanya berlaku untuk jalur di dalam direktori kerja Anda atau `additionalDirectories`.268Selain pengeditan file, mode `acceptEdits` auto-approve perintah Bash filesystem umum: `mkdir`, `touch`, `rm`, `rmdir`, `mv`, `cp`, dan `sed`. Kecuali untuk `touch`, perintah ini juga auto-approved ketika diawali dengan environment variable aman seperti `LANG=C` atau `NO_COLOR=1`, atau pembungkus proses seperti `timeout`, `nice`, atau `nohup`. Seperti pengeditan file, auto-approval hanya berlaku untuk jalur di dalam direktori kerja Anda atau `additionalDirectories`.

269 269 

270Hal-hal berikut masih meminta:270Hal-hal berikut masih meminta:

271 271 

272* Jalur di luar cakupan itu272* Jalur di luar cakupan itu

273* Penulisan ke [jalur yang dilindungi](#protected-paths)273* Penulisan ke [jalur yang dilindungi](#protected-paths)

274* [Penghapusan jalur kritis](#critical-paths) oleh `rm` dan `rmdir` yang dikenali274* [Penghapusan jalur kritis](#critical-paths) oleh `rm` dan `rmdir` yang dikenali

275* `touch` dengan apa pun selain jalur file biasa, misalnya opsi, glob, atau awalan seperti `timeout 5` atau `LANG=C`

275* Semua perintah Bash lainnya kecuali [set bawaan read-only](https://code.claude.com/docs/id/permissions.md#read-only-commands)276* Semua perintah Bash lainnya kecuali [set bawaan read-only](https://code.claude.com/docs/id/permissions.md#read-only-commands)

276 277 

277Setiap jalur juga melalui [pemeriksaan symlink](https://code.claude.com/docs/id/permissions.md#symlinks), jadi penulisan yang diselesaikan di luar cakupan itu tidak auto-approved juga.278Setiap jalur juga melalui [pemeriksaan symlink](https://code.claude.com/docs/id/permissions.md#symlinks), jadi penulisan yang diselesaikan di luar cakupan itu tidak auto-approved juga.


369* **Koneksi langsung ke Anthropic API**: dalam sesi terminal interaktif dan dalam sesi `-p`, Agent SDK, [ekstensi VS Code](https://code.claude.com/docs/id/vs-code.md), dan [aplikasi desktop](https://code.claude.com/docs/id/desktop.md), apa pun paket atau jenis akun Anda, seiring Anthropic meluncurkannya. Dalam sesi terminal interaktif, ini memerlukan Claude Code v2.1.271 atau lebih baru pada paket Pro, Max, dan Team, dan v2.1.278 atau lebih baru pada paket Enterprise dan akun Claude API. Dalam sesi `-p`, Agent SDK, ekstensi VS Code, dan aplikasi desktop, ini memerlukan Claude Code v2.1.281 atau lebih baru. Mulai v2.1.282, sesi yang [tidak mengambil feature flag](https://code.claude.com/docs/id/env-vars.md#features-that-need-feature-flag-fetching), misalnya karena Anda mematikan telemetri, meminta server secara default dalam jenis sesi apa pun.370* **Koneksi langsung ke Anthropic API**: dalam sesi terminal interaktif dan dalam sesi `-p`, Agent SDK, [ekstensi VS Code](https://code.claude.com/docs/id/vs-code.md), dan [aplikasi desktop](https://code.claude.com/docs/id/desktop.md), apa pun paket atau jenis akun Anda, seiring Anthropic meluncurkannya. Dalam sesi terminal interaktif, ini memerlukan Claude Code v2.1.271 atau lebih baru pada paket Pro, Max, dan Team, dan v2.1.278 atau lebih baru pada paket Enterprise dan akun Claude API. Dalam sesi `-p`, Agent SDK, ekstensi VS Code, dan aplikasi desktop, ini memerlukan Claude Code v2.1.281 atau lebih baru. Mulai v2.1.282, sesi yang [tidak mengambil feature flag](https://code.claude.com/docs/id/env-vars.md#features-that-need-feature-flag-fetching), misalnya karena Anda mematikan telemetri, meminta server secara default dalam jenis sesi apa pun.

370* **Penyedia cloud, atau gateway LLM atau proxy**: pada [Claude Platform on AWS](https://code.claude.com/docs/id/claude-platform-on-aws.md), Amazon Bedrock, Agent Platform Google Cloud, dan Microsoft Foundry, dan kapan pun Anda mengarahkan `ANTHROPIC_BASE_URL` ke [gateway LLM atau proxy](https://code.claude.com/docs/id/llm-gateway), apa pun paket Anda. Meminta secara default memerlukan Claude Code v2.1.278 atau lebih baru.371* **Penyedia cloud, atau gateway LLM atau proxy**: pada [Claude Platform on AWS](https://code.claude.com/docs/id/claude-platform-on-aws.md), Amazon Bedrock, Agent Platform Google Cloud, dan Microsoft Foundry, dan kapan pun Anda mengarahkan `ANTHROPIC_BASE_URL` ke [gateway LLM atau proxy](https://code.claude.com/docs/id/llm-gateway), apa pun paket Anda. Meminta secara default memerlukan Claude Code v2.1.278 atau lebih baru.

371* **Sesi [gateway aplikasi Claude](https://code.claude.com/docs/id/claude-apps-gateway) yang masuk**: memerlukan Claude Code v2.1.280 atau lebih baru372* **Sesi [gateway aplikasi Claude](https://code.claude.com/docs/id/claude-apps-gateway) yang masuk**: memerlukan Claude Code v2.1.280 atau lebih baru

373* **[Sesi cloud](https://code.claude.com/docs/id/claude-code-on-the-web.md) di lingkungan yang di-hosting Anthropic**: apa pun paket Anda, ketika Anda memulainya dari web, aplikasi seluler, atau aplikasi desktop dengan **Cloud** dipilih. Sesi yang dimulai oleh [tugas terjadwal cloud](https://code.claude.com/docs/id/routines.md) meminta server seiring Anthropic meluncurkannya.

372 374 

373Ketika server meninjau tindakan, vonisnya yang memutuskan tindakan tersebut. Dua hasil lain dimungkinkan:375Ketika server meninjau tindakan, vonisnya yang memutuskan tindakan tersebut. Dua hasil lain dimungkinkan:

374 376 


647 649 

648Mode `bypassPermissions` menonaktifkan prompt izin dan pemeriksaan keamanan sehingga panggilan alat dijalankan segera, termasuk penulisan ke [jalur yang dilindungi](#protected-paths).650Mode `bypassPermissions` menonaktifkan prompt izin dan pemeriksaan keamanan sehingga panggilan alat dijalankan segera, termasuk penulisan ke [jalur yang dilindungi](#protected-paths).

649 651 

650[Tindakan yang tidak disetujui otomatis oleh mode mana pun](#actions-no-mode-auto-approves) masih meminta dalam mode ini. Membaca [artifact publik organisasi lain](https://code.claude.com/docs/id/artifacts.md#read-an-artifact-shared-with-you) memerlukan persetujuan Anda, dan mode ini tidak memintanya, sehingga Claude tidak dapat membacanya. Penolakan [Remove-Item di PowerShell](#remove-item-in-powershell) juga berlaku dalam mode ini.652Bahkan dalam mode `bypassPermissions`, setiap [tindakan yang tidak disetujui otomatis oleh mode mana pun](#actions-no-mode-auto-approves) akan memunculkan permintaan izin atau penolakan alih-alih berjalan dengan sendirinya. Membaca [artifact publik organisasi lain](https://code.claude.com/docs/id/artifacts.md#read-an-artifact-shared-with-you) memerlukan persetujuan Anda, dan mode ini tidak memintanya, sehingga Claude tidak dapat membacanya. Penolakan [Remove-Item di PowerShell](#remove-item-in-powershell) juga berlaku dalam mode ini.

651 653 

652Dua perlindungan [pesan lintas sesi](https://code.claude.com/docs/id/cross-session-messaging.md) masih berlaku dalam mode ini, dan dalam sesi mode rencana terminal interaktif di mana bypass permissions tersedia:654Dua perlindungan [pesan lintas sesi](https://code.claude.com/docs/id/cross-session-messaging.md) masih berlaku dalam mode ini, dan dalam sesi mode rencana terminal interaktif di mana bypass permissions tersedia:

653 655 


769* `.devcontainer.json`771* `.devcontainer.json`

770* `.ripgreprc`, `pyrightconfig.json`772* `.ripgreprc`, `pyrightconfig.json`

771* `.mcp.json`, `.claude.json`773* `.mcp.json`, `.claude.json`

774* File yang Anda berikan ke [`--settings`](https://code.claude.com/docs/id/cli-reference#cli-flags), `--mcp-config`, atau `--agents` saat Anda memulai sesi

772* File yang ditunjuk oleh [file pengaturan](https://code.claude.com/docs/id/settings.md#settings-files-and-who-they-affect) pengguna, proyek, atau lokal Anda ketika file pengaturan itu sendiri merupakan tautan simbolis, misalnya ke repositori dotfiles. Dalam mode yang merutekan penulisan jalur yang dilindungi ke pengklasifikasi, penulisan ke file ini meminta Anda sebagai gantinya, bahkan ketika aturan allow cocok. Jika jalur file itu sendiri juga merupakan jalur file pengaturan, seperti `.claude/settings.json` di folder lain, penulisan tersebut dirutekan ke pengklasifikasi seperti penulisan jalur yang dilindungi lainnya775* File yang ditunjuk oleh [file pengaturan](https://code.claude.com/docs/id/settings.md#settings-files-and-who-they-affect) pengguna, proyek, atau lokal Anda ketika file pengaturan itu sendiri merupakan tautan simbolis, misalnya ke repositori dotfiles. Dalam mode yang merutekan penulisan jalur yang dilindungi ke pengklasifikasi, penulisan ke file ini meminta Anda sebagai gantinya, bahkan ketika aturan allow cocok. Jika jalur file itu sendiri juga merupakan jalur file pengaturan, seperti `.claude/settings.json` di folder lain, penulisan tersebut dirutekan ke pengklasifikasi seperti penulisan jalur yang dilindungi lainnya

773 776 

774## Jalur kritis777## Jalur kritis


844 847 

845Untuk glob atau garis miring di bawah variabel, prompt menamai `rm` yang ditandai dan mengatakan cara menulis ulangnya sehingga pemeriksaan lulus.848Untuk glob atau garis miring di bawah variabel, prompt menamai `rm` yang ditandai dan mengatakan cara menulis ulangnya sehingga pemeriksaan lulus.

846 849 

850### Prompt `Dangerous rm operation not ruled out`

851 

852Alasan lengkapnya berbunyi:

853 

854```text theme={null}

855Dangerous rm operation not ruled out — the shell may read this command differently than it was parsed

856```

857 

858Alasan ini berarti shell mungkin membaca perintah secara berbeda dari cara Claude Code membacanya, sehingga penghapusan bisa berada di bagian yang tidak diperiksa, bahkan tanpa adanya `rm`. Dalam mode `auto` atau `bypassPermissions`, penolakan dengan kalimat ini berasal dari pemeriksaan yang sama:

859 

860```text theme={null}

861This command could not be checked for dangerous rm operations: the shell may read it differently than it was parsed.

862```

863 

864Anda mendapatkan prompt atau penolakan yang sama dengan yang didapat penghapusan jalur kritis [dalam mode izin Anda](#critical-path-removals-in-each-permission-mode), termasuk `bypassPermissions`. Anda tidak dapat menyetujui perintah tersebut dengan aturan allow `Bash` atau `Bash(*)`, [mode auto-allow](https://code.claude.com/docs/id/sandboxing.md#auto-allow-mode) sandbox, atau hook `PreToolUse` yang mengembalikan `"allow"`. Baca perintahnya, lalu setujui prompt tersebut atau, setelah penolakan, jalankan di shell Anda.

865 

847### Prompt drive yang di-mount866### Prompt drive yang di-mount

848 867 

849Prompt drive yang di-mount muncul di macOS, Linux, dan WSL ketika `rm` rekursif menargetkan [jalur drive yang di-mount](#paths-that-get-the-mounted-drive-prompt) yang terdaftar, seperti `/mnt/c` atau `/Volumes/USB/build`. Alasannya berbunyi `Dangerous rm operation on mounted drive path: <path>`. Target `/*` mendapatkan prompt tanpa flag rekursif, karena Claude Code membaca `rm /Volumes/USB/build/*` sebagai penghapusan `/Volumes/USB/build`.868Prompt drive yang di-mount muncul di macOS, Linux, dan WSL ketika `rm` rekursif menargetkan [jalur drive yang di-mount](#paths-that-get-the-mounted-drive-prompt) yang terdaftar, seperti `/mnt/c` atau `/Volumes/USB/build`. Alasannya berbunyi `Dangerous rm operation on mounted drive path: <path>`. Target `/*` mendapatkan prompt tanpa flag rekursif, karena Claude Code membaca `rm /Volumes/USB/build/*` sebagai penghapusan `/Volumes/USB/build`.


900| `plan` | Meminta Anda untuk menyetujuinya. Ketika [pengklasifikasi meninjau perintah selama perencanaan](#analyze-before-you-edit-with-plan-mode) dan tidak ada bypass permissions tersedia, menanganinya seperti dalam mode `auto` |919| `plan` | Meminta Anda untuk menyetujuinya. Ketika [pengklasifikasi meninjau perintah selama perencanaan](#analyze-before-you-edit-with-plan-mode) dan tidak ada bypass permissions tersedia, menanganinya seperti dalam mode `auto` |

901| `auto` | Meminta Anda untuk menyetujuinya di terminal, dengan [batas waktu](#time-limits-and-denials-in-auto-and-bypasspermissions-modes). Di tempat lain, menolaknya |920| `auto` | Meminta Anda untuk menyetujuinya di terminal, dengan [batas waktu](#time-limits-and-denials-in-auto-and-bypasspermissions-modes). Di tempat lain, menolaknya |

902| `dontAsk` | Menolaknya |921| `dontAsk` | Menolaknya |

903| `bypassPermissions` | Meminta Anda untuk menyetujuinya, dengan batas waktu di terminal |922| `bypassPermissions` | Di terminal, meminta Anda untuk menyetujuinya sebelum batas waktu habis. Di tempat lain, lihat [apa yang terjadi di setiap tempat](#time-limits-and-denials-in-auto-and-bypasspermissions-modes) |

904 923 

905Jika [aturan ask](https://code.claude.com/docs/id/permissions.md#manage-permissions) eksplisit cocok dengan perintah, Claude Code meminta Anda sebagai gantinya, bahkan dalam mode `auto` dan tanpa batas waktu. Dalam mode yang meminta, hook [`PermissionRequest`](https://code.claude.com/docs/id/hooks#permissionrequest) dapat menjawab prompt.924Jika [aturan ask](https://code.claude.com/docs/id/permissions.md#manage-permissions) eksplisit cocok dengan perintah, Claude Code meminta Anda sebagai gantinya, bahkan dalam mode `auto` dan tanpa batas waktu. Dalam mode yang meminta, hook [`PermissionRequest`](https://code.claude.com/docs/id/hooks#permissionrequest) dapat menjawab prompt.

906 925 


912* Tekan tombol apa pun saat prompt terbuka untuk menghentikan hitungan mundur dan membuat prompt tetap menunggu jawaban Anda.931* Tekan tombol apa pun saat prompt terbuka untuk menghentikan hitungan mundur dan membuat prompt tetap menunggu jawaban Anda.

913* Setelah tiga prompt ini habis tanpa jawaban dalam sesi, Claude Code berhenti menampilkannya dan menolak penghapusan jalur kritis lebih lanjut segera. Mengirim pesan baru memulai hitungan ulang.932* Setelah tiga prompt ini habis tanpa jawaban dalam sesi, Claude Code berhenti menampilkannya dan menolak penghapusan jalur kritis lebih lanjut segera. Mengirim pesan baru memulai hitungan ulang.

914 933 

915Dalam mode `auto`, di mana pun Claude Code tidak dapat menampilkan prompt terminal kepada Anda, itu menolak perintah segera, misalnya dalam [run non-interaktif](https://code.claude.com/docs/id/headless.md) dengan `-p`, dalam sesi [Agent SDK](https://code.claude.com/docs/id/agent-sdk/permissions.md), dan dalam panel chat ekstensi VS Code dan aplikasi Desktop. Penolakan memberi tahu Claude untuk melaporkan apa yang ingin dihapus dan membiarkan penghapusan kepada Anda.934Batas waktu berlaku di Claude Code v2.1.281 dan yang lebih baru, begitu pula penolakan mode `auto` di luar terminal.

935 

936Di luar terminal, Anda tidak mendapatkan prompt tersebut:

916 937 

917Penanganan `auto` dan `bypassPermissions` memerlukan Claude Code v2.1.281 atau lebih baru. Untuk mematikannya, atur [`CLAUDE_CODE_DISABLE_DANGEROUS_RM_TIMEOUT=1`](https://code.claude.com/docs/id/env-vars#variables) dalam lingkungan yang meluncurkan Claude Code. Dalam mode `auto`, penghapusan jalur kritis kemudian pergi ke pengklasifikasi sebagai gantinya, dan dalam mode `bypassPermissions` prompt tidak memiliki batas waktu.938| Tempat | `auto` | `bypassPermissions` |

939| :- | :- | :- |

940| Panel chat [ekstensi VS Code](https://code.claude.com/docs/id/vs-code.md) | Menolaknya | Menolaknya kecuali [hook `PermissionRequest`](https://code.claude.com/docs/id/hooks#permissionrequest) mengizinkannya |

941| [Aplikasi Desktop](https://code.claude.com/docs/id/desktop.md) | Menolaknya | Menolaknya kecuali hook `PermissionRequest` mengizinkannya |

942| [Run `-p`](https://code.claude.com/docs/id/headless) atau [sesi Agent SDK](https://code.claude.com/docs/id/agent-sdk/permissions.md) | Menolaknya | [`--permission-prompt-tool`](https://code.claude.com/docs/id/cli-reference#cli-flags) atau [callback `canUseTool`](https://code.claude.com/docs/id/agent-sdk/user-input#handle-tool-approval-requests) Anda yang memutuskan. Tanpa keduanya, atau di bawah [`--permission-prompts none`](https://code.claude.com/docs/id/headless#turn-off-permission-prompts-in-unattended-runs), menolaknya kecuali hook `PermissionRequest` mengizinkannya |

943 

944Di mana pun penghapusan ditolak, Anda dapat membaca seluruh perintah dan menjalankannya di shell Anda.

945 

946Untuk mengubah apa yang Anda dapatkan di setiap mode, atur [`CLAUDE_CODE_DISABLE_DANGEROUS_RM_TIMEOUT`](https://code.claude.com/docs/id/env-vars#variables) ke `1`:

947 

948* **`bypassPermissions`**: prompt terminal tidak memiliki batas waktu, dan panel chat VS Code meminta persetujuan Anda

949* **`auto`**: [pengklasifikasi](#eliminate-prompts-with-auto-mode) yang memutuskan, di terminal, panel chat VS Code, run `-p`, dan sesi Agent SDK

950 

951Atur variabel ini di lingkungan yang memulai Claude Code, seperti shell Anda atau opsi `env` milik SDK, bukan di file pengaturan Claude Code. Untuk panel chat, tambahkan ke [`claudeCode.environmentVariables`](https://code.claude.com/docs/id/vs-code#extension-settings) di `settings.json` pengguna milik VS Code sendiri, lalu mulai percakapan baru:

952 

953```json theme={null}

954{

955 "claudeCode.environmentVariables": [

956 { "name": "CLAUDE_CODE_DISABLE_DANGEROUS_RM_TIMEOUT", "value": "1" }

957 ]

958}

959```

918 960 

919### Remove-Item dalam PowerShell961### Remove-Item dalam PowerShell

920 962 

Details

41 41 

42Jika sebuah tutorial atau serangkaian instruksi lama meminta Anda menjalankan `/plugin marketplace add anthropics/claude-code`, perintah itu menambahkan marketplace demo, yang bernama `claude-code-plugins`. Itu bukan marketplace resmi.42Jika sebuah tutorial atau serangkaian instruksi lama meminta Anda menjalankan `/plugin marketplace add anthropics/claude-code`, perintah itu menambahkan marketplace demo, yang bernama `claude-code-plugins`. Itu bukan marketplace resmi.

43 43 

44Sebagian besar plugin di marketplace demo juga ada di marketplace resmi dengan nama yang sama. Misalnya, `code-review`, `feature-dev`, `commit-commands`, dan `security-guidance` ada di keduanya. Instal plugin-plugin tersebut dari `claude-plugins-official` agar Anda tidak memiliki dua salinan yang terinstal.44Sebagian besar plugin di marketplace demo juga ada di marketplace resmi dengan nama yang sama. Misalnya, `code-review`, `feature-dev`, dan `commit-commands` ada di keduanya. Instal plugin-plugin tersebut dari `claude-plugins-official` agar Anda tidak memiliki dua salinan yang terinstal.

45 45 

46## Temukan plugin di marketplace resmi46## Temukan plugin di marketplace resmi

47 47 

Details

403 403 

404Untuk rentang versi, konvensi tag git `<plugin>--v<version>` yang diselesaikan, dan kepercayaan lintas marketplace, lihat [Plugin dependencies](https://code.claude.com/docs/id/plugins/dependencies.md).404Untuk rentang versi, konvensi tag git `<plugin>--v<version>` yang diselesaikan, dan kepercayaan lintas marketplace, lihat [Plugin dependencies](https://code.claude.com/docs/id/plugins/dependencies.md).

405 405 

406Untuk membuat Claude Code menyarankan plugin ketika proyek cocok dengannya, tambahkan blok `relevance` ke entri dengan sinyal yang mengidentifikasi proyek. Pengguna melihat saran dari marketplace Anda hanya ketika admin mencantumkannya di `pluginSuggestionMarketplaces`. Untuk sinyal dan langkah enablement, lihat [Plugin relevance](https://code.claude.com/docs/id/plugins/relevance.md).406Untuk membuat Claude Code menyarankan plugin ketika proyek cocok dengannya, tambahkan blok `relevance` ke entri dengan sinyal yang mengidentifikasi proyek. Pengguna melihat saran ini hanya ketika admin mencantumkan marketplace Anda di `pluginSuggestionMarketplaces`. Untuk sinyal dan langkah enablement, lihat [Plugin relevance](https://code.claude.com/docs/id/plugins/relevance.md).

407 407 

408## Work around what a marketplace can't do408## Work around what a marketplace can't do

409 409 

Details

95 95 

96Tidak satupun dari kontrol ini mensandboxkan mod. Mod yang Anda izinkan berjalan sebagai pengguna, dengan akses pengguna ke file, proses, dan jaringan.96Tidak satupun dari kontrol ini mensandboxkan mod. Mod yang Anda izinkan berjalan sebagai pengguna, dengan akses pengguna ke file, proses, dan jaringan.

97 97 

98### Ketahui hook mana dari mod pengguna yang tidak berjalan

99 

100Di mana [penjaga bawaan](#know-what-happens-by-default) dimuat, hook yang didaftarkan mod pengguna pada salah satu event ini tidak pernah berjalan, dan `/plugin` memberi tahu pengguna tersebut melalui sebuah catatan. Pada baris [`session.append`](https://code.claude.com/docs/id/plugins/mods/reference#session), `door` adalah jenis baris tersimpan yang menjadi filter hook tersebut.

101 

102| Hook pada | Apa event tersebut |

103| :- | :- |

104| [`classic.<Event>`](https://code.claude.com/docs/id/plugins/mods/events#hook-the-settings-hook-events), seperti `classic.Stop` | Sebuah [event hook pengaturan](https://code.claude.com/docs/id/hooks.md#hook-events) |

105| [`prompt.compose`](https://code.claude.com/docs/id/plugins/mods/reference#prompts-and-what-claude-reads) | Daftar bagian system prompt |

106| `prompt.section` | Satu bagian dari system prompt |

107| `prompt.context` | Konteks yang dikirim bersama pesan pertama percakapan |

108| `prompt.attachment` | Pesan yang ditambahkan Claude Code untuk Claude, seperti pengingat |

109| `skill.prompt` | Teks skill saat diperluas untuk Claude |

110| `attribution.text` | Teks atribusi commit atau pull request |

111| [`session.compact`](https://code.claude.com/docs/id/plugins/mods/reference#session) | Compaction percakapan |

112| `settings.read` | Pembacaan pengaturan, seperti panggilan `$.settings.read` milik mod |

113| `session.append{door=attachment}` | Baris tersimpan untuk pesan yang ditambahkan Claude Code untuk Claude |

114| `session.append{door=hook-context}` | Baris tersimpan untuk konteks dari hook pengaturan |

115| `session.append{door=compaction}` | Baris tersimpan untuk ringkasan dan batas compaction |

116 

117Penjaga juga melewati hook pengguna dalam beberapa kasus lain, seperti deskripsi tool organisasi Anda, pada [`tool.describe`](https://code.claude.com/docs/id/plugins/mods/reference#tools), dan baris tersimpan untuk teks skill. `/plugin` tidak menampilkan catatan untuk kasus-kasus tersebut. Jika hook pada event lain tidak melakukan apa pun, lihat [Cari tahu mengapa mod tidak melakukan apa pun](https://code.claude.com/docs/id/plugins/mods/troubleshoot.md#find-out-why-a-mod-does-nothing).

118 

119Catatan tersebut muncul di detail plugin dan di tab **Errors** pada `/plugin`. Catatan ini memerlukan Claude Code v2.1.299 atau yang lebih baru. Catatan tersebut menyebutkan setiap hook dari tabel sebagaimana mod mendaftarkannya, seperti dalam contoh ini:

120 

121```text theme={null}

122Its hooks on classic.Stop, prompt.section do not run here: where an organization manages Claude Code, these events pass over the plugins you install

123Only a plugin that counts as your organization's own runs hooks on these events. An administrator sets that up in managed settings

124```

125 

126Untuk mengizinkan hook ini berjalan, ubah pengaturan terkelola dengan salah satu dari dua cara:

127 

128* **Jalankan mod sebagai milik organisasi Anda**: [pasang mod sehingga dihitung sebagai milik Anda](#install-your-organizations-mods). Hook-nya pada event ini kemudian berjalan, dan penjaga tetap dimuat untuk setiap mod lainnya. Mod tersebut aktif untuk semua orang yang menerima pengaturan ini, dan harus berada di direktori yang Anda tempatkan di setiap mesin. Jika Anda mencantumkannya dalam `prependPlugins`, pertahankan `sec-default@builtin` dalam daftar.

129* **Hapus penjaga**: jangan sertakan `sec-default@builtin` dalam `prependPlugins`. Daftar kosong, `"prependPlugins": []`, sudah cukup. Anda kehilangan seluruh penjaga, bukan hanya event ini. Mod pengguna kemudian dapat melakukan apa yang [jika tidak akan dicegah oleh penjaga](#know-what-happens-by-default), dan [opsi penjaga](#set-options-on-the-built-in-guard) tidak berlaku.

130 

131Jika Anda mengirimkan daftar tanpa penjaga melalui [pengaturan yang dikelola server](https://code.claude.com/docs/id/server-managed-settings.md#fetch-and-caching-behavior), penjaga tetap dimuat sampai server mengonfirmasi pengaturan untuk sesi tersebut. Untuk mengonfirmasi salah satu perubahan pada mesin yang menjalankan v2.1.299 atau yang lebih baru, buka `/plugin` dalam sesi di sana dan periksa bahwa catatan tersebut sudah hilang.

132 

133Hook `session.append` tanpa filter `door` tetap berjalan dan tidak mendapatkan catatan, tetapi baris tersimpan dalam tabel tidak mencapainya.

134 

98## Putuskan apakah akan membiarkan mod tetap aktif135## Putuskan apakah akan membiarkan mod tetap aktif

99 136 

100Mod dapat melakukan lebih banyak daripada bagian lain dari plugin karena berjalan di dalam Claude Code. Ini melihat setiap prompt dan panggilan alat, dapat mengubahnya, dan dapat mengizinkan atau menolak panggilan alat sebelum prompt izin muncul.137Mod dapat melakukan lebih banyak daripada bagian lain dari plugin karena berjalan di dalam Claude Code. Ini melihat setiap prompt dan panggilan alat, dapat mengubahnya, dan dapat mengizinkan atau menolak panggilan alat sebelum prompt izin muncul.


142| `$.prompt.submit` | Mengirimkan prompt, dan dapat mengirimkannya sebagai kata-kata pengguna sendiri |179| `$.prompt.submit` | Mengirimkan prompt, dan dapat mengirimkannya sebagai kata-kata pengguna sendiri |

143| `$.session.send` | Mengirimkan pesan yang dibaca oleh Claude milik sesi lain, subagent, atau [rekan tim](https://code.claude.com/docs/id/agent-teams.md) |180| `$.session.send` | Mengirimkan pesan yang dibaca oleh Claude milik sesi lain, subagent, atau [rekan tim](https://code.claude.com/docs/id/agent-teams.md) |

144 181 

145Dalam baris `hooks:`, [`tool.call`](https://code.claude.com/docs/id/plugins/mods/reference#tools) dan [`prompt.submit`](https://code.claude.com/docs/id/plugins/mods/reference#prompts-and-what-claude-reads) berarti mod melihat setiap panggilan alat dan setiap prompt, dan dapat mengubahnya. [`session.append`](https://code.claude.com/docs/id/plugins/mods/reference#session) berarti mod dapat menulis ulang setiap baris percakapan sebelum disimpan. [`ui.render{component=AskUserQuestion}`](https://code.claude.com/docs/id/plugins/mods/interface#change-what-claude-code-already-draws) berarti mod dapat menggambar ulang dialog yang digunakan Claude untuk menanyakan pengguna. `tool.check` berarti mod dapat menyetujui atau menolak panggilan alat sebelum prompt izin muncul. [Ketahui apa yang terjadi secara default](#know-what-happens-by-default) mencantumkan aturan dan hook mana dari Anda yang memiliki prioritas atas jawabannya.182Dalam baris `hooks:`, [`tool.call`](https://code.claude.com/docs/id/plugins/mods/reference#tools) dan [`prompt.submit`](https://code.claude.com/docs/id/plugins/mods/reference#prompts-and-what-claude-reads) berarti mod melihat setiap panggilan tool dan setiap prompt, dan dapat mengubahnya. [`session.append`](https://code.claude.com/docs/id/plugins/mods/reference#session) berarti mod dapat menulis ulang setiap baris percakapan sebelum disimpan, kecuali [baris yang dilewati oleh guard](#hooks-the-guard-passes-over). [`ui.render{component=AskUserQuestion}`](https://code.claude.com/docs/id/plugins/mods/interface#change-what-claude-code-already-draws) berarti mod dapat menggambar ulang dialog yang digunakan Claude untuk menanyakan pengguna. `tool.check` berarti mod dapat menyetujui atau menolak panggilan tool sebelum permintaan izin muncul. [Ketahui apa yang terjadi secara default](#know-what-happens-by-default) mencantumkan aturan dan hook mana dari Anda yang diutamakan daripada jawabannya.

146 183 

147## Pilih berapa banyak yang akan diizinkan184## Pilih berapa banyak yang akan diizinkan

148 185 

Details

377 377 

378### Tangani peristiwa hook pengaturan378### Tangani peristiwa hook pengaturan

379 379 

380Hook pengaturan adalah hook perintah, HTTP, prompt, dan agent yang Anda konfigurasi dalam file pengaturan. Setiap [peristiwa hook pengaturan](https://code.claude.com/docs/id/hooks.md#hook-events), seperti `Stop`, `SessionEnd`, atau `PostToolUse`, juga merupakan peristiwa bernama `classic.` diikuti dengan nama peristiwa hook pengaturan tersebut, seperti `classic.Stop`. `e` adalah JSON yang diterima hook pengaturan di stdin, termasuk `transcript_path`.380Hook pengaturan adalah hook perintah, HTTP, prompt, dan agent yang Anda konfigurasi dalam file pengaturan. Setiap [peristiwa hook pengaturan](https://code.claude.com/docs/id/hooks.md#hook-events), seperti `Stop`, `SessionEnd`, atau `PostToolUse`, juga merupakan peristiwa bernama `classic.` diikuti dengan nama peristiwa hook pengaturan tersebut, seperti `classic.Stop`. `e` adalah JSON yang diterima hook pengaturan di stdin, termasuk `transcript_path`. Di tempat [penjaga bawaan](https://code.claude.com/docs/id/plugins/mods/admin.md#know-what-happens-by-default) dimuat, [hook pada peristiwa ini dalam mod yang Anda instal tidak berjalan](https://code.claude.com/docs/id/plugins/mods/admin.md#hooks-the-guard-passes-over).

381 381 

382Hook ini menggunakan `Stop`, yang diaktifkan ketika Claude selesai merespons, untuk mencatat lokasi penyimpanan transkrip sesi:382Hook ini menggunakan `Stop`, yang diaktifkan ketika Claude selesai merespons, untuk mencatat lokasi penyimpanan transkrip sesi:

383 383 


425* **Gagal sebelum memanggil `next`**: Claude Code melewatinya, dan penanganan berikutnya berjalan sebagai gantinya425* **Gagal sebelum memanggil `next`**: Claude Code melewatinya, dan penanganan berikutnya berjalan sebagai gantinya

426* **Gagal setelah `next` diselesaikan**: hasil itu berdiri, dan tidak ada yang berjalan kedua kalinya426* **Gagal setelah `next` diselesaikan**: hasil itu berdiri, dan tidak ada yang berjalan kedua kalinya

427 427 

428Satu baris menamai mod, peristiwa, dan alasan, seperti `my-mod: tool.call hook skipped: threw Error: boom`. Tempat Anda membacanya tergantung pada sesi, seperti [Cari tahu mengapa mod tidak melakukan apa pun](https://code.claude.com/docs/id/plugins/mods/troubleshoot.md#find-out-why-a-mod-does-nothing) daftarkan. Hook `ui.render` yang gambarnya tidak divalidasi dilaporkan berbeda, seperti [Bangun pohon dari elemen](https://code.claude.com/docs/id/plugins/mods/interface.md#build-a-tree-from-elements) menjelaskan.428Satu baris menamai mod, peristiwa, dan alasan, seperti `my-mod: tool.call hook skipped: threw Error: boom`. Tempat Anda membacanya tergantung pada sesi, seperti [Cari tahu mengapa mod tidak melakukan apa pun](https://code.claude.com/docs/id/plugins/mods/troubleshoot.md#find-out-why-a-mod-does-nothing) daftarkan. Hook `ui.render` yang [pohonnya tidak lolos validasi](https://code.claude.com/docs/id/plugins/mods/interface.md#build-a-tree-from-elements) dihitung sebagai hook yang mengembalikan hasil dengan bentuk yang salah.

429 429 

430Untuk membuat hook yang memblokir panggilan gagal tertutup, tambahkan penanganan kesalahan `.catch` yang menjawab sebagai gantinya. Di sini, `guard` adalah fungsi hook Anda, dan penanganan menguji [`next.called`](https://code.claude.com/docs/id/plugins/mods/reference#the-hook-function) untuk mengetahui apakah `guard` sudah memanggil `next` ketika gagal:430Untuk membuat hook yang memblokir panggilan gagal tertutup, tambahkan penanganan kesalahan `.catch` yang menjawab sebagai gantinya. Di sini, `guard` adalah fungsi hook Anda, dan penanganan menguji [`next.called`](https://code.claude.com/docs/id/plugins/mods/reference#the-hook-function) untuk mengetahui apakah `guard` sudah memanggil `next` ketika gagal:

431 431 

Details

421Note: Type a note and press Enter421Note: Type a note and press Enter

422```422```

423 423 

424Tambahkan `rows` agar bidang dapat menampung beberapa baris. Enter tetap mengirimkan, dan garis miring terbalik sebelum Enter memulai baris baru, demikian pula Shift+Enter jika [terminal mendukungnya](https://code.claude.com/docs/id/terminal-config.md#enter-multiline-prompts). Galeri menampilkan [bidang dengan `rows`](https://code.claude.com/docs/id/plugins/mods/gallery#input).

425 

424[Galeri antarmuka](https://code.claude.com/docs/id/plugins/mods/gallery.md) memiliki contoh dan tangkapan layar dari sebagian besar elemen. Tabel ini mencantumkan setiap elemen:426[Galeri antarmuka](https://code.claude.com/docs/id/plugins/mods/gallery.md) memiliki contoh dan tangkapan layar dari sebagian besar elemen. Tabel ini mencantumkan setiap elemen:

425 427 

426| Elemen | Apa yang digambarnya | Di mana |428| Elemen | Apa yang digambarnya | Di mana |


436 438 

437Jika modul Anda adalah file `.tsx` atau `.jsx`, Anda dapat menulis pohon sebagai JSX. Dekonstruksi elemen dari `$.ui.resolve(e)` terlebih dahulu.439Jika modul Anda adalah file `.tsx` atau `.jsx`, Anda dapat menulis pohon sebagai JSX. Dekonstruksi elemen dari `$.ui.resolve(e)` terlebih dahulu.

438 440 

439Jika pohon menggunakan elemen yang tidak dimiliki aplikasi, prop yang tidak diambil elemen, atau anak di mana tidak ada, Claude Code menggambar versinya sendiri dari situs.441Jika gambar Anda tidak muncul, periksa pohonnya untuk prop yang tidak diambil oleh elemen atau anak di tempat yang tidak seharusnya ada. Hook yang mengembalikan pohon seperti itu [gagal](https://code.claude.com/docs/id/plugins/mods/events.md#handle-a-hook-that-fails), dan [baris `hook skipped`](https://code.claude.com/docs/id/plugins/mods/troubleshoot#a-pane-or-band-is-empty) menyebutkan mod Anda dan aturan yang dilanggar pohon tersebut. Untuk `Text` di panel dengan prop bernama `bogusProp`, baris itu berbunyi:

440 442 

441Dalam sesi yang dimulai dengan `--plugin-dir`, baris transkrip mengatakan demikian, seperti `ui.render (Pane) refused: Text prop "bogusProp" is not allowed; the engine drew its own`. [Debug log](https://code.claude.com/docs/id/plugins/mods/troubleshoot.md#read-the-debug-log) mencatatnya sebagai `ui.render (Pane): a hook returned a tree that does not validate` dengan alasan yang sama. Tidak ada yang lain muncul dalam sesi, jadi ketika gambar tidak muncul, periksa baris itu atau log.443```text theme={null}

444my-mod: ui.render hook skipped: returned the wrong shape (a tree Pane refuses: Text prop "bogusProp" is not allowed)

445```

442 446 

443### `Link` di aplikasi Desktop dan VS Code447### `Link` di aplikasi Desktop dan VS Code

444 448 


542| Kunci | Apa yang dilakukannya |546| Kunci | Apa yang dilakukannya |

543| :- | :- |547| :- | :- |

544| Tab | Bergerak ke kontrol berikutnya |548| Tab | Bergerak ke kontrol berikutnya |

545| Atas dan Bawah | Bergerak antar kontrol saat gambar Anda pas. Ketika panel atau pita memiliki lebih banyak baris daripada yang dapat ditampilkan, mereka menggulirnya. |549| Atas dan Bawah | Bergerak antar kontrol saat gambar Anda pas. Ketika panel atau pita memiliki lebih banyak baris daripada yang dapat ditampilkan, mereka menggulirnya. Di dalam `Input`, kunci ini [berpindah antar baris bidang](https://code.claude.com/docs/id/plugins/mods/gallery.md#input) terlebih dahulu. |

546| Enter | Menekan `Button` yang fokus, mengirimkan `Input` yang fokus, atau memilih di `Select` |550| Enter | Menekan `Button` yang fokus, mengirimkan `Input` yang fokus, atau memilih di `Select` |

547| Pintasan keyboard tombol | Menekan tombol itu. Saat `Input` memiliki fokus, setiap kunci yang dapat dicetak pergi ke bidang. |551| Pintasan keyboard tombol | Menekan tombol itu. Saat `Input` memiliki fokus, setiap kunci yang dapat dicetak pergi ke bidang. |

548| Page Up, Page Down, Home, dan End | Menggulir panel atau pita Anda ketika memiliki lebih banyak baris daripada yang dapat ditampilkan |552| Page Up, Page Down, Home, dan End | Menggulir panel atau pita Anda ketika memiliki lebih banyak baris daripada yang dapat ditampilkan |

Details

275| [`Link`](https://code.claude.com/docs/id/plugins/mods/interface#link-in-the-desktop-app) | `href`, `label`. Lihat [Batasan](#limits). | ✓ | ✓ | ✓ |275| [`Link`](https://code.claude.com/docs/id/plugins/mods/interface#link-in-the-desktop-app) | `href`, `label`. Lihat [Batasan](#limits). | ✓ | ✓ | ✓ |

276| [`Code`](https://code.claude.com/docs/id/plugins/mods/gallery#show-code-and-changes) | `source`, `language`, `path`, `startLine`, `format`, `wrap` | ✓ | ✓ | ✓ |276| [`Code`](https://code.claude.com/docs/id/plugins/mods/gallery#show-code-and-changes) | `source`, `language`, `path`, `startLine`, `format`, `wrap` | ✓ | ✓ | ✓ |

277| `Markdown` | `text`, `key`, `dimColor`, `onLinkPress`, `pressableLinks` | ✓ | ✓ | ✓ |277| `Markdown` | `text`, `key`, `dimColor`, `onLinkPress`, `pressableLinks` | ✓ | ✓ | ✓ |

278| [`Input`](https://code.claude.com/docs/id/plugins/mods/interface#take-typed-input-and-draw-a-row-for-each-item) | `key`, `label`, `placeholder`, `value`, `submitLabel`, `onSubmit`, `onInput`, `autoFocus` | ✓ | ✓ | ✓ |278| [`Input`](https://code.claude.com/docs/id/plugins/mods/interface#take-typed-input-and-draw-a-row-for-each-item) | `key`, `label`, `placeholder`, `value`, `submitLabel`, [`rows`](https://code.claude.com/docs/id/plugins/mods/gallery#input), `onSubmit`, `onInput`, `autoFocus` | ✓ | ✓ | ✓ |

279| `Select` | `key`, `label`, `options`, `value`, `onSelect`, `autoFocus` | ✓ | ✓ | ✓ |279| `Select` | `key`, `label`, `options`, `value`, `onSelect`, `autoFocus` | ✓ | ✓ | ✓ |

280| `Svg` | `source` berupa markup SVG hingga 131.072 karakter, teks `alt`, `width`, `height`, dan `isInteractive` | | ✓ | ✓ |280| `Svg` | `source` berupa markup SVG hingga 131.072 karakter, teks `alt`, `width`, `height`, dan `isInteractive` | | ✓ | ✓ |

281| [`Client`](https://code.claude.com/docs/id/plugins/mods/interface#build-a-tree-from-elements) | `module`, `key`, `props`, `width`, `height`, `flexGrow` | ✓ | ✓ | |281| [`Client`](https://code.claude.com/docs/id/plugins/mods/interface#build-a-tree-from-elements) | `module`, `key`, `props`, `width`, `height`, `flexGrow` | ✓ | ✓ | |


333 333 

334Jika Anda mengatur `gap`, `padding`, atau `margin` ke sebuah langkah, langkah tersebut berlaku secara mendatar dan menurun sekaligus. Misalnya, di terminal dan ekstensi VS Code, `padding: 'md'` berarti dua sel di setiap sisi dan satu baris di atas dan di bawah.334Jika Anda mengatur `gap`, `padding`, atau `margin` ke sebuah langkah, langkah tersebut berlaku secara mendatar dan menurun sekaligus. Misalnya, di terminal dan ekstensi VS Code, `padding: 'md'` berarti dua sel di setiap sisi dan satu baris di atas dan di bawah.

335 335 

336Nama langkah memerlukan Claude Code v2.1.299 atau yang lebih baru. Pada rilis yang lebih lama, Claude Code [menggambar versinya sendiri dari situs tersebut](https://code.claude.com/docs/id/plugins/mods/interface.md#build-a-tree-from-elements) sebagai pengganti tree yang menggunakan nama langkah.336Nama langkah memerlukan Claude Code v2.1.299 atau yang lebih baru. Pada rilis yang lebih lama, tree yang menggunakan nama langkah tidak digambar.

337 337 

338### Prop tipografi `Text`338### Prop tipografi `Text`

339 339 


346| `mono` | `true` untuk meminta jenis huruf monospace aplikasi | Diabaikan: terminal selalu monospace | Diabaikan, sehingga teks tetap menggunakan jenis huruf ekstensi itu sendiri |346| `mono` | `true` untuk meminta jenis huruf monospace aplikasi | Diabaikan: terminal selalu monospace | Diabaikan, sehingga teks tetap menggunakan jenis huruf ekstensi itu sendiri |

347| `tabular` | `true` untuk meminta digit dengan lebar yang sama, sehingga angka yang diperbarui di tempat atau kolom angka tetap sejajar | Diabaikan: digit terminal sudah selebar satu sel | Diabaikan |347| `tabular` | `true` untuk meminta digit dengan lebar yang sama, sehingga angka yang diperbarui di tempat atau kolom angka tetap sejajar | Diabaikan: digit terminal sudah selebar satu sel | Diabaikan |

348 348 

349Keempat prop ini memerlukan Claude Code v2.1.299 atau yang lebih baru. Pada rilis yang lebih lama, Claude Code [menggambar versinya sendiri dari situs tersebut](https://code.claude.com/docs/id/plugins/mods/interface.md#build-a-tree-from-elements) sebagai pengganti tree yang mengatur `size`, `weight`, `mono`, atau `tabular`.349Keempat prop ini memerlukan Claude Code v2.1.299 atau yang lebih baru. Pada rilis yang lebih lama, tree yang mengatur `size`, `weight`, `mono`, atau `tabular` tidak digambar.

350 350 

351#### Mengganti `bold` dengan `weight`351#### Mengganti `bold` dengan `weight`

352 352 

353`bold` pada `Text` sudah deprecated dan digantikan oleh `weight`, tetapi masih berfungsi. Untuk menggantinya pada `Text` yang tidak memiliki `weight`, ubah `bold: true` menjadi `weight: 'semibold'` untuk hasil yang sama pada Claude Code v2.1.299 atau yang lebih baru.353`bold` pada `Text` sudah deprecated dan digantikan oleh `weight`, tetapi masih berfungsi. Untuk menggantinya pada `Text` yang tidak memiliki `weight`, ubah `bold: true` menjadi `weight: 'semibold'` untuk hasil yang sama pada Claude Code v2.1.299 atau yang lebih baru.

354 354 

355Pada rilis yang lebih lama dari v2.1.299, tree yang mengatur `weight` tidak digambar, dan Claude Code [menggambar versinya sendiri dari situs tersebut](https://code.claude.com/docs/id/plugins/mods/interface.md#build-a-tree-from-elements) sebagai gantinya. Jika Anda mengatur `bold` dan `weight` sekaligus pada `Text`, `bold` tidak berpengaruh.355Pada rilis yang lebih lama dari v2.1.299, tree yang mengatur `weight` tidak digambar. Jika Anda mengatur `bold` dan `weight` sekaligus pada `Text`, `bold` tidak berpengaruh.

356 356 

357## Batas357## Batas

358 358 

359Hook dan panggilan API mod berjalan di bawah batas waktu dan ukuran. Claude Code melewati hook yang melampaui batas waktu.359Hook dan panggilan API mod berjalan di bawah batas waktu dan ukuran. Claude Code melewati hook yang melampaui batas waktu. Tree yang melampaui batas kedalaman bersarang, elemen, sel `Raster`, atau byte `Image` [tidak digambar](https://code.claude.com/docs/id/plugins/mods/troubleshoot.md#a-pane-or-band-is-empty).

360 360 

361| Batas | Nilai |361| Batas | Nilai |

362| :- | :- |362| :- | :- |


372| Redirect yang diikuti oleh satu panggilan `$.http.fetch` | 5 |372| Redirect yang diikuti oleh satu panggilan `$.http.fetch` | 5 |

373| Alasan `drop` dari hook atau alasan `deny` dari `config.set` | 4.096 karakter. Bagian akhir dari alasan yang lebih panjang dipotong, dan drop atau deny tetap berlaku. Pemotongan ini memerlukan Claude Code v2.1.292 atau yang lebih baru, dan pada versi sebelumnya hook tersebut [gagal](https://code.claude.com/docs/id/plugins/mods/events.md#handle-a-hook-that-fails) sebagai gantinya. |373| Alasan `drop` dari hook atau alasan `deny` dari `config.set` | 4.096 karakter. Bagian akhir dari alasan yang lebih panjang dipotong, dan drop atau deny tetap berlaku. Pemotongan ini memerlukan Claude Code v2.1.292 atau yang lebih baru, dan pada versi sebelumnya hook tersebut [gagal](https://code.claude.com/docs/id/plugins/mods/events.md#handle-a-hook-that-fails) sebagai gantinya. |

374| Teks dalam satu tree | 100.000 karakter pertama yang digambar |374| Teks dalam satu tree | 100.000 karakter pertama yang digambar |

375| `language` atau `path` dari `Code`, `value` dari opsi `Select`, atau `module` dari `Client` | 10.000 karakter. Jika salah satunya lebih panjang, Claude Code [menggambar versi situsnya sendiri](https://code.claude.com/docs/id/plugins/mods/interface.md#build-a-tree-from-elements). |375| `language` atau `path` dari `Code`, `value` dari opsi `Select`, atau `module` dari `Client` | 10.000 karakter. Jika salah satunya lebih panjang, hook `ui.render` yang mengembalikannya [gagal](https://code.claude.com/docs/id/plugins/mods/events.md#handle-a-hook-that-fails). |

376| `href` dari `Link` | 2.048 karakter. `href` yang lebih panjang membuat seluruh tree tidak digambar. |376| `href` dari `Link` | 2.048 karakter. Jika lebih panjang, hook `ui.render` yang mengembalikannya [gagal](https://code.claude.com/docs/id/plugins/mods/events.md#handle-a-hook-that-fails). |

377| Kedalaman bersarang satu tree | 32 level di bawah elemen root |

378| Elemen dan anak teks dalam satu tree | 20.000 |

379| Sel `Raster` dalam satu tree, yaitu `columns` dikali `rows` dari setiap `Raster` | 262.144 |

380| Byte PNG atau RGBA dari semua `Image` dalam satu tree | 2 MiB |

377| `$.store` | Total 4 MiB JSON |381| `$.store` | Total 4 MiB JSON |

378| `$.session.messages()` | 4.096 entri terbaru |382| `$.session.messages()` | 4.096 entri terbaru |

379| Penggambaran ulang `$.ui.invalidate('ui.render')` | Dibatasi hingga 10 per detik, atau 30 di terminal untuk panel yang terlihat, band yang diperluas, dan baris petunjuk di bawah prompt. Panggilan yang datang lebih cepat digabungkan. |383| Penggambaran ulang `$.ui.invalidate('ui.render')` | Dibatasi hingga 10 per detik, atau 30 di terminal untuk panel yang terlihat, band yang diperluas, dan baris petunjuk di bawah prompt. Panggilan yang datang lebih cepat digabungkan. |

Details

312| Metode | Apa yang dilakukannya |312| Metode | Apa yang dilakukannya |

313| :- | :- |313| :- | :- |

314| `press({ key: 'more' })` | Menekan `Button` dengan kunci itu |314| `press({ key: 'more' })` | Menekan `Button` dengan kunci itu |

315| `input({ key: 'new-note', text: 'buy milk' })` | Mengetik teks ke `Input` dengan kunci itu dan menekan Enter. Tambahkan `kind: 'change'` untuk mengetik tanpa mengirimkan. |315| `input({ key: 'new-note', text: 'buy milk' })` | Mengetik teks ke `Input` dengan kunci itu dan menekan Enter. Tambahkan `kind: 'change'` untuk mengetik tanpa mengirimkan. Untuk field dengan `rows`, teks dapat memuat `\n`. |

316| `select({ key: 'size', value: 'large' })` | Memilih opsi dengan nilai itu dalam `Select` dengan kunci itu |316| `select({ key: 'size', value: 'large' })` | Memilih opsi dengan nilai itu dalam `Select` dengan kunci itu |

317| `find({ key: 'more' })` atau `find({ type: 'Text', text: 'Count: 2' })` | Mengembalikan elemen pertama yang cocok sebagai `{ type, props, children }`, atau `undefined`. `text` dapat berupa string atau ekspresi reguler. |317| `find({ key: 'more' })` atau `find({ type: 'Text', text: 'Count: 2' })` | Mengembalikan elemen pertama yang cocok sebagai `{ type, props, children }`, atau `undefined`. `text` dapat berupa string atau ekspresi reguler. |

318| `unmount()` | Menghapus gambar |318| `unmount()` | Menghapus gambar |

319 319 

320Setiap metode menyelesaikan setelah handler Anda selesai, sehingga Anda dapat memeriksa hasil pada baris berikutnya. Atur `props` ke apa yang akan dilewatkan Claude Code untuk situs itu. [Tabel situs render](https://code.claude.com/docs/id/plugins/mods/reference.md#render-sites) mencantumkan props setiap situs, dan [tipe untuk build Anda](https://code.claude.com/docs/id/plugins/mods/create.md#get-the-types-for-your-build) memiliki tipe mereka.320Setiap metode menyelesaikan setelah handler Anda selesai, sehingga Anda dapat memeriksa hasil pada baris berikutnya. Atur `props` ke apa yang akan dilewatkan Claude Code untuk situs itu. [Tabel situs render](https://code.claude.com/docs/id/plugins/mods/reference.md#render-sites) mencantumkan props setiap situs, dan [tipe untuk build Anda](https://code.claude.com/docs/id/plugins/mods/create.md#get-the-types-for-your-build) memiliki tipe mereka.

321 321 

322Tes gambar memeriksa pohon yang dikembalikan hook Anda dan apakah itu valid untuk aplikasi itu. Itu tidak memeriksa bagaimana aplikasi melukisnya, jadi lihat tata letak baru dalam sesi nyata juga.322Untuk menangkap [pohon elemen](https://code.claude.com/docs/id/plugins/mods/interface.md#build-a-tree-from-elements) yang tidak valid untuk aplikasi yang Anda sebutkan di `surface`, periksa dengan `find` elemen yang ditambahkan hook Anda. Tes tidak memeriksa bagaimana aplikasi melukis pohon, jadi lihat tata letak baru dalam sesi nyata juga.

323 323 

324### Uji coba gambar setelah `/clear`324### Uji coba gambar setelah `/clear`

325 325 

Details

226 226 

227Untuk menemukan mod tersebut, [tulis debug log](#read-the-debug-log) dan cari `answered ui.render without next()` di dalamnya. Baris seperti `other-mod (user) answered ui.render without next()` menyebutkan mod yang mengembalikan tree-nya tanpa memanggil `next(e)`. Baris tersebut tidak menyebutkan [titik render](https://code.claude.com/docs/id/plugins/mods/reference.md#render-sites), sehingga mod yang hanya menggunakan pane juga dapat muncul. Mod yang memanggil `next(e)` lalu membuang hasilnya tidak menghasilkan baris apa pun, jadi periksa juga hook yang berjalan sebelum hook Anda.227Untuk menemukan mod tersebut, [tulis debug log](#read-the-debug-log) dan cari `answered ui.render without next()` di dalamnya. Baris seperti `other-mod (user) answered ui.render without next()` menyebutkan mod yang mengembalikan tree-nya tanpa memanggil `next(e)`. Baris tersebut tidak menyebutkan [titik render](https://code.claude.com/docs/id/plugins/mods/reference.md#render-sites), sehingga mod yang hanya menggunakan pane juga dapat muncul. Mod yang memanggil `next(e)` lalu membuang hasilnya tidak menghasilkan baris apa pun, jadi periksa juga hook yang berjalan sebelum hook Anda.

228 228 

229Setelah perubahan tersebut, Anda tidak melihat apa pun di band jika salah satu mod mengembalikan tree yang tidak valid. Untuk membaca alasannya, cari baris `ui.render (AbovePrompt) refused:` di transkrip sesi `--plugin-dir`, atau cari `does not validate` di debug log. Dengan beberapa mod di band, tidak satu pun baris tersebut menyebutkan mod, jadi periksa tree setiap mod.229Band sebuah mod juga tidak muncul ketika tree yang dikembalikan hook-nya sendiri tidak lolos validasi, sementara band mod lain tetap ada. Untuk mengetahui mod mana dan alasannya, [tulis debug log](#read-the-debug-log) dan cari [`ui.render hook skipped`](#a-pane-or-band-is-empty) di dalamnya.

230 230 

231### Pane atau band kosong atau menampilkan konten biasa Claude Code231### Pane atau band kosong atau menampilkan konten biasa Claude Code

232 232 

233[Tree](https://code.claude.com/docs/id/plugins/mods/interface.md#build-a-tree-from-elements) yang dikembalikan hook tidak divalidasi. Dengan `--plugin-dir`, transkrip mengatakan `ui.render (Pane) refused:` dengan alasan, seperti `first-mod: ui.render (Pane) refused: Box prop "flexDirection" must be one of row, column, row-reverse, column-reverse; the engine drew its own`. Debug log memiliki `a hook returned a tree that does not validate` dengan alasan yang sama.233[Tree](https://code.claude.com/docs/id/plugins/mods/interface.md#build-a-tree-from-elements) yang dikembalikan hook Anda tidak lolos validasi. Baris [`hook skipped`](#hook-skipped) [di transkrip atau debug log](#find-out-why-a-mod-does-nothing) menyebutkan mod Anda dan alasannya, seperti baris berikut untuk sebuah `Box` di pane:

234 234 

235Baca alasan di baris itu. Penyebab umum adalah prop yang tidak diambil elemen dan elemen yang tidak dimiliki aplikasi.235```text theme={null}

236first-mod: ui.render hook skipped: returned the wrong shape (a tree Pane refuses: Box prop "flexDirection" must be one of row, column, row-reverse, column-reverse)

237```

238 

239Perbaiki hal yang disebutkan alasan tersebut. Jika alasannya terpotong, [tulis debug log](#read-the-debug-log) dan cari `a hook returned a tree that does not validate` di dalamnya untuk membaca sisanya.

240 

241Jika baris tersebut justru mengatakan `refused:` tepat setelah nama titik render, seperti `ui.render (Pane) refused:`, lihat [Baris `ui.render` mengatakan `refused`](#ui-render-refused).

242 

243### Baris `ui.render` mengatakan `refused`

244 

245`ui.render (<site>) refused:`, atau `ui.render (<site>): the chain settled on a tree that does not validate` di [debug log](#read-the-debug-log), berarti [tree](https://code.claude.com/docs/id/plugins/mods/interface.md#build-a-tree-from-elements) di titik tersebut melampaui [batas ukuran](https://code.claude.com/docs/id/plugins/mods/reference.md#limits). Kedua baris tersebut menyebutkan [titik render](https://code.claude.com/docs/id/plugins/mods/reference.md#render-sites) lalu alasannya, dan alasan tersebut menyebutkan batasnya.

246 

247Ubah mod yang menggambar di titik tersebut agar hook [`ui.render`](https://code.claude.com/docs/id/plugins/mods/reference#interface) mereka mengembalikan tree yang lebih kecil, atau minta pembuatnya untuk melakukannya. Jika baris transkrip diawali dengan `hooks`, lebih dari satu mod yang dimuat memiliki hook `ui.render` untuk titik tersebut, jadi periksa tree setiap mod tersebut. Untuk beberapa mod yang band-nya di atas prompt bersarang menjadi tree dengan kedalaman lebih dari 32 tingkat, barisnya berbunyi:

248 

249```text theme={null}

250hooks: ui.render (AbovePrompt) refused: deeper than 32; nothing was drawn

251```

252 

253Sebelum v2.1.307, baris `refused:` untuk titik mana pun melaporkan tree apa pun yang tidak lolos validasi, dan untuk `Pane` dan `AbovePrompt` baris tersebut diakhiri dengan `; the engine drew its own`. Pada rilis tersebut, perbaiki hal yang disebutkan alasan tersebut.

236 254 

237### `needs a key`, `is drawn twice`, atau `key each once`255### `needs a key`, `is drawn twice`, atau `key each once`

238 256 


383hooks module first-mod@inline loaded (worker, environment 2, tier user); events: session.start,tool.call,command.run,ui.render401hooks module first-mod@inline loaded (worker, environment 2, tier user); events: session.start,tool.call,command.run,ui.render

384```402```

385 403 

386Gambar yang tidak divalidasi dihitung sebagai hasil yang ditolak dan mendapat baris juga. Untuk menulis baris Anda sendiri di log, panggil [`$.ui.log`](https://code.claude.com/docs/id/plugins/mods/api#show-something-without-starting-a-turn) dengan argumen kedua, seperti `$.ui.log('message', { to: 'debug' })`. Tanpa argumen kedua, `$.ui.log` menambahkan baris redup ke transkrip.404Untuk menulis baris Anda sendiri di log, panggil [`$.ui.log`](https://code.claude.com/docs/id/plugins/mods/api#show-something-without-starting-a-turn) dengan argumen kedua, seperti `$.ui.log('message', { to: 'debug' })`. Tanpa argumen kedua, `$.ui.log` menambahkan baris redup ke transkrip.

387 405 

388Saat Anda mengedit mod yang dimuat dengan `--plugin-dir`, transkrip menampilkan baris untuk setiap reload yang menyebutkan mod dan mencantumkan hook-nya. Jika penyimpanan memecah modul, baris mengatakan `reload failed, the previous version stays loaded:` dengan alasan, dan versi terakhir yang berfungsi terus berjalan hingga Claude Code memuat ulang plugin berikutnya, misalnya saat Anda menjalankan `/reload-plugins`.406Saat Anda mengedit mod yang dimuat dengan `--plugin-dir`, transkrip menampilkan baris untuk setiap reload yang menyebutkan mod dan mencantumkan hook-nya. Jika penyimpanan memecah modul, baris mengatakan `reload failed, the previous version stays loaded:` dengan alasan, dan versi terakhir yang berfungsi terus berjalan hingga Claude Code memuat ulang plugin berikutnya, misalnya saat Anda menjalankan `/reload-plugins`.

389 407 

plugins/org.md +6 −2

Details

182| `blockedMarketplaces` | Blocklist sumber marketplace, diperiksa sebelum allowlist | Tidak memblokir marketplace yang sudah didaftarkan dari sumber yang tidak cocok |182| `blockedMarketplaces` | Blocklist sumber marketplace, diperiksa sebelum allowlist | Tidak memblokir marketplace yang sudah didaftarkan dari sumber yang tidak cocok |

183| `syncClaudeAiPlugins` | Tetapkan `false` untuk menghentikan Claude Code mengunduh dan memuat plugin [disinkronkan dari claude.ai](https://code.claude.com/docs/id/plugins/loading.md#synced-plugins) untuk akun setiap pengguna. Memerlukan Claude Code v2.1.273 atau lebih baru | Tidak mematikan satu plugin yang disinkronkan. Untuk itu, tetapkan `"<name>@synced": false` dalam [`enabledPlugins`](https://code.claude.com/docs/id/settings-reference#enabledplugins) |183| `syncClaudeAiPlugins` | Tetapkan `false` untuk menghentikan Claude Code mengunduh dan memuat plugin [disinkronkan dari claude.ai](https://code.claude.com/docs/id/plugins/loading.md#synced-plugins) untuk akun setiap pengguna. Memerlukan Claude Code v2.1.273 atau lebih baru | Tidak mematikan satu plugin yang disinkronkan. Untuk itu, tetapkan `"<name>@synced": false` dalam [`enabledPlugins`](https://code.claude.com/docs/id/settings-reference#enabledplugins) |

184| `enabledPlugins` | `true` force-enable, `false` memblokir di setiap cakupan dan menyembunyikan plugin | Tidak menginstal plugin yang marketplace-nya tidak didaftarkan atau diizinkan |184| `enabledPlugins` | `true` force-enable, `false` memblokir di setiap cakupan dan menyembunyikan plugin | Tidak menginstal plugin yang marketplace-nya tidak didaftarkan atau diizinkan |

185| `disableSideloadFlags` | Menolak `--plugin-dir`, `--plugin-url`, `--agents`, opsi `plugins` Agent SDK, dan `--mcp-config` non-SDK pada startup, dan menolak folder yang dinamai dalam variabel [`CLAUDE_CODE_PLUGIN_DIRS`](https://code.claude.com/docs/id/env-vars#variables) dengan cara yang sama | Tidak membatasi `.mcp.json`, `claude mcp add`, atau server yang disediakan SDK. Pasangkan dengan [`allowedMcpServers`](https://code.claude.com/docs/id/managed-mcp) |185| `disableSideloadFlags` | Menolak `--plugin-dir`, `--plugin-url`, `--agents`, opsi `plugins` Agent SDK, dan folder yang dinamai dalam variabel [`CLAUDE_CODE_PLUGIN_DIRS`](https://code.claude.com/docs/id/env-vars#variables) pada startup, serta `--mcp-config` juga kecuali setiap server di dalamnya adalah entri `type: "sdk"` in-process. Menolak folder plugin yang ditambahkan aplikasi Agent SDK di tengah sesi dengan [`addPlugins`](https://code.claude.com/docs/id/agent-sdk/typescript#load-more-plugin-folders-with-addplugins) | Tidak membatasi `.mcp.json`, `claude mcp add`, atau server yang disediakan SDK. Pasangkan dengan [`allowedMcpServers`](https://code.claude.com/docs/id/managed-mcp) |

186| `disableCommandPluginSources` | Memblokir plugin dengan sumber `command` dari instalasi, pembaruan, atau pemuatan. Sumber `command` adalah sumber yang direktori plugin-nya dihasilkan dengan menjalankan perintah di mesin. Ketika tidak ditetapkan, mengambil nilai `allowManagedHooksOnly` | Tidak mempengaruhi jenis sumber lainnya |186| `disableCommandPluginSources` | Memblokir plugin dengan sumber `command` dari instalasi, pembaruan, atau pemuatan. Sumber `command` adalah sumber yang direktori plugin-nya dihasilkan dengan menjalankan perintah di mesin. Ketika tidak ditetapkan, mengambil nilai `allowManagedHooksOnly` | Tidak mempengaruhi jenis sumber lainnya |

187| `allowManagedHooksOnly` | Membatasi hook mana yang berjalan. Lihat [`allowManagedHooksOnly`](https://code.claude.com/docs/id/settings-reference#allowmanagedhooksonly) | Tidak mempercayai hook dari plugin yang diaktifkan pengguna sendiri |187| `allowManagedHooksOnly` | Membatasi hook mana yang berjalan. Lihat [`allowManagedHooksOnly`](https://code.claude.com/docs/id/settings-reference#allowmanagedhooksonly) | Tidak mempercayai hook dari plugin yang diaktifkan pengguna sendiri |

188| `strictPluginOnlyCustomization` | Memblokir skills, agents, hooks, dan server MCP yang tidak berasal dari plugin, pengaturan terkelola, atau built-in Claude Code. Ini juga menghentikan [plugin direktori skills](#keep-skills-directory-plugins-loading) dari memuat. Tetapkan `true` untuk mencakup semua empat jenis, atau array nilai `skills`, `agents`, `hooks`, dan `mcp` seperti `["skills", "hooks"]` untuk mencakup beberapa | Tidak membatasi plugin mana yang diinstal pengguna. Pasangkan dengan `strictKnownMarketplaces` |188| `strictPluginOnlyCustomization` | Memblokir skills, agents, hooks, dan server MCP yang tidak berasal dari plugin, pengaturan terkelola, atau built-in Claude Code. Ini juga menghentikan [plugin direktori skills](#keep-skills-directory-plugins-loading) dari memuat. Tetapkan `true` untuk mencakup semua empat jenis, atau array nilai `skills`, `agents`, `hooks`, dan `mcp` seperti `["skills", "hooks"]` untuk mencakup beberapa | Tidak membatasi plugin mana yang diinstal pengguna. Pasangkan dengan `strictKnownMarketplaces` |

189| `pluginSuggestionMarketplaces` | Marketplace yang pluginnya dapat muncul sebagai saran instalasi. Lihat [Recommend plugins](#recommend-plugins) | Tidak mempengaruhi tips built-in |189| `pluginSuggestionMarketplaces` | Marketplace yang pluginnya dapat muncul sebagai saran instalasi di terminal. Lihat [Recommend plugins](#recommend-plugins) | Tidak mempengaruhi tips built-in |

190| `pluginTrustMessage` | Menambahkan teks Anda ke peringatan kepercayaan yang ditunjukkan `/plugin` sebelum plugin diinstal | Tidak mengubah teks peringatan itu sendiri |190| `pluginTrustMessage` | Menambahkan teks Anda ke peringatan kepercayaan yang ditunjukkan `/plugin` sebelum plugin diinstal | Tidak mengubah teks peringatan itu sendiri |

191| `allowedChannelPlugins` | Mengganti daftar default plugin yang diizinkan untuk mendorong pesan channel. Memerlukan `channelsEnabled: true` | Lihat [Restrict which channel plugins can run](https://code.claude.com/docs/id/channels.md#restrict-which-channel-plugins-can-run) |191| `allowedChannelPlugins` | Mengganti daftar default plugin yang diizinkan untuk mendorong pesan channel. Memerlukan `channelsEnabled: true` | Lihat [Restrict which channel plugins can run](https://code.claude.com/docs/id/channels.md#restrict-which-channel-plugins-can-run) |

192| [`CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL=1`](https://code.claude.com/docs/id/env-vars) | Menghentikan sesi terminal interaktif dari auto-registering marketplace resmi | Tidak menghapus marketplace yang sudah didaftarkan. Allowlist dan blocklist gerbang auto-registering yang sama tanpanya. Mesin yang dimulai sekali dengan itu ditetapkan tidak melanjutkan auto-registering setelah Anda membatalkannya |192| [`CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL=1`](https://code.claude.com/docs/id/env-vars) | Menghentikan sesi terminal interaktif dari auto-registering marketplace resmi | Tidak menghapus marketplace yang sudah didaftarkan. Allowlist dan blocklist gerbang auto-registering yang sama tanpanya. Mesin yang dimulai sekali dengan itu ditetapkan tidak melanjutkan auto-registering setelah Anda membatalkannya |


361 361 

362Saran dari marketplace hanya muncul ketika itu didaftarkan di mesin pengguna, Anda mencantumkan namanya dalam `pluginSuggestionMarketplaces` dalam pengaturan terkelola, dan Anda mendeklarasikan sumbernya dalam kebijakan yang sama. Deklarasikan sumber baik sebagai entri `extraKnownMarketplaces` marketplace atau sebagai entri allowlist. Marketplace resmi hanya memerlukan nama. Lihat [Aktifkan saran dalam pengaturan terkelola](https://code.claude.com/docs/id/plugins/relevance.md#enable-suggestions-in-managed-settings).362Saran dari marketplace hanya muncul ketika itu didaftarkan di mesin pengguna, Anda mencantumkan namanya dalam `pluginSuggestionMarketplaces` dalam pengaturan terkelola, dan Anda mendeklarasikan sumbernya dalam kebijakan yang sama. Deklarasikan sumber baik sebagai entri `extraKnownMarketplaces` marketplace atau sebagai entri allowlist. Marketplace resmi hanya memerlukan nama. Lihat [Aktifkan saran dalam pengaturan terkelola](https://code.claude.com/docs/id/plugins/relevance.md#enable-suggestions-in-managed-settings).

363 363 

364> [!NOTE]

365>

366> Dalam percakapan sesi cloud, Claude dapat menyarankan plugin baik Anda mengatur `pluginSuggestionMarketplaces` maupun tidak. Untuk mematikan saran tersebut, lihat [Matikan saran plugin](https://code.claude.com/docs/id/claude-code-on-the-web.md#turn-off-plugin-suggestions).

367 

364## Audit dan tinjau368## Audit dan tinjau

365 369 

366Acara OpenTelemetry dan Analytics API memberi tahu Anda apa yang diinstal dan dijalankan armada Anda.370Acara OpenTelemetry dan Analytics API memberi tahu Anda apa yang diinstal dan dijalankan armada Anda.

Details

8 8 

9Claude Code dapat menyarankan pemasangan plugin dari marketplace organisasi Anda ketika sesi pengguna cocok dengan sinyal yang Anda tentukan untuk plugin tersebut. Sinyal mencakup direktori kerja, file yang telah dibaca Claude, dan perintah yang telah dijalankan Claude. Anda menentukannya dengan menambahkan blok `relevance` ke entri plugin di `marketplace.json`.9Claude Code dapat menyarankan pemasangan plugin dari marketplace organisasi Anda ketika sesi pengguna cocok dengan sinyal yang Anda tentukan untuk plugin tersebut. Sinyal mencakup direktori kerja, file yang telah dibaca Claude, dan perintah yang telah dijalankan Claude. Anda menentukannya dengan menambahkan blok `relevance` ke entri plugin di `marketplace.json`.

10 10 

11Operator marketplace menulis entri `relevance`. Administrator kemudian mendaftarkan whitelist marketplace dalam pengaturan terkelola. Pengguna tidak melihat saran dari marketplace sampai marketplace tersebut didaftarkan whitelist.11Operator marketplace menulis entri `relevance`. Administrator kemudian menambahkan marketplace ke allowlist dalam pengaturan terkelola. Di terminal, pengguna tidak melihat saran dari marketplace sampai marketplace tersebut ditambahkan ke allowlist.

12 12 

13> [!NOTE]13> [!NOTE]

14>14>

15> Kasus-kasus ini tercakup di halaman lain:15> Kasus-kasus ini tercakup di halaman lain:

16>16>

17> * **Anda ingin memasang plugins**: lihat [Pasang dan kelola plugins](https://code.claude.com/docs/id/plugins/install.md)17> * **Anda ingin memasang plugins**: lihat [Pasang dan kelola plugins](https://code.claude.com/docs/id/plugins/install.md)

18> * **Anda ingin mematikan saran**: lihat [Pahami cara kerja relevansi plugin](#understand-how-plugin-relevance-works)18> * **Anda ingin mematikan saran**: lihat [Pahami cara kerja relevansi plugin](#understand-how-plugin-relevance-works), atau untuk saran yang dibuat Claude dalam percakapan sesi cloud, [Matikan saran plugin](https://code.claude.com/docs/id/claude-code-on-the-web.md#turn-off-plugin-suggestions)

19 19 

20Mulai dengan bagian untuk peran Anda:20Mulai dengan bagian untuk peran Anda:

21 21 


158 158 

159## Aktifkan saran dalam pengaturan terkelola159## Aktifkan saran dalam pengaturan terkelola

160 160 

161Pengguna tidak melihat saran dari marketplace sampai administrator mendaftarkan whitelist dalam [pengaturan terkelola](https://code.claude.com/docs/id/plugins/org.md), bahkan ketika `marketplace.json` mendeklarasikan `relevance`.161Di terminal, pengguna tidak melihat saran dari marketplace sampai administrator menambahkannya ke allowlist dalam [pengaturan terkelola](https://code.claude.com/docs/id/plugins/org.md), bahkan ketika `marketplace.json` miliknya mendeklarasikan `relevance`.

162 162 

163Untuk mendaftarkan whitelist marketplace, edit pengaturan terkelola Anda sebagai berikut:163Untuk mendaftarkan whitelist marketplace, edit pengaturan terkelola Anda sebagai berikut:

164 164 

Details

121| `SELF_HOSTED_RUNNER_HOST_CONFIG_DIR` | `~/.claude` | Direktori ditangkap ke snapshot startup runner dan disemai ke `CLAUDE_CONFIG_DIR` setiap session; perubahan di disk berlaku setelah restart runner. Mengatur variabel juga memindahkan di mana runner membaca `.claude.json` untuk [MCP seeding](https://code.claude.com/docs/id/self-hosted-environments-configuration.md#mcp-servers), jadi mengaturnya, termasuk ke default sendiri, merelokasi lookup itu; arahkan ke direktori kosong untuk menonaktifkan seeding sepenuhnya. |121| `SELF_HOSTED_RUNNER_HOST_CONFIG_DIR` | `~/.claude` | Direktori ditangkap ke snapshot startup runner dan disemai ke `CLAUDE_CONFIG_DIR` setiap session; perubahan di disk berlaku setelah restart runner. Mengatur variabel juga memindahkan di mana runner membaca `.claude.json` untuk [MCP seeding](https://code.claude.com/docs/id/self-hosted-environments-configuration.md#mcp-servers), jadi mengaturnya, termasuk ke default sendiri, merelokasi lookup itu; arahkan ke direktori kosong untuk menonaktifkan seeding sepenuhnya. |

122| `SELF_HOSTED_RUNNER_MAX_LIFETIME_GRACE_MS` | `900000` | Berapa lama runner menunggu setelah session mencapai batas `--kill-session-after-min`, untuk turn yang sedang berjalan selesai atau release selesai, sebelum itu menghentikan session |122| `SELF_HOSTED_RUNNER_MAX_LIFETIME_GRACE_MS` | `900000` | Berapa lama runner menunggu setelah session mencapai batas `--kill-session-after-min`, untuk turn yang sedang berjalan selesai atau release selesai, sebelum itu menghentikan session |

123| `SELF_HOSTED_RUNNER_POST_TURN_SETTLE_MS` | `7000` | Batas pada berapa lama runner menghitung session sebagai sibuk untuk drain `--drain-wait-sec` setelah turn selesai, sementara proses session melaporkan akhir turn ke Anthropic. `0` atau nilai yang tidak dapat digunakan kembali ke default, jadi hold tidak dapat dimatikan. Memerlukan Claude Code v2.1.275 atau lebih baru. |123| `SELF_HOSTED_RUNNER_POST_TURN_SETTLE_MS` | `7000` | Batas pada berapa lama runner menghitung session sebagai sibuk untuk drain `--drain-wait-sec` setelah turn selesai, sementara proses session melaporkan akhir turn ke Anthropic. `0` atau nilai yang tidak dapat digunakan kembali ke default, jadi hold tidak dapat dimatikan. Memerlukan Claude Code v2.1.275 atau lebih baru. |

124| `SELF_HOSTED_RUNNER_SIGKILL_GRACE_MS` | `30000` | Berapa lama runner menunggu OS untuk mengirimkan `SIGKILL` ke child yang macet dalam I/O yang tidak dapat diinterupsi sebelum keluar sendiri. Floored pada `--post-session-hook-timeout-sec` plus 15 detik, dan 30 lebih banyak ketika `--push-outcome-on-release` diatur, jadi minimum efektif adalah 75 detik di default. |124| `SELF_HOSTED_RUNNER_SIGKILL_GRACE_MS` | `30000` | Berapa lama runner menunggu OS untuk mengirimkan `SIGKILL` ke child yang macet dalam I/O yang tidak dapat diinterupsi sebelum keluar sendiri. Setidaknya `--post-session-hook-timeout-sec` plus 15 detik, dan 30 detik lagi ketika `--push-outcome-on-release` diatur, jadi minimum efektif adalah 75 detik di default. |

125| `CLAUDE_RUNNER_FETCH_DEPTH` | `50` | Git fetch depth untuk fresh clone. Atur integer positif, atau `full` atau `0` untuk fetch lengkap. Untuk clone yang sudah ada di workspace, lihat [Menggunakan kembali checkout yang telah disiapkan sebelumnya](https://code.claude.com/docs/id/self-hosted-environments-deploy.md#reuse-a-pre-warmed-checkout). |125| `CLAUDE_RUNNER_FETCH_DEPTH` | `50` | Git fetch depth untuk fresh clone. Atur integer positif, atau `full` atau `0` untuk fetch lengkap. Untuk clone yang sudah ada di workspace, lihat [Menggunakan kembali checkout yang telah disiapkan sebelumnya](https://code.claude.com/docs/id/self-hosted-environments-deploy.md#reuse-a-pre-warmed-checkout). |

126| `CLAUDE_RUNNER_FETCH_SERVER_PROGRESS_CAP_MS` | `600000` | Berapa lama dalam milidetik, per percobaan, sebuah git fetch dapat menunggu data pertamanya sementara angka progres milik server git itu sendiri terus naik, seperti ketika server menyiapkan pack untuk repositori besar. `0` atau `off` mematikan penantian tersebut: fetch seperti itu kemudian dihentikan setelah dua menit tanpa data. Bilangan bulat lainnya dibatasi antara `120000` dan `1800000`, yaitu 2 hingga 30 menit. Memerlukan Claude Code v2.1.295 atau lebih baru. |126| `CLAUDE_RUNNER_FETCH_SERVER_PROGRESS_CAP_MS` | `600000` | Berapa lama dalam milidetik, per percobaan, sebuah git fetch dapat menunggu data pertamanya sementara angka progres milik server git itu sendiri terus naik, seperti ketika server menyiapkan pack untuk repositori besar. `0` atau `off` mematikan penantian tersebut: fetch seperti itu kemudian dihentikan setelah dua menit tanpa data. Bilangan bulat lainnya dibatasi antara `120000` dan `1800000`, yaitu 2 hingga 30 menit. Memerlukan Claude Code v2.1.295 atau lebih baru. |

127| `CLAUDE_RUNNER_SKIP_GIT_VERIFY` | unset | Ketika `1`, lewati pemeriksaan kehadiran `.git` setelah hook `checkout` berjalan. Atur ini ketika hook Anda materialize sumber non-git. |127| `CLAUDE_RUNNER_SKIP_GIT_VERIFY` | unset | Ketika `1`, lewati pemeriksaan kehadiran `.git` setelah hook `checkout` berjalan. Atur ini ketika hook Anda materialize sumber non-git. |

128| `FORCE_AUTOUPDATE_PLUGINS` | unset | Ketika `1`, biarkan marketplace plugin auto-update meskipun binary dipasang |128| `FORCE_AUTOUPDATE_PLUGINS` | unset | Ketika `1`, biarkan marketplace plugin auto-update meskipun binary disematkan |

129| `CLAUDE_CODE_DISABLE_ARTIFACT` | unset | Ketika `1`, nonaktifkan tool Artifact dalam session terlepas dari pengaturan admin organisasi, dan lepaskan persyaratan egress `*.frame.claudeusercontent.com` |129| `CLAUDE_CODE_DISABLE_ARTIFACT` | unset | Ketika `1`, nonaktifkan tool Artifact dalam session terlepas dari pengaturan admin organisasi, dan lepaskan persyaratan egress `*.frame.claudeusercontent.com` |

130 130 

131## Telemetry131## Telemetry

Details

170 170 

171**Peluncuran berikutnya dengan pengaturan yang di-cache:**171**Peluncuran berikutnya dengan pengaturan yang di-cache:**

172 172 

173* Pengaturan yang di-cache langsung berlaku saat startup, kecuali nilai `modelPricing` dan `managedMcpServers` yang di-cache serta environment variable yang ditahan Claude Code hingga server mengonfirmasi payload173* Pengaturan yang di-cache langsung berlaku saat startup, kecuali nilai `modelPricing` dan `managedMcpServers` yang di-cache; environment variable yang ditahan Claude Code hingga server mengonfirmasi payload; penghapusan, perubahan posisi, atau penonaktifan [penjaga bawaan](https://code.claude.com/docs/id/plugins/mods/admin.md#know-what-happens-by-default) oleh daftar plugin yang di-cache; dan, pada mesin tempat sumber yang dikelola endpoint mencantumkan atau mengaktifkan plugin-nya sendiri, [status organisasi](https://code.claude.com/docs/id/plugins/mods/admin.md#install-your-organizations-mods) dari plugin yang hanya diaktifkan oleh daftar yang di-cache

174* [`modelPricing`](https://code.claude.com/docs/id/settings-reference#modelpricing) yang di-cache tidak berlaku hingga pengambilan sesi mengonfirmasi payload. Sampai saat itu, angka biaya yang dilihat pengembang di `/usage` dan baris status menggunakan harga daftar174* [`modelPricing`](https://code.claude.com/docs/id/settings-reference#modelpricing) yang di-cache tidak berlaku hingga pengambilan sesi mengonfirmasi payload. Sampai saat itu, angka biaya yang dilihat pengembang di `/usage` dan baris status menggunakan harga daftar

175* Blok [`managedMcpServers`](https://code.claude.com/docs/id/settings-reference#managedmcpservers) yang di-cache tidak berlaku hingga pengambilan sesi mengonfirmasi payload. Claude Code menunggu hingga 30 detik untuk pengambilan tersebut sebelum menghubungkan server MCP. Jika pengambilan gagal atau mengalami timeout, sesi dimulai tanpa server milik organisasi, `/status` menyatakan hal tersebut, dan server-server tersebut terhubung setelah pengambilan berikutnya mengonfirmasinya. Lihat [Kapan server yang disediakan terhubung](https://code.claude.com/docs/id/managed-mcp.md#when-provided-servers-connect) untuk perilaku lengkapnya, termasuk peluncuran pertama. Memerlukan Claude Code v2.1.259 atau yang lebih baru175* Blok [`managedMcpServers`](https://code.claude.com/docs/id/settings-reference#managedmcpservers) yang di-cache tidak berlaku hingga pengambilan sesi mengonfirmasi payload. Claude Code menunggu hingga 30 detik untuk pengambilan tersebut sebelum menghubungkan server MCP. Jika pengambilan gagal atau mengalami timeout, sesi dimulai tanpa server milik organisasi, `/status` menyatakan hal tersebut, dan server-server tersebut terhubung setelah pengambilan berikutnya mengonfirmasinya. Lihat [Kapan server yang disediakan terhubung](https://code.claude.com/docs/id/managed-mcp.md#when-provided-servers-connect) untuk perilaku lengkapnya, termasuk peluncuran pertama. Memerlukan Claude Code v2.1.259 atau yang lebih baru

176* Nilai [`prependPlugins`](https://code.claude.com/docs/id/settings-reference#prependplugins), [`appendPlugins`](https://code.claude.com/docs/id/settings-reference#appendplugins), atau [`enabledPlugins`](https://code.claude.com/docs/id/settings-reference#enabledplugins) yang di-cache tidak dapat menghapus penjaga bawaan, mengubah posisinya, atau mematikannya hingga pengambilan sesi mengonfirmasi payload

177* Pada mesin tempat [sumber yang dikelola endpoint](https://code.claude.com/docs/id/managed-settings.md#choose-a-delivery-mechanism) mencantumkan atau mengaktifkan plugin-nya sendiri, plugin yang hanya diaktifkan oleh daftar yang di-cache dianggap sebagai [milik pengguna](https://code.claude.com/docs/id/plugins/mods/admin.md#install-your-organizations-mods), bukan milik organisasi Anda, hingga pengambilan mengonfirmasi payload

176* Claude Code mengambil pengaturan terbaru di latar belakang178* Claude Code mengambil pengaturan terbaru di latar belakang

177* Pengaturan yang di-cache tetap bertahan saat terjadi kegagalan jaringan. Jika pengambilan saat startup gagal, Claude Code memperingatkan dalam sesi interaktif bahwa kebijakan yang di-cache sedang berlaku179* Pengaturan yang di-cache tetap bertahan saat terjadi kegagalan jaringan. Jika pengambilan saat startup gagal, Claude Code memperingatkan dalam sesi interaktif bahwa kebijakan yang di-cache sedang berlaku

178* Hingga pengambilan berhasil, nilai yang ditahan saat startup tetap ditahan180* Hingga pengambilan berhasil, nilai yang ditahan saat startup tetap ditahan

sessions.md +30 −30

Details

226 226 

227Untuk cara pemadatan berinteraksi dengan CLAUDE.md, skills, dan aturan, lihat [panduan jendela konteks](https://code.claude.com/docs/id/context-window.md). Untuk strategi tentang kapan harus menghapus versus memadatkan, lihat [Praktik terbaik](https://code.claude.com/docs/id/best-practices.md#manage-your-session).227Untuk cara pemadatan berinteraksi dengan CLAUDE.md, skills, dan aturan, lihat [panduan jendela konteks](https://code.claude.com/docs/id/context-window.md). Untuk strategi tentang kapan harus menghapus versus memadatkan, lihat [Praktik terbaik](https://code.claude.com/docs/id/best-practices.md#manage-your-session).

228 228 

229## Ekspor dan temukan data sesi229## Mengekspor dan menemukan data sesi

230 230 

231Jalankan `/export` untuk membuka menu yang memungkinkan Anda menyalin percakapan saat ini ke clipboard atau menyimpannya sebagai file teks biasa, dengan pesan dan output alat dirender sebagai teks yang dapat dibaca. Teruskan nama file untuk melewati menu dan menulis langsung ke file tersebut.231Jalankan `/export` untuk membuka menu yang memungkinkan Anda menyalin percakapan saat ini ke clipboard atau menyimpannya sebagai file teks biasa, dengan pesan dan output tool ditampilkan sebagai teks yang mudah dibaca. Berikan nama file untuk melewati menu dan menulis langsung ke file tersebut.

232 232 

233### Akses percakapan dari skrip233### Mengakses percakapan dari skrip

234 234 

235`/export` menghasilkan transkrip yang dirender untuk dibaca oleh seseorang. Antarmuka di bawah ini menghasilkan data terstruktur untuk skrip diurai: hasil JSON dari suatu run, jalur ke file transkrip sesi, atau aliran peristiwa langsung. Pilih berdasarkan apa yang memicu skrip:235`/export` menghasilkan transkrip yang telah dirender untuk dibaca oleh manusia. Antarmuka di bawah ini menghasilkan data terstruktur untuk diurai oleh skrip: hasil JSON dari sebuah eksekusi, path ke file transkrip sebuah sesi, atau aliran event secara langsung. Pilih berdasarkan apa yang memicu skrip:

236 236 

237* **Jalankan Claude sekali dan tangkap hasilnya**: panggil `claude -p` dengan [`--output-format json` atau `stream-json`](https://code.claude.com/docs/id/headless#get-structured-output) untuk menangkap hasil, ID sesi, penggunaan, dan biaya dari run non-interaktif sebagai JSON terstruktur.237* **Menjalankan Claude sekali dan menangkap hasilnya**: panggil `claude -p` dengan [`--output-format json` atau `stream-json`](https://code.claude.com/docs/id/headless#get-structured-output) untuk menangkap hasil, ID sesi, penggunaan, dan biaya dari eksekusi non-interaktif sebagai JSON terstruktur.

238* **Tanyakan pertanyaan ke sesi yang ada**: teruskan ID sesi ke [`claude -p --resume`](https://code.claude.com/docs/id/headless#continue-conversations) untuk mengirim prompt tindak lanjut, seperti permintaan ringkasan, dan tangkap respons terstruktur.238* **Mengajukan pertanyaan ke sesi yang sudah ada**: berikan ID sesi ke [`claude -p --resume`](https://code.claude.com/docs/id/headless#continue-conversations) untuk mengirim prompt lanjutan, seperti permintaan ringkasan, dan menangkap respons terstruktur.

239* **Bereaksi terhadap peristiwa sesi**: baca bidang `transcript_path` yang diterima [hooks](https://code.claude.com/docs/id/hooks.md#common-input-fields) dan [perintah status line](https://code.claude.com/docs/id/statusline.md#available-data) sebagai input. Hook `SessionEnd` dapat mengarsipkan transkrip ketika sesi berakhir.239* **Bereaksi terhadap event sesi**: baca field `transcript_path` yang diterima sebagai input oleh [hook](https://code.claude.com/docs/id/hooks.md#common-input-fields) dan [perintah baris status](https://code.claude.com/docs/id/statusline.md#available-data). Hook `SessionEnd` dapat mengarsipkan transkrip saat sesi berakhir.

240* **Sematkan Claude dalam aplikasi TypeScript atau Python**: gunakan [Agent SDK](https://code.claude.com/docs/id/agent-sdk/overview.md) untuk menerima setiap pesan secara terprogram.240* **Menyematkan Claude dalam aplikasi TypeScript atau Python**: gunakan [Agent SDK](https://code.claude.com/docs/id/agent-sdk/overview.md) untuk menerima setiap pesan secara terprogram.

241 241 

242Contoh di bawah menggunakan antarmuka kedua. Ini mengirim prompt tindak lanjut ke sesi yang ada dan membaca jawaban dengan `jq`:242Contoh di bawah ini menggunakan antarmuka kedua. Contoh ini mengirim prompt lanjutan ke sesi yang sudah ada dan membaca jawabannya dengan `jq`:

243 243 

244```bash theme={null}244```bash theme={null}

245claude -p --resume <session-id> --output-format json "summarize what we changed" | jq -r '.result'245claude -p --resume <session-id> --output-format json "summarize what we changed" | jq -r '.result'

246```246```

247 247 

248### Tempat transkrip disimpan248### Lokasi penyimpanan transkrip

249 249 

250Secara default, Claude Code menyimpan transkrip sebagai JSONL di `~/.claude/projects/<project>/<session-id>.jsonl`, di mana `<project>` adalah jalur direktori kerja Anda dengan karakter non-alfanumerik diganti dengan `-`. Untuk direktori kerja yang nama konversinya melebihi 200 karakter, Claude Code memotong nama menjadi 200 karakter dan menambahkan hash dari jalur lengkap, sehingga nama direktori tetap dalam batas sistem file.250Secara default, Claude Code menyimpan transkrip sebagai JSONL di `~/.claude/projects/<project>/<session-id>.jsonl`, dengan `<project>` adalah path direktori kerja Anda yang karakter non-alfanumeriknya diganti dengan `-`. Untuk direktori kerja yang nama hasil konversinya melebihi 200 karakter, Claude Code memotong nama tersebut menjadi 200 karakter dan menambahkan hash dari path lengkap, sehingga nama direktori tetap berada dalam batas sistem file.

251 251 

252Setiap baris adalah objek JSON untuk pesan, penggunaan alat, atau entri metadata. Format entri bersifat internal untuk Claude Code dan berubah antar versi, jadi skrip yang mengurai file ini secara langsung dapat rusak pada rilis apa pun. Untuk membangun data sesi, gunakan `/export` atau [antarmuka skrip](#access-conversations-from-scripts) sebagai gantinya.252Setiap baris adalah objek JSON: sebuah pesan, penggunaan atau hasil tool, catatan permintaan yang dikirim Claude Code ke model, atau entri metadata. Format entri bersifat internal bagi Claude Code dan berubah antarversi, sehingga skrip yang mengurai file ini secara langsung dapat rusak pada rilis mana pun. Untuk membangun di atas data sesi, gunakan `/export` atau [antarmuka skrip](#access-conversations-from-scripts) sebagai gantinya.

253 253 

254Lokasi, retensi, dan perilaku penulisan dapat dikonfigurasi:254Lokasi, retensi, dan perilaku penulisan dapat dikonfigurasi:

255 255 

256| Untuk | Atur | Di mana |256| Untuk | Atur | Tempat |

257| - | - | - |257| - | - | - |

258| Pindahkan penyimpanan dari `~/.claude` | [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/id/env-vars) | Variabel lingkungan |258| Memindahkan penyimpanan dari `~/.claude` | [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/id/env-vars) | Environment variable |

259| [Beri nama direktori `<project>` sendiri](#name-the-project-directory-yourself) | [`CLAUDE_CODE_PROJECT_DIR_NAME`](https://code.claude.com/docs/id/env-vars) | Variabel lingkungan |259| [Memberi nama direktori `<project>` sendiri](#name-the-project-directory-yourself) | [`CLAUDE_CODE_PROJECT_DIR_NAME`](https://code.claude.com/docs/id/env-vars) | Environment variable |

260| Ubah retensi 30 hari | [`cleanupPeriodDays`](https://code.claude.com/docs/id/settings-reference#cleanupperioddays) | `settings.json` |260| Mengubah retensi 30 hari | [`cleanupPeriodDays`](https://code.claude.com/docs/id/settings-reference#cleanupperioddays) | `settings.json` |

261| Atur batas usia untuk [transkrip Claude Desktop dan Cowork](https://code.claude.com/docs/id/claude-directory.md#cleaned-up-automatically) | [`desktopSessionCleanupPeriodDays`](https://code.claude.com/docs/id/settings-reference#desktopsessioncleanupperioddays) | Pengaturan pengguna, pengaturan terkelola, atau `--settings` |261| Menetapkan batas usia untuk [transkrip Claude Desktop dan Cowork](https://code.claude.com/docs/id/claude-directory.md#cleaned-up-automatically) | [`desktopSessionCleanupPeriodDays`](https://code.claude.com/docs/id/settings-reference#desktopsessioncleanupperioddays) | Pengaturan pengguna, pengaturan terkelola, atau `--settings` |

262| Batasi seberapa besar file transkrip sesi `-p` atau Agent SDK dapat bertambah | [`CLAUDE_CODE_TRANSCRIPT_LOCAL_GC`](https://code.claude.com/docs/id/env-vars) | Variabel lingkungan |262| Membatasi seberapa besar file transkrip sesi `-p` atau Agent SDK dapat bertambah | [`CLAUDE_CODE_TRANSCRIPT_LOCAL_GC`](https://code.claude.com/docs/id/env-vars) | Environment variable |

263| Tekan penulisan transkrip di semua mode | [`CLAUDE_CODE_SKIP_PROMPT_HISTORY`](https://code.claude.com/docs/id/env-vars) | Variabel lingkungan |263| Menonaktifkan penulisan transkrip di semua mode | [`CLAUDE_CODE_SKIP_PROMPT_HISTORY`](https://code.claude.com/docs/id/env-vars) | Environment variable |

264| Tekan penulisan untuk satu run non-interaktif | [`--no-session-persistence`](https://code.claude.com/docs/id/cli-reference) | Flag CLI dengan `claude -p` |264| Menonaktifkan penulisan untuk satu eksekusi non-interaktif | [`--no-session-persistence`](https://code.claude.com/docs/id/cli-reference) | Flag CLI dengan `claude -p` |

265 265 

266### Hapus data sesi266### Menghapus data sesi

267 267 

268Transkrip kedaluwarsa berdasarkan [aturan penyapuan retensi](https://code.claude.com/docs/id/claude-directory.md#cleaned-up-automatically). Untuk menghapus transkrip proyek dan status terkait lebih cepat, jalankan [`claude purge`](https://code.claude.com/docs/id/claude-directory#clear-local-data). Jika Anda menghapus [sesi latar belakang](https://code.claude.com/docs/id/agent-view.md) dengan [`claude rm <id>`](https://code.claude.com/docs/id/agent-view#what-deleting-a-session-removes), transkrip tetap di disk dan tetap tersedia melalui `claude --resume`.268Transkrip kedaluwarsa sesuai [aturan pembersihan retensi](https://code.claude.com/docs/id/claude-directory.md#cleaned-up-automatically). Untuk menghapus transkrip proyek dan state terkait lebih cepat, jalankan [`claude purge`](https://code.claude.com/docs/id/claude-directory#clear-local-data). Jika Anda menghapus [sesi latar belakang](https://code.claude.com/docs/id/agent-view.md) dengan [`claude rm <id>`](https://code.claude.com/docs/id/agent-view#what-deleting-a-session-removes), transkripnya tetap ada di disk dan tetap tersedia melalui `claude --resume`.

269 269 

270### Beri nama direktori proyek sendiri270### Memberi nama direktori proyek sendiri

271 271 

272Secara default, Claude Code menurunkan nama `<project>` dari seluruh jalur direktori kerja. Untuk memilih nama sendiri, atur `CLAUDE_CODE_PROJECT_DIR_NAME` bersama dengan `CLAUDE_CONFIG_DIR`. Claude Code kemudian menyimpan transkrip sesi tersebut dan [auto memory](https://code.claude.com/docs/id/memory.md#auto-memory) di bawah nama Anda. Ini cocok untuk host yang menyematkan Claude Code dan memberikan setiap sesi direktori konfignya sendiri. Memerlukan Claude Code v2.1.234 atau lebih baru.272Secara default, Claude Code menurunkan nama `<project>` dari seluruh path direktori kerja. Untuk memilih nama sendiri, atur `CLAUDE_CODE_PROJECT_DIR_NAME` bersama dengan `CLAUDE_CONFIG_DIR`. Claude Code kemudian menyimpan transkrip sesi tersebut dan [auto memory](https://code.claude.com/docs/id/memory.md#auto-memory) di bawah nama yang Anda tentukan. Ini cocok untuk host yang menyematkan Claude Code dan memberikan direktori konfigurasi tersendiri untuk setiap sesi. Memerlukan Claude Code v2.1.234 atau yang lebih baru.

273 273 

274Misalnya, peluncuran ini menjaga data penyewa A di bawah `/srv/tenant-a` dan memberi nama direktori proyeknya `work`:274Misalnya, peluncuran ini menyimpan data tenant A di bawah `/srv/tenant-a` dan menamai direktori proyeknya `work`:

275 275 

276```bash theme={null}276```bash theme={null}

277CLAUDE_CONFIG_DIR=/srv/tenant-a CLAUDE_CODE_PROJECT_DIR_NAME=work claude277CLAUDE_CONFIG_DIR=/srv/tenant-a CLAUDE_CODE_PROJECT_DIR_NAME=work claude


279 279 

280Claude Code menulis transkrip sesi ke `/srv/tenant-a/projects/work/` dan auto memory-nya ke `/srv/tenant-a/projects/work/memory/`, apa pun direktori kerjanya.280Claude Code menulis transkrip sesi ke `/srv/tenant-a/projects/work/` dan auto memory-nya ke `/srv/tenant-a/projects/work/memory/`, apa pun direktori kerjanya.

281 281 

282Tiga aturan berlaku ketika Anda menetapkannya:282Tiga aturan berlaku saat Anda mengaturnya:

283 283 

284* **Atur `CLAUDE_CONFIG_DIR` juga**: nama tidak bervariasi dengan direktori kerja, jadi di bawah `~/.claude` default, nama tersebut akan menggabungkan transkrip dan auto memory setiap proyek ke dalam satu direktori. Claude Code mengabaikan `CLAUDE_CODE_PROJECT_DIR_NAME` ketika `CLAUDE_CONFIG_DIR` tidak diatur.284* **Atur juga `CLAUDE_CONFIG_DIR`**: nama tersebut tidak berubah mengikuti direktori kerja, sehingga di bawah `~/.claude` default, nama tersebut akan menggabungkan transkrip dan auto memory dari setiap proyek ke dalam satu direktori. Claude Code mengabaikan `CLAUDE_CODE_PROJECT_DIR_NAME` saat `CLAUDE_CONFIG_DIR` tidak diatur.

285* **Gunakan 1-64 huruf, digit, tanda hubung, atau garis bawah**: jangan gunakan nama perangkat Windows seperti `con`. Claude Code mengabaikan nilai apa pun dan menggunakan nama yang diturunkan.285* **Gunakan 1-64 huruf, angka, tanda hubung, atau garis bawah**: jangan gunakan nama perangkat Windows seperti `con`. Claude Code mengabaikan nilai lain selain itu dan menggunakan nama turunan.

286* **Atur di lingkungan shell yang memulai `claude`**: Claude Code membacanya sekali saat startup dari lingkungan tersebut, jadi blok `env` dalam file pengaturan tidak dapat menetapkannya.286* **Atur di lingkungan shell yang menjalankan `claude`**: Claude Code membacanya sekali saat startup dari lingkungan tersebut, sehingga blok `env` dalam file pengaturan tidak dapat mengaturnya.

287 287 

288Setelah Anda memberi nama direktori proyek direktori konfigurasi, terus luncurkan dengan nama tersebut. Jika Anda memulai Claude Code dengan `CLAUDE_CONFIG_DIR` yang sama tetapi tanpa `CLAUDE_CODE_PROJECT_DIR_NAME`, Claude Code membaca dan menulis direktori yang diturunkan lagi. Sesi yang disimpan di bawah nama Anda tetap di disk: tekan `Ctrl+A` di [pemilih sesi](#use-the-session-picker) untuk mencantumkan sesi dari setiap direktori proyek di bawah direktori konfigurasi tersebut, termasuk yang disematkan, dan apa pun cara Anda meluncurkan, [`claude --resume <session-id>`](#resume-a-session) menemukan sesi yang disimpan di bawah nama apa pun.288Setelah Anda memberi nama direktori proyek dari sebuah direktori konfigurasi, tetap luncurkan dengan nama tersebut. Jika Anda memulai Claude Code dengan `CLAUDE_CONFIG_DIR` yang sama tetapi tanpa `CLAUDE_CODE_PROJECT_DIR_NAME`, Claude Code akan kembali membaca dan menulis direktori turunan. Sesi yang disimpan di bawah nama Anda tetap ada di disk: tekan `Ctrl+A` di [pemilih sesi](#use-the-session-picker) untuk menampilkan daftar sesi dari setiap direktori proyek di bawah direktori konfigurasi tersebut, termasuk yang disematkan, dan dengan cara peluncuran mana pun, [`claude --resume <session-id>`](#resume-a-session) akan menemukan sesi yang disimpan di bawah salah satu nama tersebut.

289 289 

290## Lihat juga290## Lihat juga

291 291 

Details

2037* **Type**: array string, masing-masing nama layanan; satu `*` di akhir cocok dengan awalan, dan `"*"` saja cocok dengan setiap layanan2037* **Type**: array string, masing-masing nama layanan; satu `*` di akhir cocok dengan awalan, dan `"*"` saja cocok dengan setiap layanan

2038* **Default**: tidak diatur2038* **Default**: tidak diatur

2039 2039 

2040Ini mengizinkan setiap layanan di bawah awalan `com.apple.coresimulator.`:2040Contoh berikut mengizinkan setiap layanan di bawah prefiks `com.apple.CoreSimulator.`:

2041 2041 

2042```json settings.json theme={null}2042```json settings.json theme={null}

2043{2043{

2044 "sandbox": {2044 "sandbox": {

2045 "network": {2045 "network": {

2046 "allowMachLookup": ["com.apple.coresimulator.*"]2046 "allowMachLookup": ["com.apple.CoreSimulator.*"]

2047 }2047 }

2048 }2048 }

2049}2049}


4729* **Type**: array of strings, jalur direktori relatif terhadap root repositori4729* **Type**: array of strings, jalur direktori relatif terhadap root repositori

4730* **Default**: unset, sehingga setiap worktree melakukan checkout seluruh pohon4730* **Default**: unset, sehingga setiap worktree melakukan checkout seluruh pohon

4731 4731 

4732Contoh ini melakukan checkout hanya untuk `packages/my-app` dan `shared/utils`, ditambah file tingkat root, di setiap worktree:4732Sertakan `.claude` dalam daftar agar setiap worktree juga memiliki `.claude/settings.json` dan `.claude/rules/` milik repositori. Contoh ini melakukan checkout hanya untuk `.claude`, `packages/my-app`, dan `shared/utils`, ditambah file tingkat root, di setiap worktree:

4733 4733 

4734```json settings.json theme={null}4734```json settings.json theme={null}

4735{4735{

4736 "worktree": {4736 "worktree": {

4737 "sparsePaths": ["packages/my-app", "shared/utils"]4737 "sparsePaths": [".claude", "packages/my-app", "shared/utils"]

4738 }4738 }

4739}4739}

4740```4740```


5525 5525 

5526Claude Code masih menerima `--mcp-config` yang servernya adalah semua entri `type: "sdk"` dalam proses, sehingga Agent SDK dan ekstensi VS Code tetap berfungsi. Pengguna masih dapat menambahkan server dengan `claude mcp add` atau file `.mcp.json`; untuk kontrol per-server, atur [`allowedMcpServers`](https://code.claude.com/docs/id/managed-mcp) juga. Memerlukan Claude Code v2.1.193 atau lebih baru.5526Claude Code masih menerima `--mcp-config` yang servernya adalah semua entri `type: "sdk"` dalam proses, sehingga Agent SDK dan ekstensi VS Code tetap berfungsi. Pengguna masih dapat menambahkan server dengan `claude mcp add` atau file `.mcp.json`; untuk kontrol per-server, atur [`allowedMcpServers`](https://code.claude.com/docs/id/managed-mcp) juga. Memerlukan Claude Code v2.1.193 atau lebih baru.

5527 5527 

5528Pemeriksaan yang sama mencakup folder plugin yang dinamai dalam variabel lingkungan [`CLAUDE_CODE_PLUGIN_DIRS`](https://code.claude.com/docs/id/env-vars#variables), yang memerlukan Claude Code v2.1.280 atau lebih baru. Ketika variabel menyebutkan folder, Claude Code keluar dengan kesalahan yang sama, dan kesalahan mengatakan untuk membatalkan pengaturan variabel.5528`disableSideloadFlags` juga menolak folder plugin dari sumber-sumber berikut:

5529 

5530* **Environment variable [`CLAUDE_CODE_PLUGIN_DIRS`](https://code.claude.com/docs/id/env-vars#variables)**: ketika variabel tersebut menyebutkan folder plugin, Claude Code keluar saat startup dengan kesalahan yang menyebutkan variabel tersebut dan meminta Anda untuk membatalkan pengaturannya. Memerlukan Claude Code v2.1.280 atau lebih baru

5531* **Opsi [`addPlugins`](https://code.claude.com/docs/id/agent-sdk/typescript#load-more-plugin-folders-with-addplugins) Agent SDK**: ketika aplikasi meneruskan folder plugin ke `reloadPlugins()` dalam `addPlugins`, panggilan tersebut gagal dengan kesalahan. Sesi tetap berjalan dengan plugin yang sudah dimilikinya. Memerlukan Claude Code v2.1.301 atau lebih baru

5529 5532 

5530Dalam sesi cloud, Claude Code juga mengabaikan pembaruan MCP yang dikirimkan server di tengah sesi, jalur di balik konfigurasi sesi cloud dan panggilan SDK `setMcpServers()` yang mencapai sesi tersebut. Entri `type: "sdk"` dalam proses dan alat Slack sesi Claude Tag tetap dikecualikan di sana juga. Sebelum v2.1.268, baik penghapusan ini maupun penghapusan startup juga menghapus alat Slack sesi Claude Tag. Sebelum v2.1.239, `--mcp-config` yang dikirimkan server memblokir sesi cloud dari dimulai.5533Dalam sesi cloud, Claude Code juga mengabaikan pembaruan MCP yang dikirimkan server di tengah sesi, jalur di balik konfigurasi sesi cloud dan panggilan SDK `setMcpServers()` yang mencapai sesi tersebut. Entri `type: "sdk"` dalam proses dan alat Slack sesi Claude Tag tetap dikecualikan di sana juga. Sebelum v2.1.268, baik penghapusan ini maupun penghapusan startup juga menghapus alat Slack sesi Claude Tag. Sebelum v2.1.239, `--mcp-config` yang dikirimkan server memblokir sesi cloud dari dimulai.

5531 5534 


5748}5751}

5749```5752```

5750 5753 

5751Setelah sumber admin mengaktifkan rantai, kebijakan HKCU bergabung dengannya di WSL hanya ketika HKCU juga menetapkan kunci ke `true`. Salinan itu tidak mengaktifkan rantai dengan sendirinya. Sumber Windows yang hanya berisi kunci ini tidak dihitung sebagai sumber kebijakan, jadi sumber prioritas yang lebih rendah masih menyediakan kebijakan. Kunci ini tidak berpengaruh pada Windows asli.5754Setelah sumber admin mengaktifkan rantai, kebijakan HKCU bergabung dengannya di WSL hanya ketika HKCU juga menetapkan kunci ke `true`. Salinan itu tidak mengaktifkan rantai dengan sendirinya. Sumber Windows yang hanya berisi kunci ini, yang diatur ke `true` atau `false`, tidak dihitung sebagai sumber kebijakan, jadi sumber prioritas yang lebih rendah masih menyediakan kebijakan. Kunci ini tidak berpengaruh pada Windows asli.

5752 5755 

5753Claude Code membaca `true` dan `false` dengan atau tanpa tanda kutip dan membaca `null` sebagai menghapus kunci. Sumber Windows yang dikontrol admin yang menyimpan nilai apa pun yang lain dihitung sebagai [dokumen admin yang ada](https://code.claude.com/docs/id/managed-settings.md#present-admin-documents) dengan rantai diaktifkan: baik `/etc/claude-code` maupun HKCU tidak berlaku, dan peringatan startup menyebutkan kunci. Nilai HKLM atau file folder Windows yang ada tetapi tidak dapat dibaca juga menjaga `/etc/claude-code` dari berlaku terlepas dari apakah rantai aktif. Memerlukan Claude Code v2.1.282 atau lebih baru.5756Claude Code membaca `true` dan `false` dengan atau tanpa tanda kutip dan membaca `null` sebagai menghapus kunci. Sumber Windows yang dikontrol admin yang menyimpan nilai apa pun yang lain dihitung sebagai [dokumen admin yang ada](https://code.claude.com/docs/id/managed-settings.md#present-admin-documents) dengan rantai diaktifkan: baik `/etc/claude-code` maupun HKCU tidak berlaku, dan peringatan startup menyebutkan kunci. Nilai HKLM atau file folder Windows yang ada tetapi tidak dapat dibaca juga menjaga `/etc/claude-code` dari berlaku terlepas dari apakah rantai aktif. Memerlukan Claude Code v2.1.282 atau lebih baru.

5754 5757 

vs-code.md +36 −17

Details

203What's in @src/components/ (include a trailing slash for folders)203What's in @src/components/ (include a trailing slash for folders)

204```204```

205 205 

206Untuk PDF berukuran besar, Anda dapat meminta Claude membaca halaman tertentu alih-alih seluruh file. Mintalah satu halaman, rentang seperti halaman 1-10, atau rentang terbuka seperti halaman 3 dan seterusnya. Membaca halaman tertentu memerlukan [poppler-utils](https://code.claude.com/docs/id/tools-reference.md#read-tool-behavior) di mesin tempat Claude Code berjalan.206### Membaca halaman tertentu dari PDF

207 

208Ketika Anda memilih teks di editor, Claude dapat melihat kode yang Anda sorot secara otomatis. Footer kotak prompt menampilkan berapa banyak baris yang dipilih. Tekan `Option+K` (Mac) / `Alt+K` (Windows/Linux) untuk menyisipkan @-mention dengan path file dan nomor baris, misalnya `@app.ts#5-10`. Klik **X** pada indikator pilihan untuk menghapusnya sehingga Claude tidak menerima pilihan tersebut. Indikator akan muncul kembali ketika Anda memilih teks lain.

209 207 

210Ekstensi menahan teks yang dipilih dari beberapa file:208Untuk PDF berukuran besar, Anda dapat meminta Claude membaca halaman tertentu alih-alih seluruh file. Mintalah satu halaman, rentang seperti halaman 1-10, atau rentang terbuka seperti halaman 3 dan seterusnya. Membaca halaman tertentu memerlukan [poppler-utils](https://code.claude.com/docs/id/tools-reference.md#read-tool-behavior) di mesin tempat Claude Code berjalan.

211 

212* Ketika file berada di dalam workspace Anda dan cocok dengan pengaturan `files.exclude` atau `search.exclude` Anda, Claude paling banyak menerima path file dan bukan teks yang Anda pilih.

213* Hal yang sama berlaku untuk file yang diabaikan git, selama pengaturan `search.useIgnoreFiles` VS Code dan [pengaturan `respectGitIgnore`](#extension-settings) ekstensi keduanya aktif, yang merupakan default.

214 209 

215Filter ini hanya mencakup panel chat. Ketika Claude Code berjalan di terminal terintegrasi, CLI mengirimkan teks yang Anda pilih apa pun filenya. Untuk menjaga konten file dari Claude di sana, tambahkan [aturan deny `Read`](#the-built-in-ide-mcp-server).210### Menyertakan output terminal dalam prompt

216 211 

217Claude juga melihat file mana yang Anda buka di editor, bahkan ketika tidak ada yang dipilih, dan kotak prompt menampilkan namanya. Untuk hanya menambahkan teks yang Anda pilih, nonaktifkan [pengaturan Attach Open File](vscode://settings/claudeCode.attachOpenFile). Pengaturan ini memerlukan Claude Code v2.1.271 atau yang lebih baru.212Referensikan output terminal dalam prompt Anda menggunakan `@terminal:name` di mana `name` adalah judul terminal. Ini memungkinkan Claude melihat output perintah, pesan error, atau log tanpa perlu menyalin-tempel.

218 213 

219Anda juga dapat melampirkan gambar dan file ke pesan Anda:214### Melampirkan gambar dan file

220 215 

221* Untuk melampirkan gambar, tempelkan dari clipboard Anda ke kotak prompt.216* Untuk melampirkan gambar, tempelkan dari clipboard Anda ke kotak prompt.

222* Untuk melampirkan file, tahan `Shift` sambil menyeretnya ke kotak prompt.217* Untuk melampirkan file, tahan `Shift` sambil menyeretnya ke kotak prompt.

223* Untuk menghapus lampiran dari konteks, klik X pada lampiran tersebut.218* Untuk menghapus lampiran dari konteks, klik X pada lampiran tersebut.

224 219 

225### Menyertakan output terminal dalam prompt

226 

227Referensikan output terminal dalam prompt Anda menggunakan `@terminal:name` di mana `name` adalah judul terminal. Ini memungkinkan Claude melihat output perintah, pesan error, atau log tanpa perlu menyalin-tempel.

228 

229### Menempelkan teks220### Menempelkan teks

230 221 

231Teks yang Anda tempelkan tetap terlihat di kotak prompt, alih-alih diciutkan menjadi placeholder seperti [di terminal](https://code.claude.com/docs/id/terminal-config.md#paste-large-content). Dalam sesi di mana Claude Code [menandai teks yang ditempelkan](https://code.claude.com/docs/id/terminal-config.md#how-claude-treats-pasted-text), Claude tetap melihat tempelan besar sebagai teks yang Anda tempelkan, bukan yang Anda ketik.222Teks yang Anda tempelkan tetap terlihat di kotak prompt, alih-alih diciutkan menjadi placeholder seperti [di terminal](https://code.claude.com/docs/id/terminal-config.md#paste-large-content). Dalam sesi di mana Claude Code [menandai teks yang ditempelkan](https://code.claude.com/docs/id/terminal-config.md#how-claude-treats-pasted-text), Claude tetap melihat tempelan besar sebagai teks yang Anda tempelkan, bukan yang Anda ketik.


235* Jika pemberitahuan seperti `Removed 3 invisible characters from the pasted text` muncul saat Anda menempel, teks masuk tanpa karakter tersebut.226* Jika pemberitahuan seperti `Removed 3 invisible characters from the pasted text` muncul saat Anda menempel, teks masuk tanpa karakter tersebut.

236* Jika pemberitahuan tentang karakter yang dihapus muncul saat Anda mengirim, tidak ada yang terkirim. Teks yang telah dibersihkan kembali ke kotak prompt. Kirim lagi untuk mengirim teks seperti yang ditampilkan.227* Jika pemberitahuan tentang karakter yang dihapus muncul saat Anda mengirim, tidak ada yang terkirim. Teks yang telah dibersihkan kembali ke kotak prompt. Kirim lagi untuk mengirim teks seperti yang ditampilkan.

237 228 

229### Konteks otomatis dari pilihan Anda dan file yang dibuka

230 

231Ketika Anda memilih teks di editor, Claude dapat melihat kode yang Anda sorot secara otomatis. Footer kotak prompt menampilkan berapa banyak baris yang dipilih. Claude juga melihat file mana yang Anda buka di editor, bahkan ketika tidak ada yang dipilih, dan kotak prompt menampilkan namanya.

232 

233Tekan `Option+K` (Mac) / `Alt+K` (Windows/Linux) untuk menyisipkan @-mention dengan path file dan nomor baris, misalnya `@app.ts#5-10`.

234 

235#### Menjaga pilihan Anda dan file yang dibuka agar tidak masuk ke pesan Anda

236 

237Untuk mencegah teks yang dipilih atau file yang Anda buka masuk ke pesan Anda, nonaktifkan pengaturan yang sesuai di pengaturan VS Code:

238 

239* **Teks yang dipilih**: nonaktifkan [pengaturan Attach Selection](vscode://settings/claudeCode.attachSelection). Memerlukan Claude Code v2.1.300 atau yang lebih baru. Untuk membuang satu pilihan, klik **X** di samping jumlah baris. Jumlah tersebut muncul kembali ketika Anda memilih teks lain.

240* **File yang dibuka**: nonaktifkan [pengaturan Attach Open File](vscode://settings/claudeCode.attachOpenFile). Memerlukan Claude Code v2.1.271 atau yang lebih baru. File tersebut tidak disertakan kecuali pesan Anda menyertakan teks yang Anda pilih di dalamnya.

241 

242Untuk menambahkan teks sebagai @-mention saat Attach Selection nonaktif, pilih teks tersebut dan tekan `Option+K` di Mac atau `Alt+K` di Windows dan Linux.

243 

244Kedua pengaturan juga berlaku ketika Anda menjalankan `claude` di terminal terintegrasi VS Code.

245 

246#### Teks yang dipilih dari file yang dikecualikan atau diabaikan

247 

248Di panel chat, ekstensi menahan teks yang dipilih dari beberapa file:

249 

250* Ketika file berada di dalam workspace Anda dan cocok dengan pengaturan `files.exclude` atau `search.exclude` Anda, Claude paling banyak menerima path file dan bukan teks yang Anda pilih.

251* Hal yang sama berlaku untuk file yang diabaikan git, selama pengaturan `search.useIgnoreFiles` VS Code dan [pengaturan `respectGitIgnore`](#extension-settings) ekstensi keduanya aktif, yang merupakan default.

252 

253Filter ini hanya mencakup panel chat. Ketika Claude Code berjalan di terminal terintegrasi, Claude dapat menerima teks yang Anda pilih di file-file ini. Untuk menjaga konten file dari Claude di sana, tambahkan [aturan deny `Read`](https://code.claude.com/docs/id/permissions#read-and-edit).

254 

238### Matematika LaTeX dalam respons255### Matematika LaTeX dalam respons

239 256 

240Panel chat menampilkan matematika LaTeX dalam respons Claude sebagai rumus yang di-typeset. Rendering matematika memerlukan Claude Code v2.1.301 atau yang lebih baru. Dalam [mode terminal](#switch-to-terminal-mode), matematika tidak di-typeset. Panel men-typeset matematika display maupun matematika inline:257Panel chat menampilkan matematika LaTeX dalam respons Claude sebagai rumus yang di-typeset. Rendering matematika memerlukan Claude Code v2.1.301 atau yang lebih baru. Dalam [mode terminal](#switch-to-terminal-mode), matematika tidak di-typeset. Panel men-typeset matematika display maupun matematika inline:


694| `preferredLocation` | `panel` | Tempat Claude terbuka: `sidebar` (kanan) atau `panel` (tab baru) |711| `preferredLocation` | `panel` | Tempat Claude terbuka: `sidebar` (kanan) atau `panel` (tab baru) |

695| `lockEditorGroups` | `true` | [Mengunci grup editor yang dimulai Claude untuk tab-tabnya](#choose-where-claude-lives), sehingga file yang Anda buka saat tab Claude sedang difokuskan akan masuk ke grup lain. Jika dinonaktifkan, ekstensi tidak pernah mengunci grup editor. Memerlukan Claude Code v2.1.274 atau yang lebih baru |712| `lockEditorGroups` | `true` | [Mengunci grup editor yang dimulai Claude untuk tab-tabnya](#choose-where-claude-lives), sehingga file yang Anda buka saat tab Claude sedang difokuskan akan masuk ke grup lain. Jika dinonaktifkan, ekstensi tidak pernah mengunci grup editor. Memerlukan Claude Code v2.1.274 atau yang lebih baru |

696| `autosave` | `true` | Menyimpan file secara otomatis sebelum Claude membaca atau menulisnya |713| `autosave` | `true` | Menyimpan file secara otomatis sebelum Claude membaca atau menulisnya |

697| `attachOpenFile` | `true` | Menambahkan file yang terbuka di editor ke pesan Anda dan menampilkannya di kotak prompt. Jika dinonaktifkan, hanya teks yang Anda pilih yang ditambahkan. Memerlukan Claude Code v2.1.271 atau yang lebih baru |714| `attachOpenFile` | `true` | Menambahkan file yang terbuka di editor ke pesan Anda dan menampilkannya di kotak prompt. Jika dinonaktifkan, file hanya ditambahkan bersama teks yang Anda pilih. Memerlukan Claude Code v2.1.271 atau yang lebih baru |

715| `attachSelection` | `true` | Menambahkan teks yang Anda pilih di editor ke pesan Anda dan menampilkannya di kotak prompt. Jika dinonaktifkan, Anda tetap dapat [menambahkan pilihan sebagai @-mention](#automatic-context-from-your-selection-and-open-file). Memerlukan Claude Code v2.1.300 atau yang lebih baru |

698| `useCtrlEnterToSend` | `false` | Menggunakan Ctrl/Cmd+Enter alih-alih Enter untuk mengirim prompt |716| `useCtrlEnterToSend` | `false` | Menggunakan Ctrl/Cmd+Enter alih-alih Enter untuk mengirim prompt |

699| `scrollToBottomOnSend` | `true` | Menggulir percakapan ke bagian bawah saat Anda mengirim pesan. Jika dinonaktifkan, percakapan tetap berada di posisi terakhir Anda. Memerlukan Claude Code v2.1.275 atau yang lebih baru |717| `scrollToBottomOnSend` | `true` | Menggulir percakapan ke bagian bawah saat Anda mengirim pesan. Jika dinonaktifkan, percakapan tetap berada di posisi terakhir Anda. Memerlukan Claude Code v2.1.275 atau yang lebih baru |

700| `showMessageTimestamps` | `true` | Menampilkan waktu setiap pesan dikirim. Garis tanggal menandai tempat hari berganti. Memerlukan Claude Code v2.1.284 atau yang lebih baru. Sebelum v2.1.290, nilai default-nya adalah `false` |718| `showMessageTimestamps` | `true` | Menampilkan waktu setiap pesan dikirim. Garis tanggal menandai tempat hari berganti. Memerlukan Claude Code v2.1.284 atau yang lebih baru. Sebelum v2.1.290, nilai default-nya adalah `false` |


705| `continueAfterReload` | `true` | Setelah jendela dimuat ulang, Claude [melanjutkan langkah yang terputus](#continue-conversations-after-a-reload) di sesi yang dipulihkan. Memerlukan Claude Code v2.1.274 atau yang lebih baru |723| `continueAfterReload` | `true` | Setelah jendela dimuat ulang, Claude [melanjutkan langkah yang terputus](#continue-conversations-after-a-reload) di sesi yang dipulihkan. Memerlukan Claude Code v2.1.274 atau yang lebih baru |

706| `hideOnboarding` | `false` | Menyembunyikan daftar periksa orientasi (ikon topi wisuda) |724| `hideOnboarding` | `false` | Menyembunyikan daftar periksa orientasi (ikon topi wisuda) |

707| `focusView` | `false` | Menyembunyikan panggilan tool, hasil tool, dan thinking di balik baris yang dapat diperluas, sehingga menyisakan prompt Anda dan respons Claude. Daftar tugas terbaru Claude tetap terlihat; fitur ini memerlukan Claude Code v2.1.225 atau yang lebih baru. Anda juga dapat mengaktifkan atau menonaktifkan tampilan Fokus dari menu perintah. Memerlukan Claude Code v2.1.221 atau yang lebih baru |725| `focusView` | `false` | Menyembunyikan panggilan tool, hasil tool, dan thinking di balik baris yang dapat diperluas, sehingga menyisakan prompt Anda dan respons Claude. Daftar tugas terbaru Claude tetap terlihat; fitur ini memerlukan Claude Code v2.1.225 atau yang lebih baru. Anda juga dapat mengaktifkan atau menonaktifkan tampilan Fokus dari menu perintah. Memerlukan Claude Code v2.1.221 atau yang lebih baru |

708| `respectGitIgnore` | `true` | Mengecualikan pola .gitignore dari pencarian file dan dari [konteks pilihan](#reference-files-and-folders) |726| `respectGitIgnore` | `true` | Mengecualikan pola .gitignore dari pencarian file dan dari [konteks pilihan](#selected-text-from-excluded-or-ignored-files) |

709| `usePythonEnvironment` | `true` | Mengaktifkan environment Python milik workspace saat menjalankan Claude. Memerlukan ekstensi Python. |727| `usePythonEnvironment` | `true` | Mengaktifkan environment Python milik workspace saat menjalankan Claude. Memerlukan ekstensi Python. |

710| `environmentVariables` | `[]` | Mengatur environment variable untuk proses Claude. Gunakan pengaturan Claude Code sebagai gantinya untuk konfigurasi bersama. Entri [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/id/env-vars) hanya berlaku jika nilainya berupa path absolut; ekstensi tidak memperluas `~` dan mengabaikan nilai relatif. |728| `environmentVariables` | `[]` | Mengatur environment variable untuk proses Claude. Gunakan pengaturan Claude Code sebagai gantinya untuk konfigurasi bersama. Entri [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/id/env-vars) hanya berlaku jika nilainya berupa path absolut; ekstensi tidak memperluas `~` dan mengabaikan nilai relatif. |

711| `disableLoginPrompt` | `false` | Melewati permintaan autentikasi (untuk pengaturan penyedia pihak ketiga) |729| `disableLoginPrompt` | `false` | Melewati permintaan autentikasi (untuk pengaturan penyedia pihak ketiga) |


835 853 

836**Konteks pilihan dan file yang terbuka.** Selama terhubung, CLI menyertakan pilihan editor Anda saat ini dan path file yang aktif sebagai konteks pada setiap prompt yang Anda kirim. Transkrip menampilkan baris `⧉ Selected N lines from <file>` ketika hal ini terjadi. Kasus-kasus berikut mengubah konteks tersebut:854**Konteks pilihan dan file yang terbuka.** Selama terhubung, CLI menyertakan pilihan editor Anda saat ini dan path file yang aktif sebagai konteks pada setiap prompt yang Anda kirim. Transkrip menampilkan baris `⧉ Selected N lines from <file>` ketika hal ini terjadi. Kasus-kasus berikut mengubah konteks tersebut:

837 855 

856* **[Pengaturan Attach Selection](#keep-your-selection-and-open-file-out-of-your-messages) dimatikan**: CLI tidak menyertakan pilihan Anda sebagai konteks.

857* **Pengaturan Attach Open File dimatikan**: CLI menyertakan path file yang aktif hanya ketika CLI juga menyertakan pilihan.

838* **Pesan dalam antrean**: jika Anda [mengantrekan pesan saat Claude bekerja](https://code.claude.com/docs/id/interactive-mode.md#queue-messages-while-claude-works), pesan tersebut mempertahankan pilihan yang Anda miliki saat menekan `Enter`, apa pun yang Anda pilih setelahnya.858* **Pesan dalam antrean**: jika Anda [mengantrekan pesan saat Claude bekerja](https://code.claude.com/docs/id/interactive-mode.md#queue-messages-while-claude-works), pesan tersebut mempertahankan pilihan yang Anda miliki saat menekan `Enter`, apa pun yang Anda pilih setelahnya.

839* **File sensitif**: untuk mengecualikan file sensitif seperti `.env`, tambahkan [aturan deny `Read`](https://code.claude.com/docs/id/permissions#read-and-edit) untuk path-nya. Aturan deny yang cocok mencegah teks yang dipilih maupun pemberitahuan file terbuka untuk file tersebut sampai ke Claude.859* **File sensitif**: untuk mengecualikan file sensitif seperti `.env`, tambahkan [aturan deny `Read`](https://code.claude.com/docs/id/permissions#read-and-edit) untuk path-nya. Aturan deny yang cocok mencegah teks yang dipilih maupun pemberitahuan file terbuka untuk file tersebut sampai ke Claude.

840* **Attach Open File dimatikan**: jika Anda mematikan [pengaturan Attach Open File](#extension-settings), CLI menerima path file yang aktif hanya selama Anda memiliki teks yang dipilih di dalamnya.

841 860 

842**Transport dan autentikasi.** Server melakukan bind ke `127.0.0.1` pada port acak dalam rentang 10000–65535, dan port tersebut tidak dapat dikonfigurasi. Transport dan token autentikasi bekerja sebagai berikut:861**Transport dan autentikasi.** Server melakukan bind ke `127.0.0.1` pada port acak dalam rentang 10000–65535, dan port tersebut tidak dapat dikonfigurasi. Transport dan token autentikasi bekerja sebagai berikut:

843 862 

workflows.md +5 −4

Details

333 333 

334Runtime workflow mengeksekusi script dalam lingkungan terisolasi, terpisah dari percakapan Anda. Hasil antara tetap dalam variabel script daripada masuk ke konteks Claude.334Runtime workflow mengeksekusi script dalam lingkungan terisolasi, terpisah dari percakapan Anda. Hasil antara tetap dalam variabel script daripada masuk ke konteks Claude.

335 335 

336Setiap run menulis scriptnya ke file di bawah direktori sesi Anda di `~/.claude/projects/`. Claude menerima path ketika run dimulai, jadi Anda dapat memintanya. Anda dapat membuka file tersebut untuk membaca orkestrasi yang ditulis Claude, membandingkannya dengan script run sebelumnya, atau mengeditnya dan meminta Claude untuk meluncurkan kembali dari versi yang telah diedit.336Kecuali Claude memulai run dari path file script, Claude Code menulis script run tersebut ke file di bawah direktori sesi Anda di `~/.claude/projects/`. Claude menerima path script ketika run dimulai, jadi Anda dapat memintanya. Anda dapat membuka file tersebut untuk membaca orkestrasi yang ditulis Claude, membandingkannya dengan script run sebelumnya, atau mengeditnya dan meminta Claude untuk meluncurkan kembali dari versi yang telah diedit.

337 337 

338Claude hanya dapat memulai workflow dari file script yang sudah diizinkan dibaca oleh sesi. Untuk menjalankan script yang disimpan di luar direktori kerja Anda, tambahkan direktorinya terlebih dahulu dengan [`/add-dir`](https://code.claude.com/docs/id/permissions#working-directories) atau [aturan Read allow](https://code.claude.com/docs/id/permissions.md#read-and-edit).338Claude hanya dapat memulai workflow dari file script yang sudah diizinkan dibaca oleh sesi. Untuk menjalankan script yang disimpan di luar direktori kerja Anda, tambahkan direktorinya terlebih dahulu dengan [`/add-dir`](https://code.claude.com/docs/id/permissions#working-directories) atau [aturan Read allow](https://code.claude.com/docs/id/permissions.md#read-and-edit).

339 339 


387 387 

388#### Lanjutkan setelah Anda meninggalkan sesi388#### Lanjutkan setelah Anda meninggalkan sesi

389 389 

390Anda dapat melanjutkan run dalam sesi Claude Code yang sama. Apa yang terjadi pada alur kerja yang berjalan saat Anda meninggalkan sesi tergantung pada cara Anda pergi:390Jika Anda menempatkan sesi di latar belakang atau keluar dari Claude Code saat run alur kerja sedang berlangsung, run tidak berlanjut dengan sendirinya. Run hanya berlanjut ketika Claude meluncurkannya kembali dengan panggilan `Workflow`, yang [memutar ulang run dari hasil yang disimpannya](#which-agents-run-again).

391 391 

392* Jika Anda [menempatkan sesi di latar belakang](https://code.claude.com/docs/id/agent-view.md#what-carries-over-when-you-background), Claude Code memutar ulang run dengan cara yang sama di sesi latar belakang dan melanjutkannya.392* **Anda menempatkan sesi di latar belakang atau memilih [`Move to background and exit`](https://code.claude.com/docs/id/agent-view#from-inside-a-session)**: jika run belum berlanjut saat Anda memeriksa [sesi latar belakang](https://code.claude.com/docs/id/agent-view.md#what-carries-over-when-you-background), minta Claude di sana untuk meluncurkan kembali alur kerja. Tergantung pada [mode izin](#approve-the-plan-before-it-runs) Anda, Claude Code meminta Anda untuk menyetujui peluncuran ulang terlebih dahulu. Jika sesi muncul di bawah `Needs input` di tampilan agent, [lampirkan ke sesi tersebut](https://code.claude.com/docs/id/agent-view.md#attach-to-a-session) untuk menjawab dialog persetujuan.

393* Jika Anda keluar dari Claude Code saat alur kerja sedang berjalan dan [tampilan agen aktif](https://code.claude.com/docs/id/agent-view.md#from-inside-a-session), dialog keluar menawarkan `Move to background and exit`, yang membawa run dengan cara yang sama. Jika Anda memilih `Exit and stop tasks` sebagai gantinya, atau opsi tidak ditawarkan, run berhenti dengan sesi. Claude Code menyimpan hasil yang disimpan run di bawah direktori sesi itu di `~/.claude/projects/`, jadi sesi yang Anda lanjutkan dengan `claude --resume` dapat memutar ulangnya saat Anda meminta Claude untuk meluncurkan kembali alur kerja. Dalam sesi yang Anda mulai segar, Claude tidak memiliki run sebelumnya untuk diluncurkan ulang dan memulai alur kerja dari awal sebagai run baru.393* **Peluncuran ulang di sesi latar belakang gagal dengan `nothing to resume`**: minta Claude untuk memulai alur kerja dari awal sebagai run baru. Jika Claude memulai run dari path file skrip di luar `~/.claude/projects/`, seperti file di direktori kerja Anda, Claude tidak dapat meluncurkannya kembali di sesi latar belakang.

394* **Anda memilih `Exit and stop tasks`, atau tidak ditawari `Move to background and exit`**: run berhenti bersama sesi, dan Claude Code menyimpan hasil yang disimpan run di bawah direktori sesi itu di `~/.claude/projects/`. Lanjutkan sesi dengan `claude --resume` di shell Anda, lalu minta Claude untuk meluncurkan kembali alur kerja. Dalam sesi baru, Claude tidak memiliki run sebelumnya untuk diluncurkan ulang dan memulai alur kerja dari awal.

394 395 

395Dalam [sesi cloud](https://code.claude.com/docs/id/claude-code-on-the-web.md), Claude Code juga menyimpan hasil run dengan riwayat percakapan sesi, yang bertahan saat VM sesi diambil kembali. Ketika Anda [membuka kembali sesi seperti itu](https://code.claude.com/docs/id/claude-code-on-the-web.md#environment-expired) dan meminta Claude untuk meluncurkan kembali alur kerja, agen yang selesai masih mengembalikan hasil yang disimpannya.396Dalam [sesi cloud](https://code.claude.com/docs/id/claude-code-on-the-web.md), Claude Code juga menyimpan hasil run dengan riwayat percakapan sesi, yang bertahan saat VM sesi diambil kembali. Ketika Anda [membuka kembali sesi seperti itu](https://code.claude.com/docs/id/claude-code-on-the-web.md#environment-expired) dan meminta Claude untuk meluncurkan kembali alur kerja, agen yang selesai masih mengembalikan hasil yang disimpannya.

396 397