SpyBara
Go Premium

Documentation 2026-09-30 23:00 UTC to 2026-10-01 21:02 UTC

64 files changed +4,099 −377. View all changes and history on the product overview
2026
Thu 1 21:59

admin-setup.md +1 −0

Details

106| [Disable claude.ai sync](/docs/id/settings-reference#syncclaudeaiskills) | Hentikan Claude Code dari memuat [skills](/docs/id/skills#how-synced-skills-behave) dan [plugins](/docs/id/plugins/loading#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` |106| [Disable claude.ai sync](/docs/id/settings-reference#syncclaudeaiskills) | Hentikan Claude Code dari memuat [skills](/docs/id/skills#how-synced-skills-behave) dan [plugins](/docs/id/plugins/loading#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` |

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

108| [Login enforcement](/docs/id/settings-reference#forceloginmethod) | Batasi login ke metode tertentu atau organisasi Anthropic. Pembatasan metode berlaku di seluruh ekstensi VS Code, Agent SDK, `claude setup-token`, dan `/install-github-app`, dan layar login interaktif terminal, dicapai oleh `/login` atau onboarding first-run, pra-pilih metode tanpa memberlakukannya; Claude Code memverifikasi organisasi untuk login akun claude.ai di terminal, ekstensi VS Code, dan Agent SDK, dan tidak memeriksanya untuk login Claude Console atau untuk sign-in [gateway](/docs/id/claude-apps-gateway). Sebelum v2.1.212, hanya login terminal yang menerapkan salah satu kunci. Ketika diatur, sesi yang diautentikasi oleh `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN`, atau `apiKeyHelper` diblokir saat startup; sesi penyedia cloud tidak terpengaruh kecuali salah satu dari kredensial tersebut, atau kunci API yang disimpan oleh login Claude Console sebelumnya, juga ada | `forceLoginMethod`, `forceLoginOrgUUID` |108| [Login enforcement](/docs/id/settings-reference#forceloginmethod) | Batasi login ke metode tertentu atau organisasi Anthropic. Pembatasan metode berlaku di seluruh ekstensi VS Code, Agent SDK, `claude setup-token`, dan `/install-github-app`, dan layar login interaktif terminal, dicapai oleh `/login` atau onboarding first-run, pra-pilih metode tanpa memberlakukannya; Claude Code memverifikasi organisasi untuk login akun claude.ai di terminal, ekstensi VS Code, dan Agent SDK, dan tidak memeriksanya untuk login Claude Console atau untuk sign-in [gateway](/docs/id/claude-apps-gateway). Sebelum v2.1.212, hanya login terminal yang menerapkan salah satu kunci. Ketika diatur, sesi yang diautentikasi oleh `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN`, atau `apiKeyHelper` diblokir saat startup; sesi penyedia cloud tidak terpengaruh kecuali salah satu dari kredensial tersebut, atau kunci API yang disimpan oleh login Claude Console sebelumnya, juga ada | `forceLoginMethod`, `forceLoginOrgUUID` |

109| [Provider restrictions](/docs/id/settings-reference#allowedproviders) | Batasi penyedia API mana yang dapat digunakan mesin. Sesi di penyedia yang tidak terdaftar ditolak saat startup, saat login, dan ketika berikutnya menghubungi API. Memerlukan Claude Code v2.1.285 atau lebih baru | `allowedProviders` |

109| [Disable agent view](/docs/id/agent-view#how-background-sessions-are-hosted) | Matikan `claude agents`, `--bg`, `/background`, dan supervisor on-demand | `disableAgentView` |110| [Disable agent view](/docs/id/agent-view#how-background-sessions-are-hosted) | Matikan `claude agents`, `--bg`, `/background`, dan supervisor on-demand | `disableAgentView` |

110| [Configure the corporate launcher](/docs/id/corporate-launcher) | Awali [background-agent supervisor](/docs/id/agent-view#how-background-sessions-are-hosted), pekerja-pekerja, dan [proses latar belakang tercakup lainnya](/docs/id/corporate-launcher#what-the-launcher-covers) dengan corporate launcher yang diperlukan alih-alih mematikan agent view | `processWrapper` |111| [Configure the corporate launcher](/docs/id/corporate-launcher) | Awali [background-agent supervisor](/docs/id/agent-view#how-background-sessions-are-hosted), pekerja-pekerja, dan [proses latar belakang tercakup lainnya](/docs/id/corporate-launcher#what-the-launcher-covers) dengan corporate launcher yang diperlukan alih-alih mematikan agent view | `processWrapper` |

111| [Model restrictions](/docs/id/model-config#restrict-model-selection) | `availableModels` memfilter model mana yang muncul di pemilih. Menambahkan `enforceAvailableModels` juga membatasi model default yang dipilih secara otomatis. Lihat [surface coverage](/docs/id/model-config#surface-coverage) untuk cara pengaturan ini menjangkau CLI, web, dan IDE | `availableModels`, `enforceAvailableModels` |112| [Model restrictions](/docs/id/model-config#restrict-model-selection) | `availableModels` memfilter model mana yang muncul di pemilih. Menambahkan `enforceAvailableModels` juga membatasi model default yang dipilih secara otomatis. Lihat [surface coverage](/docs/id/model-config#surface-coverage) untuk cara pengaturan ini menjangkau CLI, web, dan IDE | `availableModels`, `enforceAvailableModels` |

Details

418 ```418 ```

419</CodeGroup>419</CodeGroup>

420 420 

421Untuk mengonfirmasi blokir, daftarkan callback di bawah `PreToolUse` dengan matcher `Write|Edit` dan minta agent untuk membuat file di bawah `/etc`: hasil tool Write di message stream berisi `Writing to /etc is not allowed`, dan tidak ada file yang dibuat.

422 

421<h3 id="auto-approve-specific-tools">423<h3 id="auto-approve-specific-tools">

422 Auto-approve tools spesifik424 Auto-approve tools spesifik

423</h3>425</h3>


468 470 

469Ketika event terjadi, semua hooks yang cocok berjalan secara paralel. Untuk keputusan permission, hasil yang paling ketat menang: satu `deny` memblokir pemanggilan tool terlepas dari apa yang dikembalikan hooks lainnya. Karena urutan penyelesaian tidak dapat diprediksi, tulis setiap hook untuk bertindak secara independen daripada mengandalkan hook lain yang telah berjalan terlebih dahulu.471Ketika event terjadi, semua hooks yang cocok berjalan secara paralel. Untuk keputusan permission, hasil yang paling ketat menang: satu `deny` memblokir pemanggilan tool terlepas dari apa yang dikembalikan hooks lainnya. Karena urutan penyelesaian tidak dapat diprediksi, tulis setiap hook untuk bertindak secara independen daripada mengandalkan hook lain yang telah berjalan terlebih dahulu.

470 472 

471Contoh di bawah ini mendaftarkan tiga pemeriksaan independen untuk setiap pemanggilan tool:473Contoh di bawah ini mendaftarkan tiga pemeriksaan independen untuk setiap pemanggilan tool. Nama hook di dalamnya, seperti `audit_logger` di Python atau `auditLogger` di TypeScript, berdiri untuk callbacks yang Anda tentukan:

472 474 

473<CodeGroup>475<CodeGroup>

474 ```python Python theme={null}476 ```python Python theme={null}


500 Filter dengan multi-tool matchers502 Filter dengan multi-tool matchers

501</h3>503</h3>

502 504 

503Gunakan multi-tool matchers untuk berbagi satu callback di seluruh tools terkait. Contoh ini mendaftarkan tiga matchers dengan scope berbeda:505Gunakan multi-tool matchers untuk berbagi satu callback di seluruh tools terkait. Contoh ini mendaftarkan tiga matchers dengan scope berbeda, dan setiap hook yang dinamainya berdiri untuk callback yang Anda tentukan:

504 506 

505* Daftar exact yang dipisahkan pipe (`Write|Edit|NotebookEdit`) memicu `file_security_hook` hanya untuk file modification tools.507* Daftar exact yang dipisahkan pipe (`Write|Edit|NotebookEdit`) memicu `file_security_hook` hanya untuk file modification tools.

506* Regex (`^mcp__`) memicu `mcp_audit_hook` untuk tool MCP apa pun yang namanya dimulai dengan `mcp__`.508* Regex (`^mcp__`) memicu `mcp_audit_hook` untuk tool MCP apa pun yang namanya dimulai dengan `mcp__`.


585 ```587 ```

586</CodeGroup>588</CodeGroup>

587 589 

590Untuk mengonfirmasi hook terjadi, daftarkan callback dan minta agent untuk mendelegasikan tugas kecil ke subagent, seperti membuat daftar file di direktori saat ini: ketika subagent selesai, callback mencetak baris `[SUBAGENT] Completed:` dengan ID subagent dan jalur transcript.

591 

588<h3 id="make-http-requests-from-hooks">592<h3 id="make-http-requests-from-hooks">

589 Buat HTTP requests dari hooks593 Buat HTTP requests dari hooks

590</h3>594</h3>

Details

121 121 

122Mode izin memberikan kontrol global atas cara Claude menggunakan tools. Anda dapat mengatur mode izin saat memanggil `query()` atau mengubahnya secara dinamis selama sesi streaming.122Mode izin memberikan kontrol global atas cara Claude menggunakan tools. Anda dapat mengatur mode izin saat memanggil `query()` atau mengubahnya secara dinamis selama sesi streaming.

123 123 

124Jika Anda tidak mengatur satu, Claude Code memilih mode izin awal berdasarkan aturan dalam [Mode mana sesi dimulai](/docs/id/permission-modes#which-mode-a-session-starts-in):

125 

126* `permissions.defaultMode` dari [file pengaturan](/docs/id/settings#where-settings-live) sesi ketika satu berlaku

127* Jika tidak, default bawaan, yang dapat berupa [mode auto](/docs/id/permission-modes#eliminate-prompts-with-auto-mode)

128 

129Sesi yang dimulai dalam mode auto menghilangkan aturan izin luas seperti entri `Bash` kosong, seperti yang dijelaskan dalam [Bagaimana mode auto mengevaluasi tindakan](/docs/id/permission-modes#how-auto-mode-evaluates-actions). Jika aplikasi Anda mengandalkan mode `default` atau pada aturan seperti itu, lewatkan `default` secara eksplisit.

130 

131Sebelum Agent SDK TypeScript v0.3.286, menghilangkan `permissionMode` sama dengan melewatkan `default`.

132 

124<h3 id="available-modes">133<h3 id="available-modes">

125 Mode yang tersedia134 Mode yang tersedia

126</h3>135</h3>

agent-sdk/python.md +242 −68

Details

517 async def set_model(self, model: str | None = None) -> None517 async def set_model(self, model: str | None = None) -> None

518 async def rewind_files(self, user_message_id: str) -> None518 async def rewind_files(self, user_message_id: str) -> None

519 async def get_mcp_status(self) -> McpStatusResponse519 async def get_mcp_status(self) -> McpStatusResponse

520 async def get_context_usage(self) -> ContextUsageResponse

520 async def reconnect_mcp_server(self, server_name: str) -> None521 async def reconnect_mcp_server(self, server_name: str) -> None

521 async def toggle_mcp_server(self, server_name: str, enabled: bool) -> None522 async def toggle_mcp_server(self, server_name: str, enabled: bool) -> None

522 async def stop_task(self, task_id: str) -> None523 async def stop_task(self, task_id: str) -> None


540| `set_model(model)` | Ubah model untuk sesi saat ini. Teruskan `None` untuk reset ke [model default Claude Code](/docs/id/model-config) |541| `set_model(model)` | Ubah model untuk sesi saat ini. Teruskan `None` untuk reset ke [model default Claude Code](/docs/id/model-config) |

541| `rewind_files(user_message_id)` | Pulihkan file ke keadaan mereka pada pesan pengguna yang ditentukan. Memerlukan `enable_file_checkpointing=True`. Lihat [File checkpointing](/docs/id/agent-sdk/file-checkpointing) |542| `rewind_files(user_message_id)` | Pulihkan file ke keadaan mereka pada pesan pengguna yang ditentukan. Memerlukan `enable_file_checkpointing=True`. Lihat [File checkpointing](/docs/id/agent-sdk/file-checkpointing) |

542| `get_mcp_status()` | Dapatkan status semua server MCP yang dikonfigurasi. Mengembalikan [`McpStatusResponse`](#mcpstatusresponse) |543| `get_mcp_status()` | Dapatkan status semua server MCP yang dikonfigurasi. Mengembalikan [`McpStatusResponse`](#mcpstatusresponse) |

544| `get_context_usage()` | Dapatkan rincian penggunaan jendela konteks berdasarkan kategori, skill, dan tool. Data yang sama yang ditampilkan `/context` dalam sesi interaktif. Mengembalikan [`ContextUsageResponse`](#contextusageresponse). Untuk menghitung rinciannya, Claude Code membuat beberapa permintaan API penghitungan token yang tidak muncul dalam aliran pesan; lihat [bagaimana permintaan ini ditangani](#contextusageresponse) |

543| `reconnect_mcp_server(server_name)` | Coba lagi menghubungkan ke server MCP yang gagal atau terputus |545| `reconnect_mcp_server(server_name)` | Coba lagi menghubungkan ke server MCP yang gagal atau terputus |

544| `toggle_mcp_server(server_name, enabled)` | Aktifkan atau nonaktifkan server MCP di tengah sesi. Menonaktifkan menghapus toolnya |546| `toggle_mcp_server(server_name, enabled)` | Aktifkan atau nonaktifkan server MCP di tengah sesi. Menonaktifkan menghapus toolnya |

545| `stop_task(task_id)` | Hentikan tugas latar belakang yang sedang berjalan. [`TaskNotificationMessage`](#tasknotificationmessage) dengan status `"stopped"` mengikuti dalam aliran pesan |547| `stop_task(task_id)` | Hentikan tugas latar belakang yang sedang berjalan. [`TaskNotificationMessage`](#tasknotificationmessage) dengan status `"stopped"` mengikuti dalam aliran pesan |


616 Contoh - Streaming input dengan ClaudeSDKClient618 Contoh - Streaming input dengan ClaudeSDKClient

617</h4>619</h4>

618 620 

621`query()` juga menerima async iterable dari dict pesan pengguna, sehingga Anda dapat merakit prompt pada waktu pengiriman atau menyertakan blok konten seperti gambar. Claude Code mulai merespons pesan pertama yang dihasilkan segera setelah tiba, tanpa menunggu iterable selesai, dan `receive_response()` berhenti pada `ResultMessage` yang mengakhiri respons tersebut. Masukkan semua yang harus dibaca Claude sebelum menjawab ke dalam satu pesan, seperti yang dilakukan generator ini, dan pasangkan setiap panggilan `query()` dengan loop `receive_response()` miliknya sendiri.

622 

619```python theme={null}623```python theme={null}

620import asyncio624import asyncio

621from claude_agent_sdk import ClaudeSDKClient625from claude_agent_sdk import ClaudeSDKClient

622 626 

623 627 

624async def message_stream():628async def message_stream():

625 """Generate messages dynamically."""629 """Assemble the prompt at send time and yield it as one user message."""

626 yield {630 readings = {"Temperature": "25°C", "Humidity": "60%"}

627 "type": "user",631 data = ", ".join(f"{name}: {value}" for name, value in readings.items())

628 "message": {"role": "user", "content": "Analyze the following data:"},

629 }

630 await asyncio.sleep(0.5)

631 yield {

632 "type": "user",

633 "message": {"role": "user", "content": "Temperature: 25°C, Humidity: 60%"},

634 }

635 await asyncio.sleep(0.5)

636 yield {632 yield {

637 "type": "user",633 "type": "user",

638 "message": {"role": "user", "content": "What patterns do you see?"},634 "message": {

635 "role": "user",

636 "content": f"Analyze the following sensor data and describe any patterns you see: {data}",

637 },

639 }638 }

640 639 

641 640 


1607| `scope` | `str` (opsional) | Scope konfigurasi |1606| `scope` | `str` (opsional) | Scope konfigurasi |

1608| `tools` | `list` (opsional) | Tools yang disediakan oleh server ini, masing-masing dengan field `name`, `description`, dan `annotations` |1607| `tools` | `list` (opsional) | Tools yang disediakan oleh server ini, masing-masing dengan field `name`, `description`, dan `annotations` |

1609 1608 

1609<h3 id="contextusageresponse">

1610 `ContextUsageResponse`

1611</h3>

1612 

1613Respons dari [`ClaudeSDKClient.get_context_usage()`](#methods). Ini adalah payload yang sama yang Claude Code render untuk perintah `/context` dalam sesi interaktif, jadi di samping hitungan token itu membawa field tampilan seperti `color` dan `gridRows` yang Claude Code gunakan untuk menggambar grid penggunaan `/context`.

1614 

1615Claude Code membangun payload ini dengan mengirim beberapa permintaan ke API [token-counting](https://platform.claude.com/docs/en/build-with-claude/token-counting). Permintaan ini tidak muncul dalam aliran pesan, jadi pelacakan biaya yang membaca aliran tidak akan melihatnya. Pada Anthropic API, penghitungan token tidak ditagih.

1616 

1617```python theme={null}

1618class ContextUsageResponse(TypedDict):

1619 categories: list[ContextUsageCategory]

1620 totalTokens: int

1621 maxTokens: int

1622 rawMaxTokens: int

1623 percentage: float

1624 model: str

1625 isAutoCompactEnabled: bool

1626 memoryFiles: list[dict[str, Any]]

1627 mcpTools: list[dict[str, Any]]

1628 agents: list[dict[str, Any]]

1629 gridRows: list[list[dict[str, Any]]]

1630 autoCompactThreshold: NotRequired[int]

1631 deferredBuiltinTools: NotRequired[list[dict[str, Any]]]

1632 systemTools: NotRequired[list[dict[str, Any]]]

1633 systemPromptSections: NotRequired[list[dict[str, Any]]]

1634 slashCommands: NotRequired[dict[str, Any]]

1635 skills: NotRequired[dict[str, Any]] # skill usage with frontmatter breakdown

1636 messageBreakdown: NotRequired[dict[str, Any]] # message tokens by type

1637 apiUsage: NotRequired[dict[str, Any] | None]

1638```

1639 

1640Setiap entri `ContextUsageCategory` membawa `name`, `tokens`, `color`, dan flag `isDeferred` opsional. `totalTokens` adalah penggunaan konteks sesi saat ini, dan `maxTokens` adalah jendela yang penggunaan diukur terhadapnya. Jendela itu adalah jendela konteks model, atau jendela auto-compaction yang lebih rendah ketika satu berlaku, dan `rawMaxTokens` membawa nilai yang sama dengan `maxTokens`. `apiUsage` menyimpan penggunaan dari respons API terbaru, bukan total berjalan untuk sesi. Claude Code meninggalkan key `deferredBuiltinTools`, `systemTools`, dan `systemPromptSections` opsional yang tidak diatur, jadi harapkan mereka tidak ada bahkan meskipun tipe mendeklarasikannya.

1641 

1610<h3 id="sdkpluginconfig">1642<h3 id="sdkpluginconfig">

1611 `SdkPluginConfig`1643 `SdkPluginConfig`

1612</h3>1644</h3>


2712 2744 

2713Dokumentasi skema input/output untuk semua tools Claude Code bawaan. Meskipun Python SDK tidak mengekspor ini sebagai tipe, mereka mewakili struktur input dan output tool dalam pesan.2745Dokumentasi skema input/output untuk semua tools Claude Code bawaan. Meskipun Python SDK tidak mengekspor ini sebagai tipe, mereka mewakili struktur input dan output tool dalam pesan.

2714 2746 

2747Setiap output yang ditampilkan adalah nilai yang Anda baca dari [`UserMessage.tool_use_result`](#usermessage) untuk tool tersebut. Nama kunci muncul persis seperti yang dikeluarkan Claude Code. Kunci yang dianotasi `| None` dengan komentar "present when" atau "optional" dihilangkan ketika tidak berlaku.

2748 

2715<h3 id="agent">2749<h3 id="agent">

2716 Agent2750 Agent

2717</h3>2751</h3>


2885 2919 

2886**Nama tool:** `Bash`2920**Nama tool:** `Bash`

2887 2921 

2888Untuk apa yang menetapkan batas ceiling foreground, lihat [Timeout and output limits](/docs/id/tools-reference#timeout-and-output-limits). Untuk batas waktu background, lihat [Background commands](/docs/id/tools-reference#background-commands).2922Untuk apa yang menetapkan batas ceiling foreground, lihat [Timeout and output limits](/docs/id/tools-reference#timeout-and-output-limits). Untuk batas waktu background, lihat [Time limit for background commands](/docs/id/tools-reference#time-limit-for-background-commands).

2889 2923 

2890**Input:**2924**Input:**

2891 2925 


2962 2996 

2963```python theme={null}2997```python theme={null}

2964{2998{

2965 "message": str, # Pesan konfirmasi2999 "filePath": str, # File yang diedit

2966 "replacements": int, # Jumlah penggantian yang dilakukan3000 "oldString": str, # Teks yang diganti

2967 "file_path": str, # Jalur file yang diedit3001 "newString": str, # Teks yang menggantinya

3002 "originalFile": str | None, # Isi file sebelum edit

3003 "structuredPatch": [ # Diff hunks untuk perubahan

3004 {

3005 "oldStart": int,

3006 "oldLines": int,

3007 "newStart": int,

3008 "newLines": int,

3009 "lines": list[str],

3010 }

3011 ],

3012 "userModified": bool, # Apakah pengguna mengubah edit yang diusulkan sebelum menerimanya

3013 "replaceAll": bool, # Apakah semua kemunculan diganti

3014 "gitDiff": { # Ringkasan git diff opsional untuk file

3015 "filename": str,

3016 "status": "modified" | "added",

3017 "additions": int,

3018 "deletions": int,

3019 "changes": int,

3020 "patch": str,

3021 "repository": str | None, # GitHub owner/repo ketika tersedia

3022 } | None,

2968}3023}

2969```3024```

2970 3025 


2984}3039}

2985```3040```

2986 3041 

2987**Output (File teks):**3042Output mengambil salah satu bentuk berikut tergantung pada apa yang Claude baca. Periksa kunci `type` untuk membedakannya.

3043 

3044**Output (type: `"text"`):**

3045 

3046```python theme={null}

3047{

3048 "type": "text",

3049 "file": {

3050 "filePath": str, # File yang dibaca

3051 "content": str, # Konten yang dikembalikan

3052 "numLines": int, # Jumlah baris dalam konten yang dikembalikan

3053 "startLine": int, # Nomor baris konten dimulai

3054 "totalLines": int, # Total jumlah baris dalam file

3055 "truncatedByTokenCap": bool | None, # Hadir dan True ketika pembacaan seluruh file melebihi batas token dan konten adalah halaman pertama

3056 },

3057}

3058```

3059 

3060**Output (type: `"image"`):**

3061 

3062```python theme={null}

3063{

3064 "type": "image",

3065 "file": {

3066 "base64": str, # Data gambar yang dikodekan Base64

3067 "type": "image/jpeg" | "image/png" | "image/gif" | "image/webp", # Tipe MIME gambar

3068 "originalSize": int, # Ukuran file asli dalam byte

3069 "dimensions": { # Info ukuran opsional untuk pemetaan koordinat

3070 "originalWidth": int | None, # Opsional; lebar asli dalam piksel

3071 "originalHeight": int | None, # Opsional; tinggi asli dalam piksel

3072 "displayWidth": int | None, # Opsional; lebar setelah mengubah ukuran

3073 "displayHeight": int | None, # Opsional; tinggi setelah mengubah ukuran

3074 } | None,

3075 },

3076}

3077```

3078 

3079**Output (type: `"notebook"`):**

3080 

3081```python theme={null}

3082{

3083 "type": "notebook",

3084 "file": {

3085 "filePath": str, # Notebook yang dibaca

3086 "cells": list, # Sel notebook

3087 },

3088}

3089```

3090 

3091**Output (type: `"pdf"`):**

3092 

3093```python theme={null}

3094{

3095 "type": "pdf",

3096 "file": {

3097 "filePath": str, # PDF yang dibaca

3098 "base64": str, # Data PDF yang dikodekan Base64

3099 "originalSize": int, # Ukuran file dalam byte

3100 },

3101}

3102```

3103 

3104**Output (type: `"parts"`):**

2988 3105 

2989```python theme={null}3106```python theme={null}

2990{3107{

2991 "content": str, # Isi file dengan nomor baris3108 "type": "parts",

2992 "total_lines": int, # Total jumlah baris dalam file3109 "file": {

2993 "lines_returned": int, # Baris yang benar-benar dikembalikan3110 "filePath": str, # PDF yang dibaca

3111 "originalSize": int, # Ukuran file dalam byte

3112 "count": int, # Jumlah halaman yang diekstrak sebagai gambar

3113 "outputDir": str, # Direktori yang berisi gambar halaman yang diekstrak

3114 },

3115 "firstPage": int | None, # Nomor halaman dokumen opsional dari halaman pertama yang diekstrak

2994}3116}

2995```3117```

2996 3118 

2997**Output (Gambar):**3119**Output (type: `"file_unchanged"`):**

2998 3120 

2999```python theme={null}3121```python theme={null}

3000{3122{

3001 "image": str, # Data gambar yang dikodekan Base643123 "type": "file_unchanged", # File tidak berubah sejak Claude terakhir membacanya dalam sesi ini, jadi konten tidak diulang

3002 "mime_type": str, # Tipe MIME gambar3124 "file": {

3003 "file_size": int, # Ukuran file dalam byte3125 "filePath": str,

3126 },

3127 "source": "seeded" | None, # Hadir ketika salinan sebelumnya berasal dari file CLAUDE.md atau memory yang dimuat saat startup daripada panggilan Read

3004}3128}

3005```3129```

3006 3130 


3023 3147 

3024```python theme={null}3148```python theme={null}

3025{3149{

3026 "message": str, # Pesan sukses3150 "type": "create" | "update", # Apakah penulisan membuat file baru atau menimpa yang sudah ada

3027 "bytes_written": int, # Jumlah byte yang ditulis3151 "filePath": str, # File yang ditulis

3028 "file_path": str, # Jalur file yang ditulis3152 "content": str, # Konten yang ditulis

3153 "structuredPatch": [ # Diff hunks; kosong untuk file baru, ketika tidak ada yang berubah, atau ketika Claude Code melewatkan diff

3154 {

3155 "oldStart": int,

3156 "oldLines": int,

3157 "newStart": int,

3158 "newLines": int,

3159 "lines": list[str],

3160 }

3161 ],

3162 "originalFile": str | None, # Konten sebelumnya; None untuk file baru atau ketika konten sebelumnya terlalu besar untuk disertakan

3163 "gitDiff": { # Ringkasan git diff opsional untuk file

3164 "filename": str,

3165 "status": "modified" | "added",

3166 "additions": int,

3167 "deletions": int,

3168 "changes": int,

3169 "patch": str,

3170 "repository": str | None, # GitHub owner/repo ketika tersedia

3171 } | None,

3172 "userModified": bool | None, # Opsional; apakah pengguna mengedit konten yang diusulkan sebelum menerimanya

3029}3173}

3030```3174```

3031 3175 


3048 3192 

3049```python theme={null}3193```python theme={null}

3050{3194{

3051 "matches": list[str], # Array jalur file yang cocok3195 "durationMs": int, # Waktu yang dibutuhkan untuk menjalankan pencarian, dalam milidetik

3052 "count": int, # Jumlah kecocokan yang ditemukan3196 "numFiles": int, # Jumlah jalur yang dikembalikan, setelah pemotongan apa pun

3053 "search_path": str, # Direktori pencarian yang digunakan3197 "filenames": list[str], # Jalur file yang cocok

3198 "truncated": bool, # Apakah hasil dipotong pada batas 100 file

3199 "totalMatches": int | None, # Jumlah total file yang cocok opsional sebelum pemotongan; batas bawah ketika countIsComplete adalah False

3200 "countIsComplete": bool | None, # Opsional; apakah totalMatches tepat

3054}3201}

3055```3202```

3056 3203 

3204`totalMatches` dan `countIsComplete` memerlukan Claude Code v2.1.191 atau lebih baru.

3205 

3057<h3 id="grep">3206<h3 id="grep">

3058 Grep3207 Grep

3059</h3>3208</h3>


3074 "-B": int | None, # Baris untuk ditampilkan sebelum setiap kecocokan3223 "-B": int | None, # Baris untuk ditampilkan sebelum setiap kecocokan

3075 "-A": int | None, # Baris untuk ditampilkan setelah setiap kecocokan3224 "-A": int | None, # Baris untuk ditampilkan setelah setiap kecocokan

3076 "-C": int | None, # Baris untuk ditampilkan sebelum dan sesudah3225 "-C": int | None, # Baris untuk ditampilkan sebelum dan sesudah

3226 "context": int | None, # Baris untuk ditampilkan sebelum dan sesudah; -C adalah alias

3227 "-o": bool | None, # Cetak hanya bagian yang cocok dari setiap baris

3077 "head_limit": int | None, # Batasi output ke N baris/entri pertama3228 "head_limit": int | None, # Batasi output ke N baris/entri pertama

3229 "offset": int | None, # Lewati N baris/entri pertama sebelum menerapkan head_limit

3078 "multiline": bool | None, # Aktifkan mode multiline3230 "multiline": bool | None, # Aktifkan mode multiline

3079}3231}

3080```3232```

3081 3233 

3082**Output (content mode):**3234**Output:**

3083 3235 

3084```python theme={null}3236```python theme={null}

3085{3237{

3086 "matches": [3238 "mode": "content" | "files_with_matches" | "count" | None, # Mode output yang digunakan

3087 {3239 "numFiles": int, # Jumlah file dalam hasil; selalu 0 dalam mode content

3088 "file": str,3240 "filenames": list[str], # File yang cocok dalam mode files_with_matches; kosong dalam mode lain

3089 "line_number": int | None,3241 "content": str | None, # Baris yang cocok dalam mode content, atau hitungan per-file dalam mode count

3090 "line": str,3242 "numLines": int | None, # Jumlah baris dalam konten, hadir dalam mode content

3091 "before_context": list[str] | None,3243 "numMatches": int | None, # Total hitungan kecocokan, hadir dalam mode count

3092 "after_context": list[str] | None,3244 "totalFiles": int | None, # Total opsional sebelum head_limit dan offset, dalam mode files_with_matches

3093 }3245 "totalLines": int | None, # Total opsional sebelum head_limit dan offset, dalam mode content

3094 ],3246 "appliedLimit": int | None, # Hadir ketika head_limit memotong hasil

3095 "total_matches": int,3247 "appliedOffset": int | None, # Hadir ketika offset diterapkan

3096}3248}

3097```3249```

3098 3250 

3099**Output (files\_with\_matches mode):**3251Grep mengembalikan bentuk dict ini dalam setiap mode output. Kunci opsional mana yang ada tergantung pada `output_mode`.

3100 3252 

3101```python theme={null}3253`totalFiles` memerlukan Claude Code v2.1.208 atau lebih baru. `totalLines` memerlukan Claude Code v2.1.210 atau lebih baru.

3102{

3103 "files": list[str], # File yang berisi kecocokan

3104 "count": int, # Jumlah file dengan kecocokan

3105}

3106```

3107 3254 

3108<h3 id="notebookedit">3255<h3 id="notebookedit">

3109 NotebookEdit3256 NotebookEdit


3127 3274 

3128```python theme={null}3275```python theme={null}

3129{3276{

3130 "message": str, # Pesan sukses3277 "new_source": str, # Sumber yang ditulis ke sel

3131 "edit_type": "replaced" | "inserted" | "deleted", # Jenis edit yang dilakukan3278 "old_source": str | None, # Sumber sel sebelumnya, hadir untuk replace dan delete

3132 "cell_id": str | None, # ID sel yang terpengaruh3279 "cell_id": str | None, # ID sel yang diedit, ketika tersedia

3133 "total_cells": int, # Total sel dalam notebook setelah edit3280 "cell_type": "code" | "markdown", # Jenis sel

3281 "language": str, # Bahasa pemrograman notebook

3282 "edit_mode": str, # Mode edit yang digunakan

3283 "error": str | None, # Pesan kesalahan ketika operasi gagal

3284 "notebook_path": str, # File notebook

3285 "original_file": str, # Konten notebook sebelum edit

3286 "updated_file": str, # Konten notebook setelah edit

3134}3287}

3135```3288```

3136 3289 


3228 3381 

3229```python theme={null}3382```python theme={null}

3230{3383{

3231 "message": str, # Pesan sukses3384 "oldTodos": [ # Daftar todo sebelum pembaruan

3232 "stats": {"total": int, "pending": int, "in_progress": int, "completed": int},3385 {

3386 "content": str,

3387 "status": "pending" | "in_progress" | "completed",

3388 "activeForm": str,

3389 }

3390 ],

3391 "newTodos": [ # Daftar todo setelah pembaruan

3392 {

3393 "content": str,

3394 "status": "pending" | "in_progress" | "completed",

3395 "activeForm": str,

3396 }

3397 ],

3233}3398}

3234```3399```

3235 3400 


3401 3566 

3402```python theme={null}3567```python theme={null}

3403{3568{

3404 "message": str, # Pesan konfirmasi3569 "plan": str | None, # Rencana yang disajikan kepada pengguna

3405 "approved": bool | None, # Apakah pengguna menyetujui rencana3570 "isAgent": bool, # True ketika subagen memanggil tool

3571 "filePath": str | None, # Hadir ketika rencana disimpan ke file

3572 "hasTaskTool": bool | None, # Opsional; apakah tool Agent tersedia dalam konteks saat ini

3573 "planWasEdited": bool | None, # Hadir dan True ketika pengguna mengedit rencana sebelum menyetujui

3574 "awaitingLeaderApproval": bool | None, # Hadir dan True ketika rekan tim mengirim rencana ke pemimpin tim untuk persetujuan

3575 "requestId": str | None, # ID opsional dari permintaan persetujuan itu

3406}3576}

3407```3577```

3408 3578 


3420}3590}

3421```3591```

3422 3592 

3593Hasilnya adalah daftar daripada dict, jadi `tool_use_result` menyimpan `list` untuk tool ini.

3594 

3423**Output:**3595**Output:**

3424 3596 

3425```python theme={null}3597```python theme={null}

3426{3598[ # Satu entri per sumber daya

3427 "resources": [

3428 {3599 {

3429 "uri": str,3600 "uri": str, # URI sumber daya

3430 "name": str,3601 "name": str, # Nama sumber daya

3431 "description": str | None,3602 "mimeType": str | None, # Tipe MIME opsional

3432 "mimeType": str | None,3603 "description": str | None, # Deskripsi opsional

3433 "server": str,3604 "server": str, # Server yang menyediakan sumber daya ini

3434 }3605 }

3435 ],3606]

3436 "total": int,

3437}

3438```3607```

3439 3608 

3440<h3 id="readmcpresource">3609<h3 id="readmcpresource">


3457```python theme={null}3626```python theme={null}

3458{3627{

3459 "contents": [3628 "contents": [

3460 {"uri": str, "mimeType": str | None, "text": str | None, "blob": str | None}3629 {

3630 "uri": str, # URI sumber daya

3631 "mimeType": str | None, # Tipe MIME opsional

3632 "text": str | None, # Konten teks, atau catatan tentang konten biner

3633 "blobSavedTo": str | None, # Hadir ketika Claude Code menyimpan konten biner ke disk; jalur file yang disimpan

3634 }

3461 ],3635 ],

3462 "server": str,3636 "error": str | None, # Hadir ketika server tidak dapat membaca sumber daya

3463}3637}

3464```3638```

3465 3639 

Details

575| `outputFormat` | `{ type: 'json_schema', schema: JSONSchema }` | `undefined` | Tentukan format output untuk hasil agent. Lihat [Structured outputs](/docs/id/agent-sdk/structured-outputs) untuk detail |575| `outputFormat` | `{ type: 'json_schema', schema: JSONSchema }` | `undefined` | Tentukan format output untuk hasil agent. Lihat [Structured outputs](/docs/id/agent-sdk/structured-outputs) untuk detail |

576| `outputStyle` | `string` | `undefined` | Bukan bidang `Options`. Atur `outputStyle` dalam objek [`settings`](/docs/id/settings) inline atau file settings. Lihat [Activate an output style](/docs/id/agent-sdk/modifying-system-prompts#activate-an-output-style) |576| `outputStyle` | `string` | `undefined` | Bukan bidang `Options`. Atur `outputStyle` dalam objek [`settings`](/docs/id/settings) inline atau file settings. Lihat [Activate an output style](/docs/id/agent-sdk/modifying-system-prompts#activate-an-output-style) |

577| `pathToClaudeCodeExecutable` | `string` | Auto-resolved dari bundled native binary | Path ke Claude Code executable. Hanya diperlukan jika optional dependencies dilewati selama install atau platform Anda tidak dalam set yang didukung |577| `pathToClaudeCodeExecutable` | `string` | Auto-resolved dari bundled native binary | Path ke Claude Code executable. Hanya diperlukan jika optional dependencies dilewati selama install atau platform Anda tidak dalam set yang didukung |

578| `permissionMode` | [`PermissionMode`](#permissionmode) | `'default'` | Permission mode untuk session |578| `permissionMode` | [`PermissionMode`](#permissionmode) | `undefined` | Permission mode untuk session. Jika Anda menghilangkannya, session dapat dimulai dalam auto mode. Lihat [Permission modes](/docs/id/agent-sdk/permissions#permission-modes) untuk cara Claude Code memilih starting permission mode |

579| `permissionPromptToolName` | `string` | `undefined` | Nama MCP tool untuk permission prompts |579| `permissionPromptToolName` | `string` | `undefined` | Nama MCP tool untuk permission prompts |

580| `permissionPrompts` | `'host' \| 'none'` | `'host'` | Siapa yang menjawab permission prompts: `'host'` merutekan mereka ke callback [`canUseTool`](#canusetool) Anda atau tool `permissionPromptToolName`, dan `'none'` [menolak panggilan yang akan diprompt](/docs/id/agent-sdk/permissions#how-permissions-are-evaluated). Memerlukan Claude Code v2.1.259 atau lebih baru |580| `permissionPrompts` | `'host' \| 'none'` | `'host'` | Siapa yang menjawab permission prompts: `'host'` merutekan mereka ke callback [`canUseTool`](#canusetool) Anda atau tool `permissionPromptToolName`, dan `'none'` [menolak panggilan yang akan diprompt](/docs/id/agent-sdk/permissions#how-permissions-are-evaluated). Memerlukan Claude Code v2.1.259 atau lebih baru |

581| `persistSession` | `boolean` | `true` | Ketika `false`, menonaktifkan session persistence ke disk. Sessions tidak dapat dilanjutkan kemudian |581| `persistSession` | `boolean` | `true` | Ketika `false`, menonaktifkan session persistence ke disk. Sessions tidak dapat dilanjutkan kemudian |


709| `supportedModels()` | Mengembalikan available models dengan display info |709| `supportedModels()` | Mengembalikan available models dengan display info |

710| `supportedAgents()` | Mengembalikan available subagents sebagai [`AgentInfo`](#agentinfo)`[]` |710| `supportedAgents()` | Mengembalikan available subagents sebagai [`AgentInfo`](#agentinfo)`[]` |

711| `mcpServerStatus()` | Mengembalikan status connected MCP servers sebagai [`McpServerStatus`](#mcpserverstatus)`[]` |711| `mcpServerStatus()` | Mengembalikan status connected MCP servers sebagai [`McpServerStatus`](#mcpserverstatus)`[]` |

712| `getContextUsage(opts?)` | Mengembalikan [`SDKControlGetContextUsageResponse`](#sdkcontrolgetcontextusageresponse) yang memecah session's context window usage berdasarkan kategori, skill, dan tool. Dengan default `detail`, ini adalah data yang sama `/context` tampilkan dalam interactive session. Opsi [`detail`](#sdkcontrolgetcontextusageresponse) memerlukan Agent SDK v0.3.257 atau lebih baru |712| `getContextUsage(opts?)` | Mengembalikan [`SDKControlGetContextUsageResponse`](#sdkcontrolgetcontextusageresponse) yang memecah session's context window usage berdasarkan kategori, skill, dan tool. Dengan default `detail`, ini adalah data yang sama `/context` tampilkan dalam interactive session, dihitung dengan token-counting API requests yang tidak muncul dalam message stream; lihat [how these requests are handled](#sdkcontrolgetcontextusageresponse). Opsi [`detail`](#sdkcontrolgetcontextusageresponse) memerlukan Agent SDK v0.3.257 atau lebih baru |

713| `readFile(path, options?)` | Membaca file dari session's filesystem. Claude Code resolves path terhadap `cwd`; [What `readFile()` can read](#what-readfile-can-read) mencantumkan files yang disajikan. Teruskan `{ maxBytes }` untuk mengubah read cap (default 1 MB, ceiling 10 MB) dan `{ encoding: 'base64' }` untuk binary files seperti images. Resolves dengan [`SDKControlReadFileResponse`](#sdkcontrolreadfileresponse), atau `null` pada permission denial, missing file, atau transport error. Memerlukan TypeScript SDK v0.2.121 atau lebih baru |713| `readFile(path, options?)` | Membaca file dari session's filesystem. Claude Code resolves path terhadap `cwd`; [What `readFile()` can read](#what-readfile-can-read) mencantumkan files yang disajikan. Teruskan `{ maxBytes }` untuk mengubah read cap (default 1 MB, ceiling 10 MB) dan `{ encoding: 'base64' }` untuk binary files seperti images. Resolves dengan [`SDKControlReadFileResponse`](#sdkcontrolreadfileresponse), atau `null` pada permission denial, missing file, atau transport error. Memerlukan TypeScript SDK v0.2.121 atau lebih baru |

714| `reloadPlugins(options?)` | Reload plugins dari disk, sehingga plugins yang Anda install atau edit mid-session mencapai running session. Resolves dengan [`SDKControlReloadPluginsResponse`](#sdkcontrolreloadpluginsresponse) yang mencantumkan session's commands, subagents, plugins, dan MCP server status. Memerlukan Agent SDK v0.2.85 atau lebih baru. Opsi [`holdOnCacheImpact`](#sdkcontrolreloadpluginsresponse) memerlukan Agent SDK v0.3.268 atau lebih baru |714| `reloadPlugins(options?)` | Reload plugins dari disk, sehingga plugins yang Anda install atau edit mid-session mencapai running session. Resolves dengan [`SDKControlReloadPluginsResponse`](#sdkcontrolreloadpluginsresponse) yang mencantumkan session's commands, subagents, plugins, dan MCP server status. Memerlukan Agent SDK v0.2.85 atau lebih baru. Opsi [`holdOnCacheImpact`](#sdkcontrolreloadpluginsresponse) memerlukan Agent SDK v0.3.268 atau lebih baru |

715| `reloadSkills()` | Reload skills dari disk, sehingga skills yang Anda tambahkan atau edit mid-session menjadi tersedia untuk running session. Resolves dengan [`SDKControlReloadSkillsResponse`](#sdkcontrolreloadskillsresponse) yang mencantumkan skills yang tersedia setelah reload. Memerlukan Agent SDK v0.3.163 atau lebih baru |715| `reloadSkills()` | Reload skills dari disk, sehingga skills yang Anda tambahkan atau edit mid-session menjadi tersedia untuk running session. Resolves dengan [`SDKControlReloadSkillsResponse`](#sdkcontrolreloadskillsresponse) yang mencantumkan skills yang tersedia setelah reload. Memerlukan Agent SDK v0.3.163 atau lebih baru |

716| `reloadOutputStyles()` | Re-reads [output styles](/docs/id/output-styles) dari disk, sehingga style file yang Anda tambahkan atau edit mid-session menjadi tersedia untuk running session. Resolves dengan [`SDKControlReloadOutputStylesResponse`](#sdkcontrolreloadoutputstylesresponse) yang mencantumkan style names yang tersedia setelah reload. Memerlukan Agent SDK v0.3.261 atau lebih baru |716| `reloadOutputStyles()` | Re-reads [output styles](/docs/id/output-styles) dari disk, sehingga style file yang Anda tambahkan atau edit mid-session menjadi tersedia untuk running session. Resolves dengan [`SDKControlReloadOutputStylesResponse`](#sdkcontrolreloadoutputstylesresponse) yang mencantumkan style names yang tersedia setelah reload. Memerlukan Agent SDK v0.3.261 atau lebih baru |

717| `accountInfo()` | Mengembalikan account information |717| `accountInfo()` | Mengembalikan account information |

718| `reconnectMcpServer(serverName)` | Reconnect MCP server berdasarkan nama. Jika nama juga cocok dengan entri dalam settings file seperti `.mcp.json` atau `~/.claude.json`, Claude Code reconnect server yang Anda konfigurasi melalui [`mcpServers`](#options) atau `setMcpServers()`, bukan settings-file entry. Urutan resolusi itu memerlukan Claude Code v2.1.257 atau lebih baru |718| `reconnectMcpServer(serverName)` | Reconnect MCP server berdasarkan nama. Jika nama juga cocok dengan entri dalam settings file seperti `.mcp.json` atau `~/.claude.json`, Claude Code reconnect server yang Anda konfigurasi melalui [`mcpServers`](#options) atau `setMcpServers()`, bukan settings-file entry. Urutan resolusi itu memerlukan Claude Code v2.1.257 atau lebih baru |

719| `toggleMcpServer(serverName, enabled)` | Enable atau disable MCP server berdasarkan nama, dengan name resolution yang sama seperti `reconnectMcpServer()`. Menonaktifkan disconnect server |719| `toggleMcpServer(serverName, enabled)` | Enable atau disable MCP server berdasarkan nama, dengan name resolution yang sama seperti `reconnectMcpServer()`. Menonaktifkan disconnect server stdio, SSE, atau HTTP dan menghapus tools-nya; untuk server yang Anda tambahkan mid-session dengan `setMcpServers()`, tool removal memerlukan Claude Code v2.1.285 atau lebih baru |

720| `setMcpServers(servers)` | Secara dinamis ganti set MCP servers untuk session ini. Resolves dengan [`McpSetServersResult`](#mcpsetserversresult) yang menyebutkan servers mana yang ditambahkan dan dihapus, dan errors apa pun |720| `setMcpServers(servers)` | Secara dinamis ganti set MCP servers untuk session ini. Resolves dengan [`McpSetServersResult`](#mcpsetserversresult) yang menyebutkan servers mana yang ditambahkan dan dihapus, dan errors apa pun |

721| `readMcpResource(serverName, uri)` | *Alpha.* Membaca satu MCP Apps `ui://` resource dari connected MCP server sehingga aplikasi Anda dapat merender widget tool. Resolves dengan [`SDKControlMcpReadResourceResponse`](#sdkcontrolmcpreadresourceresponse). Memerlukan TypeScript Agent SDK v0.3.280 atau lebih baru |721| `readMcpResource(serverName, uri)` | *Alpha.* Membaca satu MCP Apps `ui://` resource dari connected MCP server sehingga aplikasi Anda dapat merender widget tool. Resolves dengan [`SDKControlMcpReadResourceResponse`](#sdkcontrolmcpreadresourceresponse). Memerlukan TypeScript Agent SDK v0.3.280 atau lebih baru |

722| `streamInput(stream)` | Stream input messages ke query untuk multi-turn conversations |722| `streamInput(stream)` | Stream input messages ke query untuk multi-turn conversations |


909 909 

910Return type dari [`getContextUsage()`](#query-object). Dengan default `detail`, ini adalah payload yang sama Claude Code render untuk `/context` command dalam interactive session, jadi bersama token counts ini membawa display fields seperti `color` dan `gridRows` yang Claude Code gunakan untuk draw `/context` usage grid.910Return type dari [`getContextUsage()`](#query-object). Dengan default `detail`, ini adalah payload yang sama Claude Code render untuk `/context` command dalam interactive session, jadi bersama token counts ini membawa display fields seperti `color` dan `gridRows` yang Claude Code gunakan untuk draw `/context` usage grid.

911 911 

912Argumen `detail` opsional method memilih bagaimana Claude Code menghitung setiap kategori. Dengan default, `'full'`, Claude Code menghitung setiap kategori dengan token-counting API requests. Teruskan `{ detail: 'summary' }` untuk mendapatkan answer dari last response's usage dan local estimates sebagai gantinya. Tidak ada token-count requests keluar, dan per-category numbers adalah approximate. Argumen `detail` memerlukan Agent SDK v0.3.257 atau lebih baru.912Argumen `detail` opsional method memilih bagaimana Claude Code menghitung setiap kategori. Dengan default, `'full'`, Claude Code menghitung setiap kategori dengan [token-counting](https://platform.claude.com/docs/id/build-with-claude/token-counting) API requests. Requests ini tidak muncul dalam message stream, jadi cost tracking yang membaca stream tidak akan melihat mereka. Pada Anthropic API, token counting tidak ditagih. Teruskan `{ detail: 'summary' }` untuk mendapatkan answer dari last response's usage dan local estimates sebagai gantinya. Tidak ada token-count requests keluar, dan per-category numbers adalah approximate. Argumen `detail` memerlukan Agent SDK v0.3.257 atau lebih baru.

913 913 

914Ketika Anda mengirim `/context` sebagai prompt alih-alih memanggil method, Claude Code melampirkan payload [`SDKContextUsage`](#sdkcontextusage) ke bidang `context_usage` dari assistant message yang delivers result. Field itu memerlukan Agent SDK v0.3.232 atau lebih baru.914Ketika Anda mengirim `/context` sebagai prompt alih-alih memanggil method, Claude Code melampirkan payload [`SDKContextUsage`](#sdkcontextusage) ke bidang `context_usage` dari assistant message yang delivers result. Field itu memerlukan Agent SDK v0.3.232 atau lebih baru.

915 915 


1015* `memoryFiles` mencantumkan setiap loaded memory file dengan costnya.1015* `memoryFiles` mencantumkan setiap loaded memory file dengan costnya.

1016* `skills.skillFrontmatter` attributes skill listing's tokens ke setiap included skill. Per-skill counts mengukur setiap skill's listing entry seperti Claude Code benar-benar kirimkan, yang dapat lebih pendek daripada skill's full frontmatter. Bandingkan `skills.totalSkills` dengan `skills.includedSkills` untuk lihat apakah setiap discovered skill membuat ke listing.1016* `skills.skillFrontmatter` attributes skill listing's tokens ke setiap included skill. Per-skill counts mengukur setiap skill's listing entry seperti Claude Code benar-benar kirimkan, yang dapat lebih pendek daripada skill's full frontmatter. Bandingkan `skills.totalSkills` dengan `skills.includedSkills` untuk lihat apakah setiap discovered skill membuat ke listing.

1017 1017 

1018`totalTokens` adalah session's current context usage, dan `maxTokens` adalah window yang usage diukur terhadap. Window itu adalah model's context window, atau lower auto-compaction window ketika satu berlaku. `rawMaxTokens` membawa nilai yang sama seperti `maxTokens`, dan `percentage` adalah `totalTokens` sebagai rounded percentage dari window itu.1018`totalTokens` adalah session's current context usage, dan `maxTokens` adalah window yang usage diukur terhadap. Window itu adalah model's context window, atau lower auto-compaction window ketika satu berlaku. `rawMaxTokens` membawa nilai yang sama seperti `maxTokens`, dan `percentage` adalah `totalTokens` sebagai rounded percentage dari window itu. `apiUsage` memegang usage dari latest API response, bukan running total untuk session.

1019 1019 

1020Claude Code meninggalkan optional `deferredBuiltinTools`, `systemTools`, dan `systemPromptSections` diagnostics unset, jadi expect mereka absent bahkan meskipun type mendeklarasikan mereka.1020Claude Code meninggalkan optional `deferredBuiltinTools`, `systemTools`, dan `systemPromptSections` diagnostics unset, jadi expect mereka absent bahkan meskipun type mendeklarasikan mereka.

1021 1021 


1275 | "bypassPermissions" // Bypass permission checks; explicit ask rules masih prompt1275 | "bypassPermissions" // Bypass permission checks; explicit ask rules masih prompt

1276 | "plan" // Planning mode - explore tanpa editing1276 | "plan" // Planning mode - explore tanpa editing

1277 | "dontAsk" // Jangan prompt untuk permissions, deny jika tidak pre-approved1277 | "dontAsk" // Jangan prompt untuk permissions, deny jika tidak pre-approved

1278 | "auto"; // Model classifier approves atau denies permission prompts1278 | "auto"; // Model classifier meninjau actions seperti shell commands dan network requests

1279```1279```

1280 1280 

1281<h3 id="canusetool">1281<h3 id="canusetool">


1821```typescript theme={null}1821```typescript theme={null}

1822type SDKStartupFailureReason =1822type SDKStartupFailureReason =

1823 | "org_pin_api_key_conflict"1823 | "org_pin_api_key_conflict"

1824 | "provider_not_allowed"

1824 | "org_verify_failed"1825 | "org_verify_failed"

1825 | "org_pin_mismatch"1826 | "org_pin_mismatch"

1826 | "managed_settings_invalid"1827 | "managed_settings_invalid"


1843| Nilai | Apa yang menghentikan sesi |1844| Nilai | Apa yang menghentikan sesi |

1844| :- | :- |1845| :- | :- |

1845| `org_pin_api_key_conflict` | Pengaturan terkelola [memerlukan masuk gateway first-party atau Cloud](/docs/id/authentication#restrict-login-to-your-organization), dan kunci API Anthropic, token auth, atau `apiKeyHelper` dikonfigurasi sebagai gantinya |1846| `org_pin_api_key_conflict` | Pengaturan terkelola [memerlukan masuk gateway first-party atau Cloud](/docs/id/authentication#restrict-login-to-your-organization), dan kunci API Anthropic, token auth, atau `apiKeyHelper` dikonfigurasi sebagai gantinya |

1847| `provider_not_allowed` | Pengaturan terkelola [mencantumkan penyedia API yang mesin ini boleh gunakan](/docs/id/settings-reference#allowedproviders), dan sesi diatur untuk penyedia yang tidak tercantum, atau untuk endpoint yang pengaturan tidak pin. Memerlukan Claude Code v2.1.285 atau lebih baru |

1846| `org_verify_failed` | Organisasi masuk tidak dapat diverifikasi terhadap pin, misalnya karena kegagalan jaringan atau token yang dicabut |1848| `org_verify_failed` | Organisasi masuk tidak dapat diverifikasi terhadap pin, misalnya karena kegagalan jaringan atau token yang dicabut |

1847| `org_pin_mismatch` | Masuk milik organisasi yang pin tidak izinkan |1849| `org_pin_mismatch` | Masuk milik organisasi yang pin tidak izinkan |

1848| `managed_settings_invalid` | Pengaturan kebijakan terkelola tidak dapat dibaca, pin tidak menamai organisasi, atau [pembatasan model terkelola](/docs/id/errors#managed-settings-block-the-default-model) tidak meninggalkan model yang diizinkan untuk opsi Default |1850| `managed_settings_invalid` | Pengaturan kebijakan terkelola tidak dapat dibaca, pin tidak menamai organisasi, atau [pembatasan model terkelola](/docs/id/errors#managed-settings-block-the-default-model) tidak meninggalkan model yang diizinkan untuk opsi Default |


2087 `SDKContextUsage`2089 `SDKContextUsage`

2088</h3>2090</h3>

2089 2091 

2090Bentuk terstruktur dari laporan `/context`, dibawa sebagai `context_usage` pada [`SDKAssistantMessage`](#sdkassistantmessage) yang mengirimkan hasil `/context`. Agent SDK v0.3.232 dan lebih baru mengekspor tipe. Tidak seperti [`SDKControlGetContextUsageResponse`](#sdkcontrolgetcontextusageresponse), ia hanya membawa data yang diperlukan untuk merender rincian penggunaan, tanpa bidang tampilan seperti `color` dan `gridRows`.2092Bentuk terstruktur dari laporan `/context`, dibawa sebagai `context_usage` pada [`SDKAssistantMessage`](#sdkassistantmessage) yang mengirimkan hasil `/context`. Agent SDK v0.3.232 dan lebih baru mengekspor tipe. Tidak seperti [`SDKControlGetContextUsageResponse`](#sdkcontrolgetcontextusageresponse), ia hanya membawa data yang diperlukan untuk merender rincian penggunaan, tanpa bidang tampilan seperti `color` dan `gridRows`. Claude Code menghitung laporan dengan permintaan API penghitungan token yang tidak muncul dalam aliran pesan; lihat [bagaimana permintaan ini ditangani](#sdkcontrolgetcontextusageresponse).

2091 2093 

2092```typescript theme={null}2094```typescript theme={null}

2093type SDKContextUsage = {2095type SDKContextUsage = {


3206};3208};

3207```3209```

3208 3210 

3209Mengeksekusi perintah Bash dengan timeout opsional dan eksekusi latar belakang. Direktori kerja tetap ada di antara perintah, termasuk perintah yang dijalankan di putaran berikutnya dari sesi multi-putaran; status shell seperti variabel lingkungan yang diekspor tidak. Untuk batas pada perubahan direktori mana yang bertahan, lihat [Apa yang bertahan di antara perintah](/docs/id/tools-reference#what-persists-between-commands). Untuk apa yang menetapkan batas latar depan, lihat [Timeout dan batas output](/docs/id/tools-reference#timeout-and-output-limits). Untuk batas waktu latar belakang, lihat [Perintah latar belakang](/docs/id/tools-reference#background-commands).3211Mengeksekusi perintah Bash dengan timeout opsional dan eksekusi latar belakang. Direktori kerja tetap ada di antara perintah, termasuk perintah yang dijalankan di putaran berikutnya dari sesi multi-putaran; status shell seperti variabel lingkungan yang diekspor tidak. Untuk batas pada perubahan direktori mana yang bertahan, lihat [Apa yang bertahan di antara perintah](/docs/id/tools-reference#what-persists-between-commands). Untuk apa yang menetapkan batas latar depan, lihat [Timeout dan batas output](/docs/id/tools-reference#timeout-and-output-limits). Untuk batas waktu latar belakang, lihat [Batas waktu untuk perintah latar belakang](/docs/id/tools-reference#time-limit-for-background-commands).

3210 3212 

3211<h3 id="monitor">3213<h3 id="monitor">

3212 Monitor3214 Monitor


4110 4112 

4111`timedOutAfterMs` adalah timeout dalam milidetik, diatur ketika perintah mencapai timeout dan berpindah ke latar belakang daripada dimulai di sana secara eksplisit. `backgroundCwdHint` diatur ketika perintah backgrounded berisi builtin perubahan direktori seperti `cd`, `pushd`, `popd`, atau `chdir`, dan mencatat bahwa direktori kerja sesi tidak berubah. Kedua field memerlukan Claude Code v2.1.210 atau lebih baru.4113`timedOutAfterMs` adalah timeout dalam milidetik, diatur ketika perintah mencapai timeout dan berpindah ke latar belakang daripada dimulai di sana secara eksplisit. `backgroundCwdHint` diatur ketika perintah backgrounded berisi builtin perubahan direktori seperti `cd`, `pushd`, `popd`, atau `chdir`, dan mencatat bahwa direktori kerja sesi tidak berubah. Kedua field memerlukan Claude Code v2.1.210 atau lebih baru.

4112 4114 

4113Ketika subagen yang berjalan di foreground memiliki perintah backgrounded, perintah [berakhir ketika run subagen tersebut berakhir](/docs/id/tools-reference#background-commands). Claude Code menetapkan `backgroundEndsWithFinalResponse` ke `true` pada perintah tersebut, dan menghilangkan field ketika perintah bertahan dalam turn, seperti perintah yang dimulai oleh percakapan utama atau oleh subagen latar belakang. Field memerlukan Claude Code v2.1.227 atau lebih baru.4115Ketika subagen yang berjalan di foreground memiliki perintah backgrounded, perintah [berakhir ketika run subagen tersebut berakhir](/docs/id/tools-reference#when-a-background-command-stops). Claude Code menetapkan `backgroundEndsWithFinalResponse` ke `true` pada perintah tersebut, dan menghilangkan field ketika perintah bertahan dalam turn, seperti perintah yang dimulai oleh percakapan utama atau oleh subagen latar belakang. Field memerlukan Claude Code v2.1.227 atau lebih baru.

4114 4116 

4115Claude Code menetapkan `gitOperation.commit.branch` ke cabang yang dinamai dalam baris ringkasan commit git, dan menghilangkannya untuk commit yang dibuat pada HEAD terpisah. Field memerlukan Agent SDK v0.3.227 atau lebih baru. Claude Code melaporkan perintah `gh pr reopen` sebagai aksi PR `reopened`, yang memerlukan Agent SDK v0.3.234 atau lebih baru.4117Claude Code menetapkan `gitOperation.commit.branch` ke cabang yang dinamai dalam baris ringkasan commit git, dan menghilangkannya untuk commit yang dibuat pada HEAD terpisah. Field memerlukan Agent SDK v0.3.227 atau lebih baru. Claude Code melaporkan perintah `gh pr reopen` sebagai aksi PR `reopened`, yang memerlukan Agent SDK v0.3.234 atau lebih baru.

4116 4118 

agent-view.md +3 −21

Details

8 8 

9Tampilan agen, dibuka dengan `claude agents`, adalah satu layar untuk semua sesi latar belakang Anda: apa yang sedang berjalan, apa yang membutuhkan masukan Anda, dan apa yang sudah selesai. Kirim sesi baru, pantau keadaan mereka sekilas alih-alih menggulir transkrip, dan campur tangan hanya ketika ada yang membutuhkan Anda. Setiap sesi latar belakang adalah percakapan Claude Code lengkap yang terus berjalan tanpa terminal yang terpasang, sehingga Anda dapat membukanya, membalas, dan pergi kapan saja.9Tampilan agen, dibuka dengan `claude agents`, adalah satu layar untuk semua sesi latar belakang Anda: apa yang sedang berjalan, apa yang membutuhkan masukan Anda, dan apa yang sudah selesai. Kirim sesi baru, pantau keadaan mereka sekilas alih-alih menggulir transkrip, dan campur tangan hanya ketika ada yang membutuhkan Anda. Setiap sesi latar belakang adalah percakapan Claude Code lengkap yang terus berjalan tanpa terminal yang terpasang, sehingga Anda dapat membukanya, membalas, dan pergi kapan saja.

10 10 

11<img src="https://mintcdn.com/claude-code/1B48Qz2Z9hac4SLG/images/agent-view-light.png?fit=max&auto=format&n=1B48Qz2Z9hac4SLG&q=85&s=7a186c96ed47d6700d084d77e786be65" className="dark:hidden" alt="Tampilan agen di terminal: header menunjukkan Claude Code v2.1.140, model, direktori kerja, dan ringkasan jumlah. Sesi dikelompokkan di bawah Membutuhkan masukan, Bekerja, dan Selesai, dengan input pengiriman di bagian bawah dan footer petunjuk keyboard." width="1772" height="780" data-path="images/agent-view-light.png" />11<img src="https://mintcdn.com/claude-code/HDAmBwgbrZVk0pOt/images/agent-view-light.png?fit=max&auto=format&n=HDAmBwgbrZVk0pOt&q=85&s=d6905012bee31f3e6b3920b09c05dd02" className="dark:hidden" alt="Tampilan agen di terminal. Baris di bagian atas menghitung sesi yang menunggu masukan, bekerja, dan selesai. Empat sesi dikelompokkan di bawah Membutuhkan masukan, Bekerja, dan Selesai. Setiap baris menunjukkan nama sesi, status atau pertanyaan terakhirnya, dan waktu. Di bagian bawah adalah input untuk mendeskripsikan tugas baru dan baris petunjuk keyboard." width="1872" height="680" data-path="images/agent-view-light.png" />

12 12 

13<img src="https://mintcdn.com/claude-code/1B48Qz2Z9hac4SLG/images/agent-view-dark.png?fit=max&auto=format&n=1B48Qz2Z9hac4SLG&q=85&s=a5bed7434bae368faea3a8f023b52aa2" className="hidden dark:block" alt="Tampilan agen di terminal: header menunjukkan Claude Code v2.1.140, model, direktori kerja, dan ringkasan jumlah. Sesi dikelompokkan di bawah Membutuhkan masukan, Bekerja, dan Selesai, dengan input pengiriman di bagian bawah dan footer petunjuk keyboard." width="1772" height="780" data-path="images/agent-view-dark.png" />13<img src="https://mintcdn.com/claude-code/HDAmBwgbrZVk0pOt/images/agent-view-dark.png?fit=max&auto=format&n=HDAmBwgbrZVk0pOt&q=85&s=fc3c195bfc57e313ced1f1beb36cee93" className="hidden dark:block" alt="Tampilan agen di terminal. Baris di bagian atas menghitung sesi yang menunggu masukan, bekerja, dan selesai. Empat sesi dikelompokkan di bawah Membutuhkan masukan, Bekerja, dan Selesai. Setiap baris menunjukkan nama sesi, status atau pertanyaan terakhirnya, dan waktu. Di bagian bawah adalah input untuk mendeskripsikan tugas baru dan baris petunjuk keyboard." width="1872" height="680" data-path="images/agent-view-dark.png" />

14 14 

15Gunakan tampilan agen ketika Anda memiliki beberapa tugas independen yang dapat dikerjakan Claude tanpa Anda menonton setiap langkah. Kirim perbaikan bug, tinjauan permintaan tarik, dan investigasi tes yang tidak stabil sebagai tiga baris, terus bekerja di jendela lain, dan periksa kembali ketika baris menunjukkan bahwa itu membutuhkan Anda atau memiliki hasil.15Gunakan tampilan agen ketika Anda memiliki beberapa tugas independen yang dapat dikerjakan Claude tanpa Anda menonton setiap langkah. Kirim perbaikan bug, tinjauan permintaan tarik, dan investigasi tes yang tidak stabil sebagai tiga baris, terus bekerja di jendela lain, dan periksa kembali ketika baris menunjukkan bahwa itu membutuhkan Anda atau memiliki hasil.

16 16 


966 966 

967Claude Code tidak pernah memulai ulang baris yang menjalankan [perintah shell](#run-a-shell-command), dari `Enter` atau dari `claude attach`, karena itu akan menjalankan perintah lagi; pesan baris dan `claude attach` keduanya mengatakan perintah tidak dijalankan lagi.967Claude Code tidak pernah memulai ulang baris yang menjalankan [perintah shell](#run-a-shell-command), dari `Enter` atau dari `claude attach`, karena itu akan menjalankan perintah lagi; pesan baris dan `claude attach` keduanya mengatakan perintah tidak dijalankan lagi.

968 968 

969<h4 id="terminal-host-died">

970 Host terminal mati

971</h4>

972 

973Di Linux dan WSL, supervisor memeriksa setiap proses host setiap beberapa detik, apakah Anda membuka sesi atau tidak, dan menandai sesi gagal ketika proses telah keluar tetapi koneksinya ke supervisor tidak pernah ditutup.

974 

975* Dalam tampilan agen, baris menampilkan `terminal host process died — press Enter to restart`. Tekan `Enter` padanya dan Claude Code memulai ulang sesi pada proses host yang segar.

976* Dari shell, `claude attach <id>` memulai ulang sesi yang sudah ditandai gagal. Jika tidak, itu melaporkan penyebabnya dan keluar, memberi tahu Anda untuk menjalankan `claude attach <id>` lagi.

977 

978<h4 id="session-isn’t-responding">

979 Sesi tidak merespons

980</h4>

981 

982Ketika supervisor menerima pembukaan tetapi tidak ada output yang tiba selama sekitar sepuluh detik, Claude Code mengakhiri upaya dan menawarkan restart. Sesi yang hanya macet, misalnya di seluruh sleep mesin, tidak mencapai penawaran ini: supervisor [memulai ulangnya saat dibuka](#read-session-state) itu sendiri.

983 

984* Dalam tampilan agen, footer menampilkan `Press enter again to restart this session — it isn't responding (its conversation is saved and resumes).` Tekan `Enter` pada baris yang sama lagi dan Claude Code menghentikan proses yang tidak merespons dan memulai ulang sesi; itu tidak menghentikan apa pun tanpa tekan kedua itu.

985* Dari shell, `claude attach <id>` melaporkan penyebabnya dan keluar, memberi tahu Anda untuk menjalankan `claude stop <id>`, kemudian `claude attach <id>`.

986 

987<h3 id="a-session-fails-before-starting-with-a-possibly-low-memory-note">969<h3 id="a-session-fails-before-starting-with-a-possibly-low-memory-note">

988 Sesi gagal sebelum dimulai dengan catatan `possibly low memory`970 Sesi gagal sebelum dimulai dengan catatan `possibly low memory`

989</h3>971</h3>


1044 Sesi lambat merespons setelah melampirkan1026 Sesi lambat merespons setelah melampirkan

1045</h3>1027</h3>

1046 1028 

1047Setelah sesi selesai dan duduk tanpa lampiran selama sekitar satu jam, supervisor menghentikan prosesnya untuk membebaskan sumber daya. Melampirkan memulai proses segar dari tempat ia berhenti dan beralih ke sesi segera sementara proses dimulai ulang. Sesi yang bekerja, menunggu Anda, atau [disematkan](#organize-the-list) tidak dihentikan dengan cara ini, jadi semat sesi dengan `Ctrl+T` untuk menjaganya tetap responsif.1029Setelah sesi selesai atau menunggu pesan berikutnya Anda tetap tidak terlampir selama sekitar satu jam, supervisor menghentikan prosesnya untuk membebaskan sumber daya. Melampirkan memulai proses segar dari tempat ia berhenti dan beralih ke sesi segera sementara proses dimulai ulang. Sesi yang bekerja, dijeda pada prompt izin atau dialog lainnya, atau [disematkan](#organize-the-list) tidak dihentikan dengan cara ini, jadi semat sesi dengan `Ctrl+T` untuk menjaganya tetap responsif.

1048 1030 

1049Saat proses dimulai, Claude Code menampilkan ekor transkrip sesi yang diformat dengan cara sesi langsung merender, dengan markdown, blok kode yang disorot, dan panggilan alat sebagai baris yang redup, di atas area prompt yang redup dengan catatan `Session is starting`. Sesi langsung menggantikannya segera setelah siap.1031Saat proses dimulai, Claude Code menampilkan ekor transkrip sesi yang diformat dengan cara sesi langsung merender, dengan markdown, blok kode yang disorot, dan panggilan alat sebagai baris yang redup, di atas area prompt yang redup dengan catatan `Session is starting`. Sesi langsung menggantikannya segera setelah siap.

1050 1032 

Details

384 384 

385Alias model seperti `opus` tidak bertindak sebagai pin, begitu juga ID model yang tidak dikenali Claude Code, seperti profil inferensi aplikasi ARN.385Alias model seperti `opus` tidak bertindak sebagai pin, begitu juga ID model yang tidak dikenali Claude Code, seperti profil inferensi aplikasi ARN.

386 386 

387Ketika pemeriksaan ini menemukan model yang akun Anda tidak dapat memanggil, Claude Code mengingat penolakan di mesin ini selama satu hari, dan peluncuran selama waktu itu melewati model yang diingat tanpa bertanya kepada Amazon Bedrock lagi. Claude Code memeriksa penolakan yang diingat dari model default saat ini lagi saat peluncuran setelah sepuluh menit telah berlalu sejak pemeriksaan terakhir, sehingga default yang administrator Anda aktifkan kembali. Untuk mematikan memori, atur [`CLAUDE_CODE_SKIP_MODEL_ACCESS_MEMORY=1`](/docs/id/env-vars).

388 

389<h3 id="when-a-model-is-disabled-mid-session">

390 Ketika model dinonaktifkan di tengah sesi

391</h3>

392 

393Jika akun Anda kehilangan akses ke model yang sesi Anda jalankan, misalnya karena administrator menonaktifkannya di akun Amazon Bedrock Anda, Claude Code beralih sesi ke model lain alih-alih gagal pada setiap permintaan, dan menampilkan `Switched to <fallback> because <model> is not available`. Claude Code mencoba model yang sama seperti fallback startup: versi sebelumnya dari tier yang sama terlebih dahulu dan, untuk sesi Opus tanpa versi Opus yang tersedia, model Sonnet default.

394 

395Pengalihan hanya berlaku untuk tier yang belum Anda sematkan, kondisi yang sama seperti fallback startup. Sesi pada versi spesifik yang Anda pilih, atau pada [profil inferensi aplikasi ARN](#map-each-model-version-to-an-inference-profile), mempertahankan modelnya dan, tanpa rantai fallback model, permintaan gagal sebagai gantinya. Dalam [mode auto](/docs/id/permission-modes#enable-auto-mode-on-bedrock-agent-platform-or-foundry), Claude Code hanya beralih ke model yang didukung mode auto di Amazon Bedrock. Jika tidak ada model tersebut yang tersedia, permintaan gagal dengan [AWS authentication failed](/docs/id/errors#aws-authentication-failed) dan petunjuk untuk mengaktifkan model.

396 

397[Rantai fallback model](/docs/id/model-config#fallback-model-chains) yang Anda konfigurasi menggantikan pengalihan tier: pada penolakan ini Claude Code beralih ke fallback yang Anda konfigurasi sebagai gantinya. Untuk membuat permintaan yang ditolak gagal daripada beralih, atur [`CLAUDE_CODE_DISABLE_MODEL_ACCESS_FALLBACK=1`](/docs/id/env-vars). Rantai fallback yang Anda konfigurasi masih beralih pada penolakan ini; hapus rantai juga jika Anda ingin setiap permintaan yang ditolak gagal.

398 

387<h2 id="cross-region-inference-profile-prefixes">399<h2 id="cross-region-inference-profile-prefixes">

388 Prefiks profil inferensi lintas wilayah400 Prefiks profil inferensi lintas wilayah

389</h2>401</h2>

artifacts.md +1 −1

Details

398| [Variabel lingkungan](/docs/id/env-vars) | Atur `CLAUDE_CODE_DISABLE_ARTIFACT=1` |398| [Variabel lingkungan](/docs/id/env-vars) | Atur `CLAUDE_CODE_DISABLE_ARTIFACT=1` |

399| [Aturan izin](/docs/id/permissions) | Tambahkan `Artifact` ke `permissions.deny` |399| [Aturan izin](/docs/id/permissions) | Tambahkan `Artifact` ke `permissions.deny` |

400 400 

401Setelah Anda mematikan artifacts dalam file [`--settings`](/docs/id/cli-reference#cli-flags) atau dengan `CLAUDE_CODE_DISABLE_ARTIFACT`, atau administrator Anda mematikannya dalam [pengaturan terkelola](/docs/id/server-managed-settings), tidak ada file pengaturan yang menyalakannya kembali. Sebelum v2.1.242, file yang lebih tinggi dalam [tumpukan prioritas](/docs/id/settings#settings-precedence) dapat menyalakan artifacts kembali bahkan ketika file dengan prioritas lebih rendah menetapkan `"enableArtifact": false`.401Setelah Anda mematikan artifacts dalam file [`--settings`](/docs/id/cli-reference#cli-flags) atau dengan `CLAUDE_CODE_DISABLE_ARTIFACT`, atau administrator Anda mematikannya dalam [pengaturan terkelola](/docs/id/server-managed-settings), tidak ada file pengaturan yang menyalakannya kembali.

402 402 

403Anda juga dapat menetapkan `"enableArtifact": false` dalam `.claude/settings.json` atau `.claude/settings.local.json` proyek untuk mematikan artifacts untuk sesi dalam proyek tersebut. `"enableArtifact": true` di salah satu file tidak menyalakannya kembali. Menghormati kunci dalam pengaturan proyek dan lokal memerlukan Claude Code v2.1.242 atau lebih baru.403Anda juga dapat menetapkan `"enableArtifact": false` dalam `.claude/settings.json` atau `.claude/settings.local.json` proyek untuk mematikan artifacts untuk sesi dalam proyek tersebut. `"enableArtifact": true` di salah satu file tidak menyalakannya kembali. Menghormati kunci dalam pengaturan proyek dan lokal memerlukan Claude Code v2.1.242 atau lebih baru.

404 404 

Details

194* **Sesi penyedia cloud seperti Amazon Bedrock**: diblokir hanya saat kredensial `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN`, atau `apiKeyHelper`, atau kunci API yang disimpan oleh login Claude Console sebelumnya, masih ada di mesin. Hapusnya dan sesi dimulai. Sesi ini mengautentikasi terhadap penyedia cloud Anda, yang kebijakan akses mereka mengaturnya194* **Sesi penyedia cloud seperti Amazon Bedrock**: diblokir hanya saat kredensial `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN`, atau `apiKeyHelper`, atau kunci API yang disimpan oleh login Claude Console sebelumnya, masih ada di mesin. Hapusnya dan sesi dimulai. Sesi ini mengautentikasi terhadap penyedia cloud Anda, yang kebijakan akses mereka mengaturnya

195* **[Profil Anthropic atau kredensial federasi](#anthropic-profiles-and-federation-credentials)**: tidak diblokir kecuali kredensial `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN`, atau `apiKeyHelper`, atau kunci API yang disimpan oleh login Claude Console sebelumnya, juga ada di mesin. Kunci tidak memeriksa organisasi mana yang dimiliki profil195* **[Profil Anthropic atau kredensial federasi](#anthropic-profiles-and-federation-credentials)**: tidak diblokir kecuali kredensial `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN`, atau `apiKeyHelper`, atau kunci API yang disimpan oleh login Claude Console sebelumnya, juga ada di mesin. Kunci tidak memeriksa organisasi mana yang dimiliki profil

196 196 

197<h3 id="restrict-which-api-providers-a-machine-may-use">

198 Batasi penyedia API mana yang dapat digunakan mesin

199</h3>

200 

201[`allowedProviders`](/docs/id/settings-reference#allowedproviders) dalam [pengaturan terkelola](/docs/id/managed-settings) mencantumkan layanan mana yang dapat dijangkau mesin terkelola melalui Claude, seperti API Anthropic, Amazon Bedrock, atau gateway LLM. Ini melengkapi `forceLoginMethod` dan `forceLoginOrgUUID`, yang mengatur akun mana yang digunakan sesi ketika berbicara dengan Anthropic. Memerlukan Claude Code v2.1.285 atau lebih baru.

202 

203```json managed-settings.json theme={null}

204{

205 "forceLoginMethod": "claudeai",

206 "forceLoginOrgUUID": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"],

207 "allowedProviders": ["anthropic", "bedrock"]

208}

209```

210 

211Dengan file ini, pengembang yang masuk ke organisasi claude.ai Anda atau dikonfigurasi untuk Amazon Bedrock dimulai secara normal. Sesi yang disiapkan untuk penyedia lain ditolak saat startup, dan sesi yang berjalan yang beralih ke satu ditolak pada permintaan berikutnya. [Pengaturan terkelola tidak mengizinkan penyedia API ini](/docs/id/errors#managed-settings-dont-allow-this-api-provider) menampilkan setiap pesan.

212 

213* **Izinkan gateway LLM atau proxy**: cantumkan `"customEndpoint"` dan atur URL gateway dalam blok `env` terkelola dari sumber yang sama. [Referensi pengaturan](/docs/id/settings-reference#allowedproviders) mencantumkan setiap nilai dan mengatakan variabel endpoint mana yang memerlukan pin `env` terkelola.

214* **Terapkan pada mesin terkelola**: letakkan daftar dalam sumber terkelola yang membawa sisa kebijakan Anda. [Catatan Scope](/docs/id/settings-reference#allowedproviders) entri mengatakan bagaimana daftar yang dikelola server menggabungkan dengannya.

215* **Hanya pengaturan terkelola server**: daftar yang Anda atur hanya dalam [pengaturan terkelola server](/docs/id/server-managed-settings) hanya menjangkau sesi yang mengambil pengaturan organisasi Anda, jadi perlakukan sebagai kenyamanan untuk mesin yang tidak dapat Anda jangkau dengan manajemen perangkat, bukan sebagai penegakan. [Ketersediaan platform](/docs/id/server-managed-settings#platform-availability) mencantumkan sesi mana yang mengambilnya.

216 

197<h2 id="credential-management">217<h2 id="credential-management">

198 Manajemen kredensial218 Manajemen kredensial

199</h2>219</h2>

Details

285 Edit rules from `/permissions`285 Edit rules from `/permissions`

286</h2>286</h2>

287 287 

288Untuk melihat dan mengedit aturan classifier tanpa membuka file pengaturan, jalankan [`/permissions`](/docs/id/permissions#manage-permissions) dan pilih tab **Auto mode**. Tab tersebut memerlukan Claude Code v2.1.246 atau lebih baru, dan hanya muncul ketika [auto mode tersedia](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) untuk sesi Anda.288Untuk melihat dan mengedit aturan classifier dan entri `environment` tanpa membuka file pengaturan, jalankan [`/permissions`](/docs/id/permissions#manage-permissions) dan pilih tab **Auto mode**. Tab tersebut memerlukan Claude Code v2.1.246 atau lebih baru, dan hanya muncul ketika [auto mode tersedia](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) untuk sesi Anda.

289 289 

290Tab ini mencantumkan entri `allow`, `soft_deny`, `hard_deny`, dan `environment` dari masing-masing [scope yang dibaca classifier](#where-the-classifier-reads-configuration), dan menunjukkan apakah aturan bawaan berlaku untuk setiap bagian. Claude Code menampilkan entri dari [managed settings](/docs/id/server-managed-settings) atau flag `--settings` sebagai read-only, dan menyimpan setiap perubahan yang Anda buat di tab ke `~/.claude/settings.json`. Dari tab ini Anda dapat:290Claude Code menampilkan entri dari [managed settings](/docs/id/server-managed-settings) atau flag `--settings` sebagai read-only, dan menyimpan setiap perubahan yang Anda buat di tab ke `~/.claude/settings.json`.

291 

292* Menambah, mengedit, atau menghapus aturan di bagian `allow`, `soft_deny`, dan `hard_deny`. Ketika Anda menambahkan aturan pertama ke bagian, Claude Code juga menyisipkan `"$defaults"` sehingga [aturan bawaan](#override-the-block-and-allow-rules) tetap berlaku.

293* Mematikan atau menghidupkan kembali aturan bawaan untuk `allow`, `soft_deny`, atau `hard_deny`. Claude Code mencatat pilihan dengan menambahkan atau menghapus `"$defaults"` dalam daftar Anda untuk bagian tersebut, jadi bagian memerlukan setidaknya satu aturan Anda sendiri sebelum Anda dapat mematikan aturan bawaannya.

294* Mengedit entri `environment` sebagai satu dokumen di editor Anda. Jika Anda belum mengonfigurasi entri `environment` apa pun, Claude Code terlebih dahulu menanyakan apakah akan mengganti environment bawaan, kemudian membuka editor pada teks bawaan lengkap. Ketika Anda menyimpan, Claude Code mengganti array `autoMode.environment` Anda dengan dokumen. Sertakan baris `"$defaults"` untuk [menjaga entri bawaan](#define-trusted-infrastructure).

295 291 

296<h2 id="route-all-shell-commands-through-the-classifier">292<h2 id="route-all-shell-commands-through-the-classifier">

297 Arahkan semua perintah shell melalui pengklasifikasi293 Arahkan semua perintah shell melalui pengklasifikasi

Details

1387 1387 

1388`parentSettingsBehavior: "merge"` menjaga pengiriman Claude Desktop dari egress allowlist ke embedded Claude Code sessions-nya tetap berfungsi; [Deliver policy to Claude Desktop sessions](/docs/id/claude-apps-gateway#deliver-policy-to-claude-desktop-sessions) menjelaskan mekanisme dan di mana opt-in harus berada.1388`parentSettingsBehavior: "merge"` menjaga pengiriman Claude Desktop dari egress allowlist ke embedded Claude Code sessions-nya tetap berfungsi; [Deliver policy to Claude Desktop sessions](/docs/id/claude-apps-gateway#deliver-policy-to-claude-desktop-sessions) menjelaskan mekanisme dan di mana opt-in harus berada.

1389 1389 

1390Untuk menghentikan developer dari membypass gateway dengan cloud provider variable atau `ANTHROPIC_BASE_URL` mereka sendiri, tambahkan `"allowedProviders": ["gateway"]` ke file yang sama. Claude Code kemudian menolak setiap session di mesin yang tidak diatur untuk Cloud gateway, dan mengakui gateway hanya ketika itu adalah yang dinamai `forceLoginGatewayUrl` atau yang URL-nya file's `env` block atur sebagai `ANTHROPIC_BASE_URL`. `claude gateway` menolak untuk berjalan di mesin yang mengatur list, jadi jaga key tetap off di gateway host. Lihat entry [`allowedProviders`](/docs/id/settings-reference#allowedproviders) dalam settings reference. Memerlukan Claude Code v2.1.285 atau lebih baru.

1391 

1390Deploy file `managed-settings.json` ke setiap device, biasanya melalui platform MDM Anda. File path berbeda menurut platform. Lihat [di mana setiap mekanisme menyimpan policy](/docs/id/managed-settings#where-each-mechanism-stores-the-policy).1392Deploy file `managed-settings.json` ke setiap device, biasanya melalui platform MDM Anda. File path berbeda menurut platform. Lihat [di mana setiap mekanisme menyimpan policy](/docs/id/managed-settings#where-each-mechanism-stores-the-policy).

1391 1393 

1392Secara default, registry policy di Windows atau managed-preferences plist di macOS menggantikan file `managed-settings.json` daripada menggabungkannya, terlepas dari [exception keys dan cross-source checks di atas](#precedence-with-other-managed-sources). Ketiga keys dalam snippet ini mengikuti highest-priority-source rule, jadi fleets yang mengirimkan policy melalui Group Policy atau configuration profiles harus menempatkan ketiganya dalam mekanisme itu sebagai gantinya.1394Secara default, registry policy di Windows atau managed-preferences plist di macOS menggantikan file `managed-settings.json` daripada menggabungkannya, terlepas dari [exception keys dan cross-source checks di atas](#precedence-with-other-managed-sources). Ketiga keys dalam snippet ini mengikuti highest-priority-source rule, jadi fleets yang mengirimkan policy melalui Group Policy atau configuration profiles harus menempatkan ketiganya dalam mekanisme itu sebagai gantinya.

Details

1561| `paste-cache/` | Konten tempel besar |1561| `paste-cache/` | Konten tempel besar |

1562| `image-cache/<session>/` | Gambar terlampir yang disimpan oleh Claude Code v2.1.274 dan lebih awal. Versi yang lebih baru menyimpan gambar yang ditempel dan terlampir di luar `~/.claude`, dalam direktori `images/` untuk setiap sesi di bawah direktori temp yang dikontrol [`CLAUDE_CODE_TMPDIR`](/docs/id/env-vars). Sweep menghapus direktori sisa sesi lain di sini, apa pun usianya. |1562| `image-cache/<session>/` | Gambar terlampir yang disimpan oleh Claude Code v2.1.274 dan lebih awal. Versi yang lebih baru menyimpan gambar yang ditempel dan terlampir di luar `~/.claude`, dalam direktori `images/` untuk setiap sesi di bawah direktori temp yang dikontrol [`CLAUDE_CODE_TMPDIR`](/docs/id/env-vars). Sweep menghapus direktori sisa sesi lain di sini, apa pun usianya. |

1563| `uploads/<session>/` | File yang Anda lampirkan dari web atau aplikasi mobile, dan foto yang Anda lampirkan dari aplikasi mobile, saat mengirim pesan ke sesi [Remote Control](/docs/id/remote-control). Lampiran ke [sesi cloud](/docs/id/claude-code-on-the-web) disimpan di lingkungan cloud sesi itu sendiri, bukan di mesin Anda. |1563| `uploads/<session>/` | File yang Anda lampirkan dari web atau aplikasi mobile, dan foto yang Anda lampirkan dari aplikasi mobile, saat mengirim pesan ke sesi [Remote Control](/docs/id/remote-control). Lampiran ke [sesi cloud](/docs/id/claude-code-on-the-web) disimpan di lingkungan cloud sesi itu sendiri, bukan di mesin Anda. |

1564| `dev-mods/<session>/` | [Mods yang Claude tulis](/docs/id/plugins/mods/create#ask-claude-for-a-mod) selama sesi |

1564| `session-env/` | Metadata lingkungan per-sesi |1565| `session-env/` | Metadata lingkungan per-sesi |

1565| `tasks/` | Daftar tugas yang ditulis oleh alat tugas, satu direktori per daftar |1566| `tasks/` | Daftar tugas yang ditulis oleh alat tugas, satu direktori per daftar |

1566| `shell-snapshots/` | Alias, fungsi, dan opsi shell yang ditangkap saat startup dan diterapkan oleh [alat Bash](/docs/id/tools-reference#bash-tool-behavior) ke setiap perintah. Dihapus saat keluar dengan bersih. Sweep menghapus yang tertinggal setelah crash. |1567| `shell-snapshots/` | Alias, fungsi, dan opsi shell yang ditangkap saat startup dan diterapkan oleh [alat Bash](/docs/id/tools-reference#bash-tool-behavior) ke setiap perintah. Dihapus saat keluar dengan bersih. Sweep menghapus yang tertinggal setelah crash. |

Details

84| `--dangerously-skip-permissions` | Lewati prompt izin. Setara dengan `--permission-mode bypassPermissions`. Lihat [mode izin](/docs/id/permission-modes#skip-all-checks-with-bypasspermissions-mode) untuk apa yang dilakukan dan tidak dilakukan oleh ini. Untuk sesi yang dimulai dengan `--bg`, mode [bertahan ketika supervisor memulai ulang sesi](/docs/id/agent-view#permission-mode-model-and-effort) | `claude --dangerously-skip-permissions` |84| `--dangerously-skip-permissions` | Lewati prompt izin. Setara dengan `--permission-mode bypassPermissions`. Lihat [mode izin](/docs/id/permission-modes#skip-all-checks-with-bypasspermissions-mode) untuk apa yang dilakukan dan tidak dilakukan oleh ini. Untuk sesi yang dimulai dengan `--bg`, mode [bertahan ketika supervisor memulai ulang sesi](/docs/id/agent-view#permission-mode-model-and-effort) | `claude --dangerously-skip-permissions` |

85| `--debug` | Aktifkan mode debug dengan penyaringan kategori opsional, seperti `--debug='mcp,startup'` atau `--debug='!1p'`. Filter mengikat hanya dalam bentuk `=`; filter yang dipisahkan spasi mengaktifkan mode debug tanpa penyaringan | `claude --debug='mcp,startup'` |85| `--debug` | Aktifkan mode debug dengan penyaringan kategori opsional, seperti `--debug='mcp,startup'` atau `--debug='!1p'`. Filter mengikat hanya dalam bentuk `=`; filter yang dipisahkan spasi mengaktifkan mode debug tanpa penyaringan | `claude --debug='mcp,startup'` |

86| `--debug-file <path>` | Tulis log debug ke jalur file tertentu. Secara implisit mengaktifkan mode debug. Mengambil alih `CLAUDE_CODE_DEBUG_LOGS_DIR` | `claude --debug-file /tmp/claude-debug.log` |86| `--debug-file <path>` | Tulis log debug ke jalur file tertentu. Secara implisit mengaktifkan mode debug. Mengambil alih `CLAUDE_CODE_DEBUG_LOGS_DIR` | `claude --debug-file /tmp/claude-debug.log` |

87| `--desktop` | Buka [aplikasi Claude Desktop](/docs/id/desktop) di direktori saat ini dan keluar tanpa memulai sesi di terminal. Tambahkan `--continue`, atau `--resume` dengan ID sesi, untuk [membuka sesi itu di Desktop](/docs/id/desktop#coming-from-the-cli) sebagai gantinya. `--resume` di sini hanya mengambil ID sesi, bukan nama atau jalur transkrip. Tidak mengambil prompt dan tidak ada bendera lain kecuali `--verbose` dan bendera `--debug`, karena aplikasi memulai sesi itu sendiri. Tersedia di macOS dan Windows x64 ketika Anda masuk dengan langganan Claude. Memerlukan Claude Code v2.1.285 atau lebih baru | `claude --desktop` |

87| `--disable-slash-commands` | Nonaktifkan semua skills dan perintah untuk sesi ini | `claude --disable-slash-commands` |88| `--disable-slash-commands` | Nonaktifkan semua skills dan perintah untuk sesi ini | `claude --disable-slash-commands` |

88| `--disallowedTools`, `--disallowed-tools` | Aturan penolakan. Nama alat telanjang menghapus alat yang cocok dari konteks Claude: `"Edit"` menghapus Edit, `"*"` menghapus setiap alat, dan `"mcp__*"` menghapus setiap alat MCP. Aturan yang dibatasi seperti `Bash(rm *)` membiarkan alat tersedia dan menolak hanya panggilan yang cocok [seperti yang ditulis](/docs/id/permissions#bash-rule-limits). Aturan yang menamai [`EndConversation`](/docs/id/tools-reference#endconversation-tool-behavior) tidak dapat menghapusnya saat alat lain tetap ada | `"Bash(git log *)" "Bash(git diff *)" "Edit"` |89| `--disallowedTools`, `--disallowed-tools` | Aturan penolakan. Nama alat telanjang menghapus alat yang cocok dari konteks Claude: `"Edit"` menghapus Edit, `"*"` menghapus setiap alat, dan `"mcp__*"` menghapus setiap alat MCP. Aturan yang dibatasi seperti `Bash(rm *)` membiarkan alat tersedia dan menolak hanya panggilan yang cocok [seperti yang ditulis](/docs/id/permissions#bash-rule-limits). Aturan yang menamai [`EndConversation`](/docs/id/tools-reference#endconversation-tool-behavior) tidak dapat menghapusnya saat alat lain tetap ada | `"Bash(git log *)" "Bash(git diff *)" "Edit"` |

89| `--effort` | Atur [tingkat upaya](/docs/id/model-config#adjust-effort-level) untuk sesi saat ini. Opsi: `low`, `medium`, `high`, `xhigh`, `max`, atau `ultracode`. Tingkat yang tersedia tergantung pada model. `ultracode` meminta upaya `xhigh` dengan [ultracode](/docs/id/workflows#let-claude-decide-with-ultracode) diaktifkan, dan memerlukan Claude Code v2.1.203 atau lebih baru. Menimpa pengaturan [`modelSettings`](/docs/id/settings-reference#modelsettings) dan [`effortLevel`](/docs/id/settings-reference#effortlevel) untuk sesi ini dan tidak bertahan | `claude --effort high` |90| `--effort` | Atur [tingkat upaya](/docs/id/model-config#adjust-effort-level) untuk sesi saat ini. Opsi: `low`, `medium`, `high`, `xhigh`, `max`, atau `ultracode`. Tingkat yang tersedia tergantung pada model. `ultracode` meminta upaya `xhigh` dengan [ultracode](/docs/id/workflows#let-claude-decide-with-ultracode) diaktifkan, dan memerlukan Claude Code v2.1.203 atau lebih baru. Menimpa pengaturan [`modelSettings`](/docs/id/settings-reference#modelsettings) dan [`effortLevel`](/docs/id/settings-reference#effortlevel) untuk sesi ini dan tidak bertahan | `claude --effort high` |


111| `--no-chrome` | Nonaktifkan [integrasi browser Chrome](/docs/id/chrome) untuk sesi ini | `claude --no-chrome` |112| `--no-chrome` | Nonaktifkan [integrasi browser Chrome](/docs/id/chrome) untuk sesi ini | `claude --no-chrome` |

112| `--no-session-persistence` | Nonaktifkan persistensi sesi sehingga sesi tidak disimpan ke disk dan tidak dapat dilanjutkan. Mode cetak saja. Variabel lingkungan [`CLAUDE_CODE_SKIP_PROMPT_HISTORY`](/docs/id/env-vars) melakukan hal yang sama dalam mode apa pun | `claude -p --no-session-persistence "query"` |113| `--no-session-persistence` | Nonaktifkan persistensi sesi sehingga sesi tidak disimpan ke disk dan tidak dapat dilanjutkan. Mode cetak saja. Variabel lingkungan [`CLAUDE_CODE_SKIP_PROMPT_HISTORY`](/docs/id/env-vars) melakukan hal yang sama dalam mode apa pun | `claude -p --no-session-persistence "query"` |

113| `--output-format` | Tentukan format output untuk mode cetak (opsi: `text`, `json`, `stream-json`) | `claude -p "query" --output-format json` |114| `--output-format` | Tentukan format output untuk mode cetak (opsi: `text`, `json`, `stream-json`) | `claude -p "query" --output-format json` |

114| `--permission-mode` | Mulai dalam [mode izin](/docs/id/permission-modes) yang ditentukan. Menerima `default`, `acceptEdits`, `plan`, `auto`, `dontAsk`, `bypassPermissions`, atau `manual` sebagai alias untuk `default`. Alias `manual` memilih mode izin yang UI label Manual dan memerlukan Claude Code v2.1.200 atau lebih baru; `claude --help` mencantumnya sebagai pengganti `default`, dan kedua nilai berfungsi. Menimpa `defaultMode` dari file pengaturan. Tanpa bendera ini atau `--dangerously-skip-permissions`, sesi baru dimulai dalam mode izin yang dijelaskan dalam [mode izin mana sesi dimulai](/docs/id/permission-modes#which-mode-a-session-starts-in). Untuk `-p`, itu adalah `default` ketika tidak ada yang dikonfigurasi | `claude --permission-mode plan` |115| `--permission-mode` | Mulai dalam [mode izin](/docs/id/permission-modes) yang ditentukan. Menerima `default`, `acceptEdits`, `plan`, `auto`, `dontAsk`, `bypassPermissions`, atau `manual` sebagai alias untuk `default`. Alias `manual` memilih mode izin yang UI label Manual dan memerlukan Claude Code v2.1.200 atau lebih baru; `claude --help` mencantumnya sebagai pengganti `default`, dan kedua nilai berfungsi. Menimpa `defaultMode` dari file pengaturan. Tanpa bendera ini atau `--dangerously-skip-permissions`, sesi baru dimulai dalam mode izin yang dijelaskan dalam [mode izin mana sesi dimulai](/docs/id/permission-modes#which-mode-a-session-starts-in), yang juga mencakup apa yang dimulai oleh jalankan `-p` | `claude --permission-mode plan` |

115| `--permission-prompt-tool` | Tentukan alat MCP untuk menangani prompt izin dalam mode non-interaktif. Claude Code menunggu server MCP alat itu untuk terhubung sebelum menjalankan putaran pertama, hingga waktu tunggu startup [`MCP_TIMEOUT`](/docs/id/env-vars), 30 detik secara default. <br /><br />Alat prompt tidak dapat menyetujui alat MCP yang ditandai sebagai [memerlukan interaksi pengguna](/docs/id/mcp#require-approval-for-a-specific-tool): Claude Code mengonversi hasil `allow` untuk satu ke penolakan. Pembatasan ini memerlukan Claude Code v2.1.199 atau lebih baru | `claude -p --permission-prompt-tool mcp_auth_tool "query"` |116| `--permission-prompt-tool` | Tentukan alat MCP untuk menangani prompt izin dalam mode non-interaktif. Claude Code menunggu server MCP alat itu untuk terhubung sebelum menjalankan putaran pertama, hingga waktu tunggu startup [`MCP_TIMEOUT`](/docs/id/env-vars), 30 detik secara default. <br /><br />Alat prompt tidak dapat menyetujui alat MCP yang ditandai sebagai [memerlukan interaksi pengguna](/docs/id/mcp#require-approval-for-a-specific-tool): Claude Code mengonversi hasil `allow` untuk satu ke penolakan. Pembatasan ini memerlukan Claude Code v2.1.199 atau lebih baru | `claude -p --permission-prompt-tool mcp_auth_tool "query"` |

116| `--permission-prompts` | Atur siapa yang menjawab prompt izin dalam mode cetak. Dengan `host` default, Claude Code mengirimnya ke host Agent SDK atau alat `--permission-prompt-tool`. Lewatkan `none` ketika tidak ada yang dapat menjawab, dan Claude Code menolaknya sebagai gantinya. Lihat [Matikan prompt izin dalam jalankan tanpa pengawasan](/docs/id/headless#turn-off-permission-prompts-in-unattended-runs). Memerlukan Claude Code v2.1.259 atau lebih baru | `claude -p --permission-prompts none "query"` |117| `--permission-prompts` | Atur siapa yang menjawab prompt izin dalam mode cetak. Dengan `host` default, Claude Code mengirimnya ke host Agent SDK atau alat `--permission-prompt-tool`. Lewatkan `none` ketika tidak ada yang dapat menjawab, dan Claude Code menolaknya sebagai gantinya. Lihat [Matikan prompt izin dalam jalankan tanpa pengawasan](/docs/id/headless#turn-off-permission-prompts-in-unattended-runs). Memerlukan Claude Code v2.1.259 atau lebih baru | `claude -p --permission-prompts none "query"` |

117| `--plugin-dir` | Muat plugin dari direktori atau arsip `.zip`, atau beberapa dari [folder plugin](/docs/id/plugins/create#load-a-directory-or-archive-for-one-session), hanya untuk sesi ini. Setiap bendera mengambil satu jalur. Ulangi bendera untuk lebih banyak jalur: `--plugin-dir A --plugin-dir B.zip`. Melewatkan folder plugin memerlukan Claude Code v2.1.265 atau lebih baru | `claude --plugin-dir ./my-plugin` |118| `--plugin-dir` | Muat plugin dari direktori atau arsip `.zip`, atau beberapa dari [folder plugin](/docs/id/plugins/create#load-a-directory-or-archive-for-one-session), hanya untuk sesi ini. Setiap bendera mengambil satu jalur. Ulangi bendera untuk lebih banyak jalur: `--plugin-dir A --plugin-dir B.zip`. Melewatkan folder plugin memerlukan Claude Code v2.1.265 atau lebih baru | `claude --plugin-dir ./my-plugin` |

118| `--plugin-url` | Ambil arsip plugin `.zip` dari URL hanya untuk sesi ini. Ulangi bendera untuk beberapa plugin, atau lewatkan URL yang dipisahkan spasi dalam nilai yang dikutip tunggal | `claude --plugin-url https://example.com/plugin.zip` |119| `--plugin-url` | Ambil arsip plugin `.zip` dari URL hanya untuk sesi ini. Ulangi bendera untuk beberapa plugin, atau lewatkan URL yang dipisahkan spasi dalam nilai yang dikutip tunggal | `claude --plugin-url https://example.com/plugin.zip` |

119| `--print`, `-p` | Cetak respons tanpa mode interaktif (lihat [dokumentasi Agent SDK](/docs/id/agent-sdk/overview) untuk detail penggunaan pemrograman) | `claude -p "query"` |120| `--print`, `-p` | Cetak respons tanpa mode interaktif (lihat [dokumentasi Agent SDK](/docs/id/agent-sdk/overview) untuk detail penggunaan pemrograman). Untuk `--resume` pada sesi latar belakang yang masih berjalan, lihat [Lanjutkan sesi](/docs/id/sessions#resume-a-running-background-session) | `claude -p "query"` |

120| `--prompt-suggestions` | Emit pesan `prompt_suggestion` dengan prompt pengguna berikutnya yang diprediksi setelah setiap putaran yang menghasilkan satu; percakapan yang sangat singkat dapat menghasilkan tidak ada. Memerlukan `--print`, `--output-format stream-json`, dan `--verbose`. Lihat [Saran prompt](/docs/id/interactive-mode#prompt-suggestions) | `claude -p --prompt-suggestions --output-format stream-json --verbose "query"` |121| `--prompt-suggestions` | Emit pesan `prompt_suggestion` dengan prompt pengguna berikutnya yang diprediksi setelah setiap putaran yang menghasilkan satu; percakapan yang sangat singkat dapat menghasilkan tidak ada. Memerlukan `--print`, `--output-format stream-json`, dan `--verbose`. Lihat [Saran prompt](/docs/id/interactive-mode#prompt-suggestions) | `claude -p --prompt-suggestions --output-format stream-json --verbose "query"` |

121| `--ref <branch>` | Dengan `--environment`, dasarkan checkout sesi baru pada ref bernama alih-alih `HEAD` lokal | `claude -p "Run the smoke test" --environment ccpool_abc123 --ref main` |122| `--ref <branch>` | Dengan `--environment`, dasarkan checkout sesi baru pada ref bernama alih-alih `HEAD` lokal | `claude -p "Run the smoke test" --environment ccpool_abc123 --ref main` |

122| `--remote` | Alias yang sudah usang untuk `--cloud`, termasuk bentuk sesi yang ada | `claude --remote "Fix the login bug"` |123| `--remote` | Alias yang sudah usang untuk `--cloud`, termasuk bentuk sesi yang ada | `claude --remote "Fix the login bug"` |


124| `--remote-control-session-name-prefix <prefix>` | Awalan untuk nama [Remote Control](/docs/id/remote-control) yang dibuat secara otomatis ketika tidak ada nama eksplisit yang diatur. Default ke nama host mesin Anda, menghasilkan nama seperti `myhost-graceful-unicorn`. Atur `CLAUDE_REMOTE_CONTROL_SESSION_NAME_PREFIX` untuk efek yang sama | `claude remote-control --remote-control-session-name-prefix dev-box` |125| `--remote-control-session-name-prefix <prefix>` | Awalan untuk nama [Remote Control](/docs/id/remote-control) yang dibuat secara otomatis ketika tidak ada nama eksplisit yang diatur. Default ke nama host mesin Anda, menghasilkan nama seperti `myhost-graceful-unicorn`. Atur `CLAUDE_REMOTE_CONTROL_SESSION_NAME_PREFIX` untuk efek yang sama | `claude remote-control --remote-control-session-name-prefix dev-box` |

125| `--replay-user-messages` | Emit kembali pesan pengguna dari stdin ke stdout untuk pengakuan. Memerlukan `--input-format stream-json` dan `--output-format stream-json` | `claude -p --input-format stream-json --output-format stream-json --verbose --replay-user-messages` |126| `--replay-user-messages` | Emit kembali pesan pengguna dari stdin ke stdout untuk pengakuan. Memerlukan `--input-format stream-json` dan `--output-format stream-json` | `claude -p --input-format stream-json --output-format stream-json --verbose --replay-user-messages` |

126| `--restricted` | Mulai dalam mode terbatas. Gunakan ketika harness evaluasi menjalankan `claude` di mesin bersama dan Claude Code tidak boleh menjalankan perintah atau membaca pengaturan pengguna dan proyek mesin itu. Claude Code menghapus alat bawaan yang menjalankan perintah atau kode, dan WebFetch, kecuali Anda menamai mereka secara individual dalam `--tools`, bukan melalui preset `default`. Ini juga membatasi alat file bawaan ke [direktori kerja](/docs/id/permissions#working-directories), memuat hanya [pengaturan terkelola](/docs/id/managed-settings) dan `--settings`, menolak [`bypassPermissions`](/docs/id/permission-modes#skip-all-checks-with-bypasspermissions-mode), dan [menolak untuk membuat sesi cloud](/docs/id/errors#cloud-sessions-cannot-be-created-from-a-restricted-session). Memerlukan Claude Code v2.1.248 atau lebih baru | `claude --restricted -p "query"` |127| `--restricted` | Mulai dalam mode terbatas. Gunakan ketika harness evaluasi menjalankan `claude` di mesin bersama dan Claude Code tidak boleh menjalankan perintah atau membaca pengaturan pengguna dan proyek mesin itu. Claude Code menghapus alat bawaan yang menjalankan perintah atau kode, dan WebFetch, kecuali Anda menamai mereka secara individual dalam `--tools`, bukan melalui preset `default`. Ini juga membatasi alat file bawaan ke [direktori kerja](/docs/id/permissions#working-directories), memuat hanya [pengaturan terkelola](/docs/id/managed-settings) dan `--settings`, menolak [`bypassPermissions`](/docs/id/permission-modes#skip-all-checks-with-bypasspermissions-mode), dan [menolak untuk membuat sesi cloud](/docs/id/errors#cloud-sessions-cannot-be-created-from-a-restricted-session). Memerlukan Claude Code v2.1.248 atau lebih baru | `claude --restricted -p "query"` |

127| `--resume`, `-r` | Lanjutkan sesi tertentu berdasarkan ID atau nama, atau tampilkan pemilih interaktif untuk memilih sesi. Sebagai pengganti ID, Anda dapat melewatkan jalur absolut ke file [transkrip](/docs/id/sessions#where-transcripts-are-stored) `.jsonl` sesi. Pemilih dan pencarian nama mencakup sesi yang menambahkan direktori ini dengan `/add-dir`. Ketika Anda melewatkan ID sesi, Claude Code mencari direktori proyek saat ini dan git worktrees-nya, kemudian setiap proyek lain di mesin ini. Sebelum v2.1.223, pencarian ID hanya mencakup direktori proyek saat ini dan git worktrees-nya. [Sesi latar belakang](/docs/id/agent-view) muncul di pemilih yang ditandai dengan `bg` | `claude --resume auth-refactor` |128| `--resume`, `-r` | Lanjutkan sesi tertentu berdasarkan ID atau nama, atau tampilkan pemilih interaktif untuk memilih sesi. Sebagai pengganti ID, Anda dapat melewatkan jalur absolut ke file [transkrip](/docs/id/sessions#where-transcripts-are-stored) `.jsonl` sesi. Pemilih dan pencarian nama mencakup sesi yang menambahkan direktori ini dengan `/add-dir`. Ketika Anda melewatkan ID sesi, Claude Code mencari direktori proyek saat ini dan git worktrees-nya, kemudian setiap proyek lain di mesin ini. Sebelum v2.1.223, pencarian ID hanya mencakup direktori proyek saat ini dan git worktrees-nya. [Sesi latar belakang](/docs/id/agent-view) muncul di pemilih yang ditandai dengan `bg`. Melanjutkan sesi yang masih berjalan [membuka sesi itu](/docs/id/sessions#resume-a-running-background-session) di terminal ini melalui `claude attach`, dan prompt yang Anda lewatkan di baris perintah masuk ke dalamnya sebagai putaran berikutnya. Sebelum v2.1.285, Claude Code menolak dan mencetak perintah `claude attach` untuk dijalankan sebagai gantinya | `claude --resume auth-refactor` |

128| `--safe-mode` | Mulai dengan semua kustomisasi dinonaktifkan untuk memecahkan masalah konfigurasi yang rusak: CLAUDE.md, skills, plugins, hooks, server MCP, perintah dan agen khusus, gaya output, alur kerja, tema khusus, pintasan keyboard khusus, perintah baris status dan saran file, server LSP, dan memori otomatis tidak dimuat. Autentikasi, pemilihan model, alat bawaan, dan izin bekerja secara normal, yang berbeda dari [`--bare`](/docs/id/headless#start-faster-with-bare-mode). Kebijakan pengaturan terkelola masih berlaku, termasuk hook yang dikonfigurasi kebijakan, baris status, dan perintah saran file; plugin terkelola, skills terkelola, CLAUDE.md terkelola, dan server MCP yang dikonfigurasi kebijakan tidak. Berguna untuk memeriksa apakah kustomisasi adalah apa yang memicu [fallback model otomatis](/docs/id/model-config#automatic-model-fallback). Menetapkan [`CLAUDE_CODE_SAFE_MODE`](/docs/id/env-vars) | `claude --safe-mode` |129| `--safe-mode` | Mulai dengan semua kustomisasi dinonaktifkan untuk memecahkan masalah konfigurasi yang rusak: CLAUDE.md, skills, plugins, hooks, server MCP, perintah dan agen khusus, gaya output, alur kerja, tema khusus, pintasan keyboard khusus, perintah baris status dan saran file, server LSP, dan memori otomatis tidak dimuat. Autentikasi, pemilihan model, alat bawaan, dan izin bekerja secara normal, yang berbeda dari [`--bare`](/docs/id/headless#start-faster-with-bare-mode). Kebijakan pengaturan terkelola masih berlaku, termasuk hook yang dikonfigurasi kebijakan, baris status, dan perintah saran file; plugin terkelola, skills terkelola, CLAUDE.md terkelola, dan server MCP yang dikonfigurasi kebijakan tidak. Berguna untuk memeriksa apakah kustomisasi adalah apa yang memicu [fallback model otomatis](/docs/id/model-config#automatic-model-fallback). Menetapkan [`CLAUDE_CODE_SAFE_MODE`](/docs/id/env-vars) | `claude --safe-mode` |

129| `--session-id` | Gunakan ID sesi tertentu untuk percakapan (harus UUID yang valid) | `claude --session-id "550e8400-e29b-41d4-a716-446655440000"` |130| `--session-id` | Gunakan ID sesi tertentu untuk percakapan (harus UUID yang valid) | `claude --session-id "550e8400-e29b-41d4-a716-446655440000"` |

130| `--setting-sources` | Daftar sumber pengaturan yang dipisahkan koma untuk dimuat (`user`, `project`, `local`). Lihat [tampilan agen](/docs/id/agent-view#what-carries-over-when-you-background) dan [tim agen](/docs/id/agent-teams#context-and-communication) untuk sesi yang Anda mulai dari sesi ini yang mewarisi daftar | `claude --setting-sources user,project` |131| `--setting-sources` | Daftar sumber pengaturan yang dipisahkan koma untuk dimuat (`user`, `project`, `local`). Lihat [tampilan agen](/docs/id/agent-view#what-carries-over-when-you-background) dan [tim agen](/docs/id/agent-teams#context-and-communication) untuk sesi yang Anda mulai dari sesi ini yang mewarisi daftar | `claude --setting-sources user,project` |

Details

439 439 

440* **Perintah yang dijalankan Claude**: lingkungan cloud tidak menetapkan timeout perintahnya sendiri, jadi default alat Bash berlaku. Claude menunggu 2 menit untuk perintah secara default dan dapat meminta hingga 10 menit.440* **Perintah yang dijalankan Claude**: lingkungan cloud tidak menetapkan timeout perintahnya sendiri, jadi default alat Bash berlaku. Claude menunggu 2 menit untuk perintah secara default dan dapat meminta hingga 10 menit.

441 441 

442 Ketika perintah mencapai [timeout](/docs/id/tools-reference#timeout-and-output-limits)-nya, Claude Code [memindahkannya ke latar belakang](/docs/id/tools-reference#background-commands) alih-alih menghentikannya, kecuali perintah dimulai dengan `sleep`. Perintah yang dipindahkan dengan cara ini dapat terus berjalan selama 30 menit lagi sebelum Claude Code menghentikannya di [batas waktu latar belakangnya](/docs/id/tools-reference#background-commands). Menetapkan `BASH_DEFAULT_TIMEOUT_MS` di atas `1800000` milidetik memanjangkan batas itu serta default latar depan.442 Ketika perintah mencapai [timeout](/docs/id/tools-reference#timeout-and-output-limits)-nya, Claude Code [memindahkannya ke latar belakang](/docs/id/tools-reference#foreground-commands-that-move-to-the-background) alih-alih menghentikannya, kecuali perintah dimulai dengan `sleep`. Perintah yang dipindahkan dengan cara ini dapat terus berjalan selama 30 menit lagi sebelum Claude Code menghentikannya di [batas waktu latar belakangnya](/docs/id/tools-reference#time-limit-for-background-commands). Menetapkan `BASH_DEFAULT_TIMEOUT_MS` di atas `1800000` milidetik memanjangkan batas itu serta default latar depan.

443* **Hook SessionStart**: Claude Code membatalkan hook `command` setelah 600 detik kecuali Anda menetapkan [`timeout`](/docs/id/hooks#common-fields), dalam detik, pada entri hook. Claude Code tidak memberlakukan timeout pada hook yang Anda jalankan dengan [`async: true`](/docs/id/hooks#run-hooks-in-the-background).443* **Hook SessionStart**: Claude Code membatalkan hook `command` setelah 600 detik kecuali Anda menetapkan [`timeout`](/docs/id/hooks#common-fields), dalam detik, pada entri hook. Claude Code tidak memberlakukan timeout pada hook yang Anda jalankan dengan [`async: true`](/docs/id/hooks#run-hooks-in-the-background).

444* **Skrip setup**: skrip yang memakan waktu lebih lama dari kira-kira lima menit tidak di-cache. [Script requirements](#script-requirements) mencakup cara tetap di bawah itu.444* **Skrip setup**: skrip yang memakan waktu lebih lama dari kira-kira lima menit tidak di-cache. [Script requirements](#script-requirements) mencakup cara tetap di bawah itu.

445* **Sesi idle**: setelah beberapa menit tanpa aktivitas, VM sesi sesi dijeda dengan file-filenya disimpan, dan VM yang dijeda dapat kemudian diambil kembali. [Set environment variables](#set-environment-variables) menjelaskan apa yang diambil sesi dalam setiap kasus, dan [Environment expired](/docs/id/claude-code-on-the-web#environment-expired) mencakup cara membuka kembali sesi yang VM-nya diambil kembali.445* **Sesi idle**: setelah beberapa menit tanpa aktivitas, VM sesi sesi dijeda dengan file-filenya disimpan, dan VM yang dijeda dapat kemudian diambil kembali. [Set environment variables](#set-environment-variables) menjelaskan apa yang diambil sesi dalam setiap kasus, dan [Environment expired](/docs/id/claude-code-on-the-web#environment-expired) mencakup cara membuka kembali sesi yang VM-nya diambil kembali.

commands.md +1 −1

Details

132| `/remote-control` | Buat sesi ini tersedia untuk [Remote Control](/docs/id/remote-control) dari claude.ai. Menjalankannya saat keluar mencetak bahwa Remote Control memerlukan langganan claude.ai dan memberi tahu Anda cara masuk; sebelum v2.1.206 melaporkan `Unknown command: /remote-control`. Alias: `/rc` |132| `/remote-control` | Buat sesi ini tersedia untuk [Remote Control](/docs/id/remote-control) dari claude.ai. Menjalankannya saat keluar mencetak bahwa Remote Control memerlukan langganan claude.ai dan memberi tahu Anda cara masuk; sebelum v2.1.206 melaporkan `Unknown command: /remote-control`. Alias: `/rc` |

133| `/remote-env` | Pilih [lingkungan cloud](/docs/id/cloud-environments#select-an-environment-from-the-cli) default untuk sesi cloud yang Anda mulai dari CLI |133| `/remote-env` | Pilih [lingkungan cloud](/docs/id/cloud-environments#select-an-environment-from-the-cli) default untuk sesi cloud yang Anda mulai dari CLI |

134| `/rename [name]` | Ganti nama sesi saat ini dan tampilkan nama di bilah prompt. Tanpa nama, auto-generate dari riwayat percakapan. Juga tersedia dalam mode non-interaktif (`-p`); memerlukan Claude Code v2.1.205 atau lebih baru. Dari setiap permukaan penggantian nama, termasuk claude.ai dan aplikasi desktop, Claude Code mengganti karakter kontrol dan tidak terlihat dalam nama baru dengan spasi dan membatasi nama pada 200 karakter. Jika nama kosong setelah karakter tidak terlihat dihapus, Claude Code menolaknya dan menunjukkan `That name is empty once invisible characters are removed. Usage: /rename <name>`. Penggantian karakter dan batas panjang memerlukan Claude Code v2.1.221 atau lebih baru. Jika sesi langsung lain di mesin ini sudah menggunakan nama yang Anda berikan, Claude Code menerapkan [varian darinya](/docs/id/sessions#name-your-sessions) sebagai gantinya |134| `/rename [name]` | Ganti nama sesi saat ini dan tampilkan nama di bilah prompt. Tanpa nama, auto-generate dari riwayat percakapan. Juga tersedia dalam mode non-interaktif (`-p`); memerlukan Claude Code v2.1.205 atau lebih baru. Dari setiap permukaan penggantian nama, termasuk claude.ai dan aplikasi desktop, Claude Code mengganti karakter kontrol dan tidak terlihat dalam nama baru dengan spasi dan membatasi nama pada 200 karakter. Jika nama kosong setelah karakter tidak terlihat dihapus, Claude Code menolaknya dan menunjukkan `That name is empty once invisible characters are removed. Usage: /rename <name>`. Penggantian karakter dan batas panjang memerlukan Claude Code v2.1.221 atau lebih baru. Jika sesi langsung lain di mesin ini sudah menggunakan nama yang Anda berikan, Claude Code menerapkan [varian darinya](/docs/id/sessions#name-your-sessions) sebagai gantinya |

135| `/resume [session]` | Lanjutkan percakapan berdasarkan ID atau nama, atau buka pemilih sesi. [Sesi latar belakang](/docs/id/agent-view) muncul di pemilih ditandai dengan `bg`; satu yang masih berjalan tidak dapat dilanjutkan di sini, jadi lampirkan dari `claude agents` atau hentikan di sana terlebih dahulu. Alias: `/continue` |135| `/resume [session]` | Lanjutkan percakapan berdasarkan ID atau nama, atau buka pemilih sesi. [Sesi latar belakang](/docs/id/agent-view) muncul di pemilih ditandai dengan `bg`. Melanjutkan satu yang masih berjalan, dari pemilih atau berdasarkan ID atau nama, [membuka sesi itu](/docs/id/sessions#resume-a-running-background-session): percakapan saat ini Anda pindah ke latar belakang dan terminal ini melampirkan ke yang berjalan. Tekan `←` pada prompt kosong untuk kembali ke tampilan agen, yang juga mencantumkan percakapan yang Anda tinggalkan. Sebelum v2.1.285, Claude Code menolak dan memberi tahu Anda untuk membuka sesi dengan `claude attach` atau menghentikannya terlebih dahulu. Alias: `/continue` |

136| `/review [low\|medium\|high\|xhigh\|max\|ultra] [--fix] [--comment] [pr#\|branch\|path]` | Alias dari [`/code-review`](/docs/id/code-review#review-a-diff-locally): meninjau diff saat ini, atau nomor PR, cabang, atau jalur yang Anda berikan, seperti `/review 1234`, dan mengambil tingkat upaya dan bendera yang sama. Tanpa level yang diberikan, tinjauan menggunakan kembali level `low` hingga `max` terakhir yang Anda ketik; lihat [Tinjau diff secara lokal](/docs/id/code-review#review-a-diff-locally) untuk aturan yang tepat. Untuk tinjauan cloud mendalam, gunakan [`/code-review ultra`](/docs/id/ultrareview). Sebelum v2.1.223, `/review` adalah perintah terpisah yang menjalankan tinjauan baca-saja satu lintasan dari permintaan tarik GitHub berdasarkan nomor, mencantumkan PR terbuka untuk dipilih saat dijalankan tanpa argumen; dari v2.1.186 melalui v2.1.201, itu menjalankan mesin multi-agen yang sama seperti `/code-review medium` |136| `/review [low\|medium\|high\|xhigh\|max\|ultra] [--fix] [--comment] [pr#\|branch\|path]` | Alias dari [`/code-review`](/docs/id/code-review#review-a-diff-locally): meninjau diff saat ini, atau nomor PR, cabang, atau jalur yang Anda berikan, seperti `/review 1234`, dan mengambil tingkat upaya dan bendera yang sama. Tanpa level yang diberikan, tinjauan menggunakan kembali level `low` hingga `max` terakhir yang Anda ketik; lihat [Tinjau diff secara lokal](/docs/id/code-review#review-a-diff-locally) untuk aturan yang tepat. Untuk tinjauan cloud mendalam, gunakan [`/code-review ultra`](/docs/id/ultrareview). Sebelum v2.1.223, `/review` adalah perintah terpisah yang menjalankan tinjauan baca-saja satu lintasan dari permintaan tarik GitHub berdasarkan nomor, mencantumkan PR terbuka untuk dipilih saat dijalankan tanpa argumen; dari v2.1.186 melalui v2.1.201, itu menjalankan mesin multi-agen yang sama seperti `/code-review medium` |

137| `/rewind` | Putar ulang percakapan dan/atau kode ke titik sebelumnya, atau ringkas dari pesan yang dipilih. Lihat [checkpointing](/docs/id/checkpointing). Alias: `/checkpoint`, `/undo` |137| `/rewind` | Putar ulang percakapan dan/atau kode ke titik sebelumnya, atau ringkas dari pesan yang dipilih. Lihat [checkpointing](/docs/id/checkpointing). Alias: `/checkpoint`, `/undo` |

138| `/run` | **[Skill](/docs/id/skills#bundled-skills).** Luncurkan dan jalankan aplikasi proyek Anda untuk melihat perubahan bekerja, bukan hanya lulus tes. Lihat [Jalankan dan verifikasi aplikasi Anda](/docs/id/skills#run-and-verify-your-app) |138| `/run` | **[Skill](/docs/id/skills#bundled-skills).** Luncurkan dan jalankan aplikasi proyek Anda untuk melihat perubahan bekerja, bukan hanya lulus tes. Lihat [Jalankan dan verifikasi aplikasi Anda](/docs/id/skills#run-and-verify-your-app) |

Details

1634 1634 

1635Jika Anda membutuhkan jendela yang lebih besar daripada percakapan yang lebih kecil, model Fable, Sonnet 5 dan yang lebih baru, Opus 4.6 dan yang lebih baru, dan Sonnet 4.6 mendukung jendela konteks 1 juta token. Lihat [Extended context](/docs/id/model-config#extended-context) untuk ketersediaan menurut paket dan cara memilih varian model `[1m]`. Pemadatan bekerja dengan cara yang sama pada batas yang lebih besar.1635Jika Anda membutuhkan jendela yang lebih besar daripada percakapan yang lebih kecil, model Fable, Sonnet 5 dan yang lebih baru, Opus 4.6 dan yang lebih baru, dan Sonnet 4.6 mendukung jendela konteks 1 juta token. Lihat [Extended context](/docs/id/model-config#extended-context) untuk ketersediaan menurut paket dan cara memilih varian model `[1m]`. Pemadatan bekerja dengan cara yang sama pada batas yang lebih besar.

1636 1636 

1637Sonnet 5.5 dan Sonnet 5 berjalan dengan jendela konteks 1M dan tidak memiliki varian `[1m]` untuk dipilih. Lihat [Sonnet 5.5 and Sonnet 5 context window](/docs/id/model-config#sonnet-5-5-and-sonnet-5-context-window) untuk ambang batas auto-compaction-nya dan pengecualian gateway LLM.1637Sonnet 5.5 dan Sonnet 5 berjalan dengan jendela konteks 1M dan tidak memiliki varian `[1m]` untuk dipilih. Lihat [Sonnet 5.5 and Sonnet 5 context window](/docs/id/model-config#sonnet-5-5-and-sonnet-5-context-window) untuk ambang batas auto-compaction-nya, dan [the context window behind a gateway](/docs/id/model-config#context-window-behind-a-gateway) untuk cara Claude Code mengukur jendela saat Anda mengatur `ANTHROPIC_BASE_URL` ke [LLM gateway](/docs/id/llm-gateway).

1638 1638 

1639Titik di mana pemadatan otomatis berjalan tergantung pada model dan konfigurasi Anda. Lihat [Default auto-compact thresholds](/docs/id/model-config#default-auto-compact-thresholds) untuk batas per model, dan [Correct the window for a gateway or custom model ID](/docs/id/model-config#correct-the-window-for-a-gateway-or-custom-model-id) jika Claude Code mengasumsikan jendela yang salah untuk ID model Anda, seperti alias [LLM gateway](/docs/id/llm-gateway).1639Titik di mana pemadatan otomatis berjalan tergantung pada model dan konfigurasi Anda. Lihat [Default auto-compact thresholds](/docs/id/model-config#default-auto-compact-thresholds) untuk batas per model, dan [Correct the window for a gateway or custom model ID](/docs/id/model-config#correct-the-window-for-a-gateway-or-custom-model-id) jika Claude Code mengasumsikan jendela yang salah untuk ID model Anda, seperti alias [LLM gateway](/docs/id/llm-gateway).

1640 1640 

costs.md +1 −1

Details

51 51 

52Bagian miss, expected rebuild, dan warm atau cold dari baris berarti hal berikut:52Bagian miss, expected rebuild, dan warm atau cold dari baris berarti hal berikut:

53 53 

54* **Misses**: permintaan yang memproses ulang konten yang sudah dipegang cache, dengan waktu miss terakhir dan berapa banyak token yang ditulis kembali ke cache oleh permintaan tersebut. Claude Code menghitung permintaan sebagai miss ketika permintaan memproses ulang lebih dari 5% dan setidaknya 2.000 token dari apa yang bisa dibaca dari cache. [Tindakan yang membatalkan cache](/docs/id/prompt-caching#actions-that-invalidate-the-cache) mencantumkan penyebab umum. Ketika Claude Code dapat mengidentifikasi kemungkinan penyebab miss terakhir, baris menamakannya juga, misalnya `likely cause: tool definitions changed`. Teks kemungkinan-penyebab memerlukan Claude Code v2.1.260 atau lebih baru.54* **Misses**: permintaan yang memproses ulang konten yang sudah dipegang cache, dengan waktu miss terakhir dan berapa banyak token yang ditulis kembali ke cache oleh permintaan tersebut. [Tindakan yang membatalkan cache](/docs/id/prompt-caching#actions-that-invalidate-the-cache) mencantumkan penyebab umum. Ketika Claude Code dapat mengidentifikasi kemungkinan penyebab miss terakhir, baris menamakannya juga, misalnya `likely cause: tool definitions changed`. Teks kemungkinan-penyebab memerlukan Claude Code v2.1.260 atau lebih baru.

55* **Expected rebuilds**: ketika Claude Code sendiri baru saja menulis ulang percakapan, dengan [compaction](/docs/id/prompt-caching#compacting-the-conversation) atau dengan menghapus hasil tool lama dari konteks, ia menghitung jenis miss yang sama sebagai expected rebuild. Bagian ini muncul hanya setelah setidaknya satu expected rebuild telah terjadi.55* **Expected rebuilds**: ketika Claude Code sendiri baru saja menulis ulang percakapan, dengan [compaction](/docs/id/prompt-caching#compacting-the-conversation) atau dengan menghapus hasil tool lama dari konteks, ia menghitung jenis miss yang sama sebagai expected rebuild. Bagian ini muncul hanya setelah setidaknya satu expected rebuild telah terjadi.

56* **Warm atau cold**: apakah awalan cache masih dalam [cache lifetime](/docs/id/prompt-caching#cache-lifetime), dengan TTL yang berlaku. Ketika cache dingin, baris menunjukkan berapa lama sesi telah idle. Ketika tidak ada respons yang melaporkan token cache, baris berakhir dengan `no prompt caching reported by the API`.56* **Warm atau cold**: apakah awalan cache masih dalam [cache lifetime](/docs/id/prompt-caching#cache-lifetime), dengan TTL yang berlaku. Ketika cache dingin, baris menunjukkan berapa lama sesi telah idle. Ketika tidak ada respons yang melaporkan token cache, baris berakhir dengan `no prompt caching reported by the API`.

57 57 

desktop.md +8 −0

Details

967 967 

968Untuk memindahkan sesi CLI ke Desktop, jalankan `/desktop` di terminal. Claude menyimpan sesi Anda dan membukanya di aplikasi desktop, kemudian keluar dari CLI. Perintah ini tersedia di macOS dan Windows x64 ketika Anda masuk dengan langganan Claude. Perintah ini tidak tersedia dengan autentikasi kunci API atau di Amazon Bedrock, Google Cloud's Agent Platform, atau Microsoft Foundry.968Untuk memindahkan sesi CLI ke Desktop, jalankan `/desktop` di terminal. Claude menyimpan sesi Anda dan membukanya di aplikasi desktop, kemudian keluar dari CLI. Perintah ini tersedia di macOS dan Windows x64 ketika Anda masuk dengan langganan Claude. Perintah ini tidak tersedia dengan autentikasi kunci API atau di Amazon Bedrock, Google Cloud's Agent Platform, atau Microsoft Foundry.

969 969 

970Dari shell Anda, [`claude --desktop`](/docs/id/cli-reference#cli-flags) membuka Desktop secara langsung tanpa memulai sesi terminal. Ini memerlukan Claude Code v2.1.285 atau lebih baru dan memiliki persyaratan platform dan sign-in yang sama dengan `/desktop`. Tanpa argumen lain, ini membuka Desktop di direktori saat ini. Untuk membuka sesi CLI yang ada di Desktop, tambahkan `--continue` untuk percakapan paling baru di direktori ini, atau `--resume` dengan ID sesi yang ditampilkan `/status`:

971 

972```bash theme={null}

973claude --desktop --resume <session-id>

974```

975 

976Claude Code mencetak `Opening session <session-id> in Claude Desktop`, sesi terbuka di aplikasi, dan perintah keluar. Nama sesi tidak berfungsi sebagai pengganti ID. Claude Code tidak memindahkan sesi yang terbuka di terminal lain atau masih berjalan di latar belakang. Jika Claude Desktop tidak terinstal, perintah mencetak tautan unduhan dan keluar.

977 

970Anda juga dapat mengambil sesi CLI dari dalam Desktop dengan `/resume`. Perintah ini tersedia di sesi lokal, bukan di SSH, WSL, atau sesi cloud.978Anda juga dapat mengambil sesi CLI dari dalam Desktop dengan `/resume`. Perintah ini tersedia di sesi lokal, bukan di SSH, WSL, atau sesi cloud.

971 979 

972Untuk melanjutkan sesi terminal di Desktop:980Untuk melanjutkan sesi terminal di Desktop:

desktop-linux.md +12 −0

Details

163 163 

164Jika `claude-desktop` keluar dengan pesan ini, Anda meluncurkannya sebagai root. Masuk sebagai pengguna biasa dan luncurkan dari sana.164Jika `claude-desktop` keluar dengan pesan ini, Anda meluncurkannya sebagai root. Masuk sebagai pengguna biasa dan luncurkan dari sana.

165 165 

166<h3 id="your-sign-in-won’t-be-saved-on-this-device">

167 Tanda masuk Anda tidak akan disimpan di perangkat ini

168</h3>

169 

170Claude Desktop menyimpan tanda masuk Anda di keyring desktop Anda, seperti GNOME Keyring atau KDE Wallet. Jika tidak dapat menjangkau keyring yang tidak terkunci, tanda masuk Anda tidak disimpan dan Anda masuk lagi setiap kali Anda meluncurkan aplikasi. Pilih kasus yang sesuai dengan sistem Anda:

171 

172* **Tidak ada keyring yang diinstal, di desktop selain KDE Plasma**: jika Anda menginstal dengan `--no-install-recommends`, atau pada gambar minimal yang melewati paket yang direkomendasikan, apt tidak menginstal keyring. Instal GNOME Keyring dengan `sudo apt install gnome-keyring`.

173* **KDE Plasma dengan GNOME Keyring juga diinstal**: KDE Wallet dilengkapi dengan desktop Plasma. Dua keyring bertentangan, dan Claude Desktop dapat menampilkan pemberitahuan ini meskipun KDE Wallet berfungsi. Hapus yang ekstra dengan `sudo apt remove gnome-keyring`, kemudian mulai ulang komputer Anda.

174* **Keyring diinstal tetapi terkunci**: buka kuncinya.

175 

176Setelah perbaikan, mulai ulang aplikasi dan masuk. Kemudian keluar dan luncurkan lagi untuk mengonfirmasi aplikasi terbuka dengan Anda masih masuk.

177 

166<h3 id="cowork-isn’t-available">178<h3 id="cowork-isn’t-available">

167 Cowork tidak tersedia179 Cowork tidak tersedia

168</h3>180</h3>

errors.md +63 −33

Details

322| `Transcript writes are failing (...)` | [Session saving warnings](#transcript-writes-are-failing) |322| `Transcript writes are failing (...)` | [Session saving warnings](#transcript-writes-are-failing) |

323| `Transcript saving is off — CLAUDE_CODE_SKIP_PROMPT_HISTORY is set` | [Session saving warnings](#transcript-saving-is-off-skip-prompt-history) |323| `Transcript saving is off — CLAUDE_CODE_SKIP_PROMPT_HISTORY is set` | [Session saving warnings](#transcript-saving-is-off-skip-prompt-history) |

324| `Transcript saving is off — inherited CLAUDE_CODE_CHILD_SESSION marker` | [Session saving warnings](#transcript-saving-is-off-child-session-marker) |324| `Transcript saving is off — inherited CLAUDE_CODE_CHILD_SESSION marker` | [Session saving warnings](#transcript-saving-is-off-child-session-marker) |

325| `Claude Code's fullscreen renderer didn't finish starting last time on this machine` / `Claude Code's fullscreen renderer has repeatedly failed to start on this machine` | [Configuration warnings](#fullscreen-failed-start-notice) |325| `Claude Code's fullscreen renderer didn't finish starting last time on this machine` / `Claude Code's fullscreen renderer has repeatedly failed to start on this machine` | [Fullscreen rendering](/docs/id/fullscreen#fullscreen-renderer-didnt-finish-starting) |

326| `Claude Code exited after an unrecoverable interface error (...)` | [Configuration warnings](#exited-after-an-unrecoverable-interface-error) |326| `Claude Code exited after an unrecoverable interface error (...)` | [Configuration warnings](#exited-after-an-unrecoverable-interface-error) |

327| `Agent descriptions are over the 15.0k-token limit` | [Configuration warnings](#agent-descriptions-are-over-the-15000-token-limit) |327| `Agent descriptions are over the 15.0k-token limit` | [Configuration warnings](#agent-descriptions-are-over-the-15000-token-limit) |

328| `Not loaded: rename <path>, then restart — its name uses "<name>", a name reserved for the skills synced from your claude.ai account` | [Configuration warnings](#a-skill-command-or-workflow-wasnt-loaded-because-its-name-is-reserved) |328| `Not loaded: rename <path>, then restart — its name uses "<name>", a name reserved for the skills synced from your claude.ai account` | [Configuration warnings](#a-skill-command-or-workflow-wasnt-loaded-because-its-name-is-reserved) |


331| `Remote managed settings failed to load (<cause>)` | [Configuration warnings](#remote-managed-settings-failed-to-load) |331| `Remote managed settings failed to load (<cause>)` | [Configuration warnings](#remote-managed-settings-failed-to-load) |

332| `Managed settings were not approved; exiting without applying them.` | [Configuration warnings](#managed-settings-were-not-approved) |332| `Managed settings were not approved; exiting without applying them.` | [Configuration warnings](#managed-settings-were-not-approved) |

333| `Claude Code can't start: your organization's managed settings block the default model` / `Claude Code can't start: your organization allows only the models listed in "availableModels"` | [Configuration warnings](#managed-settings-block-the-default-model) |333| `Claude Code can't start: your organization's managed settings block the default model` / `Claude Code can't start: your organization allows only the models listed in "availableModels"` | [Configuration warnings](#managed-settings-block-the-default-model) |

334| `Your organization's managed settings allow Claude Code to use: <providers>` | [Configuration warnings](#managed-settings-dont-allow-this-api-provider) |

335| `Your organization's managed settings allow Claude Code to use no API provider at all` | [Configuration warnings](#managed-settings-dont-allow-this-api-provider) |

334| `MCP server <name> is blocked by enterprise managed policy` | [Configuration warnings](#mcp-server-is-blocked-by-enterprise-managed-policy) |336| `MCP server <name> is blocked by enterprise managed policy` | [Configuration warnings](#mcp-server-is-blocked-by-enterprise-managed-policy) |

335| `Managed settings document could not be parsed as a JSON object; none of its settings are in effect. Fix or remove it.` | [Configuration warnings](#managed-settings-document-could-not-be-parsed) |337| `Managed settings document could not be parsed as a JSON object; none of its settings are in effect. Fix or remove it.` | [Configuration warnings](#managed-settings-document-could-not-be-parsed) |

336| `Managed settings drop-in directory could not be read` | [Configuration warnings](#managed-settings-document-could-not-be-parsed) |338| `Managed settings drop-in directory could not be read` | [Configuration warnings](#managed-settings-document-could-not-be-parsed) |

339| `Unable to read managed policy settings` | [Configuration warnings](#unable-to-read-managed-policy-settings) |

337| `otelHeadersHelper failed; telemetry is not being exported. See /status: ...` | [Configuration warnings](#otelheadershelper-failed) |340| `otelHeadersHelper failed; telemetry is not being exported. See /status: ...` | [Configuration warnings](#otelheadershelper-failed) |

338| `"crossSessionInbound" must be one of "accept", "hold", "refuse"` | [Configuration warnings](#crosssessioninbound-must-be-one-of-accept-hold-refuse) |341| `"crossSessionInbound" must be one of "accept", "hold", "refuse"` | [Configuration warnings](#crosssessioninbound-must-be-one-of-accept-hold-refuse) |

339| `headersHelper not run — this workspace has no persisted trust` | [Configuration warnings](#headershelper-not-run) |342| `headersHelper not run — this workspace has no persisted trust` | [Configuration warnings](#headershelper-not-run) |


3657 Tidak dapat membuka Claude Desktop3660 Tidak dapat membuka Claude Desktop

3658</h3>3661</h3>

3659 3662 

3660Anda menjalankan [`/desktop`](/docs/id/desktop#coming-from-the-cli), atau alias `/app`, dan command sistem yang Claude Code gunakan untuk membuka Claude Desktop gagal. Sesi tetap di terminal.3663Anda menjalankan [`/desktop`](/docs/id/desktop#coming-from-the-cli) atau alias `/app` dalam sesi, atau [`claude --desktop`](/docs/id/cli-reference#cli-flags) di shell Anda, dan command sistem yang Claude Code gunakan untuk membuka Claude Desktop gagal. Setelah `/desktop`, sesi tetap di terminal; `claude --desktop` mencetak pesan tanpa awalan `Error:` dan keluar dengan status 1.

3664 

3665Teks dalam tanda kurung menamai command yang gagal, dengan status keluar dan baris pertama output kesalahannya ketika menghasilkannya. Di macOS command itu adalah `open`, seperti dalam contoh ini; di Windows itu adalah `rundll32`:

3661 3666 

3662```text theme={null}3667```text theme={null}

3663Error: Couldn't open Claude Desktop (`open` exited 1: LSOpenURLsWithRole() failed for the URL claude://resume?session=<session-id> with error -10814). Open Claude Desktop and run /desktop again.3668Error: Couldn't open Claude Desktop (`open` exited 1: LSOpenURLsWithRole() failed for the URL claude://resume?session=<session-id> with error -10814). Open Claude Desktop and try again.

3664```3669```

3665 3670 

3666**Yang harus dilakukan:**3671**Yang harus dilakukan:**

3667 3672 

3668* Buka Claude Desktop sendiri, kemudian jalankan `/desktop` lagi3673* Buka Claude Desktop sendiri, kemudian jalankan `/desktop` atau `claude --desktop` lagi

3669* Untuk membaca output kesalahan lengkap command itu, aktifkan debug logging dengan `/debug`, jalankan `/desktop` lagi, dan periksa log debug3674* Untuk membaca output kesalahan lengkap command itu, aktifkan debug logging dengan `/debug` dan jalankan `/desktop` lagi, atau jalankan `claude --desktop --debug-file <path>`, kemudian periksa log debug

3670 3675 

3671Sebelum v2.1.275, pesan adalah `Failed to open Claude Desktop. Please try opening it manually.` dan tidak mengatakan apa yang gagal.3676Sebelum v2.1.285, pesan berakhir `Open Claude Desktop and run /desktop again.` Sebelum v2.1.275, itu adalah `Failed to open Claude Desktop. Please try opening it manually.` dan tidak mengatakan apa yang gagal.

3672 3677 

3673<h3 id="terminal-setup-left-your-zed-keymap-unchanged">3678<h3 id="terminal-setup-left-your-zed-keymap-unchanged">

3674 /terminal-setup meninggalkan keymap Zed Anda tidak berubah3679 /terminal-setup meninggalkan keymap Zed Anda tidak berubah


3773 Marketplace is registered from an untrusted source3778 Marketplace is registered from an untrusted source

3774</h3>3779</h3>

3775 3780 

3776Marketplace terdaftar dengan nama yang [dicadangkan untuk marketplace Anthropic resmi](/docs/id/plugins/marketplace-reference#marketplace-file), tetapi sumber terdaftarnya bukan repositori GitHub `anthropics`. Claude Code memeriksa ulang nama yang dicadangkan setiap kali memuat atau menyegarkan marketplace, sehingga marketplace dan plugin yang dipasang darinya berhenti memuat. Sebelum v2.1.205, nama hanya diperiksa ketika marketplace ditambahkan, jadi entri yang terdaftar sebelum namanya dicadangkan terus memuat.3781Marketplace terdaftar dengan nama yang [dicadangkan untuk marketplace Anthropic resmi](/docs/id/plugins/marketplace-reference#marketplace-file), tetapi sumber terdaftarnya bukan repositori GitHub `anthropics`. Claude Code memeriksa ulang nama yang dicadangkan setiap kali memuat atau menyegarkan marketplace, sehingga marketplace dan plugin yang dipasang darinya berhenti memuat. Sebelum v2.1.205, entri yang terdaftar sebelum namanya dicadangkan terus memuat.

3777 3782 

3778```text theme={null}3783```text theme={null}

3779Marketplace "claude-community" is registered from an untrusted source: The name 'claude-community' is reserved for official Anthropic marketplaces. Only repositories from 'github.com/anthropics/' can use this name. To fix it, remove the marketplace and re-add it from the official source.3784Marketplace "claude-community" is registered from an untrusted source: The name 'claude-community' is reserved for official Anthropic marketplaces. Only repositories from 'github.com/anthropics/' can use this name. To fix it, remove the marketplace and re-add it from the official source.


3921commands path escapes plugin directory: ./commands\deploy.md — its path contains a backslash, which is not resolved reliably on this platform3926commands path escapes plugin directory: ./commands\deploy.md — its path contains a backslash, which is not resolved reliably on this platform

3922```3927```

3923 3928 

3924Sebelum v2.1.251, Claude Code memuat jalur `commands` yang dideklarasikan dalam entri marketplace bahkan ketika menunjuk di luar direktori plugin. Claude Code sudah menolak jalur yang dideklarasikan dalam `plugin.json` dan jalur komponen lainnya dalam entri marketplace.3929Sebelum v2.1.251, Claude Code memuat jalur `commands` yang dideklarasikan dalam entri marketplace bahkan ketika menunjuk di luar direktori plugin.

3925 3930 

3926Sebelum v2.1.257, pemeriksaan hanya melihat ejaan jalur, bukan di mana symlink mengarah.3931Sebelum v2.1.257, pemeriksaan hanya melihat ejaan jalur, bukan di mana symlink mengarah.

3927 3932 


4001* `Failed to load marketplace configuration`: file bukan JSON yang valid, atau tidak dapat dibaca. File kosong gagal dengan cara ini juga.4006* `Failed to load marketplace configuration`: file bukan JSON yang valid, atau tidak dapat dibaca. File kosong gagal dengan cara ini juga.

4002* `Marketplace configuration file is corrupted`: file adalah JSON yang valid tetapi isinya tidak cocok dengan skema registri.4007* `Marketplace configuration file is corrupted`: file adalah JSON yang valid tetapi isinya tidak cocok dengan skema registri.

4003 4008 

4004File yang hilang bukan kegagalan: Claude Code memperlakukannya sebagai registri tanpa marketplace.

4005 

4006Dengan file kosong, `claude plugin install` melaporkan:4009Dengan file kosong, `claude plugin install` melaporkan:

4007 4010 

4008```text theme={null}4011```text theme={null}


4626terminal host process died — press Enter to restart4629terminal host process died — press Enter to restart

4627```4630```

4628 4631 

4629Jika Anda membuka baris sebelum pemeriksaan berjalan, footer menampilkan `This session's terminal host process died (the conversation is saved) — press Enter to restart it` dan baris berubah menjadi gagal.

4630 

4631Dari shell, `claude attach <id>` memulai ulang sesi yang sudah ditandai gagal untuk host yang mati, dan sebaliknya mencetak penyebab dan keluar:4632Dari shell, `claude attach <id>` memulai ulang sesi yang sudah ditandai gagal untuk host yang mati, dan sebaliknya mencetak penyebab dan keluar:

4632 4633 

4633```text theme={null}4634```text theme={null}


5023 5024 

5024Claude Code menulis sebagian besar pesan ini ke stderr, bukan ke dalam percakapan, dan menulis sebagian besar di saat startup. Sebuah entri mengatakan demikian ketika pesannya muncul di tempat lain, seperti dalam log debug atau sebagai pemberitahuan startup dalam tampilan percakapan, atau pada waktu lain, seperti [baris diagnostik model yang tidak dikenali](#unrecognized-model-id-on-a-request) pada saat permintaan.5025Claude Code menulis sebagian besar pesan ini ke stderr, bukan ke dalam percakapan, dan menulis sebagian besar di saat startup. Sebuah entri mengatakan demikian ketika pesannya muncul di tempat lain, seperti dalam log debug atau sebagai pemberitahuan startup dalam tampilan percakapan, atau pada waktu lain, seperti [baris diagnostik model yang tidak dikenali](#unrecognized-model-id-on-a-request) pada saat permintaan.

5025 5026 

5026<h3 id="fullscreen-failed-start-notice">

5027 Fullscreen renderer tidak selesai memulai

5028</h3>

5029 

5030Sesi [fullscreen](/docs/id/fullscreen) sebelumnya di mesin ini keluar sebelum selesai memulai, jadi Claude Code memulai sesi ini pada renderer klasik dan mencetak salah satu pemberitahuan ini:

5031 

5032```text theme={null}

5033Claude Code's fullscreen renderer didn't finish starting last time on this machine, so this launch is using the classic renderer. It will try fullscreen again next launch; /tui default keeps the classic renderer.

5034 

5035Claude Code's fullscreen renderer has repeatedly failed to start on this machine, so it has been turned off here. Run /tui fullscreen to try it again (this also resets after an update).

5036```

5037 

5038**Yang harus dilakukan:**

5039 

5040* Ikuti [Fullscreen rendering](/docs/id/fullscreen#fullscreen-renderer-didnt-finish-starting). Ini mengatakan pemberitahuan mana yang Anda dapatkan, apa yang Claude Code lakukan di sesi-sesi berikutnya, dan cara mencoba fullscreen lagi atau tetap menggunakan renderer klasik.

5041* Jika sesi yang mati mencetak pesan keluar, lihat [Claude Code keluar setelah kesalahan antarmuka yang tidak dapat dipulihkan](#exited-after-an-unrecoverable-interface-error) untuk mengetahui apa yang dinamainya.

5042 

5043Sebelum v2.1.236, Claude Code tidak mencetak pemberitahuan dan terus memulai sesi dalam fullscreen rendering setelah kegagalan startup.

5044 

5045<h3 id="exited-after-an-unrecoverable-interface-error">5027<h3 id="exited-after-an-unrecoverable-interface-error">

5046 Claude Code keluar setelah kesalahan antarmuka yang tidak dapat dipulihkan5028 Claude Code keluar setelah kesalahan antarmuka yang tidak dapat dipulihkan

5047</h3>5029</h3>


5193* Jika Anda mengelola pengaturan, tambahkan model yang dapat dijalankan pengguna Anda ke `availableModels`, atau persempit entri `deniedModels` yang memblokir setiap fallback. [Block specific models or versions](/docs/id/model-config#block-specific-models-or-versions) menjelaskan bagaimana opsi Default diturunkan5175* Jika Anda mengelola pengaturan, tambahkan model yang dapat dijalankan pengguna Anda ke `availableModels`, atau persempit entri `deniedModels` yang memblokir setiap fallback. [Block specific models or versions](/docs/id/model-config#block-specific-models-or-versions) menjelaskan bagaimana opsi Default diturunkan

5194* Jika Anda tidak mengelolanya, kirim pesan ke administrator Anda. File pengaturan Anda sendiri tidak dapat memperluas daftar `availableModels` atau `deniedModels` yang dikelola5176* Jika Anda tidak mengelolanya, kirim pesan ke administrator Anda. File pengaturan Anda sendiri tidak dapat memperluas daftar `availableModels` atau `deniedModels` yang dikelola

5195 5177 

5178<h3 id="managed-settings-dont-allow-this-api-provider">

5179 Managed settings tidak mengizinkan penyedia API ini

5180</h3>

5181 

5182[Managed settings](/docs/id/managed-settings) organisasi Anda menetapkan daftar [`allowedProviders`](/docs/id/settings-reference#allowedproviders), dan penyedia API sesi tidak ada di dalamnya atau sesi menggunakan endpoint yang tidak disematkan dengan cara yang diperlukan entri itu. Claude Code menolak pada startup, sebelum login, atau ketika sesi berikutnya menghubungi API. Pesan dimulai dengan penyedia yang diizinkan:

5183 

5184```text theme={null}

5185Your organization's managed settings allow Claude Code to use: Anthropic API, Amazon Bedrock.

5186```

5187 

5188Ketika daftar kosong, pesan berbunyi sebagai gantinya:

5189 

5190```text theme={null}

5191Your organization's managed settings allow Claude Code to use no API provider at all (allowedProviders is an empty list), so it cannot start on this machine.

5192```

5193 

5194Ketika setiap entri tidak dikenali, parenthetical berbunyi `(allowedProviders lists only unrecognized entries)` sebagai gantinya.

5195 

5196**Yang harus dilakukan:**

5197 

5198* Ikuti langkah `To continue:` pesan

5199* Jika Anda mengelola pengaturan, baris pesan yang dimulai `Admins:` menyebutkan entri untuk ditambahkan atau nilai untuk disematkan, dan entri [`allowedProviders`](/docs/id/settings-reference#allowedproviders) mengatakan blok `env` sumber mana yang dapat menyematkannya

5200 

5196<h3 id="mcp-server-is-blocked-by-enterprise-managed-policy">5201<h3 id="mcp-server-is-blocked-by-enterprise-managed-policy">

5197 Server MCP diblokir oleh kebijakan yang dikelola perusahaan5202 Server MCP diblokir oleh kebijakan yang dikelola perusahaan

5198</h3>5203</h3>


5246* Jika Anda mengelola mesin, perbaiki dokumen yang dinamai sehingga diuraikan sebagai objek JSON, atau hapus file, profil, atau nilai registry. `managed-settings.json` kosong dihitung sebagai `{}` dan tidak memblokir peluncuran.5251* Jika Anda mengelola mesin, perbaiki dokumen yang dinamai sehingga diuraikan sebagai objek JSON, atau hapus file, profil, atau nilai registry. `managed-settings.json` kosong dihitung sebagai `{}` dan tidak memblokir peluncuran.

5247* Jika tidak, minta administrator Anda untuk memperbaiki dokumen yang diterapkan. Tidak ada dalam file pengaturan Anda sendiri yang menyebabkan atau menghapus kesalahan ini.5252* Jika tidak, minta administrator Anda untuk memperbaiki dokumen yang diterapkan. Tidak ada dalam file pengaturan Anda sendiri yang menyebabkan atau menghapus kesalahan ini.

5248 5253 

5254<h3 id="unable-to-read-managed-policy-settings">

5255 Tidak dapat membaca pengaturan kebijakan yang dikelola

5256</h3>

5257 

5258Organisasi Anda menerapkan [managed settings](/docs/id/managed-settings), dan salah satu sumber yang diterapkan ada tetapi tidak dapat dibaca, karena alasan seperti kesalahan I/O daripada sistem operasi menolak pembacaan. Tanpa sumber admin lain yang menyediakan kebijakan, Claude Code keluar pada startup daripada berjalan tanpa kebijakan yang mungkin dibawa sumber:

5259 

5260```text theme={null}

5261Unable to read managed policy settings.

5262This machine may require organization login enforcement, but the policy file failed to load.

5263Contact your administrator.

5264 

5265Detail: <source>: <reason>

5266```

5267 

5268Dalam keadaan yang sama, alur sign-in, permintaan API dari sesi yang sudah berjalan, dan server [`claude gateway`](/docs/id/claude-apps-gateway) ditolak dengan varian baris pertama yang menyebutkan [`allowedProviders`](/docs/id/settings-reference#allowedproviders).

5269 

5270Pembacaan yang ditolak sistem operasi, seperti pada file root-only, tidak menghasilkan keluar ini: [sesi dimulai tanpa kebijakan sumber itu](/docs/id/managed-settings#find-entries-claude-code-dropped). Untuk sumber yang tidak dapat diuraikan, Claude Code keluar dengan [pesan berbeda yang menyebutkan sumber](#managed-settings-document-could-not-be-parsed).

5271 

5272**Yang harus dilakukan:**

5273 

5274* Jika Anda mengelola mesin, perbaiki masalah yang dinamai baris `Detail:` sehingga sumber yang diterapkan dapat dibaca, atau hapus sumber

5275* Jika tidak, kirim pesan ke administrator Anda. Tidak ada dalam file pengaturan Anda sendiri yang menyebabkan atau menghapus kesalahan ini

5276 

5277Sebelum v2.1.285, hanya sesi yang masuk dengan kredensial claude.ai atau Claude Console yang keluar dengan pesan ini, dan pembacaan yang ditolak sistem operasi juga menghasilkannya.

5278 

5249<h3 id="otelheadershelper-failed">5279<h3 id="otelheadershelper-failed">

5250 otelHeadersHelper gagal5280 otelHeadersHelper gagal

5251</h3>5281</h3>


5458 Respons tampak berkualitas lebih rendah dari biasanya5488 Respons tampak berkualitas lebih rendah dari biasanya

5459</h2>5489</h2>

5460 5490 

5461Jika jawaban Claude tampak kurang mampu dari yang Anda harapkan tetapi tidak ada kesalahan yang ditampilkan, penyebabnya biasanya adalah status percakapan daripada model itu sendiri. Claude Code tidak secara diam-diam mengubah versi model. Ini dapat beralih ke model fallback dalam tiga kasus spesifik:5491Jika jawaban Claude tampak kurang mampu dari yang Anda harapkan tetapi tidak ada kesalahan yang ditampilkan, penyebabnya biasanya adalah status percakapan daripada model itu sendiri. Claude Code tidak secara diam-diam mengubah versi model. Ini dapat beralih ke model fallback dalam kasus-kasus berikut:

5462 5492 

5463* [`--fallback-model`](/docs/id/cli-reference#cli-flags) yang dikonfigurasi mengambil alih setelah kesalahan ketersediaan, hanya untuk giliran itu, dengan pemberitahuan dalam transkrip5493* [`--fallback-model`](/docs/id/cli-reference#cli-flags) yang dikonfigurasi mengambil alih setelah kesalahan ketersediaan, hanya untuk giliran itu, dengan pemberitahuan dalam transkrip

5464* Pemeriksaan startup Amazon Bedrock atau Google Cloud's Agent Platform menemukan model default Anda tidak tersedia5494* Pemeriksaan startup Amazon Bedrock atau Google Cloud's Agent Platform menemukan model default Anda tidak tersedia, atau akun Anda [kehilangan akses ke sana di tengah sesi](/docs/id/amazon-bedrock#when-a-model-is-disabled-mid-session)

5465* [Fallback model otomatis](/docs/id/model-config#automatic-model-fallback) pada Fable 5.1, Fable 5, Opus 5.5, Sonnet 5.5, dan Opus 5 memindahkan sesi ke model fallback kategori yang ditandai, ketika kategori itu memiliki satu, dan menampilkan pemberitahuan dalam transkrip5495* [Fallback model otomatis](/docs/id/model-config#automatic-model-fallback) pada Fable 5.1, Fable 5, Opus 5.5, Sonnet 5.5, dan Opus 5 memindahkan sesi ke model fallback kategori yang ditandai, ketika kategori itu memiliki satu, dan menampilkan pemberitahuan dalam transkrip

5466 5496 

5467Pemeriksaan Model selection di bawah menangkap kasus kedua dan ketiga; yang pertama muncul sebagai pemberitahuan transkrip daripada perubahan `/model`. [Model configuration](/docs/id/model-config) menjelaskan kapan setiap fallback berlaku.5497Pemeriksaan Model selection di bawah menangkap kasus kedua dan ketiga; yang pertama muncul sebagai pemberitahuan transkrip daripada perubahan `/model`. [Model configuration](/docs/id/model-config) menjelaskan kapan setiap fallback berlaku.

Details

293 293 

294Alias model seperti `opus` tidak bertindak sebagai pin, begitu juga dengan ID model yang tidak dikenali Claude Code.294Alias model seperti `opus` tidak bertindak sebagai pin, begitu juga dengan ID model yang tidak dikenali Claude Code.

295 295 

296Ketika pemeriksaan ini menemukan model yang tidak dapat dipanggil proyek Anda, Claude Code mengingat penolakan di mesin ini hingga satu hari, dan peluncuran selama waktu itu melewati model yang diingat tanpa bertanya kepada Agent Platform lagi. Claude Code memeriksa penolakan yang diingat dari model default saat ini lagi saat peluncuran setelah sepuluh menit telah berlalu sejak pemeriksaan terakhir, jadi default yang diaktifkan kembali oleh administrator Anda kembali. Untuk mematikan memori, atur [`CLAUDE_CODE_SKIP_MODEL_ACCESS_MEMORY=1`](/docs/id/env-vars).

297 

298<h3 id="when-a-model-is-disabled-mid-session">

299 Ketika model dinonaktifkan di tengah sesi

300</h3>

301 

302Jika proyek Anda kehilangan akses ke model yang sesi Anda jalankan, misalnya karena administrator menonaktifkannya di [Model Garden](https://console.cloud.google.com/vertex-ai/model-garden), Claude Code beralih sesi ke model lain alih-alih gagal pada setiap permintaan, dan menampilkan `Switched to <fallback> because <model> is not available`. Ia mencoba model yang sama seperti fallback startup: versi sebelumnya dari tier yang sama terlebih dahulu dan, untuk sesi Opus tanpa versi Opus yang tersedia, model Sonnet default.

303 

304Pengalihan hanya berlaku untuk tier yang belum Anda pinkan, kondisi yang sama seperti fallback startup. Sesi pada versi spesifik yang Anda pilih mempertahankan modelnya dan, tanpa rantai model fallback, permintaan gagal sebagai gantinya. Dalam [mode auto](/docs/id/permission-modes#enable-auto-mode-on-bedrock-agent-platform-or-foundry), Claude Code hanya beralih ke model yang didukung mode auto di Agent Platform. Jika tidak ada model tersebut yang tersedia, permintaan gagal.

305 

306[Rantai model fallback](/docs/id/model-config#fallback-model-chains) yang Anda konfigurasi menggantikan pengalihan tier: pada penolakan ini Claude Code beralih ke fallback yang Anda konfigurasi sebagai gantinya. Untuk membuat permintaan yang ditolak gagal daripada beralih, atur [`CLAUDE_CODE_DISABLE_MODEL_ACCESS_FALLBACK=1`](/docs/id/env-vars). Rantai fallback yang Anda konfigurasi masih beralih pada penolakan ini; hapus rantai juga jika Anda ingin setiap permintaan yang ditolak gagal.

307 

296<h2 id="iam-configuration">308<h2 id="iam-configuration">

297 Konfigurasi IAM309 Konfigurasi IAM

298</h2>310</h2>

headless.md +2 −2

Details

296 Persetujuan otomatis alat296 Persetujuan otomatis alat

297</h3>297</h3>

298 298 

299Gunakan `--allowedTools` untuk membiarkan Claude menggunakan alat tertentu tanpa meminta. Contoh ini menjalankan suite pengujian dan memperbaiki kegagalan, memungkinkan Claude untuk menjalankan perintah Bash dan membaca/mengedit file tanpa meminta izin:299Gunakan `--allowedTools` untuk membiarkan Claude menggunakan alat tertentu tanpa meminta. Mencantumkan `Read` dan `Edit` memungkinkan Claude membaca dan mengedit file tanpa meminta izin. Mencantumkan `Bash` melakukan hal yang sama untuk perintah shell, kecuali dalam jalankan yang dimulai dalam [mode auto](/docs/id/permission-modes#how-auto-mode-evaluates-actions), di mana Claude Code menghapus entri `Bash` telanjang sebagai aturan allow yang luas dan mode auto mengevaluasi setiap perintah sebagai gantinya. Contoh ini menjalankan suite pengujian dan memperbaiki kegagalan dengan ketiga alat tersebut tercantum:

300 300 

301```bash theme={null}301```bash theme={null}

302claude -p "Run the test suite and fix any failures" \302claude -p "Run the test suite and fix any failures" \

303 --allowedTools "Bash,Read,Edit"303 --allowedTools "Bash,Read,Edit"

304```304```

305 305 

306Untuk menetapkan baseline untuk seluruh sesi alih-alih mencantumkan alat individual, berikan [mode izin](/docs/id/permission-modes). Untuk `-p`, [mode izin awal bawaan](/docs/id/permission-modes#which-mode-a-session-starts-in) adalah Manual di setiap paket, jadi berikan mode izin yang Anda inginkan:306Untuk menetapkan baseline untuk seluruh sesi alih-alih mencantumkan alat individual, berikan [mode izin](/docs/id/permission-modes). Jalankan di mana tidak ada yang menetapkan mode izin mengambil [mode izin awal bawaan](/docs/id/permission-modes#which-mode-a-session-starts-in), yang dapat berupa `auto`, jadi berikan yang Anda inginkan:

307 307 

308* **`auto`**: berikan `--permission-mode auto` untuk memiliki pengklasifikasi meninjau sebagian besar tindakan alih-alih Anda308* **`auto`**: berikan `--permission-mode auto` untuk memiliki pengklasifikasi meninjau sebagian besar tindakan alih-alih Anda

309* **`dontAsk`**: Claude Code menolak setiap panggilan yang akan meminta sebaliknya, yang berguna untuk CI runs yang terkunci. Tindakan yang tidak memerlukan persetujuan dalam mode Manual masih berjalan, seperti pembacaan file di direktori kerja Anda dan [set perintah read-only](/docs/id/permissions#read-only-commands), dan begitu juga tindakan yang entri `--allowedTools` Anda atau aturan `permissions.allow` cover. `AskUserQuestion`, alat konektor [organisasi Anda atur ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools), dan alat MCP yang ditandai [`requiresUserInteraction`](/docs/id/mcp#require-approval-for-a-specific-tool) ditolak bahkan ketika aturan allow cocok309* **`dontAsk`**: Claude Code menolak setiap panggilan yang akan meminta sebaliknya, yang berguna untuk CI runs yang terkunci. Tindakan yang tidak memerlukan persetujuan dalam mode Manual masih berjalan, seperti pembacaan file di direktori kerja Anda dan [set perintah read-only](/docs/id/permissions#read-only-commands), dan begitu juga tindakan yang entri `--allowedTools` Anda atau aturan `permissions.allow` cover. `AskUserQuestion`, alat konektor [organisasi Anda atur ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools), dan alat MCP yang ditandai [`requiresUserInteraction`](/docs/id/mcp#require-approval-for-a-specific-tool) ditolak bahkan ketika aturan allow cocok

hooks-guide.md +3 −1

Details

1014 1014 

1015Hook `PreToolUse` aktif sebelum pemeriksaan mode izin apa pun, dalam setiap [mode izin](/docs/id/permission-modes), termasuk `dontAsk`. Hook yang mengembalikan `permissionDecision: "deny"` memblokir alat bahkan dalam mode `bypassPermissions` atau dengan `--dangerously-skip-permissions`. Ini memungkinkan Anda menegakkan kebijakan yang pengguna tidak dapat lewati dengan mengubah mode izin mereka.1015Hook `PreToolUse` aktif sebelum pemeriksaan mode izin apa pun, dalam setiap [mode izin](/docs/id/permission-modes), termasuk `dontAsk`. Hook yang mengembalikan `permissionDecision: "deny"` memblokir alat bahkan dalam mode `bypassPermissions` atau dengan `--dangerously-skip-permissions`. Ini memungkinkan Anda menegakkan kebijakan yang pengguna tidak dapat lewati dengan mengubah mode izin mereka.

1016 1016 

1017Kebalikannya tidak benar: hook yang mengembalikan `"allow"` tidak melewati aturan deny dari pengaturan, dan tidak dapat menekan prompt untuk alat MCP yang ditandai [`requiresUserInteraction`](/docs/id/mcp#require-approval-for-a-specific-tool) atau untuk alat konektor [organisasi Anda atur ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools) dalam sesi di mana pengaturan itu mencapai Claude Code. Hooks dapat mengetatkan pembatasan tetapi tidak melonggarkan mereka melampaui apa yang aturan izin izinkan.1017Kebalikannya tidak benar: hook yang mengembalikan `"allow"` tidak melewati aturan deny dari pengaturan, dan tidak dapat menekan prompt untuk alat MCP yang ditandai [`requiresUserInteraction`](/docs/id/mcp#require-approval-for-a-specific-tool) atau untuk alat konektor [organisasi Anda atur ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools) dalam sesi di mana pengaturan itu mencapai Claude Code. Hooks dalam file pengaturan dan dalam `hooks/hooks.json` plugin dapat mengetatkan pembatasan tetapi tidak melonggarkan mereka melampaui apa yang aturan izin izinkan.

1018 

1019Sebuah [mod](/docs/id/plugins/mods/overview) yang Anda instal yang hooks `tool.check` dapat menyetujui panggilan yang hook `PreToolUse` Anda blokir, kecuali hook berada dalam pengaturan terkelola. [Perluas izin dengan hooks](/docs/id/permissions#extend-permissions-with-hooks) mencantumkan aturan mana yang berlaku atas mod.

1018 1020 

1019<h3 id="hook-not-firing">1021<h3 id="hook-not-firing">

1020 Hook tidak aktif1022 Hook tidak aktif

Details

346* Meminta Claude Code untuk menjalankan perintah di latar belakang346* Meminta Claude Code untuk menjalankan perintah di latar belakang

347* Tekan `Ctrl+B` untuk memindahkan invokasi alat Bash biasa ke latar belakang. Pengguna Tmux harus menekan `Ctrl+B` dua kali karena kunci awalan tmux.347* Tekan `Ctrl+B` untuk memindahkan invokasi alat Bash biasa ke latar belakang. Pengguna Tmux harus menekan `Ctrl+B` dua kali karena kunci awalan tmux.

348 348 

349Ketika perintah mencapai batas waktu sebelum selesai, Claude Code secara otomatis [memindahkannya ke latar belakang](/docs/id/tools-reference#background-commands) alih-alih menghentikannya, kecuali perintah dimulai dengan `sleep`. Untuk mengubah berapa lama perintah berjalan sebelum itu terjadi, atur [variabel lingkungan batas waktu Bash](/docs/id/tools-reference#timeout-and-output-limits).349Ketika perintah mencapai batas waktu sebelum selesai, Claude Code secara otomatis [memindahkannya ke latar belakang](/docs/id/tools-reference#foreground-commands-that-move-to-the-background) alih-alih menghentikannya, kecuali perintah dimulai dengan `sleep`. Jika Anda telah mematikan tugas latar belakang dengan [`CLAUDE_CODE_DISABLE_BACKGROUND_TASKS`](/docs/id/env-vars#variables) atau dengan memulai dalam [mode bare](/docs/id/headless#start-faster-with-bare-mode), perintah berhenti pada batas waktu. Untuk mengubah batas waktu, atur [variabel lingkungan batas waktu Bash](/docs/id/tools-reference#timeout-and-output-limits).

350 350 

351**Fitur utama:**351**Fitur utama:**

352 352 


358* Di macOS dan Linux, Claude Code menghentikan tugas latar belakang yang berjalan ketika sistem operasi melaporkan tekanan memori kritis, asalkan sesi telah menganggur selama minimal 30 menit dan tidak ada putaran atau subagen yang berjalan. Memerlukan Claude Code v2.1.193 atau lebih baru358* Di macOS dan Linux, Claude Code menghentikan tugas latar belakang yang berjalan ketika sistem operasi melaporkan tekanan memori kritis, asalkan sesi telah menganggur selama minimal 30 menit dan tidak ada putaran atau subagen yang berjalan. Memerlukan Claude Code v2.1.193 atau lebih baru

359 * [Log debug](/docs/id/debug-your-config) mengatakan mengapa tugas dihentikan, atau mengapa peristiwa tekanan meninggalkan mereka tetap berjalan359 * [Log debug](/docs/id/debug-your-config) mengatakan mengapa tugas dihentikan, atau mengapa peristiwa tekanan meninggalkan mereka tetap berjalan

360 * Atur [`CLAUDE_CODE_DISABLE_BG_SHELL_PRESSURE_REAP`](/docs/id/env-vars) ke `1` untuk mematikan penghentian tekanan memori360 * Atur [`CLAUDE_CODE_DISABLE_BG_SHELL_PRESSURE_REAP`](/docs/id/env-vars) ke `1` untuk mematikan penghentian tekanan memori

361* Perintah Bash dan PowerShell latar belakang memiliki batas waktu, dihitung dari saat perintah memasuki latar belakang: 30 menit, atau `timeout` yang Claude minta ketika memulai perintah di latar belakang, hingga maksimal 2 jam. Perintah yang pindah ke latar belakang saat berjalan, misalnya dengan `Ctrl+B`, mendapat 30 menit dari perpindahan. Ketika perintah mencapai batasnya, Claude Code menghentikannya dan memberi tahu Claude mengapa, dan Claude dapat memulainya lagi dengan `timeout` yang lebih lama jika pekerjaan masih membutuhkannya. Dua variabel lingkungan menaikkan batasnya, dalam milidetik, dan keduanya tidak dapat mempersingkatnya:361* Perintah Bash dan PowerShell latar belakang memiliki batas waktu, dihitung dari saat perintah memasuki latar belakang: 30 menit, atau `timeout` yang Claude minta ketika memulai perintah di latar belakang, hingga maksimal 2 jam. Perintah yang pindah ke latar belakang saat berjalan, misalnya dengan `Ctrl+B`, mendapat 30 menit dari perpindahan. Ketika perintah mencapai batasnya, Claude Code menghentikannya dan memberi tahu Claude mengapa, dan Claude dapat memulainya lagi dengan `timeout` yang lebih lama jika pekerjaan masih membutuhkannya. Untuk memperpanjang batasnya, lihat [Naikkan batas waktu untuk perintah latar belakang](/docs/id/tools-reference#raise-the-time-limit-for-background-commands) dalam referensi alat

362 * Atur [`BASH_DEFAULT_TIMEOUT_MS`](/docs/id/env-vars) di atas `1800000` untuk mengganti default 30 menit dengan nilai tersebut, untuk perintah yang dipindahkan juga362* Perintah latar belakang yang dimulai oleh [subagen](/docs/id/sub-agents#run-subagents-in-foreground-or-background) di latar depan berakhir ketika subagen tersebut selesai, gagal, atau dihentikan; lihat [Ketika perintah latar belakang berhenti](/docs/id/tools-reference#when-a-background-command-stops) dalam referensi alat

363 * Atur [`BASH_MAX_TIMEOUT_MS`](/docs/id/env-vars) di atas `7200000` untuk menaikkan maksimal 2 jam. Mengatur `BASH_DEFAULT_TIMEOUT_MS` di atas `7200000` menaikkannya dengan cara yang sama

364* Perintah latar belakang yang dimulai oleh [subagen](/docs/id/sub-agents#run-subagents-in-foreground-or-background) di latar depan berakhir ketika subagen tersebut selesai, gagal, atau dihentikan; lihat [Perintah latar belakang](/docs/id/tools-reference#background-commands) dalam referensi alat

365 363 

366Untuk menonaktifkan semua fungsi tugas latar belakang, atur variabel lingkungan `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` ke `1`. Lihat [Variabel lingkungan](/docs/id/env-vars) untuk detail.364Untuk menonaktifkan semua fungsi tugas latar belakang, atur variabel lingkungan [`CLAUDE_CODE_DISABLE_BACKGROUND_TASKS`](/docs/id/env-vars#variables) ke `1`. Memulai dalam [mode bare](/docs/id/headless#start-faster-with-bare-mode) juga mematikannya.

367 365 

368**Perintah yang sering dibuat latar belakang:**366**Perintah yang sering dibuat latar belakang:**

369 367 

keybindings.md +1 −3

Details

545* Di bawah tata letak non-Latin seperti Cyrillic, Claude Code mencocokkan pintasan Ctrl berdasarkan posisi kunci tata letak US ketika terminal menggunakan protokol keyboard Kitty dan melaporkan posisi tersebut. Di terminal seperti itu, dengan tata letak Rusia aktif, menekan Ctrl dan tombol fisik W memicu `ctrl+w`. Di terminal yang tidak melaporkan posisi, Claude Code mencocokkan apa pun yang dikirim terminal untuk penekanan kunci: kode kontrol ASCII memicu pintasan Latin, dan penekanan kunci yang tiba sebagai karakter Cyrillic tidak cocok dengan binding apa pun545* Di bawah tata letak non-Latin seperti Cyrillic, Claude Code mencocokkan pintasan Ctrl berdasarkan posisi kunci tata letak US ketika terminal menggunakan protokol keyboard Kitty dan melaporkan posisi tersebut. Di terminal seperti itu, dengan tata letak Rusia aktif, menekan Ctrl dan tombol fisik W memicu `ctrl+w`. Di terminal yang tidak melaporkan posisi, Claude Code mencocokkan apa pun yang dikirim terminal untuk penekanan kunci: kode kontrol ASCII memicu pintasan Latin, dan penekanan kunci yang tiba sebagai karakter Cyrillic tidak cocok dengan binding apa pun

546* Di bawah tata letak yang mengatur ulang huruf Latin, seperti AZERTY, Claude Code mencocokkan huruf yang diketik kunci, jadi menekan Ctrl dan kunci berlabel A memicu `ctrl+a`546* Di bawah tata letak yang mengatur ulang huruf Latin, seperti AZERTY, Claude Code mencocokkan huruf yang diketik kunci, jadi menekan Ctrl dan kunci berlabel A memicu `ctrl+a`

547 547 

548Sebelum v2.1.247, menekan pintasan Ctrl di bawah tata letak non-Latin tidak memicu binding-nya di terminal yang menggunakan protokol keyboard Kitty, seperti Ghostty, Kitty, WezTerm, dan iTerm2.

549 

550<h3 id="chords">548<h3 id="chords">

551 Chord549 Chord

552</h3>550</h3>


697* Modifier yang salah eja, seperti `ctl+k`. Claude Code menghapus bagian yang tidak dikenalinya dan menerapkan binding ke keystroke yang tersisa, `k` dalam contoh ini.695* Modifier yang salah eja, seperti `ctl+k`. Claude Code menghapus bagian yang tidak dikenalinya dan menerapkan binding ke keystroke yang tersisa, `k` dalam contoh ini.

698* Nama konteks tidak valid696* Nama konteks tidak valid

699* Nilai action tidak valid, seperti action yang bukan string atau `null`697* Nilai action tidak valid, seperti action yang bukan string atau `null`

700* Nama action yang tidak dikenal, seperti typo dari action yang terdaftar. Claude Code melewati binding dan mempertahankan binding default apa pun untuk kunci tersebut. Sebelum v2.1.246, binding dengan nama action yang tidak dikenal secara diam-diam menonaktifkan kunci tersebut698* Nama action yang tidak dikenal, seperti typo dari action yang terdaftar. Claude Code melewati binding dan mempertahankan binding default apa pun untuk kunci tersebut.

701* Konflik pintasan yang dicadangkan699* Konflik pintasan yang dicadangkan

702* Binding duplikat dalam konteks yang sama700* Binding duplikat dalam konteks yang sama

703 701 

llm-gateway.md +2 −0

Details

45 45 

46[Luncurkan gateway LLM untuk organisasi Anda](/docs/id/llm-gateway-rollout) menjelaskan setiap langkah dan menunjukkan file konfigurasi untuk didistribusikan di setiap langkah. Gateway adalah satu bagian dari pengaturan organisasi; untuk penegakan kebijakan, visibilitas penggunaan, dan keputusan penanganan data, lihat [Siapkan Claude Code untuk organisasi Anda](/docs/id/admin-setup).46[Luncurkan gateway LLM untuk organisasi Anda](/docs/id/llm-gateway-rollout) menjelaskan setiap langkah dan menunjukkan file konfigurasi untuk didistribusikan di setiap langkah. Gateway adalah satu bagian dari pengaturan organisasi; untuk penegakan kebijakan, visibilitas penggunaan, dan keputusan penanganan data, lihat [Siapkan Claude Code untuk organisasi Anda](/docs/id/admin-setup).

47 47 

48Untuk membuat gateway yang dicapai melalui `ANTHROPIC_BASE_URL` menjadi satu-satunya tujuan yang dapat digunakan mesin terkelola, atur [`allowedProviders`](/docs/id/settings-reference#allowedproviders) ke `["customEndpoint"]` dalam file pengaturan terkelola yang sama dan masukkan `ANTHROPIC_BASE_URL` gateway dalam blok `env` file tersebut. Claude Code kemudian menolak sesi yang ditunjukkan ke tempat lain, termasuk ke Anthropic secara langsung atau ke proxy pengembang sendiri, dan menerima `ANTHROPIC_BASE_URL` hanya dengan nilai yang Anda tetapkan di sana. Untuk gateway yang dicapai melalui variabel titik akhir khusus penyedia seperti `ANTHROPIC_BEDROCK_BASE_URL`, entri `allowedProviders` mengatakan variabel mana yang akan dikunci. Memerlukan Claude Code v2.1.285 atau lebih baru.

49 

48<h2 id="subscriptions-and-gateways">50<h2 id="subscriptions-and-gateways">

49 Langganan dan gateway51 Langganan dan gateway

50</h2>52</h2>

Details

310 310 

311Claude Code mengirim permintaan penemuan dengan kedua header kredensial di bawah dan menghilangkan header yang nilainya tidak diselesaikan. Mengirim kedua header memerlukan Claude Code v2.1.248 atau lebih baru. Versi sebelumnya mengirim hanya `Authorization` ketika `ANTHROPIC_AUTH_TOKEN` diatur dan hanya `x-api-key` sebaliknya.311Claude Code mengirim permintaan penemuan dengan kedua header kredensial di bawah dan menghilangkan header yang nilainya tidak diselesaikan. Mengirim kedua header memerlukan Claude Code v2.1.248 atau lebih baru. Versi sebelumnya mengirim hanya `Authorization` ketika `ANTHROPIC_AUTH_TOKEN` diatur dan hanya `x-api-key` sebaliknya.

312 312 

313* `Authorization`: `ANTHROPIC_AUTH_TOKEN` sebagai token bearer, jika tidak nilai [`apiKeyHelper`](/docs/id/llm-gateway-connect#rotate-credentials-with-apikeyhelper) sebagai token bearer. Dalam hal ini Claude Code menunggu helper mengembalikan sebelum mengirim permintaan.313* `Authorization`: `ANTHROPIC_AUTH_TOKEN` sebagai token bearer, jika tidak nilai [`apiKeyHelper`](/docs/id/llm-gateway-connect#rotate-credentials-with-apikeyhelper) sebagai token bearer.

314* `x-api-key`: kunci API yang diselesaikan Claude Code, seperti `ANTHROPIC_API_KEY`. Ketika nilai helper adalah satu-satunya kredensial, header ini juga membawanya, sehingga nilai tiba di kedua header.314* `x-api-key`: kunci API yang diselesaikan Claude Code, seperti `ANTHROPIC_API_KEY`. Ketika nilai helper adalah satu-satunya kredensial, header ini juga membawanya, sehingga nilai tiba di kedua header.

315 315 

316Claude Code juga mengirim header apa pun dari `ANTHROPIC_CUSTOM_HEADERS`. Ketika header kustom memiliki nilai non-kosong, Claude Code mengirimnya sebagai pengganti header built-in dengan nama yang sama, mencocokkan nama secara case-insensitive.316Claude Code juga mengirim header apa pun dari `ANTHROPIC_CUSTOM_HEADERS`. Ketika header kustom memiliki nilai non-kosong, Claude Code mengirimnya sebagai pengganti header built-in dengan nama yang sama, mencocokkan nama secara case-insensitive.

Details

199 199 

200Kunci [login gateway](#choose-a-delivery-mechanism) mengikuti aturan terpisah. Claude Code tidak pernah membacanya dari pengaturan yang dikelola server, jadi sementara pengaturan yang dikelola server adalah sumber yang dipilih, sumber admin dengan peringkat tertinggi di mesin yang membawa kunci kebijakan masih menyediakannya. Nilai dalam sumber admin yang diberi peringkat di bawah yang itu, atau dalam registri HKCU, diabaikan.200Kunci [login gateway](#choose-a-delivery-mechanism) mengikuti aturan terpisah. Claude Code tidak pernah membacanya dari pengaturan yang dikelola server, jadi sementara pengaturan yang dikelola server adalah sumber yang dipilih, sumber admin dengan peringkat tertinggi di mesin yang membawa kunci kebijakan masih menyediakannya. Nilai dalam sumber admin yang diberi peringkat di bawah yang itu, atau dalam registri HKCU, diabaikan.

201 201 

202[`allowedProviders`](/docs/id/settings-reference#allowedproviders) memiliki aturannya sendiri: catatan Scope entrinya mengatakan bagaimana daftar yang ditetapkan di mesin menggabungkan dengan yang dikelola server. Memerlukan Claude Code v2.1.285 atau lebih baru.

203 

202Ketika sumber admin menetapkan `allowManagedMcpServersOnly` atau daftar `allowedMcpServers` dan nilai itu bukan yang berlaku, `/status` dan `claude doctor` menamai sumber dan kunci itu.204Ketika sumber admin menetapkan `allowManagedMcpServersOnly` atau daftar `allowedMcpServers` dan nilai itu bukan yang berlaku, `/status` dan `claude doctor` menamai sumber dan kunci itu.

203 205 

204<h3 id="compose-every-managed-source">206<h3 id="compose-every-managed-source">


353* File pengaturan terkelola yang kosong dihitung sebagai `{}`.355* File pengaturan terkelola yang kosong dihitung sebagai `{}`.

354* Nilai yang salah bentuk dalam kunci registri HKCU yang dapat ditulis pengguna tidak pernah memblokir peluncuran. Claude Code melaporkannya sebagai pemberitahuan di `/status` dan `claude doctor` sebagai gantinya.356* Nilai yang salah bentuk dalam kunci registri HKCU yang dapat ditulis pengguna tidak pernah memblokir peluncuran. Claude Code melaporkannya sebagai pemberitahuan di `/status` dan `claude doctor` sebagai gantinya.

355 357 

356Jika file pengaturan terkelola, file drop-in, atau direktori `managed-settings.d/` tidak dapat dibaca dan tidak ada sumber admin yang menyediakan kebijakan, sesi yang masuk dengan kredensial claude.ai atau Claude Console keluar saat startup dengan pesan untuk menghubungi administrator.358Ketika file pengaturan terkelola, file drop-in, direktori `managed-settings.d/`, profil MDM, atau nilai registri HKLM ada tetapi tidak dapat dibaca, dan tidak ada sumber admin yang menyediakan kebijakan, apa yang terjadi tergantung pada alasan pembacaan gagal:

359 

360* Jika sistem operasi menolak pembacaan, misalnya pada file hanya root, setiap sesi dimulai tanpa kebijakan sumber tersebut. `/status` dan `claude doctor` mencatat kegagalan, dan jalankan dengan `-p` juga mencetaknya ke stderr.

361* Untuk kegagalan pembacaan lainnya, seperti kesalahan I/O, setiap sesi keluar saat startup dengan [pesan untuk menghubungi administrator](/docs/id/errors#unable-to-read-managed-policy-settings).

357 362 

358Untuk menemukan entri yang dijatuhkan, lihat di salah satu dari tiga tempat:363Untuk menemukan entri yang dijatuhkan, lihat di salah satu dari tiga tempat:

359 364 


387| Bidang | Perilaku ketika ada tetapi tidak valid |392| Bidang | Perilaku ketika ada tetapi tidak valid |

388| :- | :- |393| :- | :- |

389| `allowedMcpServers` | Diberlakukan sebagai daftar izin kosong sampai nilai diperbaiki, sehingga tidak ada server MCP yang ditambahkan pengguna yang diterima. Server yang organisasi Anda berikan melalui [`managedMcpServers`](/docs/id/settings-reference#managedmcpservers) masih dimuat, dan server `managed-mcp.json` dimuat per [Bagaimana server dievaluasi](/docs/id/managed-mcp#how-a-server-is-evaluated). Entri individual yang tidak valid dilepas dan subset yang valid diberlakukan. |394| `allowedMcpServers` | Diberlakukan sebagai daftar izin kosong sampai nilai diperbaiki, sehingga tidak ada server MCP yang ditambahkan pengguna yang diterima. Server yang organisasi Anda berikan melalui [`managedMcpServers`](/docs/id/settings-reference#managedmcpservers) masih dimuat, dan server `managed-mcp.json` dimuat per [Bagaimana server dievaluasi](/docs/id/managed-mcp#how-a-server-is-evaluated). Entri individual yang tidak valid dilepas dan subset yang valid diberlakukan. |

395| [`allowedProviders`](/docs/id/settings-reference#allowedproviders) | Diberlakukan sebagai daftar izin kosong sampai nilai diperbaiki, sehingga setiap penyedia API ditolak dan Claude Code tidak memulai pada mesin. Jika hanya entri individual yang bukan nama penyedia yang dikenal, Claude Code menjatuhkan dan melaporkan entri tersebut dan memberlakukan sisanya. |

390| `allowedHttpHookUrls` | Claude Code memberlakukan [daftar izin](/docs/id/settings-reference#allowedhttphookurls) terkelola kosong sampai Anda memperbaiki nilai, sehingga hook HTTP berjalan hanya jika file pengaturan lain mencantumkan URL-nya. Jika hanya entri individual yang tidak valid, Claude Code melepas entri tersebut dan memberlakukan sisanya. |396| `allowedHttpHookUrls` | Claude Code memberlakukan [daftar izin](/docs/id/settings-reference#allowedhttphookurls) terkelola kosong sampai Anda memperbaiki nilai, sehingga hook HTTP berjalan hanya jika file pengaturan lain mencantumkan URL-nya. Jika hanya entri individual yang tidak valid, Claude Code melepas entri tersebut dan memberlakukan sisanya. |

391| `httpHookAllowedEnvVars` | Claude Code memberlakukan [daftar izin](/docs/id/settings-reference#httphookallowedenvvars) terkelola kosong sampai Anda memperbaiki nilai, sehingga variabel header diinterpolasi hanya jika file pengaturan lain menamakannya. Jika hanya entri individual yang tidak valid, Claude Code melepas entri tersebut dan memberlakukan sisanya. |397| `httpHookAllowedEnvVars` | Claude Code memberlakukan [daftar izin](/docs/id/settings-reference#httphookallowedenvvars) terkelola kosong sampai Anda memperbaiki nilai, sehingga variabel header diinterpolasi hanya jika file pengaturan lain menamakannya. Jika hanya entri individual yang tidak valid, Claude Code melepas entri tersebut dan memberlakukan sisanya. |

392| `allowedChannelPlugins` | Claude Code memberlakukan daftar izin kosong sampai Anda memperbaiki nilai, sehingga tidak ada plugin saluran yang dilewatkan ke `--channels` yang diterima. Jika hanya entri individual yang tidak valid, Claude Code melepas entri tersebut dan memberlakukan sisanya. |398| `allowedChannelPlugins` | Claude Code memberlakukan daftar izin kosong sampai Anda memperbaiki nilai, sehingga tidak ada plugin saluran yang dilewatkan ke `--channels` yang diterima. Jika hanya entri individual yang tidak valid, Claude Code melepas entri tersebut dan memberlakukan sisanya. |


437 443 

438Sebagian besar adalah kunci: nilai yang dikunci, seperti aturan izin atau `sandbox.network.allowedDomains`, adalah kunci biasa yang dapat diatur tingkat apa pun, dan kunci memberi tahu Claude Code untuk menghormati hanya nilai terkelola.444Sebagian besar adalah kunci: nilai yang dikunci, seperti aturan izin atau `sandbox.network.allowedDomains`, adalah kunci biasa yang dapat diatur tingkat apa pun, dan kunci memberi tahu Claude Code untuk menghormati hanya nilai terkelola.

439 445 

440Tabel mencakup kontrol izin, plugin, dan pengiriman. Untuk kunci apa pun yang tidak tercantum di sini, kolom Scope dari [referensi pengaturan](/docs/id/settings-reference#all-settings) index mengatakan apakah itu terkelola saja; kunci terkelola saja yang tersisa di sana termasuk URL login gateway, versi, browser, mobile-simulator, host SSH, Desktop sesi lokal, jalur biner sandbox, harga model, pembatasan model, dan kontrol CLAUDE.md.446Tabel mencakup kontrol izin, plugin, dan pengiriman. Untuk kunci apa pun yang tidak tercantum di sini, kolom Scope dari indeks [referensi pengaturan](/docs/id/settings-reference#all-settings) mengatakan apakah itu terkelola saja.

441 447 

442| Pengaturan | Deskripsi |448| Pengaturan | Deskripsi |

443| :- | :- |449| :- | :- |


449| [`blockedMarketplaces`](/docs/id/settings-reference#blockedmarketplaces) | Daftar blokir sumber marketplace. Sumber yang diblokir diperiksa sebelum mengunduh, jadi mereka tidak pernah menyentuh filesystem. Lihat [pembatasan marketplace terkelola](/docs/id/plugins/org#restrict-what-users-can-install) |455| [`blockedMarketplaces`](/docs/id/settings-reference#blockedmarketplaces) | Daftar blokir sumber marketplace. Sumber yang diblokir diperiksa sebelum mengunduh, jadi mereka tidak pernah menyentuh filesystem. Lihat [pembatasan marketplace terkelola](/docs/id/plugins/org#restrict-what-users-can-install) |

450| [`channelsEnabled`](/docs/id/settings-reference#channelsenabled) | Izinkan [channels](/docs/id/channels) untuk organisasi. Lihat [kontrol enterprise](/docs/id/channels#enterprise-controls) untuk default di setiap paket |456| [`channelsEnabled`](/docs/id/settings-reference#channelsenabled) | Izinkan [channels](/docs/id/channels) untuk organisasi. Lihat [kontrol enterprise](/docs/id/channels#enterprise-controls) untuk default di setiap paket |

451| [`disableCommandPluginSources`](/docs/id/settings-reference#disablecommandpluginsources) | Ketika `true`, memblokir [sumber plugin `command`](/docs/id/plugins/marketplace-reference#command-plugin-source) sepenuhnya, jadi perintah yang dideklarasikan marketplace tidak pernah berjalan. Juga memblokir perintah [`headersHelper`](/docs/id/plugins/host-marketplace#authenticate-archive-downloads) marketplace, kecuali untuk marketplace yang pengaturan terkelola sendiri deklarasikan. Ketika tidak diatur, mengikuti `allowManagedHooksOnly`. Memerlukan Claude Code v2.1.229 atau lebih baru, dan blok `headersHelper` memerlukan v2.1.238 atau lebih baru |457| [`disableCommandPluginSources`](/docs/id/settings-reference#disablecommandpluginsources) | Ketika `true`, memblokir [sumber plugin `command`](/docs/id/plugins/marketplace-reference#command-plugin-source) sepenuhnya, jadi perintah yang dideklarasikan marketplace tidak pernah berjalan. Juga memblokir perintah [`headersHelper`](/docs/id/plugins/host-marketplace#authenticate-archive-downloads) marketplace, kecuali untuk marketplace yang pengaturan terkelola sendiri deklarasikan. Ketika tidak diatur, mengikuti `allowManagedHooksOnly`. Memerlukan Claude Code v2.1.229 atau lebih baru, dan blok `headersHelper` memerlukan v2.1.238 atau lebih baru |

452| [`disableSideloadFlags`](/docs/id/settings-reference#disablesideloadflags) | Tolak flag `--plugin-dir`, `--plugin-url`, `--agents`, dan `--mcp-config` saat startup. Dalam sesi cloud, Claude Code menghapus server MCP yang server kirimkan melalui `--mcp-config`, selain entri `type: "sdk"` dalam proses, dan memulai sesi. Memerlukan Claude Code v2.1.193 atau lebih baru |458| [`disableSideloadFlags`](/docs/id/settings-reference#disablesideloadflags) | Tolak flag `--plugin-dir`, `--plugin-url`, `--agents`, dan `--mcp-config` saat startup. Dalam sesi cloud, Claude Code malah memulai sesi dan menghapus server yang dikirimkan server `--mcp-config`, selain dari pengecualian yang [entri referensinya](/docs/id/settings-reference#disablesideloadflags) cantumkan. Memerlukan Claude Code v2.1.193 atau lebih baru |

453| [`forceRemoteSettingsRefresh`](/docs/id/settings-reference#forceremotesettingsrefresh) | Ketika `true`, memblokir startup CLI sampai pengaturan terkelola jarak jauh diambil segar dan keluar jika pengambilan gagal. Lihat [penegakan fail-closed](/docs/id/server-managed-settings#enforce-fail-closed-startup) |459| [`forceRemoteSettingsRefresh`](/docs/id/settings-reference#forceremotesettingsrefresh) | Ketika `true`, memblokir startup CLI sampai pengaturan terkelola jarak jauh diambil segar dan keluar jika pengambilan gagal. Lihat [penegakan fail-closed](/docs/id/server-managed-settings#enforce-fail-closed-startup) |

454| [`managedMcpServers`](/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](/docs/id/managed-mcp#provide-servers-through-managed-settings). Memerlukan Claude Code v2.1.259 atau lebih baru |460| [`managedMcpServers`](/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](/docs/id/managed-mcp#provide-servers-through-managed-settings). Memerlukan Claude Code v2.1.259 atau lebih baru |

455| [`managedSourcesBehavior`](/docs/id/settings-reference#managedsourcesbehavior) | Apakah Claude Code menerapkan hanya sumber terkelola prioritas tertinggi atau [menyusun setiap satu](#compose-every-managed-source) |461| [`managedSourcesBehavior`](/docs/id/settings-reference#managedsourcesbehavior) | Apakah Claude Code menerapkan hanya sumber terkelola prioritas tertinggi atau [menyusun setiap satu](#compose-every-managed-source) |

mcp.md +5 −5

Details

273 273 

274* ``⏸ Pending approval (run `claude` to approve)``: server yang dibatasi proyek dari `.mcp.json` yang belum Anda setujui. Claude Code menunjukkannya di `claude mcp list` dan `claude mcp get <name>`. Jalankan `claude` secara interaktif untuk meninjau dan menyetujuinya.274* ``⏸ Pending approval (run `claude` to approve)``: server yang dibatasi proyek dari `.mcp.json` yang belum Anda setujui. Claude Code menunjukkannya di `claude mcp list` dan `claude mcp get <name>`. Jalankan `claude` secara interaktif untuk meninjau dan menyetujuinya.

275* `✘ Rejected (see disabledMcpjsonServers in settings)`: server `.mcp.json` yang entri [`disabledMcpjsonServers`](/docs/id/settings-reference#disabledmcpjsonservers) tolak. Claude Code menunjukkannya hanya di `claude mcp get <name>`.275* `✘ Rejected (see disabledMcpjsonServers in settings)`: server `.mcp.json` yang entri [`disabledMcpjsonServers`](/docs/id/settings-reference#disabledmcpjsonservers) tolak. Claude Code menunjukkannya hanya di `claude mcp get <name>`.

276* `⊘ Disabled for this project (re-enable via /mcp)`: server yang daftar [`disabledMcpServers`](#disable-a-server-without-removing-it) proyek namakan. Claude Code menunjukkannya di `claude mcp list` dan `claude mcp get <name>`. Hidupkan server kembali dari panel `/mcp`. Sebelum v2.1.238, kedua perintah terhubung ke server yang dinonaktifkan untuk memeriksa kesehatannya dan melaporkan hasil koneksi.276* `⊘ Disabled for this project (re-enable via /mcp)`: server yang daftar [`disabledMcpServers`](#disable-a-server-without-removing-it) proyek namakan. Claude Code menunjukkannya di `claude mcp list` dan `claude mcp get <name>`. Hidupkan server kembali dari panel `/mcp`.

277 277 

278Server WebSocket tidak muncul dalam output `claude mcp list`. Gunakan `claude mcp get <name>` atau panel `/mcp` untuk memeriksanya.278Server WebSocket tidak muncul dalam output `claude mcp list`. Gunakan `claude mcp get <name>` atau panel `/mcp` untuk memeriksanya.

279 279 


321 321 

322* **Whitespace tersembunyi**: Claude Code memperingatkan ketika nilai konfigurasi MCP membawa whitespace terkemuka atau tertinggal yang tersembunyi, yang sering berasal dari menempel token dengan newline tertinggal. Claude Code memeriksa `command`, `url`, setiap entri `args`, dan nilai dan nama kunci di bawah `env` dan `headers`. Claude Code menunjukkan peringatan dalam output `claude mcp list` dan di `/mcp`, menamai bidang yang terpengaruh tanpa menggema nilainya, misalnya `Leading or trailing whitespace in: headers.Authorization`. Claude Code tidak memangkas whitespace dan menggunakan nilai persis seperti yang ditulis, jadi edit konfigurasi untuk menghapusnya.322* **Whitespace tersembunyi**: Claude Code memperingatkan ketika nilai konfigurasi MCP membawa whitespace terkemuka atau tertinggal yang tersembunyi, yang sering berasal dari menempel token dengan newline tertinggal. Claude Code memeriksa `command`, `url`, setiap entri `args`, dan nilai dan nama kunci di bawah `env` dan `headers`. Claude Code menunjukkan peringatan dalam output `claude mcp list` dan di `/mcp`, menamai bidang yang terpengaruh tanpa menggema nilainya, misalnya `Leading or trailing whitespace in: headers.Authorization`. Claude Code tidak memangkas whitespace dan menggunakan nilai persis seperti yang ditulis, jadi edit konfigurasi untuk menghapusnya.

323* **Nama yang sama di lebih dari satu cakupan**: jika Anda menentukan nama server yang sama di lebih dari satu [scope](#mcp-installation-scopes) dengan endpoint yang berbeda, Claude Code memperingatkan tentang konflik dalam output `claude mcp list` dan di `/mcp`. Claude Code menyimpan login OAuth per endpoint, jadi ketika Anda mengautentikasi definisi yang dimuat dalam satu proyek, Anda masih perlu masuk secara terpisah di proyek tempat definisi berbeda dimuat. Simpan endpoint yang Anda inginkan dan hapus yang lain dengan `claude mcp remove <name> --scope <scope>`. Dalam peringatan, Claude Code mengutip endpoint setiap cakupan seperti yang ditulis dalam konfigurasi Anda, dengan referensi [`${VAR}`](#environment-variable-expansion-in-mcp-json) yang tidak diperluas, jadi tidak pernah menunjukkan nilai yang diselesaikan seperti kunci API.323* **Nama yang sama di lebih dari satu cakupan**: jika Anda menentukan nama server yang sama di lebih dari satu [scope](#mcp-installation-scopes) dengan endpoint yang berbeda, Claude Code memperingatkan tentang konflik dalam output `claude mcp list` dan di `/mcp`. Claude Code menyimpan login OAuth per endpoint, jadi ketika Anda mengautentikasi definisi yang dimuat dalam satu proyek, Anda masih perlu masuk secara terpisah di proyek tempat definisi berbeda dimuat. Simpan endpoint yang Anda inginkan dan hapus yang lain dengan `claude mcp remove <name> --scope <scope>`. Dalam peringatan, Claude Code mengutip endpoint setiap cakupan seperti yang ditulis dalam konfigurasi Anda, dengan referensi [`${VAR}`](#environment-variable-expansion-in-mcp-json) yang tidak diperluas, jadi tidak pernah menunjukkan nilai yang diselesaikan seperti kunci API.

324* **Nama yang dicadangkan**: Claude Code mencadangkan nama server bawaan-nya, termasuk `workspace`, `claude-in-chrome`, `computer-use`, `Claude Preview`, dan `Claude Browser`. Jika konfigurasi Anda menentukan server dengan nama yang dicadangkan, Claude Code melewatinya saat waktu muat dan menunjukkan peringatan meminta Anda untuk mengganti namanya. `claude mcp add` menolak nama yang dicadangkan dengan kesalahan. `Claude Preview` dan `Claude Browser` keduanya menamai server bawaan yang digunakan [panel pratinjau aplikasi desktop Claude Code](/docs/id/desktop#preview-your-app). Sebelum v2.1.205, `Claude Browser` tidak dicadangkan, jadi server yang dikonfigurasi pengguna dapat mendaftar di bawah nama itu.324* **Nama yang dicadangkan**: Claude Code mencadangkan nama server bawaan-nya, termasuk `workspace`, `claude-in-chrome`, `computer-use`, `Claude Preview`, dan `Claude Browser`. Jika konfigurasi Anda menentukan server dengan nama yang dicadangkan, Claude Code melewatinya saat waktu muat dan menunjukkan peringatan meminta Anda untuk mengganti namanya. `claude mcp add` menolak nama yang dicadangkan dengan kesalahan. `Claude Preview` dan `Claude Browser` keduanya menamai server bawaan yang digunakan [panel pratinjau aplikasi desktop Claude Code](/docs/id/desktop#preview-your-app).

325* **Variabel lingkungan yang hilang**: jika referensi [`${VAR}`](#environment-variable-expansion-in-mcp-json) dalam konfigurasi server menamai variabel yang tidak diatur dan tidak memiliki `:-default`, Claude Code memperingatkan dalam output `claude mcp list` dan di `/mcp`, menamai variabel, dan masih memuat server dengan teks `${VAR}` yang tidak diperluas. Atur variabel atau tambahkan fallback `${VAR:-default}`. Di `url` dan `headers` server jarak jauh, beberapa variabel kredensial [dibaca sebagai kosong](#credential-variables-that-read-as-empty) sebagai gantinya, tanpa peringatan.325* **Variabel lingkungan yang hilang**: jika referensi [`${VAR}`](#environment-variable-expansion-in-mcp-json) dalam konfigurasi server menamai variabel yang tidak diatur dan tidak memiliki `:-default`, Claude Code memperingatkan dalam output `claude mcp list` dan di `/mcp`, menamai variabel, dan masih memuat server dengan teks `${VAR}` yang tidak diperluas. Atur variabel atau tambahkan fallback `${VAR:-default}`. Di `url` dan `headers` server jarak jauh, beberapa variabel kredensial [dibaca sebagai kosong](#credential-variables-that-read-as-empty) sebagai gantinya, tanpa peringatan.

326 326 

327<h4 id="tool-availability">327<h4 id="tool-availability">


417 Koneksi pertama yang gagal417 Koneksi pertama yang gagal

418</h4>418</h4>

419 419 

420Ketika koneksi pertama server HTTP atau SSE gagal dengan kesalahan sementara, seperti respons 5xx, koneksi ditolak, atau timeout, Claude Code mencoba ulang hingga tiga kali. Jika koneksi masih gagal, Claude Code menandai server sebagai gagal. Claude Code mencoba ulang dengan cara ini saat startup dan ketika server ditambahkan di tengah sesi. Itu termasuk server yang Claude Code tambahkan ke [sesi cloud](/docs/id/claude-code-on-the-web) dari konfigurasinya dan server yang Anda tambahkan dengan [`setMcpServers()`](/docs/id/agent-sdk/typescript) Agent SDK.420Ketika koneksi pertama server HTTP atau SSE gagal dengan kesalahan sementara, seperti respons 5xx, koneksi ditolak, atau timeout, Claude Code mencoba ulang hingga tiga kali. Jika koneksi masih gagal, Claude Code menandai server sebagai gagal.

421 421 

422Claude Code tidak mencoba ulang dalam kasus ini:422Claude Code tidak mencoba ulang dalam kasus ini:

423 423 


553 553 

554Server plugin muncul di `/mcp` dengan indikator menunjukkan mereka berasal dari plugin.554Server plugin muncul di `/mcp` dengan indikator menunjukkan mereka berasal dari plugin.

555 555 

556Untuk server stdio plugin, `claude mcp get` mencetak `Command: stdio`, baris `Args:` kosong, dan setiap variabel lingkungan sebagai `NAME=[REDACTED]`. Nilai disembunyikan karena dapat membawa kredensial.

557 

556**Nama alat MCP plugin**:558**Nama alat MCP plugin**:

557 559 

558Alat dari server MCP yang digabungkan plugin menyertakan nama plugin dan kunci server dalam nama yang dapat dipanggil mereka. Bentuk lengkapnya adalah `mcp__plugin_<plugin-name>_<server-name>__<tool-name>`, di mana karakter apa pun di luar `A-Z`, `a-z`, `0-9`, `_`, dan `-` diganti dengan `_`. Untuk server `database-tools` yang digabungkan dalam plugin bernama `my-plugin`, alat `query` dapat dipanggil sebagai:560Alat dari server MCP yang digabungkan plugin menyertakan nama plugin dan kunci server dalam nama yang dapat dipanggil mereka. Bentuk lengkapnya adalah `mcp__plugin_<plugin-name>_<server-name>__<tool-name>`, di mana karakter apa pun di luar `A-Z`, `a-z`, `0-9`, `_`, dan `-` diganti dengan `_`. Untuk server `database-tools` yang digabungkan dalam plugin bernama `my-plugin`, alat `query` dapat dipanggil sebagai:


1458* Nama properti tingkat atas harus panjangnya 1 hingga 64 karakter dan hanya menggunakan huruf ASCII dan angka, `_`, `.`, dan `-`1460* Nama properti tingkat atas harus panjangnya 1 hingga 64 karakter dan hanya menggunakan huruf ASCII dan angka, `_`, `.`, dan `-`

1459* Skema harus valid terhadap meta-skema JSON Schema draft 2020-12. Claude Code menerapkan pemeriksaan ini pada skema yang tidak mendeklarasikan `$schema` dan skema yang mendeklarasikan draft 2020-12. Skema yang mendeklarasikan dialek lain melewati pemeriksaan ini, meskipun pemeriksaan nama properti di atas tetap berlaku1461* Skema harus valid terhadap meta-skema JSON Schema draft 2020-12. Claude Code menerapkan pemeriksaan ini pada skema yang tidak mendeklarasikan `$schema` dan skema yang mendeklarasikan draft 2020-12. Skema yang mendeklarasikan dialek lain melewati pemeriksaan ini, meskipun pemeriksaan nama properti di atas tetap berlaku

1460 1462 

1461Claude Code menjalankan pemeriksaan setelah [penulisan ulang combinator tingkat root](#tool-input-schemas-with-a-root-level-combinator), pada skema yang sebenarnya akan dikirimkan.

1462 

1463Ketika Claude Code mengecualikan tool, tool tersebut mencatat alasannya dalam log server dan memberi tahu Claude tools mana yang dikecualikan dan mengapa, sehingga Anda dapat menanyakan kepada Claude mengapa tool hilang. Jika Anda memperbaiki skema di server, tool akan kembali lagi saat Claude Code memuat tools server berikutnya.1463Ketika Claude Code mengecualikan tool, tool tersebut mencatat alasannya dalam log server dan memberi tahu Claude tools mana yang dikecualikan dan mengapa, sehingga Anda dapat menanyakan kepada Claude mengapa tool hilang. Jika Anda memperbaiki skema di server, tool akan kembali lagi saat Claude Code memuat tools server berikutnya.

1464 1464 

1465Claude Code mengaktifkan pengecualian melalui bendera fitur yang diambilnya dari Anthropic. Pada [deployment tempat pengambilan bendera dimatikan](/docs/id/env-vars#features-that-need-feature-flag-fetching), atau pada mesin yang bendanya tidak pernah tiba, seperti mesin yang terisolasi udara, Claude Code tetap menjalankan pemeriksaan dan mencatat dalam log server tool mana yang akan ditolak, tetapi tetap mengirimkan skema tool ke API. API menolak permintaan yang menyertakan skema tersebut dengan [kesalahan 400 yang menamai tool berdasarkan posisinya](/docs/id/errors#tool-input-schema-is-invalid). Sebelum v2.1.216, tidak ada deployment yang menjalankan pemeriksaan ini.1465Claude Code mengaktifkan pengecualian melalui bendera fitur yang diambilnya dari Anthropic. Pada [deployment tempat pengambilan bendera dimatikan](/docs/id/env-vars#features-that-need-feature-flag-fetching), atau pada mesin yang bendanya tidak pernah tiba, seperti mesin yang terisolasi udara, Claude Code tetap menjalankan pemeriksaan dan mencatat dalam log server tool mana yang akan ditolak, tetapi tetap mengirimkan skema tool ke API. API menolak permintaan yang menyertakan skema tersebut dengan [kesalahan 400 yang menamai tool berdasarkan posisinya](/docs/id/errors#tool-input-schema-is-invalid). Sebelum v2.1.216, tidak ada deployment yang menjalankan pemeriksaan ini.

Details

360 360 

361 Apa yang terjadi selanjutnya memberi tahu Anda di mana masalahnya:361 Apa yang terjadi selanjutnya memberi tahu Anda di mana masalahnya:

362 362 

363 * Perintah dimulai dan menunggu input: server itu sendiri berfungsi. Jalankan `claude mcp get <name>` dan konfirmasi perintah yang ditampilkan di sana cocok dengan apa yang baru saja Anda jalankan. Jika perintah yang ditampilkan berbeda dari apa yang Anda ketik, Anda mungkin menghilangkan pemisah `--` sebelum perintah server. Hapus server dan tambahkan kembali dengan `--` di tempat. Jika Anda menulis `.mcp.json` dengan tangan, periksa sintaks dan lokasinya.363 * Perintah dimulai dan menunggu input: server itu sendiri berfungsi.

364 

365 Jalankan `claude mcp get <name>` dan konfirmasi perintah yang ditampilkan di sana cocok dengan apa yang baru saja Anda jalankan. Jika perintah yang ditampilkan berbeda dari apa yang Anda ketik, Anda mungkin menghilangkan pemisah `--` sebelum perintah server. Hapus server dan tambahkan kembali dengan `--` di tempat. Jika Anda menulis `.mcp.json` dengan tangan, periksa sintaks dan lokasinya. Sebelum v2.1.285, `claude mcp get` tidak mencetak baris `Command` untuk entri stdio yang disimpan tanpa bidang `type`, seperti entri `.mcp.json` yang ditulis dengan tangan. Pada versi tersebut, jalankan `claude mcp list` sebagai gantinya, yang mencetak baris perintah baik cara.

364 * Perintah kesalahan: pesan menyebutkan apa yang hilang, seperti Node.js atau browser.366 * Perintah kesalahan: pesan menyebutkan apa yang hilang, seperti Node.js atau browser.

365 </Accordion>367 </Accordion>

366 368 

model-config.md +62 −55

Details

39| **`sonnet`** | Menggunakan model Sonnet terbaru untuk tugas-tugas pengkodean sehari-hari |39| **`sonnet`** | Menggunakan model Sonnet terbaru untuk tugas-tugas pengkodean sehari-hari |

40| **`opus`** | Menggunakan model Opus terbaru untuk tugas-tugas penalaran kompleks |40| **`opus`** | Menggunakan model Opus terbaru untuk tugas-tugas penalaran kompleks |

41| **`haiku`** | Menggunakan model Haiku yang cepat dan efisien untuk tugas-tugas sederhana |41| **`haiku`** | Menggunakan model Haiku yang cepat dan efisien untuk tugas-tugas sederhana |

42| **`sonnet[1m]`** | Menggunakan Sonnet dengan [jendela konteks 1 juta token](https://platform.claude.com/docs/en/build-with-claude/context-windows#context-window-sizes-by-model) untuk sesi panjang. Tidak berpengaruh ketika `sonnet` sudah menyelesaikan ke Sonnet 5.5 atau Sonnet 5 dengan jendela 1M aslinya; di balik [gateway LLM](/docs/id/llm-gateway), memilih jendela 1M untuk model itu |42| **`sonnet[1m]`** | Menggunakan Sonnet dengan [jendela konteks 1 juta token](https://platform.claude.com/docs/en/build-with-claude/context-windows#context-window-sizes-by-model) untuk sesi panjang. Tidak berpengaruh ketika `sonnet` sudah menyelesaikan ke Sonnet 5.5 atau Sonnet 5 dengan jendela 1M aslinya |

43| **`opus[1m]`** | Menggunakan Opus dengan [jendela konteks 1 juta token](https://platform.claude.com/docs/en/build-with-claude/context-windows#context-window-sizes-by-model) untuk sesi panjang |43| **`opus[1m]`** | Menggunakan Opus dengan [jendela konteks 1 juta token](https://platform.claude.com/docs/en/build-with-claude/context-windows#context-window-sizes-by-model) untuk sesi panjang |

44| **`opusplan`** | Mode khusus yang menggunakan `opus` selama plan mode, kemudian beralih ke `sonnet` untuk eksekusi |44| **`opusplan`** | Mode khusus yang menggunakan `opus` selama plan mode, kemudian beralih ke `sonnet` untuk eksekusi |

45 45 


104 104 

105Dalam sesi interaktif, Claude Code menampilkan prompt persetujuan sebelum permintaan Fable menagih kredit penggunaan. Anggota paket Enterprise dengan penagihan organisasi tidak melihat prompt. Anda dapat melanjutkan di Fable menggunakan kredit penggunaan atau beralih ke model default Anda. Anda juga dapat menutup prompt:105Dalam sesi interaktif, Claude Code menampilkan prompt persetujuan sebelum permintaan Fable menagih kredit penggunaan. Anggota paket Enterprise dengan penagihan organisasi tidak melihat prompt. Anda dapat melanjutkan di Fable menggunakan kredit penggunaan atau beralih ke model default Anda. Anda juga dapat menutup prompt:

106 106 

107* Di pemilih `/model`, Anda menyimpan model saat ini.107* Ketika Anda memilih model Fable dengan `/model`, Anda menyimpan model saat ini.

108* Pertengahan sesi, Claude Code melanjutkan giliran di model default Anda.108* Pertengahan sesi, Claude Code melanjutkan giliran di model default Anda.

109 109 

110Setelah Anda memilih untuk melanjutkan di Fable menggunakan kredit penggunaan, Claude Code tidak menampilkan prompt lagi.110Setelah Anda memilih untuk melanjutkan di Fable menggunakan kredit penggunaan, Claude Code tidak menampilkan prompt lagi.


117* Dalam sesi latar belakang, jawab sebelum batas waktu.117* Dalam sesi latar belakang, jawab sebelum batas waktu.

118* Jika Anda mengirim pesan baru dari klien jarak jauh sebelum ada yang mengetik di terminal, Claude Code mengakhiri giliran dengan cara yang sama, dan pesan baru Anda memulai giliran berikutnya. Setelah seseorang mengetik di terminal, Claude Code terus menunggu jawaban dan mengantrekan pesan baru Anda di belakangnya.118* Jika Anda mengirim pesan baru dari klien jarak jauh sebelum ada yang mengetik di terminal, Claude Code mengakhiri giliran dengan cara yang sama, dan pesan baru Anda memulai giliran berikutnya. Setelah seseorang mengetik di terminal, Claude Code terus menunggu jawaban dan mengantrekan pesan baru Anda di belakangnya.

119 119 

120Dalam [mode non-interaktif](/docs/id/headless) dengan flag `-p` dan melalui Agent SDK, Claude Code tidak pernah menampilkan prompt persetujuan. Ketika permintaan Fable di sana akan ditagih ke kredit penggunaan, Claude Code menagihnya tanpa bertanya.120Dalam sesi aplikasi lain yang dihosting melalui [Agent SDK](/docs/id/agent-sdk/overview), apakah prompt muncul tergantung pada aplikasi itu. Jika muncul dan tidak ada yang menjawab sebelum batas waktu [`dialogExpiry`](/docs/id/settings-reference#dialogexpiry) yang sama, Claude Code mengakhiri giliran tanpa mengirim permintaan.

121 

122Dalam [mode non-interaktif](/docs/id/headless) dengan flag `-p`, dan dalam aplikasi Agent SDK yang tidak menampilkan prompt, Claude Code tidak pernah meminta persetujuan. Ketika permintaan Fable di sana akan ditagih ke kredit penggunaan, Claude Code menagihnya tanpa bertanya.

121 123 

122<h3 id="setting-your-model">124<h3 id="setting-your-model">

123 Mengatur model Anda125 Mengatur model Anda


239 Batasi pemilihan model241 Batasi pemilihan model

240</h2>242</h2>

241 243 

242Administrator dapat menggunakan `availableModels` dalam [pengaturan terkelola atau kebijakan](/docs/id/managed-settings) untuk membatasi model mana yang dapat dipilih pengguna. Entri cocok dengan keluarga model seperti `sonnet`, awalan versi seperti `claude-sonnet-4-5`, atau ID model lengkap seperti `claude-sonnet-4-5-20250929`. Awalan versi juga cocok dengan ID model yang lebih baru yang memperpanjangnya dengan segmen lain, jadi `claude-fable-5` memungkinkan Fable 5 dan Fable 5.1, sementara `claude-fable-5-1` memungkinkan Fable 5.1 saja. Untuk memblokir model yang diizinkan daftar, atau untuk membuat setiap entri ID model hanya memungkinkan versi yang dinamainya, lihat [Blokir model atau versi spesifik](#block-specific-models-or-versions).244Administrator dapat menggunakan `availableModels` dalam [pengaturan terkelola atau kebijakan](/docs/id/managed-settings) untuk membatasi model mana yang dapat dipilih pengguna. Entri cocok dengan keluarga model seperti `sonnet`, awalan versi seperti `claude-sonnet-4-5`, atau ID model lengkap seperti `claude-sonnet-4-5-20250929`. Awalan versi juga cocok dengan ID model yang lebih baru yang memperpanjangnya dengan segmen lain, jadi `claude-fable-5` memungkinkan Fable 5 dan Fable 5.1, sementara `claude-fable-5-1` memungkinkan Fable 5.1 saja. Untuk memblokir model yang diizinkan daftar, atau untuk membuat setiap entri ID model hanya memungkinkan versi yang dinamainya, lihat [Blokir model atau versi tertentu](#block-specific-models-or-versions).

243 245 

244Pada platform yang menyematkan Claude Code dan menetapkan [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](/docs/id/env-vars), konfigurasi model host mengambil alih pengaturan model terkelola, sementara daftar izin `availableModels` terkelola tetap berlaku kecuali host menyediakan miliknya sendiri; [Pengecualian terhadap prioritas pengaturan terkelola](/docs/id/settings#exceptions-to-managed-settings-precedence) mengatakan kunci dan variabel mana yang ditimpa host.246Pada platform yang menyematkan Claude Code dan menetapkan [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](/docs/id/env-vars), konfigurasi model host mengambil alih pengaturan model terkelola, sementara daftar putih `availableModels` terkelola tetap berlaku kecuali host menyediakan miliknya sendiri; [Pengecualian untuk prioritas pengaturan terkelola](/docs/id/settings#exceptions-to-managed-settings-precedence) mengatakan kunci dan variabel mana yang ditimpa host.

245 247 

246Ketika `availableModels` diatur, daftar izin berlaku di mana pun pengguna dapat menentukan model:248Ketika `availableModels` diatur, daftar putih berlaku di mana pun pengguna dapat menentukan model:

247 249 

248* **Model sesi utama**: `/model`, bendera `--model`, variabel lingkungan `ANTHROPIC_MODEL`, pengaturan `model`, [`ANTHROPIC_DEFAULT_MODEL`](#set-a-default-model-for-new-sessions), dan model yang dipulihkan saat [melanjutkan sesi](#setting-your-model)250* **Model sesi utama**: `/model`, bendera `--model`, variabel lingkungan `ANTHROPIC_MODEL`, pengaturan `model`, [`ANTHROPIC_DEFAULT_MODEL`](#set-a-default-model-for-new-sessions), dan model yang dipulihkan saat [melanjutkan sesi](#setting-your-model)

249* **Resolusi alias**: variabel lingkungan `ANTHROPIC_DEFAULT_OPUS_MODEL`, `ANTHROPIC_DEFAULT_SONNET_MODEL`, `ANTHROPIC_DEFAULT_HAIKU_MODEL`, dan `ANTHROPIC_DEFAULT_FABLE_MODEL` tidak dapat mengarahkan ulang alias yang diizinkan ke model di luar daftar251* **Resolusi alias**: variabel lingkungan `ANTHROPIC_DEFAULT_OPUS_MODEL`, `ANTHROPIC_DEFAULT_SONNET_MODEL`, `ANTHROPIC_DEFAULT_HAIKU_MODEL`, dan `ANTHROPIC_DEFAULT_FABLE_MODEL` tidak dapat mengarahkan ulang alias yang diizinkan ke model di luar daftar


253* **Model advisor**: pengaturan [`advisorModel`](/docs/id/advisor) yang dikonfigurasi dan bendera `--advisor`255* **Model advisor**: pengaturan [`advisorModel`](/docs/id/advisor) yang dikonfigurasi dan bendera `--advisor`

254* **Model agent latar belakang**: model yang dipilih dalam [pemilih dispatch](/docs/id/agent-view)256* **Model agent latar belakang**: model yang dipilih dalam [pemilih dispatch](/docs/id/agent-view)

255 257 

256Pada Anthropic API dan [Claude Platform on AWS](/docs/id/claude-platform-on-aws), alias keluarga model, `opus`, `sonnet`, `haiku`, atau `fable`, diselesaikan ke model biasanya ketika daftar izin memungkinkan model itu. Ketika daftar izin memblokir model itu, Claude Code mengganti versi terbaru keluarga yang diizinkan daftar izin dan menampilkan pemberitahuan yang menyebutkan model yang diminta dan diganti. Dengan `["sonnet", "claude-opus-4-6"]`, misalnya, baik `/model opus` maupun `--model opus` memilih Claude Opus 4.6, Opus terbaru yang diizinkan. Sebelum v2.1.205, alias yang versi rilis terbarunya berada di luar daftar ditolak atau diganti seperti pemilihan terblokir lainnya, bahkan ketika daftar memungkinkan versi yang lebih lama.258Pada API Anthropic dan [Claude Platform on AWS](/docs/id/claude-platform-on-aws), alias keluarga model, `opus`, `sonnet`, `haiku`, atau `fable`, diselesaikan ke model biasanya ketika daftar putih memungkinkan model itu. Ketika daftar putih memblokir model itu, Claude Code mengganti versi terbaru keluarga yang diizinkan daftar putih dan menampilkan pemberitahuan yang menyebutkan model yang diminta dan diganti. Dengan `["sonnet", "claude-opus-4-6"]`, misalnya, baik `/model opus` maupun `--model opus` memilih Claude Opus 4.6, Opus terbaru yang diizinkan. Sebelum v2.1.205, alias yang versi rilis terbarunya berada di luar daftar ditolak atau diganti seperti pemilihan terblokir lainnya, bahkan ketika daftar memungkinkan versi yang lebih lama.

257 259 

258Substitusi memerlukan versi yang diizinkan untuk mendarat: ketika daftar izin tidak memungkinkan versi apa pun dari keluarga alias, alias mengikuti perilaku penolakan dan penggantian di bawah seperti nilai terblokir lainnya.260Substitusi membutuhkan versi yang diizinkan untuk mendarat: ketika daftar putih tidak memungkinkan versi keluarga alias, alias mengikuti perilaku penolakan dan penggantian di bawah seperti nilai terblokir lainnya.

259 261 

260Claude Code menangani pemilihan terblokir lainnya sesuai dengan tempat model diatur:262Claude Code menangani pemilihan terblokir lainnya sesuai dengan tempat model diatur:

261 263 


266 268 

267 Dalam sesi interaktif, Claude Code memperingatkan Anda ketika mengganti model subagent, oleh fallback ini atau oleh substitusi versi-terbaru-yang-diizinkan di atas, menyebutkan model yang diminta dan diganti; itu tidak melaporkan fallback rekan kerja.269 Dalam sesi interaktif, Claude Code memperingatkan Anda ketika mengganti model subagent, oleh fallback ini atau oleh substitusi versi-terbaru-yang-diizinkan di atas, menyebutkan model yang diminta dan diganti; itu tidak melaporkan fallback rekan kerja.

268 270 

269 Di mana substitusi versi-terbaru-yang-diizinkan di atas beroperasi, alias keluarga terblokir mengikutinya. Sebelum v2.1.222, alias jatuh kembali seperti nilai terblokir lainnya pada setiap penyedia271 Di mana substitusi versi-terbaru-yang-diizinkan di atas beroperasi, alias keluarga terblokir mengikutinya sebagai gantinya. Sebelum v2.1.222, alias jatuh kembali seperti nilai terblokir lainnya di setiap penyedia

270* **Penggantian skill atau perintah**: Claude Code mengabaikan penggantian, termasuk alias keluarga terblokir, dan skill atau perintah berjalan pada model sesi. Skill atau perintah yang [berjalan dalam subagent](/docs/id/skills#run-skills-in-a-subagent) mengikuti perilaku subagent di atas272* **Penggantian skill atau perintah**: Claude Code mengabaikan penggantian, termasuk alias keluarga terblokir, dan skill atau perintah berjalan pada model sesi. Skill atau perintah yang [berjalan dalam subagent](/docs/id/skills#run-skills-in-a-subagent) mengikuti perilaku subagent di atas sebagai gantinya

271* **Pengaturan `advisorModel`**: advisor dinonaktifkan untuk sesi273* **Pengaturan `advisorModel`**: advisor dinonaktifkan untuk sesi

272* **Bendera `--advisor`**: Claude Code keluar dengan kesalahan saat peluncuran. Dalam [sesi latar belakang](/docs/id/agent-view), itu memulai sesi tanpa advisor daripada keluar274* **Bendera `--advisor`**: Claude Code keluar dengan kesalahan saat peluncuran. Dalam [sesi latar belakang](/docs/id/agent-view), itu memulai sesi tanpa advisor sebagai gantinya dari keluar

273 275 

274Claude Code menyembunyikan model yang dikecualikan dari pemilih `/model`. ID model lengkap dalam daftar yang tidak memiliki baris pemilih bawaan, seperti versi yang lebih lama yang disematkan daftar, muncul dalam pemilih `/model` sebagai baris berlabel miliknya sendiri, kecuali Claude Code mengganti opsi bawaan dengan lineup [`modelPicker`](/docs/id/settings-reference#modelpicker). Sebelum v2.1.199, ID tersebut hanya dapat dipilih dengan mengetik `/model <id>`.276Claude Code menyembunyikan model yang dikecualikan dari pemilih `/model`. ID model lengkap dalam daftar yang tidak memiliki baris pemilih bawaan, seperti versi yang lebih lama yang disematkan daftar, muncul dalam pemilih `/model` sebagai baris berlabel sendiri, kecuali Claude Code mengganti opsi bawaan dengan lineup [`modelPicker`](/docs/id/settings-reference#modelpicker). Sebelum v2.1.199, ID seperti itu hanya dapat dipilih dengan mengetik `/model <id>`.

275 277 

276Perubahan model yang dilakukan Claude Code atas nama Anda diperiksa dengan cara yang sama:278Perubahan model yang dilakukan Claude Code atas nama Anda diperiksa dengan cara yang sama:

277 279 

278* **[Rantai model fallback](#fallback-model-chains)**: entri di luar daftar izin dijatuhkan280* **[Rantai model fallback](#fallback-model-chains)**: entri di luar daftar putih dijatuhkan

279* **Upgrade mode plan**: pada Anthropic API dan Claude Platform on AWS, upgrade seperti [`opusplan`](#opusplan-model-setting) ke model yang dikecualikan menggunakan versi terbaru keluarga upgrade yang diizinkan. Pada penyedia dengan ID model khusus penyedia, dan ketika tidak ada versi yang diizinkan, upgrade dilewati dan perencanaan berlanjut pada model sesi.281* **Upgrade mode rencana**: pada API Anthropic dan Claude Platform on AWS, upgrade seperti [`opusplan`](#opusplan-model-setting) ke model yang dikecualikan menggunakan versi terbaru keluarga upgrade yang diizinkan. Pada penyedia dengan ID model khusus penyedia, dan ketika tidak ada versi yang diizinkan, upgrade dilewati dan perencanaan berlanjut pada model sesi.

280* **[Fallback model otomatis](#automatic-model-fallback)**: fallback yang targetnya dikecualikan tidak berjalan, jadi permintaan yang ditandai berakhir dengan penolakan282* **[Fallback model otomatis](#automatic-model-fallback)**: fallback yang targetnya dikecualikan tidak berjalan, jadi permintaan yang ditandai berakhir dengan penolakan sebagai gantinya

281* **[Pengklasifikasi mode otomatis](/docs/id/permission-modes#eliminate-prompts-with-auto-mode)**: default Claude Sonnet 5 pengklasifikasi hanya berlaku ketika daftar izin memungkinkan Sonnet 5. Ketika dikecualikan, pengklasifikasi berjalan pada model sesi, yang daftar izin sudah mengatur, atau pada model Opus ketika sesi berjalan pada [model Fable](#work-with-fable). Pada penyedia selain Anthropic API, fallback Opus itu berjalan pada model Opus default penyedia tanpa berkonsultasi dengan daftar izin. Memerlukan Claude Code v2.1.210 atau lebih baru283* **[Pengklasifikasi mode otomatis](/docs/id/permission-modes#eliminate-prompts-with-auto-mode)**: default Claude Sonnet 5 pengklasifikasi hanya berlaku ketika daftar putih memungkinkan Sonnet 5. Ketika dikecualikan, pengklasifikasi berjalan pada model sesi, yang sudah diatur daftar putih, atau pada model Opus ketika sesi berjalan pada [model Fable](#work-with-fable). Pada penyedia selain API Anthropic, fallback Opus itu berjalan pada model Opus default penyedia tanpa berkonsultasi dengan daftar putih. Memerlukan Claude Code v2.1.210 atau lebih baru

282* **[Mode cepat](/docs/id/fast-mode)**: mengaktifkan mode cepat ditolak ketika model yang akan dijalankan sesi setelahnya berada di luar daftar izin284* **[Mode cepat](/docs/id/fast-mode)**: mengaktifkan mode cepat ditolak ketika model yang akan dijalankan sesi setelahnya berada di luar daftar putih

283 285 

284```json theme={null}286```json theme={null}

285{287{


291 Cakupan permukaan293 Cakupan permukaan

292</h3>294</h3>

293 295 

294Setiap permukaan memberlakukan daftar izin yang diterimanya. Mekanisme pengiriman mana yang mencapai setiap permukaan berbeda:296Setiap permukaan memberlakukan daftar putih yang diterimanya. Mekanisme pengiriman mana yang mencapai setiap permukaan berbeda:

295 297 

296| Mekanisme pengiriman | CLI dan IDE | Sesi lokal desktop | Sesi web, mobile, dan cloud | Agent SDK dan non-interaktif | Cowork |298| Mekanisme pengiriman | CLI dan IDE | Sesi lokal desktop | Sesi web, mobile, dan cloud | Agent SDK dan non-interaktif | Cowork |

297| :- | :- | :- | :- | :- | :- |299| :- | :- | :- | :- | :- | :- |

298| [Pengaturan terkelola server](/docs/id/server-managed-settings) dari konsol admin | Diberlakukan | Diberlakukan | Diberlakukan, kecuali dalam sesi [Claude Tag](https://claude.com/docs/claude-tag/overview) | Diberlakukan | Tidak dikirimkan |300| [Pengaturan terkelola server](/docs/id/server-managed-settings) dari konsol admin | Diberlakukan | Diberlakukan | Diberlakukan, kecuali dalam sesi [Claude Tag](https://claude.com/docs/claude-tag/overview) | Diberlakukan | Sesi Cowork jarak jauh: server memeriksa model. Di mesin pengguna: tidak dikirimkan. |

299| [File MDM atau pengaturan terkelola](/docs/id/managed-settings#delivery-mechanisms) | Diberlakukan | Diberlakukan | Tidak dikirimkan di lingkungan yang dihosting Anthropic; di [lingkungan yang dihosting sendiri](/docs/id/self-hosted-environments), diberlakukan dari gambar runner per [bagaimana Claude Code menggabungkan sumber terkelola](/docs/id/managed-settings#how-claude-code-combines-managed-sources) | Diberlakukan | Diberlakukan di mana diterapkan |301| [File MDM atau pengaturan terkelola](/docs/id/managed-settings#delivery-mechanisms) | Diberlakukan | Diberlakukan | Tidak dikirimkan di lingkungan yang dihosting Anthropic; di [lingkungan yang dihosting sendiri](/docs/id/self-hosted-environments), diberlakukan dari gambar runner per [bagaimana Claude Code menggabungkan sumber terkelola](/docs/id/managed-settings#how-claude-code-combines-managed-sources) | Diberlakukan | Diberlakukan di mana diterapkan |

300 302 

301* [Sesi cloud](/docs/id/claude-code-on-the-web), termasuk yang Anda mulai dari aplikasi Desktop, berjalan pada VM yang dikelola Anthropic secara default: pengaturan yang diterapkan ke perangkat Anda tidak mencapainya, jadi kirimkan daftar izin melalui pengaturan terkelola server. Sesi yang organisasi Anda arahkan ke [lingkungan yang dihosting sendiri](/docs/id/self-hosted-environments) berjalan pada komputasi Anda sendiri dan juga membaca file pengaturan terkelola dalam gambar runner. [Bagaimana Claude Code menggabungkan sumber terkelola](/docs/id/managed-settings#how-claude-code-combines-managed-sources) mengatakan kapan file itu berlaku. Perubahan model pertengahan sesi dalam sesi cloud ditolak ketika model yang diminta dikecualikan oleh daftar izin. Ketika daftar `availableModels` dalam pengaturan terkelola server Anda tidak kosong, server menolak permintaan untuk memulai sesi cloud pada model yang daftar kecualikan.303* [Sesi cloud](/docs/id/claude-code-on-the-web), termasuk yang Anda mulai dari aplikasi Desktop, berjalan pada VM yang dikelola Anthropic secara default: pengaturan yang diterapkan ke perangkat Anda tidak mencapainya, jadi kirimkan daftar putih melalui pengaturan terkelola server. Sesi yang organisasi Anda arahkan ke [lingkungan yang dihosting sendiri](/docs/id/self-hosted-environments) berjalan pada komputasi Anda sendiri dan juga membaca file pengaturan terkelola dalam gambar runner. [Bagaimana Claude Code menggabungkan sumber terkelola](/docs/id/managed-settings#how-claude-code-combines-managed-sources) mengatakan kapan file itu berlaku. Perubahan model pertengahan sesi dalam sesi cloud ditolak ketika model yang diminta dikecualikan oleh daftar putih. Ketika daftar `availableModels` dalam pengaturan terkelola server Anda tidak kosong, server menolak permintaan untuk memulai sesi cloud di claude.ai/code atau dari aplikasi Desktop pada model yang daftar kecualikan.

302* [Claude Tag](https://claude.com/docs/claude-tag/overview) sesi berjalan di lingkungan cloud tetapi tidak menerima pengaturan terkelola server; dalam [lingkungan yang dihosting sendiri](/docs/id/self-hosted-environments), mereka masih membaca file pengaturan terkelola dalam gambar runner. Untuk menetapkan model untuk sesi tersebut, lihat [Pilih model untuk cakupan](https://claude.com/docs/claude-tag/admins/customize#choose-the-model-for-a-scope) dalam panduan admin Claude Tag.304* Sesi [Claude Tag](https://claude.com/docs/claude-tag/overview) berjalan di lingkungan cloud tetapi tidak menerima pengaturan terkelola server; dalam [lingkungan yang dihosting sendiri](/docs/id/self-hosted-environments), mereka masih membaca file pengaturan terkelola dalam gambar runner. Untuk menetapkan model untuk sesi tersebut, lihat [Pilih model untuk cakupan](https://claude.com/docs/claude-tag/admins/customize#choose-the-model-for-a-scope) dalam panduan admin Claude Tag.

303* Cowork, tab pekerjaan agentic dalam aplikasi Claude Desktop, menjalankan sesinya pada Claude Code tetapi, dengan desain, tidak menerima pengaturan terkelola server dari konsol admin claude.ai. File pengaturan terkelola berlaku untuk sesi Cowork ketika ada di mana sesi berjalan; sesi Cowork jarak jauh berjalan pada VM yang dikelola Anthropic, di mana file yang diterapkan perangkat tidak ada.305* Cowork, tab pekerjaan agentic dalam aplikasi Claude Desktop, menjalankan sesinya pada Claude Code tetapi, dengan desain, tidak menerima pengaturan terkelola server dari konsol admin claude.ai. Ketika daftar `availableModels` dalam pengaturan terkelola server Anda tidak kosong dan pengguna memilih model di luar itu, server menolak model itu untuk sesi Cowork jarak jauh. File pengaturan terkelola berlaku untuk sesi Cowork ketika ada di mana sesi berjalan; sesi Cowork jarak jauh berjalan pada VM yang dikelola Anthropic, di mana file yang diterapkan perangkat tidak ada.

304* Sesi pada [penyedia pihak ketiga](/docs/id/server-managed-settings#platform-availability) seperti Amazon Bedrock, Agent Platform Google Cloud, Microsoft Foundry, dan [Claude Platform on AWS](/docs/id/claude-platform-on-aws) tidak menerima pengaturan terkelola server, jadi kirimkan daftar izin melalui file MDM atau pengaturan terkelola di sana.306* Sesi pada [penyedia pihak ketiga](/docs/id/server-managed-settings#platform-availability) seperti Amazon Bedrock, Agent Platform Google Cloud, Microsoft Foundry, dan [Claude Platform on AWS](/docs/id/claude-platform-on-aws) tidak menerima pengaturan terkelola server, jadi kirimkan daftar putih melalui file MDM atau pengaturan terkelola di sana.

305* Pengiriman terkelola server juga memerlukan sesi untuk mengautentikasi dengan [login atau kunci yang memenuhi syarat](/docs/id/server-managed-settings#platform-availability). Armada yang menghasilkan kunci hanya melalui skrip [`apiKeyHelper`](/docs/id/settings-reference#apikeyhelper) harus mengirimkan daftar izin melalui file MDM atau pengaturan terkelola.307* Pengiriman terkelola server juga memerlukan sesi untuk mengautentikasi dengan [login atau kunci yang memenuhi syarat](/docs/id/server-managed-settings#platform-availability). Armada yang menghasilkan kunci hanya melalui skrip [`apiKeyHelper`](/docs/id/settings-reference#apikeyhelper) harus mengirimkan daftar putih melalui file MDM atau pengaturan terkelola.

306* Tab Desktop Code juga menghosting [sesi SSH](/docs/id/desktop#ssh-sessions), yang membaca file pengaturan terkelola dari host jarak jauh tempat mereka berjalan. Lihat [Pengaturan terkelola desktop](/docs/id/desktop#managed-settings).308* Tab Code Desktop juga menampilkan [sesi SSH](/docs/id/desktop#ssh-sessions), yang membaca file pengaturan terkelola dari host jarak jauh tempat mereka berjalan. Lihat [Pengaturan terkelola Desktop](/docs/id/desktop#managed-settings).

307* Pemilih model pada claude.ai dan dalam aplikasi Desktop menyembunyikan atau memudarkan model yang dikecualikan oleh daftar izin organisasi Anda. Status pemilih adalah kenyamanan bagi pengguna; itu tidak memberlakukan daftar izin.309* Pemilih model di claude.ai dan dalam aplikasi Desktop menyembunyikan atau memudarkan model yang dikecualikan oleh daftar putih organisasi Anda. Status pemilih adalah kenyamanan bagi pengguna; itu tidak memberlakukan daftar putih.

308 310 

309<h3 id="default-model-behavior">311<h3 id="default-model-behavior">

310 Perilaku model default312 Perilaku model default


315Dengan `availableModels: []`, pemilihan model bernama diblokir dan `enforceAvailableModels` tidak berpengaruh.317Dengan `availableModels: []`, pemilihan model bernama diblokir dan `enforceAvailableModels` tidak berpengaruh.

316 318 

317<h3 id="enforce-the-allowlist-for-the-default-model">319<h3 id="enforce-the-allowlist-for-the-default-model">

318 Berlakukan daftar izin untuk model Default320 Berlakukan daftar putih untuk model Default

319</h3>321</h3>

320 322 

321Atur `enforceAvailableModels: true` bersama dengan `availableModels` yang tidak kosong dalam pengaturan terkelola untuk memperluas daftar izin ke opsi Default. Ini memerlukan Claude Code v2.1.175 atau lebih baru.323Atur `enforceAvailableModels: true` bersama dengan `availableModels` yang tidak kosong dalam pengaturan terkelola untuk memperluas daftar putih ke opsi Default. Ini memerlukan Claude Code v2.1.175 atau lebih baru.

322 324 

323```json theme={null}325```json theme={null}

324{326{


327}329}

328```330```

329 331 

330Untuk anggota tanpa model [tercatat di akun mereka](#setting-your-model), opsi Default diselesaikan ke default tipe akun, atau ke [model default organisasi](#organization-default-model) ketika admin telah menetapkan satu. Ketika model itu tidak dalam daftar izin, opsi Default malah diselesaikan ke entri `availableModels` pertama yang menyebutkan model yang diizinkan dan tersedia, dan baris Default pemilih `/model` menunjukkan model itu. Ini berlaku di mana pun default dicapai: startup sesi, memilih Default dalam `/model`, kata kunci `"default"` dalam [rantai model fallback](#fallback-model-chains), dan fallback yang digunakan ketika pemilihan yang dikecualikan dijatuhkan. Model yang tercatat di akun anggota juga diperiksa terhadap `availableModels`; [Menetapkan model Anda](#setting-your-model) menjelaskan bagaimana opsi Default memperlakukannya.332Untuk anggota tanpa model [tercatat di akun mereka](#setting-your-model), opsi Default diselesaikan ke default tipe akun, atau ke [model default organisasi](#organization-default-model) ketika admin telah menetapkan satu. Ketika model itu tidak dalam daftar putih, opsi Default sebagai gantinya diselesaikan ke entri `availableModels` pertama yang menyebutkan model yang diizinkan dan tersedia, dan baris Default pemilih `/model` menunjukkan model itu. Ini berlaku di mana pun default dicapai: startup sesi, memilih Default dalam `/model`, kata kunci `"default"` dalam [rantai model fallback](#fallback-model-chains), dan fallback yang digunakan ketika pemilihan yang dikecualikan dijatuhkan. Model yang tercatat di akun anggota juga diperiksa terhadap `availableModels`; [Menetapkan model Anda](#setting-your-model) menjelaskan bagaimana opsi Default memperlakukannya.

331 333 

332`enforceAvailableModels` memetakan ulang opsi Default hanya ketika `availableModels` tidak kosong. Ketika `availableModels` tidak kosong tetapi tidak ada entri yang diselesaikan ke model yang diizinkan dan tersedia, penegakan dilewati dengan peringatan yang terlihat hanya di bawah `--debug`. Pertahankan setidaknya satu entri yang dijamin tersedia dalam daftar untuk menghindari ini.334`enforceAvailableModels` memetakan ulang opsi Default hanya ketika `availableModels` tidak kosong. Ketika `availableModels` tidak kosong tetapi tidak ada entri yang diselesaikan ke model yang diizinkan dan tersedia, penegakan dilewati dengan peringatan yang terlihat hanya di bawah `--debug`. Pertahankan setidaknya satu entri yang dijamin tersedia dalam daftar untuk menghindari ini.

333 335 

334Terapkan kedua kunci bersama dalam sumber terkelola peringkat tertinggi yang Anda kirimkan. Secara default Claude Code hanya membaca sumber itu, jadi pasangan yang ditempatkan dalam file pengaturan terkelola diabaikan ketika konsol admin mengirimkan pengaturan apa pun; di bawah penggabungan opt-in dalam [bagaimana Claude Code menggabungkan sumber terkelola](/docs/id/managed-settings#how-claude-code-combines-managed-sources), Claude Code masih mengabaikan peta `modelOverrides` dari sumber yang diperingkat di bawah yang menetapkan `availableModels`.336Terapkan kedua kunci bersama dalam sumber terkelola dengan peringkat tertinggi yang Anda kirimkan. Secara default Claude Code hanya membaca sumber itu, jadi pasangan yang ditempatkan dalam file pengaturan terkelola diabaikan ketika konsol admin mengirimkan pengaturan apa pun; di bawah penggabungan opt-in dalam [bagaimana Claude Code menggabungkan sumber terkelola](/docs/id/managed-settings#how-claude-code-combines-managed-sources), Claude Code masih mengabaikan peta `modelOverrides` dari sumber yang diperingkat di bawah yang menetapkan `availableModels`.

335 337 

336<h3 id="control-the-model-users-run-on">338<h3 id="control-the-model-users-run-on">

337 Kontrol model yang dijalankan pengguna339 Kontrol model yang dijalankan pengguna

338</h3>340</h3>

339 341 

340Pengaturan `model` adalah pemilihan awal, bukan penegakan. Itu menetapkan model mana yang aktif ketika sesi dimulai, tetapi pengguna masih dapat membuka `/model` dan memilih Default, yang diselesaikan ke [default runtime](#default-model-setting) sistem terlepas dari apa yang `model` diatur, kecuali [`enforceAvailableModels`](#enforce-the-allowlist-for-the-default-model) atau [kunci yang memblokir versi spesifik](#block-specific-models-or-versions) berlaku untuk itu.342Pengaturan `model` adalah pemilihan awal, bukan penegakan. Ini menetapkan model mana yang aktif ketika sesi dimulai, tetapi pengguna masih dapat membuka `/model` dan memilih Default, yang diselesaikan ke [default runtime](#default-model-setting) sistem terlepas dari apa yang `model` diatur, kecuali [`enforceAvailableModels`](#enforce-the-allowlist-for-the-default-model) atau [kunci yang memblokir versi tertentu](#block-specific-models-or-versions) berlaku untuk itu.

341 343 

342Untuk sepenuhnya mengontrol pengalaman model, gabungkan pengaturan ini:344Untuk sepenuhnya mengontrol pengalaman model, gabungkan pengaturan ini:

343 345 

344* **`availableModels`**: membatasi model bernama mana yang dapat dialihkan pengguna346* **`availableModels`**: membatasi model bernama mana yang dapat dialihkan pengguna

345* **`enforceAvailableModels`**: memperluas daftar izin `availableModels` ke opsi Default, jadi Default tidak dapat diselesaikan ke model di luar daftar347* **`enforceAvailableModels`**: memperluas daftar putih `availableModels` ke opsi Default, jadi Default tidak dapat diselesaikan ke model di luar daftar

346* **`deniedModels`** dan **`availableModelsMatch`**: [blokir versi spesifik](#block-specific-models-or-versions) yang entri `availableModels` akan memungkinkan348* **`deniedModels`** dan **`availableModelsMatch`**: [blokir versi tertentu](#block-specific-models-or-versions) yang entri `availableModels` akan memungkinkan sebaliknya

347* **`model`**: menetapkan pemilihan model awal ketika sesi dimulai349* **`model`**: menetapkan pemilihan model awal ketika sesi dimulai

348* **`ANTHROPIC_DEFAULT_SONNET_MODEL`** / **`ANTHROPIC_DEFAULT_OPUS_MODEL`** / **`ANTHROPIC_DEFAULT_HAIKU_MODEL`** / **`ANTHROPIC_DEFAULT_FABLE_MODEL`**: mengontrol apa yang diselesaikan alias `sonnet`, `opus`, `haiku`, dan `fable`, dan versi mana yang digunakan [default tipe akun](#default-model-setting)350* **`ANTHROPIC_DEFAULT_SONNET_MODEL`** / **`ANTHROPIC_DEFAULT_OPUS_MODEL`** / **`ANTHROPIC_DEFAULT_HAIKU_MODEL`** / **`ANTHROPIC_DEFAULT_FABLE_MODEL`**: mengontrol apa yang diselesaikan alias `sonnet`, `opus`, `haiku`, dan `fable`, dan versi mana yang digunakan [default tipe akun](#default-model-setting)

349 351 

350Contoh ini memulai pengguna pada Sonnet 4.5, membatasi pemilih ke Sonnet dan Haiku, dan memastikan Default diselesaikan ke model dalam daftar izin daripada default tier:352Contoh ini memulai pengguna pada Sonnet 4.5, membatasi pemilih ke Sonnet dan Haiku, dan memastikan Default diselesaikan ke model dalam daftar putih daripada default tier:

351 353 

352```json theme={null}354```json theme={null}

353{355{


360}362}

361```363```

362 364 

363Tanpa `enforceAvailableModels` atau blok `env`, pengguna yang memilih Default dalam pemilih mendapatkan [default runtime](#default-model-setting) daripada versi yang disematkan dalam `model`. Dua pengaturan mencakup cakupan berbeda: `enforceAvailableModels` membuat Default mematuhi daftar izin, sementara blok `env` menyematkan versi mana yang diselesaikan alias yang diizinkan seperti `sonnet`. Gunakan `enforceAvailableModels` saja ketika membatasi keluarga model cukup; tambahkan blok `env` ketika Anda juga perlu menyematkan versi spesifik.365Tanpa `enforceAvailableModels` atau blok `env`, pengguna yang memilih Default dalam pemilih mendapatkan [default runtime](#default-model-setting) daripada versi yang disematkan dalam `model`. Dua pengaturan mencakup cakupan berbeda: `enforceAvailableModels` membuat Default mematuhi daftar putih, sementara blok `env` menyematkan versi mana yang diselesaikan alias yang diizinkan seperti `sonnet`. Gunakan `enforceAvailableModels` saja ketika membatasi keluarga model cukup; tambahkan blok `env` ketika Anda juga perlu menyematkan versi tertentu.

364 366 

365<h3 id="merge-behavior">367<h3 id="merge-behavior">

366 Perilaku penggabungan368 Perilaku penggabungan

367</h3>369</h3>

368 370 

369Ketika pengaturan terkelola yang diterapkan Claude Code mendefinisikan `availableModels`, daftar itu saja berlaku, terlepas dari [platform host yang menyediakan miliknya sendiri](/docs/id/settings#exceptions-to-managed-settings-precedence): entri dalam pengaturan pengguna, proyek, atau lokal tidak dapat memperpanjangnya, dan Claude Code tidak pernah menggabungkan `availableModels` di seluruh sumber terkelola; [bagaimana Claude Code menggabungkan sumber terkelola](/docs/id/managed-settings#how-claude-code-combines-managed-sources) mengatakan daftar sumber mana yang berlaku. Jika tidak, daftar dari pengaturan pengguna, proyek, dan lokal adalah [digabungkan dan dideduplikasi](/docs/id/settings#settings-precedence) seperti pengaturan array lainnya. Sebelum Claude Code v2.1.175, entri dari cakupan prioritas lebih rendah digabungkan ke dalam daftar terkelola daripada diganti olehnya.371Ketika pengaturan terkelola yang diterapkan Claude Code mendefinisikan `availableModels`, daftar itu saja berlaku, terlepas dari [platform host yang menyediakan miliknya sendiri](/docs/id/settings#exceptions-to-managed-settings-precedence): entri dalam pengaturan pengguna, proyek, atau lokal tidak dapat memperpanjangnya, dan Claude Code tidak pernah menggabungkan `availableModels` di seluruh sumber terkelola baik; [bagaimana Claude Code menggabungkan sumber terkelola](/docs/id/managed-settings#how-claude-code-combines-managed-sources) mengatakan daftar sumber mana yang berlaku. Jika tidak, daftar dari pengaturan pengguna, proyek, dan lokal adalah [digabungkan dan dideduplikasi](/docs/id/settings#settings-precedence) seperti pengaturan array lainnya. Sebelum Claude Code v2.1.175, entri dari cakupan prioritas lebih rendah digabungkan ke dalam daftar terkelola sebagai gantinya dari diganti olehnya.

370 372 

371Dalam daftar efektif, entri yang menyebutkan model spesifik dalam keluarga, baik awalan versi maupun ID model lengkap, menonaktifkan entri wildcard keluarga itu: `["sonnet", "claude-sonnet-4-5"]` memungkinkan hanya versi Sonnet 4.5, bukan setiap model Sonnet.373Dalam daftar efektif, entri yang menyebutkan model tertentu dalam keluarga, baik awalan versi atau ID model lengkap, menonaktifkan entri wildcard keluarga itu: `["sonnet", "claude-sonnet-4-5"]` memungkinkan hanya versi Sonnet 4.5, bukan setiap model Sonnet.

372 374 

373<h3 id="mantle-model-ids">375<h3 id="mantle-model-ids">

374 ID model Mantle376 ID model Mantle

375</h3>377</h3>

376 378 

377Ketika [titik akhir Amazon Bedrock Mantle](/docs/id/amazon-bedrock#use-the-mantle-endpoint) diaktifkan, entri dalam `availableModels` yang dimulai dengan `anthropic.` ditambahkan ke pemilih `/model` sebagai opsi khusus dan dirutekan ke titik akhir Mantle. Ini adalah pengecualian terhadap pencocokan alias yang dijelaskan dalam [Sematkan model untuk penerapan pihak ketiga](#pin-models-for-third-party-deployments). Pengaturan masih membatasi pemilih ke entri yang terdaftar, dan ID Mantle menyematkan nama keluarga, jadi itu dihitung sebagai entri spesifik dan menonaktifkan wildcard keluarga itu: bersama dengan ID Mantle apa pun, daftarkan awalan versi atau ID lengkap yang ingin Anda pertahankan dapat dipilih. Lihat [Perilaku penggabungan](#merge-behavior).379Ketika [titik akhir Amazon Bedrock Mantle](/docs/id/amazon-bedrock#use-the-mantle-endpoint) diaktifkan, entri dalam `availableModels` yang dimulai dengan `anthropic.` ditambahkan ke pemilih `/model` sebagai opsi khusus dan dialihkan ke titik akhir Mantle. Ini adalah pengecualian untuk pencocokan alias yang dijelaskan dalam [Sematkan model untuk penerapan pihak ketiga](#pin-models-for-third-party-deployments). Pengaturan masih membatasi pemilih ke entri yang terdaftar, dan ID Mantle menyematkan nama keluarga, jadi itu dihitung sebagai entri tertentu dan menonaktifkan wildcard keluarga itu: bersama dengan ID Mantle apa pun, daftarkan awalan versi atau ID lengkap yang ingin Anda pertahankan dapat dipilih. Lihat [Perilaku penggabungan](#merge-behavior).

378 380 

379<h3 id="block-specific-models-or-versions">381<h3 id="block-specific-models-or-versions">

380 Blokir model atau versi spesifik382 Blokir model atau versi tertentu

381</h3>383</h3>

382 384 

383Entri `availableModels` seperti `claude-opus-5` juga memungkinkan rilis yang lebih baru yang memperpanjangnya, seperti Opus 5.5, segera setelah Claude Code mendukungnya. Dua pengaturan terkelola memungkinkan Anda menahan rilis, dan keduanya memerlukan Claude Code v2.1.283 atau lebih baru:385Entri `availableModels` seperti `claude-opus-5` juga memungkinkan rilis yang lebih baru yang memperpanjangnya, seperti Opus 5.5, segera setelah Claude Code mendukungnya. Dua pengaturan terkelola memungkinkan Anda menahan rilis, dan keduanya memerlukan Claude Code v2.1.283 atau lebih baru:

384 386 

385* [`deniedModels`](/docs/id/settings-reference#deniedmodels): daftarkan model yang akan diblokir. Model yang terdaftar diblokir bahkan ketika `availableModels` memungkinkannya, dan kunci juga bekerja tanpa daftar izin sama sekali. Rilis yang tidak ada entri blok tetap diizinkan387* [`deniedModels`](/docs/id/settings-reference#deniedmodels): daftarkan model yang akan diblokir. Model yang terdaftar diblokir bahkan ketika `availableModels` memungkinkannya, dan kunci juga bekerja tanpa daftar putih sama sekali. Rilis yang tidak ada entri blok tetap diizinkan

386* [`availableModelsMatch`](/docs/id/settings-reference#availablemodelsmatch): aturnya ke `"exact"` sehingga setiap ID model dalam `availableModels` hanya memungkinkan versi yang dinamainya. Versi yang lebih baru dari ID model yang terdaftar kemudian tetap diblokir sampai Anda menambahkannya ke daftar388* [`availableModelsMatch`](/docs/id/settings-reference#availablemodelsmatch): aturnya ke `"exact"` sehingga setiap ID model dalam `availableModels` hanya memungkinkan versi yang dinamainya. Versi yang lebih baru dari ID model yang terdaftar kemudian tetap diblokir sampai Anda menambahkannya ke daftar

387 389 

388Versi sebelumnya mengabaikan kedua kunci, jadi juga atur [`requiredMinimumVersion`](/docs/id/settings-reference#requiredminimumversion) untuk menjaga versi itu agar tidak dimulai.390Versi sebelumnya mengabaikan kedua kunci, jadi juga atur [`requiredMinimumVersion`](/docs/id/settings-reference#requiredminimumversion) untuk menjaga versi tersebut agar tidak dimulai.

389 391 

390Contoh ini memungkinkan model Opus dan Sonnet dan memblokir Opus 5.5 dalam setiap ejaan, termasuk ID yang tertanggal dan khusus penyedia:392Contoh ini memungkinkan model Opus dan Sonnet dan memblokir Opus 5.5 dalam setiap ejaan, termasuk ID yang tertanggal dan khusus penyedia:

391 393 


396}398}

397```399```

398 400 

399Model yang diblokir, baik `deniedModels` menyebutkannya atau daftar `"exact"` menghilangkannya, diperlakukan sebagai pemilihan terblokir di mana pun [daftar izin berlaku](#restrict-model-selection). Itu disembunyikan dari pemilih `/model`, dan `/model <name>` menolaknya. Jika Anda menyebutkan ID model yang diblokir dengan `--model`, `ANTHROPIC_MODEL`, atau pengaturan `model`, Claude Code menjatuhkannya saat startup dan menyelesaikan opsi Default. Jika [hook](/docs/id/hooks) atau permintaan latar belakang menyebutkan model yang `deniedModels` blokir, seperti bidang `model` hook agent, permintaan itu berjalan pada model sesi.401Model yang diblokir, baik `deniedModels` menyebutkannya atau daftar `"exact"` menghilangkannya, diperlakukan sebagai pemilihan terblokir di mana pun [daftar putih berlaku](#restrict-model-selection). Itu disembunyikan dari pemilih `/model`, dan `/model <name>` menolaknya. Jika Anda menyebutkan ID model yang diblokir dengan `--model`, `ANTHROPIC_MODEL`, atau pengaturan `model`, Claude Code menjatuhkannya saat startup dan menyelesaikan opsi Default sebagai gantinya. Jika [hook](/docs/id/hooks) atau permintaan latar belakang menyebutkan model yang `deniedModels` blokir, seperti bidang `model` hook agent, permintaan itu berjalan pada model sesi sebagai gantinya.

400 402 

401Opsi Default mengikuti kedua kunci juga, apakah atau tidak Anda menetapkan [`enforceAvailableModels`](#enforce-the-allowlist-for-the-default-model). Jika Anda menetapkannya dengan `availableModels` yang tidak kosong, default yang diblokir dihitung sebagai model di luar daftar izin. Jika tidak, opsi Default yang akan diselesaikan ke model yang diblokir turun dalam urutan ini:403Opsi Default mengikuti kedua kunci juga, baik atau tidak Anda atur [`enforceAvailableModels`](#enforce-the-allowlist-for-the-default-model). Jika Anda menetapkannya dengan `availableModels` yang tidak kosong, default yang diblokir dihitung sebagai model di luar daftar putih. Jika tidak, opsi Default yang akan diselesaikan ke model yang diblokir turun dalam urutan ini:

402 404 

4031. Versi terbaru keluarga yang sama yang diizinkan4051. Versi terbaru keluarga yang sama yang diizinkan

4042. Model terakhir yang diizinkan dari setiap keluarga biaya lebih rendah: Sonnet, kemudian Haiku4062. Model yang diizinkan terbaru dari setiap keluarga biaya lebih rendah secara bergiliran: Sonnet, kemudian Haiku

4053. Entri `availableModels` pertama yang menyebutkan model yang diizinkan4073. Entri `availableModels` pertama yang menyebutkan model yang diizinkan

406 408 

407Jika tidak ada yang diizinkan, sesi yang dimulai pada opsi Default [menolak untuk dimulai](/docs/id/errors#managed-settings-block-the-default-model) dengan kesalahan yang menyebutkan kunci untuk diperbaiki. Daftar `"exact"` mempengaruhi opsi Default hanya ketika daftar `availableModels` terkelola menyebutkan setidaknya satu model atau keluarga.409Jika tidak ada yang diizinkan, sesi yang dimulai pada opsi Default [menolak untuk dimulai](/docs/id/errors#managed-settings-block-the-default-model) dengan kesalahan yang menyebutkan kunci untuk diperbaiki. Daftar `"exact"` mempengaruhi opsi Default hanya ketika daftar `availableModels` terkelola menyebutkan setidaknya satu model atau keluarga.


416 418 

417Pembatasan berlaku ketika anggota masuk atau menggunakan kunci API mereka sendiri. Kredensial yang bersifat organisasi, seperti kunci layanan organisasi, tidak terikat pada pengguna, jadi pembatasan tidak berlaku untuk mereka.419Pembatasan berlaku ketika anggota masuk atau menggunakan kunci API mereka sendiri. Kredensial yang bersifat organisasi, seperti kunci layanan organisasi, tidak terikat pada pengguna, jadi pembatasan tidak berlaku untuk mereka.

418 420 

419Claude Console tidak memiliki kontrol pembatasan model. Organisasi tanpa paket Claude Enterprise, termasuk yang anggotanya mengautentikasi melalui Anthropic API, membatasi model dengan [`availableModels`](#restrict-model-selection) dalam [pengaturan terkelola](/docs/id/managed-settings), menambahkan [`enforceAvailableModels`](#enforce-the-allowlist-for-the-default-model) untuk mencakup opsi Default. [Cakupan permukaan](#surface-coverage) mengatakan bagaimana setiap permukaan menerima dan memberlakukan pengaturan ini.421Claude Console tidak memiliki kontrol pembatasan model. Organisasi tanpa paket Claude Enterprise, termasuk yang anggotanya mengautentikasi melalui API Anthropic, membatasi model dengan [`availableModels`](#restrict-model-selection) dalam [pengaturan terkelola](/docs/id/managed-settings) sebagai gantinya, menambahkan [`enforceAvailableModels`](#enforce-the-allowlist-for-the-default-model) untuk mencakup opsi Default. [Cakupan permukaan](#surface-coverage) mengatakan bagaimana setiap permukaan menerima dan memberlakukan pengaturan ini.

420 422 

421Model yang dibatasi disembunyikan dari pemilih `/model`. Memilihnya berdasarkan nama dengan `--model`, variabel lingkungan `ANTHROPIC_MODEL`, atau pengaturan `model` menunjukkan pemberitahuan `Model "<name>" is restricted by your organization's settings. Using <model> instead.` dan sesi dimulai pada model yang diizinkan. Mengetik `/model <name>` untuk model yang dibatasi ditolak dengan `Model '<name>' is restricted by your organization's settings. Run /model to choose a different model.` dan sesi mempertahankan model saat ini.423Model yang dibatasi disembunyikan dari pemilih `/model`. Memilihnya berdasarkan nama dengan `--model`, variabel lingkungan `ANTHROPIC_MODEL`, atau pengaturan `model` menunjukkan pemberitahuan `Model "<name>" is restricted by your organization's settings. Using <model> instead.` dan sesi dimulai pada model yang diizinkan. Mengetik `/model <name>` untuk model yang dibatasi ditolak dengan `Model '<name>' is restricted by your organization's settings. Run /model to choose a different model.` dan sesi menyimpan model saat ini.

422 424 

423Alias keluarga model [](#restrict-model-selection) seperti `opus` diselesaikan ke model biasanya ketika organisasi memungkinkannya. Ketika organisasi membatasi model itu, Claude Code mengganti versi terbaru keluarga yang diizinkan organisasi, dengan pemberitahuan substitusi yang sama. `/model <alias>` ditolak hanya ketika setiap versi keluarganya dibatasi; alias yang diatur dengan `--model`, `ANTHROPIC_MODEL`, atau pengaturan `model` masih diganti saat startup dalam hal itu. Sebelum v2.1.205, alias keluarga diganti atau ditolak berdasarkan versi rilis terbarunya saja, bahkan ketika versi yang lebih lama diizinkan.425Alias keluarga model [](#restrict-model-selection) seperti `opus` diselesaikan ke model biasanya ketika organisasi memungkinkannya. Ketika organisasi membatasi model itu, Claude Code mengganti versi terbaru keluarga yang diizinkan organisasi, dengan pemberitahuan substitusi yang sama. `/model <alias>` ditolak hanya ketika setiap versi keluarganya dibatasi; alias yang diatur dengan `--model`, `ANTHROPIC_MODEL`, atau pengaturan `model` masih diganti saat startup dalam hal itu. Sebelum v2.1.205, alias keluarga diganti atau ditolak berdasarkan versi rilis terbarunya saja, bahkan ketika versi yang lebih lama diizinkan.

424 426 


426 428 

427* Menonaktifkan model di tingkat organisasi menghapusnya untuk setiap anggota.429* Menonaktifkan model di tingkat organisasi menghapusnya untuk setiap anggota.

428* Akses tingkat peran memberikan model berbeda ke peran khusus yang berbeda, dan anggota yang memiliki beberapa peran dapat menggunakan model apa pun yang diizinkan salah satu peran mereka.430* Akses tingkat peran memberikan model berbeda ke peran khusus yang berbeda, dan anggota yang memiliki beberapa peran dapat menggunakan model apa pun yang diizinkan salah satu peran mereka.

429* Model Haiku selalu tersedia dan tidak dapat dinonaktifkan, jadi setiap anggota mempertahankan setidaknya satu model yang dapat digunakan.431* Model Haiku selalu tersedia dan tidak dapat dinonaktifkan, jadi setiap anggota menyimpan setidaknya satu model yang dapat digunakan.

430* Perubahan akses berlaku di seluruh organisasi dalam waktu sekitar satu menit; pemilih `/model` mencerminkannya saat sesi berikutnya dimulai.432* Perubahan akses berlaku di seluruh organisasi dalam waktu sekitar satu menit; pemilih `/model` mencerminkannya saat sesi berikutnya dimulai.

431 433 

432Kedua pembatasan berlaku bersama: model dapat dipilih hanya ketika diizinkan oleh `availableModels` dan tidak dibatasi oleh organisasi. Pembatasan organisasi mencapai sesi pada Anthropic API dan penerapan [LLM gateway](/docs/id/llm-gateway) saja; pada penyedia lain apa pun, gunakan `availableModels`.434Kedua pembatasan berlaku bersama: model dapat dipilih hanya ketika diizinkan oleh `availableModels` dan tidak dibatasi oleh organisasi. Pembatasan organisasi mencapai sesi pada API Anthropic dan penerapan [gateway LLM](/docs/id/llm-gateway) saja; pada penyedia lain apa pun, gunakan `availableModels` sebagai gantinya.

433 435 

434<h2 id="organization-default-model">436<h2 id="organization-default-model">

435 Model default organisasi437 Model default organisasi


519 Rantai model fallback521 Rantai model fallback

520</h3>522</h3>

521 523 

522Ketika model utama kelebihan beban, tidak tersedia, atau mengembalikan kesalahan server non-retryable lainnya, Claude Code dapat beralih ke model fallback alih-alih gagal permintaan. Kesalahan autentikasi, penagihan, rate-limit, ukuran permintaan, dan transportasi, serta [penolakan oleh pemeriksaan kebijakan organisasi Anda](/docs/id/errors#automatic-retries), tidak pernah memicu switch; mereka mengikuti penanganan retry dan error normal mereka.524Ketika model utama kelebihan beban, tidak tersedia, atau mengembalikan kesalahan server non-retryable lainnya, Claude Code dapat beralih ke model fallback alih-alih gagal permintaan. Kesalahan autentikasi, penagihan, rate-limit, ukuran permintaan, dan transportasi, serta [penolakan oleh pemeriksaan kebijakan organisasi Anda](/docs/id/errors#automatic-retries), tidak pernah memicu switch; mereka mengikuti penanganan retry dan error normal mereka. Ini beralih ketika [Amazon Bedrock](/docs/id/amazon-bedrock#when-a-model-is-disabled-mid-session) atau [Google Cloud's Agent Platform](/docs/id/google-vertex-ai#when-a-model-is-disabled-mid-session) menolak model yang akun Anda tidak dapat memanggil, yang Claude Code perlakukan sebagai model tidak tersedia daripada sebagai error autentikasi.

523 525 

524Konfigurasikan satu atau lebih model fallback dan Claude Code mencobanya secara berurutan, menampilkan pemberitahuan saat beralih. Switch berlangsung untuk giliran saat ini saja, jadi pesan berikutnya Anda mencoba model utama terlebih dahulu lagi. Claude Code membatasi rantai pada tiga model setelah penghapusan duplikat dan mengabaikan entri tambahan.526Konfigurasikan satu atau lebih model fallback dan Claude Code mencobanya secara berurutan, menampilkan pemberitahuan saat beralih. Switch berlangsung untuk giliran saat ini saja, jadi pesan berikutnya Anda mencoba model utama terlebih dahulu lagi. Claude Code membatasi rantai pada tiga model setelah penghapusan duplikat dan mengabaikan entri tambahan.

525 527 


773 775 

774Claude Code memeriksa persyaratan paket ini hanya ketika terhubung ke Anthropic API secara langsung. Jika Anda menunjuk `ANTHROPIC_BASE_URL` pada [gateway LLM](/docs/id/llm-gateway#subscriptions-and-gateways) dan login claude.ai tersimpan Anda tetap menjadi kredensial aktif, Claude Code tidak memeriksa kredit penggunaan paket Anda. Opsi `[1m]` tetap tersedia dalam `/model`, dan gateway memutuskan apakah permintaan berhasil. Sebelum v2.1.229, Claude Code menolak `/model sonnet[1m]` dalam konfigurasi itu ketika tidak dapat mengkonfirmasi kredit penggunaan pada akun.776Claude Code memeriksa persyaratan paket ini hanya ketika terhubung ke Anthropic API secara langsung. Jika Anda menunjuk `ANTHROPIC_BASE_URL` pada [gateway LLM](/docs/id/llm-gateway#subscriptions-and-gateways) dan login claude.ai tersimpan Anda tetap menjadi kredensial aktif, Claude Code tidak memeriksa kredit penggunaan paket Anda. Opsi `[1m]` tetap tersedia dalam `/model`, dan gateway memutuskan apakah permintaan berhasil. Sebelum v2.1.229, Claude Code menolak `/model sonnet[1m]` dalam konfigurasi itu ketika tidak dapat mengkonfirmasi kredit penggunaan pada akun.

775 777 

778<span id="context-window-behind-a-gateway" />

779 

780Jika Anda menetapkan `ANTHROPIC_BASE_URL` ke [gateway LLM](/docs/id/llm-gateway) atau proxy lainnya, Claude Code memberikan setiap model yang dikenalinya jendela konteks yang sama dengan model pada Anthropic API. Fable 5.1, Fable 5, Sonnet 5 dan lebih baru, dan Opus 4.7 dan lebih baru mendapatkan jendela 1M tanpa varian `[1m]` untuk dipilih, dan model yang mencapai 1M hanya melalui varian `[1m]` seperti Opus 4.6, berjalan pada 200K tanpanya. Claude Code tidak dapat mendeteksi batas yang lebih rendah yang gateway atau server di belakangnya berlakukan. Jika gateway Anda menolak permintaan di atas 200K token, jalankan [`/autocompact 200k`](#set-the-auto-compact-window) sehingga sesi compact pada batas itu.

781 

776Untuk menonaktifkan konteks 1M, atur `CLAUDE_CODE_DISABLE_1M_CONTEXT=1`. Claude Code menghapus varian model 1M dari pengambil model. Pada model dengan jendela 1M asli, seperti Sonnet 5 dan model Fable, ini juga memperlakukan model sebagai memiliki jendela konteks 200K:782Untuk menonaktifkan konteks 1M, atur `CLAUDE_CODE_DISABLE_1M_CONTEXT=1`. Claude Code menghapus varian model 1M dari pengambil model. Pada model dengan jendela 1M asli, seperti Sonnet 5 dan model Fable, ini juga memperlakukan model sebagai memiliki jendela konteks 200K:

777 783 

778* Dengan auto-compaction aktif, sesi compact pada batas 200K melalui [auto-compaction](#set-the-auto-compact-window). Menetapkan jendela auto-compact di atas 200K tidak mengangkat hold, karena Claude Code membatasi jendela itu pada jendela konteks model.784* Dengan auto-compaction aktif, sesi compact pada batas 200K melalui [auto-compaction](#set-the-auto-compact-window). Menetapkan jendela auto-compact di atas 200K tidak mengangkat hold, karena Claude Code membatasi jendela itu pada jendela konteks model.


801 807 

802Pada Anthropic API, Sonnet 5.5 dan Sonnet 5 selalu berjalan dengan jendela konteks 1M. Tidak ada varian 200K, tidak ada sufiks `[1m]` untuk dipilih, dan tidak ada kredit penggunaan yang diperlukan pada paket apa pun. Sesi auto-compact sebelum jendela penuh, pada sekitar 967K token secara default; atur [`CLAUDE_CODE_AUTO_COMPACT_WINDOW`](/docs/id/env-vars) untuk memilih ambang batas berbeda.808Pada Anthropic API, Sonnet 5.5 dan Sonnet 5 selalu berjalan dengan jendela konteks 1M. Tidak ada varian 200K, tidak ada sufiks `[1m]` untuk dipilih, dan tidak ada kredit penggunaan yang diperlukan pada paket apa pun. Sesi auto-compact sebelum jendela penuh, pada sekitar 967K token secara default; atur [`CLAUDE_CODE_AUTO_COMPACT_WINDOW`](/docs/id/env-vars) untuk memilih ambang batas berbeda.

803 809 

804Dua konfigurasi menganggarkan jendela pada 200K:810Claude Code memberikan Sonnet 5.5 dan Sonnet 5 jendela 1M yang sama di belakang [gateway LLM](/docs/id/llm-gateway) atau `ANTHROPIC_BASE_URL` kustom lainnya. Jika gateway Anda memberlakukan batas yang lebih rendah, lihat [jendela konteks di belakang gateway](#context-window-behind-a-gateway).

811 

812Pengaturan ini menganggarkan jendela pada 200K:

805 813 

806* **Gateway LLM**: ketika `ANTHROPIC_BASE_URL` menunjuk pada [gateway](/docs/id/llm-gateway), Claude Code tidak dapat memverifikasi dukungan 1M. Untuk menggunakan jendela penuh, pilih Sonnet 5.5 (1M context) dalam pengambil model, yang memetakan ke `sonnet[1m]`, atau jalankan `/model claude-sonnet-5[1m]` untuk Sonnet 5.

807* **`CLAUDE_CODE_DISABLE_1M_CONTEXT=1`**: menyimpan sesi pada setiap model dengan jendela 1M asli ke jendela 200K; lihat [Konteks diperpanjang](#extended-context) untuk cara hold ditegakkan. Berguna untuk penerapan yang perlu membatasi konteks.814* **`CLAUDE_CODE_DISABLE_1M_CONTEXT=1`**: menyimpan sesi pada setiap model dengan jendela 1M asli ke jendela 200K; lihat [Konteks diperpanjang](#extended-context) untuk cara hold ditegakkan. Berguna untuk penerapan yang perlu membatasi konteks.

808 815 

809<h2 id="context-window-and-auto-compaction">816<h2 id="context-window-and-auto-compaction">


839* [Sesi cloud](/docs/id/claude-code-on-the-web) melakukan pemadatan saat percakapan mendekati batas model846* [Sesi cloud](/docs/id/claude-code-on-the-web) melakukan pemadatan saat percakapan mendekati batas model

840* Sonnet 4.6 dan Opus 4.6 tanpa [konteks diperluas](#extended-context) melakukan pemadatan pada batas 200K, dan begitu juga Opus 4.8 dan yang lebih baru ketika mereka berjalan dengan jendela konteks 200K, seperti di Amazon Bedrock, Platform Agen Google Cloud, dan Microsoft Foundry847* Sonnet 4.6 dan Opus 4.6 tanpa [konteks diperluas](#extended-context) melakukan pemadatan pada batas 200K, dan begitu juga Opus 4.8 dan yang lebih baru ketika mereka berjalan dengan jendela konteks 200K, seperti di Amazon Bedrock, Platform Agen Google Cloud, dan Microsoft Foundry

841* Ketika Anda mengatur [`CLAUDE_CODE_DISABLE_1M_CONTEXT=1`](/docs/id/env-vars), model dengan jendela asli 1M, seperti Sonnet 5 dan model Fable, melakukan pemadatan pada batas 200K848* Ketika Anda mengatur [`CLAUDE_CODE_DISABLE_1M_CONTEXT=1`](/docs/id/env-vars), model dengan jendela asli 1M, seperti Sonnet 5 dan model Fable, melakukan pemadatan pada batas 200K

842* Model yang berjalan dengan jendela asli 1M, seperti Sonnet 5, model Fable, dan Opus 4.7 dan yang lebih baru di Anthropic API, melakukan pemadatan sebelum jendela penuh, pada sekitar 967K token secara default. Di Amazon Bedrock, Platform Agen Google Cloud, dan Microsoft Foundry, [Pin models for third-party deployments](#pin-models-for-third-party-deployments) mengatakan model mana yang berjalan dengan jendela itu; untuk konfigurasi yang menganggarkan Sonnet 5.5 dan Sonnet 5 pada 200K sebagai gantinya, lihat [Sonnet 5.5 and Sonnet 5 context window](#sonnet-5-5-and-sonnet-5-context-window)849* Model yang berjalan dengan jendela asli 1M melakukan pemadatan sebelum jendela penuh, pada sekitar 967K token secara default. Di Anthropic API, ini termasuk Sonnet 5, model Fable, dan Opus 4.7 dan yang lebih baru. Di Amazon Bedrock, Platform Agen Google Cloud, dan Microsoft Foundry, lihat [Pin models for third-party deployments](#pin-models-for-third-party-deployments) untuk model mana yang berjalan dengan jendela itu. Di balik `ANTHROPIC_BASE_URL` kustom, lihat [the context window behind a gateway](#context-window-behind-a-gateway)

843* Sesi pada ID model yang Claude Code tidak kenali, seperti alias [gateway LLM](/docs/id/llm-gateway), melakukan pemadatan pada jendela konteks yang Claude Code asumsikan untuk ID; lihat [Correct the window for a gateway or custom model ID](#correct-the-window-for-a-gateway-or-custom-model-id)850* Sesi pada ID model yang Claude Code tidak kenali, seperti alias [gateway LLM](/docs/id/llm-gateway), melakukan pemadatan pada jendela konteks yang Claude Code asumsikan untuk ID; lihat [Correct the window for a gateway or custom model ID](#correct-the-window-for-a-gateway-or-custom-model-id)

844 851 

845<h3 id="correct-the-window-for-a-gateway-or-custom-model-id">852<h3 id="correct-the-window-for-a-gateway-or-custom-model-id">


1053| - | - |1060| - | - |

1054| `DISABLE_PROMPT_CACHING` | Atur ke `1` untuk menonaktifkan prompt caching untuk semua model. Mengambil alih pengaturan per-model |1061| `DISABLE_PROMPT_CACHING` | Atur ke `1` untuk menonaktifkan prompt caching untuk semua model. Mengambil alih pengaturan per-model |

1055| `DISABLE_PROMPT_CACHING_HAIKU` | Atur ke `1` untuk menonaktifkan prompt caching untuk [model Haiku default](/docs/id/prompt-caching#disable-prompt-caching) |1062| `DISABLE_PROMPT_CACHING_HAIKU` | Atur ke `1` untuk menonaktifkan prompt caching untuk [model Haiku default](/docs/id/prompt-caching#disable-prompt-caching) |

1056| `DISABLE_PROMPT_CACHING_SONNET` | Atur ke `1` untuk menonaktifkan prompt caching hanya untuk model Sonnet |1063| `DISABLE_PROMPT_CACHING_SONNET` | Atur ke `1` untuk menonaktifkan prompt caching untuk [model Sonnet default](/docs/id/prompt-caching#disable-prompt-caching) |

1057| `DISABLE_PROMPT_CACHING_OPUS` | Atur ke `1` untuk menonaktifkan prompt caching hanya untuk model Opus |1064| `DISABLE_PROMPT_CACHING_OPUS` | Atur ke `1` untuk menonaktifkan prompt caching untuk [model Opus default](/docs/id/prompt-caching#disable-prompt-caching) |

1058| `DISABLE_PROMPT_CACHING_FABLE` | Atur ke `1` untuk menonaktifkan prompt caching hanya untuk model Fable |1065| `DISABLE_PROMPT_CACHING_FABLE` | Atur ke `1` untuk menonaktifkan prompt caching untuk model Fable saja |

1059 1066 

1060Untuk memilih cache TTL untuk percakapan utama dan untuk subagents secara terpisah, lihat [pilih TTL sendiri](/docs/id/prompt-caching#choose-the-ttl-yourself). Untuk apa yang memicu cache miss, lihat [Bagaimana Claude Code menggunakan prompt caching](/docs/id/prompt-caching).1067Untuk memilih cache TTL untuk percakapan utama dan untuk subagents secara terpisah, lihat [pilih TTL sendiri](/docs/id/prompt-caching#choose-the-ttl-yourself). Untuk apa yang memicu cache miss, lihat [Bagaimana Claude Code menggunakan prompt caching](/docs/id/prompt-caching).

1061 1068 

Details

1429* `managed_settings.trigger`: `"startup"` untuk peristiwa awal sesi, `"change"` ketika pengaturan yang dikelola atau keadaan pembantu kebijakan berubah nanti dalam sesi, atau `"refused"` ketika kebijakan pengaturan yang dikelola menghentikan sesi. Claude Code mengirim peristiwa `change` hanya ketika atribut berbeda dari peristiwa terakhir yang dikirimnya, dan nilai pengaturan yang berubah dihitung bahkan ketika `OTEL_LOG_MANAGED_SETTINGS` off1429* `managed_settings.trigger`: `"startup"` untuk peristiwa awal sesi, `"change"` ketika pengaturan yang dikelola atau keadaan pembantu kebijakan berubah nanti dalam sesi, atau `"refused"` ketika kebijakan pengaturan yang dikelola menghentikan sesi. Claude Code mengirim peristiwa `change` hanya ketika atribut berbeda dari peristiwa terakhir yang dikirimnya, dan nilai pengaturan yang berubah dihitung bahkan ketika `OTEL_LOG_MANAGED_SETTINGS` off

1430* `error.type`: mengapa Claude Code menghentikan sesi. Ada hanya pada peristiwa `refused`:1430* `error.type`: mengapa Claude Code menghentikan sesi. Ada hanya pada peristiwa `refused`:

1431 * `"helper_failed"`: [run pembantu kebijakan gagal](/docs/id/settings-reference#helper-failures)1431 * `"helper_failed"`: [run pembantu kebijakan gagal](/docs/id/settings-reference#helper-failures)

1432 * `"policy_invalid"`: pengaturan yang dikelola berisi kesalahan yang menghentikan Claude Code dari memulai, atau sumber admin gagal dimuat, jadi Claude Code tidak dapat memeriksa penegakan login organisasi1432 * `"policy_invalid"`: pengaturan yang dikelola berisi kesalahan yang menghentikan Claude Code dari memulai, atau sumber admin gagal dimuat untuk alasan selain pembacaan yang ditolak, jadi Claude Code tidak dapat memeriksa penegakan login organisasi atau penyedia

1433 * `"provider_not_allowed"`: sesi akan menggunakan penyedia API, atau mengirim lalu lintas penyedia ke host, yang daftar [`allowedProviders`](/docs/id/settings-reference#allowedproviders) yang dikelola tidak izinkan. Memerlukan Claude Code v2.1.285 atau lebih baru

1433 * `"consent_rejected"`: pengguna menolak [dialog persetujuan keamanan](/docs/id/server-managed-settings#security-approval-dialogs) untuk pengaturan yang dikelola server1434 * `"consent_rejected"`: pengguna menolak [dialog persetujuan keamanan](/docs/id/server-managed-settings#security-approval-dialogs) untuk pengaturan yang dikelola server

1434 * `"force_refresh_failed"`: pengambilan pengaturan yang [`forceRemoteSettingsRefresh`](/docs/id/settings-reference#forceremotesettingsrefresh) perlukan gagal1435 * `"force_refresh_failed"`: pengambilan pengaturan yang [`forceRemoteSettingsRefresh`](/docs/id/settings-reference#forceremotesettingsrefresh) perlukan gagal

1435 * `"gateway_rejected"`: [gateway aplikasi Claude](/docs/id/claude-apps-gateway) menjawab beban pengaturan yang dikelola dengan HTTP 4031436 * `"gateway_rejected"`: [gateway aplikasi Claude](/docs/id/claude-apps-gateway) menjawab beban pengaturan yang dikelola dengan HTTP 403

Details

246| `storage.googleapis.com` | Installer asli dan auto-updater asli pada versi sebelum 2.1.116 |246| `storage.googleapis.com` | Installer asli dan auto-updater asli pada versi sebelum 2.1.116 |

247| `registry.npmjs.org` | Instalasi plugin (pengambilan paket plugin bersumber npm dan instalasi dependensi paket Node.js plugin), server MCP yang diluncurkan `npx`, dan registri paket untuk instalasi npm dan bun dari Claude Code itu sendiri |247| `registry.npmjs.org` | Instalasi plugin (pengambilan paket plugin bersumber npm dan instalasi dependensi paket Node.js plugin), server MCP yang diluncurkan `npx`, dan registri paket untuk instalasi npm dan bun dari Claude Code itu sendiri |

248| `bridge.claudeusercontent.com` | [Claude in Chrome](/docs/id/chrome) jembatan WebSocket ekstensi |248| `bridge.claudeusercontent.com` | [Claude in Chrome](/docs/id/chrome) jembatan WebSocket ekstensi |

249| `*.frame.claudeusercontent.com` | Pembacaan konten [Artifact](/docs/id/artifacts). CLI mengambil file artefak dari host ini ketika Claude membuka satu, dan hanya ketika alat Artifact [tersedia](/docs/id/artifacts#availability) untuk akun Anda. Untuk mematikan alat dan menghilangkan persyaratan ini, atur [`"enableArtifact": false`](/docs/id/settings-reference#enableartifact) atau [`CLAUDE_CODE_DISABLE_ARTIFACT=1`](/docs/id/env-vars); Claude Code juga menghormati pengaturan [`disableArtifact`](/docs/id/settings-reference#disableartifact) yang sudah usang. Lihat [Disable artifacts](/docs/id/artifacts#disable-artifacts) untuk cara pengaturan ini berinteraksi |249| `*.frame.claudeusercontent.com` | Pembacaan konten [Artifact](/docs/id/artifacts). CLI mengambil file artefak dari host ini ketika Claude membuka satu, dan hanya ketika alat Artifact [tersedia](/docs/id/artifacts#availability) untuk akun Anda. Untuk mematikan alat dan menghilangkan persyaratan ini, atur [`"enableArtifact": false`](/docs/id/settings-reference#enableartifact) atau [`CLAUDE_CODE_DISABLE_ARTIFACT=1`](/docs/id/env-vars) |

250| `github.com` | Mengkloning [plugin marketplaces](/docs/id/plugins/overview) dan plugin yang dihosting GitHub, termasuk marketplace resmi Anthropic, melalui HTTPS atau SSH. Untuk mengkloning sumber GitHub `owner/repo` hanya melalui HTTPS, atur [`CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`](/docs/id/env-vars) |250| `github.com` | Mengkloning [plugin marketplaces](/docs/id/plugins/overview) dan plugin yang dihosting GitHub, termasuk marketplace resmi Anthropic, melalui HTTPS atau SSH. Untuk mengkloning sumber GitHub `owner/repo` hanya melalui HTTPS, atur [`CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`](/docs/id/env-vars) |

251| `raw.githubusercontent.com` | Umpan changelog untuk [`/release-notes`](/docs/id/commands). Dalam sesi interaktif, Claude Code juga mengambilnya di latar belakang saat startup ketika changelog cache-nya belum mencakup versi yang berjalan, seperti awal pertama setelah pembaruan; sesi non-interaktif dan cloud tidak pernah mengambilnya |251| `raw.githubusercontent.com` | Umpan changelog untuk [`/release-notes`](/docs/id/commands). Dalam sesi interaktif, Claude Code juga mengambilnya di latar belakang saat startup ketika changelog cache-nya belum mencakup versi yang berjalan, seperti awal pertama setelah pembaruan; sesi non-interaktif dan cloud tidak pernah mengambilnya |

252| `*-review.googlesource.com` | Pencarian perubahan Gerrit pada checkout `googlesource.com`. Ketika sesi tab Claude Desktop Code dimulai atau dilanjutkan pada checkout [terpercaya](/docs/id/permissions#project-allow-rules-and-workspace-trust) yang `origin`-nya adalah host `googlesource.com`, Claude Code menanyakan server `-review` host itu secara anonim untuk perubahan terbuka yang cocok dengan `Change-Id` HEAD, sekali per awal atau lanjutan. Jenis sesi lain melewati pencarian, dan tidak ada host Gerrit lain yang dihubungi. Opsional: nonaktifkan dengan [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](/docs/id/env-vars) |252| `*-review.googlesource.com` | Pencarian perubahan Gerrit pada checkout `googlesource.com`. Ketika sesi tab Claude Desktop Code dimulai atau dilanjutkan pada checkout [terpercaya](/docs/id/permissions#project-allow-rules-and-workspace-trust) yang `origin`-nya adalah host `googlesource.com`, Claude Code menanyakan server `-review` host itu secara anonim untuk perubahan terbuka yang cocok dengan `Change-Id` HEAD, sekali per awal atau lanjutan. Jenis sesi lain melewati pencarian, dan tidak ada host Gerrit lain yang dihubungi. Opsional: nonaktifkan dengan [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](/docs/id/env-vars) |

Details

86| Cara Anda menjalankan Claude Code | Mode izin awal bawaan |86| Cara Anda menjalankan Claude Code | Mode izin awal bawaan |

87| :- | :- |87| :- | :- |

88| File pengaturan apa pun menetapkan `disableAutoMode` ke `"disable"` | `default` |88| File pengaturan apa pun menetapkan `disableAutoMode` ke `"disable"` | `default` |

89| `claude -p` atau [Agent SDK](/docs/id/agent-sdk/permissions) | `default` |89| `claude -p` atau [Agent SDK](/docs/id/agent-sdk/permissions#permission-modes) | `default` dalam sesi yang [mengambil flag fitur](/docs/id/env-vars#features-that-need-feature-flag-fetching). Dalam sesi yang tidak, seperti pada penyedia pihak ketiga atau dengan telemetri mati, `auto` dengan Claude Code v2.1.285 atau lebih baru dan `default` pada versi sebelumnya. Sesi dalam organisasi yang kebijakannya menahan default `auto` dimulai dalam `default` sebagai gantinya |

90| Di terminal atau melalui [ekstensi VS Code](/docs/id/vs-code) | `auto` dengan Claude Code v2.1.283 atau lebih baru; pada versi sebelumnya, `auto` pada paket Pro, Max, atau Team dalam sesi yang [mengambil flag fitur](/docs/id/env-vars#features-that-need-feature-flag-fetching), dan `default` sebaliknya |90| Di terminal atau melalui [ekstensi VS Code](/docs/id/vs-code) | `auto` dengan Claude Code v2.1.283 atau lebih baru; pada versi sebelumnya, `auto` pada paket Pro, Max, atau Team dalam sesi yang [mengambil flag fitur](/docs/id/env-vars#features-that-need-feature-flag-fetching), dan `default` sebaliknya |

91 91 

92Dalam [sesi pertama Anda setelah instalasi atau upgrade](/docs/id/env-vars#first-session-after-an-install-or-upgrade), Claude Code dapat memilih mode izin awal sebelum flag fiturnya tiba. Sesi itu dapat dimulai dalam mode izin yang berbeda dari yang diberikan tabel, dan sesi berikutnya Anda cocok dengan tabel.92Dalam [sesi pertama Anda setelah instalasi atau upgrade](/docs/id/env-vars#first-session-after-an-install-or-upgrade), Claude Code dapat memilih mode izin awal sebelum flag fiturnya tiba. Sesi itu dapat dimulai dalam mode izin yang berbeda dari yang diberikan tabel, dan sesi berikutnya Anda cocok dengan tabel.


98* Di terminal, sekali, di bagian atas sesi98* Di terminal, sekali, di bagian atas sesi

99* Di ekstensi VS Code, sebagai kartu di layar percakapan baru yang tetap sampai Anda menutupnya99* Di ekstensi VS Code, sebagai kartu di layar percakapan baru yang tetap sampai Anda menutupnya

100 100 

101Pada paket Pro, Max, dan Team, jika `~/.claude/settings.json` Anda menetapkan `defaultMode` selain `auto` dan tidak ada file pengaturan lain yang menetapkan satu, sesi Anda terus dimulai dalam mode itu. Claude Code meminta sekali, di terminal atau di ekstensi VS Code, apakah akan mengubah pengaturan ke mode auto. Jika Anda menolak, pengaturan Anda tetap seperti adanya.101Jika `~/.claude/settings.json` Anda menetapkan `defaultMode` selain `auto` dan tidak ada file pengaturan lain yang menetapkan satu, sesi Anda terus dimulai dalam mode itu. Pada paket Pro, Max, dan Team, dan dalam sesi yang [tidak mengambil flag fitur](/docs/id/env-vars#features-that-need-feature-flag-fetching), Claude Code meminta sekali, di terminal atau di ekstensi VS Code, apakah akan mengubah pengaturan ke mode auto. Jika Anda menolak, pengaturan Anda tetap seperti adanya.

102 102 

103<h3 id="start-in-a-different-mode">103<h3 id="start-in-a-different-mode">

104 Mulai dalam mode izin yang berbeda104 Mulai dalam mode izin yang berbeda


288Untuk membuat Plan Mode default untuk sesi terminal proyek, atur `defaultMode` ke `plan` dalam `.claude/settings.json`, ditempatkan seperti contoh di bawah [Mulai dalam mode izin yang berbeda](#start-in-a-different-mode) menunjukkan. Percakapan yang dimulai [ekstensi VS Code](/docs/id/vs-code) tidak membaca pengaturan proyek untuk mode izin awal. Di sana, atur `claudeCode.initialPermissionMode` ke `plan` dalam pengaturan pengguna VS Code Anda sebagai gantinya.288Untuk membuat Plan Mode default untuk sesi terminal proyek, atur `defaultMode` ke `plan` dalam `.claude/settings.json`, ditempatkan seperti contoh di bawah [Mulai dalam mode izin yang berbeda](#start-in-a-different-mode) menunjukkan. Percakapan yang dimulai [ekstensi VS Code](/docs/id/vs-code) tidak membaca pengaturan proyek untuk mode izin awal. Di sana, atur `claudeCode.initialPermissionMode` ke `plan` dalam pengaturan pengguna VS Code Anda sebagai gantinya.

289 289 

290<h2 id="eliminate-prompts-with-auto-mode">290<h2 id="eliminate-prompts-with-auto-mode">

291 Hilangkan permintaan izin dengan mode otomatis291 Hilangkan prompt izin dengan mode otomatis

292</h2>292</h2>

293 293 

294Mode otomatis memungkinkan Claude untuk dieksekusi tanpa permintaan izin rutin. Model pengklasifikasi terpisah meninjau tindakan sebelum dijalankan, memblokir apa pun yang melampaui permintaan Anda, menargetkan infrastruktur yang tidak dikenali, atau tampak didorong oleh konten bermusuhan yang dibaca Claude. [Aturan ask](/docs/id/permissions#manage-permissions) eksplisit masih memaksa permintaan.294Mode otomatis memungkinkan Claude untuk dieksekusi tanpa prompt izin rutin. Model pengklasifikasi terpisah meninjau tindakan sebelum dijalankan, memblokir apa pun yang melampaui permintaan Anda, menargetkan infrastruktur yang tidak dikenali, atau tampak didorong oleh konten bermusuhan yang dibaca Claude. [Aturan ask](/docs/id/permissions#manage-permissions) eksplisit masih memaksa prompt.

295 295 

296Dengan Claude Code v2.1.283 atau lebih baru, mode otomatis adalah [mode izin awal bawaan](#which-mode-a-session-starts-in) untuk sesi terminal interaktif dan VS Code di setiap paket dan penyedia. Pada versi sebelumnya, ini adalah mode izin awal bawaan hanya pada paket Pro, Max, dan Team.296Dengan Claude Code v2.1.283 atau lebih baru, mode otomatis adalah [mode izin awal bawaan](#which-mode-a-session-starts-in) untuk sesi terminal interaktif dan VS Code di setiap paket dan penyedia. Pada versi sebelumnya, ini adalah mode izin awal bawaan hanya pada paket Pro, Max, dan Team.

297 297 


299 299 

300Secara default, pengklasifikasi tidak meninjau penghapusan `rm` dan `rmdir` yang menargetkan jalur kritis, seperti `rm -rf /` atau `rm -rf ~`. [Jalur kritis](#critical-paths) mencakup apa yang terjadi pada mereka di setiap mode izin.300Secara default, pengklasifikasi tidak meninjau penghapusan `rm` dan `rmdir` yang menargetkan jalur kritis, seperti `rm -rf /` atau `rm -rf ~`. [Jalur kritis](#critical-paths) mencakup apa yang terjadi pada mereka di setiap mode izin.

301 301 

302Mode otomatis juga mendorong Claude untuk terus bekerja tanpa berhenti untuk pertanyaan klarifikasi, meskipun Claude masih bertanya ketika permintaan Anda atau keterampilan secara eksplisit bergantung padanya. Untuk perilaku otonom yang lebih kuat dalam mode yang masih meminta Anda, atur [gaya output Proaktif](/docs/id/output-styles) sebagai gantinya.302Mode otomatis juga mendorong Claude untuk terus bekerja tanpa berhenti untuk pertanyaan klarifikasi, meskipun Claude masih bertanya ketika prompt Anda atau skill secara eksplisit bergantung padanya. Untuk perilaku otonom yang lebih kuat dalam mode yang masih memberi Anda prompt, atur [gaya output Proaktif](/docs/id/output-styles) sebagai gantinya.

303 303 

304<Warning>304<Warning>

305 Mode otomatis mengurangi permintaan izin tetapi tidak menjamin keamanan. Gunakan untuk tugas di mana Anda mempercayai arah umum, bukan sebagai pengganti tinjauan pada operasi sensitif.305 Mode otomatis mengurangi prompt izin tetapi tidak menjamin keamanan. Gunakan untuk tugas di mana Anda mempercayai arah umum, bukan sebagai pengganti tinjauan pada operasi sensitif.

306</Warning>306</Warning>

307 307 

308Mode otomatis tersedia hanya ketika akun Anda memenuhi semua persyaratan ini:308Mode otomatis tersedia hanya ketika akun Anda memenuhi semua persyaratan ini:

309 309 

310* **Paket**: Semua paket.310* **Paket**: Semua paket.

311* **Organisasi**: pada Team dan Enterprise, mode otomatis tersedia secara default. Administrator dapat mematikannya untuk organisasi dengan menetapkan `permissions.disableAutoMode` ke `"disable"` dalam [pengaturan terkelola](/docs/id/managed-settings).311* **Organisasi**: pada Team dan Enterprise, mode otomatis tersedia secara default. Administrator dapat mematikannya untuk organisasi dengan menetapkan `permissions.disableAutoMode` ke `"disable"` dalam [pengaturan terkelola](/docs/id/managed-settings).

312* **Model**: pada API Anthropic dan [Claude Platform di AWS](/docs/id/claude-platform-on-aws), Claude Opus 4.6 atau lebih baru, Sonnet 4.6 atau lebih baru, atau [model Fable](/docs/id/model-config#work-with-fable). Di Amazon Bedrock, Platform Agen Google Cloud, Microsoft Foundry, dan sesi [gateway aplikasi Claude](/docs/id/claude-apps-gateway) yang masuk, hanya Claude Sonnet 5 atau lebih baru, Opus 4.7 atau lebih baru, dan model Fable. Model yang lebih lama, termasuk Sonnet 4.5, Opus 4.5, Haiku, dan model claude-3, tidak didukung di penyedia mana pun.312* **Model**: pada Anthropic API dan [Claude Platform on AWS](/docs/id/claude-platform-on-aws), Claude Opus 4.6 atau lebih baru, Sonnet 4.6 atau lebih baru, atau [model Fable](/docs/id/model-config#work-with-fable). Pada Amazon Bedrock, Agent Platform Google Cloud, Microsoft Foundry, dan sesi [gateway aplikasi Claude](/docs/id/claude-apps-gateway) yang masuk, hanya Claude Sonnet 5 atau lebih baru, Opus 4.7 atau lebih baru, dan model Fable. Model yang lebih lama, termasuk Sonnet 4.5, Opus 4.5, Haiku, dan model claude-3, tidak didukung di penyedia mana pun.

313* **Penyedia**: tersedia secara default pada API Anthropic, Claude Platform di AWS, Amazon Bedrock, Platform Agen Google Cloud, Microsoft Foundry, dan sesi gateway aplikasi Claude yang masuk.313* **Penyedia**: tersedia secara default pada Anthropic API, Claude Platform on AWS, Amazon Bedrock, Agent Platform Google Cloud, Microsoft Foundry, dan sesi gateway aplikasi Claude yang masuk.

314 314 

315Jika Claude Code melaporkan mode otomatis sebagai tidak tersedia, pertama periksa persyaratan ini dan apakah file pengaturan apa pun menetapkan [`disableAutoMode`](/docs/id/settings-reference#disableautomode). Anthropic juga dapat mematikan mode otomatis di sisi server, atau server dapat menolak mode otomatis untuk akun Anda. Sesi yang menerima salah satu jawaban membuat mode otomatis tetap mati sampai sesi berakhir, jadi mulai sesi baru nanti.315Jika Claude Code melaporkan mode otomatis sebagai tidak tersedia, pertama periksa persyaratan ini dan apakah file pengaturan apa pun menetapkan [`disableAutoMode`](/docs/id/settings-reference#disableautomode). Anthropic juga dapat mematikan mode otomatis di sisi server, atau server dapat menolak mode otomatis untuk akun Anda. Sesi yang menerima salah satu jawaban menjaga mode otomatis tetap mati sampai sesi berakhir, jadi mulai sesi baru nanti.

316 316 

317Pesan terpisah yang menyebutkan model dan mengatakan mode otomatis "tidak dapat menentukan keamanan" tindakan berarti permintaan pengklasifikasi gagal. Kegagalan itu biasanya bersifat sementara, tetapi di Amazon Bedrock dapat berulang sampai akun Anda dapat memanggil model yang disebutkan. Lihat [referensi kesalahan](/docs/id/errors#auto-mode-cannot-determine-the-safety-of-an-action) untuk penyebab dan apa yang harus dilakukan.317Pesan terpisah yang menyebutkan model dan mengatakan mode otomatis "tidak dapat menentukan keamanan" tindakan berarti permintaan pengklasifikasi gagal. Kegagalan itu biasanya bersifat sementara, tetapi pada Amazon Bedrock dapat berulang sampai akun Anda dapat memanggil model yang disebutkan. Lihat [referensi kesalahan](/docs/id/errors#auto-mode-cannot-determine-the-safety-of-an-action) untuk penyebab dan apa yang harus dilakukan.

318 318 

319Jika Anda menetapkan `defaultMode: "auto"` dalam [pengaturan](/docs/id/settings-reference#all-settings) dan sesi terminal dimulai dalam mode Manual tanpa kesalahan, pengaturan kemungkinan ada di `.claude/settings.json` atau `.claude/settings.local.json`. `auto` tidak berlaku dari file tersebut. Pindahkan ke `~/.claude/settings.json`. Untuk percakapan yang dimulai ekstensi VS Code, periksa daftar ekstensi sendiri dalam [Beralih mode izin](#switch-permission-modes) sebagai gantinya.319Jika Anda menetapkan `defaultMode: "auto"` dalam [pengaturan](/docs/id/settings-reference#all-settings) dan sesi terminal dimulai dalam mode Manual tanpa kesalahan, pengaturan kemungkinan ada di `.claude/settings.json` atau `.claude/settings.local.json`. `auto` tidak berlaku dari file tersebut. Pindahkan ke `~/.claude/settings.json`. Untuk percakapan yang dimulai ekstensi VS Code, periksa daftar ekstensi sendiri dalam [Beralih mode izin](#switch-permission-modes) sebagai gantinya.

320 320 

321<h3 id="enable-auto-mode-on-bedrock-agent-platform-or-foundry">321<h3 id="enable-auto-mode-on-bedrock-agent-platform-or-foundry">

322 Mode otomatis di Bedrock, Platform Agen, atau Foundry322 Mode otomatis pada Bedrock, Agent Platform, atau Foundry

323</h3>323</h3>

324 324 

325Di [Amazon Bedrock](/docs/id/amazon-bedrock), [Platform Agen Google Cloud](/docs/id/google-vertex-ai), [Microsoft Foundry](/docs/id/microsoft-foundry), dan sesi [gateway aplikasi Claude](/docs/id/claude-apps-gateway) yang masuk, mode otomatis tersedia secara default. Dengan Claude Code v2.1.283 atau lebih baru, ini juga merupakan [mode izin awal bawaan](#which-mode-a-session-starts-in) untuk sesi terminal interaktif dan [VS Code](/docs/id/vs-code). Untuk memilih mode izin awal sendiri, atur `permissions.defaultMode` seperti yang dijelaskan [Mulai dalam mode izin berbeda](#start-in-a-different-mode), atau pilih mode izin dari indikator mode ekstensi VS Code.325Pada [Amazon Bedrock](/docs/id/amazon-bedrock), [Agent Platform Google Cloud](/docs/id/google-vertex-ai), [Microsoft Foundry](/docs/id/microsoft-foundry), dan sesi [gateway aplikasi Claude](/docs/id/claude-apps-gateway) yang masuk, mode otomatis tersedia secara default. Ketika tidak ada yang lain menetapkan mode izin, ini juga merupakan [mode izin awal bawaan](#which-mode-a-session-starts-in), pada versi yang tabel bagian itu daftar. Untuk memilih mode izin awal sendiri, atur `permissions.defaultMode` seperti yang dijelaskan [Mulai dalam mode izin yang berbeda](#start-in-a-different-mode), atau pilih mode izin dari indikator mode ekstensi VS Code.

326 326 

327Hanya Claude Sonnet 5 atau lebih baru, Opus 4.7 atau lebih baru, dan model Fable yang didukung di penyedia ini. Pada model lain apa pun, sesi dimulai dalam Manual sebagai gantinya.327Hanya Claude Sonnet 5 atau lebih baru, Opus 4.7 atau lebih baru, dan model Fable yang didukung pada penyedia ini. Pada model lain apa pun, sesi dimulai dalam Manual sebagai gantinya.

328 328 

329Untuk mencegah pengembang menggunakan mode otomatis, atur `disableAutoMode` ke `"disable"` dalam [pengaturan terkelola](/docs/id/managed-settings). Ini menghapus `auto` dari siklus `Shift+Tab`, dan sesi yang dimulai dengan `--permission-mode auto` dimulai dalam Manual sebagai gantinya. Sesi yang sudah berjalan dalam mode otomatis meninggalkannya ketika pengaturan mencapai sesi itu dari [sumber yang diterapkan admin](/docs/id/managed-settings#which-managed-source-claude-code-uses), dan menampilkan `auto mode disabled by settings`. Sebelum v2.1.251, sesi yang berjalan menyimpan mode otomatis sampai berakhir.329Untuk mencegah pengembang menggunakan mode otomatis, atur `disableAutoMode` ke `"disable"` dalam [pengaturan terkelola](/docs/id/managed-settings). Ini menghapus `auto` dari siklus `Shift+Tab`, dan sesi yang dimulai dengan `--permission-mode auto` dimulai dalam Manual sebagai gantinya. Sesi yang sudah berjalan dalam mode otomatis meninggalkannya ketika pengaturan mencapai sesi itu dari [sumber yang diterapkan admin](/docs/id/managed-settings#which-managed-source-claude-code-uses), dan menampilkan `auto mode disabled by settings`. Sebelum v2.1.251, sesi yang berjalan menjaga mode otomatis sampai berakhir.

330 330 

331Dalam v2.1.158 hingga v2.1.206, mode otomatis dimatikan di penyedia ini sampai Anda menetapkan `CLAUDE_CODE_ENABLE_AUTO_MODE=1`, dan Claude Code mengabaikan `defaultMode: "auto"` di penyedia ini kecuali variabel juga ditetapkan. Variabel masih diterima untuk kompatibilitas dan tidak berpengaruh dari v2.1.207 ke depan.331Dalam v2.1.158 hingga v2.1.206, mode otomatis dimatikan pada penyedia ini sampai Anda menetapkan `CLAUDE_CODE_ENABLE_AUTO_MODE=1`, dan Claude Code mengabaikan `defaultMode: "auto"` pada penyedia ini kecuali variabel juga ditetapkan. Variabel masih diterima untuk kompatibilitas dan tidak berpengaruh dari v2.1.207 ke depan.

332 332 

333<h3 id="server-side-classifier-review">333<h3 id="server-side-classifier-review">

334 Tinjauan pengklasifikasi di sisi server334 Tinjauan pengklasifikasi di sisi server

335</h3>335</h3>

336 336 

337Dalam mode otomatis, Claude Code dapat meminta server untuk memeriksa tindakan yang [urutan keputusan](#how-the-classifier-evaluates-actions) mengirimkan untuk tinjauan, sebagai bagian dari permintaan model sesi, sebagai pengganti mengirim permintaan pengklasifikasi sendiri. Sesi ini bertanya:337Dalam mode otomatis, Claude Code dapat meminta server untuk memeriksa tindakan yang [urutan keputusan](#how-the-classifier-evaluates-actions) mengirim untuk tinjauan, sebagai bagian dari permintaan model sesi, sebagai pengganti mengirim permintaan pengklasifikasi sendiri. Sesi ini bertanya:

338 338 

339* **Koneksi langsung ke API Anthropic**: dalam sesi terminal interaktif, di setiap paket claude.ai dan di akun yang menggunakan Claude API, saat Anthropic meluncurkannya. 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. Dari v2.1.282, sesi yang [tidak mengambil bendera fitur](/docs/id/env-vars#features-that-need-feature-flag-fetching), misalnya karena Anda mematikan telemetri, meminta server secara default dalam sesi apa pun.339* **Koneksi langsung ke Anthropic API**: dalam sesi terminal interaktif, pada setiap paket claude.ai dan pada akun yang menggunakan Claude API, saat Anthropic meluncurkannya. 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. Dari v2.1.282, sesi yang [tidak mengambil bendera fitur](/docs/id/env-vars#features-that-need-feature-flag-fetching), misalnya karena Anda mematikan telemetri, meminta server secara default dalam sesi apa pun.

340* **Penyedia cloud, atau gateway LLM atau proxy**: di [Claude Platform di AWS](/docs/id/claude-platform-on-aws), Amazon Bedrock, Platform Agen Google Cloud, dan Microsoft Foundry, dan kapan pun Anda menunjuk `ANTHROPIC_BASE_URL` ke [gateway LLM atau proxy](/docs/id/llm-gateway), apa pun paket Anda. Meminta secara default memerlukan Claude Code v2.1.278 atau lebih baru.340* **Penyedia cloud, atau gateway LLM atau proxy**: pada [Claude Platform on AWS](/docs/id/claude-platform-on-aws), Amazon Bedrock, Agent Platform Google Cloud, dan Microsoft Foundry, dan kapan pun Anda menunjuk `ANTHROPIC_BASE_URL` ke [gateway LLM atau proxy](/docs/id/llm-gateway), apa pun paket Anda. Meminta secara default memerlukan Claude Code v2.1.278 atau lebih baru.

341* **Sesi [gateway aplikasi Claude](/docs/id/claude-apps-gateway) yang masuk**: memerlukan Claude Code v2.1.280 atau lebih baru341* **Sesi [gateway aplikasi Claude](/docs/id/claude-apps-gateway) yang masuk**: memerlukan Claude Code v2.1.280 atau lebih baru

342 342 

343Di mana server meninjau tindakan, putusannya menentukan mereka. Dua hasil lain dimungkinkan:343Di mana server meninjau tindakan, vonis mereka memutuskannya. Dua hasil lain dimungkinkan:

344 344 

345* **Server tidak meninjau sesi**: respons selesai tanpa hasil tinjauan, atau server menjawab bahwa itu tidak meninjau sesi ini. Penyebab paling umum adalah gateway LLM atau proxy yang menghilangkan permintaan untuk tinjauan atau hasilnya, dan platform, wilayah, atau kredensial yang belum memiliki pemeriksaan sisi server. Claude Code kembali ke permintaan pengklasifikasi sendiri. Setelah fallback itu berlaku untuk sisa sesi, itu menunjukkan [pemberitahuan tentang biaya permintaan pengklasifikasi](/docs/id/auto-mode-classifier-billing) di akun di mana permintaan tersebut ditagih.345* **Server tidak meninjau sesi**: respons selesai tanpa hasil tinjauan, atau server menjawab bahwa itu tidak meninjau sesi ini. Penyebab paling umum adalah gateway LLM atau proxy yang menghilangkan permintaan untuk tinjauan atau hasilnya, dan platform, wilayah, atau kredensial yang belum memiliki pemeriksaan sisi server. Claude Code kembali ke permintaan pengklasifikasi sendiri. Setelah fallback itu berlaku untuk sisa sesi, itu menunjukkan [pemberitahuan tentang biaya permintaan pengklasifikasi](/docs/id/auto-mode-classifier-billing) pada akun di mana permintaan tersebut ditagih.

346* **Server tidak memberikan putusan untuk tindakan**: Claude Code menolak tindakan daripada menjalankannya tanpa tinjauan. Pada koneksi apa pun, ini terjadi ketika respons berakhir sebelum hasil tinjauan tiba atau hasil tiba dalam bentuk yang tidak dapat dibaca Claude Code. Gateway LLM atau proxy yang memotong respons pendek atau menulis ulang hasilnya dapat menyebabkan salah satu. Pada koneksi langsung ke API Anthropic, ini juga terjadi ketika pemeriksaan server gagal untuk tindakan, misalnya dengan waktu habis. [Server tidak mengembalikan putusan keamanan](/docs/id/errors#the-server-returned-no-safety-verdict) mencakup pesan penolakan, apa yang terjadi ketika penolakan berulang, dan apa yang harus dilakukan.346* **Server tidak memberikan vonis untuk tindakan**: Claude Code menolak tindakan daripada menjalankannya tanpa tinjauan. Pada koneksi apa pun, ini terjadi ketika respons berakhir sebelum hasil tinjauan tiba atau hasil tiba dalam bentuk yang tidak dapat dibaca Claude Code. Gateway LLM atau proxy yang memotong respons pendek atau menulis ulang hasilnya dapat menyebabkan salah satu. Pada koneksi langsung ke Anthropic API, ini juga terjadi ketika pemeriksaan server gagal untuk tindakan, misalnya dengan waktu habis. [Server tidak mengembalikan vonis keamanan](/docs/id/errors#the-server-returned-no-safety-verdict) mencakup pesan penolakan, apa yang terjadi ketika penolakan berulang, dan apa yang harus dilakukan.

347 347 

348Untuk melewati permintaan ke server dan selalu menggunakan permintaan pengklasifikasi Claude Code sendiri, atur [`CLAUDE_CODE_AUTO_MODE_SERVER=0`](/docs/id/env-vars). Pada koneksi langsung ke API Anthropic, variabel memerlukan Claude Code v2.1.281 atau lebih baru. Menetapkannya ke `1` di sana mengaktifkan tinjauan server dalam sesi yang belum memilikinya, seperti sesi `-p` atau Agent SDK, kecuali Anda juga menetapkan `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1`. Jika Anda menetapkan `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1` dan membiarkan `CLAUDE_CODE_AUTO_MODE_SERVER` tidak ditetapkan, Claude Code juga berhenti meminta server, kecuali seperti yang dijelaskan [Nonaktifkan kemampuan pra-rilis](/docs/id/llm-gateway-protocol#disable-pre-release-capabilities).348Untuk melewati permintaan ke server dan selalu menggunakan permintaan pengklasifikasi Claude Code sendiri, atur [`CLAUDE_CODE_AUTO_MODE_SERVER=0`](/docs/id/env-vars). Pada koneksi langsung ke Anthropic API, variabel memerlukan Claude Code v2.1.281 atau lebih baru. Menetapkannya ke `1` di sana mengaktifkan tinjauan server dalam sesi yang belum memilikinya, seperti sesi `-p` atau Agent SDK, kecuali Anda juga menetapkan `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1`. Jika Anda menetapkan `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1` dan membiarkan `CLAUDE_CODE_AUTO_MODE_SERVER` tidak ditetapkan, Claude Code juga berhenti meminta server, kecuali seperti yang dijelaskan [Nonaktifkan kemampuan pra-rilis](/docs/id/llm-gateway-protocol#disable-pre-release-capabilities).

349 349 

350<h3 id="what-the-classifier-blocks-by-default">350<h3 id="what-the-classifier-blocks-by-default">

351 Apa yang diblokir pengklasifikasi secara default351 Apa yang diblokir pengklasifikasi secara default

352</h3>352</h3>

353 353 

354Pengklasifikasi mempercayai direktori kerja Anda dan remote yang dikonfigurasi untuknya ketika sesi dimulai. Remote yang ditambahkan atau ditunjuk ulang selama sesi dengan `git remote add` atau `git remote set-url` tidak dipercaya, dan semuanya diperlakukan sebagai eksternal sampai Anda [mengonfigurasi infrastruktur terpercaya](/docs/id/auto-mode-config). Sebelum v2.1.200, remote yang ditambahkan di tengah sesi juga dipercaya.354Pengklasifikasi mempercayai direktori kerja Anda dan remote yang dikonfigurasi untuknya ketika sesi dimulai. Remote yang ditambahkan atau ditunjuk ulang selama sesi dengan `git remote add` atau `git remote set-url` tidak dipercaya, dan semuanya diperlakukan sebagai eksternal sampai Anda [mengonfigurasi infrastruktur terpercaya](/docs/id/auto-mode-config). Sebelum v2.1.200, remote yang ditambahkan pertengahan sesi juga dipercaya.

355 355 

356**Diblokir secara default**:356**Diblokir secara default**:

357 357 

358* Mengunduh dan menjalankan kode, seperti `curl | bash`358* Mengunduh dan menjalankan kode, seperti `curl | bash`

359* Mengirim data sensitif ke titik akhir eksternal359* Mengirim data sensitif ke endpoint eksternal

360* Penerapan dan migrasi produksi360* Deploy dan migrasi produksi

361* Penghapusan massal pada penyimpanan cloud361* Penghapusan massal pada penyimpanan cloud

362* Memberikan izin IAM atau repo362* Memberikan izin IAM atau repo

363* Memodifikasi infrastruktur bersama363* Memodifikasi infrastruktur bersama

364* Menghancurkan file secara tidak dapat dibalikkan yang ada sebelum sesi364* Menghancurkan file secara tidak dapat dibalikkan yang ada sebelum sesi

365* Dorong paksa365* Force push

366* Melakukan komit atau mendorong perubahan yang akan mengirim rahasia atau data sensitif di luar repositori saat dijalankan, atau memperluas apa yang diekspos penerapan. Ini mencakup alur kerja CI atau konfigurasi penerapan yang meneruskan rahasia ke tujuan yang belum menerimanya, skrip atau langkah penyiapan yang membaca penyimpanan rahasia dan mengirim data keluar, dan perubahan konfigurasi yang memperluas apa yang dipublikasikan penerapan, seperti pengaturan registri, visibilitas, artefak, atau sourcemap. Pemeriksaan berlaku di cabang apa pun, berlaku bahkan ketika repositori bersifat publik, dan terbang ketika perubahan dilakukan komit atau didorong, terlepas dari apakah komit atau dorong itu memicu pipeline; menghapusnya memerlukan penamaan efek eksekusi, bukan hanya komit atau dorong. Sebelum v2.1.211, pemeriksaan ini dibatasi pada cabang default sebagai gantinya: dorong di sana diblokir ketika membawa konten sensitif, perubahan tersembunyi atau salah dideskripsikan relatif terhadap apa yang Anda minta, konten yang diportasi dari luar repositori, atau dirutekan di sekitar tinjauan yang Anda minta366* Melakukan commit atau push perubahan yang akan mengirim rahasia atau data sensitif di luar repositori saat dijalankan, atau memperluas apa yang didedahkan deploy. Ini mencakup alur kerja CI atau konfigurasi deploy yang melewatkan rahasia ke tujuan yang belum menerimanya, skrip atau langkah penyiapan yang membaca penyimpanan rahasia dan mengirim data keluar, dan perubahan konfigurasi yang memperluas apa yang dipublikasikan deploy, seperti pengaturan registri, visibilitas, artefak, atau sourcemap. Pemeriksaan berlaku di cabang apa pun, berlaku bahkan ketika repositori bersifat publik, dan terbang ketika perubahan dilakukan commit atau didorong, terlepas dari apakah commit atau push itu memicu pipeline; menghapusnya memerlukan penamaan efek eksekusi, bukan hanya commit atau push. Sebelum v2.1.211, pemeriksaan ini dibatasi pada cabang default sebagai gantinya: push di sana diblokir ketika membawa konten sensitif, perubahan tersembunyi atau salah dideskripsikan relatif terhadap apa yang Anda minta, konten yang diportasi dari luar repositori, atau dirutekan di sekitar tinjauan yang Anda minta

367* `git reset --hard`, `git checkout -- .`, `git restore .`, `git clean -fd`, `git stash drop`, atau `git stash clear`, yang pengklasifikasi asumsikan akan membuang perubahan yang tidak dilakukan komit367* `git reset --hard`, `git checkout -- .`, `git restore .`, `git clean -fd`, `git stash drop`, atau `git stash clear`, yang pengklasifikasi asumsikan akan membuang perubahan yang tidak dilakukan commit

368* `git commit --amend` ketika komit di HEAD tidak dibuat dalam sesi ini368* `git commit --amend` ketika commit di HEAD tidak dibuat dalam sesi ini

369* Dari v2.1.198, `git commit --amend` ketika komit di HEAD sudah didorong. Reword hanya pesan tidak diblokir: `--amend -m` tanpa apa pun yang baru dipentaskan, pada komit yang dibuat Claude selama sesi ini369* Dari v2.1.198, `git commit --amend` ketika commit di HEAD sudah didorong. Reword hanya pesan tidak diblokir: `--amend -m` tanpa apa pun yang baru dipentaskan, pada commit yang dibuat Claude selama sesi ini

370* `terraform destroy`, `pulumi destroy`, `cdk destroy`, atau `terragrunt destroy`, dan menerapkan rencana yang menghancurkan sumber daya370* `terraform destroy`, `pulumi destroy`, `cdk destroy`, atau `terragrunt destroy`, dan menerapkan rencana yang menghancurkan sumber daya

371* Menulis ke pengelola rahasia, atau mengubah catatan DNS atau sertifikat TLS371* Menulis ke pengelola rahasia, atau mengubah catatan DNS atau sertifikat TLS

372* Menggabungkan permintaan tarik yang tidak ada manusia yang menyetujui, menyetujui permintaan tarik Claude sendiri, atau menonaktifkan pemeriksaan CI372* Menggabungkan permintaan tarik yang belum disetujui manusia, menyetujui permintaan tarik Claude sendiri, atau menonaktifkan pemeriksaan CI

373* Memposting komentar yang merupakan perintah itu sendiri untuk otomasi, seperti `atlantis apply` atau `/deploy` atau `/merge` bot373* Memposting komentar yang merupakan perintah itu sendiri untuk otomasi, seperti `atlantis apply` atau `/deploy` atau `/merge` bot

374* Mengalihkan, merampingkan, atau menghapus bendera fitur produksi374* Mengalihkan, merampingkan, atau menghapus bendera fitur produksi

375* Menerapkan perubahan infrastruktur ke cakupan IaC yang dilindungi, atau mengalirkan dan menghapus node cluster375* Menerapkan perubahan infrastruktur ke cakupan IaC yang dilindungi, atau mengalirkan dan menghapus node cluster

376* Menulis ke cluster komputasi bersama yang melampaui sumber daya yang Anda beri nama, seperti pemilih label atau `--all` yang menangkap pekerjaan pengguna lain376* Menulis ke cluster komputasi bersama yang melampaui sumber daya yang Anda beri nama, seperti pemilih label atau `--all` yang menangkap pekerjaan pengguna lain

377* Membuat sumber daya Kubernetes yang berjalan di setiap node atau mencegat lalu lintas cluster, seperti DaemonSets dan webhook penerimaan377* Membuat sumber daya Kubernetes yang berjalan di setiap node atau mencegat lalu lintas cluster, seperti DaemonSets dan webhook penerimaan

378* Shell interaktif atau port-forward ke target jarak jauh sensitif378* Shell interaktif atau port-forward ke target jarak jauh sensitif

379* Membuka terowongan atau shell terbalik yang membuat layanan lokal dapat diakses dari internet publik379* Membuka terowongan atau shell terbalik yang membuat layanan lokal dapat dijangkau dari internet publik

380* Mencetak kredensial atau token langsung ke transkrip atau file380* Mencetak kredensial atau token langsung ke transkrip atau file

381* Mengakses lokasi yang tercantum sebagai lokasi data sensitif dalam [lingkungan](/docs/id/auto-mode-config#define-trusted-infrastructure) Anda, atau menyalin data keluar dari satu. Mulai dari v2.1.198 ini juga memblokir pengiriman data dari satu ke audiens yang dikecualikan entri381* Mengakses lokasi yang tercantum sebagai lokasi data sensitif dalam [lingkungan](/docs/id/auto-mode-config#define-trusted-infrastructure) Anda, atau menyalin data keluar dari satu. Mulai dari v2.1.198 ini juga memblokir pengiriman data dari satu ke audiens yang entri kecualikan

382* Merutekan instalasi paket di sekitar registri paket internal Anda ke registri publik. Mulai dari v2.1.198, ini juga berlaku ketika Anda telah memberi tahu Claude bahwa registri internal atau cermin ada dalam percakapan, bukan hanya ketika satu tercantum dalam lingkungan Anda382* Merutekan instalasi paket di sekitar registri paket internal Anda ke registri publik. Mulai dari v2.1.198, ini juga berlaku ketika Anda telah memberi tahu Claude bahwa registri internal atau cermin ada dalam percakapan, bukan hanya ketika satu tercantum dalam lingkungan Anda

383* Menjalankan perintah dengan bendera yang melucuti penjaga keamanan, seperti `--insecure`383* Menjalankan perintah dengan bendera yang melucuti penjaga keamanan, seperti `--insecure`

384* Meluncurkan loop agen otonom yang berjalan tanpa persetujuan manusia atau sandbox, seperti yang dimulai dengan `--dangerously-skip-permissions` atau `--no-sandbox`. Mulai dari v2.1.198 ini juga mencakup menjalankan agen pihak ketiga atau harness eval dengan isolasi dan persetujuan per-tindakan dinonaktifkan, seperti runner yang dimulai dengan `--yes-always`384* Meluncurkan loop agen otonom yang berjalan tanpa persetujuan manusia atau sandbox, seperti yang dimulai dengan `--dangerously-skip-permissions` atau `--no-sandbox`. Mulai dari v2.1.198 ini juga mencakup menjalankan agen pihak ketiga atau harness eval dengan isolasi dan persetujuan per-tindakan dinonaktifkan, seperti runner yang dimulai dengan `--yes-always`

385* Tindakan browser [Claude di Chrome](/docs/id/chrome) yang dapat mengirim konten halaman, cookie, atau kredensial off-origin385* Tindakan browser [Claude in Chrome](/docs/id/chrome) yang dapat mengirim konten halaman, cookie, atau kredensial off-origin

386 386 

387Beberapa kategori ini bergantung pada entri [lingkungan](/docs/id/auto-mode-config#define-trusted-infrastructure), seperti target jarak jauh sensitif dan cakupan IaC yang dilindungi, yang dapat Anda sempit ke nama konkret.387Beberapa kategori ini bergantung pada entri [lingkungan](/docs/id/auto-mode-config#define-trusted-infrastructure), seperti target jarak jauh sensitif dan cakupan IaC yang dilindungi, yang dapat Anda sempit ke nama konkret.

388 388 

389Claude Code v2.1.198 dan lebih baru juga memblokir ini secara default:389Claude Code v2.1.198 dan lebih baru juga memblokir ini secara default:

390 390 

391* Menghapus file di `/tmp`, `$TMPDIR`, atau direktori goresan atau cache bersama lainnya dengan wildcard, glob, atau filter usia daripada jalur bernama spesifik391* Menghapus file di `/tmp`, `$TMPDIR`, atau direktori goresan atau cache bersama lainnya dengan wildcard, glob, atau filter usia daripada jalur bernama spesifik

392* Termasuk detail sensitif dalam konten yang dikirim, diunggah, dipublikasikan, atau ditulis ke orang lain atau sistem bersama, ketika pesan Anda sendiri tidak mengotorisasi detail tersebut untuk penerima itu. Badan PR dan masalah, pesan komit, dan komentar dihitung sebagai jenis konten keluar ini ketika repositori berada di luar batas kepercayaan atau publik, termasuk repositori publik organisasi Anda sendiri; jalur file internal, nama kode, data respons API langsung seperti email atau pengidentifikasi akun, dan pengidentifikasi infrastruktur dihitung sebagai detail sensitif. Cakupan PR, masalah, dan pesan komit memerlukan Claude Code v2.1.200 atau lebih baru. Data pribadi langsung dari respons API dalam badan PR atau masalah, seperti alamat email, pengidentifikasi akun atau organisasi, atau metrik penggunaan, memerlukan Anda untuk menyebutkan detail tersebut dan penerima terlepas dari visibilitas repositori atau batas kepercayaan. Pemeriksaan itu memerlukan Claude Code v2.1.203 atau lebih baru392* Termasuk detail sensitif dalam konten yang dikirim, diunggah, dipublikasikan, atau ditulis ke orang lain atau sistem bersama, ketika pesan Anda sendiri tidak mengotorisasi detail tersebut untuk penerima itu. Badan PR dan masalah, pesan commit, dan komentar dihitung sebagai jenis konten keluar ini ketika repositori berada di luar batas kepercayaan atau publik, termasuk repositori publik organisasi Anda sendiri; jalur file internal, nama kode, data respons API langsung seperti email atau pengidentifikasi akun, dan pengidentifikasi infrastruktur dihitung sebagai detail sensitif. Cakupan PR, masalah, dan pesan commit memerlukan Claude Code v2.1.200 atau lebih baru. Data pribadi langsung dari respons API dalam badan PR atau masalah, seperti alamat email, pengidentifikasi akun atau organisasi, atau metrik penggunaan, memerlukan Anda untuk menyebutkan detail tersebut dan penerima terlepas dari visibilitas repositori atau batas kepercayaan. Pemeriksaan itu memerlukan Claude Code v2.1.203 atau lebih baru

393* Mengirim keystroke ke pane tmux Claude Code sendiri untuk mendorong antarmukanya sendiri, yang pengklasifikasi perlakukan sebagai Claude mengubah izin atau pengawasannya sendiri393* Mengirim keystroke ke pane tmux Claude Code sendiri untuk mendorong antarmuka sendiri, yang pengklasifikasi perlakukan sebagai Claude mengubah izin atau pengawasannya sendiri

394 394 

395Claude Code v2.1.200 dan lebih baru juga memblokir ini secara default:395Claude Code v2.1.200 dan lebih baru juga memblokir ini secara default:

396 396 

397* Mengomentari, menghapus, atau memaksa lulus tes atau pernyataan yang menjaga perilaku keamanan, seperti auth, kontrol akses, validasi input, atau sandboxing397* Mengomentari, menghapus, atau force-passing tes atau pernyataan yang menjaga perilaku keamanan, seperti auth, kontrol akses, validasi input, atau sandboxing

398* Menghapus atau merobohkan sumber daya stateful yang tidak dibuat Claude dalam sesi, ketika tidak ada aturan penghapusan yang lebih spesifik berlaku dan Anda tidak menyebutkan sumber daya itu398* Menghapus atau merobohkan sumber daya stateful yang tidak dibuat Claude dalam sesi, ketika tidak ada aturan penghapusan yang lebih spesifik berlaku dan Anda tidak menyebutkan sumber daya itu

399* Menunjuk ulang URL dasar API, titik akhir proxy, penerima webhook, atau cermin registri ke host pihak ketiga yang tidak sesuai dengan tugas, termasuk dalam file contoh seperti `.env.example`399* Menunjuk ulang URL dasar API, endpoint proxy, penerima webhook, atau cermin registri ke host pihak ketiga yang tidak sesuai dengan tugas, termasuk dalam file contoh seperti `.env.example`

400* Mengubah ke mana dorong pergi dengan `git remote set-url` atau `git remote add`, kecuali Anda menyebutkan remote baru400* Mengubah ke mana push pergi dengan `git remote set-url` atau `git remote add`, kecuali Anda menyebutkan remote baru

401* Mendorong rahasia atau data pribadi atau terpercaya ke repositori yang diketahui publik, atau mendorong materi rahasia di sana yang bukan bagian dari pekerjaan repositori itu sendiri. Subjek materi repositori dotfiles itu sendiri adalah satu-satunya pengecualian untuk data pribadi atau terpercaya, dan konten dari repositori pribadi mencapai permukaan publik apa pun diblokir dengan cara yang sama; kedua penyempurnaan memerlukan Claude Code v2.1.203 atau lebih baru. Sebelum v2.1.203, data pribadi dikelompokkan dengan materi rahasia dan diblokir hanya ketika bukan bagian dari pekerjaan repositori itu sendiri. Ketika visibilitas repositori tidak ditetapkan, pengklasifikasi tidak memblokir itu saja; itu menilai konten terhadap aturan lain sebagai gantinya401* Mendorong rahasia atau data pribadi atau terpercaya ke repositori yang diketahui bersifat publik, atau mendorong materi rahasia di sana yang bukan bagian dari pekerjaan repositori itu sendiri. Materi pelajaran repositori dotfiles sendiri adalah satu-satunya pengecualian untuk data pribadi atau terpercaya, dan konten dari repositori pribadi mencapai permukaan publik apa pun diblokir dengan cara yang sama; kedua penyempurnaan memerlukan Claude Code v2.1.203 atau lebih baru. Sebelum v2.1.203, data pribadi dikelompokkan dengan materi rahasia dan diblokir hanya ketika bukan bagian dari pekerjaan repositori itu sendiri. Ketika visibilitas repositori tidak ditetapkan, pengklasifikasi tidak memblokir itu saja; itu menilai konten terhadap aturan lain sebagai gantinya

402* Membuka permintaan tarik terhadap repositori atau organisasi berbeda, bercabang dengan `gh repo fork`, atau mendorong ke repositori pihak ketiga, kecuali Anda menyebutkan target eksternal itu402* Membuka permintaan tarik terhadap repositori atau organisasi yang berbeda, forking dengan `gh repo fork`, atau mendorong ke repositori pihak ketiga, kecuali Anda menyebutkan target eksternal itu

403 403 

404Claude Code v2.1.203 dan lebih baru juga memblokir ini secara default:404Claude Code v2.1.203 dan lebih baru juga memblokir ini secara default:

405 405 

406* Konten dari penyimpanan lokal sensitif, atau dari file yang nama, jalur, atau jenisnya menandainya sebagai sensitif, memasuki komit, dorong, teks PR atau masalah, gist atau paste, atau publikasi paket, kecuali Anda menyebutkan sumber dan tujuan. Transkrip sesi dan log percakapan, folder dot kredensial dan konfigurasi seperti kunci SSH, kredensial cloud, profil browser, dan riwayat shell, dan ekspor data pengguna semuanya dihitung, dan repositori menjadi pribadi tidak menghapusnya406* Konten dari penyimpanan lokal sensitif, atau dari file yang nama, jalur, atau jenisnya menandainya sebagai sensitif, memasuki commit, push, teks PR atau masalah, gist atau paste, atau publikasi paket, kecuali Anda menyebutkan sumber dan tujuan. Transkrip sesi dan log percakapan, folder dot kredensial dan konfigurasi seperti kunci SSH, kredensial cloud, profil browser, dan riwayat shell, dan ekspor data pengguna semuanya dihitung, dan repositori menjadi pribadi tidak menghapusnya

407 407 

408Claude Code v2.1.205 dan lebih baru juga memblokir ini secara default:408Claude Code v2.1.205 dan lebih baru juga memblokir ini secara default:

409 409 

410* Menulis ke transkrip sesi Claude Code, file riwayat `.jsonl` di bawah `~/.claude/projects/` atau direktori konfigurasi Anda yang dikonfigurasi, baik secara langsung maupun melalui perintah shell. Aturan juga mencakup baris metadata yang ditambahkan Claude Code ke setiap entri transkrip untuk pemeriksaannya sendiri. Membaca transkrip tidak diblokir410* Menulis ke transkrip sesi Claude Code, file riwayat `.jsonl` di bawah `~/.claude/projects/` atau direktori konfigurasi Anda yang dikonfigurasi, baik secara langsung maupun melalui perintah shell. Aturan juga mencakup baris metadata yang Claude Code tambahkan ke setiap entri transkrip untuk pemeriksaannya sendiri. Membaca transkrip tidak diblokir

411* Penghapusan paksa rekursif seperti `rm -rf "$VAR"` atau `Remove-Item -Recurse -Force $dir` yang targetnya adalah variabel shell yang tidak ditetapkan di mana pun dalam percakapan yang dilihat pengklasifikasi, atau glob berakar pada variabel tersebut. Nilai datang hanya dari output perintah sebelumnya, yang tidak pernah diterima pengklasifikasi, jadi pengklasifikasi tidak dapat memverifikasi target penghapusan terhadap aturan penghapusan lainnya. Blok menghapus ketika Anda menyebutkan jalur pasti yang dihapus, atau ketika Claude menjalankan kembali penghapusan dengan jalur literal yang diselesaikan ditulis ke dalam perintah. Penghapusan yang targetnya dapat diselesaikan pengklasifikasi tidak terpengaruh.411* Penghapusan paksa rekursif seperti `rm -rf "$VAR"` atau `Remove-Item -Recurse -Force $dir` yang targetnya adalah variabel shell yang tidak ditetapkan di mana pun dalam percakapan yang dilihat pengklasifikasi, atau glob berakar pada variabel tersebut. Nilai datang hanya dari output perintah sebelumnya, yang tidak pernah diterima pengklasifikasi, jadi pengklasifikasi tidak dapat memverifikasi target penghapusan terhadap aturan penghapusan lainnya. Blok menghapus ketika Anda menyebutkan jalur pasti yang dihapus, atau ketika Claude menjalankan kembali penghapusan dengan jalur literal yang diselesaikan ditulis ke dalam perintah. Penghapusan yang target pengklasifikasi dapat selesaikan tidak terpengaruh.

412 412 

413 Glob langsung di bawah variabel, seperti dalam `rm -rf "$VAR"/*`, adalah [jalur kritis](#critical-paths) sebagai gantinya. Target `Remove-Item` yang merupakan `*` telanjang atau berakhir dalam `/*` atau `\*` tidak pernah mencapai pengklasifikasi: Claude Code [menolaknya langsung](#remove-item-in-powershell).413 Glob langsung di bawah variabel, seperti dalam `rm -rf "$VAR"/*`, adalah [jalur kritis](#critical-paths) sebagai gantinya. Target `Remove-Item` yang merupakan `*` telanjang atau berakhir dalam `/*` atau `\*` tidak pernah mencapai pengklasifikasi: Claude Code [menolaknya langsung](#remove-item-in-powershell).

414 414 

415Claude Code v2.1.257 dan lebih baru juga memblokir ini secara default:415Claude Code v2.1.257 dan lebih baru juga memblokir ini secara default:

416 416 

417* Meminta kredensial dari titik akhir metadata instans cloud, seperti `169.254.169.254`, atau secara eksplisit mengautentikasi panggilan cloud, cluster, atau registri dengan identitas akun layanan atau node mesin itu sendiri417* Meminta kredensial dari endpoint metadata instans cloud, seperti `169.254.169.254`, atau secara eksplisit mengautentikasi panggilan cloud, cluster, atau registri dengan identitas akun layanan atau node mesin itu sendiri

418* Menjangkau host publik dengan rute selain permintaan langsung, seperti terowongan, shell terbalik, atau konfigurasi resolver atau proxy yang ditulis ulang untuk menunjuk ke luar418* Menjangkau host publik dengan rute selain permintaan langsung, seperti terowongan, shell terbalik, atau konfigurasi resolver atau proxy yang ditulis ulang untuk menunjuk ke luar

419* Membaca kredensial yang dimiliki host daripada tugas Anda, seperti sertifikat node atau auth registri kontainer node419* Membaca kredensial yang dimiliki host daripada tugas Anda, seperti sertifikat node atau auth registri kontainer node

420* Menghubungkan ke atau memindai kontainer, pod, atau VM saudara yang tidak dimulai Claude, atau node di bawah kontainer420* Menghubungkan ke atau memindai kontainer saudara, pod, atau VM yang tidak dimulai Claude, atau node di bawah kontainer

421 421 

422Jika Claude Code berjalan di tempat yang dimaksudkan untuk memungkinkan salah satu dari ini, jelaskan pengaturan itu dalam entri [Host containment](/docs/id/auto-mode-config#define-trusted-infrastructure) dalam `autoMode.environment`.422Jika Claude Code berjalan di tempat yang dimaksudkan untuk memungkinkan salah satu dari ini, jelaskan pengaturan itu dalam entri [Host containment](/docs/id/auto-mode-config#define-trusted-infrastructure) dalam `autoMode.environment`.

423 423 

424Claude Code v2.1.261 dan lebih baru juga memblokir ini secara default:424Claude Code v2.1.261 dan lebih baru juga memblokir ini secara default:

425 425 

426* Memposting atau menulis tautan ke layanan paste, diagram, atau berbagi data publik dalam pesan, teks PR atau masalah, dokumen, atau di mana pun tautan akan dibuka atau diambil, ketika URL itu sendiri membawa konten yang dibagikan, kecuali Anda menyebutkan layanan itu426* Memposting atau menulis tautan ke layanan paste publik, diagram, atau berbagi data dalam pesan, teks PR atau masalah, dokumen, atau di mana pun tautan akan dibuka atau diambil, ketika URL itu sendiri membawa konten yang dibagikan, kecuali Anda menyebutkan layanan itu

427 427 

428**Diizinkan secara default**:428**Diizinkan secara default**:

429 429 

430* Operasi file lokal di direktori kerja Anda430* Operasi file lokal di direktori kerja Anda

431* Memasang dependensi yang dideklarasikan dalam file kunci atau manifes Anda431* Menginstal dependensi yang dideklarasikan dalam file kunci atau manifes Anda

432* Membaca `.env` dan mengirim kredensial ke API yang cocok432* Membaca `.env` dan mengirim kredensial ke API yang cocok

433* Permintaan HTTP hanya-baca433* Permintaan HTTP hanya-baca

434* Mendorong ke cabang apa pun dari repositori yang Anda kerjakan, termasuk cabang default. Cabang non-default yang nama menandainya sebagai target penerapan atau publikasi, seperti `production` atau `gh-pages`, tidak tercakup: pengklasifikasi menilai dorong di sana berdasarkan istilahnya sendiri. Konten dorong masih diperiksa terhadap aturan lain, [`permissions.deny` rules](/docs/id/permissions#manage-permissions) masih dapat memblokir perintah push [seperti yang ditulis](/docs/id/permissions#bash-rule-limits) dalam setiap mode, dan perlindungan cabang remote itu sendiri masih berlaku. Sebelum v2.1.211, hanya dorong ke cabang yang Anda mulai, cabang yang dibuat Claude, dan dorong rutin ke cabang default yang diizinkan secara default, dan sebelum v2.1.203 dorong langsung apa pun ke cabang default diblokir434* Mendorong ke cabang apa pun dari repositori yang Anda kerjakan, termasuk cabang default. Cabang non-default yang nama menandainya sebagai target deploy atau publikasi, seperti `production` atau `gh-pages`, tidak tercakup: pengklasifikasi menilai push di sana berdasarkan istilahnya sendiri. Konten push masih diperiksa terhadap aturan lain, [`permissions.deny` rules](/docs/id/permissions#manage-permissions) masih dapat memblokir perintah push [seperti yang ditulis](/docs/id/permissions#bash-rule-limits) dalam setiap mode, dan perlindungan cabang remote itu sendiri masih berlaku. Sebelum v2.1.211, hanya push ke cabang yang Anda mulai, cabang yang dibuat Claude, dan push rutin ke cabang default yang diizinkan secara default, dan sebelum v2.1.203 push langsung apa pun ke cabang default diblokir

435* Menghapus pekerjaan pasti yang dibuat Claude sebelumnya dalam sesi yang sama435* Menghapus pekerjaan yang tepat dibuat Claude sebelumnya dalam sesi yang sama

436* Membaca, meninjau, atau menulis kode, konfigurasi, dan model ancaman terkait keamanan sebagai bagian dari tugas Anda436* Membaca, meninjau, atau menulis kode, konfigurasi, dan model ancaman terkait keamanan sebagai bagian dari tugas Anda

437* Pesan antara agen yang bekerja bersama dalam sesi multi-agen yang sama437* Pesan antara agen yang bekerja bersama dalam sesi multi-agen yang sama

438* Mengirim data ke domain terpercaya, bucket, dan layanan yang Anda daftarkan dalam [`environment`](/docs/id/auto-mode-config#define-trusted-infrastructure). Ini mencakup aliran data saja, bukan operasi destruktif atau kredensial pada infrastruktur yang sama438* Mengirim data ke domain terpercaya, bucket, dan layanan yang Anda daftar dalam [`environment`](/docs/id/auto-mode-config#define-trusted-infrastructure). Ini mencakup aliran data saja, bukan operasi destruktif atau kredensial pada infrastruktur yang sama

439* [Claude di Chrome](/docs/id/chrome) navigasi ke domain internal terpercaya, localhost, atau URL yang Anda beri nama439* [Claude in Chrome](/docs/id/chrome) navigasi ke domain internal terpercaya, localhost, atau URL yang Anda beri nama

440 440 

441Perintah sandboxed tidak mendapatkan akses jaringan secara default. Claude menyebutkan host yang dibutuhkan perintah pada perintah itu sendiri, pengklasifikasi meninjau mereka dengan perintah, dan daftar yang disetujui membuka host tersebut untuk perintah itu saja. [Domain yang diizinkan per-perintah](/docs/id/sandboxing#per-command-allowed-domains-in-auto-mode) mencakup apa yang dapat dan tidak dapat dibuka daftar dan apa yang terjadi ketika perintah mencapai host yang tidak terdaftar.441Perintah sandboxed tidak mendapatkan akses jaringan secara default. Claude menyebutkan host yang dibutuhkan perintah pada perintah itu sendiri, pengklasifikasi meninjau mereka dengan perintah, dan daftar yang disetujui membuka host tersebut untuk perintah itu saja. [Domain yang diizinkan per-perintah](/docs/id/sandboxing#per-command-allowed-domains-in-auto-mode) mencakup apa yang dapat dan tidak dapat dibuka daftar dan apa yang terjadi ketika perintah mencapai host yang tidak terdaftar.

442 442 

443Jalankan `claude auto-mode defaults` untuk mencetak daftar aturan lengkap sebagai JSON. Jika tindakan rutin diblokir, administrator dapat menambahkan repo terpercaya, bucket, dan layanan melalui pengaturan `autoMode.environment`: lihat [Konfigurasi mode otomatis](/docs/id/auto-mode-config).443Jalankan `claude auto-mode defaults` untuk mencetak daftar aturan lengkap sebagai JSON. Jika tindakan rutin diblokir, administrator dapat menambahkan repo terpercaya, bucket, dan layanan melalui pengaturan `autoMode.environment`: lihat [Konfigurasi mode otomatis](/docs/id/auto-mode-config).

444 444 

445Mendorong ke cabang apa pun dari repositori yang Anda kerjakan dan membuat permintaan tarik yang cocok dengan permintaan Anda berjalan tanpa permintaan, kecuali dorong atau permintaan tarik jatuh di bawah [daftar diblokir](#what-the-classifier-blocks-by-default), seperti rahasia atau data sensitif meninggalkan repositori, atau permintaan tarik yang menargetkan repositori atau organisasi berbeda. Untuk memerlukan checkpoint manusia sebelum perintah ini sambil tetap dalam mode otomatis, tambahkan aturan `permissions.ask`, yang cocok dengan perintah [seperti yang ditulis](/docs/id/permissions#bash-rule-limits): lihat [Batas umum](/docs/id/auto-mode-config#common-boundaries).445Mendorong ke cabang apa pun dari repositori yang Anda kerjakan dan membuat permintaan tarik yang cocok dengan permintaan Anda berjalan tanpa prompt, kecuali push atau permintaan tarik jatuh di bawah [daftar diblokir](#what-the-classifier-blocks-by-default), seperti rahasia atau data sensitif meninggalkan repositori, atau permintaan tarik yang menargetkan repositori atau organisasi yang berbeda. Untuk memerlukan checkpoint manusia sebelum perintah ini sambil tetap dalam mode otomatis, tambahkan aturan `permissions.ask`, yang cocok dengan perintah [seperti yang ditulis](/docs/id/permissions#bash-rule-limits): lihat [Batas umum](/docs/id/auto-mode-config#common-boundaries).

446 446 

447<h3 id="first-read-outside-the-working-directories">447<h3 id="first-read-outside-the-working-directories">

448 Pembacaan pertama di luar direktori kerja448 Pembacaan pertama di luar direktori kerja

449</h3>449</h3>

450 450 

451Sementara [`permissions.blockReadsOutsideWorkingDirectories`](/docs/id/settings-reference#permissions-blockreadsoutsideworkingdirectories) dimatikan, pembacaan file berjalan tanpa permintaan dalam mode otomatis, termasuk pembacaan di luar [direktori kerja](/docs/id/permissions#working-directories). Pertama kali Claude menggunakan alat Read, Grep, atau Glob pada jalur di luar mereka, Claude Code menanyakan apakah akan memungkinkan pembacaan itu.451Sementara [`permissions.blockReadsOutsideWorkingDirectories`](/docs/id/settings-reference#permissions-blockreadsoutsideworkingdirectories) mati, pembacaan file berjalan tanpa prompt dalam mode otomatis, termasuk pembacaan di luar [direktori kerja](/docs/id/permissions#working-directories). Pertama kali Claude menggunakan alat Read, Grep, atau Glob pada jalur di luar mereka, Claude Code menanyakan apakah akan memungkinkan pembacaan itu.

452 452 

453Permintaan tidak muncul dalam `-p` non-interaktif berjalan atau sesi latar belakang; pembacaan di sana berjalan seperti sebelumnya.453Prompt tidak muncul dalam `-p` non-interaktif berjalan atau sesi latar belakang; pembacaan di sana berjalan seperti sebelumnya.

454 454 

455Apa pun yang Anda jawab, Claude terus bekerja:455Apa pun yang Anda jawab, Claude terus bekerja:

456 456 

457* **Ya, dan terus izinkan pembacaan apa pun di luar direktori kerja**: pembacaan berjalan, pembacaan kemudian di luar direktori kerja berjalan seperti sebelumnya, dan Claude Code mencatat jawaban Anda sehingga permintaan tidak muncul lagi457* **Ya, dan terus izinkan pembacaan apa pun di luar direktori kerja**: pembacaan berjalan, pembacaan kemudian di luar direktori kerja berjalan seperti sebelumnya, dan Claude Code mencatat jawaban Anda sehingga prompt tidak muncul lagi

458* **Tidak, dan blokir pembacaan di luar direktori kerja mulai sekarang**: pembacaan ditolak, dan Claude Code menetapkan [`permissions.blockReadsOutsideWorkingDirectories`](/docs/id/settings-reference#permissions-blockreadsoutsideworkingdirectories) ke `true` dalam pengaturan pengguna Anda, yang membuat alat file menolak pembacaan tersebut dalam setiap sesi kemudian dan setiap mode izin. Untuk membiarkan Claude membaca jalur tersebut nanti, tambahkan direktorinya dengan `/add-dir` atau hapus pengaturan.458* **Tidak, dan blokir pembacaan di luar direktori kerja mulai sekarang**: pembacaan ditolak, dan Claude Code menetapkan [`permissions.blockReadsOutsideWorkingDirectories`](/docs/id/settings-reference#permissions-blockreadsoutsideworkingdirectories) ke `true` dalam pengaturan pengguna Anda, yang membuat alat file menolak pembacaan tersebut dalam setiap sesi kemudian dan setiap mode izin. Untuk membiarkan Claude membaca jalur tersebut nanti, tambahkan direktorinya dengan `/add-dir` atau hapus pengaturan.

459* **Tidak, dan tanya lagi lain kali**: pembacaan ditolak, dan pembacaan berikutnya di luar direktori kerja meminta lagi459* **Tidak, dan tanya lagi lain kali**: pembacaan ditolak, dan pembacaan berikutnya di luar direktori kerja menanyakan lagi

460* **Ya, tetapi tanya lagi lain kali**: pembacaan berjalan, tidak ada yang disimpan, dan pembacaan berikutnya di luar direktori kerja meminta lagi460* **Ya, tetapi tanya lagi lain kali**: pembacaan berjalan, tidak ada yang disimpan, dan pembacaan berikutnya di luar direktori kerja menanyakan lagi

461 461 

462<h3 id="boundaries-you-state-in-conversation">462<h3 id="boundaries-you-state-in-conversation">

463 Batas yang Anda nyatakan dalam percakapan463 Batas yang Anda nyatakan dalam percakapan

464</h3>464</h3>

465 465 

466Pengklasifikasi memperlakukan batas yang Anda nyatakan dalam percakapan sebagai sinyal blok. Jika Anda memberi tahu Claude "jangan dorong" atau "tunggu sampai saya meninjau sebelum menerapkan", pengklasifikasi memblokir tindakan yang cocok bahkan ketika aturan default akan memungkinkan mereka. Batas tetap berlaku sampai Anda mengangkatnya dalam pesan kemudian. Penilaian Claude sendiri bahwa kondisi terpenuhi tidak mengangkatnya.466Pengklasifikasi memperlakukan batas yang Anda nyatakan dalam percakapan sebagai sinyal blok. Jika Anda memberi tahu Claude "jangan push" atau "tunggu sampai saya meninjau sebelum deploy", pengklasifikasi memblokir tindakan yang cocok bahkan ketika aturan default akan memungkinkannya. Batas tetap berlaku sampai Anda mengangkatnya dalam pesan kemudian. Penilaian Claude sendiri bahwa kondisi terpenuhi tidak mengangkatnya.

467 467 

468Batas tidak disimpan sebagai aturan. Pengklasifikasi membaca ulang mereka dari transkrip pada setiap pemeriksaan, jadi batas dapat hilang jika [pemadatan konteks](/docs/id/costs#reduce-token-usage) menghapus pesan yang menyatakannya. Untuk jaminan keras, tambahkan [aturan deny](/docs/id/permissions#permission-rule-syntax) sebagai gantinya.468Batas tidak disimpan sebagai aturan. Pengklasifikasi membaca ulang mereka dari transkrip pada setiap pemeriksaan, jadi batas dapat hilang jika [pemadatan konteks](/docs/id/costs#reduce-token-usage) menghapus pesan yang menyatakannya. Untuk jaminan keras, tambahkan [aturan deny](/docs/id/permissions#permission-rule-syntax) sebagai gantinya.

469 469 


471 Persetujuan yang Anda nyatakan dalam percakapan471 Persetujuan yang Anda nyatakan dalam percakapan

472</h3>472</h3>

473 473 

474Jika Anda memberi tahu Claude bahwa tindakan yang diblokir diizinkan, pengklasifikasi membaca itu sebagai persetujuan Anda dan dapat menghapus blok. Cara Anda merumuskannya menentukan apakah tindakan berjalan, dan seberapa jauh persetujuan mencapai:474Jika Anda memberi tahu Claude bahwa tindakan yang diblokir diizinkan, pengklasifikasi membaca itu sebagai persetujuan Anda dan dapat menghapus blok. Cara Anda merumuskannya memutuskan apakah tindakan berjalan, dan seberapa jauh persetujuan mencapai:

475 475 

476* **Beri nama tindakan dan spesifikasinya**: pesan Anda harus menyebutkan tindakan dan hal spesifik yang membuatnya berbahaya, seperti cabang dorong paksa. Menyebutkan verba saja tidak menghapus apa pun, jadi "Anda dapat dorong paksa" membiarkan blok tetap ada.476* **Beri nama tindakan dan spesifikasinya**: pesan Anda harus menyebutkan tindakan dan hal spesifik yang membuatnya berbahaya, seperti cabang force push. Penamaan verba saja tidak menghapus apa pun, jadi "Anda dapat force-push" membiarkan blok tetap ada.

477* **Harapkan itu mencakup satu tindakan**: persetujuan mencakup tindakan destruktif yang Anda beri nama, jadi tindakan kemudian diblokir lagi kecuali Anda memberikan persetujuan sebagai berdiri. Untuk berhenti menyetujui pola rutin satu tindakan pada satu waktu, tambahkan ke [`autoMode.allow`](/docs/id/auto-mode-config#override-the-block-and-allow-rules).477* **Harapkan itu mencakup satu tindakan**: persetujuan mencakup tindakan destruktif yang Anda beri nama, jadi tindakan kemudian diblokir lagi kecuali Anda memberikan persetujuan sebagai berdiri. Untuk berhenti menyetujui pola rutin satu tindakan pada satu waktu, tambahkan ke [`autoMode.allow`](/docs/id/auto-mode-config#override-the-block-and-allow-rules).

478* **Beberapa blok tetap ada**: [urutan preseden pengklasifikasi](/docs/id/auto-mode-config#override-the-block-and-allow-rules) menetapkan blok mana yang dapat dicapai persetujuan Anda. Untuk menjalankan langkah yang tidak akan dihapus, [tinggalkan mode otomatis](#switch-permission-modes) dan jawab permintaan izin.478* **Beberapa blok tetap ada**: [urutan preseden pengklasifikasi](/docs/id/auto-mode-config#override-the-block-and-allow-rules) menetapkan blok mana yang dapat dijangkau persetujuan Anda. Untuk menjalankan langkah yang tidak akan dihapus, [tinggalkan mode otomatis](#switch-permission-modes) dan jawab prompt izin.

479 479 

480<h3 id="when-auto-mode-falls-back">480<h3 id="when-auto-mode-falls-back">

481 Ketika mode otomatis kembali481 Ketika mode otomatis kembali


484Ketika mode otomatis tidak dapat menyetujui tindakan sesi Anda, apa yang terjadi tergantung pada kasusnya:484Ketika mode otomatis tidak dapat menyetujui tindakan sesi Anda, apa yang terjadi tergantung pada kasusnya:

485 485 

486* **Tindakan yang diblokir**: Claude Code menampilkan pemberitahuan dan mencantumkan tindakan dalam `/permissions` di bawah tab **Recently denied**, di mana Anda dapat menekan `r` untuk mencoba lagi dengan persetujuan manual.486* **Tindakan yang diblokir**: Claude Code menampilkan pemberitahuan dan mencantumkan tindakan dalam `/permissions` di bawah tab **Recently denied**, di mana Anda dapat menekan `r` untuk mencoba lagi dengan persetujuan manual.

487* **Blok berulang**: jika pengklasifikasi memblokir tindakan 3 kali berturut-turut atau 20 kali total, mode otomatis berhenti dan Claude Code melanjutkan permintaan. Menyetujui tindakan yang diminta melanjutkan mode otomatis. Lihat [Ambang blok berulang](#repeated-block-thresholds) untuk cara blok dihitung.487* **Blok berulang**: jika pengklasifikasi memblokir tindakan 3 kali berturut-turut atau 20 kali total, mode otomatis jeda dan Claude Code melanjutkan prompting. Menyetujui tindakan yang diminta melanjutkan mode otomatis. Lihat [Ambang blok berulang](#repeated-block-thresholds) untuk cara blok dihitung.

488* **Tidak ada putusan dari pengklasifikasi**: ketika pemeriksaan keamanan terpisah dari mode otomatis menolak permintaan pengklasifikasi sendiri, atau respons pengklasifikasi tidak diuraikan, Claude Code menolak tindakan tanpa pemberitahuan atau entri **Recently denied**. Lihat [Mode otomatis tidak dapat menentukan keamanan tindakan](/docs/id/errors#auto-mode-cannot-determine-the-safety-of-an-action) untuk pesan setiap kasus menunjukkan dan apa yang harus dilakukan.488* **Tidak ada vonis dari pengklasifikasi**: ketika pemeriksaan keamanan terpisah dari mode otomatis menolak permintaan pengklasifikasi sendiri, atau respons pengklasifikasi tidak diuraikan, Claude Code menolak tindakan tanpa pemberitahuan atau entri **Recently denied**. Lihat [Mode otomatis tidak dapat menentukan keamanan tindakan](/docs/id/errors#auto-mode-cannot-determine-the-safety-of-an-action) untuk pesan setiap kasus menunjukkan dan apa yang harus dilakukan.

489* **Tidak ada putusan dari server**: di bawah [tinjauan pengklasifikasi sisi server](#server-side-classifier-review), Claude Code menolak tindakan yang server tidak memberikan putusan, dan menghentikan giliran setelah sepuluh respons berturut-turut tanpa putusan. Lihat [Server tidak mengembalikan putusan keamanan](/docs/id/errors#the-server-returned-no-safety-verdict).489* **Tidak ada vonis dari server**: di bawah [tinjauan pengklasifikasi sisi server](#server-side-classifier-review), Claude Code menolak tindakan yang server tidak memberikan vonis, dan menghentikan giliran setelah sepuluh respons berturut-turut tanpa vonis. Lihat [Server tidak mengembalikan vonis keamanan](/docs/id/errors#the-server-returned-no-safety-verdict).

490* **Beralih mode selama pemeriksaan**: jika Anda beralih mode izin saat pemeriksaan pengklasifikasi tertunda, Claude Code membuang putusan yang mode baru tidak akan diminta. Anda diminta untuk persetujuan sebagai gantinya, atau tindakan ditolak otomatis dalam [mode `dontAsk`](#allow-only-pre-approved-tools-with-dontask-mode).490* **Beralih mode selama pemeriksaan**: jika Anda beralih mode izin saat pemeriksaan pengklasifikasi tertunda, Claude Code membuang vonis yang mode baru tidak akan diminta. Anda diminta untuk persetujuan sebagai gantinya, atau tindakan ditolak otomatis dalam [mode `dontAsk`](#allow-only-pre-approved-tools-with-dontask-mode).

491 491 

492<h4 id="repeated-block-thresholds">492<h4 id="repeated-block-thresholds">

493 Ambang blok berulang493 Ambang blok berulang


495 495 

496Ambang 3 blok berturut-turut dan 20 blok total tidak dapat dikonfigurasi. Penghitung total bertahan untuk sesi dan direset hanya ketika batasnya sendiri memicu fallback. Claude Code tidak menghitung penolakan terhadap ambang mana pun ketika pemeriksaan keamanan terpisah dari mode otomatis menolak permintaan pengklasifikasi sendiri.496Ambang 3 blok berturut-turut dan 20 blok total tidak dapat dikonfigurasi. Penghitung total bertahan untuk sesi dan direset hanya ketika batasnya sendiri memicu fallback. Claude Code tidak menghitung penolakan terhadap ambang mana pun ketika pemeriksaan keamanan terpisah dari mode otomatis menolak permintaan pengklasifikasi sendiri.

497 497 

498Jalankan `-p` [non-interaktif](/docs/id/headless) tanpa [`--permission-prompt-tool`](/docs/id/cli-reference#cli-flags) tidak memiliki permintaan untuk kembali. Ketika blok berulang mencapai ambang, tindakan tidak berjalan dan Claude terus bekerja. Claude Code tidak menghentikan jalankan.498Jalankan `-p` [non-interaktif](/docs/id/headless) tanpa [`--permission-prompt-tool`](/docs/id/cli-reference#cli-flags) tidak memiliki prompt untuk kembali. Ketika blok berulang mencapai ambang, tindakan tidak berjalan dan Claude terus bekerja. Claude Code tidak menghentikan jalannya.

499 499 

500Blok berulang biasanya berarti pengklasifikasi kehilangan konteks tentang infrastruktur Anda. Gunakan `/feedback` untuk melaporkan positif palsu, atau biarkan administrator [mengonfigurasi infrastruktur terpercaya](/docs/id/auto-mode-config).500Blok berulang biasanya berarti pengklasifikasi kehilangan konteks tentang infrastruktur Anda. Gunakan `/feedback` untuk melaporkan positif palsu, atau biarkan administrator [mengonfigurasi infrastruktur terpercaya](/docs/id/auto-mode-config).

501 501 


512 Setiap tindakan melalui urutan keputusan tetap. Langkah pertama yang cocok menang:512 Setiap tindakan melalui urutan keputusan tetap. Langkah pertama yang cocok menang:

513 513 

514 1. Tindakan yang cocok dengan [aturan allow, ask, atau deny](/docs/id/permissions#manage-permissions) Anda diselesaikan segera, dengan pengecualian ini:514 1. Tindakan yang cocok dengan [aturan allow, ask, atau deny](/docs/id/permissions#manage-permissions) Anda diselesaikan segera, dengan pengecualian ini:

515 * Penulisan ke [jalur yang dilindungi](#protected-paths) rute ke pengklasifikasi bahkan ketika aturan allow cocok515 * Menulis ke [jalur yang dilindungi](#protected-paths) rute ke pengklasifikasi bahkan ketika aturan allow cocok

516 * Tidak ada aturan allow yang menyetujui penghapusan `rm` dan `rmdir` yang menargetkan [jalur kritis](#critical-paths)516 * Tidak ada aturan allow yang menyetujui penghapusan `rm` dan `rmdir` yang menargetkan [jalur kritis](#critical-paths)

517 * Alat MCP yang ditandai [`requiresUserInteraction`](/docs/id/mcp#require-approval-for-a-specific-tool) meminta Anda langsung bahkan ketika aturan allow cocok, dan begitu juga alat konektor [organisasi Anda atur ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools) dalam sesi di mana pengaturan itu mencapai Claude Code517 * Alat MCP yang ditandai [`requiresUserInteraction`](/docs/id/mcp#require-approval-for-a-specific-tool) memberi Anda prompt langsung bahkan ketika aturan allow cocok, dan begitu juga alat konektor [organisasi Anda atur ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools) dalam sesi di mana pengaturan itu mencapai Claude Code

518 * Perintah shell yang membawa [domain yang diizinkan per-perintah](/docs/id/sandboxing#per-command-allowed-domains-in-auto-mode) juga rute ke pengklasifikasi bahkan ketika aturan allow cocok, karena aturan menyetujui perintah, bukan hostnya518 * Perintah shell yang membawa [domain yang diizinkan per-perintah](/docs/id/sandboxing#per-command-allowed-domains-in-auto-mode) juga rute ke pengklasifikasi bahkan ketika aturan allow cocok, karena aturan menyetujui perintah, bukan hostnya

519 * Aturan ask yang cocok pada konten perintah, seperti `Bash(git push *)`, kembali ke permintaan izin519 * Aturan ask yang cocok pada konten perintah, seperti `Bash(git push *)`, kembali ke prompt izin

520 * Penulisan yang [pemeriksaan symlink](/docs/id/permissions#symlinks) selesaikan ke jalur yang dilindungi meminta Anda ketika jalur yang diminta Claude bukan itu sendiri dilindungi520 * Penulisan yang [pemeriksaan symlink](/docs/id/permissions#symlinks) selesaikan ke jalur yang dilindungi memberi Anda prompt ketika jalur yang diminta Claude bukan itu sendiri dilindungi

521 2. Tindakan hanya-baca dan pengeditan file di direktori kerja Anda disetujui otomatis, kecuali penulisan ke [jalur yang dilindungi](#protected-paths) dan [pembacaan pertama di luar direktori kerja](#first-read-outside-the-working-directories), yang meminta Anda521 2. Tindakan hanya-baca dan pengeditan file di direktori kerja Anda disetujui otomatis, kecuali penulisan ke [jalur yang dilindungi](#protected-paths) dan [pembacaan pertama di luar direktori kerja](#first-read-outside-the-working-directories), yang memberi Anda prompt

522 * Dalam sesi dengan [tinjauan pengklasifikasi sisi server](#server-side-classifier-review), perintah hanya-baca dan [sandboxed](/docs/id/sandboxing#sandbox-modes) shell menunggu tinjauan itu dan diblokir jika itu menandainya522 * Dalam sesi dengan [tinjauan pengklasifikasi sisi server](#server-side-classifier-review), perintah hanya-baca dan [sandboxed](/docs/id/sandboxing#sandbox-modes) shell menunggu tinjauan itu dan diblokir jika itu menandainya

523 * Penulisan di dalam direktori kerja Anda yang [pemeriksaan symlink](/docs/id/permissions#symlinks) selesaikan ke lokasi di luar itu meminta Anda523 * Penulisan di dalam direktori kerja Anda yang [pemeriksaan symlink](/docs/id/permissions#symlinks) selesaikan ke lokasi di luar itu memberi Anda prompt

524 3. Semuanya yang lain pergi ke pengklasifikasi, terlepas dari [penghapusan jalur kritis](#critical-paths) di bawah penanganan default mereka. Alat konektor dan `requiresUserInteraction` alat MCP yang meminta Anda langsung dalam langkah 1 tidak pernah mencapai pengklasifikasi baik, jadi baik persetujuan yang diperlukan org maupun langkah persetujuan tidak disetujui otomatis524 3. Semuanya yang lain pergi ke pengklasifikasi, terlepas dari [penghapusan jalur kritis](#critical-paths) di bawah penanganan default mereka. Alat konektor dan `requiresUserInteraction` alat MCP yang memberi Anda prompt langsung dalam langkah 1 tidak pernah mencapai pengklasifikasi juga, jadi baik persetujuan yang diperlukan org maupun langkah persetujuan tidak disetujui otomatis

525 4. Jika pengklasifikasi memblokir, Claude menerima alasan. Dalam sebagian besar sesi alasan menyebutkan aturan yang cocok pengklasifikasi, seperti `[Data Exfiltration]`, daripada memberikan penjelasan tertulis; lihat [Tinjauan penolakan](/docs/id/auto-mode-config#review-denials)525 4. Jika pengklasifikasi memblokir, Claude menerima alasannya. Dalam sebagian besar sesi alasan menyebutkan aturan yang cocok pengklasifikasi, seperti `[Data Exfiltration]`, daripada memberikan penjelasan tertulis; lihat [Tinjauan penolakan](/docs/id/auto-mode-config#review-denials)

526 526 

527 Saat memasuki mode otomatis, aturan allow luas yang memberikan eksekusi kode sewenang-wenang dijatuhkan:527 [Mod](/docs/id/plugins/mods/overview) yang Anda instal yang hook `tool.check` dapat menyetujui tindakan sebelum langkah 3, dan pengklasifikasi tidak memeriksa tindakan yang mod setujui. Lihat [Perluas izin dengan hook](/docs/id/permissions#extend-permissions-with-hooks).

528 

529 Saat memasuki mode otomatis, aturan allow luas yang memberikan eksekusi kode arbitrer dijatuhkan:

528 530 

529 * Blanket `Bash(*)` atau `PowerShell(*)`531 * Blanket `Bash(*)` atau `PowerShell(*)`

530 * Interpreter yang diberi wildcard seperti `Bash(python*)`532 * Interpreter yang diberi wildcard seperti `Bash(python*)`


532 * Aturan `Agent` allow534 * Aturan `Agent` allow

533 * [`Monitor`](/docs/id/tools-reference#monitor-tool) aturan allow, karena Claude Code menjalankan perintah Monitor melalui shell535 * [`Monitor`](/docs/id/tools-reference#monitor-tool) aturan allow, karena Claude Code menjalankan perintah Monitor melalui shell

534 536 

535 Aturan sempit seperti `Bash(npm test)` tetap berlaku. Claude Code mengembalikan aturan yang dijatuhkan ketika Anda meninggalkan mode otomatis. Sebelum v2.1.236, Claude Code meninggalkan aturan `Monitor` allow berlaku dalam mode otomatis, jadi aturan yang cocok dengan seluruh alat menyetujui perintah Monitor tanpa tinjauan pengklasifikasi.537 Aturan sempit seperti `Bash(npm test)` tetap berlaku. Claude Code mengembalikan aturan yang dijatuhkan ketika Anda meninggalkan mode otomatis. Sebelum v2.1.236, Claude Code membiarkan aturan `Monitor` allow berlaku dalam mode otomatis, jadi aturan yang cocok dengan seluruh alat menyetujui perintah Monitor tanpa tinjauan pengklasifikasi.

536 538 

537 Claude Code juga menjalankan `git status` itu sendiri sebelum perintah yang akan membuang pekerjaan yang tidak dilakukan komit, seperti `git reset --hard` atau `rm -rf`, dan menunjukkan pengklasifikasi apakah pekerjaan bertahap, dimodifikasi, atau tidak dilacak ada. Claude Code melaporkan file yang tidak dilacak dalam pemeriksaan itu bahkan ketika konfigurasi git repositori menetapkan `status.showUntrackedFiles=no`.539 Claude Code juga menjalankan `git status` itu sendiri sebelum perintah yang akan membuang pekerjaan yang tidak dilakukan commit, seperti `git reset --hard` atau `rm -rf`, dan menunjukkan pengklasifikasi apakah pekerjaan bertahap, dimodifikasi, atau tidak dilacak ada. Claude Code melaporkan file yang tidak dilacak dalam pemeriksaan itu bahkan ketika konfigurasi git repositori menetapkan `status.showUntrackedFiles=no`.

538 540 

539 Dalam permintaan pengklasifikasi yang dikirim oleh Claude Code itu sendiri, pengklasifikasi melihat pesan pengguna, panggilan alat selain pencarian hanya-baca seperti pembacaan file dan pencarian, dan konten CLAUDE.md Anda. Hasil alat dilepas dari permintaan tersebut, jadi konten bermusuhan dalam file atau halaman web tidak dapat memanipulasi pengklasifikasi secara langsung.541 Dalam permintaan pengklasifikasi yang dikirim Claude Code itu sendiri, pengklasifikasi melihat pesan pengguna, panggilan alat selain pencarian hanya-baca seperti pembacaan file dan pencarian, dan konten CLAUDE.md Anda. Hasil alat dilepas dari permintaan tersebut, jadi konten bermusuhan dalam file atau halaman web tidak dapat memanipulasi pengklasifikasi secara langsung.

540 542 

541 Anda dapat memberi anotasi hasil panggilan dengan [field `classifierContext` hook PostToolUse](/docs/id/hooks#annotate-a-result-for-the-auto-mode-classifier), yang dibaca pengklasifikasi sebagai konteks yang disediakan aplikasi. Field memerlukan Claude Code v2.1.236 atau lebih baru.543 Anda dapat memberi anotasi hasil panggilan dengan [field `classifierContext` hook PostToolUse](/docs/id/hooks#annotate-a-result-for-the-auto-mode-classifier), yang dibaca pengklasifikasi sebagai konteks yang disediakan aplikasi. Field memerlukan Claude Code v2.1.236 atau lebih baru.

542 544 


552 </Accordion>554 </Accordion>

553 555 

554 <Accordion title="Biaya dan latensi">556 <Accordion title="Biaya dan latensi">

555 Pengklasifikasi berjalan pada Claude Sonnet 5 secara default daripada pada pilihan `/model` Anda. Model pengklasifikasi yang dikonfigurasi Anthropic sisi server mengambil alih default itu. Ketika model sesi Anda adalah Claude Sonnet 4.6, atau ketika [`availableModels`](/docs/id/model-config#restrict-model-selection) mengecualikan Sonnet 5, pengklasifikasi berjalan pada model sesi sebagai gantinya, atau pada model Opus ketika sesi berjalan pada [model Fable](/docs/id/model-config#work-with-fable); di penyedia selain API Anthropic, fallback Opus itu adalah model Opus default penyedia.557 Pengklasifikasi berjalan pada Claude Sonnet 5 secara default daripada pada pilihan `/model` Anda. Model pengklasifikasi yang dikonfigurasi Anthropic sisi server mengambil preseden atas default itu. Ketika model sesi Anda adalah Claude Sonnet 4.6, atau ketika [`availableModels`](/docs/id/model-config#restrict-model-selection) mengecualikan Sonnet 5, pengklasifikasi berjalan pada model sesi sebagai gantinya, atau pada model Opus ketika sesi berjalan pada [model Fable](/docs/id/model-config#work-with-fable); pada penyedia selain Anthropic API, fallback Opus itu adalah model Opus default penyedia.

556 558 

557 Permintaan mode otomatis pertama sesi memvalidasi default Sonnet 5: jika permintaan berhasil, Sonnet 5 tetap model pengklasifikasi sesi, dan jika gagal karena model tidak tersedia, sesi menggunakan fallback sebagai gantinya. Setelah validasi itu diselesaikan, model pengklasifikasi tidak berubah untuk sesi.559 Permintaan mode otomatis pertama sesi memvalidasi default Sonnet 5: jika permintaan berhasil, Sonnet 5 tetap model pengklasifikasi sesi, dan jika gagal karena model tidak tersedia, sesi menggunakan fallback sebagai gantinya.

558 560 

559 Pada paket Enterprise dan di akun yang menggunakan Claude API, [Claude Platform di AWS](/docs/id/claude-platform-on-aws), Amazon Bedrock, Platform Agen Google Cloud, atau Microsoft Foundry, panggilan pengklasifikasi dihitung terhadap penggunaan token Anda. Setiap pemeriksaan mengirim sebagian dari transkrip ditambah tindakan yang tertunda, menambahkan putaran perjalanan pulang sebelum eksekusi. Pembacaan dan pengeditan direktori kerja di luar jalur yang dilindungi melewati pengklasifikasi, jadi overhead datang terutama dari perintah shell dan operasi jaringan. Di mana server meninjau tindakan sebagai bagian dari permintaan model sesi, tidak ada panggilan pengklasifikasi terpisah untuk dihitung; lihat [Tinjauan pengklasifikasi sisi server](#server-side-classifier-review).561 Pada paket Enterprise dan pada akun yang menggunakan Claude API, [Claude Platform on AWS](/docs/id/claude-platform-on-aws), Amazon Bedrock, Agent Platform Google Cloud, atau Microsoft Foundry, panggilan pengklasifikasi dihitung terhadap penggunaan token Anda. Setiap pemeriksaan mengirim sebagian dari transkrip ditambah tindakan yang tertunda, menambahkan putaran perjalanan sebelum eksekusi. Pembacaan dan pengeditan direktori kerja di luar jalur yang dilindungi melewati pengklasifikasi, jadi overhead datang terutama dari perintah shell dan operasi jaringan. Di mana server meninjau tindakan sebagai bagian dari permintaan model sesi, tidak ada panggilan pengklasifikasi terpisah untuk dihitung; lihat [Tinjauan pengklasifikasi sisi server](#server-side-classifier-review).

560 562 

561 Akses jaringan sandboxed tidak menambahkan permintaan pengklasifikasi per-koneksi. Pengklasifikasi menilai [host yang dinamai perintah](/docs/id/sandboxing#per-command-allowed-domains-in-auto-mode) bersama dengan perintah dalam satu tinjauan, dan Claude Code memeriksa setiap koneksi terhadap daftar yang disetujui tanpa memanggil pengklasifikasi lagi.563 Akses jaringan sandboxed tidak menambahkan permintaan pengklasifikasi per-koneksi. Pengklasifikasi menilai [host yang dinamai perintah](/docs/id/sandboxing#per-command-allowed-domains-in-auto-mode) bersama dengan perintah dalam satu tinjauan, dan Claude Code memeriksa setiap koneksi terhadap daftar yang disetujui tanpa memanggil pengklasifikasi lagi.

562 </Accordion>564 </Accordion>


667* `.yarn`669* `.yarn`

668* `.mvn`670* `.mvn`

669* `.claude`, kecuali untuk `.claude/worktrees` di mana Claude menyimpan git worktrees-nya sendiri671* `.claude`, kecuali untuk `.claude/worktrees` di mana Claude menyimpan git worktrees-nya sendiri

672* Direktori yang Anda muat dengan [`--plugin-dir`](/docs/id/plugins/mods/create#change-a-mod-with-claude), karena Claude Code memuat ulang dan menjalankan kode mod dari sana ketika file berubah

670 673 

671File yang dilindungi:674File yang dilindungi:

672 675 

permissions.md +14 −3

Details

600 600 

601[Hook Claude Code](/docs/id/hooks-guide) memungkinkan Anda mendaftarkan perintah shell kustom yang mengevaluasi izin saat runtime. Ketika Claude Code membuat panggilan alat, hook PreToolUse berjalan sebelum prompt izin, untuk setiap alat kecuali [`EndConversation`](/docs/id/tools-reference#endconversation-tool-behavior). Output hook dapat menolak panggilan alat, memaksa prompt, atau melewati prompt untuk membiarkan panggilan berlanjut.601[Hook Claude Code](/docs/id/hooks-guide) memungkinkan Anda mendaftarkan perintah shell kustom yang mengevaluasi izin saat runtime. Ketika Claude Code membuat panggilan alat, hook PreToolUse berjalan sebelum prompt izin, untuk setiap alat kecuali [`EndConversation`](/docs/id/tools-reference#endconversation-tool-behavior). Output hook dapat menolak panggilan alat, memaksa prompt, atau melewati prompt untuk membiarkan panggilan berlanjut.

602 602 

603Keputusan hook tidak melewati aturan izin. Claude Code mengevaluasi aturan deny dan ask terlepas dari apa yang dikembalikan hook PreToolUse: aturan deny yang cocok memblokir panggilan, dan aturan ask masih meminta bahkan ketika hook mengembalikan `"allow"` atau `"ask"`. Ini mempertahankan prioritas deny-first yang dijelaskan dalam [Kelola izin](#manage-permissions), termasuk aturan deny yang ditetapkan dalam pengaturan terkelola.603Keputusan hook PreToolUse tidak melewati aturan izin. Claude Code mengevaluasi aturan deny dan ask terlepas dari apa yang dikembalikan hook PreToolUse: aturan deny yang cocok memblokir panggilan, dan aturan ask masih meminta bahkan ketika hook mengembalikan `"allow"` atau `"ask"`. Ini mempertahankan prioritas deny-first yang dijelaskan dalam [Kelola izin](#manage-permissions), termasuk aturan deny yang ditetapkan dalam pengaturan terkelola.

604 

605Prioritas tersebut mencakup hook dalam file pengaturan dan dalam `hooks/hooks.json` plugin. Sebuah [mod](/docs/id/plugins/mods/overview) yang Anda instal yang hook `tool.check` menjawab setelah aturan dan hook `PreToolUse` telah memutuskan, dan jawabannya dapat menggantikan milik mereka:

606 

607* **Aturan Ask**: mod dapat menyetujui panggilan yang akan diminta oleh aturan ask

608* **Blokir dari hook `PreToolUse`**: mod dapat menyetujui panggilan, kecuali hook berada dalam pengaturan terkelola

609* **Pengklasifikasi mode otomatis**: dalam [mode otomatis](/docs/id/permission-modes#eliminate-prompts-with-auto-mode), panggilan yang disetujui mod berjalan tanpa pemeriksaan pengklasifikasi

610* **Aturan Deny**: pada mesin dengan pengaturan terkelola, atau ketika Anda masuk dengan paket Team atau Enterprise, aturan deny menahan mod secara default, dan organisasi Anda dapat mengubahnya. Di tempat lain, mod dapat menyetujui panggilan yang ditolak aturan deny.

611 

612Lihat [Tentukan apakah akan mempercayai mod](/docs/id/plugins/mods/overview#decide-whether-to-trust-a-mod), atau [Kelola mod untuk organisasi Anda](/docs/id/plugins/mods/admin#know-what-happens-by-default) jika Anda menerapkan pengaturan terkelola.

604 613 

605Alat MCP yang ditandai [`requiresUserInteraction`](/docs/id/mcp#require-approval-for-a-specific-tool) juga masih meminta ketika hook mengembalikan `"allow"`, begitu juga alat connector [yang organisasi Anda atur ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools) dalam sesi di mana pengaturan tersebut mencapai Claude Code.614Alat MCP yang ditandai [`requiresUserInteraction`](/docs/id/mcp#require-approval-for-a-specific-tool) juga masih meminta ketika hook mengembalikan `"allow"`, begitu juga alat connector [yang organisasi Anda atur ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools) dalam sesi di mana pengaturan tersebut mencapai Claude Code.

606 615 


718 727 

719Hal yang sama berlaku di seluruh cakupan pengaturan: jika pengaturan pengguna mengizinkan izin dan pengaturan proyek menolaknya, aturan penolakan memblokir izin tersebut. Kebalikannya juga benar: penolakan tingkat pengguna memblokir izin tingkat proyek, karena aturan penolakan dari cakupan apa pun dievaluasi sebelum aturan izin.728Hal yang sama berlaku di seluruh cakupan pengaturan: jika pengaturan pengguna mengizinkan izin dan pengaturan proyek menolaknya, aturan penolakan memblokir izin tersebut. Kebalikannya juga benar: penolakan tingkat pengguna memblokir izin tingkat proyek, karena aturan penolakan dari cakupan apa pun dievaluasi sebelum aturan izin.

720 729 

730Prioritas ini adalah antara file pengaturan dan argumen baris perintah. Untuk apakah aturan penolakan berlaku atas [mod](/docs/id/plugins/mods/overview) yang Anda instal, lihat [Perluas izin dengan hooks](#extend-permissions-with-hooks).

731 

721Host penyematan dapat menyediakan kebijakan terkelola tambahan melalui opsi SDK `managedSettings`, termasuk aturan izin allow kecuali admin menetapkan kunci `allowManaged*Only`; [Deliver policy to Claude Desktop sessions](/docs/id/claude-apps-gateway#deliver-policy-to-claude-desktop-sessions) mencakup kapan kebijakan embedder berlaku sepenuhnya.732Host penyematan dapat menyediakan kebijakan terkelola tambahan melalui opsi SDK `managedSettings`, termasuk aturan izin allow kecuali admin menetapkan kunci `allowManaged*Only`; [Deliver policy to Claude Desktop sessions](/docs/id/claude-apps-gateway#deliver-policy-to-claude-desktop-sessions) mencakup kapan kebijakan embedder berlaku sepenuhnya.

722 733 

723<h2 id="project-allow-rules-and-workspace-trust">734<h2 id="project-allow-rules-and-workspace-trust">


764| [Hooks](/docs/id/hooks) dalam file pengaturan, blok [`env`](/docs/id/settings-reference#env) dan perintah pembantu seperti [`apiKeyHelper`](/docs/id/settings-reference#apikeyhelper), dan [hooks](/docs/id/hooks#hooks-in-skills-and-agents) skill proyek dan [`allowed-tools`](/docs/id/skills#pre-approve-tools-for-a-skill) | Digunakan | Digunakan. Kepercayaan ruang kerja tidak pernah membatasi `allowed-tools` skill dalam sesi apa pun |775| [Hooks](/docs/id/hooks) dalam file pengaturan, blok [`env`](/docs/id/settings-reference#env) dan perintah pembantu seperti [`apiKeyHelper`](/docs/id/settings-reference#apikeyhelper), dan [hooks](/docs/id/hooks#hooks-in-skills-and-agents) skill proyek dan [`allowed-tools`](/docs/id/skills#pre-approve-tools-for-a-skill) | Digunakan | Digunakan. Kepercayaan ruang kerja tidak pernah membatasi `allowed-tools` skill dalam sesi apa pun |

765| Aturan `permissions.allow` dan `additionalDirectories` dalam `.claude/settings.json` | Tidak digunakan sampai Anda menerima dialog kepercayaan, yang muncul lagi mencantumkannya | Tidak digunakan. Claude Code mencetak peringatan [`this workspace has not been trusted`](/docs/id/errors#workspace-has-not-been-trusted) ke stderr |776| Aturan `permissions.allow` dan `additionalDirectories` dalam `.claude/settings.json` | Tidak digunakan sampai Anda menerima dialog kepercayaan, yang muncul lagi mencantumkannya | Tidak digunakan. Claude Code mencetak peringatan [`this workspace has not been trusted`](/docs/id/errors#workspace-has-not-been-trusted) ke stderr |

766| Hooks frontmatter dalam [subagent](/docs/id/sub-agents#hooks-in-subagent-frontmatter) proyek, plugin [`@skills-dir`](/docs/id/plugins/loading#plugins-shared-through-a-repository) proyek, dan entri [`extraKnownMarketplaces`](/docs/id/settings-reference#extraknownmarketplaces) dari repositori atau direktori `--add-dir` | Tidak digunakan, dan tidak ada dialog yang ditawarkan | Tidak digunakan |777| Hooks frontmatter dalam [subagent](/docs/id/sub-agents#hooks-in-subagent-frontmatter) proyek, plugin [`@skills-dir`](/docs/id/plugins/loading#plugins-shared-through-a-repository) proyek, dan entri [`extraKnownMarketplaces`](/docs/id/settings-reference#extraknownmarketplaces) dari repositori atau direktori `--add-dir` | Tidak digunakan, dan tidak ada dialog yang ditawarkan | Tidak digunakan |

767| [`mcpServers`](/docs/id/sub-agents#scope-mcp-servers-to-a-subagent) inline dalam frontmatter subagent dari repositori atau direktori `--add-dir`. Sebelum v2.1.238, Claude Code memuat server ini dalam kedua situasi | Tidak digunakan, dan tidak ada dialog yang ditawarkan | Tidak digunakan |778| Inline [`mcpServers`](/docs/id/sub-agents#scope-mcp-servers-to-a-subagent) dalam frontmatter subagent dari repositori atau direktori `--add-dir` | Tidak digunakan, dan tidak ada dialog yang ditawarkan | Tidak digunakan |

768| Server dalam `.mcp.json`, termasuk yang [disetujui repositori dalam pengaturannya sendiri](/docs/id/mcp#project-server-approvals-and-workspace-trust) | Claude Code menanyakan Anda sebelum menghubungkannya. Persetujuan repositori itu sendiri tidak dihitung | Terhubung tanpa bertanya, disetujui atau tidak. SDK memuat mereka hanya ketika `settingSources` mencakup pengaturan proyek. `claude mcp list` di folder yang sama masih melaporkan server seperti itu sebagai tertunda |779| Server dalam `.mcp.json`, termasuk yang [disetujui repositori dalam pengaturannya sendiri](/docs/id/mcp#project-server-approvals-and-workspace-trust) | Claude Code menanyakan Anda sebelum menghubungkannya. Persetujuan repositori itu sendiri tidak dihitung | Terhubung tanpa bertanya, disetujui atau tidak. SDK memuat mereka hanya ketika `settingSources` mencakup pengaturan proyek. `claude mcp list` di folder yang sama masih melaporkan server seperti itu sebagai tertunda |

769| [`headersHelper`](/docs/id/mcp#trust-a-folder-before-its-headershelper-runs) pada server dalam `.mcp.json`. Sebelum v2.1.238, Claude Code menjalankan pembantu dalam kedua situasi | Tidak dijalankan sampai Anda menerima dialog kepercayaan, yang muncul lagi menamai tempat pembantu dideklarasikan. Claude Code menghubungkan server dengan `headers` statis saja sampai saat itu | Tidak dijalankan. Claude Code menghubungkan server dengan `headers` statis saja dan mencetak baris [`headersHelper not run`](/docs/id/errors#headershelper-not-run) per server ke stderr |780| [`headersHelper`](/docs/id/mcp#trust-a-folder-before-its-headershelper-runs) pada server dalam `.mcp.json` | Tidak dijalankan sampai Anda menerima dialog kepercayaan, yang muncul lagi menamai tempat pembantu dideklarasikan. Claude Code menghubungkan server dengan `headers` statis saja sampai saat itu | Tidak dijalankan. Claude Code menghubungkan server dengan `headers` statis saja dan mencetak baris [`headersHelper not run`](/docs/id/errors#headershelper-not-run) per server ke stderr |

770 781 

771Untuk baris yang memerlukan folder yang tepat ini dipercaya, percayai dengan tangan: atur `projects["<path>"].hasTrustDialogAccepted` ke `true` dalam `~/.claude.json`, di mana `<path>` adalah akar repositori, atau folder itu sendiri di luar repositori. Claude Code mencetak kunci yang tepat dalam baris log debug untuk hook subagent yang dilewati atau server MCP inline, dalam peringatan stderr untuk aturan izin yang dilewati, dan dalam baris `headersHelper not run` untuk pembantu yang dilewati.782Untuk baris yang memerlukan folder yang tepat ini dipercaya, percayai dengan tangan: atur `projects["<path>"].hasTrustDialogAccepted` ke `true` dalam `~/.claude.json`, di mana `<path>` adalah akar repositori, atau folder itu sendiri di luar repositori. Claude Code mencetak kunci yang tepat dalam baris log debug untuk hook subagent yang dilewati atau server MCP inline, dalam peringatan stderr untuk aturan izin yang dilewati, dan dalam baris `headersHelper not run` untuk pembantu yang dilewati.

772 783 

Details

29Setiap subperintah berbagi kode keluar, argumen plugin, dan nilai cakupan ini:29Setiap subperintah berbagi kode keluar, argumen plugin, dan nilai cakupan ini:

30 30 

31* **Kode keluar**: `0` pada kesuksesan dan `1` pada kegagalan. `validate` menambahkan keluar `2` untuk kesalahan yang tidak terduga, dan `eval` menambahkan kode yang tercantum di [bagiannya](#plugin-eval).31* **Kode keluar**: `0` pada kesuksesan dan `1` pada kegagalan. `validate` menambahkan keluar `2` untuk kesalahan yang tidak terduga, dan `eval` menambahkan kode yang tercantum di [bagiannya](#plugin-eval).

32* **Argumen plugin**: argumen `<plugin>` adalah plugin `name` atau `name@marketplace`. Ketika dua marketplace menawarkan nama yang sama, gunakan bentuk yang memenuhi syarat.32* **Argumen plugin**: argumen `<plugin>` adalah plugin `name` atau `name@marketplace`. Ketika dua marketplace menawarkan nama yang sama, gunakan bentuk yang memenuhi syarat. `configure` hanya mengambil bentuk yang memenuhi syarat.

33* **Cakupan**: `--scope` mengambil `user`, `project`, atau `local`, dan menamai file pengaturan yang ditulis perintah. `update` juga mengambil `managed`.33* **Cakupan**: `--scope` mengambil `user`, `project`, atau `local`, dan menamai file pengaturan yang ditulis perintah. `update` juga mengambil `managed`.

34 34 

35<h3 id="plugin-init">35<h3 id="plugin-init">


87| Flag | Deskripsi |87| Flag | Deskripsi |

88| :- | :- |88| :- | :- |

89| `-s, --scope <scope>` | Cakupan instalasi: `user`, `project`, atau `local`. Default ke `user` |89| `-s, --scope <scope>` | Cakupan instalasi: `user`, `project`, atau `local`. Default ke `user` |

90| `--config <key=value>` | Tetapkan opsi [`userConfig`](/docs/id/plugins/manifest-reference) yang dideklarasikan manifest plugin. Ulangi flag untuk setiap opsi. Memerlukan Claude Code v2.1.147 atau lebih baru |90| `--config <key=value>` | Tetapkan opsi [`userConfig`](/docs/id/plugins/manifest-reference) yang dideklarasikan manifest plugin. Ulangi flag untuk setiap opsi. Memerlukan Claude Code v2.1.147 atau lebih baru. Kunci yang ditulis `<server>.<key>` menetapkan pengaturan yang dideklarasikan [server MCP yang dibundel](/docs/id/plugins/components#include-a-packaged-mcpb-server) dalam `user_config`-nya sendiri, untuk file bundle yang dikirim di dalam plugin. Bentuk `<server>.<key>` memerlukan Claude Code v2.1.285 atau lebih baru |

91| `-y, --yes` | Terima perintah instal yang ditampilkan tanpa prompt `Run this command now?`. Diabaikan ketika perintah berjalan di dalam sesi Claude Code, seperti dari alat Bash atau hook. Memerlukan Claude Code v2.1.229 atau lebih baru |91| `-y, --yes` | Terima perintah instal yang ditampilkan tanpa prompt `Run this command now?`. Diabaikan ketika perintah berjalan di dalam sesi Claude Code, seperti dari alat Bash atau hook. Memerlukan Claude Code v2.1.229 atau lebih baru |

92| `--accept-command <sha256>` | Terima perintah instal yang ditampilkan yang `sha256` sebelumnya [`--json` run](#plugin-json-result) dilaporkan dalam `shownCommand`, sebagai pengganti `-y`. Tidak dapat digabungkan dengan `-y`. Lihat [Terima perintah instal yang ditampilkan](#accept-a-displayed-install-command). Memerlukan Claude Code v2.1.271 atau lebih baru |92| `--accept-command <sha256>` | Terima perintah instal yang ditampilkan yang `sha256` sebelumnya [`--json` run](#plugin-json-result) dilaporkan dalam `shownCommand`, sebagai pengganti `-y`. Tidak dapat digabungkan dengan `-y`. Lihat [Terima perintah instal yang ditampilkan](#accept-a-displayed-install-command). Memerlukan Claude Code v2.1.271 atau lebih baru |

93| `--json` | Cetak hasil sebagai satu objek JSON pada baris terakhir stdout alih-alih pesan yang dapat dibaca manusia, untuk digunakan dalam skrip. Lihat [Format hasil JSON](#plugin-json-result). Memerlukan Claude Code v2.1.268 atau lebih baru |93| `--json` | Cetak hasil sebagai satu objek JSON pada baris terakhir stdout alih-alih pesan yang dapat dibaca manusia, untuk digunakan dalam skrip. Lihat [Format hasil JSON](#plugin-json-result). Memerlukan Claude Code v2.1.268 atau lebih baru |


297| :- | :- |297| :- | :- |

298| `--json` | Cetak daftar sebagai JSON |298| `--json` | Cetak daftar sebagai JSON |

299| `--available` | Juga daftar plugin yang ditawarkan marketplace Anda yang belum Anda instal. Tidak berpengaruh tanpa `--json` |299| `--available` | Juga daftar plugin yang ditawarkan marketplace Anda yang belum Anda instal. Tidak berpengaruh tanpa `--json` |

300| `--data-size [plugin]` | Ukur [direktori data yang disimpan](#what-an-uninstall-deletes-and-keeps) setiap plugin yang diinstal, atau hanya plugin yang dinamai, diberikan sebagai `name@marketplace`. Tidak berpengaruh tanpa `--json`. Jika nama tidak memiliki catatan instal, perintah mencetak `--data-size names a plugin that is not installed` dan keluar `1` alih-alih mencetak daftar. Memerlukan Claude Code v2.1.285 atau lebih baru |

300 301 

301Claude Code mengelompokkan output yang dapat dibaca manusia berdasarkan cara setiap plugin dimuat:302Claude Code mengelompokkan output yang dapat dibaca manusia berdasarkan cara setiap plugin dimuat:

302 303 


328| `notes` | array of strings | Peringatan penulisan untuk plugin yang dimuat dan berfungsi |329| `notes` | array of strings | Peringatan penulisan untuk plugin yang dimuat dan berfungsi |

329| `errorDetails` | array of objects | Satu objek per entri `errors`, memberikan `type` diagnostik dan nama yang dirujuknya, seperti plugin, marketplace, server, atau file. Memerlukan Claude Code v2.1.268 atau lebih baru |330| `errorDetails` | array of objects | Satu objek per entri `errors`, memberikan `type` diagnostik dan nama yang dirujuknya, seperti plugin, marketplace, server, atau file. Memerlukan Claude Code v2.1.268 atau lebih baru |

330| `noteDetails` | array of objects | Objek detail yang sama untuk setiap entri `notes`. Memerlukan Claude Code v2.1.268 atau lebih baru |331| `noteDetails` | array of objects | Objek detail yang sama untuk setiap entri `notes`. Memerlukan Claude Code v2.1.268 atau lebih baru |

332| `hasUserConfig` | boolean | Hadir dan `true` ketika plugin dimuat dan manifestnya mendeklarasikan opsi [`userConfig`](/docs/id/plugins/manifest-reference#user-configuration). Tidak ada untuk plugin yang gagal dimuat, apa pun yang dideklarasikan manifestnya. Nilai yang disimpan tidak pernah disertakan. Memerlukan Claude Code v2.1.285 atau lebih baru |

333| `projectEnabled` | boolean | Apakah `.claude/settings.json` proyek yang dibagikan menghidupkan plugin. Hanya instal marketplace. Memerlukan Claude Code v2.1.285 atau lebih baru |

334| `dataDirSize` | object | Dengan `--data-size`, ukuran [direktori data yang disimpan](#what-an-uninstall-deletes-and-keeps) plugin sebagai `bytes` dan `human`; tidak ada ketika direktori hilang atau kosong. Hanya instal marketplace. Memerlukan Claude Code v2.1.285 atau lebih baru |

335| `dataDirUnreadable` | boolean | Dengan `--data-size`, `true` ketika direktori data yang disimpan ada tetapi tidak dapat diukur. Hanya instal marketplace. Memerlukan Claude Code v2.1.285 atau lebih baru |

331 336 

332Dengan `--json --available`, Claude Code mencetak satu objek alih-alih array. Field `installed`-nya memegang array objek plugin yang diinstal, dan field `available`-nya memegang satu objek per plugin marketplace yang tidak diinstal dengan field di bawah.337Dengan `--json --available`, Claude Code mencetak satu objek alih-alih array. Field `installed`-nya memegang array objek plugin yang diinstal, dan field `available`-nya memegang satu objek per plugin marketplace yang tidak diinstal dengan field di bawah.

333 338 


371 376 

372Untuk plugin yang tidak dimuat, Claude Code mencetak ``Plugin "formatter" not found. Run `claude plugin list` to see installed plugins, or pass --plugin-dir <path> to load one from disk.`` dan keluar `1`.377Untuk plugin yang tidak dimuat, Claude Code mencetak ``Plugin "formatter" not found. Run `claude plugin list` to see installed plugins, or pass --plugin-dir <path> to load one from disk.`` dan keluar `1`.

373 378 

379<h3 id="plugin-configure">

380 plugin configure

381</h3>

382 

383Tampilkan opsi [`userConfig`](/docs/id/plugins/manifest-reference#user-configuration) plugin yang diinstal dan mana yang diatur, atau simpan nilai yang disalurkan di stdin. Memerlukan Claude Code v2.1.285 atau lebih baru.

384 

385```bash theme={null}

386claude plugin configure <plugin>

387```

388 

389| Flag | Deskripsi |

390| :- | :- |

391| `--values-stdin` | Baca nilai opsi dari stdin sebagai objek JSON string satu baris dan simpan. Opsi yang Anda tinggalkan menyimpan nilai yang disimpan |

392| `--json` | Cetak hasil sebagai satu objek JSON ke stdout. Tanpa `--values-stdin`, objek membawa `schema` dan `choices` opsi, `inputs` awal mereka, dan nama opsi `configured` dan `unconfigured`. Dengan `--values-stdin`, membawa nama opsi `saved` dan, ketika dapat dibaca kembali, nama `unconfigured` |

393 

394Tanpa flag, perintah mencantumkan setiap opsi dengan hingga tiga label: `required` atau `optional`, kemudian `sensitive` untuk opsi yang dideklarasikan manifest sensitif, kemudian `set` atau `not set`. Tidak mencetak nilai yang disimpan. Dengan `--json`, output mencakup nilai yang disimpan dari opsi yang bukan sensitif, dan tidak pernah teks dari yang sensitif.

395 

396Untuk menyimpan nilai, tulis ke file sebagai objek JSON yang memetakan kunci opsi ke nilai string, kemudian lewatkan file di stdin. Ganti `formatter@my-marketplace` dengan id plugin Anda sendiri seperti yang ditunjukkan `claude plugin list`. Contoh ini menetapkan satu opsi bernama `api_url` dari file `values.json` yang berisi `{"api_url": "https://example.com"}`:

397 

398```bash theme={null}

399claude plugin configure formatter@my-marketplace --values-stdin < values.json

400```

401 

402Claude Code memvalidasi setiap nilai terhadap tipe yang dideklarasikan opsi dan mencetak `Configuration saved. Restart Claude Code to apply it.` Jika Anda melewatkan kunci yang tidak dideklarasikan manifest, atau nilai yang gagal validasi, perintah tidak menyimpan apa pun, mencetak `Failed to save configuration:` dengan alasan, dan keluar `1`. Dengan `--json`, nilai yang ditolak juga mencetak objek di stdout yang field `refused`-nya membawa `message` dan, ketika satu opsi salah, kunci `option`-nya.

403 

404Lewatkan id `name@marketplace` plugin yang lengkap, seperti yang ditunjukkan `claude plugin list`. `configure` tidak menerima `name` telanjang. Ketika tidak ada plugin yang dimuat memiliki id itu, perintah mencetak `No installed plugin has the id "<plugin>".` dan keluar `1`.

405 

406Untuk pengaturan server MCP yang dibundel, lihat [`plugin install --config`](#plugin-install) atau item **Configure** di `/plugin`.

407 

374<h3 id="plugin-prune">408<h3 id="plugin-prune">

375 plugin prune409 plugin prune

376</h3>410</h3>

Details

791 791 

792Hooks di `hooks/hooks.json` dan di kunci manifest `hooks` keduanya dimuat. Untuk setiap event dan payload-nya, lihat [Hook events](/docs/id/hooks#hook-events).792Hooks di `hooks/hooks.json` dan di kunci manifest `hooks` keduanya dimuat. Untuk setiap event dan payload-nya, lihat [Hook events](/docs/id/hooks#hook-events).

793 793 

794Untuk menulis hooks sebagai fungsi JavaScript yang berjalan di dalam Claude Code dan dapat menggambar di antarmukanya, daftarkan file modul di bawah kunci `modules` dalam `hooks/hooks.json` yang sama. Plugin dengan satu adalah mod. Lihat [Create a mod](/docs/id/plugins/mods/create).

795 

794<h4 id="when-plugin-hooks-fire">796<h4 id="when-plugin-hooks-fire">

795 Kapan hook plugin dipecat797 Kapan hook plugin dipecat

796</h4>798</h4>


868 870 

869Server mengambil namanya dari `name` dalam manifest bundle.871Server mengambil namanya dari `name` dalam manifest bundle.

870 872 

873Bundle manifest sendiri dapat mendeklarasikan pengaturan yang dibutuhkan server dari pengguna dalam blok `user_config`. Server bundled dengan pengaturan yang diperlukan yang tidak memiliki nilai yang disimpan tidak dimulai. Tab **Errors** `/plugin` menunjukkan `Bundled MCP server "<name>" was not started: it needs configuration`.

874 

875Pengguna menyediakan nilai dengan salah satu dari dua cara:

876 

877* **Di `/plugin`**: pilih plugin di tab **Installed** dan pilih **Configure**

878* **Saat instalasi, dari shell**: lewatkan [`--config <server>.<key>=<value>`](/docs/id/plugins/cli-reference#plugin-install) ke `claude plugin install`. Memerlukan Claude Code v2.1.285 atau lebih baru, dan hanya berfungsi untuk bundle yang dikemas di dalam plugin.

879 

871Untuk transport dan autentikasi, lihat [MCP](/docs/id/mcp#plugin-provided-mcp-servers).880Untuk transport dan autentikasi, lihat [MCP](/docs/id/mcp#plugin-provided-mcp-servers).

872 881 

873<h3 id="lsp-servers">882<h3 id="lsp-servers">


1071 Kapan dialog konfigurasi muncul1080 Kapan dialog konfigurasi muncul

1072</h3>1081</h3>

1073 1082 

1074Dialog muncul hanya dalam antarmuka `/plugin` interaktif. Itu terbuka untuk opsi apa pun yang belum ditetapkan ketika pengguna melakukan salah satu dari berikut:1083Dialog adalah bagian dari antarmuka `/plugin` interaktif. Ketika pengguna melakukan salah satu dari berikut, dialog terbuka untuk opsi apa pun yang belum ditetapkan:

1075 1084 

1076* Memasang plugin di `/plugin`1085* Memasang plugin di `/plugin`

1077* Menjalankan `/plugin install <plugin>@<marketplace>` di dalam sesi1086* Menjalankan `/plugin install <plugin>@<marketplace>` di dalam sesi


1079 1088 

1080Untuk membuka dialog yang sama kapan saja, pengguna menjalankan `/plugin configure <plugin>@<marketplace>`.1089Untuk membuka dialog yang sama kapan saja, pengguna menjalankan `/plugin configure <plugin>@<marketplace>`.

1081 1090 

1082Perintah shell `claude plugin install` tidak pernah meminta nilai `userConfig`. Untuk menetapkan nilai dari shell, lewatkan masing-masing sebagai `--config KEY=VALUE`. Ketika opsi tetap tidak ditetapkan, perintah mencetak baris `userConfig options not yet set` yang menamai kedua cara untuk menetapkannya. [Dialog `userConfig` tidak pernah muncul](/docs/id/plugins/troubleshooting#the-userconfig-dialog-never-appears) mengutip baris.1091Dialog Manage plugins di ekstensi VS Code [Manage plugins dialog](/docs/id/vs-code#install-plugins) meminta opsi yang tidak ditetapkan sebagai formulir setelah instalasi, dan ikon gear pada baris plugin membuka formulir lagi dengan setiap opsi.

1092 

1093Perintah shell `claude plugin install` tidak pernah meminta nilai `userConfig`. Untuk menetapkan nilai dari shell, lewatkan masing-masing sebagai `--config KEY=VALUE` saat Anda memasang, atau pipa objek JSON ke [`claude plugin configure --values-stdin`](/docs/id/plugins/cli-reference#plugin-configure) setelahnya.

1094 

1095Ketika opsi tetap tidak ditetapkan, `claude plugin install` mencetak baris `userConfig options not yet set`. Untuk teks pasti baris tersebut, lihat [The `userConfig` dialog never appears](/docs/id/plugins/troubleshooting#the-userconfig-dialog-never-appears).

1083 1096 

1084Untuk field opsi, di mana setiap nilai disimpan, bagaimana komponen mereferensikan nilai yang disimpan, dan field mana yang menolak `${user_config.*}`, lihat [User configuration](/docs/id/plugins/manifest-reference#user-configuration).1097Untuk field opsi, di mana setiap nilai disimpan, bagaimana komponen mereferensikan nilai yang disimpan, dan field mana yang menolak `${user_config.*}`, lihat [User configuration](/docs/id/plugins/manifest-reference#user-configuration).

1085 1098 

Details

72 Kalimat terakhir ringkasan memberi tahu Anda apakah plugin dapat digunakan dalam sesi ini:72 Kalimat terakhir ringkasan memberi tahu Anda apakah plugin dapat digunakan dalam sesi ini:

73 73 

74 * **Active now**: `Plugin is now active.` Tidak perlu reload.74 * **Active now**: `Plugin is now active.` Tidak perlu reload.

75 * **Active, but a server needs setup**: `Plugin is now active.` diikuti oleh `Its bundled MCP server needs configuration before it can start`. [Bundled MCP server](/docs/id/plugins/components#include-a-packaged-mcpb-server) plugin tidak dapat dimulai sampai Anda mengatur opsinya. Pilih plugin di tab **Installed** di `/plugin` dan pilih **Configure** untuk mengatur opsi server.

75 * **Reload needed**: `Run /reload-plugins to activate.` Panel ditutup dan Claude Code menjalankan reload itu untuk Anda. Jika reload akan [membatalkan prompt cache](/docs/id/prompt-caching#enabling-or-disabling-a-plugin), itu memperingatkan dan meninggalkan plugin tertunda sebagai gantinya. Jalankan `/reload-plugins --force` untuk mengaktifkannya bagaimanapun, yang biaya satu permintaan uncached.76 * **Reload needed**: `Run /reload-plugins to activate.` Panel ditutup dan Claude Code menjalankan reload itu untuk Anda. Jika reload akan [membatalkan prompt cache](/docs/id/prompt-caching#enabling-or-disabling-a-plugin), itu memperingatkan dan meninggalkan plugin tertunda sebagai gantinya. Jalankan `/reload-plugins --force` untuk mengaktifkannya bagaimanapun, yang biaya satu permintaan uncached.

76 * **Load failed**: `The plugin couldn't be loaded`. Buka tab **Errors** di `/plugin` untuk alasannya, kemudian lihat [After install: plugin not working](/docs/id/plugins/troubleshooting#plugin-installed-but-not-working).77 * **Load failed**: `The plugin couldn't be loaded`. Buka tab **Errors** di `/plugin` untuk alasannya, kemudian lihat [After install: plugin not working](/docs/id/plugins/troubleshooting#plugin-installed-but-not-working).

77 </Step>78 </Step>


248Marketplace pribadi adalah satu di repository yang Anda butuhkan kredensial untuk clone, di GitHub atau host git apa pun. Anda menambahkannya dengan perintah `/plugin marketplace add` atau `claude plugin marketplace add` yang sama seperti yang publik. Claude Code mengklonnya dengan kredensial git yang sudah ada di mesin Anda dan tidak pernah meminta, jadi setiap cara koneksi memiliki persyaratan:249Marketplace pribadi adalah satu di repository yang Anda butuhkan kredensial untuk clone, di GitHub atau host git apa pun. Anda menambahkannya dengan perintah `/plugin marketplace add` atau `claude plugin marketplace add` yang sama seperti yang publik. Claude Code mengklonnya dengan kredensial git yang sudah ada di mesin Anda dan tidak pernah meminta, jadi setiap cara koneksi memiliki persyaratan:

249 250 

250* **HTTPS**: pembantu kredensial git Anda berlaku, jadi akses yang Anda atur dengan `gh auth login`, Keychain macOS, atau `git-credential-store` berfungsi. Prompt interaktif ditekan, jadi host yang belum pernah Anda autentikasi gagal alih-alih meminta kata sandi.251* **HTTPS**: pembantu kredensial git Anda berlaku, jadi akses yang Anda atur dengan `gh auth login`, Keychain macOS, atau `git-credential-store` berfungsi. Prompt interaktif ditekan, jadi host yang belum pernah Anda autentikasi gagal alih-alih meminta kata sandi.

251* **SSH**: host harus sudah ada di file `known_hosts` Anda dan kunci harus berfungsi tanpa prompt passphrase, karena prompt host-fingerprint dan passphrase juga ditekan.252* **SSH**: host harus sudah ada di file `known_hosts` Anda dan kunci harus berfungsi tanpa prompt passphrase. Jika setup git Anda menamai program SSH di `GIT_SSH_COMMAND`, `GIT_SSH`, atau `core.sshCommand` config git Anda, Claude Code menjalankan program itu.

252* **GitHub `owner/repo` shorthand**: Claude Code memeriksa apakah kunci SSH Anda mengautentikasi ke `github.com`, kemudian mengklonnya melalui SSH jika ya dan melalui HTTPS jika tidak. Atur [`CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`](/docs/id/env-vars#variables) untuk melewati pemeriksaan itu dan selalu mengklonnya melalui HTTPS.253* **GitHub `owner/repo` shorthand**: Claude Code memeriksa apakah kunci SSH Anda mengautentikasi ke `github.com`, kemudian mengklonnya melalui SSH jika ya dan melalui HTTPS jika tidak. Atur [`CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`](/docs/id/env-vars#variables) untuk melewati pemeriksaan itu dan selalu mengklonnya melalui HTTPS.

253 254 

254Kredensial yang sama berlaku ketika Anda menjalankan `/plugin install`, `/plugin marketplace update`, dan `claude plugin update`.255Kredensial yang sama berlaku ketika Anda menjalankan `/plugin install`, `/plugin marketplace update`, dan `claude plugin update`.


288 289 

289* Ketik untuk memfilter berdasarkan nama atau deskripsi.290* Ketik untuk memfilter berdasarkan nama atau deskripsi.

290* Tekan **Space** untuk mengaktifkan atau menonaktifkan plugin yang dipilih, dan **f** untuk menyukainya.291* Tekan **Space** untuk mengaktifkan atau menonaktifkan plugin yang dipilih, dan **f** untuk menyukainya.

291* Tekan **Enter** untuk membuka detail plugin. Menu di sana menawarkan **Disable plugin** atau **Enable plugin**, **Update now**, dan **Uninstall**. Plugin yang mengambil pengaturan juga menawarkan **Configure options**.292* Tekan **Enter** untuk membuka detail plugin.

293 

294Menu detail plugin menawarkan **Disable plugin** atau **Enable plugin**, **Update now**, dan **Uninstall**. Dua item lagi muncul untuk plugin yang mengambil pengaturan, dan plugin dapat menampilkan keduanya:

295 

296* **Configure options**: ditampilkan ketika manifest plugin mendeklarasikan opsi [`userConfig`](/docs/id/plugins/manifest-reference#user-configuration). Membuka dialog untuk opsi tersebut

297* **Configure**: ditampilkan ketika plugin menyertakan [server MCP yang dikemas](/docs/id/plugins/components#include-a-packaged-mcpb-server). Menetapkan pengaturan `user_config` server itu sendiri

292 298 

293Tab juga dapat menunjukkan plugin di cakupan **Managed**. Organisasi Anda menginstal mereka melalui [pengaturan terkelola](/docs/id/settings#settings-files), dan Anda tidak dapat mengaktifkan, menonaktifkan, atau mencopot mereka di sini.299Tab juga dapat menunjukkan plugin di cakupan **Managed**. Organisasi Anda menginstal mereka melalui [pengaturan terkelola](/docs/id/settings#settings-files), dan Anda tidak dapat mengaktifkan, menonaktifkan, atau mencopot mereka di sini.

294 300 

Details

146| [`dependencies`](#dependencies) | Array of strings or objects | Plugin yang harus diaktifkan agar yang ini berfungsi |146| [`dependencies`](#dependencies) | Array of strings or objects | Plugin yang harus diaktifkan agar yang ini berfungsi |

147| [`settings`](#settings) | Object | Pengaturan yang Claude Code terapkan saat plugin diaktifkan. Hanya `agent` dan `subagentStatusLine` yang berlaku |147| [`settings`](#settings) | Object | Pengaturan yang Claude Code terapkan saat plugin diaktifkan. Hanya `agent` dan `subagentStatusLine` yang berlaku |

148| [`userConfig`](#user-configuration) | Object | Nilai yang Claude Code minta kepada pengguna saat plugin diaktifkan |148| [`userConfig`](#user-configuration) | Object | Nilai yang Claude Code minta kepada pengguna saat plugin diaktifkan |

149| `types` | Path | File `.d.ts` yang mendeklarasikan nilai `$.state` dan kata benda `$` dari [mod](/docs/id/plugins/mods/reference#files) |

149| [`channels`](#channels) | Array of objects | Saluran pesan yang disediakan plugin, masing-masing terikat ke salah satu server MCP-nya |150| [`channels`](#channels) | Array of objects | Saluran pesan yang disediakan plugin, masing-masing terikat ke salah satu server MCP-nya |

150| `skills` | Path, or array of paths | Direktori untuk dipindai untuk skills, masing-masing direktori folder `<name>/SKILL.md` atau satu folder yang menyimpan `SKILL.md` secara langsung. `"."` menamai root plugin. Menambah pemindaian default `skills/` |151| `skills` | Path, or array of paths | Direktori untuk dipindai untuk skills, masing-masing direktori folder `<name>/SKILL.md` atau satu folder yang menyimpan `SKILL.md` secara langsung. `"."` menamai root plugin. Menambah pemindaian default `skills/` |

151| [`commands`](#commands) | Path, array of paths, or object | File perintah `.md` datar, direktori mereka, atau peta objek nama perintah ke `source` atau `content`. Menggantikan pemindaian default `commands/` |152| [`commands`](#commands) | Path, array of paths, or object | File perintah `.md` datar, direktori mereka, atau peta objek nama perintah ke `source` atau `content`. Menggantikan pemindaian default `commands/` |


170 171 

171Claude Code mem-namespace setiap komponen di bawahnya, jadi agent `reviewer` dalam plugin `deploy-tools` muncul sebagai `deploy-tools:reviewer`.172Claude Code mem-namespace setiap komponen di bawahnya, jadi agent `reviewer` dalam plugin `deploy-tools` muncul sebagai `deploy-tools:reviewer`.

172 173 

174`claude plugin validate` juga memeriksa bahwa nama tidak lulus sebagai salah satu plugin Anthropic sendiri. Pemeriksaan mengabaikan kasus dan memperlakukan setiap rangkaian pemisah sebagai satu:

175 

176| Name | Result |

177| :- | :- |

178| Dimulai dengan `claude-`, `anthropic-`, `anthropics-`, atau `cc-plugin-` | Error |

179| Adalah `claude`, `anthropic`, `anthropics`, `claude-code`, atau `claude-mods` | Error |

180| Menempatkan `official` di samping `claude` atau `anthropic`, seperti `official-claude-tools` | Error |

181| Memiliki `claude`, `anthropic`, atau `anthropics` sebagai kata utuh di mana pun, seperti `mcp-for-claude` | Warning |

182 

183Error berbunyi `Plugin name "<name>" is reserved: it passes as one of Anthropic's own`, dan warning berbunyi `Plugin name "<name>" reads as one of Anthropic's own`. `claude plugin init` dan `claude plugin tag` menolak nama yang menghasilkan error. Hanya perintah ini yang memeriksa nama. Claude Code masih menginstal dan memuat plugin yang nama mereka tolak.

184 

173<h3 id="displayname">185<h3 id="displayname">

174 `displayName`186 `displayName`

175</h3>187</h3>

Details

484| `Author name cannot be empty` | Error | `owner.name` |484| `Author name cannot be empty` | Error | `owner.name` |

485| `Plugin name cannot contain spaces. Use kebab-case (e.g., "my-plugin")` | Error | `plugins[i].name` |485| `Plugin name cannot contain spaces. Use kebab-case (e.g., "my-plugin")` | Error | `plugins[i].name` |

486| `Plugin name cannot contain control or bidirectional-formatting characters` | Error | `plugins[i].name` |486| `Plugin name cannot contain control or bidirectional-formatting characters` | Error | `plugins[i].name` |

487| `Plugin name "x" is reserved: it passes as one of Anthropic's own` | Error | `plugins[i].name`. Lihat [`name`](/docs/id/plugins/manifest-reference#name) manifest untuk nama yang dicadangkan |

488| `Plugin name "x" reads as one of Anthropic's own` | Warning | `plugins[i].name` |

487| `Claude Code cannot install plugins from marketplace "x". Each part of a plugin id (plugin@marketplace) may use only the letters a-z and A-Z, digits, ".", "_" and "-", and must start with a letter or digit. Change the marketplace's "name".` | Error | `name` |489| `Claude Code cannot install plugins from marketplace "x". Each part of a plugin id (plugin@marketplace) may use only the letters a-z and A-Z, digits, ".", "_" and "-", and must start with a letter or digit. Change the marketplace's "name".` | Error | `name` |

488| `Claude Code cannot install plugin "x". Each part of a plugin id (plugin@marketplace) may use only the letters a-z and A-Z, digits, ".", "_" and "-", and must start with a letter or digit. Change this entry's "name".` | Error | `plugins[i].name` |490| `Claude Code cannot install plugin "x". Each part of a plugin id (plugin@marketplace) may use only the letters a-z and A-Z, digits, ".", "_" and "-", and must start with a letter or digit. Change this entry's "name".` | Error | `plugins[i].name` |

489| `Duplicate plugin name "x" found in marketplace` | Error | Dua entri berbagi `name` |491| `Duplicate plugin name "x" found in marketplace` | Error | Dua entri berbagi `name` |

plugins/mods/admin.md +375 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Kelola mod untuk organisasi Anda

6 

7> Kontrol mod Claude Code dengan pengaturan terkelola: hentikan mod yang dipasang pengguna, izinkan hanya milik Anda sendiri, tinjau apa yang dapat dilakukan mod, dan terapkan kebijakan dengan mod Anda sendiri.

8 

9Sebuah [mod](/docs/id/plugins/mods/overview) adalah plugin yang menjalankan kode di dalam Claude Code dengan izin pengguna yang memasangnya. Mod tidak disandboxkan. Melalui [pengaturan terkelola](/docs/id/managed-settings), Anda memutuskan apakah mod berjalan di mesin pengguna Anda, mod mana, dan dalam urutan apa. Anda juga dapat memasang mod Anda sendiri yang mengawasi atau menolak apa yang dilakukan mod lain.

10 

11Halaman ini untuk orang yang menerapkan pengaturan terkelola untuk Claude Code, baik sebagai file, melalui MDM, atau dari konsol admin claude.ai. Mod aktif secara default di Claude Code v2.1.287 dan yang lebih baru. Mulai dengan bagian yang sesuai dengan apa yang ingin Anda lakukan:

12 

13* **Jauhkan mod milik pengguna, dengan atau tanpa mod milik Anda sendiri**: [Hentikan mod yang dipasang pengguna dari memuat](#stop-user-installed-mods-from-loading)

14* **Lihat apa yang didapat pengguna Anda saat Anda tidak mengubah apa pun**: [Ketahui apa yang terjadi secara default](#know-what-happens-by-default)

15* **Biarkan mod tetap aktif dengan batasan lain**: [Pilih berapa banyak yang akan diizinkan](#choose-how-much-to-allow)

16 

17<Note>

18 Kasus-kasus ini tercakup di halaman lain:

19 

20 * **Anda belum pernah menerapkan pengaturan terkelola sebelumnya**: mulai dengan [Terapkan pengaturan terkelola](/docs/id/managed-settings)

21 * **Anda ingin mengontrol plugin mana yang dapat dipasang pengguna**: lihat [Kelola plugin untuk organisasi Anda](/docs/id/plugins/org)

22</Note>

23 

24<h2 id="stop-user-installed-mods-from-loading">

25 Hentikan mod yang dipasang pengguna dari memuat

26</h2>

27 

28Untuk mencegah setiap mod yang dibawa pengguna Anda dari memuat, atur opsi `allowManagedModsOnly` pada [penjaga bawaan](#know-what-happens-by-default), mod kebijakan yang dimuat Claude Code sebelum setiap mod yang dipasang pengguna. Opsi ini masuk dalam pengaturan terkelola di bawah `pluginConfigs`, dengan kunci `cc-plugin-sec-default@builtin`:

29 

30```json managed-settings.json theme={null}

31{

32 "pluginConfigs": {

33 "cc-plugin-sec-default@builtin": {

34 "options": {

35 "allowManagedModsOnly": true

36 }

37 }

38 }

39}

40```

41 

42Dengan opsi yang diatur dalam pengaturan terkelola:

43 

44* **Tidak ada mod yang dibawa pengguna yang memuat**: itu mencakup mod dalam plugin yang dipasang pengguna, mod yang dimuat dengan `--plugin-dir`, dan mod [yang ditulis Claude selama sesi](/docs/id/plugins/mods/create#ask-claude-for-a-mod)

45* **Mod organisasi Anda masih memuat**: mod yang [dihitung sebagai milik organisasi Anda](#install-your-organizations-mods) tidak diperiksa. Setiap mod lainnya dihitung sebagai milik pengguna dan tidak memuat. Itu termasuk mod dalam plugin yang Anda aktifkan dari GitHub atau pasar jarak jauh lainnya, dan yang diaktifkan organisasi Anda untuk anggotanya di claude.ai. Jika tidak ada yang dihitung sebagai milik Anda, tidak ada mod yang dipasang yang memuat.

46* **Pengguna tidak dapat membatalkannya**: penjaga membaca opsi dari pengaturan terkelola saja, jadi entri yang sama dalam file pengaturan pengguna, proyek, atau lokal, atau dalam file yang dilewatkan dengan `--settings`, tidak mengubah apa pun

47* **File atau kebijakan MDM mencakup setiap penyedia**: saat Anda mengirimkan opsi sebagai file atau melalui MDM, opsi ini bekerja dengan cara yang sama di Amazon Bedrock, Agent Platform Google Cloud, dan Microsoft Foundry. Untuk pengiriman dari konsol admin claude.ai, lihat [Ketersediaan Platform](/docs/id/server-managed-settings#platform-availability)

48* **Kustomisasi lain pengguna tetap berfungsi**: [hook mereka dalam file pengaturan](/docs/id/hooks), baris status, dan `/goal` tidak terpengaruh

49* **Mod bawaan tetap berjalan**: mod yang dibangun ke dalam Claude Code, seperti dukungan `AGENTS.md`, masing-masing memiliki [sakelar mereka sendiri](/docs/id/plugins/mods/overview#mods-built-into-claude-code)

50 

51Untuk mengonfirmasi opsi di mesin pengguna, mulai Claude Code di sana dengan `--plugin-dir` dan jalur direktori yang menyimpan mod, seperti `claude --plugin-dir ./first-mod`. Hook mod tidak berjalan, dan transkrip serta log debug memiliki [pesan penjaga](/docs/id/plugins/mods/troubleshoot#messages-from-the-built-in-guard), yang menyebutkan nama mod dan `allowManagedModsOnly`. Jika mod memuat, lihat [Periksa bahwa kebijakan berlaku](/docs/id/managed-settings#check-that-a-policy-is-in-force) dan [aturan yang memutuskan apakah opsi berlaku](#set-options-on-the-built-in-guard).

52 

53Jika Anda menetapkan `CLAUDE_CODE_ENABLE_FUNCTION_HOOKS` ke `0` selama akses awal, gantikan dengan opsi ini. Claude Code v2.1.287 dan yang lebih baru mengabaikan variabel pada nilai apa pun, jadi `0` di sana membiarkan mod tetap aktif.

54 

55<h2 id="know-what-happens-by-default">

56 Ketahui apa yang terjadi secara default

57</h2>

58 

59Tanpa pengaturan mod Anda sendiri, inilah yang didapat pengguna Anda:

60 

61* **Mod aktif.** Pengguna dapat memasang plugin yang berisi mod dari pasar apa pun yang diizinkan pengaturan plugin Anda, atau memuat satu dari direktori dengan `--plugin-dir`.

62* **Penjaga bawaan berjalan terlebih dahulu.** Claude Code memuat mod bawaan bernama `sec-default@builtin` sebelum setiap mod yang dipasang pengguna. Pengguna tidak dapat mematikannya. `/plugin` dan log debug mencantumkannya sebagai `cc-plugin-sec-default`. Penjaga memuat saat salah satu dari ini benar:

63 

64 * Mesin memiliki pengaturan terkelola

65 * Pengguna masuk ke Claude Code dengan paket Team atau Enterprise

66 

67 Pengguna yang mengautentikasi dengan kunci API, atau melalui Amazon Bedrock, Agent Platform Google Cloud, atau Microsoft Foundry, mendapatkan penjaga hanya di mesin yang memiliki pengaturan terkelola.

68* **Penjaga melindungi apa yang Anda kelola.** Mod pengguna tidak dapat mengubah apa yang diterima atau diputuskan hook terkelola Anda, prompt sistem, `CLAUDE.md` terkelola Anda dan instruksi terkelola lainnya, apa yang dibaca mod apa pun sebagai pengaturan, atau alat dan deskripsi server MCP terkelola Anda.

69* **Semuanya yang lain diizinkan.** Penjaga tidak menambahkan batasan lain. Mod pengguna masih dapat membaca dan menulis file, memulai proses, membuat permintaan jaringan, menulis ulang panggilan alat dan prompt, menolak panggilan alat, menyetujui yang sebaliknya akan meminta, dan menggambar di antarmuka, semuanya dengan izin pengguna itu.

70* **Aturan penolakan dan hook terkelola Anda memiliki prioritas.** Di mana penjaga memuat, mod pengguna tidak dapat menyetujui panggilan yang ditolak aturan `deny`, file pengaturan mana pun yang menyimpan aturan. Blok dari hook `PreToolUse` dalam pengaturan terkelola juga final. Keduanya berlaku untuk panggilan alat Claude. Tidak satupun berlaku untuk panggilan [`$.fs` dan `$.process` milik mod](/docs/id/plugins/mods/api#reach-files-processes-and-the-network): dengan `Read(.env)` ditolak, mod masih dapat membaca file itu dengan `$.fs.read` atau memulai program yang melakukannya. Untuk membatasi panggilan tersebut, jauhkan mod dari memuat atau hook panggilan dalam [mod kebijakan](#enforce-a-policy-with-a-mod-of-your-own).

71* **Pemeriksaan izin lainnya dapat ditimpa.** Mod pengguna yang menyetujui panggilan alat dapat menyetujui panggilan yang akan diminta aturan `ask`, atau yang diblokir hook `PreToolUse` di luar pengaturan terkelola. Dalam mode otomatis, panggilan yang disetujui mod berjalan tanpa pemeriksaan pengklasifikasi.

72 

73Sumber penjaga bersifat publik di [direktori `mods/sec-default` dari repositori Claude Code](https://github.com/anthropics/claude-code/tree/main/mods/sec-default).

74 

75<h3 id="know-which-controls-still-apply">

76 Ketahui kontrol mana yang masih berlaku

77</h3>

78 

79Mod tidak menggantikan kontrol yang sudah Anda miliki:

80 

81* **Hook pengaturan tetap berfungsi.** Hook perintah, HTTP, prompt, dan agen dalam file pengaturan dan dalam `hooks/hooks.json` plugin berjalan seperti sebelumnya, bersama mod. Tidak ada yang sudah usang tentang mereka.

82* **Aturan penolakan memiliki prioritas di mana penjaga memuat.** Mod pengguna tidak dapat menyetujui panggilan yang ditolak aturan `deny`, kecuali Anda menetapkan [`allowModsToOverrideDenyRules`](#set-options-on-the-built-in-guard).

83* **Hook terkelola berjalan terlebih dahulu.** Hook `PreToolUse` dalam pengaturan terkelola berjalan sebelum mod apa pun melihat panggilan alat, dan bloknya final. Jika mod kemudian menulis ulang panggilan, hook terkelola Anda berjalan lagi pada panggilan yang ditulis ulang, jadi blok masih berlaku. Hook `PreToolUse` dari file pengaturan lain dan dari plugin berjalan setelah mod terakhir, jadi mod yang mengembalikan hasilnya sendiri sebagai pengganti menjalankan alat mencegah yang lain berjalan. Lihat [Urutan mod berjalan](/docs/id/plugins/mods/events#the-order-mods-run-in).

84* **Kebijakan jaringan mencakup `$.http.fetch`.** Jika organisasi Anda mematikan pengambilan web, atau lalu lintas jaringan yang tidak penting dimatikan untuk sesi, Claude Code menolak permintaan jaringan yang dibuat mod dengan `$.http.fetch`. Kebijakan tidak mencakup program yang dimulai mod dengan `$.process.run`. Program itu menjangkau jaringan dengan akses pengguna mereka sendiri.

85* **Kontrol plugin mencakup mod.** Mod adalah plugin, jadi [pengaturan yang membatasi apa yang dapat dipasang pengguna](/docs/id/plugins/org#restrict-what-users-can-install), seperti `strictKnownMarketplaces`, memutuskan apakah itu dapat dipasang sama sekali.

86* **Mod tidak dapat mengubah prompt izin.** Mod dapat mengubah gaya banyak antarmuka Claude Code, tetapi bukan prompt izin, jadi tidak dapat mengubah apa yang ditampilkan prompt. Mod masih dapat menyetujui atau menolak panggilan alat sebelum prompt muncul, seperti yang dijelaskan [Ketahui apa yang terjadi secara default](#know-what-happens-by-default).

87* **Prompt kepercayaan datang terlebih dahulu.** Dalam sesi interaktif di direktori yang belum dipercaya pengguna, tidak ada mod yang memuat sampai mereka menjawab prompt kepercayaan.

88* **`--safe-mode` mematikan mod yang dipasang, termasuk milik Anda.** Mulai sesi dengan `claude --safe-mode` untuk memeriksa apakah mod menyebabkan masalah.

89 

90Tidak satupun dari kontrol ini mensandboxkan mod. Mod yang Anda izinkan berjalan sebagai pengguna, dengan akses pengguna ke file, proses, dan jaringan.

91 

92<h2 id="decide-whether-to-leave-mods-on">

93 Putuskan apakah akan membiarkan mod tetap aktif

94</h2>

95 

96Mod 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.

97 

98Apa yang dapat dimuat pengguna sebagai mod tergantung pada kontrol plugin yang sudah Anda miliki:

99 

100| Kontrol plugin Anda hari ini | Apa yang dapat dimuat pengguna sebagai mod |

101| :- | :- |

102| Tidak ada | Mod dari pasar apa pun, dari direktori apa pun dengan `--plugin-dir`, atau yang ditulis Claude selama sesi |

103| Daftar izin pasar | Mod dari pasar yang Anda izinkan, atau dari direktori apa pun dengan `--plugin-dir`. Mod yang ditulis Claude selama sesi memuat hanya saat daftar izin [mencakup `skills-dir`](/docs/id/plugins/org#keep-skills-directory-plugins-loading). |

104| Daftar izin pasar dan `disableSideloadFlags` | Mod dari pasar yang Anda izinkan |

105 

106[Kelola plugin untuk organisasi Anda](/docs/id/plugins/org) mencantumkan setiap cara plugin memuat dan pengaturan yang mengontrol masing-masing.

107 

108Untuk memeriksa mod dalam pasar sebelum pengguna Anda memasangnya, lihat [Tinjau apa yang dapat dilakukan mod](#review-what-a-mod-can-do). Untuk menjaga mod pengguna tetap keluar sampai Anda melakukannya, lihat [Hentikan mod yang dipasang pengguna dari memuat](#stop-user-installed-mods-from-loading).

109 

110<h3 id="review-what-a-mod-can-do">

111 Tinjau apa yang dapat dilakukan mod

112</h3>

113 

114Anda dapat melihat apa yang dapat dilakukan mod tanpa menjalankannya. Di shell Anda, jalankan `claude plugin validate` pada direktori plugin:

115 

116```bash theme={null}

117claude plugin validate ./some-mod

118```

119 

120Dua baris dalam output menjelaskan kode mod:

121 

122```text theme={null}

123 ❯ ./register.js hooks: session.start, tool.call, ui.render{component=Pane}

124 ❯ ./register.js calls: $.fs.read, $.http.fetch, $.store.set, $.ui.open

125```

126 

127Baris `hooks:` mencantumkan peristiwa yang diterima mod. Baris `calls:` mencantumkan metode API mod yang dipanggil kodenya. [API mod](/docs/id/plugins/mods/api), ditulis `$` dalam kode mod, adalah cara mod menjangkau file, proses, dan jaringan. Claude Code menolak untuk memuat mod yang menggunakan API mod dengan cara yang tidak dapat dibaca perintah ini.

128 

129Lihat baris `calls:` untuk ini:

130 

131| Panggilan | Apa artinya |

132| :- | :- |

133| `$.fs.read`, `$.fs.write` | Membaca atau menulis file di mana pun pengguna dapat |

134| `$.process.run`, `$.process.spawn` | Memulai program sebagai pengguna |

135| `$.http.fetch` | Membuat permintaan jaringan |

136| `$.env.get`, `$.settings.read` | Membaca variabel lingkungan dan pengaturan, yang dapat menyimpan kunci API. Baris `env reads:` dalam output menyebutkan setiap variabel. |

137| `$.env.set` | Menetapkan variabel lingkungan untuk Claude Code dan untuk setiap perintah dan server MCP yang dimulainya setelahnya, yang dapat mengubah apa yang dijalankan program tersebut. Baris `env writes:` menyebutkan setiap variabel. |

138| `$.mcp.call` | Memanggil alat pada server MCP yang terhubung, di bawah aturan izin sesi |

139| `$.model.complete` | Menggunakan paket atau kunci API pengguna untuk panggilan model |

140| `$.prompt.submit` | Mengirimkan prompt, dan dapat mengirimkannya sebagai kata-kata pengguna sendiri |

141| `$.session.send` | Mengirimkan pesan yang dibaca sesi lain atau subagen Claude |

142 

143Dalam baris `hooks:`, [`tool.call`](/docs/id/plugins/mods/reference#tools) dan [`prompt.submit`](/docs/id/plugins/mods/reference#prompts-and-what-claude-reads) berarti mod melihat setiap panggilan alat dan setiap prompt, dan dapat mengubahnya. [`session.append`](/docs/id/plugins/mods/reference#session) berarti mod dapat menulis ulang setiap baris percakapan sebelum disimpan. [`ui.render{component=AskUserQuestion}`](/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.

144 

145<h2 id="choose-how-much-to-allow">

146 Pilih berapa banyak yang akan diizinkan

147</h2>

148 

149Kebijakan mod berkisar dari tidak ada mod yang dipasang sama sekali hingga mod apa pun yang dipilih pengguna, dengan mod Anda sendiri memeriksa yang lain, dan masing-masing adalah beberapa pengaturan terkelola. Temukan kebijakan yang Anda inginkan di kolom pertama dan atur apa yang dinamai kolom kedua. [Terapkan pengaturan terkelola](/docs/id/managed-settings) mencakup di mana pengaturan terkelola berada.

150 

151| Apa yang Anda inginkan | Pengaturan |

152| :- | :- |

153| Tidak ada mod yang dipasang, dengan hook tidak tersentuh | Atur [`allowManagedModsOnly`](#set-options-on-the-built-in-guard) dan jangan terapkan mod Anda sendiri |

154| Tidak ada mod yang dipasang dan tidak ada hook sama sekali, termasuk hook terkelola Anda | Atur `disableAllHooks` ke `true` |

155| Hanya mod organisasi Anda | Atur opsi [`allowManagedModsOnly`](#stop-user-installed-mods-from-loading) penjaga, dan [pasang mod Anda](#install-your-organizations-mods) sehingga dihitung sebagai milik Anda |

156| Mod apa pun dari pasar yang Anda setujui | Pertahankan [pembatasan pasar Anda](/docs/id/plugins/org#restrict-what-users-can-install), dan atur `disableSideloadFlags` ke `true` |

157| Mod apa pun, dengan mod Anda sendiri memeriksa yang lain | [Pasang mod Anda](#install-your-organizations-mods), dan cantumkan dengan `sec-default@builtin` dalam `prependPlugins` |

158 

159Apa yang dilakukan setiap pengaturan:

160 

161* **`allowManagedModsOnly`**: opsi pada penjaga bawaan. Mod pengguna tidak memuat, dan hook pengaturan, baris status, dan `/goal` mereka tetap berfungsi. [Hentikan mod yang dipasang pengguna dari memuat](#stop-user-installed-mods-from-loading) mencantumkan apa yang dicakupnya.

162* **`allowManagedHooksOnly`**: pengaturan yang lebih luas. Hanya [mod organisasi Anda](#install-your-organizations-mods) dan mod yang dibangun ke dalam Claude Code yang memuat. Mod yang dipasang pengguna sendiri tidak. Pengaturan juga memblokir hook dalam file pengaturan pengguna mereka sendiri. Baca [Apa yang berjalan di bawah `allowManagedHooksOnly`](/docs/id/settings-reference#what-runs-under-allowmanagedhooksonly) sebelum Anda menetapkannya.

163* **`disableAllHooks`**: pengaturan terluas. Dalam pengaturan terkelola, ini menghentikan mod dalam setiap plugin yang dipasang, termasuk milik Anda, dan mematikan setiap hook dalam file pengaturan, jadi hook `PreToolUse` dalam pengaturan terkelola Anda tidak lagi memblokir apa pun. Baris status khusus dan `/goal` juga berhenti bekerja. Baca [`disableAllHooks`](/docs/id/settings-reference#disableallhooks) sebelum Anda menetapkannya.

164* **`disableSideloadFlags`**: menolak `--plugin-dir` dan `--plugin-url` saat startup, jadi tidak ada yang memuat mod dari direktori, dan menjaga mod yang ditulis Claude selama sesi dari memuat. Pengaturan juga menolak `--agents` dan `--mcp-config`. Baca [`disableSideloadFlags`](/docs/id/settings-reference#disablesideloadflags) sebelum Anda menetapkannya.

165 

166Mod yang dibangun ke dalam Claude Code, seperti dukungan `AGENTS.md`, tidak terpengaruh oleh pengaturan ini. Masing-masing memiliki [sakelar sendiri](/docs/id/plugins/mods/overview#mods-built-into-claude-code).

167 

168Pengguna yang modnya tidak memuat menemukan alasannya dalam log debug mereka. [Pesan penolakan](/docs/id/plugins/mods/troubleshoot#refusal-messages) mencantumkan baris untuk `allowManagedHooksOnly` dan `disableAllHooks`, dan [Pesan dari penjaga bawaan](/docs/id/plugins/mods/troubleshoot#messages-from-the-built-in-guard) memiliki baris untuk `allowManagedModsOnly`.

169 

170<h3 id="set-options-on-the-built-in-guard">

171 Atur opsi pada penjaga bawaan

172</h3>

173 

174Penjaga bawaan mengambil dua opsi. Atur dalam pengaturan terkelola di bawah `pluginConfigs`, dengan kunci `cc-plugin-sec-default@builtin`, seperti yang dilakukan contoh dalam [Hentikan mod yang dipasang pengguna dari memuat](#stop-user-installed-mods-from-loading).

175 

176Tabel memberikan apa yang didapat pengguna Anda dengan setiap opsi tidak diatur dan dengan diatur ke `true`:

177 

178| Opsi | Tidak diatur | `true` |

179| :- | :- | :- |

180| `allowManagedModsOnly` | Mod pengguna memuat | Hanya [mod organisasi Anda](#install-your-organizations-mods), dan mod yang dibangun ke dalam Claude Code, yang memuat. Claude Code menolak setiap mod lainnya, termasuk yang dipasang pengguna atau dinamai dengan `--plugin-dir`. |

181| `allowModsToOverrideDenyRules` | Aturan penolakan memiliki prioritas atas mod pengguna | Mod pengguna yang menyetujui panggilan alat dapat menyetujui panggilan yang ditolak aturan `deny` |

182 

183Aturan-aturan ini memutuskan apakah opsi berlaku:

184 

185* **Id memiliki satu ejaan di sini**: Claude Code membaca opsi hanya di bawah `cc-plugin-sec-default@builtin`. `prependPlugins` menerima `sec-default@builtin` juga, dan `pluginConfigs` tidak.

186* **Hanya pengaturan terkelola yang dihitung**: entri yang sama dalam file pengaturan pengguna, proyek, atau lokal, atau dalam file yang dilewatkan dengan `--settings`, tidak menetapkan opsi atau melonggarkan opsi

187* **Penjaga harus memuat**: jika Anda menetapkan `prependPlugins`, [sebutkan penjaga dalam daftar](#install-your-organizations-mods). Di mana penjaga tidak memuat, opsi tidak berlaku.

188* **Penjaga gagal tertutup**: jika penjaga tidak dapat membaca pengaturan terkelola, penjaga menolak setiap mod pengguna saat memuat. Jika tidak dapat memeriksa aturan penolakan untuk panggilan yang disetujui mod pengguna, penjaga menolak panggilan.

189 

190[Pesan dari penjaga bawaan](/docs/id/plugins/mods/troubleshoot#messages-from-the-built-in-guard) adalah apa yang dilihat pengguna Anda saat opsi berlaku.

191 

192<h2 id="run-your-organization’s-own-mods">

193 Jalankan mod organisasi Anda sendiri

194</h2>

195 

196Anda dapat menerapkan mod Anda sendiri ke setiap pengguna, memilih di mana mereka berjalan relatif terhadap mod pengguna, dan menggunakan satu untuk menegakkan kebijakan.

197 

198<h3 id="install-your-organizations-mods">

199 Pasang mod organisasi Anda dan atur urutan

200</h3>

201 

202Mod organisasi Anda memuat di mana mod pengguna tidak dan dapat berjalan sebelum mereka, jadi Claude Code harus dapat mengatakan bahwa mod berasal dari Anda. Ini memperlakukan mod sebagai milik organisasi Anda hanya saat semua ini benar:

203 

204* Managed `enabledPlugins` menetapkan plugin mod ke `true`

205* Pengaturan terkelola menyebutkan [pasar](/docs/id/plugins/create-marketplace) plugin sebagai direktori di mesin pengguna, menurut jalur absolut. Entri `extraKnownMarketplaces` melakukan itu dan juga mendaftarkan pasar untuk pengguna.

206* Pasar mencantumkan plugin menurut jalur relatif, jadi Claude Code [memuatnya di tempat](/docs/id/plugins/loading#in-place-and-copied-plugins) dari direktori itu

207 

208Untuk memenuhinya, buat manajemen perangkat Anda menyalin direktori pasar ke jalur yang sama di setiap mesin. Buat direktori dan setiap direktori di atasnya dapat ditulis hanya oleh administrator, seperti file pengaturan terkelola. Siapa pun yang dapat menulis di sana dapat menulis ulang mod Anda. Pengaturan terkelola yang Anda kirimkan dari konsol admin claude.ai dapat membawa kunci, tetapi tidak dapat menempatkan direktori di mesin.

209 

210Direktori menyimpan manifes pasar dan plugin:

211 

212```text theme={null}

213/opt/acme/claude-plugins/

214├── .claude-plugin/

215│ └── marketplace.json

216└── plugins/

217 └── acme-guard/

218 ├── .claude-plugin/

219 │ └── plugin.json

220 └── hooks/

221 ├── hooks.json

222 └── register.js

223```

224 

225Manifes mencantumkan plugin menurut jalurnya relatif terhadap direktori itu:

226 

227```json /opt/acme/claude-plugins/.claude-plugin/marketplace.json theme={null}

228{

229 "name": "acme-tools",

230 "owner": { "name": "Acme" },

231 "plugins": [

232 { "name": "acme-guard", "source": "./plugins/acme-guard", "description": "Acme policy mod" }

233 ]

234}

235```

236 

237Plugin yang disalin Claude Code ke dalam cache-nya dihitung sebagai milik pengguna, bahkan saat managed `enabledPlugins` mengaktifkannya. Itu mencakup setiap plugin dari sumber GitHub, git, URL, atau npm. Modnya berjalan di antara mod pengguna, `prependPlugins` dan `appendPlugins` melewatinya, dan tidak memuat di bawah `allowManagedModsOnly` atau `allowManagedHooksOnly`. Log debug pengguna memiliki baris yang dimulai dengan id plugin dan `is enabled by managed settings, but`.

238 

239Claude Code menaikkan peristiwa setiap kali akan bertindak, seperti menjalankan alat, dan meneruskannya ke setiap mod secara bergantian. Mod yang dihitung sebagai milik Anda [berjalan sebelum mod pengguna](/docs/id/plugins/mods/events#the-order-mods-run-in) bahkan saat Anda tidak mencantumkannya di mana pun. Untuk menetapkan tempatnya, cantumkan id-nya dalam salah satu dari dua pengaturan. Id adalah nama plugin, `@`, dan nama pasar, seperti `acme-guard@acme-tools`.

240 

241* **`prependPlugins`**: mod Anda melihat setiap peristiwa sebelum mod pengguna apa pun dan setiap hasil setelahnya. Ini dapat mengubah peristiwa, menolaknya, atau melewati mod pengguna.

242* **`appendPlugins`**: mod Anda berjalan setelah setiap mod pengguna, jadi hanya melihat peristiwa yang dilewatkan mod tersebut, dalam bentuk yang mereka lewatkan

243 

244Contoh ini mendeklarasikan pasar `acme-tools` di `/opt/acme/claude-plugins`, mengaktifkan `acme-guard` darinya, dan menjalankan mod itu terlebih dahulu, dengan penjaga bawaan setelahnya:

245 

246```json managed-settings.json theme={null}

247{

248 "extraKnownMarketplaces": {

249 "acme-tools": {

250 "source": { "source": "directory", "path": "/opt/acme/claude-plugins" }

251 }

252 },

253 "enabledPlugins": { "acme-guard@acme-tools": true },

254 "prependPlugins": ["acme-guard@acme-tools", "sec-default@builtin"]

255}

256```

257 

258Setiap kunci melakukan satu pekerjaan:

259 

260* **`extraKnownMarketplaces`**: menyebutkan direktori yang menyimpan pasar `acme-tools`. `path` adalah jalur absolut direktori yang berisi `.claude-plugin/marketplace.json`.

261* **`enabledPlugins`**: mengaktifkan `acme-guard` untuk setiap pengguna yang menerima pengaturan terkelola ini

262* **`prependPlugins`**: menempatkan `acme-guard` terlebih dahulu dan penjaga bawaan kedua, keduanya sebelum mod apa pun yang dipasang pengguna. Claude Code mengikuti urutan yang Anda cantumkan.

263 

264Untuk mengonfirmasi bahwa mesin pengguna menerima pengaturan, lihat [Periksa bahwa kebijakan berlaku](/docs/id/managed-settings#check-that-a-policy-is-in-force).

265 

266Untuk mengonfirmasi di mana mod berjalan, mulai sesi di mesin itu dengan `claude --debug` dan cari [log debug](/docs/id/plugins/mods/troubleshoot#read-the-debug-log) untuk id mod:

267 

268* **`hooks module acme-guard@acme-tools loaded`, dengan `tier prepend`**: mod dihitung sebagai milik organisasi Anda dan berjalan terlebih dahulu

269* **Baris yang sama dengan `tier user`**: Claude Code memperlakukannya sebagai mod pengguna. Baris kedua, `prependPlugins names acme-guard@acme-tools, which is not an enabled managed plugin with a hooks module; skipped`, mengatakan daftar melewatinya.

270 

271Aturan-aturan ini memutuskan id mana dalam dua daftar yang berlaku:

272 

273* **Daftar menggantikan default**: saat Anda menetapkan `prependPlugins` dalam pengaturan terkelola, sebutkan `sec-default@builtin` di dalamnya untuk menjaga penjaga bawaan. Penjaga dibangun dan tidak memerlukan entri `enabledPlugins`.

274* **Id Anda sendiri harus dihitung sebagai milik Anda**: dalam pengaturan terkelola, Claude Code melewati id yang pluginnya tidak memenuhi tiga kondisi untuk mod organisasi

275* **Repositori tidak dapat menetapkannya**: Claude Code membaca kedua pengaturan dari pengaturan terkelola dan tidak pernah dari file pengaturan repositori. Pengguna dapat menetapkannya dalam `~/.claude/settings.json` untuk mengurutkan mod mereka sendiri hanya di mesin tanpa pengaturan terkelola, dan hanya saat tidak masuk dengan paket Team atau Enterprise. Di tempat lain, Claude Code mengabaikan kedua kunci dalam pengaturan pengguna. Daftar di sana tidak menambah atau menghapus penjaga bawaan.

276 

277<h3 id="enforce-a-policy-with-a-mod-of-your-own">

278 Terapkan kebijakan dengan mod Anda sendiri

279</h3>

280 

281Untuk menjaga setiap mod pengguna keluar, Anda tidak memerlukan mod Anda sendiri. Atur [`allowManagedModsOnly`](#stop-user-installed-mods-from-loading). Tulis mod kebijakan saat Anda ingin mengakui beberapa mod pengguna dan menolak yang lain, atau untuk mencatat apa yang dilakukan mod.

282 

283Setiap kali mod lain akan memuat, mod Anda menerima daftar yang dicetak `claude plugin validate`, dalam peristiwa bernama [`plugin.register`](/docs/id/plugins/mods/reference#other-mods). Mod dalam `prependPlugins` dapat membaca daftar itu dan menolak mod. Ini juga dapat [hook panggilan API mod apa pun menurut nama](/docs/id/plugins/mods/api#reach-files-processes-and-the-network) untuk mencatat atau menolak panggilan itu untuk setiap mod lainnya. Nama adalah metode tanpa `$.`, jadi hook pada `fs.write` melihat setiap panggilan `$.fs.write`.

284 

285Mod kebijakan ini menolak mod pengguna apa pun yang kodenya sendiri memanggil `$.process.run` atau `$.process.spawn`. Ini juga menyimpan log audit, menulis setiap panggilan alat dan setiap file yang ditulis mod ke log debug. Karena berjalan terlebih dahulu, log mencatat apa yang diminta, sebelum mod pengguna apa pun mengubahnya. Simpan sebagai `acme-guard/hooks/register.js`:

286 

287```javascript acme-guard/hooks/register.js theme={null}

288// Metode yang tidak boleh dipanggil mod pengguna apa pun, masing-masing dieja namespace.method

289const BLOCKED_CALLS = ['process.run', 'process.spawn']

290 

291export function register(on) {

292 // Berjalan setiap kali mod lain akan memuat

293 on('plugin.register', async ($, e, next) => {

294 // Simpan panggilan dalam kode mod itu yang ada dalam daftar yang diblokir

295 const blocked = e.uses.calls.filter((call) => BLOCKED_CALLS.includes(call))

296 if (e.tier === 'user' && blocked.length > 0) {

297 // Mengembalikan refuse menjaga mod dari memuat, dan teksnya adalah alasannya

298 return { refuse: 'Acme policy: mods may not call ' + blocked.join(', ') }

299 }

300 // Biarkan setiap mod lain memuat

301 return next(e)

302 })

303 

304 // Catat setiap panggilan alat, kemudian biarkan maju tanpa perubahan

305 on('tool.call', async ($, e, next) => {

306 $.ui.log('audit tool.call ' + e.tool, { to: 'debug' })

307 return next(e)

308 })

309 

310 // Catat mod mana yang menulis file, kemudian jalurnya, dikutip karena mod memilihnya

311 on('fs.write', async ($, e, next) => {

312 $.ui.log('audit fs.write by ' + next.origin.plugin + ' ' + JSON.stringify(e.path), { to: 'debug' })

313 return next(e)

314 })

315}

316```

317 

318File mendaftarkan tiga hook:

319 

320* **`plugin.register`**: memutuskan apakah mod lain memuat. Ini menolak mod pengguna yang memanggil metode yang diblokir dan meneruskan setiap mod lainnya.

321* **`tool.call`**: menulis baris seperti `audit tool.call Bash` ke log debug untuk setiap panggilan alat, dan tidak mengubah apa pun

322* **`fs.write`**: menulis baris seperti `audit fs.write by reader "/tmp/notes.md"` untuk setiap panggilan `$.fs.write` yang dibuat mod lain, dan tidak mengubah apa pun. Nama mod datang terlebih dahulu dan jalurnya dikutip, jadi jalur yang dipilih mod tidak dapat lulus sebagai bidang lain dari baris.

323 

324Hook `plugin.register` membaca dua bidang peristiwa:

325 

326* **`e.tier`**: di mana mod akan berjalan, salah satu dari `prepend`, `user`, `append`, atau `builtin`. Setiap mod yang dipasang orang adalah `user`.

327* **`e.uses.calls`**: metode API mod yang dipanggil mod, masing-masing dieja `namespace.method` seperti `process.run`, tanpa `$.` yang dicetak `claude plugin validate`

328 

329Saat pengguna memasang mod yang memanggil `$.process.run`, mod tidak memuat, dan log debug mereka memiliki baris yang berakhir dengan `refused by acme-guard:` dan alasan Anda. Penolakan juga mencapai transkrip dalam [sesi yang memuat ulang panas direktori plugin](/docs/id/plugins/mods/troubleshoot#find-out-why-a-mod-does-nothing). Untuk memblokir panggilan tanpa menolak seluruh mod, kembalikan `{ deny: 'your reason' }` dari hook pada nama panggilan itu.

330 

331Untuk mengirim baris audit ke tempat lain selain log debug, panggil `$.http.fetch` dari hook yang sama.

332 

333Sesi dapat berjalan tanpa mod Anda. Jika thread pekerja yang menjalankan mod yang dipasang [mogok tiga kali](/docs/id/plugins/mods/troubleshoot#mods-that-run-in-the-hooks-worker-are-off-for-this-session), Claude Code membongkar setiap mod yang bukan bawaan, termasuk milik Anda, sampai pengguna menjalankan `/reload-plugins` atau memulai sesi baru. Dan pengguna yang memulai Claude Code dengan `--safe-mode` berjalan tanpa mod yang dipasang, termasuk milik Anda.

334 

335[Buat mod](/docs/id/plugins/mods/create) mencakup file yang dibutuhkan mod. [Uji mod yang menilai mod lain](/docs/id/plugins/mods/test#test-a-mod-that-judges-other-mods) memiliki file uji untuk mod kebijakan ini.

336 

337<h4 id="refuse-mods-when-your-check-fails">

338 Tolak mod saat pemeriksaan Anda gagal

339</h4>

340 

341Jika hook `plugin.register` Anda melempar atau melampaui batas waktu, Claude Code melewati hook, jadi pemeriksaan gagal terbuka dan mod yang diperiksa memuat. Untuk gagal tertutup dan menolak mod pengguna, pindahkan pemeriksaan ke fungsi bernama dan tambahkan handler `.catch` yang mengembalikan penolakan. Versi file ini menunjukkan hanya hook `plugin.register`, jadi simpan dua hook audit dari versi pertama dalam `register`:

342 

343```javascript acme-guard/hooks/register.js theme={null}

344const BLOCKED_CALLS = ['process.run', 'process.spawn']

345 

346// Pemeriksaan yang sama seperti sebelumnya, dipindahkan ke fungsi miliknya sendiri

347async function checkMod($, e, next) {

348 const blocked = e.uses.calls.filter((call) => BLOCKED_CALLS.includes(call))

349 if (e.tier === 'user' && blocked.length > 0) {

350 return { refuse: 'Acme policy: mods may not call ' + blocked.join(', ') }

351 }

352 return next(e)

353}

354 

355export function register(on) {

356 // Handler berjalan hanya saat checkMod melempar atau melampaui batas waktu

357 on('plugin.register', checkMod).catch(async ($, e, next) => {

358 // Biarkan mod organisasi Anda dan mod bawaan memuat

359 if (e.tier !== 'user') return next(e)

360 // Tolak mod pengguna yang tidak dapat diperiksa

361 return { refuse: 'Acme policy check failed, so this mod was not loaded' }

362 })

363}

364```

365 

366Dengan handler di tempat, mod yang sedang diperiksa saat pemeriksaan melempar atau kehabisan waktu tidak memuat, dan baris penolakan membawa alasan kedua, seperti dalam `refused by acme-guard: Acme policy check failed, so this mod was not loaded`. Handler meneruskan setiap mod di luar tier `user` ke `next(e)`, jadi pemeriksaan yang gagal tidak menghentikan mod yang dicantumkan organisasi Anda. [Tangani hook yang gagal](/docs/id/plugins/mods/events#handle-a-hook-that-fails) mencakup `.catch` untuk peristiwa lain.

367 

368<h2 id="next-steps">

369 Langkah berikutnya

370</h2>

371 

372* [Keamanan plugin](/docs/id/plugins/security): apa yang dapat dilakukan plugin apa pun di mesin pengguna, dan cara meninjau satu sebelum dipasang

373* [Ikhtisar mod](/docs/id/plugins/mods/overview): apa itu mod dan bagaimana perbandingannya dengan hook, skill, dan server MCP

374* [Urutan mod berjalan](/docs/id/plugins/mods/events#the-order-mods-run-in): bagaimana `prependPlugins` dan `appendPlugins` cocok dengan mod pengguna

375* [Pengaturan dan variabel lingkungan](/docs/id/plugins/mods/reference#settings-and-environment-variables): setiap pengaturan yang dinamai di halaman ini dalam satu tabel

plugins/mods/api.md +218 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Gunakan mods API

6 

7> Panggil mods API dari mod Claude Code untuk menambahkan perintah dan alat, memanggil model, menjalankan pekerjaan pada timer, mengirim pesan ke sesi lain, dan mengakses file serta jaringan.

8 

9Mods API adalah kumpulan metode yang dipanggil mod untuk bertindak: menambahkan perintah dan alat, memanggil model, menjalankan pekerjaan antar peristiwa, dan mengakses sistem file, proses, dan jaringan. Setiap hook menerimanya sebagai argumen pertamanya, `$`, dengan metode yang dikelompokkan dalam namespace seperti `$.ui` dan `$.fs`. [Events](/docs/id/plugins/mods/events) menentukan kapan hook berjalan, dan mods API adalah apa yang dipanggil hook setelah berjalan.

10 

11Bangun [mod pertama Anda](/docs/id/plugins/mods/create) sebelum Anda mulai di sini. Untuk setiap metode, lihat [mods API methods](/docs/id/plugins/mods/reference#mods-api-methods) atau baca [tipe untuk build Anda](/docs/id/plugins/mods/create#get-the-types-for-your-build).

12 

13<h2 id="add-a-command-or-a-tool">

14 Tambahkan perintah atau alat

15</h2>

16 

17Mod dapat menambahkan perintah untuk dijalankan pengguna dan alat untuk dipanggil Claude. Daftarkan keduanya dalam hook [`session.start`](/docs/id/plugins/mods/reference#session). Claude Code menunggu hook itu sebelum prompt pertama, jadi apa yang Anda daftarkan tersedia dari giliran pertama.

18 

19<h3 id="add-a-command">

20 Tambahkan perintah

21</h3>

22 

23Perintah adalah untuk pengguna. Daftarkan, kemudian tangani [`command.run`](/docs/id/plugins/mods/reference#commands-and-configuration) untuk namanya. Contoh ini menambahkan perintah `/standup` yang mengambil jumlah hari opsional:

24 

25```javascript theme={null}

26on('session.start', async ($, e, next) => {

27 // Add /standup to the command list, with the description the user sees there

28 await $.command.register({ name: 'standup', description: 'Summarize what changed today', argumentHint: '[days]' })

29 return next(e)

30})

31 

32// The matcher limits the hook to /standup, so other commands don't reach it

33on('command.run', { command: 'standup' }, async ($, e) => {

34 // e.args is the text typed after the command name, or an empty string

35 return { text: 'Summary for the last ' + (e.args || '1') + ' day(s): ...' }

36})

37```

38 

39Setelah sesi dimulai, `/standup` muncul dengan deskripsinya dalam daftar yang Anda lihat saat mengetik `/`. `argumentHint` ditampilkan dalam prompt setelah Anda mengetik perintah dan spasi, seperti `/standup [days]`. Saat Anda menjalankan `/standup 3`, hook kedua mengembalikan `Summary for the last 3 day(s): ...`, dan transkrip menunjukkan teks itu setelah nama plugin. Hook tidak pernah memanggil `next`, karena perintah tidak memiliki perilaku selain milik Anda.

40 

41`text` yang Anda kembalikan dicetak dalam transkrip dan Claude membacanya. Untuk tidak mencetak apa pun, seperti perintah yang hanya membuka [pane](/docs/id/plugins/mods/interface#pick-where-to-draw), kembalikan `{}`. Untuk membiarkan perintah berjalan saat Claude sedang bekerja, tambahkan `immediate: true` ke pendaftaran.

42 

43Pilih nama yang tidak digunakan oleh perintah bawaan. Ketik `/` dalam sesi untuk melihatnya. `$.command.register` melempar untuk nama yang diambil, dengan pesan seperti `"/focus" refused: it is the built-in /focus`. Hook yang melempar dilewati, jadi sisa hook `session.start` Anda tidak berjalan juga. Daftarkan perintah terakhir dalam hook itu, atau bungkus panggilan dalam `try` dan `catch`.

44 

45<h3 id="add-a-tool">

46 Tambahkan alat

47</h3>

48 

49Alat adalah untuk Claude. Daftarkan dengan nama, deskripsi yang dibaca Claude, dan JSON Schema untuk inputnya. Claude melihatnya dengan nama yang lebih panjang yang terdiri dari `mcp__`, nama plugin Anda, dua garis bawah, dan nama yang Anda daftarkan. Anda menangani panggilannya dalam hook [`tool.call`](/docs/id/plugins/mods/events#guard-or-change-a-tool-call) yang disaring ke nama lengkap itu. Contoh ini, dari plugin bernama `my-mod`, mendaftarkan `ticket`, jadi nama lengkapnya adalah `mcp__my-mod__ticket`. Ini memberi Claude alat yang mencari tiket dalam pelacak masalah:

50 

51```javascript theme={null}

52on('session.start', async ($, e, next) => {

53 await $.tool.register({

54 name: 'ticket',

55 // Claude decides when to call the tool from this description

56 description: 'Look up a ticket by its id and return its title and status',

57 // The arguments Claude has to send: one required string named id

58 inputSchema: { type: 'object', properties: { id: { type: 'string' } }, required: ['id'] },

59 })

60 return next(e)

61})

62 

63// The full tool name is mcp__, the plugin's name, and the registered name

64on('tool.call', { tool: 'mcp__my-mod__ticket' }, async ($, e) => {

65 // The tool's arguments are fields of e, so the id is e.id

66 const response = await $.http.fetch('https://tickets.example.com/api/' + encodeURIComponent(e.id))

67 // Return a result either way, so Claude learns when the lookup failed

68 return { result: response.ok ? response.text : 'Lookup failed with status ' + response.status }

69})

70```

71 

72Saat Anda bertanya tentang tiket, Claude dapat memanggil `mcp__my-mod__ticket` dengan id-nya. Hook kedua mengambil tiket dan mengembalikan badan respons, yang dibaca Claude sebagai hasil alat. Saat server menjawab dengan status kesalahan, Claude membaca `Lookup failed with status` dan nomornya.

73 

74<h2 id="call-a-model">

75 Panggil model

76</h2>

77 

78Mod dapat menanyakan model pertanyaan sendiri, di luar percakapan, untuk pekerjaan kecil seperti mengurutkan atau merangkum sepotong teks. `$.model.complete` mengirim satu prompt ke model dengan kredensial sesi Anda dan menyelesaikan balasan. Ini tidak memiliki riwayat percakapan.

79 

80Hook ini menjawab perintah `/triage`, [didaftarkan sebagai perintah](#add-a-command), dengan menanyakan model kecil untuk memberi label pada teks yang diketik setelahnya:

81 

82```javascript theme={null}

83on('command.run', { command: 'triage' }, async ($, e) => {

84 const r = await $.model.complete({

85 model: 'haiku',

86 // The system prompt sets the job, and the prompt carries the text to label

87 system: 'Reply with one word: bug, feature, or question.',

88 prompt: e.args,

89 // One word needs few tokens, and the call gives up after 15 seconds

90 maxTokens: 20,

91 timeoutMs: 15000,

92 })

93 // r.text exists only when the model answered, so check r.isAnswered first

94 const label = r.isAnswered ? r.text.trim() : 'unknown'

95 return { text: 'Label: ' + label }

96})

97```

98 

99Saat Anda menjalankan `/triage the export button does nothing`, mod mengirim teks itu ke model dan mencetak jawabannya, seperti `Label: bug`. Percakapan Claude bukan bagian dari permintaan. Saat model tidak menjawab, labelnya adalah `unknown`.

100 

101Kegagalan Claude API tidak menolak panggilan, jadi periksa `r.isAnswered`, dan baca `r.reason` saat itu `false`. Panggilan hanya menolak untuk permintaan yang tidak akan dikirim Claude Code, seperti model yang diblokir organisasi Anda. [Tipe untuk build Anda](/docs/id/plugins/mods/create#get-the-types-for-your-build) mencantumkan opsi lain, seperti `effort`, dan [batas](/docs/id/plugins/mods/reference#limits) memberikan default `maxTokens`.

102 

103`$.model.fork({ prompt })` menanyakan satu pertanyaan atas percakapan saat ini, dengan model dan prompt sistem yang sama, jadi Claude API melayani sebagian besar dari cache prompt.

104 

105Panggilan ini menggunakan paket atau kunci API pengguna.

106 

107<h2 id="run-work-in-the-background">

108 Jalankan pekerjaan di latar belakang

109</h2>

110 

111Pekerjaan yang melampaui satu peristiwa, seperti memeriksa sesuatu sekali semenit, berjalan pada timer yang Anda mulai dari `session.start`. Hook itu sendiri berjalan untuk satu peristiwa dan memiliki batas waktu 10 detik waktu berjalannya sendiri. Waktu yang dihabiskan menunggu `next` atau panggilan mods API tidak dihitung, kecuali `$.clock.sleep`. `$.clock.every` dan `$.clock.after` menggantikan `setInterval` dan `setTimeout`, dengan penundaan dalam milidetik terlebih dahulu: `$.clock.after(5000, fn)` memanggil `fn` sekali, lima detik dari sekarang. Masing-masing mengembalikan timer dengan metode `cancel()`, dan `await $.clock.now()` memberikan waktu dalam milidetik.

112 

113Hook ini mencari pemeriksaan permintaan tarik sekali semenit dan menampilkan hasilnya di bawah prompt. `summarize` adalah fungsi Anda sendiri yang mengubah output JSON perintah menjadi beberapa kata:

114 

115```javascript theme={null}

116on('session.start', async ($, e, next) => {

117 // Call the function every 60,000 milliseconds, starting one minute from now

118 $.clock.every(60_000, async () => {

119 const status = await $.process.run(['gh', 'pr', 'checks', '--json', 'state'])

120 // Replace the line under the prompt with the latest summary

121 $.ui.status('checks: ' + summarize(status.stdout))

122 })

123 // Return without waiting for the timer, so the session starts right away

124 return next(e)

125})

126```

127 

128Sesi dimulai seperti biasa. Satu menit kemudian, baris muncul di bawah prompt dengan `⚠`, nama mod, dan kemudian `checks:` dan ringkasan Anda. Itu diganti sekali semenit setelahnya. Callback timer berjalan di luar peristiwa apa pun, jadi terus berjalan antar giliran dan tidak memulai satu. Jika callback melempar, kesalahan masuk ke [debug log](/docs/id/plugins/mods/troubleshoot#read-the-debug-log) dan timer berjalan lagi pada interval berikutnya.

129 

130<h3 id="show-something-without-starting-a-turn">

131 Tampilkan sesuatu tanpa memulai giliran

132</h3>

133 

134Pekerjaan latar belakang dapat menunjukkan kepada pengguna sesuatu tanpa memulai giliran. Masing-masing panggilan ini menempatkan teks di tempat yang berbeda:

135 

136| Panggilan | Apa yang dilihat pengguna |

137| :- | :- |

138| `$.ui.status(text)` | Satu baris di bawah prompt yang tetap sampai Anda mengubahnya. Dimulai dengan `⚠` dan nama mod, seperti `⚠ my-mod: checks: 3 passing`. |

139| `$.ui.toast(text)` | Kotak kecil di kanan atas, dengan nama mod di atas teks, yang hilang setelah beberapa detik |

140| `$.ui.log(text)` | Baris redup dalam transkrip yang tidak dibaca Claude. Dimulai dengan `●` dan nama mod, seperti `● my-mod: build finished`. |

141 

142<h3 id="start-a-turn-from-a-background-job">

143 Mulai giliran dari pekerjaan latar belakang

144</h3>

145 

146Saat pekerjaan latar belakang menemukan sesuatu yang memerlukan perhatian Claude, itu dapat memulai giliran dengan mengirimkan prompt dengan `$.prompt.submit({ text })`. Claude membaca teks setelah kalimat yang menyebutkan mod Anda sebagai pengirim. Untuk mengirimnya sebagai kata-kata pengguna sendiri, tanpa kalimat itu, tambahkan `asUser: true`. Panggilan menunggu sampai sesi menganggur dan kemudian memulai giliran baru. Itu menyelesaikan saat giliran itu dimulai, jadi jangan `await` dalam handler yang berjalan saat Claude sedang bekerja.

147 

148<h3 id="stop-background-work">

149 Hentikan pekerjaan latar belakang

150</h3>

151 

152Pekerjaan latar belakang berhenti dengan dua cara. Timer berhenti saat modul dimuat ulang. Untuk pekerjaan jangka panjang dalam hook, [`next.signal`](/docs/id/plugins/mods/reference#the-hook-function) adalah `AbortSignal` yang membatalkan saat peristiwa yang ditangani hook Anda ditinggalkan, misalnya saat pengguna mengganggu, jadi teruskan ke apa pun yang berjalan lama.

153 

154<h2 id="send-and-receive-messages-between-sessions">

155 Mengirim dan menerima pesan antar sesi

156</h2>

157 

158Sebuah mod dapat mengirim pesan teks biasa ke salah satu sesi Anda yang lain atau ke salah satu subagen sesi ini, dan mengamati pesan yang tiba dan pergi. `$.session.send({ to, text })` mengirim satu, pengiriman yang sama dengan yang dilakukan alat SendMessage. `to` adalah `{ sessionId }` untuk sesi, `{ agentId }` untuk subagen dari `$.agent.list()`, atau alamat string tempat pesan yang diterima berasal. Panggilan diselesaikan setelah pesan antri, dengan `{ isDelivered: true }`. Ketika tidak ada yang dikirim, pesan diselesaikan dengan `{ isDelivered: false, reason }`, dan `reason` mengatakan mengapa.

159 

160Hook ini menjawab perintah `/ping`, [terdaftar sebagai perintah](#add-a-command), dengan meminta sesi yang id-nya Anda ketik setelahnya untuk status:

161 

162```javascript theme={null}

163on('command.run', { command: 'ping' }, async ($, e) => {

164 // e.args adalah id sesi yang diketik setelah /ping

165 const sent = await $.session.send({ to: { sessionId: e.args }, text: 'Status? One line.' })

166 // Panggilan diselesaikan dengan cara apa pun, jadi periksa isDelivered untuk mengetahui apa yang terjadi

167 if (!sent.isDelivered) $.ui.toast('Not delivered: ' + sent.reason)

168 // Hasil kosong tidak mencetak apa pun dalam transkrip sesi ini

169 return {}

170})

171```

172 

173Ketika pesan antri, tidak ada yang muncul di sesi Anda, dan Claude sesi lain membaca `Status? One line.` Ketika tidak ada yang dikirim, kotak kecil di kanan atas memberikan alasan dan hilang setelah beberapa detik.

174 

175Dua peristiwa memungkinkan mod mengamati pesan. Kembalikan `next(e)` dari keduanya untuk melewatkan setiap pesan tanpa perubahan:

176 

177| Peristiwa | Terjadi ketika | Bidang yang berguna |

178| :- | :- | :- |

179| `session.receive` | Pesan tiba untuk sesi ini, sebelum Claude membacanya | `e.text`, dan `e.origin.kind`, seperti `peer` atau `peer-send-message` untuk sesi atau agen lain, `task-notification`, atau `scheduled-trigger`. Kembalikan `{ consumed: reason }` untuk mencegahnya dari Claude. |

180| `session.send` | Pesan akan pergi, dari alat SendMessage atau mod | `e.to`, `e.text`, dan `e.origin.kind`, yang merupakan `model` atau `plugin` |

181 

182Sesi yang diatur untuk [menolak pesan masuk](/docs/id/cross-session-messaging#control-inbound-messages) menolak pesan sebelum `session.receive` terjadi, jadi hook tidak pernah melihatnya. Pesan yang ditahan untuk persetujuan Anda mencapai hook terlebih dahulu, jadi mod dapat membaca pesan yang belum Anda setujui. `next(e)` hook menolak ketika pesan tidak dikirim.

183 

184Nama pengirim pada pesan yang diterima adalah apa pun yang ditulis pengirim, jadi jangan membuat keputusan berdasarkan itu.

185 

186<h2 id="reach-files-processes-and-the-network">

187 Jangkau file, proses, dan jaringan

188</h2>

189 

190Mod menjangkau sistem file, proses, dan jaringan melalui mods API, dengan izin yang sama dengan pengguna yang menjalankan Claude Code. Modul hooks itu sendiri tidak memiliki API Node.js, tidak ada global timer seperti `setTimeout`, dan tidak memiliki akses jaringan atau file sendiri. API JavaScript standar dan web seperti `URL`, `TextEncoder`, `AbortController`, dan `crypto.subtle` tersedia. Setiap namespace di bawah mencakup satu jenis akses:

191 

192| Namespace | Apa yang dilakukannya |

193| :- | :- |

194| `$.fs` | `read(path)`, `write(path, text)`, `exists(path)`, `stat(path)`, dan `list(path)` bekerja pada file dan direktori |

195| `$.process` | `run(['git', 'status'])` memulai perintah dan menyelesaikan saat keluar. `spawn` mengalirkan output perintah yang berjalan lama. |

196| `$.http` | `fetch(url, init)` atas `http` atau `https`. Itu menyelesaikan ke `{ status, ok, headers, text }` setelah badan dibaca. |

197| `$.store` | Penyimpanan kunci-nilai JSON plugin Anda sendiri, disimpan antar sesi |

198| `$.env` | `get` dan `set` variabel lingkungan. Tulis nama sebagai string literal. |

199| `$.settings` | `read` apa yang dipegang file pengaturan dan kebijakan terkelola |

200| `$.session` | `messages()` mengembalikan transkrip sebagai daftar `{ role, text, toolUses }`. Juga direktori kerja, model, dan lainnya. [`usage()`](/docs/id/plugins/mods/reference#mods-api-methods) mengembalikan penggunaan jendela konteks dan batas paket. |

201| `$.mcp` | `call` alat pada server MCP yang terhubung |

202 

203File dan proses memiliki beberapa aturan mereka sendiri:

204 

205* **Paths**: jalur relatif berada di bawah direktori kerja sesi

206* **`$.fs.list`**: mengembalikan entri satu direktori sebagai `{ name, kind, size, isLink }` dan tidak turun ke subdirektori

207* **`$.process.run`**: mengambil daftar argumen dan tidak menggunakan shell. Itu menyelesaikan ke `{ exitCode, stdout, stderr }` apa pun kode keluar. Itu menolak jika program tidak dapat dimulai atau masih berjalan pada timeout, yang merupakan 30 detik secara default, jadi bungkus dalam `try` dan `catch`.

208 

209Setiap satu dari panggilan ini sendiri adalah peristiwa, dinamai untuk namespace dan metodenya tanpa `$.`, seperti `fs.read` untuk `$.fs.read`. Mod [lebih awal dalam rantai](/docs/id/plugins/mods/events#the-order-mods-run-in) dapat mengamati, menulis ulang, atau menolak panggilan Anda, yang merupakan cara organisasi membatasi apa yang dijangkau mod.

210 

211<h2 id="next-steps">

212 Langkah berikutnya

213</h2>

214 

215* [React to events](/docs/id/plugins/mods/events): hook tool calls, prompts, dan turns

216* [Draw in the interface](/docs/id/plugins/mods/interface): tampilkan apa yang dikumpulkan mod Anda dalam pane atau di atas prompt

217* [Test a mod](/docs/id/plugins/mods/test): stub salah satu dari panggilan ini dalam tes

218* [Mods reference](/docs/id/plugins/mods/reference): setiap peristiwa, setiap metode mods API, dan batasnya

plugins/mods/create.md +395 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Buat sebuah mod

6 

7> Biarkan Claude menulis mod Claude Code dari deskripsi, atau tulis sendiri yang menghitung panggilan alat dan menambahkan perintah. Pelajari loop reload dan validate.

8 

9Mod adalah [plugin](/docs/id/plugins/overview) Claude Code dengan file entry, disebut hooks module: file JavaScript atau TypeScript yang fungsi-fungsinya dipanggil Claude Code ketika peristiwa terjadi. Ada dua cara untuk membuatnya:

10 

11* **Minta Claude untuk menulisnya**: [jelaskan apa yang Anda inginkan](#ask-claude-for-a-mod) dalam sesi Claude Code

12* **Tulis sendiri**: [ikuti tutorial](#write-a-mod-yourself) untuk mempelajari cara kerja kode mod. Anda tidak memerlukan Node.js, bundler, atau build step, karena Claude Code memuat file `.js` dan `.ts` secara langsung.

13 

14Jika Anda belum memutuskan apakah mod adalah alat yang tepat, baca [perbandingan di overview](/docs/id/plugins/mods/overview#compare-mods-settings-hooks-skills-and-mcp-servers) terlebih dahulu.

15 

16<Note>

17 Mod memerlukan Claude Code v2.1.287 atau lebih baru. Di shell Anda, jalankan `claude --version` untuk memeriksa. Untuk melihat apakah mod dapat dimuat untuk Anda, lihat [Periksa apakah mod dapat dimuat](/docs/id/plugins/mods/troubleshoot#check-whether-mods-can-load).

18</Note>

19 

20<h2 id="ask-claude-for-a-mod">

21 Minta Claude untuk sebuah mod

22</h2>

23 

24Jelaskan mod yang Anda inginkan dalam sesi Claude Code interaktif, dan Claude menulisnya. Claude bekerja dari [skill](/docs/id/skills) bawaan bernama `plugin-authoring`, yang memberitahu di mana menulis mod, peristiwa dan metode apa yang dimiliki versi Anda, dan bagaimana mod dimuat. Claude dapat memuat skill ketika Anda meminta mod, atau Anda dapat memuatnya sendiri dengan menjalankan `/plugin-authoring` di prompt Claude Code.

25 

26Mod berjalan setelah Anda menyetujuinya, kecuali dalam [sesi di mana mod yang ditulis Claude tidak dapat dimuat](#sessions-that-skip-the-approval).

27 

28<Steps>

29 <Step title="Jelaskan mod">

30 Minta mod dengan kata-kata Anda sendiri, misalnya `buat mod yang menunjukkan cabang git saat ini di atas prompt`. Claude menulis mod dalam direktori miliknya sendiri di folder mods sesi, yaitu `~/.claude/dev-mods/` diikuti dengan ID sesi. Jalur lengkap mod terlihat seperti `~/.claude/dev-mods/3f2a9c1e-5b7d-4e8a-9c21-6d0f4b8a7e13/git-branch/`.

31 

32 <Note>

33 Dalam [mode izin](/docs/id/permission-modes#protected-paths) `default` dan `acceptEdits`, Claude Code menanyakan sebelum Claude membuat setiap file mod, karena `~/.claude` adalah jalur yang dilindungi. Setujui setiap file saat muncul.

34 </Note>

35 </Step>

36 

37 <Step title="Setujui mod">

38 Ketika Claude menyimpan file pertama, Claude Code menanyakan apakah akan mengaktifkan hot reloading untuk sesi. Hot reloading menjalankan mod yang ditulis Claude dalam sesi ini dan mengambil setiap perubahan kemudian.

39 

40 Pilih salah satu jawaban ini:

41 

42 * **Aktifkan untuk sesi ini**: mod di folder mods sesi dimuat ketika giliran berakhir, dan dimuat ulang di akhir setiap giliran yang mengubahnya. Jawaban Anda berlaku untuk sesi, termasuk setelah Anda melanjutkannya.

43 * **Tidak sekarang**: tidak ada yang dimuat untuk sekarang. File tetap di tempat Claude menulisnya, dan mod dimuat saat sesi itu dimulai berikutnya. Untuk mencegah mod dimuat selamanya, hapus direktorinya.

44 </Step>

45 

46 <Step title="Periksa bahwa mod dimuat">

47 Jalankan `/plugin` di prompt Claude Code dan tekan Tab sampai tab **Installed** dipilih. Ini mencantumkan mod, dan Anda dapat mematikannya di sana.

48 </Step>

49 

50 <Step title="Coba mod">

51 Gunakan apa yang Anda minta. Untuk prompt contoh, nama cabang saat ini muncul di atas kotak prompt. Jika mod tidak melakukan apa yang Anda inginkan, beri tahu Claude apa yang harus diubah. Mod dimuat ulang di akhir setiap giliran yang mengubah filenya, sehingga Anda dapat mencoba perubahan segera setelah Claude selesai.

52 </Step>

53</Steps>

54 

55<h3 id="use-the-mod-in-other-sessions">

56 Gunakan mod di sesi lain

57</h3>

58 

59Mod yang ditulis Claude hanya dimuat dalam sesi yang membuatnya, dan Claude Code menghapus folder mods sesi itu setelah lebih lama dari [`cleanupPeriodDays`](/docs/id/settings-reference#cleanupperioddays). Untuk menyimpan mod, salin direktorinya keluar dari folder mods ke tempat Anda sendiri, seperti `~/mods/git-branch`. Kemudian pilih cara memuatnya:

60 

61* **Dalam sesi yang Anda mulai**: di shell Anda, jalankan `claude --plugin-dir ~/mods/git-branch`

62* **Untuk orang lain**: [tambahkan ke marketplace](#share-your-mod) sehingga mereka dapat menginstalnya

63 

64<h3 id="sessions-that-skip-the-approval">

65 Sesi di mana mod yang ditulis Claude tidak dapat dimuat

66</h3>

67 

68Mod yang ditulis Claude hanya dimuat setelah Anda menyetujuinya, dalam workspace terpercaya di mana mod diizinkan untuk berjalan. Dalam sesi ini tidak dimuat:

69 

70* **Tidak ada yang ada untuk menyetujui**: sesi tidak dapat menampilkan prompt kepada Anda, seperti dalam run `claude -p` atau [mode `dontAsk`](/docs/id/permission-modes)

71* **Workspace tidak terpercaya**: Anda belum menerima prompt kepercayaan untuk direktori

72* **Mod dihentikan**: Anda memulai dengan `--safe-mode` atau `--bare`, Anda menetapkan `disableAllHooks`, atau [pengaturan terkelola](/docs/id/plugins/mods/admin#choose-how-much-to-allow) organisasi Anda memblokir

73 

74<h2 id="write-a-mod-yourself">

75 Tulis mod sendiri

76</h2>

77 

78Dalam tutorial ini Anda membangun mod bernama `first-mod` yang menghitung panggilan alat yang dibuat Claude, menampilkan hitungan di samping spinner saat Claude bekerja, dan menambahkan perintah `/tally` yang mencetaknya. Anda kemudian membaca deklarasi tipe yang ditulis Claude Code di samping mod Anda dan menjalankan `claude plugin validate`. Bersama-sama mereka menunjukkan kepada Anda peristiwa dan metode yang ditawarkan versi Anda dan apa yang dibaca Claude Code dari kode Anda.

79 

80Rekaman ini menunjukkan mod yang selesai. Spinner menghitung panggilan alat, `/tally` mencetak hitungan, dan edit ke kode berlaku saat sesi berjalan:

81 

82<Frame>

83 <video autoPlay muted loop playsInline controls className="w-full dark:hidden" src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-first-mod-light.mp4?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=eb561134afa90375777408453ba51c77" aria-label="Dalam sesi Claude Code, prompt 'list the files here and read the README' diketik dan dikirim. Spinner membaca 'Thinking · tool calls: 1' dan hitungan naik saat Claude bekerja. Perintah /tally mencetak 'first-mod: Claude has made 3 tool calls since this mod loaded'. Sebuah baris mengatakan first-mod dimuat ulang dan mencantumkan empat hooks-nya. Pada prompt berikutnya spinner membaca 'Thinking · tools used: 1'." data-path="images/mods-first-mod-light.mp4" />

84 

85 <video autoPlay muted loop playsInline controls className="w-full hidden dark:block" src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-first-mod-dark.mp4?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=09779dadc7ef66c2b1e2da0c2e31ac72" aria-label="Dalam sesi Claude Code, prompt 'list the files here and read the README' diketik dan dikirim. Spinner membaca 'Thinking · tool calls: 1' dan hitungan naik saat Claude bekerja. Perintah /tally mencetak 'first-mod: Claude has made 3 tool calls since this mod loaded'. Sebuah baris mengatakan first-mod dimuat ulang dan mencantumkan empat hooks-nya. Pada prompt berikutnya spinner membaca 'Thinking · tools used: 1'." data-path="images/mods-first-mod-dark.mp4" />

86</Frame>

87 

88Anda menulis tiga file:

89 

90```text theme={null}

91first-mod/

92├── .claude-plugin/

93│ └── plugin.json

94└── hooks/

95 ├── hooks.json

96 └── register.js

97```

98 

99* **`plugin.json`**: [manifest](/docs/id/plugins/manifest-reference) plugin

100* **`hooks.json`**: [menunjuk ke file kode Anda](/docs/id/plugins/mods/reference#files)

101* **`register.js`**: kode Anda, disebut hooks module

102 

103<Steps>

104 <Step title="Buat direktori plugin">

105 Buat dua direktori yang menyimpan file:

106 

107 <Tabs>

108 <Tab title="Bash atau Zsh">

109 ```bash theme={null}

110 mkdir -p first-mod/.claude-plugin first-mod/hooks

111 ```

112 </Tab>

113 

114 <Tab title="PowerShell">

115 ```powershell theme={null}

116 New-Item -ItemType Directory -Force first-mod\.claude-plugin, first-mod\hooks

117 ```

118 </Tab>

119 </Tabs>

120 </Step>

121 

122 <Step title="Tulis manifest">

123 Mod adalah plugin, dan mod memerlukan [manifest](/docs/id/plugins/manifest-reference). Manifest mod ini tidak memiliki field khusus. Simpan ini sebagai `first-mod/.claude-plugin/plugin.json`:

124 

125 ```json first-mod/.claude-plugin/plugin.json theme={null}

126 {

127 "name": "first-mod",

128 "version": "0.1.0",

129 "description": "Counts Claude's tool calls, shows the count beside the spinner, and adds a /tally command",

130 "author": { "name": "Your Name" }

131 }

132 ```

133 </Step>

134 

135 <Step title="Beri tahu Claude Code di mana kode Anda berada">

136 Ketika Claude Code memuat plugin, ia membaca `hooks/hooks.json` plugin. Kunci `modules` dalam file itu memberikan jalur ke kode Anda, dan memilikinya adalah apa yang membuat plugin menjadi mod. Cantumkan satu jalur, relatif terhadap `hooks.json`. Di sini menunjuk ke `register.js`, yang Anda tulis di langkah berikutnya.

137 

138 Simpan ini sebagai `first-mod/hooks/hooks.json`:

139 

140 ```json first-mod/hooks/hooks.json theme={null}

141 {

142 "description": "The first-mod hooks module",

143 "modules": ["./register.js"]

144 }

145 ```

146 </Step>

147 

148 <Step title="Tulis kode">

149 File ini adalah kode mod, disebut hooks module. Ketika mod dimuat, Claude Code memanggil fungsi `register` yang diekspor file dan meneruskan fungsi bernama [`on`](/docs/id/plugins/mods/reference#the-hook-function). Setiap panggilan ke `on` mendaftarkan event handler, disebut hook, untuk peristiwa yang dinamainya.

150 

151 Simpan ini sebagai `first-mod/hooks/register.js`:

152 

153 ```javascript first-mod/hooks/register.js theme={null}

154 // The count, shared by the hooks below

155 let calls = 0

156 

157 // Claude Code calls this once when the mod loads

158 export function register(on) {

159 // Runs when the session starts, before your first prompt

160 on('session.start', async ($, e, next) => {

161 // Add the /tally command

162 await $.command.register({

163 name: 'tally',

164 description: 'Show how many tool calls Claude has made',

165 })

166 // Let the session start as usual

167 return next(e)

168 })

169 

170 // Runs each time Claude is about to use a tool

171 on('tool.call', async ($, e, next) => {

172 calls += 1

173 // Ask Claude Code to draw the interface again, so the new count shows

174 $.ui.invalidate('ui.render')

175 // Let the tool run as usual

176 return next(e)

177 })

178 

179 // Runs when you type /tally, and only then, because of the matcher

180 on('command.run', { command: 'tally' }, async () => {

181 // The text to print in the transcript

182 return { text: 'Claude has made ' + calls + ' tool calls since this mod loaded' }

183 })

184 

185 // Runs each time Claude Code draws the spinner

186 on('ui.render', { component: 'Spinner' }, async ($, e, next) => {

187 // Keep Claude Code's spinner, with the count added after its word

188 return next({ ...e, props: { ...e.props, suffix: ' · tool calls: ' + calls + '…' } })

189 })

190 }

191 ```

192 

193 File menyimpan hitungan dalam `calls` dan mendaftarkan empat hooks:

194 

195 * **[`session.start`](/docs/id/plugins/mods/reference#session)** berjalan ketika sesi dimulai, sebelum prompt pertama Anda, dan lagi setiap kali mod dimuat ulang. Ini menambahkan perintah `/tally` ke Claude Code.

196 * **[`tool.call`](/docs/id/plugins/mods/reference#tools)** berjalan setiap kali Claude akan menggunakan alat. Ini menambah satu ke `calls` dan meminta Claude Code untuk menggambar antarmuka lagi.

197 * **[`command.run`](/docs/id/plugins/mods/reference#commands-and-configuration)** berjalan ketika Anda mengetik `/tally`. Ini mengembalikan teks untuk dicetak.

198 * **[`ui.render`](/docs/id/plugins/mods/reference#interface)** berjalan setiap kali Claude Code menggambar spinner. Ini menambahkan hitungan setelah kata spinner.

199 

200 [Cara kerja mod contoh](#how-the-example-mod-works) menjelaskan tiga argumen yang diterima setiap hook dan apa yang dikembalikan masing-masing.

201 </Step>

202 

203 <Step title="Muat mod">

204 Mulai Claude Code dengan flag `--plugin-dir`, yang memuat direktori plugin untuk satu sesi tanpa menginstalnya:

205 

206 ```bash theme={null}

207 claude --plugin-dir ./first-mod

208 ```

209 </Step>

210 

211 <Step title="Coba mod">

212 Minta Claude untuk melakukan sesuatu yang memerlukan beberapa panggilan alat, seperti `list the files here and read the README`. Saat Claude bekerja, kata spinner diikuti oleh hitungan yang naik, seperti `Thinking · tool calls: 2…`. Ketika Claude selesai, ketik `/tally` dan tekan Enter. Transkrip menunjukkan `first-mod: Claude has made 2 tool calls since this mod loaded`, dengan hitungan Anda sendiri. Claude Code menempatkan nama plugin di depan teks perintah.

213 

214 Untuk memeriksa perintah tanpa sesi interaktif, jalankan dalam mode non-interaktif:

215 

216 ```bash theme={null}

217 claude -p "/tally" --plugin-dir ./first-mod

218 ```

219 

220 ```text theme={null}

221 first-mod: Claude has made 0 tool calls since this mod loaded

222 ```

223 

224 Jika `/tally` tidak ada dalam daftar perintah, modul tidak dimuat. Lihat [Cari tahu mengapa mod tidak melakukan apa pun](/docs/id/plugins/mods/troubleshoot#find-out-why-a-mod-does-nothing).

225 </Step>

226 

227 <Step title="Ubah kode saat sesi berjalan">

228 Biarkan sesi tetap terbuka. Dalam `register.js`, ubah `' · tool calls: '` menjadi `' · tools used: '` dalam hook `ui.render` dan simpan. Baris yang disorot adalah yang berubah:

229 

230 ```javascript first-mod/hooks/register.js {4} theme={null}

231 // Runs each time Claude Code draws the spinner

232 on('ui.render', { component: 'Spinner' }, async ($, e, next) => {

233 // Keep Claude Code's spinner, with the count added after its word

234 return next({ ...e, props: { ...e.props, suffix: ' · tools used: ' + calls + '…' } })

235 })

236 ```

237 

238 Sebuah baris dalam transkrip mengatakan `first-mod` dimuat ulang dan mencantumkan hooks-nya, dan spinner berikutnya menggunakan teks baru, seperti `Thinking · tools used: 1…`.

239 </Step>

240</Steps>

241 

242<h3 id="how-the-example-mod-works">

243 Cara kerja mod contoh

244</h3>

245 

246Setiap fungsi yang Anda teruskan ke `on` adalah hook, yang merupakan event handler. Claude Code meneruskan setiap hook dengan tiga argumen yang sama:

247 

248* **Mods API**, bernama `$`: setiap metode yang dapat dipanggil mod untuk menjangkau di luar dirinya, dalam [namespaces](/docs/id/plugins/mods/reference#mods-api-methods) seperti `$.ui` dan `$.command`

249* **Event**, bernama `e`: [input event](/docs/id/plugins/mods/reference#events) sebagai data biasa, seperti nama dan argumen panggilan alat

250* **Next handler**, bernama [`next`](/docs/id/plugins/mods/events#how-a-hook-handles-an-event): fungsi yang meneruskan event ke mod lain dan kemudian ke perilaku Claude Code sendiri, dan mengembalikan hasilnya

251 

252Hook dalam `first-mod` menangani peristiwa mereka dalam tiga cara hook dapat:

253 

254* **Observe**: hook `session.start` mendaftarkan perintah, dan hook `tool.call` menghitung panggilan dan meminta redraw. Keduanya mengembalikan `next(e)`, sehingga sesi dimulai dan alat berjalan seperti biasa.

255* **Answer**: hook `command.run` mengembalikan hasilnya sendiri dan tidak pernah memanggil `next`. Argumen kedua ke `on`, `{ command: 'tally' }`, adalah filter, disebut [matcher](/docs/id/plugins/mods/events#filter-which-events-a-hook-handles), sehingga hook hanya berjalan untuk `/tally`.

256* **Rewrite**: hook `ui.render` memanggil `next` dengan salinan `e` yang `suffix`-nya menyimpan hitungan, sehingga Claude Code menggambar spinner biasanya dengan teks Anda setelah kata

257 

258Claude Code mengawasi direktori yang dimuat dengan `--plugin-dir` dan hot-reload hooks module ketika file di dalamnya berubah. Setiap reload menjalankan `register` lagi, sehingga `calls` kembali ke `0` dan `/tally` mulai menghitung lagi. Untuk menyimpan nilai di seluruh reload, lihat [Simpan state](/docs/id/plugins/mods/interface#keep-state).

259 

260<h2 id="keep-working-on-a-mod">

261 Terus bekerja pada mod

262</h2>

263 

264Setelah mod dimuat, Anda dapat membuat Claude mengubahnya, memeriksa kode Anda terhadap definisi tipe untuk versi Anda, mencantumkan peristiwa dan panggilan yang ditemukan Claude Code di dalamnya, dan mengujinya.

265 

266<h3 id="change-a-mod-with-claude">

267 Ubah mod dengan Claude

268</h3>

269 

270Untuk mengubah mod yang sudah Anda miliki, mulai sesi dengan `--plugin-dir` menunjuk ke direktori mod, sehingga apa yang ditulis Claude dimuat dalam sesi yang sama:

271 

272```bash theme={null}

273claude --plugin-dir ./first-mod

274```

275 

276Kemudian minta perubahan, misalnya `add a /tally-reset command to this mod that sets the tally back to zero`. Claude mengedit hooks module, menjalankan `claude plugin validate`, dan memperbaiki apa yang dilaporkannya. Direktori yang Anda muat dengan `--plugin-dir` adalah [jalur yang dilindungi](/docs/id/permission-modes#protected-paths), sehingga dalam mode `default` dan `acceptEdits` Anda diminta untuk menyetujui setiap edit Claude ke mod. Tabel jalur yang dilindungi memberikan hasil untuk mode izin lainnya.

277 

278File yang disimpan Claude selama gilirannya dimuat ulang ketika giliran berakhir, sehingga Anda dapat mencoba `/tally-reset` segera setelah Claude selesai.

279 

280<h3 id="get-the-types-for-your-build">

281 Dapatkan definisi tipe untuk versi Anda

282</h3>

283 

284Setiap kali Claude Code memuat atau memuat ulang mod dari direktori yang Anda teruskan ke `--plugin-dir`, atau mod [yang ditulis Claude untuk Anda](#ask-claude-for-a-mod), ia menulis file deklarasi TypeScript, berakhir dengan `.d.ts`, ke dalam `.claude-plugin/types/` di dalam direktori mod. Mereka menjelaskan peristiwa yang tepat, metode mods API, dan elemen dalam versi Claude Code yang Anda jalankan, sehingga editor Anda dapat autocomplete dan type-check hooks Anda. Untuk menelusuri deklarasi secara online, baca [`mods/types/claude-code.d.ts`](https://github.com/anthropics/claude-code/blob/main/mods/types/claude-code.d.ts) di repositori Claude Code, yang baris pertamanya menamai versi yang menulisnya. Direktori menyimpan file-file ini:

285 

286| Path | Apa yang dideklarasikan |

287| :- | :- |

288| `claude-code/index.d.ts` | Setiap event dan input serta hasilnya, setiap namespace dan metode mods API, dan elemen yang dapat digambar setiap surface |

289| `claude-code-tools/index.d.ts` | Input dan hasil alat bawaan, sehingga memeriksa `e.tool === 'Bash'` mempersempit `e` |

290| `claude-code-mcp/index.d.ts` | Input alat MCP yang terhubung terakhir kali Anda menyimpan file dalam mod |

291| `index.d.ts` dalam direktori bernama untuk plugin | Apa yang ditambahkan plugin itu ke mods API. Ada satu direktori untuk setiap plugin yang dicantumkan `plugin.json` Anda di bawah `dependencies`. |

292| `tsconfig.json` | Opsi compiler yang sesuai untuk hooks module |

293 

294Jika mod Anda tidak memiliki `tsconfig.json` miliknya sendiri, Claude Code menambahkan satu di root mod yang memperluas yang dihasilkan, sehingga editor Anda dan `tsc -p ./first-mod` type-check mod tanpa setup lebih lanjut.

295 

296Peristiwa dan metode dapat berubah antar rilis, jadi percayai file-file ini daripada halaman apa pun, termasuk yang ini, ketika mereka tidak setuju.

297 

298`claude-code/index.d.ts` adalah referensi paling lengkap untuk build Anda, dengan komentar dan contoh untuk setiap metode mods API. Untuk mencari sesuatu, cari file untuk namanya, seperti `'tool.call'`.

299 

300<h3 id="check-what-claude-code-reads-from-your-mod">

301 Periksa apa yang dibaca Claude Code dari mod Anda

302</h3>

303 

304Untuk melihat mod Anda seperti yang dilihat Claude Code, tanpa menjalankan kode atau memulai sesi, gunakan `claude plugin validate`. Ini memeriksa manifest dan menjalankan analisis statis yang sama pada sumber hooks module yang dijalankan Claude Code saat memuat mod. Di shell Anda, jalankan pada direktori mod:

305 

306```bash theme={null}

307claude plugin validate ./first-mod

308```

309 

310Untuk `first-mod`, output mencakup baris-baris ini.

311 

312```text theme={null}

313 ❯ ./register.js hooks: session.start, tool.call, command.run{command=tally}, ui.render{component=Spinner}

314 ❯ ./register.js calls: $.command.register, $.ui.invalidate

315 

316✔ Validation passed

317```

318 

319Baris `hooks:` mencantumkan peristiwa yang dihubungkan modul Anda, masing-masing dengan filternya dalam kurung kurawal. Baris `calls:` mencantumkan setiap metode mods API yang dipanggilnya. Modul yang membaca atau menetapkan variabel lingkungan juga mendapat baris `env reads:` dan `env writes:`, dan yang menggunakan [`$.state`](/docs/id/plugins/mods/interface#keep-state) mendapat `state reads:` dan `state writes:`.

320 

321Jika event yang dimaksudkan untuk dihubungkan hilang dari baris pertama, Claude Code juga tidak akan memanggil hook itu. Penyebab biasanya adalah nama event yang salah eja, yang dilaporkan perintah sebagai kesalahan seperti `"tool.calls" is not an event`.

322 

323Ikuti aturan-aturan ini sehingga analisis statis dapat menemukan setiap hook dan panggilan:

324 

325* Eja setiap panggilan mods API secara lengkap: `$`, namespace, kemudian metode, seperti dalam `$.store.get('notes')`. Anda dapat meneruskan `$` ke fungsi yang dideklarasikan di tingkat atas file yang sama, dan untuk fungsi Anda bernama `loadNotes`, baris `calls:` kemudian membaca `$.store.get (via loadNotes)`. Meneruskan `$` ke metode, fungsi yang didefinisikan di dalam hook, atau fungsi yang Anda impor dari file lain Anda gagal validasi. Fungsi `read` dan `update` yang digunakan [`$.state`](/docs/id/plugins/mods/interface#keep-state) adalah impor yang dapat mengambilnya. Jangan menetapkan `$` atau salah satu namespace-nya ke variabel, destructure, atau indexnya dengan nama yang dihitung. `const ui = $.ui` gagal dengan `$.ui is used as a value`.

326* Tulis nama event dalam setiap panggilan `on` sebagai string literal, seperti `'tool.call'`. Variabel, atau loop atas daftar nama, gagal dengan `the event name passed to on() is not a string literal`.

327* Di dalam `register`, jangan deklarasikan variabel atau parameter kedua bernama `on`. Validasi gagal dengan `"on" is declared again (shadowed)`.

328* Impor hanya dari file di dalam direktori plugin, dengan jalur relatif. Satu-satunya impor bare yang diizinkan adalah `claude-code`, untuk tipe dan beberapa helper.

329* Gunakan deklarasi `import` di atas file, seperti dalam `import { name } from './file.js'`. `import()` dinamis gagal dengan `a dynamic import(); a hooks module imports its own files with an import declaration`.

330* Tulis setiap file sebagai ES module, dengan `import` dan bukan `require`. [Reference](/docs/id/plugins/mods/reference#files) mencantumkan ekstensi file yang dimuat Claude Code.

331 

332<h3 id="test-the-mod">

333 Uji mod

334</h3>

335 

336Anda dapat menulis tes otomatis untuk mod dan menjalankannya dari shell Anda dengan `claude plugin test`, tanpa sesi, sign-in, atau jaringan. Tes menaikkan peristiwa yang ditangani hooks Anda dan memeriksa apa yang dilakukan hooks.

337 

338Tes ini menaikkan dua panggilan alat, menjalankan `/tally`, dan memeriksa bahwa balasan menghitung keduanya. Simpan sebagai `first-mod/tests/first-mod.test.ts`:

339 

340```typescript first-mod/tests/first-mod.test.ts theme={null}

341import { expect, test } from 'claude-code/testing'

342 

343test('/tally reports the tool calls the mod has seen', async ($, on) => {

344 // Answer each tool call in Claude Code's place, so no tool runs

345 on('tool.call', () => ({ result: 'ok' }))

346 

347 // Raise two tool calls, which the mod's tool.call hook counts

348 await $.tool.call({ tool: 'Bash', command: 'ls' })

349 await $.tool.call({ tool: 'Read', file_path: 'README.md' })

350 

351 // Run /tally and check the text its hook returns

352 const answer = await $.command.run({ command: 'tally', args: '' })

353 expect(answer.text).toBe('Claude has made 2 tool calls since this mod loaded')

354})

355```

356 

357Di shell Anda, jalankan tes dari direktori `first-mod`:

358 

359```bash theme={null}

360claude plugin test

361```

362 

363Output menamai setiap tes dan apakah itu lulus, dengan waktu yang bervariasi dari run ke run:

364 

365```text theme={null}

366tests/first-mod.test.ts:

367(pass) /tally reports the tool calls the mod has seen [22.87ms]

368 

369 1 pass

370 0 fail

371Ran 1 test across 1 file. [0.19s]

372```

373 

374[Uji mod](/docs/id/plugins/mods/test) mencakup stubbing panggilan model atau store, dan menguji timer dan gambar.

375 

376<h2 id="share-your-mod">

377 Bagikan mod Anda

378</h2>

379 

380Mod adalah plugin, jadi Anda memversinya dalam manifest dan orang menginstal dan memperbarui dengan perintah `/plugin`. Untuk memberikannya kepada orang lain, [tambahkan ke marketplace](/docs/id/plugins/publish).

381 

382Sebelum Anda melakukannya, periksa `name` plugin: `claude plugin validate` gagal nama yang [terlihat seperti salah satu milik Anthropic sendiri](/docs/id/plugins/manifest-reference#name), seperti yang dimulai dengan `claude-`. Peristiwa dan metode dapat berubah antar rilis, jadi README Anda adalah tempat untuk mengatakan versi Claude Code mana yang Anda uji.

383 

384Terus berkembang terhadap direktori dengan `--plugin-dir`, bukan terhadap salinan yang diinstal. Claude Code cache plugin yang diinstal berdasarkan versi, sehingga edit Anda tidak mencapai salinan yang diinstal sampai Anda menaikkan versi dan menginstal lagi.

385 

386<h2 id="next-steps">

387 Langkah berikutnya

388</h2>

389 

390* [Gambar di antarmuka](/docs/id/plugins/mods/interface): buka pane, gambar di atas prompt, dan tambahkan tombol dan field teks

391* [Bereaksi terhadap peristiwa](/docs/id/plugins/mods/events): hook panggilan alat, prompt, dan giliran

392* [Gunakan mods API](/docs/id/plugins/mods/api): tambahkan perintah dan alat, panggil model, dan jalankan pekerjaan pada timer

393* [Uji mod](/docs/id/plugins/mods/test): stub apa yang akan dijawab Claude Code, dan uji timer dan gambar

394* [Troubleshoot mod](/docs/id/plugins/mods/troubleshoot): alasan mod tidak melakukan apa pun, dan debug log

395* [Baca sumber mod bawaan](/docs/id/plugins/mods/overview#read-the-source-of-built-in-mods): plugin lengkap, masing-masing dengan hooks module dan tesnya

plugins/mods/events.md +336 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Bereaksi terhadap peristiwa dengan mod

6 

7> Tangani peristiwa Claude Code dari mod: amati, tulis ulang, atau jawab panggilan alat, prompt, dan giliran, saring peristiwa mana yang ditangani hook, dan rencanakan untuk mod lain.

8 

9Hook adalah penanganan peristiwa: fungsi yang dijalankan Claude Code ketika peristiwa bernama terjadi. Claude Code mengeluarkan peristiwa di setiap titik di mana ia akan bertindak, seperti ketika menjalankan alat, mengirimkan prompt, mengirim permintaan ke model, atau memulai atau mengakhiri sesi. Hook Anda berjalan sebelum Claude Code bertindak, sehingga dapat mengamati peristiwa, menulis ulangnya, atau menjawabnya sebagai pengganti Claude Code. Anda mendaftarkan hook dengan [`on(eventName, handler)`](/docs/id/plugins/mods/reference#the-hook-function).

10 

11Bangun [mod pertama Anda](/docs/id/plugins/mods/create) sebelum Anda mulai di sini. Untuk setiap peristiwa dan bidangnya yang tepat, lihat [referensi](/docs/id/plugins/mods/reference#events) atau baca [tipe untuk build Anda](/docs/id/plugins/mods/create#get-the-types-for-your-build).

12 

13<h2 id="how-a-hook-handles-an-event">

14 Bagaimana hook menangani peristiwa

15</h2>

16 

17Hook duduk di antara peristiwa dan apa yang akan dilakukan Claude Code tentangnya, sehingga dapat mengamati peristiwa, menulis ulangnya, atau menjawabnya sendiri. Hook menerima tiga argumen: [mods API](/docs/id/plugins/mods/api) sebagai `$`, peristiwa sebagai `e`, dan penanganan berikutnya sebagai `next`. Penanganan untuk peristiwa membentuk rantai middleware. `next(e)` memanggil penanganan berikutnya, yang merupakan hook mod lain atau, di akhir rantai, perilaku Claude Code sendiri, dan diselesaikan dengan hasilnya. Apa yang dilakukan hook Anda dengan `next` menentukan mana dari ketiga hal itu yang dilakukannya.

18 

19<h3 id="observe-an-event">

20 Amati peristiwa

21</h3>

22 

23Untuk mengamati peristiwa tanpa mengubahnya, lakukan pekerjaan Anda dan kembalikan `next(e)`. Hook ini mencatat setiap alat yang akan digunakan Claude:

24 

25```javascript theme={null}

26on('tool.call', async ($, e, next) => {

27 // Berjalan sebelum alat dijalankan

28 $.ui.log('Claude is about to use ' + e.tool)

29 // Teruskan peristiwa tanpa perubahan

30 return next(e)

31})

32```

33 

34Sebelum setiap alat dijalankan, baris redup seperti `● my-mod: Claude is about to use Bash` muncul dalam transkrip, di mana `my-mod` adalah nama plugin Anda. Alat berjalan seperti yang akan terjadi tanpa mod.

35 

36Untuk bertindak setelah peristiwa, `await next(e)`, lakukan pekerjaan Anda, dan kembalikan hasilnya. Hook ini mencatat setiap alat setelah dijalankan:

37 

38```javascript theme={null}

39on('tool.call', async ($, e, next) => {

40 // Biarkan alat berjalan, dan tunggu hasilnya

41 const result = await next(e)

42 // Berjalan setelah alat selesai

43 $.ui.log(e.tool + ' finished')

44 // Berikan hasil kembali tanpa perubahan

45 return result

46})

47```

48 

49Baris sekarang muncul setelah setiap alat selesai. Claude membaca hasil yang sama dengan cara apa pun, karena hook mengembalikan apa yang diselesaikan `next(e)`.

50 

51<h3 id="rewrite-an-event">

52 Tulis ulang peristiwa

53</h3>

54 

55Untuk mengubah apa yang Claude Code bertindak, seperti teks prompt, panggil `next` dengan salinan peristiwa yang dimodifikasi. Peristiwa itu sendiri tidak dapat diubah: peristiwa itu dibekukan di setiap kedalaman, dan penugasan ke bidang melempar. Hook ini memangkas setiap prompt sebelum dikirim:

56 

57```javascript theme={null}

58on('prompt.submit', async ($, e, next) => {

59 // Teruskan salinan peristiwa dengan teksnya diubah

60 return next({ ...e, text: e.text.trim() })

61})

62```

63 

64Penanganan berikutnya dan Claude Code menerima prompt yang dipangkas dan tidak pernah melihat yang asli. Anda juga dapat mengubah hasilnya: `await next(e)`, kemudian kembalikan salinan hasil dengan bidang yang diganti.

65 

66<h3 id="answer-an-event">

67 Jawab peristiwa

68</h3>

69 

70Untuk menangani peristiwa sendiri, kembalikan hasil tanpa memanggil `next`. Itu memotong rantai, sehingga mod berikutnya dan perilaku Claude Code sendiri tidak berjalan. Hook ini menolak setiap perintah Bash:

71 

72```javascript theme={null}

73on('tool.call', { tool: 'Bash' }, async () => {

74 // Tidak ada panggilan ke next, jadi perintah tidak pernah dijalankan

75 return { deny: 'Bash is turned off in this project. Use the file tools.' }

76})

77```

78 

79Ketika Claude mencoba perintah Bash, perintah tidak berjalan, dan Claude membaca teks `deny` sebagai hasil alat. Setiap peristiwa memiliki bentuk hasil sendiri, yang [referensi peristiwa](/docs/id/plugins/mods/reference#events) daftarkan.

80 

81<h3 id="filter-which-events-a-hook-handles">

82 Saring peristiwa mana yang ditangani hook

83</h3>

84 

85Untuk menjalankan hook hanya untuk beberapa peristiwa, teruskan filter sebagai argumen kedua ke `on`. Claude Code memanggil filter sebagai matcher. Ini adalah objek yang bidangnya dibandingkan dengan peristiwa, dan hook hanya berjalan ketika setiap bidang cocok. Bidang dapat berupa nilai, array nilai yang diizinkan, atau ekspresi reguler.

86 

87Setiap baris dalam contoh ini mendaftarkan fungsi yang sama, `hook`, untuk set panggilan alat yang lebih sempit:

88 

89```javascript theme={null}

90// String cocok dengan satu nilai: hanya panggilan Bash

91on('tool.call', { tool: 'Bash' }, hook)

92// Array cocok dengan nilai apa pun di dalamnya: panggilan Edit dan Write

93on('tool.call', { tool: ['Edit', 'Write'] }, hook)

94// Ekspresi reguler cocok dengan pola: setiap alat dari satu server MCP

95on('tool.call', { tool: /^mcp__github__/ }, hook)

96```

97 

98`hook` berjalan sekali untuk panggilan Bash, Edit, atau Write, dan sekali untuk panggilan ke alat yang namanya dimulai dengan `mcp__github__`. Panggilan ke alat lain apa pun, seperti Read, tidak cocok dengan ketiga hal itu, jadi `hook` tidak berjalan untuk itu.

99 

100Nama peristiwa dapat berupa wildcard. `'classic.*'` cocok dengan setiap [peristiwa hook pengaturan](#hook-the-settings-hook-events). `'*'` cocok dengan setiap peristiwa kecuali [peristiwa telemetri](/docs/id/plugins/mods/reference#telemetry), yang Anda hook berdasarkan nama atau sebagai `'telemetry.*'`.

101 

102Daftarkan setiap peristiwa sekali per matcher. Jika Anda memanggil `on` dua kali untuk `session.start` tanpa matcher, modul gagal dimuat dengan `on("session.start") is registered twice without a matcher`. Masukkan semua yang dilakukan mod Anda saat memulai sesi dalam satu hook.

103 

104<h2 id="hook-what-claude-is-doing">

105 Hook apa yang dilakukan Claude

106</h2>

107 

108Hook peristiwa ini untuk melihat atau mengubah panggilan alat, prompt, atau giliran saat terjadi. Untuk setiap peristiwa dan apa yang dapat dikembalikan hook, lihat [referensi peristiwa](/docs/id/plugins/mods/reference#events).

109 

110<h3 id="guard-or-change-a-tool-call">

111 Lindungi atau ubah panggilan alat

112</h3>

113 

114Hook `tool.call` melihat setiap alat yang akan digunakan Claude, sehingga dapat menolak panggilan, mengubah argumennya, atau membiarkannya. `tool.call` diaktifkan ketika Claude Code akan menjalankan alat, termasuk panggilan yang dibuat subagen dan panggilan ke alat MCP. `e.tool` adalah nama alat dan argumen alat adalah bidang `e`, seperti `e.command` untuk Bash. Ketika Anda memanggil `next(e)`, Claude Code menjalankan pemeriksaan izin dan kemudian alat.

115 

116Hook ini menolak perintah Bash yang force-push, dan memberi tahu Claude mengapa:

117 

118```javascript theme={null}

119// Matcher membatasi hook ke panggilan Bash, jadi e.command adalah perintah shell

120on('tool.call', { tool: 'Bash' }, async ($, e, next) => {

121 if (/git push .*--force/.test(e.command)) {

122 // Mengembalikan tanpa memanggil next menjawab peristiwa, jadi perintah tidak pernah dijalankan

123 return { deny: 'Force pushes are not allowed in this repository. Push to a new branch instead.' }

124 }

125 // Setiap perintah lain melanjutkan ke pemeriksaan izin dan kemudian ke Bash

126 return next(e)

127})

128```

129 

130Ketika Claude mencoba `git push --force`, perintah tidak berjalan dan tidak ada prompt izin muncul, karena hook tidak pernah memanggil `next`. Claude membaca teks `deny` sebagai hasil alat, jadi tulislah sebagai instruksi yang dapat ditindaklanjuti Claude. Setiap perintah Bash lain berjalan seperti yang akan terjadi tanpa mod.

131 

132Untuk bertindak setelah alat telah berjalan, `await next(e)`, lakukan pekerjaan Anda, dan kembalikan apa yang diberikan `next`. Hook ini mencatat setiap file `.mdx` yang diubah Claude, dengan [`$.ui.log`](/docs/id/plugins/mods/api#show-something-without-starting-a-turn), yang menambahkan baris redup ke transkrip yang tidak dibaca Claude:

133 

134```javascript theme={null}

135on('tool.call', { tool: ['Edit', 'Write'] }, async ($, e, next) => {

136 // Tunggu pemeriksaan izin dan alat, dan simpan apa yang mereka hasilkan

137 const result = await next(e)

138 // Panggilan yang ditolak kembali sebagai { deny }, dan yang gagal memiliki isError yang ditetapkan

139 const changed = !result.deny && !result.isError

140 if (changed && e.file_path.endsWith('.mdx')) $.ui.log('Claude changed ' + e.file_path)

141 // Kembalikan hasil seperti yang datang, sehingga Claude membaca apa yang dikembalikan alat

142 return result

143})

144```

145 

146Setelah Claude mengedit atau menulis file `.mdx`, baris redup dalam transkrip menamai file. Tidak ada yang dicatat untuk jenis file lain, atau untuk panggilan yang ditolak atau gagal. Pandangan Claude tentang panggilan tidak berubah, karena hook mengembalikan hasil yang diterima.

147 

148Untuk mengubah panggilan, teruskan argumen yang diubah ke `next`. Untuk mencoba ulang panggilan, panggil `next(e)` lagi: hook yang melihat `isError` pada hasil pertama dapat menjalankan alat kedua kali dan mengembalikan hasil itu. Untuk menjawab panggilan sendiri, kembalikan objek dengan bidang `result`, seperti `{ result: 'Skipped by my-mod' }`, tanpa memanggil `next`. Ketika Anda melakukan itu, tidak ada prompt izin yang muncul dan alat tidak berjalan, jadi hasil yang Anda kembalikan adalah semua yang dipelajari Claude tentang apa yang terjadi.

149 

150Hook dalam [pengaturan terkelola](/docs/id/server-managed-settings) organisasi Anda berjalan sebelum hook `tool.call` mod apa pun, dan blok dari salah satu dari mereka adalah final.

151 

152<h4 id="hold-a-tool-call-until-the-user-decides">

153 Tahan panggilan alat sampai pengguna memutuskan

154</h4>

155 

156Hook dapat menjeda panggilan alat dan menanyakan kepada pengguna apa yang harus dilakukan sebelum melanjutkan. Hook `tool.call` dapat `await` sebelum memanggil `next` atau mengembalikan, dan panggilan alat tetap tertunda sampai saat itu. Untuk mengajukan pertanyaan kepada pengguna, panggil `$.ui.ask`. Ini menampilkan pertanyaan Anda di atas daftar bernomor opsi Anda, dalam dialog yang digunakan Claude untuk menanyakan sesuatu kepada Anda, dan diselesaikan dengan label yang dipilih pengguna. Setelah opsi Anda, dialog menambahkan baris untuk mengetik jawaban berbeda dan baris **Chat about this**.

157 

158Pola `RISKY` dalam contoh ini cocok dengan `rm -r`, `rm -rf`, `git reset --hard`, dan `git push` dengan `--force`, dan melewatkan ejaan lain seperti `git push -f`. Modul ini menanyakan sebelum menjalankan perintah Bash yang cocok dengan pola:

159 

160```javascript theme={null}

161const RISKY = /\brm\s+-rf?\b|\bgit\s+reset\s+--hard\b|\bgit\s+push\b.*--force/

162 

163export function register(on) {

164 on('tool.call', { tool: 'Bash' }, async ($, e, next) => {

165 // Biarkan setiap perintah lain melalui tanpa pertanyaan

166 if (!RISKY.test(e.command)) return next(e)

167 // Mulai dari jawaban yang aman, sehingga pertanyaan yang tidak dijawab siapa pun menolak perintah

168 let answer = 'Refuse'

169 try {

170 // Panggilan alat menunggu di sini sampai pengguna memilih salah satu dari dua label

171 answer = await $.ui.ask('Run this command? ' + e.command, ['Run it', 'Refuse'])

172 } catch {

173 // Pengguna membatalkan pertanyaan, atau ini adalah jalankan claude -p tanpa siapa pun untuk ditanyai

174 }

175 if (answer !== 'Run it') {

176 // Jawab tanpa memanggil next, jadi perintah tidak berjalan

177 return { deny: 'The user declined this command. Ask before trying a different approach.' }

178 }

179 return next(e)

180 })

181}

182```

183 

184Ketika Claude mencoba perintah seperti `rm -rf build`, pertanyaan muncul dengan perintah di dalamnya, dan perintah menunggu jawaban:

185 

186* **Pengguna memilih Run it**: hook memanggil `next(e)`, dan pemeriksaan izin biasa masih berjalan setelahnya

187* **Pengguna memilih Refuse**: perintah tidak berjalan, dan Claude membaca teks `deny`

188* **Pengguna mengetik jawaban**: `$.ui.ask` diselesaikan dengan teks yang diketik. Hook membandingkannya dengan `Run it`, jadi teks lain apa pun menolak perintah.

189* **Tidak ada yang menjawab**: `$.ui.ask` menolak ketika pengguna membatalkan pertanyaan atau memilih **Chat about this**, dan dalam jalankan `claude -p`, jadi blok `catch` membiarkan jawaban di `Refuse`

190 

191Simpan tunggu di dalam panggilan mods API seperti `$.ui.ask`, karena waktu itu tidak dihitung terhadap [batas waktu 10 detik](/docs/id/plugins/mods/reference#limits) hook. Waktu yang dihabiskan menunggu janji Anda sendiri dihitung. Claude Code melewati hook yang habis waktu, jadi perintah yang ditahan akan berjalan.

192 

193<h3 id="rewrite-or-add-to-a-prompt">

194 Tulis ulang atau tambahkan ke prompt

195</h3>

196 

197Hook `prompt.submit` melihat setiap prompt sebelum giliran dimulai, sehingga dapat menulis ulang teks atau menambahnya. `e.text` adalah apa yang diketik.

198 

199| Untuk melakukan ini | Kembalikan ini |

200| :- | :- |

201| Tulis ulang prompt. Pesan dalam transkrip menampilkan teks baru. | `next({ ...e, text: newText })` |

202| Tambahkan teks hanya Claude baca, setelah prompt | `next({ ...e, context: [...(e.context ?? []), extraText] })` |

203| Hentikan prompt dari pengiriman | `{ drop: 'the reason' }` |

204 

205Hook ini menambahkan nama cabang saat ini untuk Claude setiap kali prompt menyebutkan permintaan tarik:

206 

207```javascript theme={null}

208on('prompt.submit', async ($, e, next) => {

209 // Teruskan prompt yang tidak menyebutkan permintaan tarik seperti apa adanya

210 if (!/\bPR\b|pull request/i.test(e.text)) return next(e)

211 const git = await $.process.run(['git', 'branch', '--show-current'])

212 // Di luar repositori git perintah gagal, jadi tidak ada cabang untuk ditambahkan

213 if (git.exitCode !== 0) return next(e)

214 // Simpan konteks apa pun yang ditambahkan hook sebelumnya, dan tambahkan satu baris lagi untuk Claude

215 return next({ ...e, context: [...(e.context ?? []), 'Current branch: ' + git.stdout.trim()] })

216})

217```

218 

219Ketika Anda mengirim prompt seperti `open a PR for this change`, pesan Anda terlihat sama dalam transkrip, dan Claude juga membaca baris seperti `Current branch: feature/auth` setelahnya. Prompt yang tidak menyebutkan permintaan tarik melewati tanpa perubahan, dan `git` tidak berjalan.

220 

221[Peristiwa lain](/docs/id/plugins/mods/reference#prompts-and-what-claude-reads) mencakup sisa apa yang dibaca Claude: `prompt.section` untuk setiap bagian prompt sistem, `prompt.context` untuk konteks yang dikirim dengan pesan pertama, dan `skill.prompt` untuk teks skill. Teks dari hook ini yang berubah antara permintaan [membatalkan cache prompt](/docs/id/prompt-caching).

222 

223<h3 id="follow-a-turn">

224 Ikuti giliran

225</h3>

226 

227Giliran adalah semua yang dilakukan Claude sebagai jawaban atas satu prompt. Hook `turn.start`, `turn.step`, dan `turn.complete` untuk mengikuti satu:

228 

229| Peristiwa | Kapan diaktifkan | Apa yang dapat dilakukan hook |

230| :- | :- | :- |

231| `turn.start` | Giliran dimulai | Amati. `e.turnId` mengidentifikasi giliran dalam dua peristiwa lainnya. |

232| `turn.step` | Claude Code akan mengirim satu permintaan ke model. Giliran dengan panggilan alat memiliki beberapa. `e.agentId` ditetapkan untuk permintaan subagen. | Baca penggunaan token setiap permintaan, kirimkan ke model berbeda dengan `next({ ...e, model })`, atau jawab tanpa memanggil model |

233| `turn.complete` | Giliran berakhir, termasuk giliran yang diinterupsi pengguna, di mana `e.isAborted` adalah `true`. `e.answer` adalah teks final Claude, `e.durationMs` berapa lama waktu yang dibutuhkan, dan `e.usage` total token giliran. Giliran subagen mengeluarkannya dengan `e.agentId` ditetapkan. | Amati, atau kembalikan objek dengan bidang `text`, seperti `{ text: 'Done in 12 seconds' }`, untuk menampilkan baris di bawah jawaban |

234 

235Tulis hook `turn.step` sebagai generator asinkron, karena peristiwa mengalir. `yield* next(e)` meneruskan respons saat mengalir dan mengevaluasi hasil yang selesai. Hook ini mencatat berapa banyak dari setiap permintaan yang dilayani Claude API dari [cache prompt](/docs/id/prompt-caching):

236 

237```javascript theme={null}

238// function* membuat hook menjadi generator, yang dapat meneruskan respons sepotong demi sepotong

239on('turn.step', async function* ($, e, next) {

240 // Kirim permintaan, teruskan setiap bagian saat tiba, dan simpan hasil yang selesai

241 const result = yield* next(e)

242 // Lewati hasil yang tidak melaporkan hitungan token

243 if (result.usage) {

244 $.ui.log('cache read ' + result.usage.cache_read_input_tokens + ' · wrote ' + result.usage.cache_creation_input_tokens)

245 }

246 // Kembalikan hasil tanpa perubahan, sehingga giliran berlanjut seperti biasa

247 return result

248})

249```

250 

251Respons Claude mengalir ke layar seperti yang terjadi tanpa mod. Setelah setiap permintaan selesai, baris redup dalam transkrip memberikan jumlah token yang dibaca dari cache dan jumlah yang ditulis ke dalamnya. Giliran dengan panggilan alat memiliki beberapa permintaan, jadi menambahkan beberapa baris.

252 

253`result.usage` menyimpan empat hitungan token yang dilaporkan Claude API untuk permintaan, ditambah `model` yang menjawab: `input_tokens`, `output_tokens`, `cache_read_input_tokens`, dan `cache_creation_input_tokens`. Hook berjalan untuk permintaan subagen juga, jadi periksa `e.agentId` ketika Anda hanya menginginkan percakapan utama.

254 

255<h3 id="hook-the-settings-hook-events">

256 Hook peristiwa hook pengaturan

257</h3>

258 

259Hook pengaturan adalah hook perintah, HTTP, prompt, dan agen yang Anda konfigurasi dalam file pengaturan. Setiap [peristiwa hook pengaturan](/docs/id/hooks#hook-events), seperti `Stop`, `SessionEnd`, atau `PostToolUse`, juga merupakan peristiwa bernama `classic.` diikuti dengan nama peristiwa hook pengaturan, seperti `classic.Stop`. `e` adalah JSON yang diterima hook pengaturan di stdin, termasuk `transcript_path`.

260 

261Hook ini menggunakan `Stop`, yang diaktifkan ketika Claude selesai merespons, untuk mencatat di mana transkrip sesi disimpan:

262 

263```javascript theme={null}

264on('classic.Stop', async ($, e, next) => {

265 // e memiliki bidang yang sama yang dibaca hook Stop dalam file pengaturan dari stdin

266 $.ui.log('Transcript saved at ' + e.transcript_path)

267 // Teruskan peristiwa, sehingga hook Stop dalam file pengaturan Anda masih berjalan

268 return next(e)

269})

270```

271 

272Setiap kali Claude selesai merespons, baris redup dalam transkrip memberikan jalur file transkrip. Hook mengembalikan `next(e)`, sehingga mengamati peristiwa dan tidak mengubah apa pun tentang cara giliran berakhir.

273 

274<h2 id="run-alongside-other-mods">

275 Jalankan bersama mod lain

276</h2>

277 

278Beberapa mod dapat hook peristiwa yang sama, dan salah satu dari mereka dapat gagal. Jika mod Anda memblokir panggilan alat, periksa posisinya dalam rantai dan apa yang terjadi ketika hooknya gagal.

279 

280<h3 id="the-order-mods-run-in">

281 Urutan mod berjalan

282</h3>

283 

284Hook pada peristiwa yang sama membentuk satu rantai middleware. Setiap `next` mod memanggil hook mod berikutnya, dan `next` terakhir mencapai perilaku Claude Code sendiri. Mod pertama adalah terluar: melihat peristiwa sebelum yang lain dan hasil setelah mereka, dan menentukan apakah yang lain berjalan sama sekali. Mod yang lebih baru tidak dapat menghentikan yang lebih awal dari melihat peristiwa.

285 

286Claude Code mengurutkan rantai berdasarkan tempat asal setiap mod:

287 

2881. Guard bawaan `sec-default@builtin`, mod yang dibangun ke dalam Claude Code yang `/plugin` daftarkan sebagai `cc-plugin-sec-default`, di mana [dimuat](/docs/id/plugins/mods/admin#know-what-happens-by-default), mod yang organisasi Anda daftarkan dalam [`prependPlugins`](/docs/id/plugins/mods/admin#install-your-organizations-mods), dan kemudian mod lain apa pun yang dihitung sebagai organisasi Anda dan tidak dalam `appendPlugins`

2892. Mod yang Anda instal

2903. Mod yang organisasi Anda daftarkan dalam `appendPlugins`

2914. Mod bawaan lain yang dibangun ke dalam Claude Code

292 

293Di antara mod yang Anda instal, mod berjalan sebelum mod yang didaftarkan di bawah `dependencies` dalam manifestnya. Dalam satu modul, hook berjalan dalam urutan `register` yang disebut `on`.

294 

295<h4 id="where-settings-hooks-run-in-the-order">

296 Di mana hook pengaturan berjalan dalam urutan

297</h4>

298 

299Hook `PreToolUse` yang dikonfigurasi dalam file pengaturan juga berjalan selama panggilan alat, pada titik tetap dalam rantai mod:

300 

301* **Hook `PreToolUse` dari pengaturan terkelola**: berjalan sebelum hook `tool.call` mod pertama, dan blok dari salah satu dari mereka adalah final, jadi tidak ada mod yang melihat panggilan.

302* **Hook `PreToolUse` dari setiap file pengaturan lain dan dari `hooks/hooks.json` plugin**: berjalan setelah mod terakhir memanggil `next`, sebagai bagian dari perilaku Claude Code sendiri. Mod yang menjawab `tool.call` tanpa memanggil `next` mencegah mereka berjalan, dan mod yang memanggil `next` melihat keputusan mereka dalam hasil yang dikembalikan.

303 

304[`tool.check`](/docs/id/plugins/mods/reference#tools) adalah peristiwa di mana Claude Code memutuskan apakah panggilan alat dapat berjalan. Peristiwa ini diaktifkan setelah hook tersebut dan aturan izin telah memutuskan, dan `next(e)` diselesaikan dengan keputusan mereka. Hook pada `tool.check` dapat mengembalikan keputusan berbeda, seperti `{ decision: 'allow' }`, sehingga dapat menyetujui panggilan yang diblokir hook di grup kedua. [Perluas izin dengan hook](/docs/id/permissions#extend-permissions-with-hooks) mencantumkan keputusan mana yang berlaku atas mod.

305 

306<h3 id="handle-a-hook-that-fails">

307 Tangani hook yang gagal

308</h3>

309 

310Hook yang gagal tidak merusak sesi, dan Anda dapat memutuskan apa yang terjadi sebagai gantinya. Ketika hook tanpa penanganan `.catch` melempar, habis waktu, atau mengembalikan hasil bentuk yang salah, apa yang terjadi selanjutnya tergantung pada apakah telah memanggil `next`:

311 

312* **Gagal sebelum memanggil `next`**: Claude Code melewatinya, dan penanganan berikutnya berjalan sebagai gantinya

313* **Gagal setelah `next` diselesaikan**: hasil itu berdiri, dan tidak ada yang berjalan kedua kalinya

314 

315Satu 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](/docs/id/plugins/mods/troubleshoot#find-out-why-a-mod-does-nothing) daftarkan. Hook `ui.render` yang gambarnya tidak divalidasi dilaporkan berbeda, seperti [Bangun pohon dari elemen](/docs/id/plugins/mods/interface#build-a-tree-from-elements) menjelaskan.

316 

317Untuk membuat hook yang memblokir panggilan gagal tertutup, tambahkan penanganan kesalahan `.catch` yang menjawab sebagai gantinya. Di sini, `guard` adalah fungsi hook Anda:

318 

319```javascript theme={null}

320// on mengembalikan pendaftaran, dan .catch melampirkan penanganan ke hook itu saja

321on('tool.call', { tool: 'Bash' }, guard).catch(async ($, e, next) => {

322 // next.error.kind adalah 'throw' atau 'timeout', yang mengatakan bagaimana guard gagal

323 return { deny: 'The command guard failed, so this command was not run: ' + next.error.kind }

324})

325```

326 

327Sementara `guard` bekerja, penanganan tidak pernah berjalan. Ketika `guard` melempar atau habis waktu pada panggilan Bash, Claude Code memanggil penanganan dengan peristiwa yang sama. Penanganan mengembalikan `{ deny }`, jadi perintah tidak berjalan, dan Claude membaca teks dengan `throw` atau `timeout` di akhir. Tanpa penanganan, Claude Code akan melewati `guard` dan menjalankan perintah. Penanganan memiliki [satu detik](/docs/id/plugins/mods/reference#limits) untuk menjawab.

328 

329<h2 id="next-steps">

330 Langkah berikutnya

331</h2>

332 

333* [Gunakan mods API](/docs/id/plugins/mods/api): tambahkan perintah dan alat, panggil model, dan jalankan pekerjaan pada timer

334* [Gambar di antarmuka](/docs/id/plugins/mods/interface): tampilkan apa yang dikumpulkan hook Anda dalam panel atau di atas prompt

335* [Uji mod](/docs/id/plugins/mods/test): naikkan salah satu peristiwa ini dari tes

336* [Referensi mods](/docs/id/plugins/mods/reference): setiap peristiwa, setiap metode mods API, dan batasnya

plugins/mods/interface.md +867 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Menggambar di antarmuka dengan mod

6 

7> Menggambar panel, pita di atas prompt, tombol, dan bidang teks dari mod Claude Code, menangani penekanan dan input, serta menjaga status antara redraw dan sesi.

8 

9Mod dapat menggambar antarmukanya sendiri di Claude Code dan mengubah bagian antarmuka yang sudah digambar Claude Code. Setiap tempat mod dapat menggambar disebut [render site](/docs/id/plugins/mods/reference#render-sites), seperti panel, pita di atas prompt, atau spinner. Claude Code menaikkan event [`ui.render`](/docs/id/plugins/mods/reference#interface) setiap kali akan menggambar render site, dan hook Anda untuk event tersebut mengembalikan apa yang akan digambar di sana.

10 

11Peta ini menunjukkan di mana mod dapat menggambar dalam sesi terminal:

12 

13<img src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-screen-map.svg?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=5fda26b6609c62b68c6f9e528c1590ea" className="dark:hidden" alt="Peta sesi terminal Claude Code. Mod dapat menambahkan panel sebagai sidebar di sebelah kanan, toast di sudut kanan atas transkrip, baris log dalam transkrip, pita di atas prompt, dan baris status di bawah prompt. Mod dapat menggambar ulang pesan, baris panggilan alat, dan spinner. Prompt adalah milik Claude Code sendiri." width="600" height="336" data-path="images/mods-screen-map.svg" />

14 

15<img src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-screen-map-dark.svg?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=5b4161581a1bd2c0450b0c8b57bc1225" className="hidden dark:block" alt="Peta sesi terminal Claude Code. Mod dapat menambahkan panel sebagai sidebar di sebelah kanan, toast di sudut kanan atas transkrip, baris log dalam transkrip, pita di atas prompt, dan baris status di bawah prompt. Mod dapat menggambar ulang pesan, baris panggilan alat, dan spinner. Prompt adalah milik Claude Code sendiri." width="600" height="336" data-path="images/mods-screen-map-dark.svg" />

16 

17Di terminal yang lebih sempit, panel duduk di atas prompt daripada di samping transkrip.

18 

19Bangun [mod pertama Anda](/docs/id/plugins/mods/create) sebelum Anda mulai di sini. Mulai dengan contoh yang dikerjakan, yang membangun panel dengan dua tab dan penghitung, kemudian baca bagian untuk setiap bagian yang ingin Anda ubah.

20 

21<Note>

22 Untuk mencari satu prop atau batas, lihat [referensi](/docs/id/plugins/mods/reference#render-sites).

23</Note>

24 

25<h2 id="build-a-pane-with-tabs">

26 Bangun panel dengan tab

27</h2>

28 

29Di bagian ini Anda membangun mod yang menambahkan perintah `/hello-tabs`, dan perintah membuka panel. Panel adalah sidebar di samping transkrip dalam terminal fullscreen yang lebar, atau wilayah berbingkai di atas prompt sebaliknya. Panel ini menampilkan dua tab, dan tab kedua memiliki tombol yang menambah satu ke penghitung. Hitungan masih ada setelah Anda memulai ulang Claude Code.

30 

31Mod yang selesai terlihat seperti ini. Rekaman membuka panel, beralih ke tab kedua, menekan tombol beberapa kali, dan kembali ke tab pertama:

32 

33<Frame>

34 <video autoPlay muted loop playsInline controls className="w-full dark:hidden" src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-hello-tabs-light.mp4?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=49d520094d87b5b44bfe50fa49677f06" aria-label="Perintah /hello-tabs diketik di prompt Claude Code dan panel berbingkai terbuka di atasnya, dengan '1: One' dan '2: Two' di seluruh bagian atas dan teks 'This is the first tab.' Tab kedua menampilkan tombol 'Add one' di samping 'Count: 1', dan hitungan naik menjadi 3. Panel kemudian kembali ke tab pertama." data-path="images/mods-hello-tabs-light.mp4" />

35 

36 <video autoPlay muted loop playsInline controls className="w-full hidden dark:block" src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-hello-tabs-dark.mp4?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=ff7a14d713d6e5d3b0000efa8522ea4b" aria-label="Perintah /hello-tabs diketik di prompt Claude Code dan panel berbingkai terbuka di atasnya, dengan '1: One' dan '2: Two' di seluruh bagian atas dan teks 'This is the first tab.' Tab kedua menampilkan tombol 'Add one' di samping 'Count: 1', dan hitungan naik menjadi 3. Panel kemudian kembali ke tab pertama." data-path="images/mods-hello-tabs-dark.mp4" />

37</Frame>

38 

39Claude Code tidak memiliki elemen tab bawaan, jadi tab adalah dua tombol dalam satu baris. Mod melacak mana yang aktif dan menggambar konten tab tersebut di bawah baris.

40 

41<Steps>

42 <Step title="Buat plugin">

43 Mod adalah plugin dengan manifest, `hooks.json` yang menunjuk ke kode Anda, dan file kode. [Buat mod](/docs/id/plugins/mods/create#write-a-mod-yourself) menjelaskan masing-masing. Buat direktori bernama `hello-tabs` dengan direktori `.claude-plugin` dan `hooks` di dalamnya, kemudian simpan dua file pertama.

44 

45 Simpan manifest sebagai `hello-tabs/.claude-plugin/plugin.json`:

46 

47 ```json hello-tabs/.claude-plugin/plugin.json theme={null}

48 {

49 "name": "hello-tabs",

50 "version": "0.1.0",

51 "description": "Opens a pane with two tabs and a counter",

52 "author": { "name": "Your Name" }

53 }

54 ```

55 

56 Beri nama titik masuk Anda di `hello-tabs/hooks/hooks.json`:

57 

58 ```json hello-tabs/hooks/hooks.json theme={null}

59 {

60 "modules": ["./register.js"]

61 }

62 ```

63 </Step>

64 

65 <Step title="Tulis kodenya">

66 Kode melakukan tiga pekerjaan, satu di setiap hook:

67 

68 * Menambahkan perintah `/hello-tabs`

69 * Membuka panel saat Anda menjalankan perintah tersebut

70 * Menggambar konten panel: baris tab dan badan tab yang terbuka

71 

72 Dua variabel tingkat modul, `tab` dan `count`, menyimpan status panel.

73 

74 Simpan ini sebagai `hello-tabs/hooks/register.js`:

75 

76 ```javascript hello-tabs/hooks/register.js theme={null}

77 // ID panel, digunakan untuk membuka panel dan mengenalinya saat menggambar

78 const PANE = 'hello-tabs'

79 

80 // Apa yang ditampilkan panel: tab mana yang terbuka, dan nilai penghitung

81 let tab = 'one'

82 let count = 0

83 

84 export function register(on) {

85 // Berjalan sebelum prompt pertama Anda, dan lagi setelah reload

86 on('session.start', async ($, e, next) => {

87 await $.command.register({ name: 'hello-tabs', description: 'Open the hello-tabs pane' })

88 // Muat hitungan yang disimpan sesi sebelumnya, jika ada

89 const saved = await $.store.get('count')

90 if (typeof saved === 'number') count = saved

91 return next(e)

92 })

93 

94 // Berjalan saat Anda mengetik /hello-tabs

95 on('command.run', { command: 'hello-tabs' }, async ($) => {

96 // Buka panel, berikan keyboard, dan biarkan Esc menutupnya

97 await $.ui.open({ id: PANE, title: 'Hello tabs', focus: true, closeOnEscape: true })

98 // Cetak tidak ada dalam transkrip

99 return {}

100 })

101 

102 // Berjalan setiap kali Claude Code menggambar panel

103 on('ui.render', { component: 'Pane' }, async ($, e, next) => {

104 // Biarkan panel mod lain saja

105 if (e.requestId !== PANE) return next(e)

106 // Dapatkan elemen yang dapat digambar aplikasi ini

107 const { Box, Text, Button } = $.ui.resolve(e)

108 // Minta Claude Code menjalankan hook ini lagi

109 const redraw = () => $.ui.invalidate('ui.render')

110 

111 // Satu tab: tombol yang beralih ke tabnya saat ditekan

112 const tabButton = (name, label, hotkey) =>

113 Button({

114 key: 'tab-' + name,

115 label,

116 hotkey,

117 plain: true,

118 // Redup tab yang tidak terbuka

119 dimColor: tab !== name,

120 onPress: () => {

121 tab = name

122 redraw()

123 },

124 })

125 

126 // Apa yang ada di bawah tab, tergantung mana yang terbuka

127 const body =

128 tab === 'one'

129 ? [Text({ children: ['This is the first tab.'] })]

130 : [

131 Box({

132 flexDirection: 'row',

133 columnGap: 2,

134 children: [

135 Button({

136 key: 'more',

137 label: 'Add one',

138 hotkey: 'a',

139 onPress: async () => {

140 count += 1

141 redraw()

142 // Simpan hitungan sehingga ada setelah restart

143 await $.store.set('count', count)

144 },

145 }),

146 Text({ children: ['Count: ' + count] }),

147 ],

148 }),

149 ]

150 

151 // Seluruh panel: baris tab, baris kosong, kemudian badan

152 return Box({

153 flexDirection: 'column',

154 children: [

155 Box({

156 flexDirection: 'row',

157 columnGap: 3,

158 children: [tabButton('one', 'One', '1'), tabButton('two', 'Two', '2')],

159 }),

160 Text({ children: [' '] }),

161 ...body,

162 ],

163 })

164 })

165 }

166 ```

167 

168 Setiap hook juga melakukan sesuatu yang tidak jelas dari kode:

169 

170 * **[`session.start`](/docs/id/plugins/mods/reference#session)** juga membaca hitungan yang disimpan dari [`$.store`](#keep-state), penyimpanan kunci-nilai yang bertahan antar sesi.

171 * **[`command.run`](/docs/id/plugins/mods/api#add-a-command)** hanya memberi tahu Claude Code bahwa panel ada. Membuka panel tidak menggambar apa pun dengan sendirinya: Claude Code kemudian menaikkan `ui.render` untuk menanyakan apa yang ada di dalamnya.

172 * **`ui.render`** mengembalikan pohon elemen, `Box` yang menyimpan kotak lain, teks, dan tombol, dan membangunnya lagi dari `tab` dan `count` setiap kali berjalan.

173 

174 Menekan tombol menjalankan callback `onPress`-nya, yang mengubah variabel dan memanggil `redraw`. Claude Code kemudian menjalankan hook `ui.render` lagi, dan hook membangun pohon baru dari nilai baru. Setiap gambar interaktif menggunakan siklus render itu: callback mengubah status, dan hook merender lagi dari status baru.

175 </Step>

176 

177 <Step title="Buka panel">

178 Di shell Anda, mulai Claude Code dengan `claude --plugin-dir ./hello-tabs`. Di prompt Claude Code, jalankan `/hello-tabs`. Panel terbuka dengan `1: One` dan `2: Two` di seluruh bagian atas. Tekan `2`, kemudian tekan `a`, pintasan keyboard untuk **Add one**, beberapa kali. Hitungan naik.

179 </Step>

180 

181 <Step title="Periksa bahwa hitungan disimpan">

182 Tekan Esc untuk menutup panel, kemudian keluar dari sesi. Di shell Anda, mulai Claude Code lagi dengan perintah `claude --plugin-dir ./hello-tabs` yang sama, dan di prompt Claude Code jalankan `/hello-tabs`. Hitungan ada di mana Anda meninggalkannya.

183 

184 Untuk menghapus hitungan, buat mod memanggil `$.store.delete('count')`. [Jaga status](#keep-state) mencakup berapa lama setiap jenis nilai bertahan.

185 </Step>

186</Steps>

187 

188<h2 id="pick-where-to-draw">

189 Pilih di mana menggambar

190</h2>

191 

192Hook `ui.render` berjalan untuk setiap render site kecuali Anda mempersempit ke yang Anda inginkan. Untuk memilih render site, teruskan filter, disebut [matcher](/docs/id/plugins/mods/events#filter-which-events-a-hook-handles), sebagai argumen kedua ke `on`. `{ component: 'Pane' }` menjalankan hook hanya untuk panel. Dalam hook, `e.component` menamai situs, `e.surface` mengatakan aplikasi mana yang menggambar, dan `e.props` menyimpan data situs sendiri. Untuk panel, `e.requestId` adalah `id` yang Anda buka dengannya.

193 

194Dua situs kosong sampai mod mengisinya, panel dan pita. Pilih tab untuk melihat apa itu masing-masing dan cara menggambar di dalamnya:

195 

196<Tabs>

197 <Tab title="Pane">

198 Panel adalah sidebar di samping transkrip dalam terminal fullscreen yang lebar, atau wilayah berbingkai di atas prompt sebaliknya. Dengan beberapa panel terbuka, masing-masing mendapat tab yang menampilkan judulnya.

199 

200 Panel muncul saat mod Anda memanggil `$.ui.open` dengan `id` yang Anda pilih, seperti dalam `$.ui.open({ id: 'hello-tabs' })`. [Buka panel pada waktu yang tepat](#open-a-pane-at-the-right-time) mencakup bidang lain dan kapan panel menunggu terminal yang lebih lebar.

201 

202 Untuk menggambar di panel Anda, filter pada `{ component: 'Pane' }` dan periksa bahwa `e.requestId` adalah `id` Anda.

203 </Tab>

204 

205 <Tab title="Band above the prompt">

206 Pita adalah strip langsung di atas input prompt. Selalu ada, dan setiap mod berbaginya.

207 

208 Hook Anda mengembalikan pohon untuk menampilkan sesuatu di pita, atau `next(e)` untuk menampilkan tidak ada. Pohon menggantikan apa yang mod [setelah Anda](/docs/id/plugins/mods/events#the-order-mods-run-in) gambar di sana. Untuk menjaga milik mereka, letakkan hasil `await next(e)` di antara anak-anak [`Box`](#build-a-tree-from-elements) dalam pohon Anda.

209 

210 Untuk menggambar di pita, filter pada `{ component: 'AbovePrompt' }`.

211 </Tab>

212</Tabs>

213 

214<h3 id="change-what-claude-code-already-draws">

215 Ubah apa yang sudah digambar Claude Code

216</h3>

217 

218Claude Code menggambar sebagian besar antarmukanya sendiri: pesan, baris panggilan alat, spinner, dan lainnya. Masing-masing bagian itu adalah render site juga, jadi mod dapat mengubah gaya atau menggantinya. Untuk mengubah satu, filter hook `ui.render` Anda pada namanya dari tabel ini:

219 

220| Situs | Apa itu |

221| :- | :- |

222| `UserMessage`, `AssistantMessage` | Pesan dalam transkrip |

223| `ToolUse`, `ToolResult`, `ToolGroup` | Baris panggilan alat, hasilnya, dan run panggilan yang dilipat |

224| `CommandOutput` | Baris yang dicetak perintah |

225| `AskUserQuestion` | Dialog yang dibuka Claude untuk menanyakan pertanyaan kepada Anda |

226| `Spinner`, `ToolProgress`, `TurnDuration` | Baris status untuk giliran: baris yang beranimasi saat Claude bekerja, baris kemajuan langsung alat yang berjalan, dan baris yang menutup giliran |

227| `InfoNotice`, `SessionMode`, `PromptHint` | Baris status di bawah logo, label mode di footer, dan baris petunjuk di bawah prompt |

228 

229Di situs yang sudah digambar Claude Code, hook Anda memiliki tiga pilihan: ubah detail, ganti gambar, atau biarkan saja. Pilih tab untuk melihat masing-masing diterapkan pada spinner. Contoh membaca variabel `calls` yang hook lain hitung, seperti dalam [mod tutorial](/docs/id/plugins/mods/create#write-a-mod-yourself).

230 

231<Tabs>

232 <Tab title="Change a detail">

233 Untuk menjaga gambar Claude Code dan mengubah satu bagian darinya, teruskan `next` salinan event dengan `props` yang diubah. Hook ini mengubah teks setelah kata spinner:

234 

235 ```javascript theme={null}

236 on('ui.render', { component: 'Spinner' }, async ($, e, next) => {

237 // Jaga spinner Claude Code, dan ubah teks setelah katanya

238 return next({ ...e, props: { ...e.props, suffix: ' · tool calls: ' + calls + '…' } })

239 })

240 ```

241 

242 Spinner menjaga animasi dan katanya, dan teks Anda mengikuti kata:

243 

244 ```text theme={null}

245 Thinking · tool calls: 2…

246 ```

247 </Tab>

248 

249 <Tab title="Replace the drawing">

250 Untuk menggambar sesuatu milik Anda sendiri di tempat situs, kembalikan pohon dan jangan panggil `next`. Hook ini menggambar satu baris teks di mana spinner akan berada:

251 

252 ```javascript theme={null}

253 on('ui.render', { component: 'Spinner' }, async ($, e) => {

254 const { Text } = $.ui.resolve(e)

255 // Tidak ada panggilan ke next, jadi baris ini digambar di tempat spinner

256 return Text({ children: ['Claude has made ' + calls + ' tool calls'] })

257 })

258 ```

259 

260 Saat Claude bekerja, baris Anda menampilkan dan spinner Claude Code tidak:

261 

262 ```text theme={null}

263 Claude has made 2 tool calls

264 ```

265 </Tab>

266 

267 <Tab title="Leave it alone">

268 Untuk meninggalkan situs seperti yang digambar Claude Code, kembalikan `next(e)`. Hook sering melakukan itu untuk beberapa event dan tidak untuk yang lain. Hook ini meninggalkan spinner saja sampai ada panggilan untuk dihitung:

269 

270 ```javascript theme={null}

271 on('ui.render', { component: 'Spinner' }, async ($, e, next) => {

272 // Tidak ada yang ditampilkan dulu, jadi teruskan event tanpa perubahan

273 if (calls === 0) return next(e)

274 return next({ ...e, props: { ...e.props, suffix: ' · tool calls: ' + calls + '…' } })

275 })

276 ```

277 

278 Sebelum panggilan alat pertama, spinner terlihat seperti tanpa mod:

279 

280 ```text theme={null}

281 Thinking…

282 ```

283 </Tab>

284</Tabs>

285 

286Prompt izin bukan render site, jadi mod tidak dapat mengubah apa yang ditampilkannya. Dialog pertanyaan, `AskUserQuestion`, adalah satu, jadi mod dapat mengubah itu.

287 

288Terminal dan aplikasi Desktop tidak menaikkan semua situs yang sama. `Pane`, `AbovePrompt`, `Spinner`, dan situs transkrip bekerja di keduanya. Beberapa baris status lainnya hanya diangkat di terminal. Tabel [render sites](/docs/id/plugins/mods/reference#render-sites) mencantumkan di mana masing-masing diangkat.

289 

290<h3 id="open-a-pane-at-the-right-time">

291 Buka panel pada waktu yang tepat

292</h3>

293 

294Panel hanya muncul saat mod Anda membukanya. Bagaimana dan kapan Anda membukanya menentukan apakah itu mengambil fokus keyboard, berapa banyak ruang yang dimintanya, dan apakah itu menampilkan sama sekali di terminal yang sempit.

295 

296Untuk membuka panel, panggil [`$.ui.open`](/docs/id/plugins/mods/reference#mods-api-methods) dengan `id` yang Anda pilih. `id` adalah nama panel: hook `ui.render` Anda memeriksanya, dan Anda meneruskannya lagi untuk menutup panel.

297 

298```javascript theme={null}

299await $.ui.open({ id: 'hello-tabs', title: 'Hello tabs', focus: true })

300```

301 

302Untuk menutup panel, panggil `$.ui.close` dengan `id` yang Anda buka dengannya:

303 

304```javascript theme={null}

305await $.ui.close({ id: 'hello-tabs' })

306```

307 

308Selain `id`, `$.ui.open` mengambil bidang opsional ini:

309 

310| Bidang | Apa yang dilakukannya |

311| :- | :- |

312| `title` | Label tab panel saat lebih dari satu panel terbuka |

313| `focus` | Permintaan [fokus keyboard](#know-which-keys-your-mod-can-receive) |

314| `closeOnEscape` | Membuat Esc menutup panel. Teruskan `true` atau tinggalkan bidang, karena Claude Code menolak `false`. |

315| `holdToasts` | Menahan toast, pemberitahuan kecil dari [`$.ui.toast`](/docs/id/plugins/mods/api#show-something-without-starting-a-turn), sampai panel ditutup |

316| `rows` | Tinggi untuk diminta saat panel duduk di atas prompt. Default adalah sepertiga dari ruang. |

317| `columns` | Lebar untuk diminta saat panel duduk di samping transkrip |

318 

319Untuk membiarkan perintah membuka panel saat Claude bekerja, tambahkan `immediate: true` saat Anda [mendaftarkan perintah](/docs/id/plugins/mods/api#add-a-command). Tanpanya, perintah yang diketik selama giliran menunggu giliran berakhir.

320 

321<h4 id="when-a-pane-waits-for-a-wider-terminal">

322 Ketika panel menunggu terminal yang lebih lebar

323</h4>

324 

325Panel yang dibuka mod Anda tanpa diminta tidak muncul di terminal sempit, jadi tidak dapat mengambil alih layar kecil. Apakah itu muncul tergantung pada apa yang membukanya:

326 

327* **Dibuka oleh sesuatu yang dilakukan pengguna**, seperti perintah yang mereka jalankan atau tombol yang mereka tekan, panel muncul pada lebar apa pun

328* **Dibuka oleh mod Anda bertindak sendiri**, seperti dari timer atau hook [`turn.start`](/docs/id/plugins/mods/events#follow-a-turn), panel hanya muncul di terminal setidaknya 144 kolom lebar. Setelah pengguna telah membuka panel itu sendiri sekali, 110 kolom cukup.

329 

330Ketika panel muncul, `$.ui.open` diselesaikan ke `{ isPlaced: true }`. Ketika panel menunggu, `isPlaced` adalah `false` dan `reason` adalah string yang mengatakan mengapa. Panel yang menunggu muncul saat pengguna membukanya atau memperlebar terminal. Untuk mengatakan sesuatu tersedia tanpa membuka panel, panggil `$.ui.toast('Your message')`, yang menampilkan pemberitahuan kecil yang hilang setelah beberapa detik.

331 

332<h2 id="build-a-tree-from-elements">

333 Bangun pohon dari elemen

334</h2>

335 

336Apa yang dikembalikan hook `ui.render` adalah pohon elemen: deskripsi apa yang akan digambar, terbuat dari kotak, teks, dan kontrol bersarang di dalam satu sama lain. Anda mendeskripsikan gambar, dan Claude Code merender di terminal atau aplikasi Desktop.

337 

338Untuk mendapatkan elemen, panggil `$.ui.resolve(e)` dalam hook Anda, seperti dalam `const { Box, Text, Button } = $.ui.resolve(e)`. Setiap elemen adalah fungsi. Anda meneruskan prop, dan Anda menempatkan elemen dan string yang ada di dalamnya dalam `children`.

339 

340Sebagian besar gambar menggunakan empat elemen. Pilih tab untuk melihat masing-masing dan cara terminal menggambarnya:

341 

342<Tabs>

343 <Tab title="Text">

344 `Text` menggambar string, dengan gaya opsional seperti `bold` dan `color`:

345 

346 ```javascript theme={null}

347 Text({ children: ['This is the first tab.'] })

348 ```

349 

350 ```text theme={null}

351 This is the first tab.

352 ```

353 </Tab>

354 

355 <Tab title="Box">

356 `Box` mengatur apa yang ada di dalamnya, dalam baris atau kolom. Ini menempatkan tombol dan baris teks berdampingan, dua kolom terpisah:

357 

358 ```javascript theme={null}

359 Box({

360 flexDirection: 'row',

361 columnGap: 2,

362 children: [

363 Button({ key: 'more', label: 'Add one', onPress: addOne }),

364 Text({ children: ['Count: 0'] }),

365 ],

366 })

367 ```

368 

369 ```text theme={null}

370 [ Add one ] Count: 0

371 ```

372 </Tab>

373 

374 <Tab title="Button">

375 `Button` adalah kontrol yang dapat ditekan pengguna. Ini menjalankan callback `onPress` Anda. Dengan `plain: true` tidak memiliki tanda kurung dan menampilkan pintasan keyboard:

376 

377 ```javascript theme={null}

378 Button({ key: 'more', label: 'Add one', onPress: addOne })

379 Button({ key: 'tab-one', label: 'One', hotkey: '1', plain: true, onPress: showTabOne })

380 ```

381 

382 ```text theme={null}

383 [ Add one ]

384 1: One

385 ```

386 </Tab>

387 

388 <Tab title="Input">

389 `Input` adalah bidang teks. Ini menjalankan callback `onSubmit` Anda dengan teks saat pengguna menekan Enter:

390 

391 ```javascript theme={null}

392 Input({

393 key: 'new-note',

394 label: 'Note',

395 placeholder: 'Type a note and press Enter',

396 value: '',

397 submitLabel: 'add',

398 onSubmit: addNote,

399 })

400 ```

401 

402 ```text theme={null}

403 Note: Type a note and press Enter ⏎ add

404 ```

405 </Tab>

406</Tabs>

407 

408Tabel ini mencantumkan setiap elemen:

409 

410| Elemen | Apa yang digambarnya | Di mana |

411| :- | :- | :- |

412| `Box` | Kontainer flex. Mengambil prop tata letak seperti `flexDirection`, `columnGap`, `padding`, `borderStyle`, dan `width`. | Di mana-mana |

413| `Text` | Teks bergaya. Mengambil `color`, `bold`, `dimColor`, `italic`, dan `wrap`. `color` adalah kunci tema atau warna seperti `'red'`. `wrap` adalah `'wrap'`, `'truncate'`, `'truncate-start'`, `'truncate-middle'`, atau `'truncate-end'`. | Di mana-mana |

414| `Button` | Kontrol yang memanggil `onPress` | Di mana-mana |

415| `Link`, `Code`, `Markdown` | Tautan dengan `href` dan `label` opsional, blok kode, dan teks yang diformat seperti balasan Claude. `Markdown` mengambil kontennya dalam prop `text`, bukan dalam `children`, dan membutuhkan `key` saat Anda meneruskan `onLinkPress`. | Di mana-mana |

416| `Input`, `Select` | Bidang teks dan pemilih | Terminal, Desktop |

417| `Svg` | Dokumen SVG | Desktop |

418| `Client` | Wilayah yang digambar oleh file kedua Anda, untuk animasi dan input pointer. File itu tidak mendapat API mods. Itu mencapai hook Anda hanya dengan memposting data, yang tiba sebagai event `ui.message`. | Terminal, Desktop |

419| `Raster`, `Image` | [Grid sel berwarna](#draw-a-grid-of-colored-cells), dan gambar | Terminal |

420 

421Jika modul Anda adalah file `.tsx` atau `.jsx`, Anda dapat menulis pohon sebagai JSX. Dekonstruksi elemen dari `$.ui.resolve(e)` terlebih dahulu, karena modul hooks tidak memiliki global elemen.

422 

423Jika 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.

424 

425Dalam 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](/docs/id/plugins/mods/troubleshoot#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.

426 

427<h3 id="draw-a-grid-of-colored-cells">

428 Gambar grid sel berwarna

429</h3>

430 

431Untuk peta panas, sparkline, atau papan permainan di terminal, gambar satu `Raster` dan bukan `Box` untuk setiap sel. `Raster` mengambil `key`, ukurannya dalam `columns` dan `rows`, dan `cells`, yang mengemas setiap sel menjadi satu string. Setiap sel adalah tiga angka: titik kode karakter, warnanya, dan warna latar belakangnya. Warna adalah angka heksadesimal dengan dua digit masing-masing untuk merah, hijau, dan biru, seperti `0xc62828` untuk merah, atau `0x01000000` untuk default terminal.

432 

433Aplikasi Desktop tidak memiliki `Raster`, jadi periksa `e.surface` dan gambar teks di sana. Badan panel ini menggambar peta panas tiga kali dua:

434 

435```javascript theme={null}

436// Nilai yang berarti "gunakan warna default terminal"

437const DEFAULT_COLOR = 0x01000000

438 

439// Kemasan baris pasangan [karakter, warna] ke dalam satu string yang diambil Raster

440// Satu sel adalah tiga angka: titik kode karakter, warnanya, dan warna latar belakangnya

441function cellsOf(rows) {

442 const numbers = rows.flat().flatMap(([char, color]) => [char.codePointAt(0), color, DEFAULT_COLOR])

443 return new Uint8Array(Uint32Array.from(numbers).buffer).toBase64()

444}

445 

446on('ui.render', { component: 'Pane' }, async ($, e, next) => {

447 // Gambar hanya di panel yang dibuka dengan id 'heat'

448 if (e.requestId !== 'heat') return next(e)

449 const { Box, Text, Raster } = $.ui.resolve(e)

450 // Dua baris tiga sel, masing-masing karakter blok dan warnanya

451 const rows = [

452 [['█', 0x2e7d32], ['█', 0xf9a825], ['█', 0xc62828]],

453 [['█', 0x2e7d32], ['█', 0x2e7d32], ['█', 0xf9a825]],

454 ]

455 if (e.surface !== 'terminal') {

456 return Text({ children: ['The heat map needs the terminal.'] })

457 }

458 return Box({

459 flexDirection: 'column',

460 children: [Raster({ key: 'grid', columns: 3, rows: 2, cells: cellsOf(rows) })],

461 })

462})

463```

464 

465Di terminal, panel menampilkan grid:

466 

467<img src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-heat-map.svg?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=b91bcce3bad74bc851149133d4acc5d5" alt="Panel di terminal yang menyimpan grid kecil blok berwarna, dua baris tiga. Baris atas adalah hijau, amber, dan merah. Baris bawah adalah hijau, hijau, dan amber." width="360" height="132" data-path="images/mods-heat-map.svg" />

468 

469Array `rows` adalah bagian yang akan Anda ubah, dan `cellsOf` mengubahnya menjadi string yang dikemas. Hook menggambar hanya di panel yang `id`-nya adalah `heat`, jadi buka satu dengan `$.ui.open({ id: 'heat' })` dari perintah, seperti contoh [`hello-tabs`](#build-a-pane-with-tabs) membuka panelnya.

470 

471Setiap karakter harus lebar satu sel. Untuk menganimasikan `Raster` yang sudah di layar, panggil `$.ui.blit` dengan `id` panel sebagai `requestId`, `key` `Raster`, ukuran yang sama, dan sel baru. Untuk contoh ini, itu adalah `$.ui.blit({ requestId: 'heat', key: 'grid', columns: 3, rows: 2, cells: cellsOf(newRows) })`. Itu melukis ulang elemen itu saja tanpa menjalankan hook `ui.render` Anda lagi.

472 

473<h2 id="respond-to-presses-and-typing">

474 Merespons penekanan dan pengetikan

475</h2>

476 

477Ketika pengguna menekan tombol, mengetik ke bidang, atau memilih dari daftar yang digambar mod Anda, Claude Code memanggil fungsi yang Anda berikan kontrol itu, dan itu berjalan dalam modul Anda. Setiap kontrol mengambil callback-nya sendiri:

478 

479* **`Button`**: mengambil `onPress(e)`, di mana `e.surface` adalah aplikasi tempat penekanan berasal

480* **`Input`**: mengambil `onSubmit(value)` dan `onInput(value)`

481* **`Select`**: mengambil `onSelect(value)` dengan pilihan dalam `options`, daftar setidaknya satu pilihan dengan nilai unik, seperti `[{ value: 'sm', label: 'Small' }, { value: 'lg', label: 'Large' }]`

482 

483Tes menekan atau mengetik ke kontrol dengan `key`-nya, jadi berikan masing-masing satu. Setiap penggunaan kontrol juga menembakkan [`ui.press`, `ui.input`, atau `ui.select`](/docs/id/plugins/mods/reference#interface) dengan `key` dalam `e.element`, dan mod lain dapat menghubungkan event tersebut. Hook-nya berjalan sebelum callback Anda, jadi itu melihat apa yang pengguna ketik ke `Input` Anda dan dapat mengubahnya atau menjawab sebagai pengganti callback Anda. API mods tidak memiliki metode yang menekan tombol mod lain.

484 

485<h3 id="know-which-keys-your-mod-can-receive">

486 Fokus keyboard dan pintasan keyboard

487</h3>

488 

489Mod Anda tidak pernah membaca keyboard itu sendiri. Pengguna menekan kunci, Claude Code memutuskan kontrol mana yang dimaksudkan, dan callback kontrol itu berjalan. Terlepas dari [pintasan keyboard digit di pita](/docs/id/plugins/mods/reference#elements), itu hanya terjadi saat panel atau pita Anda memiliki fokus keyboard. Sisa waktu, kunci pergi ke prompt.

490 

491<h4 id="how-a-pane-gets-keyboard-focus">

492 Bagaimana panel mendapat fokus keyboard

493</h4>

494 

495Panel mendapat fokus keyboard dalam salah satu dari tiga cara:

496 

497* Mod Anda membukanya dengan `focus: true` dari perintah atau penekanan

498* Pengguna menekan Ctrl+X kemudian Tab

499* Pengguna mengkliknya

500 

501Claude Code memberikan `focus: true` hanya saat prompt kosong dan tidak ada yang lain memiliki fokus keyboard. Panel yang terbuka saat pengguna mengetik tidak mengambil keystroke mereka.

502 

503<h4 id="what-each-key-does">

504 Apa yang dilakukan setiap kunci

505</h4>

506 

507Tabel ini mencantumkan apa yang dilakukan kunci saat panel atau pita Anda memiliki fokus keyboard:

508 

509| Kunci | Apa yang dilakukannya |

510| :- | :- |

511| Tab | Bergerak ke kontrol berikutnya |

512| Atas dan Bawah | Bergerak antar kontrol saat gambar Anda pas. Ketika panel atau pita memiliki lebih banyak baris daripada yang dapat ditampilkan, mereka menggulirnya. |

513| Enter | Menekan `Button` yang fokus, mengirimkan `Input` yang fokus, atau memilih di `Select` |

514| Pintasan keyboard tombol | Menekan tombol itu. Saat `Input` memiliki fokus, setiap kunci yang dapat dicetak pergi ke bidang. |

515| Esc | Mengembalikan fokus keyboard ke prompt. Dengan `closeOnEscape: true`, itu juga menutup panel. |

516 

517Mod tidak dapat mengikat Tab atau tombol panah ke apa pun yang lain, jadi permainan mengarahkan dengan `w`, `a`, `s`, dan `d`.

518 

519<h4 id="set-a-hotkey-and-the-first-focus">

520 Atur pintasan keyboard dan fokus pertama

521</h4>

522 

523Dua prop pada kontrol memutuskan bagaimana keyboard mencapainya:

524 

525* **`hotkey`**: untuk membiarkan pengguna menekan `Button` dengan satu kunci, berikan `hotkey` dari satu digit atau satu huruf kecil, seperti dalam `hotkey: 'a'`

526* **`autoFocus`**: untuk memilih kontrol mana yang memiliki fokus saat panel terbuka, tambahkan `autoFocus: true` ke dalamnya. Tinggalkan prop dari yang lain, karena Claude Code menolak `autoFocus: false`.

527 

528Bagaimana pintasan keyboard ditampilkan tergantung pada tombol dan aplikasi:

529 

530| Tombol | Di terminal | Di aplikasi Desktop |

531| :- | :- | :- |

532| Dengan tanda kurung, default | `[ Add one ]`, tanpa pintasan keyboard ditampilkan | Label dengan kunci kecil di sebelahnya |

533| Dengan `plain: true` | `1: One` | Label dengan kunci kecil di sebelahnya |

534 

535Di terminal, beri nama kunci dalam label tombol berbingkai, atau gunakan `plain: true`, sehingga pengguna dapat melihat apa yang harus ditekan. [Referensi elemen](/docs/id/plugins/mods/reference#elements) memiliki aturan `Button` lainnya: `action`, pintasan keyboard digit di pita, dan dua tombol pada satu pintasan keyboard.

536 

537<h3 id="take-typed-input-and-draw-a-row-for-each-item">

538 Ambil input yang diketik dan gambar baris untuk setiap item

539</h3>

540 

541Banyak panel adalah bidang teks dengan daftar di bawahnya. Contoh di bagian ini adalah panel catatan: Anda mengetik catatan dan menekan Enter untuk menambahkannya, dan setiap catatan memiliki tombol `x` yang menghapusnya. Dengan dua catatan ditambahkan, terminal menggambar panel dengan cara ini:

542 

543```text theme={null}

544╭──────────────────────────────────────────────────────────╮

545│ Note: Type a note and press Enter ⏎ add ✕ │

546│ x buy milk │

547│ x call bob │

548╰──────────────────────────────────────────────────────────╯

549```

550 

551Contoh menggunakan dua teknik:

552 

553* **Ambil input yang diketik**: `Input` memanggil `onSubmit(value)` dengan teks bidang saat pengguna menekan Enter, dan `onInput(value)` pada setiap perubahan

554* **Gambar daftar**: petakan data Anda ke satu baris masing-masing, dan berikan setiap tombol baris `key`-nya sendiri

555 

556Hook ini menggambar konten panel:

557 

558```javascript theme={null}

559// Daftar yang digambar panel

560let notes = []

561 

562on('ui.render', { component: 'Pane' }, async ($, e, next) => {

563 // Gambar hanya di panel yang dibuka dengan id 'notes'

564 if (e.requestId !== 'notes') return next(e)

565 const { Box, Text, Button, Input } = $.ui.resolve(e)

566 const redraw = () => $.ui.invalidate('ui.render')

567 

568 return Box({

569 flexDirection: 'column',

570 children: [

571 Input({

572 key: 'new-note',

573 label: 'Note',

574 placeholder: 'Type a note and press Enter',

575 // Gambar bidang kosong setiap kali, yang menghapusnya setelah submit

576 value: '',

577 submitLabel: 'add',

578 autoFocus: true,

579 // Berjalan saat Anda menekan Enter di bidang

580 onSubmit: async (value) => {

581 // Abaikan baris kosong

582 if (!value.trim()) return

583 notes = [...notes, value.trim()]

584 redraw()

585 await $.store.set('notes', notes)

586 },

587 }),

588 // Satu baris untuk setiap catatan: tombol hapus, kemudian teks catatan

589 ...notes.map((note, i) =>

590 Box({

591 flexDirection: 'row',

592 columnGap: 1,

593 children: [

594 Button({

595 // Kunci miliknya sendiri, jadi setiap tombol baris dapat dibedakan

596 key: 'delete-' + i,

597 label: 'x',

598 plain: true,

599 onPress: async () => {

600 notes = notes.filter((_, j) => j !== i)

601 redraw()

602 await $.store.set('notes', notes)

603 },

604 }),

605 Text({ children: [note] }),

606 ],

607 }),

608 ),

609 ],

610 })

611})

612```

613 

614Untuk mencoba panel:

615 

616* **Tambahkan catatan**: ketik baris dan tekan Enter. Baris muncul sebagai baris baru, dan bidang kosong.

617* **Hapus catatan**: tekan Tab sampai tombol `x` catatan memiliki fokus, kemudian tekan Enter. `x` adalah label tombol dan bukan pintasan keyboard, jadi mengetik huruf tidak menekan itu.

618 

619Setiap perubahan mengikuti siklus render yang sama seperti `hello-tabs`: callback mengubah `notes`, memanggil `redraw`, dan menyimpan daftar ke `$.store`.

620 

621Bidang kosong setelah setiap submit karena prop `value`-nya. `value` adalah teks yang dipegang bidang saat digambar, dan pengetikan pengguna menggantinya sampai hook Anda menggambar bidang lagi. Contoh selalu menggambar bidang dengan `''`.

622 

623Contoh menyimpan catatan dan tidak memuatnya. Untuk membawanya kembali di sesi berikutnya, bacalah dalam hook `session.start`, cara `hello-tabs` membaca `count`.

624 

625Tiga prop membuat baris bidang, `Note: Type a note and press Enter ⏎ add`:

626 

627| Prop | Dalam contoh | Apa itu |

628| :- | :- | :- |

629| `label` | `Note` | Teks sebelum bidang. Terminal menggambar `: ` setelahnya. |

630| `placeholder` | `Type a note and press Enter` | Teks redup yang ditampilkan saat bidang kosong |

631| `submitLabel` | `add` | Kata setelah `⏎` yang mengatakan apa yang dilakukan Enter |

632 

633Mengirimkan `Input` tidak memulai giliran kecuali callback Anda memanggil [`$.prompt.submit`](/docs/id/plugins/mods/api#start-a-turn-from-a-background-job).

634 

635<h2 id="redraw-when-something-changes">

636 Gambar ulang situs

637</h2>

638 

639Gambar adalah snapshot: itu menunjukkan apa yang dikembalikan hook `ui.render` Anda terakhir kali hook berjalan. Untuk menampilkan sesuatu yang baru, hook harus berjalan lagi. Claude Code menjalankannya lagi untuk beberapa perubahan, dan mod Anda meminta sisanya.

640 

641<h3 id="when-claude-code-redraws-without-being-asked">

642 Ketika Claude Code menggambar ulang tanpa diminta

643</h3>

644 

645Claude Code menjalankan hook `ui.render` Anda lagi ketika prop situs berubah atau lebar terminal berubah. Itu tidak menjalankan hook pada timer, dan itu tidak dapat mengatakan ketika variabel dalam modul Anda berubah.

646 

647<h3 id="redraw-when-your-data-changes">

648 Gambar ulang saat data Anda berubah

649</h3>

650 

651Untuk memiliki situs Anda digambar lagi setelah data Anda sendiri berubah, panggil `$.ui.invalidate('ui.render')`. Panel ini menghitung penekanan. Callback tombol mengubah `count`, kemudian meminta redraw:

652 

653```javascript theme={null}

654let count = 0

655 

656on('ui.render', { component: 'Pane' }, async ($, e, next) => {

657 if (e.requestId !== 'counter') return next(e)

658 const { Box, Text, Button } = $.ui.resolve(e)

659 return Box({

660 flexDirection: 'row',

661 columnGap: 2,

662 children: [

663 Button({

664 key: 'more',

665 label: 'Add one',

666 onPress: () => {

667 count += 1

668 // Data berubah, jadi minta Claude Code menggambar panel lagi

669 $.ui.invalidate('ui.render')

670 },

671 }),

672 Text({ children: ['Count: ' + count] }),

673 ],

674 })

675})

676```

677 

678Setiap penekanan menaikkan angka di panel. Contoh [`hello-tabs`](#build-a-pane-with-tabs) membungkus panggilan yang sama dalam fungsi `redraw`-nya.

679 

680Nilai yang Anda simpan dalam [`$.state`](#keep-a-value-in-\$-state) tidak memerlukan panggilan, karena menulis nilai menggambar ulang situs yang membacanya.

681 

682<h3 id="redraw-on-a-timer">

683 Gambar ulang pada timer

684</h3>

685 

686Untuk menjaga jam, hitung mundur, atau nilai dari luar sesi saat ini, gambar ulang sesuai jadwal. Mulai timer dalam hook `session.start` modul. Jika modul sudah memiliki satu, seperti `hello-tabs`, tambahkan baris [`$.clock.every`](/docs/id/plugins/mods/api#run-work-in-the-background) ke dalamnya:

687 

688```javascript theme={null}

689on('session.start', async ($, e, next) => {

690 // Setiap 1000 milidetik, minta Claude Code menggambar situs Anda lagi

691 $.clock.every(1000, () => $.ui.invalidate('ui.render'))

692 return next(e)

693})

694```

695 

696Claude Code sekarang menjalankan hook `ui.render` Anda sekali per detik. Timer berhenti saat modul dimuat ulang, dan salinan baru modul memulai miliknya sendiri.

697 

698<h3 id="how-often-a-site-can-redraw">

699 Seberapa sering situs dapat digambar ulang

700</h3>

701 

702Claude Code membatasi seberapa sering itu menggambar ulang situs, jadi mod Anda dapat memanggil `$.ui.invalidate` sesering data berubah. Panel yang terlihat dan pita memiliki batas yang lebih tinggi daripada situs lainnya, dan [tabel batas](/docs/id/plugins/mods/reference#limits) memiliki angkanya.

703 

704Panggilan yang datang lebih cepat dari batas digabungkan menjadi satu redraw. Redraw itu menjalankan hook Anda sekali, dan hook membaca data Anda seperti adanya saat itu, jadi nilai terbaru ditampilkan dan nilai di antaranya tidak. Animasi tidak dapat berjalan lebih cepat dari batas.

705 

706<h2 id="keep-state">

707 Jaga status

708</h2>

709 

710Mod memiliki tiga tempat untuk menyimpan nilai, dan mereka berbeda dalam berapa lama nilai bertahan: sampai modul dimuat ulang, sampai sesi berakhir, atau dari satu sesi ke sesi berikutnya. Pilih berdasarkan berapa lama nilai harus bertahan:

711 

712| Simpan di | Bertahan sampai | Gunakan untuk |

713| :- | :- | :- |

714| Variabel tingkat modul | Modul dimuat ulang, yang terjadi setiap kali Anda menyimpan file selama pengembangan | Nilai yang dapat Anda hilangkan, seperti `tab` dalam `hello-tabs` |

715| `$.state` | Sesi berakhir, atau pengguna menjalankan `/clear`, `/resume`, atau `/branch` | Nilai yang gambar bergantung pada yang harus bertahan reload |

716| `$.store` | Mod Anda menghapusnya, atau tidak ada sesi yang membaca atau menulis penyimpanan selama [`cleanupPeriodDays`](/docs/id/settings-reference#cleanupperioddays). Penyimpanan adalah penyimpanan kunci-nilai, disimpan sebagai file JSON milik plugin Anda sendiri di bawah `~/.claude/plugins/store/`. | Pengaturan, riwayat, apa pun yang diharapkan pengguna untuk ditemukan lagi |

717 

718`$.store.get(key)` diselesaikan ke nilai atau `undefined`, dan `$.store.set(key, value)` mengambil nilai JSON apa pun.

719 

720<h3 id="keep-a-value-in-state">

721 Simpan nilai dalam `$.state`

722</h3>

723 

724`$.state` menyimpan nilai untuk panjang sesi, dan itu menggambar ulang untuk Anda. Ini adalah status reaktif: hook `ui.render` yang membaca nilai berlangganan ke dalamnya, jadi Claude Code menggambar ulang situs itu setiap kali Anda menulis nilai, dan Anda tidak memanggil `$.ui.invalidate`. Nilai dalam `$.state` juga bertahan reload modul, yang variabel tidak.

725 

726Untuk mengaturnya, deklarasikan nilai Anda, arahkan manifest Anda ke deklarasi, kemudian tentukan dan gunakan setiap nilai. Contoh memindahkan `count` dari `hello-tabs` ke dalam `$.state`.

727 

728<h4 id="declare-the-values">

729 Deklarasikan nilai

730</h4>

731 

732Deklarasikan nilai dalam file tipe. Kunci luar adalah nama plugin Anda, dan setiap entri di bawahnya adalah nilai dan tipenya. Simpan ini sebagai `hello-tabs/types/index.d.ts`:

733 

734```typescript hello-tabs/types/index.d.ts theme={null}

735declare module 'claude-code' {

736 interface PluginState {

737 'hello-tabs': {

738 tab: 'one' | 'two'

739 count: number

740 }

741 }

742}

743```

744 

745<h4 id="point-the-manifest-at-the-declaration">

746 Arahkan manifest ke deklarasi

747</h4>

748 

749Untuk membiarkan `claude plugin validate` memeriksa kode Anda terhadap file itu, tambahkan bidang `types` ke manifest dengan jalurnya:

750 

751```json hello-tabs/.claude-plugin/plugin.json theme={null}

752{

753 "name": "hello-tabs",

754 "version": "0.1.0",

755 "description": "Opens a pane with two tabs and a counter",

756 "author": { "name": "Your Name" },

757 "types": "./types/index.d.ts"

758}

759```

760 

761<h4 id="define-read-and-write-a-value">

762 Tentukan, baca, dan tulis nilai

763</h4>

764 

765Dalam modul Anda, tentukan setiap nilai dengan default, bacalah saat menggambar, dan tulislah dari callback. `atom` menamai nilai dan defaultnya, `read` mengembalikannya, dan `update` menulisnya. Tiga pembantu memanggil `$.state.get` dan `$.state.set` untuk Anda:

766 

767```javascript theme={null}

768import { atom, read, update } from 'claude-code'

769 

770// Di atas modul: beri nama nilai dan berikan defaultnya

771const count = atom({ plugin: 'hello-tabs', key: 'count' }, 0)

772 

773// Dalam hook ui.render: baca nilai untuk menggambarnya

774const n = await read($, count)

775 

776// Dalam Tombol: tulis nilai baru dari yang lama

777onPress: () => update($, count, (value) => value + 1)

778```

779 

780Karena hook `ui.render` membaca `count`, Claude Code menjalankan hook lagi setiap kali tombol menulisnya.

781 

782Tiga aturan berlaku untuk kode:

783 

784* **Tulis `plugin` dan `key` sebagai string literal**: `claude plugin validate` membacanya dari sumber Anda

785* **Deklarasikan setiap nilai dalam file tipe**: jika tidak, validasi gagal dengan `hello-tabs.count is not declared`

786* **Tulis dari callback atau hook event lain**: hook `ui.render` dapat membaca status dan tidak dapat menulisnya, jadi tulis dari `onPress`, `onSubmit`, atau hook untuk event lain

787 

788<h4 id="change-hello-tabs-to-use-state">

789 Ubah `hello-tabs` untuk menggunakan `$.state`

790</h4>

791 

792Untuk memindahkan `count` dalam `hello-tabs` ke dalam `$.state`, ubah setiap baris yang menggunakannya:

793 

794* **Di atas modul**: tambahkan baris `import`, dan ganti `let count = 0` dengan baris `atom`

795* **Dalam hook `ui.render`**: tambahkan baris `read` sebelum `tabButton`, dan gambar `'Count: ' + n` dalam `Text`

796* **Dalam tombol Add one**: ganti `onPress` dengan yang dalam [Simpan dari lebih dari satu sesi](#save-from-more-than-one-session), yang menyimpan hitungan serta menulisnya

797* **Dalam hook `session.start`**: ganti dua baris yang membaca `saved` dengan panggilan `loadCount` dari [Muat nilai yang disimpan lagi setelah `/clear`](#load-a-saved-value-again-after-clear)

798 

799Simpan `redraw` untuk tombol tab, karena `tab` masih variabel.

800 

801<h3 id="load-a-saved-value-again-after-clear">

802 Muat nilai yang disimpan lagi setelah `/clear`

803</h3>

804 

805Jika mod Anda menyalin nilai yang disimpan dari `$.store` ke dalam `$.state` pada `session.start`, itu harus menyalinnya lagi setelah `/clear`, `/resume`, atau `/branch`. Perintah tersebut mengembalikan setiap nilai `$.state` ke defaultnya, dan `session.start` tidak dipecat lagi. [`classic.SessionStart`](/docs/id/plugins/mods/events#hook-the-settings-hook-events) dipecat setelah masing-masing, dengan `e.source` diatur ke `clear`, `resume`, atau `fork`, jadi salin nilai lagi dalam hook di atasnya. Jika tidak, gambar Anda menampilkan default, dan callback yang menyimpan nilai `$.state` menulis default di atas apa yang Anda simpan.

806 

807Kode ini memuat `count` dari kedua hook. Itu dibangun di atas versi `$.state` dari `hello-tabs`, di mana `count` adalah atom dan `update` diimpor. Letakkan `loadCount` di atas `register`, dan tambahkan panggilan `loadCount` ke hook `session.start` yang sudah Anda miliki. `classic.SessionStart` juga dipecat saat startup dan setelah pemadatan, yang tidak mengatur ulang `$.state`, jadi filter pada `source` menjaga hook ke tiga reset:

808 

809```javascript theme={null}

810// Salin hitungan yang disimpan dari $.store ke dalam $.state, atau 0 jika tidak ada yang disimpan

811async function loadCount($) {

812 const saved = Number((await $.store.get('count')) ?? 0)

813 await update($, count, () => saved)

814}

815 

816// Berjalan sebelum prompt pertama Anda, dan lagi setelah reload

817on('session.start', async ($, e, next) => {

818 await loadCount($)

819 return next(e)

820})

821 

822// Berjalan lagi setelah /clear, /resume, dan /branch, yang melaporkan fork

823on('classic.SessionStart', { source: ['clear', 'resume', 'fork'] }, async ($, e, next) => {

824 await loadCount($)

825 return next(e)

826})

827```

828 

829Dengan kedua hook di tempat, panel menampilkan hitungan yang disimpan setelah `/clear` dan bukan `0`, dan penekanan berikutnya dari **Add one** menambah ke hitungan yang disimpan.

830 

831`loadCount` menulis nilai yang disimpan di atas yang ada dalam `$.state`, dan `session.start` dipecat lagi setiap kali modul dimuat ulang. Untuk menjaga penyimpanan agar tidak tertinggal, simpan pada setiap perubahan, seperti yang dilakukan tombol **Add one**.

832 

833Untuk memeriksa reload tanpa sesi, [uji gambar setelah `/clear`](/docs/id/plugins/mods/test#test-a-drawing-after-clear).

834 

835<h3 id="save-from-more-than-one-session">

836 Simpan dari lebih dari satu sesi

837</h3>

838 

839Setiap sesi di mesin Anda yang menjalankan mod Anda berbagi satu `$.store`. `get` diikuti oleh `set` bukan atomik. Ketika dua sesi masing-masing membaca nilai, mengubahnya, dan menulisnya kembali, mereka bersaing, dan penulisan kedua menggantikan yang pertama.

840 

841Dua pilihan membuat itu kurang mungkin:

842 

843* **Berikan setiap item kuncinya sendiri**: `set` mengubah hanya kuncinya sendiri, jadi sesi yang menulis kunci berbeda tidak menimpa satu sama lain

844* **Baca lagi tepat sebelum Anda menulis**: untuk nilai yang beberapa sesi ubah, `get` kunci dalam callback dan bangun nilai baru dari itu, bukan dari salinan yang Anda muat pada `session.start`. Penulisan sesi lain masih hilang jika mendarat antara `get` dan `set` Anda.

845 

846Tombol ini menambahkan satu ke apa pun yang disimpan sekarang, kemudian memperbarui gambar:

847 

848```javascript theme={null}

849onPress: async () => {

850 // Baca apa yang disimpan sekarang, yang sesi lain mungkin telah ubah

851 const saved = Number((await $.store.get('count')) ?? 0)

852 // Simpan hitungan baru, kemudian tampilkan

853 await $.store.set('count', saved + 1)

854 await update($, count, () => saved + 1)

855}

856```

857 

858Jika sesi kedua telah menekan tombolnya sendiri tiga kali sejak sesi ini dimulai, penekanan ini menampilkan dan menyimpan hitungan yang mencakup ketiga itu.

859 

860<h2 id="next-steps">

861 Langkah berikutnya

862</h2>

863 

864* [Bereaksi terhadap event](/docs/id/plugins/mods/events): umpan gambar Anda dari panggilan alat dan giliran

865* [Gunakan API mods](/docs/id/plugins/mods/api): umpan gambar Anda dari timer dan panggilan model

866* [Uji gambar](/docs/id/plugins/mods/test#test-a-drawing): tekan tombol Anda dari tes, di lebih dari satu permukaan

867* [Render sites](/docs/id/plugins/mods/reference#render-sites) dan [elemen](/docs/id/plugins/mods/reference#elements): prop setiap situs dan prop setiap elemen

plugins/mods/overview.md +269 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Ikhtisar Mods

6 

7> Tambahkan pane, perintah, dan aturan pemanggilan alat ke Claude Code dengan mod. Lihat apa yang dapat dilakukan mod, cara membuat atau memasang mod, dan tempat mod berjalan.

8 

9Mod adalah [plugin](/docs/id/plugins/overview) yang mengubah tampilan dan perilaku Claude Code. Mod terdiri dari penanganan peristiwa JavaScript atau TypeScript: Claude Code memanggil satu ketika peristiwa terjadi, seperti pemanggilan alat, prompt yang dikirimkan, atau bagian dari antarmuka yang digambar, dan penanganan dapat memantau peristiwa, mengubahnya, atau mengambil alih. Gunakan mod untuk menambahkan fitur Anda sendiri ke Claude Code, seperti pane yang membuat bagan seberapa penuh konteks Anda setelah setiap permintaan. Untuk file dalam mod dan contoh lengkap, lihat [Cara kerja mod](#how-a-mod-works).

10 

11<Note>

12 [hooks](/docs/id/hooks) yang sudah ada di Claude Code juga berjalan pada peristiwa, sebagai perintah shell, permintaan HTTP, atau prompt yang Anda konfigurasi dalam file pengaturan. Penanganan mod adalah fungsi yang berjalan di dalam Claude Code sebagai gantinya. Claude Code memanggil kedua jenis hooks: di halaman ini, "hook" berarti penanganan mod, dan jenis file pengaturan adalah "settings hook".

13</Note>

14 

15<h2 id="what-a-mod-can-do">

16 Apa yang dapat dilakukan mod

17</h2>

18 

19Settings hooks, skills, status lines, dan server MCP bekerja dari luar Claude Code: masing-masing menjalankan skrip, atau memberikan Claude teks atau alat. Mod berjalan di dalam Claude Code, jadi dapat melakukan hal-hal yang tidak dapat dilakukan oleh yang lain:

20 

21* **Gambar antarmuka yang dapat Anda gunakan**: pane di samping transkrip atau band di atas prompt, dengan tab, tombol, dan bidang teks. Lihat [Gambar di antarmuka](/docs/id/plugins/mods/interface).

22* **Gambar ulang antarmuka Claude Code sendiri**: ganti atau ubah gaya bagian yang digambar Claude Code sendiri, seperti baris pemanggilan alat, spinner, atau dialog yang Claude tanyakan. Lihat [Ubah apa yang sudah digambar Claude Code](/docs/id/plugins/mods/interface#change-what-claude-code-already-draws).

23* **Masuki pemanggilan alat atau permintaan**: misalnya, tahan pemanggilan alat saat Anda mengajukan pertanyaan kepada pengguna, jawab tanpa menjalankan alat, atau kirim satu permintaan ke model yang berbeda. Lihat [Lindungi atau ubah pemanggilan alat](/docs/id/plugins/mods/events#guard-or-change-a-tool-call) dan [Ikuti giliran](/docs/id/plugins/mods/events#follow-a-turn).

24* **Jalankan kode Anda sendiri pada perintah**: `/command` yang menjalankan fungsi Anda sekaligus, tanpa giliran Claude, bahkan saat Claude sedang bekerja. Lihat [Tambahkan perintah atau alat](/docs/id/plugins/mods/api#add-a-command-or-a-tool).

25* **Bagikan data antar hooks**: hooks mod berbagi variabel dalam file-nya, jadi apa yang dicatat satu hook, hook lain dapat menampilkannya. Misalnya, satu hook dapat menghitung pemanggilan alat sementara hook lain menampilkan hitungan di samping spinner, atau satu dapat membaca penggunaan token setiap permintaan sementara hook lain membuat bagan di pane. Lihat [Bereaksi terhadap acara](/docs/id/plugins/mods/events).

26 

27Mods bekerja di CLI Claude Code dan di tab Code aplikasi Desktop Claude. Lihat [Tempat mod berjalan](#where-mods-run) untuk memahami cara mereka berperilaku di tempat lain, seperti di ekstensi VS Code, `claude -p`, dan sesi cloud. Jika settings hook, skill, atau server MCP sudah melakukan apa yang Anda butuhkan, [bandingkan mereka](#compare-mods-settings-hooks-skills-and-mcp-servers) sebelum Anda menulis mod. Untuk mengelola mods untuk organisasi, lihat [Kelola mods untuk organisasi Anda](/docs/id/plugins/mods/admin).

28 

29<h2 id="get-a-mod">

30 Dapatkan mod

31</h2>

32 

33Anda dapat memulai dengan mod dengan salah satu dari tiga cara:

34 

35* **Gunakan yang sudah Anda miliki**: beberapa fitur Claude Code sendiri adalah mods, seperti `/diff`. Lihat [Mods bawaan Claude Code](#mods-built-into-claude-code).

36* **Buat satu**: jelaskan apa yang Anda inginkan dalam sesi Claude Code, dan Claude menulis mod. Lihat [Minta Claude untuk mod](/docs/id/plugins/mods/create#ask-claude-for-a-mod). Untuk mempelajari cara kerja kode mod, [tulis satu sendiri](/docs/id/plugins/mods/create#write-a-mod-yourself).

37* **Pasang satu**: lihat [Pasang atau perbarui mod](#install-or-update-a-mod)

38 

39<h3 id="install-or-update-a-mod">

40 Pasang atau perbarui mod

41</h3>

42 

43<Warning>

44 Mod adalah kode yang berjalan dengan izin Anda. Dapat membaca dan menulis file Anda, memulai proses, dan membuat permintaan jaringan. Pasang mods hanya dari penulis dan marketplace yang Anda percayai. Lihat [Putuskan apakah akan mempercayai mod](#decide-whether-to-trust-a-mod).

45</Warning>

46 

47Mod dipasang sebagai plugin, dari marketplace. Berikan nama plugin, `@`, dan nama marketplace. Contoh-contoh ini memasang plugin bernama `token-chart` dari marketplace bernama `your-org`:

48 

49* Dalam sesi Claude Code, jalankan `/plugin install token-chart@your-org`.

50* Di shell Anda, jalankan `claude plugin install token-chart@your-org`.

51 

52[Pasang plugins](/docs/id/plugins/install) mencakup marketplaces, scopes, ekstensi VS Code dan aplikasi Desktop, dan [menjaga plugins tetap terbaru](/docs/id/plugins/install#keep-plugins-updated), semuanya berlaku untuk plugin yang berisi mod tanpa perubahan.

53 

54Jika Anda memasang atau memperbarui mod dari shell Anda saat sesi terbuka, jalankan `/reload-plugins` dalam sesi itu untuk memuatnya. Jika tidak, mod akan dimuat saat Anda memulai Claude Code berikutnya.

55 

56<h2 id="decide-whether-to-trust-a-mod">

57 Putuskan apakah akan mempercayai mod

58</h2>

59 

60Mod adalah kode yang berjalan dengan izin Anda, di dalam Claude Code. Pasang mods hanya dari penulis dan [marketplaces yang Anda percayai](/docs/id/plugins/security).

61 

62<h3 id="what-a-mod-can-reach">

63 Apa yang dapat dijangkau mod

64</h3>

65 

66Mod berjalan dengan izin Anda, jadi sebelum Anda memasang satu, ketahui apa yang dapat diaksesnya. Setelah dimuat, mod dapat:

67 

68* **Bertindak di mesin Anda sebagai Anda**: membaca dan menulis file di mana pun akun pengguna Anda dapat, memulai program, dan membuat permintaan jaringan

69* **Baca rahasia Anda**: variabel lingkungan dan file pengaturan, termasuk kunci API yang Anda simpan di salah satu

70* **Lihat sesi Anda**: setiap prompt yang Anda kirim dan setiap pemanggilan alat yang dibuat Claude

71* **Ubah sesi Anda**: tulis ulang prompt atau pemanggilan alat, kirimkan prompt seolah-olah Anda telah mengetiknya, atau kirim pesan ke sesi lain Anda

72* **Bertindak tanpa meminta Anda**: setujui pemanggilan alat sebelum Anda diminta

73* **Habiskan penggunaan Anda**: panggil model pada paket atau kunci API Anda

74 

75Mod yang menyetujui pemanggilan alat dapat menyetujui yang akan diminta oleh aturan `ask`, atau yang diblokir oleh hooks `PreToolUse` Anda sendiri. [Perluas izin dengan hooks](/docs/id/permissions#extend-permissions-with-hooks) mencantumkan apa yang dapat disetujui mod seperti itu, termasuk kapan dapat menyetujui panggilan yang ditolak aturan `deny`.

76 

77Mod dapat mengubah gaya banyak antarmuka Claude Code, tetapi bukan prompt izin. Tidak dapat mengubah apa yang ditampilkan prompt kepada Anda.

78 

79<h3 id="list-what-a-mod-does-before-you-install-one">

80 Daftar apa yang dilakukan mod sebelum Anda memasangnya

81</h3>

82 

83Sebelum Anda memasang mod, Anda dapat membuat daftar acara mana yang dikaitkan dan apa yang dimintanya kepada Claude Code untuk dilakukan, seperti membaca file atau membuat permintaan jaringan, tanpa menjalankannya. Dapatkan file plugin terlebih dahulu, misalnya dengan mengkloning repositorinya. Kemudian, di shell Anda, jalankan `claude plugin validate` di direktori plugin:

84 

85```bash theme={null}

86claude plugin validate ./some-mod

87```

88 

89Baris `hooks:` dan `calls:` dalam output mencantumkan acara yang ditangani mod dan apa yang dimintanya kepada Claude Code untuk dilakukan. [Tinjau apa yang dapat dilakukan mod](/docs/id/plugins/mods/admin#review-what-a-mod-can-do) menunjukkan output dan panggilan mana yang harus dicari.

90 

91<h2 id="turn-mods-on-or-off">

92 Nyalakan atau matikan mods

93</h2>

94 

95Mods memerlukan Claude Code v2.1.287 atau lebih baru, dan mods aktif secara default. Di shell Anda, jalankan `claude --version` untuk memeriksa, dan perbarui Claude Code jika milik Anda lebih lama.

96 

97Untuk mematikan mods, pilih berapa banyak yang akan dihentikan, dan berapa lama. Untuk menghidupkan kembali, batalkan perubahan yang sama:

98 

99* **Satu mod**: nonaktifkan atau copot pemasangan pluginnya dari [tab **Installed** di `/plugin`](/docs/id/plugins/install#manage-installed-plugins)

100* **Setiap mod yang dipasang, untuk satu sesi**: mulai Claude Code dengan [`--safe-mode`](/docs/id/cli-reference#cli-flags), yang juga menghilangkan kustomisasi lain Anda

101* **Setiap mod yang Anda pasang, di setiap sesi**: atur [`"disableAllHooks": true`](/docs/id/settings-reference#disableallhooks) di `~/.claude/settings.json`. Settings hooks dan status line kustom Anda juga berhenti. Apa yang dikelola organisasi Anda terus berjalan.

102 

103Jika Anda menggunakan Claude Code melalui organisasi, administrator juga dapat membatasi mods mana yang dimuat. Administrator dimulai di [Hentikan mods yang dipasang pengguna dari dimuat](/docs/id/plugins/mods/admin#stop-user-installed-mods-from-loading).

104 

105Untuk mengetahui apakah mods dapat dimuat untuk Anda, lihat [Periksa apakah mods dapat dimuat](/docs/id/plugins/mods/troubleshoot#check-whether-mods-can-load).

106 

107<Note>

108 Jika Anda menetapkan `CLAUDE_CODE_ENABLE_FUNCTION_HOOKS` selama akses awal, hapus. Claude Code v2.1.287 dan lebih baru mengabaikannya, jadi menetapkannya ke `0` tidak membuat mods tetap mati.

109</Note>

110 

111<h3 id="see-which-mods-a-session-loaded">

112 Lihat mods mana yang dimuat sesi

113</h3>

114 

115Untuk melihat mods mana yang dimuat sesi terminal, jalankan `/plugin` di prompt Claude Code. Baris redup di bawah tab memberikan hitungan dan nama, seperti `1 mod active · first-mod`. Jika mod yang Anda pasang tidak dinamai di sana, lihat [Cari tahu mengapa mod tidak melakukan apa pun](/docs/id/plugins/mods/troubleshoot#find-out-why-a-mod-does-nothing).

116 

117<h2 id="how-a-mod-works">

118 Cara kerja mod

119</h2>

120 

121Mod adalah [plugin](/docs/id/plugins/overview) yang kodenya mendaftarkan penanganan acara, disebut hooks. Claude Code menjalankan hook ketika acaranya terjadi, seperti ketika Claude memanggil alat atau ketika spinner digambar. Mod kecil memiliki tiga file:

122 

123```text theme={null}

124first-mod/

125├── .claude-plugin/

126│ └── plugin.json

127└── hooks/

128 ├── hooks.json

129 └── register.js

130```

131 

132* **`plugin.json`**: [manifest](/docs/id/plugins/manifest-reference) plugin

133* **`hooks.json`**: [menunjuk ke file kode Anda](/docs/id/plugins/mods/reference#files)

134* **`register.js`**: [kode Anda](/docs/id/plugins/mods/create#write-a-mod-yourself), disebut modul hooks. Ini memberitahu Claude Code acara mana yang akan menjalankan fungsi Anda.

135 

136Ini adalah `register.js` lengkap. Ini menghitung pemanggilan alat yang dibuat Claude dan menampilkan hitungan di samping spinner saat Claude bekerja, seperti `Thinking · tool calls: 3…`.

137 

138```javascript hooks/register.js theme={null}

139// Hitungan, dibagikan oleh dua hooks di bawah

140let calls = 0

141 

142// Claude Code memanggil ini sekali ketika mod dimuat

143export function register(on) {

144 // Berjalan setiap kali Claude akan menggunakan alat

145 on('tool.call', async ($, e, next) => {

146 calls += 1

147 // Minta Claude Code untuk menggambar antarmuka lagi, sehingga hitungan baru ditampilkan

148 $.ui.invalidate('ui.render')

149 // Biarkan alat berjalan seperti biasa

150 return next(e)

151 })

152 

153 // Berjalan setiap kali Claude Code menggambar spinner

154 on('ui.render', { component: 'Spinner' }, async ($, e, next) => {

155 // Pertahankan spinner Claude Code, dengan hitungan ditambahkan setelah katanya

156 return next({ ...e, props: { ...e.props, suffix: ' · tool calls: ' + calls + '…' } })

157 })

158}

159```

160 

161File mendaftarkan dua hooks, dan keduanya menggunakan variabel `calls` di atas:

162 

163* **Hook [`tool.call`](/docs/id/plugins/mods/reference#tools)** berjalan setiap kali Claude akan menggunakan alat. Menambahkan satu ke `calls`, meminta Claude Code untuk menggambar antarmuka lagi, dan membiarkan alat berjalan seperti biasa.

164* **Hook [`ui.render`](/docs/id/plugins/mods/reference#interface)** berjalan setiap kali Claude Code menggambar spinner. Mempertahankan spinner Claude Code sendiri dan menambahkan hitungan setelah kata.

165 

166Rekaman ini menunjukkan mod bekerja. Perhatikan baris spinner di atas kotak prompt: saat Claude membuat daftar direktori dan membaca dua file, dibaca `Thinking · tool calls: 1…`, kemudian `2…`, kemudian `3…`.

167 

168<Frame>

169 <video autoPlay muted loop playsInline controls className="w-full dark:hidden" src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-overview-light.mp4?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=00a18aa0743b59a700f0275ce226e6d1" aria-label="Dalam sesi Claude Code, prompt 'list the files here and read the README' diketik dan dikirim. Saat Claude bekerja, spinner membaca 'Thinking · tool calls: 1', kemudian 2, kemudian 3, saat Claude membuat daftar file dan membaca dua di antaranya." data-path="images/mods-overview-light.mp4" />

170 

171 <video autoPlay muted loop playsInline controls className="w-full hidden dark:block" src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-overview-dark.mp4?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=d5223da2fef16ceaaa214a36d72c0536" aria-label="Dalam sesi Claude Code, prompt 'list the files here and read the README' diketik dan dikirim. Saat Claude bekerja, spinner membaca 'Thinking · tool calls: 1', kemudian 2, kemudian 3, saat Claude membuat daftar file dan membaca dua di antaranya." data-path="images/mods-overview-dark.mp4" />

172</Frame>

173 

174<h3 id="what-a-hook-can-do-with-an-event">

175 Apa yang dapat dilakukan hook dengan acara

176</h3>

177 

178Claude Code menjalankan hook Anda sebelum bertindak pada acara, jadi hook memutuskan apa yang terjadi selanjutnya. Memiliki tiga pilihan:

179 

180* **Amati**: catat apa yang terjadi dan biarkan lanjut tanpa perubahan, seperti yang dilakukan hook `tool.call` dalam contoh

181* **Tulis ulang**: ubah acara sebelum lanjut, seperti yang dilakukan hook `ui.render` ketika menambahkan hitungan ke spinner

182* **Jawab**: tangani acara itu sendiri, sehingga perilaku biasa tidak berjalan, seperti menolak perintah

183 

184Untuk melakukan apa pun di luar kode sendiri, seperti menggambar, menambahkan perintah, memanggil model, membaca file, memulai proses, atau membuat permintaan jaringan, hook memanggil API mods. Hook tidak memiliki cara lain untuk melakukan hal-hal itu, itulah mengapa Claude Code dapat [membuat daftar apa yang dilakukan mod](#list-what-a-mod-does-before-you-install-one) sebelum Anda memasangnya.

185 

186Untuk kode di balik setiap pilihan, lihat [Bereaksi terhadap acara](/docs/id/plugins/mods/events#how-a-hook-handles-an-event). Untuk apa yang dapat dipanggil hook, lihat [Gunakan API mods](/docs/id/plugins/mods/api).

187 

188<h3 id="where-mods-run">

189 Tempat mod berjalan

190</h3>

191 

192Hooks mod berjalan di setiap jenis sesi yang memuat plugin. Menggambar lebih sempit: hanya terminal dan aplikasi Desktop yang menampilkan panes, bands, dan baris yang diganti mod. Tabel ini mencantumkan setiap tempat Anda mungkin menjalankan Claude Code:

193 

194| Tempat Anda menjalankan Claude Code | Hooks berjalan | Apa yang digambar mod muncul |

195| :- | :- | :- |

196| `claude` di terminal, termasuk terminal terintegrasi editor dan plugin JetBrains | Ya | Ya |

197| Tab Code aplikasi Desktop, kecuali dalam sesi WSL | Ya | Ya, kecuali elemen yang ditandai [tabel elemen](/docs/id/plugins/mods/reference#elements) sebagai terminal-only |

198| [Sesi WSL](/docs/id/desktop-wsl) di aplikasi Desktop | Tidak, karena plugin tidak tersedia dalam sesi WSL | Tidak |

199| Panel chat ekstensi VS Code | Ya | Tidak |

200| `claude -p` dan [Agent SDK](/docs/id/agent-sdk/overview) | Ya | Tidak |

201| [Remote Control](/docs/id/remote-control) dari claude.ai atau aplikasi mobile | Ya, dalam sesi di mesin Anda | Di terminal di mesin Anda |

202| [Sesi cloud](/docs/id/claude-code-on-the-web) | Ya, untuk plugin yang [menjangkau sesi cloud](/docs/id/cloud-environments#what-carries-over-from-your-setup) | Tidak |

203 

204Mod yang menggambar dapat memeriksa aplikasi mana yang sedang dijalankan, dan kembali ke baris dalam transkrip atau balasan teks perintah di mana tidak ada yang menggambar.

205 

206<h2 id="control-mods-for-your-organization">

207 Kontrol mods untuk organisasi Anda

208</h2>

209 

210Administrator memutuskan apakah mods berjalan dan mana, melalui [managed settings](/docs/id/managed-settings). [Kelola mods untuk organisasi Anda](/docs/id/plugins/mods/admin) mencakup apa yang terjadi secara default, cara meninjau mod, dan cara memberlakukan kebijakan dengan mod Anda sendiri.

211 

212<h2 id="compare-mods-settings-hooks-skills-and-mcp-servers">

213 Bandingkan mods, settings hooks, skills, dan server MCP

214</h2>

215 

216Mods, settings hooks, skills, dan server MCP tumpang tindih. Tabel ini menunjukkan apa itu masing-masing dan kapan memilihnya.

217 

218| | Mod | Settings hook | Skill | Server MCP |

219| :- | :- | :- | :- | :- |

220| Apa itu | Fungsi dalam plugin yang dipanggil Claude Code dalam proses sendiri | Perintah shell, permintaan HTTP, atau prompt yang dijalankan Claude Code pada acara siklus hidup | File `SKILL.md` dari instruksi yang dibaca Claude | Proses atau layanan eksternal yang memberikan Claude alat |

221| Apa yang dapat diubah | Pemanggilan alat, prompts, perintah, giliran, dan apa yang digambar antarmuka | Apakah pemanggilan alat atau prompt maju, argumen dan hasil pemanggilan alat, dan konteks ditambahkan untuk Claude | Apa yang diketahui dan dilakukan Claude | Alat mana yang dimiliki Claude |

222| Bisakah menggambar di antarmuka | Ya | Tidak | Tidak | Tidak |

223| Apa yang Anda tulis | JavaScript atau TypeScript | Skrip dan entri `settings.json` | Markdown | Server dalam bahasa apa pun |

224| Pilih ketika | Anda menginginkan pane, band di atas prompt, perintah kustom, atau menulis ulang acara | Anda ingin memblokir, mengizinkan, atau mencatat acara dengan skrip yang sudah Anda miliki | Anda terus menempel instruksi yang sama ke dalam chat | Claude perlu menjangkau sistem eksternal |

225 

226Masing-masing dari yang lain memiliki halaman sendiri: [Hooks](/docs/id/hooks), [Skills](/docs/id/skills), dan [MCP](/docs/id/mcp). Plugin dapat menampung keempat, jadi mod dapat dikirim dalam plugin yang sama dengan skill dan server MCP.

227 

228<h2 id="mods-built-into-claude-code">

229 Mods bawaan Claude Code

230</h2>

231 

232Beberapa fitur Claude Code sendiri adalah mods. Untuk melihat yang dimiliki sesi Anda, jalankan `/plugin` di prompt Claude Code dan buka tab **Installed**, yang mencantumnya di bawah **Built-in**. Anda tidak dapat memperbarui atau mecopot pemasangan mod bawaan, dan kolom terakhir tabel mengatakan cara mematikan masing-masing. Baris [`mods active`](#see-which-mods-a-session-loaded) menghilangkan mods bawaan.

233 

234Tabel ini mencantumkan setiap entri berdasarkan nama yang ditampilkan `/plugin`:

235 

236| Nama di `/plugin` | Apa yang dilakukan | Tempat aktif | Cara mematikannya |

237| :- | :- | :- | :- |

238| `cc-plugin-agents-md` | Memuat `AGENTS.md` sebagai instruksi proyek | Setiap sesi, terpisah dari [yang tidak dapat membaca `AGENTS.md`](/docs/id/memory#when-agents-md-support-is-unavailable) | Nonaktifkan di `/plugin`, atau [pilih file instruksi mana yang dimuat](/docs/id/memory#choose-which-instruction-files-load) |

239| `cc-plugin-diff` | Mengambil alih [`/diff`](/docs/id/interactive-mode#review-changes-with-%2Fdiff) dan menggambar panenya | Sesi terminal interaktif | Nonaktifkan di `/plugin`. `/diff` tetap, dan versi bawaan Claude Code dari perintah menjawabnya. |

240| `cc-plugin-plugin-authoring` | Memberikan Claude skill [`plugin-authoring`](/docs/id/plugins/mods/create#ask-claude-for-a-mod) untuk menulis mods. Memiliki skill dan tidak ada kode mod. | Kecuali Anthropic telah mematikan mods yang dipasang dari jarak jauh | Nonaktifkan di `/plugin` |

241| `cc-plugin-sec-default` | Menjaga apa yang dikelola organisasi Anda dari mods yang dipasang pengguna | [Tempat guard dimuat](/docs/id/plugins/mods/admin#know-what-happens-by-default) | Anda tidak bisa. Administrator [menetapkan urutan](/docs/id/plugins/mods/admin#install-your-organizations-mods) dalam managed settings |

242| `cc-plugin-telemetry` | Mengirim catatan analitik yang dicatat Claude Code dan mods bawaannya | Di mana pun analitik Claude Code sendiri aktif | Nonaktifkan di `/plugin`, atau matikan analitik, misalnya dengan [`DISABLE_TELEMETRY`](/docs/id/env-vars) |

243| `cc-plugin-you-should-know` | Menjalankan agen samping yang mengawasi Anda saat Claude bekerja pada tugas yang lebih lama. Ketika menemukan sesuatu yang perlu diketahui yang mungkin Anda lewatkan, agen menampilkan catatan di atas prompt. | Dinonaktifkan secara default. Tercantum di `/plugin` -> **Installed** -> **Show disabled** jika tersedia untuk organisasi Anda. Aktifkan dengan [`/plugin enable cc-plugin-you-should-know@builtin`](/docs/id/plugins/cli-reference#plugin-in-a-session). | Nonaktifkan di `/plugin` |

244 

245Pengaturan dan flag yang menghentikan mods yang dipasang, seperti `disableAllHooks`, `--bare`, dan `--safe-mode`, tidak menghentikan mods bawaan.

246 

247<h3 id="read-the-source-of-built-in-mods">

248 Baca sumber mods bawaan

249</h3>

250 

251Sumber empat mods ini bersifat publik di [direktori `mods` dari repositori Claude Code](https://github.com/anthropics/claude-code/tree/main/mods). Masing-masing adalah plugin lengkap dengan modul hooks dan tesnya:

252 

253* [`diff`](https://github.com/anthropics/claude-code/tree/main/mods/diff): pane `/diff`, dengan tombol terikat pada tindakan keyboard dan scrolling yang ditangani mod

254* [`agents-md`](https://github.com/anthropics/claude-code/tree/main/mods/agents-md): memuat `AGENTS.md` sebagai instruksi proyek, dengan opsi [`userConfig`](/docs/id/plugins/components#user-configuration)

255* [`sec-default`](https://github.com/anthropics/claude-code/tree/main/mods/sec-default): guard yang dijelaskan dalam [Ketahui apa yang terjadi secara default](/docs/id/plugins/mods/admin#know-what-happens-by-default), model untuk mod yang memberlakukan kebijakan

256* [`telemetry`](https://github.com/anthropics/claude-code/tree/main/mods/telemetry): menambahkan metode yang dapat dipanggil mods lain, dan mengirim tipenya

257 

258<h2 id="next-steps">

259 Langkah berikutnya

260</h2>

261 

262* [Buat mod](/docs/id/plugins/mods/create): bangun satu yang menghitung pemanggilan alat, menampilkan hitungan di samping spinner, dan menambahkan perintah, dan pelajari loop edit dan reload

263* [Gambar di antarmuka](/docs/id/plugins/mods/interface): panes, band di atas prompt, tombol, bidang teks, dan state

264* [Bereaksi terhadap acara](/docs/id/plugins/mods/events): pemanggilan alat, prompts, giliran, dan urutan mods berjalan

265* [Gunakan API mods](/docs/id/plugins/mods/api): perintah, alat, panggilan model, timer, dan file

266* [Uji mod](/docs/id/plugins/mods/test): tes otomatis yang berjalan tanpa sesi

267* [Troubleshoot mod](/docs/id/plugins/mods/troubleshoot): alasan mod tidak melakukan apa pun, dan log debug

268* [Kelola mods untuk organisasi Anda](/docs/id/plugins/mods/admin): default, managed settings, meninjau mod, dan policy mods

269* [Referensi Mods](/docs/id/plugins/mods/reference): setiap acara, metode, elemen, dan batas

plugins/mods/test.md +422 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Uji coba mod

6 

7> Tulis tes otomatis untuk mod Claude Code yang menaikkan peristiwa, stub jawaban Claude Code, dan tekan tombol, tanpa sesi, masuk, atau jaringan.

8 

9Anda dapat menulis tes otomatis untuk mod dan menjalankannya dari shell Anda dengan [`claude plugin test`](/docs/id/plugins/mods/reference#commands). Tes menaikkan peristiwa yang ditangani hook Anda dan memeriksa apa yang dilakukan hook, sehingga Anda menangkap masalah sebelum mencapai sesi. Contoh pertama menguji mod dari [Buat mod](/docs/id/plugins/mods/create).

10 

11<h2 id="write-a-test">

12 Tulis tes

13</h2>

14 

15Tes memuat mod Anda, mengirim peristiwa melalui hook dengan cara Claude Code akan melakukannya, dan memeriksa apa yang dilakukan hook, tanpa sesi, masuk, atau jaringan. Anda menjalankan tes dari shell Anda dengan `claude plugin test`, dan setiap file tes mengimpor test kit, perpustakaan tes dalam modul `claude-code/testing`.

16 

17Berikan setiap file tes nama yang diakhiri dengan `.test.ts`, seperti `first-mod.test.ts`, dan simpan di mana saja dalam direktori plugin. Setiap file tes memerlukan setidaknya satu `test()`, atau jalankan gagal dengan `declares no test(): nothing ran`. File tes dapat mengimpor file mod Anda sendiri dan pembantu `.ts` saudara, sehingga Anda dapat menguji unit fungsi biasa, seperti aturan permainan, tanpa kit.

18 

19Tes ini menaikkan dua panggilan alat, menjalankan perintah `/tally` dari [Buat mod](/docs/id/plugins/mods/create), dan memeriksa bahwa balasan menghitung keduanya. Baris pertamanya adalah [stub](#stub-what-claude-code-would-answer), yang menjawab panggilan alat di tempat Claude Code. Simpan sebagai `first-mod/tests/first-mod.test.ts`:

20 

21```typescript first-mod/tests/first-mod.test.ts theme={null}

22import { expect, test } from 'claude-code/testing'

23 

24test('/tally reports the tool calls the mod has seen', async ($, on) => {

25 // Answer each tool call in Claude Code's place, so no tool runs

26 on('tool.call', () => ({ result: 'ok' }))

27 

28 // Raise two tool calls, which the mod's tool.call hook counts

29 await $.tool.call({ tool: 'Bash', command: 'ls' })

30 await $.tool.call({ tool: 'Read', file_path: 'README.md' })

31 

32 // Run /tally and check the text its hook returns

33 const answer = await $.command.run({ command: 'tally', args: '' })

34 expect(answer.text).toBe('Claude has made 2 tool calls since this mod loaded')

35})

36```

37 

38Di shell Anda, jalankan tes dari direktori `first-mod`:

39 

40```bash theme={null}

41claude plugin test

42```

43 

44Output menamai setiap tes dan apakah itu lulus, dengan waktu yang bervariasi dari jalankan ke jalankan:

45 

46```text theme={null}

47tests/first-mod.test.ts:

48(pass) /tally reports the tool calls the mod has seen [22.87ms]

49 

50 1 pass

51 0 fail

52Ran 1 test across 1 file. [0.19s]

53```

54 

55Setiap `$.tool.call` melalui hook [`tool.call`](/docs/id/plugins/mods/reference#tools) mod, yang menambah satu ke hitungannya dan meneruskan panggilan ke stub. Tidak ada `ls` yang berjalan dan tidak ada file yang dibaca. `$.command.run` kemudian pergi ke hook [`command.run`](/docs/id/plugins/mods/reference#commands-and-configuration) mod, dan `answer` adalah objek yang dikembalikan hook.

56 

57Perintah keluar dengan status 1 ketika tes gagal, sehingga berfungsi di CI. Jika mod Anda sendiri tidak dapat dimuat di shell yang menjalankannya, itu mencetak baris yang dimulai dengan `claude plugin test: hooks modules are turned off` dengan alasannya, dan keluar dengan status 1.

58 

59<h3 id="stub-what-claude-code-would-answer">

60 Stub apa yang akan dijawab Claude Code

61</h3>

62 

63Tidak ada model, toko, atau alat yang berjalan dalam tes, jadi di mana pun mod Anda mengharapkan Claude Code untuk menjawab, tes menyediakan jawaban dengan stub. Fungsi tes menerima dua argumen untuk itu:

64 

65* **`$`**: `$` tes sendiri, yang berdiri di mana Claude Code berada. Ini bukan [mods API](/docs/id/plugins/mods/reference#mods-api-methods) yang diterima hook. Setiap metodenya menaikkan peristiwa dengan nama yang sama, mengirimnya melalui hook mod Anda, dan menyelesaikan ke hasil: `$.tool.call({ tool: 'Bash', command: 'ls' })` menaikkan `tool.call`. `$.command.run`, `$.prompt.submit`, `$.session.start`, dan `$.turn.complete` bekerja dengan cara yang sama, dan `$.classic.Stop` dan metode `$.classic` lainnya menaikkan [peristiwa hook pengaturan](/docs/id/plugins/mods/events#hook-the-settings-hook-events). Tes tidak dapat menaikkan panggilan mods API seperti `ui.close` secara langsung. Picu melalui mod Anda, misalnya dengan menekan tombol yang menutup panel.

66* **`on`**: panggil untuk mendaftarkan stub, yang merupakan hook yang menjawab di tempat Claude Code. Beri nama stub untuk panggilan mods API tanpa `$.`, jadi stub yang didaftarkan sebagai `store.get` menjawab `$.store.get` mod Anda. Ketika mod Anda memanggil [`$.model.complete`](/docs/id/plugins/mods/api#call-a-model) atau [`$.store.get`](/docs/id/plugins/mods/interface#keep-state), stub menyediakan jawaban.

67 

68Contoh ini stub panggilan model. Hook milik mod bernama `grader`, dan menangani perintah `/grade` yang mengirim kalimat ke model dan melaporkan apakah balasan dimulai dengan `PASS`. File hanya menyimpan hook yang diuji, jadi mod juga memerlukan `plugin.json` dan `hooks.json`, seperti dalam [Buat mod](/docs/id/plugins/mods/create#write-a-mod-yourself). Untuk mengetik `/grade` dalam sesi, mod juga harus [mendaftarkan perintah](/docs/id/plugins/mods/api#add-a-command):

69 

70```javascript grader/hooks/register.js theme={null}

71export function register(on) {

72 on('command.run', { command: 'grade' }, async ($, e) => {

73 // e.args is the text typed after /grade

74 const reply = await $.model.complete({

75 model: 'haiku',

76 system: 'Grade the sentence. Start your reply with PASS or FAIL.',

77 prompt: e.args,

78 })

79 const passed = reply.isAnswered && reply.text.startsWith('PASS')

80 return { text: passed ? 'Passed' : 'Try again' }

81 })

82}

83```

84 

85Tes ini stub panggilan model untuk memeriksa apa yang dilakukan hook dengan balasan yang lulus:

86 

87```typescript grader/tests/grader.test.ts theme={null}

88import { expect, test } from 'claude-code/testing'

89 

90test('a passing grade is reported', async ($, on) => {

91 // Answer the mod's $.model.complete call with a fixed reply, so no model runs

92 on('model.complete', () => ({

93 value: {

94 isAnswered: true,

95 text: 'PASS\nNice sentence.',

96 usage: { input_tokens: 10, output_tokens: 5, cache_read_input_tokens: 0, cache_creation_input_tokens: 0 },

97 },

98 }))

99 

100 // Run /grade, which makes the mod call the model

101 const answer = await $.command.run({ command: 'grade', args: 'The cat sat on the mat.' })

102 expect(answer.text).toBe('Passed')

103})

104```

105 

106Tes lulus karena `reply` hook adalah objek di bawah `value`, yang `text` dimulai dengan `PASS`. Untuk memeriksa cabang lain, tambahkan tes kedua yang stub mengembalikan `text` yang dimulai dengan `FAIL`, dan harapkan `Try again`.

107 

108Stub untuk panggilan mods API mengembalikan objek dengan bidang `value`, yang menyimpan apa yang dipanggil dalam mod Anda: `{ value: 7 }` membuat `$.store.get` menyelesaikan ke `7`. Stub untuk salah satu peristiwa Claude Code, seperti [`turn.step`](/docs/id/plugins/mods/reference#turns) atau `tool.call`, mengembalikan hasil peristiwa itu sendiri, seperti `{ result: 'ok' }`. `$.session.send` dan `$.prompt.fill` mengambil hasil peristiwa juga, seperti yang ditunjukkan tabel. [Lihat apa yang dikembalikan stub](#look-up-what-a-stub-returns) menunjukkan bentuk mana yang diambil setiap nama umum. Dua kesalahan berarti stub salah atau hilang. Output tes yang gagal mencakup blok yang dikepalai `the engine reported:`, dan setiap kesalahan muncul di sana:

109 

110* `returned neither { value } nor { deny }`: stub untuk panggilan mods API mengembalikan nilai telanjang

111* `no implementation for` diikuti oleh nama: mod Anda membuat panggilan itu dan tidak ada stub yang menjawabnya

112 

113Kit juga mengekspor mock dalam memori yang menjawab seluruh namespace untuk Anda. `mock.clock(on)` menjawab [`$.clock`](/docs/id/plugins/mods/api#run-work-in-the-background), `mock.store(on, { count: 7 })` menjawab `$.store` dari toko yang dimulai dengan entri tersebut, dan `mock.env(on, { CI: 'true' })` menjawab `$.env.get` dari variabel tersebut. `mock.clock` mengembalikan jam mock yang tes Anda maju, sehingga tes timer tidak menunggu. `mock.store` mengembalikan tidak ada, jadi untuk memeriksa apa yang disimpan mod Anda, tulis dua stub `store` sendiri seperti [tes gambar](#test-a-drawing) lakukan.

114 

115<h3 id="follow-the-test-kit’s-rules">

116 Ikuti aturan test kit

117</h3>

118 

119Test kit memiliki beberapa aturan sendiri, dan melanggar satu menghasilkan kesalahan yang ditemui penulis tes baru terlebih dahulu:

120 

121* **Daftarkan setiap stub sebelum panggilan pertama tes pada `$`.** Memanggil `on` setelah itu melempar kesalahan seperti `on("ui.render") after the test first called $`.

122 

123* **[`session.start`](/docs/id/plugins/mods/reference#session) tidak berjalan dengan sendirinya.** Setiap tes dimulai dengan modul Anda dimuat segar dan tidak ada hook yang dipanggil, jadi variabel tingkat modul menyimpan nilai awal mereka. Jika hook bergantung pada apa yang ditetapkan `session.start`, naikkan terlebih dahulu:

124 

125 ```typescript theme={null}

126 // Answer the event after your hook passes it on with next(e)

127 on('session.start', () => ({ cwd: '/work' }))

128 // Answer the $.command.register call your hook makes

129 on('command.register', () => ({ value: undefined }))

130 // Raise the event, which runs your session.start hook

131 await $.session.start({ surface: 'terminal', isInteractive: true, cwd: '/work' })

132 ```

133 

134 Stub kedua menjawab panggilan `$.command.register` yang dibuat hook `session.start` seperti [tutorial](/docs/id/plugins/mods/create#write-a-mod-yourself). Tanpa itu, panggilan itu menolak dengan `no implementation for command.register` dan kit melewati hook Anda, jadi tidak ada yang setelah panggilan dalam hook yang berjalan. Tes tidak gagal pada titik itu. Hook yang dilewati hanya tercantum di bawah `the engine reported:` jika pemeriksaan nanti gagal.

135 

136* **Hook yang mengembalikan `next(e)` memerlukan stub untuk menjawab.** Ketika hook [`ui.render`](/docs/id/plugins/mods/reference#interface) Anda mengembalikan `next(e)`, misalnya untuk tidak menggambar apa pun saat Claude menganggur, [memasangnya](#test-a-drawing) gagal dengan `no implementation for ui.render`. Daftarkan stub yang mengembalikan elemen sebagai data biasa:

137 

138 ```typescript theme={null}

139 // Stands for what Claude Code would draw at the site

140 on('ui.render', () => ({ type: 'Text', props: {}, children: ['drawn by Claude Code'] }))

141 ```

142 

143 Dengan stub terdaftar, pemasangan berhasil, dan `ui.find({ type: 'Text' })` mengembalikan elemen itu setiap kali hook Anda mengembalikan `next(e)`.

144 

145* **Stub untuk `turn.step` adalah generator async**, dan tes membaca aliran ke akhirnya untuk mendapatkan hasil:

146 

147 ```typescript theme={null}

148 on('turn.step', async function* ($, e) {

149 // Each yield is one piece of the model's streamed reply

150 yield { kind: 'text', index: 0, text: 'ok' }

151 // The return value is the result of the whole request

152 return { turnId: e.turnId, index: e.index, answer: 'ok', toolUses: [], stopReason: 'end_turn', usage: null }

153 })

154 

155 // Raise one request to the model, which runs your turn.step hook

156 const stream = $.turn.step({ turnId: 't', index: 0, model: 'claude-test', messageCount: 1 })

157 // Read every piece until the stream says it's done

158 let step = await stream.next()

159 while (step.done !== true) step = await stream.next()

160 const result = step.value

161 ```

162 

163 Ketika loop berakhir, `result` adalah objek yang dikembalikan stub, setelah hook `turn.step` Anda memiliki kesempatan untuk mengubahnya. Di sini `result.answer` adalah `'ok'`.

164 

165* **Naikkan panggilan alat dengan nama alat dan argumen sebagai bidang**, seperti `await $.tool.call({ tool: 'Bash', command: 'ls' })`, dan daftarkan stub `tool.call` yang mengembalikan `{ result }`.

166 

167<h3 id="look-up-what-a-stub-returns">

168 Lihat apa yang dikembalikan stub

169</h3>

170 

171Setiap panggilan mods API yang dibuat mod Anda dalam tes memerlukan stub yang menjawab di tempat Claude Code, kecuali beberapa yang dijawab kit sendiri: panggilan [`$.ui.invalidate`](/docs/id/plugins/mods/interface#redraw-when-something-changes) dan [`$.state`](/docs/id/plugins/mods/interface#keep-state). Untuk panggilan `$.clock`, gunakan `mock.clock(on)`, atau `$.clock.now()` mod Anda gagal dengan `no implementation for clock.now`.

172 

173Tabel ini mencantumkan yang paling sering digunakan mod. Kolom pertama adalah panggilan yang dibuat mod Anda atau peristiwa yang dilewatkan dengan `next(e)`. Kolom kedua adalah fungsi untuk diteruskan ke `on` di bawah nama itu, jadi baris `$.store.get` menjadi `on('store.get', ($, e) => ({ value: saved.get(e.key) }))`. `'...'` dalam stub menandai teks untuk Anda isi:

174 

175| Mod Anda memanggil atau meneruskan | Stub |

176| :- | :- |

177| `$.command.register`, `$.tool.register`, `$.ui.toast`, `$.ui.log`, `$.ui.status`, `$.ui.close`, `$.store.set` | `() => ({ value: undefined })`. Untuk `ui.toast` dan `ui.log`, teksnya adalah `e.text`. |

178| `$.store.get` | `($, e) => ({ value: saved.get(e.key) })` |

179| `$.fs.read` | `($, e) => ({ value: e.path.endsWith('notes.md') ? '# Notes' : '' })`. `e.path` tiba sebagai jalur absolut, jadi bandingkan dengan `endsWith`. |

180| `$.ui.open` | `() => ({ value: { isPlaced: true } })` |

181| `$.ui.ask` | Stub `tool.call`, karena pertanyaan mencapainya sebagai panggilan ke alat `AskUserQuestion`: `($, e) => ({ result: { answers: { [e.questions[0].question]: 'Run it' } } })`. Periksa `e.tool` terlebih dahulu jika mod Anda meneruskan panggilan alat lain. |

182| `$.model.complete` | `() => ({ value: { isAnswered: true, text: '...', usage } })` |

183| `$.process.run` | `($, e) => ({ value: { exitCode: 0, stdout: '...', stderr: '' } })`. `e.argv` adalah daftar argumen dan `e.init` menyimpan `cwd` dan `timeoutMs`. |

184| Panggilan mods API apa pun yang harus gagal | `() => ({ deny: 'the reason' })`, yang membuat panggilan menolak dalam mod Anda. Stub yang melempar dilewati sebagai gantinya. |

185| `session.start` | `() => ({ cwd: '/work' })` |

186| `turn.start` | `($, e) => ({ turnId: e.turnId })` |

187| `tool.call` | `() => ({ result: '...' })` |

188| `turn.complete` | `() => ({ text: '' })`. Naikkan dengan `$.turn.complete({ turnId, answer, durationMs, isAborted: false, usage: null })`. |

189| `prompt.submit` | `($, e) => ({ text: e.text })` |

190| `prompt.fill` | `() => ({ isFilled: true })` |

191| `$.prompt.read` | `() => ({ value: { text: '...', cursor: 0 } })` |

192| `$.ui.copy` | `() => ({ value: { isCopied: true } })` |

193| `$.session.messages` | `() => ({ value: [{ role: 'assistant', text: '...', toolUses: [] }] })` |

194| `$.session.id`, `$.agent.list` | `() => ({ value: 'abc123' })`, `() => ({ value: [] })` |

195| `session.send` | `() => ({ isDelivered: true })`. `e.to` tiba sebagai string bahkan ketika mod Anda melewatkan `{ sessionId }`. |

196| `session.receive` | `($, e) => ({ text: e.text })`. Naikkan dengan `$.session.receive({ origin: { kind: 'peer-send-message' }, text })`. |

197| `ui.render` | `() => ({ type: 'Text', props: {}, children: ['...'] })` |

198 

199`expect` memiliki asersi `toBe`, `toEqual`, `toMatch`, `toMatchObject`, `toContain`, `toBeDefined`, `toBeUndefined`, dan `toThrow`, dan `.not` sebelum salah satu dari mereka.

200 

201<h2 id="test-a-timer">

202 Uji coba timer

203</h2>

204 

205Mod yang menjalankan pekerjaan pada timer memerlukan jam yang dikontrol tes, sehingga tes dapat memajukan waktu alih-alih menunggu. `const clock = mock.clock(on)` mengembalikan jam mock yang dimulai pada `0` dan bergerak hanya ketika tes Anda memindahkannya. Untuk memulai pada waktu lain, teruskan dalam milidetik, seperti dalam `mock.clock(on, { now: 5000 })`. Jam memiliki metode ini:

206 

207| Metode | Apa yang dilakukannya |

208| :- | :- |

209| `await clock.advance(1000)` | Memajukan waktu sebanyak milidetik itu dan menjalankan setiap timer yang jatuh tempo |

210| `await clock.set(5000)` | Memajukan waktu ke nilai itu, seperti yang akan dilakukan `advance` |

211| `clock.now()` | Mengembalikan waktu, yang merupakan apa yang diselesaikan `$.clock.now()` mod Anda |

212| `await clock.settle()` | Menjalankan timer yang sudah jatuh tempo, seperti rantai panggilan `$.clock.after` penundaan nol, tanpa memajukan waktu |

213| `await clock.sleep(2000)` | Di dalam stub, membuat stub itu menjawab hanya setelah tes telah maju sejauh itu, yang adalah cara Anda mensimulasikan model atau proses yang lambat |

214 

215Hook ini milik mod bernama `countdown`, dan menangani perintah `/countdown` yang mengambil jumlah detik, memulai timer `$.clock.every` satu detik, dan menunjukkan toast pada nol. Seperti dengan `grader`, file hanya menyimpan hook yang diuji dan tidak mendaftarkan perintah:

216 

217```javascript countdown/hooks/register.js theme={null}

218export function register(on) {

219 on('command.run', { command: 'countdown' }, async ($, e) => {

220 // e.args is the text typed after /countdown

221 let left = Number(e.args)

222 const timer = $.clock.every(1000, () => {

223 left -= 1

224 if (left === 0) {

225 timer.cancel()

226 $.ui.toast('Time is up')

227 }

228 })

229 // Print nothing in the transcript

230 return {}

231 })

232}

233```

234 

235Tes ini menjalankan `/countdown 3` dan memajukan jam mock, sehingga memeriksa tiga detik perilaku tanpa menunggu tiga detik:

236 

237```typescript countdown/tests/countdown.test.ts theme={null}

238import { expect, mock, test } from 'claude-code/testing'

239 

240test('the countdown ends with a toast', async ($, on) => {

241 // Answer every $.clock call from a clock the test controls

242 const clock = mock.clock(on)

243 // Collect the text of each toast the mod shows

244 const toasts: string[] = []

245 on('ui.toast', ($, e) => {

246 toasts.push(e.text)

247 return { value: undefined }

248 })

249 

250 await $.command.run({ command: 'countdown', args: '3' })

251 // After two seconds the timer has fired twice, and no toast is due

252 await clock.advance(2000)

253 expect(toasts).toEqual([])

254 // The third second brings the count to zero

255 await clock.advance(1000)

256 expect(toasts).toEqual(['Time is up'])

257})

258```

259 

260`expect` pertama menunjukkan bahwa toast tidak datang lebih awal, dan yang kedua menunjukkan bahwa itu datang sekali. Setiap `advance` menyelesaikan setelah timer yang jatuh tempo telah berjalan, sehingga pemeriksaan pada baris berikutnya melihat efeknya.

261 

262<h2 id="test-a-drawing">

263 Uji coba gambar

264</h2>

265 

266Tes dapat menggambar salah satu [situs render](/docs/id/plugins/mods/reference#render-sites) mod Anda, kemudian menekan, mengetik ke, dan menemukan elemen yang digambarnya. `$.ui.mount` menggambar situs melalui hook `ui.render` mod Anda dan mengembalikan handle dengan metode untuk masing-masing. Untuk mencakup beberapa aplikasi dalam satu tes, atur `surface` ke aplikasi untuk digambar. Tes ini membuka panel dari [Bangun panel dengan tab](/docs/id/plugins/mods/interface#build-a-pane-with-tabs), beralih tab, menekan tombol, dan memeriksa hitungan di terminal dan aplikasi Desktop:

267 

268```typescript hello-tabs/tests/hello-tabs.test.ts theme={null}

269import { expect, test } from 'claude-code/testing'

270 

271// What Claude Code passes to a ui.render hook for this pane, apart from the app

272const PANE = {

273 plugin: 'hello-tabs',

274 component: 'Pane',

275 requestId: 'hello-tabs',

276 viewport: { columns: 100, rows: 30 },

277 props: {

278 title: 'Hello tabs',

279 isFocused: true,

280 bodyColumns: 60,

281 placement: 'inline',

282 scroll: { offset: 0, bodyRows: 10 },

283 view: {},

284 },

285} as const

286 

287test('the second tab counts presses and saves the count', async ($, on) => {

288 // Stub $.store with a Map, so the test can read what the mod saved

289 const saved = new Map<string, unknown>()

290 on('store.get', ($, e) => ({ value: saved.get(e.key) }))

291 on('store.set', ($, e) => {

292 saved.set(e.key, e.value)

293 return { value: undefined }

294 })

295 

296 // Draw the pane once for each app

297 for (const surface of ['terminal', 'desktop'] as const) {

298 const ui = await $.ui.mount({ ...PANE, surface })

299 // Press the buttons by the key the mod gave them

300 await ui.press({ key: 'tab-two' })

301 await ui.press({ key: 'more' })

302 // The second tab's count line is in the drawing

303 expect(await ui.find({ type: 'Text', text: /^Count: \d+$/ })).toBeDefined()

304 await ui.unmount()

305 }

306 

307 // One press in each app makes two

308 expect(saved.get('count')).toBe(2)

309})

310```

311 

312Di shell Anda, jalankan `claude plugin test` dari direktori `hello-tabs`. Tes lulus ketika kedua aplikasi menggambar garis hitungan dan mod telah menyimpan `2`. Hitungan dibawa dari aplikasi pertama ke yang kedua karena kedua pemasangan menggunakan modul yang dimuat sama.

313 

314Handle yang dikembalikan `$.ui.mount` memiliki metode ini, yang mengatasi elemen berdasarkan `key` yang Anda berikan:

315 

316| Metode | Apa yang dilakukannya |

317| :- | :- |

318| `press({ key: 'more' })` | Menekan `Button` dengan kunci itu |

319| `input({ key: 'new-note', text: 'buy milk' })` | Mengetik teks ke `Input` dengan kunci itu dan menekan Enter. Tambahkan `kind: 'change'` untuk mengetik tanpa mengirimkan. |

320| `select({ key: 'size', value: 'large' })` | Memilih opsi dengan nilai itu dalam `Select` dengan kunci itu |

321| `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. |

322| `unmount()` | Menghapus gambar |

323 

324Setiap 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](/docs/id/plugins/mods/reference#render-sites) mencantumkan props setiap situs, dan [tipe untuk build Anda](/docs/id/plugins/mods/create#get-the-types-for-your-build) memiliki tipe mereka.

325 

326Tes 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.

327 

328<h3 id="test-a-drawing-after-clear">

329 Uji coba gambar setelah `/clear`

330</h3>

331 

332Setiap tes dimulai dengan setiap nilai `$.state` pada default-nya, yang merupakan cara `/clear` meninggalkannya. Untuk menguji apa yang dilakukan mod Anda selanjutnya, lewati `session.start`, naikkan `classic.SessionStart` dengan `source: 'clear'`, dan periksa apa yang digambar mod Anda.

333 

334Tes ini memeriksa modul dari [Muat nilai yang disimpan lagi setelah `/clear`](/docs/id/plugins/mods/interface#load-a-saved-value-again-after-clear). Tambahkan ke file dari [Uji coba gambar](#test-a-drawing), di mana `PANE` didefinisikan. Tes pertama file itu mengharapkan tombol untuk menyimpan hitungan, seperti tombol dalam [Simpan dari lebih dari satu sesi](/docs/id/plugins/mods/interface#save-from-more-than-one-session):

335 

336```typescript hello-tabs/tests/hello-tabs.test.ts theme={null}

337test('the saved count comes back after /clear', async ($, on) => {

338 // The store already holds a count of 7

339 on('store.get', () => ({ value: 7 }))

340 // Answer the event after your hook passes it on with next(e)

341 on('classic.SessionStart', () => ({}))

342 

343 // Raise the event that fires after /clear, which runs your hook

344 await $.classic.SessionStart({ source: 'clear' })

345 

346 const ui = await $.ui.mount({ ...PANE, surface: 'terminal' })

347 await ui.press({ key: 'tab-two' })

348 // The pane shows the stored count, not the default of 0

349 expect(await ui.find({ type: 'Text', text: 'Count: 7' })).toBeDefined()

350})

351```

352 

353Tes lulus ketika hook `classic.SessionStart` Anda telah menyalin `7` yang disimpan ke `$.state` sebelum panel menggambar. Tanpa hook itu dalam modul Anda, panel menggambar `Count: 0`, `find` mengembalikan `undefined`, dan tes gagal di `toBeDefined`.

354 

355<h2 id="test-a-mod-that-judges-other-mods">

356 Uji coba mod yang menilai mod lain

357</h2>

358 

359Mod yang tercantum organisasi Anda dalam [`prependPlugins`](/docs/id/plugins/mods/admin) dapat menolak mod lain sebelum dimuat. Untuk menguji satu, atur tier mod Anda dan berikan tes mod kedua untuk diterima atau ditolak:

360 

361* **`tier`**: panggil sekali di bagian atas file tes, seperti dalam `tier('prepend')`, untuk memuat mod Anda sebagai `prepend`, `append`, atau `builtin`, tempatnya dalam [urutan mod berjalan](/docs/id/plugins/mods/events#the-order-mods-run-in). Tanpa itu, mod Anda memuat sebagai `user`.

362* **`plugins`**: teruskan `test` objek opsi di depan badan tes. Array `plugins` menyimpan mod yang Anda tulis inline, masing-masing dengan `name` dan fungsi `register`. Untuk memuat satu di tempat lain selain `user`, tambahkan `tier` ke itu.

363 

364File tes ini memuat [mod kebijakan dari halaman admin](/docs/id/plugins/mods/admin#enforce-a-policy-with-a-mod-of-your-own) terlebih dahulu. Itu memeriksa bahwa mod kebijakan menolak mod yang memulai proses dan mengakui yang tidak:

365 

366```typescript acme-guard/tests/guard.test.ts theme={null}

367import { expect, test, tier } from 'claude-code/testing'

368 

369// Load the mod under test ahead of every other mod

370tier('prepend')

371 

372// A second mod whose code calls $.process.run, which the policy blocks

373const runner = {

374 name: 'runner',

375 register(on) {

376 on('tool.call', async ($, e, next) => {

377 await $.process.run(['ls'])

378 return { result: 'runner answered' }

379 })

380 },

381}

382 

383// A second mod that calls nothing the policy blocks

384const reader = {

385 name: 'reader',

386 register(on) {

387 on('tool.call', async ($, e, next) => {

388 return { result: 'reader answered' }

389 })

390 },

391}

392 

393test('refuses a mod that starts a process', { plugins: [runner] }, async ($, on) => {

394 on('tool.call', () => ({ result: 'claude code answered' }))

395 let message = ''

396 try {

397 // The first call on $ loads the mods, so the refusal is thrown here

398 await $.tool.call({ tool: 'Bash', command: 'ls' })

399 } catch (error) {

400 message = error.message

401 }

402 expect(message).toBe('runner: refused by acme-guard: Acme policy: mods may not call process.run')

403})

404 

405test('admits a mod that starts no process', { plugins: [reader] }, async ($, on) => {

406 on('tool.call', () => ({ result: 'claude code answered' }))

407 const out = await $.tool.call({ tool: 'Bash', command: 'ls' })

408 // The answer comes from reader, which shows that it loaded

409 expect(out).toEqual({ result: 'reader answered' })

410})

411```

412 

413Di shell Anda, jalankan `claude plugin test` dari direktori `acme-guard`. Kedua tes lulus dengan mod kebijakan seperti yang ditunjukkan halaman admin.

414 

415Kit memuat setiap mod pada panggilan pertama tes pada `$`. Ketika mod Anda menolak satu, panggilan itu melempar, dan pesan menamai mod yang ditolak, mod yang menolaknya, dan alasan Anda. Dalam tes kedua tidak ada yang ditolak, jadi `reader` menjawab panggilan alat sebelum mencapai stub.

416 

417<h2 id="next-steps">

418 Langkah berikutnya

419</h2>

420 

421* [Troubleshoot mod](/docs/id/plugins/mods/troubleshoot): cari tahu mengapa mod tidak melakukan apa pun dalam sesi

422* [Referensi mods](/docs/id/plugins/mods/reference): setiap peristiwa input dan hasil, untuk menulis stub

plugins/mods/troubleshoot.md +284 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Troubleshoot a mod

6 

7> Cari tahu mengapa Claude Code mod tidak melakukan apa pun: cocokkan gejala atau pesan dengan penyebabnya, cari pesan penolakan, dan baca log debug.

8 

9Ketika modul mod atau salah satu hooks-nya gagal, Claude Code melewatinya dan sesi berlanjut, jadi mod yang rusak dapat terlihat seperti mod yang tidak melakukan apa pun. Mulai dengan memeriksa apa yang Claude Code baca dari mod Anda dan di mana ia melaporkan masalah, kemudian temukan gejala atau pesan yang Anda miliki.

10 

11<h2 id="find-out-why-a-mod-does-nothing">

12 Cari tahu mengapa mod tidak melakukan apa pun

13</h2>

14 

15Ketika mod tidak melakukan apa pun, dua pemeriksaan menemukan alasannya: apa yang Claude Code baca dari file mod, dan baris yang ditulis ketika melewati sesuatu. Untuk yang pertama, di shell Anda jalankan [`claude plugin validate`](/docs/id/plugins/mods/create#check-what-claude-code-reads-from-your-mod) dengan direktori mod, seperti `claude plugin validate ./first-mod`. Ini menangkap event yang salah eja, manifest yang buruk, dan modul yang tidak dapat dibaca Claude Code, tanpa memulai sesi.

16 

17Ketika modul tidak dimuat, hook dilewati, atau mod lain menolak milik Anda, Claude Code menulis satu baris yang menyebutkan mod Anda. Di mana Anda membaca baris itu tergantung pada sesi:

18 

19* **Sesi yang hot-reload direktori plugin**: baris redup dalam transkrip. Itu adalah sesi interaktif yang Anda mulai dengan `--plugin-dir`, atau sesi di mana Anda [mengaktifkan hot reloading](/docs/id/plugins/mods/create#ask-claude-for-a-mod) untuk mod yang ditulis Claude.

20* **Sesi interaktif lainnya, seperti sesi yang menjalankan mod yang Anda instal dari marketplace**: [debug log](#read-the-debug-log) saja. Untuk mendapatkannya, mulai sesi dengan `claude --debug`.

21* **Jalankan `claude -p` dengan `--plugin-dir`**: stderr, dalam format output teks default. Penolakan oleh mod lain hanya masuk ke debug log.

22 

23<h2 id="check-whether-mods-can-load">

24 Periksa apakah mod dapat dimuat

25</h2>

26 

27Untuk memeriksa apakah setup Anda memungkinkan mod dimuat sama sekali, tanpa menginstal satu, jalankan `claude plugin test` di shell Anda, dari direktori yang tidak menyimpan mod. Anda tidak memerlukan sesi. Pesan yang dicetak memberitahu Anda statusnya:

28 

29| Pesan mencakup | Artinya |

30| :- | :- |

31| `no hooks module to load` | Mod dapat dimuat. Perintah tidak menemukan mod untuk diuji di direktori ini. |

32| `hooks modules are turned off here` | Pengaturan menjaga mod Anda keluar: `disableAllHooks` di pengaturan Anda sendiri, atau kebijakan organisasi Anda |

33| `hooks modules are turned off in this process` | Anthropic telah mematikan mod yang diinstal dari jarak jauh. Tidak ada pengaturan di mesin Anda yang menghidupkannya kembali. |

34 

35Organisasi juga dapat mengatur `allowManagedModsOnly` untuk memungkinkan hanya mod miliknya sendiri, yang tidak dilaporkan perintah ini. Dalam hal itu mod yang Anda instal tidak dimuat, dan [pesan menjelaskan mengapa](/docs/id/plugins/mods/troubleshoot#messages-from-the-built-in-guard).

36 

37<h2 id="the-mod-doesn’t-load">

38 Mod tidak dimuat

39</h2>

40 

41Tidak ada yang ditambahkan mod: tidak ada perintah, tidak ada gambar, dan tidak ada perubahan perilaku.

42 

43<h3 id="your-version-is-older-than-2-1-287">

44 Versi Anda lebih lama dari 2.1.287

45</h3>

46 

47`claude --version` mencetak versi lebih lama dari 2.1.287. Versi Anda mendahului mod yang diaktifkan secara default.

48 

49[Perbarui Claude Code](/docs/id/setup#update-claude-code).

50 

51<h3 id="the-mods-active-line-doesn’t-name-the-mod">

52 Baris `mods active` tidak menyebutkan mod

53</h3>

54 

55Tidak ada yang ditambahkan mod, dan baris [`mods active`](/docs/id/plugins/mods/overview#see-which-mods-a-session-loaded) di `/plugin` tidak menyebutkannya. Modul hooks tidak dimuat. Ketika Claude Code menolaknya, debug log memiliki baris yang dimulai dengan `hooks module`, nama mod, dan `not loaded:`, seperti `hooks module first-mod@inline not loaded: disableAllHooks in managed settings` untuk mod yang dimuat dengan `--plugin-dir`.

56 

57Baca alasan setelah titik dua. Bagian [refusal messages](#refusal-messages) mencantumkan masing-masing. Jika log tidak memiliki baris seperti itu, kerjakan entri lain dalam grup ini.

58 

59<h3 id="a-claude-p-run-prints-hooks-module-not-loaded">

60 Jalankan `claude -p` mencetak `hooks module not loaded`

61</h3>

62 

63Baris dimulai dengan nama mod dan masuk ke stderr. Modul hooks ditolak. Jalankan non-interaktif tidak memiliki transkrip, jadi pesan masuk ke stderr.

64 

65Baca alasan setelah titik dua. Bagian [refusal messages](#refusal-messages) mencantumkan masing-masing.

66 

67<h3 id="refusal-messages">

68 Refusal messages

69</h3>

70 

71Masing-masing mengikuti `hooks module`, nama mod, dan `not loaded:` di debug log.

72 

73| Pesan dimulai dengan | Artinya |

74| :- | :- |

75| `hooks modules are turned off for installed plugins in this process` | Anthropic telah mematikan mod yang diinstal dari jarak jauh. Tidak ada pengaturan di mesin Anda yang menghidupkannya kembali. |

76| `disableAllHooks in managed settings` | Organisasi Anda mematikan hooks dari plugin yang diinstal |

77| `only managed plugins and built-in plugins run` | `allowManagedHooksOnly` diatur, atau `disableAllHooks` diatur dalam file pengaturan selain pengaturan terkelola |

78| `installed plugins that are not managed load no hooks module in this mode (--bare)` | Anda memulai Claude Code dengan `--bare` |

79| `another plugin of that name loads first` | Dua plugin berbagi nama. Yang terkelola, atau yang dimuat terlebih dahulu, digunakan. |

80 

81<h3 id="messages-from-the-built-in-guard">

82 Pesan dari built-in guard

83</h3>

84 

85Pada mesin dengan pengaturan terkelola, atau untuk pengguna yang masuk dengan paket Team atau Enterprise, [built-in guard](/docs/id/plugins/mods/admin#know-what-happens-by-default) dapat menolak mod atau salah satu jawabannya. Setiap pesan menyebutkan opsi yang ditetapkan administrator organisasi Anda untuk mengubah aturan.

86 

87| Pesan berisi | Artinya | Di mana muncul |

88| :- | :- | :- |

89| `mods are limited to your organization's by policy (allowManagedModsOnly)` | Organisasi Anda hanya memungkinkan [mod miliknya sendiri](/docs/id/plugins/mods/admin#install-your-organizations-mods), jadi milik Anda tidak dimuat | Debug log, dan transkrip dalam [sesi yang hot-reload direktori plugin](#find-out-why-a-mod-does-nothing) |

90| `tried to lift a deny rule in your settings` | Hook [`tool.check`](/docs/id/plugins/mods/reference#tools) mod Anda menyetujui panggilan yang aturan `deny` menolak. Panggilan tetap ditolak. | Transkrip dan debug log, sekali untuk setiap mod dalam sesi. Dalam jalankan `claude -p`, hanya debug log. |

91| `the deny rules in your settings could not be checked for this call, so it is refused` | Guard gagal saat memeriksa panggilan yang disetujui mod, jadi menolak panggilan | Alasan Claude membaca untuk panggilan yang ditolak |

92 

93<h3 id="validate-passes-and-lists-no-hooks-line">

94 `validate` lulus dan tidak mencantumkan baris `hooks`

95</h3>

96 

97`hooks/hooks.json` tidak memiliki kunci `modules`, atau kunci salah eja.

98 

99Tambahkan `"modules": ["./register.js"]`.

100 

101<h3 id="hooks-module-did-not-load">

102 `hooks module did not load`

103</h3>

104 

105Baris dimulai dengan nama mod, kemudian `hooks module did not load:` dan alasan, yang memberikan file dan baris ketika masalah ada di kode Anda. Claude Code tidak dapat memuat modul, misalnya karena kode tingkat atasnya dilempar.

106 

107Perbaiki kesalahan yang dinamai alasan.

108 

109<h3 id="options-do-not-fit-plugin-json-userconfig">

110 `options do not fit plugin.json userConfig`

111</h3>

112 

113Baris dimulai dengan nama mod, kemudian `hooks module did not load: options do not fit plugin.json userConfig:` dan alasan. Opsi tidak sesuai dengan bidang [`userConfig`](/docs/id/plugins/components#user-configuration)-nya, seperti angka di atas `max` bidang, atau bidang yang diperlukan tidak memiliki nilai.

114 

115Atur atau ubah nilainya. Akhir baris menyebutkan entri `pluginConfigs`-nya di `settings.json`.

116 

117<h3 id="no-mod-loads-in-a-directory-you-opened-for-the-first-time">

118 Tidak ada mod yang dimuat di direktori yang Anda buka untuk pertama kalinya

119</h3>

120 

121Anda belum menjawab prompt kepercayaan untuk direktori.

122 

123Mulai sesi interaktif di direktori itu dengan `claude`, dan terima prompt kepercayaan yang dibukanya.

124 

125<h3 id="no-installed-plugin-loads-at-all">

126 Tidak ada plugin yang diinstal dimuat sama sekali

127</h3>

128 

129Anda memulai Claude Code dengan `--safe-mode`.

130 

131Mulai tanpa flag.

132 

133<h2 id="a-hook-is-skipped-or-a-mod-is-unloaded">

134 Hook dilewati atau mod dibongkar

135</h2>

136 

137Mod dimuat, dan kemudian Claude Code melewati salah satu hooks-nya atau membongkarnya.

138 

139<h3 id="hook-skipped">

140 `hook skipped`

141</h3>

142 

143Baris menyebutkan mod dan event, kemudian mengatakan `hook skipped:` dan alasan, seperti `first-mod: tool.call hook skipped: threw Error: boom`. Hook dilempar, berjalan melampaui [batas waktu 10 detik](/docs/id/plugins/mods/reference#limits)-nya, atau mengembalikan hasil bentuk yang salah. Baris muncul sekali untuk setiap event dan jenis kegagalan sampai mod dimuat ulang.

144 

145Perbaiki kesalahannya. Debug log memiliki baris untuk setiap kejadian.

146 

147<h3 id="it-crashed-the-hooks-worker">

148 `it crashed the hooks worker`

149</h3>

150 

151Baris dimulai dengan nama mod, seperti `first-mod was unloaded: it crashed the hooks worker`. Plugin yang diinstal berbagi satu thread worker. Worker berhenti merespons atau mogok, dan Claude Code melacak itu ke mod ini dan membongkarnya. Hook yang memblokir thread, seperti loop yang tidak pernah menunggu, adalah satu penyebab.

152 

153Perbaiki hook.

154 

155<h3 id="mods-that-run-in-the-hooks-worker-are-off-for-this-session">

156 `mods that run in the hooks worker are off for this session`

157</h3>

158 

159Baris berbunyi `hooks: mods that run in the hooks worker are off for this session: it crashed 3 times`. Worker berhenti tiga kali dan Claude Code tidak dapat melacak pemberhentian ke satu mod, jadi membongkar setiap mod yang bukan built-in, termasuk mod yang diinstal organisasi Anda. Baris ini mencapai transkrip di setiap sesi interaktif.

160 

161Jalankan `/reload-plugins` untuk memuatnya lagi.

162 

163<h2 id="a-tool-call-is-denied">

164 Panggilan tool ditolak

165</h2>

166 

167Mod dimuat dan hooks-nya berjalan, dan panggilan tool yang disentuhnya ditolak.

168 

169<h3 id="a-hook-changed-this-call’s-input-after-the-model-wrote-it">

170 `a hook changed this call's input after the model wrote it`

171</h3>

172 

173Dalam mode auto, panggilan tool yang ditolak memberikan alasan ini. Hook mengubah input panggilan tool setelah [server-side classifier](/docs/id/permission-modes#server-side-classifier-review) meninjau, jadi tinjauan itu tidak mencakup apa yang akan berjalan. Hook dapat berupa [`tool.call`](/docs/id/plugins/mods/reference#tools) mod atau [`turn.step`](/docs/id/plugins/mods/reference#turns) hook, atau hook pengaturan [`PreToolUse`](/docs/id/hooks#pretooluse). Pesan tidak mengatakan yang mana.

174 

175Pesan memberitahu Claude untuk mengeluarkan panggilan sekali lagi seperti yang dicatat. Jika itu juga ditolak, hook mengubah input setiap kali, jadi matikan mod atau hook, atau tinggalkan mode auto dan setujui panggilan sendiri.

176 

177<h3 id="a-message-about-the-deny-rules-in-your-settings">

178 Pesan tentang aturan deny di pengaturan Anda

179</h3>

180 

181`tried to lift a deny rule in your settings` dan `the deny rules in your settings could not be checked for this call, so it is refused` keduanya berasal dari built-in guard.

182 

183Carinya di [Messages from the built-in guard](#messages-from-the-built-in-guard).

184 

185<h2 id="a-drawing-doesn’t-appear-or-respond">

186 Gambar tidak muncul atau merespons

187</h2>

188 

189Mod dimuat, dan pane, band, atau kontrol tidak berperilaku seperti yang Anda harapkan.

190 

191<h3 id="a-pane-or-band-is-empty-or-shows-claude-code’s-usual-content">

192 Pane atau band kosong atau menampilkan konten biasa Claude Code

193</h3>

194 

195[Tree](/docs/id/plugins/mods/interface#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.

196 

197Baca alasan di baris itu. Penyebab umum adalah prop yang tidak diambil elemen dan elemen yang tidak dimiliki aplikasi.

198 

199<h3 id="ui-open-runs-and-no-pane-appears">

200 `$.ui.open` berjalan dan tidak ada pane yang muncul

201</h3>

202 

203Panggilan tidak berasal dari sesuatu yang dilakukan pengguna, dan terminal lebih sempit dari 144 kolom.

204 

205Buka pane dari perintah atau tombol, atau periksa hasil `isPlaced` panggilan. Lihat [Open a pane at the right time](/docs/id/plugins/mods/interface#open-a-pane-at-the-right-time).

206 

207<h3 id="hotkeys-do-nothing">

208 Hotkey tidak melakukan apa pun

209</h3>

210 

211Pane Anda tidak memiliki fokus keyboard.

212 

213Tekan Ctrl+X kemudian Tab, atau klik pane. Buka dengan `focus: true` dari perintah.

214 

215<h3 id="a-drawing-works-in-the-terminal-and-not-in-the-desktop-app">

216 Gambar bekerja di terminal dan bukan di Desktop app

217</h3>

218 

219Situs atau elemen tidak tersedia di sana.

220 

221Periksa tabel [render sites](/docs/id/plugins/mods/reference#render-sites) dan [elements](/docs/id/plugins/mods/reference#elements).

222 

223<h2 id="an-edit-or-a-value-is-lost">

224 Edit atau nilai hilang

225</h2>

226 

227Mod berjalan, dan perubahan yang Anda buat atau nilai yang disimpannya tidak ada.

228 

229<h3 id="your-edits-don’t-take-effect">

230 Edit Anda tidak berlaku

231</h3>

232 

233Anda mengedit plugin yang Anda instal. Claude Code menjalankan salinan cache untuk versi yang diinstal.

234 

235Kembangkan dengan `--plugin-dir` menunjuk ke salinan kerja Anda, seperti `claude --plugin-dir ./first-mod`, yang dimuat ulang saat Anda menyimpan.

236 

237<h3 id="a-value-resets-when-the-module-reloads">

238 Nilai direset saat modul dimuat ulang

239</h3>

240 

241Variabel tingkat modul diinisialisasi ulang pada setiap reload.

242 

243[Simpan nilai di `$.state` atau `$.store`](/docs/id/plugins/mods/interface#keep-state).

244 

245<h3 id="a-value-resets-after-/clear-/resume-or-/branch">

246 Nilai direset setelah `/clear`, `/resume`, atau `/branch`

247</h3>

248 

249Nilai direset, atau nilai yang disimpan diganti dengan default-nya. Masing-masing perintah itu mereset `$.state` ke default-nya, dan `session.start` tidak dipecat lagi.

250 

251[Muat nilai yang disimpan lagi](/docs/id/plugins/mods/interface#load-a-saved-value-again-after-clear) dalam hook `classic.SessionStart`.

252 

253<h2 id="read-the-debug-log">

254 Baca debug log

255</h2>

256 

257Debug log memiliki baris untuk setiap modul Claude Code dimuat atau menolak, setiap hook yang gagal, dan setiap hasil yang ditolak, jadi di situlah untuk mencari ketika transkrip menunjukkan tidak ada. Untuk menulis satu, di shell Anda mulai Claude Code dengan `--debug`, atau dengan `--debug-file <path>` untuk memilih di mana itu pergi:

258 

259```bash theme={null}

260claude --debug-file ./mod-debug.log --plugin-dir ./first-mod

261```

262 

263Di terminal lain, ikuti file dan filter untuk nama mod Anda:

264 

265```bash theme={null}

266tail -f ./mod-debug.log | grep first-mod

267```

268 

269Mod yang dimuat memiliki baris yang menyebutkannya dan mencantumkan event yang diaitkan. Mod yang dimuat dengan `--plugin-dir` muncul di bawah namanya diikuti oleh `@inline`:

270 

271```text theme={null}

272hooks module first-mod@inline loaded (worker, environment 2, tier user); events: session.start,tool.call,command.run,ui.render

273```

274 

275Gambar yang tidak divalidasi dihitung sebagai hasil yang ditolak dan mendapat baris juga. Untuk menulis baris Anda sendiri di log, panggil [`$.ui.log`](/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.

276 

277Saat Anda mengedit mod yang dimuat dengan `--plugin-dir`, transkrip menampilkan baris untuk setiap reload yang menyebutkan mod dan mencantumkan hooks-nya. Jika penyimpanan memecah modul, baris mengatakan `reload failed, the previous version stays loaded:` dengan alasan, dan versi terakhir yang berfungsi terus berjalan.

278 

279<h2 id="next-steps">

280 Langkah berikutnya

281</h2>

282 

283* [Test a mod](/docs/id/plugins/mods/test): tangkap masalah sebelum mencapai sesi

284* [Troubleshoot plugins](/docs/id/plugins/troubleshooting): masalah dengan menginstal dan memuat plugin yang tidak spesifik untuk mod

plugins/org.md +4 −1

Details

212| `pluginTrustMessage` | Menambahkan teks Anda ke peringatan kepercayaan yang ditunjukkan `/plugin` sebelum plugin diinstal | Tidak mengubah teks peringatan itu sendiri |212| `pluginTrustMessage` | Menambahkan teks Anda ke peringatan kepercayaan yang ditunjukkan `/plugin` sebelum plugin diinstal | Tidak mengubah teks peringatan itu sendiri |

213| `allowedChannelPlugins` | Mengganti daftar default plugin yang diizinkan untuk mendorong pesan channel. Memerlukan `channelsEnabled: true` | Lihat [Restrict which channel plugins can run](/docs/id/channels#restrict-which-channel-plugins-can-run) |213| `allowedChannelPlugins` | Mengganti daftar default plugin yang diizinkan untuk mendorong pesan channel. Memerlukan `channelsEnabled: true` | Lihat [Restrict which channel plugins can run](/docs/id/channels#restrict-which-channel-plugins-can-run) |

214| [`CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL=1`](/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 |214| [`CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL=1`](/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 |

215| [`allowManagedModsOnly`](/docs/id/plugins/mods/admin#stop-user-installed-mods-from-loading) | Menghentikan setiap [mod](/docs/id/plugins/mods/overview) yang diinstal yang tidak [dihitung sebagai milik organisasi Anda](/docs/id/plugins/mods/admin#install-your-organizations-mods) dari memuat | Tidak menghentikan plugin yang berisi mod dari instalasi. Untuk itu, gunakan kunci marketplace dalam tabel ini |

215 216 

216Setiap kunci dalam tabel adalah pengaturan terkelola, terlepas dari `enabledPlugins`, `syncClaudeAiPlugins`, dan `CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL`:217Setiap kunci dalam tabel adalah pengaturan terkelola, terlepas dari `enabledPlugins`, `syncClaudeAiPlugins`, `CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL`, dan `allowManagedModsOnly`:

217 218 

218* **`enabledPlugins`**: Anda dapat menetapkannya dalam cakupan apa pun, dan pengaturan terkelola menguncinya.219* **`enabledPlugins`**: Anda dapat menetapkannya dalam cakupan apa pun, dan pengaturan terkelola menguncinya.

219* **`syncClaudeAiPlugins`**: setiap pengguna juga dapat menetapkannya dalam pengaturan pengguna atau lokal mereka sendiri. Lihat [cakupannya dalam referensi pengaturan](/docs/id/settings-reference#syncclaudeaiplugins).220* **`syncClaudeAiPlugins`**: setiap pengguna juga dapat menetapkannya dalam pengaturan pengguna atau lokal mereka sendiri. Lihat [cakupannya dalam referensi pengaturan](/docs/id/settings-reference#syncclaudeaiplugins).

220* **`CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL`**: ini adalah variabel lingkungan yang Anda berikan melalui blok `env` terkelola yang ditunjukkan di bawah [Matikan pembaruan untuk seluruh armada](#turn-updates-off-for-the-whole-fleet).221* **`CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL`**: ini adalah variabel lingkungan yang Anda berikan melalui blok `env` terkelola yang ditunjukkan di bawah [Matikan pembaruan untuk seluruh armada](#turn-updates-off-for-the-whole-fleet).

222* **`allowManagedModsOnly`**: ini adalah opsi pada plugin built-in, yang Anda tetapkan di bawah `pluginConfigs` dalam pengaturan terkelola. Lihat [Stop user-installed mods from loading](/docs/id/plugins/mods/admin#stop-user-installed-mods-from-loading).

221 223 

222Setiap kunci pengaturan di sini memiliki entri dalam [referensi pengaturan](/docs/id/settings-reference).224Setiap kunci pengaturan di sini memiliki entri dalam [referensi pengaturan](/docs/id/settings-reference).

223 225 


457* [Referensi marketplace](/docs/id/plugins/marketplace-reference#marketplace-sources): nilai `source` yang `extraKnownMarketplaces`, `strictKnownMarketplaces`, dan `blockedMarketplaces` terima459* [Referensi marketplace](/docs/id/plugins/marketplace-reference#marketplace-sources): nilai `source` yang `extraKnownMarketplaces`, `strictKnownMarketplaces`, dan `blockedMarketplaces` terima

458* [Host dan pertahankan marketplace](/docs/id/plugins/host-marketplace): jalankan marketplace yang kebijakan Anda arahkan460* [Host dan pertahankan marketplace](/docs/id/plugins/host-marketplace): jalankan marketplace yang kebijakan Anda arahkan

459* [Plugin security dan trust](/docs/id/plugins/security): apa yang dapat dilakukan plugin di mesin dan cara meninjau satu sebelum menginstal461* [Plugin security dan trust](/docs/id/plugins/security): apa yang dapat dilakukan plugin di mesin dan cara meninjau satu sebelum menginstal

462* [Kelola mods untuk organisasi Anda](/docs/id/plugins/mods/admin): matikan atau batasi mods, plugin yang menjalankan JavaScript di dalam Claude Code

460* [Pengaturan terkelola server](/docs/id/server-managed-settings): berikan kunci ini dari konsol admin claude.ai463* [Pengaturan terkelola server](/docs/id/server-managed-settings): berikan kunci ini dari konsol admin claude.ai

461* [Troubleshoot plugins](/docs/id/plugins/troubleshooting#blocked-by-your-organization): pesan yang dilihat pengguna ketika kebijakan memblokir mereka464* [Troubleshoot plugins](/docs/id/plugins/troubleshooting#blocked-by-your-organization): pesan yang dilihat pengguna ketika kebijakan memblokir mereka

Details

30* [**Skills**](/docs/id/plugins/components#skills): instruksi `SKILL.md` yang Claude muat saat relevan, dan yang juga dapat Anda jalankan sebagai perintah30* [**Skills**](/docs/id/plugins/components#skills): instruksi `SKILL.md` yang Claude muat saat relevan, dan yang juga dapat Anda jalankan sebagai perintah

31* [**Agents**](/docs/id/plugins/components#agents): definisi subagent yang dapat didelegasikan Claude31* [**Agents**](/docs/id/plugins/components#agents): definisi subagent yang dapat didelegasikan Claude

32* [**Hooks**](/docs/id/plugins/components#hooks): perintah yang dijalankan Claude Code pada titik dalam siklus hidupnya, seperti setelah setiap edit32* [**Hooks**](/docs/id/plugins/components#hooks): perintah yang dijalankan Claude Code pada titik dalam siklus hidupnya, seperti setelah setiap edit

33* [**A hooks module**](/docs/id/plugins/mods/overview): hooks yang ditulis sebagai fungsi JavaScript, yang juga dapat menggambar pane dan menambahkan perintah. Plugin yang memiliki satu disebut mod

33* [**MCP servers**](/docs/id/plugins/components#mcp-servers): server alat yang terhubung dengan Claude Code saat plugin diaktifkan34* [**MCP servers**](/docs/id/plugins/components#mcp-servers): server alat yang terhubung dengan Claude Code saat plugin diaktifkan

34 35 

35Diagram ini menunjukkan plugin bernama `my-plugin` yang menyimpan satu dari masing-masing komponen tersebut, dan apa yang Anda dapatkan dari setiap file setelah plugin dimuat.36Diagram ini menunjukkan plugin bernama `my-plugin` yang menyimpan skill, agent, hooks, dan server MCP, dan apa yang Anda dapatkan dari setiap file setelah plugin dimuat.

36 37 

37<img src="https://mintcdn.com/claude-code/2Q_GtOEovg5qaBem/images/plugin-directory.svg?fit=max&auto=format&n=2Q_GtOEovg5qaBem&q=85&s=f623b64e82713b830e48174f0a922888" className="dark:hidden" alt="Diagram dalam dua kolom yang digabungkan oleh lima panah lurus. Di sebelah kiri, direktori plugin bernama my-plugin, menyimpan manifes di .claude-plugin/plugin.json, skills/review/SKILL.md, agents/reviewer.md, hooks/hooks.json, .mcp.json, dan komponen lainnya. Di sebelah kanan, apa yang diberikan setiap file dalam sesi Anda: manifes menetapkan nama plugin, my-plugin; skill berjalan sebagai /my-plugin:review; file agent adalah subagent yang dapat didelegasikan Claude; file hooks menyimpan hook yang berjalan pada acara siklus hidup; dan .mcp.json menambahkan server MCP yang memberikan alat Claude." width="760" height="336" data-path="images/plugin-directory.svg" />38<img src="https://mintcdn.com/claude-code/2Q_GtOEovg5qaBem/images/plugin-directory.svg?fit=max&auto=format&n=2Q_GtOEovg5qaBem&q=85&s=f623b64e82713b830e48174f0a922888" className="dark:hidden" alt="Diagram dalam dua kolom yang digabungkan oleh lima panah lurus. Di sebelah kiri, direktori plugin bernama my-plugin, menyimpan manifes di .claude-plugin/plugin.json, skills/review/SKILL.md, agents/reviewer.md, hooks/hooks.json, .mcp.json, dan komponen lainnya. Di sebelah kanan, apa yang diberikan setiap file dalam sesi Anda: manifes menetapkan nama plugin, my-plugin; skill berjalan sebagai /my-plugin:review; file agent adalah subagent yang dapat didelegasikan Claude; file hooks menyimpan hook yang berjalan pada acara siklus hidup; dan .mcp.json menambahkan server MCP yang memberikan alat Claude." width="760" height="336" data-path="images/plugin-directory.svg" />

38 39 

Details

29Plugin dapat membawa konten yang menjalankan kode di mesin Anda dengan hak istimewa pengguna Anda dan konten yang memasuki konteks Claude sebagai instruksi, jadi [tinjau plugin sebelum Anda menginstalnya](#review-a-plugin-before-you-install). Berikut adalah apa yang dapat dilakukan plugin yang diinstal:29Plugin dapat membawa konten yang menjalankan kode di mesin Anda dengan hak istimewa pengguna Anda dan konten yang memasuki konteks Claude sebagai instruksi, jadi [tinjau plugin sebelum Anda menginstalnya](#review-a-plugin-before-you-install). Berikut adalah apa yang dapat dilakukan plugin yang diinstal:

30 30 

31* **Hooks**: [hooks](/docs/id/hooks) plugin berjalan sebagai perintah shell pada titik-titik dalam siklus hidup Claude Code, seperti sebelum atau sesudah panggilan alat.31* **Hooks**: [hooks](/docs/id/hooks) plugin berjalan sebagai perintah shell pada titik-titik dalam siklus hidup Claude Code, seperti sebelum atau sesudah panggilan alat.

32* **Mods**: [mod](/docs/id/plugins/mods/overview) plugin menjalankan JavaScript di dalam Claude Code dengan izin Anda. Untuk membuat daftar apa yang dilakukan mod sebelum Anda menginstalnya, lihat [Tentukan apakah akan mempercayai mod](/docs/id/plugins/mods/overview#decide-whether-to-trust-a-mod).

32* **Server MCP dan LSP**: Claude Code terhubung ke [server MCP](/docs/id/mcp) yang dideklarasikan plugin yang diaktifkan dan memberikan Claude alat mereka. Server MCP stdio berjalan sebagai proses yang dimulai Claude Code di mesin Anda. Claude Code juga memulai server bahasa yang dideklarasikan plugin.33* **Server MCP dan LSP**: Claude Code terhubung ke [server MCP](/docs/id/mcp) yang dideklarasikan plugin yang diaktifkan dan memberikan Claude alat mereka. Server MCP stdio berjalan sebagai proses yang dimulai Claude Code di mesin Anda. Claude Code juga memulai server bahasa yang dideklarasikan plugin.

33* **Direktori `bin/`**: Claude Code menambahkan direktori `bin/` setiap plugin yang diaktifkan ke `PATH` shell alat Bash, sehingga perintah Bash Claude dapat menjalankan executable apa pun di sana.34* **Direktori `bin/`**: Claude Code menambahkan direktori `bin/` setiap plugin yang diaktifkan ke `PATH` shell alat Bash, sehingga perintah Bash Claude dapat menjalankan executable apa pun di sana.

34* **Skills, commands, dan agents**: ini memasuki konteks Claude sebagai instruksi, sehingga mempengaruhi apa yang dilakukan Claude dengan alat yang sudah dimilikinya.35* **Skills, commands, dan agents**: ini memasuki konteks Claude sebagai instruksi, sehingga mempengaruhi apa yang dilakukan Claude dengan alat yang sudah dimilikinya.


37[Aturan izin](/docs/id/permissions) Claude Code dan [sandbox](/docs/id/sandboxing) mencakup panggilan alat yang dibuat Claude, bukan kode yang dijalankan plugin sendiri:38[Aturan izin](/docs/id/permissions) Claude Code dan [sandbox](/docs/id/sandboxing) mencakup panggilan alat yang dibuat Claude, bukan kode yang dijalankan plugin sendiri:

38 39 

39* **Hooks dan proses server**: command hooks menjalankan perintah shell dengan izin pengguna penuh Anda. Claude Code menjalankan hooks dan server MCP di luar sandbox.40* **Hooks dan proses server**: command hooks menjalankan perintah shell dengan izin pengguna penuh Anda. Claude Code menjalankan hooks dan server MCP di luar sandbox.

40* **Panggilan alat Claude**: panggilan ke salah satu alat MCP plugin, dan perintah Bash yang menjalankan executable dari `bin/` plugin, adalah panggilan alat, sehingga aturan izin Anda berlaku untuk mereka.41* **Panggilan alat Claude**: panggilan ke salah satu alat MCP plugin, dan perintah Bash yang menjalankan executable dari `bin/` plugin, adalah panggilan alat, sehingga aturan izin Anda berlaku untuk mereka. Untuk apa yang dapat dilakukan mod terhadap panggilan alat, lihat [Tentukan apakah akan mempercayai mod](/docs/id/plugins/mods/overview#decide-whether-to-trust-a-mod).

41 42 

42Menginstal plugin juga mengaktifkannya, kecuali manifest atau entri marketplace-nya menetapkan [`defaultEnabled: false`](/docs/id/plugins/install#choose-an-install-scope) dan Anda belum mengaktifkannya sendiri.43Menginstal plugin juga mengaktifkannya, kecuali manifest atau entri marketplace-nya menetapkan [`defaultEnabled: false`](/docs/id/plugins/install#choose-an-install-scope) dan Anda belum mengaktifkannya sendiri.

43 44 

Details

201 201 

202Penambahan yang berhasil mencetak `Successfully added marketplace: <name>`.202Penambahan yang berhasil mencetak `Successfully added marketplace: <name>`.

203 203 

204<h3 id="invalid-git-url">

205 `Invalid git URL`

206</h3>

207 

208Anda menambahkan marketplace, menginstal plugin, atau menjalankan pembaruan dari alamat git, dan perintah gagal dengan `Invalid git URL` dalam pesannya.

209 

210Claude Code memeriksa setiap alamat git sebelum menjalankan git. Itu menolak alamat yang protokolnya tidak didukung. Itu juga menolak alamat yang git dapat baca sebagai penamaan server atau folder yang berbeda dari yang ditunjukkan alamat.

211 

212Teks setelah alamat menyebutkan apa yang harus diubah. Tulis ulang alamat seperti yang dikatakan pesan dan jalankan perintah lagi.

213 

214Penolakan yang malah mengatakan `is blocked by enterprise policy` berasal dari pengaturan organisasi Anda. Lihat [Sumber marketplace diblokir oleh kebijakan perusahaan](#marketplace-source-is-blocked-by-enterprise-policy).

215 

204<h3 id="path-does-not-exist">216<h3 id="path-does-not-exist">

205 `Path does not exist: <path>`217 `Path does not exist: <path>`

206</h3>218</h3>


410 422 

411`claude plugin install` di shell Anda mencetak pesan yang berbeda. Untuk plugin yang sudah diinstal di scope target, itu mencetak `Plugin "<name>@<marketplace>" is already installed (scope: user)` dan keluar 0. Jika direktori cache-nya hilang, command yang sama mengunduh ulang-nya.423`claude plugin install` di shell Anda mencetak pesan yang berbeda. Untuk plugin yang sudah diinstal di scope target, itu mencetak `Plugin "<name>@<marketplace>" is already installed (scope: user)` dan keluar 0. Jika direktori cache-nya hilang, command yang sama mengunduh ulang-nya.

412 424 

425<h3 id="plugin-would-share-its-folder">

426 `"<plugin>" was not installed: it would share its folder with "<other>"`

427</h3>

428 

429Anda menginstal plugin melalui `claude plugin install`, `/plugin`, atau saran instalasi dalam sesi, dan Claude Code menolaknya dengan baris ini, atau dengan `would share its saved data with`.

430 

431ID plugin yang ditolak dan ID plugin yang diinstal memetakan ke folder yang sama di disk: mereka sama sekali `.` dan `@` ditulis sebagai `-`. Di macOS dan Windows, id yang berbeda hanya dalam huruf besar memetakan ke folder yang sama juga. Menginstal keduanya akan menempatkan file satu plugin di folder plugin lain, jadi Claude Code menolak dan plugin yang diinstal menyimpan file-nya.

432 

433Pesan menyebutkan jalan keluar:

434 

435* **Plugin lain diinstal**: pesan mengatakan `Only one of the two can be installed.` dan menyebutkan command `claude plugin uninstall`, atau langkah uninstall di `/plugin`, yang menghapus plugin lain. Jalankan, lalu instal lagi. Untuk apa yang uninstall hapus, lihat [What an uninstall deletes and keeps](/docs/id/plugins/cli-reference#what-an-uninstall-deletes-and-keeps).

436* **Kedua id tiba dalam satu instalasi**, seperti plugin dan dependensi yang dibutuhkannya: tidak ada urutan instalasi yang membantu. Hanya maintainer marketplace yang mencantumkan dua plugin dapat memperbaikinya, dengan mengganti nama salah satu. Ketika keduanya berasal dari marketplace berbeda, maintainer salah satu dapat.

437 

413<h3 id="this-plugin-uses-a-source-type-your-claude-code-version-does-not-suppo">438<h3 id="this-plugin-uses-a-source-type-your-claude-code-version-does-not-suppo">

414 `This plugin uses a source type your Claude Code version does not support`439 `This plugin uses a source type your Claude Code version does not support`

415</h3>440</h3>


790* **`URL is unset or invalid`**: opsi `${user_config.*}` yang URL gunakan tidak diatur. Jalankan `/plugin configure <plugin>` untuk mengaturnya815* **`URL is unset or invalid`**: opsi `${user_config.*}` yang URL gunakan tidak diatur. Jalankan `/plugin configure <plugin>` untuk mengaturnya

791* **`has an invalid MCP url`** atau **`headersHelper for MCP server '<server>' references ${user_config.*}`**: konfigurasi plugin itu sendiri yang salah. Perbaiki `url` atau `headersHelper` dalam konfigurasi MCP plugin Anda, atau laporkan ke penulis plugin jika plugin bukan milik Anda. Kasus `headersHelper` memiliki entri sendiri di bawah [plugin command references user\_config](/docs/id/errors#plugin-command-references-user-config)816* **`has an invalid MCP url`** atau **`headersHelper for MCP server '<server>' references ${user_config.*}`**: konfigurasi plugin itu sendiri yang salah. Perbaiki `url` atau `headersHelper` dalam konfigurasi MCP plugin Anda, atau laporkan ke penulis plugin jika plugin bukan milik Anda. Kasus `headersHelper` memiliki entri sendiri di bawah [plugin command references user\_config](/docs/id/errors#plugin-command-references-user-config)

792 817 

818<h4 id="bundled-mcp-server-name-was-not-started-it-needs-configuration">

819 `Bundled MCP server "<name>" was not started: it needs configuration`

820</h4>

821 

822Plugin menyertakan server sebagai [MCPB bundle](/docs/id/plugins/components#include-a-packaged-mcpb-server) yang mendeklarasikan `user_config`, dan pengaturan yang diperlukan tidak memiliki nilai yang disimpan atau nilai yang disimpan gagal validasi bundle itu sendiri, jadi Claude Code melewati memulai server. Sisa plugin berfungsi.

823 

824Pilih plugin di tab **Installed** `/plugin` dan pilih **Configure** untuk memberikan nilai. Setelah Anda menyimpan, `/plugin` menunjukkan `Configuration saved.` dan ditutup, dan Claude Code memuat ulang plugin seperti yang dijelaskan di bawah [Manage installed plugins](/docs/id/plugins/install#manage-installed-plugins). Server dimulai setelah reload itu diterapkan. Sebelum v2.1.285, Claude Code melewati server tanpa menunjukkan baris ini.

825 

793<h4 id="server-is-configured-but-never-connects">826<h4 id="server-is-configured-but-never-connects">

794 Server is configured but never connects827 Server is configured but never connects

795</h4>828</h4>


934 967 

935Plugin Anda mendeklarasikan opsi `userConfig`, tetapi tidak ada dialog konfigurasi yang muncul ketika Anda menginstalnya.968Plugin Anda mendeklarasikan opsi `userConfig`, tetapi tidak ada dialog konfigurasi yang muncul ketika Anda menginstalnya.

936 969 

937Instalasi interaktif menunjukkan dialog, dan command shell mengambil nilai sebagai flag:970Apakah instalasi meminta nilai tergantung pada di mana Anda menjalankannya:

938 971 

939* **`/plugin install` dalam sesi, atau tab Discover di `/plugin`**: dialog adalah bagian dari instalasi interaktif ini972* **`/plugin install` dalam sesi, atau tab Discover di `/plugin`**: dialog adalah bagian dari instalasi interaktif ini

973* **Dialog Manage plugins ekstensi VS Code**: meminta opsi yang tidak diatur sebagai formulir setelah instalasi. Sebelum v2.1.285, menginstal di sana tidak menunjukkan formulir opsi, jadi atur nilai dari sesi terminal dengan `/plugin configure <plugin>@<marketplace>`

940* **`claude plugin install` di shell Anda**: tidak pernah meminta nilai `userConfig`. Itu menyimpan nilai `--config KEY=VALUE` apa pun yang Anda lewatkan, dan ketika opsi tetap tidak diatur itu mencetak `N userConfig options not yet set — run /plugin configure <plugin>@<marketplace> in Claude Code, or pass --config KEY=VALUE.` Ketika salah satu opsi yang tidak diatur diperlukan, `(M required)` mengikuti `not yet set`.974* **`claude plugin install` di shell Anda**: tidak pernah meminta nilai `userConfig`. Itu menyimpan nilai `--config KEY=VALUE` apa pun yang Anda lewatkan, dan ketika opsi tetap tidak diatur itu mencetak `N userConfig options not yet set — run /plugin configure <plugin>@<marketplace> in Claude Code, or pass --config KEY=VALUE.` Ketika salah satu opsi yang tidak diatur diperlukan, `(M required)` mengikuti `not yet set`.

941 975 

942Jika Anda menginstal dari shell, lewatkan nilai dengan `--config`, satu flag per opsi:976Jika Anda menginstal dari shell, lewatkan nilai dengan `--config`, satu flag per opsi:


945claude plugin install my-plugin@my-marketplace --config api_url=https://example.com979claude plugin install my-plugin@my-marketplace --config api_url=https://example.com

946```980```

947 981 

948Ketika setiap opsi diatur, output instalasi tidak membawa baris `not yet set`. Untuk membuka dialog setelahnya, jalankan `/plugin configure my-plugin@my-marketplace` dalam sesi.982Ketika setiap opsi diatur, output instalasi tidak membawa baris `not yet set`.

983 

984Untuk membuka dialog setelahnya, jalankan `/plugin configure my-plugin@my-marketplace` dalam sesi. Dari shell, [`claude plugin configure`](/docs/id/plugins/cli-reference#plugin-configure) menunjukkan opsi mana yang masih tidak diatur dan menyimpan nilai yang disalurkan di stdin. Itu memerlukan Claude Code v2.1.285 atau lebih baru.

949 985 

950Jika Anda melewatkan kunci `--config` yang manifest tidak deklarasikan, plugin masih diinstal, dan command mencetak `⚠ Installed, but --config not applied: --config key "<key>" isn't declared in this plugin's userConfig.` diikuti oleh kunci yang plugin deklarasikan.986Jika Anda melewatkan kunci `--config` yang manifest tidak deklarasikan, plugin masih diinstal, dan command mencetak `⚠ Installed, but --config not applied: --config key "<key>" isn't declared in this plugin's userConfig.` diikuti oleh kunci yang plugin deklarasikan.

951 987 

988Untuk plugin yang mengirimkan [file bundle MCPB](/docs/id/plugins/components#include-a-packaged-mcpb-server) yang mendeklarasikan `user_config` miliknya sendiri, pesan berbunyi `isn't declared in this plugin's userConfig or by its bundled MCP servers.` sebagai gantinya, dan kunci yang dikenal mencakup kunci server itu, ditulis `<server>.<key>`. Bundle yang manifest referensikan dengan URL tidak dibaca pada waktu instalasi, jadi kunci-nya tidak tercantum dan pesan mengatakan untuk mengonfigurasinya di `/plugin`. Mengatur kunci `<server>.<key>` memerlukan Claude Code v2.1.285 atau lebih baru.

989 

952<h3 id="claude-plugin-validate-reports-errors">990<h3 id="claude-plugin-validate-reports-errors">

953 `claude plugin validate` reports errors991 `claude plugin validate` reports errors

954</h3>992</h3>


968| `Path contains ".." which could be a path traversal attempt: <path>` | Path komponen melarikan diri dari direktori plugin. | Gunakan path di dalam root plugin. |1006| `Path contains ".." which could be a path traversal attempt: <path>` | Path komponen melarikan diri dari direktori plugin. | Gunakan path di dalam root plugin. |

969| `Path is a file; skills entries must be directories containing SKILL.md` | Entri `skills` menunjuk pada `SKILL.md` alih-alih direktorinya. | Tunjuk ke direktori induk, atau `.` untuk `SKILL.md` tingkat root. |1007| `Path is a file; skills entries must be directories containing SKILL.md` | Entri `skills` menunjuk pada `SKILL.md` alih-alih direktorinya. | Tunjuk ke direktori induk, atau `.` untuk `SKILL.md` tingkat root. |

970| `No frontmatter block found` atau `YAML frontmatter failed to parse: <error>` | File skill, agent, atau command memiliki frontmatter YAML yang hilang atau tidak valid. | Tambahkan atau perbaiki frontmatter antara pembatas `---`. Dilaporkan saat memvalidasi direktori plugin. |1008| `No frontmatter block found` atau `YAML frontmatter failed to parse: <error>` | File skill, agent, atau command memiliki frontmatter YAML yang hilang atau tidak valid. | Tambahkan atau perbaiki frontmatter antara pembatas `---`. Dilaporkan saat memvalidasi direktori plugin. |

1009| `Plugin name "<name>" is reserved: it passes as one of Anthropic's own` | `name` plugin adalah salah satu dari [nama yang dicadangkan](/docs/id/plugins/manifest-reference#name). | Ubah nama plugin untuk apa yang dilakukannya. |

971| `Unknown field '<key>'` | Manifest memiliki field yang schema tidak tentukan. | Hapus, atau gunakan nama yang pesan sarankan. Claude Code mengabaikan field yang tidak dikenal pada waktu beban. |1010| `Unknown field '<key>'` | Manifest memiliki field yang schema tidak tentukan. | Hapus, atau gunakan nama yang pesan sarankan. Claude Code mengabaikan field yang tidak dikenal pada waktu beban. |

972 1011 

973Jalankan command lagi setelah setiap perbaikan sampai itu mencetak tidak ada kesalahan.1012Jalankan command lagi setelah setiap perbaikan sampai itu mencetak tidak ada kesalahan.

Details

84<span id="loop-provider-differences" />84<span id="loop-provider-differences" />

85 85 

86<Note>86<Note>

87 Interval yang dipilih secara dinamis dan [prompt pemeliharaan bawaan](#run-the-built-in-maintenance-prompt) bekerja di setiap provider, dan dengan [feature-flag fetching](/docs/id/env-vars#features-that-need-feature-flag-fetching) dimatikan. Di Amazon Bedrock, Claude Platform on AWS, Google Cloud's Agent Platform, dan Microsoft Foundry, atau dengan fetching dimatikan, keduanya memerlukan Claude Code v2.1.248 atau lebih baru. Dalam kasus tersebut, pada versi sebelumnya, prompt tanpa interval berjalan pada jadwal tetap 10 menit, dan `/loop` tanpa prompt mencetak pesan penggunaan.87 Interval yang dipilih secara dinamis dan [prompt pemeliharaan bawaan](#run-the-built-in-maintenance-prompt) bekerja di setiap provider, dan dengan [feature-flag fetching](/docs/id/env-vars#features-that-need-feature-flag-fetching) dimatikan. Di Amazon Bedrock, Claude Platform on AWS, Google Cloud's Agent Platform, dan Microsoft Foundry, atau dengan fetching dimatikan, keduanya memerlukan Claude Code v2.1.248 atau lebih baru.

88</Note>88</Note>

89 89 

90<h3 id="run-the-built-in-maintenance-prompt">90<h3 id="run-the-built-in-maintenance-prompt">

Details

87Runner melayani satu owner pada satu waktu. Sesi pertama yang diambil runner mengunci runner ke owner sesi itu, dan runner kemudian menjalankan sesi hanya untuk owner itu, hingga kapasitas yang dikonfigurasi. Siapa owner tergantung pada bagaimana sesi dimulai:87Runner melayani satu owner pada satu waktu. Sesi pertama yang diambil runner mengunci runner ke owner sesi itu, dan runner kemudian menjalankan sesi hanya untuk owner itu, hingga kapasitas yang dikonfigurasi. Siapa owner tergantung pada bagaimana sesi dimulai:

88 88 

89* **Sesi yang dimulai pengguna**: owner adalah akun pengguna itu.89* **Sesi yang dimulai pengguna**: owner adalah akun pengguna itu.

90* **Sesi saluran Claude Tag**: Claude menjalankannya tanpa akun pengguna yang terlampir, jadi owner adalah [agen Claude Tag](https://claude.com/docs/claude-tag/concepts/glossary#agent-identity) yang memulai sesi. Setiap sesi saluran yang dimulai agen itu memiliki owner yang sama, siapa pun yang mengirim pesan Slack, jadi runner yang terkunci ke itu melayani sesi yang dimulai orang berbeda ketika Anda menjalankannya pada `--capacity` di atas satu atau dengan `--drain-grace-sec` positif. Runner yang terkunci ke pengguna tidak pernah mengambil ini, dan runner yang terkunci ke agen Claude Tag tidak pernah mengambil sesi pengguna.90* **Sesi saluran Claude Tag**: Claude menjalankannya tanpa akun pengguna yang terlampir, jadi owner adalah [agen Claude Tag](https://claude.com/docs/claude-tag/concepts/glossary#agent-identity) yang memulai sesi. Setiap sesi saluran yang dimulai agen itu memiliki owner yang sama, siapa pun yang mengirim pesan Slack, jadi runner yang terkunci ke itu melayani sesi yang dimulai orang berbeda ketika Anda menjalankannya pada `--capacity` di atas satu atau dengan `--drain-grace-sec` positif.

91 91 

92Ukuran fleet minimum adalah oleh karena itu jumlah owner yang Anda harapkan aktif sekaligus, menghitung pengguna dan agen Claude Tag.92Ukuran fleet minimum adalah oleh karena itu jumlah owner yang Anda harapkan aktif sekaligus, menghitung pengguna dan agen Claude Tag.

93 93 

Details

163 Pengecualian per-kunci di seluruh sumber terkelola163 Pengecualian per-kunci di seluruh sumber terkelola

164</h3>164</h3>

165 165 

166Tiga jenis kunci adalah pengecualian terhadap aturan tanpa penggabungan:166Kunci-kunci ini adalah pengecualian terhadap aturan tanpa penggabungan:

167 167 

168* **Kunci kunci lintas sumber**: serangkaian kecil kunci, seperti kunci daftar pasir sandbox, [tercantum di halaman pengaturan terkelola](/docs/id/managed-settings#precedence-within-the-managed-tier). Claude Code menghormatinya ketika sumber terkelola yang dikendalikan admin apa pun menetapkannya; tingkat registri HKCU yang dapat ditulis pengguna dikecualikan.168* **Kunci kunci lintas sumber**: serangkaian kecil kunci, seperti kunci daftar pasir sandbox, [tercantum di halaman pengaturan terkelola](/docs/id/managed-settings#precedence-within-the-managed-tier). Claude Code menghormatinya ketika sumber terkelola yang dikendalikan admin apa pun menetapkannya; tingkat registri HKCU yang dapat ditulis pengguna dikecualikan.

169 169 


171* **Blok `env`**: terlepas dari unit telemetri dan variabel routing yang dipasangkan dengan kunci kredensial, keduanya dibahas di bawah, blok ini menggabungkan per kunci di seluruh sumber yang dikendalikan admin. Untuk setiap variabel lingkungan, sumber dengan prioritas tertinggi yang mendefinisikannya menang, dan sumber admin yang lebih rendah mengisi variabel yang sumber yang lebih tinggi biarkan tidak diatur. Entri `env` yang dikelola endpoint oleh karena itu berlaku kapan pun konfigurasi yang dikelola server meninggalkan variabel tersebut tidak diatur, atau saat nilai server yang di-cache untuk itu [ditahan menunggu konfirmasi server](#fetch-and-caching-behavior). Memerlukan Claude Code v2.1.223 atau lebih baru. Sebelum v2.1.223, Claude Code menerapkan blok `env` sumber yang dipilih secara keseluruhan saja.171* **Blok `env`**: terlepas dari unit telemetri dan variabel routing yang dipasangkan dengan kunci kredensial, keduanya dibahas di bawah, blok ini menggabungkan per kunci di seluruh sumber yang dikendalikan admin. Untuk setiap variabel lingkungan, sumber dengan prioritas tertinggi yang mendefinisikannya menang, dan sumber admin yang lebih rendah mengisi variabel yang sumber yang lebih tinggi biarkan tidak diatur. Entri `env` yang dikelola endpoint oleh karena itu berlaku kapan pun konfigurasi yang dikelola server meninggalkan variabel tersebut tidak diatur, atau saat nilai server yang di-cache untuk itu [ditahan menunggu konfirmasi server](#fetch-and-caching-behavior). Memerlukan Claude Code v2.1.223 atau lebih baru. Sebelum v2.1.223, Claude Code menerapkan blok `env` sumber yang dipilih secara keseluruhan saja.

172 * **Unit telemetri**: kunci exporter `OTEL_EXPORTER_OTLP_*`, toggle penangkapan konten `OTEL_LOG_*`, `OTEL_LOGS_EXPORTER`, dan variabel tracing beta `ENABLE_BETA_TRACING_DETAILED` dan `BETA_TRACING_ENDPOINT` mengikuti sumber tertinggi yang menetapkan salah satu dari mereka sebagai unit. Sumber yang mengirimkan kunci kredensial `otelHeadersHelper` juga mengklaim unit, tetapi mendarat variabel ini hanya ketika itu adalah sumber yang dipilih: sumber yang tidak dipilih tetapi mengirimkan kunci tidak berkontribusi pada salah satu dari mereka dan masih memblokir sumber yang lebih rendah dari mengisinya. Bagaimanapun, endpoint exporter dari satu sumber tidak pernah dapat dipasangkan dengan kredensial dari sumber lain.172 * **Unit telemetri**: kunci exporter `OTEL_EXPORTER_OTLP_*`, toggle penangkapan konten `OTEL_LOG_*`, `OTEL_LOGS_EXPORTER`, dan variabel tracing beta `ENABLE_BETA_TRACING_DETAILED` dan `BETA_TRACING_ENDPOINT` mengikuti sumber tertinggi yang menetapkan salah satu dari mereka sebagai unit. Sumber yang mengirimkan kunci kredensial `otelHeadersHelper` juga mengklaim unit, tetapi mendarat variabel ini hanya ketika itu adalah sumber yang dipilih: sumber yang tidak dipilih tetapi mengirimkan kunci tidak berkontribusi pada salah satu dari mereka dan masih memblokir sumber yang lebih rendah dari mengisinya. Bagaimanapun, endpoint exporter dari satu sumber tidak pernah dapat dipasangkan dengan kredensial dari sumber lain.

173 * **Routing yang dipasangkan kredensial**: sumber yang memasangkan variabel routing dengan kunci kredensial yang hanya dipilih-sumber, seperti `apiKeyHelper` atau `otelHeadersHelper`, berkontribusi pada variabel routing tersebut hanya ketika itu memenangkan slot.173 * **Routing yang dipasangkan kredensial**: sumber yang memasangkan variabel routing dengan kunci kredensial yang hanya dipilih-sumber, seperti `apiKeyHelper` atau `otelHeadersHelper`, berkontribusi pada variabel routing tersebut hanya ketika itu memenangkan slot.

174* **`allowedProviders`**: daftar yang diatur pada mesin dan daftar yang dikelola server menggabungkan seperti [catatan Scope entri tersebut](/docs/id/settings-reference#allowedproviders) menyatakan. Memerlukan Claude Code v2.1.285 atau lebih baru

174* **Kunci masuk gateway**: Claude Code tidak pernah membaca [`forceLoginGatewayUrl`](/docs/id/settings-reference#forcelogingatewayurl), [`gatewayInternalNetworks`](/docs/id/settings-reference#gatewayinternalnetworks), atau nilai `"gateway"` dari [`forceLoginMethod`](/docs/id/settings-reference#forceloginmethod) dari pengaturan yang dikelola server, jadi nilai di sana tidak berlaku atau menyembunyikan yang diatur dalam kebijakan MDM atau file pengaturan terkelola. Entri [`managedSourcesBehavior`](/docs/id/settings-reference#managedsourcesbehavior) mengatakan sumber admin mana di mesin yang menyediakannya.175* **Kunci masuk gateway**: Claude Code tidak pernah membaca [`forceLoginGatewayUrl`](/docs/id/settings-reference#forcelogingatewayurl), [`gatewayInternalNetworks`](/docs/id/settings-reference#gatewayinternalnetworks), atau nilai `"gateway"` dari [`forceLoginMethod`](/docs/id/settings-reference#forceloginmethod) dari pengaturan yang dikelola server, jadi nilai di sana tidak berlaku atau menyembunyikan yang diatur dalam kebijakan MDM atau file pengaturan terkelola. Entri [`managedSourcesBehavior`](/docs/id/settings-reference#managedsourcesbehavior) mengatakan sumber admin mana di mesin yang menyediakannya.

175 176 

176<h3 id="fetch-and-caching-behavior">177<h3 id="fetch-and-caching-behavior">

sessions.md +20 −2

Details

29 29 

30`claude --continue` membuka [sesi latar belakang](/docs/id/agent-view) yang telah selesai, tetapi bukan yang masih berjalan; membuka sesi latar belakang yang selesai memerlukan Claude Code v2.1.257 atau lebih baru. Jika percakapan terbaru Anda adalah sesi yang [Anda pindahkan ke latar belakang](/docs/id/agent-view#send-the-session-to-the-background) dan masih berjalan di sana, Claude Code keluar dengan `Your most recent conversation is running in the background` dan ID sesi tersebut. Lampirkan ke sesi dari [`claude agents`](/docs/id/agent-view#attach-to-a-session), atau jalankan `claude --resume` untuk memilih yang lain.30`claude --continue` membuka [sesi latar belakang](/docs/id/agent-view) yang telah selesai, tetapi bukan yang masih berjalan; membuka sesi latar belakang yang selesai memerlukan Claude Code v2.1.257 atau lebih baru. Jika percakapan terbaru Anda adalah sesi yang [Anda pindahkan ke latar belakang](/docs/id/agent-view#send-the-session-to-the-background) dan masih berjalan di sana, Claude Code keluar dengan `Your most recent conversation is running in the background` dan ID sesi tersebut. Lampirkan ke sesi dari [`claude agents`](/docs/id/agent-view#attach-to-a-session), atau jalankan `claude --resume` untuk memilih yang lain.

31 31 

32<span id="resume-a-running-background-session" />

33 

34Ketika percakapan yang Anda lanjutkan dengan `claude --resume` atau `/resume` termasuk dalam [sesi latar belakang](/docs/id/agent-view) yang masih berjalan, Claude Code membuka sesi yang berjalan itu sendiri. Dengan `--bg` pada baris perintah, lanjutan adalah [pengiriman latar belakang](/docs/id/agent-view#from-your-shell) sebagai gantinya. Sebelum v2.1.285, Claude Code menolak dan memberi tahu Anda untuk membuka sesi dengan `claude attach <id>`, atau untuk menghentikannya dengan `claude stop <id>` terlebih dahulu.

35 

36* **Dari shell Anda**: `claude --resume <session>` menjalankan [`claude attach`](/docs/id/agent-view#attach-to-a-session) pada sesi tersebut di terminal yang sama daripada memuat transkrip itu sendiri. Prompt yang Anda teruskan pada baris perintah, seperti dalam `claude --resume <session> "check the tests too"`, masuk ke sesi sebagai giliran berikutnya terlebih dahulu, dan Claude Code mencetak `Sent your prompt to the background session (<id>); opening it…` sebelum melampirkan. `claude -p --resume <session> "prompt"` yang diketik di terminal melakukan hal yang sama, jadi `-p` tidak membuat jalankan tersebut non-interaktif.

37 

38 Claude Code tidak membuka sesi ketika baris perintah memiliki salah satu dari ini:

39 

40 * Input atau output yang disalurkan atau dialihkan

41 * Bendera yang mengonfigurasi sesi, seperti `--permission-mode`, `--model`, atau `--settings`

42 * Bendera yang membaca output, seperti `--output-format json` atau `--json-schema`

43 * Bendera yang membatasi atau memundurkan jalankan, seperti `--max-turns` atau `--max-budget-usd`

44 

45 Dengan salah satu dari ini, atau ketika [tampilan agen dimatikan](/docs/id/agent-view#turn-off-agent-view), Claude Code tidak mengirim apa pun dan keluar dengan status 1, mencetak bahwa sesi berjalan di latar belakang bersama dengan perintah `claude attach <id>` yang membukanya, atau memberi tahu Anda untuk menemukannya dalam `claude agents` ketika tidak dapat menentukan ID. Tambahkan `--fork-session` untuk melanjutkan salinan percakapan sebagai gantinya. Untuk melanjutkan percakapan itu sendiri dalam sesi Anda sendiri, dengan bendera Anda diterapkan, jalankan `claude stop <id>` dan kemudian ulangi perintah.

46 

47 Prompt yang dimulai dengan `/` atau `!` tidak dikirim, begitu juga dengan prompt apa pun sementara sesi menunggu jawaban Anda atas pertanyaan. Dalam kedua kasus Claude Code tidak membuka sesi, dan pesan tersebut menyertakan `Your prompt was not sent to it` dengan alasan.

48* **Dari dalam sesi**: `/resume` memindahkan percakapan saat ini Anda ke latar belakang dan melampirkan terminal ini ke sesi yang berjalan, mencetak `Opening "<title>", running in the background (<id>)`. Tekan `←` pada prompt kosong untuk kembali ke tampilan agen, yang juga mencantumkan percakapan yang Anda tinggalkan. Ketika percakapan saat ini tidak dapat pindah ke latar belakang, misalnya karena Anda sudah dilampirkan ke sesi latar belakang atau persistensi sesi dimatikan, `/resume` mencetak perintah `claude attach` untuk dijalankan sebagai gantinya.

49 

32Anda dapat menjalankan `claude --resume <session-id>` dari direktori mana pun: Claude Code mencari ID di direktori proyek saat ini dan git worktrees-nya terlebih dahulu, kemudian di setiap proyek lain di mesin ini, sehingga menemukan sesi yang dimulai di tempat lain atau dipindahkan dengan [`/cd`](/docs/id/commands). Pencarian lintas proyek menyelesaikan ID hanya ketika tepat satu proyek lain menyimpan transkrip dengan pesan untuknya, sehingga duplikat yang disalin tangan membuat Claude Code melaporkan tidak ditemukan daripada melanjutkan salinan arbitrer. Jika tidak ada sesi yang disimpan cocok dengan ID, Claude Code melaporkan `No conversation found with session ID: <session-id>`. Sebelum v2.1.223, pencarian berhenti di direktori proyek saat ini dan git worktrees-nya, jadi Anda harus melanjutkan dari direktori tempat sesi terakhir bekerja.50Anda dapat menjalankan `claude --resume <session-id>` dari direktori mana pun: Claude Code mencari ID di direktori proyek saat ini dan git worktrees-nya terlebih dahulu, kemudian di setiap proyek lain di mesin ini, sehingga menemukan sesi yang dimulai di tempat lain atau dipindahkan dengan [`/cd`](/docs/id/commands). Pencarian lintas proyek menyelesaikan ID hanya ketika tepat satu proyek lain menyimpan transkrip dengan pesan untuknya, sehingga duplikat yang disalin tangan membuat Claude Code melaporkan tidak ditemukan daripada melanjutkan salinan arbitrer. Jika tidak ada sesi yang disimpan cocok dengan ID, Claude Code melaporkan `No conversation found with session ID: <session-id>`. Sebelum v2.1.223, pencarian berhenti di direktori proyek saat ini dan git worktrees-nya, jadi Anda harus melanjutkan dari direktori tempat sesi terakhir bekerja.

33 51 

34<h3 id="what-a-resumed-session-restores">52<h3 id="what-a-resumed-session-restores">

35 Apa yang dipulihkan sesi yang dilanjutkan53 Apa yang dipulihkan sesi yang dilanjutkan

36</h3>54</h3>

37 55 

38Sesi yang dilanjutkan memulihkan percakapan bersama dengan status yang disimpan di dalamnya:56Ketika Claude Code memuat percakapan dari transkrip-nya, sesi yang dilanjutkan memulihkan percakapan bersama dengan status yang disimpan di dalamnya:

39 57 

40* Riwayat percakapan: riwayat lengkap, termasuk panggilan alat dan hasil. Alat yang masih berjalan ketika proses sebelumnya berakhir, misalnya dalam kerusakan, tidak selesai atau berjalan lagi ketika Anda melanjutkan. Claude melihat panggilan yang ditandai sebagai terputus sebelum hasilnya dicatat dan diberitahu untuk memeriksa apakah itu berlaku sebelum menjalankannya lagi, kecuali [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/id/env-vars#variables) diatur. Sebelum v2.1.281, Claude Code menghapus panggilan yang terputus dari percakapan atau menampilkannya kepada Claude sebagai yang Anda interupsi.58* Riwayat percakapan: riwayat lengkap, termasuk panggilan alat dan hasil. Alat yang masih berjalan ketika proses sebelumnya berakhir, misalnya dalam kerusakan, tidak selesai atau berjalan lagi ketika Anda melanjutkan. Claude melihat panggilan yang ditandai sebagai terputus sebelum hasilnya dicatat dan diberitahu untuk memeriksa apakah itu berlaku sebelum menjalankannya lagi, kecuali [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/id/env-vars#variables) diatur. Sebelum v2.1.281, Claude Code menghapus panggilan yang terputus dari percakapan atau menampilkannya kepada Claude sebagai yang Anda interupsi.

41* Model: sesi berlanjut pada model yang digunakannya. Model tidak dipulihkan ketika telah pensiun atau tidak diizinkan oleh `availableModels`, ketika bendera `--model` atau variabel lingkungan keluarga `ANTHROPIC_MODEL` memilih satu saat peluncuran, atau pada penyedia yang menggunakan ID penerapan khusus penyedia, seperti [Amazon Bedrock, Google Cloud's Agent Platform, dan Microsoft Foundry](/docs/id/third-party-integrations); lihat [konfigurasi model](/docs/id/model-config#setting-your-model) untuk urutan resolusi.59* Model: sesi berlanjut pada model yang digunakannya. Model tidak dipulihkan ketika telah pensiun atau tidak diizinkan oleh `availableModels`, ketika bendera `--model` atau variabel lingkungan keluarga `ANTHROPIC_MODEL` memilih satu saat peluncuran, atau pada penyedia yang menggunakan ID penerapan khusus penyedia, seperti [Amazon Bedrock, Google Cloud's Agent Platform, dan Microsoft Foundry](/docs/id/third-party-integrations); lihat [konfigurasi model](/docs/id/model-config#setting-your-model) untuk urutan resolusi.


51 Mode izin saat melanjutkan69 Mode izin saat melanjutkan

52</h4>70</h4>

53 71 

54Mode izin mana yang dimulai Claude Code dalam sesi yang dilanjutkan tergantung pada cara Anda melanjutkan:72Kasus-kasus di bawah berlaku ketika Claude Code memuat percakapan dari transkrip-nya; ketika Anda [membuka sesi latar belakang yang masih berjalan](#resume-a-running-background-session) sebagai gantinya, sesi tersebut mempertahankan mode izin yang ada di dalamnya.

55 73 

56* Terminal: `claude --continue`, `claude --resume <session-id>`, atau `claude --resume <name>` ketika nama cocok dengan satu sesi, tanpa `-p`. Claude Code memulihkan mode izin yang ada di sesi, kecuali dalam kasus di tabel. Teruskan `--permission-mode` atau `--dangerously-skip-permissions` untuk mengganti mode yang dipulihkan.74* Terminal: `claude --continue`, `claude --resume <session-id>`, atau `claude --resume <name>` ketika nama cocok dengan satu sesi, tanpa `-p`. Claude Code memulihkan mode izin yang ada di sesi, kecuali dalam kasus di tabel. Teruskan `--permission-mode` atau `--dangerously-skip-permissions` untuk mengganti mode yang dipulihkan.

57* Non-interaktif: `claude -p --resume` atau `claude -p --continue`. Claude Code memulai jalankan dalam mode izin yang akan dimulai oleh jalankan `claude -p` baru, kecuali sesi yang berakhir dalam mode rencana dilanjutkan dalam mode rencana di bawah [kondisi di bawah](#resume-in-plan-mode-with-p).75* Non-interaktif: `claude -p --resume` atau `claude -p --continue`. Claude Code memulai jalankan dalam mode izin yang akan dimulai oleh jalankan `claude -p` baru, kecuali sesi yang berakhir dalam mode rencana dilanjutkan dalam mode rencana di bawah [kondisi di bawah](#resume-in-plan-mode-with-p).

Details

599| [`allowedChannelPlugins`](#allowedchannelplugins) | Ganti daftar izin default [plugin channel](/docs/id/channels#restrict-which-channel-plugins-can-run) yang dapat mendorong pesan | Plugins and skills | Managed |599| [`allowedChannelPlugins`](#allowedchannelplugins) | Ganti daftar izin default [plugin channel](/docs/id/channels#restrict-which-channel-plugins-can-run) yang dapat mendorong pesan | Plugins and skills | Managed |

600| [`allowedHttpHookUrls`](#allowedhttphookurls) | Batasi URL mana yang dapat ditargetkan oleh [HTTP hooks](/docs/id/hooks) | Hooks and automation | Any file |600| [`allowedHttpHookUrls`](#allowedhttphookurls) | Batasi URL mana yang dapat ditargetkan oleh [HTTP hooks](/docs/id/hooks) | Hooks and automation | Any file |

601| [`allowedMcpServers`](#allowedmcpservers) | Daftar izin server [MCP](/docs/id/mcp) mana yang dapat ditambahkan pengguna | MCP | Any file |601| [`allowedMcpServers`](#allowedmcpservers) | Daftar izin server [MCP](/docs/id/mcp) mana yang dapat ditambahkan pengguna | MCP | Any file |

602| [`allowedProviders`](#allowedproviders) | Batasi [penyedia API](/docs/id/third-party-integrations) mana yang dapat digunakan mesin | Authentication and providers | Managed |

602| [`allowManagedHooksOnly`](#allowmanagedhooksonly) | Jalankan hanya [hooks](/docs/id/hooks) yang organisasi Anda terapkan | Hooks and automation | Managed |603| [`allowManagedHooksOnly`](#allowmanagedhooksonly) | Jalankan hanya [hooks](/docs/id/hooks) yang organisasi Anda terapkan | Hooks and automation | Managed |

603| [`allowManagedMcpServersOnly`](#allowmanagedmcpserversonly) | Buat daftar izin [MCP](/docs/id/mcp) yang dikelola menjadi satu-satunya yang berlaku | MCP | Managed |604| [`allowManagedMcpServersOnly`](#allowmanagedmcpserversonly) | Buat daftar izin [MCP](/docs/id/mcp) yang dikelola menjadi satu-satunya yang berlaku | MCP | Managed |

604| [`allowManagedPermissionRulesOnly`](#allowmanagedpermissionrulesonly) | Buat [pengaturan yang dikelola](/docs/id/managed-settings) menjadi satu-satunya sumber pengaturan [aturan izin](/docs/id/permissions#managed-settings) | Permission settings | Managed |605| [`allowManagedPermissionRulesOnly`](#allowmanagedpermissionrulesonly) | Buat [pengaturan yang dikelola](/docs/id/managed-settings) menjadi satu-satunya sumber pengaturan [aturan izin](/docs/id/permissions#managed-settings) | Permission settings | Managed |

605| [`alwaysThinkingEnabled`](#alwaysthinkingenabled) | Matikan [pemikiran yang diperluas](/docs/id/model-config#extended-thinking) untuk setiap sesi | Model dan respons | Any file |606| [`alwaysThinkingEnabled`](#alwaysthinkingenabled) | Matikan [pemikiran yang diperluas](/docs/id/model-config#extended-thinking) untuk setiap sesi | Model dan respons | Any file |

606| [`apiKeyHelper`](#apikeyhelper) | Hasilkan [kredensial API](/docs/id/authentication#credential-management) dengan perintah Anda sendiri | Authentication and providers | Any file |607| [`apiKeyHelper`](#apikeyhelper) | Hasilkan [kredensial API](/docs/id/authentication#credential-management) dengan perintah Anda sendiri | Authentication and providers | Any file |

607| [`askUserQuestionTimeout`](#askuserquestiontimeout) | Biarkan pertanyaan yang tidak terjawab [lanjut otomatis](/docs/id/tools-reference#question-auto-continue-timeout) setelah waktu idle | Interface and terminal | User or managed |608| [`askUserQuestionTimeout`](#askuserquestiontimeout) | Biarkan pertanyaan yang tidak terjawab [lanjut otomatis](/docs/id/tools-reference#question-auto-continue-timeout) setelah waktu idle | Interface and terminal | User or managed |

609| [`appendPlugins`](#appendplugins) | Jalankan [mods](/docs/id/plugins/mods/admin) organisasi Anda setelah setiap mod yang dipasang pengguna | Plugins and skills | User or managed |

608| [`attribution`](#attribution) | Sesuaikan atribusi yang Claude Code tambahkan ke commit dan pull request | Git and attribution | Any file |610| [`attribution`](#attribution) | Sesuaikan atribusi yang Claude Code tambahkan ke commit dan pull request | Git and attribution | Any file |

609| [`attribution.commit`](#attribution-commit) | Ubah atau sembunyikan trailer yang Claude Code tambahkan ke commit | Git and attribution | Any file |611| [`attribution.commit`](#attribution-commit) | Ubah atau sembunyikan trailer yang Claude Code tambahkan ke commit | Git and attribution | Any file |

610| [`attribution.pr`](#attribution-pr) | Ubah atau sembunyikan baris atribusi dalam deskripsi pull request | Git and attribution | Any file |612| [`attribution.pr`](#attribution-pr) | Ubah atau sembunyikan baris atribusi dalam deskripsi pull request | Git and attribution | Any file |


729| [`policyHelper.timeoutMs`](#policyhelper-timeoutms) | Atur berapa lama Claude Code menunggu [pembantu](/docs/id/managed-settings#compute-the-policy-with-a-helper-program) | Enterprise and managed settings | Managed |731| [`policyHelper.timeoutMs`](#policyhelper-timeoutms) | Atur berapa lama Claude Code menunggu [pembantu](/docs/id/managed-settings#compute-the-policy-with-a-helper-program) | Enterprise and managed settings | Managed |

730| [`preferredNotifChannel`](#preferrednotifchannel) | Pilih [bel terminal atau notifikasi desktop](/docs/id/terminal-config#get-a-terminal-bell-or-notification) untuk penyelesaian tugas | Remote, desktop, and notifications | Any file |732| [`preferredNotifChannel`](#preferrednotifchannel) | Pilih [bel terminal atau notifikasi desktop](/docs/id/terminal-config#get-a-terminal-bell-or-notification) untuk penyelesaian tugas | Remote, desktop, and notifications | Any file |

731| [`prefersReducedMotion`](#prefersreducedmotion) | [Kurangi atau matikan](/docs/id/accessibility#accessibility-settings) animasi spinner, shimmer, dan flash | Interface and terminal | Any file |733| [`prefersReducedMotion`](#prefersreducedmotion) | [Kurangi atau matikan](/docs/id/accessibility#accessibility-settings) animasi spinner, shimmer, dan flash | Interface and terminal | Any file |

734| [`prependPlugins`](#prependplugins) | Jalankan [mods](/docs/id/plugins/mods/admin) organisasi Anda sebelum setiap mod yang dipasang pengguna | Plugins and skills | User or managed |

732| [`processWrapper`](#processwrapper) | Jalankan proses latar belakang Claude Code melalui [peluncur perusahaan](/docs/id/corporate-launcher) di macOS dan Linux | Agents, sessions, and worktrees | User or managed |735| [`processWrapper`](#processwrapper) | Jalankan proses latar belakang Claude Code melalui [peluncur perusahaan](/docs/id/corporate-launcher) di macOS dan Linux | Agents, sessions, and worktrees | User or managed |

733| [`promptCacheTtl`](#promptcachettl) | Pilih [masa pakai cache prompt](/docs/id/prompt-caching#cache-lifetime) untuk percakapan utama | Model dan respons | Any file |736| [`promptCacheTtl`](#promptcachettl) | Pilih [masa pakai cache prompt](/docs/id/prompt-caching#cache-lifetime) untuk percakapan utama | Model dan respons | Any file |

734| [`promptSuggestionEnabled`](#promptsuggestionenabled) | Sembunyikan [saran prompt](/docs/id/interactive-mode#prompt-suggestions) yang dikelabu dalam kotak input | Interface and terminal | Any file |737| [`promptSuggestionEnabled`](#promptsuggestionenabled) | Sembunyikan [saran prompt](/docs/id/interactive-mode#prompt-suggestions) yang dikelabu dalam kotak input | Interface and terminal | Any file |


3675 `spinnerTipsOverride`3678 `spinnerTipsOverride`

3676</h3>3679</h3>

3677 3680 

3678Tambahkan tips Anda sendiri ke [spinner tips](#spinnertipsenabled) yang Claude Code tampilkan saat Claude bekerja, atau ganti tips bawaan dengan milik Anda. Claude Code menempatkan tips Anda dalam rotasi yang sama dengan yang bawaan: ia memilih tip yang belum ditampilkan paling lama, melewati tips masih dalam cooldown mereka, dan memecahkan seri berdasarkan prioritas.3681Tambahkan tips Anda sendiri ke [spinner tips](#spinnertipsenabled) yang Claude Code tampilkan saat Claude bekerja, atau ganti tips bawaan dengan milik Anda. Claude Code menempatkan tips Anda dalam rotasi yang sama dengan yang bawaan.

3679 3682 

3680Jika Anda mengatur [`spinnerTipsEnabled`](#spinnertipsenabled) ke `false`, Claude Code menyembunyikan semua tips, milik Anda termasuk.3683Jika Anda mengatur [`spinnerTipsEnabled`](#spinnertipsenabled) ke `false`, Claude Code menyembunyikan semua tips, milik Anda termasuk.

3681 3684 


3683* **Type**: object dengan field `tips`, `tipsFile`, `label`, dan `excludeDefault`, masing-masing opsional3686* **Type**: object dengan field `tips`, `tipsFile`, `label`, dan `excludeDefault`, masing-masing opsional

3684* **Default**: unset, jadi Claude Code hanya menampilkan tips bawaan3687* **Default**: unset, jadi Claude Code hanya menampilkan tips bawaan

3685 3688 

3686Objek tip, `tipsFile`, `label`, dan aturan baris Scope yang pengaturan proyek dan lokal hanya berkontribusi string biasa memerlukan Claude Code v2.1.247 atau lebih baru. Pada versi sebelumnya, `excludeDefault` file proyek atau lokal juga berlaku.3689Objek tip, `tipsFile`, `label`, dan aturan baris Scope yang pengaturan proyek dan lokal hanya berkontribusi string biasa memerlukan Claude Code v2.1.247 atau lebih baru.

3687 3690 

3688Setiap entri `tips` adalah string biasa atau objek dengan field ini:3691Setiap entri `tips` adalah string biasa atau objek dengan field ini:

3689 3692 


4305Ketika Anda menyetelnya ke `true`, Claude Code mengubah hook dan perintah seperti hook mana yang dimuat:4308Ketika Anda menyetelnya ke `true`, Claude Code mengubah hook dan perintah seperti hook mana yang dimuat:

4306 4309 

4307* **Hook terkelola dan SDK berjalan**: hooks dari pengaturan terkelola dan hooks yang didaftarkan [Agent SDK](/docs/id/agent-sdk/overview) dalam proses4310* **Hook terkelola dan SDK berjalan**: hooks dari pengaturan terkelola dan hooks yang didaftarkan [Agent SDK](/docs/id/agent-sdk/overview) dalam proses

4308* **Hook plugin yang dipaksa diaktifkan berjalan**: hooks dari plugin yang dipaksa diaktifkan oleh pengaturan terkelola Anda melalui [`enabledPlugins`](#enabledplugins). Claude Code cocok dengan ID `plugin@marketplace` lengkap, jadi plugin dengan nama yang sama dari marketplace berbeda tetap diblokir. Ini memungkinkan Anda mendistribusikan hooks yang telah diverifikasi melalui marketplace organisasi sambil memblokir segalanya4311* **Hook plugin yang dipaksa diaktifkan berjalan**: hooks dari plugin yang dipaksa diaktifkan oleh pengaturan terkelola Anda melalui [`enabledPlugins`](#enabledplugins). Claude Code cocok dengan ID `plugin@marketplace` lengkap, jadi plugin dengan nama yang sama dari marketplace berbeda tetap diblokir. Ini memungkinkan Anda mendistribusikan hooks yang telah diverifikasi melalui marketplace organisasi sambil memblokir segalanya. Sebuah [mod](/docs/id/plugins/mods/overview) dalam plugin seperti itu dimuat hanya ketika [dihitung sebagai milik organisasi Anda](/docs/id/plugins/mods/admin#install-your-organizations-mods)

4309* **Segalanya yang lain diblokir**: user, project, dan local hooks, hooks dari plugin lain, dan hooks yang dideklarasikan dalam frontmatter agent4312* **Segalanya yang lain diblokir**: user, project, dan local hooks, hooks dan mods dari plugin lain yang diinstal, dan hooks yang dideklarasikan dalam frontmatter agent. [Mods yang tertanam dalam Claude Code](/docs/id/plugins/mods/overview#mods-built-into-claude-code) terus berjalan. Untuk memblokir hanya mods pengguna, atur [`allowManagedModsOnly`](/docs/id/plugins/mods/admin#set-options-on-the-built-in-guard) sebagai gantinya.

4310* **Plugin bersumber perintah dinonaktifkan**: Claude Code juga menonaktifkan plugin dengan [`command` source](/docs/id/plugins/marketplace-reference#command-plugin-source), termasuk plugin yang dipaksa diaktifkan dalam `enabledPlugins` terkelola, kecuali Anda menyetel [`disableCommandPluginSources`](#disablecommandpluginsources) ke `false` secara eksplisit4313* **Plugin bersumber perintah dinonaktifkan**: Claude Code juga menonaktifkan plugin dengan [`command` source](/docs/id/plugins/marketplace-reference#command-plugin-source), termasuk plugin yang dipaksa diaktifkan dalam `enabledPlugins` terkelola, kecuali Anda menyetel [`disableCommandPluginSources`](#disablecommandpluginsources) ke `false` secara eksplisit

4311* **Perintah marketplace `headersHelper` diblokir**: Claude Code juga memblokir marketplace [`headersHelper` commands](/docs/id/plugins/host-marketplace#authenticate-archive-downloads) kecuali [`disableCommandPluginSources`](#disablecommandpluginsources) secara eksplisit diatur ke `false`, kecuali untuk marketplace yang dideklarasikan oleh pengaturan terkelola itu sendiri. Memerlukan Claude Code v2.1.238 atau lebih baru4314* **Perintah marketplace `headersHelper` diblokir**: Claude Code juga memblokir marketplace [`headersHelper` commands](/docs/id/plugins/host-marketplace#authenticate-archive-downloads) kecuali [`disableCommandPluginSources`](#disablecommandpluginsources) secara eksplisit diatur ke `false`, kecuali untuk marketplace yang dideklarasikan oleh pengaturan terkelola itu sendiri. Memerlukan Claude Code v2.1.238 atau lebih baru

4312* **Status line dan file suggestion menyempit ke pengaturan terkelola**: Claude Code membaca [`statusLine`](/docs/id/statusline), [`fileSuggestion`](#filesuggestion), dan [`subagentStatusLine`](/docs/id/statusline#subagent-status-lines) dari pengaturan terkelola saja, mengikuti [status line dan file suggestion gates](#status-line-and-file-suggestion-gates)4315* **Status line dan file suggestion menyempit ke pengaturan terkelola**: Claude Code membaca [`statusLine`](/docs/id/statusline), [`fileSuggestion`](#filesuggestion), dan [`subagentStatusLine`](/docs/id/statusline#subagent-status-lines) dari pengaturan terkelola saja, mengikuti [status line dan file suggestion gates](#status-line-and-file-suggestion-gates)


5046* **`git`**: URL git apa pun, dengan `url`5049* **`git`**: URL git apa pun, dengan `url`

5047* **`url`**: URL langsung ke file `marketplace.json`, dengan `url` dan `headers` opsional dan `headersHelper` untuk akses yang diautentikasi. `headersHelper` menamai perintah yang mencetak header yang nilainya terlalu berumur pendek untuk dicantumkan dalam `headers`, dan memerlukan Claude Code v2.1.238 atau lebih baru5050* **`url`**: URL langsung ke file `marketplace.json`, dengan `url` dan `headers` opsional dan `headersHelper` untuk akses yang diautentikasi. `headersHelper` menamai perintah yang mencetak header yang nilainya terlalu berumur pendek untuk dicantumkan dalam `headers`, dan memerlukan Claude Code v2.1.238 atau lebih baru

5048* **`file`**: jalur lokal ke file `marketplace.json`, dengan `path`5051* **`file`**: jalur lokal ke file `marketplace.json`, dengan `path`

5049* **`directory`**: jalur filesystem lokal, dengan `path`, hanya untuk pengembangan5052* **`directory`**: jalur filesystem lokal, dengan `path`. Gunakan untuk pengembangan, atau untuk marketplace yang organisasi Anda [terapkan ke setiap mesin](/docs/id/plugins/mods/admin#install-your-organizations-mods).

5050* **`settings`**: marketplace inline yang dideklarasikan langsung dalam file pengaturan tanpa repositori yang dihosting, dengan `name` dan `plugins`5053* **`settings`**: marketplace inline yang dideklarasikan langsung dalam file pengaturan tanpa repositori yang dihosting, dengan `name` dan `plugins`

5051 5054 

5052Tipe sumber `git` bekerja dengan layanan hosting git apa pun, termasuk GitLab dan Bitbucket yang dihosting sendiri. Claude Code mengkloning repositori dengan autentikasi yang sama yang `git clone` gunakan di mesin itu: pembantu kredensial yang dikonfigurasi atau kunci SSH. Token penyedia seperti `GITHUB_TOKEN` hanya berlaku melalui pembantu kredensial yang membacanya. Lihat [Private repositories](/docs/id/plugins/host-marketplace#grant-access-to-a-private-marketplace) untuk detail setup.5055Tipe sumber `git` bekerja dengan layanan hosting git apa pun, termasuk GitLab dan Bitbucket yang dihosting sendiri. Claude Code mengkloning repositori dengan autentikasi yang sama yang `git clone` gunakan di mesin itu: pembantu kredensial yang dikonfigurasi atau kunci SSH. Token penyedia seperti `GITHUB_TOKEN` hanya berlaku melalui pembantu kredensial yang membacanya. Lihat [Private repositories](/docs/id/plugins/host-marketplace#grant-access-to-a-private-marketplace) untuk detail setup.


5133 5136 

5134Claude Code mengabaikan entri proyek dan lokal karena menggantikan nilai ini ke dalam konfigurasi hook plugin, MCP, dan LSP, dan repositori yang dikloning tidak boleh dapat menyediakannya. Sebelum v2.1.207, pengaturan proyek dan lokal juga dibaca.5137Claude Code mengabaikan entri proyek dan lokal karena menggantikan nilai ini ke dalam konfigurasi hook plugin, MCP, dan LSP, dan repositori yang dikloning tidak boleh dapat menyediakannya. Sebelum v2.1.207, pengaturan proyek dan lokal juga dibaca.

5135 5138 

5139<h3 id="prependplugins">

5140 `prependPlugins`

5141</h3>

5142 

5143Cantumkan managed plugins yang [mods](/docs/id/plugins/mods/overview)-nya berjalan sebelum setiap mod yang diinstal pengguna, dalam urutan yang tercantum. Ketika Anda mengatur kunci ini dalam managed settings, namai `sec-default@builtin` dalam daftar untuk menjaga guard bawaan. Dalam managed settings, Claude Code melewatkan id yang plugin-nya tidak dihitung sebagai organisasi Anda. Lihat [Install your organization's mods and set the order](/docs/id/plugins/mods/admin#install-your-organizations-mods) untuk kondisi tersebut dan bagaimana dua kunci pengurutan bekerja bersama.

5144 

5145* **Scope**: [`User or managed`](#scopes). Claude Code membaca kunci dari managed settings. Itu membaca kunci dari user settings hanya pada mesin tanpa managed settings, untuk pengguna yang tidak masuk dengan paket Team atau Enterprise. Itu mengabaikan kunci dalam pengaturan proyek dan lokal dan dalam file `--settings`.

5146* **Type**: array string `plugin-name@marketplace-name`

5147* **Default**: unset

5148 

5149```json managed-settings.json theme={null}

5150{

5151 "extraKnownMarketplaces": {

5152 "acme-tools": {

5153 "source": { "source": "directory", "path": "/opt/acme/claude-plugins" }

5154 }

5155 },

5156 "enabledPlugins": { "acme-guard@acme-tools": true },

5157 "prependPlugins": ["acme-guard@acme-tools", "sec-default@builtin"]

5158}

5159```

5160 

5161<h3 id="appendplugins">

5162 `appendPlugins`

5163</h3>

5164 

5165Cantumkan managed plugins yang [mods](/docs/id/plugins/mods/overview)-nya berjalan setelah setiap mod yang diinstal pengguna, dalam urutan yang tercantum. Id yang tercantum dalam `prependPlugins` dan `appendPlugins` adalah prepended. Dalam managed settings, Claude Code melewatkan id yang plugin-nya tidak [dihitung sebagai organisasi Anda](/docs/id/plugins/mods/admin#install-your-organizations-mods).

5166 

5167* **Scope**: [`User or managed`](#scopes). Claude Code membaca kunci dari managed settings. Itu membaca kunci dari user settings hanya pada mesin tanpa managed settings, untuk pengguna yang tidak masuk dengan paket Team atau Enterprise. Itu mengabaikan kunci dalam pengaturan proyek dan lokal dan dalam file `--settings`.

5168* **Type**: array string `plugin-name@marketplace-name`

5169* **Default**: unset

5170 

5171```json managed-settings.json theme={null}

5172{

5173 "extraKnownMarketplaces": {

5174 "acme-tools": {

5175 "source": { "source": "directory", "path": "/opt/acme/claude-plugins" }

5176 }

5177 },

5178 "enabledPlugins": { "acme-audit@acme-tools": true },

5179 "appendPlugins": ["acme-audit@acme-tools"]

5180}

5181```

5182 

5136<h2 id="mcp">5183<h2 id="mcp">

5137 MCP5184 MCP

5138</h2>5185</h2>


5653 5700 

5654* **Scope**: [`Any file`](#scopes)5701* **Scope**: [`Any file`](#scopes)

5655* **Type**: Boolean5702* **Type**: Boolean

5656 * `true`: Claude Code mematikan alat Artifact untuk setiap sesi yang berlaku file, dan tidak ada file lain yang menghidupkannya kembali. Sebelum v2.1.242, file dengan prioritas lebih tinggi dapat mengganti `true` file yang lebih rendah daripada kunci bertindak sebagai kunci5703 * `true`: Claude Code mematikan alat Artifact untuk setiap sesi yang berlaku file, dan tidak ada file lain yang menghidupkannya kembali

5657 * `false`: diabaikan; untuk membiarkan alat tetap aktif, hapus kunci5704 * `false`: diabaikan; untuk membiarkan alat tetap aktif, hapus kunci

5658* **Default**: unset, jadi alat mengikuti [availability](/docs/id/artifacts#availability) akun Anda5705* **Default**: unset, jadi alat mengikuti [availability](/docs/id/artifacts#availability) akun Anda

5659* **Per-session overrides**: [`CLAUDE_CODE_DISABLE_ARTIFACT`](/docs/id/env-vars) diatur ke `1` mematikan alat untuk satu sesi5706* **Per-session overrides**: [`CLAUDE_CODE_DISABLE_ARTIFACT`](/docs/id/env-vars) diatur ke `1` mematikan alat untuk satu sesi


5740}5787}

5741```5788```

5742 5789 

5743Sementara sumber selain pengaturan pengguna Anda sendiri membuat alat tetap mati, Claude Code menyembunyikan baris **Artifacts** di `/config`, karena menghidupkannya di sana tidak akan mengubah apa pun. [Disable artifacts](/docs/id/artifacts#disable-artifacts) mencantumkan setiap cara untuk mematikan alat. Sebelum v2.1.242, Claude Code mengabaikan kunci ini dalam pengaturan proyek dan lokal, dan file yang lebih tinggi dalam [stack prioritas](/docs/id/settings#settings-precedence) dapat menghidupkan alat kembali atas file yang lebih rendah.5790Sementara sumber selain pengaturan pengguna Anda sendiri membuat alat tetap mati, Claude Code menyembunyikan baris **Artifacts** di `/config`, karena menghidupkannya di sana tidak akan mengubah apa pun. [Disable artifacts](/docs/id/artifacts#disable-artifacts) mencantumkan setiap cara untuk mematikan alat.

5744 5791 

5745<h3 id="inputneedednotifenabled">5792<h3 id="inputneedednotifenabled">

5746 `inputNeededNotifEnabled`5793 `inputNeededNotifEnabled`


5879 5926 

5880Berikan kredensial melalui skrip pembantu dan, untuk organisasi, paksa metode login atau organisasi. Lihat [Autentikasi](/docs/id/authentication).5927Berikan kredensial melalui skrip pembantu dan, untuk organisasi, paksa metode login atau organisasi. Lihat [Autentikasi](/docs/id/authentication).

5881 5928 

5929<h3 id="allowedproviders">

5930 `allowedProviders`

5931</h3>

5932 

5933Daftarkan layanan yang mesin dapat jangkau Claude melaluinya, seperti API Anthropic, Amazon Bedrock, atau gateway LLM. Sesi pada penyedia yang tidak terdaftar ditolak saat startup, saat login, dan ketika berikutnya menghubungi API, jadi beralih ke penyedia yang tidak terdaftar di tengah sesi juga ditolak. [Pesan penolakan](/docs/id/errors#managed-settings-dont-allow-this-api-provider) menyebutkan apa yang memilih penyedia dan langkah-langkah untuk melanjutkan. Memerlukan Claude Code v2.1.285 atau lebih baru.

5934 

5935* **Scope**: [`Managed`](#scopes). Daftar yang sumber admin mesin sendiri atur, kebijakan MDM dan file pengaturan terkelola, terus berlaku ketika pengaturan terkelola server juga memberikan satu: sesi kemudian dapat menggunakan hanya penyedia di kedua daftar, jadi daftar terkelola server dapat mempersempit apa yang mesin izinkan tetapi tidak pernah memperluas. Sumber mesin mana yang `allowedProviders` dihitung mengikuti [bagaimana Claude Code menggabungkan sumber terkelola](/docs/id/managed-settings#how-claude-code-combines-managed-sources). Daftar yang disampaikan melalui pengaturan terkelola server saja mencapai hanya sesi yang [mengambil pengaturan terkelola server](/docs/id/server-managed-settings#platform-availability).

5936* **Type**: array string, masing-masing satu dari:

5937 * `"anthropic"`: API Anthropic di host Anthropic sendiri, melalui sign-in claude.ai atau Console atau kunci API. Pasangkan dengan [`forceLoginMethod`](#forceloginmethod) atau [`forceLoginOrgUUID`](#forceloginorguuid) untuk juga membatasi sign-in

5938 * `"bedrock"`: [Amazon Bedrock](/docs/id/amazon-bedrock)

5939 * `"vertex"`: [Agent Platform Google Cloud](/docs/id/google-vertex-ai), sebelumnya Vertex AI

5940 * `"foundry"`: [Microsoft Foundry](/docs/id/microsoft-foundry)

5941 * `"anthropicAws"`: [Claude Platform di AWS](/docs/id/claude-platform-on-aws)

5942 * `"mantle"`: endpoint [Mantle](/docs/id/amazon-bedrock#use-the-mantle-endpoint) Amazon Bedrock. Sesi yang [menjalankan Mantle bersama Invoke API](/docs/id/amazon-bedrock#run-mantle-alongside-the-invoke-api) menggunakan kedua penyedia, jadi daftarkan `"bedrock"` dan `"mantle"` bersama untuk itu

5943 * `"customEndpoint"`: API Anthropic atau API penyedia cloud yang dikirim ke host lain, seperti [gateway LLM](/docs/id/llm-gateway) yang dinamai oleh `ANTHROPIC_BASE_URL`, variabel `ANTHROPIC_*_BASE_URL` penyedia, atau nilai `ANTHROPIC_FOUNDRY_RESOURCE` yang bukan nama sumber daya bare. Claude Code mengakuinya hanya untuk nilai yang tepat yang blok [`env`](#env) terkelola pin

5944 * `"gateway"`: sign-in [Cloud gateway](/docs/id/claude-apps-gateway)

5945* **Default**: tidak diatur, jadi penyedia apa pun dapat digunakan

5946 

5947```json managed-settings.json theme={null}

5948{

5949 "allowedProviders": ["anthropic", "bedrock"]

5950}

5951```

5952 

5953Entri setiap penyedia cloud berarti layanan penyedia itu sendiri, termasuk endpoint regional, FIPS, dan privatnya.

5954 

5955Entri yang Claude Code tidak kenali sebagai nama penyedia dijatuhkan dan dilaporkan, dan sisa daftar tetap diberlakukan. Dengan daftar kosong, atau daftar yang setiap entrinya tidak dikenali, Claude Code menolak setiap penyedia dan tidak memulai di mesin.

5956 

5957<h4 id="endpoints-that-need-a-pin-in-managed-env">

5958 Endpoint yang memerlukan pin dalam `env` terkelola

5959</h4>

5960 

5961Pin adalah nilai variabel endpoint yang diatur dalam blok [`env`](#env) terkelola. Ketika sesi mengirimkan lalu lintas penyedia ke tempat lain selain layanan penyedia itu sendiri, Claude Code mengakuinya hanya jika nilai sesi sama dengan pin. Endpoint ini memerlukan satu:

5962 

5963* **Sesi `"customEndpoint"`**: variabel yang menyebutkan host, seperti `ANTHROPIC_BASE_URL`

5964* **Amazon Bedrock**: variabel `AWS_ENDPOINT_URL`, `AWS_ENDPOINT_URL_BEDROCK`, dan `AWS_ENDPOINT_URL_BEDROCK_RUNTIME` SDK AWS ketika mereka menunjuk di luar layanan Bedrock sendiri. Sesi tetap di bawah `"bedrock"` daripada `"customEndpoint"`

5965* **URL sign-in gateway**: sesi tetap di bawah `"gateway"`, dan [`forceLoginGatewayUrl`](#forcelogingatewayurl) juga dihitung sebagai pin

5966 

5967Blok `env` mana yang dihitung sebagai pin tergantung pada tempat daftar diatur:

5968 

5969* **Sumber administrator di mesin mengatur daftar**: hanya blok `env` dari sumber administrator mesin sendiri yang dihitung

5970* **Hanya pengaturan terkelola server yang mengatur daftar**: nilai `env` dalam pengaturan terkelola server itu juga dihitung

5971 

5972Daftar tidak menilai variabel kredensial dan tenancy penyedia cloud atau jalur jaringan, seperti `HTTPS_PROXY` dan pengaturan sertifikat. Atur ini untuk armada dalam blok `env` terkelola.

5973 

5882<h3 id="apikeyhelper">5974<h3 id="apikeyhelper">

5883 `apiKeyHelper`5975 `apiKeyHelper`

5884</h3>5976</h3>


6401| :- | :- | :- |6493| :- | :- | :- |

6402| Lists | Menggabungkan entri dari setiap sumber | [`permissions.allow`](#permissions-allow), [`sandbox.network.allowedDomains`](#sandbox-network-alloweddomains), dan kunci daftar lainnya |6494| Lists | Menggabungkan entri dari setiap sumber | [`permissions.allow`](#permissions-allow), [`sandbox.network.allowedDomains`](#sandbox-network-alloweddomains), dan kunci daftar lainnya |

6403| Locks | Menerapkan nilai paling ketat yang ditetapkan sumber apa pun. Ketika tidak ada sumber yang menetapkan nilai ketat, menerapkan nilai yang lebih longgar hanya dari sumber tertinggi | [`allowManagedPermissionRulesOnly`](#allowmanagedpermissionrulesonly), [`permissions.disableBypassPermissionsMode`](#permissions-disablebypasspermissionsmode), dan kunci boolean atau enum lock lainnya |6495| Locks | Menerapkan nilai paling ketat yang ditetapkan sumber apa pun. Ketika tidak ada sumber yang menetapkan nilai ketat, menerapkan nilai yang lebih longgar hanya dari sumber tertinggi | [`allowManagedPermissionRulesOnly`](#allowmanagedpermissionrulesonly), [`permissions.disableBypassPermissionsMode`](#permissions-disablebypasspermissionsmode), dan kunci boolean atau enum lock lainnya |

6404| Restriction allowlists | Mengambil daftar utuh dari sumber tertinggi yang menetapkannya, tanpa menambahkan entri dari sumber yang lebih rendah. Ketika sumber tertinggi tidak menetapkannya, mengambilnya utuh dari sumber berikutnya ke bawah | [`availableModels`](#availablemodels), [`allowedMcpServers`](#allowedmcpservers), [`strictKnownMarketplaces`](#strictknownmarketplaces), [`allowedChannelPlugins`](#allowedchannelplugins), dan rantai [`fallbackModel`](#fallbackmodel) |6496| Restriction allowlists | Mengambil daftar utuh dari sumber tertinggi yang menetapkannya, tanpa menambahkan entri dari sumber yang lebih rendah. Ketika sumber tertinggi tidak menetapkannya, mengambilnya utuh dari sumber berikutnya ke bawah | [`availableModels`](#availablemodels), [`allowedMcpServers`](#allowedmcpservers), [`allowedProviders`](#allowedproviders), [`strictKnownMarketplaces`](#strictknownmarketplaces), [`allowedChannelPlugins`](#allowedchannelplugins), dan rantai [`fallbackModel`](#fallbackmodel) |

6405| Values taken whole | Mengambil nilai utuh dari sumber tertinggi yang menetapkannya, tanpa menggabungkan entri atau bidang dari sumber yang lebih rendah. Ketika sumber tertinggi tidak menetapkannya, mengambilnya utuh dari sumber berikutnya ke bawah | [`sandbox.credentials.awsPairs`](#sandbox-credentials-awspairs), [`sandbox.ripgrep`](#sandbox-ripgrep) |6497| Values taken whole | Mengambil nilai utuh dari sumber tertinggi yang menetapkannya, tanpa menggabungkan entri atau bidang dari sumber yang lebih rendah. Ketika sumber tertinggi tidak menetapkannya, mengambilnya utuh dari sumber berikutnya ke bawah | [`sandbox.credentials.awsPairs`](#sandbox-credentials-awspairs), [`sandbox.ripgrep`](#sandbox-ripgrep) |

6406| Provided MCP servers | Menggabungkan nama server dari setiap sumber. Ketika dua sumber menetapkan nama yang sama, menerapkan entri utuh sumber yang lebih tinggi | [`managedMcpServers`](#managedmcpservers) |6498| Provided MCP servers | Menggabungkan nama server dari setiap sumber. Ketika dua sumber menetapkan nama yang sama, menerapkan entri utuh sumber yang lebih tinggi | [`managedMcpServers`](#managedmcpservers) |

6407| Read from the highest-priority source only | Membaca kunci hanya dari sumber prioritas tertinggi yang membawa kunci kebijakan, jadi nilai sumber yang lebih rendah diabaikan bahkan ketika sumber tertinggi tidak menetapkan apa pun | [`apiKeyHelper`](#apikeyhelper), [`awsAuthRefresh`](#awsauthrefresh), [`awsCredentialExport`](#awscredentialexport), [`gcpAuthRefresh`](#gcpauthrefresh), [`otelHeadersHelper`](#otelheadershelper), `proxyAuthHelper`, [`forceLoginOrgUUID`](#forceloginorguuid), nilai `"claudeai"` dan `"console"` dari [`forceLoginMethod`](#forceloginmethod), [`parentSettingsBehavior`](#parentsettingsbehavior), [`modelPicker`](#modelpicker), [`policyHelper`](#policyhelper), [`permissions.defaultMode`](#permissions-defaultmode) |6499| Read from the highest-priority source only | Membaca kunci hanya dari sumber prioritas tertinggi yang membawa kunci kebijakan, jadi nilai sumber yang lebih rendah diabaikan bahkan ketika sumber tertinggi tidak menetapkan apa pun | [`apiKeyHelper`](#apikeyhelper), [`awsAuthRefresh`](#awsauthrefresh), [`awsCredentialExport`](#awscredentialexport), [`gcpAuthRefresh`](#gcpauthrefresh), [`otelHeadersHelper`](#otelheadershelper), `proxyAuthHelper`, [`forceLoginOrgUUID`](#forceloginorguuid), nilai `"claudeai"` dan `"console"` dari [`forceLoginMethod`](#forceloginmethod), [`parentSettingsBehavior`](#parentsettingsbehavior), [`modelPicker`](#modelpicker), [`policyHelper`](#policyhelper), [`permissions.defaultMode`](#permissions-defaultmode) |


6415* **[`policyHelper`](#policyhelper)**: Claude Code menghormatinya hanya ketika sumber tertinggi yang membawa kunci kebijakan adalah kebijakan MDM atau file pengaturan terkelola, jadi di bawah pengaturan yang dikelola server tidak berlaku.6507* **[`policyHelper`](#policyhelper)**: Claude Code menghormatinya hanya ketika sumber tertinggi yang membawa kunci kebijakan adalah kebijakan MDM atau file pengaturan terkelola, jadi di bawah pengaturan yang dikelola server tidak berlaku.

6416* **[`modelOverrides`](#modeloverrides)**: berpasangan dengan `availableModels`. Claude Code mengambil `modelOverrides` dari sumber tertinggi yang menetapkannya, kecuali sumber yang lebih tinggi menetapkan `availableModels` tanpa `modelOverrides`. Dalam hal itu, ia mengabaikan `modelOverrides` dari setiap sumber.6508* **[`modelOverrides`](#modeloverrides)**: berpasangan dengan `availableModels`. Claude Code mengambil `modelOverrides` dari sumber tertinggi yang menetapkannya, kecuali sumber yang lebih tinggi menetapkan `availableModels` tanpa `modelOverrides`. Dalam hal itu, ia mengabaikan `modelOverrides` dari setiap sumber.

6417* **[`forceLoginGatewayUrl`](#forcelogingatewayurl), [`gatewayInternalNetworks`](#gatewayinternalnetworks), dan nilai `"gateway"` dari [`forceLoginMethod`](#forceloginmethod)**: Claude Code tidak pernah membaca salah satu dari mereka dari pengaturan yang dikelola server, jadi nilai di sana tidak berlaku atau menyembunyikan yang ditetapkan dalam kebijakan MDM atau file pengaturan terkelola. Di antara sumber admin di mesin, hanya yang tertinggi-peringkat yang membawa kunci kebijakan yang menyediakannya, terlepas dari apakah pengaturan yang dikelola server juga ada.6509* **[`forceLoginGatewayUrl`](#forcelogingatewayurl), [`gatewayInternalNetworks`](#gatewayinternalnetworks), dan nilai `"gateway"` dari [`forceLoginMethod`](#forceloginmethod)**: Claude Code tidak pernah membaca salah satu dari mereka dari pengaturan yang dikelola server, jadi nilai di sana tidak berlaku atau menyembunyikan yang ditetapkan dalam kebijakan MDM atau file pengaturan terkelola. Di antara sumber admin di mesin, hanya yang tertinggi-peringkat yang membawa kunci kebijakan yang menyediakannya, terlepas dari apakah pengaturan yang dikelola server juga ada.

6510* **[`allowedProviders`](#allowedproviders)**: setelah aturan tabel, daftar mesin itu sendiri masih membatasi hasilnya, seperti yang dinyatakan catatan Scope entrinya.

6418 6511 

6419Untuk mengonfirmasi sumber mana yang digabungkan di mesin, jalankan `/status` dan [baca baris `Setting sources`](/docs/id/managed-settings#read-the-source-in-/status).6512Untuk mengonfirmasi sumber mana yang digabungkan di mesin, jalankan `/status` dan [baca baris `Setting sources`](/docs/id/managed-settings#read-the-source-in-/status).

6420 6513 

skills.md +1 −1

Details

740 740 

741* **Direktori kerja**: Claude Code menjalankan setiap perintah di direktori kerja shell sesi saat ini. Direktori itu bergerak ketika Claude menjalankan `cd`. Gunakan [`${CLAUDE_SKILL_DIR}` atau `${CLAUDE_PROJECT_DIR}`](#available-string-substitutions) dalam path yang harus diselesaikan dengan cara yang sama setiap kali.741* **Direktori kerja**: Claude Code menjalankan setiap perintah di direktori kerja shell sesi saat ini. Direktori itu bergerak ketika Claude menjalankan `cd`. Gunakan [`${CLAUDE_SKILL_DIR}` atau `${CLAUDE_PROJECT_DIR}`](#available-string-substitutions) dalam path yang harus diselesaikan dengan cara yang sama setiap kali.

742* **stderr**: dengan shell `bash` default, Claude Code menggabungkan stderr ke stdout. Apa pun yang ditulis perintah ke stderr muncul dalam teks yang diinjeksi.742* **stderr**: dengan shell `bash` default, Claude Code menggabungkan stderr ke stdout. Apa pun yang ditulis perintah ke stderr muncul dalam teks yang diinjeksi.

743* **Timeout**: setiap perintah berjalan di bawah [timeout](/docs/id/tools-reference#timeout-and-output-limits) default 2 menit alat Bash. Ketika alat Bash [memindahkan perintah yang kedaluwarsa ke latar belakang](/docs/id/tools-reference#background-commands), skill masih dirender. Teks yang diinjeksi melaporkan perpindahan dan menamai tugas latar belakang dan file yang mengumpulkan output perintah. Ketika perintah adalah salah satu yang tidak pernah dilatarbelakangkan oleh alat Bash, Claude Code membunuhnya pada timeout. Kegagalan itu [membatalkan invokasi](#when-an-injected-command-fails).743* **Timeout**: setiap perintah berjalan di bawah [timeout](/docs/id/tools-reference#timeout-and-output-limits) default 2 menit alat Bash. Ketika alat Bash [memindahkan perintah yang kedaluwarsa ke latar belakang](/docs/id/tools-reference#foreground-commands-that-move-to-the-background), skill masih dirender. Teks yang diinjeksi melaporkan perpindahan dan menamai tugas latar belakang dan file yang mengumpulkan output perintah. Ketika perintah adalah salah satu yang tidak pernah dilatarbelakangkan oleh alat Bash, Claude Code membunuhnya pada timeout. Kegagalan itu [membatalkan invokasi](#when-an-injected-command-fails).

744* **Ukuran output**: output melampaui batas inline alat Bash tiba sebagai jalur file plus pratinjau singkat, bukan teks terpotong. [Output limits](/docs/id/tools-reference#output-limits) mencakup batas dan cara menyesuaikan setiap batas.744* **Ukuran output**: output melampaui batas inline alat Bash tiba sebagai jalur file plus pratinjau singkat, bukan teks terpotong. [Output limits](/docs/id/tools-reference#output-limits) mencakup batas dan cara menyesuaikan setiap batas.

745 745 

746Alat PowerShell menerapkan perilaku timeout, backgrounding, dan output-ceiling yang sama pada perintah yang dijalankannya. Lihat bagian [alat PowerShell](/docs/id/tools-reference#powershell-tool) untuk spesifikasinya.746Alat PowerShell menerapkan perilaku timeout, backgrounding, dan output-ceiling yang sama pada perintah yang dijalankannya. Lihat bagian [alat PowerShell](/docs/id/tools-reference#powershell-tool) untuk spesifikasinya.

statusline.md +7 −7

Details

20Berikut adalah contoh [baris status multi-baris](#display-multiple-lines) yang menampilkan informasi git di baris pertama dan bilah konteks berkode warna di baris kedua.20Berikut adalah contoh [baris status multi-baris](#display-multiple-lines) yang menampilkan informasi git di baris pertama dan bilah konteks berkode warna di baris kedua.

21 21 

22<Frame>22<Frame>

23 <img src="https://mintcdn.com/claude-code/nibzesLaJVh4ydOq/images/statusline-multiline.png?fit=max&auto=format&n=nibzesLaJVh4ydOq&q=85&s=60f11387658acc9ff75158ae85f2ac87" alt="Baris status multi-baris yang menampilkan nama model, direktori, cabang git di baris pertama, dan bilah kemajuan penggunaan konteks dengan biaya dan durasi di baris kedua" width="776" height="212" data-path="images/statusline-multiline.png" />23 <img src="https://mintcdn.com/claude-code/HDAmBwgbrZVk0pOt/images/statusline-multiline.png?fit=max&auto=format&n=HDAmBwgbrZVk0pOt&q=85&s=a9d0a2fe8e446d80b1abc46da3f93270" alt="Baris status multi-baris yang menampilkan nama model, direktori, cabang git di baris pertama, dan bilah kemajuan penggunaan konteks dengan biaya dan durasi di baris kedua" width="1224" height="262" data-path="images/statusline-multiline.png" />

24</Frame>24</Frame>

25 25 

26Halaman ini memandu Anda melalui [pengaturan baris status dasar](#set-up-a-status-line), menjelaskan [bagaimana aliran data](#how-status-lines-work) dari Claude Code ke skrip Anda, mencantumkan [semua bidang yang dapat Anda tampilkan](#available-data), dan menyediakan [contoh siap pakai](#examples) untuk pola umum seperti status git, pelacakan biaya, dan bilah kemajuan.26Halaman ini memandu Anda melalui [pengaturan baris status dasar](#set-up-a-status-line), menjelaskan [bagaimana aliran data](#how-status-lines-work) dari Claude Code ke skrip Anda, mencantumkan [semua bidang yang dapat Anda tampilkan](#available-data), dan menyediakan [contoh siap pakai](#examples) untuk pola umum seperti status git, pelacakan biaya, dan bilah kemajuan.


93Contoh-contoh ini menggunakan skrip Bash, yang berfungsi di macOS dan Linux. Di Windows, lihat [Konfigurasi Windows](#windows-configuration) untuk contoh PowerShell dan Git Bash.93Contoh-contoh ini menggunakan skrip Bash, yang berfungsi di macOS dan Linux. Di Windows, lihat [Konfigurasi Windows](#windows-configuration) untuk contoh PowerShell dan Git Bash.

94 94 

95<Frame>95<Frame>

96 <img src="https://mintcdn.com/claude-code/nibzesLaJVh4ydOq/images/statusline-quickstart.png?fit=max&auto=format&n=nibzesLaJVh4ydOq&q=85&s=696445e59ca0059213250651ad23db6b" alt="Baris status yang menampilkan nama model, direktori, dan persentase konteks" width="726" height="164" data-path="images/statusline-quickstart.png" />96 <img src="https://mintcdn.com/claude-code/HDAmBwgbrZVk0pOt/images/statusline-quickstart.png?fit=max&auto=format&n=HDAmBwgbrZVk0pOt&q=85&s=88a7eab9c1038dd098ee8e284d96b7e6" alt="Baris status yang menampilkan nama model, direktori, dan persentase konteks" width="1224" height="224" data-path="images/statusline-quickstart.png" />

97</Frame>97</Frame>

98 98 

99<Steps>99<Steps>


444Tampilkan model saat ini dan penggunaan jendela konteks dengan bilah kemajuan visual. Setiap skrip membaca JSON dari stdin, mengekstrak bidang `used_percentage`, dan membangun bilah 10 karakter di mana blok yang diisi (▓) mewakili penggunaan:444Tampilkan model saat ini dan penggunaan jendela konteks dengan bilah kemajuan visual. Setiap skrip membaca JSON dari stdin, mengekstrak bidang `used_percentage`, dan membangun bilah 10 karakter di mana blok yang diisi (▓) mewakili penggunaan:

445 445 

446<Frame>446<Frame>

447 <img src="https://mintcdn.com/claude-code/nibzesLaJVh4ydOq/images/statusline-context-window-usage.png?fit=max&auto=format&n=nibzesLaJVh4ydOq&q=85&s=15b58ab3602f036939145dde3165c6f7" alt="Baris status yang menampilkan nama model dan bilah kemajuan dengan persentase" width="448" height="152" data-path="images/statusline-context-window-usage.png" />447 <img src="https://mintcdn.com/claude-code/HDAmBwgbrZVk0pOt/images/statusline-context-window-usage.png?fit=max&auto=format&n=HDAmBwgbrZVk0pOt&q=85&s=f3918a549912dc47e90f2b69e68bc847" alt="Baris status yang menampilkan nama model dan bilah kemajuan dengan persentase" width="1224" height="224" data-path="images/statusline-context-window-usage.png" />

448</Frame>448</Frame>

449 449 

450<CodeGroup>450<CodeGroup>


513Tampilkan cabang git dengan indikator berkode warna untuk file yang dipentingkan dan dimodifikasi. Skrip ini menggunakan [kode escape ANSI](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors) untuk warna terminal: `\033[32m` adalah hijau, `\033[33m` adalah kuning, dan `\033[0m` mengatur ulang ke default.513Tampilkan cabang git dengan indikator berkode warna untuk file yang dipentingkan dan dimodifikasi. Skrip ini menggunakan [kode escape ANSI](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors) untuk warna terminal: `\033[32m` adalah hijau, `\033[33m` adalah kuning, dan `\033[0m` mengatur ulang ke default.

514 514 

515<Frame>515<Frame>

516 <img src="https://mintcdn.com/claude-code/nibzesLaJVh4ydOq/images/statusline-git-context.png?fit=max&auto=format&n=nibzesLaJVh4ydOq&q=85&s=e656f34f90d1d9a1d0e220988914345f" alt="Baris status yang menampilkan model, direktori, cabang git, dan indikator berkode warna untuk file yang dipentingkan dan dimodifikasi" width="742" height="178" data-path="images/statusline-git-context.png" />516 <img src="https://mintcdn.com/claude-code/HDAmBwgbrZVk0pOt/images/statusline-git-context.png?fit=max&auto=format&n=HDAmBwgbrZVk0pOt&q=85&s=f13c190724d9ec7188c17cd2f98b7bf4" alt="Baris status yang menampilkan model, direktori, cabang git, dan indikator berkode warna untuk file yang dipentingkan dan dimodifikasi" width="1224" height="224" data-path="images/statusline-git-context.png" />

517</Frame>517</Frame>

518 518 

519Setiap skrip memeriksa apakah direktori saat ini adalah repositori git, menghitung file yang dipentingkan dan dimodifikasi, dan menampilkan indikator berkode warna:519Setiap skrip memeriksa apakah direktori saat ini adalah repositori git, menghitung file yang dipentingkan dan dimodifikasi, dan menampilkan indikator berkode warna:


611Setiap skrip memformat biaya sebagai mata uang dan mengonversi milidetik ke menit dan detik:611Setiap skrip memformat biaya sebagai mata uang dan mengonversi milidetik ke menit dan detik:

612 612 

613<Frame>613<Frame>

614 <img src="https://mintcdn.com/claude-code/nibzesLaJVh4ydOq/images/statusline-cost-tracking.png?fit=max&auto=format&n=nibzesLaJVh4ydOq&q=85&s=e3444a51fe6f3440c134bd5f1f08ad29" alt="Baris status yang menampilkan nama model, biaya sesi, dan durasi" width="588" height="180" data-path="images/statusline-cost-tracking.png" />614 <img src="https://mintcdn.com/claude-code/HDAmBwgbrZVk0pOt/images/statusline-cost-tracking.png?fit=max&auto=format&n=HDAmBwgbrZVk0pOt&q=85&s=925f7024c3b38be0f0eca63564bfb52f" alt="Baris status yang menampilkan nama model, biaya sesi, dan durasi" width="1224" height="224" data-path="images/statusline-cost-tracking.png" />

615</Frame>615</Frame>

616 616 

617<CodeGroup>617<CodeGroup>


672Skrip Anda dapat menampilkan beberapa baris untuk membuat tampilan yang lebih kaya.672Skrip Anda dapat menampilkan beberapa baris untuk membuat tampilan yang lebih kaya.

673 673 

674<Frame>674<Frame>

675 <img src="https://mintcdn.com/claude-code/nibzesLaJVh4ydOq/images/statusline-multiline.png?fit=max&auto=format&n=nibzesLaJVh4ydOq&q=85&s=60f11387658acc9ff75158ae85f2ac87" alt="Baris status multi-baris yang menampilkan nama model, direktori, cabang git di baris pertama, dan bilah kemajuan penggunaan konteks dengan biaya dan durasi di baris kedua" width="776" height="212" data-path="images/statusline-multiline.png" />675 <img src="https://mintcdn.com/claude-code/HDAmBwgbrZVk0pOt/images/statusline-multiline.png?fit=max&auto=format&n=HDAmBwgbrZVk0pOt&q=85&s=a9d0a2fe8e446d80b1abc46da3f93270" alt="Baris status multi-baris yang menampilkan nama model, direktori, cabang git di baris pertama, dan bilah kemajuan penggunaan konteks dengan biaya dan durasi di baris kedua" width="1224" height="262" data-path="images/statusline-multiline.png" />

676</Frame>676</Frame>

677 677 

678Contoh ini menggabungkan beberapa teknik: warna berbasis ambang batas (hijau di bawah 70%, kuning 70-89%, merah 90%+), bilah kemajuan, dan informasi cabang git. Setiap pernyataan `print` atau `echo` membuat baris terpisah:678Contoh ini menggabungkan beberapa teknik: warna berbasis ambang batas (hijau di bawah 70%, kuning 70-89%, merah 90%+), bilah kemajuan, dan informasi cabang git. Setiap pernyataan `print` atau `echo` membuat baris terpisah:


781Contoh ini membuat tautan yang dapat diklik ke repositori GitHub Anda. Tahan Cmd (macOS) atau Ctrl (Windows/Linux) dan klik untuk membuka tautan di browser Anda.781Contoh ini membuat tautan yang dapat diklik ke repositori GitHub Anda. Tahan Cmd (macOS) atau Ctrl (Windows/Linux) dan klik untuk membuka tautan di browser Anda.

782 782 

783<Frame>783<Frame>

784 <img src="https://mintcdn.com/claude-code/nibzesLaJVh4ydOq/images/statusline-links.png?fit=max&auto=format&n=nibzesLaJVh4ydOq&q=85&s=4bcc6e7deb7cf52f41ab85a219b52661" alt="Baris status yang menampilkan tautan yang dapat diklik ke repositori GitHub" width="726" height="198" data-path="images/statusline-links.png" />784 <img src="https://mintcdn.com/claude-code/HDAmBwgbrZVk0pOt/images/statusline-links.png?fit=max&auto=format&n=HDAmBwgbrZVk0pOt&q=85&s=4778a144a28cb498c99d5fa018bb374a" alt="Baris status yang menampilkan tautan yang dapat diklik ke repositori GitHub" width="1224" height="224" data-path="images/statusline-links.png" />

785</Frame>785</Frame>

786 786 

787Setiap skrip mendapatkan URL remote git, mengonversi format SSH ke HTTPS, dan membungkus nama repo dalam kode escape OSC 8. Versi Bash menggunakan `printf '%b'` yang menginterpretasikan escape backslash lebih andal daripada `echo -e` di berbagai shell:787Setiap skrip mendapatkan URL remote git, mengonversi format SSH ke HTTPS, dan membungkus nama repo dalam kode escape OSC 8. Versi Bash menggunakan `printf '%b'` yang menginterpretasikan escape backslash lebih andal daripada `echo -e` di berbagai shell:

Details

253 253 

254Tim keamanan dapat mengonfigurasi izin terkelola untuk apa yang Claude Code diizinkan dan tidak diizinkan untuk lakukan, yang tidak dapat ditimpa oleh konfigurasi lokal. [Pelajari lebih lanjut](/docs/id/security).254Tim keamanan dapat mengonfigurasi izin terkelola untuk apa yang Claude Code diizinkan dan tidak diizinkan untuk lakukan, yang tidak dapat ditimpa oleh konfigurasi lokal. [Pelajari lebih lanjut](/docs/id/security).

255 255 

256Untuk membatasi opsi penyebaran mana yang dapat digunakan mesin terkelola, atur [`allowedProviders`](/docs/id/settings-reference#allowedproviders) dalam pengaturan terkelola. Misalnya, `["bedrock"]` memungkinkan Amazon Bedrock dan tidak ada yang lain; armada Bedrock yang juga mengaktifkan titik akhir Mantle mencantumkan `"mantle"` juga. Entri mengatakan variabel titik akhir mana yang juga memerlukan pin `env` terkelola. Memerlukan Claude Code v2.1.285 atau lebih baru.

257 

256<h3 id="leverage-mcp-for-integrations">258<h3 id="leverage-mcp-for-integrations">

257 Manfaatkan MCP untuk integrasi259 Manfaatkan MCP untuk integrasi

258</h3>260</h3>

tools-reference.md +42 −27

Details

164Aktifkan virtualenv atau lingkungan conda Anda sebelum meluncurkan Claude Code. Untuk membuat variabel lingkungan bertahan di seluruh perintah Bash, atur [`CLAUDE_ENV_FILE`](/docs/id/env-vars) ke skrip shell sebelum meluncurkan Claude Code, atau gunakan [hook SessionStart](/docs/id/hooks#persist-environment-variables) untuk mengisinya secara dinamis.164Aktifkan virtualenv atau lingkungan conda Anda sebelum meluncurkan Claude Code. Untuk membuat variabel lingkungan bertahan di seluruh perintah Bash, atur [`CLAUDE_ENV_FILE`](/docs/id/env-vars) ke skrip shell sebelum meluncurkan Claude Code, atau gunakan [hook SessionStart](/docs/id/hooks#persist-environment-variables) untuk mengisinya secara dinamis.

165 165 

166<h3 id="timeout-and-output-limits">166<h3 id="timeout-and-output-limits">

167 Batas waktu dan output167 Batas waktu dan batas keluaran

168</h3>168</h3>

169 169 

170Setiap perintah berjalan di bawah batas waktu, dan Claude mengelolanya: ketika menginginkan lebih lama dari default untuk perintah, ia melewatkan parameter `timeout` dengan panggilan itu. Anda tidak pernah menetapkan batas waktu per perintah.170Setiap perintah berjalan di bawah batas waktu, dan Claude mengelolanya: ketika menginginkan lebih lama dari default untuk perintah, ia melewatkan parameter `timeout` dengan panggilan itu. Anda tidak pernah menetapkan batas waktu per perintah.

171 171 

172Dua [variabel lingkungan](/docs/id/env-vars) mengontrol apa yang Claude dapatkan untuk perintah yang berjalan di foreground:172Dua [variabel lingkungan](/docs/id/env-vars) mengontrol apa yang Claude dapatkan untuk perintah yang berjalan di latar depan:

173 173 

174* `BASH_DEFAULT_TIMEOUT_MS` — default ketika Claude tidak melewatkan batas waktu; dua menit di luar kotak174* `BASH_DEFAULT_TIMEOUT_MS` — default ketika Claude tidak melewatkan timeout; dua menit di luar kotak

175* `BASH_MAX_TIMEOUT_MS` — dengan default, menetapkan batas yang membatasi apa pun yang Claude minta: batas efektif adalah yang lebih besar dari keduanya, sepuluh menit di luar kotak175* `BASH_MAX_TIMEOUT_MS` — dengan default, menetapkan batas yang membatasi apa pun yang Claude minta: batas efektif adalah yang lebih besar dari keduanya, sepuluh menit di luar kotak

176 176 

177Untuk perintah yang Claude mulai di background, `timeout` malah menetapkan berapa lama perintah dapat berjalan di sana, dengan default dan maksimum terpisah yang dijelaskan di bawah [Perintah background](#background-commands). Alat [PowerShell](#powershell-tool) mengikuti aturan timeout yang sama dan membaca dua variabel yang sama.177Untuk perintah yang Claude mulai di latar belakang, `timeout` malah menetapkan berapa lama perintah dapat berjalan di sana, dengan default dan maksimum terpisah yang dijelaskan di bawah [Batas waktu untuk perintah latar belakang](#time-limit-for-background-commands). [Alat PowerShell](#powershell-tool) mengikuti aturan timeout yang sama dan membaca dua variabel yang sama.

178 178 

179<h4 id="output-limits">179<h4 id="output-limits">

180 Batas output180 Batas keluaran

181</h4>181</h4>

182 182 

183Claude Code mengalirkan output perintah ke file kerja saat perintah berjalan; perintah yang outputnya melampaui 5 GB dibunuh. Ketika perintah selesai, Claude Code membaca output kembali dari file itu, hingga jendela read-back yang dijelaskan di bawah. Berapa banyak output yang mencapai Claude secara inline tergantung pada apakah Claude Code memperlakukan hasil sebagai kegagalan:183Claude Code mengalirkan keluaran perintah ke file kerja saat perintah berjalan; perintah yang keluarannya melampaui 5 GB dibunuh. Ketika perintah selesai, Claude Code membaca keluaran kembali dari file itu, hingga jendela read-back yang dijelaskan di bawah. Berapa banyak keluaran yang mencapai Claude secara inline tergantung pada apakah Claude Code memperlakukan hasil sebagai kegagalan:

184 184 

185| Hasil | Apa yang Claude dapatkan |185| Hasil | Apa yang Claude dapatkan |

186| :- | :- |186| :- | :- |

187| Valid | Inline hingga kira-kira 30.000 karakter secara default; melampaui itu, jalur file yang disimpan ke direktori sesi dan dipotong melampaui 64 MiB, ditambah pratinjau hingga 2.000 karakter pertama, dan Claude membaca atau mencari file ketika membutuhkan sisanya |187| Valid | Inline hingga kira-kira 30.000 karakter secara default; melampaui itu, jalur file yang disimpan ke direktori sesi dan dipotong melampaui 64 MiB, ditambah pratinjau hingga 2.000 karakter pertama, dan Claude membaca atau mencari file ketika membutuhkan sisanya |

188| Kegagalan | Inline hingga kira-kira 10.000 karakter; melampaui itu, kutipan kepala-dan-ekor ukuran itu dipotong dari jendela read-back, tanpa jalur file |188| Kegagalan | Inline hingga kira-kira 10.000 karakter; melampaui itu, kutipan kepala-dan-ekor dari ukuran itu dipotong dari jendela read-back, tanpa jalur file |

189 189 

190Perintah yang keluar 1 dihitung sebagai hasil valid untuk alat Bash hanya ketika Claude Code mengenali kode keluar 1 sebagai hasil yang jinak untuk perintah itu: `grep`, `rg`, `egrep`, `fgrep`, `find`, `diff`, `test`, dan `[`, ditambah `git diff` dan `git grep`. Setiap perintah lain yang keluar 1 dihitung sebagai kegagalan, bahkan ketika keluar 1 adalah hasil informasional yang jinak: tidak ada kecocokan untuk `pgrep` dan `jq -e`, file yang berbeda untuk `cmp`.190Perintah yang keluar 1 dihitung sebagai hasil valid untuk alat Bash hanya ketika Claude Code mengenali kode keluar 1 sebagai hasil yang baik untuk perintah itu: `grep`, `rg`, `egrep`, `fgrep`, `find`, `diff`, `test`, dan `[`, ditambah `git diff` dan `git grep`. Setiap perintah lain yang keluar 1 dihitung sebagai kegagalan, bahkan ketika keluar 1 adalah hasil informasional yang baik: tidak ada kecocokan untuk `pgrep` dan `jq -e`, file yang berbeda untuk `cmp`.

191 191 

192[`BASH_MAX_OUTPUT_LENGTH`](/docs/id/env-vars) menetapkan berapa banyak karakter output yang Claude Code baca kembali dari file kerja ke hasil perintah: 30.000 secara default, hingga batas keras 150.000. Naikkan ketika perintah Anda secara rutin melampaui jendela itu, seperti build verbose atau log test-suite lengkap. Menaikkannya memperbesar jendela read-back, yang juga merupakan jendela kutipan perintah yang gagal dipotong. Itu tidak menaikkan batas inline: hasil valid di atas batas inline tiba sebagai jalur file ditambah pratinjau terlepas dari variabel ini.192[`BASH_MAX_OUTPUT_LENGTH`](/docs/id/env-vars) menetapkan berapa banyak karakter keluaran yang Claude Code baca kembali dari file kerja ke hasil perintah: 30.000 secara default, hingga batas keras 150.000. Naikkan ketika perintah Anda secara rutin melampaui jendela itu, seperti build verbose atau log test-suite lengkap. Menaikkannya memperbesar jendela read-back, yang juga merupakan jendela kutipan perintah yang gagal dipotong. Ini tidak menaikkan batas inline: hasil valid di atas batas inline tiba sebagai jalur file ditambah pratinjau terlepas dari variabel ini.

193 193 

194Untuk mengubah berapa banyak hasil valid yang Claude terima secara inline, atur pengaturan [`bashOutputMaxChars`](/docs/id/settings-reference#bashoutputmaxchars) sebagai gantinya, hingga 128.000 karakter. Ini mengukur batas inline dan jendela read-back bersama-sama, dan Claude Code kemudian mengabaikan `BASH_MAX_OUTPUT_LENGTH`. Memerlukan Claude Code v2.1.261 atau lebih baru.194Untuk mengubah berapa banyak hasil valid yang Claude terima secara inline, atur pengaturan [`bashOutputMaxChars`](/docs/id/settings-reference#bashoutputmaxchars) sebagai gantinya, hingga 128.000 karakter. Ini mengukur batas inline dan jendela read-back bersama-sama, dan Claude Code kemudian mengabaikan `BASH_MAX_OUTPUT_LENGTH`. Memerlukan Claude Code v2.1.261 atau lebih baru.

195 195 


197 Perintah latar belakang197 Perintah latar belakang

198</h3>198</h3>

199 199 

200Untuk proses yang berjalan lama seperti server dev atau build watch, Claude dapat mengatur `run_in_background: true` untuk memulai perintah sebagai tugas latar belakang dan terus bekerja saat berjalan. Daftar dan hentikan tugas latar belakang dengan `/tasks`. Setelah Anda menghentikan satu di sana, atau dari klien yang terhubung seperti aplikasi desktop, Claude melanjutkan alih-alih menunggu. Jika subagent memulai perintah, itu adalah subagent itu yang melanjutkan.200Untuk proses yang berjalan lama seperti server dev atau watch builds, Claude dapat menetapkan `run_in_background: true` untuk memulai perintah sebagai tugas latar belakang dan terus bekerja saat berjalan. Daftar dan hentikan tugas latar belakang dengan `/tasks`. Setelah Anda menghentikan salah satu di sana, atau dari klien yang terhubung seperti aplikasi desktop, Claude melanjutkan alih-alih menunggu. Jika subagent memulai perintah, itu adalah subagent itu yang melanjutkan.

201 201 

202Perintah yang dimulai oleh [subagent foreground](/docs/id/sub-agents#run-subagents-in-foreground-or-background) berhenti ketika subagent itu menjalankan akhirnya, baik itu selesai, gagal, atau terganggu. Perintah yang dimulai oleh percakapan utama atau subagent background terus berjalan setelah respons final, hingga keluar, dihentikan, atau mencapai batas waktunya. Dalam mode non-interaktif dengan flag `-p`, [perintah background berakhir segera setelah hasil final run](/docs/id/headless#background-tasks-at-exit).202<h4 id="when-a-background-command-stops">

203 Ketika perintah latar belakang berhenti

204</h4>

205 

206Perintah yang dimulai oleh [subagent latar depan](/docs/id/sub-agents#run-subagents-in-foreground-or-background) berhenti ketika run subagent itu berakhir, apakah selesai, gagal, atau terputus. Perintah yang dimulai oleh percakapan utama atau subagent latar belakang terus berjalan setelah respons final, hingga keluar, dihentikan, atau mencapai [batas waktunya](#time-limit-for-background-commands). Dalam mode non-interaktif dengan flag `-p`, [perintah latar belakang berakhir segera setelah hasil final run](/docs/id/headless#background-tasks-at-exit).

207 

208<h4 id="time-limit-for-background-commands">

209 Batas waktu untuk perintah latar belakang

210</h4>

203 211 

204Perintah Bash dan PowerShell background memiliki batas waktu, dihitung dari saat perintah memasuki background:212Perintah Bash dan PowerShell latar belakang memiliki batas waktu, dihitung dari saat perintah memasuki latar belakang:

205 213 

206* Perintah yang Claude mulai di background mendapat 30 menit, atau `timeout` yang Claude lewatkan dengan `run_in_background`, hingga maksimum 2 jam214* Perintah yang Claude mulai di latar belakang mendapat 30 menit, atau `timeout` yang Claude lewatkan dengan `run_in_background`, hingga maksimum 2 jam

207* Perintah yang dimulai di foreground dan kemudian pindah ke background, misalnya dengan `Ctrl+B` atau pada timeoutnya, mendapat 30 menit dari perpindahan215* Perintah yang dimulai di latar depan dan kemudian pindah ke latar belakang, misalnya dengan `Ctrl+B` atau pada timeoutnya, mendapat 30 menit dari perpindahan

208 216 

209Dua [variabel lingkungan](/docs/id/env-vars) menaikkan batas ini, untuk perintah Bash dan PowerShell sama-sama. Keduanya mengambil milidetik, dan tidak satupun dapat mempersingkat batas: nilai yang lebih rendah membiarkan default 30 menit dan maksimum 2 jam tetap berlaku.217Ketika perintah latar belakang mencapai batas waktunya, Claude Code menghentikannya dan memberi tahu Claude mengapa, dan Claude dapat memulai perintah lagi dengan `timeout` yang lebih lama jika pekerjaan masih membutuhkannya. Pemberitahuan penghentian berbunyi `Background command "<description>" was stopped after reaching its background time limit`.

218 

219<h4 id="raise-the-time-limit-for-background-commands">

220 Naikkan batas waktu untuk perintah latar belakang

221</h4>

222 

223Dua [variabel lingkungan](/docs/id/env-vars) menaikkan batas ini, untuk perintah Bash dan PowerShell sama-sama. Keduanya mengambil milidetik, dan tidak satupun dapat mempersingkat batas: nilai yang lebih rendah meninggalkan default 30 menit dan maksimum 2 jam.

210 224 

211* Atur `BASH_DEFAULT_TIMEOUT_MS` di atas `1800000` untuk mengganti default 30 menit dengan nilai itu, baik untuk perintah yang Claude mulai tanpa `timeout` maupun untuk perintah yang dipindahkan225* Atur `BASH_DEFAULT_TIMEOUT_MS` di atas `1800000` untuk mengganti default 30 menit dengan nilai itu, baik untuk perintah yang Claude mulai tanpa `timeout` maupun untuk perintah yang dipindahkan

212* Atur `BASH_MAX_TIMEOUT_MS` di atas `7200000` untuk menaikkan maksimum 2 jam ke nilai itu. Mengatur `BASH_DEFAULT_TIMEOUT_MS` di atas `7200000` menaikkan maksimum dengan cara yang sama226* Atur `BASH_MAX_TIMEOUT_MS` di atas `7200000` untuk menaikkan maksimum 2 jam ke nilai itu. Mengatur `BASH_DEFAULT_TIMEOUT_MS` di atas `7200000` menaikkan maksimum dengan cara yang sama

213 227 

214Ketika perintah background mencapai batas waktunya, Claude Code menghentikannya dan memberi tahu Claude mengapa, dan Claude dapat memulai perintah lagi dengan `timeout` yang lebih lama jika pekerjaan masih membutuhkannya. Pemberitahuan penghentian berbunyi `Background command "<description>" was stopped after reaching its background time limit`.228<h4 id="foreground-commands-that-move-to-the-background">

229 Perintah latar depan yang pindah ke latar belakang

230</h4>

215 231 

216Ketika perintah foreground mencapai timeoutnya tanpa selesai, Claude Code memindahkannya ke background alih-alih menghentikannya, kecuali perintah dimulai dengan `sleep`. Batas waktu perintah yang dipindahkan dihitung dari perpindahan, dan perintah yang dipindahkan dari subagent foreground masih berhenti ketika subagent itu menjalankan akhirnya.232Ketika perintah latar depan mencapai timeoutnya tanpa selesai, Claude Code memindahkannya ke latar belakang alih-alih menghentikannya, kecuali perintah dimulai dengan `sleep`. [Batas waktu](#time-limit-for-background-commands) perintah yang dipindahkan dihitung dari perpindahan, dan perintah subagent latar depan yang dipindahkan masih berhenti ketika run subagent itu berakhir.

217 233 

218Mengatur [`CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1`](/docs/id/env-vars#variables) menonaktifkan auto-backgrounding bersama dengan sisa fungsionalitas tugas background.234Mengatur [`CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1`](/docs/id/env-vars#variables) menonaktifkan auto-backgrounding bersama dengan sisa fungsionalitas tugas latar belakang.

219 235 

220Hasil perintah yang dipindahkan ke latar belakang menyatakan apa yang terjadi:236Hasil perintah yang dipindahkan ke latar belakang menyatakan apa yang terjadi:

221 237 

222* Ketika batas waktu memicu perpindahan, hasil melaporkannya secara eksplisit: `Command did not complete within its 120s timeout and was moved to the background`, dengan detik sesuai dengan batas waktu yang berlaku, diikuti oleh ID tugas dan jalur file tempat output ditulis.238* Ketika timeout memicu perpindahan, hasil melaporkannya secara eksplisit: `Command did not complete within its 120s timeout and was moved to the background`, dengan detik yang cocok dengan timeout yang diterapkan, diikuti oleh ID tugas dan jalur file yang keluarannya ditulis.

223* Sebuah `cd`, `pushd`, `popd`, atau `chdir` di dalam perintah yang dipindahkan ke latar belakang tidak pernah terbawa: hasil menyatakan `Session cwd remains <dir>; directory changes made by the backgrounded command do not apply to subsequent commands.`, jadi Claude tidak bertindak atas perubahan direktori yang tidak terjadi.239* Sebuah `cd`, `pushd`, `popd`, atau `chdir` di dalam perintah yang dipindahkan ke latar belakang tidak pernah terbawa: hasil menyatakan `Session cwd remains <dir>; directory changes made by the backgrounded command do not apply to subsequent commands.`, jadi Claude tidak bertindak atas perubahan direktori yang tidak terjadi.

224 240 

225<h3 id="memory-limit-on-linux-and-wsl">241<h3 id="memory-limit-on-linux-and-wsl">

226 Batas memori di Linux dan WSL242 Batas memori di Linux dan WSL

227</h3>243</h3>

228 244 

229Di Linux dan WSL, atur [`CLAUDE_CODE_TOOL_MEMORY_LIMIT`](/docs/id/env-vars#variables) ke ukuran seperti `4G` untuk membatasi memori yang perintah Bash, PowerShell, dan alat [Monitor](#monitor-tool) dapat gunakan, sehingga satu build yang lari tidak dapat mengambil memori yang sesi lainnya butuhkan. Memerlukan Claude Code v2.1.233 atau lebih baru. Sebelum v2.1.246, perintah alat Monitor berjalan di luar batas.245Di Linux dan WSL, atur [`CLAUDE_CODE_TOOL_MEMORY_LIMIT`](/docs/id/env-vars#variables) ke ukuran seperti `4G` untuk membatasi memori yang perintah Bash, PowerShell, dan [Monitor](#monitor-tool) dapat gunakan, sehingga satu build yang lari tidak dapat mengambil memori yang sesi lainnya butuhkan. Memerlukan Claude Code v2.1.233 atau lebih baru. Sebelum v2.1.246, perintah alat Monitor berjalan di luar batas.

230 246 

231* Tulis ukuran sebagai jumlah byte atau dengan akhiran `K`, `M`, `G`, atau `T`. Atur `0`, `off`, `false`, `no`, atau `none` untuk mematikan batas. Claude Code mengabaikan nilai apa pun yang tidak dapat dibacanya sebagai ukuran, seperti `4e9`.247* Tulis ukuran sebagai jumlah byte atau dengan akhiran `K`, `M`, `G`, atau `T`. Atur `0`, `off`, `false`, `no`, atau `none` untuk mematikan batas. Claude Code mengabaikan nilai lain apa pun yang tidak dapat dibacanya sebagai ukuran, seperti `4e9`.

232* Claude Code menghitung semua perintah Bash, PowerShell, dan Monitor sesi terhadap satu batas, bukan setiap perintah pada dirinya sendiri.248* Claude Code menghitung semua perintah Bash, PowerShell, dan Monitor sesi terhadap satu batas, bukan setiap perintah sendiri.

233* Claude Code menerapkan batas dengan cgroup memori. Ketika tidak dapat mengatur cgroup, perintah berjalan tanpa batas, dan log debug dari `claude --debug` mengatakan mengapa.249* Claude Code menerapkan batas dengan cgroup memori. Ketika tidak dapat mengatur cgroup, perintah berjalan tanpa batas, dan log debug dari `claude --debug` mengatakan mengapa.

234* Setelah proses pertama yang Claude Code mulai telah menghidupkan batas, atau telah mematikannya karena nilai off atau setup cgroup yang gagal, Claude Code menahan hasil itu sampai Anda meluncurkan kembali. Untuk menerapkan nilai yang diubah atau dihapus, atau setup yang diperbaiki, luncurkan `claude` lagi.250* Setelah proses pertama yang Claude Code mulai telah menyalakan batas, atau telah mematikannya karena nilai off atau setup cgroup yang gagal, Claude Code menahan hasil itu hingga Anda meluncurkan ulang. Untuk menerapkan nilai yang diubah atau dihapus, atau setup yang diperbaiki, luncurkan `claude` lagi.

235* Ketika perintah tidak dapat tetap di bawah batas, kernel membunuh perintah, dan tidak ada dalam hasilnya yang menyebutkan batas.251* Ketika perintah tidak dapat tetap di bawah batas, kernel membunuh perintah, dan tidak ada dalam hasilnya yang menyebutkan batas.

236 252 

237Claude Code juga dapat menghitung jenis proses lain yang dimulainya terhadap batas yang sama. Atur [`CLAUDE_CODE_TOOL_MEMORY_CGROUP_EXCLUDE`](/docs/id/env-vars#variables) ke daftar yang dipisahkan koma dari jenis yang dikecualikan dari batas; Claude Code menerapkan batas ke setiap jenis yang tidak ada di daftar Anda. Atur ke `none` untuk membatasi setiap jenis, atau ke `all-new` untuk membatasi hanya perintah alat Bash, PowerShell, dan Monitor. Memerlukan Claude Code v2.1.246 atau lebih baru. Jenis yang dapat Anda namai:253Claude Code juga dapat menghitung jenis proses lain yang dimulainya terhadap batas yang sama. Atur [`CLAUDE_CODE_TOOL_MEMORY_CGROUP_EXCLUDE`](/docs/id/env-vars#variables) ke daftar yang dipisahkan koma dari jenis yang dikecualikan dari batas; Claude Code menerapkan batas ke setiap jenis yang tidak ada di daftar Anda. Atur ke `none` untuk membatasi setiap jenis, atau ke `all-new` untuk membatasi hanya perintah Bash, PowerShell, dan Monitor tool. Memerlukan Claude Code v2.1.246 atau lebih baru. Jenis yang dapat Anda namai:

238 254 

239* `mcp`: server [MCP](/docs/id/mcp) lokal255* `mcp`: server [MCP](/docs/id/mcp) lokal

240* `lsp`: [server bahasa](#lsp-tool-behavior)256* `lsp`: [server bahasa](#lsp-tool-behavior)

241* `hooks`: perintah [hook](/docs/id/hooks)257* `hooks`: perintah [hook](/docs/id/hooks)

242* `plugin`: perintah yang [plugin](/docs/id/plugins/overview) jalankan258* `plugin`: perintah yang [plugin](/docs/id/plugins/overview) jalankan

243* `helper`: perintah helper Claude Code sendiri, seperti `git`259* `helper`: perintah helper Claude Code sendiri, seperti `git`

244* `agent`: proses Claude Code anak, seperti [rekan tim agen](/docs/id/agent-teams)260* `agent`: proses Claude Code anak, seperti [rekan tim agent](/docs/id/agent-teams)

245 261 

246Apa pun yang Anda daftar, aturan ini berlaku:262Apa pun yang Anda daftar, aturan ini berlaku:

247 263 

248* **Nama tidak dikenal**: Claude Code mengabaikan nama yang tidak dikenalinya264* **Nama tidak dikenal**: Claude Code mengabaikan nama yang tidak dikenalinya

249* **Bash, PowerShell, dan Monitor**: Claude Code menjaga perintah alat Bash, PowerShell, dan Monitor di bawah batas apa pun yang Anda daftar

250* **Variabel tidak diatur**: Claude Code mengambil set jenis yang dibatasi lainnya dari konfigurasi yang Anthropic berikan dari server, dan set itu dapat berubah seiring waktu, jadi atur variabel ketika Anda membutuhkan set yang tidak berubah265* **Variabel tidak diatur**: Claude Code mengambil set jenis yang dibatasi lainnya dari konfigurasi yang Anthropic berikan dari server, dan set itu dapat berubah seiring waktu, jadi atur variabel ketika Anda membutuhkan set yang tidak berubah

251* **Hook gating izin**: bahkan dengan setiap jenis dibatasi, Claude Code mengecualikan dari batas hook yang dapat memblokir atau mengubah hasil tindakan, dan server MCP apa pun yang hook tersebut panggil, sehingga kernel membunuh hook gating izin tidak dapat memungkinkan tindakan yang sedang diblokir.266* **Hook gating izin**: bahkan dengan setiap jenis dibatasi, Claude Code mengecualikan dari batas hook yang dapat memblokir atau mengubah hasil tindakan, dan server MCP apa pun yang hook itu panggil, sehingga kernel membunuh hook gating izin tidak dapat memungkinkan tindakan yang diblokir

252 267 

253<h2 id="edit-tool-behavior">268<h2 id="edit-tool-behavior">

254 Perilaku alat Edit269 Perilaku alat Edit

ultrareview.md +1 −1

Details

66 66 

67Dalam mode PR, sandbox jarak jauh mengkloning pull request langsung dari host daripada membundel pohon kerja lokal Anda. Mode PR bekerja dengan repositori di `github.com` dan pada instans [GitHub Enterprise Server](/docs/id/github-enterprise-server) yang telah dihubungkan oleh Owner ke Claude Code.67Dalam mode PR, sandbox jarak jauh mengkloning pull request langsung dari host daripada membundel pohon kerja lokal Anda. Mode PR bekerja dengan repositori di `github.com` dan pada instans [GitHub Enterprise Server](/docs/id/github-enterprise-server) yang telah dihubungkan oleh Owner ke Claude Code.

68 68 

69Untuk repositori di `github.com`, sandbox mengkloning dengan akun GitHub yang terhubung ke akun Claude Anda, jadi akun harus dapat membaca repositori PR. Claude Code memeriksa ini sebelum membuat sesi cloud, kecuali Anda telah menetapkan [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](/docs/id/env-vars#variables), dan menolak peluncuran ketika [tidak ada akun yang terhubung](/docs/id/errors#no-github-account-is-connected-to-your-claude-account) atau [akun tidak dapat melihat repositori](/docs/id/errors#your-connected-github-account-cant-see-the-repository); penolakan menyebutkan perbaikannya. Sebelum v2.1.248, Claude Code tidak memeriksa ini sebelum peluncuran.69Untuk repositori di `github.com`, sandbox mengkloning dengan akun GitHub yang terhubung ke akun Claude Anda, jadi akun harus dapat membaca repositori PR.

70 70 

71Jalankan [`/web-setup`](/docs/id/web-quickstart#connect-from-your-terminal) untuk menghubungkan login GitHub CLI Anda ke akun Claude Anda.71Jalankan [`/web-setup`](/docs/id/web-quickstart#connect-from-your-terminal) untuk menghubungkan login GitHub CLI Anda ke akun Claude Anda.

72 72 

vs-code.md +25 −5

Details

58 58 

59 * **Activity Bar**: klik ikon Spark di sidebar kiri untuk membuka daftar sesi. Klik sesi apa pun untuk membukanya di [lokasi pilihan Anda](#extension-settings), atau mulai yang baru. Ikon ini selalu terlihat di Activity Bar.59 * **Activity Bar**: klik ikon Spark di sidebar kiri untuk membuka daftar sesi. Klik sesi apa pun untuk membukanya di [lokasi pilihan Anda](#extension-settings), atau mulai yang baru. Ikon ini selalu terlihat di Activity Bar.

60 * **Command Palette**: `Cmd+Shift+P` (Mac) atau `Ctrl+Shift+P` (Windows/Linux), ketik "Claude Code", dan pilih opsi seperti "Open in New Tab"60 * **Command Palette**: `Cmd+Shift+P` (Mac) atau `Ctrl+Shift+P` (Windows/Linux), ketik "Claude Code", dan pilih opsi seperti "Open in New Tab"

61 * **Status Bar**: jika Anda telah menetapkan [`preferredLocation`](#extension-settings) ke `sidebar`, atau membuka Claude dengan **Claude Code: Open in Side Bar**, klik **✻ Claude Code** di sudut kanan bawah jendela. Ini berfungsi bahkan ketika tidak ada file yang terbuka.61 * **Status Bar**: klik **✻ Claude Code** di sudut kanan bawah jendela. Ini berfungsi bahkan ketika tidak ada file yang terbuka.

62 62 

63 Anda dapat menyeret panel Claude untuk memposisikannya kembali di mana saja di VS Code. Lihat [Sesuaikan alur kerja Anda](#customize-your-workflow) untuk detail.63 Anda dapat menyeret panel Claude untuk memposisikannya kembali di mana saja di VS Code. Lihat [Sesuaikan alur kerja Anda](#customize-your-workflow) untuk detail.

64 </Step>64 </Step>


362 362 

363Di tab Plugin:363Di tab Plugin:

364 364 

365* **Plugin yang terinstal** muncul di bagian atas dengan tombol toggle untuk mengaktifkan atau menonaktifkan365* **Plugin yang terinstal** muncul di bagian atas dengan tombol toggle untuk mengaktifkan atau menonaktifkan.

366 * Jika Anda mematikan plugin yang `.claude/settings.json` bersama proyek Anda aktifkan, ekstensi bertanya terlebih dahulu: **Disable for me** mematikannya hanya untuk Anda, sementara **Disable for everyone** mengubah file bersama.

366* **Plugin yang tersedia** dari marketplace yang dikonfigurasi muncul di bawah367* **Plugin yang tersedia** dari marketplace yang dikonfigurasi muncul di bawah

367* Cari untuk memfilter plugin berdasarkan nama atau deskripsi368* Cari untuk memfilter plugin berdasarkan nama atau deskripsi

368* Klik **Instal** pada plugin yang tersedia369* Klik **Instal** pada plugin yang tersedia


373* **Instal untuk proyek ini**: dibagikan dengan kolaborator proyek (cakupan proyek)374* **Instal untuk proyek ini**: dibagikan dengan kolaborator proyek (cakupan proyek)

374* **Instal secara lokal**: hanya untuk Anda, hanya di repositori ini (cakupan lokal)375* **Instal secara lokal**: hanya untuk Anda, hanya di repositori ini (cakupan lokal)

375 376 

377Setelah instalasi selesai, formulir meminta [opsi konfigurasi](/docs/id/plugins/components#user-configuration) plugin apa pun yang belum diatur. Untuk meninjau atau mengubah opsi nanti, klik ikon gear pada baris plugin.

378 

379Bidang teks sensitif disembunyikan, dan rahasia yang Anda simpan sebelumnya menampilkan **(unchanged)**. Biarkan bidang kosong untuk mempertahankan nilai yang disimpan.

380 

381Setelah Anda menyimpan perubahan, sesi terbuka memuat ulang plugin mereka dan dialog menampilkan **Restart Claude to apply plugin changes**.

382 

383<h3 id="uninstall-plugins">

384 Copot plugin

385</h3>

386 

387Setiap baris yang terinstal menamai [cakupan](/docs/id/plugins/install#choose-an-install-scope) tempat plugin diinstal. Untuk mencopot instalasi tersebut, klik ikon sampah baris. Ikon sampah yang redup menandai baris yang tidak dapat Anda copot dari workspace ini, seperti plugin yang organisasi Anda kelola atau yang diinstal untuk proyek lain.

388 

389Ekstensi bertanya terlebih dahulu dalam dua kasus:

390 

391* **Plugin yang `.claude/settings.json` bersama proyek Anda aktifkan**: pilih **Disable for me**, yang membuat plugin tetap terinstal untuk kolaborator Anda, atau **Uninstall for everyone**, yang menghapus instalasi proyek dengan [`--keep-data`](/docs/id/plugins/cli-reference#what-an-uninstall-deletes-and-keeps), sehingga direktori data yang disimpan plugin tetap ada. Jika Anda sudah mematikan plugin untuk diri sendiri, ikon sampah menghapus instalasi Anda sendiri tanpa pertanyaan.

392* **Jika tidak, instalasi terakhir plugin dengan data yang disimpan**: pilih apakah akan menyimpan atau menghapus data; **Keep** adalah default

393 

376<h3 id="share-a-plugin-install-link">394<h3 id="share-a-plugin-install-link">

377 Bagikan tautan instalasi plugin395 Bagikan tautan instalasi plugin

378</h3>396</h3>


407 425 

408* Masukkan repo GitHub, URL, atau jalur lokal untuk menambahkan marketplace baru426* Masukkan repo GitHub, URL, atau jalur lokal untuk menambahkan marketplace baru

409* Klik ikon refresh untuk memperbarui daftar plugin marketplace427* Klik ikon refresh untuk memperbarui daftar plugin marketplace

410* Klik ikon sampah untuk menghapus marketplace428* Klik ikon sampah untuk menghapus marketplace. Menghapusnya [mencopot setiap plugin yang Anda instal darinya](/docs/id/plugins/install#manage-marketplaces), jadi konfirmasi menamai plugin tersebut terlebih dahulu

429 

430Perubahan plugin yang Anda buat dalam dialog diterapkan segera ke sesi Claude Code yang terbuka di jendela VS Code tersebut.

411 431 

412Perubahan plugin yang Anda buat dalam dialog diterapkan segera ke sesi Claude Code yang terbuka di jendela VS Code tersebut. Jika sesi tempat Anda membuka dialog tidak dapat memuat ulang pluginnya, dialog menawarkan untuk mencoba lagi atau memulai ulang Claude di sesi tersebut.432Jika sesi tempat Anda membuka dialog tidak dapat memuat ulang pluginnya, dialog menawarkan untuk mencoba lagi atau memulai ulang Claude di sesi tersebut.

413 433 

414<Note>434<Note>

415 Manajemen plugin di VS Code menggunakan perintah CLI yang sama di balik layar. Plugin dan marketplace yang Anda konfigurasi di ekstensi juga tersedia di CLI, dan sebaliknya.435 Manajemen plugin di VS Code menggunakan perintah CLI yang sama di balik layar. Plugin dan marketplace yang Anda konfigurasi di ekstensi juga tersedia di CLI, dan sebaliknya.


7904. **Nonaktifkan ekstensi yang bertentangan**: Nonaktifkan sementara ekstensi AI lainnya (Cline, Continue, dll.)8104. **Nonaktifkan ekstensi yang bertentangan**: Nonaktifkan sementara ekstensi AI lainnya (Cline, Continue, dll.)

7915. **Periksa kepercayaan workspace**: Ekstensi tidak berfungsi dalam Mode Terbatas8115. **Periksa kepercayaan workspace**: Ekstensi tidak berfungsi dalam Mode Terbatas

792 812 

793Alternatifnya, jika Anda telah menetapkan [`preferredLocation`](#extension-settings) ke `sidebar`, atau membuka Claude dengan **Claude Code: Open in Side Bar**, klik "✻ Claude Code" di **Status Bar** (sudut kanan bawah). Ini berfungsi bahkan tanpa file yang terbuka. Anda juga dapat menggunakan **Command Palette** (`Cmd+Shift+P` / `Ctrl+Shift+P`) dan ketik "Claude Code".813Alternatifnya, klik **✻ Claude Code** di **Status Bar** di sudut kanan bawah jendela. Ini berfungsi bahkan tanpa file yang terbuka. Anda juga dapat menggunakan **Command Palette** (`Cmd+Shift+P` / `Ctrl+Shift+P`) dan ketik "Claude Code".

794 814 

795<h3 id="cmd-esc-does-nothing-on-macos">815<h3 id="cmd-esc-does-nothing-on-macos">

796 Cmd+Esc tidak melakukan apa pun di macOS816 Cmd+Esc tidak melakukan apa pun di macOS

worktrees.md +1 −1

Details

145* Worktree milik sesi `--worktree` yang belum Anda kirim ke latar belakang, apa pun usianya.145* Worktree milik sesi `--worktree` yang belum Anda kirim ke latar belakang, apa pun usianya.

146* Anda membuat worktree sendiri dengan `git worktree add`, bahkan jika Anda kemudian menjalankan sesi `--worktree <name>` di dalamnya dan mengirimnya ke latar belakang.146* Anda membuat worktree sendiri dengan `git worktree add`, bahkan jika Anda kemudian menjalankan sesi `--worktree <name>` di dalamnya dan mengirimnya ke latar belakang.

147 147 

148Claude Code menulis penanda ke metadata git setiap worktree yang dibuat dengan git, dan sapuan menyimpan worktree apa pun tanpa satu, termasuk worktree yang dibuat hook [`WorktreeCreate`](#non-git-version-control). Sebelum v2.1.246, sapuan tidak memeriksa penanda, dan dapat menghapus worktree yang Anda buat sendiri saat catatan sesi latar belakang lama menunjuk padanya.148Claude Code menulis penanda ke metadata git setiap worktree yang dibuat dengan git, dan sapuan menyimpan worktree apa pun tanpa satu, termasuk worktree yang dibuat hook [`WorktreeCreate`](#non-git-version-control).

149 149 

150Saat agen berjalan, Claude Code menyimpan `git worktree lock` pada worktree-nya sehingga pembersihan bersamaan tidak dapat menghapusnya, dan melepaskan kunci saat agen selesai. Claude Code menyimpan kunci yang sama pada worktree yang dibuat untuk sesi yang dikirim ke latar belakang saat sesi berjalan, jadi sapuan meninggalkan worktree di tempat dan `git worktree remove` menolak untuk menghapusnya.150Saat agen berjalan, Claude Code menyimpan `git worktree lock` pada worktree-nya sehingga pembersihan bersamaan tidak dapat menghapusnya, dan melepaskan kunci saat agen selesai. Claude Code menyimpan kunci yang sama pada worktree yang dibuat untuk sesi yang dikirim ke latar belakang saat sesi berjalan, jadi sapuan meninggalkan worktree di tempat dan `git worktree remove` menolak untuk menghapusnya.

151 151