SpyBara
Go Premium

Documentation 2026-05-02 18:14 UTC to 2026-05-04 22:58 UTC

99 files changed +47,233 −0. View all changes and history on the product overview
2026
Sun 31 06:39 Sat 30 06:23 Fri 29 06:38 Thu 28 06:37 Wed 27 06:42 Tue 26 06:33 Sun 24 06:25 Sat 23 06:18 Fri 22 06:33 Thu 21 06:36 Wed 20 06:35 Tue 19 06:34 Mon 18 23:59 Sun 17 01:01 Fri 15 22:58 Thu 14 17:02 Wed 13 23:01 Tue 12 22:57 Mon 11 23:00 Sun 10 23:03 Sat 9 04:57 Fri 8 22:00 Thu 7 22:59 Tue 5 23:00 Mon 4 22:58 Sat 2 18:14 Fri 1 18:19

admin-setup.md +130 −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# Siapkan Claude Code untuk organisasi Anda

6 

7> Peta keputusan untuk administrator yang menerapkan Claude Code, mencakup penyedia API, pengaturan terkelola, penegakan kebijakan, pemantauan penggunaan, dan penanganan data.

8 

9Claude Code memberlakukan kebijakan organisasi melalui pengaturan terkelola yang mengambil alih konfigurasi pengembang lokal. Anda mengirimkan pengaturan tersebut dari konsol admin Claude, sistem manajemen perangkat seluler (MDM) Anda, atau file di disk. Pengaturan mengontrol alat, perintah, server, dan tujuan jaringan mana yang dapat dijangkau Claude.

10 

11Halaman ini memandu keputusan penerapan secara berurutan. Setiap baris menautkan ke bagian di bawah dan ke halaman referensi untuk area tersebut.

12 

13<Note>

14 SSO, penyediaan SCIM, dan penugasan kursi dikonfigurasi di tingkat akun Claude. Lihat [Panduan Administrator Enterprise Claude](https://claude.com/resources/tutorials/claude-enterprise-administrator-guide) dan [penugasan kursi](https://support.claude.com/en/articles/11845131-use-claude-code-with-your-team-or-enterprise-plan) untuk langkah-langkah tersebut.

15</Note>

16 

17| Keputusan | Yang Anda pilih | Referensi |

18| :------------------------------------------------------------------------------------------ | :---------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------- |

19| [Pilih penyedia API Anda](#pilih-penyedia-api-anda) | Tempat Claude Code melakukan autentikasi dan cara penagihan | [Authentication](/id/authentication), [Bedrock](/id/amazon-bedrock), [Vertex AI](/id/google-vertex-ai), [Foundry](/id/microsoft-foundry) |

20| [Tentukan cara pengaturan mencapai perangkat](#tentukan-cara-pengaturan-mencapai-perangkat) | Bagaimana kebijakan terkelola mencapai mesin pengembang | [Server-managed settings](/id/server-managed-settings), [Settings files](/id/settings#settings-files) |

21| [Tentukan apa yang akan diberlakukan](#tentukan-apa-yang-akan-diberlakukan) | Alat, perintah, dan integrasi mana yang diizinkan | [Permissions](/id/permissions), [Sandboxing](/id/sandboxing) |

22| [Siapkan visibilitas penggunaan](#siapkan-visibilitas-penggunaan) | Cara Anda melacak pengeluaran dan adopsi | [Analytics](/id/analytics), [Monitoring](/id/monitoring-usage), [Costs](/id/costs) |

23| [Tinjau penanganan data](#tinjau-penanganan-data) | Retensi data dan postur kepatuhan | [Data usage](/id/data-usage), [Security](/id/security) |

24 

25## Pilih penyedia API Anda

26 

27Claude Code terhubung ke Claude melalui salah satu dari beberapa penyedia API. Pilihan Anda mempengaruhi penagihan, autentikasi, dan postur kepatuhan mana yang Anda warisi.

28 

29| Penyedia | Pilih ini ketika |

30| :---------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------- |

31| Claude for Teams / Enterprise | Anda menginginkan Claude Code dan claude.ai di bawah satu langganan per-kursi tanpa infrastruktur untuk dijalankan. Ini adalah rekomendasi default. |

32| Claude Console | Anda adalah API-first atau menginginkan penagihan pay-as-you-go |

33| Amazon Bedrock | Anda ingin mewarisi kontrol kepatuhan dan penagihan AWS yang ada |

34| Google Vertex AI | Anda ingin mewarisi kontrol kepatuhan dan penagihan GCP yang ada |

35| Microsoft Foundry | Anda ingin mewarisi kontrol kepatuhan dan penagihan Azure yang ada |

36 

37Untuk perbandingan penyedia lengkap yang mencakup autentikasi, wilayah, dan kesetaraan fitur, lihat [ikhtisar penerapan enterprise](/id/third-party-integrations). Pengaturan auth setiap penyedia ada di [Authentication](/id/authentication).

38 

39Persyaratan proxy dan firewall di [Network configuration](/id/network-config) berlaku terlepas dari penyedia. Jika Anda menginginkan satu titik akhir di depan beberapa penyedia atau pencatatan permintaan terpusat, lihat [LLM gateway](/id/llm-gateway).

40 

41## Tentukan cara pengaturan mencapai perangkat

42 

43Pengaturan terkelola mendefinisikan kebijakan yang mengambil alih konfigurasi pengembang lokal. Claude Code mencarinya di empat tempat dan menggunakan yang pertama ditemukannya di perangkat tertentu.

44 

45| Mekanisme | Pengiriman | Prioritas | Platform |

46| :---------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------- | :------------- |

47| Server-managed | Konsol admin Claude.ai | Tertinggi | Semua |

48| plist / registry policy | macOS: `com.anthropic.claudecode` plist<br />Windows: `HKLM\SOFTWARE\Policies\ClaudeCode` | Tinggi | macOS, Windows |

49| File-based managed | macOS: `/Library/Application Support/ClaudeCode/managed-settings.json`<br />Linux dan WSL: `/etc/claude-code/managed-settings.json`<br />Windows: `C:\Program Files\ClaudeCode\managed-settings.json` | Sedang | Semua |

50| Windows user registry | `HKCU\SOFTWARE\Policies\ClaudeCode` | Terendah | Windows saja |

51 

52Pengaturan terkelola server mencapai perangkat pada waktu autentikasi dan menyegarkan setiap jam selama sesi aktif, tanpa infrastruktur titik akhir. Mereka memerlukan rencana Claude for Teams atau Enterprise, jadi penerapan pada penyedia lain memerlukan salah satu mekanisme berbasis file atau tingkat OS sebagai gantinya.

53 

54Jika organisasi Anda mencampur penyedia, konfigurasikan [server-managed settings](/id/server-managed-settings) untuk pengguna Claude.ai ditambah [fallback berbasis file atau plist/registry](/id/settings#settings-files) sehingga pengguna lain masih menerima kebijakan terkelola.

55 

56Lokasi plist dan HKLM registry bekerja dengan penyedia apa pun dan tahan terhadap gangguan karena memerlukan hak istimewa admin untuk menulis. Registry pengguna Windows di HKCU dapat ditulis tanpa elevasi, jadi perlakukan sebagai default kenyamanan daripada saluran penegakan.

57 

58Dengan cara apa pun yang Anda pilih, nilai terkelola mengambil alih pengaturan pengguna dan proyek. Pengaturan array seperti `permissions.allow` dan `permissions.deny` menggabungkan entri dari semua sumber, jadi pengembang dapat memperluas daftar terkelola tetapi tidak menghapusnya.

59 

60Lihat [Server-managed settings](/id/server-managed-settings) dan [Settings files and precedence](/id/settings#settings-files).

61 

62## Tentukan apa yang akan diberlakukan

63 

64Pengaturan terkelola dapat mengunci alat, eksekusi sandbox, membatasi server MCP dan sumber plugin, dan mengontrol hook mana yang berjalan. Setiap baris adalah permukaan kontrol dengan kunci pengaturan yang mendorong.

65 

66| Kontrol | Apa yang dilakukan | Pengaturan kunci |

67| :------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------- |

68| [Permission rules](/id/permissions) | Izinkan, tanyakan, atau tolak alat dan perintah tertentu | `permissions.allow`, `permissions.deny` |

69| [Permission lockdown](/id/permissions#managed-only-settings) | Hanya aturan izin terkelola yang berlaku; nonaktifkan `--dangerously-skip-permissions` | `allowManagedPermissionRulesOnly`, `permissions.disableBypassPermissionsMode` |

70| [Sandboxing](/id/sandboxing) | Isolasi filesystem dan jaringan tingkat OS dengan daftar allowlist domain | `sandbox.enabled`, `sandbox.network.allowedDomains` |

71| [Managed policy CLAUDE.md](/id/memory#deploy-organization-wide-claude-md) | Instruksi di seluruh organisasi dimuat di setiap sesi, tidak dapat dikecualikan | File di jalur kebijakan terkelola |

72| [MCP server control](/id/mcp#managed-mcp-configuration) | Batasi server MCP mana yang dapat ditambahkan atau dihubungkan pengguna | `allowedMcpServers`, `deniedMcpServers`, `allowManagedMcpServersOnly` |

73| [Plugin marketplace control](/id/plugin-marketplaces#managed-marketplace-restrictions) | Batasi sumber marketplace mana yang dapat ditambahkan dan diinstal pengguna | `strictKnownMarketplaces`, `blockedMarketplaces` |

74| [Hook restrictions](/id/settings#hook-configuration) | Hanya hook terkelola yang dimuat; batasi URL hook HTTP | `allowManagedHooksOnly`, `allowedHttpHookUrls` |

75| [Version floor](/id/settings) | Cegah auto-update dari penginstalan di bawah minimum di seluruh organisasi | `minimumVersion` |

76 

77Aturan izin dan sandboxing mencakup lapisan berbeda. Menolak WebFetch memblokir alat fetch Claude, tetapi jika Bash diizinkan, `curl` dan `wget` masih dapat menjangkau URL apa pun. Sandboxing menutup celah itu dengan daftar allowlist domain jaringan yang diberlakukan di tingkat OS.

78 

79Untuk model ancaman yang dilindungi kontrol ini, lihat [Security](/id/security).

80 

81## Siapkan visibilitas penggunaan

82 

83Pilih pemantauan berdasarkan apa yang perlu Anda laporkan.

84 

85| Kemampuan | Yang Anda dapatkan | Ketersediaan | Mulai dari mana |

86| :------------------ | :--------------------------------------------------------- | :-------------- | :--------------------------------------- |

87| Usage monitoring | Ekspor OpenTelemetry sesi, alat, dan token | Semua penyedia | [Monitoring usage](/id/monitoring-usage) |

88| Analytics dashboard | Metrik per-pengguna, pelacakan kontribusi, papan peringkat | Hanya Anthropic | [Analytics](/id/analytics) |

89| Cost tracking | Batas pengeluaran, batas laju, dan atribusi penggunaan | Hanya Anthropic | [Costs](/id/costs) |

90 

91Penyedia cloud mengekspos pengeluaran melalui AWS Cost Explorer, GCP Billing, atau Azure Cost Management. Rencana Claude for Teams dan Enterprise mencakup dasbor penggunaan di [claude.ai/analytics/claude-code](https://claude.ai/analytics/claude-code).

92 

93## Tinjau penanganan data

94 

95Pada rencana Team, Enterprise, Claude API, dan penyedia cloud, Anthropic tidak melatih model pada kode atau prompt Anda. Penyedia API Anda menentukan retensi dan postur kepatuhan.

96 

97| Topik | Yang perlu diketahui | Mulai dari mana |

98| :------------------------ | :---------------------------------------------------------------------------------------------------- | :--------------------------------------------- |

99| Data usage policy | Apa yang dikumpulkan Anthropic, berapa lama disimpan, apa yang tidak pernah digunakan untuk pelatihan | [Data usage](/id/data-usage) |

100| Zero Data Retention (ZDR) | Tidak ada yang disimpan setelah permintaan selesai. Tersedia di Claude for Enterprise | [Zero data retention](/id/zero-data-retention) |

101| Security architecture | Model jaringan, enkripsi, autentikasi, jejak audit | [Security](/id/security) |

102 

103Jika Anda memerlukan pencatatan audit tingkat permintaan atau untuk merutekan lalu lintas berdasarkan sensitivitas data, tempatkan [LLM gateway](/id/llm-gateway) antara pengembang dan penyedia Anda. Untuk persyaratan peraturan dan sertifikasi, lihat [Legal and compliance](/id/legal-and-compliance).

104 

105## Verifikasi dan onboard

106 

107Setelah mengonfigurasi pengaturan terkelola, minta pengembang menjalankan `/status` di dalam Claude Code. Output mencakup baris yang dimulai dengan `Enterprise managed settings` diikuti oleh sumber dalam tanda kurung, salah satu dari `(remote)`, `(plist)`, `(HKLM)`, `(HKCU)`, atau `(file)`. Lihat [Verify active settings](/id/settings#verify-active-settings).

108 

109Bagikan sumber daya ini untuk membantu pengembang memulai:

110 

111* [Quickstart](/id/quickstart): panduan sesi pertama dari instalasi hingga bekerja dengan proyek

112* [Common workflows](/id/common-workflows): pola untuk tugas sehari-hari seperti tinjauan kode, refactoring, dan debugging

113* [Claude 101](https://anthropic.skilljar.com/claude-101) dan [Claude Code in Action](https://anthropic.skilljar.com/claude-code-in-action): kursus Anthropic Academy dengan kecepatan sendiri

114 

115Untuk masalah login, arahkan pengembang ke [authentication troubleshooting](/id/troubleshoot-install#login-and-authentication). Perbaikan paling umum adalah:

116 

117* Jalankan `/logout` kemudian `/login` untuk beralih akun

118* Jalankan `claude update` jika opsi auth enterprise hilang

119* Mulai ulang terminal setelah memperbarui

120 

121Jika pengembang melihat "You haven't been added to your organization yet," kursi mereka tidak termasuk akses Claude Code dan perlu diperbarui di konsol admin.

122 

123## Langkah berikutnya

124 

125Dengan penyedia dan mekanisme pengiriman dipilih, lanjutkan ke konfigurasi terperinci:

126 

127* [Server-managed settings](/id/server-managed-settings): kirimkan kebijakan terkelola dari konsol admin Claude

128* [Settings reference](/id/settings): setiap kunci pengaturan, lokasi file, dan aturan prioritas

129* [Amazon Bedrock](/id/amazon-bedrock), [Google Vertex AI](/id/google-vertex-ai), [Microsoft Foundry](/id/microsoft-foundry): penerapan khusus penyedia

130* [Claude Enterprise Administrator Guide](https://claude.com/resources/tutorials/claude-enterprise-administrator-guide): SSO, SCIM, manajemen kursi, dan playbook peluncuran

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 fitur Claude Code di SDK

6 

7> Muat instruksi proyek, skills, hooks, dan fitur Claude Code lainnya ke dalam agen SDK Anda.

8 

9Agent SDK dibangun di atas fondasi yang sama dengan Claude Code, yang berarti agen SDK Anda memiliki akses ke fitur berbasis filesystem yang sama: instruksi proyek (`CLAUDE.md` dan rules), skills, hooks, dan lainnya.

10 

11Ketika Anda menghilangkan `settingSources`, `query()` membaca pengaturan filesystem yang sama dengan Claude Code CLI: pengaturan pengguna, proyek, dan lokal, file `CLAUDE.md`, dan skills, agen, dan perintah di `.claude/`. Untuk menjalankan tanpa ini, teruskan `settingSources: []`, yang membatasi agen hanya pada apa yang Anda konfigurasi secara terprogram. Pengaturan kebijakan terkelola dan konfigurasi global `~/.claude.json` dibaca terlepas dari opsi ini. Lihat [Apa yang tidak dikontrol settingSources](#what-settingsources-does-not-control).

12 

13Untuk gambaran konseptual tentang apa yang dilakukan setiap fitur dan kapan menggunakannya, lihat [Perluas Claude Code](/id/features-overview).

14 

15## Kontrol pengaturan filesystem dengan settingSources

16 

17Opsi sumber pengaturan ([`setting_sources`](/id/agent-sdk/python#claude-agent-options) di Python, [`settingSources`](/id/agent-sdk/typescript#setting-source) di TypeScript) mengontrol pengaturan berbasis filesystem mana yang dimuat SDK. Teruskan daftar eksplisit untuk memilih sumber tertentu, atau teruskan array kosong untuk menonaktifkan pengaturan pengguna, proyek, dan lokal.

18 

19Contoh ini memuat pengaturan tingkat pengguna dan tingkat proyek dengan menetapkan `settingSources` ke `["user", "project"]`:

20 

21<CodeGroup>

22 ```python Python theme={null}

23 from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage, ResultMessage

24 

25 async for message in query(

26 prompt="Help me refactor the auth module",

27 options=ClaudeAgentOptions(

28 # "user" loads from ~/.claude/, "project" loads from ./.claude/ in cwd.

29 # Together they give the agent access to CLAUDE.md, skills, hooks, and

30 # permissions from both locations.

31 setting_sources=["user", "project"],

32 allowed_tools=["Read", "Edit", "Bash"],

33 ),

34 ):

35 if isinstance(message, AssistantMessage):

36 for block in message.content:

37 if hasattr(block, "text"):

38 print(block.text)

39 if isinstance(message, ResultMessage) and message.subtype == "success":

40 print(f"\nResult: {message.result}")

41 ```

42 

43 ```typescript TypeScript theme={null}

44 import { query } from "@anthropic-ai/claude-agent-sdk";

45 

46 for await (const message of query({

47 prompt: "Help me refactor the auth module",

48 options: {

49 // "user" loads from ~/.claude/, "project" loads from ./.claude/ in cwd.

50 // Together they give the agent access to CLAUDE.md, skills, hooks, and

51 // permissions from both locations.

52 settingSources: ["user", "project"],

53 allowedTools: ["Read", "Edit", "Bash"]

54 }

55 })) {

56 if (message.type === "assistant") {

57 for (const block of message.message.content) {

58 if (block.type === "text") console.log(block.text);

59 }

60 }

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

62 console.log(`\nResult: ${message.result}`);

63 }

64 }

65 ```

66</CodeGroup>

67 

68Setiap sumber memuat pengaturan dari lokasi tertentu, di mana `<cwd>` adalah direktori kerja yang Anda teruskan melalui opsi `cwd` (atau direktori saat ini proses jika tidak diatur). Untuk definisi tipe lengkap, lihat [`SettingSource`](/id/agent-sdk/typescript#setting-source) (TypeScript) atau [`SettingSource`](/id/agent-sdk/python#setting-source) (Python).

69 

70| Sumber | Apa yang dimuat | Lokasi |

71| :---------- | :------------------------------------------------------------------------------------------ | :---------------------------------------------------------------------------------------------------------------------------------- |

72| `"project"` | CLAUDE.md proyek, `.claude/rules/*.md`, skills proyek, hooks proyek, `settings.json` proyek | `<cwd>/.claude/` dan setiap direktori induk hingga akar filesystem (berhenti ketika `.claude/` ditemukan atau tidak ada lagi induk) |

73| `"user"` | CLAUDE.md pengguna, `~/.claude/rules/*.md`, skills pengguna, pengaturan pengguna | `~/.claude/` |

74| `"local"` | CLAUDE.local.md (gitignored), `.claude/settings.local.json` | `<cwd>/` |

75 

76Menghilangkan `settingSources` setara dengan `["user", "project", "local"]`.

77 

78Opsi `cwd` menentukan di mana SDK mencari pengaturan proyek. Jika baik `cwd` maupun direktori induknya tidak berisi folder `.claude/`, fitur tingkat proyek tidak akan dimuat.

79 

80### Apa yang tidak dikontrol settingSources

81 

82`settingSources` mencakup pengaturan pengguna, proyek, dan lokal. Beberapa input dibaca terlepas dari nilainya:

83 

84| Input | Perilaku | Untuk menonaktifkan |

85| :-------------------------------------------------------- | :------------------------------------------- | :----------------------------------------------------------------------------------------------- |

86| Pengaturan kebijakan terkelola | Selalu dimuat ketika ada di host | Hapus file pengaturan terkelola |

87| Konfigurasi global `~/.claude.json` | Selalu dibaca | Pindahkan dengan `CLAUDE_CONFIG_DIR` di `env` |

88| Memori otomatis di `~/.claude/projects/<project>/memory/` | Dimuat secara default ke dalam system prompt | Atur `autoMemoryEnabled: false` di pengaturan, atau `CLAUDE_CODE_DISABLE_AUTO_MEMORY=1` di `env` |

89 

90<Warning>

91 Jangan andalkan opsi `query()` default untuk isolasi multi-tenant. Karena input di atas dibaca terlepas dari `settingSources`, proses SDK dapat mengambil konfigurasi tingkat host dan memori per-direktori. Untuk deployment multi-tenant, jalankan setiap tenant di filesystem-nya sendiri dan atur `settingSources: []` ditambah `CLAUDE_CODE_DISABLE_AUTO_MEMORY=1` di `env`. Lihat [Secure deployment](/id/agent-sdk/secure-deployment).

92</Warning>

93 

94## Instruksi proyek (CLAUDE.md dan rules)

95 

96File `CLAUDE.md` dan file `.claude/rules/*.md` memberikan agen Anda konteks persisten tentang proyek Anda: konvensi pengkodean, perintah build, keputusan arsitektur, dan instruksi. Ketika `settingSources` mencakup `"project"` (seperti dalam contoh di atas), SDK memuat file ini ke dalam konteks pada awal sesi. Agen kemudian mengikuti konvensi proyek Anda tanpa Anda mengulanginya di setiap prompt.

97 

98### Lokasi pemuatan CLAUDE.md

99 

100| Level | Lokasi | Kapan dimuat |

101| :----------------------- | :----------------------------------------------- | :------------------------------------------------------------------------------------------------------ |

102| Proyek (root) | `<cwd>/CLAUDE.md` atau `<cwd>/.claude/CLAUDE.md` | `settingSources` mencakup `"project"` |

103| Rules proyek | `<cwd>/.claude/rules/*.md` | `settingSources` mencakup `"project"` |

104| Proyek (direktori induk) | File `CLAUDE.md` di direktori di atas `cwd` | `settingSources` mencakup `"project"`, dimuat pada awal sesi |

105| Proyek (direktori anak) | File `CLAUDE.md` di subdirektori `cwd` | `settingSources` mencakup `"project"`, dimuat sesuai permintaan ketika agen membaca file di subtree itu |

106| Lokal (gitignored) | `<cwd>/CLAUDE.local.md` | `settingSources` mencakup `"local"` |

107| Pengguna | `~/.claude/CLAUDE.md` | `settingSources` mencakup `"user"` |

108| Rules pengguna | `~/.claude/rules/*.md` | `settingSources` mencakup `"user"` |

109 

110Semua level bersifat aditif: jika file `CLAUDE.md` proyek dan pengguna keduanya ada, agen melihat keduanya. Tidak ada aturan preseden keras antara level; jika instruksi bertentangan, hasilnya tergantung pada bagaimana Claude menafsirkannya. Tulis aturan yang tidak bertentangan, atau nyatakan preseden secara eksplisit di file yang lebih spesifik ("Instruksi proyek ini menggantikan default tingkat pengguna yang bertentangan").

111 

112<Tip>

113 Anda juga dapat menyuntikkan konteks secara langsung melalui `systemPrompt` tanpa menggunakan file `CLAUDE.md`. Lihat [Ubah system prompts](/id/agent-sdk/modifying-system-prompts). Gunakan `CLAUDE.md` ketika Anda ingin konteks yang sama dibagikan antara sesi Claude Code interaktif dan agen SDK Anda.

114</Tip>

115 

116Untuk cara menyusun dan mengorganisir konten `CLAUDE.md`, lihat [Kelola memori Claude](/id/memory).

117 

118## Skills

119 

120Skills adalah file markdown yang memberikan agen Anda pengetahuan khusus dan alur kerja yang dapat dipanggil. Tidak seperti `CLAUDE.md` (yang dimuat setiap sesi), skills dimuat sesuai permintaan. Agen menerima deskripsi skill pada startup dan memuat konten lengkap ketika relevan.

121 

122Skills ditemukan dari filesystem melalui `settingSources`. Dengan opsi default, skills pengguna dan proyek dimuat secara otomatis. Tool `Skill` diaktifkan secara default ketika Anda tidak menentukan `allowedTools`. Jika Anda menggunakan daftar allowlist `allowedTools`, sertakan `"Skill"` secara eksplisit.

123 

124<CodeGroup>

125 ```python Python theme={null}

126 from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage

127 

128 # Skills in .claude/skills/ are discovered automatically

129 # when settingSources includes "project"

130 async for message in query(

131 prompt="Review this PR using our code review checklist",

132 options=ClaudeAgentOptions(

133 setting_sources=["user", "project"],

134 allowed_tools=["Skill", "Read", "Grep", "Glob"],

135 ),

136 ):

137 if isinstance(message, ResultMessage) and message.subtype == "success":

138 print(message.result)

139 ```

140 

141 ```typescript TypeScript theme={null}

142 import { query } from "@anthropic-ai/claude-agent-sdk";

143 

144 // Skills in .claude/skills/ are discovered automatically

145 // when settingSources includes "project"

146 for await (const message of query({

147 prompt: "Review this PR using our code review checklist",

148 options: {

149 settingSources: ["user", "project"],

150 allowedTools: ["Skill", "Read", "Grep", "Glob"]

151 }

152 })) {

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

154 console.log(message.result);

155 }

156 }

157 ```

158</CodeGroup>

159 

160<Note>

161 Skills harus dibuat sebagai artifact filesystem (`.claude/skills/<name>/SKILL.md`). SDK tidak memiliki API terprogram untuk mendaftarkan skills. Lihat [Agent Skills di SDK](/id/agent-sdk/skills) untuk detail lengkap.

162</Note>

163 

164Untuk lebih lanjut tentang membuat dan menggunakan skills, lihat [Agent Skills di SDK](/id/agent-sdk/skills).

165 

166## Hooks

167 

168SDK mendukung dua cara untuk mendefinisikan hooks, dan mereka berjalan beriringan:

169 

170* **Filesystem hooks:** perintah shell yang didefinisikan di `settings.json`, dimuat ketika `settingSources` mencakup sumber yang relevan. Ini adalah hooks yang sama yang akan Anda konfigurasi untuk [sesi Claude Code interaktif](/id/hooks-guide).

171* **Programmatic hooks:** fungsi callback yang diteruskan langsung ke `query()`. Ini berjalan dalam proses aplikasi Anda dan dapat mengembalikan keputusan terstruktur. Lihat [Kontrol eksekusi dengan hooks](/id/agent-sdk/hooks).

172 

173Kedua tipe berjalan selama siklus hidup hook yang sama. Jika Anda sudah memiliki hooks di `.claude/settings.json` proyek Anda dan Anda menetapkan `settingSources: ["project"]`, hooks tersebut berjalan secara otomatis di SDK tanpa konfigurasi tambahan.

174 

175Callback hook menerima input tool dan mengembalikan dict keputusan. Mengembalikan `{}` (dict kosong) berarti izinkan tool untuk melanjutkan. Mengembalikan `{"decision": "block", "reason": "..."}` mencegah eksekusi dan alasan dikirim ke Claude sebagai hasil tool. Lihat [panduan hooks](/id/agent-sdk/hooks) untuk tanda tangan callback lengkap dan tipe pengembalian.

176 

177<CodeGroup>

178 ```python Python theme={null}

179 from claude_agent_sdk import query, ClaudeAgentOptions, HookMatcher, ResultMessage

180 

181 

182 # PreToolUse hook callback. Positional args:

183 # input_data: HookInput dict with tool_name, tool_input, hook_event_name

184 # tool_use_id: str | None, the ID of the tool call being intercepted

185 # context: HookContext, carries session metadata

186 async def audit_bash(input_data, tool_use_id, context):

187 command = input_data.get("tool_input", {}).get("command", "")

188 if "rm -rf" in command:

189 return {"decision": "block", "reason": "Destructive command blocked"}

190 return {} # Empty dict: allow the tool to proceed

191 

192 

193 # Filesystem hooks from .claude/settings.json run automatically

194 # when settingSources loads them. You can also add programmatic hooks:

195 async for message in query(

196 prompt="Refactor the auth module",

197 options=ClaudeAgentOptions(

198 setting_sources=["project"], # Loads hooks from .claude/settings.json

199 hooks={

200 "PreToolUse": [

201 HookMatcher(matcher="Bash", hooks=[audit_bash]),

202 ]

203 },

204 ),

205 ):

206 if isinstance(message, ResultMessage) and message.subtype == "success":

207 print(message.result)

208 ```

209 

210 ```typescript TypeScript theme={null}

211 import { query, type HookInput, type HookJSONOutput } from "@anthropic-ai/claude-agent-sdk";

212 

213 // PreToolUse hook callback. HookInput is a discriminated union on

214 // hook_event_name, so narrowing on it gives TypeScript the right

215 // tool_input shape for this event.

216 const auditBash = async (input: HookInput): Promise<HookJSONOutput> => {

217 if (input.hook_event_name !== "PreToolUse") return {};

218 const toolInput = input.tool_input as { command?: string };

219 if (toolInput.command?.includes("rm -rf")) {

220 return { decision: "block", reason: "Destructive command blocked" };

221 }

222 return {}; // Empty object: allow the tool to proceed

223 };

224 

225 // Filesystem hooks from .claude/settings.json run automatically

226 // when settingSources loads them. You can also add programmatic hooks:

227 for await (const message of query({

228 prompt: "Refactor the auth module",

229 options: {

230 settingSources: ["project"], // Loads hooks from .claude/settings.json

231 hooks: {

232 PreToolUse: [{ matcher: "Bash", hooks: [auditBash] }]

233 }

234 }

235 })) {

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

237 console.log(message.result);

238 }

239 }

240 ```

241</CodeGroup>

242 

243### Kapan menggunakan tipe hook mana

244 

245| Tipe hook | Terbaik untuk |

246| :---------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

247| **Filesystem** (`settings.json`) | Berbagi hooks antara sesi CLI dan SDK. Mendukung `"command"` (skrip shell), `"http"` (POST ke endpoint), `"mcp_tool"` (panggil tool server MCP yang terhubung), `"prompt"` (LLM mengevaluasi prompt), dan `"agent"` (menghasilkan agen verifier). Ini dijalankan di agen utama dan subagen apa pun yang dihasilkannya. |

248| **Programmatic** (callbacks di `query()`) | Logika khusus aplikasi; mengembalikan keputusan terstruktur; integrasi dalam proses. Dibatasi hanya pada sesi utama. |

249 

250<Note>

251 SDK TypeScript mendukung event hook tambahan di luar Python, termasuk `SessionStart`, `SessionEnd`, `TeammateIdle`, dan `TaskCompleted`. Lihat [panduan hooks](/id/agent-sdk/hooks) untuk tabel kompatibilitas event lengkap.

252</Note>

253 

254Untuk detail lengkap tentang hooks terprogram, lihat [Kontrol eksekusi dengan hooks](/id/agent-sdk/hooks). Untuk sintaks hook filesystem, lihat [Hooks](/id/hooks).

255 

256## Pilih fitur yang tepat

257 

258Agent SDK memberi Anda akses ke beberapa cara untuk memperluas perilaku agen Anda. Jika Anda tidak yakin mana yang digunakan, tabel ini memetakan tujuan umum ke pendekatan yang tepat.

259 

260| Anda ingin... | Gunakan | Permukaan SDK |

261| :--------------------------------------------------------------------------------------------------- | :----------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

262| Atur konvensi proyek yang selalu diikuti agen Anda | [CLAUDE.md](/id/memory) | `settingSources: ["project"]` memuat secara otomatis |

263| Berikan agen materi referensi yang dimuat ketika relevan | [Skills](/id/agent-sdk/skills) | `settingSources` + `allowedTools: ["Skill"]` |

264| Jalankan alur kerja yang dapat digunakan kembali (deploy, review, release) | [Skills yang dapat dipanggil pengguna](/id/agent-sdk/skills) | `settingSources` + `allowedTools: ["Skill"]` |

265| Delegasikan subtask terisolasi ke konteks segar (research, review) | [Subagents](/id/agent-sdk/subagents) | Parameter `agents` + `allowedTools: ["Agent"]` |

266| Koordinasikan beberapa instans Claude Code dengan daftar tugas bersama dan pesan inter-agen langsung | [Agent teams](/id/agent-teams) | Tidak dikonfigurasi langsung melalui opsi SDK. Agent teams adalah fitur CLI di mana satu sesi bertindak sebagai pemimpin tim, mengoordinasikan pekerjaan di seluruh rekan kerja independen |

267| Jalankan logika deterministik pada tool calls (audit, block, transform) | [Hooks](/id/agent-sdk/hooks) | Parameter `hooks` dengan callbacks, atau skrip shell dimuat melalui `settingSources` |

268| Berikan Claude akses tool terstruktur ke layanan eksternal | [MCP](/id/agent-sdk/mcp) | Parameter `mcpServers` |

269 

270<Tip>

271 **Subagents versus agent teams:** Subagents bersifat ephemeral dan terisolasi: percakapan segar, satu tugas, ringkasan dikembalikan ke induk. Agent teams mengoordinasikan beberapa instans Claude Code independen yang berbagi daftar tugas dan saling mengirim pesan langsung. Agent teams adalah fitur CLI. Lihat [Apa yang diwarisi subagents](/id/agent-sdk/subagents#what-subagents-inherit) dan [perbandingan agent teams](/id/agent-teams#compare-with-subagents) untuk detail.

272</Tip>

273 

274Setiap fitur yang Anda aktifkan menambah jendela konteks agen Anda. Untuk biaya per-fitur dan bagaimana fitur ini berlapis bersama, lihat [Perluas Claude Code](/id/features-overview#understand-context-costs).

275 

276## Sumber daya terkait

277 

278* [Perluas Claude Code](/id/features-overview): Gambaran konseptual semua fitur ekstensi, dengan tabel perbandingan dan analisis biaya konteks

279* [Skills di SDK](/id/agent-sdk/skills): Panduan lengkap menggunakan skills secara terprogram

280* [Subagents](/id/agent-sdk/subagents): Tentukan dan panggil subagents untuk subtask terisolasi

281* [Hooks](/id/agent-sdk/hooks): Intersep dan kontrol perilaku agen di titik eksekusi kunci

282* [Permissions](/id/agent-sdk/permissions): Kontrol akses tool dengan mode, rules, dan callbacks

283* [System prompts](/id/agent-sdk/modifying-system-prompts): Suntikkan konteks tanpa file CLAUDE.md

agent-sdk/cost-tracking.md +263 −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# Lacak biaya dan penggunaan

6 

7> Pelajari cara melacak penggunaan token, memperkirakan biaya, dan mengonfigurasi prompt caching dengan Claude Agent SDK.

8 

9Claude Agent SDK menyediakan informasi penggunaan token yang terperinci untuk setiap interaksi dengan Claude. Panduan ini menjelaskan cara melacak penggunaan dengan benar dan memahami pelaporan biaya, terutama ketika menangani penggunaan alat paralel dan percakapan multi-langkah.

10 

11Untuk dokumentasi API lengkap, lihat [referensi SDK TypeScript](/id/agent-sdk/typescript) dan [referensi SDK Python](/id/agent-sdk/python).

12 

13<Warning>

14 Bidang `total_cost_usd` dan `costUSD` adalah perkiraan sisi klien, bukan data penagihan yang berwenang. SDK menghitungnya secara lokal dari tabel harga yang disertakan pada waktu pembuatan, sehingga dapat menyimpang dari apa yang sebenarnya Anda ditagih ketika:

15 

16 * harga berubah

17 * versi SDK yang diinstal tidak mengenali model

18 * aturan penagihan berlaku yang tidak dapat dimodelkan oleh klien

19 

20 Gunakan bidang ini untuk wawasan pengembangan dan anggaran perkiraan. Untuk penagihan yang berwenang, gunakan [Usage and Cost API](https://platform.claude.com/docs/en/build-with-claude/usage-cost-api) atau halaman Penggunaan di [Claude Console](https://platform.claude.com/usage). Jangan menagih pengguna akhir atau memicu keputusan keuangan dari bidang ini.

21</Warning>

22 

23## Pahami penggunaan token

24 

25SDK TypeScript dan Python mengekspos data penggunaan yang sama dengan nama bidang yang berbeda:

26 

27* **TypeScript** menyediakan rincian token per-langkah pada setiap pesan asisten (`message.message.id`, `message.message.usage`), biaya per-model melalui `modelUsage` pada pesan hasil, dan total kumulatif pada pesan hasil.

28* **Python** menyediakan rincian token per-langkah pada setiap pesan asisten (`message.usage`, `message.message_id`), biaya per-model melalui `model_usage` pada pesan hasil, dan total yang terakumulasi pada pesan hasil (`total_cost_usd` dan dict `usage`).

29 

30Kedua SDK menggunakan model biaya yang sama dan mengekspos granularitas yang sama. Perbedaannya adalah dalam penamaan bidang dan di mana penggunaan per-langkah bersarang.

31 

32Pelacakan biaya bergantung pada pemahaman tentang bagaimana SDK membatasi data penggunaan:

33 

34* **Panggilan `query()`:** satu invokasi fungsi `query()` SDK. Satu panggilan dapat melibatkan beberapa langkah (Claude merespons, menggunakan alat, mendapatkan hasil, merespons lagi). Setiap panggilan menghasilkan satu pesan [`result`](/id/agent-sdk/typescript#sdk-result-message) di akhir.

35* **Langkah:** satu siklus permintaan/respons dalam panggilan `query()`. Setiap langkah menghasilkan pesan asisten dengan penggunaan token.

36* **Sesi:** serangkaian panggilan `query()` yang ditautkan oleh ID sesi (menggunakan opsi `resume`). Setiap panggilan `query()` dalam sesi melaporkan biayanya sendiri secara independen.

37 

38Diagram berikut menunjukkan aliran pesan dari satu panggilan `query()`, dengan penggunaan token dilaporkan pada setiap langkah dan perkiraan kumulatif di akhir:

39 

40<img src="https://mintcdn.com/claude-code/Dujg43sxTkuhSELI/images/agent-sdk/message-usage-flow.svg?fit=max&auto=format&n=Dujg43sxTkuhSELI&q=85&s=c542f51ff58547ef9c0e57b16d03f33c" alt="Diagram menunjukkan query menghasilkan dua langkah pesan. Langkah 1 memiliki empat pesan asisten yang berbagi ID dan penggunaan yang sama (hitung sekali), Langkah 2 memiliki satu pesan asisten dengan ID baru, dan pesan hasil akhir menunjukkan total_cost_usd yang diperkirakan." width="760" height="520" data-path="images/agent-sdk/message-usage-flow.svg" />

41 

42<Steps>

43 <Step title="Setiap langkah menghasilkan pesan asisten">

44 Ketika Claude merespons, ia mengirim satu atau lebih pesan asisten. Di TypeScript, setiap pesan asisten berisi `BetaMessage` bersarang (diakses melalui `message.message`) dengan `id` dan objek [`usage`](https://platform.claude.com/docs/en/api/messages) dengan hitungan token (`input_tokens`, `output_tokens`). Di Python, dataclass `AssistantMessage` mengekspos data yang sama secara langsung melalui `message.usage` dan `message.message_id`. Ketika Claude menggunakan beberapa alat dalam satu giliran, semua pesan dalam giliran itu berbagi ID yang sama, jadi deduplikasi berdasarkan ID untuk menghindari penghitungan ganda.

45 </Step>

46 

47 <Step title="Pesan hasil memberikan perkiraan kumulatif">

48 Ketika panggilan `query()` selesai, SDK memancarkan pesan hasil dengan `total_cost_usd` dan `usage` kumulatif. Ini tersedia di TypeScript ([`SDKResultMessage`](/id/agent-sdk/typescript#sdk-result-message)) dan Python ([`ResultMessage`](/id/agent-sdk/python#result-message)). Jika Anda membuat beberapa panggilan `query()` (misalnya, dalam sesi multi-giliran), setiap hasil hanya mencerminkan biaya panggilan individual itu. Jika Anda hanya membutuhkan total yang diperkirakan, Anda dapat mengabaikan penggunaan per-langkah dan membaca nilai tunggal ini.

49 </Step>

50</Steps>

51 

52## Dapatkan biaya total dari query

53 

54Pesan hasil ([TypeScript](/id/agent-sdk/typescript#sdk-result-message), [Python](/id/agent-sdk/python#result-message)) menandai akhir dari loop agen untuk panggilan `query()`. Ini mencakup `total_cost_usd`, biaya perkiraan kumulatif di semua langkah dalam panggilan itu. Ini berfungsi untuk hasil sukses dan kesalahan. Jika Anda menggunakan sesi untuk membuat beberapa panggilan `query()`, setiap hasil hanya mencerminkan biaya panggilan individual itu.

55 

56Contoh berikut mengulangi aliran pesan dari panggilan `query()` dan mencetak biaya total ketika pesan `result` tiba:

57 

58<CodeGroup>

59 ```typescript TypeScript theme={null}

60 import { query } from "@anthropic-ai/claude-agent-sdk";

61 

62 for await (const message of query({ prompt: "Summarize this project" })) {

63 if (message.type === "result") {

64 console.log(`Total cost: $${message.total_cost_usd}`);

65 }

66 }

67 ```

68 

69 ```python Python theme={null}

70 from claude_agent_sdk import query, ResultMessage

71 import asyncio

72 

73 

74 async def main():

75 async for message in query(prompt="Summarize this project"):

76 if isinstance(message, ResultMessage):

77 print(f"Total cost: ${message.total_cost_usd or 0}")

78 

79 

80 asyncio.run(main())

81 ```

82</CodeGroup>

83 

84## Lacak penggunaan per-langkah dan per-model

85 

86Contoh di bagian ini menggunakan nama bidang TypeScript. Di Python, bidang yang setara adalah [`AssistantMessage.usage`](/id/agent-sdk/python#assistant-message) dan `AssistantMessage.message_id` untuk penggunaan per-langkah, dan [`ResultMessage.model_usage`](/id/agent-sdk/python#result-message) untuk rincian per-model.

87 

88### Lacak penggunaan per-langkah

89 

90Setiap pesan asisten berisi `BetaMessage` bersarang (diakses melalui `message.message`) dengan `id` dan objek `usage` dengan hitungan token. Ketika Claude menggunakan alat secara paralel, beberapa pesan berbagi `id` yang sama dengan data penggunaan yang identik. Lacak ID mana yang sudah Anda hitung dan lewati duplikat untuk menghindari total yang meningkat.

91 

92<Warning>

93 Panggilan alat paralel menghasilkan beberapa pesan asisten yang `BetaMessage` bersarangnya berbagi `id` yang sama dan penggunaan yang identik. Selalu deduplikasi berdasarkan ID untuk mendapatkan hitungan token per-langkah yang akurat.

94</Warning>

95 

96Contoh berikut mengakumulasi token input dan output di semua langkah, menghitung setiap ID pesan unik hanya sekali:

97 

98```typescript theme={null}

99import { query } from "@anthropic-ai/claude-agent-sdk";

100 

101const seenIds = new Set<string>();

102let totalInputTokens = 0;

103let totalOutputTokens = 0;

104 

105for await (const message of query({ prompt: "Summarize this project" })) {

106 if (message.type === "assistant") {

107 const msgId = message.message.id;

108 

109 // Parallel tool calls share the same ID, only count once

110 if (!seenIds.has(msgId)) {

111 seenIds.add(msgId);

112 totalInputTokens += message.message.usage.input_tokens;

113 totalOutputTokens += message.message.usage.output_tokens;

114 }

115 }

116}

117 

118console.log(`Steps: ${seenIds.size}`);

119console.log(`Input tokens: ${totalInputTokens}`);

120console.log(`Output tokens: ${totalOutputTokens}`);

121```

122 

123### Rincian penggunaan per model

124 

125Pesan hasil mencakup [`modelUsage`](/id/agent-sdk/typescript#model-usage), peta nama model ke hitungan token per-model dan biaya. Ini berguna ketika Anda menjalankan beberapa model (misalnya, Haiku untuk subagen dan Opus untuk agen utama) dan ingin melihat ke mana token pergi.

126 

127Contoh berikut menjalankan query dan mencetak rincian biaya dan token untuk setiap model yang digunakan:

128 

129```typescript theme={null}

130import { query } from "@anthropic-ai/claude-agent-sdk";

131 

132for await (const message of query({ prompt: "Summarize this project" })) {

133 if (message.type !== "result") continue;

134 

135 for (const [modelName, usage] of Object.entries(message.modelUsage)) {

136 console.log(`${modelName}: $${usage.costUSD.toFixed(4)}`);

137 console.log(` Input tokens: ${usage.inputTokens}`);

138 console.log(` Output tokens: ${usage.outputTokens}`);

139 console.log(` Cache read: ${usage.cacheReadInputTokens}`);

140 console.log(` Cache creation: ${usage.cacheCreationInputTokens}`);

141 }

142}

143```

144 

145## Akumulasi biaya di beberapa panggilan

146 

147Setiap panggilan `query()` mengembalikan `total_cost_usd`-nya sendiri. SDK tidak menyediakan total tingkat sesi, jadi jika aplikasi Anda membuat beberapa panggilan `query()` (misalnya, dalam sesi multi-giliran atau di seluruh pengguna yang berbeda), akumulasi total sendiri.

148 

149Contoh berikut menjalankan dua panggilan `query()` secara berurutan, menambahkan `total_cost_usd` setiap panggilan ke total yang berjalan, dan mencetak biaya per-panggilan dan gabungan:

150 

151<CodeGroup>

152 ```typescript TypeScript theme={null}

153 import { query } from "@anthropic-ai/claude-agent-sdk";

154 

155 // Track cumulative cost across multiple query() calls

156 let totalSpend = 0;

157 

158 const prompts = [

159 "Read the files in src/ and summarize the architecture",

160 "List all exported functions in src/auth.ts"

161 ];

162 

163 for (const prompt of prompts) {

164 for await (const message of query({ prompt })) {

165 if (message.type === "result") {

166 totalSpend += message.total_cost_usd;

167 console.log(`This call: $${message.total_cost_usd}`);

168 }

169 }

170 }

171 

172 console.log(`Total spend: $${totalSpend.toFixed(4)}`);

173 ```

174 

175 ```python Python theme={null}

176 from claude_agent_sdk import query, ResultMessage

177 import asyncio

178 

179 

180 async def main():

181 # Track cumulative cost across multiple query() calls

182 total_spend = 0.0

183 

184 prompts = [

185 "Read the files in src/ and summarize the architecture",

186 "List all exported functions in src/auth.ts",

187 ]

188 

189 for prompt in prompts:

190 async for message in query(prompt=prompt):

191 if isinstance(message, ResultMessage):

192 cost = message.total_cost_usd or 0

193 total_spend += cost

194 print(f"This call: ${cost}")

195 

196 print(f"Total spend: ${total_spend:.4f}")

197 

198 

199 asyncio.run(main())

200 ```

201</CodeGroup>

202 

203## Tangani kesalahan, caching, dan perbedaan token

204 

205Untuk pelacakan biaya yang akurat, pertimbangkan percakapan yang gagal, harga token cache, dan ketidakkonsistenan pelaporan yang sesekali.

206 

207### Selesaikan perbedaan token output

208 

209Dalam kasus yang jarang terjadi, Anda mungkin mengamati nilai `output_tokens` yang berbeda untuk pesan dengan ID yang sama. Ketika ini terjadi:

210 

2111. **Gunakan nilai tertinggi:** pesan terakhir dalam grup biasanya berisi total yang akurat.

2122. **Lebih suka pesan hasil:** `total_cost_usd` dalam pesan hasil mencerminkan perkiraan terakumulasi SDK di semua langkah, sehingga lebih dapat diandalkan daripada menjumlahkan nilai per-langkah sendiri. Ini masih merupakan perkiraan dan mungkin berbeda dari tagihan aktual Anda.

2133. **Laporkan ketidakkonsistenan:** ajukan masalah di [repositori GitHub Claude Code](https://github.com/anthropics/claude-code/issues).

214 

215### Lacak biaya pada percakapan yang gagal

216 

217Pesan hasil sukses dan kesalahan keduanya mencakup `usage` dan `total_cost_usd`. Jika percakapan gagal di tengah jalan, Anda masih mengonsumsi token hingga titik kegagalan. Selalu baca data biaya dari pesan hasil terlepas dari `subtype`-nya.

218 

219### Lacak token cache

220 

221Agent SDK secara otomatis menggunakan [prompt caching](https://platform.claude.com/docs/en/build-with-claude/prompt-caching) untuk mengurangi biaya pada konten berulang. Anda tidak perlu mengonfigurasi caching sendiri. Objek penggunaan mencakup dua bidang tambahan untuk pelacakan cache:

222 

223* `cache_creation_input_tokens`: token yang digunakan untuk membuat entri cache baru (ditagih dengan tarif lebih tinggi daripada token input standar).

224* `cache_read_input_tokens`: token yang dibaca dari entri cache yang ada (ditagih dengan tarif yang dikurangi).

225 

226Lacak ini secara terpisah dari `input_tokens` untuk memahami penghematan caching. Di TypeScript, bidang ini diketik pada objek [`Usage`](/id/agent-sdk/typescript#usage). Di Python, mereka muncul sebagai kunci dalam dict [`ResultMessage.usage`](/id/agent-sdk/python#result-message) (misalnya, `message.usage.get("cache_read_input_tokens", 0)`).

227 

228### Perpanjang TTL cache prompt ke satu jam

229 

230Entri cache yang ditulis oleh SDK menggunakan TTL 5 menit secara default ketika Anda mengautentikasi dengan kunci API atau menjalankan di Amazon Bedrock, Google Cloud Vertex AI, atau Microsoft Foundry. Jika beban kerja Anda menjalankan banyak sesi pendek terhadap prompt sistem dan konteks yang sama dengan celah lebih lama dari 5 menit di antara mereka, cache kedaluwarsa di antara sesi dan setiap sesi baru membayar harga input penuh.

231 

232Untuk meminta TTL 1 jam pada penulisan cache, atur variabel lingkungan [`ENABLE_PROMPT_CACHING_1H`](/id/env-vars). Anda dapat mengekspornya di lingkungan shell atau kontainer Anda, atau meneruskannya melalui `options.env`.

233 

234Contoh berikut mengaktifkan TTL 1 jam untuk agen yang berjalan di Bedrock:

235 

236<CodeGroup>

237 ```python Python theme={null}

238 options = ClaudeAgentOptions(

239 env={

240 "CLAUDE_CODE_USE_BEDROCK": "1",

241 "ENABLE_PROMPT_CACHING_1H": "1",

242 },

243 )

244 ```

245 

246 ```typescript TypeScript theme={null}

247 const options = {

248 env: {

249 ...process.env,

250 CLAUDE_CODE_USE_BEDROCK: "1",

251 ENABLE_PROMPT_CACHING_1H: "1",

252 },

253 };

254 ```

255</CodeGroup>

256 

257Penulisan cache dengan TTL 1 jam ditagih dengan tarif lebih tinggi daripada penulisan 5 menit, jadi mengaktifkan ini menukar biaya penulisan lebih tinggi untuk lebih banyak pembacaan cache. Lihat [harga prompt caching](https://platform.claude.com/docs/en/build-with-claude/prompt-caching) untuk detail. Pengguna langganan Claude sudah menerima TTL 1 jam secara otomatis dan tidak perlu mengatur variabel ini.

258 

259## Dokumentasi terkait

260 

261* [Referensi SDK TypeScript](/id/agent-sdk/typescript) - Dokumentasi API lengkap

262* [Ikhtisar SDK](/id/agent-sdk/overview) - Memulai dengan SDK

263* [Izin SDK](/id/agent-sdk/permissions) - Mengelola izin alat

agent-sdk/hooks.md +819 −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# Intercept dan kontrol perilaku agent dengan hooks

6 

7> Intercept dan customize perilaku agent pada titik eksekusi kunci dengan hooks

8 

9Hooks adalah fungsi callback yang menjalankan kode Anda sebagai respons terhadap peristiwa agent, seperti tool yang dipanggil, sesi dimulai, atau eksekusi berhenti. Dengan hooks, Anda dapat:

10 

11* **Blokir operasi berbahaya** sebelum dieksekusi, seperti perintah shell yang merusak atau akses file yang tidak sah

12* **Log dan audit** setiap pemanggilan tool untuk kepatuhan, debugging, atau analitik

13* **Transform input dan output** untuk membersihkan data, menyuntikkan kredensial, atau mengalihkan jalur file

14* **Memerlukan persetujuan manusia** untuk tindakan sensitif seperti penulisan database atau panggilan API

15* **Track lifecycle sesi** untuk mengelola state, membersihkan resources, atau mengirim notifikasi

16 

17Panduan ini mencakup cara kerja hooks, cara mengonfigurasinya, dan menyediakan contoh untuk pola umum seperti memblokir tools, memodifikasi input, dan meneruskan notifikasi.

18 

19## Cara kerja hooks

20 

21<Steps>

22 <Step title="Sebuah event terjadi">

23 Sesuatu terjadi selama eksekusi agent dan SDK menembakkan event: tool akan dipanggil (`PreToolUse`), tool mengembalikan hasil (`PostToolUse`), subagent dimulai atau berhenti, agent idle, atau eksekusi selesai. Lihat [daftar lengkap events](#available-hooks).

24 </Step>

25 

26 <Step title="SDK mengumpulkan hooks terdaftar">

27 SDK memeriksa hooks yang terdaftar untuk tipe event tersebut. Ini termasuk callback hooks yang Anda berikan di `options.hooks` dan shell command hooks dari file pengaturan ketika [`settingSources`](/id/agent-sdk/typescript#setting-source) atau [`setting_sources`](/id/agent-sdk/python#setting-source) entry yang sesuai diaktifkan, yang mana untuk opsi `query()` default.

28 </Step>

29 

30 <Step title="Matchers memfilter hooks mana yang berjalan">

31 Jika hook memiliki pola [`matcher`](#matchers) (seperti `"Write|Edit"`), SDK mengujinya terhadap target event (misalnya, nama tool). Hooks tanpa matcher berjalan untuk setiap event dari tipe tersebut.

32 </Step>

33 

34 <Step title="Fungsi callback dieksekusi">

35 Setiap [fungsi callback](#callback-functions) hook yang cocok menerima input tentang apa yang terjadi: nama tool, argumennya, ID sesi, dan detail spesifik event lainnya.

36 </Step>

37 

38 <Step title="Callback Anda mengembalikan keputusan">

39 Setelah melakukan operasi apa pun (logging, panggilan API, validasi), callback Anda mengembalikan [output object](#outputs) yang memberi tahu agent apa yang harus dilakukan: izinkan operasi, blokir, modifikasi input, atau suntikkan konteks ke dalam percakapan.

40 </Step>

41</Steps>

42 

43Contoh berikut menyatukan langkah-langkah ini. Ini mendaftarkan hook `PreToolUse` (langkah 1) dengan matcher `"Write|Edit"` (langkah 3) sehingga callback hanya terjadi untuk tools penulisan file. Ketika dipicu, callback menerima input tool (langkah 4), memeriksa apakah jalur file menargetkan file `.env`, dan mengembalikan `permissionDecision: "deny"` untuk memblokir operasi (langkah 5):

44 

45<CodeGroup>

46 ```python Python theme={null}

47 import asyncio

48 from claude_agent_sdk import (

49 AssistantMessage,

50 ClaudeSDKClient,

51 ClaudeAgentOptions,

52 HookMatcher,

53 ResultMessage,

54 )

55 

56 

57 # Define a hook callback that receives tool call details

58 async def protect_env_files(input_data, tool_use_id, context):

59 # Extract the file path from the tool's input arguments

60 file_path = input_data["tool_input"].get("file_path", "")

61 file_name = file_path.split("/")[-1]

62 

63 # Block the operation if targeting a .env file

64 if file_name == ".env":

65 return {

66 "hookSpecificOutput": {

67 "hookEventName": input_data["hook_event_name"],

68 "permissionDecision": "deny",

69 "permissionDecisionReason": "Cannot modify .env files",

70 }

71 }

72 

73 # Return empty object to allow the operation

74 return {}

75 

76 

77 async def main():

78 options = ClaudeAgentOptions(

79 hooks={

80 # Register the hook for PreToolUse events

81 # The matcher filters to only Write and Edit tool calls

82 "PreToolUse": [HookMatcher(matcher="Write|Edit", hooks=[protect_env_files])]

83 }

84 )

85 

86 async with ClaudeSDKClient(options=options) as client:

87 await client.query("Update the database configuration")

88 async for message in client.receive_response():

89 # Filter for assistant and result messages

90 if isinstance(message, (AssistantMessage, ResultMessage)):

91 print(message)

92 

93 

94 asyncio.run(main())

95 ```

96 

97 ```typescript TypeScript theme={null}

98 import { query, HookCallback, PreToolUseHookInput } from "@anthropic-ai/claude-agent-sdk";

99 

100 // Define a hook callback with the HookCallback type

101 const protectEnvFiles: HookCallback = async (input, toolUseID, { signal }) => {

102 // Cast input to the specific hook type for type safety

103 const preInput = input as PreToolUseHookInput;

104 

105 // Cast tool_input to access its properties (typed as unknown in the SDK)

106 const toolInput = preInput.tool_input as Record<string, unknown>;

107 const filePath = toolInput?.file_path as string;

108 const fileName = filePath?.split("/").pop();

109 

110 // Block the operation if targeting a .env file

111 if (fileName === ".env") {

112 return {

113 hookSpecificOutput: {

114 hookEventName: preInput.hook_event_name,

115 permissionDecision: "deny",

116 permissionDecisionReason: "Cannot modify .env files"

117 }

118 };

119 }

120 

121 // Return empty object to allow the operation

122 return {};

123 };

124 

125 for await (const message of query({

126 prompt: "Update the database configuration",

127 options: {

128 hooks: {

129 // Register the hook for PreToolUse events

130 // The matcher filters to only Write and Edit tool calls

131 PreToolUse: [{ matcher: "Write|Edit", hooks: [protectEnvFiles] }]

132 }

133 }

134 })) {

135 // Filter for assistant and result messages

136 if (message.type === "assistant" || message.type === "result") {

137 console.log(message);

138 }

139 }

140 ```

141</CodeGroup>

142 

143## Available hooks

144 

145SDK menyediakan hooks untuk tahap berbeda dari eksekusi agent. Beberapa hooks tersedia di kedua SDK, sementara yang lain hanya TypeScript.

146 

147| Hook Event | Python SDK | TypeScript SDK | Apa yang memicunya | Contoh use case |

148| -------------------- | ---------- | -------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------- |

149| `PreToolUse` | Ya | Ya | Permintaan pemanggilan tool (dapat memblokir atau memodifikasi) | Blokir perintah shell berbahaya |

150| `PostToolUse` | Ya | Ya | Hasil eksekusi tool | Log semua perubahan file ke audit trail |

151| `PostToolUseFailure` | Ya | Ya | Kegagalan eksekusi tool | Tangani atau log kesalahan tool |

152| `PostToolBatch` | Tidak | Ya | Batch lengkap pemanggilan tool terselesaikan, sekali per batch sebelum panggilan model berikutnya | Suntikkan konvensi sekali untuk seluruh batch |

153| `UserPromptSubmit` | Ya | Ya | Pengajuan prompt pengguna | Suntikkan konteks tambahan ke dalam prompts |

154| `Stop` | Ya | Ya | Penghentian eksekusi agent | Simpan state sesi sebelum keluar |

155| `SubagentStart` | Ya | Ya | Inisialisasi subagent | Track spawning tugas paralel |

156| `SubagentStop` | Ya | Ya | Penyelesaian subagent | Agregasi hasil dari tugas paralel |

157| `PreCompact` | Ya | Ya | Permintaan compaction percakapan | Arsipkan transcript lengkap sebelum merangkum |

158| `PermissionRequest` | Ya | Ya | Dialog permission akan ditampilkan | Custom permission handling |

159| `SessionStart` | Tidak | Ya | Inisialisasi sesi | Inisialisasi logging dan telemetry |

160| `SessionEnd` | Tidak | Ya | Penghentian sesi | Bersihkan resources sementara |

161| `Notification` | Ya | Ya | Pesan status agent | Kirim update status agent ke Slack atau PagerDuty |

162| `Setup` | Tidak | Ya | Setup/maintenance sesi | Jalankan tugas inisialisasi |

163| `TeammateIdle` | Tidak | Ya | Teammate menjadi idle | Reassign pekerjaan atau notifikasi |

164| `TaskCompleted` | Tidak | Ya | Background task selesai | Agregasi hasil dari tugas paralel |

165| `ConfigChange` | Tidak | Ya | File konfigurasi berubah | Reload pengaturan secara dinamis |

166| `WorktreeCreate` | Tidak | Ya | Git worktree dibuat | Track isolated workspaces |

167| `WorktreeRemove` | Tidak | Ya | Git worktree dihapus | Bersihkan workspace resources |

168 

169## Configure hooks

170 

171Untuk mengonfigurasi hook, berikan di field `hooks` dari opsi agent Anda (`ClaudeAgentOptions` di Python, object `options` di TypeScript):

172 

173<CodeGroup>

174 ```python Python theme={null}

175 options = ClaudeAgentOptions(

176 hooks={"PreToolUse": [HookMatcher(matcher="Bash", hooks=[my_callback])]}

177 )

178 

179 async with ClaudeSDKClient(options=options) as client:

180 await client.query("Your prompt")

181 async for message in client.receive_response():

182 print(message)

183 ```

184 

185 ```typescript TypeScript theme={null}

186 for await (const message of query({

187 prompt: "Your prompt",

188 options: {

189 hooks: {

190 PreToolUse: [{ matcher: "Bash", hooks: [myCallback] }]

191 }

192 }

193 })) {

194 console.log(message);

195 }

196 ```

197</CodeGroup>

198 

199Opsi `hooks` adalah dictionary (Python) atau object (TypeScript) di mana:

200 

201* **Keys** adalah [nama hook event](#available-hooks) (misalnya, `'PreToolUse'`, `'PostToolUse'`, `'Stop'`)

202* **Values** adalah array dari [matchers](#matchers), masing-masing berisi pola filter opsional dan [fungsi callback](#callback-functions) Anda

203 

204### Matchers

205 

206Gunakan matchers untuk memfilter kapan callbacks Anda terjadi. Field `matcher` adalah string regex yang cocok dengan nilai berbeda tergantung pada tipe hook event. Misalnya, tool-based hooks cocok dengan nama tool, sementara hooks `Notification` cocok dengan tipe notifikasi. Lihat [referensi hooks Claude Code](/id/hooks#matcher-patterns) untuk daftar lengkap nilai matcher untuk setiap tipe event.

207 

208| Option | Type | Default | Description |

209| --------- | ---------------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

210| `matcher` | `string` | `undefined` | Pola regex yang cocok dengan field filter event. Untuk tool hooks, ini adalah nama tool. Built-in tools termasuk `Bash`, `Read`, `Write`, `Edit`, `Glob`, `Grep`, `WebFetch`, `Agent`, dan lainnya (lihat [Tool Input Types](/id/agent-sdk/typescript#tool-input-types) untuk daftar lengkap). MCP tools menggunakan pola `mcp__<server>__<action>`. |

211| `hooks` | `HookCallback[]` | - | Diperlukan. Array dari fungsi callback untuk dieksekusi ketika pola cocok |

212| `timeout` | `number` | `60` | Timeout dalam detik |

213 

214Gunakan pola `matcher` untuk menargetkan tools spesifik kapan pun memungkinkan. Matcher dengan `'Bash'` hanya berjalan untuk perintah Bash, sementara menghilangkan pola menjalankan callbacks Anda untuk setiap kemunculan event. Perhatikan bahwa untuk tool-based hooks, matchers hanya memfilter berdasarkan **nama tool**, bukan jalur file atau argumen lainnya. Untuk memfilter berdasarkan jalur file, periksa `tool_input.file_path` di dalam callback Anda.

215 

216<Tip>

217 **Menemukan nama tool:** Lihat [Tool Input Types](/id/agent-sdk/typescript#tool-input-types) untuk daftar lengkap nama tool built-in, atau tambahkan hook tanpa matcher untuk log semua pemanggilan tool yang dibuat sesi Anda.

218 

219 **Penamaan MCP tool:** MCP tools selalu dimulai dengan `mcp__` diikuti oleh nama server dan action: `mcp__<server>__<action>`. Misalnya, jika Anda mengonfigurasi server bernama `playwright`, tools-nya akan dinamai `mcp__playwright__browser_screenshot`, `mcp__playwright__browser_click`, dll. Nama server berasal dari key yang Anda gunakan dalam konfigurasi `mcpServers`.

220</Tip>

221 

222### Callback functions

223 

224#### Inputs

225 

226Setiap hook callback menerima tiga argumen:

227 

228* **Input data:** object yang diketik berisi detail event. Setiap tipe hook memiliki bentuk input sendiri (misalnya, `PreToolUseHookInput` mencakup `tool_name` dan `tool_input`, sementara `NotificationHookInput` mencakup `message`). Lihat definisi tipe lengkap di referensi SDK [TypeScript](/id/agent-sdk/typescript#hook-input) dan [Python](/id/agent-sdk/python#hook-input).

229 * Semua hook inputs berbagi `session_id`, `cwd`, dan `hook_event_name`.

230 * `agent_id` dan `agent_type` diisi ketika hook terjadi di dalam subagent. Di TypeScript, ini berada di base hook input dan tersedia untuk semua tipe hook. Di Python, ini hanya ada di `PreToolUse`, `PostToolUse`, dan `PostToolUseFailure`.

231* **Tool use ID** (`str | None` / `string | undefined`): mengkorelasikan events `PreToolUse` dan `PostToolUse` untuk pemanggilan tool yang sama.

232* **Context:** di TypeScript, berisi property `signal` (`AbortSignal`) untuk pembatalan. Di Python, argumen ini dicadangkan untuk penggunaan di masa depan.

233 

234#### Outputs

235 

236Callback Anda mengembalikan object dengan dua kategori fields:

237 

238* **Top-level fields** mengontrol percakapan: `systemMessage` menyuntikkan pesan ke dalam percakapan yang terlihat oleh model, dan `continue` (`continue_` di Python) menentukan apakah agent terus berjalan setelah hook ini.

239* **`hookSpecificOutput`** mengontrol operasi saat ini. Fields di dalamnya tergantung pada tipe hook event. Untuk hooks `PreToolUse`, di sinilah Anda menetapkan `permissionDecision` (`"allow"`, `"deny"`, atau `"ask"`), `permissionDecisionReason`, dan `updatedInput`. Di TypeScript SDK, `permissionDecision` juga menerima `"defer"` untuk mengakhiri query dan [resume nanti](/id/hooks#defer-a-tool-call-for-later); nilai ini tidak tersedia di Python SDK. Untuk hooks `PostToolUse`, Anda dapat menetapkan `additionalContext` untuk menambahkan informasi ke hasil tool.

240 

241Kembalikan `{}` untuk mengizinkan operasi tanpa perubahan. SDK callback hooks menggunakan format output JSON yang sama dengan [Claude Code shell command hooks](/id/hooks#json-output), yang mendokumentasikan setiap field dan opsi spesifik event. Untuk definisi tipe SDK, lihat referensi SDK [TypeScript](/id/agent-sdk/typescript#sync-hook-json-output) dan [Python](/id/agent-sdk/python#sync-hook-json-output).

242 

243<Note>

244 Ketika multiple hooks atau permission rules berlaku, **deny** mengambil prioritas atas **defer**, yang mengambil prioritas atas **ask**, yang mengambil prioritas atas **allow**. Jika hook apa pun mengembalikan `deny`, operasi diblokir terlepas dari hooks lainnya.

245</Note>

246 

247#### Asynchronous output

248 

249Secara default, agent menunggu hook Anda kembali sebelum melanjutkan. Jika hook Anda melakukan side effect (logging, mengirim webhook) dan tidak perlu mempengaruhi perilaku agent, Anda dapat mengembalikan async output sebagai gantinya. Ini memberi tahu agent untuk melanjutkan segera tanpa menunggu hook selesai:

250 

251<CodeGroup>

252 ```python Python theme={null}

253 async def async_hook(input_data, tool_use_id, context):

254 # Start a background task, then return immediately

255 asyncio.create_task(send_to_logging_service(input_data))

256 return {"async_": True, "asyncTimeout": 30000}

257 ```

258 

259 ```typescript TypeScript theme={null}

260 const asyncHook: HookCallback = async (input, toolUseID, { signal }) => {

261 // Start a background task, then return immediately

262 sendToLoggingService(input).catch(console.error);

263 return { async: true, asyncTimeout: 30000 };

264 };

265 ```

266</CodeGroup>

267 

268| Field | Type | Description |

269| -------------- | -------- | -------------------------------------------------------------------------------------------------------------------- |

270| `async` | `true` | Sinyal mode async. Agent melanjutkan tanpa menunggu. Di Python, gunakan `async_` untuk menghindari reserved keyword. |

271| `asyncTimeout` | `number` | Optional timeout dalam milliseconds untuk operasi background |

272 

273<Note>

274 Async outputs tidak dapat memblokir, memodifikasi, atau menyuntikkan konteks ke dalam operasi karena agent telah melanjutkan. Gunakan hanya untuk side effects seperti logging, metrics, atau notifikasi.

275</Note>

276 

277## Examples

278 

279### Modify tool input

280 

281Contoh ini intercepts pemanggilan Write tool dan menulis ulang argumen `file_path` untuk menambahkan `/sandbox`, mengalihkan semua penulisan file ke direktori sandboxed. Callback mengembalikan `updatedInput` dengan jalur yang dimodifikasi dan `permissionDecision: 'allow'` untuk auto-approve operasi yang ditulis ulang:

282 

283<CodeGroup>

284 ```python Python theme={null}

285 async def redirect_to_sandbox(input_data, tool_use_id, context):

286 if input_data["hook_event_name"] != "PreToolUse":

287 return {}

288 

289 if input_data["tool_name"] == "Write":

290 original_path = input_data["tool_input"].get("file_path", "")

291 return {

292 "hookSpecificOutput": {

293 "hookEventName": input_data["hook_event_name"],

294 "permissionDecision": "allow",

295 "updatedInput": {

296 **input_data["tool_input"],

297 "file_path": f"/sandbox{original_path}",

298 },

299 }

300 }

301 return {}

302 ```

303 

304 ```typescript TypeScript theme={null}

305 const redirectToSandbox: HookCallback = async (input, toolUseID, { signal }) => {

306 if (input.hook_event_name !== "PreToolUse") return {};

307 

308 const preInput = input as PreToolUseHookInput;

309 const toolInput = preInput.tool_input as Record<string, unknown>;

310 if (preInput.tool_name === "Write") {

311 const originalPath = toolInput.file_path as string;

312 return {

313 hookSpecificOutput: {

314 hookEventName: preInput.hook_event_name,

315 permissionDecision: "allow",

316 updatedInput: {

317 ...toolInput,

318 file_path: `/sandbox${originalPath}`

319 }

320 }

321 };

322 }

323 return {};

324 };

325 ```

326</CodeGroup>

327 

328<Note>

329 Ketika menggunakan `updatedInput`, Anda juga harus menyertakan `permissionDecision: 'allow'`. Selalu kembalikan object baru daripada mutating `tool_input` asli.

330</Note>

331 

332### Add context and block a tool

333 

334Contoh ini memblokir setiap upaya untuk menulis ke direktori `/etc` dan menggunakan dua output fields bersama-sama: `permissionDecision: 'deny'` menghentikan pemanggilan tool, sementara `systemMessage` menyuntikkan reminder ke dalam percakapan sehingga agent menerima konteks tentang mengapa operasi diblokir dan menghindari mencoba lagi:

335 

336<CodeGroup>

337 ```python Python theme={null}

338 async def block_etc_writes(input_data, tool_use_id, context):

339 file_path = input_data["tool_input"].get("file_path", "")

340 

341 if file_path.startswith("/etc"):

342 return {

343 # Top-level field: inject guidance into the conversation

344 "systemMessage": "Remember: system directories like /etc are protected.",

345 # hookSpecificOutput: block the operation

346 "hookSpecificOutput": {

347 "hookEventName": input_data["hook_event_name"],

348 "permissionDecision": "deny",

349 "permissionDecisionReason": "Writing to /etc is not allowed",

350 },

351 }

352 return {}

353 ```

354 

355 ```typescript TypeScript theme={null}

356 const blockEtcWrites: HookCallback = async (input, toolUseID, { signal }) => {

357 const preInput = input as PreToolUseHookInput;

358 const toolInput = preInput.tool_input as Record<string, unknown>;

359 const filePath = toolInput?.file_path as string;

360 

361 if (filePath?.startsWith("/etc")) {

362 return {

363 // Top-level field: inject guidance into the conversation

364 systemMessage: "Remember: system directories like /etc are protected.",

365 // hookSpecificOutput: block the operation

366 hookSpecificOutput: {

367 hookEventName: preInput.hook_event_name,

368 permissionDecision: "deny",

369 permissionDecisionReason: "Writing to /etc is not allowed"

370 }

371 };

372 }

373 return {};

374 };

375 ```

376</CodeGroup>

377 

378### Auto-approve specific tools

379 

380Secara default, agent dapat meminta permission sebelum menggunakan tools tertentu. Contoh ini auto-approves read-only filesystem tools (Read, Glob, Grep) dengan mengembalikan `permissionDecision: 'allow'`, membiarkan mereka berjalan tanpa konfirmasi pengguna sambil meninggalkan semua tools lainnya tunduk pada pemeriksaan permission normal:

381 

382<CodeGroup>

383 ```python Python theme={null}

384 async def auto_approve_read_only(input_data, tool_use_id, context):

385 if input_data["hook_event_name"] != "PreToolUse":

386 return {}

387 

388 read_only_tools = ["Read", "Glob", "Grep"]

389 if input_data["tool_name"] in read_only_tools:

390 return {

391 "hookSpecificOutput": {

392 "hookEventName": input_data["hook_event_name"],

393 "permissionDecision": "allow",

394 "permissionDecisionReason": "Read-only tool auto-approved",

395 }

396 }

397 return {}

398 ```

399 

400 ```typescript TypeScript theme={null}

401 const autoApproveReadOnly: HookCallback = async (input, toolUseID, { signal }) => {

402 if (input.hook_event_name !== "PreToolUse") return {};

403 

404 const preInput = input as PreToolUseHookInput;

405 const readOnlyTools = ["Read", "Glob", "Grep"];

406 if (readOnlyTools.includes(preInput.tool_name)) {

407 return {

408 hookSpecificOutput: {

409 hookEventName: preInput.hook_event_name,

410 permissionDecision: "allow",

411 permissionDecisionReason: "Read-only tool auto-approved"

412 }

413 };

414 }

415 return {};

416 };

417 ```

418</CodeGroup>

419 

420### Chain multiple hooks

421 

422Hooks dieksekusi dalam urutan mereka muncul di array. Jaga setiap hook fokus pada tanggung jawab tunggal dan chain multiple hooks untuk logika kompleks:

423 

424<CodeGroup>

425 ```python Python theme={null}

426 options = ClaudeAgentOptions(

427 hooks={

428 "PreToolUse": [

429 HookMatcher(hooks=[rate_limiter]), # First: check rate limits

430 HookMatcher(hooks=[authorization_check]), # Second: verify permissions

431 HookMatcher(hooks=[input_sanitizer]), # Third: sanitize inputs

432 HookMatcher(hooks=[audit_logger]), # Last: log the action

433 ]

434 }

435 )

436 ```

437 

438 ```typescript TypeScript theme={null}

439 const options = {

440 hooks: {

441 PreToolUse: [

442 { hooks: [rateLimiter] }, // First: check rate limits

443 { hooks: [authorizationCheck] }, // Second: verify permissions

444 { hooks: [inputSanitizer] }, // Third: sanitize inputs

445 { hooks: [auditLogger] } // Last: log the action

446 ]

447 }

448 };

449 ```

450</CodeGroup>

451 

452### Filter with regex matchers

453 

454Gunakan pola regex untuk mencocokkan multiple tools. Contoh ini mendaftarkan tiga matchers dengan scope berbeda: yang pertama memicu `file_security_hook` hanya untuk file modification tools, yang kedua memicu `mcp_audit_hook` untuk tool MCP apa pun (tools yang namanya dimulai dengan `mcp__`), dan yang ketiga memicu `global_logger` untuk setiap pemanggilan tool terlepas dari nama:

455 

456<CodeGroup>

457 ```python Python theme={null}

458 options = ClaudeAgentOptions(

459 hooks={

460 "PreToolUse": [

461 # Match file modification tools

462 HookMatcher(matcher="Write|Edit|Delete", hooks=[file_security_hook]),

463 # Match all MCP tools

464 HookMatcher(matcher="^mcp__", hooks=[mcp_audit_hook]),

465 # Match everything (no matcher)

466 HookMatcher(hooks=[global_logger]),

467 ]

468 }

469 )

470 ```

471 

472 ```typescript TypeScript theme={null}

473 const options = {

474 hooks: {

475 PreToolUse: [

476 // Match file modification tools

477 { matcher: "Write|Edit|Delete", hooks: [fileSecurityHook] },

478 

479 // Match all MCP tools

480 { matcher: "^mcp__", hooks: [mcpAuditHook] },

481 

482 // Match everything (no matcher)

483 { hooks: [globalLogger] }

484 ]

485 }

486 };

487 ```

488</CodeGroup>

489 

490### Track subagent activity

491 

492Gunakan hooks `SubagentStop` untuk monitor ketika subagents menyelesaikan pekerjaan mereka. Lihat tipe input lengkap di referensi SDK [TypeScript](/id/agent-sdk/typescript#hook-input) dan [Python](/id/agent-sdk/python#hook-input). Contoh ini logs ringkasan setiap kali subagent selesai:

493 

494<CodeGroup>

495 ```python Python theme={null}

496 async def subagent_tracker(input_data, tool_use_id, context):

497 # Log subagent details when it finishes

498 print(f"[SUBAGENT] Completed: {input_data['agent_id']}")

499 print(f" Transcript: {input_data['agent_transcript_path']}")

500 print(f" Tool use ID: {tool_use_id}")

501 print(f" Stop hook active: {input_data.get('stop_hook_active')}")

502 return {}

503 

504 

505 options = ClaudeAgentOptions(

506 hooks={"SubagentStop": [HookMatcher(hooks=[subagent_tracker])]}

507 )

508 ```

509 

510 ```typescript TypeScript theme={null}

511 import { HookCallback, SubagentStopHookInput } from "@anthropic-ai/claude-agent-sdk";

512 

513 const subagentTracker: HookCallback = async (input, toolUseID, { signal }) => {

514 // Cast to SubagentStopHookInput to access subagent-specific fields

515 const subInput = input as SubagentStopHookInput;

516 

517 // Log subagent details when it finishes

518 console.log(`[SUBAGENT] Completed: ${subInput.agent_id}`);

519 console.log(` Transcript: ${subInput.agent_transcript_path}`);

520 console.log(` Tool use ID: ${toolUseID}`);

521 console.log(` Stop hook active: ${subInput.stop_hook_active}`);

522 return {};

523 };

524 

525 const options = {

526 hooks: {

527 SubagentStop: [{ hooks: [subagentTracker] }]

528 }

529 };

530 ```

531</CodeGroup>

532 

533### Make HTTP requests from hooks

534 

535Hooks dapat melakukan operasi asynchronous seperti HTTP requests. Tangkap errors di dalam hook Anda daripada membiarkan mereka menyebar, karena exception yang tidak ditangani dapat mengganggu agent.

536 

537Contoh ini mengirim webhook setelah setiap tool selesai, logging tool mana yang berjalan dan kapan. Hook menangkap errors sehingga webhook yang gagal tidak mengganggu agent:

538 

539<CodeGroup>

540 ```python Python theme={null}

541 import asyncio

542 import json

543 import urllib.request

544 from datetime import datetime

545 

546 

547 def _send_webhook(tool_name):

548 """Synchronous helper that POSTs tool usage data to an external webhook."""

549 data = json.dumps(

550 {

551 "tool": tool_name,

552 "timestamp": datetime.now().isoformat(),

553 }

554 ).encode()

555 req = urllib.request.Request(

556 "https://api.example.com/webhook",

557 data=data,

558 headers={"Content-Type": "application/json"},

559 method="POST",

560 )

561 urllib.request.urlopen(req)

562 

563 

564 async def webhook_notifier(input_data, tool_use_id, context):

565 # Only fire after a tool completes (PostToolUse), not before

566 if input_data["hook_event_name"] != "PostToolUse":

567 return {}

568 

569 try:

570 # Run the blocking HTTP call in a thread to avoid blocking the event loop

571 await asyncio.to_thread(_send_webhook, input_data["tool_name"])

572 except Exception as e:

573 # Log the error but don't raise. A failed webhook shouldn't stop the agent

574 print(f"Webhook request failed: {e}")

575 

576 return {}

577 ```

578 

579 ```typescript TypeScript theme={null}

580 import { query, HookCallback, PostToolUseHookInput } from "@anthropic-ai/claude-agent-sdk";

581 

582 const webhookNotifier: HookCallback = async (input, toolUseID, { signal }) => {

583 // Only fire after a tool completes (PostToolUse), not before

584 if (input.hook_event_name !== "PostToolUse") return {};

585 

586 try {

587 await fetch("https://api.example.com/webhook", {

588 method: "POST",

589 headers: { "Content-Type": "application/json" },

590 body: JSON.stringify({

591 tool: (input as PostToolUseHookInput).tool_name,

592 timestamp: new Date().toISOString()

593 }),

594 // Pass signal so the request cancels if the hook times out

595 signal

596 });

597 } catch (error) {

598 // Handle cancellation separately from other errors

599 if (error instanceof Error && error.name === "AbortError") {

600 console.log("Webhook request cancelled");

601 }

602 // Don't re-throw. A failed webhook shouldn't stop the agent

603 }

604 

605 return {};

606 };

607 

608 // Register as a PostToolUse hook

609 for await (const message of query({

610 prompt: "Refactor the auth module",

611 options: {

612 hooks: {

613 PostToolUse: [{ hooks: [webhookNotifier] }]

614 }

615 }

616 })) {

617 console.log(message);

618 }

619 ```

620</CodeGroup>

621 

622### Forward notifications to Slack

623 

624Gunakan hooks `Notification` untuk menerima notifikasi sistem dari agent dan meneruskannya ke layanan eksternal. Notifications terjadi untuk tipe event spesifik: `permission_prompt` (Claude memerlukan permission), `idle_prompt` (Claude menunggu input), `auth_success` (authentication selesai), dan `elicitation_dialog` (Claude meminta pengguna). Setiap notifikasi mencakup field `message` dengan deskripsi yang dapat dibaca manusia dan secara opsional `title`.

625 

626Contoh ini meneruskan setiap notifikasi ke channel Slack. Ini memerlukan [Slack incoming webhook URL](https://api.slack.com/messaging/webhooks), yang Anda buat dengan menambahkan app ke workspace Slack Anda dan mengaktifkan incoming webhooks:

627 

628<CodeGroup>

629 ```python Python theme={null}

630 import asyncio

631 import json

632 import urllib.request

633 

634 from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions, HookMatcher

635 

636 

637 def _send_slack_notification(message):

638 """Synchronous helper that sends a message to Slack via incoming webhook."""

639 data = json.dumps({"text": f"Agent status: {message}"}).encode()

640 req = urllib.request.Request(

641 "https://hooks.slack.com/services/YOUR/WEBHOOK/URL",

642 data=data,

643 headers={"Content-Type": "application/json"},

644 method="POST",

645 )

646 urllib.request.urlopen(req)

647 

648 

649 async def notification_handler(input_data, tool_use_id, context):

650 try:

651 # Run the blocking HTTP call in a thread to avoid blocking the event loop

652 await asyncio.to_thread(_send_slack_notification, input_data.get("message", ""))

653 except Exception as e:

654 print(f"Failed to send notification: {e}")

655 

656 # Return empty object. Notification hooks don't modify agent behavior

657 return {}

658 

659 

660 async def main():

661 options = ClaudeAgentOptions(

662 hooks={

663 # Register the hook for Notification events (no matcher needed)

664 "Notification": [HookMatcher(hooks=[notification_handler])],

665 },

666 )

667 

668 async with ClaudeSDKClient(options=options) as client:

669 await client.query("Analyze this codebase")

670 async for message in client.receive_response():

671 print(message)

672 

673 

674 asyncio.run(main())

675 ```

676 

677 ```typescript TypeScript theme={null}

678 import { query, HookCallback, NotificationHookInput } from "@anthropic-ai/claude-agent-sdk";

679 

680 // Define a hook callback that sends notifications to Slack

681 const notificationHandler: HookCallback = async (input, toolUseID, { signal }) => {

682 // Cast to NotificationHookInput to access the message field

683 const notification = input as NotificationHookInput;

684 

685 try {

686 // POST the notification message to a Slack incoming webhook

687 await fetch("https://hooks.slack.com/services/YOUR/WEBHOOK/URL", {

688 method: "POST",

689 headers: { "Content-Type": "application/json" },

690 body: JSON.stringify({

691 text: `Agent status: ${notification.message}`

692 }),

693 // Pass signal so the request cancels if the hook times out

694 signal

695 });

696 } catch (error) {

697 if (error instanceof Error && error.name === "AbortError") {

698 console.log("Notification cancelled");

699 } else {

700 console.error("Failed to send notification:", error);

701 }

702 }

703 

704 // Return empty object. Notification hooks don't modify agent behavior

705 return {};

706 };

707 

708 // Register the hook for Notification events (no matcher needed)

709 for await (const message of query({

710 prompt: "Analyze this codebase",

711 options: {

712 hooks: {

713 Notification: [{ hooks: [notificationHandler] }]

714 }

715 }

716 })) {

717 console.log(message);

718 }

719 ```

720</CodeGroup>

721 

722## Fix common issues

723 

724### Hook not firing

725 

726* Verifikasi nama hook event benar dan case-sensitive (`PreToolUse`, bukan `preToolUse`)

727* Periksa bahwa pola matcher Anda cocok dengan nama tool dengan tepat

728* Pastikan hook berada di bawah tipe event yang benar di `options.hooks`

729* Untuk non-tool hooks seperti `Stop` dan `SubagentStop`, matchers cocok dengan fields berbeda (lihat [matcher patterns](/id/hooks#matcher-patterns))

730* Hooks mungkin tidak terjadi ketika agent mencapai batas [`max_turns`](/id/agent-sdk/python#claude-agent-options) karena sesi berakhir sebelum hooks dapat dieksekusi

731 

732### Matcher not filtering as expected

733 

734Matchers hanya cocok dengan **nama tool**, bukan jalur file atau argumen lainnya. Untuk memfilter berdasarkan jalur file, periksa `tool_input.file_path` di dalam hook Anda:

735 

736```typescript theme={null}

737const myHook: HookCallback = async (input, toolUseID, { signal }) => {

738 const preInput = input as PreToolUseHookInput;

739 const toolInput = preInput.tool_input as Record<string, unknown>;

740 const filePath = toolInput?.file_path as string;

741 if (!filePath?.endsWith(".md")) return {}; // Skip non-markdown files

742 // Process markdown files...

743 return {};

744};

745```

746 

747### Hook timeout

748 

749* Tingkatkan nilai `timeout` dalam konfigurasi `HookMatcher`

750* Gunakan `AbortSignal` dari argumen callback ketiga untuk menangani pembatalan dengan baik di TypeScript

751 

752### Tool blocked unexpectedly

753 

754* Periksa semua hooks `PreToolUse` untuk returns `permissionDecision: 'deny'`

755* Tambahkan logging ke hooks Anda untuk melihat apa `permissionDecisionReason` yang mereka kembalikan

756* Verifikasi pola matcher tidak terlalu luas (matcher kosong cocok dengan semua tools)

757 

758### Modified input not applied

759 

760* Pastikan `updatedInput` berada di dalam `hookSpecificOutput`, bukan di top level:

761 

762 ```typescript theme={null}

763 return {

764 hookSpecificOutput: {

765 hookEventName: "PreToolUse",

766 permissionDecision: "allow",

767 updatedInput: { command: "new command" }

768 }

769 };

770 ```

771 

772* Anda juga harus mengembalikan `permissionDecision: 'allow'` agar modifikasi input berlaku

773 

774* Sertakan `hookEventName` di `hookSpecificOutput` untuk mengidentifikasi tipe hook mana output-nya

775 

776### Session hooks not available in Python

777 

778`SessionStart` dan `SessionEnd` dapat didaftarkan sebagai SDK callback hooks di TypeScript, tetapi tidak tersedia di Python SDK (`HookEvent` menghilangkannya). Di Python, mereka hanya tersedia sebagai [shell command hooks](/id/hooks#hook-events) yang didefinisikan dalam file pengaturan (misalnya, `.claude/settings.json`). Untuk memuat shell command hooks dari aplikasi SDK Anda, sertakan setting source yang sesuai dengan [`setting_sources`](/id/agent-sdk/python#setting-source) atau [`settingSources`](/id/agent-sdk/typescript#setting-source):

779 

780<CodeGroup>

781 ```python Python theme={null}

782 options = ClaudeAgentOptions(

783 setting_sources=["project"], # Loads .claude/settings.json including hooks

784 )

785 ```

786 

787 ```typescript TypeScript theme={null}

788 const options = {

789 settingSources: ["project"] // Loads .claude/settings.json including hooks

790 };

791 ```

792</CodeGroup>

793 

794Untuk menjalankan logika inisialisasi sebagai callback Python SDK sebagai gantinya, gunakan pesan pertama dari `client.receive_response()` sebagai trigger Anda.

795 

796### Subagent permission prompts multiplying

797 

798Ketika spawning multiple subagents, masing-masing mungkin meminta permissions secara terpisah. Subagents tidak secara otomatis mewarisi parent agent permissions. Untuk menghindari prompts berulang, gunakan hooks `PreToolUse` untuk auto-approve tools spesifik, atau konfigurasi permission rules yang berlaku untuk sesi subagent.

799 

800### Recursive hook loops with subagents

801 

802Hook `UserPromptSubmit` yang spawns subagents dapat membuat infinite loops jika subagents tersebut memicu hook yang sama. Untuk mencegah ini:

803 

804* Periksa indikator subagent di hook input sebelum spawning

805* Gunakan shared variable atau session state untuk track apakah Anda sudah berada di dalam subagent

806* Scope hooks untuk hanya berjalan untuk sesi top-level agent

807 

808### systemMessage not appearing in output

809 

810Field `systemMessage` menambahkan konteks ke percakapan yang dilihat model, tetapi mungkin tidak muncul di semua mode output SDK. Jika Anda perlu surface hook decisions ke aplikasi Anda, log mereka secara terpisah atau gunakan dedicated output channel.

811 

812## Related resources

813 

814* [Claude Code hooks reference](/id/hooks): full JSON input/output schemas, event documentation, dan matcher patterns

815* [Claude Code hooks guide](/id/hooks-guide): shell command hook examples dan walkthroughs

816* [TypeScript SDK reference](/id/agent-sdk/typescript): hook types, input/output definitions, dan configuration options

817* [Python SDK reference](/id/agent-sdk/python): hook types, input/output definitions, dan configuration options

818* [Permissions](/id/agent-sdk/permissions): kontrol apa yang dapat dilakukan agent Anda

819* [Custom tools](/id/agent-sdk/custom-tools): build tools untuk extend agent capabilities

agent-sdk/hosting.md +142 −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# Hosting the Agent SDK

6 

7> Menerapkan dan menghosting Claude Agent SDK di lingkungan produksi

8 

9Claude Agent SDK berbeda dari API LLM stateless tradisional karena mempertahankan status percakapan dan menjalankan perintah di lingkungan yang persisten. Panduan ini mencakup arsitektur, pertimbangan hosting, dan praktik terbaik untuk menerapkan agen berbasis SDK dalam produksi.

10 

11<Info>

12 Untuk pengerasan keamanan di luar sandboxing dasar (termasuk kontrol jaringan, manajemen kredensial, dan opsi isolasi), lihat [Secure Deployment](/id/agent-sdk/secure-deployment).

13</Info>

14 

15## Persyaratan Hosting

16 

17### Container-Based Sandboxing

18 

19Untuk keamanan dan isolasi, SDK harus berjalan di dalam lingkungan kontainer yang tersandbox. Ini menyediakan isolasi proses, batasan sumber daya, kontrol jaringan, dan sistem file yang bersifat sementara.

20 

21SDK juga mendukung [konfigurasi sandbox terprogram](/id/agent-sdk/typescript#sandbox-settings) untuk eksekusi perintah.

22 

23### Persyaratan Sistem

24 

25Setiap instans SDK memerlukan:

26 

27* **Dependensi runtime**

28 * Python 3.10+ untuk Python SDK, atau Node.js 18+ untuk TypeScript SDK

29 * Kedua paket SDK menggabungkan biner Claude Code asli untuk platform host, jadi tidak perlu instalasi Claude Code atau Node.js terpisah untuk CLI yang dijalankan

30 

31* **Alokasi sumber daya**

32 * Direkomendasikan: 1GiB RAM, 5GiB disk, dan 1 CPU (sesuaikan ini berdasarkan tugas Anda sesuai kebutuhan)

33 

34* **Akses jaringan**

35 * HTTPS keluar ke `api.anthropic.com`

36 * Opsional: Akses ke server MCP atau alat eksternal

37 

38## Memahami Arsitektur SDK

39 

40Tidak seperti panggilan API stateless, Claude Agent SDK beroperasi sebagai **proses yang berjalan lama** yang:

41 

42* **Menjalankan perintah** di lingkungan shell yang persisten

43* **Mengelola operasi file** dalam direktori kerja

44* **Menangani eksekusi alat** dengan konteks dari interaksi sebelumnya

45 

46## Opsi Penyedia Sandbox

47 

48Beberapa penyedia mengkhususkan diri dalam lingkungan kontainer aman untuk eksekusi kode AI:

49 

50* **[Modal Sandbox](https://modal.com/docs/guide/sandbox)** - [demo implementation](https://modal.com/docs/examples/claude-slack-gif-creator)

51* **[Cloudflare Sandboxes](https://github.com/cloudflare/sandbox-sdk)**

52* **[Daytona](https://www.daytona.io/)**

53* **[E2B](https://e2b.dev/)**

54* **[Fly Machines](https://fly.io/docs/machines/)**

55* **[Vercel Sandbox](https://vercel.com/docs/functions/sandbox)**

56 

57Untuk opsi self-hosted (Docker, gVisor, Firecracker) dan konfigurasi isolasi terperinci, lihat [Isolation Technologies](/id/agent-sdk/secure-deployment#isolation-technologies).

58 

59## Pola Penerapan Produksi

60 

61### Pola 1: Sesi Ephemeral

62 

63Buat kontainer baru untuk setiap tugas pengguna, kemudian hancurkan saat selesai.

64 

65Terbaik untuk tugas sekali jalan, pengguna mungkin masih berinteraksi dengan AI saat tugas sedang diselesaikan, tetapi setelah selesai kontainer dihancurkan.

66 

67**Contoh:**

68 

69* Bug Investigation & Fix: Debug dan selesaikan masalah spesifik dengan konteks yang relevan

70* Invoice Processing: Ekstrak dan struktur data dari kwitansi/faktur untuk sistem akuntansi

71* Translation Tasks: Terjemahkan dokumen atau batch konten antar bahasa

72* Image/Video Processing: Terapkan transformasi, optimasi, atau ekstrak metadata dari file media

73 

74### Pola 2: Sesi Berjalan Lama

75 

76Pertahankan instans kontainer persisten untuk tugas yang berjalan lama. Sering kali menjalankan **beberapa** proses Claude Agent di dalam kontainer berdasarkan permintaan.

77 

78Terbaik untuk agen proaktif yang mengambil tindakan tanpa masukan pengguna, agen yang melayani konten atau agen yang memproses jumlah pesan yang tinggi.

79 

80**Contoh:**

81 

82* Email Agent: Memantau email masuk dan secara otonom melakukan triase, merespons, atau mengambil tindakan berdasarkan konten

83* Site Builder: Menghosting situs web khusus per pengguna dengan kemampuan pengeditan langsung yang disajikan melalui port kontainer

84* High-Frequency Chat Bots: Menangani aliran pesan berkelanjutan dari platform seperti Slack di mana waktu respons cepat sangat penting

85 

86### Pola 3: Sesi Hybrid

87 

88Kontainer ephemeral yang dihidrasi dengan riwayat dan status, mungkin dari database atau dari fitur resumption sesi SDK.

89 

90Terbaik untuk kontainer dengan interaksi intermiten dari pengguna yang memulai pekerjaan dan berhenti saat pekerjaan selesai tetapi dapat dilanjutkan.

91 

92**Contoh:**

93 

94* Personal Project Manager: Membantu mengelola proyek berkelanjutan dengan check-in intermiten, mempertahankan konteks tugas, keputusan, dan kemajuan

95* Deep Research: Melakukan tugas penelitian multi-jam, menyimpan temuan dan melanjutkan investigasi saat pengguna kembali

96* Customer Support Agent: Menangani tiket dukungan yang mencakup beberapa interaksi, memuat riwayat tiket dan konteks pelanggan

97 

98### Pola 4: Kontainer Tunggal

99 

100Jalankan beberapa proses Claude Agent SDK dalam satu kontainer global.

101 

102Terbaik untuk agen yang harus berkolaborasi erat satu sama lain. Ini mungkin pola yang paling tidak populer karena Anda harus mencegah agen dari menimpa satu sama lain.

103 

104**Contoh:**

105 

106* **Simulations**: Agen yang berinteraksi satu sama lain dalam simulasi seperti video game.

107 

108## FAQ

109 

110### Bagaimana cara saya berkomunikasi dengan sandbox saya?

111 

112Saat menghosting di kontainer, buka port untuk berkomunikasi dengan instans SDK Anda. Aplikasi Anda dapat membuka endpoint HTTP/WebSocket untuk klien eksternal sementara SDK berjalan secara internal dalam kontainer.

113 

114### Berapa biaya hosting kontainer?

115 

116Biaya dominan melayani agen adalah token; kontainer bervariasi berdasarkan apa yang Anda sediakan, tetapi biaya minimum kira-kira 5 sen per jam berjalan.

117 

118### Kapan saya harus mematikan kontainer idle vs. menjaganya tetap hangat?

119 

120Ini mungkin tergantung penyedia, penyedia sandbox yang berbeda akan membiarkan Anda menetapkan kriteria berbeda untuk timeout idle setelah itu sandbox mungkin berhenti.

121Anda akan ingin menyesuaikan timeout ini berdasarkan seberapa sering Anda pikir respons pengguna mungkin terjadi.

122 

123### Seberapa sering saya harus memperbarui Claude Code CLI?

124 

125Claude Code CLI diberi versi dengan semver, jadi perubahan breaking apa pun akan diberi versi.

126 

127### Bagaimana cara saya memantau kesehatan kontainer dan kinerja agen?

128 

129Karena kontainer hanyalah server, infrastruktur logging yang sama yang Anda gunakan untuk backend akan bekerja untuk kontainer.

130 

131### Berapa lama sesi agen dapat berjalan sebelum timeout?

132 

133Sesi agen tidak akan timeout, tetapi pertimbangkan untuk menetapkan properti 'maxTurns' untuk mencegah Claude terjebak dalam loop.

134 

135## Langkah Berikutnya

136 

137* [Secure Deployment](/id/agent-sdk/secure-deployment) - Kontrol jaringan, manajemen kredensial, dan pengerasan isolasi

138* [TypeScript SDK - Sandbox Settings](/id/agent-sdk/typescript#sandbox-settings) - Konfigurasi sandbox secara terprogram

139* [Sessions Guide](/id/agent-sdk/sessions) - Pelajari tentang manajemen sesi

140* [Permissions](/id/agent-sdk/permissions) - Konfigurasi izin alat

141* [Cost Tracking](/id/agent-sdk/cost-tracking) - Pantau penggunaan API

142* [MCP Integration](/id/agent-sdk/mcp) - Perluas dengan alat khusus

agent-sdk/overview.md +607 −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# Gambaran Umum Agent SDK

6 

7> Bangun agen AI produksi dengan Claude Code sebagai perpustakaan

8 

9<Note>

10 Claude Code SDK telah diubah nama menjadi Claude Agent SDK. Jika Anda bermigrasi dari SDK lama, lihat [Panduan Migrasi](/id/agent-sdk/migration-guide).

11</Note>

12 

13Bangun agen AI yang secara mandiri membaca file, menjalankan perintah, mencari web, mengedit kode, dan banyak lagi. Agent SDK memberi Anda alat yang sama, loop agen, dan manajemen konteks yang mendukung Claude Code, dapat diprogram dalam Python dan TypeScript.

14 

15<Note>

16 Opus 4.7 (`claude-opus-4-7`) memerlukan Agent SDK v0.2.111 atau lebih baru. Jika Anda melihat kesalahan API `thinking.type.enabled`, lihat [Troubleshooting](/id/agent-sdk/quickstart#troubleshooting).

17</Note>

18 

19<CodeGroup>

20 ```python Python theme={null}

21 import asyncio

22 from claude_agent_sdk import query, ClaudeAgentOptions

23 

24 

25 async def main():

26 async for message in query(

27 prompt="Find and fix the bug in auth.py",

28 options=ClaudeAgentOptions(allowed_tools=["Read", "Edit", "Bash"]),

29 ):

30 print(message) # Claude reads the file, finds the bug, edits it

31 

32 

33 asyncio.run(main())

34 ```

35 

36 ```typescript TypeScript theme={null}

37 import { query } from "@anthropic-ai/claude-agent-sdk";

38 

39 for await (const message of query({

40 prompt: "Find and fix the bug in auth.ts",

41 options: { allowedTools: ["Read", "Edit", "Bash"] }

42 })) {

43 console.log(message); // Claude reads the file, finds the bug, edits it

44 }

45 ```

46</CodeGroup>

47 

48Agent SDK mencakup alat bawaan untuk membaca file, menjalankan perintah, dan mengedit kode, sehingga agen Anda dapat mulai bekerja segera tanpa Anda perlu mengimplementasikan eksekusi alat. Selami panduan cepat atau jelajahi agen nyata yang dibangun dengan SDK:

49 

50<CardGroup cols={2}>

51 <Card title="Panduan Cepat" icon="play" href="/id/agent-sdk/quickstart">

52 Bangun agen perbaikan bug dalam hitungan menit

53 </Card>

54 

55 <Card title="Agen contoh" icon="star" href="https://github.com/anthropics/claude-agent-sdk-demos">

56 Asisten email, agen penelitian, dan banyak lagi

57 </Card>

58</CardGroup>

59 

60## Memulai

61 

62<Steps>

63 <Step title="Instal SDK">

64 <Tabs>

65 <Tab title="TypeScript">

66 ```bash theme={null}

67 npm install @anthropic-ai/claude-agent-sdk

68 ```

69 </Tab>

70 

71 <Tab title="Python">

72 ```bash theme={null}

73 pip install claude-agent-sdk

74 ```

75 </Tab>

76 </Tabs>

77 

78 <Note>

79 TypeScript SDK menggabungkan biner Claude Code asli untuk platform Anda sebagai dependensi opsional, jadi Anda tidak perlu menginstal Claude Code secara terpisah.

80 </Note>

81 </Step>

82 

83 <Step title="Atur kunci API Anda">

84 Dapatkan kunci API dari [Konsol](https://platform.claude.com/), kemudian atur sebagai variabel lingkungan:

85 

86 ```bash theme={null}

87 export ANTHROPIC_API_KEY=your-api-key

88 ```

89 

90 SDK juga mendukung autentikasi melalui penyedia API pihak ketiga:

91 

92 * **Amazon Bedrock**: atur variabel lingkungan `CLAUDE_CODE_USE_BEDROCK=1` dan konfigurasi kredensial AWS

93 * **Google Vertex AI**: atur variabel lingkungan `CLAUDE_CODE_USE_VERTEX=1` dan konfigurasi kredensial Google Cloud

94 * **Microsoft Azure**: atur variabel lingkungan `CLAUDE_CODE_USE_FOUNDRY=1` dan konfigurasi kredensial Azure

95 

96 Lihat panduan penyiapan untuk [Bedrock](/id/amazon-bedrock), [Vertex AI](/id/google-vertex-ai), atau [Azure AI Foundry](/id/microsoft-foundry) untuk detail.

97 

98 <Note>

99 Kecuali sebelumnya disetujui, Anthropic tidak mengizinkan pengembang pihak ketiga untuk menawarkan login claude.ai atau batas laju untuk produk mereka, termasuk agen yang dibangun di Agent SDK Claude. Silakan gunakan metode autentikasi kunci API yang dijelaskan dalam dokumen ini.

100 </Note>

101 </Step>

102 

103 <Step title="Jalankan agen pertama Anda">

104 Contoh ini membuat agen yang mencantumkan file di direktori saat ini menggunakan alat bawaan.

105 

106 <CodeGroup>

107 ```python Python theme={null}

108 import asyncio

109 from claude_agent_sdk import query, ClaudeAgentOptions

110 

111 

112 async def main():

113 async for message in query(

114 prompt="What files are in this directory?",

115 options=ClaudeAgentOptions(allowed_tools=["Bash", "Glob"]),

116 ):

117 if hasattr(message, "result"):

118 print(message.result)

119 

120 

121 asyncio.run(main())

122 ```

123 

124 ```typescript TypeScript theme={null}

125 import { query } from "@anthropic-ai/claude-agent-sdk";

126 

127 for await (const message of query({

128 prompt: "What files are in this directory?",

129 options: { allowedTools: ["Bash", "Glob"] }

130 })) {

131 if ("result" in message) console.log(message.result);

132 }

133 ```

134 </CodeGroup>

135 </Step>

136</Steps>

137 

138**Siap untuk membangun?** Ikuti [Panduan Cepat](/id/agent-sdk/quickstart) untuk membuat agen yang menemukan dan memperbaiki bug dalam hitungan menit.

139 

140## Kemampuan

141 

142Semua yang membuat Claude Code kuat tersedia di SDK:

143 

144<Tabs>

145 <Tab title="Alat bawaan">

146 Agen Anda dapat membaca file, menjalankan perintah, dan mencari basis kode langsung dari kotak. Alat kunci meliputi:

147 

148 | Alat | Apa yang dilakukannya |

149 | --------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |

150 | **Read** | Baca file apa pun di direktori kerja |

151 | **Write** | Buat file baru |

152 | **Edit** | Buat pengeditan presisi pada file yang ada |

153 | **Bash** | Jalankan perintah terminal, skrip, operasi git |

154 | **Monitor** | Pantau skrip latar belakang dan bereaksi terhadap setiap baris output sebagai acara |

155 | **Glob** | Temukan file berdasarkan pola (`**/*.ts`, `src/**/*.py`) |

156 | **Grep** | Cari konten file dengan regex |

157 | **WebSearch** | Cari web untuk informasi terkini |

158 | **WebFetch** | Ambil dan parsing konten halaman web |

159 | **[AskUserQuestion](/id/agent-sdk/user-input#handle-clarifying-questions)** | Tanyakan pertanyaan klarifikasi kepada pengguna dengan opsi pilihan ganda |

160 

161 Contoh ini membuat agen yang mencari basis kode Anda untuk komentar TODO:

162 

163 <CodeGroup>

164 ```python Python theme={null}

165 import asyncio

166 from claude_agent_sdk import query, ClaudeAgentOptions

167 

168 

169 async def main():

170 async for message in query(

171 prompt="Find all TODO comments and create a summary",

172 options=ClaudeAgentOptions(allowed_tools=["Read", "Glob", "Grep"]),

173 ):

174 if hasattr(message, "result"):

175 print(message.result)

176 

177 

178 asyncio.run(main())

179 ```

180 

181 ```typescript TypeScript theme={null}

182 import { query } from "@anthropic-ai/claude-agent-sdk";

183 

184 for await (const message of query({

185 prompt: "Find all TODO comments and create a summary",

186 options: { allowedTools: ["Read", "Glob", "Grep"] }

187 })) {

188 if ("result" in message) console.log(message.result);

189 }

190 ```

191 </CodeGroup>

192 </Tab>

193 

194 <Tab title="Hooks">

195 Jalankan kode khusus pada titik-titik kunci dalam siklus hidup agen. SDK hooks menggunakan fungsi callback untuk memvalidasi, mencatat, memblokir, atau mengubah perilaku agen.

196 

197 **Hooks yang tersedia:** `PreToolUse`, `PostToolUse`, `Stop`, `SessionStart`, `SessionEnd`, `UserPromptSubmit`, dan banyak lagi.

198 

199 Contoh ini mencatat semua perubahan file ke file audit:

200 

201 <CodeGroup>

202 ```python Python theme={null}

203 import asyncio

204 from datetime import datetime

205 from claude_agent_sdk import query, ClaudeAgentOptions, HookMatcher

206 

207 

208 async def log_file_change(input_data, tool_use_id, context):

209 file_path = input_data.get("tool_input", {}).get("file_path", "unknown")

210 with open("./audit.log", "a") as f:

211 f.write(f"{datetime.now()}: modified {file_path}\n")

212 return {}

213 

214 

215 async def main():

216 async for message in query(

217 prompt="Refactor utils.py to improve readability",

218 options=ClaudeAgentOptions(

219 permission_mode="acceptEdits",

220 hooks={

221 "PostToolUse": [

222 HookMatcher(matcher="Edit|Write", hooks=[log_file_change])

223 ]

224 },

225 ),

226 ):

227 if hasattr(message, "result"):

228 print(message.result)

229 

230 

231 asyncio.run(main())

232 ```

233 

234 ```typescript TypeScript theme={null}

235 import { query, HookCallback } from "@anthropic-ai/claude-agent-sdk";

236 import { appendFile } from "fs/promises";

237 

238 const logFileChange: HookCallback = async (input) => {

239 const filePath = (input as any).tool_input?.file_path ?? "unknown";

240 await appendFile("./audit.log", `${new Date().toISOString()}: modified ${filePath}\n`);

241 return {};

242 };

243 

244 for await (const message of query({

245 prompt: "Refactor utils.py to improve readability",

246 options: {

247 permissionMode: "acceptEdits",

248 hooks: {

249 PostToolUse: [{ matcher: "Edit|Write", hooks: [logFileChange] }]

250 }

251 }

252 })) {

253 if ("result" in message) console.log(message.result);

254 }

255 ```

256 </CodeGroup>

257 

258 [Pelajari lebih lanjut tentang hooks →](/id/agent-sdk/hooks)

259 </Tab>

260 

261 <Tab title="Subagents">

262 Spawn agen khusus untuk menangani subtask yang terfokus. Agen utama Anda mendelegasikan pekerjaan, dan subagen melaporkan kembali dengan hasil.

263 

264 Tentukan agen khusus dengan instruksi khusus. Sertakan `Agent` dalam `allowedTools` karena subagen dipanggil melalui alat Agent:

265 

266 <CodeGroup>

267 ```python Python theme={null}

268 import asyncio

269 from claude_agent_sdk import query, ClaudeAgentOptions, AgentDefinition

270 

271 

272 async def main():

273 async for message in query(

274 prompt="Use the code-reviewer agent to review this codebase",

275 options=ClaudeAgentOptions(

276 allowed_tools=["Read", "Glob", "Grep", "Agent"],

277 agents={

278 "code-reviewer": AgentDefinition(

279 description="Expert code reviewer for quality and security reviews.",

280 prompt="Analyze code quality and suggest improvements.",

281 tools=["Read", "Glob", "Grep"],

282 )

283 },

284 ),

285 ):

286 if hasattr(message, "result"):

287 print(message.result)

288 

289 

290 asyncio.run(main())

291 ```

292 

293 ```typescript TypeScript theme={null}

294 import { query } from "@anthropic-ai/claude-agent-sdk";

295 

296 for await (const message of query({

297 prompt: "Use the code-reviewer agent to review this codebase",

298 options: {

299 allowedTools: ["Read", "Glob", "Grep", "Agent"],

300 agents: {

301 "code-reviewer": {

302 description: "Expert code reviewer for quality and security reviews.",

303 prompt: "Analyze code quality and suggest improvements.",

304 tools: ["Read", "Glob", "Grep"]

305 }

306 }

307 }

308 })) {

309 if ("result" in message) console.log(message.result);

310 }

311 ```

312 </CodeGroup>

313 

314 Pesan dari dalam konteks subagen mencakup bidang `parent_tool_use_id`, memungkinkan Anda melacak pesan mana yang termasuk dalam eksekusi subagen mana.

315 

316 [Pelajari lebih lanjut tentang subagents →](/id/agent-sdk/subagents)

317 </Tab>

318 

319 <Tab title="MCP">

320 Terhubung ke sistem eksternal melalui Model Context Protocol: database, browser, API, dan [ratusan lainnya](https://github.com/modelcontextprotocol/servers).

321 

322 Contoh ini menghubungkan [server Playwright MCP](https://github.com/microsoft/playwright-mcp) untuk memberikan agen Anda kemampuan otomasi browser:

323 

324 <CodeGroup>

325 ```python Python theme={null}

326 import asyncio

327 from claude_agent_sdk import query, ClaudeAgentOptions

328 

329 

330 async def main():

331 async for message in query(

332 prompt="Open example.com and describe what you see",

333 options=ClaudeAgentOptions(

334 mcp_servers={

335 "playwright": {"command": "npx", "args": ["@playwright/mcp@latest"]}

336 }

337 ),

338 ):

339 if hasattr(message, "result"):

340 print(message.result)

341 

342 

343 asyncio.run(main())

344 ```

345 

346 ```typescript TypeScript theme={null}

347 import { query } from "@anthropic-ai/claude-agent-sdk";

348 

349 for await (const message of query({

350 prompt: "Open example.com and describe what you see",

351 options: {

352 mcpServers: {

353 playwright: { command: "npx", args: ["@playwright/mcp@latest"] }

354 }

355 }

356 })) {

357 if ("result" in message) console.log(message.result);

358 }

359 ```

360 </CodeGroup>

361 

362 [Pelajari lebih lanjut tentang MCP →](/id/agent-sdk/mcp)

363 </Tab>

364 

365 <Tab title="Izin">

366 Kontrol dengan tepat alat mana yang dapat digunakan agen Anda. Izinkan operasi yang aman, blokir yang berbahaya, atau minta persetujuan untuk tindakan sensitif.

367 

368 <Note>

369 Untuk prompt persetujuan interaktif dan alat `AskUserQuestion`, lihat [Tangani persetujuan dan input pengguna](/id/agent-sdk/user-input).

370 </Note>

371 

372 Contoh ini membuat agen read-only yang dapat menganalisis tetapi tidak memodifikasi kode. `allowed_tools` pra-menyetujui `Read`, `Glob`, dan `Grep`.

373 

374 <CodeGroup>

375 ```python Python theme={null}

376 import asyncio

377 from claude_agent_sdk import query, ClaudeAgentOptions

378 

379 

380 async def main():

381 async for message in query(

382 prompt="Review this code for best practices",

383 options=ClaudeAgentOptions(

384 allowed_tools=["Read", "Glob", "Grep"],

385 ),

386 ):

387 if hasattr(message, "result"):

388 print(message.result)

389 

390 

391 asyncio.run(main())

392 ```

393 

394 ```typescript TypeScript theme={null}

395 import { query } from "@anthropic-ai/claude-agent-sdk";

396 

397 for await (const message of query({

398 prompt: "Review this code for best practices",

399 options: {

400 allowedTools: ["Read", "Glob", "Grep"]

401 }

402 })) {

403 if ("result" in message) console.log(message.result);

404 }

405 ```

406 </CodeGroup>

407 

408 [Pelajari lebih lanjut tentang izin →](/id/agent-sdk/permissions)

409 </Tab>

410 

411 <Tab title="Sesi">

412 Pertahankan konteks di seluruh pertukaran berganda. Claude mengingat file yang dibaca, analisis yang dilakukan, dan riwayat percakapan. Lanjutkan sesi nanti, atau fork mereka untuk menjelajahi pendekatan berbeda.

413 

414 Contoh ini menangkap ID sesi dari kueri pertama, kemudian melanjutkan untuk terus dengan konteks penuh:

415 

416 <CodeGroup>

417 ```python Python theme={null}

418 import asyncio

419 from claude_agent_sdk import query, ClaudeAgentOptions, SystemMessage, ResultMessage

420 

421 

422 async def main():

423 session_id = None

424 

425 # First query: capture the session ID

426 async for message in query(

427 prompt="Read the authentication module",

428 options=ClaudeAgentOptions(allowed_tools=["Read", "Glob"]),

429 ):

430 if isinstance(message, SystemMessage) and message.subtype == "init":

431 session_id = message.data["session_id"]

432 

433 # Resume with full context from the first query

434 async for message in query(

435 prompt="Now find all places that call it", # "it" = auth module

436 options=ClaudeAgentOptions(resume=session_id),

437 ):

438 if isinstance(message, ResultMessage):

439 print(message.result)

440 

441 

442 asyncio.run(main())

443 ```

444 

445 ```typescript TypeScript theme={null}

446 import { query } from "@anthropic-ai/claude-agent-sdk";

447 

448 let sessionId: string | undefined;

449 

450 // First query: capture the session ID

451 for await (const message of query({

452 prompt: "Read the authentication module",

453 options: { allowedTools: ["Read", "Glob"] }

454 })) {

455 if (message.type === "system" && message.subtype === "init") {

456 sessionId = message.session_id;

457 }

458 }

459 

460 // Resume with full context from the first query

461 for await (const message of query({

462 prompt: "Now find all places that call it", // "it" = auth module

463 options: { resume: sessionId }

464 })) {

465 if ("result" in message) console.log(message.result);

466 }

467 ```

468 </CodeGroup>

469 

470 [Pelajari lebih lanjut tentang sesi →](/id/agent-sdk/sessions)

471 </Tab>

472</Tabs>

473 

474### Fitur Claude Code

475 

476SDK juga mendukung konfigurasi berbasis filesystem Claude Code. Dengan opsi default, SDK memuat ini dari `.claude/` di direktori kerja Anda dan `~/.claude/`. Untuk membatasi sumber mana yang dimuat, atur `setting_sources` (Python) atau `settingSources` (TypeScript) dalam opsi Anda.

477 

478| Fitur | Deskripsi | Lokasi |

479| ------------------------------------------------ | ---------------------------------------------------- | ------------------------------------ |

480| [Skills](/id/agent-sdk/skills) | Kemampuan khusus yang ditentukan dalam Markdown | `.claude/skills/*/SKILL.md` |

481| [Slash commands](/id/agent-sdk/slash-commands) | Perintah khusus untuk tugas umum | `.claude/commands/*.md` |

482| [Memory](/id/agent-sdk/modifying-system-prompts) | Konteks proyek dan instruksi | `CLAUDE.md` atau `.claude/CLAUDE.md` |

483| [Plugins](/id/agent-sdk/plugins) | Perluas dengan perintah khusus, agen, dan server MCP | Programmatic via `plugins` option |

484 

485## Bandingkan Agent SDK dengan alat Claude lainnya

486 

487Platform Claude menawarkan berbagai cara untuk membangun dengan Claude. Berikut cara Agent SDK cocok:

488 

489<Tabs>

490 <Tab title="Agent SDK vs Client SDK">

491 [Anthropic Client SDK](https://platform.claude.com/docs/id/api/client-sdks) memberi Anda akses API langsung: Anda mengirim prompt dan mengimplementasikan eksekusi alat sendiri. **Agent SDK** memberi Anda Claude dengan eksekusi alat bawaan.

492 

493 Dengan Client SDK, Anda mengimplementasikan loop alat. Dengan Agent SDK, Claude menanganinya:

494 

495 <CodeGroup>

496 ```python Python theme={null}

497 # Client SDK: You implement the tool loop

498 response = client.messages.create(...)

499 while response.stop_reason == "tool_use":

500 result = your_tool_executor(response.tool_use)

501 response = client.messages.create(tool_result=result, **params)

502 

503 # Agent SDK: Claude handles tools autonomously

504 async for message in query(prompt="Fix the bug in auth.py"):

505 print(message)

506 ```

507 

508 ```typescript TypeScript theme={null}

509 // Client SDK: You implement the tool loop

510 let response = await client.messages.create({ ...params });

511 while (response.stop_reason === "tool_use") {

512 const result = yourToolExecutor(response.tool_use);

513 response = await client.messages.create({ tool_result: result, ...params });

514 }

515 

516 // Agent SDK: Claude handles tools autonomously

517 for await (const message of query({ prompt: "Fix the bug in auth.ts" })) {

518 console.log(message);

519 }

520 ```

521 </CodeGroup>

522 </Tab>

523 

524 <Tab title="Agent SDK vs Claude Code CLI">

525 Kemampuan yang sama, antarmuka berbeda:

526 

527 | Kasus penggunaan | Pilihan terbaik |

528 | ----------------------- | --------------- |

529 | Pengembangan interaktif | CLI |

530 | Pipeline CI/CD | SDK |

531 | Aplikasi khusus | SDK |

532 | Tugas sekali jalan | CLI |

533 | Otomasi produksi | SDK |

534 

535 Banyak tim menggunakan keduanya: CLI untuk pengembangan harian, SDK untuk produksi. Alur kerja diterjemahkan langsung di antara keduanya.

536 </Tab>

537 

538 <Tab title="Agent SDK vs Managed Agents">

539 [Managed Agents](https://platform.claude.com/docs/id/managed-agents/overview) adalah REST API yang dihosting: Anthropic menjalankan agen dan sandbox, dan aplikasi Anda mengirim acara dan streaming kembali hasil. **Agent SDK** adalah perpustakaan yang menjalankan loop agen di dalam proses Anda sendiri.

540 

541 | | Agent SDK | Managed Agents |

542 | --------------------- | ------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |

543 | **Berjalan di** | Proses Anda, infrastruktur Anda | Infrastruktur yang dikelola Anthropic |

544 | **Antarmuka** | Perpustakaan Python atau TypeScript | REST API |

545 | **Agen bekerja pada** | File di infrastruktur Anda | Sandbox yang dikelola per sesi |

546 | **Status sesi** | JSONL di sistem file Anda | Log acara yang dihosting Anthropic |

547 | **Alat khusus** | Fungsi Python atau TypeScript dalam proses | Claude memicu alat; Anda menjalankan dan mengembalikan hasil |

548 | **Terbaik untuk** | Prototyping lokal, agen yang bekerja langsung pada sistem file dan layanan Anda | Agen produksi tanpa mengoperasikan infrastruktur sandbox atau sesi, sesi yang berjalan lama dan asinkron |

549 

550 Jalur umum adalah membuat prototipe dengan Agent SDK secara lokal, kemudian pindah ke Managed Agents untuk produksi.

551 </Tab>

552</Tabs>

553 

554## Changelog

555 

556Lihat changelog lengkap untuk pembaruan SDK, perbaikan bug, dan fitur baru:

557 

558* **TypeScript SDK**: [lihat CHANGELOG.md](https://github.com/anthropics/claude-agent-sdk-typescript/blob/main/CHANGELOG.md)

559* **Python SDK**: [lihat CHANGELOG.md](https://github.com/anthropics/claude-agent-sdk-python/blob/main/CHANGELOG.md)

560 

561## Melaporkan bug

562 

563Jika Anda mengalami bug atau masalah dengan Agent SDK:

564 

565* **TypeScript SDK**: [laporkan masalah di GitHub](https://github.com/anthropics/claude-agent-sdk-typescript/issues)

566* **Python SDK**: [laporkan masalah di GitHub](https://github.com/anthropics/claude-agent-sdk-python/issues)

567 

568## Pedoman branding

569 

570Untuk mitra yang mengintegrasikan Claude Agent SDK, penggunaan branding Claude bersifat opsional. Saat mereferensikan Claude dalam produk Anda:

571 

572**Diizinkan:**

573 

574* "Claude Agent" (lebih disukai untuk menu dropdown)

575* "Claude" (ketika sudah dalam menu berlabel "Agents")

576* "{YourAgentName} Powered by Claude" (jika Anda memiliki nama agen yang ada)

577 

578**Tidak diizinkan:**

579 

580* "Claude Code" atau "Claude Code Agent"

581* Elemen visual atau ASCII art bermerek Claude Code yang meniru Claude Code

582 

583Produk Anda harus mempertahankan branding sendiri dan tidak boleh terlihat seperti Claude Code atau produk Anthropic apa pun. Untuk pertanyaan tentang kepatuhan branding, hubungi [tim penjualan](https://www.anthropic.com/contact-sales) Anthropic.

584 

585## Lisensi dan persyaratan

586 

587Penggunaan Claude Agent SDK diatur oleh [Persyaratan Layanan Komersial Anthropic](https://www.anthropic.com/legal/commercial-terms), termasuk ketika Anda menggunakannya untuk memberdayakan produk dan layanan yang Anda buat tersedia untuk pelanggan dan pengguna akhir Anda sendiri, kecuali sejauh komponen atau dependensi tertentu dicakup oleh lisensi berbeda seperti yang ditunjukkan dalam file LICENSE komponen tersebut.

588 

589## Langkah berikutnya

590 

591<CardGroup cols={2}>

592 <Card title="Panduan Cepat" icon="play" href="/id/agent-sdk/quickstart">

593 Bangun agen yang menemukan dan memperbaiki bug dalam hitungan menit

594 </Card>

595 

596 <Card title="Agen contoh" icon="star" href="https://github.com/anthropics/claude-agent-sdk-demos">

597 Asisten email, agen penelitian, dan banyak lagi

598 </Card>

599 

600 <Card title="TypeScript SDK" icon="code" href="/id/agent-sdk/typescript">

601 Referensi API TypeScript lengkap dan contoh

602 </Card>

603 

604 <Card title="Python SDK" icon="code" href="/id/agent-sdk/python">

605 Referensi API Python lengkap dan contoh

606 </Card>

607</CardGroup>

agent-sdk/plugins.md +342 −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# Plugins dalam SDK

6 

7> Muat plugin kustom untuk memperluas Claude Code dengan perintah, agen, skills, dan hooks melalui Agent SDK

8 

9Plugins memungkinkan Anda memperluas Claude Code dengan fungsionalitas kustom yang dapat dibagikan di seluruh proyek. Melalui Agent SDK, Anda dapat secara terprogram memuat plugins dari direktori lokal untuk menambahkan slash commands kustom, agen, skills, hooks, dan server MCP ke sesi agen Anda.

10 

11## Apa itu plugins?

12 

13Plugins adalah paket ekstensi Claude Code yang dapat mencakup:

14 

15* **Skills**: Kemampuan yang dipanggil model yang digunakan Claude secara otonom (juga dapat dipanggil dengan `/skill-name`)

16* **Agents**: Subagen khusus untuk tugas-tugas tertentu

17* **Hooks**: Penanganan peristiwa yang merespons penggunaan alat dan peristiwa lainnya

18* **MCP servers**: Integrasi alat eksternal melalui Model Context Protocol

19 

20<Note>

21 Direktori `commands/` adalah format warisan. Gunakan `skills/` untuk plugin baru. Claude Code terus mendukung kedua format untuk kompatibilitas mundur.

22</Note>

23 

24Untuk informasi lengkap tentang struktur plugin dan cara membuat plugins, lihat [Plugins](/id/plugins).

25 

26## Memuat plugins

27 

28Muat plugins dengan menyediakan jalur sistem file lokal mereka dalam konfigurasi opsi Anda. Bidang `type` harus `"local"`, satu-satunya nilai yang diterima SDK. Untuk menggunakan plugin yang didistribusikan melalui [marketplace](/id/plugin-marketplaces) atau repositori jarak jauh, unduh terlebih dahulu dan sediakan jalur direktori lokal. SDK mendukung pemuatan beberapa plugins dari lokasi berbeda.

29 

30<CodeGroup>

31 ```typescript TypeScript theme={null}

32 import { query } from "@anthropic-ai/claude-agent-sdk";

33 

34 for await (const message of query({

35 prompt: "Hello",

36 options: {

37 plugins: [

38 { type: "local", path: "./my-plugin" },

39 { type: "local", path: "/absolute/path/to/another-plugin" }

40 ]

41 }

42 })) {

43 // Plugin commands, agents, and other features are now available

44 }

45 ```

46 

47 ```python Python theme={null}

48 import asyncio

49 from claude_agent_sdk import query

50 

51 

52 async def main():

53 async for message in query(

54 prompt="Hello",

55 options={

56 "plugins": [

57 {"type": "local", "path": "./my-plugin"},

58 {"type": "local", "path": "/absolute/path/to/another-plugin"},

59 ]

60 },

61 ):

62 # Plugin commands, agents, and other features are now available

63 pass

64 

65 

66 asyncio.run(main())

67 ```

68</CodeGroup>

69 

70### Spesifikasi jalur

71 

72Jalur plugin dapat berupa:

73 

74* **Jalur relatif**: Diselesaikan relatif terhadap direktori kerja saat ini (misalnya, `"./plugins/my-plugin"`)

75* **Jalur absolut**: Jalur sistem file lengkap (misalnya, `"/home/user/plugins/my-plugin"`)

76 

77<Note>

78 Jalur harus menunjuk ke direktori root plugin (direktori yang berisi `.claude-plugin/plugin.json`).

79</Note>

80 

81## Memverifikasi instalasi plugin

82 

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

84 

85<CodeGroup>

86 ```typescript TypeScript theme={null}

87 import { query } from "@anthropic-ai/claude-agent-sdk";

88 

89 for await (const message of query({

90 prompt: "Hello",

91 options: {

92 plugins: [{ type: "local", path: "./my-plugin" }]

93 }

94 })) {

95 if (message.type === "system" && message.subtype === "init") {

96 // Check loaded plugins

97 console.log("Plugins:", message.plugins);

98 // Example: [{ name: "my-plugin", path: "./my-plugin" }]

99 

100 // Check available commands from plugins

101 console.log("Commands:", message.slash_commands);

102 // Example: ["/help", "/compact", "my-plugin:custom-command"]

103 }

104 }

105 ```

106 

107 ```python Python theme={null}

108 import asyncio

109 from claude_agent_sdk import query

110 

111 

112 async def main():

113 async for message in query(

114 prompt="Hello", options={"plugins": [{"type": "local", "path": "./my-plugin"}]}

115 ):

116 if message.type == "system" and message.subtype == "init":

117 # Check loaded plugins

118 print("Plugins:", message.data.get("plugins"))

119 # Example: [{"name": "my-plugin", "path": "./my-plugin"}]

120 

121 # Check available commands from plugins

122 print("Commands:", message.data.get("slash_commands"))

123 # Example: ["/help", "/compact", "my-plugin:custom-command"]

124 

125 

126 asyncio.run(main())

127 ```

128</CodeGroup>

129 

130## Menggunakan plugin skills

131 

132Skills dari plugins secara otomatis diberi namespace dengan nama plugin untuk menghindari konflik. Ketika dipanggil sebagai slash commands, formatnya adalah `plugin-name:skill-name`.

133 

134<CodeGroup>

135 ```typescript TypeScript theme={null}

136 import { query } from "@anthropic-ai/claude-agent-sdk";

137 

138 // Load a plugin with a custom /greet skill

139 for await (const message of query({

140 prompt: "/my-plugin:greet", // Use plugin skill with namespace

141 options: {

142 plugins: [{ type: "local", path: "./my-plugin" }]

143 }

144 })) {

145 // Claude executes the custom greeting skill from the plugin

146 if (message.type === "assistant") {

147 console.log(message.message.content);

148 }

149 }

150 ```

151 

152 ```python Python theme={null}

153 import asyncio

154 from claude_agent_sdk import query, AssistantMessage, TextBlock

155 

156 

157 async def main():

158 # Load a plugin with a custom /greet skill

159 async for message in query(

160 prompt="/demo-plugin:greet", # Use plugin skill with namespace

161 options={"plugins": [{"type": "local", "path": "./plugins/demo-plugin"}]},

162 ):

163 # Claude executes the custom greeting skill from the plugin

164 if isinstance(message, AssistantMessage):

165 for block in message.content:

166 if isinstance(block, TextBlock):

167 print(f"Claude: {block.text}")

168 

169 

170 asyncio.run(main())

171 ```

172</CodeGroup>

173 

174<Note>

175 Jika Anda menginstal plugin melalui CLI (misalnya, `/plugin install my-plugin@marketplace`), Anda masih dapat menggunakannya di SDK dengan menyediakan jalur instalasinya. Periksa `~/.claude/plugins/` untuk plugins yang diinstal CLI.

176</Note>

177 

178## Contoh lengkap

179 

180Berikut adalah contoh lengkap yang mendemonstrasikan pemuatan dan penggunaan plugin:

181 

182<CodeGroup>

183 ```typescript TypeScript theme={null}

184 import { query } from "@anthropic-ai/claude-agent-sdk";

185 import * as path from "path";

186 

187 async function runWithPlugin() {

188 const pluginPath = path.join(__dirname, "plugins", "my-plugin");

189 

190 console.log("Loading plugin from:", pluginPath);

191 

192 for await (const message of query({

193 prompt: "What custom commands do you have available?",

194 options: {

195 plugins: [{ type: "local", path: pluginPath }],

196 maxTurns: 3

197 }

198 })) {

199 if (message.type === "system" && message.subtype === "init") {

200 console.log("Loaded plugins:", message.plugins);

201 console.log("Available commands:", message.slash_commands);

202 }

203 

204 if (message.type === "assistant") {

205 console.log("Assistant:", message.message.content);

206 }

207 }

208 }

209 

210 runWithPlugin().catch(console.error);

211 ```

212 

213 ```python Python theme={null}

214 #!/usr/bin/env python3

215 """Example demonstrating how to use plugins with the Agent SDK."""

216 

217 from pathlib import Path

218 import anyio

219 from claude_agent_sdk import (

220 AssistantMessage,

221 ClaudeAgentOptions,

222 TextBlock,

223 query,

224 )

225 

226 

227 async def run_with_plugin():

228 """Example using a custom plugin."""

229 plugin_path = Path(__file__).parent / "plugins" / "demo-plugin"

230 

231 print(f"Loading plugin from: {plugin_path}")

232 

233 options = ClaudeAgentOptions(

234 plugins=[{"type": "local", "path": str(plugin_path)}],

235 max_turns=3,

236 )

237 

238 async for message in query(

239 prompt="What custom commands do you have available?", options=options

240 ):

241 if message.type == "system" and message.subtype == "init":

242 print(f"Loaded plugins: {message.data.get('plugins')}")

243 print(f"Available commands: {message.data.get('slash_commands')}")

244 

245 if isinstance(message, AssistantMessage):

246 for block in message.content:

247 if isinstance(block, TextBlock):

248 print(f"Assistant: {block.text}")

249 

250 

251 if __name__ == "__main__":

252 anyio.run(run_with_plugin)

253 ```

254</CodeGroup>

255 

256## Referensi struktur plugin

257 

258Direktori plugin harus berisi file manifest `.claude-plugin/plugin.json`. Secara opsional dapat mencakup:

259 

260```text theme={null}

261my-plugin/

262├── .claude-plugin/

263│ └── plugin.json # Required: plugin manifest

264├── skills/ # Agent Skills (invoked autonomously or via /skill-name)

265│ └── my-skill/

266│ └── SKILL.md

267├── commands/ # Legacy: use skills/ instead

268│ └── custom-cmd.md

269├── agents/ # Custom agents

270│ └── specialist.md

271├── hooks/ # Event handlers

272│ └── hooks.json

273└── .mcp.json # MCP server definitions

274```

275 

276Untuk informasi terperinci tentang membuat plugins, lihat:

277 

278* [Plugins](/id/plugins) - Panduan pengembangan plugin lengkap

279* [Plugins reference](/id/plugins-reference) - Spesifikasi teknis dan skema

280 

281## Kasus penggunaan umum

282 

283### Pengembangan dan pengujian

284 

285Muat plugins selama pengembangan tanpa menginstalnya secara global:

286 

287```typescript theme={null}

288plugins: [{ type: "local", path: "./dev-plugins/my-plugin" }];

289```

290 

291### Ekstensi khusus proyek

292 

293Sertakan plugins di repositori proyek Anda untuk konsistensi di seluruh tim:

294 

295```typescript theme={null}

296plugins: [{ type: "local", path: "./project-plugins/team-workflows" }];

297```

298 

299### Sumber plugin ganda

300 

301Gabungkan plugins dari lokasi berbeda:

302 

303```typescript theme={null}

304plugins: [

305 { type: "local", path: "./local-plugin" },

306 { type: "local", path: "~/.claude/custom-plugins/shared-plugin" }

307];

308```

309 

310## Troubleshooting

311 

312### Plugin tidak dimuat

313 

314Jika plugin Anda tidak muncul dalam pesan init:

315 

3161. **Periksa jalurnya**: Pastikan jalur menunjuk ke direktori root plugin (berisi `.claude-plugin/`)

3172. **Validasi plugin.json**: Pastikan file manifest Anda memiliki sintaks JSON yang valid

3183. **Periksa izin file**: Pastikan direktori plugin dapat dibaca

319 

320### Skills tidak muncul

321 

322Jika plugin skills tidak berfungsi:

323 

3241. **Gunakan namespace**: Plugin skills memerlukan format `plugin-name:skill-name` ketika dipanggil sebagai slash commands

3252. **Periksa pesan init**: Verifikasi bahwa skill muncul di `slash_commands` dengan namespace yang benar

3263. **Validasi file skill**: Pastikan setiap skill memiliki file `SKILL.md` di subdirektorinya sendiri di bawah `skills/` (misalnya, `skills/my-skill/SKILL.md`)

327 

328### Masalah resolusi jalur

329 

330Jika jalur relatif tidak berfungsi:

331 

3321. **Periksa direktori kerja**: Jalur relatif diselesaikan dari direktori kerja saat ini Anda

3332. **Gunakan jalur absolut**: Untuk keandalan, pertimbangkan menggunakan jalur absolut

3343. **Normalkan jalur**: Gunakan utilitas jalur untuk membuat jalur dengan benar

335 

336## Lihat juga

337 

338* [Plugins](/id/plugins) - Panduan pengembangan plugin lengkap

339* [Plugins reference](/id/plugins-reference) - Spesifikasi teknis

340* [Slash Commands](/id/agent-sdk/slash-commands) - Menggunakan slash commands di SDK

341* [Subagents](/id/agent-sdk/subagents) - Bekerja dengan agen khusus

342* [Skills](/id/agent-sdk/skills) - Menggunakan Agent Skills

agent-sdk/python.md +3274 −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# Referensi Agent SDK - Python

6 

7> Referensi API lengkap untuk Python Agent SDK, termasuk semua fungsi, tipe, dan kelas.

8 

9## Instalasi

10 

11```bash theme={null}

12pip install claude-agent-sdk

13```

14 

15## Memilih antara `query()` dan `ClaudeSDKClient`

16 

17Python SDK menyediakan dua cara untuk berinteraksi dengan Claude Code:

18 

19### Perbandingan cepat

20 

21| Fitur | `query()` | `ClaudeSDKClient` |

22| :------------------ | :---------------------------- | :------------------------------------------ |

23| **Sesi** | Membuat sesi baru setiap kali | Menggunakan kembali sesi yang sama |

24| **Percakapan** | Pertukaran tunggal | Beberapa pertukaran dalam konteks yang sama |

25| **Koneksi** | Dikelola secara otomatis | Kontrol manual |

26| **Streaming Input** | ✅ Didukung | ✅ Didukung |

27| **Interrupts** | ❌ Tidak didukung | ✅ Didukung |

28| **Hooks** | ✅ Didukung | ✅ Didukung |

29| **Custom Tools** | ✅ Didukung | ✅ Didukung |

30| **Continue Chat** | ❌ Sesi baru setiap kali | ✅ Mempertahankan percakapan |

31| **Use Case** | Tugas sekali jalan | Percakapan berkelanjutan |

32 

33### Kapan menggunakan `query()` (sesi baru setiap kali)

34 

35**Terbaik untuk:**

36 

37* Pertanyaan sekali jalan di mana Anda tidak memerlukan riwayat percakapan

38* Tugas independen yang tidak memerlukan konteks dari pertukaran sebelumnya

39* Skrip otomasi sederhana

40* Ketika Anda menginginkan awal yang segar setiap kali

41 

42### Kapan menggunakan `ClaudeSDKClient` (percakapan berkelanjutan)

43 

44**Terbaik untuk:**

45 

46* **Melanjutkan percakapan** - Ketika Anda memerlukan Claude untuk mengingat konteks

47* **Pertanyaan lanjutan** - Membangun berdasarkan respons sebelumnya

48* **Aplikasi interaktif** - Antarmuka obrolan, REPL

49* **Logika berbasis respons** - Ketika tindakan berikutnya bergantung pada respons Claude

50* **Kontrol sesi** - Mengelola siklus hidup percakapan secara eksplisit

51 

52## Fungsi

53 

54### `query()`

55 

56Membuat sesi baru untuk setiap interaksi dengan Claude Code. Mengembalikan async iterator yang menghasilkan pesan saat tiba. Setiap panggilan ke `query()` dimulai segar tanpa memori interaksi sebelumnya.

57 

58```python theme={null}

59async def query(

60 *,

61 prompt: str | AsyncIterable[dict[str, Any]],

62 options: ClaudeAgentOptions | None = None,

63 transport: Transport | None = None

64) -> AsyncIterator[Message]

65```

66 

67#### Parameter

68 

69| Parameter | Tipe | Deskripsi |

70| :---------- | :--------------------------- | :----------------------------------------------------------------------- |

71| `prompt` | `str \| AsyncIterable[dict]` | Prompt input sebagai string atau async iterable untuk mode streaming |

72| `options` | `ClaudeAgentOptions \| None` | Objek konfigurasi opsional (default ke `ClaudeAgentOptions()` jika None) |

73| `transport` | `Transport \| None` | Transport kustom opsional untuk berkomunikasi dengan proses CLI |

74 

75#### Pengembalian

76 

77Mengembalikan `AsyncIterator[Message]` yang menghasilkan pesan dari percakapan.

78 

79#### Contoh - Dengan opsi

80 

81```python theme={null}

82import asyncio

83from claude_agent_sdk import query, ClaudeAgentOptions

84 

85 

86async def main():

87 options = ClaudeAgentOptions(

88 system_prompt="You are an expert Python developer",

89 permission_mode="acceptEdits",

90 cwd="/home/user/project",

91 )

92 

93 async for message in query(prompt="Create a Python web server", options=options):

94 print(message)

95 

96 

97asyncio.run(main())

98```

99 

100### `tool()`

101 

102Dekorator untuk mendefinisikan tools MCP dengan keamanan tipe.

103 

104```python theme={null}

105def tool(

106 name: str,

107 description: str,

108 input_schema: type | dict[str, Any],

109 annotations: ToolAnnotations | None = None

110) -> Callable[[Callable[[Any], Awaitable[dict[str, Any]]]], SdkMcpTool[Any]]

111```

112 

113#### Parameter

114 

115| Parameter | Tipe | Deskripsi |

116| :------------- | :----------------------------------------------- | :----------------------------------------------------------------------- |

117| `name` | `str` | Pengenal unik untuk tool |

118| `description` | `str` | Deskripsi yang dapat dibaca manusia tentang apa yang dilakukan tool |

119| `input_schema` | `type \| dict[str, Any]` | Skema yang mendefinisikan parameter input tool (lihat di bawah) |

120| `annotations` | [`ToolAnnotations`](#tool-annotations)` \| None` | Anotasi tool MCP opsional yang memberikan petunjuk perilaku kepada klien |

121 

122#### Opsi skema input

123 

1241. **Pemetaan tipe sederhana** (direkomendasikan):

125 

126 ```python theme={null}

127 {"text": str, "count": int, "enabled": bool}

128 ```

129 

1302. **Format JSON Schema** (untuk validasi kompleks):

131 ```python theme={null}

132 {

133 "type": "object",

134 "properties": {

135 "text": {"type": "string"},

136 "count": {"type": "integer", "minimum": 0},

137 },

138 "required": ["text"],

139 }

140 ```

141 

142#### Pengembalian

143 

144Fungsi dekorator yang membungkus implementasi tool dan mengembalikan instance `SdkMcpTool`.

145 

146#### Contoh

147 

148```python theme={null}

149from claude_agent_sdk import tool

150from typing import Any

151 

152 

153@tool("greet", "Greet a user", {"name": str})

154async def greet(args: dict[str, Any]) -> dict[str, Any]:

155 return {"content": [{"type": "text", "text": f"Hello, {args['name']}!"}]}

156```

157 

158#### `ToolAnnotations`

159 

160Diimpor ulang dari `mcp.types` (juga tersedia sebagai `from claude_agent_sdk import ToolAnnotations`). Semua field adalah petunjuk opsional; klien tidak boleh mengandalkannya untuk keputusan keamanan.

161 

162| Field | Tipe | Default | Deskripsi |

163| :---------------- | :------------- | :------ | :------------------------------------------------------------------------------------------------------------------------------------------- |

164| `title` | `str \| None` | `None` | Judul yang dapat dibaca manusia untuk tool |

165| `readOnlyHint` | `bool \| None` | `False` | Jika `True`, tool tidak memodifikasi lingkungannya |

166| `destructiveHint` | `bool \| None` | `True` | Jika `True`, tool dapat melakukan pembaruan destruktif (hanya bermakna ketika `readOnlyHint` adalah `False`) |

167| `idempotentHint` | `bool \| None` | `False` | Jika `True`, panggilan berulang dengan argumen yang sama tidak memiliki efek tambahan (hanya bermakna ketika `readOnlyHint` adalah `False`) |

168| `openWorldHint` | `bool \| None` | `True` | Jika `True`, tool berinteraksi dengan entitas eksternal (misalnya, pencarian web). Jika `False`, domain tool ditutup (misalnya, tool memori) |

169 

170```python theme={null}

171from claude_agent_sdk import tool, ToolAnnotations

172from typing import Any

173 

174 

175@tool(

176 "search",

177 "Search the web",

178 {"query": str},

179 annotations=ToolAnnotations(readOnlyHint=True, openWorldHint=True),

180)

181async def search(args: dict[str, Any]) -> dict[str, Any]:

182 return {"content": [{"type": "text", "text": f"Results for: {args['query']}"}]}

183```

184 

185### `create_sdk_mcp_server()`

186 

187Buat server MCP dalam proses yang berjalan dalam aplikasi Python Anda.

188 

189```python theme={null}

190def create_sdk_mcp_server(

191 name: str,

192 version: str = "1.0.0",

193 tools: list[SdkMcpTool[Any]] | None = None

194) -> McpSdkServerConfig

195```

196 

197#### Parameter

198 

199| Parameter | Tipe | Default | Deskripsi |

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

201| `name` | `str` | - | Pengenal unik untuk server |

202| `version` | `str` | `"1.0.0"` | String versi server |

203| `tools` | `list[SdkMcpTool[Any]] \| None` | `None` | Daftar fungsi tool yang dibuat dengan dekorator `@tool` |

204 

205#### Pengembalian

206 

207Mengembalikan objek `McpSdkServerConfig` yang dapat diteruskan ke `ClaudeAgentOptions.mcp_servers`.

208 

209#### Contoh

210 

211```python theme={null}

212from claude_agent_sdk import tool, create_sdk_mcp_server

213 

214 

215@tool("add", "Add two numbers", {"a": float, "b": float})

216async def add(args):

217 return {"content": [{"type": "text", "text": f"Sum: {args['a'] + args['b']}"}]}

218 

219 

220@tool("multiply", "Multiply two numbers", {"a": float, "b": float})

221async def multiply(args):

222 return {"content": [{"type": "text", "text": f"Product: {args['a'] * args['b']}"}]}

223 

224 

225calculator = create_sdk_mcp_server(

226 name="calculator",

227 version="2.0.0",

228 tools=[add, multiply], # Pass decorated functions

229)

230 

231# Use with Claude

232options = ClaudeAgentOptions(

233 mcp_servers={"calc": calculator},

234 allowed_tools=["mcp__calc__add", "mcp__calc__multiply"],

235)

236```

237 

238### `list_sessions()`

239 

240Mencantumkan sesi masa lalu dengan metadata. Filter berdasarkan direktori proyek atau cantumkan sesi di semua proyek. Sinkron; mengembalikan segera.

241 

242```python theme={null}

243def list_sessions(

244 directory: str | None = None,

245 limit: int | None = None,

246 include_worktrees: bool = True

247) -> list[SDKSessionInfo]

248```

249 

250#### Parameter

251 

252| Parameter | Tipe | Default | Deskripsi |

253| :------------------ | :------------ | :------ | :----------------------------------------------------------------------------------------- |

254| `directory` | `str \| None` | `None` | Direktori untuk mencantumkan sesi. Ketika dihilangkan, mengembalikan sesi di semua proyek |

255| `limit` | `int \| None` | `None` | Jumlah maksimal sesi yang akan dikembalikan |

256| `include_worktrees` | `bool` | `True` | Ketika `directory` berada di dalam repositori git, sertakan sesi dari semua jalur worktree |

257 

258#### Tipe pengembalian: `SDKSessionInfo`

259 

260| Properti | Tipe | Deskripsi |

261| :-------------- | :------------ | :------------------------------------------------------------------------------------ |

262| `session_id` | `str` | Pengenal sesi unik |

263| `summary` | `str` | Judul tampilan: judul kustom, ringkasan yang dihasilkan otomatis, atau prompt pertama |

264| `last_modified` | `int` | Waktu modifikasi terakhir dalam milidetik sejak epoch |

265| `file_size` | `int \| None` | Ukuran file sesi dalam byte (`None` untuk backend penyimpanan jarak jauh) |

266| `custom_title` | `str \| None` | Judul sesi yang ditetapkan pengguna |

267| `first_prompt` | `str \| None` | Prompt pengguna bermakna pertama dalam sesi |

268| `git_branch` | `str \| None` | Cabang Git di akhir sesi |

269| `cwd` | `str \| None` | Direktori kerja untuk sesi |

270| `tag` | `str \| None` | Tag sesi yang ditetapkan pengguna (lihat [`tag_session()`](#tag-session)) |

271| `created_at` | `int \| None` | Waktu pembuatan sesi dalam milidetik sejak epoch |

272 

273#### Contoh

274 

275Cetak 10 sesi terbaru untuk proyek. Hasil diurutkan berdasarkan `last_modified` menurun, jadi item pertama adalah yang terbaru. Hilangkan `directory` untuk mencari di semua proyek.

276 

277```python theme={null}

278from claude_agent_sdk import list_sessions

279 

280for session in list_sessions(directory="/path/to/project", limit=10):

281 print(f"{session.summary} ({session.session_id})")

282```

283 

284### `get_session_messages()`

285 

286Mengambil pesan dari sesi masa lalu. Sinkron; mengembalikan segera.

287 

288```python theme={null}

289def get_session_messages(

290 session_id: str,

291 directory: str | None = None,

292 limit: int | None = None,

293 offset: int = 0

294) -> list[SessionMessage]

295```

296 

297#### Parameter

298 

299| Parameter | Tipe | Default | Deskripsi |

300| :----------- | :------------ | :--------- | :-------------------------------------------------------------------------- |

301| `session_id` | `str` | diperlukan | ID sesi untuk mengambil pesan |

302| `directory` | `str \| None` | `None` | Direktori proyek untuk dilihat. Ketika dihilangkan, mencari di semua proyek |

303| `limit` | `int \| None` | `None` | Jumlah maksimal pesan yang akan dikembalikan |

304| `offset` | `int` | `0` | Jumlah pesan yang akan dilewati dari awal |

305 

306#### Tipe pengembalian: `SessionMessage`

307 

308| Properti | Tipe | Deskripsi |

309| :------------------- | :----------------------------- | :----------------------------------------- |

310| `type` | `Literal["user", "assistant"]` | Peran pesan |

311| `uuid` | `str` | Pengenal pesan unik |

312| `session_id` | `str` | Pengenal sesi |

313| `message` | `Any` | Konten pesan mentah |

314| `parent_tool_use_id` | `None` | Dicadangkan untuk penggunaan di masa depan |

315 

316#### Contoh

317 

318```python theme={null}

319from claude_agent_sdk import list_sessions, get_session_messages

320 

321sessions = list_sessions(limit=1)

322if sessions:

323 messages = get_session_messages(sessions[0].session_id)

324 for msg in messages:

325 print(f"[{msg.type}] {msg.uuid}")

326```

327 

328### `get_session_info()`

329 

330Membaca metadata untuk sesi tunggal berdasarkan ID tanpa memindai direktori proyek lengkap. Sinkron; mengembalikan segera.

331 

332```python theme={null}

333def get_session_info(

334 session_id: str,

335 directory: str | None = None,

336) -> SDKSessionInfo | None

337```

338 

339#### Parameter

340 

341| Parameter | Tipe | Default | Deskripsi |

342| :----------- | :------------ | :--------- | :---------------------------------------------------------------------------- |

343| `session_id` | `str` | diperlukan | UUID sesi untuk dicari |

344| `directory` | `str \| None` | `None` | Jalur direktori proyek. Ketika dihilangkan, mencari di semua direktori proyek |

345 

346Mengembalikan [`SDKSessionInfo`](#return-type-sdk-session-info), atau `None` jika sesi tidak ditemukan.

347 

348#### Contoh

349 

350Cari metadata sesi tunggal tanpa memindai direktori proyek. Berguna ketika Anda sudah memiliki ID sesi dari run sebelumnya.

351 

352```python theme={null}

353from claude_agent_sdk import get_session_info

354 

355info = get_session_info("550e8400-e29b-41d4-a716-446655440000")

356if info:

357 print(f"{info.summary} (branch: {info.git_branch}, tag: {info.tag})")

358```

359 

360### `rename_session()`

361 

362Mengganti nama sesi dengan menambahkan entri judul kustom. Panggilan berulang aman; judul terbaru menang. Sinkron.

363 

364```python theme={null}

365def rename_session(

366 session_id: str,

367 title: str,

368 directory: str | None = None,

369) -> None

370```

371 

372#### Parameter

373 

374| Parameter | Tipe | Default | Deskripsi |

375| :----------- | :------------ | :--------- | :---------------------------------------------------------------------------- |

376| `session_id` | `str` | diperlukan | UUID sesi untuk diganti nama |

377| `title` | `str` | diperlukan | Judul baru. Harus tidak kosong setelah menghapus spasi putih |

378| `directory` | `str \| None` | `None` | Jalur direktori proyek. Ketika dihilangkan, mencari di semua direktori proyek |

379 

380Menimbulkan `ValueError` jika `session_id` bukan UUID yang valid atau `title` kosong; `FileNotFoundError` jika sesi tidak dapat ditemukan.

381 

382#### Contoh

383 

384Ganti nama sesi terbaru sehingga lebih mudah ditemukan nanti. Judul baru muncul di [`SDKSessionInfo.custom_title`](#return-type-sdk-session-info) pada pembacaan berikutnya.

385 

386```python theme={null}

387from claude_agent_sdk import list_sessions, rename_session

388 

389sessions = list_sessions(directory="/path/to/project", limit=1)

390if sessions:

391 rename_session(sessions[0].session_id, "Refactor auth module")

392```

393 

394### `tag_session()`

395 

396Menandai sesi. Teruskan `None` untuk menghapus tag. Panggilan berulang aman; tag terbaru menang. Sinkron.

397 

398```python theme={null}

399def tag_session(

400 session_id: str,

401 tag: str | None,

402 directory: str | None = None,

403) -> None

404```

405 

406#### Parameter

407 

408| Parameter | Tipe | Default | Deskripsi |

409| :----------- | :------------ | :--------- | :---------------------------------------------------------------------------- |

410| `session_id` | `str` | diperlukan | UUID sesi untuk ditandai |

411| `tag` | `str \| None` | diperlukan | String tag, atau `None` untuk menghapus. Disanitasi Unicode sebelum disimpan |

412| `directory` | `str \| None` | `None` | Jalur direktori proyek. Ketika dihilangkan, mencari di semua direktori proyek |

413 

414Menimbulkan `ValueError` jika `session_id` bukan UUID yang valid atau `tag` kosong setelah sanitasi; `FileNotFoundError` jika sesi tidak dapat ditemukan.

415 

416#### Contoh

417 

418Tandai sesi, kemudian filter berdasarkan tag itu pada pembacaan nanti. Teruskan `None` untuk menghapus tag yang ada.

419 

420```python theme={null}

421from claude_agent_sdk import list_sessions, tag_session

422 

423# Tag a session

424tag_session("550e8400-e29b-41d4-a716-446655440000", "needs-review")

425 

426# Later: find all sessions with that tag

427for session in list_sessions(directory="/path/to/project"):

428 if session.tag == "needs-review":

429 print(session.summary)

430```

431 

432## Kelas

433 

434### `ClaudeSDKClient`

435 

436**Mempertahankan sesi percakapan di beberapa pertukaran.** Ini adalah setara Python dari cara fungsi `query()` SDK TypeScript bekerja secara internal - ia membuat objek klien yang dapat melanjutkan percakapan.

437 

438#### Fitur Utama

439 

440* **Kontinuitas sesi**: Mempertahankan konteks percakapan di beberapa panggilan `query()`

441* **Percakapan yang sama**: Sesi mempertahankan pesan sebelumnya

442* **Dukungan interrupt**: Dapat menghentikan eksekusi di tengah-tengah tugas

443* **Siklus hidup eksplisit**: Anda mengontrol kapan sesi dimulai dan berakhir

444* **Alur berbasis respons**: Dapat bereaksi terhadap respons dan mengirim tindak lanjut

445* **Tools dan hooks kustom**: Mendukung tools kustom (dibuat dengan dekorator `@tool`) dan hooks

446 

447```python theme={null}

448class ClaudeSDKClient:

449 def __init__(self, options: ClaudeAgentOptions | None = None, transport: Transport | None = None)

450 async def connect(self, prompt: str | AsyncIterable[dict] | None = None) -> None

451 async def query(self, prompt: str | AsyncIterable[dict], session_id: str = "default") -> None

452 async def receive_messages(self) -> AsyncIterator[Message]

453 async def receive_response(self) -> AsyncIterator[Message]

454 async def interrupt(self) -> None

455 async def set_permission_mode(self, mode: str) -> None

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

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

458 async def get_mcp_status(self) -> McpStatusResponse

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

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

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

462 async def get_server_info(self) -> dict[str, Any] | None

463 async def disconnect(self) -> None

464```

465 

466#### Metode

467 

468| Metode | Deskripsi |

469| :---------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

470| `__init__(options)` | Inisialisasi klien dengan konfigurasi opsional |

471| `connect(prompt)` | Hubungkan ke Claude dengan prompt awal opsional atau aliran pesan |

472| `query(prompt, session_id)` | Kirim permintaan baru dalam mode streaming |

473| `receive_messages()` | Terima semua pesan dari Claude sebagai async iterator |

474| `receive_response()` | Terima pesan hingga dan termasuk ResultMessage |

475| `interrupt()` | Kirim sinyal interrupt (hanya bekerja dalam mode streaming) |

476| `set_permission_mode(mode)` | Ubah mode izin untuk sesi saat ini |

477| `set_model(model)` | Ubah model untuk sesi saat ini. Teruskan `None` untuk reset ke default |

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

479| `get_mcp_status()` | Dapatkan status semua server MCP yang dikonfigurasi. Mengembalikan [`McpStatusResponse`](#mcp-status-response) |

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

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

482| `stop_task(task_id)` | Hentikan tugas latar belakang yang sedang berjalan. [`TaskNotificationMessage`](#task-notification-message) dengan status `"stopped"` mengikuti dalam aliran pesan |

483| `get_server_info()` | Dapatkan informasi server termasuk ID sesi dan kemampuan |

484| `disconnect()` | Putuskan sambungan dari Claude |

485 

486#### Dukungan Context Manager

487 

488Klien dapat digunakan sebagai async context manager untuk manajemen koneksi otomatis:

489 

490```python theme={null}

491async with ClaudeSDKClient() as client:

492 await client.query("Hello Claude")

493 async for message in client.receive_response():

494 print(message)

495```

496 

497> **Penting:** Saat mengulangi pesan, hindari menggunakan `break` untuk keluar lebih awal karena ini dapat menyebabkan masalah pembersihan asyncio. Sebaliknya, biarkan iterasi selesai secara alami atau gunakan flag untuk melacak kapan Anda menemukan apa yang Anda butuhkan.

498 

499#### Contoh - Melanjutkan percakapan

500 

501```python theme={null}

502import asyncio

503from claude_agent_sdk import ClaudeSDKClient, AssistantMessage, TextBlock, ResultMessage

504 

505 

506async def main():

507 async with ClaudeSDKClient() as client:

508 # First question

509 await client.query("What's the capital of France?")

510 

511 # Process response

512 async for message in client.receive_response():

513 if isinstance(message, AssistantMessage):

514 for block in message.content:

515 if isinstance(block, TextBlock):

516 print(f"Claude: {block.text}")

517 

518 # Follow-up question - the session retains the previous context

519 await client.query("What's the population of that city?")

520 

521 async for message in client.receive_response():

522 if isinstance(message, AssistantMessage):

523 for block in message.content:

524 if isinstance(block, TextBlock):

525 print(f"Claude: {block.text}")

526 

527 # Another follow-up - still in the same conversation

528 await client.query("What are some famous landmarks there?")

529 

530 async for message in client.receive_response():

531 if isinstance(message, AssistantMessage):

532 for block in message.content:

533 if isinstance(block, TextBlock):

534 print(f"Claude: {block.text}")

535 

536 

537asyncio.run(main())

538```

539 

540#### Contoh - Streaming input dengan ClaudeSDKClient

541 

542```python theme={null}

543import asyncio

544from claude_agent_sdk import ClaudeSDKClient

545 

546 

547async def message_stream():

548 """Generate messages dynamically."""

549 yield {

550 "type": "user",

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

552 }

553 await asyncio.sleep(0.5)

554 yield {

555 "type": "user",

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

557 }

558 await asyncio.sleep(0.5)

559 yield {

560 "type": "user",

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

562 }

563 

564 

565async def main():

566 async with ClaudeSDKClient() as client:

567 # Stream input to Claude

568 await client.query(message_stream())

569 

570 # Process response

571 async for message in client.receive_response():

572 print(message)

573 

574 # Follow-up in same session

575 await client.query("Should we be concerned about these readings?")

576 

577 async for message in client.receive_response():

578 print(message)

579 

580 

581asyncio.run(main())

582```

583 

584#### Contoh - Menggunakan interrupts

585 

586```python theme={null}

587import asyncio

588from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions, ResultMessage

589 

590 

591async def interruptible_task():

592 options = ClaudeAgentOptions(allowed_tools=["Bash"], permission_mode="acceptEdits")

593 

594 async with ClaudeSDKClient(options=options) as client:

595 # Start a long-running task

596 await client.query("Count from 1 to 100 slowly, using the bash sleep command")

597 

598 # Let it run for a bit

599 await asyncio.sleep(2)

600 

601 # Interrupt the task

602 await client.interrupt()

603 print("Task interrupted!")

604 

605 # Drain the interrupted task's messages (including its ResultMessage)

606 async for message in client.receive_response():

607 if isinstance(message, ResultMessage):

608 print(f"Interrupted task finished with subtype={message.subtype!r}")

609 # subtype is "error_during_execution" for interrupted tasks

610 

611 # Send a new command

612 await client.query("Just say hello instead")

613 

614 # Now receive the new response

615 async for message in client.receive_response():

616 if isinstance(message, ResultMessage) and message.subtype == "success":

617 print(f"New result: {message.result}")

618 

619 

620asyncio.run(interruptible_task())

621```

622 

623<Note>

624 **Perilaku buffer setelah interrupt:** `interrupt()` mengirim sinyal berhenti tetapi tidak menghapus buffer pesan. Pesan yang sudah diproduksi oleh tugas yang terputus, termasuk `ResultMessage`-nya (dengan `subtype="error_during_execution"`), tetap berada dalam aliran. Anda harus menguras mereka dengan `receive_response()` sebelum membaca respons ke query baru. Jika Anda mengirim query baru segera setelah `interrupt()` dan memanggil `receive_response()` hanya sekali, Anda akan menerima pesan tugas yang terputus, bukan respons query baru.

625</Note>

626 

627#### Contoh - Kontrol izin lanjutan

628 

629```python theme={null}

630from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions

631from claude_agent_sdk.types import (

632 PermissionResultAllow,

633 PermissionResultDeny,

634 ToolPermissionContext,

635)

636 

637 

638async def custom_permission_handler(

639 tool_name: str, input_data: dict, context: ToolPermissionContext

640) -> PermissionResultAllow | PermissionResultDeny:

641 """Custom logic for tool permissions."""

642 

643 # Block writes to system directories

644 if tool_name == "Write" and input_data.get("file_path", "").startswith("/system/"):

645 return PermissionResultDeny(

646 message="System directory write not allowed", interrupt=True

647 )

648 

649 # Redirect sensitive file operations

650 if tool_name in ["Write", "Edit"] and "config" in input_data.get("file_path", ""):

651 safe_path = f"./sandbox/{input_data['file_path']}"

652 return PermissionResultAllow(

653 updated_input={**input_data, "file_path": safe_path}

654 )

655 

656 # Allow everything else

657 return PermissionResultAllow(updated_input=input_data)

658 

659 

660async def main():

661 options = ClaudeAgentOptions(

662 can_use_tool=custom_permission_handler, allowed_tools=["Read", "Write", "Edit"]

663 )

664 

665 async with ClaudeSDKClient(options=options) as client:

666 await client.query("Update the system config file")

667 

668 async for message in client.receive_response():

669 # Will use sandbox path instead

670 print(message)

671 

672 

673asyncio.run(main())

674```

675 

676## Tipe

677 

678<Note>

679 **`@dataclass` vs `TypedDict`:** SDK ini menggunakan dua jenis tipe. Kelas yang didekorasi dengan `@dataclass` (seperti `ResultMessage`, `AgentDefinition`, `TextBlock`) adalah instance objek saat runtime dan mendukung akses atribut: `msg.result`. Kelas yang didefinisikan dengan `TypedDict` (seperti `ThinkingConfigEnabled`, `McpStdioServerConfig`, `SyncHookJSONOutput`) adalah **dict biasa saat runtime** dan memerlukan akses kunci: `config["budget_tokens"]`, bukan `config.budget_tokens`. Sintaks panggilan `ClassName(field=value)` bekerja untuk keduanya, tetapi hanya dataclass yang menghasilkan objek dengan atribut.

680</Note>

681 

682### `SdkMcpTool`

683 

684Definisi untuk tool SDK MCP yang dibuat dengan dekorator `@tool`.

685 

686```python theme={null}

687@dataclass

688class SdkMcpTool(Generic[T]):

689 name: str

690 description: str

691 input_schema: type[T] | dict[str, Any]

692 handler: Callable[[T], Awaitable[dict[str, Any]]]

693 annotations: ToolAnnotations | None = None

694```

695 

696| Properti | Tipe | Deskripsi |

697| :------------- | :----------------------------------------- | :--------------------------------------------------------------------------------------------------------- |

698| `name` | `str` | Pengenal unik untuk tool |

699| `description` | `str` | Deskripsi yang dapat dibaca manusia |

700| `input_schema` | `type[T] \| dict[str, Any]` | Skema untuk validasi input |

701| `handler` | `Callable[[T], Awaitable[dict[str, Any]]]` | Fungsi async yang menangani eksekusi tool |

702| `annotations` | `ToolAnnotations \| None` | Anotasi tool MCP opsional (misalnya, `readOnlyHint`, `destructiveHint`, `openWorldHint`). Dari `mcp.types` |

703 

704### `Transport`

705 

706Kelas dasar abstrak untuk implementasi transport kustom. Gunakan ini untuk berkomunikasi dengan proses Claude melalui saluran kustom (misalnya, koneksi jarak jauh alih-alih subprocess lokal).

707 

708<Warning>

709 Ini adalah API internal tingkat rendah. Antarmuka dapat berubah di rilis mendatang. Implementasi kustom harus diperbarui agar sesuai dengan perubahan antarmuka apa pun.

710</Warning>

711 

712```python theme={null}

713from abc import ABC, abstractmethod

714from collections.abc import AsyncIterator

715from typing import Any

716 

717 

718class Transport(ABC):

719 @abstractmethod

720 async def connect(self) -> None: ...

721 

722 @abstractmethod

723 async def write(self, data: str) -> None: ...

724 

725 @abstractmethod

726 def read_messages(self) -> AsyncIterator[dict[str, Any]]: ...

727 

728 @abstractmethod

729 async def close(self) -> None: ...

730 

731 @abstractmethod

732 def is_ready(self) -> bool: ...

733 

734 @abstractmethod

735 async def end_input(self) -> None: ...

736```

737 

738| Metode | Deskripsi |

739| :---------------- | :-------------------------------------------------------------------- |

740| `connect()` | Hubungkan transport dan siapkan untuk komunikasi |

741| `write(data)` | Tulis data mentah (JSON + newline) ke transport |

742| `read_messages()` | Async iterator yang menghasilkan pesan JSON yang diuraikan |

743| `close()` | Tutup koneksi dan bersihkan sumber daya |

744| `is_ready()` | Mengembalikan `True` jika transport dapat mengirim dan menerima |

745| `end_input()` | Tutup aliran input (misalnya, tutup stdin untuk transport subprocess) |

746 

747Impor: `from claude_agent_sdk import Transport`

748 

749### `ClaudeAgentOptions`

750 

751Dataclass konfigurasi untuk query Claude Code.

752 

753```python theme={null}

754@dataclass

755class ClaudeAgentOptions:

756 tools: list[str] | ToolsPreset | None = None

757 allowed_tools: list[str] = field(default_factory=list)

758 system_prompt: str | SystemPromptPreset | None = None

759 mcp_servers: dict[str, McpServerConfig] | str | Path = field(default_factory=dict)

760 permission_mode: PermissionMode | None = None

761 continue_conversation: bool = False

762 resume: str | None = None

763 max_turns: int | None = None

764 max_budget_usd: float | None = None

765 disallowed_tools: list[str] = field(default_factory=list)

766 model: str | None = None

767 fallback_model: str | None = None

768 betas: list[SdkBeta] = field(default_factory=list)

769 output_format: dict[str, Any] | None = None

770 permission_prompt_tool_name: str | None = None

771 cwd: str | Path | None = None

772 cli_path: str | Path | None = None

773 settings: str | None = None

774 add_dirs: list[str | Path] = field(default_factory=list)

775 env: dict[str, str] = field(default_factory=dict)

776 extra_args: dict[str, str | None] = field(default_factory=dict)

777 max_buffer_size: int | None = None

778 debug_stderr: Any = sys.stderr # Deprecated

779 stderr: Callable[[str], None] | None = None

780 can_use_tool: CanUseTool | None = None

781 hooks: dict[HookEvent, list[HookMatcher]] | None = None

782 user: str | None = None

783 include_partial_messages: bool = False

784 fork_session: bool = False

785 agents: dict[str, AgentDefinition] | None = None

786 setting_sources: list[SettingSource] | None = None

787 sandbox: SandboxSettings | None = None

788 plugins: list[SdkPluginConfig] = field(default_factory=list)

789 max_thinking_tokens: int | None = None # Deprecated: use thinking instead

790 thinking: ThinkingConfig | None = None

791 effort: Literal["low", "medium", "high", "max"] | None = None

792 enable_file_checkpointing: bool = False

793 session_store: SessionStore | None = None

794```

795 

796| Properti | Tipe | Default | Deskripsi |

797| :---------------------------- | :------------------------------------------------------------------------------------- | :--------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

798| `tools` | `list[str] \| ToolsPreset \| None` | `None` | Konfigurasi tools. Gunakan `{"type": "preset", "preset": "claude_code"}` untuk tools default Claude Code |

799| `allowed_tools` | `list[str]` | `[]` | Tools untuk auto-approve tanpa prompt. Ini tidak membatasi Claude hanya pada tools ini; tools yang tidak terdaftar jatuh ke `permission_mode` dan `can_use_tool`. Gunakan `disallowed_tools` untuk memblokir tools. Lihat [Permissions](/id/agent-sdk/permissions#allow-and-deny-rules) |

800| `system_prompt` | `str \| SystemPromptPreset \| None` | `None` | Konfigurasi system prompt. Teruskan string untuk prompt kustom, atau gunakan `{"type": "preset", "preset": "claude_code"}` untuk system prompt Claude Code. Tambahkan `"append"` untuk memperluas preset |

801| `mcp_servers` | `dict[str, McpServerConfig] \| str \| Path` | `{}` | Konfigurasi server MCP atau jalur ke file konfigurasi |

802| `permission_mode` | `PermissionMode \| None` | `None` | Mode izin untuk penggunaan tool |

803| `continue_conversation` | `bool` | `False` | Lanjutkan percakapan terbaru |

804| `resume` | `str \| None` | `None` | ID sesi untuk dilanjutkan |

805| `max_turns` | `int \| None` | `None` | Jumlah maksimal putaran agentic (round trip penggunaan tool) |

806| `max_budget_usd` | `float \| None` | `None` | Hentikan query ketika estimasi biaya sisi klien mencapai nilai USD ini. Dibandingkan dengan estimasi yang sama seperti `total_cost_usd`; lihat [Track cost and usage](/id/agent-sdk/cost-tracking) untuk peringatan akurasi |

807| `disallowed_tools` | `list[str]` | `[]` | Tools untuk selalu ditolak. Aturan penolakan diperiksa terlebih dahulu dan mengganti `allowed_tools` dan `permission_mode` (termasuk `bypassPermissions`) |

808| `enable_file_checkpointing` | `bool` | `False` | Aktifkan pelacakan perubahan file untuk rewinding. Lihat [File checkpointing](/id/agent-sdk/file-checkpointing) |

809| `model` | `str \| None` | `None` | Model Claude yang akan digunakan |

810| `fallback_model` | `str \| None` | `None` | Model fallback yang akan digunakan jika model utama gagal |

811| `betas` | `list[SdkBeta]` | `[]` | Fitur beta untuk diaktifkan. Lihat [`SdkBeta`](#sdk-beta) untuk opsi yang tersedia |

812| `output_format` | `dict[str, Any] \| None` | `None` | Format output untuk respons terstruktur (misalnya, `{"type": "json_schema", "schema": {...}}`). Lihat [Structured outputs](/id/agent-sdk/structured-outputs) untuk detail |

813| `permission_prompt_tool_name` | `str \| None` | `None` | Nama tool MCP untuk prompt izin |

814| `cwd` | `str \| Path \| None` | `None` | Direktori kerja saat ini |

815| `cli_path` | `str \| Path \| None` | `None` | Jalur kustom ke executable CLI Claude Code |

816| `settings` | `str \| None` | `None` | Jalur ke file pengaturan |

817| `add_dirs` | `list[str \| Path]` | `[]` | Direktori tambahan yang dapat diakses Claude |

818| `env` | `dict[str, str]` | `{}` | Variabel lingkungan yang digabungkan di atas lingkungan proses yang diwarisi. Lihat [Environment variables](/id/env-vars) untuk variabel yang dibaca CLI yang mendasar |

819| `extra_args` | `dict[str, str \| None]` | `{}` | Argumen CLI tambahan untuk diteruskan langsung ke CLI |

820| `max_buffer_size` | `int \| None` | `None` | Byte maksimal saat membuffer stdout CLI |

821| `debug_stderr` | `Any` | `sys.stderr` | *Deprecated* - Objek seperti file untuk output debug. Gunakan callback `stderr` sebagai gantinya |

822| `stderr` | `Callable[[str], None] \| None` | `None` | Fungsi callback untuk output stderr dari CLI |

823| `can_use_tool` | [`CanUseTool`](#can-use-tool) ` \| None` | `None` | Fungsi callback izin tool. Lihat [Permission types](#can-use-tool) untuk detail |

824| `hooks` | `dict[HookEvent, list[HookMatcher]] \| None` | `None` | Konfigurasi hook untuk mengintersepsi event |

825| `user` | `str \| None` | `None` | Pengenal pengguna |

826| `include_partial_messages` | `bool` | `False` | Sertakan event streaming pesan parsial. Ketika diaktifkan, pesan [`StreamEvent`](#stream-event) dihasilkan |

827| `fork_session` | `bool` | `False` | Ketika melanjutkan dengan `resume`, fork ke ID sesi baru alih-alih melanjutkan sesi asli |

828| `agents` | `dict[str, AgentDefinition] \| None` | `None` | Subagent yang didefinisikan secara programatis |

829| `plugins` | `list[SdkPluginConfig]` | `[]` | Muat plugin kustom dari jalur lokal. Lihat [Plugins](/id/agent-sdk/plugins) untuk detail |

830| `sandbox` | [`SandboxSettings`](#sandbox-settings) ` \| None` | `None` | Konfigurasi perilaku sandbox secara programatis. Lihat [Sandbox settings](#sandbox-settings) untuk detail |

831| `setting_sources` | `list[SettingSource] \| None` | `None` (CLI defaults: all sources) | Kontrol pengaturan filesystem mana yang akan dimuat. Teruskan `[]` untuk menonaktifkan pengaturan pengguna, proyek, dan lokal. Pengaturan kebijakan terkelola dimuat terlepas dari itu. Lihat [Use Claude Code features](/id/agent-sdk/claude-code-features#what-settingsources-does-not-control) |

832| `max_thinking_tokens` | `int \| None` | `None` | *Deprecated* - Token maksimal untuk blok thinking. Gunakan `thinking` sebagai gantinya |

833| `thinking` | [`ThinkingConfig`](#thinking-config) ` \| None` | `None` | Mengontrol perilaku extended thinking. Mengambil prioritas atas `max_thinking_tokens` |

834| `effort` | `Literal["low", "medium", "high", "max"] \| None` | `None` | Tingkat usaha untuk kedalaman thinking |

835| `session_store` | [`SessionStore`](/id/agent-sdk/session-storage#the-session-store-interface) ` \| None` | `None` | Cerminkan transkrip sesi ke backend eksternal sehingga host apa pun dapat melanjutkannya. Lihat [Persist sessions to external storage](/id/agent-sdk/session-storage) |

836 

837### `OutputFormat`

838 

839Konfigurasi untuk validasi output terstruktur. Teruskan ini sebagai `dict` ke field `output_format` pada `ClaudeAgentOptions`:

840 

841```python theme={null}

842# Expected dict shape for output_format

843{

844 "type": "json_schema",

845 "schema": {...}, # Your JSON Schema definition

846}

847```

848 

849| Field | Diperlukan | Deskripsi |

850| :------- | :--------- | :----------------------------------------------- |

851| `type` | Ya | Harus `"json_schema"` untuk validasi JSON Schema |

852| `schema` | Ya | Definisi JSON Schema untuk validasi output |

853 

854### `SystemPromptPreset`

855 

856Konfigurasi untuk menggunakan preset system prompt Claude Code dengan penambahan opsional.

857 

858```python theme={null}

859class SystemPromptPreset(TypedDict):

860 type: Literal["preset"]

861 preset: Literal["claude_code"]

862 append: NotRequired[str]

863 exclude_dynamic_sections: NotRequired[bool]

864```

865 

866| Field | Diperlukan | Deskripsi |

867| :------------------------- | :--------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

868| `type` | Ya | Harus `"preset"` untuk menggunakan preset system prompt |

869| `preset` | Ya | Harus `"claude_code"` untuk menggunakan system prompt Claude Code |

870| `append` | Tidak | Instruksi tambahan untuk ditambahkan ke preset system prompt |

871| `exclude_dynamic_sections` | Tidak | Pindahkan konteks per-sesi seperti direktori kerja, status git, dan jalur memori dari system prompt ke pesan pengguna pertama. Meningkatkan reuse prompt-cache di seluruh pengguna dan mesin. Lihat [Modify system prompts](/id/agent-sdk/modifying-system-prompts#improve-prompt-caching-across-users-and-machines) |

872 

873### `SettingSource`

874 

875Mengontrol sumber konfigurasi berbasis filesystem mana yang dimuat pengaturan SDK.

876 

877```python theme={null}

878SettingSource = Literal["user", "project", "local"]

879```

880 

881| Nilai | Deskripsi | Lokasi |

882| :---------- | :--------------------------------------------- | :---------------------------- |

883| `"user"` | Pengaturan pengguna global | `~/.claude/settings.json` |

884| `"project"` | Pengaturan proyek bersama (version controlled) | `.claude/settings.json` |

885| `"local"` | Pengaturan proyek lokal (gitignored) | `.claude/settings.local.json` |

886 

887#### Perilaku default

888 

889Ketika `setting_sources` dihilangkan atau `None`, `query()` memuat pengaturan filesystem yang sama seperti CLI Claude Code: pengguna, proyek, dan lokal. Pengaturan kebijakan terkelola dimuat dalam semua kasus. Lihat [What settingSources does not control](/id/agent-sdk/claude-code-features#what-settingsources-does-not-control) untuk input yang dibaca terlepas dari opsi ini, dan cara menonaktifkannya.

890 

891#### Mengapa menggunakan setting\_sources

892 

893**Nonaktifkan pengaturan filesystem:**

894 

895```python theme={null}

896# Do not load user, project, or local settings from disk

897from claude_agent_sdk import query, ClaudeAgentOptions

898 

899async for message in query(

900 prompt="Analyze this code",

901 options=ClaudeAgentOptions(

902 setting_sources=[]

903 ),

904):

905 print(message)

906```

907 

908<Note>

909 Dalam Python SDK 0.1.59 dan lebih awal, daftar kosong diperlakukan sama dengan menghilangkan opsi, jadi `setting_sources=[]` tidak menonaktifkan pengaturan filesystem. Upgrade ke rilis yang lebih baru jika Anda memerlukan daftar kosong untuk berlaku. SDK TypeScript tidak terpengaruh.

910</Note>

911 

912**Muat semua pengaturan filesystem secara eksplisit:**

913 

914```python theme={null}

915from claude_agent_sdk import query, ClaudeAgentOptions

916 

917async for message in query(

918 prompt="Analyze this code",

919 options=ClaudeAgentOptions(

920 setting_sources=["user", "project", "local"]

921 ),

922):

923 print(message)

924```

925 

926**Muat hanya sumber pengaturan tertentu:**

927 

928```python theme={null}

929# Load only project settings, ignore user and local

930async for message in query(

931 prompt="Run CI checks",

932 options=ClaudeAgentOptions(

933 setting_sources=["project"] # Only .claude/settings.json

934 ),

935):

936 print(message)

937```

938 

939**Lingkungan testing dan CI:**

940 

941```python theme={null}

942# Ensure consistent behavior in CI by excluding local settings

943async for message in query(

944 prompt="Run tests",

945 options=ClaudeAgentOptions(

946 setting_sources=["project"], # Only team-shared settings

947 permission_mode="bypassPermissions",

948 ),

949):

950 print(message)

951```

952 

953**Aplikasi SDK-only:**

954 

955```python theme={null}

956# Define everything programmatically.

957# Pass [] to opt out of filesystem setting sources.

958async for message in query(

959 prompt="Review this PR",

960 options=ClaudeAgentOptions(

961 setting_sources=[],

962 agents={...},

963 mcp_servers={...},

964 allowed_tools=["Read", "Grep", "Glob"],

965 ),

966):

967 print(message)

968```

969 

970**Memuat instruksi proyek CLAUDE.md:**

971 

972```python theme={null}

973# Load project settings to include CLAUDE.md files

974async for message in query(

975 prompt="Add a new feature following project conventions",

976 options=ClaudeAgentOptions(

977 system_prompt={

978 "type": "preset",

979 "preset": "claude_code", # Use Claude Code's system prompt

980 },

981 setting_sources=["project"], # Loads CLAUDE.md from project

982 allowed_tools=["Read", "Write", "Edit"],

983 ),

984):

985 print(message)

986```

987 

988#### Preseden pengaturan

989 

990Ketika beberapa sumber dimuat, pengaturan digabungkan dengan preseden ini (tertinggi ke terendah):

991 

9921. Pengaturan lokal (`.claude/settings.local.json`)

9932. Pengaturan proyek (`.claude/settings.json`)

9943. Pengaturan pengguna (`~/.claude/settings.json`)

995 

996Opsi programatis seperti `agents` dan `allowed_tools` mengganti pengaturan filesystem pengguna, proyek, dan lokal. Pengaturan kebijakan terkelola mengambil prioritas atas opsi programatis.

997 

998### `AgentDefinition`

999 

1000Konfigurasi untuk subagent yang didefinisikan secara programatis.

1001 

1002```python theme={null}

1003@dataclass

1004class AgentDefinition:

1005 description: str

1006 prompt: str

1007 tools: list[str] | None = None

1008 disallowedTools: list[str] | None = None

1009 model: str | None = None

1010 skills: list[str] | None = None

1011 memory: Literal["user", "project", "local"] | None = None

1012 mcpServers: list[str | dict[str, Any]] | None = None

1013 initialPrompt: str | None = None

1014 maxTurns: int | None = None

1015 background: bool | None = None

1016 effort: Literal["low", "medium", "high", "max"] | int | None = None

1017 permissionMode: PermissionMode | None = None

1018```

1019 

1020| Field | Diperlukan | Deskripsi |

1021| :---------------- | :--------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1022| `description` | Ya | Deskripsi bahasa alami tentang kapan menggunakan agent ini |

1023| `prompt` | Ya | System prompt agent |

1024| `tools` | Tidak | Array nama tool yang diizinkan. Jika dihilangkan, mewarisi semua tools |

1025| `disallowedTools` | Tidak | Array nama tool untuk dihapus dari set tool agent |

1026| `model` | Tidak | Penggantian model untuk agent ini. Menerima alias seperti `"sonnet"`, `"opus"`, `"haiku"`, atau `"inherit"`, atau ID model lengkap. Jika dihilangkan, menggunakan model utama |

1027| `skills` | Tidak | Daftar nama skill yang tersedia untuk agent ini |

1028| `memory` | Tidak | Sumber memori untuk agent ini: `"user"`, `"project"`, atau `"local"` |

1029| `mcpServers` | Tidak | Server MCP yang tersedia untuk agent ini. Setiap entri adalah nama server atau dict `{name: config}` inline |

1030| `initialPrompt` | Tidak | Auto-submitted sebagai putaran pengguna pertama ketika agent ini berjalan sebagai agent thread utama |

1031| `maxTurns` | Tidak | Jumlah maksimal putaran agentic sebelum agent berhenti |

1032| `background` | Tidak | Jalankan agent ini sebagai tugas latar belakang non-blocking ketika dipanggil |

1033| `effort` | Tidak | Tingkat usaha reasoning untuk agent ini. Menerima tingkat bernama atau integer |

1034| `permissionMode` | Tidak | Mode izin untuk eksekusi tool dalam agent ini. Lihat [`PermissionMode`](#permission-mode) |

1035 

1036<Note>

1037 Field `AgentDefinition` menggunakan camelCase, seperti `disallowedTools`, `permissionMode`, dan `maxTurns`. Nama-nama ini memetakan langsung ke format wire yang dibagikan dengan SDK TypeScript. Ini berbeda dari `ClaudeAgentOptions`, yang menggunakan Python snake\_case untuk field tingkat atas yang setara seperti `disallowed_tools` dan `permission_mode`. Karena `AgentDefinition` adalah dataclass, melewatkan keyword snake\_case menimbulkan `TypeError` pada waktu konstruksi.

1038</Note>

1039 

1040### `PermissionMode`

1041 

1042Mode izin untuk mengontrol eksekusi tool.

1043 

1044```python theme={null}

1045PermissionMode = Literal[

1046 "default", # Standard permission behavior

1047 "acceptEdits", # Auto-accept file edits

1048 "plan", # Planning mode - no execution

1049 "dontAsk", # Deny anything not pre-approved instead of prompting

1050 "bypassPermissions", # Bypass all permission checks (use with caution)

1051]

1052```

1053 

1054### `CanUseTool`

1055 

1056Type alias untuk fungsi callback izin tool.

1057 

1058```python theme={null}

1059CanUseTool = Callable[

1060 [str, dict[str, Any], ToolPermissionContext], Awaitable[PermissionResult]

1061]

1062```

1063 

1064Callback menerima:

1065 

1066* `tool_name`: Nama tool yang sedang dipanggil

1067* `input_data`: Parameter input tool

1068* `context`: `ToolPermissionContext` dengan informasi tambahan

1069 

1070Mengembalikan `PermissionResult` (baik `PermissionResultAllow` atau `PermissionResultDeny`).

1071 

1072### `ToolPermissionContext`

1073 

1074Informasi konteks yang diteruskan ke callback izin tool.

1075 

1076```python theme={null}

1077@dataclass

1078class ToolPermissionContext:

1079 signal: Any | None = None # Future: abort signal support

1080 suggestions: list[PermissionUpdate] = field(default_factory=list)

1081```

1082 

1083| Field | Tipe | Deskripsi |

1084| :------------ | :----------------------- | :---------------------------------------------------- |

1085| `signal` | `Any \| None` | Dicadangkan untuk dukungan sinyal abort di masa depan |

1086| `suggestions` | `list[PermissionUpdate]` | Saran pembaruan izin dari CLI |

1087 

1088### `PermissionResult`

1089 

1090Tipe union untuk hasil callback izin.

1091 

1092```python theme={null}

1093PermissionResult = PermissionResultAllow | PermissionResultDeny

1094```

1095 

1096### `PermissionResultAllow`

1097 

1098Hasil yang menunjukkan panggilan tool harus diizinkan.

1099 

1100```python theme={null}

1101@dataclass

1102class PermissionResultAllow:

1103 behavior: Literal["allow"] = "allow"

1104 updated_input: dict[str, Any] | None = None

1105 updated_permissions: list[PermissionUpdate] | None = None

1106```

1107 

1108| Field | Tipe | Default | Deskripsi |

1109| :-------------------- | :------------------------------- | :-------- | :----------------------------------------------------- |

1110| `behavior` | `Literal["allow"]` | `"allow"` | Harus "allow" |

1111| `updated_input` | `dict[str, Any] \| None` | `None` | Input yang dimodifikasi untuk digunakan alih-alih asli |

1112| `updated_permissions` | `list[PermissionUpdate] \| None` | `None` | Pembaruan izin untuk diterapkan |

1113 

1114### `PermissionResultDeny`

1115 

1116Hasil yang menunjukkan panggilan tool harus ditolak.

1117 

1118```python theme={null}

1119@dataclass

1120class PermissionResultDeny:

1121 behavior: Literal["deny"] = "deny"

1122 message: str = ""

1123 interrupt: bool = False

1124```

1125 

1126| Field | Tipe | Default | Deskripsi |

1127| :---------- | :---------------- | :------- | :------------------------------------------ |

1128| `behavior` | `Literal["deny"]` | `"deny"` | Harus "deny" |

1129| `message` | `str` | `""` | Pesan yang menjelaskan mengapa tool ditolak |

1130| `interrupt` | `bool` | `False` | Apakah akan mengganggu eksekusi saat ini |

1131 

1132### `PermissionUpdate`

1133 

1134Konfigurasi untuk memperbarui izin secara programatis.

1135 

1136```python theme={null}

1137@dataclass

1138class PermissionUpdate:

1139 type: Literal[

1140 "addRules",

1141 "replaceRules",

1142 "removeRules",

1143 "setMode",

1144 "addDirectories",

1145 "removeDirectories",

1146 ]

1147 rules: list[PermissionRuleValue] | None = None

1148 behavior: Literal["allow", "deny", "ask"] | None = None

1149 mode: PermissionMode | None = None

1150 directories: list[str] | None = None

1151 destination: (

1152 Literal["userSettings", "projectSettings", "localSettings", "session"] | None

1153 ) = None

1154```

1155 

1156| Field | Tipe | Deskripsi |

1157| :------------ | :---------------------------------------- | :------------------------------------------- |

1158| `type` | `Literal[...]` | Jenis operasi pembaruan izin |

1159| `rules` | `list[PermissionRuleValue] \| None` | Aturan untuk operasi add/replace/remove |

1160| `behavior` | `Literal["allow", "deny", "ask"] \| None` | Perilaku untuk operasi berbasis aturan |

1161| `mode` | `PermissionMode \| None` | Mode untuk operasi setMode |

1162| `directories` | `list[str] \| None` | Direktori untuk operasi add/remove direktori |

1163| `destination` | `Literal[...] \| None` | Di mana menerapkan pembaruan izin |

1164 

1165### `PermissionRuleValue`

1166 

1167Aturan untuk ditambahkan, diganti, atau dihapus dalam pembaruan izin.

1168 

1169```python theme={null}

1170@dataclass

1171class PermissionRuleValue:

1172 tool_name: str

1173 rule_content: str | None = None

1174```

1175 

1176### `ToolsPreset`

1177 

1178Konfigurasi preset tools untuk menggunakan set tool default Claude Code.

1179 

1180```python theme={null}

1181class ToolsPreset(TypedDict):

1182 type: Literal["preset"]

1183 preset: Literal["claude_code"]

1184```

1185 

1186### `ThinkingConfig`

1187 

1188Mengontrol perilaku extended thinking. Union dari tiga konfigurasi:

1189 

1190```python theme={null}

1191class ThinkingConfigAdaptive(TypedDict):

1192 type: Literal["adaptive"]

1193 

1194 

1195class ThinkingConfigEnabled(TypedDict):

1196 type: Literal["enabled"]

1197 budget_tokens: int

1198 

1199 

1200class ThinkingConfigDisabled(TypedDict):

1201 type: Literal["disabled"]

1202 

1203 

1204ThinkingConfig = ThinkingConfigAdaptive | ThinkingConfigEnabled | ThinkingConfigDisabled

1205```

1206 

1207| Varian | Field | Deskripsi |

1208| :--------- | :---------------------- | :---------------------------------------------------- |

1209| `adaptive` | `type` | Claude secara adaptif memutuskan kapan harus berpikir |

1210| `enabled` | `type`, `budget_tokens` | Aktifkan thinking dengan budget token tertentu |

1211| `disabled` | `type` | Nonaktifkan thinking |

1212 

1213Karena ini adalah kelas `TypedDict`, mereka adalah dict biasa saat runtime. Baik buatlah sebagai dict literal atau panggil kelas seperti konstruktor; keduanya menghasilkan `dict`. Akses field dengan `config["budget_tokens"]`, bukan `config.budget_tokens`:

1214 

1215```python theme={null}

1216from claude_agent_sdk import ClaudeAgentOptions, ThinkingConfigEnabled

1217 

1218# Option 1: dict literal (recommended, no import needed)

1219options = ClaudeAgentOptions(thinking={"type": "enabled", "budget_tokens": 20000})

1220 

1221# Option 2: constructor-style (returns a plain dict)

1222config = ThinkingConfigEnabled(type="enabled", budget_tokens=20000)

1223print(config["budget_tokens"]) # 20000

1224# config.budget_tokens would raise AttributeError

1225```

1226 

1227### `SdkBeta`

1228 

1229Tipe literal untuk fitur beta SDK.

1230 

1231```python theme={null}

1232SdkBeta = Literal["context-1m-2025-08-07"]

1233```

1234 

1235Gunakan dengan field `betas` dalam `ClaudeAgentOptions` untuk mengaktifkan fitur beta.

1236 

1237<Warning>

1238 Beta `context-1m-2025-08-07` sudah pensiun sejak 30 April 2026. Melewatkan header ini dengan Claude Sonnet 4.5 atau Sonnet 4 tidak berpengaruh, dan permintaan yang melebihi jendela konteks standar 200k-token mengembalikan error. Untuk menggunakan jendela konteks 1M-token, migrasikan ke [Claude Sonnet 4.6, Claude Opus 4.6, atau Claude Opus 4.7](https://platform.claude.com/docs/en/about-claude/models/overview), yang mencakup konteks 1M pada harga standar tanpa header beta yang diperlukan.

1239</Warning>

1240 

1241### `McpSdkServerConfig`

1242 

1243Konfigurasi untuk server MCP SDK yang dibuat dengan `create_sdk_mcp_server()`.

1244 

1245```python theme={null}

1246class McpSdkServerConfig(TypedDict):

1247 type: Literal["sdk"]

1248 name: str

1249 instance: Any # MCP Server instance

1250```

1251 

1252### `McpServerConfig`

1253 

1254Tipe union untuk konfigurasi server MCP.

1255 

1256```python theme={null}

1257McpServerConfig = (

1258 McpStdioServerConfig | McpSSEServerConfig | McpHttpServerConfig | McpSdkServerConfig

1259)

1260```

1261 

1262#### `McpStdioServerConfig`

1263 

1264```python theme={null}

1265class McpStdioServerConfig(TypedDict):

1266 type: NotRequired[Literal["stdio"]] # Optional for backwards compatibility

1267 command: str

1268 args: NotRequired[list[str]]

1269 env: NotRequired[dict[str, str]]

1270```

1271 

1272#### `McpSSEServerConfig`

1273 

1274```python theme={null}

1275class McpSSEServerConfig(TypedDict):

1276 type: Literal["sse"]

1277 url: str

1278 headers: NotRequired[dict[str, str]]

1279```

1280 

1281#### `McpHttpServerConfig`

1282 

1283```python theme={null}

1284class McpHttpServerConfig(TypedDict):

1285 type: Literal["http"]

1286 url: str

1287 headers: NotRequired[dict[str, str]]

1288```

1289 

1290### `McpServerStatusConfig`

1291 

1292Konfigurasi server MCP seperti yang dilaporkan oleh [`get_mcp_status()`](#methods). Ini adalah union dari semua varian transport [`McpServerConfig`](#mcp-server-config) ditambah varian output-only `claudeai-proxy` untuk server yang di-proxy melalui claude.ai.

1293 

1294```python theme={null}

1295McpServerStatusConfig = (

1296 McpStdioServerConfig

1297 | McpSSEServerConfig

1298 | McpHttpServerConfig

1299 | McpSdkServerConfigStatus

1300 | McpClaudeAIProxyServerConfig

1301)

1302```

1303 

1304`McpSdkServerConfigStatus` adalah bentuk yang dapat diserialisasi dari [`McpSdkServerConfig`](#mcp-sdk-server-config) dengan hanya field `type` (`"sdk"`) dan `name` (`str`); `instance` dalam proses dihilangkan. `McpClaudeAIProxyServerConfig` memiliki field `type` (`"claudeai-proxy"`), `url` (`str`), dan `id` (`str`).

1305 

1306### `McpStatusResponse`

1307 

1308Respons dari [`ClaudeSDKClient.get_mcp_status()`](#methods). Membungkus daftar status server di bawah kunci `mcpServers`.

1309 

1310```python theme={null}

1311class McpStatusResponse(TypedDict):

1312 mcpServers: list[McpServerStatus]

1313```

1314 

1315### `McpServerStatus`

1316 

1317Status server MCP yang terhubung, terdapat dalam [`McpStatusResponse`](#mcp-status-response).

1318 

1319```python theme={null}

1320class McpServerStatus(TypedDict):

1321 name: str

1322 status: McpServerConnectionStatus # "connected" | "failed" | "needs-auth" | "pending" | "disabled"

1323 serverInfo: NotRequired[McpServerInfo]

1324 error: NotRequired[str]

1325 config: NotRequired[McpServerStatusConfig]

1326 scope: NotRequired[str]

1327 tools: NotRequired[list[McpToolInfo]]

1328```

1329 

1330| Field | Tipe | Deskripsi |

1331| :----------- | :-------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

1332| `name` | `str` | Nama server |

1333| `status` | `str` | Salah satu dari `"connected"`, `"failed"`, `"needs-auth"`, `"pending"`, atau `"disabled"` |

1334| `serverInfo` | `dict` (opsional) | Nama dan versi server (`{"name": str, "version": str}`) |

1335| `error` | `str` (opsional) | Pesan error jika server gagal terhubung |

1336| `config` | [`McpServerStatusConfig`](#mcp-server-status-config) (opsional) | Konfigurasi server. Bentuk yang sama seperti [`McpServerConfig`](#mcp-server-config) (stdio, SSE, HTTP, atau SDK), ditambah varian `claudeai-proxy` untuk server yang terhubung melalui claude.ai |

1337| `scope` | `str` (opsional) | Scope konfigurasi |

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

1339 

1340### `SdkPluginConfig`

1341 

1342Konfigurasi untuk memuat plugins dalam SDK.

1343 

1344```python theme={null}

1345class SdkPluginConfig(TypedDict):

1346 type: Literal["local"]

1347 path: str

1348```

1349 

1350| Field | Tipe | Deskripsi |

1351| :----- | :----------------- | :----------------------------------------------------------- |

1352| `type` | `Literal["local"]` | Harus `"local"` (hanya plugins lokal yang saat ini didukung) |

1353| `path` | `str` | Jalur absolut atau relatif ke direktori plugin |

1354 

1355**Contoh:**

1356 

1357```python theme={null}

1358plugins = [

1359 {"type": "local", "path": "./my-plugin"},

1360 {"type": "local", "path": "/absolute/path/to/plugin"},

1361]

1362```

1363 

1364Untuk informasi lengkap tentang membuat dan menggunakan plugins, lihat [Plugins](/id/agent-sdk/plugins).

1365 

1366## Tipe Pesan

1367 

1368### `Message`

1369 

1370Tipe union dari semua pesan yang mungkin.

1371 

1372```python theme={null}

1373Message = (

1374 UserMessage

1375 | AssistantMessage

1376 | SystemMessage

1377 | ResultMessage

1378 | StreamEvent

1379 | RateLimitEvent

1380)

1381```

1382 

1383### `UserMessage`

1384 

1385Pesan input pengguna.

1386 

1387```python theme={null}

1388@dataclass

1389class UserMessage:

1390 content: str | list[ContentBlock]

1391 uuid: str | None = None

1392 parent_tool_use_id: str | None = None

1393 tool_use_result: dict[str, Any] | None = None

1394```

1395 

1396| Field | Tipe | Deskripsi |

1397| :------------------- | :-------------------------- | :---------------------------------------------------------- |

1398| `content` | `str \| list[ContentBlock]` | Konten pesan sebagai teks atau blok konten |

1399| `uuid` | `str \| None` | Pengenal pesan unik |

1400| `parent_tool_use_id` | `str \| None` | ID penggunaan tool jika pesan ini adalah respons hasil tool |

1401| `tool_use_result` | `dict[str, Any] \| None` | Data hasil tool jika berlaku |

1402 

1403### `AssistantMessage`

1404 

1405Pesan respons asisten dengan blok konten.

1406 

1407```python theme={null}

1408@dataclass

1409class AssistantMessage:

1410 content: list[ContentBlock]

1411 model: str

1412 parent_tool_use_id: str | None = None

1413 error: AssistantMessageError | None = None

1414 usage: dict[str, Any] | None = None

1415 message_id: str | None = None

1416```

1417 

1418| Field | Tipe | Deskripsi |

1419| :------------------- | :------------------------------------------------------------- | :-------------------------------------------------------------------------------------------- |

1420| `content` | `list[ContentBlock]` | Daftar blok konten dalam respons |

1421| `model` | `str` | Model yang menghasilkan respons |

1422| `parent_tool_use_id` | `str \| None` | ID penggunaan tool jika ini adalah respons bersarang |

1423| `error` | [`AssistantMessageError`](#assistant-message-error) ` \| None` | Tipe error jika respons mengalami error |

1424| `usage` | `dict[str, Any] \| None` | Penggunaan token per-pesan (kunci yang sama seperti [`ResultMessage.usage`](#result-message)) |

1425| `message_id` | `str \| None` | ID pesan API. Beberapa pesan dari satu putaran berbagi ID yang sama |

1426 

1427### `AssistantMessageError`

1428 

1429Tipe error yang mungkin untuk pesan asisten.

1430 

1431```python theme={null}

1432AssistantMessageError = Literal[

1433 "authentication_failed",

1434 "billing_error",

1435 "rate_limit",

1436 "invalid_request",

1437 "server_error",

1438 "max_output_tokens",

1439 "unknown",

1440]

1441```

1442 

1443### `SystemMessage`

1444 

1445Pesan sistem dengan metadata.

1446 

1447```python theme={null}

1448@dataclass

1449class SystemMessage:

1450 subtype: str

1451 data: dict[str, Any]

1452```

1453 

1454### `ResultMessage`

1455 

1456Pesan hasil akhir dengan informasi biaya dan penggunaan.

1457 

1458```python theme={null}

1459@dataclass

1460class ResultMessage:

1461 subtype: str

1462 duration_ms: int

1463 duration_api_ms: int

1464 is_error: bool

1465 num_turns: int

1466 session_id: str

1467 total_cost_usd: float | None = None

1468 usage: dict[str, Any] | None = None

1469 result: str | None = None

1470 stop_reason: str | None = None

1471 structured_output: Any = None

1472 model_usage: dict[str, Any] | None = None

1473```

1474 

1475Dict `usage` berisi kunci berikut ketika ada:

1476 

1477| Kunci | Tipe | Deskripsi |

1478| ----------------------------- | ----- | ---------------------------------------------------- |

1479| `input_tokens` | `int` | Total token input yang dikonsumsi. |

1480| `output_tokens` | `int` | Total token output yang dihasilkan. |

1481| `cache_creation_input_tokens` | `int` | Token yang digunakan untuk membuat entri cache baru. |

1482| `cache_read_input_tokens` | `int` | Token yang dibaca dari entri cache yang ada. |

1483 

1484Dict `model_usage` memetakan nama model ke penggunaan per-model. Kunci dict dalam menggunakan camelCase karena nilai diteruskan tanpa modifikasi dari proses CLI yang mendasar, cocok dengan tipe [`ModelUsage`](/id/agent-sdk/typescript#model-usage) TypeScript:

1485 

1486| Kunci | Tipe | Deskripsi |

1487| -------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1488| `inputTokens` | `int` | Token input untuk model ini. |

1489| `outputTokens` | `int` | Token output untuk model ini. |

1490| `cacheReadInputTokens` | `int` | Token baca cache untuk model ini. |

1491| `cacheCreationInputTokens` | `int` | Token pembuatan cache untuk model ini. |

1492| `webSearchRequests` | `int` | Permintaan pencarian web yang dibuat oleh model ini. |

1493| `costUSD` | `float` | Biaya yang diperkirakan dalam USD untuk model ini, dihitung sisi klien. Lihat [Track cost and usage](/id/agent-sdk/cost-tracking) untuk peringatan penagihan. |

1494| `contextWindow` | `int` | Ukuran jendela konteks untuk model ini. |

1495| `maxOutputTokens` | `int` | Batas token output maksimal untuk model ini. |

1496 

1497### `StreamEvent`

1498 

1499Event stream untuk pembaruan pesan parsial selama streaming. Hanya diterima ketika `include_partial_messages=True` dalam `ClaudeAgentOptions`. Impor via `from claude_agent_sdk.types import StreamEvent`.

1500 

1501```python theme={null}

1502@dataclass

1503class StreamEvent:

1504 uuid: str

1505 session_id: str

1506 event: dict[str, Any] # The raw Claude API stream event

1507 parent_tool_use_id: str | None = None

1508```

1509 

1510| Field | Tipe | Deskripsi |

1511| :------------------- | :--------------- | :---------------------------------------------------- |

1512| `uuid` | `str` | Pengenal unik untuk event ini |

1513| `session_id` | `str` | Pengenal sesi |

1514| `event` | `dict[str, Any]` | Data event stream Claude API mentah |

1515| `parent_tool_use_id` | `str \| None` | ID penggunaan tool induk jika event ini dari subagent |

1516 

1517### `RateLimitEvent`

1518 

1519Dipancarkan ketika status rate limit berubah (misalnya, dari `"allowed"` ke `"allowed_warning"`). Gunakan ini untuk memperingatkan pengguna sebelum mereka mencapai batas keras, atau untuk mundur ketika status adalah `"rejected"`.

1520 

1521```python theme={null}

1522@dataclass

1523class RateLimitEvent:

1524 rate_limit_info: RateLimitInfo

1525 uuid: str

1526 session_id: str

1527```

1528 

1529| Field | Tipe | Deskripsi |

1530| :---------------- | :---------------------------------- | :------------------------- |

1531| `rate_limit_info` | [`RateLimitInfo`](#rate-limit-info) | Status rate limit saat ini |

1532| `uuid` | `str` | Pengenal event unik |

1533| `session_id` | `str` | Pengenal sesi |

1534 

1535### `RateLimitInfo`

1536 

1537Status rate limit yang dibawa oleh [`RateLimitEvent`](#rate-limit-event).

1538 

1539```python theme={null}

1540RateLimitStatus = Literal["allowed", "allowed_warning", "rejected"]

1541RateLimitType = Literal[

1542 "five_hour", "seven_day", "seven_day_opus", "seven_day_sonnet", "overage"

1543]

1544 

1545 

1546@dataclass

1547class RateLimitInfo:

1548 status: RateLimitStatus

1549 resets_at: int | None = None

1550 rate_limit_type: RateLimitType | None = None

1551 utilization: float | None = None

1552 overage_status: RateLimitStatus | None = None

1553 overage_resets_at: int | None = None

1554 overage_disabled_reason: str | None = None

1555 raw: dict[str, Any] = field(default_factory=dict)

1556```

1557 

1558| Field | Tipe | Deskripsi |

1559| :------------------------ | :------------------------ | :------------------------------------------------------------------------------------------------ |

1560| `status` | `RateLimitStatus` | Status saat ini. `"allowed_warning"` berarti mendekati batas; `"rejected"` berarti batas tercapai |

1561| `resets_at` | `int \| None` | Timestamp Unix ketika jendela rate limit direset |

1562| `rate_limit_type` | `RateLimitType \| None` | Jendela rate limit mana yang berlaku |

1563| `utilization` | `float \| None` | Fraksi rate limit yang dikonsumsi (0.0 hingga 1.0) |

1564| `overage_status` | `RateLimitStatus \| None` | Status penggunaan overage pay-as-you-go, jika berlaku |

1565| `overage_resets_at` | `int \| None` | Timestamp Unix ketika jendela overage direset |

1566| `overage_disabled_reason` | `str \| None` | Mengapa overage tidak tersedia, jika status adalah `"rejected"` |

1567| `raw` | `dict[str, Any]` | Dict mentah lengkap dari CLI, termasuk field yang tidak dimodelkan di atas |

1568 

1569### `TaskStartedMessage`

1570 

1571Dipancarkan ketika tugas latar belakang dimulai. Tugas latar belakang adalah apa pun yang dilacak di luar putaran utama: perintah Bash yang di-background, Monitor watch, subagent yang dihasilkan melalui tool Agent, atau agent jarak jauh. Field `task_type` memberi tahu Anda yang mana. Penamaan ini tidak terkait dengan penggantian nama tool `Task`-ke-`Agent`.

1572 

1573```python theme={null}

1574@dataclass

1575class TaskStartedMessage(SystemMessage):

1576 task_id: str

1577 description: str

1578 uuid: str

1579 session_id: str

1580 tool_use_id: str | None = None

1581 task_type: str | None = None

1582```

1583 

1584| Field | Tipe | Deskripsi |

1585| :------------ | :------------ | :------------------------------------------------------------------------------------------------------------------------------ |

1586| `task_id` | `str` | Pengenal unik untuk tugas |

1587| `description` | `str` | Deskripsi tugas |

1588| `uuid` | `str` | Pengenal pesan unik |

1589| `session_id` | `str` | Pengenal sesi |

1590| `tool_use_id` | `str \| None` | ID penggunaan tool yang terkait |

1591| `task_type` | `str \| None` | Jenis tugas latar belakang: `"local_bash"` untuk Bash dan Monitor watches di background, `"local_agent"`, atau `"remote_agent"` |

1592 

1593### `TaskUsage`

1594 

1595Data token dan timing untuk tugas latar belakang.

1596 

1597```python theme={null}

1598class TaskUsage(TypedDict):

1599 total_tokens: int

1600 tool_uses: int

1601 duration_ms: int

1602```

1603 

1604### `TaskProgressMessage`

1605 

1606Dipancarkan secara berkala dengan pembaruan kemajuan untuk tugas latar belakang yang sedang berjalan.

1607 

1608```python theme={null}

1609@dataclass

1610class TaskProgressMessage(SystemMessage):

1611 task_id: str

1612 description: str

1613 usage: TaskUsage

1614 uuid: str

1615 session_id: str

1616 tool_use_id: str | None = None

1617 last_tool_name: str | None = None

1618```

1619 

1620| Field | Tipe | Deskripsi |

1621| :--------------- | :------------ | :------------------------------------------ |

1622| `task_id` | `str` | Pengenal unik untuk tugas |

1623| `description` | `str` | Deskripsi status saat ini |

1624| `usage` | `TaskUsage` | Penggunaan token untuk tugas ini sejauh ini |

1625| `uuid` | `str` | Pengenal pesan unik |

1626| `session_id` | `str` | Pengenal sesi |

1627| `tool_use_id` | `str \| None` | ID penggunaan tool yang terkait |

1628| `last_tool_name` | `str \| None` | Nama tool terakhir yang digunakan tugas |

1629 

1630### `TaskNotificationMessage`

1631 

1632Dipancarkan ketika tugas latar belakang selesai, gagal, atau dihentikan. Tugas latar belakang termasuk perintah Bash `run_in_background`, Monitor watches, dan subagent latar belakang.

1633 

1634```python theme={null}

1635@dataclass

1636class TaskNotificationMessage(SystemMessage):

1637 task_id: str

1638 status: TaskNotificationStatus # "completed" | "failed" | "stopped"

1639 output_file: str

1640 summary: str

1641 uuid: str

1642 session_id: str

1643 tool_use_id: str | None = None

1644 usage: TaskUsage | None = None

1645```

1646 

1647| Field | Tipe | Deskripsi |

1648| :------------ | :----------------------- | :---------------------------------------------------------- |

1649| `task_id` | `str` | Pengenal unik untuk tugas |

1650| `status` | `TaskNotificationStatus` | Salah satu dari `"completed"`, `"failed"`, atau `"stopped"` |

1651| `output_file` | `str` | Jalur ke file output tugas |

1652| `summary` | `str` | Ringkasan hasil tugas |

1653| `uuid` | `str` | Pengenal pesan unik |

1654| `session_id` | `str` | Pengenal sesi |

1655| `tool_use_id` | `str \| None` | ID penggunaan tool yang terkait |

1656| `usage` | `TaskUsage \| None` | Penggunaan token akhir untuk tugas |

1657 

1658## Tipe Blok Konten

1659 

1660### `ContentBlock`

1661 

1662Tipe union dari semua blok konten.

1663 

1664```python theme={null}

1665ContentBlock = TextBlock | ThinkingBlock | ToolUseBlock | ToolResultBlock

1666```

1667 

1668### `TextBlock`

1669 

1670Blok konten teks.

1671 

1672```python theme={null}

1673@dataclass

1674class TextBlock:

1675 text: str

1676```

1677 

1678### `ThinkingBlock`

1679 

1680Blok konten thinking (untuk model dengan kemampuan thinking).

1681 

1682```python theme={null}

1683@dataclass

1684class ThinkingBlock:

1685 thinking: str

1686 signature: str

1687```

1688 

1689### `ToolUseBlock`

1690 

1691Blok permintaan penggunaan tool.

1692 

1693```python theme={null}

1694@dataclass

1695class ToolUseBlock:

1696 id: str

1697 name: str

1698 input: dict[str, Any]

1699```

1700 

1701### `ToolResultBlock`

1702 

1703Blok hasil eksekusi tool.

1704 

1705```python theme={null}

1706@dataclass

1707class ToolResultBlock:

1708 tool_use_id: str

1709 content: str | list[dict[str, Any]] | None = None

1710 is_error: bool | None = None

1711```

1712 

1713## Tipe Error

1714 

1715### `ClaudeSDKError`

1716 

1717Kelas exception dasar untuk semua error SDK.

1718 

1719```python theme={null}

1720class ClaudeSDKError(Exception):

1721 """Base error for Claude SDK."""

1722```

1723 

1724### `CLINotFoundError`

1725 

1726Diangkat ketika Claude Code CLI tidak diinstal atau tidak ditemukan.

1727 

1728```python theme={null}

1729class CLINotFoundError(CLIConnectionError):

1730 def __init__(

1731 self, message: str = "Claude Code not found", cli_path: str | None = None

1732 ):

1733 """

1734 Args:

1735 message: Error message (default: "Claude Code not found")

1736 cli_path: Optional path to the CLI that was not found

1737 """

1738```

1739 

1740### `CLIConnectionError`

1741 

1742Diangkat ketika koneksi ke Claude Code gagal.

1743 

1744```python theme={null}

1745class CLIConnectionError(ClaudeSDKError):

1746 """Failed to connect to Claude Code."""

1747```

1748 

1749### `ProcessError`

1750 

1751Diangkat ketika proses Claude Code gagal.

1752 

1753```python theme={null}

1754class ProcessError(ClaudeSDKError):

1755 def __init__(

1756 self, message: str, exit_code: int | None = None, stderr: str | None = None

1757 ):

1758 self.exit_code = exit_code

1759 self.stderr = stderr

1760```

1761 

1762### `CLIJSONDecodeError`

1763 

1764Diangkat ketika parsing JSON gagal.

1765 

1766```python theme={null}

1767class CLIJSONDecodeError(ClaudeSDKError):

1768 def __init__(self, line: str, original_error: Exception):

1769 """

1770 Args:

1771 line: The line that failed to parse

1772 original_error: The original JSON decode exception

1773 """

1774 self.line = line

1775 self.original_error = original_error

1776```

1777 

1778## Tipe Hook

1779 

1780Untuk panduan komprehensif tentang menggunakan hooks dengan contoh dan pola umum, lihat [Hooks guide](/id/agent-sdk/hooks).

1781 

1782### `HookEvent`

1783 

1784Tipe event hook yang didukung.

1785 

1786```python theme={null}

1787HookEvent = Literal[

1788 "PreToolUse", # Called before tool execution

1789 "PostToolUse", # Called after tool execution

1790 "PostToolUseFailure", # Called when a tool execution fails

1791 "UserPromptSubmit", # Called when user submits a prompt

1792 "Stop", # Called when stopping execution

1793 "SubagentStop", # Called when a subagent stops

1794 "PreCompact", # Called before message compaction

1795 "Notification", # Called for notification events

1796 "SubagentStart", # Called when a subagent starts

1797 "PermissionRequest", # Called when a permission decision is needed

1798]

1799```

1800 

1801<Note>

1802 SDK TypeScript mendukung event hook tambahan yang belum tersedia di Python: `SessionStart`, `SessionEnd`, `Setup`, `TeammateIdle`, `TaskCompleted`, `ConfigChange`, `WorktreeCreate`, `WorktreeRemove`, dan `PostToolBatch`.

1803</Note>

1804 

1805### `HookCallback`

1806 

1807Definisi tipe untuk fungsi callback hook.

1808 

1809```python theme={null}

1810HookCallback = Callable[[HookInput, str | None, HookContext], Awaitable[HookJSONOutput]]

1811```

1812 

1813Parameter:

1814 

1815* `input`: Input hook yang kuat dengan union yang dibedakan berdasarkan `hook_event_name` (lihat [`HookInput`](#hook-input))

1816* `tool_use_id`: Pengenal penggunaan tool opsional (untuk hook terkait tool)

1817* `context`: Konteks hook dengan informasi tambahan

1818 

1819Mengembalikan [`HookJSONOutput`](#hook-json-output) yang mungkin berisi:

1820 

1821* `decision`: `"block"` untuk memblokir tindakan

1822* `systemMessage`: Pesan sistem untuk ditambahkan ke transkrip

1823* `hookSpecificOutput`: Data output spesifik hook

1824 

1825### `HookContext`

1826 

1827Informasi konteks yang diteruskan ke callback hook.

1828 

1829```python theme={null}

1830class HookContext(TypedDict):

1831 signal: Any | None # Future: abort signal support

1832```

1833 

1834### `HookMatcher`

1835 

1836Konfigurasi untuk mencocokkan hooks ke event atau tools tertentu.

1837 

1838```python theme={null}

1839@dataclass

1840class HookMatcher:

1841 matcher: str | None = (

1842 None # Tool name or pattern to match (e.g., "Bash", "Write|Edit")

1843 )

1844 hooks: list[HookCallback] = field(

1845 default_factory=list

1846 ) # List of callbacks to execute

1847 timeout: float | None = (

1848 None # Timeout in seconds for all hooks in this matcher (default: 60)

1849 )

1850```

1851 

1852### `HookInput`

1853 

1854Tipe union dari semua tipe input hook. Tipe aktual bergantung pada field `hook_event_name`.

1855 

1856```python theme={null}

1857HookInput = (

1858 PreToolUseHookInput

1859 | PostToolUseHookInput

1860 | PostToolUseFailureHookInput

1861 | UserPromptSubmitHookInput

1862 | StopHookInput

1863 | SubagentStopHookInput

1864 | PreCompactHookInput

1865 | NotificationHookInput

1866 | SubagentStartHookInput

1867 | PermissionRequestHookInput

1868)

1869```

1870 

1871### `BaseHookInput`

1872 

1873Field dasar yang ada di semua tipe input hook.

1874 

1875```python theme={null}

1876class BaseHookInput(TypedDict):

1877 session_id: str

1878 transcript_path: str

1879 cwd: str

1880 permission_mode: NotRequired[str]

1881```

1882 

1883| Field | Tipe | Deskripsi |

1884| :---------------- | :--------------- | :--------------------------- |

1885| `session_id` | `str` | Pengenal sesi saat ini |

1886| `transcript_path` | `str` | Jalur ke file transkrip sesi |

1887| `cwd` | `str` | Direktori kerja saat ini |

1888| `permission_mode` | `str` (opsional) | Mode izin saat ini |

1889 

1890### `PreToolUseHookInput`

1891 

1892Data input untuk event hook `PreToolUse`.

1893 

1894```python theme={null}

1895class PreToolUseHookInput(BaseHookInput):

1896 hook_event_name: Literal["PreToolUse"]

1897 tool_name: str

1898 tool_input: dict[str, Any]

1899 tool_use_id: str

1900 agent_id: NotRequired[str]

1901 agent_type: NotRequired[str]

1902```

1903 

1904| Field | Tipe | Deskripsi |

1905| :---------------- | :---------------------- | :----------------------------------------------------------- |

1906| `hook_event_name` | `Literal["PreToolUse"]` | Selalu "PreToolUse" |

1907| `tool_name` | `str` | Nama tool yang akan dieksekusi |

1908| `tool_input` | `dict[str, Any]` | Parameter input untuk tool |

1909| `tool_use_id` | `str` | Pengenal unik untuk penggunaan tool ini |

1910| `agent_id` | `str` (opsional) | Pengenal subagent, ada ketika hook menyala di dalam subagent |

1911| `agent_type` | `str` (opsional) | Tipe subagent, ada ketika hook menyala di dalam subagent |

1912 

1913### `PostToolUseHookInput`

1914 

1915Data input untuk event hook `PostToolUse`.

1916 

1917```python theme={null}

1918class PostToolUseHookInput(BaseHookInput):

1919 hook_event_name: Literal["PostToolUse"]

1920 tool_name: str

1921 tool_input: dict[str, Any]

1922 tool_response: Any

1923 tool_use_id: str

1924 agent_id: NotRequired[str]

1925 agent_type: NotRequired[str]

1926```

1927 

1928| Field | Tipe | Deskripsi |

1929| :---------------- | :----------------------- | :----------------------------------------------------------- |

1930| `hook_event_name` | `Literal["PostToolUse"]` | Selalu "PostToolUse" |

1931| `tool_name` | `str` | Nama tool yang dieksekusi |

1932| `tool_input` | `dict[str, Any]` | Parameter input yang digunakan |

1933| `tool_response` | `Any` | Respons dari eksekusi tool |

1934| `tool_use_id` | `str` | Pengenal unik untuk penggunaan tool ini |

1935| `agent_id` | `str` (opsional) | Pengenal subagent, ada ketika hook menyala di dalam subagent |

1936| `agent_type` | `str` (opsional) | Tipe subagent, ada ketika hook menyala di dalam subagent |

1937 

1938### `PostToolUseFailureHookInput`

1939 

1940Data input untuk event hook `PostToolUseFailure`. Dipanggil ketika eksekusi tool gagal.

1941 

1942```python theme={null}

1943class PostToolUseFailureHookInput(BaseHookInput):

1944 hook_event_name: Literal["PostToolUseFailure"]

1945 tool_name: str

1946 tool_input: dict[str, Any]

1947 tool_use_id: str

1948 error: str

1949 is_interrupt: NotRequired[bool]

1950 agent_id: NotRequired[str]

1951 agent_type: NotRequired[str]

1952```

1953 

1954| Field | Tipe | Deskripsi |

1955| :---------------- | :------------------------------ | :----------------------------------------------------------- |

1956| `hook_event_name` | `Literal["PostToolUseFailure"]` | Selalu "PostToolUseFailure" |

1957| `tool_name` | `str` | Nama tool yang gagal |

1958| `tool_input` | `dict[str, Any]` | Parameter input yang digunakan |

1959| `tool_use_id` | `str` | Pengenal unik untuk penggunaan tool ini |

1960| `error` | `str` | Pesan error dari eksekusi yang gagal |

1961| `is_interrupt` | `bool` (opsional) | Apakah kegagalan disebabkan oleh interrupt |

1962| `agent_id` | `str` (opsional) | Pengenal subagent, ada ketika hook menyala di dalam subagent |

1963| `agent_type` | `str` (opsional) | Tipe subagent, ada ketika hook menyala di dalam subagent |

1964 

1965### `UserPromptSubmitHookInput`

1966 

1967Data input untuk event hook `UserPromptSubmit`.

1968 

1969```python theme={null}

1970class UserPromptSubmitHookInput(BaseHookInput):

1971 hook_event_name: Literal["UserPromptSubmit"]

1972 prompt: str

1973```

1974 

1975| Field | Tipe | Deskripsi |

1976| :---------------- | :---------------------------- | :------------------------------ |

1977| `hook_event_name` | `Literal["UserPromptSubmit"]` | Selalu "UserPromptSubmit" |

1978| `prompt` | `str` | Prompt yang dikirimkan pengguna |

1979 

1980### `StopHookInput`

1981 

1982Data input untuk event hook `Stop`.

1983 

1984```python theme={null}

1985class StopHookInput(BaseHookInput):

1986 hook_event_name: Literal["Stop"]

1987 stop_hook_active: bool

1988```

1989 

1990| Field | Tipe | Deskripsi |

1991| :----------------- | :---------------- | :--------------------- |

1992| `hook_event_name` | `Literal["Stop"]` | Selalu "Stop" |

1993| `stop_hook_active` | `bool` | Apakah stop hook aktif |

1994 

1995### `SubagentStopHookInput`

1996 

1997Data input untuk event hook `SubagentStop`.

1998 

1999```python theme={null}

2000class SubagentStopHookInput(BaseHookInput):

2001 hook_event_name: Literal["SubagentStop"]

2002 stop_hook_active: bool

2003 agent_id: str

2004 agent_transcript_path: str

2005 agent_type: str

2006```

2007 

2008| Field | Tipe | Deskripsi |

2009| :---------------------- | :------------------------ | :------------------------------- |

2010| `hook_event_name` | `Literal["SubagentStop"]` | Selalu "SubagentStop" |

2011| `stop_hook_active` | `bool` | Apakah stop hook aktif |

2012| `agent_id` | `str` | Pengenal unik untuk subagent |

2013| `agent_transcript_path` | `str` | Jalur ke file transkrip subagent |

2014| `agent_type` | `str` | Tipe subagent |

2015 

2016### `PreCompactHookInput`

2017 

2018Data input untuk event hook `PreCompact`.

2019 

2020```python theme={null}

2021class PreCompactHookInput(BaseHookInput):

2022 hook_event_name: Literal["PreCompact"]

2023 trigger: Literal["manual", "auto"]

2024 custom_instructions: str | None

2025```

2026 

2027| Field | Tipe | Deskripsi |

2028| :-------------------- | :-------------------------- | :------------------------------- |

2029| `hook_event_name` | `Literal["PreCompact"]` | Selalu "PreCompact" |

2030| `trigger` | `Literal["manual", "auto"]` | Apa yang memicu pemadatan |

2031| `custom_instructions` | `str \| None` | Instruksi kustom untuk pemadatan |

2032 

2033### `NotificationHookInput`

2034 

2035Data input untuk event hook `Notification`.

2036 

2037```python theme={null}

2038class NotificationHookInput(BaseHookInput):

2039 hook_event_name: Literal["Notification"]

2040 message: str

2041 title: NotRequired[str]

2042 notification_type: str

2043```

2044 

2045| Field | Tipe | Deskripsi |

2046| :------------------ | :------------------------ | :---------------------- |

2047| `hook_event_name` | `Literal["Notification"]` | Selalu "Notification" |

2048| `message` | `str` | Konten pesan notifikasi |

2049| `title` | `str` (opsional) | Judul notifikasi |

2050| `notification_type` | `str` | Tipe notifikasi |

2051 

2052### `SubagentStartHookInput`

2053 

2054Data input untuk event hook `SubagentStart`.

2055 

2056```python theme={null}

2057class SubagentStartHookInput(BaseHookInput):

2058 hook_event_name: Literal["SubagentStart"]

2059 agent_id: str

2060 agent_type: str

2061```

2062 

2063| Field | Tipe | Deskripsi |

2064| :---------------- | :------------------------- | :--------------------------- |

2065| `hook_event_name` | `Literal["SubagentStart"]` | Selalu "SubagentStart" |

2066| `agent_id` | `str` | Pengenal unik untuk subagent |

2067| `agent_type` | `str` | Tipe subagent |

2068 

2069### `PermissionRequestHookInput`

2070 

2071Data input untuk event hook `PermissionRequest`. Memungkinkan hooks untuk menangani keputusan izin secara programatis.

2072 

2073```python theme={null}

2074class PermissionRequestHookInput(BaseHookInput):

2075 hook_event_name: Literal["PermissionRequest"]

2076 tool_name: str

2077 tool_input: dict[str, Any]

2078 permission_suggestions: NotRequired[list[Any]]

2079```

2080 

2081| Field | Tipe | Deskripsi |

2082| :----------------------- | :----------------------------- | :---------------------------- |

2083| `hook_event_name` | `Literal["PermissionRequest"]` | Selalu "PermissionRequest" |

2084| `tool_name` | `str` | Nama tool yang meminta izin |

2085| `tool_input` | `dict[str, Any]` | Parameter input untuk tool |

2086| `permission_suggestions` | `list[Any]` (opsional) | Saran pembaruan izin dari CLI |

2087 

2088### `HookJSONOutput`

2089 

2090Tipe union untuk nilai pengembalian callback hook.

2091 

2092```python theme={null}

2093HookJSONOutput = AsyncHookJSONOutput | SyncHookJSONOutput

2094```

2095 

2096#### `SyncHookJSONOutput`

2097 

2098Output hook sinkron dengan field kontrol dan keputusan.

2099 

2100```python theme={null}

2101class SyncHookJSONOutput(TypedDict):

2102 # Control fields

2103 continue_: NotRequired[bool] # Whether to proceed (default: True)

2104 suppressOutput: NotRequired[bool] # Hide stdout from transcript

2105 stopReason: NotRequired[str] # Message when continue is False

2106 

2107 # Decision fields

2108 decision: NotRequired[Literal["block"]]

2109 systemMessage: NotRequired[str] # Warning message for user

2110 reason: NotRequired[str] # Feedback for Claude

2111 

2112 # Hook-specific output

2113 hookSpecificOutput: NotRequired[HookSpecificOutput]

2114```

2115 

2116<Note>

2117 Gunakan `continue_` (dengan underscore) dalam kode Python. Ini secara otomatis dikonversi ke `continue` ketika dikirim ke CLI.

2118</Note>

2119 

2120#### `HookSpecificOutput`

2121 

2122`TypedDict` yang berisi nama event hook dan field spesifik event. Bentuknya bergantung pada nilai `hookEventName`. Untuk detail lengkap tentang field yang tersedia per event hook, lihat [Control execution with hooks](/id/agent-sdk/hooks#outputs).

2123 

2124Union yang dibedakan dari tipe output spesifik event. Field `hookEventName` menentukan field mana yang valid.

2125 

2126```python theme={null}

2127class PreToolUseHookSpecificOutput(TypedDict):

2128 hookEventName: Literal["PreToolUse"]

2129 permissionDecision: NotRequired[Literal["allow", "deny", "ask"]]

2130 permissionDecisionReason: NotRequired[str]

2131 updatedInput: NotRequired[dict[str, Any]]

2132 additionalContext: NotRequired[str]

2133 

2134 

2135class PostToolUseHookSpecificOutput(TypedDict):

2136 hookEventName: Literal["PostToolUse"]

2137 additionalContext: NotRequired[str]

2138 updatedMCPToolOutput: NotRequired[Any]

2139 

2140 

2141class PostToolUseFailureHookSpecificOutput(TypedDict):

2142 hookEventName: Literal["PostToolUseFailure"]

2143 additionalContext: NotRequired[str]

2144 

2145 

2146class UserPromptSubmitHookSpecificOutput(TypedDict):

2147 hookEventName: Literal["UserPromptSubmit"]

2148 additionalContext: NotRequired[str]

2149 

2150 

2151class NotificationHookSpecificOutput(TypedDict):

2152 hookEventName: Literal["Notification"]

2153 additionalContext: NotRequired[str]

2154 

2155 

2156class SubagentStartHookSpecificOutput(TypedDict):

2157 hookEventName: Literal["SubagentStart"]

2158 additionalContext: NotRequired[str]

2159 

2160 

2161class PermissionRequestHookSpecificOutput(TypedDict):

2162 hookEventName: Literal["PermissionRequest"]

2163 decision: dict[str, Any]

2164 

2165 

2166HookSpecificOutput = (

2167 PreToolUseHookSpecificOutput

2168 | PostToolUseHookSpecificOutput

2169 | PostToolUseFailureHookSpecificOutput

2170 | UserPromptSubmitHookSpecificOutput

2171 | NotificationHookSpecificOutput

2172 | SubagentStartHookSpecificOutput

2173 | PermissionRequestHookSpecificOutput

2174)

2175```

2176 

2177#### `AsyncHookJSONOutput`

2178 

2179Output hook async yang menunda eksekusi hook.

2180 

2181```python theme={null}

2182class AsyncHookJSONOutput(TypedDict):

2183 async_: Literal[True] # Set to True to defer execution

2184 asyncTimeout: NotRequired[int] # Timeout in milliseconds

2185```

2186 

2187<Note>

2188 Gunakan `async_` (dengan underscore) dalam kode Python. Ini secara otomatis dikonversi ke `async` ketika dikirim ke CLI.

2189</Note>

2190 

2191### Contoh Penggunaan Hook

2192 

2193Contoh ini mendaftarkan dua hooks: satu yang memblokir perintah bash berbahaya seperti `rm -rf /`, dan satu lagi yang mencatat semua penggunaan tool untuk audit. Hook keamanan hanya berjalan pada perintah Bash (melalui `matcher`), sementara hook logging berjalan pada semua tools.

2194 

2195```python theme={null}

2196from claude_agent_sdk import query, ClaudeAgentOptions, HookMatcher, HookContext

2197from typing import Any

2198 

2199 

2200async def validate_bash_command(

2201 input_data: dict[str, Any], tool_use_id: str | None, context: HookContext

2202) -> dict[str, Any]:

2203 """Validate and potentially block dangerous bash commands."""

2204 if input_data["tool_name"] == "Bash":

2205 command = input_data["tool_input"].get("command", "")

2206 if "rm -rf /" in command:

2207 return {

2208 "hookSpecificOutput": {

2209 "hookEventName": "PreToolUse",

2210 "permissionDecision": "deny",

2211 "permissionDecisionReason": "Dangerous command blocked",

2212 }

2213 }

2214 return {}

2215 

2216 

2217async def log_tool_use(

2218 input_data: dict[str, Any], tool_use_id: str | None, context: HookContext

2219) -> dict[str, Any]:

2220 """Log all tool usage for auditing."""

2221 print(f"Tool used: {input_data.get('tool_name')}")

2222 return {}

2223 

2224 

2225options = ClaudeAgentOptions(

2226 hooks={

2227 "PreToolUse": [

2228 HookMatcher(

2229 matcher="Bash", hooks=[validate_bash_command], timeout=120

2230 ), # 2 min for validation

2231 HookMatcher(

2232 hooks=[log_tool_use]

2233 ), # Applies to all tools (default 60s timeout)

2234 ],

2235 "PostToolUse": [HookMatcher(hooks=[log_tool_use])],

2236 }

2237)

2238 

2239async for message in query(prompt="Analyze this codebase", options=options):

2240 print(message)

2241```

2242 

2243## Tipe Input/Output Tool

2244 

2245Dokumentasi 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.

2246 

2247### Agent

2248 

2249**Nama tool:** `Agent` (sebelumnya `Task`, yang masih diterima sebagai alias)

2250 

2251**Input:**

2252 

2253```python theme={null}

2254{

2255 "description": str, # A short (3-5 word) description of the task

2256 "prompt": str, # The task for the agent to perform

2257 "subagent_type": str, # The type of specialized agent to use

2258}

2259```

2260 

2261**Output:**

2262 

2263```python theme={null}

2264{

2265 "result": str, # Final result from the subagent

2266 "usage": dict | None, # Token usage statistics

2267 "total_cost_usd": float | None, # Estimated total cost in USD

2268 "duration_ms": int | None, # Execution duration in milliseconds

2269}

2270```

2271 

2272### AskUserQuestion

2273 

2274**Nama tool:** `AskUserQuestion`

2275 

2276Mengajukan pertanyaan klarifikasi kepada pengguna selama eksekusi. Lihat [Handle approvals and user input](/id/agent-sdk/user-input#handle-clarifying-questions) untuk detail penggunaan.

2277 

2278**Input:**

2279 

2280```python theme={null}

2281{

2282 "questions": [ # Questions to ask the user (1-4 questions)

2283 {

2284 "question": str, # The complete question to ask the user

2285 "header": str, # Very short label displayed as a chip/tag (max 12 chars)

2286 "options": [ # The available choices (2-4 options)

2287 {

2288 "label": str, # Display text for this option (1-5 words)

2289 "description": str, # Explanation of what this option means

2290 }

2291 ],

2292 "multiSelect": bool, # Set to true to allow multiple selections

2293 }

2294 ],

2295 "answers": dict | None, # User answers populated by the permission system

2296}

2297```

2298 

2299**Output:**

2300 

2301```python theme={null}

2302{

2303 "questions": [ # The questions that were asked

2304 {

2305 "question": str,

2306 "header": str,

2307 "options": [{"label": str, "description": str}],

2308 "multiSelect": bool,

2309 }

2310 ],

2311 "answers": dict[str, str], # Maps question text to answer string

2312 # Multi-select answers are comma-separated

2313}

2314```

2315 

2316### Bash

2317 

2318**Nama tool:** `Bash`

2319 

2320**Input:**

2321 

2322```python theme={null}

2323{

2324 "command": str, # The command to execute

2325 "timeout": int | None, # Optional timeout in milliseconds (max 600000)

2326 "description": str | None, # Clear, concise description (5-10 words)

2327 "run_in_background": bool | None, # Set to true to run in background

2328}

2329```

2330 

2331**Output:**

2332 

2333```python theme={null}

2334{

2335 "output": str, # Combined stdout and stderr output

2336 "exitCode": int, # Exit code of the command

2337 "killed": bool | None, # Whether command was killed due to timeout

2338 "shellId": str | None, # Shell ID for background processes

2339}

2340```

2341 

2342### Monitor

2343 

2344**Nama tool:** `Monitor`

2345 

2346Menjalankan skrip latar belakang dan mengirimkan setiap baris stdout ke Claude sebagai event sehingga dapat bereaksi tanpa polling. Monitor mengikuti aturan izin yang sama seperti Bash. Lihat [Monitor tool reference](/id/tools-reference#monitor-tool) untuk perilaku dan ketersediaan penyedia.

2347 

2348**Input:**

2349 

2350```python theme={null}

2351{

2352 "command": str, # Shell script; each stdout line is an event, exit ends the watch

2353 "description": str, # Short description shown in notifications

2354 "timeout_ms": int | None, # Kill after this deadline (default 300000, max 3600000)

2355 "persistent": bool | None, # Run for the lifetime of the session; stop with TaskStop

2356}

2357```

2358 

2359**Output:**

2360 

2361```python theme={null}

2362{

2363 "taskId": str, # ID of the background monitor task

2364 "timeoutMs": int, # Timeout deadline in milliseconds

2365 "persistent": bool | None, # True when running until TaskStop or session end

2366}

2367```

2368 

2369### Edit

2370 

2371**Nama tool:** `Edit`

2372 

2373**Input:**

2374 

2375```python theme={null}

2376{

2377 "file_path": str, # The absolute path to the file to modify

2378 "old_string": str, # The text to replace

2379 "new_string": str, # The text to replace it with

2380 "replace_all": bool | None, # Replace all occurrences (default False)

2381}

2382```

2383 

2384**Output:**

2385 

2386```python theme={null}

2387{

2388 "message": str, # Confirmation message

2389 "replacements": int, # Number of replacements made

2390 "file_path": str, # File path that was edited

2391}

2392```

2393 

2394### Read

2395 

2396**Nama tool:** `Read`

2397 

2398**Input:**

2399 

2400```python theme={null}

2401{

2402 "file_path": str, # The absolute path to the file to read

2403 "offset": int | None, # The line number to start reading from

2404 "limit": int | None, # The number of lines to read

2405}

2406```

2407 

2408**Output (File teks):**

2409 

2410```python theme={null}

2411{

2412 "content": str, # File contents with line numbers

2413 "total_lines": int, # Total number of lines in file

2414 "lines_returned": int, # Lines actually returned

2415}

2416```

2417 

2418**Output (Gambar):**

2419 

2420```python theme={null}

2421{

2422 "image": str, # Base64 encoded image data

2423 "mime_type": str, # Image MIME type

2424 "file_size": int, # File size in bytes

2425}

2426```

2427 

2428### Write

2429 

2430**Nama tool:** `Write`

2431 

2432**Input:**

2433 

2434```python theme={null}

2435{

2436 "file_path": str, # The absolute path to the file to write

2437 "content": str, # The content to write to the file

2438}

2439```

2440 

2441**Output:**

2442 

2443```python theme={null}

2444{

2445 "message": str, # Success message

2446 "bytes_written": int, # Number of bytes written

2447 "file_path": str, # File path that was written

2448}

2449```

2450 

2451### Glob

2452 

2453**Nama tool:** `Glob`

2454 

2455**Input:**

2456 

2457```python theme={null}

2458{

2459 "pattern": str, # The glob pattern to match files against

2460 "path": str | None, # The directory to search in (defaults to cwd)

2461}

2462```

2463 

2464**Output:**

2465 

2466```python theme={null}

2467{

2468 "matches": list[str], # Array of matching file paths

2469 "count": int, # Number of matches found

2470 "search_path": str, # Search directory used

2471}

2472```

2473 

2474### Grep

2475 

2476**Nama tool:** `Grep`

2477 

2478**Input:**

2479 

2480```python theme={null}

2481{

2482 "pattern": str, # The regular expression pattern

2483 "path": str | None, # File or directory to search in

2484 "glob": str | None, # Glob pattern to filter files

2485 "type": str | None, # File type to search

2486 "output_mode": str | None, # "content", "files_with_matches", or "count"

2487 "-i": bool | None, # Case insensitive search

2488 "-n": bool | None, # Show line numbers

2489 "-B": int | None, # Lines to show before each match

2490 "-A": int | None, # Lines to show after each match

2491 "-C": int | None, # Lines to show before and after

2492 "head_limit": int | None, # Limit output to first N lines/entries

2493 "multiline": bool | None, # Enable multiline mode

2494}

2495```

2496 

2497**Output (content mode):**

2498 

2499```python theme={null}

2500{

2501 "matches": [

2502 {

2503 "file": str,

2504 "line_number": int | None,

2505 "line": str,

2506 "before_context": list[str] | None,

2507 "after_context": list[str] | None,

2508 }

2509 ],

2510 "total_matches": int,

2511}

2512```

2513 

2514**Output (files\_with\_matches mode):**

2515 

2516```python theme={null}

2517{

2518 "files": list[str], # Files containing matches

2519 "count": int, # Number of files with matches

2520}

2521```

2522 

2523### NotebookEdit

2524 

2525**Nama tool:** `NotebookEdit`

2526 

2527**Input:**

2528 

2529```python theme={null}

2530{

2531 "notebook_path": str, # Absolute path to the Jupyter notebook

2532 "cell_id": str | None, # The ID of the cell to edit

2533 "new_source": str, # The new source for the cell

2534 "cell_type": "code" | "markdown" | None, # The type of the cell

2535 "edit_mode": "replace" | "insert" | "delete" | None, # Edit operation type

2536}

2537```

2538 

2539**Output:**

2540 

2541```python theme={null}

2542{

2543 "message": str, # Success message

2544 "edit_type": "replaced" | "inserted" | "deleted", # Type of edit performed

2545 "cell_id": str | None, # Cell ID that was affected

2546 "total_cells": int, # Total cells in notebook after edit

2547}

2548```

2549 

2550### WebFetch

2551 

2552**Nama tool:** `WebFetch`

2553 

2554**Input:**

2555 

2556```python theme={null}

2557{

2558 "url": str, # The URL to fetch content from

2559 "prompt": str, # The prompt to run on the fetched content

2560}

2561```

2562 

2563**Output:**

2564 

2565```python theme={null}

2566{

2567 "response": str, # AI model's response to the prompt

2568 "url": str, # URL that was fetched

2569 "final_url": str | None, # Final URL after redirects

2570 "status_code": int | None, # HTTP status code

2571}

2572```

2573 

2574### WebSearch

2575 

2576**Nama tool:** `WebSearch`

2577 

2578**Input:**

2579 

2580```python theme={null}

2581{

2582 "query": str, # The search query to use

2583 "allowed_domains": list[str] | None, # Only include results from these domains

2584 "blocked_domains": list[str] | None, # Never include results from these domains

2585}

2586```

2587 

2588**Output:**

2589 

2590```python theme={null}

2591{

2592 "results": [{"title": str, "url": str, "snippet": str, "metadata": dict | None}],

2593 "total_results": int,

2594 "query": str,

2595}

2596```

2597 

2598### TodoWrite

2599 

2600**Nama tool:** `TodoWrite`

2601 

2602**Input:**

2603 

2604```python theme={null}

2605{

2606 "todos": [

2607 {

2608 "content": str, # The task description

2609 "status": "pending" | "in_progress" | "completed", # Task status

2610 "activeForm": str, # Active form of the description

2611 }

2612 ]

2613}

2614```

2615 

2616**Output:**

2617 

2618```python theme={null}

2619{

2620 "message": str, # Success message

2621 "stats": {"total": int, "pending": int, "in_progress": int, "completed": int},

2622}

2623```

2624 

2625### BashOutput

2626 

2627**Nama tool:** `BashOutput`

2628 

2629**Input:**

2630 

2631```python theme={null}

2632{

2633 "bash_id": str, # The ID of the background shell

2634 "filter": str | None, # Optional regex to filter output lines

2635}

2636```

2637 

2638**Output:**

2639 

2640```python theme={null}

2641{

2642 "output": str, # New output since last check

2643 "status": "running" | "completed" | "failed", # Current shell status

2644 "exitCode": int | None, # Exit code when completed

2645}

2646```

2647 

2648### KillBash

2649 

2650**Nama tool:** `KillBash`

2651 

2652**Input:**

2653 

2654```python theme={null}

2655{

2656 "shell_id": str # The ID of the background shell to kill

2657}

2658```

2659 

2660**Output:**

2661 

2662```python theme={null}

2663{

2664 "message": str, # Success message

2665 "shell_id": str, # ID of the killed shell

2666}

2667```

2668 

2669### ExitPlanMode

2670 

2671**Nama tool:** `ExitPlanMode`

2672 

2673**Input:**

2674 

2675```python theme={null}

2676{

2677 "plan": str # The plan to run by the user for approval

2678}

2679```

2680 

2681**Output:**

2682 

2683```python theme={null}

2684{

2685 "message": str, # Confirmation message

2686 "approved": bool | None, # Whether user approved the plan

2687}

2688```

2689 

2690### ListMcpResources

2691 

2692**Nama tool:** `ListMcpResources`

2693 

2694**Input:**

2695 

2696```python theme={null}

2697{

2698 "server": str | None # Optional server name to filter resources by

2699}

2700```

2701 

2702**Output:**

2703 

2704```python theme={null}

2705{

2706 "resources": [

2707 {

2708 "uri": str,

2709 "name": str,

2710 "description": str | None,

2711 "mimeType": str | None,

2712 "server": str,

2713 }

2714 ],

2715 "total": int,

2716}

2717```

2718 

2719### ReadMcpResource

2720 

2721**Nama tool:** `ReadMcpResource`

2722 

2723**Input:**

2724 

2725```python theme={null}

2726{

2727 "server": str, # The MCP server name

2728 "uri": str, # The resource URI to read

2729}

2730```

2731 

2732**Output:**

2733 

2734```python theme={null}

2735{

2736 "contents": [

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

2738 ],

2739 "server": str,

2740}

2741```

2742 

2743## Fitur Lanjutan dengan ClaudeSDKClient

2744 

2745### Membangun Antarmuka Percakapan Berkelanjutan

2746 

2747```python theme={null}

2748from claude_agent_sdk import (

2749 ClaudeSDKClient,

2750 ClaudeAgentOptions,

2751 AssistantMessage,

2752 TextBlock,

2753)

2754import asyncio

2755 

2756 

2757class ConversationSession:

2758 """Maintains a single conversation session with Claude."""

2759 

2760 def __init__(self, options: ClaudeAgentOptions | None = None):

2761 self.client = ClaudeSDKClient(options)

2762 self.turn_count = 0

2763 

2764 async def start(self):

2765 await self.client.connect()

2766 print("Starting conversation session. Claude will remember context.")

2767 print(

2768 "Commands: 'exit' to quit, 'interrupt' to stop current task, 'new' for new session"

2769 )

2770 

2771 while True:

2772 user_input = input(f"\n[Turn {self.turn_count + 1}] You: ")

2773 

2774 if user_input.lower() == "exit":

2775 break

2776 elif user_input.lower() == "interrupt":

2777 await self.client.interrupt()

2778 print("Task interrupted!")

2779 continue

2780 elif user_input.lower() == "new":

2781 # Disconnect and reconnect for a fresh session

2782 await self.client.disconnect()

2783 await self.client.connect()

2784 self.turn_count = 0

2785 print("Started new conversation session (previous context cleared)")

2786 continue

2787 

2788 # Send message - the session retains all previous messages

2789 await self.client.query(user_input)

2790 self.turn_count += 1

2791 

2792 # Process response

2793 print(f"[Turn {self.turn_count}] Claude: ", end="")

2794 async for message in self.client.receive_response():

2795 if isinstance(message, AssistantMessage):

2796 for block in message.content:

2797 if isinstance(block, TextBlock):

2798 print(block.text, end="")

2799 print() # New line after response

2800 

2801 await self.client.disconnect()

2802 print(f"Conversation ended after {self.turn_count} turns.")

2803 

2804 

2805async def main():

2806 options = ClaudeAgentOptions(

2807 allowed_tools=["Read", "Write", "Bash"], permission_mode="acceptEdits"

2808 )

2809 session = ConversationSession(options)

2810 await session.start()

2811 

2812 

2813# Example conversation:

2814# Turn 1 - You: "Create a file called hello.py"

2815# Turn 1 - Claude: "I'll create a hello.py file for you..."

2816# Turn 2 - You: "What's in that file?"

2817# Turn 2 - Claude: "The hello.py file I just created contains..." (remembers!)

2818# Turn 3 - You: "Add a main function to it"

2819# Turn 3 - Claude: "I'll add a main function to hello.py..." (knows which file!)

2820 

2821asyncio.run(main())

2822```

2823 

2824### Menggunakan Hooks untuk Modifikasi Perilaku

2825 

2826```python theme={null}

2827from claude_agent_sdk import (

2828 ClaudeSDKClient,

2829 ClaudeAgentOptions,

2830 HookMatcher,

2831 HookContext,

2832)

2833import asyncio

2834from typing import Any

2835 

2836 

2837async def pre_tool_logger(

2838 input_data: dict[str, Any], tool_use_id: str | None, context: HookContext

2839) -> dict[str, Any]:

2840 """Log all tool usage before execution."""

2841 tool_name = input_data.get("tool_name", "unknown")

2842 print(f"[PRE-TOOL] About to use: {tool_name}")

2843 

2844 # You can modify or block the tool execution here

2845 if tool_name == "Bash" and "rm -rf" in str(input_data.get("tool_input", {})):

2846 return {

2847 "hookSpecificOutput": {

2848 "hookEventName": "PreToolUse",

2849 "permissionDecision": "deny",

2850 "permissionDecisionReason": "Dangerous command blocked",

2851 }

2852 }

2853 return {}

2854 

2855 

2856async def post_tool_logger(

2857 input_data: dict[str, Any], tool_use_id: str | None, context: HookContext

2858) -> dict[str, Any]:

2859 """Log results after tool execution."""

2860 tool_name = input_data.get("tool_name", "unknown")

2861 print(f"[POST-TOOL] Completed: {tool_name}")

2862 return {}

2863 

2864 

2865async def user_prompt_modifier(

2866 input_data: dict[str, Any], tool_use_id: str | None, context: HookContext

2867) -> dict[str, Any]:

2868 """Add context to user prompts."""

2869 original_prompt = input_data.get("prompt", "")

2870 

2871 # Add a timestamp as additional context for Claude to see

2872 from datetime import datetime

2873 

2874 timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")

2875 

2876 return {

2877 "hookSpecificOutput": {

2878 "hookEventName": "UserPromptSubmit",

2879 "additionalContext": f"[Submitted at {timestamp}] Original prompt: {original_prompt}",

2880 }

2881 }

2882 

2883 

2884async def main():

2885 options = ClaudeAgentOptions(

2886 hooks={

2887 "PreToolUse": [

2888 HookMatcher(hooks=[pre_tool_logger]),

2889 HookMatcher(matcher="Bash", hooks=[pre_tool_logger]),

2890 ],

2891 "PostToolUse": [HookMatcher(hooks=[post_tool_logger])],

2892 "UserPromptSubmit": [HookMatcher(hooks=[user_prompt_modifier])],

2893 },

2894 allowed_tools=["Read", "Write", "Bash"],

2895 )

2896 

2897 async with ClaudeSDKClient(options=options) as client:

2898 await client.query("List files in current directory")

2899 

2900 async for message in client.receive_response():

2901 # Hooks will automatically log tool usage

2902 pass

2903 

2904 

2905asyncio.run(main())

2906```

2907 

2908### Pemantauan Kemajuan Real-time

2909 

2910```python theme={null}

2911from claude_agent_sdk import (

2912 ClaudeSDKClient,

2913 ClaudeAgentOptions,

2914 AssistantMessage,

2915 ToolUseBlock,

2916 ToolResultBlock,

2917 TextBlock,

2918)

2919import asyncio

2920 

2921 

2922async def monitor_progress():

2923 options = ClaudeAgentOptions(

2924 allowed_tools=["Write", "Bash"], permission_mode="acceptEdits"

2925 )

2926 

2927 async with ClaudeSDKClient(options=options) as client:

2928 await client.query("Create 5 Python files with different sorting algorithms")

2929 

2930 # Monitor progress in real-time

2931 async for message in client.receive_response():

2932 if isinstance(message, AssistantMessage):

2933 for block in message.content:

2934 if isinstance(block, ToolUseBlock):

2935 if block.name == "Write":

2936 file_path = block.input.get("file_path", "")

2937 print(f"Creating: {file_path}")

2938 elif isinstance(block, ToolResultBlock):

2939 print("Completed tool execution")

2940 elif isinstance(block, TextBlock):

2941 print(f"Claude says: {block.text[:100]}...")

2942 

2943 print("Task completed!")

2944 

2945 

2946asyncio.run(monitor_progress())

2947```

2948 

2949## Contoh Penggunaan

2950 

2951### Operasi file dasar (menggunakan query)

2952 

2953```python theme={null}

2954from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage, ToolUseBlock

2955import asyncio

2956 

2957 

2958async def create_project():

2959 options = ClaudeAgentOptions(

2960 allowed_tools=["Read", "Write", "Bash"],

2961 permission_mode="acceptEdits",

2962 cwd="/home/user/project",

2963 )

2964 

2965 async for message in query(

2966 prompt="Create a Python project structure with setup.py", options=options

2967 ):

2968 if isinstance(message, AssistantMessage):

2969 for block in message.content:

2970 if isinstance(block, ToolUseBlock):

2971 print(f"Using tool: {block.name}")

2972 

2973 

2974asyncio.run(create_project())

2975```

2976 

2977### Penanganan error

2978 

2979```python theme={null}

2980from claude_agent_sdk import query, CLINotFoundError, ProcessError, CLIJSONDecodeError

2981 

2982try:

2983 async for message in query(prompt="Hello"):

2984 print(message)

2985except CLINotFoundError:

2986 print(

2987 "Claude Code CLI not found. Try reinstalling: pip install --force-reinstall claude-agent-sdk"

2988 )

2989except ProcessError as e:

2990 print(f"Process failed with exit code: {e.exit_code}")

2991except CLIJSONDecodeError as e:

2992 print(f"Failed to parse response: {e}")

2993```

2994 

2995### Mode streaming dengan klien

2996 

2997```python theme={null}

2998from claude_agent_sdk import ClaudeSDKClient

2999import asyncio

3000 

3001 

3002async def interactive_session():

3003 async with ClaudeSDKClient() as client:

3004 # Send initial message

3005 await client.query("What's the weather like?")

3006 

3007 # Process responses

3008 async for msg in client.receive_response():

3009 print(msg)

3010 

3011 # Send follow-up

3012 await client.query("Tell me more about that")

3013 

3014 # Process follow-up response

3015 async for msg in client.receive_response():

3016 print(msg)

3017 

3018 

3019asyncio.run(interactive_session())

3020```

3021 

3022### Menggunakan tools kustom dengan ClaudeSDKClient

3023 

3024```python theme={null}

3025from claude_agent_sdk import (

3026 ClaudeSDKClient,

3027 ClaudeAgentOptions,

3028 tool,

3029 create_sdk_mcp_server,

3030 AssistantMessage,

3031 TextBlock,

3032)

3033import asyncio

3034from typing import Any

3035 

3036 

3037# Define custom tools with @tool decorator

3038@tool("calculate", "Perform mathematical calculations", {"expression": str})

3039async def calculate(args: dict[str, Any]) -> dict[str, Any]:

3040 try:

3041 result = eval(args["expression"], {"__builtins__": {}})

3042 return {"content": [{"type": "text", "text": f"Result: {result}"}]}

3043 except Exception as e:

3044 return {

3045 "content": [{"type": "text", "text": f"Error: {str(e)}"}],

3046 "is_error": True,

3047 }

3048 

3049 

3050@tool("get_time", "Get current time", {})

3051async def get_time(args: dict[str, Any]) -> dict[str, Any]:

3052 from datetime import datetime

3053 

3054 current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")

3055 return {"content": [{"type": "text", "text": f"Current time: {current_time}"}]}

3056 

3057 

3058async def main():

3059 # Create SDK MCP server with custom tools

3060 my_server = create_sdk_mcp_server(

3061 name="utilities", version="1.0.0", tools=[calculate, get_time]

3062 )

3063 

3064 # Configure options with the server

3065 options = ClaudeAgentOptions(

3066 mcp_servers={"utils": my_server},

3067 allowed_tools=["mcp__utils__calculate", "mcp__utils__get_time"],

3068 )

3069 

3070 # Use ClaudeSDKClient for interactive tool usage

3071 async with ClaudeSDKClient(options=options) as client:

3072 await client.query("What's 123 * 456?")

3073 

3074 # Process calculation response

3075 async for message in client.receive_response():

3076 if isinstance(message, AssistantMessage):

3077 for block in message.content:

3078 if isinstance(block, TextBlock):

3079 print(f"Calculation: {block.text}")

3080 

3081 # Follow up with time query

3082 await client.query("What time is it now?")

3083 

3084 async for message in client.receive_response():

3085 if isinstance(message, AssistantMessage):

3086 for block in message.content:

3087 if isinstance(block, TextBlock):

3088 print(f"Time: {block.text}")

3089 

3090 

3091asyncio.run(main())

3092```

3093 

3094## Konfigurasi Sandbox

3095 

3096### `SandboxSettings`

3097 

3098Konfigurasi untuk perilaku sandbox. Gunakan ini untuk mengaktifkan sandboxing perintah dan mengonfigurasi pembatasan jaringan secara programatis.

3099 

3100```python theme={null}

3101class SandboxSettings(TypedDict, total=False):

3102 enabled: bool

3103 autoAllowBashIfSandboxed: bool

3104 excludedCommands: list[str]

3105 allowUnsandboxedCommands: bool

3106 network: SandboxNetworkConfig

3107 ignoreViolations: SandboxIgnoreViolations

3108 enableWeakerNestedSandbox: bool

3109```

3110 

3111| Properti | Tipe | Default | Deskripsi |

3112| :-------------------------- | :------------------------------------------------------ | :------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

3113| `enabled` | `bool` | `False` | Aktifkan mode sandbox untuk eksekusi perintah |

3114| `autoAllowBashIfSandboxed` | `bool` | `True` | Auto-approve perintah bash ketika sandbox diaktifkan |

3115| `excludedCommands` | `list[str]` | `[]` | Perintah yang selalu melewati pembatasan sandbox (misalnya, `["docker"]`). Ini berjalan tanpa sandbox secara otomatis tanpa keterlibatan model |

3116| `allowUnsandboxedCommands` | `bool` | `True` | Izinkan model untuk meminta menjalankan perintah di luar sandbox. Ketika `True`, model dapat mengatur `dangerouslyDisableSandbox` dalam input tool, yang jatuh kembali ke [sistem izin](#permissions-fallback-for-unsandboxed-commands) |

3117| `network` | [`SandboxNetworkConfig`](#sandbox-network-config) | `None` | Konfigurasi sandbox spesifik jaringan |

3118| `ignoreViolations` | [`SandboxIgnoreViolations`](#sandbox-ignore-violations) | `None` | Konfigurasi pelanggaran sandbox mana yang akan diabaikan |

3119| `enableWeakerNestedSandbox` | `bool` | `False` | Aktifkan sandbox bersarang yang lebih lemah untuk kompatibilitas |

3120 

3121#### Contoh penggunaan

3122 

3123```python theme={null}

3124from claude_agent_sdk import query, ClaudeAgentOptions, SandboxSettings

3125 

3126sandbox_settings: SandboxSettings = {

3127 "enabled": True,

3128 "autoAllowBashIfSandboxed": True,

3129 "network": {"allowLocalBinding": True},

3130}

3131 

3132async for message in query(

3133 prompt="Build and test my project",

3134 options=ClaudeAgentOptions(sandbox=sandbox_settings),

3135):

3136 print(message)

3137```

3138 

3139<Warning>

3140 **Keamanan Unix socket**: Opsi `allowUnixSockets` dapat memberikan akses ke layanan sistem yang kuat. Misalnya, mengizinkan `/var/run/docker.sock` secara efektif memberikan akses sistem host penuh melalui API Docker, melewati isolasi sandbox. Hanya izinkan Unix sockets yang benar-benar diperlukan dan pahami implikasi keamanan dari masing-masing.

3141</Warning>

3142 

3143### `SandboxNetworkConfig`

3144 

3145Konfigurasi spesifik jaringan untuk mode sandbox.

3146 

3147```python theme={null}

3148class SandboxNetworkConfig(TypedDict, total=False):

3149 allowedDomains: list[str]

3150 deniedDomains: list[str]

3151 allowManagedDomainsOnly: bool

3152 allowUnixSockets: list[str]

3153 allowAllUnixSockets: bool

3154 allowLocalBinding: bool

3155 allowMachLookup: list[str]

3156 httpProxyPort: int

3157 socksProxyPort: int

3158```

3159 

3160| Properti | Tipe | Default | Deskripsi |

3161| :------------------------ | :---------- | :------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

3162| `allowedDomains` | `list[str]` | `[]` | Nama domain yang dapat diakses oleh proses dalam sandbox |

3163| `deniedDomains` | `list[str]` | `[]` | Nama domain yang tidak dapat diakses oleh proses dalam sandbox. Mengambil prioritas atas `allowedDomains` |

3164| `allowManagedDomainsOnly` | `bool` | `False` | Hanya pengaturan terkelola: ketika diatur dalam pengaturan terkelola, abaikan `allowedDomains` dari sumber pengaturan non-terkelola. Tidak berpengaruh ketika diatur melalui opsi SDK |

3165| `allowUnixSockets` | `list[str]` | `[]` | Jalur Unix socket yang dapat diakses proses (misalnya, Docker socket) |

3166| `allowAllUnixSockets` | `bool` | `False` | Izinkan akses ke semua Unix socket |

3167| `allowLocalBinding` | `bool` | `False` | Izinkan proses untuk mengikat ke port lokal (misalnya, untuk dev server) |

3168| `allowMachLookup` | `list[str]` | `[]` | Hanya macOS: nama layanan XPC/Mach yang diizinkan. Mendukung wildcard di akhir |

3169| `httpProxyPort` | `int` | `None` | Port proxy HTTP untuk permintaan jaringan |

3170| `socksProxyPort` | `int` | `None` | Port proxy SOCKS untuk permintaan jaringan |

3171 

3172<Note>

3173 Proxy sandbox bawaan memberlakukan daftar izin jaringan berdasarkan nama host yang diminta dan tidak menghentikan atau memeriksa lalu lintas TLS, sehingga teknik seperti [domain fronting](https://en.wikipedia.org/wiki/Domain_fronting) dapat berpotensi melewatinya. Lihat [Batasan keamanan sandboxing](/id/sandboxing#security-limitations) untuk detail dan [Penyebaran aman](/id/agent-sdk/secure-deployment#traffic-forwarding) untuk mengonfigurasi proxy yang menghentikan TLS.

3174</Note>

3175 

3176### `SandboxIgnoreViolations`

3177 

3178Konfigurasi untuk mengabaikan pelanggaran sandbox tertentu.

3179 

3180```python theme={null}

3181class SandboxIgnoreViolations(TypedDict, total=False):

3182 file: list[str]

3183 network: list[str]

3184```

3185 

3186| Properti | Tipe | Default | Deskripsi |

3187| :-------- | :---------- | :------ | :-------------------------------------------- |

3188| `file` | `list[str]` | `[]` | Pola jalur file untuk mengabaikan pelanggaran |

3189| `network` | `list[str]` | `[]` | Pola jaringan untuk mengabaikan pelanggaran |

3190 

3191### Fallback Izin untuk Perintah Tanpa Sandbox

3192 

3193Ketika `allowUnsandboxedCommands` diaktifkan, model dapat meminta untuk menjalankan perintah di luar sandbox dengan mengatur `dangerouslyDisableSandbox: True` dalam input tool. Permintaan ini jatuh kembali ke sistem izin yang ada, berarti handler `can_use_tool` Anda akan dipanggil, memungkinkan Anda menerapkan logika otorisasi kustom.

3194 

3195<Note>

3196 **`excludedCommands` vs `allowUnsandboxedCommands`:**

3197 

3198 * `excludedCommands`: Daftar statis perintah yang selalu melewati sandbox secara otomatis (misalnya, `["docker"]`). Model tidak memiliki kontrol atas ini.

3199 * `allowUnsandboxedCommands`: Memungkinkan model memutuskan saat runtime apakah akan meminta eksekusi tanpa sandbox dengan mengatur `dangerouslyDisableSandbox: True` dalam input tool.

3200</Note>

3201 

3202```python theme={null}

3203from claude_agent_sdk import (

3204 query,

3205 ClaudeAgentOptions,

3206 HookMatcher,

3207 PermissionResultAllow,

3208 PermissionResultDeny,

3209 ToolPermissionContext,

3210)

3211 

3212 

3213async def can_use_tool(

3214 tool: str, input: dict, context: ToolPermissionContext

3215) -> PermissionResultAllow | PermissionResultDeny:

3216 # Check if the model is requesting to bypass the sandbox

3217 if tool == "Bash" and input.get("dangerouslyDisableSandbox"):

3218 # The model is requesting to run this command outside the sandbox

3219 print(f"Unsandboxed command requested: {input.get('command')}")

3220 

3221 if is_command_authorized(input.get("command")):

3222 return PermissionResultAllow()

3223 return PermissionResultDeny(

3224 message="Command not authorized for unsandboxed execution"

3225 )

3226 return PermissionResultAllow()

3227 

3228 

3229# Required: dummy hook keeps the stream open for can_use_tool

3230async def dummy_hook(input_data, tool_use_id, context):

3231 return {"continue_": True}

3232 

3233 

3234async def prompt_stream():

3235 yield {

3236 "type": "user",

3237 "message": {"role": "user", "content": "Deploy my application"},

3238 }

3239 

3240 

3241async def main():

3242 async for message in query(

3243 prompt=prompt_stream(),

3244 options=ClaudeAgentOptions(

3245 sandbox={

3246 "enabled": True,

3247 "allowUnsandboxedCommands": True, # Model can request unsandboxed execution

3248 },

3249 permission_mode="default",

3250 can_use_tool=can_use_tool,

3251 hooks={"PreToolUse": [HookMatcher(matcher=None, hooks=[dummy_hook])]},

3252 ),

3253 ):

3254 print(message)

3255```

3256 

3257Pola ini memungkinkan Anda untuk:

3258 

3259* **Audit permintaan model**: Catat ketika model meminta eksekusi tanpa sandbox

3260* **Implementasikan allowlist**: Hanya izinkan perintah tertentu untuk berjalan tanpa sandbox

3261* **Tambahkan alur persetujuan**: Memerlukan otorisasi eksplisit untuk operasi istimewa

3262 

3263<Warning>

3264 Perintah yang berjalan dengan `dangerouslyDisableSandbox: True` memiliki akses sistem penuh. Pastikan handler `can_use_tool` Anda memvalidasi permintaan ini dengan hati-hati.

3265 

3266 Jika `permission_mode` diatur ke `bypassPermissions` dan `allow_unsandboxed_commands` diaktifkan, model dapat secara otonom menjalankan perintah di luar sandbox tanpa prompt persetujuan apa pun. Kombinasi ini secara efektif memungkinkan model untuk melarikan diri dari isolasi sandbox secara diam-diam.

3267</Warning>

3268 

3269## Lihat juga

3270 

3271* [SDK overview](/id/agent-sdk/overview) - Konsep SDK umum

3272* [TypeScript SDK reference](/id/agent-sdk/typescript) - Dokumentasi SDK TypeScript

3273* [CLI reference](/id/cli-reference) - Antarmuka baris perintah

3274* [Common workflows](/id/common-workflows) - Panduan langkah demi langkah

agent-sdk/quickstart.md +333 −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# Panduan Cepat

6 

7> Mulai dengan Agent SDK Python atau TypeScript untuk membangun agen AI yang bekerja secara mandiri

8 

9Gunakan Agent SDK untuk membangun agen AI yang membaca kode Anda, menemukan bug, dan memperbaikinya, semuanya tanpa intervensi manual.

10 

11**Yang akan Anda lakukan:**

12 

131. Menyiapkan proyek dengan Agent SDK

142. Membuat file dengan beberapa kode yang berisi bug

153. Menjalankan agen yang menemukan dan memperbaiki bug secara otomatis

16 

17## Prasyarat

18 

19* **Node.js 18+** atau **Python 3.10+**

20* Akun **Anthropic** ([daftar di sini](https://platform.claude.com/))

21 

22## Penyiapan

23 

24<Steps>

25 <Step title="Buat folder proyek">

26 Buat direktori baru untuk panduan cepat ini:

27 

28 ```bash theme={null}

29 mkdir my-agent && cd my-agent

30 ```

31 

32 Untuk proyek Anda sendiri, Anda dapat menjalankan SDK dari folder apa pun; SDK akan memiliki akses ke file di direktori tersebut dan subdirektorinya secara default.

33 </Step>

34 

35 <Step title="Instal SDK">

36 Instal paket Agent SDK untuk bahasa Anda:

37 

38 <Tabs>

39 <Tab title="TypeScript">

40 ```bash theme={null}

41 npm install @anthropic-ai/claude-agent-sdk

42 ```

43 </Tab>

44 

45 <Tab title="Python (uv)">

46 [uv Python package manager](https://docs.astral.sh/uv/) adalah pengelola paket Python yang cepat dan menangani lingkungan virtual secara otomatis:

47 

48 ```bash theme={null}

49 uv init && uv add claude-agent-sdk

50 ```

51 </Tab>

52 

53 <Tab title="Python (pip)">

54 Buat lingkungan virtual terlebih dahulu, kemudian instal:

55 

56 ```bash theme={null}

57 python3 -m venv .venv && source .venv/bin/activate

58 pip3 install claude-agent-sdk

59 ```

60 </Tab>

61 </Tabs>

62 

63 <Note>

64 TypeScript SDK menggabungkan biner Claude Code asli untuk platform Anda sebagai dependensi opsional, jadi Anda tidak perlu menginstal Claude Code secara terpisah.

65 </Note>

66 </Step>

67 

68 <Step title="Atur kunci API Anda">

69 Dapatkan kunci API dari [Claude Console](https://platform.claude.com/), kemudian buat file `.env` di direktori proyek Anda:

70 

71 ```bash theme={null}

72 ANTHROPIC_API_KEY=your-api-key

73 ```

74 

75 SDK juga mendukung autentikasi melalui penyedia API pihak ketiga:

76 

77 * **Amazon Bedrock**: atur variabel lingkungan `CLAUDE_CODE_USE_BEDROCK=1` dan konfigurasikan kredensial AWS

78 * **Google Vertex AI**: atur variabel lingkungan `CLAUDE_CODE_USE_VERTEX=1` dan konfigurasikan kredensial Google Cloud

79 * **Microsoft Azure**: atur variabel lingkungan `CLAUDE_CODE_USE_FOUNDRY=1` dan konfigurasikan kredensial Azure

80 

81 Lihat panduan penyiapan untuk [Bedrock](/id/amazon-bedrock), [Vertex AI](/id/google-vertex-ai), atau [Azure AI Foundry](/id/microsoft-foundry) untuk detail selengkapnya.

82 

83 <Note>

84 Kecuali telah disetujui sebelumnya, Anthropic tidak mengizinkan pengembang pihak ketiga untuk menawarkan login claude.ai atau batas laju untuk produk mereka, termasuk agen yang dibangun di Agent SDK Claude. Silakan gunakan metode autentikasi kunci API yang dijelaskan dalam dokumen ini.

85 </Note>

86 </Step>

87</Steps>

88 

89## Buat file dengan bug

90 

91Panduan cepat ini memandu Anda melalui pembuatan agen yang dapat menemukan dan memperbaiki bug dalam kode. Pertama, Anda memerlukan file dengan beberapa bug yang disengaja untuk diperbaiki oleh agen. Buat `utils.py` di direktori `my-agent` dan tempel kode berikut:

92 

93```python theme={null}

94def calculate_average(numbers):

95 total = 0

96 for num in numbers:

97 total += num

98 return total / len(numbers)

99 

100 

101def get_user_name(user):

102 return user["name"].upper()

103```

104 

105Kode ini memiliki dua bug:

106 

1071. `calculate_average([])` mogok dengan pembagian oleh nol

1082. `get_user_name(None)` mogok dengan TypeError

109 

110## Bangun agen yang menemukan dan memperbaiki bug

111 

112Buat `agent.py` jika Anda menggunakan Python SDK, atau `agent.ts` untuk TypeScript:

113 

114<CodeGroup>

115 ```python Python theme={null}

116 import asyncio

117 from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage, ResultMessage

118 

119 

120 async def main():

121 # Agentic loop: streams messages as Claude works

122 async for message in query(

123 prompt="Review utils.py for bugs that would cause crashes. Fix any issues you find.",

124 options=ClaudeAgentOptions(

125 allowed_tools=["Read", "Edit", "Glob"], # Tools Claude can use

126 permission_mode="acceptEdits", # Auto-approve file edits

127 ),

128 ):

129 # Print human-readable output

130 if isinstance(message, AssistantMessage):

131 for block in message.content:

132 if hasattr(block, "text"):

133 print(block.text) # Claude's reasoning

134 elif hasattr(block, "name"):

135 print(f"Tool: {block.name}") # Tool being called

136 elif isinstance(message, ResultMessage):

137 print(f"Done: {message.subtype}") # Final result

138 

139 

140 asyncio.run(main())

141 ```

142 

143 ```typescript TypeScript theme={null}

144 import { query } from "@anthropic-ai/claude-agent-sdk";

145 

146 // Agentic loop: streams messages as Claude works

147 for await (const message of query({

148 prompt: "Review utils.py for bugs that would cause crashes. Fix any issues you find.",

149 options: {

150 allowedTools: ["Read", "Edit", "Glob"], // Tools Claude can use

151 permissionMode: "acceptEdits" // Auto-approve file edits

152 }

153 })) {

154 // Print human-readable output

155 if (message.type === "assistant" && message.message?.content) {

156 for (const block of message.message.content) {

157 if ("text" in block) {

158 console.log(block.text); // Claude's reasoning

159 } else if ("name" in block) {

160 console.log(`Tool: ${block.name}`); // Tool being called

161 }

162 }

163 } else if (message.type === "result") {

164 console.log(`Done: ${message.subtype}`); // Final result

165 }

166 }

167 ```

168</CodeGroup>

169 

170Kode ini memiliki tiga bagian utama:

171 

1721. **`query`**: titik masuk utama yang membuat loop agentic. Ini mengembalikan iterator async, jadi Anda menggunakan `async for` untuk streaming pesan saat Claude bekerja. Lihat API lengkap di referensi SDK [Python](/id/agent-sdk/python#query) atau [TypeScript](/id/agent-sdk/typescript#query).

173 

1742. **`prompt`**: apa yang ingin Anda lakukan Claude. Claude mengetahui alat mana yang digunakan berdasarkan tugas.

175 

1763. **`options`**: konfigurasi untuk agen. Contoh ini menggunakan `allowedTools` untuk pra-persetujuan `Read`, `Edit`, dan `Glob`, dan `permissionMode: "acceptEdits"` untuk auto-persetujuan perubahan file. Opsi lainnya termasuk `systemPrompt`, `mcpServers`, dan lainnya. Lihat semua opsi untuk [Python](/id/agent-sdk/python#claude-agent-options) atau [TypeScript](/id/agent-sdk/typescript#options).

177 

178Loop `async for` terus berjalan saat Claude berpikir, memanggil alat, mengamati hasil, dan memutuskan apa yang harus dilakukan selanjutnya. Setiap iterasi menghasilkan pesan: penalaran Claude, panggilan alat, hasil alat, atau hasil akhir. SDK menangani orkestrasi (eksekusi alat, manajemen konteks, percobaan ulang) sehingga Anda hanya mengonsumsi aliran. Loop berakhir ketika Claude menyelesaikan tugas atau mengalami kesalahan.

179 

180Penanganan pesan di dalam loop memfilter output yang dapat dibaca manusia. Tanpa penyaringan, Anda akan melihat objek pesan mentah termasuk inisialisasi sistem dan status internal, yang berguna untuk debugging tetapi berisik sebaliknya.

181 

182<Note>

183 Contoh ini menggunakan streaming untuk menampilkan kemajuan secara real-time. Jika Anda tidak memerlukan output langsung (misalnya, untuk pekerjaan latar belakang atau pipeline CI), Anda dapat mengumpulkan semua pesan sekaligus. Lihat [Streaming vs. single-turn mode](/id/agent-sdk/streaming-vs-single-mode) untuk detail selengkapnya.

184</Note>

185 

186### Jalankan agen Anda

187 

188Agen Anda siap. Jalankan dengan perintah berikut:

189 

190<Tabs>

191 <Tab title="Python">

192 ```bash theme={null}

193 python3 agent.py

194 ```

195 </Tab>

196 

197 <Tab title="TypeScript">

198 ```bash theme={null}

199 npx tsx agent.ts

200 ```

201 </Tab>

202</Tabs>

203 

204Setelah menjalankan, periksa `utils.py`. Anda akan melihat kode defensif yang menangani daftar kosong dan pengguna null. Agen Anda secara mandiri:

205 

2061. **Membaca** `utils.py` untuk memahami kode

2072. **Menganalisis** logika dan mengidentifikasi kasus tepi yang akan mogok

2083. **Mengedit** file untuk menambahkan penanganan kesalahan yang tepat

209 

210Inilah yang membuat Agent SDK berbeda: Claude menjalankan alat secara langsung alih-alih meminta Anda untuk mengimplementasikannya.

211 

212<Note>

213 Jika Anda melihat "API key not found", pastikan Anda telah menetapkan variabel lingkungan `ANTHROPIC_API_KEY` di file `.env` atau lingkungan shell Anda. Lihat [panduan pemecahan masalah lengkap](/id/troubleshooting) untuk bantuan lebih lanjut.

214</Note>

215 

216### Coba prompt lain

217 

218Sekarang agen Anda sudah diatur, coba beberapa prompt berbeda:

219 

220* `"Add docstrings to all functions in utils.py"`

221* `"Add type hints to all functions in utils.py"`

222* `"Create a README.md documenting the functions in utils.py"`

223 

224### Sesuaikan agen Anda

225 

226Anda dapat mengubah perilaku agen dengan mengubah opsi. Berikut adalah beberapa contoh:

227 

228**Tambahkan kemampuan pencarian web:**

229 

230<CodeGroup>

231 ```python Python theme={null}

232 options = ClaudeAgentOptions(

233 allowed_tools=["Read", "Edit", "Glob", "WebSearch"], permission_mode="acceptEdits"

234 )

235 ```

236 

237 ```typescript TypeScript hidelines={1,-1} theme={null}

238 const _ = {

239 options: {

240 allowedTools: ["Read", "Edit", "Glob", "WebSearch"],

241 permissionMode: "acceptEdits"

242 }

243 };

244 ```

245</CodeGroup>

246 

247**Berikan Claude prompt sistem kustom:**

248 

249<CodeGroup>

250 ```python Python theme={null}

251 options = ClaudeAgentOptions(

252 allowed_tools=["Read", "Edit", "Glob"],

253 permission_mode="acceptEdits",

254 system_prompt="You are a senior Python developer. Always follow PEP 8 style guidelines.",

255 )

256 ```

257 

258 ```typescript TypeScript hidelines={1,-1} theme={null}

259 const _ = {

260 options: {

261 allowedTools: ["Read", "Edit", "Glob"],

262 permissionMode: "acceptEdits",

263 systemPrompt: "You are a senior Python developer. Always follow PEP 8 style guidelines."

264 }

265 };

266 ```

267</CodeGroup>

268 

269**Jalankan perintah di terminal:**

270 

271<CodeGroup>

272 ```python Python theme={null}

273 options = ClaudeAgentOptions(

274 allowed_tools=["Read", "Edit", "Glob", "Bash"], permission_mode="acceptEdits"

275 )

276 ```

277 

278 ```typescript TypeScript hidelines={1,-1} theme={null}

279 const _ = {

280 options: {

281 allowedTools: ["Read", "Edit", "Glob", "Bash"],

282 permissionMode: "acceptEdits"

283 }

284 };

285 ```

286</CodeGroup>

287 

288Dengan `Bash` diaktifkan, coba: `"Write unit tests for utils.py, run them, and fix any failures"`

289 

290## Konsep kunci

291 

292**Tools** mengontrol apa yang dapat dilakukan agen Anda:

293 

294| Tools | Apa yang dapat dilakukan agen |

295| -------------------------------------- | ----------------------------- |

296| `Read`, `Glob`, `Grep` | Analisis hanya-baca |

297| `Read`, `Edit`, `Glob` | Analisis dan modifikasi kode |

298| `Read`, `Edit`, `Bash`, `Glob`, `Grep` | Otomasi penuh |

299 

300**Permission modes** mengontrol berapa banyak pengawasan manusia yang Anda inginkan:

301 

302| Mode | Perilaku | Kasus penggunaan |

303| ------------------------ | ------------------------------------------------------------------------------------- | --------------------------------------------------- |

304| `acceptEdits` | Auto-persetujuan pengeditan file dan perintah sistem file umum, meminta tindakan lain | Alur kerja pengembangan terpercaya |

305| `dontAsk` | Menolak apa pun yang tidak ada di `allowedTools` | Agen headless terkunci |

306| `auto` (TypeScript only) | Pengklasifikasi model menyetujui atau menolak setiap panggilan alat | Agen otonom dengan penjaga keamanan |

307| `bypassPermissions` | Menjalankan setiap alat tanpa prompt | CI sandboxed, lingkungan yang sepenuhnya terpercaya |

308| `default` | Memerlukan callback `canUseTool` untuk menangani persetujuan | Alur persetujuan kustom |

309 

310Contoh di atas menggunakan mode `acceptEdits`, yang auto-persetujuan operasi file sehingga agen dapat berjalan tanpa prompt interaktif. Jika Anda ingin meminta pengguna untuk persetujuan, gunakan mode `default` dan sediakan callback [`canUseTool`](/id/agent-sdk/user-input) yang mengumpulkan input pengguna. Untuk kontrol lebih lanjut, lihat [Permissions](/id/agent-sdk/permissions).

311 

312## Pemecahan masalah

313 

314### Kesalahan API `thinking.type.enabled` tidak didukung untuk model ini

315 

316Claude Opus 4.7 menggantikan `thinking.type.enabled` dengan `thinking.type.adaptive`. Versi Agent SDK yang lebih lama gagal dengan kesalahan API berikut ketika Anda memilih `claude-opus-4-7`:

317 

318```text theme={null}

319API Error: 400 {"type":"invalid_request_error","message":"\"thinking.type.enabled\" is not supported for this model. Use \"thinking.type.adaptive\" and \"output_config.effort\" to control thinking behavior."}

320```

321 

322Tingkatkan ke Agent SDK v0.2.111 atau lebih baru untuk menggunakan Opus 4.7.

323 

324## Langkah berikutnya

325 

326Sekarang Anda telah membuat agen pertama Anda, pelajari cara memperluas kemampuannya dan menyesuaikannya dengan kasus penggunaan Anda:

327 

328* **[Permissions](/id/agent-sdk/permissions)**: kontrol apa yang dapat dilakukan agen Anda dan kapan memerlukan persetujuan

329* **[Hooks](/id/agent-sdk/hooks)**: jalankan kode kustom sebelum atau sesudah panggilan alat

330* **[Sessions](/id/agent-sdk/sessions)**: bangun agen multi-turn yang mempertahankan konteks

331* **[MCP servers](/id/agent-sdk/mcp)**: terhubung ke database, browser, API, dan sistem eksternal lainnya

332* **[Hosting](/id/agent-sdk/hosting)**: sebarkan agen ke Docker, cloud, dan CI/CD

333* **[Example agents](https://github.com/anthropics/claude-agent-sdk-demos)**: lihat contoh lengkap: asisten email, agen penelitian, dan lainnya

agent-sdk/slash-commands.md +444 −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# Slash Commands dalam SDK

6 

7> Pelajari cara menggunakan slash commands untuk mengontrol sesi Claude Code melalui SDK

8 

9Slash commands menyediakan cara untuk mengontrol sesi Claude Code dengan perintah khusus yang dimulai dengan `/`. Perintah-perintah ini dapat dikirim melalui SDK untuk melakukan tindakan seperti memadatkan konteks, mencantumkan penggunaan konteks, atau memanggil perintah khusus. Hanya perintah yang bekerja tanpa terminal interaktif yang dapat dikirim melalui SDK; pesan `system/init` mencantumkan yang tersedia di sesi Anda.

10 

11## Menemukan Slash Commands yang Tersedia

12 

13Claude Agent SDK menyediakan informasi tentang slash commands yang tersedia dalam pesan inisialisasi sistem. Akses informasi ini ketika sesi Anda dimulai:

14 

15<CodeGroup>

16 ```typescript TypeScript theme={null}

17 import { query } from "@anthropic-ai/claude-agent-sdk";

18 

19 for await (const message of query({

20 prompt: "Hello Claude",

21 options: { maxTurns: 1 }

22 })) {

23 if (message.type === "system" && message.subtype === "init") {

24 console.log("Available slash commands:", message.slash_commands);

25 // Example output: ["/compact", "/context", "/usage"]

26 }

27 }

28 ```

29 

30 ```python Python theme={null}

31 import asyncio

32 from claude_agent_sdk import query, ClaudeAgentOptions, SystemMessage

33 

34 

35 async def main():

36 async for message in query(prompt="Hello Claude", options=ClaudeAgentOptions(max_turns=1)):

37 if isinstance(message, SystemMessage) and message.subtype == "init":

38 print("Available slash commands:", message.data["slash_commands"])

39 # Example output: ["/compact", "/context", "/usage"]

40 

41 

42 asyncio.run(main())

43 ```

44</CodeGroup>

45 

46## Mengirim Slash Commands

47 

48Kirim slash commands dengan memasukkannya dalam string prompt Anda, seperti teks biasa:

49 

50<CodeGroup>

51 ```typescript TypeScript theme={null}

52 import { query } from "@anthropic-ai/claude-agent-sdk";

53 

54 // Send a slash command

55 for await (const message of query({

56 prompt: "/compact",

57 options: { maxTurns: 1 }

58 })) {

59 if (message.type === "result") {

60 console.log("Command executed:", message.result);

61 }

62 }

63 ```

64 

65 ```python Python theme={null}

66 import asyncio

67 from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage

68 

69 

70 async def main():

71 # Send a slash command

72 async for message in query(prompt="/compact", options=ClaudeAgentOptions(max_turns=1)):

73 if isinstance(message, ResultMessage):

74 print("Command executed:", message.result)

75 

76 

77 asyncio.run(main())

78 ```

79</CodeGroup>

80 

81## Slash Commands Umum

82 

83### `/compact` - Memadatkan Riwayat Percakapan

84 

85Perintah `/compact` mengurangi ukuran riwayat percakapan Anda dengan merangkum pesan yang lebih lama sambil mempertahankan konteks penting:

86 

87<CodeGroup>

88 ```typescript TypeScript theme={null}

89 import { query } from "@anthropic-ai/claude-agent-sdk";

90 

91 for await (const message of query({

92 prompt: "/compact",

93 options: { maxTurns: 1 }

94 })) {

95 if (message.type === "system" && message.subtype === "compact_boundary") {

96 console.log("Compaction completed");

97 console.log("Pre-compaction tokens:", message.compact_metadata.pre_tokens);

98 console.log("Trigger:", message.compact_metadata.trigger);

99 }

100 }

101 ```

102 

103 ```python Python theme={null}

104 import asyncio

105 from claude_agent_sdk import query, ClaudeAgentOptions, SystemMessage

106 

107 

108 async def main():

109 async for message in query(prompt="/compact", options=ClaudeAgentOptions(max_turns=1)):

110 if isinstance(message, SystemMessage) and message.subtype == "compact_boundary":

111 print("Compaction completed")

112 print("Pre-compaction tokens:", message.data["compact_metadata"]["pre_tokens"])

113 print("Trigger:", message.data["compact_metadata"]["trigger"])

114 

115 

116 asyncio.run(main())

117 ```

118</CodeGroup>

119 

120### Menghapus percakapan

121 

122Perintah interaktif `/clear` tidak tersedia di SDK. Setiap panggilan `query()` sudah memulai percakapan baru, jadi untuk menghapus konteks, akhiri `query()` saat ini dan mulai yang baru. Percakapan sebelumnya tetap tersimpan di disk dan dapat dikembalikan dengan melewatkan ID sesinya ke [opsi `resume`](/id/agent-sdk/sessions#resume-by-id).

123 

124## Membuat Slash Commands Khusus

125 

126Selain menggunakan slash commands bawaan, Anda dapat membuat perintah khusus Anda sendiri yang tersedia melalui SDK. Perintah khusus didefinisikan sebagai file markdown di direktori tertentu, mirip dengan cara subagents dikonfigurasi.

127 

128<Note>

129 Direktori `.claude/commands/` adalah format warisan. Format yang direkomendasikan adalah `.claude/skills/<name>/SKILL.md`, yang mendukung invokasi slash-command yang sama (`/name`) ditambah invokasi otonom oleh Claude. Lihat [Skills](/id/agent-sdk/skills) untuk format saat ini. CLI terus mendukung kedua format, dan contoh di bawah tetap akurat untuk `.claude/commands/`.

130</Note>

131 

132### Lokasi File

133 

134Slash commands khusus disimpan di direktori yang ditentukan berdasarkan cakupan mereka:

135 

136* **Perintah proyek**: `.claude/commands/` - Tersedia hanya di proyek saat ini (warisan; lebih suka `.claude/skills/`)

137* **Perintah pribadi**: `~/.claude/commands/` - Tersedia di semua proyek Anda (warisan; lebih suka `~/.claude/skills/`)

138 

139### Format File

140 

141Setiap perintah khusus adalah file markdown di mana:

142 

143* Nama file (tanpa ekstensi `.md`) menjadi nama perintah

144* Konten file mendefinisikan apa yang dilakukan perintah

145* Frontmatter YAML opsional menyediakan konfigurasi

146 

147#### Contoh Dasar

148 

149Buat `.claude/commands/refactor.md`:

150 

151```markdown theme={null}

152Refactor the selected code to improve readability and maintainability.

153Focus on clean code principles and best practices.

154```

155 

156Ini membuat perintah `/refactor` yang dapat Anda gunakan melalui SDK.

157 

158#### Dengan Frontmatter

159 

160Buat `.claude/commands/security-check.md`:

161 

162```markdown theme={null}

163---

164allowed-tools: Read, Grep, Glob

165description: Run security vulnerability scan

166model: claude-opus-4-7

167---

168 

169Analyze the codebase for security vulnerabilities including:

170- SQL injection risks

171- XSS vulnerabilities

172- Exposed credentials

173- Insecure configurations

174```

175 

176### Menggunakan Custom Commands di SDK

177 

178Setelah didefinisikan di sistem file, perintah khusus secara otomatis tersedia melalui SDK:

179 

180<CodeGroup>

181 ```typescript TypeScript theme={null}

182 import { query } from "@anthropic-ai/claude-agent-sdk";

183 

184 // Use a custom command

185 for await (const message of query({

186 prompt: "/refactor src/auth/login.ts",

187 options: { maxTurns: 3 }

188 })) {

189 if (message.type === "assistant") {

190 console.log("Refactoring suggestions:", message.message);

191 }

192 }

193 

194 // Custom commands appear in the slash_commands list

195 for await (const message of query({

196 prompt: "Hello",

197 options: { maxTurns: 1 }

198 })) {

199 if (message.type === "system" && message.subtype === "init") {

200 // Will include both built-in and custom commands

201 console.log("Available commands:", message.slash_commands);

202 // Example: ["/compact", "/context", "/usage", "/refactor", "/security-check"]

203 }

204 }

205 ```

206 

207 ```python Python theme={null}

208 import asyncio

209 from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage, SystemMessage

210 

211 

212 async def main():

213 # Use a custom command

214 async for message in query(

215 prompt="/refactor src/auth/login.py", options=ClaudeAgentOptions(max_turns=3)

216 ):

217 if isinstance(message, AssistantMessage):

218 for block in message.content:

219 if hasattr(block, "text"):

220 print("Refactoring suggestions:", block.text)

221 

222 # Custom commands appear in the slash_commands list

223 async for message in query(prompt="Hello", options=ClaudeAgentOptions(max_turns=1)):

224 if isinstance(message, SystemMessage) and message.subtype == "init":

225 # Will include both built-in and custom commands

226 print("Available commands:", message.data["slash_commands"])

227 # Example: ["/compact", "/context", "/usage", "/refactor", "/security-check"]

228 

229 

230 asyncio.run(main())

231 ```

232</CodeGroup>

233 

234### Fitur Lanjutan

235 

236#### Argumen dan Placeholder

237 

238Perintah khusus mendukung argumen dinamis menggunakan placeholder:

239 

240Buat `.claude/commands/fix-issue.md`:

241 

242```markdown theme={null}

243---

244argument-hint: [issue-number] [priority]

245description: Fix a GitHub issue

246---

247 

248Fix issue #$1 with priority $2.

249Check the issue description and implement the necessary changes.

250```

251 

252Gunakan di SDK:

253 

254<CodeGroup>

255 ```typescript TypeScript theme={null}

256 import { query } from "@anthropic-ai/claude-agent-sdk";

257 

258 // Pass arguments to custom command

259 for await (const message of query({

260 prompt: "/fix-issue 123 high",

261 options: { maxTurns: 5 }

262 })) {

263 // Command will process with $1="123" and $2="high"

264 if (message.type === "result") {

265 console.log("Issue fixed:", message.result);

266 }

267 }

268 ```

269 

270 ```python Python theme={null}

271 import asyncio

272 from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage

273 

274 

275 async def main():

276 # Pass arguments to custom command

277 async for message in query(prompt="/fix-issue 123 high", options=ClaudeAgentOptions(max_turns=5)):

278 # Command will process with $1="123" and $2="high"

279 if isinstance(message, ResultMessage):

280 print("Issue fixed:", message.result)

281 

282 

283 asyncio.run(main())

284 ```

285</CodeGroup>

286 

287#### Eksekusi Perintah Bash

288 

289Perintah khusus dapat mengeksekusi perintah bash dan menyertakan output mereka:

290 

291Buat `.claude/commands/git-commit.md`:

292 

293```markdown theme={null}

294---

295allowed-tools: Bash(git add *), Bash(git status *), Bash(git commit *)

296description: Create a git commit

297---

298 

299## Context

300 

301- Current status: !`git status`

302- Current diff: !`git diff HEAD`

303 

304## Task

305 

306Create a git commit with appropriate message based on the changes.

307```

308 

309#### Referensi File

310 

311Sertakan konten file menggunakan awalan `@`:

312 

313Buat `.claude/commands/review-config.md`:

314 

315```markdown theme={null}

316---

317description: Review configuration files

318---

319 

320Review the following configuration files for issues:

321- Package config: @package.json

322- TypeScript config: @tsconfig.json

323- Environment config: @.env

324 

325Check for security issues, outdated dependencies, and misconfigurations.

326```

327 

328### Organisasi dengan Namespacing

329 

330Organisir perintah dalam subdirektori untuk struktur yang lebih baik:

331 

332```bash theme={null}

333.claude/commands/

334├── frontend/

335│ ├── component.md # Creates /component (project:frontend)

336│ └── style-check.md # Creates /style-check (project:frontend)

337├── backend/

338│ ├── api-test.md # Creates /api-test (project:backend)

339│ └── db-migrate.md # Creates /db-migrate (project:backend)

340└── review.md # Creates /review (project)

341```

342 

343Subdirektori muncul dalam deskripsi perintah tetapi tidak mempengaruhi nama perintah itu sendiri.

344 

345### Contoh Praktis

346 

347#### Perintah Code Review

348 

349Buat `.claude/commands/code-review.md`:

350 

351```markdown theme={null}

352---

353allowed-tools: Read, Grep, Glob, Bash(git diff *)

354description: Comprehensive code review

355---

356 

357## Changed Files

358!`git diff --name-only HEAD~1`

359 

360## Detailed Changes

361!`git diff HEAD~1`

362 

363## Review Checklist

364 

365Review the above changes for:

3661. Code quality and readability

3672. Security vulnerabilities

3683. Performance implications

3694. Test coverage

3705. Documentation completeness

371 

372Provide specific, actionable feedback organized by priority.

373```

374 

375#### Perintah Test Runner

376 

377Buat `.claude/commands/test.md`:

378 

379```markdown theme={null}

380---

381allowed-tools: Bash, Read, Edit

382argument-hint: [test-pattern]

383description: Run tests with optional pattern

384---

385 

386Run tests matching pattern: $ARGUMENTS

387 

3881. Detect the test framework (Jest, pytest, etc.)

3892. Run tests with the provided pattern

3903. If tests fail, analyze and fix them

3914. Re-run to verify fixes

392```

393 

394Gunakan perintah-perintah ini melalui SDK:

395 

396<CodeGroup>

397 ```typescript TypeScript theme={null}

398 import { query } from "@anthropic-ai/claude-agent-sdk";

399 

400 // Run code review

401 for await (const message of query({

402 prompt: "/code-review",

403 options: { maxTurns: 3 }

404 })) {

405 // Process review feedback

406 }

407 

408 // Run specific tests

409 for await (const message of query({

410 prompt: "/test auth",

411 options: { maxTurns: 5 }

412 })) {

413 // Handle test results

414 }

415 ```

416 

417 ```python Python theme={null}

418 import asyncio

419 from claude_agent_sdk import query, ClaudeAgentOptions

420 

421 

422 async def main():

423 # Run code review

424 async for message in query(prompt="/code-review", options=ClaudeAgentOptions(max_turns=3)):

425 # Process review feedback

426 pass

427 

428 # Run specific tests

429 async for message in query(prompt="/test auth", options=ClaudeAgentOptions(max_turns=5)):

430 # Handle test results

431 pass

432 

433 

434 asyncio.run(main())

435 ```

436</CodeGroup>

437 

438## Lihat Juga

439 

440* [Slash Commands](/id/skills) - Dokumentasi slash command lengkap

441* [Subagents dalam SDK](/id/agent-sdk/subagents) - Konfigurasi berbasis sistem file serupa untuk subagents

442* [Referensi TypeScript SDK](/id/agent-sdk/typescript) - Dokumentasi API lengkap

443* [Gambaran umum SDK](/id/agent-sdk/overview) - Konsep SDK umum

444* [Referensi CLI](/id/cli-reference) - Antarmuka baris perintah

agent-sdk/typescript.md +2975 −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# Agent SDK reference - TypeScript

6 

7> Referensi API lengkap untuk TypeScript Agent SDK, termasuk semua fungsi, tipe, dan antarmuka.

8 

9<script src="/components/typescript-sdk-type-links.js" defer />

10 

11<Note>

12 **Coba antarmuka V2 baru (pratinjau):** Antarmuka yang disederhanakan dengan pola `send()` dan `stream()` kini tersedia, membuat percakapan multi-putaran lebih mudah. [Pelajari lebih lanjut tentang pratinjau TypeScript V2](/id/agent-sdk/typescript-v2-preview)

13</Note>

14 

15## Instalasi

16 

17```bash theme={null}

18npm install @anthropic-ai/claude-agent-sdk

19```

20 

21<Note>

22 SDK menggabungkan biner Claude Code asli untuk platform Anda sebagai dependensi opsional seperti `@anthropic-ai/claude-agent-sdk-darwin-arm64`. Anda tidak perlu menginstal Claude Code secara terpisah. Jika pengelola paket Anda melewatkan dependensi opsional, SDK melempar `Native CLI binary for <platform> not found`; setel [`pathToClaudeCodeExecutable`](#options) ke biner `claude` yang diinstal secara terpisah sebagai gantinya.

23</Note>

24 

25## Fungsi

26 

27### `query()`

28 

29Fungsi utama untuk berinteraksi dengan Claude Code. Membuat generator asinkron yang melakukan streaming pesan saat tiba.

30 

31```typescript theme={null}

32function query({

33 prompt,

34 options

35}: {

36 prompt: string | AsyncIterable<SDKUserMessage>;

37 options?: Options;

38}): Query;

39```

40 

41#### Parameter

42 

43| Parameter | Tipe | Deskripsi |

44| :-------- | :---------------------------------------------------------------- | :------------------------------------------------------------------- |

45| `prompt` | `string \| AsyncIterable<`[`SDKUserMessage`](#sdkuser-message)`>` | Prompt input sebagai string atau async iterable untuk mode streaming |

46| `options` | [`Options`](#options) | Objek konfigurasi opsional (lihat tipe Options di bawah) |

47 

48#### Pengembalian

49 

50Mengembalikan objek [`Query`](#query-object) yang memperluas `AsyncGenerator<`[`SDKMessage`](#sdk-message)`, void>` dengan metode tambahan.

51 

52### `startup()`

53 

54Pra-pemanasan subprocess CLI dengan menspawnya dan menyelesaikan handshake inisialisasi sebelum prompt tersedia. Handle [`WarmQuery`](#warm-query) yang dikembalikan menerima prompt nanti dan menulisnya ke proses yang sudah siap, sehingga panggilan `query()` pertama diselesaikan tanpa membayar biaya spawn dan inisialisasi subprocess secara inline.

55 

56```typescript theme={null}

57function startup(params?: {

58 options?: Options;

59 initializeTimeoutMs?: number;

60}): Promise<WarmQuery>;

61```

62 

63#### Parameter

64 

65| Parameter | Tipe | Deskripsi |

66| :-------------------- | :-------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

67| `options` | [`Options`](#options) | Objek konfigurasi opsional. Sama dengan parameter `options` ke `query()` |

68| `initializeTimeoutMs` | `number` | Waktu maksimum dalam milidetik untuk menunggu inisialisasi subprocess. Default ke `60000`. Jika inisialisasi tidak selesai tepat waktu, promise ditolak dengan error timeout |

69 

70#### Pengembalian

71 

72Mengembalikan `Promise<`[`WarmQuery`](#warm-query)`>` yang diselesaikan setelah subprocess telah dispawn dan menyelesaikan handshake inisialisasinya.

73 

74#### Contoh

75 

76Panggil `startup()` lebih awal, misalnya saat boot aplikasi, kemudian panggil `.query()` pada handle yang dikembalikan setelah prompt siap. Ini memindahkan spawn subprocess dan inisialisasi keluar dari jalur kritis.

77 

78```typescript theme={null}

79import { startup } from "@anthropic-ai/claude-agent-sdk";

80 

81// Bayar biaya startup di muka

82const warm = await startup({ options: { maxTurns: 3 } });

83 

84// Nanti, ketika prompt siap, ini langsung

85for await (const message of warm.query("What files are here?")) {

86 console.log(message);

87}

88```

89 

90### `tool()`

91 

92Membuat definisi tool MCP yang aman tipe untuk digunakan dengan server MCP SDK.

93 

94```typescript theme={null}

95function tool<Schema extends AnyZodRawShape>(

96 name: string,

97 description: string,

98 inputSchema: Schema,

99 handler: (args: InferShape<Schema>, extra: unknown) => Promise<CallToolResult>,

100 extras?: { annotations?: ToolAnnotations }

101): SdkMcpToolDefinition<Schema>;

102```

103 

104#### Parameter

105 

106| Parameter | Tipe | Deskripsi |

107| :------------ | :------------------------------------------------------------------ | :----------------------------------------------------------------------------- |

108| `name` | `string` | Nama tool |

109| `description` | `string` | Deskripsi tentang apa yang dilakukan tool |

110| `inputSchema` | `Schema extends AnyZodRawShape` | Skema Zod yang mendefinisikan parameter input tool (mendukung Zod 3 dan Zod 4) |

111| `handler` | `(args, extra) => Promise<`[`CallToolResult`](#call-tool-result)`>` | Fungsi asinkron yang mengeksekusi logika tool |

112| `extras` | `{ annotations?: `[`ToolAnnotations`](#tool-annotations)` }` | Anotasi tool MCP opsional yang memberikan petunjuk perilaku kepada klien |

113 

114#### `ToolAnnotations`

115 

116Dieksport ulang dari `@modelcontextprotocol/sdk/types.js`. Semua field adalah petunjuk opsional; klien tidak boleh mengandalkannya untuk keputusan keamanan.

117 

118| Field | Tipe | Default | Deskripsi |

119| :---------------- | :-------- | :---------- | :------------------------------------------------------------------------------------------------------------------------------------------- |

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

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

122| `destructiveHint` | `boolean` | `true` | Jika `true`, tool dapat melakukan pembaruan destruktif (hanya bermakna ketika `readOnlyHint` adalah `false`) |

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

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

125 

126```typescript theme={null}

127import { tool } from "@anthropic-ai/claude-agent-sdk";

128import { z } from "zod";

129 

130const searchTool = tool(

131 "search",

132 "Search the web",

133 { query: z.string() },

134 async ({ query }) => {

135 return { content: [{ type: "text", text: `Results for: ${query}` }] };

136 },

137 { annotations: { readOnlyHint: true, openWorldHint: true } }

138);

139```

140 

141### `createSdkMcpServer()`

142 

143Membuat instance server MCP yang berjalan dalam proses yang sama dengan aplikasi Anda.

144 

145```typescript theme={null}

146function createSdkMcpServer(options: {

147 name: string;

148 version?: string;

149 tools?: Array<SdkMcpToolDefinition<any>>;

150}): McpSdkServerConfigWithInstance;

151```

152 

153#### Parameter

154 

155| Parameter | Tipe | Deskripsi |

156| :---------------- | :---------------------------- | :------------------------------------------------------- |

157| `options.name` | `string` | Nama server MCP |

158| `options.version` | `string` | String versi opsional |

159| `options.tools` | `Array<SdkMcpToolDefinition>` | Array definisi tool yang dibuat dengan [`tool()`](#tool) |

160 

161### `listSessions()`

162 

163Menemukan dan membuat daftar sesi masa lalu dengan metadata ringan. Filter berdasarkan direktori proyek atau buat daftar sesi di semua proyek.

164 

165```typescript theme={null}

166function listSessions(options?: ListSessionsOptions): Promise<SDKSessionInfo[]>;

167```

168 

169#### Parameter

170 

171| Parameter | Tipe | Default | Deskripsi |

172| :------------------------- | :-------- | :---------- | :------------------------------------------------------------------------------------------ |

173| `options.dir` | `string` | `undefined` | Direktori untuk membuat daftar sesi. Ketika dihilangkan, mengembalikan sesi di semua proyek |

174| `options.limit` | `number` | `undefined` | Jumlah maksimum sesi yang akan dikembalikan |

175| `options.includeWorktrees` | `boolean` | `true` | Ketika `dir` berada di dalam repositori git, sertakan sesi dari semua jalur worktree |

176 

177#### Tipe pengembalian: `SDKSessionInfo`

178 

179| Properti | Tipe | Deskripsi |

180| :------------- | :-------------------- | :------------------------------------------------------------------------------------ |

181| `sessionId` | `string` | Pengenal sesi unik (UUID) |

182| `summary` | `string` | Judul tampilan: judul kustom, ringkasan yang dihasilkan otomatis, atau prompt pertama |

183| `lastModified` | `number` | Waktu modifikasi terakhir dalam milidetik sejak epoch |

184| `fileSize` | `number \| undefined` | Ukuran file sesi dalam byte. Hanya diisi untuk penyimpanan JSONL lokal |

185| `customTitle` | `string \| undefined` | Judul sesi yang ditetapkan pengguna (melalui `/rename`) |

186| `firstPrompt` | `string \| undefined` | Prompt pengguna bermakna pertama dalam sesi |

187| `gitBranch` | `string \| undefined` | Cabang Git di akhir sesi |

188| `cwd` | `string \| undefined` | Direktori kerja untuk sesi |

189| `tag` | `string \| undefined` | Tag sesi yang ditetapkan pengguna (lihat [`tagSession()`](#tag-session)) |

190| `createdAt` | `number \| undefined` | Waktu pembuatan dalam milidetik sejak epoch, dari timestamp entri pertama |

191 

192#### Contoh

193 

194Cetak 10 sesi terbaru untuk proyek. Hasil diurutkan berdasarkan `lastModified` menurun, jadi item pertama adalah yang terbaru. Hilangkan `dir` untuk mencari di semua proyek.

195 

196```typescript theme={null}

197import { listSessions } from "@anthropic-ai/claude-agent-sdk";

198 

199const sessions = await listSessions({ dir: "/path/to/project", limit: 10 });

200 

201for (const session of sessions) {

202 console.log(`${session.summary} (${session.sessionId})`);

203}

204```

205 

206### `getSessionMessages()`

207 

208Membaca pesan pengguna dan asisten dari transkrip sesi masa lalu.

209 

210```typescript theme={null}

211function getSessionMessages(

212 sessionId: string,

213 options?: GetSessionMessagesOptions

214): Promise<SessionMessage[]>;

215```

216 

217#### Parameter

218 

219| Parameter | Tipe | Default | Deskripsi |

220| :--------------- | :------- | :---------- | :--------------------------------------------------------------------------------- |

221| `sessionId` | `string` | required | UUID sesi untuk dibaca (lihat `listSessions()`) |

222| `options.dir` | `string` | `undefined` | Direktori proyek untuk menemukan sesi. Ketika dihilangkan, mencari di semua proyek |

223| `options.limit` | `number` | `undefined` | Jumlah maksimum pesan yang akan dikembalikan |

224| `options.offset` | `number` | `undefined` | Jumlah pesan yang akan dilewati dari awal |

225 

226#### Tipe pengembalian: `SessionMessage`

227 

228| Properti | Tipe | Deskripsi |

229| :------------------- | :---------------------- | :---------------------------------- |

230| `type` | `"user" \| "assistant"` | Peran pesan |

231| `uuid` | `string` | Pengenal pesan unik |

232| `session_id` | `string` | Sesi yang pesan ini milik |

233| `message` | `unknown` | Payload pesan mentah dari transkrip |

234| `parent_tool_use_id` | `null` | Dicadangkan |

235 

236#### Contoh

237 

238```typescript theme={null}

239import { listSessions, getSessionMessages } from "@anthropic-ai/claude-agent-sdk";

240 

241const [latest] = await listSessions({ dir: "/path/to/project", limit: 1 });

242 

243if (latest) {

244 const messages = await getSessionMessages(latest.sessionId, {

245 dir: "/path/to/project",

246 limit: 20

247 });

248 

249 for (const msg of messages) {

250 console.log(`[${msg.type}] ${msg.uuid}`);

251 }

252}

253```

254 

255### `getSessionInfo()`

256 

257Membaca metadata untuk sesi tunggal berdasarkan ID tanpa memindai direktori proyek lengkap.

258 

259```typescript theme={null}

260function getSessionInfo(

261 sessionId: string,

262 options?: GetSessionInfoOptions

263): Promise<SDKSessionInfo | undefined>;

264```

265 

266#### Parameter

267 

268| Parameter | Tipe | Default | Deskripsi |

269| :------------ | :------- | :---------- | :---------------------------------------------------------------------------- |

270| `sessionId` | `string` | required | UUID sesi yang akan dicari |

271| `options.dir` | `string` | `undefined` | Jalur direktori proyek. Ketika dihilangkan, mencari di semua direktori proyek |

272 

273Mengembalikan [`SDKSessionInfo`](#return-type-sdk-session-info), atau `undefined` jika sesi tidak ditemukan.

274 

275### `renameSession()`

276 

277Mengganti nama sesi dengan menambahkan entri judul kustom. Panggilan berulang aman; judul terbaru menang.

278 

279```typescript theme={null}

280function renameSession(

281 sessionId: string,

282 title: string,

283 options?: SessionMutationOptions

284): Promise<void>;

285```

286 

287#### Parameter

288 

289| Parameter | Tipe | Default | Deskripsi |

290| :------------ | :------- | :---------- | :---------------------------------------------------------------------------- |

291| `sessionId` | `string` | required | UUID sesi yang akan diganti nama |

292| `title` | `string` | required | Judul baru. Harus tidak kosong setelah memangkas spasi putih |

293| `options.dir` | `string` | `undefined` | Jalur direktori proyek. Ketika dihilangkan, mencari di semua direktori proyek |

294 

295### `tagSession()`

296 

297Menandai sesi. Lewatkan `null` untuk menghapus tag. Panggilan berulang aman; tag terbaru menang.

298 

299```typescript theme={null}

300function tagSession(

301 sessionId: string,

302 tag: string | null,

303 options?: SessionMutationOptions

304): Promise<void>;

305```

306 

307#### Parameter

308 

309| Parameter | Tipe | Default | Deskripsi |

310| :------------ | :--------------- | :---------- | :---------------------------------------------------------------------------- |

311| `sessionId` | `string` | required | UUID sesi yang akan ditandai |

312| `tag` | `string \| null` | required | String tag, atau `null` untuk menghapus |

313| `options.dir` | `string` | `undefined` | Jalur direktori proyek. Ketika dihilangkan, mencari di semua direktori proyek |

314 

315## Tipe

316 

317### `Options`

318 

319Objek konfigurasi untuk fungsi `query()`.

320 

321| Properti | Tipe | Default | Deskripsi |

322| :-------------------------------- | :------------------------------------------------------------------------------------------------------- | :----------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

323| `abortController` | `AbortController` | `new AbortController()` | Pengontrol untuk membatalkan operasi |

324| `additionalDirectories` | `string[]` | `[]` | Direktori tambahan yang dapat diakses Claude |

325| `agent` | `string` | `undefined` | Nama agen untuk thread utama. Agen harus didefinisikan dalam opsi `agents` atau dalam pengaturan |

326| `agents` | `Record<string, [`AgentDefinition`](#agent-definition)>` | `undefined` | Tentukan subagen secara terprogram |

327| `allowDangerouslySkipPermissions` | `boolean` | `false` | Aktifkan bypass izin. Diperlukan saat menggunakan `permissionMode: 'bypassPermissions'` |

328| `allowedTools` | `string[]` | `[]` | Tool untuk auto-approve tanpa prompt. Ini tidak membatasi Claude hanya pada tool ini; tool yang tidak terdaftar jatuh ke `permissionMode` dan `canUseTool`. Gunakan `disallowedTools` untuk memblokir tool. Lihat [Izin](/id/agent-sdk/permissions#allow-and-deny-rules) |

329| `betas` | [`SdkBeta`](#sdk-beta)`[]` | `[]` | Aktifkan fitur beta |

330| `canUseTool` | [`CanUseTool`](#can-use-tool) | `undefined` | Fungsi izin kustom untuk penggunaan tool |

331| `continue` | `boolean` | `false` | Lanjutkan percakapan terbaru |

332| `cwd` | `string` | `process.cwd()` | Direktori kerja saat ini |

333| `debug` | `boolean` | `false` | Aktifkan mode debug untuk proses Claude Code |

334| `debugFile` | `string` | `undefined` | Tulis log debug ke jalur file tertentu. Secara implisit mengaktifkan mode debug |

335| `disallowedTools` | `string[]` | `[]` | Tool untuk selalu tolak. Aturan tolak diperiksa terlebih dahulu dan mengganti `allowedTools` dan `permissionMode` (termasuk `bypassPermissions`) |

336| `effort` | `'low' \| 'medium' \| 'high' \| 'xhigh' \| 'max'` | `'high'` | Mengontrol seberapa banyak usaha yang Claude masukkan ke dalam responsnya. Bekerja dengan pemikiran adaptif untuk memandu kedalaman pemikiran |

337| `enableFileCheckpointing` | `boolean` | `false` | Aktifkan pelacakan perubahan file untuk rewinding. Lihat [File checkpointing](/id/agent-sdk/file-checkpointing) |

338| `env` | `Record<string, string \| undefined>` | `process.env` | Variabel lingkungan. Lihat [Variabel lingkungan](/id/env-vars) untuk variabel yang dibaca CLI yang mendasarinya. Atur `CLAUDE_AGENT_SDK_CLIENT_APP` untuk mengidentifikasi aplikasi Anda di header User-Agent |

339| `executable` | `'bun' \| 'deno' \| 'node'` | Auto-detected | Runtime JavaScript yang akan digunakan |

340| `executableArgs` | `string[]` | `[]` | Argumen untuk diteruskan ke executable |

341| `extraArgs` | `Record<string, string \| null>` | `{}` | Argumen tambahan |

342| `fallbackModel` | `string` | `undefined` | Model yang digunakan jika model utama gagal |

343| `forkSession` | `boolean` | `false` | Saat melanjutkan dengan `resume`, fork ke ID sesi baru alih-alih melanjutkan sesi asli |

344| `hooks` | `Partial<Record<`[`HookEvent`](#hook-event)`, `[`HookCallbackMatcher`](#hook-callback-matcher)`[]>>` | `{}` | Callback hook untuk event |

345| `includePartialMessages` | `boolean` | `false` | Sertakan event pesan parsial |

346| `maxBudgetUsd` | `number` | `undefined` | Hentikan query ketika estimasi biaya sisi klien mencapai nilai USD ini. Dibandingkan dengan estimasi yang sama seperti `total_cost_usd`; lihat [Lacak biaya dan penggunaan](/id/agent-sdk/cost-tracking) untuk peringatan akurasi |

347| `maxThinkingTokens` | `number` | `undefined` | *Deprecated:* Gunakan opsi `thinking` sebagai gantinya. Token maksimum untuk proses pemikiran |

348| `maxTurns` | `number` | `undefined` | Putaran agen maksimum (perjalanan round-trip penggunaan tool) |

349| `mcpServers` | `Record<string, [`McpServerConfig`](#mcp-server-config)>` | `{}` | Konfigurasi server MCP |

350| `model` | `string` | Default dari CLI | Model Claude yang akan digunakan |

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

352| `pathToClaudeCodeExecutable` | `string` | Auto-resolved dari biner asli bundel | Jalur ke executable Claude Code. Hanya diperlukan jika dependensi opsional dilewati selama instalasi atau platform Anda tidak dalam set yang didukung |

353| `permissionMode` | [`PermissionMode`](#permission-mode) | `'default'` | Mode izin untuk sesi |

354| `permissionPromptToolName` | `string` | `undefined` | Nama tool MCP untuk prompt izin |

355| `persistSession` | `boolean` | `true` | Ketika `false`, menonaktifkan persistensi sesi ke disk. Sesi tidak dapat dilanjutkan nanti |

356| `plugins` | [`SdkPluginConfig`](#sdk-plugin-config)`[]` | `[]` | Muat plugin kustom dari jalur lokal. Lihat [Plugins](/id/agent-sdk/plugins) untuk detail |

357| `promptSuggestions` | `boolean` | `false` | Aktifkan saran prompt. Mengirimkan pesan `prompt_suggestion` setelah setiap putaran dengan prompt pengguna berikutnya yang diprediksi |

358| `resume` | `string` | `undefined` | ID sesi untuk dilanjutkan |

359| `resumeSessionAt` | `string` | `undefined` | Lanjutkan sesi pada UUID pesan tertentu |

360| `sandbox` | [`SandboxSettings`](#sandbox-settings) | `undefined` | Konfigurasi perilaku sandbox secara terprogram. Lihat [Pengaturan sandbox](#sandbox-settings) untuk detail |

361| `sessionId` | `string` | Auto-generated | Gunakan UUID tertentu untuk sesi alih-alih auto-generate |

362| `sessionStore` | [`SessionStore`](/id/agent-sdk/session-storage#the-session-store-interface) | `undefined` | Cerminkan transkrip sesi ke backend eksternal sehingga host apa pun dapat melanjutkannya. Lihat [Pertahankan sesi ke penyimpanan eksternal](/id/agent-sdk/session-storage) |

363| `settingSources` | [`SettingSource`](#setting-source)`[]` | CLI defaults (all sources) | Kontrol pengaturan filesystem mana yang akan dimuat. Lewatkan `[]` untuk menonaktifkan pengaturan pengguna, proyek, dan lokal. Pengaturan kebijakan terkelola dimuat terlepas dari itu. Lihat [Gunakan fitur Claude Code](/id/agent-sdk/claude-code-features#what-settingsources-does-not-control) |

364| `spawnClaudeCodeProcess` | `(options: SpawnOptions) => SpawnedProcess` | `undefined` | Fungsi kustom untuk spawn proses Claude Code. Gunakan untuk menjalankan Claude Code di VM, kontainer, atau lingkungan jarak jauh |

365| `stderr` | `(data: string) => void` | `undefined` | Callback untuk output stderr |

366| `strictMcpConfig` | `boolean` | `false` | Terapkan validasi MCP ketat |

367| `systemPrompt` | `string \| { type: 'preset'; preset: 'claude_code'; append?: string; excludeDynamicSections?: boolean }` | `undefined` (minimal prompt) | Konfigurasi prompt sistem. Lewatkan string untuk prompt kustom, atau `{ type: 'preset', preset: 'claude_code' }` untuk menggunakan prompt sistem Claude Code. Saat menggunakan bentuk objek preset, tambahkan `append` untuk memperluas dengan instruksi tambahan, dan atur `excludeDynamicSections: true` untuk memindahkan konteks per-sesi ke pesan pengguna pertama untuk [reuse prompt-cache yang lebih baik di seluruh mesin](/id/agent-sdk/modifying-system-prompts#improve-prompt-caching-across-users-and-machines) |

368| `thinking` | [`ThinkingConfig`](#thinking-config) | `{ type: 'adaptive' }` untuk model yang didukung | Mengontrol perilaku pemikiran/penalaran Claude. Lihat [`ThinkingConfig`](#thinking-config) untuk opsi |

369| `toolConfig` | [`ToolConfig`](#tool-config) | `undefined` | Konfigurasi untuk perilaku tool bawaan. Lihat [`ToolConfig`](#tool-config) untuk detail |

370| `tools` | `string[] \| { type: 'preset'; preset: 'claude_code' }` | `undefined` | Konfigurasi tool. Lewatkan array nama tool atau gunakan preset untuk mendapatkan tool default Claude Code |

371 

372### Objek `Query`

373 

374Antarmuka yang dikembalikan oleh fungsi `query()`.

375 

376```typescript theme={null}

377interface Query extends AsyncGenerator<SDKMessage, void> {

378 interrupt(): Promise<void>;

379 rewindFiles(

380 userMessageId: string,

381 options?: { dryRun?: boolean }

382 ): Promise<RewindFilesResult>;

383 setPermissionMode(mode: PermissionMode): Promise<void>;

384 setModel(model?: string): Promise<void>;

385 setMaxThinkingTokens(maxThinkingTokens: number | null): Promise<void>;

386 initializationResult(): Promise<SDKControlInitializeResponse>;

387 supportedCommands(): Promise<SlashCommand[]>;

388 supportedModels(): Promise<ModelInfo[]>;

389 supportedAgents(): Promise<AgentInfo[]>;

390 mcpServerStatus(): Promise<McpServerStatus[]>;

391 accountInfo(): Promise<AccountInfo>;

392 reconnectMcpServer(serverName: string): Promise<void>;

393 toggleMcpServer(serverName: string, enabled: boolean): Promise<void>;

394 setMcpServers(servers: Record<string, McpServerConfig>): Promise<McpSetServersResult>;

395 streamInput(stream: AsyncIterable<SDKUserMessage>): Promise<void>;

396 stopTask(taskId: string): Promise<void>;

397 close(): void;

398}

399```

400 

401#### Metode

402 

403| Metode | Deskripsi |

404| :------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

405| `interrupt()` | Mengganggu query (hanya tersedia dalam mode input streaming) |

406| `rewindFiles(userMessageId, options?)` | Mengembalikan file ke keadaan mereka pada pesan pengguna yang ditentukan. Lewatkan `{ dryRun: true }` untuk pratinjau perubahan. Memerlukan `enableFileCheckpointing: true`. Lihat [File checkpointing](/id/agent-sdk/file-checkpointing) |

407| `setPermissionMode()` | Mengubah mode izin (hanya tersedia dalam mode input streaming) |

408| `setModel()` | Mengubah model (hanya tersedia dalam mode input streaming) |

409| `setMaxThinkingTokens()` | *Deprecated:* Gunakan opsi `thinking` sebagai gantinya. Mengubah token pemikiran maksimum |

410| `initializationResult()` | Mengembalikan hasil inisialisasi lengkap termasuk perintah yang didukung, model, info akun, dan konfigurasi gaya output |

411| `supportedCommands()` | Mengembalikan perintah slash yang tersedia |

412| `supportedModels()` | Mengembalikan model yang tersedia dengan info tampilan |

413| `supportedAgents()` | Mengembalikan subagen yang tersedia sebagai [`AgentInfo`](#agent-info)`[]` |

414| `mcpServerStatus()` | Mengembalikan status server MCP yang terhubung |

415| `accountInfo()` | Mengembalikan informasi akun |

416| `reconnectMcpServer(serverName)` | Sambungkan kembali server MCP berdasarkan nama |

417| `toggleMcpServer(serverName, enabled)` | Aktifkan atau nonaktifkan server MCP berdasarkan nama |

418| `setMcpServers(servers)` | Ganti secara dinamis set server MCP untuk sesi ini. Mengembalikan info tentang server mana yang ditambahkan, dihapus, dan error apa pun |

419| `streamInput(stream)` | Alirkan pesan input ke query untuk percakapan multi-putaran |

420| `stopTask(taskId)` | Hentikan tugas latar belakang yang sedang berjalan berdasarkan ID |

421| `close()` | Tutup query dan hentikan proses yang mendasarinya. Secara paksa mengakhiri query dan membersihkan semua sumber daya |

422 

423### `WarmQuery`

424 

425Handle yang dikembalikan oleh [`startup()`](#startup). Subprocess sudah dispawn dan diinisialisasi, jadi memanggil `query()` pada handle ini menulis prompt langsung ke proses yang siap tanpa latensi startup.

426 

427```typescript theme={null}

428interface WarmQuery extends AsyncDisposable {

429 query(prompt: string | AsyncIterable<SDKUserMessage>): Query;

430 close(): void;

431}

432```

433 

434#### Metode

435 

436| Metode | Deskripsi |

437| :-------------- | :------------------------------------------------------------------------------------------------------------------------------------- |

438| `query(prompt)` | Kirim prompt ke subprocess yang sudah dipanaskan dan kembalikan [`Query`](#query-object). Hanya dapat dipanggil sekali per `WarmQuery` |

439| `close()` | Tutup subprocess tanpa mengirim prompt. Gunakan ini untuk membuang warm query yang tidak lagi diperlukan |

440 

441`WarmQuery` mengimplementasikan `AsyncDisposable`, jadi dapat digunakan dengan `await using` untuk pembersihan otomatis.

442 

443### `SDKControlInitializeResponse`

444 

445Tipe pengembalian dari `initializationResult()`. Berisi data inisialisasi sesi.

446 

447```typescript theme={null}

448type SDKControlInitializeResponse = {

449 commands: SlashCommand[];

450 agents: AgentInfo[];

451 output_style: string;

452 available_output_styles: string[];

453 models: ModelInfo[];

454 account: AccountInfo;

455 fast_mode_state?: "off" | "cooldown" | "on";

456};

457```

458 

459### `AgentDefinition`

460 

461Konfigurasi untuk subagen yang didefinisikan secara terprogram.

462 

463```typescript theme={null}

464type AgentDefinition = {

465 description: string;

466 tools?: string[];

467 disallowedTools?: string[];

468 prompt: string;

469 model?: string;

470 mcpServers?: AgentMcpServerSpec[];

471 skills?: string[];

472 initialPrompt?: string;

473 maxTurns?: number;

474 background?: boolean;

475 memory?: "user" | "project" | "local";

476 effort?: "low" | "medium" | "high" | "xhigh" | "max" | number;

477 permissionMode?: PermissionMode;

478 criticalSystemReminder_EXPERIMENTAL?: string;

479};

480```

481 

482| Field | Diperlukan | Deskripsi |

483| :------------------------------------ | :--------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

484| `description` | Ya | Deskripsi bahasa alami tentang kapan menggunakan agen ini |

485| `tools` | Tidak | Array nama tool yang diizinkan. Jika dihilangkan, mewarisi semua tool dari parent |

486| `disallowedTools` | Tidak | Array nama tool untuk secara eksplisit tidak izinkan untuk agen ini |

487| `prompt` | Ya | Prompt sistem agen |

488| `model` | Tidak | Penggantian model untuk agen ini. Menerima alias seperti `'sonnet'`, `'opus'`, `'haiku'`, `'inherit'`, atau ID model lengkap. Jika dihilangkan atau `'inherit'`, menggunakan model utama |

489| `mcpServers` | Tidak | Spesifikasi server MCP untuk agen ini |

490| `skills` | Tidak | Array nama skill untuk preload ke konteks agen |

491| `initialPrompt` | Tidak | Auto-submitted sebagai putaran pengguna pertama ketika agen ini berjalan sebagai agen thread utama |

492| `maxTurns` | Tidak | Jumlah maksimum putaran agen (API round-trips) sebelum berhenti |

493| `background` | Tidak | Jalankan agen ini sebagai tugas latar belakang non-blocking ketika dipanggil |

494| `memory` | Tidak | Sumber memori untuk agen ini: `'user'`, `'project'`, atau `'local'` |

495| `effort` | Tidak | Tingkat usaha penalaran untuk agen ini. Menerima tingkat bernama atau integer |

496| `permissionMode` | Tidak | Mode izin untuk eksekusi tool dalam agen ini. Lihat [`PermissionMode`](#permission-mode) |

497| `criticalSystemReminder_EXPERIMENTAL` | Tidak | Eksperimental: Pengingat kritis ditambahkan ke prompt sistem |

498 

499### `AgentMcpServerSpec`

500 

501Menentukan server MCP yang tersedia untuk subagen. Dapat berupa nama server (string yang mereferensikan server dari konfigurasi `mcpServers` parent) atau konfigurasi server inline yang merekam nama server ke config.

502 

503```typescript theme={null}

504type AgentMcpServerSpec = string | Record<string, McpServerConfigForProcessTransport>;

505```

506 

507Di mana `McpServerConfigForProcessTransport` adalah `McpStdioServerConfig | McpSSEServerConfig | McpHttpServerConfig | McpSdkServerConfig`.

508 

509### `SettingSource`

510 

511Mengontrol sumber konfigurasi berbasis filesystem mana yang dimuat pengaturan SDK.

512 

513```typescript theme={null}

514type SettingSource = "user" | "project" | "local";

515```

516 

517| Nilai | Deskripsi | Lokasi |

518| :---------- | :--------------------------------------------- | :---------------------------- |

519| `'user'` | Pengaturan pengguna global | `~/.claude/settings.json` |

520| `'project'` | Pengaturan proyek bersama (version controlled) | `.claude/settings.json` |

521| `'local'` | Pengaturan proyek lokal (gitignored) | `.claude/settings.local.json` |

522 

523#### Perilaku default

524 

525Ketika `settingSources` dihilangkan atau `undefined`, `query()` memuat pengaturan filesystem yang sama seperti CLI Claude Code: pengguna, proyek, dan lokal. Pengaturan kebijakan terkelola dimuat dalam semua kasus. Lihat [Apa yang tidak dikontrol settingSources](/id/agent-sdk/claude-code-features#what-settingsources-does-not-control) untuk input yang dibaca terlepas dari opsi ini, dan cara menonaktifkannya.

526 

527#### Mengapa menggunakan settingSources

528 

529**Nonaktifkan pengaturan filesystem:**

530 

531```typescript theme={null}

532// Jangan muat pengaturan pengguna, proyek, atau lokal dari disk

533const result = query({

534 prompt: "Analyze this code",

535 options: { settingSources: [] }

536});

537```

538 

539**Muat semua pengaturan filesystem secara eksplisit:**

540 

541```typescript theme={null}

542const result = query({

543 prompt: "Analyze this code",

544 options: {

545 settingSources: ["user", "project", "local"] // Muat semua pengaturan

546 }

547});

548```

549 

550**Muat hanya sumber pengaturan tertentu:**

551 

552```typescript theme={null}

553// Muat hanya pengaturan proyek, abaikan pengguna dan lokal

554const result = query({

555 prompt: "Run CI checks",

556 options: {

557 settingSources: ["project"] // Hanya .claude/settings.json

558 }

559});

560```

561 

562**Lingkungan pengujian dan CI:**

563 

564```typescript theme={null}

565// Pastikan perilaku konsisten di CI dengan mengecualikan pengaturan lokal

566const result = query({

567 prompt: "Run tests",

568 options: {

569 settingSources: ["project"], // Hanya pengaturan bersama tim

570 permissionMode: "bypassPermissions"

571 }

572});

573```

574 

575**Aplikasi SDK-only:**

576 

577```typescript theme={null}

578// Tentukan semuanya secara terprogram.

579// Lewatkan [] untuk opt out dari sumber pengaturan filesystem.

580const result = query({

581 prompt: "Review this PR",

582 options: {

583 settingSources: [],

584 agents: {

585 /* ... */

586 },

587 mcpServers: {

588 /* ... */

589 },

590 allowedTools: ["Read", "Grep", "Glob"]

591 }

592});

593```

594 

595**Memuat instruksi proyek CLAUDE.md:**

596 

597```typescript theme={null}

598// Muat pengaturan proyek untuk menyertakan file CLAUDE.md

599const result = query({

600 prompt: "Add a new feature following project conventions",

601 options: {

602 systemPrompt: {

603 type: "preset",

604 preset: "claude_code" // Gunakan prompt sistem Claude Code

605 },

606 settingSources: ["project"], // Memuat CLAUDE.md dari direktori proyek

607 allowedTools: ["Read", "Write", "Edit"]

608 }

609});

610```

611 

612#### Preseden pengaturan

613 

614Ketika beberapa sumber dimuat, pengaturan digabungkan dengan preseden ini (tertinggi ke terendah):

615 

6161. Pengaturan lokal (`.claude/settings.local.json`)

6172. Pengaturan proyek (`.claude/settings.json`)

6183. Pengaturan pengguna (`~/.claude/settings.json`)

619 

620Opsi terprogram seperti `agents` dan `allowedTools` mengganti pengaturan filesystem pengguna, proyek, dan lokal. Pengaturan kebijakan terkelola mengambil preseden atas opsi terprogram.

621 

622### `PermissionMode`

623 

624```typescript theme={null}

625type PermissionMode =

626 | "default" // Perilaku izin standar

627 | "acceptEdits" // Auto-accept edit file

628 | "bypassPermissions" // Bypass semua pemeriksaan izin

629 | "plan" // Mode perencanaan - tidak ada eksekusi

630 | "dontAsk" // Jangan prompt untuk izin, tolak jika tidak pre-approved

631 | "auto"; // Gunakan classifier model untuk approve atau deny setiap tool call

632```

633 

634### `CanUseTool`

635 

636Tipe fungsi izin kustom untuk mengontrol penggunaan tool.

637 

638```typescript theme={null}

639type CanUseTool = (

640 toolName: string,

641 input: Record<string, unknown>,

642 options: {

643 signal: AbortSignal;

644 suggestions?: PermissionUpdate[];

645 blockedPath?: string;

646 decisionReason?: string;

647 toolUseID: string;

648 agentID?: string;

649 }

650) => Promise<PermissionResult>;

651```

652 

653| Opsi | Tipe | Deskripsi |

654| :--------------- | :------------------------------------------- | :------------------------------------------------------------------------ |

655| `signal` | `AbortSignal` | Signaled jika operasi harus dibatalkan |

656| `suggestions` | [`PermissionUpdate`](#permission-update)`[]` | Saran pembaruan izin sehingga pengguna tidak diprompt lagi untuk tool ini |

657| `blockedPath` | `string` | Jalur file yang memicu permintaan izin, jika berlaku |

658| `decisionReason` | `string` | Menjelaskan mengapa permintaan izin ini dipicu |

659| `toolUseID` | `string` | Pengenal unik untuk tool call spesifik ini dalam pesan asisten |

660| `agentID` | `string` | Jika berjalan dalam sub-agen, ID sub-agen |

661 

662### `PermissionResult`

663 

664Hasil pemeriksaan izin.

665 

666```typescript theme={null}

667type PermissionResult =

668 | {

669 behavior: "allow";

670 updatedInput?: Record<string, unknown>;

671 updatedPermissions?: PermissionUpdate[];

672 toolUseID?: string;

673 }

674 | {

675 behavior: "deny";

676 message: string;

677 interrupt?: boolean;

678 toolUseID?: string;

679 };

680```

681 

682### `ToolConfig`

683 

684Konfigurasi untuk perilaku tool bawaan.

685 

686```typescript theme={null}

687type ToolConfig = {

688 askUserQuestion?: {

689 previewFormat?: "markdown" | "html";

690 };

691};

692```

693 

694| Field | Tipe | Deskripsi |

695| :------------------------------ | :--------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

696| `askUserQuestion.previewFormat` | `'markdown' \| 'html'` | Opt-in ke field `preview` pada opsi [`AskUserQuestion`](/id/agent-sdk/user-input#question-format) dan atur format kontennya. Ketika tidak diatur, Claude tidak mengirimkan preview |

697 

698### `McpServerConfig`

699 

700Konfigurasi untuk server MCP.

701 

702```typescript theme={null}

703type McpServerConfig =

704 | McpStdioServerConfig

705 | McpSSEServerConfig

706 | McpHttpServerConfig

707 | McpSdkServerConfigWithInstance;

708```

709 

710#### `McpStdioServerConfig`

711 

712```typescript theme={null}

713type McpStdioServerConfig = {

714 type?: "stdio";

715 command: string;

716 args?: string[];

717 env?: Record<string, string>;

718};

719```

720 

721#### `McpSSEServerConfig`

722 

723```typescript theme={null}

724type McpSSEServerConfig = {

725 type: "sse";

726 url: string;

727 headers?: Record<string, string>;

728};

729```

730 

731#### `McpHttpServerConfig`

732 

733```typescript theme={null}

734type McpHttpServerConfig = {

735 type: "http";

736 url: string;

737 headers?: Record<string, string>;

738};

739```

740 

741#### `McpSdkServerConfigWithInstance`

742 

743```typescript theme={null}

744type McpSdkServerConfigWithInstance = {

745 type: "sdk";

746 name: string;

747 instance: McpServer;

748};

749```

750 

751#### `McpClaudeAIProxyServerConfig`

752 

753```typescript theme={null}

754type McpClaudeAIProxyServerConfig = {

755 type: "claudeai-proxy";

756 url: string;

757 id: string;

758};

759```

760 

761### `SdkPluginConfig`

762 

763Konfigurasi untuk memuat plugin di SDK.

764 

765```typescript theme={null}

766type SdkPluginConfig = {

767 type: "local";

768 path: string;

769};

770```

771 

772| Field | Tipe | Deskripsi |

773| :----- | :-------- | :---------------------------------------------------------- |

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

775| `path` | `string` | Jalur absolut atau relatif ke direktori plugin |

776 

777**Contoh:**

778 

779```typescript theme={null}

780plugins: [

781 { type: "local", path: "./my-plugin" },

782 { type: "local", path: "/absolute/path/to/plugin" }

783];

784```

785 

786Untuk informasi lengkap tentang membuat dan menggunakan plugin, lihat [Plugins](/id/agent-sdk/plugins).

787 

788## Tipe Pesan

789 

790### `SDKMessage`

791 

792Tipe union dari semua pesan yang mungkin dikembalikan oleh query.

793 

794```typescript theme={null}

795type SDKMessage =

796 | SDKAssistantMessage

797 | SDKUserMessage

798 | SDKUserMessageReplay

799 | SDKResultMessage

800 | SDKSystemMessage

801 | SDKPartialAssistantMessage

802 | SDKCompactBoundaryMessage

803 | SDKStatusMessage

804 | SDKLocalCommandOutputMessage

805 | SDKHookStartedMessage

806 | SDKHookProgressMessage

807 | SDKHookResponseMessage

808 | SDKPluginInstallMessage

809 | SDKToolProgressMessage

810 | SDKAuthStatusMessage

811 | SDKTaskNotificationMessage

812 | SDKTaskStartedMessage

813 | SDKTaskProgressMessage

814 | SDKTaskUpdatedMessage

815 | SDKFilesPersistedEvent

816 | SDKToolUseSummaryMessage

817 | SDKRateLimitEvent

818 | SDKPromptSuggestionMessage;

819```

820 

821### `SDKAssistantMessage`

822 

823Pesan respons asisten.

824 

825```typescript theme={null}

826type SDKAssistantMessage = {

827 type: "assistant";

828 uuid: UUID;

829 session_id: string;

830 message: BetaMessage; // Dari Anthropic SDK

831 parent_tool_use_id: string | null;

832 error?: SDKAssistantMessageError;

833};

834```

835 

836Field `message` adalah [`BetaMessage`](https://platform.claude.com/docs/id/api/messages/create) dari Anthropic SDK. Ini mencakup field seperti `id`, `content`, `model`, `stop_reason`, dan `usage`.

837 

838`SDKAssistantMessageError` adalah salah satu dari: `'authentication_failed'`, `'oauth_org_not_allowed'`, `'billing_error'`, `'rate_limit'`, `'invalid_request'`, `'server_error'`, `'max_output_tokens'`, atau `'unknown'`.

839 

840### `SDKUserMessage`

841 

842Pesan input pengguna.

843 

844```typescript theme={null}

845type SDKUserMessage = {

846 type: "user";

847 uuid?: UUID;

848 session_id: string;

849 message: MessageParam; // Dari Anthropic SDK

850 parent_tool_use_id: string | null;

851 isSynthetic?: boolean;

852 shouldQuery?: boolean;

853 tool_use_result?: unknown;

854 origin?: SDKMessageOrigin;

855};

856```

857 

858Atur `shouldQuery` ke `false` untuk menambahkan pesan ke transkrip tanpa memicu putaran asisten. Pesan ditahan dan digabungkan ke pesan pengguna berikutnya yang memicu putaran. Gunakan ini untuk menyuntikkan konteks, seperti output perintah yang Anda jalankan out of band, tanpa menghabiskan panggilan model.

859 

860### `SDKUserMessageReplay`

861 

862Pesan pengguna yang diputar ulang dengan UUID yang diperlukan.

863 

864```typescript theme={null}

865type SDKUserMessageReplay = {

866 type: "user";

867 uuid: UUID;

868 session_id: string;

869 message: MessageParam;

870 parent_tool_use_id: string | null;

871 isSynthetic?: boolean;

872 tool_use_result?: unknown;

873 origin?: SDKMessageOrigin;

874 isReplay: true;

875};

876```

877 

878### `SDKResultMessage`

879 

880Pesan hasil akhir.

881 

882```typescript theme={null}

883type SDKResultMessage =

884 | {

885 type: "result";

886 subtype: "success";

887 uuid: UUID;

888 session_id: string;

889 duration_ms: number;

890 duration_api_ms: number;

891 is_error: boolean;

892 num_turns: number;

893 result: string;

894 stop_reason: string | null;

895 total_cost_usd: number;

896 usage: NonNullableUsage;

897 modelUsage: { [modelName: string]: ModelUsage };

898 permission_denials: SDKPermissionDenial[];

899 structured_output?: unknown;

900 deferred_tool_use?: { id: string; name: string; input: Record<string, unknown> };

901 origin?: SDKMessageOrigin;

902 }

903 | {

904 type: "result";

905 subtype:

906 | "error_max_turns"

907 | "error_during_execution"

908 | "error_max_budget_usd"

909 | "error_max_structured_output_retries";

910 uuid: UUID;

911 session_id: string;

912 duration_ms: number;

913 duration_api_ms: number;

914 is_error: boolean;

915 num_turns: number;

916 stop_reason: string | null;

917 total_cost_usd: number;

918 usage: NonNullableUsage;

919 modelUsage: { [modelName: string]: ModelUsage };

920 permission_denials: SDKPermissionDenial[];

921 errors: string[];

922 origin?: SDKMessageOrigin;

923 };

924```

925 

926Field `origin` meneruskan [`SDKMessageOrigin`](#sdkmessageorigin) dari pesan pengguna yang memicu hasil ini. Ketika tugas latar belakang selesai dan SDK menyuntikkan putaran lanjutan sintetis, `SDKResultMessage` yang dihasilkan membawa `origin: { kind: "task-notification" }`. Periksa field ini untuk membedakan hasil yang menjawab prompt Anda dari hasil yang dipancarkan untuk lanjutan tugas latar belakang, sehingga Anda dapat merutekan atau menekan yang terakhir. Field ini tidak ada untuk hasil yang dipancarkan sebelum putaran pengguna apa pun, seperti kesalahan startup.

927 

928Ketika hook `PreToolUse` mengembalikan `permissionDecision: "defer"`, hasilnya memiliki `stop_reason: "tool_deferred"` dan `deferred_tool_use` membawa `id`, `name`, dan `input` tool yang tertunda. Baca field ini untuk menampilkan permintaan di UI Anda sendiri, kemudian lanjutkan dengan `session_id` yang sama untuk melanjutkan. Lihat [Defer a tool call for later](/id/hooks#defer-a-tool-call-for-later) untuk perjalanan putaran lengkap.

929 

930### `SDKSystemMessage`

931 

932Pesan inisialisasi sistem.

933 

934```typescript theme={null}

935type SDKSystemMessage = {

936 type: "system";

937 subtype: "init";

938 uuid: UUID;

939 session_id: string;

940 agents?: string[];

941 apiKeySource: ApiKeySource;

942 betas?: string[];

943 claude_code_version: string;

944 cwd: string;

945 tools: string[];

946 mcp_servers: {

947 name: string;

948 status: string;

949 }[];

950 model: string;

951 permissionMode: PermissionMode;

952 slash_commands: string[];

953 output_style: string;

954 skills: string[];

955 plugins: { name: string; path: string }[];

956};

957```

958 

959### `SDKPartialAssistantMessage`

960 

961Pesan parsial streaming (hanya ketika `includePartialMessages` adalah true).

962 

963```typescript theme={null}

964type SDKPartialAssistantMessage = {

965 type: "stream_event";

966 event: BetaRawMessageStreamEvent; // Dari Anthropic SDK

967 parent_tool_use_id: string | null;

968 uuid: UUID;

969 session_id: string;

970};

971```

972 

973### `SDKCompactBoundaryMessage`

974 

975Pesan yang menunjukkan batas pemadatan percakapan.

976 

977```typescript theme={null}

978type SDKCompactBoundaryMessage = {

979 type: "system";

980 subtype: "compact_boundary";

981 uuid: UUID;

982 session_id: string;

983 compact_metadata: {

984 trigger: "manual" | "auto";

985 pre_tokens: number;

986 };

987};

988```

989 

990### `SDKPluginInstallMessage`

991 

992Event kemajuan instalasi plugin. Dipancarkan ketika [`CLAUDE_CODE_SYNC_PLUGIN_INSTALL`](/id/env-vars) diatur, sehingga aplikasi Agent SDK Anda dapat melacak instalasi plugin marketplace sebelum putaran pertama. Status `started` dan `completed` membatasi keseluruhan instalasi. Status `installed` dan `failed` melaporkan marketplace individual dan menyertakan `name`.

993 

994```typescript theme={null}

995type SDKPluginInstallMessage = {

996 type: "system";

997 subtype: "plugin_install";

998 status: "started" | "installed" | "failed" | "completed";

999 name?: string;

1000 error?: string;

1001 uuid: UUID;

1002 session_id: string;

1003};

1004```

1005 

1006### `SDKPermissionDenial`

1007 

1008Informasi tentang penggunaan tool yang ditolak.

1009 

1010```typescript theme={null}

1011type SDKPermissionDenial = {

1012 tool_name: string;

1013 tool_use_id: string;

1014 tool_input: Record<string, unknown>;

1015};

1016```

1017 

1018### `SDKMessageOrigin`

1019 

1020Asal-usul pesan dengan peran pengguna. Ini muncul sebagai `origin` pada [`SDKUserMessage`](#sdkusermessage) dan diteruskan ke [`SDKResultMessage`](#sdkresultmessage) yang sesuai sehingga Anda dapat mengetahui apa yang memicu putaran tertentu.

1021 

1022```typescript theme={null}

1023type SDKMessageOrigin =

1024 | { kind: "human" }

1025 | { kind: "channel"; server: string }

1026 | { kind: "peer"; from: string; name?: string }

1027 | { kind: "task-notification" }

1028 | { kind: "coordinator" };

1029```

1030 

1031| `kind` | Arti |

1032| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |

1033| `human` | Input langsung dari pengguna akhir. Pada pesan pengguna, `origin` yang tidak ada juga berarti input manusia. |

1034| `channel` | Pesan yang tiba di [channel](/id/channels). `server` adalah nama server MCP sumber. |

1035| `peer` | Pesan dari sesi agen lain melalui `SendMessage`. `from` adalah alamat pengirim; `name` adalah nama tampilan pengirim ketika tersedia. |

1036| `task-notification` | Putaran sintetis yang disuntikkan setelah tugas latar belakang selesai. Lihat [`SDKTaskNotificationMessage`](#sdktasknotificationmessage). |

1037| `coordinator` | Pesan dari koordinator tim dalam [tim agen](/id/agent-teams). |

1038 

1039## Tipe Hook

1040 

1041Untuk panduan komprehensif tentang menggunakan hooks dengan contoh dan pola umum, lihat [panduan Hooks](/id/agent-sdk/hooks).

1042 

1043### `HookEvent`

1044 

1045Event hook yang tersedia.

1046 

1047```typescript theme={null}

1048type HookEvent =

1049 | "PreToolUse"

1050 | "PostToolUse"

1051 | "PostToolUseFailure"

1052 | "PostToolBatch"

1053 | "Notification"

1054 | "UserPromptSubmit"

1055 | "SessionStart"

1056 | "SessionEnd"

1057 | "Stop"

1058 | "SubagentStart"

1059 | "SubagentStop"

1060 | "PreCompact"

1061 | "PermissionRequest"

1062 | "Setup"

1063 | "TeammateIdle"

1064 | "TaskCompleted"

1065 | "ConfigChange"

1066 | "WorktreeCreate"

1067 | "WorktreeRemove";

1068```

1069 

1070### `HookCallback`

1071 

1072Tipe fungsi callback hook.

1073 

1074```typescript theme={null}

1075type HookCallback = (

1076 input: HookInput, // Union dari semua tipe input hook

1077 toolUseID: string | undefined,

1078 options: { signal: AbortSignal }

1079) => Promise<HookJSONOutput>;

1080```

1081 

1082### `HookCallbackMatcher`

1083 

1084Konfigurasi hook dengan matcher opsional.

1085 

1086```typescript theme={null}

1087interface HookCallbackMatcher {

1088 matcher?: string;

1089 hooks: HookCallback[];

1090 timeout?: number; // Timeout dalam detik untuk semua hook dalam matcher ini

1091}

1092```

1093 

1094### `HookInput`

1095 

1096Tipe union dari semua tipe input hook.

1097 

1098```typescript theme={null}

1099type HookInput =

1100 | PreToolUseHookInput

1101 | PostToolUseHookInput

1102 | PostToolUseFailureHookInput

1103 | PostToolBatchHookInput

1104 | NotificationHookInput

1105 | UserPromptSubmitHookInput

1106 | SessionStartHookInput

1107 | SessionEndHookInput

1108 | StopHookInput

1109 | SubagentStartHookInput

1110 | SubagentStopHookInput

1111 | PreCompactHookInput

1112 | PermissionRequestHookInput

1113 | SetupHookInput

1114 | TeammateIdleHookInput

1115 | TaskCompletedHookInput

1116 | ConfigChangeHookInput

1117 | WorktreeCreateHookInput

1118 | WorktreeRemoveHookInput;

1119```

1120 

1121### `BaseHookInput`

1122 

1123Antarmuka dasar yang diperluas oleh semua tipe input hook.

1124 

1125```typescript theme={null}

1126type BaseHookInput = {

1127 session_id: string;

1128 transcript_path: string;

1129 cwd: string;

1130 permission_mode?: string;

1131 agent_id?: string;

1132 agent_type?: string;

1133};

1134```

1135 

1136#### `PreToolUseHookInput`

1137 

1138```typescript theme={null}

1139type PreToolUseHookInput = BaseHookInput & {

1140 hook_event_name: "PreToolUse";

1141 tool_name: string;

1142 tool_input: unknown;

1143 tool_use_id: string;

1144};

1145```

1146 

1147#### `PostToolUseHookInput`

1148 

1149```typescript theme={null}

1150type PostToolUseHookInput = BaseHookInput & {

1151 hook_event_name: "PostToolUse";

1152 tool_name: string;

1153 tool_input: unknown;

1154 tool_response: unknown;

1155 tool_use_id: string;

1156 duration_ms?: number;

1157};

1158```

1159 

1160#### `PostToolUseFailureHookInput`

1161 

1162```typescript theme={null}

1163type PostToolUseFailureHookInput = BaseHookInput & {

1164 hook_event_name: "PostToolUseFailure";

1165 tool_name: string;

1166 tool_input: unknown;

1167 tool_use_id: string;

1168 error: string;

1169 is_interrupt?: boolean;

1170 duration_ms?: number;

1171};

1172```

1173 

1174#### `PostToolBatchHookInput`

1175 

1176Dipicu sekali setelah setiap pemanggilan alat dalam batch telah diselesaikan, sebelum permintaan model berikutnya. `tool_response` membawa konten `tool_result` yang diserialisasi yang dilihat model; bentuknya berbeda dari objek `Output` terstruktur dari `PostToolUseHookInput`.

1177 

1178```typescript theme={null}

1179type PostToolBatchHookInput = BaseHookInput & {

1180 hook_event_name: "PostToolBatch";

1181 tool_calls: PostToolBatchToolCall[];

1182};

1183 

1184type PostToolBatchToolCall = {

1185 tool_name: string;

1186 tool_input: unknown;

1187 tool_use_id: string;

1188 tool_response?: unknown;

1189};

1190```

1191 

1192#### `NotificationHookInput`

1193 

1194```typescript theme={null}

1195type NotificationHookInput = BaseHookInput & {

1196 hook_event_name: "Notification";

1197 message: string;

1198 title?: string;

1199 notification_type: string;

1200};

1201```

1202 

1203#### `UserPromptSubmitHookInput`

1204 

1205```typescript theme={null}

1206type UserPromptSubmitHookInput = BaseHookInput & {

1207 hook_event_name: "UserPromptSubmit";

1208 prompt: string;

1209};

1210```

1211 

1212#### `SessionStartHookInput`

1213 

1214```typescript theme={null}

1215type SessionStartHookInput = BaseHookInput & {

1216 hook_event_name: "SessionStart";

1217 source: "startup" | "resume" | "clear" | "compact";

1218 agent_type?: string;

1219 model?: string;

1220};

1221```

1222 

1223#### `SessionEndHookInput`

1224 

1225```typescript theme={null}

1226type SessionEndHookInput = BaseHookInput & {

1227 hook_event_name: "SessionEnd";

1228 reason: ExitReason; // String dari array EXIT_REASONS

1229};

1230```

1231 

1232#### `StopHookInput`

1233 

1234```typescript theme={null}

1235type StopHookInput = BaseHookInput & {

1236 hook_event_name: "Stop";

1237 stop_hook_active: boolean;

1238 last_assistant_message?: string;

1239};

1240```

1241 

1242#### `SubagentStartHookInput`

1243 

1244```typescript theme={null}

1245type SubagentStartHookInput = BaseHookInput & {

1246 hook_event_name: "SubagentStart";

1247 agent_id: string;

1248 agent_type: string;

1249};

1250```

1251 

1252#### `SubagentStopHookInput`

1253 

1254```typescript theme={null}

1255type SubagentStopHookInput = BaseHookInput & {

1256 hook_event_name: "SubagentStop";

1257 stop_hook_active: boolean;

1258 agent_id: string;

1259 agent_transcript_path: string;

1260 agent_type: string;

1261 last_assistant_message?: string;

1262};

1263```

1264 

1265#### `PreCompactHookInput`

1266 

1267```typescript theme={null}

1268type PreCompactHookInput = BaseHookInput & {

1269 hook_event_name: "PreCompact";

1270 trigger: "manual" | "auto";

1271 custom_instructions: string | null;

1272};

1273```

1274 

1275#### `PermissionRequestHookInput`

1276 

1277```typescript theme={null}

1278type PermissionRequestHookInput = BaseHookInput & {

1279 hook_event_name: "PermissionRequest";

1280 tool_name: string;

1281 tool_input: unknown;

1282 permission_suggestions?: PermissionUpdate[];

1283};

1284```

1285 

1286#### `SetupHookInput`

1287 

1288```typescript theme={null}

1289type SetupHookInput = BaseHookInput & {

1290 hook_event_name: "Setup";

1291 trigger: "init" | "maintenance";

1292};

1293```

1294 

1295#### `TeammateIdleHookInput`

1296 

1297```typescript theme={null}

1298type TeammateIdleHookInput = BaseHookInput & {

1299 hook_event_name: "TeammateIdle";

1300 teammate_name: string;

1301 team_name: string;

1302};

1303```

1304 

1305#### `TaskCompletedHookInput`

1306 

1307```typescript theme={null}

1308type TaskCompletedHookInput = BaseHookInput & {

1309 hook_event_name: "TaskCompleted";

1310 task_id: string;

1311 task_subject: string;

1312 task_description?: string;

1313 teammate_name?: string;

1314 team_name?: string;

1315};

1316```

1317 

1318#### `ConfigChangeHookInput`

1319 

1320```typescript theme={null}

1321type ConfigChangeHookInput = BaseHookInput & {

1322 hook_event_name: "ConfigChange";

1323 source:

1324 | "user_settings"

1325 | "project_settings"

1326 | "local_settings"

1327 | "policy_settings"

1328 | "skills";

1329 file_path?: string;

1330};

1331```

1332 

1333#### `WorktreeCreateHookInput`

1334 

1335```typescript theme={null}

1336type WorktreeCreateHookInput = BaseHookInput & {

1337 hook_event_name: "WorktreeCreate";

1338 name: string;

1339};

1340```

1341 

1342#### `WorktreeRemoveHookInput`

1343 

1344```typescript theme={null}

1345type WorktreeRemoveHookInput = BaseHookInput & {

1346 hook_event_name: "WorktreeRemove";

1347 worktree_path: string;

1348};

1349```

1350 

1351### `HookJSONOutput`

1352 

1353Nilai pengembalian hook.

1354 

1355```typescript theme={null}

1356type HookJSONOutput = AsyncHookJSONOutput | SyncHookJSONOutput;

1357```

1358 

1359#### `AsyncHookJSONOutput`

1360 

1361```typescript theme={null}

1362type AsyncHookJSONOutput = {

1363 async: true;

1364 asyncTimeout?: number;

1365};

1366```

1367 

1368#### `SyncHookJSONOutput`

1369 

1370```typescript theme={null}

1371type SyncHookJSONOutput = {

1372 continue?: boolean;

1373 suppressOutput?: boolean;

1374 stopReason?: string;

1375 decision?: "approve" | "block";

1376 systemMessage?: string;

1377 reason?: string;

1378 hookSpecificOutput?:

1379 | {

1380 hookEventName: "PreToolUse";

1381 permissionDecision?: "allow" | "deny" | "ask" | "defer";

1382 permissionDecisionReason?: string;

1383 updatedInput?: Record<string, unknown>;

1384 additionalContext?: string;

1385 }

1386 | {

1387 hookEventName: "UserPromptSubmit";

1388 additionalContext?: string;

1389 }

1390 | {

1391 hookEventName: "SessionStart";

1392 additionalContext?: string;

1393 }

1394 | {

1395 hookEventName: "Setup";

1396 additionalContext?: string;

1397 }

1398 | {

1399 hookEventName: "SubagentStart";

1400 additionalContext?: string;

1401 }

1402 | {

1403 hookEventName: "PostToolUse";

1404 additionalContext?: string;

1405 updatedToolOutput?: unknown;

1406 /** @deprecated Gunakan `updatedToolOutput`, yang berfungsi untuk semua alat. */

1407 updatedMCPToolOutput?: unknown;

1408 }

1409 | {

1410 hookEventName: "PostToolUseFailure";

1411 additionalContext?: string;

1412 }

1413 | {

1414 hookEventName: "PostToolBatch";

1415 additionalContext?: string;

1416 }

1417 | {

1418 hookEventName: "Notification";

1419 additionalContext?: string;

1420 }

1421 | {

1422 hookEventName: "PermissionRequest";

1423 decision:

1424 | {

1425 behavior: "allow";

1426 updatedInput?: Record<string, unknown>;

1427 updatedPermissions?: PermissionUpdate[];

1428 }

1429 | {

1430 behavior: "deny";

1431 message?: string;

1432 interrupt?: boolean;

1433 };

1434 };

1435};

1436```

1437 

1438## Tipe Input Tool

1439 

1440Dokumentasi skema input untuk semua tool Claude Code bawaan. Tipe ini dieksport dari `@anthropic-ai/claude-agent-sdk` dan dapat digunakan untuk interaksi tool yang aman tipe.

1441 

1442### `ToolInputSchemas`

1443 

1444Union dari semua tipe input tool, dieksport dari `@anthropic-ai/claude-agent-sdk`.

1445 

1446```typescript theme={null}

1447type ToolInputSchemas =

1448 | AgentInput

1449 | AskUserQuestionInput

1450 | BashInput

1451 | TaskOutputInput

1452 | EnterWorktreeInput

1453 | ExitPlanModeInput

1454 | FileEditInput

1455 | FileReadInput

1456 | FileWriteInput

1457 | GlobInput

1458 | GrepInput

1459 | ListMcpResourcesInput

1460 | McpInput

1461 | MonitorInput

1462 | NotebookEditInput

1463 | ReadMcpResourceInput

1464 | SubscribeMcpResourceInput

1465 | SubscribePollingInput

1466 | TaskStopInput

1467 | TodoWriteInput

1468 | UnsubscribeMcpResourceInput

1469 | UnsubscribePollingInput

1470 | WebFetchInput

1471 | WebSearchInput;

1472```

1473 

1474### Agent

1475 

1476**Nama tool:** `Agent` (sebelumnya `Task`, yang masih diterima sebagai alias)

1477 

1478```typescript theme={null}

1479type AgentInput = {

1480 description: string;

1481 prompt: string;

1482 subagent_type: string;

1483 model?: "sonnet" | "opus" | "haiku";

1484 resume?: string;

1485 run_in_background?: boolean;

1486 max_turns?: number;

1487 name?: string;

1488 team_name?: string;

1489 mode?: "acceptEdits" | "bypassPermissions" | "default" | "dontAsk" | "plan";

1490 isolation?: "worktree";

1491};

1492```

1493 

1494Meluncurkan agen baru untuk menangani tugas kompleks multi-langkah secara otonom.

1495 

1496### AskUserQuestion

1497 

1498**Nama tool:** `AskUserQuestion`

1499 

1500```typescript theme={null}

1501type AskUserQuestionInput = {

1502 questions: Array<{

1503 question: string;

1504 header: string;

1505 options: Array<{ label: string; description: string; preview?: string }>;

1506 multiSelect: boolean;

1507 }>;

1508};

1509```

1510 

1511Menanyakan pertanyaan klarifikasi kepada pengguna selama eksekusi. Lihat [Tangani persetujuan dan input pengguna](/id/agent-sdk/user-input#handle-clarifying-questions) untuk detail penggunaan.

1512 

1513### Bash

1514 

1515**Nama tool:** `Bash`

1516 

1517```typescript theme={null}

1518type BashInput = {

1519 command: string;

1520 timeout?: number;

1521 description?: string;

1522 run_in_background?: boolean;

1523 dangerouslyDisableSandbox?: boolean;

1524};

1525```

1526 

1527Mengeksekusi perintah bash dalam sesi shell persisten dengan timeout opsional dan eksekusi latar belakang.

1528 

1529### Monitor

1530 

1531**Nama tool:** `Monitor`

1532 

1533```typescript theme={null}

1534type MonitorInput = {

1535 command: string;

1536 description: string;

1537 timeout_ms?: number;

1538 persistent?: boolean;

1539};

1540```

1541 

1542Menjalankan skrip latar belakang dan mengirimkan setiap baris stdout ke Claude sebagai event sehingga dapat bereaksi tanpa polling. Atur `persistent: true` untuk watch panjang sesi seperti log tails. Monitor mengikuti aturan izin yang sama seperti Bash. Lihat [referensi tool Monitor](/id/tools-reference#monitor-tool) untuk perilaku dan ketersediaan provider.

1543 

1544### TaskOutput

1545 

1546**Nama tool:** `TaskOutput`

1547 

1548```typescript theme={null}

1549type TaskOutputInput = {

1550 task_id: string;

1551 block: boolean;

1552 timeout: number;

1553};

1554```

1555 

1556Mengambil output dari tugas latar belakang yang sedang berjalan atau selesai.

1557 

1558### Edit

1559 

1560**Nama tool:** `Edit`

1561 

1562```typescript theme={null}

1563type FileEditInput = {

1564 file_path: string;

1565 old_string: string;

1566 new_string: string;

1567 replace_all?: boolean;

1568};

1569```

1570 

1571Melakukan penggantian string yang tepat dalam file.

1572 

1573### Read

1574 

1575**Nama tool:** `Read`

1576 

1577```typescript theme={null}

1578type FileReadInput = {

1579 file_path: string;

1580 offset?: number;

1581 limit?: number;

1582 pages?: string;

1583};

1584```

1585 

1586Membaca file dari filesystem lokal, termasuk teks, gambar, PDF, dan notebook Jupyter. Gunakan `pages` untuk rentang halaman PDF (misalnya, `"1-5"`).

1587 

1588### Write

1589 

1590**Nama tool:** `Write`

1591 

1592```typescript theme={null}

1593type FileWriteInput = {

1594 file_path: string;

1595 content: string;

1596};

1597```

1598 

1599Menulis file ke filesystem lokal, menimpa jika ada.

1600 

1601### Glob

1602 

1603**Nama tool:** `Glob`

1604 

1605```typescript theme={null}

1606type GlobInput = {

1607 pattern: string;

1608 path?: string;

1609};

1610```

1611 

1612Pencocokan pola file cepat yang bekerja dengan ukuran codebase apa pun.

1613 

1614### Grep

1615 

1616**Nama tool:** `Grep`

1617 

1618```typescript theme={null}

1619type GrepInput = {

1620 pattern: string;

1621 path?: string;

1622 glob?: string;

1623 type?: string;

1624 output_mode?: "content" | "files_with_matches" | "count";

1625 "-i"?: boolean;

1626 "-n"?: boolean;

1627 "-B"?: number;

1628 "-A"?: number;

1629 "-C"?: number;

1630 context?: number;

1631 head_limit?: number;

1632 offset?: number;

1633 multiline?: boolean;

1634};

1635```

1636 

1637Tool pencarian yang kuat dibangun di atas ripgrep dengan dukungan regex.

1638 

1639### TaskStop

1640 

1641**Nama tool:** `TaskStop`

1642 

1643```typescript theme={null}

1644type TaskStopInput = {

1645 task_id?: string;

1646 shell_id?: string; // Deprecated: gunakan task_id

1647};

1648```

1649 

1650Menghentikan tugas latar belakang atau shell yang sedang berjalan berdasarkan ID.

1651 

1652### NotebookEdit

1653 

1654**Nama tool:** `NotebookEdit`

1655 

1656```typescript theme={null}

1657type NotebookEditInput = {

1658 notebook_path: string;

1659 cell_id?: string;

1660 new_source: string;

1661 cell_type?: "code" | "markdown";

1662 edit_mode?: "replace" | "insert" | "delete";

1663};

1664```

1665 

1666Mengedit sel dalam file notebook Jupyter.

1667 

1668### WebFetch

1669 

1670**Nama tool:** `WebFetch`

1671 

1672```typescript theme={null}

1673type WebFetchInput = {

1674 url: string;

1675 prompt: string;

1676};

1677```

1678 

1679Mengambil konten dari URL dan memprosesnya dengan model AI.

1680 

1681### WebSearch

1682 

1683**Nama tool:** `WebSearch`

1684 

1685```typescript theme={null}

1686type WebSearchInput = {

1687 query: string;

1688 allowed_domains?: string[];

1689 blocked_domains?: string[];

1690};

1691```

1692 

1693Mencari web dan mengembalikan hasil yang diformat.

1694 

1695### TodoWrite

1696 

1697**Nama tool:** `TodoWrite`

1698 

1699```typescript theme={null}

1700type TodoWriteInput = {

1701 todos: Array<{

1702 content: string;

1703 status: "pending" | "in_progress" | "completed";

1704 activeForm: string;

1705 }>;

1706};

1707```

1708 

1709Membuat dan mengelola daftar tugas terstruktur untuk melacak kemajuan.

1710 

1711### ExitPlanMode

1712 

1713**Nama tool:** `ExitPlanMode`

1714 

1715```typescript theme={null}

1716type ExitPlanModeInput = {

1717 allowedPrompts?: Array<{

1718 tool: "Bash";

1719 prompt: string;

1720 }>;

1721};

1722```

1723 

1724Keluar dari mode perencanaan. Secara opsional menentukan izin berbasis prompt yang diperlukan untuk mengimplementasikan rencana.

1725 

1726### ListMcpResources

1727 

1728**Nama tool:** `ListMcpResources`

1729 

1730```typescript theme={null}

1731type ListMcpResourcesInput = {

1732 server?: string;

1733};

1734```

1735 

1736Membuat daftar sumber daya MCP yang tersedia dari server yang terhubung.

1737 

1738### ReadMcpResource

1739 

1740**Nama tool:** `ReadMcpResource`

1741 

1742```typescript theme={null}

1743type ReadMcpResourceInput = {

1744 server: string;

1745 uri: string;

1746};

1747```

1748 

1749Membaca sumber daya MCP tertentu dari server.

1750 

1751### EnterWorktree

1752 

1753**Nama tool:** `EnterWorktree`

1754 

1755```typescript theme={null}

1756type EnterWorktreeInput = {

1757 name?: string;

1758 path?: string;

1759};

1760```

1761 

1762Membuat dan memasuki worktree git sementara untuk pekerjaan terisolasi. Lewatkan `path` untuk beralih ke worktree yang ada dari repositori saat ini alih-alih membuat yang baru. `name` dan `path` saling eksklusif.

1763 

1764## Tipe Output Tool

1765 

1766Dokumentasi skema output untuk semua tool Claude Code bawaan. Tipe ini dieksport dari `@anthropic-ai/claude-agent-sdk` dan mewakili data respons aktual yang dikembalikan oleh setiap tool.

1767 

1768### `ToolOutputSchemas`

1769 

1770Union dari semua tipe output tool.

1771 

1772```typescript theme={null}

1773type ToolOutputSchemas =

1774 | AgentOutput

1775 | AskUserQuestionOutput

1776 | BashOutput

1777 | EnterWorktreeOutput

1778 | ExitPlanModeOutput

1779 | FileEditOutput

1780 | FileReadOutput

1781 | FileWriteOutput

1782 | GlobOutput

1783 | GrepOutput

1784 | ListMcpResourcesOutput

1785 | MonitorOutput

1786 | NotebookEditOutput

1787 | ReadMcpResourceOutput

1788 | TaskStopOutput

1789 | TodoWriteOutput

1790 | WebFetchOutput

1791 | WebSearchOutput;

1792```

1793 

1794### Agent

1795 

1796**Nama tool:** `Agent` (sebelumnya `Task`, yang masih diterima sebagai alias)

1797 

1798```typescript theme={null}

1799type AgentOutput =

1800 | {

1801 status: "completed";

1802 agentId: string;

1803 content: Array<{ type: "text"; text: string }>;

1804 totalToolUseCount: number;

1805 totalDurationMs: number;

1806 totalTokens: number;

1807 usage: {

1808 input_tokens: number;

1809 output_tokens: number;

1810 cache_creation_input_tokens: number | null;

1811 cache_read_input_tokens: number | null;

1812 server_tool_use: {

1813 web_search_requests: number;

1814 web_fetch_requests: number;

1815 } | null;

1816 service_tier: ("standard" | "priority" | "batch") | null;

1817 cache_creation: {

1818 ephemeral_1h_input_tokens: number;

1819 ephemeral_5m_input_tokens: number;

1820 } | null;

1821 };

1822 prompt: string;

1823 }

1824 | {

1825 status: "async_launched";

1826 agentId: string;

1827 description: string;

1828 prompt: string;

1829 outputFile: string;

1830 canReadOutputFile?: boolean;

1831 }

1832 | {

1833 status: "sub_agent_entered";

1834 description: string;

1835 message: string;

1836 };

1837```

1838 

1839Mengembalikan hasil dari subagen. Didiskriminasikan pada field `status`: `"completed"` untuk tugas yang selesai, `"async_launched"` untuk tugas latar belakang, dan `"sub_agent_entered"` untuk subagen interaktif.

1840 

1841### AskUserQuestion

1842 

1843**Nama tool:** `AskUserQuestion`

1844 

1845```typescript theme={null}

1846type AskUserQuestionOutput = {

1847 questions: Array<{

1848 question: string;

1849 header: string;

1850 options: Array<{ label: string; description: string; preview?: string }>;

1851 multiSelect: boolean;

1852 }>;

1853 answers: Record<string, string>;

1854};

1855```

1856 

1857Mengembalikan pertanyaan yang diajukan dan jawaban pengguna.

1858 

1859### Bash

1860 

1861**Nama tool:** `Bash`

1862 

1863```typescript theme={null}

1864type BashOutput = {

1865 stdout: string;

1866 stderr: string;

1867 rawOutputPath?: string;

1868 interrupted: boolean;

1869 isImage?: boolean;

1870 backgroundTaskId?: string;

1871 backgroundedByUser?: boolean;

1872 dangerouslyDisableSandbox?: boolean;

1873 returnCodeInterpretation?: string;

1874 structuredContent?: unknown[];

1875 persistedOutputPath?: string;

1876 persistedOutputSize?: number;

1877};

1878```

1879 

1880Mengembalikan output perintah dengan stdout/stderr terpisah. Perintah latar belakang menyertakan `backgroundTaskId`.

1881 

1882### Monitor

1883 

1884**Nama tool:** `Monitor`

1885 

1886```typescript theme={null}

1887type MonitorOutput = {

1888 taskId: string;

1889 timeoutMs: number;

1890 persistent?: boolean;

1891};

1892```

1893 

1894Mengembalikan ID tugas latar belakang untuk monitor yang sedang berjalan. Gunakan ID ini dengan `TaskStop` untuk membatalkan watch lebih awal.

1895 

1896### Edit

1897 

1898**Nama tool:** `Edit`

1899 

1900```typescript theme={null}

1901type FileEditOutput = {

1902 filePath: string;

1903 oldString: string;

1904 newString: string;

1905 originalFile: string;

1906 structuredPatch: Array<{

1907 oldStart: number;

1908 oldLines: number;

1909 newStart: number;

1910 newLines: number;

1911 lines: string[];

1912 }>;

1913 userModified: boolean;

1914 replaceAll: boolean;

1915 gitDiff?: {

1916 filename: string;

1917 status: "modified" | "added";

1918 additions: number;

1919 deletions: number;

1920 changes: number;

1921 patch: string;

1922 };

1923};

1924```

1925 

1926Mengembalikan diff terstruktur dari operasi edit.

1927 

1928### Read

1929 

1930**Nama tool:** `Read`

1931 

1932```typescript theme={null}

1933type FileReadOutput =

1934 | {

1935 type: "text";

1936 file: {

1937 filePath: string;

1938 content: string;

1939 numLines: number;

1940 startLine: number;

1941 totalLines: number;

1942 };

1943 }

1944 | {

1945 type: "image";

1946 file: {

1947 base64: string;

1948 type: "image/jpeg" | "image/png" | "image/gif" | "image/webp";

1949 originalSize: number;

1950 dimensions?: {

1951 originalWidth?: number;

1952 originalHeight?: number;

1953 displayWidth?: number;

1954 displayHeight?: number;

1955 };

1956 };

1957 }

1958 | {

1959 type: "notebook";

1960 file: {

1961 filePath: string;

1962 cells: unknown[];

1963 };

1964 }

1965 | {

1966 type: "pdf";

1967 file: {

1968 filePath: string;

1969 base64: string;

1970 originalSize: number;

1971 };

1972 }

1973 | {

1974 type: "parts";

1975 file: {

1976 filePath: string;

1977 originalSize: number;

1978 count: number;

1979 outputDir: string;

1980 };

1981 };

1982```

1983 

1984Mengembalikan konten file dalam format yang sesuai dengan tipe file. Didiskriminasikan pada field `type`.

1985 

1986### Write

1987 

1988**Nama tool:** `Write`

1989 

1990```typescript theme={null}

1991type FileWriteOutput = {

1992 type: "create" | "update";

1993 filePath: string;

1994 content: string;

1995 structuredPatch: Array<{

1996 oldStart: number;

1997 oldLines: number;

1998 newStart: number;

1999 newLines: number;

2000 lines: string[];

2001 }>;

2002 originalFile: string | null;

2003 gitDiff?: {

2004 filename: string;

2005 status: "modified" | "added";

2006 additions: number;

2007 deletions: number;

2008 changes: number;

2009 patch: string;

2010 };

2011};

2012```

2013 

2014Mengembalikan hasil write dengan informasi diff terstruktur.

2015 

2016### Glob

2017 

2018**Nama tool:** `Glob`

2019 

2020```typescript theme={null}

2021type GlobOutput = {

2022 durationMs: number;

2023 numFiles: number;

2024 filenames: string[];

2025 truncated: boolean;

2026};

2027```

2028 

2029Mengembalikan jalur file yang cocok dengan pola glob, diurutkan berdasarkan waktu modifikasi.

2030 

2031### Grep

2032 

2033**Nama tool:** `Grep`

2034 

2035```typescript theme={null}

2036type GrepOutput = {

2037 mode?: "content" | "files_with_matches" | "count";

2038 numFiles: number;

2039 filenames: string[];

2040 content?: string;

2041 numLines?: number;

2042 numMatches?: number;

2043 appliedLimit?: number;

2044 appliedOffset?: number;

2045};

2046```

2047 

2048Mengembalikan hasil pencarian. Bentuknya bervariasi menurut `mode`: daftar file, konten dengan kecocokan, atau hitungan kecocokan.

2049 

2050### TaskStop

2051 

2052**Nama tool:** `TaskStop`

2053 

2054```typescript theme={null}

2055type TaskStopOutput = {

2056 message: string;

2057 task_id: string;

2058 task_type: string;

2059 command?: string;

2060};

2061```

2062 

2063Mengembalikan konfirmasi setelah menghentikan tugas latar belakang.

2064 

2065### NotebookEdit

2066 

2067**Nama tool:** `NotebookEdit`

2068 

2069```typescript theme={null}

2070type NotebookEditOutput = {

2071 new_source: string;

2072 cell_id?: string;

2073 cell_type: "code" | "markdown";

2074 language: string;

2075 edit_mode: string;

2076 error?: string;

2077 notebook_path: string;

2078 original_file: string;

2079 updated_file: string;

2080};

2081```

2082 

2083Mengembalikan hasil edit notebook dengan konten file asli dan diperbarui.

2084 

2085### WebFetch

2086 

2087**Nama tool:** `WebFetch`

2088 

2089```typescript theme={null}

2090type WebFetchOutput = {

2091 bytes: number;

2092 code: number;

2093 codeText: string;

2094 result: string;

2095 durationMs: number;

2096 url: string;

2097};

2098```

2099 

2100Mengembalikan konten yang diambil dengan status HTTP dan metadata.

2101 

2102### WebSearch

2103 

2104**Nama tool:** `WebSearch`

2105 

2106```typescript theme={null}

2107type WebSearchOutput = {

2108 query: string;

2109 results: Array<

2110 | {

2111 tool_use_id: string;

2112 content: Array<{ title: string; url: string }>;

2113 }

2114 | string

2115 >;

2116 durationSeconds: number;

2117};

2118```

2119 

2120Mengembalikan hasil pencarian dari web.

2121 

2122### TodoWrite

2123 

2124**Nama tool:** `TodoWrite`

2125 

2126```typescript theme={null}

2127type TodoWriteOutput = {

2128 oldTodos: Array<{

2129 content: string;

2130 status: "pending" | "in_progress" | "completed";

2131 activeForm: string;

2132 }>;

2133 newTodos: Array<{

2134 content: string;

2135 status: "pending" | "in_progress" | "completed";

2136 activeForm: string;

2137 }>;

2138};

2139```

2140 

2141Mengembalikan daftar tugas sebelumnya dan diperbarui.

2142 

2143### ExitPlanMode

2144 

2145**Nama tool:** `ExitPlanMode`

2146 

2147```typescript theme={null}

2148type ExitPlanModeOutput = {

2149 plan: string | null;

2150 isAgent: boolean;

2151 filePath?: string;

2152 hasTaskTool?: boolean;

2153 awaitingLeaderApproval?: boolean;

2154 requestId?: string;

2155};

2156```

2157 

2158Mengembalikan status rencana setelah keluar dari mode perencanaan.

2159 

2160### ListMcpResources

2161 

2162**Nama tool:** `ListMcpResources`

2163 

2164```typescript theme={null}

2165type ListMcpResourcesOutput = Array<{

2166 uri: string;

2167 name: string;

2168 mimeType?: string;

2169 description?: string;

2170 server: string;

2171}>;

2172```

2173 

2174Mengembalikan array sumber daya MCP yang tersedia.

2175 

2176### ReadMcpResource

2177 

2178**Nama tool:** `ReadMcpResource`

2179 

2180```typescript theme={null}

2181type ReadMcpResourceOutput = {

2182 contents: Array<{

2183 uri: string;

2184 mimeType?: string;

2185 text?: string;

2186 }>;

2187};

2188```

2189 

2190Mengembalikan konten sumber daya MCP yang diminta.

2191 

2192### EnterWorktree

2193 

2194**Nama tool:** `EnterWorktree`

2195 

2196```typescript theme={null}

2197type EnterWorktreeOutput = {

2198 worktreePath: string;

2199 worktreeBranch?: string;

2200 message: string;

2201};

2202```

2203 

2204Mengembalikan informasi tentang worktree git.

2205 

2206## Tipe Izin

2207 

2208### `PermissionUpdate`

2209 

2210Operasi untuk memperbarui izin.

2211 

2212```typescript theme={null}

2213type PermissionUpdate =

2214 | {

2215 type: "addRules";

2216 rules: PermissionRuleValue[];

2217 behavior: PermissionBehavior;

2218 destination: PermissionUpdateDestination;

2219 }

2220 | {

2221 type: "replaceRules";

2222 rules: PermissionRuleValue[];

2223 behavior: PermissionBehavior;

2224 destination: PermissionUpdateDestination;

2225 }

2226 | {

2227 type: "removeRules";

2228 rules: PermissionRuleValue[];

2229 behavior: PermissionBehavior;

2230 destination: PermissionUpdateDestination;

2231 }

2232 | {

2233 type: "setMode";

2234 mode: PermissionMode;

2235 destination: PermissionUpdateDestination;

2236 }

2237 | {

2238 type: "addDirectories";

2239 directories: string[];

2240 destination: PermissionUpdateDestination;

2241 }

2242 | {

2243 type: "removeDirectories";

2244 directories: string[];

2245 destination: PermissionUpdateDestination;

2246 };

2247```

2248 

2249### `PermissionBehavior`

2250 

2251```typescript theme={null}

2252type PermissionBehavior = "allow" | "deny" | "ask";

2253```

2254 

2255### `PermissionUpdateDestination`

2256 

2257```typescript theme={null}

2258type PermissionUpdateDestination =

2259 | "userSettings" // Pengaturan pengguna global

2260 | "projectSettings" // Pengaturan proyek per-direktori

2261 | "localSettings" // Pengaturan lokal gitignored

2262 | "session" // Hanya sesi saat ini

2263 | "cliArg"; // Argumen CLI

2264```

2265 

2266### `PermissionRuleValue`

2267 

2268```typescript theme={null}

2269type PermissionRuleValue = {

2270 toolName: string;

2271 ruleContent?: string;

2272};

2273```

2274 

2275## Tipe Lainnya

2276 

2277### `ApiKeySource`

2278 

2279```typescript theme={null}

2280type ApiKeySource = "user" | "project" | "org" | "temporary" | "oauth";

2281```

2282 

2283### `SdkBeta`

2284 

2285Fitur beta yang tersedia yang dapat diaktifkan melalui opsi `betas`. Lihat [Beta headers](https://platform.claude.com/docs/id/api/beta-headers) untuk informasi lebih lanjut.

2286 

2287```typescript theme={null}

2288type SdkBeta = "context-1m-2025-08-07";

2289```

2290 

2291<Warning>

2292 Beta `context-1m-2025-08-07` sudah pensiun sejak 30 April 2026. Melewatkan nilai ini dengan Claude Sonnet 4.5 atau Sonnet 4 tidak berpengaruh, dan permintaan yang melebihi jendela konteks standar 200k-token mengembalikan error. Untuk menggunakan jendela konteks 1M-token, migrasikan ke [Claude Sonnet 4.6, Claude Opus 4.6, atau Claude Opus 4.7](https://platform.claude.com/docs/id/about-claude/models/overview), yang mencakup konteks 1M dengan harga standar tanpa header beta yang diperlukan.

2293</Warning>

2294 

2295### `SlashCommand`

2296 

2297Informasi tentang perintah slash yang tersedia.

2298 

2299```typescript theme={null}

2300type SlashCommand = {

2301 name: string;

2302 description: string;

2303 argumentHint: string;

2304 aliases?: string[];

2305};

2306```

2307 

2308### `ModelInfo`

2309 

2310Informasi tentang model yang tersedia.

2311 

2312```typescript theme={null}

2313type ModelInfo = {

2314 value: string;

2315 displayName: string;

2316 description: string;

2317 supportsEffort?: boolean;

2318 supportedEffortLevels?: ("low" | "medium" | "high" | "xhigh" | "max")[];

2319 supportsAdaptiveThinking?: boolean;

2320 supportsFastMode?: boolean;

2321};

2322```

2323 

2324### `AgentInfo`

2325 

2326Informasi tentang subagen yang tersedia yang dapat dipanggil melalui tool Agent.

2327 

2328```typescript theme={null}

2329type AgentInfo = {

2330 name: string;

2331 description: string;

2332 model?: string;

2333};

2334```

2335 

2336| Field | Tipe | Deskripsi |

2337| :------------ | :-------------------- | :--------------------------------------------------------------------------- |

2338| `name` | `string` | Pengenal tipe agen (misalnya, `"Explore"`, `"general-purpose"`) |

2339| `description` | `string` | Deskripsi tentang kapan menggunakan agen ini |

2340| `model` | `string \| undefined` | Alias model yang digunakan agen ini. Jika dihilangkan, mewarisi model parent |

2341 

2342### `McpServerStatus`

2343 

2344Status server MCP yang terhubung.

2345 

2346```typescript theme={null}

2347type McpServerStatus = {

2348 name: string;

2349 status: "connected" | "failed" | "needs-auth" | "pending" | "disabled";

2350 serverInfo?: {

2351 name: string;

2352 version: string;

2353 };

2354 error?: string;

2355 config?: McpServerStatusConfig;

2356 scope?: string;

2357 tools?: {

2358 name: string;

2359 description?: string;

2360 annotations?: {

2361 readOnly?: boolean;

2362 destructive?: boolean;

2363 openWorld?: boolean;

2364 };

2365 }[];

2366};

2367```

2368 

2369### `McpServerStatusConfig`

2370 

2371Konfigurasi server MCP seperti yang dilaporkan oleh `mcpServerStatus()`. Ini adalah union dari semua tipe transport server MCP.

2372 

2373```typescript theme={null}

2374type McpServerStatusConfig =

2375 | McpStdioServerConfig

2376 | McpSSEServerConfig

2377 | McpHttpServerConfig

2378 | McpSdkServerConfig

2379 | McpClaudeAIProxyServerConfig;

2380```

2381 

2382Lihat [`McpServerConfig`](#mcp-server-config) untuk detail tentang setiap tipe transport.

2383 

2384### `AccountInfo`

2385 

2386Informasi akun untuk pengguna yang diautentikasi.

2387 

2388```typescript theme={null}

2389type AccountInfo = {

2390 email?: string;

2391 organization?: string;

2392 subscriptionType?: string;

2393 tokenSource?: string;

2394 apiKeySource?: string;

2395};

2396```

2397 

2398### `ModelUsage`

2399 

2400Statistik penggunaan per-model yang dikembalikan dalam pesan hasil. Nilai `costUSD` adalah estimasi sisi klien. Lihat [Lacak biaya dan penggunaan](/id/agent-sdk/cost-tracking) untuk peringatan penagihan.

2401 

2402```typescript theme={null}

2403type ModelUsage = {

2404 inputTokens: number;

2405 outputTokens: number;

2406 cacheReadInputTokens: number;

2407 cacheCreationInputTokens: number;

2408 webSearchRequests: number;

2409 costUSD: number;

2410 contextWindow: number;

2411 maxOutputTokens: number;

2412};

2413```

2414 

2415### `ConfigScope`

2416 

2417```typescript theme={null}

2418type ConfigScope = "local" | "user" | "project";

2419```

2420 

2421### `NonNullableUsage`

2422 

2423Versi [`Usage`](#usage) dengan semua field nullable dibuat non-nullable.

2424 

2425```typescript theme={null}

2426type NonNullableUsage = {

2427 [K in keyof Usage]: NonNullable<Usage[K]>;

2428};

2429```

2430 

2431### `Usage`

2432 

2433Statistik penggunaan token (dari `@anthropic-ai/sdk`).

2434 

2435```typescript theme={null}

2436type Usage = {

2437 input_tokens: number | null;

2438 output_tokens: number | null;

2439 cache_creation_input_tokens?: number | null;

2440 cache_read_input_tokens?: number | null;

2441};

2442```

2443 

2444### `CallToolResult`

2445 

2446Tipe hasil tool MCP (dari `@modelcontextprotocol/sdk/types.js`).

2447 

2448```typescript theme={null}

2449type CallToolResult = {

2450 content: Array<{

2451 type: "text" | "image" | "resource";

2452 // Field tambahan bervariasi menurut tipe

2453 }>;

2454 isError?: boolean;

2455};

2456```

2457 

2458### `ThinkingConfig`

2459 

2460Mengontrol perilaku pemikiran/penalaran Claude. Mengambil preseden atas `maxThinkingTokens` yang sudah usang.

2461 

2462```typescript theme={null}

2463type ThinkingConfig =

2464 | { type: "adaptive" } // Model menentukan kapan dan berapa banyak untuk bernalar (Opus 4.6+)

2465 | { type: "enabled"; budgetTokens?: number } // Anggaran token pemikiran tetap

2466 | { type: "disabled" }; // Tidak ada pemikiran yang diperluas

2467```

2468 

2469### `SpawnedProcess`

2470 

2471Antarmuka untuk spawn proses kustom (digunakan dengan opsi `spawnClaudeCodeProcess`). `ChildProcess` sudah memenuhi antarmuka ini.

2472 

2473```typescript theme={null}

2474interface SpawnedProcess {

2475 stdin: Writable;

2476 stdout: Readable;

2477 readonly killed: boolean;

2478 readonly exitCode: number | null;

2479 kill(signal: NodeJS.Signals): boolean;

2480 on(

2481 event: "exit",

2482 listener: (code: number | null, signal: NodeJS.Signals | null) => void

2483 ): void;

2484 on(event: "error", listener: (error: Error) => void): void;

2485 once(

2486 event: "exit",

2487 listener: (code: number | null, signal: NodeJS.Signals | null) => void

2488 ): void;

2489 once(event: "error", listener: (error: Error) => void): void;

2490 off(

2491 event: "exit",

2492 listener: (code: number | null, signal: NodeJS.Signals | null) => void

2493 ): void;

2494 off(event: "error", listener: (error: Error) => void): void;

2495}

2496```

2497 

2498### `SpawnOptions`

2499 

2500Opsi yang diteruskan ke fungsi spawn kustom.

2501 

2502```typescript theme={null}

2503interface SpawnOptions {

2504 command: string;

2505 args: string[];

2506 cwd?: string;

2507 env: Record<string, string | undefined>;

2508 signal: AbortSignal;

2509}

2510```

2511 

2512### `McpSetServersResult`

2513 

2514Hasil operasi `setMcpServers()`.

2515 

2516```typescript theme={null}

2517type McpSetServersResult = {

2518 added: string[];

2519 removed: string[];

2520 errors: Record<string, string>;

2521};

2522```

2523 

2524### `RewindFilesResult`

2525 

2526Hasil operasi `rewindFiles()`.

2527 

2528```typescript theme={null}

2529type RewindFilesResult = {

2530 canRewind: boolean;

2531 error?: string;

2532 filesChanged?: string[];

2533 insertions?: number;

2534 deletions?: number;

2535};

2536```

2537 

2538### `SDKStatusMessage`

2539 

2540Pesan pembaruan status (misalnya, pemadatan).

2541 

2542```typescript theme={null}

2543type SDKStatusMessage = {

2544 type: "system";

2545 subtype: "status";

2546 status: "compacting" | null;

2547 permissionMode?: PermissionMode;

2548 uuid: UUID;

2549 session_id: string;

2550};

2551```

2552 

2553### `SDKTaskNotificationMessage`

2554 

2555Notifikasi ketika tugas latar belakang selesai, gagal, atau dihentikan. Tugas latar belakang mencakup perintah Bash `run_in_background`, watch [Monitor](#monitor), dan subagen latar belakang.

2556 

2557```typescript theme={null}

2558type SDKTaskNotificationMessage = {

2559 type: "system";

2560 subtype: "task_notification";

2561 task_id: string;

2562 tool_use_id?: string;

2563 status: "completed" | "failed" | "stopped";

2564 output_file: string;

2565 summary: string;

2566 usage?: {

2567 total_tokens: number;

2568 tool_uses: number;

2569 duration_ms: number;

2570 };

2571 uuid: UUID;

2572 session_id: string;

2573};

2574```

2575 

2576### `SDKToolUseSummaryMessage`

2577 

2578Ringkasan penggunaan tool dalam percakapan.

2579 

2580```typescript theme={null}

2581type SDKToolUseSummaryMessage = {

2582 type: "tool_use_summary";

2583 summary: string;

2584 preceding_tool_use_ids: string[];

2585 uuid: UUID;

2586 session_id: string;

2587};

2588```

2589 

2590### `SDKHookStartedMessage`

2591 

2592Dipancarkan ketika hook mulai mengeksekusi.

2593 

2594```typescript theme={null}

2595type SDKHookStartedMessage = {

2596 type: "system";

2597 subtype: "hook_started";

2598 hook_id: string;

2599 hook_name: string;

2600 hook_event: string;

2601 uuid: UUID;

2602 session_id: string;

2603};

2604```

2605 

2606### `SDKHookProgressMessage`

2607 

2608Dipancarkan saat hook sedang berjalan, dengan output stdout/stderr.

2609 

2610```typescript theme={null}

2611type SDKHookProgressMessage = {

2612 type: "system";

2613 subtype: "hook_progress";

2614 hook_id: string;

2615 hook_name: string;

2616 hook_event: string;

2617 stdout: string;

2618 stderr: string;

2619 output: string;

2620 uuid: UUID;

2621 session_id: string;

2622};

2623```

2624 

2625### `SDKHookResponseMessage`

2626 

2627Dipancarkan ketika hook selesai mengeksekusi.

2628 

2629```typescript theme={null}

2630type SDKHookResponseMessage = {

2631 type: "system";

2632 subtype: "hook_response";

2633 hook_id: string;

2634 hook_name: string;

2635 hook_event: string;

2636 output: string;

2637 stdout: string;

2638 stderr: string;

2639 exit_code?: number;

2640 outcome: "success" | "error" | "cancelled";

2641 uuid: UUID;

2642 session_id: string;

2643};

2644```

2645 

2646### `SDKToolProgressMessage`

2647 

2648Dipancarkan secara berkala saat tool sedang mengeksekusi untuk menunjukkan kemajuan.

2649 

2650```typescript theme={null}

2651type SDKToolProgressMessage = {

2652 type: "tool_progress";

2653 tool_use_id: string;

2654 tool_name: string;

2655 parent_tool_use_id: string | null;

2656 elapsed_time_seconds: number;

2657 task_id?: string;

2658 uuid: UUID;

2659 session_id: string;

2660};

2661```

2662 

2663### `SDKAuthStatusMessage`

2664 

2665Dipancarkan selama alur autentikasi.

2666 

2667```typescript theme={null}

2668type SDKAuthStatusMessage = {

2669 type: "auth_status";

2670 isAuthenticating: boolean;

2671 output: string[];

2672 error?: string;

2673 uuid: UUID;

2674 session_id: string;

2675};

2676```

2677 

2678### `SDKTaskStartedMessage`

2679 

2680Dipancarkan ketika tugas latar belakang dimulai. Field `task_type` adalah `"local_bash"` untuk perintah Bash latar belakang dan watch [Monitor](#monitor), `"local_agent"` untuk subagen, atau `"remote_agent"`.

2681 

2682```typescript theme={null}

2683type SDKTaskStartedMessage = {

2684 type: "system";

2685 subtype: "task_started";

2686 task_id: string;

2687 tool_use_id?: string;

2688 description: string;

2689 task_type?: string;

2690 uuid: UUID;

2691 session_id: string;

2692};

2693```

2694 

2695### `SDKTaskProgressMessage`

2696 

2697Dipancarkan secara berkala saat tugas latar belakang sedang berjalan.

2698 

2699```typescript theme={null}

2700type SDKTaskProgressMessage = {

2701 type: "system";

2702 subtype: "task_progress";

2703 task_id: string;

2704 tool_use_id?: string;

2705 description: string;

2706 usage: {

2707 total_tokens: number;

2708 tool_uses: number;

2709 duration_ms: number;

2710 };

2711 last_tool_name?: string;

2712 uuid: UUID;

2713 session_id: string;

2714};

2715```

2716 

2717### `SDKTaskUpdatedMessage`

2718 

2719Dipancarkan ketika status tugas latar belakang berubah, seperti ketika transisi dari `running` ke `completed`. Gabungkan `patch` ke dalam peta tugas lokal Anda yang dikunci oleh `task_id`. Field `end_time` adalah timestamp epoch Unix dalam milidetik, dapat dibandingkan dengan `Date.now()`.

2720 

2721```typescript theme={null}

2722type SDKTaskUpdatedMessage = {

2723 type: "system";

2724 subtype: "task_updated";

2725 task_id: string;

2726 patch: {

2727 status?: "pending" | "running" | "completed" | "failed" | "killed";

2728 description?: string;

2729 end_time?: number;

2730 total_paused_ms?: number;

2731 error?: string;

2732 is_backgrounded?: boolean;

2733 };

2734 uuid: UUID;

2735 session_id: string;

2736};

2737```

2738 

2739### `SDKFilesPersistedEvent`

2740 

2741Dipancarkan ketika checkpoint file dipersistenkan ke disk.

2742 

2743```typescript theme={null}

2744type SDKFilesPersistedEvent = {

2745 type: "system";

2746 subtype: "files_persisted";

2747 files: { filename: string; file_id: string }[];

2748 failed: { filename: string; error: string }[];

2749 processed_at: string;

2750 uuid: UUID;

2751 session_id: string;

2752};

2753```

2754 

2755### `SDKRateLimitEvent`

2756 

2757Dipancarkan ketika sesi mengalami batas laju.

2758 

2759```typescript theme={null}

2760type SDKRateLimitEvent = {

2761 type: "rate_limit_event";

2762 rate_limit_info: {

2763 status: "allowed" | "allowed_warning" | "rejected";

2764 resetsAt?: number;

2765 utilization?: number;

2766 };

2767 uuid: UUID;

2768 session_id: string;

2769};

2770```

2771 

2772### `SDKLocalCommandOutputMessage`

2773 

2774Output dari perintah slash lokal (misalnya, `/voice` atau `/usage`). Ditampilkan sebagai teks gaya asisten dalam transkrip.

2775 

2776```typescript theme={null}

2777type SDKLocalCommandOutputMessage = {

2778 type: "system";

2779 subtype: "local_command_output";

2780 content: string;

2781 uuid: UUID;

2782 session_id: string;

2783};

2784```

2785 

2786### `SDKPromptSuggestionMessage`

2787 

2788Dipancarkan setelah setiap putaran ketika `promptSuggestions` diaktifkan. Berisi prompt pengguna berikutnya yang diprediksi.

2789 

2790```typescript theme={null}

2791type SDKPromptSuggestionMessage = {

2792 type: "prompt_suggestion";

2793 suggestion: string;

2794 uuid: UUID;

2795 session_id: string;

2796};

2797```

2798 

2799### `AbortError`

2800 

2801Kelas error kustom untuk operasi abort.

2802 

2803```typescript theme={null}

2804class AbortError extends Error {}

2805```

2806 

2807## Konfigurasi Sandbox

2808 

2809### `SandboxSettings`

2810 

2811Konfigurasi untuk perilaku sandbox. Gunakan ini untuk mengaktifkan sandboxing perintah dan mengonfigurasi pembatasan jaringan secara terprogram.

2812 

2813```typescript theme={null}

2814type SandboxSettings = {

2815 enabled?: boolean;

2816 autoAllowBashIfSandboxed?: boolean;

2817 excludedCommands?: string[];

2818 allowUnsandboxedCommands?: boolean;

2819 network?: SandboxNetworkConfig;

2820 filesystem?: SandboxFilesystemConfig;

2821 ignoreViolations?: Record<string, string[]>;

2822 enableWeakerNestedSandbox?: boolean;

2823 ripgrep?: { command: string; args?: string[] };

2824};

2825```

2826 

2827| Properti | Tipe | Default | Deskripsi |

2828| :-------------------------- | :------------------------------------------------------ | :---------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

2829| `enabled` | `boolean` | `false` | Aktifkan mode sandbox untuk eksekusi perintah |

2830| `autoAllowBashIfSandboxed` | `boolean` | `true` | Auto-approve perintah bash ketika sandbox diaktifkan |

2831| `excludedCommands` | `string[]` | `[]` | Perintah yang selalu bypass pembatasan sandbox (misalnya, `['docker']`). Ini berjalan unsandboxed secara otomatis tanpa keterlibatan model |

2832| `allowUnsandboxedCommands` | `boolean` | `true` | Izinkan model untuk meminta menjalankan perintah di luar sandbox. Ketika `true`, model dapat mengatur `dangerouslyDisableSandbox` dalam input tool, yang jatuh kembali ke [sistem izin](#permissions-fallback-for-unsandboxed-commands) |

2833| `network` | [`SandboxNetworkConfig`](#sandbox-network-config) | `undefined` | Konfigurasi sandbox spesifik jaringan |

2834| `filesystem` | [`SandboxFilesystemConfig`](#sandbox-filesystem-config) | `undefined` | Konfigurasi sandbox spesifik filesystem untuk pembatasan baca/tulis |

2835| `ignoreViolations` | `Record<string, string[]>` | `undefined` | Peta kategori pelanggaran ke pola untuk diabaikan (misalnya, `{ file: ['/tmp/*'], network: ['localhost'] }`) |

2836| `enableWeakerNestedSandbox` | `boolean` | `false` | Aktifkan sandbox bersarang yang lebih lemah untuk kompatibilitas |

2837| `ripgrep` | `{ command: string; args?: string[] }` | `undefined` | Konfigurasi biner ripgrep kustom untuk lingkungan sandbox |

2838 

2839#### Contoh penggunaan

2840 

2841```typescript theme={null}

2842import { query } from "@anthropic-ai/claude-agent-sdk";

2843 

2844for await (const message of query({

2845 prompt: "Build and test my project",

2846 options: {

2847 sandbox: {

2848 enabled: true,

2849 autoAllowBashIfSandboxed: true,

2850 network: {

2851 allowLocalBinding: true

2852 }

2853 }

2854 }

2855})) {

2856 if ("result" in message) console.log(message.result);

2857}

2858```

2859 

2860<Warning>

2861 **Keamanan Unix socket:** Opsi `allowUnixSockets` dapat memberikan akses ke layanan sistem yang kuat. Misalnya, mengizinkan `/var/run/docker.sock` secara efektif memberikan akses sistem host penuh melalui API Docker, melewati isolasi sandbox. Hanya izinkan Unix socket yang benar-benar diperlukan dan pahami implikasi keamanan dari masing-masing.

2862</Warning>

2863 

2864### `SandboxNetworkConfig`

2865 

2866Konfigurasi spesifik jaringan untuk mode sandbox.

2867 

2868```typescript theme={null}

2869type SandboxNetworkConfig = {

2870 allowedDomains?: string[];

2871 deniedDomains?: string[];

2872 allowManagedDomainsOnly?: boolean;

2873 allowLocalBinding?: boolean;

2874 allowUnixSockets?: string[];

2875 allowAllUnixSockets?: boolean;

2876 httpProxyPort?: number;

2877 socksProxyPort?: number;

2878};

2879```

2880 

2881| Properti | Tipe | Default | Deskripsi |

2882| :------------------------ | :--------- | :---------- | :----------------------------------------------------------------------------------------------- |

2883| `allowedDomains` | `string[]` | `[]` | Nama domain yang dapat diakses proses sandboxed |

2884| `deniedDomains` | `string[]` | `[]` | Nama domain yang tidak dapat diakses proses sandboxed. Mengambil prioritas atas `allowedDomains` |

2885| `allowManagedDomainsOnly` | `boolean` | `false` | Batasi akses jaringan hanya ke domain dalam `allowedDomains` |

2886| `allowLocalBinding` | `boolean` | `false` | Izinkan proses untuk mengikat ke port lokal (misalnya, untuk dev server) |

2887| `allowUnixSockets` | `string[]` | `[]` | Jalur Unix socket yang dapat diakses proses (misalnya, Docker socket) |

2888| `allowAllUnixSockets` | `boolean` | `false` | Izinkan akses ke semua Unix socket |

2889| `httpProxyPort` | `number` | `undefined` | Port proxy HTTP untuk permintaan jaringan |

2890| `socksProxyPort` | `number` | `undefined` | Port proxy SOCKS untuk permintaan jaringan |

2891 

2892<Note>

2893 Proxy sandbox bawaan memberlakukan `allowedDomains` berdasarkan nama host yang diminta dan tidak menghentikan atau memeriksa lalu lintas TLS, sehingga teknik seperti [domain fronting](https://en.wikipedia.org/wiki/Domain_fronting) dapat berpotensi melewatinya. Lihat [Batasan keamanan sandboxing](/id/sandboxing#security-limitations) untuk detail dan [Penyebaran aman](/id/agent-sdk/secure-deployment#traffic-forwarding) untuk mengonfigurasi proxy yang menghentikan TLS.

2894</Note>

2895 

2896### `SandboxFilesystemConfig`

2897 

2898Konfigurasi spesifik filesystem untuk mode sandbox.

2899 

2900```typescript theme={null}

2901type SandboxFilesystemConfig = {

2902 allowWrite?: string[];

2903 denyWrite?: string[];

2904 denyRead?: string[];

2905};

2906```

2907 

2908| Properti | Tipe | Default | Deskripsi |

2909| :----------- | :--------- | :------ | :----------------------------------------------- |

2910| `allowWrite` | `string[]` | `[]` | Pola jalur file untuk mengizinkan akses tulis ke |

2911| `denyWrite` | `string[]` | `[]` | Pola jalur file untuk menolak akses tulis ke |

2912| `denyRead` | `string[]` | `[]` | Pola jalur file untuk menolak akses baca ke |

2913 

2914### Fallback Izin untuk Perintah Unsandboxed

2915 

2916Ketika `allowUnsandboxedCommands` diaktifkan, model dapat meminta untuk menjalankan perintah di luar sandbox dengan mengatur `dangerouslyDisableSandbox: true` dalam input tool. Permintaan ini jatuh kembali ke sistem izin yang ada, berarti handler `canUseTool` Anda dipanggil, memungkinkan Anda untuk mengimplementasikan logika otorisasi kustom.

2917 

2918<Note>

2919 **`excludedCommands` vs `allowUnsandboxedCommands`:**

2920 

2921 * `excludedCommands`: Daftar statis perintah yang selalu bypass sandbox secara otomatis (misalnya, `['docker']`). Model tidak memiliki kontrol atas ini.

2922 * `allowUnsandboxedCommands`: Biarkan model memutuskan pada runtime apakah akan meminta eksekusi unsandboxed dengan mengatur `dangerouslyDisableSandbox: true` dalam input tool.

2923</Note>

2924 

2925```typescript theme={null}

2926import { query } from "@anthropic-ai/claude-agent-sdk";

2927 

2928for await (const message of query({

2929 prompt: "Deploy my application",

2930 options: {

2931 sandbox: {

2932 enabled: true,

2933 allowUnsandboxedCommands: true // Model dapat meminta eksekusi unsandboxed

2934 },

2935 permissionMode: "default",

2936 canUseTool: async (tool, input) => {

2937 // Periksa apakah model meminta untuk bypass sandbox

2938 if (tool === "Bash" && input.dangerouslyDisableSandbox) {

2939 // Model meminta untuk menjalankan perintah ini di luar sandbox

2940 console.log(`Unsandboxed command requested: ${input.command}`);

2941 

2942 if (isCommandAuthorized(input.command)) {

2943 return { behavior: "allow" as const, updatedInput: input };

2944 }

2945 return {

2946 behavior: "deny" as const,

2947 message: "Command not authorized for unsandboxed execution"

2948 };

2949 }

2950 return { behavior: "allow" as const, updatedInput: input };

2951 }

2952 }

2953})) {

2954 if ("result" in message) console.log(message.result);

2955}

2956```

2957 

2958Pola ini memungkinkan Anda untuk:

2959 

2960* **Audit permintaan model:** Catat ketika model meminta eksekusi unsandboxed

2961* **Implementasikan allowlist:** Hanya izinkan perintah tertentu untuk berjalan unsandboxed

2962* **Tambahkan alur persetujuan:** Memerlukan otorisasi eksplisit untuk operasi istimewa

2963 

2964<Warning>

2965 Perintah yang berjalan dengan `dangerouslyDisableSandbox: true` memiliki akses sistem penuh. Pastikan handler `canUseTool` Anda memvalidasi permintaan ini dengan hati-hati.

2966 

2967 Jika `permissionMode` diatur ke `bypassPermissions` dan `allowUnsandboxedCommands` diaktifkan, model dapat secara otonom mengeksekusi perintah di luar sandbox tanpa prompt persetujuan apa pun. Kombinasi ini secara efektif memungkinkan model untuk melarikan diri dari isolasi sandbox secara diam-diam.

2968</Warning>

2969 

2970## Lihat juga

2971 

2972* [Gambaran umum SDK](/id/agent-sdk/overview) - Konsep SDK umum

2973* [Referensi SDK Python](/id/agent-sdk/python) - Dokumentasi SDK Python

2974* [Referensi CLI](/id/cli-reference) - Antarmuka baris perintah

2975* [Alur kerja umum](/id/common-workflows) - Panduan langkah demi langkah

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# TypeScript SDK V2 interface (preview)

6 

7> Pratinjau SDK Agent TypeScript V2 yang disederhanakan, dengan pola send/stream berbasis sesi untuk percakapan multi-turn.

8 

9<Warning>

10 Antarmuka V2 adalah **pratinjau yang tidak stabil**. API mungkin berubah berdasarkan umpan balik sebelum menjadi stabil. Beberapa fitur seperti session forking hanya tersedia di [SDK V1](/id/agent-sdk/typescript).

11</Warning>

12 

13SDK Agent TypeScript Claude V2 menghilangkan kebutuhan untuk async generators dan koordinasi yield. Ini membuat percakapan multi-turn lebih sederhana, alih-alih mengelola status generator di seluruh turn, setiap turn adalah siklus `send()`/`stream()` terpisah. Permukaan API berkurang menjadi tiga konsep:

14 

15* `createSession()` / `resumeSession()`: Mulai atau lanjutkan percakapan

16* `session.send()`: Kirim pesan

17* `session.stream()`: Dapatkan respons

18 

19## Instalasi

20 

21Antarmuka V2 disertakan dalam paket SDK yang ada:

22 

23```bash theme={null}

24npm install @anthropic-ai/claude-agent-sdk

25```

26 

27<Note>

28 SDK menggabungkan binary Claude Code asli untuk platform Anda sebagai dependensi opsional, jadi Anda tidak perlu menginstal Claude Code secara terpisah.

29</Note>

30 

31## Mulai cepat

32 

33### Prompt sekali jalan

34 

35Untuk kueri single-turn sederhana di mana Anda tidak perlu mempertahankan sesi, gunakan `unstable_v2_prompt()`. Contoh ini mengirim pertanyaan matematika dan mencatat jawabannya:

36 

37```typescript theme={null}

38import { unstable_v2_prompt } from "@anthropic-ai/claude-agent-sdk";

39 

40const result = await unstable_v2_prompt("What is 2 + 2?", {

41 model: "claude-opus-4-7"

42});

43if (result.subtype === "success") {

44 console.log(result.result);

45}

46```

47 

48<details>

49 <summary>Lihat operasi yang sama di V1</summary>

50 

51 ```typescript theme={null}

52 import { query } from "@anthropic-ai/claude-agent-sdk";

53 

54 const q = query({

55 prompt: "What is 2 + 2?",

56 options: { model: "claude-opus-4-7" }

57 });

58 

59 for await (const msg of q) {

60 if (msg.type === "result" && msg.subtype === "success") {

61 console.log(msg.result);

62 }

63 }

64 ```

65</details>

66 

67### Sesi dasar

68 

69Untuk interaksi di luar prompt tunggal, buat sesi. V2 memisahkan pengiriman dan streaming menjadi langkah-langkah yang berbeda:

70 

71* `send()` mengirimkan pesan Anda

72* `stream()` mengalirkan respons kembali

73 

74Pemisahan eksplisit ini memudahkan untuk menambahkan logika antar turn (seperti memproses respons sebelum mengirim tindak lanjut).

75 

76Contoh di bawah membuat sesi, mengirim "Hello!" ke Claude, dan mencetak respons teks. Ini menggunakan [`await using`](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-2.html#using-declarations-and-explicit-resource-management) (TypeScript 5.2+) untuk secara otomatis menutup sesi ketika blok keluar. Anda juga dapat memanggil `session.close()` secara manual.

77 

78```typescript theme={null}

79import { unstable_v2_createSession } from "@anthropic-ai/claude-agent-sdk";

80 

81await using session = unstable_v2_createSession({

82 model: "claude-opus-4-7"

83});

84 

85await session.send("Hello!");

86for await (const msg of session.stream()) {

87 // Filter for assistant messages to get human-readable output

88 if (msg.type === "assistant") {

89 const text = msg.message.content

90 .filter((block) => block.type === "text")

91 .map((block) => block.text)

92 .join("");

93 console.log(text);

94 }

95}

96```

97 

98<details>

99 <summary>Lihat operasi yang sama di V1</summary>

100 

101 Di V1, aliran input dan output melalui generator async tunggal. Untuk prompt dasar ini terlihat serupa, tetapi menambahkan logika multi-turn memerlukan restrukturisasi untuk menggunakan generator input.

102 

103 ```typescript theme={null}

104 import { query } from "@anthropic-ai/claude-agent-sdk";

105 

106 const q = query({

107 prompt: "Hello!",

108 options: { model: "claude-opus-4-7" }

109 });

110 

111 for await (const msg of q) {

112 if (msg.type === "assistant") {

113 const text = msg.message.content

114 .filter((block) => block.type === "text")

115 .map((block) => block.text)

116 .join("");

117 console.log(text);

118 }

119 }

120 ```

121</details>

122 

123### Percakapan multi-turn

124 

125Sesi mempertahankan konteks di seluruh pertukaran berganda. Untuk melanjutkan percakapan, panggil `send()` lagi pada sesi yang sama. Claude mengingat turn sebelumnya.

126 

127Contoh ini mengajukan pertanyaan matematika, kemudian mengajukan tindak lanjut yang mereferensikan jawaban sebelumnya:

128 

129```typescript theme={null}

130import { unstable_v2_createSession } from "@anthropic-ai/claude-agent-sdk";

131 

132await using session = unstable_v2_createSession({

133 model: "claude-opus-4-7"

134});

135 

136// Turn 1

137await session.send("What is 5 + 3?");

138for await (const msg of session.stream()) {

139 // Filter for assistant messages to get human-readable output

140 if (msg.type === "assistant") {

141 const text = msg.message.content

142 .filter((block) => block.type === "text")

143 .map((block) => block.text)

144 .join("");

145 console.log(text);

146 }

147}

148 

149// Turn 2

150await session.send("Multiply that by 2");

151for await (const msg of session.stream()) {

152 if (msg.type === "assistant") {

153 const text = msg.message.content

154 .filter((block) => block.type === "text")

155 .map((block) => block.text)

156 .join("");

157 console.log(text);

158 }

159}

160```

161 

162<details>

163 <summary>Lihat operasi yang sama di V1</summary>

164 

165 ```typescript theme={null}

166 import { query } from "@anthropic-ai/claude-agent-sdk";

167 

168 // Must create an async iterable to feed messages

169 async function* createInputStream() {

170 yield {

171 type: "user",

172 session_id: "",

173 message: { role: "user", content: [{ type: "text", text: "What is 5 + 3?" }] },

174 parent_tool_use_id: null

175 };

176 // Must coordinate when to yield next message

177 yield {

178 type: "user",

179 session_id: "",

180 message: { role: "user", content: [{ type: "text", text: "Multiply by 2" }] },

181 parent_tool_use_id: null

182 };

183 }

184 

185 const q = query({

186 prompt: createInputStream(),

187 options: { model: "claude-opus-4-7" }

188 });

189 

190 for await (const msg of q) {

191 if (msg.type === "assistant") {

192 const text = msg.message.content

193 .filter((block) => block.type === "text")

194 .map((block) => block.text)

195 .join("");

196 console.log(text);

197 }

198 }

199 ```

200</details>

201 

202### Lanjutkan sesi

203 

204Jika Anda memiliki ID sesi dari interaksi sebelumnya, Anda dapat melanjutkannya nanti. Ini berguna untuk alur kerja yang berjalan lama atau ketika Anda perlu mempertahankan percakapan di seluruh restart aplikasi.

205 

206Contoh ini membuat sesi, menyimpan ID-nya, menutupnya, kemudian melanjutkan percakapan:

207 

208```typescript theme={null}

209import {

210 unstable_v2_createSession,

211 unstable_v2_resumeSession,

212 type SDKMessage

213} from "@anthropic-ai/claude-agent-sdk";

214 

215// Helper to extract text from assistant messages

216function getAssistantText(msg: SDKMessage): string | null {

217 if (msg.type !== "assistant") return null;

218 return msg.message.content

219 .filter((block) => block.type === "text")

220 .map((block) => block.text)

221 .join("");

222}

223 

224// Create initial session and have a conversation

225const session = unstable_v2_createSession({

226 model: "claude-opus-4-7"

227});

228 

229await session.send("Remember this number: 42");

230 

231// Get the session ID from any received message

232let sessionId: string | undefined;

233for await (const msg of session.stream()) {

234 sessionId = msg.session_id;

235 const text = getAssistantText(msg);

236 if (text) console.log("Initial response:", text);

237}

238 

239console.log("Session ID:", sessionId);

240session.close();

241 

242// Later: resume the session using the stored ID

243await using resumedSession = unstable_v2_resumeSession(sessionId!, {

244 model: "claude-opus-4-7"

245});

246 

247await resumedSession.send("What number did I ask you to remember?");

248for await (const msg of resumedSession.stream()) {

249 const text = getAssistantText(msg);

250 if (text) console.log("Resumed response:", text);

251}

252```

253 

254<details>

255 <summary>Lihat operasi yang sama di V1</summary>

256 

257 ```typescript theme={null}

258 import { query } from "@anthropic-ai/claude-agent-sdk";

259 

260 // Create initial session

261 const initialQuery = query({

262 prompt: "Remember this number: 42",

263 options: { model: "claude-opus-4-7" }

264 });

265 

266 // Get session ID from any message

267 let sessionId: string | undefined;

268 for await (const msg of initialQuery) {

269 sessionId = msg.session_id;

270 if (msg.type === "assistant") {

271 const text = msg.message.content

272 .filter((block) => block.type === "text")

273 .map((block) => block.text)

274 .join("");

275 console.log("Initial response:", text);

276 }

277 }

278 

279 console.log("Session ID:", sessionId);

280 

281 // Later: resume the session

282 const resumedQuery = query({

283 prompt: "What number did I ask you to remember?",

284 options: {

285 model: "claude-opus-4-7",

286 resume: sessionId

287 }

288 });

289 

290 for await (const msg of resumedQuery) {

291 if (msg.type === "assistant") {

292 const text = msg.message.content

293 .filter((block) => block.type === "text")

294 .map((block) => block.text)

295 .join("");

296 console.log("Resumed response:", text);

297 }

298 }

299 ```

300</details>

301 

302### Pembersihan

303 

304Sesi dapat ditutup secara manual atau otomatis menggunakan [`await using`](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-2.html#using-declarations-and-explicit-resource-management), fitur TypeScript 5.2+ untuk pembersihan sumber daya otomatis. Jika Anda menggunakan versi TypeScript yang lebih lama atau mengalami masalah kompatibilitas, gunakan pembersihan manual sebagai gantinya.

305 

306**Pembersihan otomatis (TypeScript 5.2+):**

307 

308```typescript theme={null}

309import { unstable_v2_createSession } from "@anthropic-ai/claude-agent-sdk";

310 

311await using session = unstable_v2_createSession({

312 model: "claude-opus-4-7"

313});

314// Session closes automatically when the block exits

315```

316 

317**Pembersihan manual:**

318 

319```typescript theme={null}

320import { unstable_v2_createSession } from "@anthropic-ai/claude-agent-sdk";

321 

322const session = unstable_v2_createSession({

323 model: "claude-opus-4-7"

324});

325// ... use the session ...

326session.close();

327```

328 

329## Referensi API

330 

331### `unstable_v2_createSession()`

332 

333Membuat sesi baru untuk percakapan multi-turn.

334 

335```typescript theme={null}

336function unstable_v2_createSession(options: {

337 model: string;

338 // Additional options supported

339}): SDKSession;

340```

341 

342### `unstable_v2_resumeSession()`

343 

344Melanjutkan sesi yang ada berdasarkan ID.

345 

346```typescript theme={null}

347function unstable_v2_resumeSession(

348 sessionId: string,

349 options: {

350 model: string;

351 // Additional options supported

352 }

353): SDKSession;

354```

355 

356### `unstable_v2_prompt()`

357 

358Fungsi kenyamanan sekali jalan untuk kueri single-turn.

359 

360```typescript theme={null}

361function unstable_v2_prompt(

362 prompt: string,

363 options: {

364 model: string;

365 // Additional options supported

366 }

367): Promise<SDKResultMessage>;

368```

369 

370### Antarmuka SDKSession

371 

372```typescript theme={null}

373interface SDKSession {

374 readonly sessionId: string;

375 send(message: string | SDKUserMessage): Promise<void>;

376 stream(): AsyncGenerator<SDKMessage, void>;

377 close(): void;

378}

379```

380 

381## Ketersediaan fitur

382 

383Tidak semua fitur V1 tersedia di V2 belum. Berikut ini memerlukan penggunaan [SDK V1](/id/agent-sdk/typescript):

384 

385* Session forking (opsi `forkSession`)

386* Beberapa pola input streaming lanjutan

387 

388## Umpan balik

389 

390Bagikan umpan balik Anda tentang antarmuka V2 sebelum menjadi stabil. Laporkan masalah dan saran melalui [GitHub Issues](https://github.com/anthropics/claude-code/issues).

391 

392## Lihat juga

393 

394* [Referensi TypeScript SDK (V1)](/id/agent-sdk/typescript) - Dokumentasi SDK V1 lengkap

395* [Gambaran umum SDK](/id/agent-sdk/overview) - Konsep SDK umum

396* [Contoh V2 di GitHub](https://github.com/anthropics/claude-agent-sdk-demos/tree/main/hello-world-v2) - Contoh kode yang berfungsi

agent-teams.md +424 −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# Koordinasikan tim Claude Code sessions

6 

7> Koordinasikan beberapa instance Claude Code yang bekerja bersama sebagai tim, dengan tugas bersama, pesan antar-agent, dan manajemen terpusat.

8 

9<Warning>

10 Tim agent bersifat eksperimental dan dinonaktifkan secara default. Aktifkan dengan menambahkan `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` ke [settings.json](/id/settings) atau environment Anda. Tim agent memiliki [keterbatasan yang diketahui](#limitations) seputar session resumption, koordinasi tugas, dan perilaku shutdown.

11</Warning>

12 

13Tim agent memungkinkan Anda mengoordinasikan beberapa instance Claude Code yang bekerja bersama. Satu session bertindak sebagai team lead, mengoordinasikan pekerjaan, menugaskan tugas, dan mensintesis hasil. Rekan tim bekerja secara independen, masing-masing dalam context window-nya sendiri, dan berkomunikasi langsung satu sama lain.

14 

15Tidak seperti [subagents](/id/sub-agents), yang berjalan dalam satu session dan hanya dapat melaporkan kembali ke agent utama, Anda juga dapat berinteraksi dengan rekan tim individual secara langsung tanpa melalui lead.

16 

17<Note>

18 Tim agent memerlukan Claude Code v2.1.32 atau lebih baru. Periksa versi Anda dengan `claude --version`.

19</Note>

20 

21Halaman ini mencakup:

22 

23* [Kapan menggunakan tim agent](#when-to-use-agent-teams), termasuk use case terbaik dan bagaimana perbandingannya dengan subagents

24* [Memulai tim](#start-your-first-agent-team)

25* [Mengendalikan rekan tim](#control-your-agent-team), termasuk mode tampilan, penugasan tugas, dan delegasi

26* [Best practices untuk pekerjaan paralel](#best-practices)

27 

28## Kapan menggunakan tim agent

29 

30Tim agent paling efektif untuk tugas di mana eksplorasi paralel menambah nilai nyata. Lihat [contoh use case](#use-case-examples) untuk skenario lengkap. Use case terkuat adalah:

31 

32* **Penelitian dan review**: beberapa rekan tim dapat menyelidiki aspek berbeda dari masalah secara bersamaan, kemudian berbagi dan menantang temuan satu sama lain

33* **Modul atau fitur baru**: rekan tim dapat masing-masing memiliki bagian terpisah tanpa saling mengganggu

34* **Debugging dengan hipotesis bersaing**: rekan tim menguji teori berbeda secara paralel dan berkumpul pada jawaban lebih cepat

35* **Koordinasi lintas-layer**: perubahan yang mencakup frontend, backend, dan tests, masing-masing dimiliki oleh rekan tim berbeda

36 

37Tim agent menambah overhead koordinasi dan menggunakan token secara signifikan lebih banyak daripada satu session. Mereka bekerja paling baik ketika rekan tim dapat beroperasi secara independen. Untuk tugas sekuensial, edit file yang sama, atau pekerjaan dengan banyak dependensi, satu session atau [subagents](/id/sub-agents) lebih efektif.

38 

39### Bandingkan dengan subagents

40 

41Baik tim agent maupun [subagents](/id/sub-agents) memungkinkan Anda memparalelkan pekerjaan, tetapi mereka beroperasi berbeda. Pilih berdasarkan apakah pekerja Anda perlu berkomunikasi satu sama lain:

42 

43<Frame caption="Subagents hanya melaporkan hasil kembali ke agent utama dan tidak pernah berbicara satu sama lain. Dalam tim agent, rekan tim berbagi daftar tugas, mengklaim pekerjaan, dan berkomunikasi langsung satu sama lain.">

44 <img src="https://mintcdn.com/claude-code/nsvRFSDNfpSU5nT7/images/subagents-vs-agent-teams-light.png?fit=max&auto=format&n=nsvRFSDNfpSU5nT7&q=85&s=2f8db9b4f3705dd3ab931fbe2d96e42a" className="dark:hidden" alt="Diagram membandingkan arsitektur subagent dan tim agent. Subagents dihasilkan oleh agent utama, melakukan pekerjaan, dan melaporkan hasil kembali. Tim agent berkoordinasi melalui daftar tugas bersama, dengan rekan tim berkomunikasi langsung satu sama lain." width="4245" height="1615" data-path="images/subagents-vs-agent-teams-light.png" />

45 

46 <img src="https://mintcdn.com/claude-code/nsvRFSDNfpSU5nT7/images/subagents-vs-agent-teams-dark.png?fit=max&auto=format&n=nsvRFSDNfpSU5nT7&q=85&s=d573a037540f2ada6a9ae7d8285b46fd" className="hidden dark:block" alt="Diagram membandingkan arsitektur subagent dan tim agent. Subagents dihasilkan oleh agent utama, melakukan pekerjaan, dan melaporkan hasil kembali. Tim agent berkoordinasi melalui daftar tugas bersama, dengan rekan tim berkomunikasi langsung satu sama lain." width="4245" height="1615" data-path="images/subagents-vs-agent-teams-dark.png" />

47</Frame>

48 

49| | Subagents | Tim agent |

50| :---------------- | :----------------------------------------------------- | :------------------------------------------------------------- |

51| **Context** | Context window sendiri; hasil kembali ke pemanggil | Context window sendiri; sepenuhnya independen |

52| **Komunikasi** | Melaporkan hasil kembali ke agent utama saja | Rekan tim saling mengirim pesan secara langsung |

53| **Koordinasi** | Agent utama mengelola semua pekerjaan | Daftar tugas bersama dengan self-coordination |

54| **Terbaik untuk** | Tugas terfokus di mana hanya hasil yang penting | Pekerjaan kompleks yang memerlukan diskusi dan kolaborasi |

55| **Biaya token** | Lebih rendah: hasil diringkas kembali ke context utama | Lebih tinggi: setiap rekan tim adalah instance Claude terpisah |

56 

57Gunakan subagents ketika Anda membutuhkan pekerja cepat dan terfokus yang melaporkan kembali. Gunakan tim agent ketika rekan tim perlu berbagi temuan, menantang satu sama lain, dan berkoordinasi sendiri.

58 

59## Aktifkan tim agent

60 

61Tim agent dinonaktifkan secara default. Aktifkan dengan mengatur variabel environment `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` ke `1`, baik di environment shell Anda atau melalui [settings.json](/id/settings):

62 

63```json settings.json theme={null}

64{

65 "env": {

66 "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"

67 }

68}

69```

70 

71## Mulai tim agent pertama Anda

72 

73Setelah mengaktifkan tim agent, beri tahu Claude untuk membuat tim agent dan jelaskan tugas dan struktur tim yang Anda inginkan dalam bahasa alami. Claude membuat tim, menelurkan rekan tim, dan mengoordinasikan pekerjaan berdasarkan prompt Anda.

74 

75Contoh ini bekerja dengan baik karena tiga peran independen dan dapat mengeksplorasi masalah tanpa menunggu satu sama lain:

76 

77```text theme={null}

78Saya merancang alat CLI yang membantu developer melacak komentar TODO di seluruh

79codebase mereka. Buat tim agent untuk mengeksplorasi ini dari sudut berbeda: satu

80rekan tim pada UX, satu pada arsitektur teknis, satu memainkan devil's advocate.

81```

82 

83Dari sana, Claude membuat tim dengan [daftar tugas bersama](/id/interactive-mode#task-list), menelurkan rekan tim untuk setiap perspektif, membuat mereka mengeksplorasi masalah, mensintesis temuan, dan mencoba [membersihkan tim](#clean-up-the-team) ketika selesai.

84 

85Terminal lead mencantumkan semua rekan tim dan apa yang mereka kerjakan. Gunakan Shift+Down untuk bersiklus melalui rekan tim dan kirim pesan kepada mereka secara langsung. Setelah rekan tim terakhir, Shift+Down membungkus kembali ke lead.

86 

87Jika Anda ingin setiap rekan tim di split pane-nya sendiri, lihat [Pilih mode tampilan](#choose-a-display-mode).

88 

89## Kontrol tim agent Anda

90 

91Beri tahu lead apa yang Anda inginkan dalam bahasa alami. Ini menangani koordinasi tim, penugasan tugas, dan delegasi berdasarkan instruksi Anda.

92 

93### Pilih mode tampilan

94 

95Tim agent mendukung dua mode tampilan:

96 

97* **In-process**: semua rekan tim berjalan di dalam terminal utama Anda. Gunakan Shift+Down untuk bersiklus melalui rekan tim dan ketik untuk mengirim pesan kepada mereka secara langsung. Bekerja di terminal apa pun, tidak ada setup tambahan yang diperlukan.

98* **Split panes**: setiap rekan tim mendapat pane-nya sendiri. Anda dapat melihat output semua orang sekaligus dan klik ke dalam pane untuk berinteraksi secara langsung. Memerlukan tmux, atau iTerm2.

99 

100<Note>

101 `tmux` memiliki keterbatasan yang diketahui pada sistem operasi tertentu dan secara tradisional bekerja paling baik di macOS. Menggunakan `tmux -CC` di iTerm2 adalah entrypoint yang disarankan ke `tmux`.

102</Note>

103 

104Default adalah `"auto"`, yang menggunakan split panes jika Anda sudah berjalan di dalam session tmux, dan in-process sebaliknya. Pengaturan `"tmux"` mengaktifkan mode split-pane dan auto-detects apakah akan menggunakan tmux atau iTerm2 berdasarkan terminal Anda. Untuk mengganti, atur [`teammateMode`](/id/settings#available-settings) di `~/.claude/settings.json`:

105 

106```json theme={null}

107{

108 "teammateMode": "in-process"

109}

110```

111 

112Untuk memaksa mode in-process untuk satu session, teruskan sebagai flag:

113 

114```bash theme={null}

115claude --teammate-mode in-process

116```

117 

118Mode split-pane memerlukan baik [tmux](https://github.com/tmux/tmux/wiki) atau iTerm2 dengan [`it2` CLI](https://github.com/mkusaka/it2). Untuk menginstal secara manual:

119 

120* **tmux**: instal melalui package manager sistem Anda. Lihat [tmux wiki](https://github.com/tmux/tmux/wiki/Installing) untuk instruksi spesifik platform.

121* **iTerm2**: instal [`it2` CLI](https://github.com/mkusaka/it2), kemudian aktifkan Python API di **iTerm2 → Settings → General → Magic → Enable Python API**.

122 

123### Tentukan rekan tim dan model

124 

125Claude memutuskan jumlah rekan tim untuk dihasilkan berdasarkan tugas Anda, atau Anda dapat menentukan dengan tepat apa yang Anda inginkan:

126 

127```text theme={null}

128Buat tim dengan 4 rekan tim untuk refactor modul-modul ini secara paralel.

129Gunakan Sonnet untuk setiap rekan tim.

130```

131 

132### Perlukan persetujuan rencana untuk rekan tim

133 

134Untuk tugas kompleks atau berisiko, Anda dapat memerlukan rekan tim untuk merencanakan sebelum mengimplementasikan. Rekan tim bekerja dalam mode rencana read-only sampai lead menyetujui pendekatan mereka:

135 

136```text theme={null}

137Hasilkan rekan tim architect untuk refactor modul autentikasi.

138Perlukan persetujuan rencana sebelum mereka membuat perubahan apa pun.

139```

140 

141Ketika rekan tim selesai merencanakan, mereka mengirim permintaan persetujuan rencana ke lead. Lead meninjau rencana dan baik menyetujuinya atau menolaknya dengan umpan balik. Jika ditolak, rekan tim tetap dalam mode rencana, merevisi berdasarkan umpan balik, dan mengirimkan kembali. Setelah disetujui, rekan tim keluar dari mode rencana dan mulai implementasi.

142 

143Lead membuat keputusan persetujuan secara otonom. Untuk mempengaruhi penilaian lead, berikan kriteria dalam prompt Anda, seperti "hanya setujui rencana yang mencakup test coverage" atau "tolak rencana yang memodifikasi skema database."

144 

145### Berbicara dengan rekan tim secara langsung

146 

147Setiap rekan tim adalah session Claude Code penuh dan independen. Anda dapat mengirim pesan ke rekan tim mana pun secara langsung untuk memberikan instruksi tambahan, mengajukan pertanyaan lanjutan, atau mengalihkan pendekatan mereka.

148 

149* **Mode in-process**: gunakan Shift+Down untuk bersiklus melalui rekan tim, kemudian ketik untuk mengirim pesan kepada mereka. Tekan Enter untuk melihat session rekan tim, kemudian Escape untuk mengganggu giliran mereka saat ini. Tekan Ctrl+T untuk toggle daftar tugas.

150* **Mode split-pane**: klik ke dalam pane rekan tim untuk berinteraksi dengan session mereka secara langsung. Setiap rekan tim memiliki tampilan penuh dari terminal mereka sendiri.

151 

152### Tetapkan dan klaim tugas

153 

154Daftar tugas bersama mengoordinasikan pekerjaan di seluruh tim. Lead membuat tugas dan rekan tim mengerjakannya. Tugas memiliki tiga status: pending, in progress, dan completed. Tugas juga dapat bergantung pada tugas lain: tugas pending dengan dependensi yang tidak terselesaikan tidak dapat diklaim sampai dependensi tersebut selesai.

155 

156Lead dapat menugaskan tugas secara eksplisit, atau rekan tim dapat self-claim:

157 

158* **Lead menugaskan**: beri tahu lead tugas mana yang diberikan kepada rekan tim mana

159* **Self-claim**: setelah menyelesaikan tugas, rekan tim mengambil tugas unassigned, unblocked berikutnya sendiri

160 

161Klaim tugas menggunakan file locking untuk mencegah race conditions ketika beberapa rekan tim mencoba mengklaim tugas yang sama secara bersamaan.

162 

163### Matikan rekan tim

164 

165Untuk mengakhiri session rekan tim dengan baik:

166 

167```text theme={null}

168Minta rekan tim peneliti untuk shutdown

169```

170 

171Lead mengirim permintaan shutdown. Rekan tim dapat menyetujui, keluar dengan baik, atau menolak dengan penjelasan.

172 

173### Bersihkan tim

174 

175Ketika Anda selesai, minta lead untuk membersihkan:

176 

177```text theme={null}

178Bersihkan tim

179```

180 

181Ini menghapus sumber daya tim bersama. Ketika lead menjalankan cleanup, ia memeriksa rekan tim aktif dan gagal jika ada yang masih berjalan, jadi matikan mereka terlebih dahulu.

182 

183<Warning>

184 Selalu gunakan lead untuk membersihkan. Rekan tim tidak boleh menjalankan cleanup karena konteks tim mereka mungkin tidak terselesaikan dengan benar, berpotensi meninggalkan sumber daya dalam keadaan tidak konsisten.

185</Warning>

186 

187### Terapkan quality gates dengan hooks

188 

189Gunakan [hooks](/id/hooks) untuk menerapkan aturan ketika rekan tim menyelesaikan pekerjaan atau tugas dibuat atau diselesaikan:

190 

191* [`TeammateIdle`](/id/hooks#teammateidle): berjalan ketika rekan tim akan idle. Keluar dengan kode 2 untuk mengirim umpan balik dan membuat rekan tim tetap bekerja.

192* [`TaskCreated`](/id/hooks#taskcreated): berjalan ketika tugas sedang dibuat. Keluar dengan kode 2 untuk mencegah pembuatan dan mengirim umpan balik.

193* [`TaskCompleted`](/id/hooks#taskcompleted): berjalan ketika tugas ditandai selesai. Keluar dengan kode 2 untuk mencegah penyelesaian dan mengirim umpan balik.

194 

195## Bagaimana tim agent bekerja

196 

197Bagian ini mencakup arsitektur dan mekanik di balik tim agent. Jika Anda ingin mulai menggunakannya, lihat [Kontrol tim agent Anda](#control-your-agent-team) di atas.

198 

199### Bagaimana Claude memulai tim agent

200 

201Ada dua cara tim agent dimulai:

202 

203* **Anda meminta tim**: berikan Claude tugas yang menguntungkan dari pekerjaan paralel dan secara eksplisit minta tim agent. Claude membuat satu berdasarkan instruksi Anda.

204* **Claude mengusulkan tim**: jika Claude menentukan tugas Anda akan menguntungkan dari pekerjaan paralel, mungkin menyarankan membuat tim. Anda mengonfirmasi sebelum melanjutkan.

205 

206Dalam kedua kasus, Anda tetap mengendalikan. Claude tidak akan membuat tim tanpa persetujuan Anda.

207 

208### Arsitektur

209 

210Tim agent terdiri dari:

211 

212| Komponen | Peran |

213| :--------------- | :----------------------------------------------------------------------------------------------- |

214| **Team lead** | Session Claude Code utama yang membuat tim, menelurkan rekan tim, dan mengoordinasikan pekerjaan |

215| **Rekan tim** | Instance Claude Code terpisah yang masing-masing bekerja pada tugas yang ditugaskan |

216| **Daftar tugas** | Daftar item pekerjaan bersama yang diklaim dan diselesaikan rekan tim |

217| **Mailbox** | Sistem pesan untuk komunikasi antar agent |

218 

219Lihat [Pilih mode tampilan](#choose-a-display-mode) untuk opsi konfigurasi tampilan. Pesan rekan tim tiba di lead secara otomatis.

220 

221Sistem mengelola dependensi tugas secara otomatis. Ketika rekan tim menyelesaikan tugas yang tugas lain bergantung padanya, tugas yang diblokir membuka tanpa intervensi manual.

222 

223Tim dan tugas disimpan secara lokal:

224 

225* **Konfigurasi tim**: `~/.claude/teams/{team-name}/config.json`

226* **Daftar tugas**: `~/.claude/tasks/{team-name}/`

227 

228Claude Code menghasilkan keduanya secara otomatis ketika Anda membuat tim dan memperbarui mereka saat rekan tim bergabung, idle, atau pergi. Konfigurasi tim menyimpan status runtime seperti session IDs dan tmux pane IDs, jadi jangan mengeditnya dengan tangan atau pre-author: perubahan Anda ditimpa pada update status berikutnya.

229 

230Untuk mendefinisikan peran rekan tim yang dapat digunakan kembali, gunakan [subagent definitions](#use-subagent-definitions-for-teammates) sebagai gantinya.

231 

232Konfigurasi tim berisi array `members` dengan nama setiap rekan tim, agent ID, dan tipe agent. Rekan tim dapat membaca file ini untuk menemukan anggota tim lainnya.

233 

234Tidak ada padanan tingkat proyek dari konfigurasi tim. File seperti `.claude/teams/teams.json` di direktori proyek Anda tidak dikenali sebagai konfigurasi; Claude memperlakukannya sebagai file biasa.

235 

236### Gunakan subagent definitions untuk rekan tim

237 

238Ketika menelurkan rekan tim, Anda dapat mereferensikan tipe [subagent](/id/sub-agents) dari [subagent scope](/id/sub-agents#choose-the-subagent-scope) apa pun: proyek, pengguna, plugin, atau CLI-defined. Ini memungkinkan Anda mendefinisikan peran sekali, seperti security-reviewer atau test-runner, dan menggunakannya kembali baik sebagai subagent yang didelegasikan maupun sebagai rekan tim agent team.

239 

240Untuk menggunakan subagent definition, sebutkan berdasarkan nama ketika meminta Claude untuk menelurkan rekan tim:

241 

242```text theme={null}

243Hasilkan rekan tim menggunakan tipe agent security-reviewer untuk mengaudit modul auth.

244```

245 

246Rekan tim menghormati allowlist `tools` definisi itu dan `model`, dan body definisi ditambahkan ke system prompt rekan tim sebagai instruksi tambahan daripada menggantinya. Team coordination tools seperti `SendMessage` dan task management tools selalu tersedia untuk rekan tim bahkan ketika `tools` membatasi tools lain.

247 

248<Note>

249 Field frontmatter `skills` dan `mcpServers` dalam subagent definition tidak diterapkan ketika definisi itu berjalan sebagai rekan tim. Rekan tim memuat skills dan MCP servers dari pengaturan proyek dan pengguna Anda, sama seperti session reguler.

250</Note>

251 

252### Izin

253 

254Rekan tim dimulai dengan pengaturan izin lead. Jika lead berjalan dengan `--dangerously-skip-permissions`, semua rekan tim juga demikian. Setelah dihasilkan, Anda dapat mengubah mode rekan tim individual, tetapi Anda tidak dapat mengatur mode per-rekan tim pada waktu spawn.

255 

256### Context dan komunikasi

257 

258Setiap rekan tim memiliki context window-nya sendiri. Ketika dihasilkan, rekan tim memuat konteks proyek yang sama seperti session reguler: CLAUDE.md, MCP servers, dan skills. Mereka juga menerima spawn prompt dari lead. Riwayat percakapan lead tidak terbawa.

259 

260**Bagaimana rekan tim berbagi informasi:**

261 

262* **Pengiriman pesan otomatis**: ketika rekan tim mengirim pesan, mereka dikirimkan secara otomatis ke penerima. Lead tidak perlu polling untuk update.

263* **Notifikasi idle**: ketika rekan tim selesai dan berhenti, mereka secara otomatis memberi tahu lead.

264* **Daftar tugas bersama**: semua agent dapat melihat status tugas dan mengklaim pekerjaan yang tersedia.

265* **Pesan rekan tim**: kirim pesan ke satu rekan tim spesifik berdasarkan nama. Untuk menjangkau semua orang, kirim satu pesan per penerima.

266 

267Lead menugaskan setiap rekan tim nama ketika menelurkannya, dan rekan tim mana pun dapat mengirim pesan ke yang lain berdasarkan nama itu. Untuk mendapatkan nama yang dapat diprediksi yang dapat Anda referensikan dalam prompt kemudian, beri tahu lead apa yang harus dipanggil setiap rekan tim dalam instruksi spawn Anda.

268 

269### Penggunaan token

270 

271Tim agent menggunakan token secara signifikan lebih banyak daripada satu session. Setiap rekan tim memiliki context window-nya sendiri, dan penggunaan token skala dengan jumlah rekan tim aktif. Untuk penelitian, review, dan pekerjaan fitur baru, token tambahan biasanya berharga. Untuk tugas rutin, satu session lebih cost-effective. Lihat [biaya token tim agent](/id/costs#agent-team-token-costs) untuk panduan penggunaan.

272 

273## Contoh use case

274 

275Contoh-contoh ini menunjukkan bagaimana tim agent menangani tugas di mana eksplorasi paralel menambah nilai.

276 

277### Jalankan code review paralel

278 

279Seorang reviewer tunggal cenderung tertarik pada satu jenis masalah pada satu waktu. Membagi kriteria review menjadi domain independen berarti keamanan, kinerja, dan test coverage semuanya mendapat perhatian menyeluruh secara bersamaan. Prompt menugaskan setiap rekan tim lensa yang berbeda sehingga mereka tidak tumpang tindih:

280 

281```text theme={null}

282Buat tim agent untuk review PR #142. Hasilkan tiga reviewer:

283- Satu fokus pada implikasi keamanan

284- Satu memeriksa dampak kinerja

285- Satu memvalidasi test coverage

286Buat mereka masing-masing review dan laporkan temuan.

287```

288 

289Setiap reviewer bekerja dari PR yang sama tetapi menerapkan filter berbeda. Lead mensintesis temuan di ketiga setelah mereka selesai.

290 

291### Investigasi dengan hipotesis bersaing

292 

293Ketika akar penyebab tidak jelas, satu agent cenderung menemukan satu penjelasan yang masuk akal dan berhenti mencari. Prompt melawan ini dengan membuat rekan tim secara eksplisit adversarial: pekerjaan setiap orang bukan hanya menyelidiki teori mereka sendiri tetapi menantang yang lain.

294 

295```text theme={null}

296Pengguna melaporkan aplikasi keluar setelah satu pesan alih-alih tetap terhubung.

297Hasilkan 5 rekan tim agent untuk menyelidiki hipotesis berbeda. Buat mereka berbicara

298satu sama lain untuk mencoba membantah teori satu sama lain, seperti debat

299ilmiah. Perbarui dokumen temuan dengan konsensus apa pun yang muncul.

300```

301 

302Struktur debat adalah mekanisme kunci di sini. Investigasi sekuensial menderita dari anchoring: setelah satu teori dieksplorasi, investigasi berikutnya bias terhadapnya.

303 

304Dengan beberapa investigator independen secara aktif mencoba membantah satu sama lain, teori yang bertahan jauh lebih mungkin menjadi akar penyebab sebenarnya.

305 

306## Best practices

307 

308### Berikan rekan tim konteks yang cukup

309 

310Rekan tim memuat konteks proyek secara otomatis, termasuk CLAUDE.md, MCP servers, dan skills, tetapi mereka tidak mewarisi riwayat percakapan lead. Lihat [Context dan komunikasi](#context-and-communication) untuk detail. Sertakan detail spesifik tugas dalam spawn prompt:

311 

312```text theme={null}

313Hasilkan rekan tim security reviewer dengan prompt: "Review modul autentikasi

314di src/auth/ untuk kerentanan keamanan. Fokus pada penanganan token, manajemen

315session, dan validasi input. Aplikasi menggunakan token JWT yang disimpan di

316httpOnly cookies. Laporkan masalah apa pun dengan rating severity."

317```

318 

319### Pilih ukuran tim yang sesuai

320 

321Tidak ada batas keras pada jumlah rekan tim, tetapi batasan praktis berlaku:

322 

323* **Biaya token skala linear**: setiap rekan tim memiliki context window-nya sendiri dan mengkonsumsi token secara independen. Lihat [biaya token tim agent](/id/costs#agent-team-token-costs) untuk detail.

324* **Overhead koordinasi meningkat**: lebih banyak rekan tim berarti lebih banyak komunikasi, koordinasi tugas, dan potensi konflik

325* **Diminishing returns**: di luar titik tertentu, rekan tim tambahan tidak mempercepat pekerjaan secara proporsional

326 

327Mulai dengan 3-5 rekan tim untuk sebagian besar workflow. Ini menyeimbangkan pekerjaan paralel dengan koordinasi yang dapat dikelola. Contoh-contoh dalam panduan ini menggunakan 3-5 rekan tim karena rentang itu bekerja dengan baik di berbagai jenis tugas.

328 

329Memiliki 5-6 [tasks](/id/agent-teams#architecture) per rekan tim membuat semua orang produktif tanpa context switching yang berlebihan. Jika Anda memiliki 15 tugas independen, 3 rekan tim adalah titik awal yang baik.

330 

331Skala naik hanya ketika pekerjaan benar-benar menguntungkan dari rekan tim bekerja secara bersamaan. Tiga rekan tim terfokus sering mengungguli lima yang tersebar.

332 

333### Ukuran tugas dengan tepat

334 

335* **Terlalu kecil**: overhead koordinasi melebihi manfaat

336* **Terlalu besar**: rekan tim bekerja terlalu lama tanpa check-in, meningkatkan risiko usaha yang terbuang

337* **Tepat**: unit self-contained yang menghasilkan deliverable yang jelas, seperti fungsi, file test, atau review

338 

339<Tip>

340 Lead memecah pekerjaan menjadi tugas dan menugaskan mereka ke rekan tim secara otomatis. Jika tidak membuat cukup tugas, minta untuk membagi pekerjaan menjadi potongan yang lebih kecil. Memiliki 5-6 tugas per rekan tim membuat semua orang produktif dan memungkinkan lead untuk menugaskan kembali pekerjaan jika seseorang terjebak.

341</Tip>

342 

343### Tunggu rekan tim selesai

344 

345Kadang-kadang lead mulai mengimplementasikan tugas sendiri alih-alih menunggu rekan tim. Jika Anda memperhatikan ini:

346 

347```text theme={null}

348Tunggu rekan tim Anda menyelesaikan tugas mereka sebelum melanjutkan

349```

350 

351### Mulai dengan penelitian dan review

352 

353Jika Anda baru mengenal tim agent, mulai dengan tugas yang memiliki batas yang jelas dan tidak memerlukan penulisan kode: review PR, penelitian library, atau investigasi bug. Tugas-tugas ini menunjukkan nilai eksplorasi paralel tanpa tantangan koordinasi yang datang dengan implementasi paralel.

354 

355### Hindari konflik file

356 

357Dua rekan tim mengedit file yang sama menyebabkan overwrites. Pecah pekerjaan sehingga setiap rekan tim memiliki set file berbeda.

358 

359### Monitor dan kemudi

360 

361Periksa kemajuan rekan tim, alihkan pendekatan yang tidak berfungsi, dan sintesis temuan saat tiba. Membiarkan tim berjalan tanpa diawasi terlalu lama meningkatkan risiko usaha yang terbuang.

362 

363## Troubleshooting

364 

365### Rekan tim tidak muncul

366 

367Jika rekan tim tidak muncul setelah Anda meminta Claude untuk membuat tim:

368 

369* Dalam mode in-process, rekan tim mungkin sudah berjalan tetapi tidak terlihat. Tekan Shift+Down untuk bersiklus melalui rekan tim aktif.

370* Periksa bahwa tugas yang Anda berikan Claude cukup kompleks untuk menjamin tim. Claude memutuskan apakah akan menelurkan rekan tim berdasarkan tugas.

371* Jika Anda secara eksplisit meminta split panes, pastikan tmux diinstal dan tersedia di PATH Anda:

372 ```bash theme={null}

373 which tmux

374 ```

375* Untuk iTerm2, verifikasi `it2` CLI diinstal dan Python API diaktifkan di preferensi iTerm2.

376 

377### Terlalu banyak permission prompts

378 

379Permintaan izin rekan tim naik ke lead, yang dapat menciptakan gesekan. Pre-approve operasi umum di [pengaturan izin](/id/permissions) Anda sebelum menelurkan rekan tim untuk mengurangi gangguan.

380 

381### Rekan tim berhenti pada error

382 

383Rekan tim dapat berhenti setelah mengalami error alih-alih pulih. Periksa output mereka menggunakan Shift+Down dalam mode in-process atau dengan mengklik pane dalam mode split, kemudian baik:

384 

385* Berikan instruksi tambahan kepada mereka secara langsung

386* Hasilkan rekan tim pengganti untuk melanjutkan pekerjaan

387 

388### Lead shutdown sebelum pekerjaan selesai

389 

390Lead dapat memutuskan tim selesai sebelum semua tugas benar-benar selesai. Jika ini terjadi, beri tahu untuk terus. Anda juga dapat memberi tahu lead untuk menunggu rekan tim selesai sebelum melanjutkan jika mulai melakukan pekerjaan alih-alih mendelegasikan.

391 

392### Orphaned tmux sessions

393 

394Jika session tmux bertahan setelah tim berakhir, mungkin tidak sepenuhnya dibersihkan. Daftar session dan bunuh yang dibuat oleh tim:

395 

396```bash theme={null}

397tmux ls

398tmux kill-session -t <session-name>

399```

400 

401## Keterbatasan

402 

403Tim agent bersifat eksperimental. Keterbatasan saat ini untuk diketahui:

404 

405* **Tidak ada session resumption dengan rekan tim in-process**: `/resume` dan `/rewind` tidak mengembalikan rekan tim in-process. Setelah melanjutkan session, lead dapat mencoba mengirim pesan ke rekan tim yang tidak lagi ada. Jika ini terjadi, beri tahu lead untuk menelurkan rekan tim baru.

406* **Status tugas dapat tertinggal**: rekan tim kadang-kadang gagal menandai tugas sebagai selesai, yang memblokir tugas dependen. Jika tugas tampak terjebak, periksa apakah pekerjaan benar-benar selesai dan perbarui status tugas secara manual atau beri tahu lead untuk mendorong rekan tim.

407* **Shutdown dapat lambat**: rekan tim menyelesaikan permintaan atau tool call saat ini sebelum shutdown, yang dapat memakan waktu.

408* **Satu tim per session**: lead hanya dapat mengelola satu tim pada satu waktu. Bersihkan tim saat ini sebelum memulai yang baru.

409* **Tidak ada tim bersarang**: rekan tim tidak dapat menelurkan tim atau rekan tim mereka sendiri. Hanya lead yang dapat mengelola tim.

410* **Lead tetap**: session yang membuat tim adalah lead seumur hidupnya. Anda tidak dapat mempromosikan rekan tim ke lead atau mentransfer kepemimpinan.

411* **Izin ditetapkan pada spawn**: semua rekan tim dimulai dengan mode izin lead. Anda dapat mengubah mode rekan tim individual setelah spawn, tetapi Anda tidak dapat mengatur mode per-rekan tim pada waktu spawn.

412* **Split panes memerlukan tmux atau iTerm2**: mode in-process default bekerja di terminal apa pun. Mode split-pane tidak didukung di integrated terminal VS Code, Windows Terminal, atau Ghostty.

413 

414<Tip>

415 **`CLAUDE.md` bekerja secara normal**: rekan tim membaca file `CLAUDE.md` dari direktori kerja mereka. Gunakan ini untuk memberikan panduan spesifik proyek ke semua rekan tim.

416</Tip>

417 

418## Langkah berikutnya

419 

420Jelajahi pendekatan terkait untuk pekerjaan paralel dan delegasi:

421 

422* **Delegasi ringan**: [subagents](/id/sub-agents) menelurkan agent pembantu untuk penelitian atau verifikasi dalam session Anda, lebih baik untuk tugas yang tidak memerlukan koordinasi inter-agent

423* **Session paralel manual**: [Git worktrees](/id/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees) memungkinkan Anda menjalankan beberapa session Claude Code sendiri tanpa koordinasi tim otomatis

424* **Bandingkan pendekatan**: lihat perbandingan [subagent vs tim agent](/id/features-overview#compare-similar-features) untuk rincian side-by-side

amazon-bedrock.md +589 −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# Claude Code di Amazon Bedrock

6 

7> Pelajari tentang mengonfigurasi Claude Code melalui Amazon Bedrock, termasuk pengaturan, konfigurasi IAM, dan pemecahan masalah.

8 

9export const ContactSalesCard = ({surface}) => {

10 const utm = content => `utm_source=claude_code&utm_medium=docs&utm_content=${surface}_${content}`;

11 const iconArrowRight = (size = 13) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

12 <line x1="5" y1="12" x2="19" y2="12" />

13 <polyline points="12 5 19 12 12 19" />

14 </svg>;

15 const STYLES = `

16.cc-cs {

17 --cs-slate: #141413;

18 --cs-clay: #d97757;

19 --cs-clay-deep: #c6613f;

20 --cs-gray-000: #ffffff;

21 --cs-gray-700: #3d3d3a;

22 --cs-border-default: rgba(31, 30, 29, 0.15);

23 font-family: inherit;

24}

25.dark .cc-cs {

26 --cs-slate: #f0eee6;

27 --cs-gray-000: #262624;

28 --cs-gray-700: #bfbdb4;

29 --cs-border-default: rgba(240, 238, 230, 0.14);

30}

31.cc-cs-card {

32 display: flex; align-items: center; justify-content: space-between;

33 gap: 16px; padding: 14px 16px; margin: 0;

34 background: var(--cs-gray-000); border: 0.5px solid var(--cs-border-default);

35 border-radius: 8px; flex-wrap: wrap;

36}

37.cc-cs-text { font-size: 13px; color: var(--cs-gray-700); line-height: 1.5; flex: 1; min-width: 240px; }

38.cc-cs-text strong { font-weight: 550; color: var(--cs-slate); }

39.cc-cs-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }

40.cc-cs-btn-clay {

41 display: inline-flex; align-items: center; gap: 8px;

42 background: var(--cs-clay-deep); color: #fff; border: none;

43 border-radius: 8px; padding: 8px 14px;

44 font-size: 13px; font-weight: 500;

45 transition: background-color 0.15s; white-space: nowrap;

46}

47.cc-cs-btn-clay:hover { background: var(--cs-clay); }

48.cc-cs-btn-ghost {

49 display: inline-flex; align-items: center; gap: 8px;

50 background: transparent; color: var(--cs-gray-700);

51 border: 0.5px solid var(--cs-border-default);

52 border-radius: 8px; padding: 8px 14px;

53 font-size: 13px; font-weight: 500;

54}

55.cc-cs-btn-ghost:hover { background: rgba(0, 0, 0, 0.04); }

56.dark .cc-cs-btn-ghost:hover { background: rgba(255, 255, 255, 0.04); }

57@media (max-width: 720px) {

58 .cc-cs-actions { width: 100%; }

59}

60`;

61 return <div className="cc-cs not-prose">

62 <style>{STYLES}</style>

63 <div className="cc-cs-card">

64 <div className="cc-cs-text">

65 <strong>Deploying Claude Code across your organization?</strong> Talk to sales about enterprise plans, SSO, and centralized billing.

66 </div>

67 <div className="cc-cs-actions">

68 <a href={`https://claude.com/pricing?${utm('view_plans')}#plans-business`} className="cc-cs-btn-ghost">

69 View plans

70 </a>

71 <a href={`https://claude.com/contact-sales?${utm('contact_sales')}`} className="cc-cs-btn-clay">

72 Contact sales {iconArrowRight()}

73 </a>

74 </div>

75 </div>

76 </div>;

77};

78 

79export const Experiment = ({flag, treatment, children}) => {

80 const VID_KEY = 'exp_vid';

81 const CONSENT_COUNTRIES = new Set(['AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'RE', 'GP', 'MQ', 'GF', 'YT', 'BL', 'MF', 'PM', 'WF', 'PF', 'NC', 'AW', 'CW', 'SX', 'FO', 'GL', 'AX', 'GB', 'UK', 'AI', 'BM', 'IO', 'VG', 'KY', 'FK', 'GI', 'MS', 'PN', 'SH', 'TC', 'GG', 'JE', 'IM', 'CA', 'BR', 'IN']);

82 const fnv1a = s => {

83 let h = 0x811c9dc5;

84 for (let i = 0; i < s.length; i++) {

85 h ^= s.charCodeAt(i);

86 h += (h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24);

87 }

88 return h >>> 0;

89 };

90 const bucket = (seed, vid) => fnv1a(fnv1a(seed + vid) + '') % 10000 < 5000 ? 'control' : 'treatment';

91 const [decision] = useState(() => {

92 const params = new URLSearchParams(location.search);

93 const preBucketed = document.documentElement.dataset['gb_' + flag.replace(/-/g, '_')];

94 const force = params.get('gb-force');

95 if (force) {

96 for (const p of force.split(',')) {

97 const [k, v] = p.split(':');

98 if (k === flag) return {

99 variant: v || 'treatment',

100 track: false

101 };

102 }

103 }

104 if (navigator.globalPrivacyControl) {

105 return {

106 variant: 'control',

107 track: false

108 };

109 }

110 const prefsMatch = document.cookie.match(/(?:^|; )anthropic-consent-preferences=([^;]+)/);

111 if (prefsMatch) {

112 try {

113 if (JSON.parse(decodeURIComponent(prefsMatch[1])).analytics !== true) {

114 return {

115 variant: 'control',

116 track: false

117 };

118 }

119 } catch {

120 return {

121 variant: 'control',

122 track: false

123 };

124 }

125 } else {

126 const country = params.get('country')?.toUpperCase() || (document.cookie.match(/(?:^|; )cf_geo=([A-Z]{2})/) || [])[1];

127 if (!country || CONSENT_COUNTRIES.has(country)) {

128 return {

129 variant: 'control',

130 track: false

131 };

132 }

133 }

134 let vid;

135 try {

136 const ajsMatch = document.cookie.match(/(?:^|; )ajs_anonymous_id=([^;]+)/);

137 if (ajsMatch) {

138 vid = decodeURIComponent(ajsMatch[1]).replace(/^"|"$/g, '');

139 } else {

140 vid = localStorage.getItem(VID_KEY);

141 if (!vid) {

142 vid = crypto.randomUUID();

143 }

144 document.cookie = `ajs_anonymous_id=${vid}; domain=.claude.com; path=/; Secure; SameSite=Lax; max-age=31536000`;

145 }

146 try {

147 localStorage.setItem(VID_KEY, vid);

148 } catch {}

149 } catch {

150 return {

151 variant: 'control',

152 track: false

153 };

154 }

155 const variant = preBucketed === '1' ? 'treatment' : preBucketed === '0' ? 'control' : bucket(flag, vid);

156 return {

157 variant,

158 track: true,

159 vid

160 };

161 });

162 useEffect(() => {

163 if (!decision.track) return;

164 fetch('https://api.anthropic.com/api/event_logging/v2/batch', {

165 method: 'POST',

166 headers: {

167 'Content-Type': 'application/json',

168 'x-service-name': 'claude_code_docs'

169 },

170 body: JSON.stringify({

171 events: [{

172 event_type: 'GrowthbookExperimentEvent',

173 event_data: {

174 device_id: decision.vid,

175 anonymous_id: decision.vid,

176 timestamp: new Date().toISOString(),

177 experiment_id: flag,

178 variation_id: decision.variant === 'treatment' ? 1 : 0,

179 environment: 'production'

180 }

181 }]

182 }),

183 keepalive: true

184 }).catch(() => {});

185 }, []);

186 return decision.variant === 'treatment' ? treatment : children;

187};

188 

189<Experiment flag="docs-contact-sales-cta" treatment={<ContactSalesCard surface="bedrock" />} />

190 

191## Prasyarat

192 

193Sebelum mengonfigurasi Claude Code dengan Bedrock, pastikan Anda memiliki:

194 

195* Akun AWS dengan akses Bedrock yang diaktifkan

196* Akses ke model Claude yang diinginkan (misalnya, Claude Sonnet 4.6) di Bedrock

197* AWS CLI terinstal dan dikonfigurasi (opsional - hanya diperlukan jika Anda tidak memiliki mekanisme lain untuk mendapatkan kredensial)

198* Izin IAM yang sesuai

199 

200Untuk masuk dengan kredensial Bedrock Anda sendiri, ikuti [Masuk dengan Bedrock](#sign-in-with-bedrock) di bawah ini. Untuk menerapkan Claude Code di seluruh tim, gunakan langkah [pengaturan manual](#set-up-manually) dan [pin versi model Anda](#4-pin-model-versions) sebelum melakukan peluncuran.

201 

202## Masuk dengan Bedrock

203 

204Jika Anda memiliki kredensial AWS dan ingin mulai menggunakan Claude Code melalui Bedrock, wizard login akan memandu Anda. Anda menyelesaikan prasyarat sisi AWS sekali per akun; wizard menangani sisi Claude Code.

205 

206<Steps>

207 <Step title="Aktifkan model Anthropic di akun AWS Anda">

208 Di [konsol Amazon Bedrock](https://console.aws.amazon.com/bedrock/), buka katalog Model, pilih model Anthropic, dan kirimkan formulir kasus penggunaan. Akses diberikan segera setelah pengiriman. Lihat [Kirimkan detail kasus penggunaan](#1-submit-use-case-details) untuk AWS Organizations dan [konfigurasi IAM](#iam-configuration) untuk izin yang dibutuhkan peran Anda.

209 </Step>

210 

211 <Step title="Mulai Claude Code dan pilih Bedrock">

212 Jalankan `claude`. Pada prompt login, pilih **3rd-party platform**, kemudian **Amazon Bedrock**.

213 </Step>

214 

215 <Step title="Ikuti prompt wizard">

216 Pilih cara Anda melakukan autentikasi ke AWS: profil AWS yang terdeteksi dari direktori `~/.aws` Anda, kunci API Bedrock, kunci akses dan rahasia, atau kredensial yang sudah ada di lingkungan Anda. Wizard mengambil wilayah Anda, memverifikasi model Claude mana yang dapat dijalankan akun Anda, dan memungkinkan Anda untuk meminnya. Ini menyimpan hasilnya ke blok `env` dari [file pengaturan pengguna Anda](/id/settings), jadi Anda tidak perlu mengekspor variabel lingkungan sendiri.

217 </Step>

218</Steps>

219 

220Setelah Anda masuk, jalankan `/setup-bedrock` kapan saja untuk membuka kembali wizard dan mengubah kredensial, wilayah, atau pin model Anda.

221 

222## Pengaturan manual

223 

224Untuk mengonfigurasi Bedrock melalui variabel lingkungan alih-alih wizard, misalnya di CI atau peluncuran perusahaan yang ditulis skrip, ikuti langkah-langkah di bawah ini.

225 

226### 1. Kirimkan detail kasus penggunaan

227 

228Pengguna pertama kali dari model Anthropic harus mengirimkan detail kasus penggunaan sebelum memanggil model. Ini dilakukan sekali per akun AWS.

229 

2301. Pastikan Anda memiliki izin IAM yang tepat seperti yang dijelaskan di bawah

2312. Navigasikan ke [konsol Amazon Bedrock](https://console.aws.amazon.com/bedrock/)

2323. Pilih model Anthropic dari **Model catalog**

2334. Lengkapi formulir kasus penggunaan. Akses diberikan segera setelah pengiriman.

234 

235Jika Anda menggunakan AWS Organizations, Anda dapat mengirimkan formulir sekali dari akun manajemen menggunakan [`PutUseCaseForModelAccess` API](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_PutUseCaseForModelAccess.html). Panggilan ini memerlukan izin IAM `bedrock:PutUseCaseForModelAccess`. Persetujuan meluas ke akun anak secara otomatis.

236 

237### 2. Konfigurasi kredensial AWS

238 

239Claude Code menggunakan rantai kredensial SDK AWS default. Atur kredensial Anda menggunakan salah satu metode berikut:

240 

241**Opsi A: Konfigurasi AWS CLI**

242 

243```bash theme={null}

244aws configure

245```

246 

247**Opsi B: Variabel lingkungan (kunci akses)**

248 

249```bash theme={null}

250export AWS_ACCESS_KEY_ID=your-access-key-id

251export AWS_SECRET_ACCESS_KEY=your-secret-access-key

252export AWS_SESSION_TOKEN=your-session-token

253```

254 

255**Opsi C: Variabel lingkungan (profil SSO)**

256 

257```bash theme={null}

258aws sso login --profile=<your-profile-name>

259 

260export AWS_PROFILE=your-profile-name

261```

262 

263**Opsi D: Kredensial AWS Management Console**

264 

265```bash theme={null}

266aws login

267```

268 

269[Pelajari lebih lanjut](https://docs.aws.amazon.com/signin/latest/userguide/command-line-sign-in.html) tentang `aws login`.

270 

271**Opsi E: Kunci API Bedrock**

272 

273```bash theme={null}

274export AWS_BEARER_TOKEN_BEDROCK=your-bedrock-api-key

275```

276 

277Kunci API Bedrock menyediakan metode autentikasi yang lebih sederhana tanpa memerlukan kredensial AWS lengkap. [Pelajari lebih lanjut tentang kunci API Bedrock](https://aws.amazon.com/blogs/machine-learning/accelerate-ai-development-with-amazon-bedrock-api-keys/).

278 

279#### Konfigurasi kredensial lanjutan

280 

281Claude Code mendukung penyegaran kredensial otomatis untuk AWS SSO dan penyedia identitas perusahaan. Tambahkan pengaturan ini ke file pengaturan Claude Code Anda (lihat [Settings](/id/settings) untuk lokasi file).

282 

283Ketika Claude Code mendeteksi bahwa kredensial AWS Anda telah kedaluwarsa (baik secara lokal berdasarkan stempel waktu mereka atau ketika Bedrock mengembalikan kesalahan kredensial), Claude Code akan secara otomatis menjalankan perintah `awsAuthRefresh` dan/atau `awsCredentialExport` yang dikonfigurasi untuk mendapatkan kredensial baru sebelum mencoba ulang permintaan.

284 

285##### Contoh konfigurasi

286 

287```json theme={null}

288{

289 "awsAuthRefresh": "aws sso login --profile myprofile",

290 "env": {

291 "AWS_PROFILE": "myprofile"

292 }

293}

294```

295 

296##### Pengaturan konfigurasi dijelaskan

297 

298**`awsAuthRefresh`**: Gunakan ini untuk perintah yang memodifikasi direktori `.aws`, seperti memperbarui kredensial, cache SSO, atau file konfigurasi. Output perintah ditampilkan kepada pengguna, tetapi input interaktif tidak didukung. Ini bekerja dengan baik untuk alur SSO berbasis browser di mana CLI menampilkan URL atau kode dan Anda menyelesaikan autentikasi di browser.

299 

300**`awsCredentialExport`**: Hanya gunakan ini jika Anda tidak dapat memodifikasi `.aws` dan harus secara langsung mengembalikan kredensial. Output ditangkap secara diam-diam dan tidak ditampilkan kepada pengguna. Perintah harus menampilkan JSON dalam format ini:

301 

302```json theme={null}

303{

304 "Credentials": {

305 "AccessKeyId": "value",

306 "SecretAccessKey": "value",

307 "SessionToken": "value"

308 }

309}

310```

311 

312### 3. Konfigurasi Claude Code

313 

314Atur variabel lingkungan berikut untuk mengaktifkan Bedrock:

315 

316```bash theme={null}

317# Aktifkan integrasi Bedrock

318export CLAUDE_CODE_USE_BEDROCK=1

319export AWS_REGION=us-east-1 # atau wilayah pilihan Anda

320 

321# Opsional: Ganti wilayah untuk model kecil/cepat (Haiku).

322# Juga berlaku untuk Bedrock Mantle.

323export ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION=us-west-2

324 

325# Opsional: Ganti URL endpoint Bedrock untuk endpoint khusus atau gateway

326# export ANTHROPIC_BEDROCK_BASE_URL=https://bedrock-runtime.us-east-1.amazonaws.com

327```

328 

329Saat mengaktifkan Bedrock untuk Claude Code, perhatikan hal berikut:

330 

331* `AWS_REGION` adalah variabel lingkungan yang diperlukan. Claude Code tidak membaca dari file konfigurasi `.aws` untuk pengaturan ini.

332* Saat menggunakan Bedrock, perintah `/login` dan `/logout` dinonaktifkan karena autentikasi ditangani melalui kredensial AWS.

333* Anda dapat menggunakan file pengaturan untuk variabel lingkungan seperti `AWS_PROFILE` yang tidak ingin Anda bocorkan ke proses lain. Lihat [Settings](/id/settings) untuk informasi lebih lanjut.

334 

335### 4. Pin versi model

336 

337<Warning>

338 Pin versi model spesifik saat menerapkan ke beberapa pengguna. Tanpa pinning, alias model seperti `sonnet` dan `opus` diselesaikan ke versi terbaru, yang mungkin belum tersedia di akun Bedrock Anda ketika Anthropic merilis pembaruan. Claude Code [kembali](#startup-model-checks) ke versi sebelumnya saat startup ketika versi terbaru tidak tersedia, tetapi pinning memungkinkan Anda mengontrol kapan pengguna Anda beralih ke model baru.

339</Warning>

340 

341Atur variabel lingkungan ini ke ID model Bedrock spesifik.

342 

343Tanpa `ANTHROPIC_DEFAULT_OPUS_MODEL`, alias `opus` di Bedrock diselesaikan ke Opus 4.6. Atur ke ID Opus 4.7 untuk menggunakan model terbaru:

344 

345```bash theme={null}

346export ANTHROPIC_DEFAULT_OPUS_MODEL='us.anthropic.claude-opus-4-7'

347export ANTHROPIC_DEFAULT_SONNET_MODEL='us.anthropic.claude-sonnet-4-6'

348export ANTHROPIC_DEFAULT_HAIKU_MODEL='us.anthropic.claude-haiku-4-5-20251001-v1:0'

349```

350 

351Variabel ini menggunakan ID profil inferensi lintas wilayah (dengan awalan `us.`). Jika Anda menggunakan awalan wilayah berbeda atau profil inferensi aplikasi, sesuaikan sesuai kebutuhan. Untuk ID model saat ini dan warisan, lihat [Models overview](https://platform.claude.com/docs/en/about-claude/models/overview). Lihat [Model configuration](/id/model-config#pin-models-for-third-party-deployments) untuk daftar lengkap variabel lingkungan.

352 

353Claude Code menggunakan model default ini ketika tidak ada variabel pinning yang diatur:

354 

355| Jenis model | Nilai default |

356| :---------------- | :--------------------------------------------- |

357| Model utama | `us.anthropic.claude-sonnet-4-5-20250929-v1:0` |

358| Model kecil/cepat | `us.anthropic.claude-haiku-4-5-20251001-v1:0` |

359 

360Untuk menyesuaikan model lebih lanjut, gunakan salah satu metode berikut:

361 

362```bash theme={null}

363# Menggunakan ID profil inferensi

364export ANTHROPIC_MODEL='global.anthropic.claude-sonnet-4-6'

365export ANTHROPIC_DEFAULT_HAIKU_MODEL='us.anthropic.claude-haiku-4-5-20251001-v1:0'

366 

367# Menggunakan ARN profil inferensi aplikasi

368export ANTHROPIC_MODEL='arn:aws:bedrock:us-east-2:your-account-id:application-inference-profile/your-model-id'

369 

370# Opsional: Nonaktifkan prompt caching jika diperlukan

371export DISABLE_PROMPT_CACHING=1

372 

373# Opsional: Minta TTL cache prompt 1 jam alih-alih default 5 menit

374export ENABLE_PROMPT_CACHING_1H=1

375```

376 

377<Note>[Prompt caching](https://platform.claude.com/docs/en/build-with-claude/prompt-caching) mungkin tidak tersedia di semua wilayah. Cache writes dengan TTL 1 jam ditagih dengan tarif lebih tinggi daripada writes 5 menit.</Note>

378 

379#### Petakan setiap versi model ke profil inferensi

380 

381Variabel lingkungan `ANTHROPIC_DEFAULT_*_MODEL` mengonfigurasi satu profil inferensi per keluarga model. Jika organisasi Anda perlu mengekspos beberapa versi dari keluarga yang sama di pemilih `/model`, masing-masing dirutekan ke ARN profil inferensi aplikasi sendiri, gunakan pengaturan `modelOverrides` di [file pengaturan](/id/settings#settings-files) Anda sebagai gantinya.

382 

383Contoh ini memetakan empat versi Opus ke ARN yang berbeda sehingga pengguna dapat beralih di antara mereka tanpa melewati profil inferensi organisasi Anda:

384 

385```json theme={null}

386{

387 "modelOverrides": {

388 "claude-opus-4-7": "arn:aws:bedrock:us-east-2:123456789012:application-inference-profile/opus-47-prod",

389 "claude-opus-4-6": "arn:aws:bedrock:us-east-2:123456789012:application-inference-profile/opus-46-prod",

390 "claude-opus-4-5-20251101": "arn:aws:bedrock:us-east-2:123456789012:application-inference-profile/opus-45-prod",

391 "claude-opus-4-1-20250805": "arn:aws:bedrock:us-east-2:123456789012:application-inference-profile/opus-41-prod"

392 }

393}

394```

395 

396Ketika pengguna memilih salah satu versi ini di `/model`, Claude Code memanggil Bedrock dengan ARN yang dipetakan. Versi tanpa override kembali ke ID model Bedrock bawaan atau profil inferensi yang cocok yang ditemukan saat startup. Lihat [Override model IDs per version](/id/model-config#override-model-ids-per-version) untuk detail tentang bagaimana override berinteraksi dengan `availableModels` dan pengaturan model lainnya.

397 

398## Pemeriksaan model startup

399 

400Ketika Claude Code dimulai dengan Bedrock dikonfigurasi, Claude Code memverifikasi bahwa model yang dimaksudkan untuk digunakan dapat diakses di akun Anda. Pemeriksaan ini memerlukan Claude Code v2.1.94 atau lebih baru.

401 

402Jika Anda telah mempin versi model yang lebih lama dari default Claude Code saat ini, dan akun Anda dapat memanggil versi yang lebih baru, Claude Code meminta Anda untuk memperbarui pin. Menerima menulis ID model baru ke [file pengaturan pengguna Anda](/id/settings) dan memulai ulang Claude Code. Menolak diingat sampai perubahan versi default berikutnya. Pin yang menunjuk ke [ARN profil inferensi aplikasi](#map-each-model-version-to-an-inference-profile) dilewati, karena dikelola oleh administrator Anda.

403 

404Jika Anda belum mempin model dan default saat ini tidak tersedia di akun Anda, Claude Code kembali ke versi sebelumnya untuk sesi saat ini dan menampilkan pemberitahuan. Fallback tidak disimpan. Aktifkan model yang lebih baru di akun Bedrock Anda atau [pin versi](#4-pin-model-versions) untuk membuat pilihan permanen.

405 

406## Konfigurasi IAM

407 

408Buat kebijakan IAM dengan izin yang diperlukan untuk Claude Code:

409 

410```json theme={null}

411{

412 "Version": "2012-10-17",

413 "Statement": [

414 {

415 "Sid": "AllowModelAndInferenceProfileAccess",

416 "Effect": "Allow",

417 "Action": [

418 "bedrock:InvokeModel",

419 "bedrock:InvokeModelWithResponseStream",

420 "bedrock:ListInferenceProfiles",

421 "bedrock:GetInferenceProfile"

422 ],

423 "Resource": [

424 "arn:aws:bedrock:*:*:inference-profile/*",

425 "arn:aws:bedrock:*:*:application-inference-profile/*",

426 "arn:aws:bedrock:*:*:foundation-model/*"

427 ]

428 },

429 {

430 "Sid": "AllowMarketplaceSubscription",

431 "Effect": "Allow",

432 "Action": [

433 "aws-marketplace:ViewSubscriptions",

434 "aws-marketplace:Subscribe"

435 ],

436 "Resource": "*",

437 "Condition": {

438 "StringEquals": {

439 "aws:CalledViaLast": "bedrock.amazonaws.com"

440 }

441 }

442 }

443 ]

444}

445```

446 

447Untuk izin yang lebih ketat, Anda dapat membatasi Resource ke ARN profil inferensi spesifik.

448 

449`bedrock:GetInferenceProfile` memungkinkan Claude Code menyelesaikan [ARN profil inferensi aplikasi](#map-each-model-version-to-an-inference-profile) ke model fondasi pendukungnya, yang digunakan untuk memilih bentuk permintaan yang benar untuk model tersebut.

450 

451Jika token tidak memiliki izin ini, Claude Code pulih secara otomatis dengan mencoba ulang sekali dengan bentuk alternatif, sehingga permintaan tetap berhasil tetapi setiap model baru menambahkan perjalanan bolak-balik ekstra. Memberikan izin menghindari percobaan ulang. Ini paling sering berlaku untuk penyebaran `AWS_BEARER_TOKEN_BEDROCK`, di mana kebijakan token biasanya lebih sempit daripada peran IAM penuh.

452 

453Untuk detail, lihat [dokumentasi IAM Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/security-iam.html).

454 

455<Note>

456 Buat akun AWS khusus untuk Claude Code untuk menyederhanakan pelacakan biaya dan kontrol akses.

457</Note>

458 

459## Jendela konteks token 1M

460 

461Claude Opus 4.7, Opus 4.6, dan Sonnet 4.6 mendukung [jendela konteks token 1M](https://platform.claude.com/docs/en/build-with-claude/context-windows#1m-token-context-window) di Amazon Bedrock. Claude Code secara otomatis mengaktifkan jendela konteks yang diperluas ketika Anda memilih varian model 1M.

462 

463[Wizard pengaturan](#sign-in-with-bedrock) menawarkan opsi konteks 1M ketika mempin model. Untuk mengaktifkannya untuk model yang dipinnya secara manual, tambahkan `[1m]` ke ID model. Lihat [Pin models for third-party deployments](/id/model-config#pin-models-for-third-party-deployments) untuk detail.

464 

465## AWS Guardrails

466 

467[Amazon Bedrock Guardrails](https://docs.aws.amazon.com/bedrock/latest/userguide/guardrails.html) memungkinkan Anda menerapkan penyaringan konten untuk Claude Code. Buat Guardrail di [konsol Amazon Bedrock](https://console.aws.amazon.com/bedrock/), publikasikan versi, kemudian tambahkan header Guardrail ke [file pengaturan](/id/settings) Anda. Aktifkan inferensi Cross-Region pada Guardrail Anda jika Anda menggunakan profil inferensi lintas wilayah.

468 

469Contoh konfigurasi:

470 

471```json theme={null}

472{

473 "env": {

474 "ANTHROPIC_CUSTOM_HEADERS": "X-Amzn-Bedrock-GuardrailIdentifier: your-guardrail-id\nX-Amzn-Bedrock-GuardrailVersion: 1"

475 }

476}

477```

478 

479## Gunakan endpoint Mantle

480 

481Mantle adalah endpoint Amazon Bedrock yang melayani model Claude melalui bentuk API Anthropic asli daripada Bedrock Invoke API. Ini menggunakan kredensial AWS yang sama, izin IAM, dan konfigurasi `awsAuthRefresh` yang dijelaskan sebelumnya di halaman ini.

482 

483<Note>

484 Mantle memerlukan Claude Code v2.1.94 atau lebih baru. Jalankan `claude --version` untuk memeriksa.

485</Note>

486 

487### Aktifkan Mantle

488 

489Dengan kredensial AWS sudah dikonfigurasi, atur `CLAUDE_CODE_USE_MANTLE` untuk merutekan permintaan ke endpoint Mantle:

490 

491```bash theme={null}

492export CLAUDE_CODE_USE_MANTLE=1

493export AWS_REGION=us-east-1

494```

495 

496Claude Code membuat URL endpoint dari `AWS_REGION`. Untuk menggantinya untuk endpoint khusus atau gateway, atur `ANTHROPIC_BEDROCK_MANTLE_BASE_URL`.

497 

498Jalankan `/status` di dalam Claude Code untuk mengonfirmasi. Baris penyedia menunjukkan `Amazon Bedrock (Mantle)` ketika Mantle aktif.

499 

500### Pilih model Mantle

501 

502Mantle menggunakan ID model dengan awalan `anthropic.` dan tanpa akhiran versi, misalnya `anthropic.claude-haiku-4-5`. Model yang tersedia untuk akun Anda tergantung pada apa yang telah diberikan organisasi Anda; ID model tambahan tercantum dalam materi onboarding Anda dari AWS. Hubungi tim akun AWS Anda untuk meminta akses ke model yang diizinkan.

503 

504Atur model dengan flag `--model` atau dengan `/model` di dalam Claude Code:

505 

506```bash theme={null}

507claude --model anthropic.claude-haiku-4-5

508```

509 

510### Jalankan Mantle bersama Invoke API

511 

512Model yang tersedia untuk Anda di Mantle mungkin tidak mencakup setiap model yang Anda gunakan hari ini. Menetapkan `CLAUDE_CODE_USE_BEDROCK` dan `CLAUDE_CODE_USE_MANTLE` memungkinkan Claude Code memanggil kedua endpoint dari sesi yang sama. ID model yang cocok dengan format Mantle dirutekan ke Mantle, dan semua ID model lainnya pergi ke Bedrock Invoke API.

513 

514```bash theme={null}

515export CLAUDE_CODE_USE_BEDROCK=1

516export CLAUDE_CODE_USE_MANTLE=1

517```

518 

519Untuk menampilkan model Mantle di pemilih `/model`, daftarkan ID-nya di `availableModels` di [file pengaturan](/id/settings) Anda. Pengaturan ini juga membatasi pemilih ke entri yang terdaftar, jadi sertakan setiap alias yang ingin Anda tetap tersedia:

520 

521```json theme={null}

522{

523 "availableModels": ["opus", "sonnet", "haiku", "anthropic.claude-haiku-4-5"]

524}

525```

526 

527Entri dengan awalan `anthropic.` ditambahkan sebagai opsi pemilih khusus dan dirutekan ke Mantle. Ganti `anthropic.claude-haiku-4-5` dengan ID model yang telah diberikan akun Anda. Lihat [Restrict model selection](/id/model-config#restrict-model-selection) untuk cara `availableModels` berinteraksi dengan pengaturan model lainnya.

528 

529Ketika kedua penyedia aktif, `/status` menunjukkan `Amazon Bedrock + Amazon Bedrock (Mantle)`.

530 

531### Rutekan Mantle melalui gateway

532 

533Jika organisasi Anda merutekan lalu lintas model melalui [LLM gateway](/id/llm-gateway) terpusat yang menyuntikkan kredensial AWS sisi server, nonaktifkan autentikasi sisi klien sehingga Claude Code mengirim permintaan tanpa tanda tangan SigV4 atau header `x-api-key`:

534 

535```bash theme={null}

536export CLAUDE_CODE_USE_MANTLE=1

537export CLAUDE_CODE_SKIP_MANTLE_AUTH=1

538export ANTHROPIC_BEDROCK_MANTLE_BASE_URL=https://your-gateway.example.com

539```

540 

541### Variabel lingkungan Mantle

542 

543Variabel ini khusus untuk endpoint Mantle. Lihat [Environment variables](/id/env-vars) untuk daftar lengkap.

544 

545| Variabel | Tujuan |

546| :-------------------------------------- | :------------------------------------------------------------------- |

547| `CLAUDE_CODE_USE_MANTLE` | Aktifkan endpoint Mantle. Atur ke `1` atau `true`. |

548| `ANTHROPIC_BEDROCK_MANTLE_BASE_URL` | Ganti URL endpoint Mantle default |

549| `CLAUDE_CODE_SKIP_MANTLE_AUTH` | Lewati autentikasi sisi klien untuk pengaturan proxy |

550| `ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION` | Ganti wilayah AWS untuk model kelas Haiku (dibagikan dengan Bedrock) |

551 

552## Pemecahan Masalah

553 

554### Loop autentikasi dengan SSO dan proxy perusahaan

555 

556Jika tab browser muncul berulang kali saat menggunakan AWS SSO, hapus pengaturan `awsAuthRefresh` dari [file pengaturan](/id/settings) Anda. Ini dapat terjadi ketika VPN perusahaan atau proxy inspeksi TLS mengganggu alur browser SSO. Claude Code memperlakukan koneksi yang terputus sebagai kegagalan autentikasi, menjalankan kembali `awsAuthRefresh`, dan loop tanpa batas.

557 

558Jika lingkungan jaringan Anda mengganggu alur SSO berbasis browser otomatis, gunakan `aws sso login` secara manual sebelum memulai Claude Code alih-alih mengandalkan `awsAuthRefresh`.

559 

560### Masalah wilayah

561 

562Jika Anda mengalami masalah wilayah:

563 

564* Periksa ketersediaan model: `aws bedrock list-inference-profiles --region your-region`

565* Beralih ke wilayah yang didukung: `export AWS_REGION=us-east-1`

566* Pertimbangkan menggunakan profil inferensi untuk akses lintas wilayah

567 

568Jika Anda menerima kesalahan "on-demand throughput isn't supported":

569 

570* Tentukan model sebagai ID [profil inferensi](https://docs.aws.amazon.com/bedrock/latest/userguide/inference-profiles-support.html)

571 

572Claude Code menggunakan [Invoke API](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModelWithResponseStream.html) Bedrock dan tidak mendukung Converse API.

573 

574### Kesalahan endpoint Mantle

575 

576Jika `/status` tidak menunjukkan `Amazon Bedrock (Mantle)` setelah Anda menetapkan `CLAUDE_CODE_USE_MANTLE`, variabel tidak mencapai proses. Konfirmasi bahwa variabel diekspor di shell tempat Anda meluncurkan `claude`, atau atur di blok `env` dari [file pengaturan](/id/settings) Anda.

577 

578A `403` dari endpoint Mantle dengan kredensial yang valid berarti akun AWS Anda belum diberikan akses ke model yang Anda minta. Hubungi tim akun AWS Anda untuk meminta akses.

579 

580A `400` yang menyebutkan ID model berarti model itu tidak dilayani di Mantle. Mantle memiliki lineup model sendiri yang terpisah dari katalog Bedrock standar, jadi ID profil inferensi seperti `us.anthropic.claude-sonnet-4-6` tidak akan berfungsi. Gunakan ID format Mantle, atau aktifkan [kedua endpoint](#run-mantle-alongside-the-invoke-api) sehingga Claude Code merutekan setiap permintaan ke endpoint tempat model tersedia.

581 

582## Sumber daya tambahan

583 

584* [Dokumentasi Bedrock](https://docs.aws.amazon.com/bedrock/)

585* [Harga Bedrock](https://aws.amazon.com/bedrock/pricing/)

586* [Profil inferensi Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/inference-profiles-support.html)

587* [Burndown token Bedrock dan kuota](https://docs.aws.amazon.com/bedrock/latest/userguide/quotas-token-burndown.html)

588* [Claude Code di Amazon Bedrock: Panduan Pengaturan Cepat](https://community.aws/content/2tXkZKrZzlrlu0KfH8gST5Dkppq/claude-code-on-amazon-bedrock-quick-setup-guide)

589* [Implementasi Pemantauan Claude Code (Bedrock)](https://github.com/aws-solutions-library-samples/guidance-for-claude-code-with-amazon-bedrock/blob/main/assets/docs/MONITORING.md)

analytics.md +224 −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# Lacak penggunaan tim dengan analitik

6 

7> Lihat metrik penggunaan Claude Code, lacak adopsi, dan ukur kecepatan teknik dalam dasbor analitik.

8 

9Claude Code menyediakan dasbor analitik untuk membantu organisasi memahami pola penggunaan pengembang, melacak metrik kontribusi, dan mengukur bagaimana Claude Code mempengaruhi kecepatan teknik. Akses dasbor untuk paket Anda:

10 

11| Paket | URL Dasbor | Mencakup | Baca selengkapnya |

12| ----------------------------- | -------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ | ---------------------------------------------------- |

13| Claude for Teams / Enterprise | [claude.ai/analytics/claude-code](https://claude.ai/analytics/claude-code) | Metrik penggunaan, metrik kontribusi dengan integrasi GitHub, papan peringkat, ekspor data | [Detail](#access-analytics-for-teams-and-enterprise) |

14| API (Claude Console) | [platform.claude.com/claude-code](https://platform.claude.com/claude-code) | Metrik penggunaan, pelacakan pengeluaran, wawasan tim | [Detail](#access-analytics-for-api-customers) |

15 

16## Akses analitik untuk Teams dan Enterprise

17 

18Navigasikan ke [claude.ai/analytics/claude-code](https://claude.ai/analytics/claude-code). Admin dan Pemilik dapat melihat dasbor.

19 

20Dasbor Teams dan Enterprise mencakup:

21 

22* **Metrik penggunaan**: baris kode yang diterima, tingkat penerimaan saran, pengguna aktif harian dan sesi

23* **Metrik kontribusi**: PR dan baris kode yang dikirim dengan bantuan Claude Code, dengan [integrasi GitHub](#enable-contribution-metrics)

24* **Papan peringkat**: kontributor teratas yang diperingkat berdasarkan penggunaan Claude Code

25* **Ekspor data**: unduh data kontribusi sebagai CSV untuk pelaporan khusus

26 

27### Aktifkan metrik kontribusi

28 

29<Note>

30 Metrik kontribusi berada dalam beta publik dan tersedia di paket Claude for Teams dan Claude for Enterprise. Metrik ini hanya mencakup pengguna dalam organisasi claude.ai Anda. Penggunaan melalui API Claude Console atau integrasi pihak ketiga tidak disertakan.

31</Note>

32 

33Data penggunaan dan adopsi tersedia untuk semua akun Claude for Teams dan Claude for Enterprise. Metrik kontribusi memerlukan pengaturan tambahan untuk menghubungkan organisasi GitHub Anda.

34 

35Anda memerlukan peran Pemilik untuk mengonfigurasi pengaturan analitik. Admin GitHub harus memasang aplikasi GitHub.

36 

37<Warning>

38 Metrik kontribusi tidak tersedia untuk organisasi dengan [Zero Data Retention](/id/zero-data-retention) diaktifkan. Dasbor analitik hanya akan menampilkan metrik penggunaan.

39</Warning>

40 

41<Steps>

42 <Step title="Pasang aplikasi GitHub">

43 Admin GitHub memasang aplikasi Claude GitHub di akun GitHub organisasi Anda di [github.com/apps/claude](https://github.com/apps/claude).

44 </Step>

45 

46 <Step title="Aktifkan analitik Claude Code">

47 Pemilik Claude menavigasi ke [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code) dan mengaktifkan fitur analitik Claude Code.

48 </Step>

49 

50 <Step title="Aktifkan analitik GitHub">

51 Di halaman yang sama, aktifkan toggle "GitHub analytics".

52 </Step>

53 

54 <Step title="Autentikasi dengan GitHub">

55 Selesaikan alur autentikasi GitHub dan pilih organisasi GitHub mana yang akan disertakan dalam analisis.

56 </Step>

57</Steps>

58 

59Data biasanya muncul dalam 24 jam setelah diaktifkan, dengan pembaruan harian. Jika tidak ada data yang muncul, Anda mungkin melihat salah satu pesan ini:

60 

61* **"GitHub app required"**: pasang aplikasi GitHub untuk melihat metrik kontribusi

62* **"Data processing in progress"**: periksa kembali dalam beberapa hari dan konfirmasi aplikasi GitHub terpasang jika data tidak muncul

63 

64Metrik kontribusi mendukung GitHub Cloud dan GitHub Enterprise Server.

65 

66### Tinjau metrik ringkasan

67 

68<Note>

69 Metrik ini sengaja konservatif dan mewakili perkiraan rendah dari dampak sebenarnya Claude Code. Hanya baris dan PR di mana ada kepercayaan tinggi pada keterlibatan Claude Code yang dihitung.

70</Note>

71 

72Dasbor menampilkan metrik ringkasan ini di bagian atas:

73 

74* **PRs with CC**: jumlah total permintaan tarik yang digabungkan yang berisi setidaknya satu baris kode yang ditulis dengan Claude Code

75* **Lines of code with CC**: total baris kode di semua PR yang digabungkan yang ditulis dengan bantuan Claude Code. Hanya "baris efektif" yang dihitung: baris dengan lebih dari 3 karakter setelah normalisasi, tidak termasuk baris kosong dan baris dengan hanya tanda kurung atau tanda baca sepele.

76* **PRs with Claude Code (%)**: persentase semua PR yang digabungkan yang berisi kode yang dibantu Claude Code

77* **Suggestion accept rate**: persentase waktu pengguna menerima saran pengeditan kode Claude Code, termasuk penggunaan alat Edit, Write, dan NotebookEdit

78* **Lines of code accepted**: total baris kode yang ditulis oleh Claude Code yang telah diterima pengguna dalam sesi mereka. Ini tidak termasuk saran yang ditolak dan tidak melacak penghapusan berikutnya.

79 

80### Jelajahi grafik

81 

82Dasbor mencakup beberapa grafik untuk memvisualisasikan tren dari waktu ke waktu.

83 

84#### Lacak adopsi

85 

86Grafik Adopsi menunjukkan tren penggunaan harian:

87 

88* **users**: pengguna aktif harian

89* **sessions**: jumlah sesi Claude Code aktif per hari

90 

91#### Ukur PR per pengguna

92 

93Grafik ini menampilkan aktivitas pengembang individu dari waktu ke waktu:

94 

95* **PRs per user**: jumlah total PR yang digabungkan per hari dibagi dengan pengguna aktif harian

96* **users**: pengguna aktif harian

97 

98Gunakan ini untuk memahami bagaimana produktivitas individu berubah seiring dengan meningkatnya adopsi Claude Code.

99 

100#### Lihat rincian permintaan tarik

101 

102Grafik Pull requests menunjukkan rincian harian PR yang digabungkan:

103 

104* **PRs with CC**: permintaan tarik yang berisi kode yang dibantu Claude Code

105* **PRs without CC**: permintaan tarik tanpa kode yang dibantu Claude Code

106 

107Alihkan ke tampilan **Lines of code** untuk melihat rincian yang sama berdasarkan baris kode daripada jumlah PR.

108 

109#### Temukan kontributor teratas

110 

111Papan Peringkat menampilkan 10 pengguna teratas yang diperingkat berdasarkan volume kontribusi. Alihkan antara:

112 

113* **Pull requests**: menampilkan PR dengan Claude Code vs Semua PR untuk setiap pengguna

114* **Lines of code**: menampilkan baris dengan Claude Code vs Semua baris untuk setiap pengguna

115 

116Klik **Export all users** untuk mengunduh data kontribusi lengkap untuk semua pengguna sebagai file CSV. Ekspor mencakup semua pengguna, bukan hanya 10 teratas yang ditampilkan.

117 

118### Atribusi PR

119 

120Ketika metrik kontribusi diaktifkan, Claude Code menganalisis permintaan tarik yang digabungkan untuk menentukan kode mana yang ditulis dengan bantuan Claude Code. Ini dilakukan dengan mencocokkan aktivitas sesi Claude Code terhadap kode di setiap PR.

121 

122#### Kriteria penandaan

123 

124PR ditandai sebagai "with Claude Code" jika berisi setidaknya satu baris kode yang ditulis selama sesi Claude Code. Sistem menggunakan pencocokan konservatif: hanya kode di mana ada kepercayaan tinggi pada keterlibatan Claude Code yang dihitung sebagai dibantu.

125 

126#### Proses atribusi

127 

128Ketika permintaan tarik digabungkan:

129 

1301. Baris yang ditambahkan diekstrak dari diff PR

1312. Sesi Claude Code yang mengedit file yang cocok dalam jendela waktu diidentifikasi

1323. Baris PR dicocokkan terhadap output Claude Code menggunakan beberapa strategi

1334. Metrik dihitung untuk baris yang dibantu AI dan total baris

134 

135Sebelum perbandingan, baris dinormalisasi: spasi dipangkas, beberapa spasi diruntuhkan, tanda kutip distandarkan, dan teks dikonversi ke huruf kecil.

136 

137Permintaan tarik yang digabungkan yang berisi baris yang dibantu Claude Code diberi label `claude-code-assisted` di GitHub.

138 

139#### Jendela waktu

140 

141Sesi dari 21 hari sebelum hingga 2 hari setelah tanggal penggabungan PR dipertimbangkan untuk pencocokan atribusi.

142 

143#### File yang dikecualikan

144 

145File tertentu secara otomatis dikecualikan dari analisis karena mereka dibuat secara otomatis:

146 

147* File kunci: package-lock.json, yarn.lock, Cargo.lock, dan serupa

148* Kode yang dibuat: output Protobuf, artefak build, file yang diminimalkan

149* Direktori build: dist/, build/, node\_modules/, target/

150* Perlengkapan uji: snapshot, kaset, data mock

151* Baris lebih dari 1.000 karakter, yang mungkin diminimalkan atau dibuat

152 

153#### Catatan atribusi

154 

155Ingat detail tambahan ini saat menafsirkan data atribusi:

156 

157* Kode yang ditulis ulang secara substansial oleh pengembang, dengan perbedaan lebih dari 20%, tidak dikaitkan dengan Claude Code

158* Sesi di luar jendela 21 hari tidak dipertimbangkan

159* Algoritma tidak mempertimbangkan sumber PR atau cabang tujuan saat melakukan atribusi

160 

161### Dapatkan yang terbaik dari analitik

162 

163Gunakan metrik kontribusi untuk menunjukkan ROI, mengidentifikasi pola adopsi, dan menemukan anggota tim yang dapat membantu orang lain memulai.

164 

165#### Pantau adopsi

166 

167Lacak grafik Adopsi dan jumlah pengguna untuk mengidentifikasi:

168 

169* Pengguna aktif yang dapat berbagi praktik terbaik

170* Tren adopsi keseluruhan di seluruh organisasi Anda

171* Penurunan penggunaan yang mungkin menunjukkan gesekan atau masalah

172 

173#### Ukur ROI

174 

175Metrik kontribusi membantu menjawab "Apakah alat ini layak untuk investasi?" dengan data dari basis kode Anda sendiri:

176 

177* Lacak perubahan dalam PR per pengguna dari waktu ke waktu seiring dengan meningkatnya adopsi

178* Bandingkan PR dan baris kode yang dikirim dengan vs. tanpa Claude Code

179* Gunakan bersama [metrik DORA](https://dora.dev/), kecepatan sprint, atau KPI teknik lainnya untuk memahami perubahan dari adopsi Claude Code

180 

181#### Identifikasi pengguna power

182 

183Papan Peringkat membantu Anda menemukan anggota tim dengan adopsi Claude Code tinggi yang dapat:

184 

185* Berbagi teknik prompting dan alur kerja dengan tim

186* Memberikan umpan balik tentang apa yang berfungsi dengan baik

187* Membantu menginisialisasi pengguna baru

188 

189#### Akses data secara terprogram

190 

191Untuk menanyakan data ini melalui GitHub, cari PR yang diberi label dengan `claude-code-assisted`.

192 

193## Akses analitik untuk pelanggan API

194 

195Pelanggan API yang menggunakan Claude Console dapat mengakses analitik di [platform.claude.com/claude-code](https://platform.claude.com/claude-code). Anda memerlukan izin UsageView untuk mengakses dasbor, yang diberikan kepada peran Developer, Billing, Admin, Owner, dan Primary Owner.

196 

197<Note>

198 Metrik kontribusi dengan integrasi GitHub saat ini tidak tersedia untuk pelanggan API. Dasbor Console menampilkan metrik penggunaan dan pengeluaran saja.

199</Note>

200 

201Dasbor Console menampilkan:

202 

203* **Lines of code accepted**: total baris kode yang ditulis oleh Claude Code yang telah diterima pengguna dalam sesi mereka. Ini tidak termasuk saran yang ditolak dan tidak melacak penghapusan berikutnya.

204* **Suggestion accept rate**: persentase waktu pengguna menerima penggunaan alat pengeditan kode, termasuk alat Edit, Write, dan NotebookEdit.

205* **Activity**: pengguna aktif harian dan sesi ditampilkan pada grafik.

206* **Spend**: biaya API harian dalam dolar bersama jumlah pengguna.

207 

208### Lihat wawasan tim

209 

210Tabel wawasan tim menampilkan metrik per pengguna:

211 

212* **Members**: semua pengguna yang telah diautentikasi ke Claude Code. Pengguna kunci API ditampilkan berdasarkan pengidentifikasi kunci, pengguna OAuth ditampilkan berdasarkan alamat email.

213* **Spend this month**: total biaya API per pengguna untuk bulan saat ini.

214* **Lines this month**: total per pengguna dari baris kode yang diterima untuk bulan saat ini.

215 

216<Note>

217 Angka pengeluaran di dasbor Console adalah perkiraan untuk tujuan analitik. Untuk biaya aktual, lihat halaman penagihan Anda.

218</Note>

219 

220## Sumber daya terkait

221 

222* [Monitoring with OpenTelemetry](/id/monitoring-usage): ekspor metrik dan acara real-time ke tumpukan observabilitas Anda

223* [Manage costs effectively](/id/costs): tetapkan batas pengeluaran dan optimalkan penggunaan token

224* [Permissions](/id/permissions): konfigurasi peran dan izin

authentication.md +155 −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# Autentikasi

6 

7> Masuk ke Claude Code dan konfigurasikan autentikasi untuk individu, tim, dan organisasi.

8 

9Claude Code mendukung berbagai metode autentikasi tergantung pada pengaturan Anda. Pengguna individual dapat masuk dengan akun Claude.ai, sementara tim dapat menggunakan Claude for Teams atau Enterprise, Claude Console, atau penyedia cloud seperti Amazon Bedrock, Google Vertex AI, atau Microsoft Foundry.

10 

11## Masuk ke Claude Code

12 

13Setelah [memasang Claude Code](/id/setup#install-claude-code), jalankan `claude` di terminal Anda. Pada peluncuran pertama, Claude Code membuka jendela browser untuk Anda masuk.

14 

15Jika browser tidak terbuka secara otomatis, tekan `c` untuk menyalin URL login ke clipboard Anda, kemudian tempel ke browser Anda.

16 

17Jika browser Anda menampilkan kode login alih-alih pengalihan kembali setelah Anda masuk, tempel ke terminal di prompt `Paste code here if prompted`. Ini terjadi ketika browser tidak dapat menjangkau server callback lokal Claude Code, yang umum terjadi di WSL2, sesi SSH, dan kontainer.

18 

19Anda dapat melakukan autentikasi dengan salah satu jenis akun berikut:

20 

21* **Langganan Claude Pro atau Max**: masuk dengan akun Claude.ai Anda. Berlangganan di [claude.com/pricing](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=authentication_pro_max).

22* **Claude for Teams atau Enterprise**: masuk dengan akun Claude.ai yang diundang oleh admin tim Anda.

23* **Claude Console**: masuk dengan kredensial Console Anda. Admin Anda harus telah [mengundang Anda](#claude-console-authentication) terlebih dahulu.

24* **Penyedia cloud**: jika organisasi Anda menggunakan [Amazon Bedrock](/id/amazon-bedrock), [Google Vertex AI](/id/google-vertex-ai), atau [Microsoft Foundry](/id/microsoft-foundry), atur variabel lingkungan yang diperlukan sebelum menjalankan `claude`. Tidak diperlukan login browser.

25 

26Untuk keluar dan melakukan autentikasi ulang, ketik `/logout` di prompt Claude Code.

27 

28Jika Anda mengalami kesulitan masuk, lihat [pemecahan masalah autentikasi](/id/troubleshoot-install#login-and-authentication).

29 

30## Atur autentikasi tim

31 

32Untuk tim dan organisasi, Anda dapat mengonfigurasi akses Claude Code dengan salah satu cara berikut:

33 

34* [Claude for Teams atau Enterprise](#claude-for-teams-or-enterprise), direkomendasikan untuk sebagian besar tim

35* [Claude Console](#claude-console-authentication)

36* [Amazon Bedrock](/id/amazon-bedrock)

37* [Google Vertex AI](/id/google-vertex-ai)

38* [Microsoft Foundry](/id/microsoft-foundry)

39 

40### Claude for Teams atau Enterprise

41 

42[Claude for Teams](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=authentication_teams#team-&-enterprise) dan [Claude for Enterprise](https://anthropic.com/contact-sales?utm_source=claude_code\&utm_medium=docs\&utm_content=authentication_enterprise) memberikan pengalaman terbaik bagi organisasi yang menggunakan Claude Code. Anggota tim mendapatkan akses ke Claude Code dan Claude di web dengan penagihan terpusat dan manajemen tim.

43 

44* **Claude for Teams**: paket layanan mandiri dengan fitur kolaborasi, alat admin, dan manajemen penagihan. Terbaik untuk tim yang lebih kecil.

45* **Claude for Enterprise**: menambahkan SSO, penangkapan domain, izin berbasis peran, API kepatuhan, dan pengaturan kebijakan terkelola untuk konfigurasi Claude Code di seluruh organisasi. Terbaik untuk organisasi yang lebih besar dengan persyaratan keamanan dan kepatuhan.

46 

47<Steps>

48 <Step title="Berlangganan">

49 Berlangganan [Claude for Teams](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=authentication_teams_step#team-&-enterprise) atau hubungi penjualan untuk [Claude for Enterprise](https://anthropic.com/contact-sales?utm_source=claude_code\&utm_medium=docs\&utm_content=authentication_enterprise_step).

50 </Step>

51 

52 <Step title="Undang anggota tim">

53 Undang anggota tim dari dasbor admin.

54 </Step>

55 

56 <Step title="Pasang dan masuk">

57 Anggota tim memasang Claude Code dan masuk dengan akun Claude.ai mereka.

58 </Step>

59</Steps>

60 

61### Autentikasi Claude Console

62 

63Untuk organisasi yang lebih suka penagihan berbasis API, Anda dapat menyiapkan akses melalui Claude Console.

64 

65<Steps>

66 <Step title="Buat atau gunakan akun Console">

67 Gunakan akun Claude Console yang sudah ada atau buat yang baru.

68 </Step>

69 

70 <Step title="Tambahkan pengguna">

71 Anda dapat menambahkan pengguna melalui salah satu metode:

72 

73 * Undang pengguna secara massal dari dalam Console: Settings -> Members -> Invite

74 * [Atur SSO](https://support.claude.com/en/articles/13132885-setting-up-single-sign-on-sso)

75 </Step>

76 

77 <Step title="Tetapkan peran">

78 Saat mengundang pengguna, tetapkan salah satu dari:

79 

80 * **Peran Claude Code**: pengguna hanya dapat membuat kunci API Claude Code

81 * **Peran Developer**: pengguna dapat membuat jenis kunci API apa pun

82 </Step>

83 

84 <Step title="Pengguna menyelesaikan pengaturan">

85 Setiap pengguna yang diundang perlu:

86 

87 * Menerima undangan Console

88 * [Periksa persyaratan sistem](/id/setup#system-requirements)

89 * [Pasang Claude Code](/id/setup#install-claude-code)

90 * Masuk dengan kredensial akun Console

91 </Step>

92</Steps>

93 

94### Autentikasi penyedia cloud

95 

96Untuk tim yang menggunakan Amazon Bedrock, Google Vertex AI, atau Microsoft Foundry:

97 

98<Steps>

99 <Step title="Ikuti pengaturan penyedia">

100 Ikuti [dokumen Bedrock](/id/amazon-bedrock), [dokumen Vertex](/id/google-vertex-ai), atau [dokumen Microsoft Foundry](/id/microsoft-foundry).

101 </Step>

102 

103 <Step title="Distribusikan konfigurasi">

104 Distribusikan variabel lingkungan dan instruksi untuk menghasilkan kredensial cloud kepada pengguna Anda. Baca lebih lanjut tentang cara [mengelola konfigurasi di sini](/id/settings).

105 </Step>

106 

107 <Step title="Pasang Claude Code">

108 Pengguna dapat [memasang Claude Code](/id/setup#install-claude-code).

109 </Step>

110</Steps>

111 

112## Manajemen kredensial

113 

114Claude Code mengelola kredensial autentikasi Anda dengan aman:

115 

116* **Lokasi penyimpanan**: di macOS, kredensial disimpan di Keychain macOS yang terenkripsi. Di Linux dan Windows, kredensial disimpan di `~/.claude/.credentials.json`, atau di bawah `$CLAUDE_CONFIG_DIR` jika variabel tersebut diatur. Di Linux, file ditulis dengan mode `0600`; di Windows, file mewarisi kontrol akses dari direktori profil pengguna Anda.

117* **Jenis autentikasi yang didukung**: kredensial Claude.ai, kredensial API Claude, Azure Auth, Bedrock Auth, dan Vertex Auth.

118* **Skrip kredensial kustom**: pengaturan [`apiKeyHelper`](/id/settings#available-settings) dapat dikonfigurasi untuk menjalankan skrip shell yang mengembalikan kunci API.

119* **Interval penyegaran**: secara default, `apiKeyHelper` dipanggil setelah 5 menit atau pada respons HTTP 401. Atur variabel lingkungan `CLAUDE_CODE_API_KEY_HELPER_TTL_MS` untuk interval penyegaran kustom.

120* **Pemberitahuan helper lambat**: jika `apiKeyHelper` membutuhkan waktu lebih lama dari 10 detik untuk mengembalikan kunci, Claude Code menampilkan pemberitahuan peringatan di bilah prompt yang menunjukkan waktu yang telah berlalu. Jika Anda melihat pemberitahuan ini secara teratur, periksa apakah skrip kredensial Anda dapat dioptimalkan.

121 

122`apiKeyHelper`, `ANTHROPIC_API_KEY`, dan `ANTHROPIC_AUTH_TOKEN` hanya berlaku untuk sesi CLI terminal. Claude Desktop dan sesi jarak jauh menggunakan OAuth secara eksklusif dan tidak memanggil `apiKeyHelper` atau membaca variabel lingkungan kunci API.

123 

124### Urutan prioritas autentikasi

125 

126Ketika beberapa kredensial ada, Claude Code memilih salah satu dalam urutan ini:

127 

1281. Kredensial penyedia cloud, ketika `CLAUDE_CODE_USE_BEDROCK`, `CLAUDE_CODE_USE_VERTEX`, atau `CLAUDE_CODE_USE_FOUNDRY` diatur. Lihat [integrasi pihak ketiga](/id/third-party-integrations) untuk pengaturan.

1292. Variabel lingkungan `ANTHROPIC_AUTH_TOKEN`. Dikirim sebagai header `Authorization: Bearer`. Gunakan ini saat merutekan melalui [gateway LLM atau proxy](/id/llm-gateway) yang melakukan autentikasi dengan token bearer daripada kunci API Anthropic.

1303. Variabel lingkungan `ANTHROPIC_API_KEY`. Dikirim sebagai header `X-Api-Key`. Gunakan ini untuk akses API Anthropic langsung dengan kunci dari [Claude Console](https://platform.claude.com). Dalam mode interaktif, Anda diminta sekali untuk menyetujui atau menolak kunci, dan pilihan Anda diingat. Untuk mengubahnya nanti, gunakan toggle "Use custom API key" di `/config`. Dalam mode non-interaktif (`-p`), kunci selalu digunakan saat ada.

1314. Output skrip [`apiKeyHelper`](/id/settings#available-settings). Gunakan ini untuk kredensial dinamis atau berputar, seperti token berumur pendek yang diambil dari vault.

1325. Variabel lingkungan `CLAUDE_CODE_OAUTH_TOKEN`. Token OAuth berumur panjang yang dihasilkan oleh [`claude setup-token`](#generate-a-long-lived-token). Gunakan ini untuk pipeline CI dan skrip di mana login browser tidak tersedia.

1336. Kredensial OAuth langganan dari `/login`. Ini adalah default untuk pengguna Claude Pro, Max, Team, dan Enterprise.

134 

135Jika Anda memiliki langganan Claude aktif tetapi juga memiliki `ANTHROPIC_API_KEY` diatur di lingkungan Anda, kunci API memiliki prioritas setelah disetujui. Ini dapat menyebabkan kegagalan autentikasi jika kunci milik organisasi yang dinonaktifkan atau kedaluwarsa. Jalankan `unset ANTHROPIC_API_KEY` untuk kembali ke langganan Anda, dan periksa `/status` untuk mengonfirmasi metode mana yang aktif.

136 

137[Claude Code di Web](/id/claude-code-on-the-web) selalu menggunakan kredensial langganan Anda. `ANTHROPIC_API_KEY` dan `ANTHROPIC_AUTH_TOKEN` di lingkungan sandbox tidak menimpanya.

138 

139### Hasilkan token berumur panjang

140 

141Untuk pipeline CI, skrip, atau lingkungan lain di mana login browser interaktif tidak tersedia, hasilkan token OAuth satu tahun dengan `claude setup-token`:

142 

143```bash theme={null}

144claude setup-token

145```

146 

147Perintah memandu Anda melalui otorisasi OAuth dan mencetak token ke terminal. Perintah tidak menyimpan token di mana pun; salin dan atur sebagai variabel lingkungan `CLAUDE_CODE_OAUTH_TOKEN` di mana pun Anda ingin melakukan autentikasi:

148 

149```bash theme={null}

150export CLAUDE_CODE_OAUTH_TOKEN=your-token

151```

152 

153Token ini melakukan autentikasi dengan langganan Claude Anda dan memerlukan paket Pro, Max, Team, atau Enterprise. Token ini dibatasi untuk inferensi saja dan tidak dapat membuat sesi [Remote Control](/id/remote-control).

154 

155[Mode bare](/id/headless#start-faster-with-bare-mode) tidak membaca `CLAUDE_CODE_OAUTH_TOKEN`. Jika skrip Anda melewatkan `--bare`, lakukan autentikasi dengan `ANTHROPIC_API_KEY` atau `apiKeyHelper` sebagai gantinya.

auto-mode-config.md +178 −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# Konfigurasi auto mode

6 

7> Beri tahu pengklasifikasi auto mode tentang repo, bucket, dan domain mana yang dipercaya organisasi Anda. Atur konteks lingkungan, ganti aturan blokir dan izin default, dan periksa konfigurasi efektif Anda dengan subperintah CLI auto-mode.

8 

9[Auto mode](/id/permission-modes#eliminate-prompts-with-auto-mode) memungkinkan Claude Code berjalan tanpa permintaan izin dengan merutekan setiap panggilan alat melalui pengklasifikasi yang memblokir apa pun yang tidak dapat dibalikkan, merusak, atau ditujukan di luar lingkungan Anda. Gunakan blok pengaturan `autoMode` untuk memberi tahu pengklasifikasi itu repo, bucket, dan domain mana yang dipercaya organisasi Anda, sehingga berhenti memblokir operasi internal rutin.

10 

11<Note>

12 Auto mode tersedia pada paket Max, Team, Enterprise, dan API melalui Anthropic API. Tidak tersedia pada Pro atau pada Bedrock, Vertex, atau Foundry. Jika Claude Code melaporkan auto mode tidak tersedia untuk akun Anda, periksa [persyaratan lengkap](/id/permission-modes#eliminate-prompts-with-auto-mode), yang juga mencakup model yang didukung dan pengaktifan admin pada paket Team dan Enterprise.

13</Note>

14 

15Secara default, pengklasifikasi hanya mempercayai direktori kerja dan remote yang dikonfigurasi dari repo saat ini. Tindakan seperti mendorong ke org kontrol sumber perusahaan Anda atau menulis ke bucket cloud tim diblokir sampai Anda menambahkannya ke `autoMode.environment`.

16 

17Untuk cara mengaktifkan auto mode dan apa yang diblokir secara default, lihat [Permission modes](/id/permission-modes#eliminate-prompts-with-auto-mode). Halaman ini adalah referensi konfigurasi.

18 

19Halaman ini mencakup cara:

20 

21* [Pilih di mana menetapkan aturan](#where-the-classifier-reads-configuration) di seluruh CLAUDE.md, pengaturan pengguna, dan pengaturan terkelola

22* [Tentukan infrastruktur terpercaya](#define-trusted-infrastructure) dengan `autoMode.environment`

23* [Ganti aturan blokir dan izin](#override-the-block-and-allow-rules) ketika default tidak sesuai dengan pipeline Anda

24* [Periksa konfigurasi efektif Anda](#inspect-the-defaults-and-your-effective-config) dengan subperintah `claude auto-mode`

25* [Tinjau penolakan](#review-denials) sehingga Anda tahu apa yang harus ditambahkan selanjutnya

26 

27## Di mana pengklasifikasi membaca konfigurasi

28 

29Pengklasifikasi membaca konten [CLAUDE.md](/id/memory) yang sama yang dimuat Claude sendiri, jadi instruksi seperti "jangan pernah force push" di CLAUDE.md proyek Anda mengarahkan Claude dan pengklasifikasi pada saat yang bersamaan. Mulai dari sana untuk konvensi proyek dan aturan perilaku.

30 

31Untuk aturan yang berlaku di seluruh proyek, seperti infrastruktur terpercaya atau aturan penolakan di seluruh organisasi, gunakan blok pengaturan `autoMode`. Pengklasifikasi membaca `autoMode` dari cakupan berikut:

32 

33| Cakupan | File | Gunakan untuk |

34| :---------------------------------- | :-------------------------------------------------- | :----------------------------------------------------------- |

35| Satu pengembang | `~/.claude/settings.json` | Infrastruktur terpercaya pribadi |

36| Satu proyek, satu pengembang | `.claude/settings.local.json` | Bucket atau layanan terpercaya per-proyek, gitignored |

37| Di seluruh organisasi | [Pengaturan terkelola](/id/server-managed-settings) | Infrastruktur terpercaya didistribusikan ke semua pengembang |

38| Bendera `--settings` atau Agent SDK | JSON inline | Penggantian per-invokasi untuk otomasi |

39 

40Pengklasifikasi tidak membaca `autoMode` dari pengaturan proyek bersama di `.claude/settings.json`, jadi repo yang diperiksa tidak dapat menyuntikkan aturan izinnya sendiri.

41 

42Entri dari setiap cakupan digabungkan. Pengembang dapat memperluas `environment`, `allow`, dan `soft_deny` dengan entri pribadi tetapi tidak dapat menghapus entri yang disediakan pengaturan terkelola. Karena aturan izin bertindak sebagai pengecualian untuk aturan blokir di dalam pengklasifikasi, entri `allow` yang ditambahkan pengembang dapat mengganti entri `soft_deny` organisasi: kombinasinya bersifat aditif, bukan batas kebijakan keras.

43 

44<Note>

45 Pengklasifikasi adalah gerbang kedua yang berjalan setelah [sistem izin](/id/permissions). Untuk tindakan yang tidak boleh pernah berjalan terlepas dari niat pengguna atau konfigurasi pengklasifikasi, gunakan `permissions.deny` dalam pengaturan terkelola, yang memblokir tindakan sebelum pengklasifikasi dikonsultasikan dan tidak dapat ditimpa.

46</Note>

47 

48## Tentukan infrastruktur terpercaya

49 

50Untuk sebagian besar organisasi, `autoMode.environment` adalah satu-satunya bidang yang perlu Anda atur. Ini memberi tahu pengklasifikasi repo, bucket, dan domain mana yang dipercaya: pengklasifikasi menggunakannya untuk memutuskan apa arti "eksternal", jadi tujuan apa pun yang tidak terdaftar adalah target exfiltration potensial.

51 

52Daftar lingkungan default mempercayai repo kerja dan remote yang dikonfigurasinya. Untuk menambahkan entri Anda sendiri bersama default tersebut, sertakan string literal `"$defaults"` dalam array. Entri default disisipi pada posisi tersebut, jadi entri kustom Anda dapat berada sebelum atau sesudahnya.

53 

54```json theme={null}

55{

56 "autoMode": {

57 "environment": [

58 "$defaults",

59 "Source control: github.example.com/acme-corp and all repos under it",

60 "Trusted cloud buckets: s3://acme-build-artifacts, gs://acme-ml-datasets",

61 "Trusted internal domains: *.corp.example.com, api.internal.example.com",

62 "Key internal services: Jenkins at ci.example.com, Artifactory at artifacts.example.com"

63 ]

64 }

65}

66```

67 

68Entri adalah prosa, bukan regex atau pola alat. Pengklasifikasi membacanya sebagai aturan bahasa alami. Tulislah dengan cara Anda akan menggambarkan infrastruktur Anda kepada insinyur baru. Bagian lingkungan yang menyeluruh mencakup:

69 

70* **Organisasi**: nama perusahaan Anda dan apa yang Claude Code digunakan terutama untuk, seperti pengembangan perangkat lunak, otomasi infrastruktur, atau rekayasa data

71* **Kontrol sumber**: setiap GitHub, GitLab, atau org Bitbucket yang didorong pengembang Anda

72* **Penyedia cloud dan bucket terpercaya**: nama bucket atau awalan yang Claude harus dapat membaca dan menulis

73* **Domain internal terpercaya**: nama host untuk API, dasbor, dan layanan di dalam jaringan Anda, seperti `*.internal.example.com`

74* **Layanan internal utama**: CI, registri artefak, indeks paket internal, tooling insiden

75* **Konteks tambahan**: batasan industri yang diatur, infrastruktur multi-tenant, atau persyaratan kepatuhan yang mempengaruhi apa yang harus diperlakukan pengklasifikasi sebagai berisiko

76 

77Template awal yang berguna: isi bidang dalam kurung dan hapus baris apa pun yang tidak berlaku.

78 

79```json theme={null}

80{

81 "autoMode": {

82 "environment": [

83 "$defaults",

84 "Organization: {COMPANY_NAME}. Primary use: {PRIMARY_USE_CASE, e.g. software development, infrastructure automation}",

85 "Source control: {SOURCE_CONTROL, e.g. GitHub org github.example.com/acme-corp}",

86 "Cloud provider(s): {CLOUD_PROVIDERS, e.g. AWS, GCP, Azure}",

87 "Trusted cloud buckets: {TRUSTED_BUCKETS, e.g. s3://acme-builds, gs://acme-datasets}",

88 "Trusted internal domains: {TRUSTED_DOMAINS, e.g. *.internal.example.com, api.example.com}",

89 "Key internal services: {SERVICES, e.g. Jenkins at ci.example.com, Artifactory at artifacts.example.com}",

90 "Additional context: {EXTRA, e.g. regulated industry, multi-tenant infrastructure, compliance requirements}"

91 ]

92 }

93}

94```

95 

96Semakin spesifik konteks yang Anda berikan, semakin baik pengklasifikasi dapat membedakan operasi internal rutin dari upaya exfiltration.

97 

98Anda tidak perlu mengisi semuanya sekaligus. Peluncuran yang masuk akal: mulai dengan default dan tambahkan org kontrol sumber Anda dan layanan internal utama, yang menyelesaikan false positive paling umum seperti mendorong ke repo Anda sendiri. Tambahkan domain terpercaya dan bucket cloud selanjutnya. Isi sisanya saat blokir muncul.

99 

100## Ganti aturan blokir dan izin

101 

102Dua bidang tambahan memungkinkan Anda mengganti daftar aturan bawaan pengklasifikasi: `autoMode.soft_deny` mengontrol apa yang diblokir, dan `autoMode.allow` mengontrol pengecualian mana yang berlaku. Masing-masing adalah array deskripsi prosa, dibaca sebagai aturan bahasa alami. Tidak ada bidang `autoMode.deny`; untuk hard-block tindakan terlepas dari niat, gunakan [`permissions.deny`](/id/permissions), yang berjalan sebelum pengklasifikasi.

103 

104Di dalam pengklasifikasi, prioritas bekerja dalam tiga tingkat:

105 

106* Aturan `soft_deny` memblokir terlebih dahulu

107* Aturan `allow` kemudian mengganti blokir yang cocok sebagai pengecualian

108* Niat pengguna eksplisit mengganti keduanya: jika pesan pengguna secara langsung dan spesifik menggambarkan tindakan yang tepat Claude akan ambil, pengklasifikasi mengizinkannya bahkan ketika aturan `soft_deny` cocok

109 

110Permintaan umum tidak dihitung sebagai niat eksplisit. Meminta Claude untuk "membersihkan repo" tidak mengotorisasi force-push, tetapi meminta Claude untuk "force-push cabang ini" melakukannya.

111 

112Untuk melonggarkan, tambahkan ke `allow` ketika pengklasifikasi berulang kali menandai pola rutin yang pengecualian default tidak cover. Untuk mengencangkan, tambahkan ke `soft_deny` untuk risiko spesifik lingkungan Anda yang default lewatkan. Untuk menjaga aturan bawaan sambil menambahkan aturan Anda sendiri, sertakan string literal `"$defaults"` dalam array. Aturan default disisipi pada posisi itu, jadi aturan kustom Anda dapat berada sebelum atau sesudahnya, dan Anda terus mewarisi pembaruan saat daftar bawaan berubah di seluruh rilis.

113 

114```json theme={null}

115{

116 "autoMode": {

117 "environment": [

118 "$defaults",

119 "Source control: github.example.com/acme-corp and all repos under it"

120 ],

121 "allow": [

122 "$defaults",

123 "Deploying to the staging namespace is allowed: staging is isolated from production and resets nightly",

124 "Writing to s3://acme-scratch/ is allowed: ephemeral bucket with a 7-day lifecycle policy"

125 ],

126 "soft_deny": [

127 "$defaults",

128 "Never run database migrations outside the migrations CLI, even against dev databases",

129 "Never modify files under infra/terraform/prod/: production infrastructure changes go through the review workflow"

130 ]

131 }

132}

133```

134 

135<Danger>

136 Menetapkan salah satu dari `environment`, `allow`, atau `soft_deny` tanpa `"$defaults"` menggantikan seluruh daftar default untuk bagian itu. Jika Anda menetapkan `soft_deny` dengan satu entri dan menghilangkan `"$defaults"`, setiap aturan blokir bawaan dibuang: force push, data exfiltration, `curl | bash`, production deploys, dan semua aturan blokir default lainnya menjadi diizinkan. Hanya hilangkan `"$defaults"` ketika Anda bermaksud mengambil kepemilikan penuh atas daftar. Dalam hal itu, jalankan `claude auto-mode defaults` untuk mencetak aturan bawaan, salin ke file pengaturan Anda, kemudian tinjau setiap aturan terhadap pipeline Anda sendiri dan toleransi risiko.

137</Danger>

138 

139Setiap bagian dievaluasi secara independen, jadi menetapkan `environment` saja membiarkan daftar `allow` dan `soft_deny` default tetap utuh.

140 

141## Periksa default dan konfigurasi efektif Anda

142 

143Tiga subperintah CLI membantu Anda memeriksa dan memvalidasi konfigurasi Anda.

144 

145Cetak aturan `environment`, `allow`, dan `soft_deny` bawaan sebagai JSON:

146 

147```bash theme={null}

148claude auto-mode defaults

149```

150 

151Cetak apa yang sebenarnya digunakan pengklasifikasi sebagai JSON, dengan pengaturan Anda diterapkan di mana diatur dan default sebaliknya:

152 

153```bash theme={null}

154claude auto-mode config

155```

156 

157Dapatkan umpan balik AI tentang aturan `allow` dan `soft_deny` kustom Anda:

158 

159```bash theme={null}

160claude auto-mode critique

161```

162 

163Jalankan `claude auto-mode config` setelah menyimpan pengaturan Anda untuk mengonfirmasi bahwa aturan efektif adalah apa yang Anda harapkan, dengan `"$defaults"` diperluas di tempat. Jika Anda telah menulis aturan kustom, `claude auto-mode critique` meninjau mereka dan menandai entri yang ambigu, berlebihan, atau mungkin menyebabkan false positif. Jika Anda perlu menghapus atau menulis ulang aturan bawaan daripada menambahkan di sampingnya, simpan output `claude auto-mode defaults` ke file, edit daftarnya, dan tempel hasilnya ke file pengaturan Anda sebagai pengganti `"$defaults"`.

164 

165## Tinjau penolakan

166 

167Ketika auto mode menolak panggilan alat, penolakan dicatat di `/permissions` di bawah tab Recently denied. Tekan `r` pada tindakan yang ditolak untuk menandainya untuk retry: ketika Anda keluar dari dialog, Claude Code mengirim pesan memberi tahu model itu dapat retry panggilan alat itu dan melanjutkan percakapan.

168 

169Penolakan berulang untuk tujuan yang sama biasanya berarti pengklasifikasi kehilangan konteks. Tambahkan tujuan itu ke `autoMode.environment`, kemudian jalankan `claude auto-mode config` untuk mengonfirmasi itu berlaku.

170 

171Untuk bereaksi terhadap penolakan secara terprogram, gunakan [hook `PermissionDenied`](/id/hooks#permissiondenied).

172 

173## Lihat juga

174 

175* [Permission modes](/id/permission-modes#eliminate-prompts-with-auto-mode): apa itu auto mode, apa yang diblokir secara default, dan cara mengaktifkannya

176* [Pengaturan terkelola](/id/server-managed-settings): sebarkan konfigurasi `autoMode` di seluruh organisasi Anda

177* [Permissions](/id/permissions): aturan izin, tanya, dan tolak yang berlaku sebelum pengklasifikasi berjalan

178* [Settings](/id/settings): referensi pengaturan lengkap, termasuk kunci `autoMode`

best-practices.md +583 −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# Praktik Terbaik untuk Claude Code

6 

7> Tips dan pola untuk memaksimalkan Claude Code, dari mengonfigurasi lingkungan Anda hingga menskalakan di seluruh sesi paralel.

8 

9Claude Code adalah lingkungan pengkodean yang bersifat agentic. Tidak seperti chatbot yang menjawab pertanyaan dan menunggu, Claude Code dapat membaca file Anda, menjalankan perintah, membuat perubahan, dan bekerja secara mandiri melalui masalah sambil Anda menonton, mengarahkan, atau sepenuhnya menjauh.

10 

11Ini mengubah cara Anda bekerja. Alih-alih menulis kode sendiri dan meminta Claude untuk meninjau, Anda menjelaskan apa yang Anda inginkan dan Claude mengetahui cara membangunnya. Claude mengeksplorasi, merencanakan, dan mengimplementasikan.

12 

13Namun otonomi ini masih datang dengan kurva pembelajaran. Claude bekerja dalam batasan tertentu yang perlu Anda pahami.

14 

15Panduan ini mencakup pola yang telah terbukti efektif di seluruh tim internal Anthropic dan untuk insinyur yang menggunakan Claude Code di berbagai basis kode, bahasa, dan lingkungan. Untuk cara loop agentic bekerja di balik layar, lihat [Cara Claude Code Bekerja](/id/how-claude-code-works).

16 

17***

18 

19Sebagian besar praktik terbaik didasarkan pada satu batasan: jendela konteks Claude terisi dengan cepat, dan kinerja menurun saat terisi.

20 

21Jendela konteks Claude menyimpan seluruh percakapan Anda, termasuk setiap pesan, setiap file yang dibaca Claude, dan setiap output perintah. Namun, ini dapat terisi dengan cepat. Sesi debugging tunggal atau eksplorasi basis kode mungkin menghasilkan dan mengonsumsi puluhan ribu token.

22 

23Ini penting karena kinerja LLM menurun saat konteks terisi. Ketika jendela konteks hampir penuh, Claude mungkin mulai "lupa" instruksi sebelumnya atau membuat lebih banyak kesalahan. Jendela konteks adalah sumber daya paling penting untuk dikelola. Untuk melihat bagaimana sesi terisi dalam praktik, [tonton panduan interaktif](/id/context-window) tentang apa yang dimuat saat startup dan berapa biaya setiap pembacaan file. Lacak penggunaan konteks secara berkelanjutan dengan [baris status khusus](/id/statusline), dan lihat [Kurangi penggunaan token](/id/costs#reduce-token-usage) untuk strategi mengurangi penggunaan token.

24 

25***

26 

27## Berikan Claude cara untuk memverifikasi pekerjaannya

28 

29<Tip>

30 Sertakan tes, tangkapan layar, atau output yang diharapkan sehingga Claude dapat memeriksa dirinya sendiri. Ini adalah hal dengan leverage tertinggi yang dapat Anda lakukan.

31</Tip>

32 

33Claude berkinerja jauh lebih baik ketika dapat memverifikasi pekerjaannya sendiri, seperti menjalankan tes, membandingkan tangkapan layar, dan memvalidasi output.

34 

35Tanpa kriteria kesuksesan yang jelas, mungkin menghasilkan sesuatu yang terlihat benar tetapi sebenarnya tidak berfungsi. Anda menjadi satu-satunya loop umpan balik, dan setiap kesalahan memerlukan perhatian Anda.

36 

37| Strategi | Sebelum | Sesudah |

38| ----------------------------------------- | -------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

39| **Berikan kriteria verifikasi** | *"implementasikan fungsi yang memvalidasi alamat email"* | *"tulis fungsi validateEmail. contoh kasus uji: [user@example.com](mailto:user@example.com) adalah true, invalid adalah false, [user@.com](mailto:user@.com) adalah false. jalankan tes setelah mengimplementasikan"* |

40| **Verifikasi perubahan UI secara visual** | *"buat dashboard terlihat lebih baik"* | *"\[tempel tangkapan layar] implementasikan desain ini. ambil tangkapan layar hasilnya dan bandingkan dengan yang asli. daftar perbedaan dan perbaiki"* |

41| **Tangani penyebab akar, bukan gejala** | *"build gagal"* | *"build gagal dengan kesalahan ini: \[tempel kesalahan]. perbaiki dan verifikasi build berhasil. tangani penyebab akar, jangan tekan kesalahan"* |

42 

43Perubahan UI dapat diverifikasi menggunakan [ekstensi Claude di Chrome](/id/chrome). Ini membuka tab baru di browser Anda, menguji UI, dan melakukan iterasi hingga kode berfungsi.

44 

45Verifikasi Anda juga dapat berupa rangkaian tes, linter, atau perintah Bash yang memeriksa output. Investasikan dalam membuat verifikasi Anda sangat solid.

46 

47***

48 

49## Jelajahi terlebih dahulu, kemudian rencanakan, kemudian kode

50 

51<Tip>

52 Pisahkan penelitian dan perencanaan dari implementasi untuk menghindari menyelesaikan masalah yang salah.

53</Tip>

54 

55Membiarkan Claude langsung melompat ke pengkodean dapat menghasilkan kode yang menyelesaikan masalah yang salah. Gunakan [Plan Mode](/id/common-workflows#use-plan-mode-for-safe-code-analysis) untuk memisahkan eksplorasi dari eksekusi.

56 

57Alur kerja yang direkomendasikan memiliki empat fase:

58 

59<Steps>

60 <Step title="Jelajahi">

61 Masukkan Plan Mode. Claude membaca file dan menjawab pertanyaan tanpa membuat perubahan.

62 

63 ```txt claude (Plan Mode) theme={null}

64 read /src/auth and understand how we handle sessions and login.

65 also look at how we manage environment variables for secrets.

66 ```

67 </Step>

68 

69 <Step title="Rencanakan">

70 Minta Claude untuk membuat rencana implementasi terperinci.

71 

72 ```txt claude (Plan Mode) theme={null}

73 I want to add Google OAuth. What files need to change?

74 What's the session flow? Create a plan.

75 ```

76 

77 Tekan `Ctrl+G` untuk membuka rencana di editor teks Anda untuk pengeditan langsung sebelum Claude melanjutkan.

78 </Step>

79 

80 <Step title="Implementasikan">

81 Beralih kembali ke Normal Mode dan biarkan Claude kode, memverifikasi terhadap rencananya.

82 

83 ```txt claude (Normal Mode) theme={null}

84 implement the OAuth flow from your plan. write tests for the

85 callback handler, run the test suite and fix any failures.

86 ```

87 </Step>

88 

89 <Step title="Komit">

90 Minta Claude untuk melakukan komit dengan pesan deskriptif dan membuat PR.

91 

92 ```txt claude (Normal Mode) theme={null}

93 commit with a descriptive message and open a PR

94 ```

95 </Step>

96</Steps>

97 

98<Callout>

99 Plan Mode berguna, tetapi juga menambah overhead.

100 

101 Untuk tugas di mana cakupannya jelas dan perbaikannya kecil (seperti memperbaiki typo, menambahkan baris log, atau mengganti nama variabel) minta Claude untuk melakukannya secara langsung.

102 

103 Perencanaan paling berguna ketika Anda tidak yakin tentang pendekatannya, ketika perubahan memodifikasi beberapa file, atau ketika Anda tidak terbiasa dengan kode yang dimodifikasi. Jika Anda dapat menjelaskan diff dalam satu kalimat, lewati rencana.

104</Callout>

105 

106***

107 

108## Berikan konteks spesifik dalam prompt Anda

109 

110<Tip>

111 Semakin tepat instruksi Anda, semakin sedikit koreksi yang Anda butuhkan.

112</Tip>

113 

114Claude dapat menyimpulkan niat, tetapi tidak dapat membaca pikiran Anda. Referensikan file spesifik, sebutkan batasan, dan tunjukkan pola contoh.

115 

116| Strategi | Sebelum | Sesudah |

117| ------------------------------------------------------------------------------------------------ | ---------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

118| **Batasi tugas.** Tentukan file mana, skenario apa, dan preferensi pengujian. | *"tambahkan tes untuk foo.py"* | *"tulis tes untuk foo.py yang mencakup kasus tepi di mana pengguna logout. hindari mock."* |

119| **Tunjukkan sumber.** Arahkan Claude ke sumber yang dapat menjawab pertanyaan. | *"mengapa ExecutionFactory memiliki api yang aneh?"* | *"lihat melalui riwayat git ExecutionFactory dan ringkas bagaimana api-nya menjadi seperti ini"* |

120| **Referensikan pola yang ada.** Tunjukkan Claude pola dalam basis kode Anda. | *"tambahkan widget kalender"* | *"lihat bagaimana widget yang ada diimplementasikan di halaman beranda untuk memahami pola. HotDogWidget.php adalah contoh yang baik. ikuti pola untuk mengimplementasikan widget kalender baru yang memungkinkan pengguna memilih bulan dan paginate maju/mundur untuk memilih tahun. bangun dari awal tanpa perpustakaan selain yang sudah digunakan dalam basis kode."* |

121| **Jelaskan gejala.** Berikan gejala, lokasi yang mungkin, dan apa "diperbaiki" terlihat seperti. | *"perbaiki bug login"* | *"pengguna melaporkan bahwa login gagal setelah timeout sesi. periksa alur auth di src/auth/, terutama penyegaran token. tulis tes yang gagal yang mereproduksi masalah, kemudian perbaiki"* |

122 

123Prompt yang samar dapat berguna ketika Anda mengeksplorasi dan dapat mengubah arah. Prompt seperti `"apa yang akan Anda tingkatkan dalam file ini?"` dapat mengungkap hal-hal yang tidak akan Anda pikirkan untuk ditanyakan.

124 

125### Berikan konten kaya

126 

127<Tip>

128 Gunakan `@` untuk mereferensikan file, tempel tangkapan layar/gambar, atau pipa data secara langsung.

129</Tip>

130 

131Anda dapat memberikan data kaya kepada Claude dalam beberapa cara:

132 

133* **Referensikan file dengan `@`** alih-alih menjelaskan di mana kode berada. Claude membaca file sebelum merespons.

134* **Tempel gambar secara langsung**. Salin/tempel atau seret dan lepas gambar ke dalam prompt.

135* **Berikan URL** untuk dokumentasi dan referensi API. Gunakan `/permissions` untuk allowlist domain yang sering digunakan.

136* **Pipa data** dengan menjalankan `cat error.log | claude` untuk mengirim konten file secara langsung.

137* **Biarkan Claude mengambil apa yang dibutuhkan**. Beri tahu Claude untuk menarik konteks sendiri menggunakan perintah Bash, alat MCP, atau dengan membaca file.

138 

139***

140 

141## Konfigurasi lingkungan Anda

142 

143Beberapa langkah setup membuat Claude Code jauh lebih efektif di semua sesi Anda. Untuk gambaran lengkap fitur ekstensi dan kapan menggunakan masing-masing, lihat [Perluas Claude Code](/id/features-overview).

144 

145### Tulis CLAUDE.md yang efektif

146 

147<Tip>

148 Jalankan `/init` untuk menghasilkan file CLAUDE.md pemula berdasarkan struktur proyek Anda saat ini, kemudian perbaiki seiring waktu.

149</Tip>

150 

151CLAUDE.md adalah file khusus yang dibaca Claude di awal setiap percakapan. Sertakan perintah Bash, gaya kode, dan aturan alur kerja. Ini memberikan Claude konteks persisten yang tidak dapat disimpulkan dari kode saja.

152 

153Perintah `/init` menganalisis basis kode Anda untuk mendeteksi sistem build, kerangka kerja tes, dan pola kode, memberikan Anda fondasi solid untuk disempurnakan.

154 

155Tidak ada format yang diperlukan untuk file CLAUDE.md, tetapi tetap singkat dan mudah dibaca manusia. Sebagai contoh:

156 

157```markdown CLAUDE.md theme={null}

158# Code style

159- Use ES modules (import/export) syntax, not CommonJS (require)

160- Destructure imports when possible (eg. import { foo } from 'bar')

161 

162# Workflow

163- Be sure to typecheck when you're done making a series of code changes

164- Prefer running single tests, and not the whole test suite, for performance

165```

166 

167CLAUDE.md dimuat setiap sesi, jadi hanya sertakan hal-hal yang berlaku secara luas. Untuk pengetahuan domain atau alur kerja yang hanya relevan kadang-kadang, gunakan [skills](/id/skills) sebagai gantinya. Claude memuat mereka sesuai permintaan tanpa membengkak setiap percakapan.

168 

169Tetap ringkas. Untuk setiap baris, tanyakan: *"Apakah menghapus ini akan menyebabkan Claude membuat kesalahan?"* Jika tidak, potong. File CLAUDE.md yang membengkak menyebabkan Claude mengabaikan instruksi aktual Anda!

170 

171| ✅ Sertakan | ❌ Kecualikan |

172| ------------------------------------------------------------- | ---------------------------------------------------------------- |

173| Perintah Bash yang tidak dapat ditebak Claude | Apa pun yang dapat diketahui Claude dengan membaca kode |

174| Aturan gaya kode yang berbeda dari default | Konvensi bahasa standar yang sudah diketahui Claude |

175| Instruksi pengujian dan test runner pilihan | Dokumentasi API terperinci (tautkan ke dokumen sebagai gantinya) |

176| Etiket repositori (penamaan cabang, konvensi PR) | Informasi yang berubah sering |

177| Keputusan arsitektur khusus untuk proyek Anda | Penjelasan panjang atau tutorial |

178| Keanehan lingkungan pengembang (variabel env yang diperlukan) | Praktik yang jelas sendiri seperti "tulis kode yang bersih" |

179| Gotcha umum atau perilaku yang tidak jelas | Deskripsi file demi file dari basis kode |

180 

181Jika Claude terus melakukan sesuatu yang tidak Anda inginkan meskipun memiliki aturan melawannya, file mungkin terlalu panjang dan aturan hilang. Jika Claude mengajukan pertanyaan yang dijawab di CLAUDE.md, frasenya mungkin ambigu. Perlakukan CLAUDE.md seperti kode: tinjau saat ada yang salah, pangkas secara teratur, dan uji perubahan dengan mengamati apakah perilaku Claude benar-benar bergeser.

182 

183Anda dapat menyesuaikan instruksi dengan menambahkan penekanan (misalnya, "PENTING" atau "ANDA HARUS") untuk meningkatkan kepatuhan. Periksa CLAUDE.md ke dalam git sehingga tim Anda dapat berkontribusi. File ini meningkat nilainya seiring waktu.

184 

185File CLAUDE.md dapat mengimpor file tambahan menggunakan sintaks `@path/to/import`:

186 

187```markdown CLAUDE.md theme={null}

188See @README.md for project overview and @package.json for available npm commands.

189 

190# Additional Instructions

191- Git workflow: @docs/git-instructions.md

192- Personal overrides: @~/.claude/my-project-instructions.md

193```

194 

195Anda dapat menempatkan file CLAUDE.md di beberapa lokasi:

196 

197* **Folder home (`~/.claude/CLAUDE.md`)**: berlaku untuk semua sesi Claude

198* **Root proyek (`./CLAUDE.md`)**: periksa ke dalam git untuk dibagikan dengan tim Anda

199* **Root proyek (`./CLAUDE.local.md`)**: catatan khusus proyek pribadi; tambahkan file ini ke `.gitignore` Anda sehingga tidak dibagikan dengan tim Anda

200* **Direktori induk**: berguna untuk monorepo di mana `root/CLAUDE.md` dan `root/foo/CLAUDE.md` ditarik secara otomatis

201* **Direktori anak**: Claude menarik file CLAUDE.md anak sesuai permintaan saat bekerja dengan file di direktori tersebut

202 

203### Konfigurasi izin

204 

205<Tip>

206 Gunakan [auto mode](/id/permission-modes#eliminate-prompts-with-auto-mode) untuk membiarkan classifier menangani persetujuan, `/permissions` untuk allowlist perintah spesifik, atau `/sandbox` untuk isolasi tingkat OS. Masing-masing mengurangi gangguan sambil membuat Anda tetap mengendalikan.

207</Tip>

208 

209Secara default, Claude Code meminta izin untuk tindakan yang mungkin memodifikasi sistem Anda: penulisan file, perintah Bash, alat MCP, dll. Ini aman tetapi membosankan. Setelah persetujuan kesepuluh Anda tidak benar-benar meninjau lagi, Anda hanya mengklik. Ada tiga cara untuk mengurangi gangguan ini:

210 

211* **Auto mode**: model classifier terpisah meninjau perintah dan memblokir hanya apa yang terlihat berisiko: eskalasi cakupan, infrastruktur yang tidak dikenal, atau tindakan yang didorong konten bermusuhan. Terbaik ketika Anda mempercayai arah umum tugas tetapi tidak ingin mengklik setiap langkah

212* **Allowlist izin**: izinkan alat spesifik yang Anda tahu aman, seperti `npm run lint` atau `git commit`

213* **Sandboxing**: aktifkan isolasi tingkat OS yang membatasi akses sistem file dan jaringan, memungkinkan Claude bekerja lebih bebas dalam batas yang ditentukan

214 

215Baca lebih lanjut tentang [permission modes](/id/permission-modes), [permission rules](/id/permissions), dan [sandboxing](/id/sandboxing).

216 

217### Gunakan alat CLI

218 

219<Tip>

220 Beri tahu Claude Code untuk menggunakan alat CLI seperti `gh`, `aws`, `gcloud`, dan `sentry-cli` saat berinteraksi dengan layanan eksternal.

221</Tip>

222 

223Alat CLI adalah cara paling efisien konteks untuk berinteraksi dengan layanan eksternal. Jika Anda menggunakan GitHub, instal CLI `gh`. Claude tahu cara menggunakannya untuk membuat masalah, membuka pull request, dan membaca komentar. Tanpa `gh`, Claude masih dapat menggunakan GitHub API, tetapi permintaan yang tidak diautentikasi sering kali mencapai batas laju.

224 

225Claude juga efektif dalam mempelajari alat CLI yang tidak diketahuinya. Coba prompt seperti `Use 'foo-cli-tool --help' to learn about foo tool, then use it to solve A, B, C.`

226 

227### Hubungkan server MCP

228 

229<Tip>

230 Jalankan `claude mcp add` untuk menghubungkan alat eksternal seperti Notion, Figma, atau database Anda.

231</Tip>

232 

233Dengan [server MCP](/id/mcp), Anda dapat meminta Claude untuk mengimplementasikan fitur dari pelacak masalah, query database, menganalisis data pemantauan, mengintegrasikan desain dari Figma, dan mengotomatisasi alur kerja.

234 

235### Atur hooks

236 

237<Tip>

238 Gunakan hooks untuk tindakan yang harus terjadi setiap kali tanpa pengecualian.

239</Tip>

240 

241[Hooks](/id/hooks-guide) menjalankan skrip secara otomatis pada titik tertentu dalam alur kerja Claude. Tidak seperti instruksi CLAUDE.md yang bersifat penasihat, hooks bersifat deterministik dan menjamin tindakan terjadi.

242 

243Claude dapat menulis hooks untuk Anda. Coba prompt seperti *"Tulis hook yang menjalankan eslint setelah setiap pengeditan file"* atau *"Tulis hook yang memblokir penulisan ke folder migrasi."* Edit `.claude/settings.json` secara langsung untuk mengonfigurasi hooks dengan tangan, dan jalankan `/hooks` untuk menjelajahi apa yang dikonfigurasi.

244 

245### Buat skills

246 

247<Tip>

248 Buat file `SKILL.md` di `.claude/skills/` untuk memberikan Claude pengetahuan domain dan alur kerja yang dapat digunakan kembali.

249</Tip>

250 

251[Skills](/id/skills) memperluas pengetahuan Claude dengan informasi khusus untuk proyek, tim, atau domain Anda. Claude menerapkannya secara otomatis saat relevan, atau Anda dapat menginvokannya secara langsung dengan `/skill-name`.

252 

253Buat skill dengan menambahkan direktori dengan `SKILL.md` ke `.claude/skills/`:

254 

255```markdown .claude/skills/api-conventions/SKILL.md theme={null}

256---

257name: api-conventions

258description: REST API design conventions for our services

259---

260# API Conventions

261- Use kebab-case for URL paths

262- Use camelCase for JSON properties

263- Always include pagination for list endpoints

264- Version APIs in the URL path (/v1/, /v2/)

265```

266 

267Skills juga dapat mendefinisikan alur kerja yang dapat digunakan kembali yang Anda panggil secara langsung:

268 

269```markdown .claude/skills/fix-issue/SKILL.md theme={null}

270---

271name: fix-issue

272description: Fix a GitHub issue

273disable-model-invocation: true

274---

275Analyze and fix the GitHub issue: $ARGUMENTS.

276 

2771. Use `gh issue view` to get the issue details

2782. Understand the problem described in the issue

2793. Search the codebase for relevant files

2804. Implement the necessary changes to fix the issue

2815. Write and run tests to verify the fix

2826. Ensure code passes linting and type checking

2837. Create a descriptive commit message

2848. Push and create a PR

285```

286 

287Jalankan `/fix-issue 1234` untuk menginvokannya. Gunakan `disable-model-invocation: true` untuk alur kerja dengan efek samping yang ingin Anda picu secara manual.

288 

289### Buat subagent khusus

290 

291<Tip>

292 Tentukan asisten khusus di `.claude/agents/` yang dapat didelegasikan Claude untuk tugas terisolasi.

293</Tip>

294 

295[Subagents](/id/sub-agents) berjalan dalam konteks mereka sendiri dengan set alat yang diizinkan mereka sendiri. Mereka berguna untuk tugas yang membaca banyak file atau memerlukan fokus khusus tanpa mengacaukan percakapan utama Anda.

296 

297```markdown .claude/agents/security-reviewer.md theme={null}

298---

299name: security-reviewer

300description: Reviews code for security vulnerabilities

301tools: Read, Grep, Glob, Bash

302model: opus

303---

304You are a senior security engineer. Review code for:

305- Injection vulnerabilities (SQL, XSS, command injection)

306- Authentication and authorization flaws

307- Secrets or credentials in code

308- Insecure data handling

309 

310Provide specific line references and suggested fixes.

311```

312 

313Beri tahu Claude untuk menggunakan subagent secara eksplisit: *"Gunakan subagent untuk meninjau kode ini untuk masalah keamanan."*

314 

315### Instal plugins

316 

317<Tip>

318 Jalankan `/plugin` untuk menjelajahi marketplace. Plugins menambahkan skills, alat, dan integrasi tanpa konfigurasi.

319</Tip>

320 

321[Plugins](/id/plugins) menggabungkan skills, hooks, subagents, dan server MCP menjadi satu unit yang dapat diinstal dari komunitas dan Anthropic. Jika Anda bekerja dengan bahasa yang diketik, instal [plugin code intelligence](/id/discover-plugins#code-intelligence) untuk memberikan Claude navigasi simbol presisi dan deteksi kesalahan otomatis setelah pengeditan.

322 

323Untuk panduan memilih antara skills, subagents, hooks, dan MCP, lihat [Perluas Claude Code](/id/features-overview#match-features-to-your-goal).

324 

325***

326 

327## Berkomunikasi secara efektif

328 

329Cara Anda berkomunikasi dengan Claude Code secara signifikan mempengaruhi kualitas hasil.

330 

331### Tanyakan pertanyaan basis kode

332 

333<Tip>

334 Tanyakan Claude pertanyaan yang akan Anda tanyakan kepada insinyur senior.

335</Tip>

336 

337Saat onboarding ke basis kode baru, gunakan Claude Code untuk pembelajaran dan eksplorasi. Anda dapat mengajukan Claude pertanyaan yang sama seperti yang Anda tanyakan kepada insinyur lain:

338 

339* Bagaimana cara logging bekerja?

340* Bagaimana cara membuat endpoint API baru?

341* Apa yang dilakukan `async move { ... }` pada baris 134 dari `foo.rs`?

342* Kasus tepi apa yang ditangani `CustomerOnboardingFlowImpl`?

343* Mengapa kode ini memanggil `foo()` alih-alih `bar()` pada baris 333?

344 

345Menggunakan Claude Code dengan cara ini adalah alur kerja onboarding yang efektif, meningkatkan waktu ramp-up dan mengurangi beban pada insinyur lain. Tidak ada prompt khusus yang diperlukan: tanyakan pertanyaan secara langsung.

346 

347### Biarkan Claude mewawancarai Anda

348 

349<Tip>

350 Untuk fitur yang lebih besar, biarkan Claude mewawancarai Anda terlebih dahulu. Mulai dengan prompt minimal dan minta Claude untuk mewawancarai Anda menggunakan alat `AskUserQuestion`.

351</Tip>

352 

353Claude menanyakan tentang hal-hal yang mungkin belum Anda pertimbangkan, termasuk implementasi teknis, UI/UX, kasus tepi, dan trade-off.

354 

355```text theme={null}

356I want to build [brief description]. Interview me in detail using the AskUserQuestion tool.

357 

358Ask about technical implementation, UI/UX, edge cases, concerns, and tradeoffs. Don't ask obvious questions, dig into the hard parts I might not have considered.

359 

360Keep interviewing until we've covered everything, then write a complete spec to SPEC.md.

361```

362 

363Setelah spesifikasi selesai, mulai sesi segar untuk menjalankannya. Sesi baru memiliki konteks bersih yang fokus sepenuhnya pada implementasi, dan Anda memiliki spesifikasi tertulis untuk direferensikan.

364 

365***

366 

367## Kelola sesi Anda

368 

369Percakapan bersifat persisten dan dapat dibalik. Gunakan ini untuk keuntungan Anda!

370 

371### Perbaiki arah dengan cepat dan sering

372 

373<Tip>

374 Perbaiki Claude segera setelah Anda melihatnya keluar jalur.

375</Tip>

376 

377Hasil terbaik datang dari loop umpan balik yang ketat. Meskipun Claude kadang-kadang menyelesaikan masalah dengan sempurna pada upaya pertama, memperbaikinya dengan cepat umumnya menghasilkan solusi yang lebih baik lebih cepat.

378 

379* **`Esc`**: hentikan Claude di tengah-tindakan dengan tombol `Esc`. Konteks dipertahankan, jadi Anda dapat mengarahkan kembali.

380* **`Esc + Esc` atau `/rewind`**: tekan `Esc` dua kali atau jalankan `/rewind` untuk membuka menu rewind dan mengembalikan percakapan dan status kode sebelumnya, atau ringkas dari pesan yang dipilih.

381* **`"Undo that"`**: biarkan Claude mengembalikan perubahannya.

382* **`/clear`**: atur ulang konteks antara tugas yang tidak terkait. Sesi panjang dengan konteks yang tidak relevan dapat mengurangi kinerja.

383 

384Jika Anda telah memperbaiki Claude lebih dari dua kali pada masalah yang sama dalam satu sesi, konteks penuh dengan pendekatan yang gagal. Jalankan `/clear` dan mulai segar dengan prompt yang lebih spesifik yang menggabungkan apa yang Anda pelajari. Sesi bersih dengan prompt yang lebih baik hampir selalu mengungguli sesi panjang dengan koreksi terakumulasi.

385 

386### Kelola konteks secara agresif

387 

388<Tip>

389 Jalankan `/clear` antara tugas yang tidak terkait untuk mengatur ulang konteks.

390</Tip>

391 

392Claude Code secara otomatis mengompaksi riwayat percakapan saat Anda mendekati batas konteks, yang mempertahankan kode dan keputusan penting sambil membebaskan ruang.

393 

394Selama sesi panjang, jendela konteks Claude dapat terisi dengan percakapan yang tidak relevan, konten file, dan perintah. Ini dapat mengurangi kinerja dan kadang-kadang mengalihkan Claude.

395 

396* Gunakan `/clear` sering antara tugas untuk mengatur ulang jendela konteks sepenuhnya

397* Ketika auto compaction dipicu, Claude meringkas apa yang paling penting, termasuk pola kode, status file, dan keputusan kunci

398* Untuk kontrol lebih, jalankan `/compact <instructions>`, seperti `/compact Focus on the API changes`

399* Untuk mengompaksi hanya bagian dari percakapan, gunakan `Esc + Esc` atau `/rewind`, pilih checkpoint pesan, dan pilih **Summarize from here**. Ini mengondensasi pesan dari titik itu maju sambil menjaga konteks awal tetap utuh.

400* Sesuaikan perilaku compaction di CLAUDE.md dengan instruksi seperti `"When compacting, always preserve the full list of modified files and any test commands"` untuk memastikan konteks kritis bertahan dari ringkasan

401* Untuk pertanyaan cepat yang tidak perlu tetap dalam konteks, gunakan [`/btw`](/id/interactive-mode#side-questions-with-%2Fbtw). Jawabannya muncul dalam overlay yang dapat ditutup dan tidak pernah memasuki riwayat percakapan, jadi Anda dapat memeriksa detail tanpa menumbuhkan konteks.

402 

403### Gunakan subagents untuk investigasi

404 

405<Tip>

406 Delegasikan penelitian dengan `"use subagents to investigate X"`. Mereka mengeksplorasi dalam konteks terpisah, menjaga percakapan utama Anda bersih untuk implementasi.

407</Tip>

408 

409Karena konteks adalah batasan fundamental Anda, subagents adalah salah satu alat paling kuat yang tersedia. Ketika Claude meneliti basis kode, ia membaca banyak file, semuanya mengonsumsi konteks Anda. Subagents berjalan dalam jendela konteks terpisah dan melaporkan kembali ringkasan:

410 

411```text theme={null}

412Use subagents to investigate how our authentication system handles token

413refresh, and whether we have any existing OAuth utilities I should reuse.

414```

415 

416Subagent mengeksplorasi basis kode, membaca file yang relevan, dan melaporkan kembali dengan temuan, semuanya tanpa mengacaukan percakapan utama Anda.

417 

418Anda juga dapat menggunakan subagents untuk verifikasi setelah Claude mengimplementasikan sesuatu:

419 

420```text theme={null}

421use a subagent to review this code for edge cases

422```

423 

424### Rewind dengan checkpoints

425 

426<Tip>

427 Setiap tindakan yang dilakukan Claude membuat checkpoint. Anda dapat mengembalikan percakapan, kode, atau keduanya ke checkpoint sebelumnya.

428</Tip>

429 

430Claude secara otomatis membuat checkpoint sebelum perubahan. Tekan Escape dua kali atau jalankan `/rewind` untuk membuka menu rewind. Anda dapat mengembalikan percakapan saja, mengembalikan kode saja, mengembalikan keduanya, atau meringkas dari pesan yang dipilih. Lihat [Checkpointing](/id/checkpointing) untuk detail.

431 

432Alih-alih merencanakan setiap langkah dengan hati-hati, Anda dapat memberi tahu Claude untuk mencoba sesuatu yang berisiko. Jika tidak berhasil, rewind dan coba pendekatan berbeda. Checkpoints bertahan di seluruh sesi, jadi Anda dapat menutup terminal dan masih rewind nanti.

433 

434<Warning>

435 Checkpoints hanya melacak perubahan yang dibuat *oleh Claude*, bukan proses eksternal. Ini bukan pengganti git.

436</Warning>

437 

438### Lanjutkan percakapan

439 

440<Tip>

441 Jalankan `claude --continue` untuk melanjutkan dari mana Anda tinggalkan, atau `--resume` untuk memilih dari sesi terbaru.

442</Tip>

443 

444Claude Code menyimpan percakapan secara lokal. Ketika tugas mencakup beberapa sesi, Anda tidak harus menjelaskan ulang konteksnya:

445 

446```bash theme={null}

447claude --continue # Resume the most recent conversation

448claude --resume # Select from recent conversations

449```

450 

451Gunakan `/rename` untuk memberikan sesi nama deskriptif seperti `"oauth-migration"` atau `"debugging-memory-leak"` sehingga Anda dapat menemukannya nanti. Perlakukan sesi seperti cabang: alur kerja yang berbeda dapat memiliki konteks terpisah dan persisten.

452 

453***

454 

455## Otomatisasi dan skalakan

456 

457Setelah Anda efektif dengan satu Claude, kalikan output Anda dengan sesi paralel, mode non-interaktif, dan pola fan-out.

458 

459Semuanya sejauh ini mengasumsikan satu manusia, satu Claude, dan satu percakapan. Tetapi Claude Code skalakan secara horizontal. Teknik di bagian ini menunjukkan bagaimana Anda dapat melakukan lebih banyak.

460 

461### Jalankan mode non-interaktif

462 

463<Tip>

464 Gunakan `claude -p "prompt"` di CI, pre-commit hooks, atau skrip. Tambahkan `--output-format stream-json` untuk output JSON streaming.

465</Tip>

466 

467Dengan `claude -p "your prompt"`, Anda dapat menjalankan Claude secara non-interaktif, tanpa sesi. Mode non-interaktif adalah cara Anda mengintegrasikan Claude ke dalam pipeline CI, pre-commit hooks, atau alur kerja otomatis apa pun. Format output memungkinkan Anda mengurai hasil secara terprogram: teks biasa, JSON, atau JSON streaming.

468 

469```bash theme={null}

470# One-off queries

471claude -p "Explain what this project does"

472 

473# Structured output for scripts

474claude -p "List all API endpoints" --output-format json

475 

476# Streaming for real-time processing

477claude -p "Analyze this log file" --output-format stream-json

478```

479 

480### Jalankan beberapa sesi Claude

481 

482<Tip>

483 Jalankan beberapa sesi Claude secara paralel untuk mempercepat pengembangan, menjalankan eksperimen terisolasi, atau memulai alur kerja kompleks.

484</Tip>

485 

486Ada tiga cara utama untuk menjalankan sesi paralel:

487 

488* [Aplikasi desktop Claude Code](/id/desktop#work-in-parallel-with-sessions): Kelola beberapa sesi lokal secara visual. Setiap sesi mendapat worktree terisolasi sendiri.

489* [Claude Code di web](/id/claude-code-on-the-web): Jalankan di infrastruktur cloud aman Anthropic dalam VM terisolasi.

490* [Tim agen](/id/agent-teams): Koordinasi otomatis dari beberapa sesi dengan tugas bersama, pesan, dan pemimpin tim.

491 

492Selain paralelisasi pekerjaan, beberapa sesi memungkinkan alur kerja yang berfokus pada kualitas. Konteks segar meningkatkan tinjauan kode karena Claude tidak akan bias terhadap kode yang baru saja ditulisnya.

493 

494Sebagai contoh, gunakan pola Writer/Reviewer:

495 

496| Sesi A (Penulis) | Sesi B (Peninjau) |

497| ---------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |

498| `Implementasikan rate limiter untuk endpoint API kami` | |

499| | `Tinjau implementasi rate limiter di @src/middleware/rateLimiter.ts. Cari kasus tepi, kondisi race, dan konsistensi dengan pola middleware yang ada.` |

500| `Berikut adalah umpan balik tinjauan: [output Sesi B]. Tangani masalah ini.` | |

501 

502Anda dapat melakukan sesuatu yang serupa dengan tes: biarkan satu Claude menulis tes, kemudian yang lain menulis kode untuk lulus.

503 

504### Fan out di seluruh file

505 

506<Tip>

507 Loop melalui tugas memanggil `claude -p` untuk masing-masing. Gunakan `--allowedTools` untuk cakupan izin untuk operasi batch.

508</Tip>

509 

510Untuk migrasi besar atau analisis, Anda dapat mendistribusikan pekerjaan di seluruh banyak invokasi Claude paralel:

511 

512<Steps>

513 <Step title="Hasilkan daftar tugas">

514 Biarkan Claude membuat daftar semua file yang perlu dimigrasikan (misalnya, `list all 2,000 Python files that need migrating`)

515 </Step>

516 

517 <Step title="Tulis skrip untuk loop melalui daftar">

518 ```bash theme={null}

519 for file in $(cat files.txt); do

520 claude -p "Migrate $file from React to Vue. Return OK or FAIL." \

521 --allowedTools "Edit,Bash(git commit *)"

522 done

523 ```

524 </Step>

525 

526 <Step title="Uji pada beberapa file, kemudian jalankan dalam skala">

527 Perbaiki prompt Anda berdasarkan apa yang salah dengan 2-3 file pertama, kemudian jalankan pada set lengkap. Bendera `--allowedTools` membatasi apa yang dapat dilakukan Claude, yang penting ketika Anda menjalankan tanpa pengawasan.

528 </Step>

529</Steps>

530 

531Anda juga dapat mengintegrasikan Claude ke dalam pipeline pemrosesan/data yang ada:

532 

533```bash theme={null}

534claude -p "<your prompt>" --output-format json | your_command

535```

536 

537Gunakan `--verbose` untuk debugging selama pengembangan, dan matikan dalam produksi.

538 

539### Jalankan secara otonom dengan auto mode

540 

541Untuk eksekusi tanpa gangguan dengan pemeriksaan keamanan latar belakang, gunakan [auto mode](/id/permission-modes#eliminate-prompts-with-auto-mode). Model classifier meninjau perintah sebelum dijalankan, memblokir eskalasi cakupan, infrastruktur yang tidak dikenal, dan tindakan yang didorong konten bermusuhan sambil membiarkan pekerjaan rutin berjalan tanpa prompt.

542 

543```bash theme={null}

544claude --permission-mode auto -p "fix all lint errors"

545```

546 

547Untuk run non-interaktif dengan bendera `-p`, auto mode membatalkan jika classifier secara berulang memblokir tindakan, karena tidak ada pengguna untuk kembali. Lihat [kapan auto mode kembali](/id/permission-modes#when-auto-mode-falls-back) untuk ambang batas.

548 

549***

550 

551## Hindari pola kegagalan umum

552 

553Ini adalah kesalahan umum. Mengenalinya lebih awal menghemat waktu:

554 

555* **Sesi kitchen sink.** Anda mulai dengan satu tugas, kemudian meminta Claude sesuatu yang tidak terkait, kemudian kembali ke tugas pertama. Konteks penuh dengan informasi yang tidak relevan.

556 > **Perbaikan**: `/clear` antara tugas yang tidak terkait.

557* **Mengoreksi berulang kali.** Claude melakukan sesuatu yang salah, Anda memperbaikinya, masih salah, Anda memperbaiki lagi. Konteks tercemar dengan pendekatan yang gagal.

558 > **Perbaikan**: Setelah dua koreksi yang gagal, `/clear` dan tulis prompt awal yang lebih baik menggabungkan apa yang Anda pelajari.

559* **CLAUDE.md yang terlalu spesifik.** Jika CLAUDE.md Anda terlalu panjang, Claude mengabaikan setengahnya karena aturan penting hilang dalam kebisingan.

560 > **Perbaikan**: Pangkas tanpa ampun. Jika Claude sudah melakukan sesuatu dengan benar tanpa instruksi, hapus atau ubah menjadi hook.

561* **Kesenjangan kepercayaan-kemudian-verifikasi.** Claude menghasilkan implementasi yang terlihat masuk akal tetapi tidak menangani kasus tepi.

562 > **Perbaikan**: Selalu berikan verifikasi (tes, skrip, tangkapan layar). Jika Anda tidak dapat memverifikasinya, jangan kirimkan.

563* **Eksplorasi tak terbatas.** Anda meminta Claude untuk "menyelidiki" sesuatu tanpa membatasinya. Claude membaca ratusan file, mengisi konteks.

564 > **Perbaikan**: Batasi investigasi secara sempit atau gunakan subagents sehingga eksplorasi tidak mengonsumsi konteks utama Anda.

565 

566***

567 

568## Kembangkan intuisi Anda

569 

570Pola dalam panduan ini bukan batu loncatan. Mereka adalah titik awal yang bekerja dengan baik secara umum, tetapi mungkin tidak optimal untuk setiap situasi.

571 

572Kadang-kadang Anda *harus* membiarkan konteks terakumulasi karena Anda mendalam dalam satu masalah kompleks dan riwayat berharga. Kadang-kadang Anda harus melewati perencanaan dan membiarkan Claude mengetahuinya karena tugas bersifat eksplorasi. Kadang-kadang prompt yang samar adalah tepat karena Anda ingin melihat bagaimana Claude menafsirkan masalah sebelum membatasinya.

573 

574Perhatikan apa yang berhasil. Ketika Claude menghasilkan output yang hebat, perhatikan apa yang Anda lakukan: struktur prompt, konteks yang Anda berikan, mode yang Anda gunakan. Ketika Claude berjuang, tanyakan mengapa. Apakah konteksnya terlalu bising? Prompt terlalu samar? Tugas terlalu besar untuk satu pass?

575 

576Seiring waktu, Anda akan mengembangkan intuisi yang tidak dapat ditangkap oleh panduan apa pun. Anda akan tahu kapan harus spesifik dan kapan harus terbuka, kapan harus merencanakan dan kapan harus mengeksplorasi, kapan harus menghapus konteks dan kapan harus membiarkannya terakumulasi.

577 

578## Sumber daya terkait

579 

580* [Cara Claude Code Bekerja](/id/how-claude-code-works): loop agentic, alat, dan manajemen konteks

581* [Perluas Claude Code](/id/features-overview): skills, hooks, MCP, subagents, dan plugins

582* [Alur kerja umum](/id/common-workflows): resep langkah demi langkah untuk debugging, pengujian, PR, dan lainnya

583* [CLAUDE.md](/id/memory): simpan konvensi proyek dan konteks persisten

champion-kit.md +195 −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# Champion kit

6 

7> Panduan untuk insinyur yang mengadvokasi Claude Code secara internal: apa yang harus dibagikan, cara menjawab pertanyaan, dan cara meningkatkan adopsi di tim Anda.

8 

9Halaman ini untuk insinyur individual yang sudah menggunakan Claude Code dan ingin membantu tim mereka mengadopsinya. Ini mencakup apa yang harus dibagikan, cara menjawab pertanyaan yang akan Anda terima, playbook tiga puluh hari, dan respons terhadap kekhawatiran umum.

10 

11Adopsi alat pengembang jarang terjadi karena pengumuman peluncuran. Ini terjadi karena seseorang di tim mulai menggunakan alat dengan baik, membicarakannya secara terbuka, dan memudahkan orang lain untuk mengikuti. Pekerjaan yang Anda lakukan sebagai champion memiliki efek yang tidak sebanding: setiap contoh yang Anda bagikan mempersingkat kurva pembelajaran bagi insinyur yang datang setelah Anda, dan setiap pertanyaan yang Anda jawab secara publik mengubah pengalaman satu orang menjadi sesuatu yang dapat dibangun oleh seluruh tim. Anda bertindak sebagai pengganda untuk tim Anda, bukan help desk, dan panduan ini dirancang untuk menjaga peran tetap berkelanjutan berdasarkan istilah-istilah tersebut.

12 

13## Peran champion

14 

15Peran ini terdiri dari tiga perilaku yang saling memperkuat.

16 

17| Perilaku | Seperti apa dalam praktik | Mengapa hal ini penting |

18| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

19| Bagikan apa yang Anda temukan | Posting prompt, screenshot, dan kemenangan kecil dari pekerjaan Anda sendiri di tempat yang sudah dibaca tim Anda, seperti saluran teknik, thread standup, atau deskripsi pull-request. | Contoh yang diambil dari codebase Anda sendiri lebih persuasif daripada dokumentasi eksternal apa pun, karena rekan kerja dapat melihat dengan tepat bagaimana alat ini berlaku pada masalah yang mereka bagikan dengan Anda. |

20| Jadilah orang yang ditanya orang | Ketika rekan kerja bertanya bagaimana Anda mencapai sesuatu, berikan prompt sebenarnya yang Anda gunakan sehingga mereka dapat menerapkannya langsung ke tugas mereka sendiri. | Contoh konkret yang dapat dijalankan menghilangkan kesenjangan antara rasa ingin tahu dan penggunaan pertama yang berhasil, yang merupakan tempat sebagian besar upaya adopsi terhenti. |

21| Perluas lingkaran | Tetapkan sejumlah kecil kebiasaan berulang yang ringan, seperti saluran khusus atau thread mingguan, sehingga momentum terus berlanjut bahkan ketika perhatian Anda berada di tempat lain. | Adopsi yang bergantung pada satu orang rapuh. Adopsi yang dibawa oleh kebiasaan bersama terus berkembang dengan sendirinya. |

22 

23Sebagian besar dari ini cocok secara alami dalam pekerjaan yang sudah Anda lakukan. Perbedaannya adalah sejumlah kecil niat tambahan tentang di mana penemuan Anda diposting dan bagaimana jawaban Anda menyebar.

24 

25### Apa yang seharusnya ini biayai Anda

26 

27Tetapkan ekspektasi dengan diri sendiri dan dengan pemimpin Anda. Aktivitas di bawah ini dimaksudkan untuk cocok dalam minggu kerja normal, dan peran harus tetap menjadi pengganda pada pekerjaan Anda yang ada daripada tanggung jawab dukungan tambahan.

28 

29| Aktivitas | Waktu per minggu | Panduan |

30| ---------------------------------------- | ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |

31| Posting kemenangan dan prompt | Sekitar 15 menit | Tangkap ini pada saat itu dengan screenshot dan satu atau dua kalimat; hindari mengubahnya menjadi write-up formal. |

32| Menjawab pertanyaan di saluran bersama | Sekitar 20 menit | Jawab secara publik sekali, kemudian tautkan kembali ke jawaban itu ketika pertanyaan terulang. |

33| Mengadakan thread show-and-tell mingguan | Sekitar 5 menit | Anda memposting prompt pembukaan; tim menyediakan konten. |

34| Pairing atau walkthrough opsional | 0 hingga 30 menit | Cadangkan ini untuk rekan kerja yang benar-benar terhalang, dan tawarkan tautan [Quickstart](/id/quickstart) sebelum menjadwalkan waktu. |

35 

36## Bagikan apa yang Anda temukan

37 

38Pengalaman Anda sendiri adalah materi paling persuasif yang akan dihadapi rekan kerja Anda, karena spesifik untuk codebase, alur kerja, dan masalah yang Anda semua bagikan. Dokumentasi memberi tahu orang apa yang mungkin; posting Anda menunjukkan kepada mereka apa yang benar-benar berfungsi di lingkungan Anda.

39 

40### Apa yang layak dibagikan

41 

42Post yang paling berguna menggambarkan teknik yang dapat digunakan kembali oleh rekan kerja besok daripada hasil yang sudah selesai. Teknik berkembang saat menyebar melalui tim; pembaruan status tidak.

43 

44Contoh teknik yang dapat digunakan kembali:

45 

46* "Saya belajar bahwa @-mentioning direktori berfungsi. Mengarahkannya ke `@src/components/` dan bertanya komponen mana yang kehilangan tes mengungkapkan dua yang saya lewatkan."

47* "Plan mode (`Shift+Tab`) menunjukkan dengan tepat file mana yang akan disentuh sebelum ada edit yang dibuat, itulah mengapa saya nyaman menggunakannya pada kode bersama."

48* "Saya mengonfigurasi hook Stop sehingga saya menerima notifikasi desktop ketika tugas panjang selesai. Konfigurasi ada di thread."

49* "Menjalankan `/init` menghasilkan `CLAUDE.md` dari repositori sehingga asisten berhenti menanyakan kembali tentang konvensi kami."

50 

51### Di mana harus membagikannya

52 

53Posting di mana pun tim Anda sudah membaca. Tujuannya adalah menempatkan contoh di jalur pekerjaan normal daripada membuat tujuan.

54 

55| Lokasi | Paling cocok untuk | Format yang direkomendasikan |

56| ---------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |

57| Saluran `#claude-code` atau teknik umum | Penemuan, prompt, dan momen "hari ini saya belajar" | Screenshot disertai satu atau dua kalimat konteks |

58| Deskripsi pull-request | Mendemonstrasikan pendekatan pada kode nyata yang sudah dibaca oleh reviewer | Satu baris seperti "Claude dan saya melakukan refactor ini; senang untuk menjelaskan pendekatannya." |

59| Standup atau pembaruan tertulis mingguan | Menormalkan penggunaan dengan pemimpin dan manajer skip-level | Satu kalimat menggambarkan satu hasil konkret |

60| Wiki tim atau dokumentasi internal | Pola tahan lama, skill khusus, dan contoh `CLAUDE.md` | Halaman pendek, ditautkan dari topik saluran sehingga tetap dapat ditemukan |

61 

62### Format yang berfungsi

63 

64Screenshot disertai satu baris konteks, atau deskripsi before-and-after singkat, umumnya tingkat detail yang tepat. Jaga setiap post cukup pendek sehingga seseorang yang melewati masih menyerap poinnya. Write-up panjang cenderung disimpan untuk nanti dan dilupakan, sedangkan post pendek dengan screenshot cenderung disalin dan dicoba.

65 

66Post contoh di bawah ini mengilustrasikan nada dan panjang; sesuaikan daripada menyalin verbatim.

67 

68```text theme={null}

69Belajar hari ini bahwa @-mentioning direktori berfungsi. Saya mengarahkannya ke

70@src/components/ dan bertanya komponen mana yang kehilangan tes, dan itu

71mengungkapkan dua yang saya lupakan.

72```

73 

74```text theme={null}

75Saya mengonfigurasi hook Stop sehingga saya menerima notifikasi desktop ketika

76tugas panjang selesai. Saya memulai refactor, pergi, dan diberitahu ketika

77selesai. Konfigurasi ada di thread.

78```

79 

80```text theme={null}

81Plan mode adalah alasan saya nyaman menggunakan ini pada kode yang penting.

82Tekan Shift+Tab sampai Anda melihat "plan"; itu meletakkan dengan tepat file mana

83yang dimaksudkan untuk disentuh sebelum mengubah apa pun.

84```

85 

86## Jadilah orang yang ditanya orang

87 

88Setelah Anda membagikan beberapa contoh, pertanyaan akan mengikuti. Di sinilah peran champion memiliki leverage terbesar, karena jawaban yang baik untuk satu orang sering kali membuka blokir beberapa orang lain yang menonton saluran yang sama.

89 

90### Jawab dengan prompt daripada penjelasan

91 

92Ketika rekan kerja bertanya bagaimana Anda mencapai sesuatu, respons paling berguna adalah prompt yang benar-benar Anda gunakan. Mereka akan belajar lebih banyak dari menjalankan prompt itu terhadap masalah mereka sendiri daripada dari deskripsi apa pun yang bisa Anda tulis, dan itu memberi mereka sesuatu yang bisa mereka tindaklanjuti segera.

93 

94```text theme={null}

95Rekan kerja: Bagaimana Anda mendapatkannya untuk menemukan kondisi race itu?

96 

97Champion: Saya bertanya, "Test di @tests/scheduler.test.ts tidak stabil, cari tahu

98mengapa," dan itu melacak dua promise yang tidak bergabung di scheduler. Coba

99frasa yang sama pada test Anda.

100```

101 

102### Tunjuk ke fitur daripada dokumentasi

103 

104Respons seperti "Coba plan mode, tekan `Shift+Tab` sampai Anda melihatnya" lebih berguna pada saat itu daripada tautan ke dokumentasi. Jika orang membutuhkan kedalaman lebih nanti mereka akan menemukannya sendiri; sekarang mereka membutuhkan satu hal yang membuka blokir mereka.

105 

106### Pertanyaan yang mungkin akan Anda dengar

107 

108| Pertanyaan | Respons yang disarankan | Sumber daya tindak lanjut |

109| ------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- |

110| "Apa yang harus saya coba pertama kali?" | Rekomendasikan tugas nyata tetapi terbatas, idealnya bug atau chore yang telah ditunda orang karena membosankan daripada sulit. | [Common workflows](/id/common-workflows) |

111| "Bagaimana saya mempercayainya dengan kode saya?" | Perkenalkan plan mode: menekan `Shift+Tab` bersiklus ke dalamnya, Claude mengusulkan dengan tepat apa yang dimaksudkan untuk diubah, dan tidak ada yang dimodifikasi sampai pengguna menyetujui. | [Permissions](/id/permissions) |

112| "Apakah setup layak untuk usaha?" | Instalasi membutuhkan waktu kira-kira dua menit, berjalan di terminal, dan tidak memerlukan ekstensi IDE. Menjalankan `/init` sekali sudah cukup untuk mulai bekerja. | [Quickstart](/id/quickstart) |

113| "Itu menghasilkan hasil yang salah." | Dorong mereka untuk memberikan kegagalan kembali ke Claude. Menempel pesan kesalahan atau test yang gagal jauh lebih efektif daripada mengganti frasa permintaan asli. | [Common workflows](/id/common-workflows) |

114| "Itu tidak memahami konvensi codebase kami." | Sarankan menjalankan `/init` untuk menghasilkan file `CLAUDE.md`, kemudian tambahkan konvensi tim, perintah test, dan direktori apa pun yang harus dihindari. | [Memory](/id/memory) |

115| "Apakah ini hanya autocomplete?" | Tawarkan demonstrasi singkat di mana Claude menjelaskan file yang tidak dikenal, melacak bug di seluruh layanan, atau menyusun rencana migrasi. Tugas-tugas ini memerlukan penalaran di seluruh repositori daripada menyelesaikan satu baris. | Demonstrasi langsung dua menit |

116| "Bagaimana dengan keamanan dan penanganan data?" | Rujuk pertanyaan ini ke administrator Anda. Kebijakan penerapan dan penanganan data organisasi Anda sudah dikonfigurasi, dan champion tidak boleh mengimprovasi jawaban ini. | [Security](/id/security) · [Data usage](/id/data-usage) |

117 

118## Perluas lingkaran

119 

120Tujuannya bukan untuk membangun program atau memiliki peluncuran. Ini adalah untuk membangun sejumlah kecil kebiasaan ringan yang memungkinkan momentum terus berlanjut setelah Anda berhenti secara aktif mendorong. Ketika pertanyaan di saluran dijawab oleh orang selain Anda, peran telah melakukan tugasnya.

121 

122### Pola yang cenderung berfungsi

123 

124| Pola | Cara menjalankannya | Usaha yang diperlukan |

125| --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------- |

126| Saluran khusus | Buat saluran `#claude-code` (atau thread berulang di saluran yang ada), pin tautan [Quickstart](/id/quickstart) dan satu contoh kuat, dan jawab pertanyaan secara publik sehingga setiap jawaban menguntungkan semua orang yang menonton. | Sekitar lima menit untuk diatur, kemudian ambient |

127| Thread show-and-tell mingguan | Setiap Jumat, posting "Apa yang membantu Claude Anda minggu ini?" Tidak ada persiapan, slide, atau pertemuan yang diperlukan; screenshot dan deskripsi pendek sudah cukup. | Sekitar dua menit per minggu |

128| Bagikan skill khusus | Posting file `.claude/skills/<name>/SKILL.md` paling berguna Anda, misalnya skill `/ship` yang menjalankan test dan lint sebelum commit, dengan deskripsi satu baris. Karena skill adalah Markdown biasa, rekan kerja dapat mengadopsinya segera. | Sekitar lima menit per skill |

129| Hasilkan panduan setup dari penggunaan Anda sendiri | Jalankan `/team-onboarding` dalam proyek yang telah Anda habiskan waktu nyata. Claude memindai sesi, perintah, dan server MCP terbaru Anda, kemudian menghasilkan panduan yang dapat ditempel oleh rekan kerja baru sebagai pesan pertama mereka untuk memutar ulang setup Anda. Pin di saluran. | Sekitar dua menit |

130| Pair pada tugas pertama | Tawarkan sesi pairing lima belas menit tunggal kepada siapa pun yang memulai. Satu hasil yang berhasil pada kode mereka sendiri lebih persuasif daripada presentasi apa pun. | Sekitar lima belas menit per orang |

131| Identifikasi champion berikutnya | Rekan kerja yang paling banyak bertanya kepada Anda biasanya siap mengambil peran ini. Teruskan halaman ini kepada mereka dan bagi tanggung jawab saluran antara Anda. | Dapat diabaikan |

132 

133### Playbook tiga puluh hari

134 

135Jika rencana longgar membantu, urutan di bawah ini mencerminkan apa yang cenderung berfungsi di sebagian besar tim. Sesuaikan dengan bebas agar sesuai dengan konteks Anda.

136 

137<Steps>

138 <Step title="Minggu 1: Semai saluran">

139 Buat saluran, pin [Quickstart](/id/quickstart), dan posting dua atau tiga contoh Anda sendiri dengan prompt yang disertakan.

140 

141 **Sinyal bahwa itu berfungsi:** beberapa rekan kerja bereaksi atau membalas, dan setidaknya satu pertanyaan diajukan di saluran.

142 </Step>

143 

144 <Step title="Minggu 2: Mulai ritme">

145 Mulai thread show-and-tell mingguan, jawab setiap pertanyaan secara publik, dan bagikan satu skill khusus atau snippet `CLAUDE.md`.

146 

147 **Sinyal bahwa itu berfungsi:** seseorang selain Anda memposting contoh mereka sendiri.

148 </Step>

149 

150 <Step title="Minggu 3: Pair dan konsolidasikan">

151 Tawarkan dua atau tiga sesi pairing pendek dan konsolidasikan pertanyaan dan jawaban paling umum ke dalam pesan FAQ yang disematkan.

152 

153 **Sinyal bahwa itu berfungsi:** Anda melihat penggunaan berulang, dengan rekan kerja yang sama kembali daripada mencoba sekali dan berhenti.

154 </Step>

155 

156 <Step title="Minggu 4: Serahkan">

157 Identifikasi champion kedua dan bagikan ringkasan singkat tentang apa yang berfungsi dan apa yang tidak dengan pemimpin atau administrator Anda.

158 

159 **Sinyal bahwa itu berfungsi:** pertanyaan di saluran dijawab oleh orang selain Anda.

160 </Step>

161</Steps>

162 

163### Ketika seseorang ingin menggali lebih dalam

164 

165Anda adalah pengenalan hangat daripada program onboarding. Ketika rekan kerja bergerak melampaui "haruskah saya mencoba ini" menjadi "bagaimana saya menjadi efektif dengannya," arahkan mereka ke halaman [Quickstart](/id/quickstart) dan [Common workflows](/id/common-workflows). Mereka berisi bagian pendek yang mencakup fitur yang benar-benar berguna tetapi sulit ditemukan sendiri.

166 

167## Merespons kekhawatiran umum

168 

169Skeptisisme yang sehat diharapkan; insinyur harus berhati-hati tentang alat yang menyentuh kode mereka. Respons paling efektif jarang untuk membantah kasus umum. Sebaliknya, akui kekhawatiran, tawarkan reframe singkat, dan usulkan satu demonstrasi konkret pada kode orang itu sendiri. Sebagian besar kekhawatiran diselesaikan oleh satu pengalaman yang berhasil.

170 

171| Kekhawatiran | Respons yang disarankan | Bukti untuk ditawarkan |

172| ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ |

173| "Saya lebih cepat tanpanya." | Itu mungkin benar untuk kode yang biasanya ditulis orang. Sarankan mencobanya pada pekerjaan yang mereka cenderung hindari: file legacy, layanan yang tidak dikenal, atau test scaffolding, di mana leverage tertinggi. | Waktu satu tugas membosankan kedua cara dan bandingkan. |

174| "Saya tidak mempercayai AI untuk menyentuh kode produksi." | Setuju bahwa tidak ada perubahan yang harus mendarat tanpa dibaca. Plan mode dikombinasikan dengan review diff normal berarti tidak ada yang diterapkan yang belum diperiksa oleh insinyur, standar yang sama seperti pull request apa pun. | Demonstrasikan plan mode pada file nyata. |

175| "Itu akan membuat insinyur junior lebih lemah." | Digunakan dengan baik, itu adalah penjelasan yang efektif. Dorong insinyur junior untuk meminta Claude menjelaskan file dan situs panggilannya sebelum meminta untuk mengubah apa pun. | Jalankan "Jelaskan @file dan di mana itu dipanggil dari" bersama. |

176| "Saya mencobanya sekali dan itu mengalami halusinasi." | Ini biasanya masalah konteks daripada masalah model. @-mentioning file yang relevan, menjalankan `/init`, dan memberikan output kesalahan aktual biasanya menyelesaikannya. | Jalankan kembali prompt asli mereka dengan konteks `@` yang tepat. |

177| "Kami tidak memiliki waktu untuk mempelajari alat lain." | Claude Code adalah perintah terminal daripada platform. Jika itu tidak mengembalikan nilai dalam sesi pertama, masuk akal untuk menyisihkannya. | Instalasi dua menit diikuti oleh satu bug nyata. |

178 

179## Lembar referensi cepat

180 

181Teknik di bawah ini adalah yang paling dapat diandalkan untuk memindahkan seseorang dari uji coba pertama ke penggunaan harian. Pin tabel ini di saluran atau bagikan sendiri.

182 

183| Teknik | Cara menerapkannya |

184| --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

185| Berikan konteks yang tepat | Gunakan referensi `@file` atau `@directory/`, atau tempel output kesalahan atau log secara langsung. Menyediakan konteks yang relevan lebih efektif daripada prompting yang rumit. |

186| Tinjau rencana sebelum edit | Tekan `Shift+Tab` untuk memasuki plan mode. Claude akan menggambarkan perubahan yang dimaksudkan untuk persetujuan Anda sebelum menjalankannya. |

187| Ajarkan repositori Anda | Jalankan `/init` untuk menghasilkan file `CLAUDE.md`, kemudian tambahkan konvensi Anda, perintah test, dan direktori apa pun yang tidak boleh dimodifikasi. Lihat [Memory](/id/memory). |

188| Gunakan kembali alur kerja | Simpan file `SKILL.md` di `.claude/skills/<name>/` untuk membuat skill `/name` yang dapat digunakan oleh seluruh tim. Lihat [Skills](/id/skills). |

189| Tetap terinformasi selama tugas panjang | Konfigurasikan hook Stop untuk menerima notifikasi desktop ketika tugas yang berjalan lama selesai. Lihat [Hooks](/id/hooks-guide). |

190| Pulih dari hasil yang salah | Daripada mengganti frasa permintaan, tempel test yang gagal atau stack trace kembali ke Claude dan minta untuk mengatasi kegagalan spesifik itu. |

191| Jaga edit tetap bedah | Minta diff, atau tentukan "hanya ubah X." Claude menghormati scope ketika scope dinyatakan. |

192 

193<Tip>

194 Claude Code diperbarui secara sering. Verifikasi detail spesifik versi terhadap [halaman beranda dokumentasi](/id/overview) sebelum mendistribusikan materi ini secara internal.

195</Tip>

channels.md +357 −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# Dorong acara ke dalam sesi yang sedang berjalan dengan channels

6 

7> Gunakan channels untuk mendorong pesan, peringatan, dan webhooks ke dalam sesi Claude Code Anda dari server MCP. Teruskan hasil CI, pesan obrolan, dan acara pemantauan sehingga Claude dapat bereaksi saat Anda tidak ada.

8 

9<Note>

10 Channels berada dalam [research preview](#research-preview) dan memerlukan Claude Code v2.1.80 atau lebih baru. Mereka memerlukan login claude.ai. Autentikasi konsol dan kunci API tidak didukung. Organisasi Tim dan Enterprise harus [secara eksplisit mengaktifkannya](#enterprise-controls).

11</Note>

12 

13Sebuah channel adalah server MCP yang mendorong acara ke dalam sesi Claude Code yang sedang berjalan, sehingga Claude dapat bereaksi terhadap hal-hal yang terjadi saat Anda tidak berada di terminal. Channels dapat dua arah: Claude membaca acara dan membalas kembali melalui channel yang sama, seperti jembatan obrolan. Acara hanya tiba saat sesi terbuka, jadi untuk pengaturan yang selalu aktif Anda menjalankan Claude dalam proses latar belakang atau terminal persisten.

14 

15Tidak seperti integrasi yang menjalankan sesi cloud baru atau menunggu untuk diambil, acara tiba dalam sesi yang sudah Anda buka: lihat [bagaimana channels dibandingkan](#how-channels-compare).

16 

17Anda menginstal channel sebagai plugin dan mengonfigurasinya dengan kredensial Anda sendiri. Telegram, Discord, dan iMessage disertakan dalam research preview.

18 

19Ketika Claude membalas melalui channel, Anda melihat pesan masuk di terminal Anda tetapi bukan teks balasan. Terminal menampilkan panggilan tool dan konfirmasi (seperti "terkirim"), dan balasan sebenarnya muncul di platform lain.

20 

21Halaman ini mencakup:

22 

23* [Supported channels](#supported-channels): pengaturan Telegram, Discord, dan iMessage

24* [Instal dan jalankan channel](#quickstart) dengan fakechat, demo localhost

25* [Siapa yang dapat mendorong pesan](#security): daftar penyetujuan pengirim dan cara Anda memasangkan

26* [Aktifkan channels untuk organisasi Anda](#enterprise-controls) di Tim dan Enterprise

27* [Bagaimana channels dibandingkan](#how-channels-compare) dengan sesi web, Slack, MCP, dan Remote Control

28 

29Untuk membangun channel Anda sendiri, lihat [referensi Channels](/id/channels-reference).

30 

31## Supported channels

32 

33Setiap channel yang didukung adalah plugin yang memerlukan [Bun](https://bun.sh). Untuk demo langsung dari alur plugin sebelum menghubungkan platform nyata, coba [quickstart fakechat](#quickstart).

34 

35<Tabs>

36 <Tab title="Telegram">

37 Lihat [sumber plugin Telegram](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/telegram) lengkap.

38 

39 <Steps>

40 <Step title="Buat bot Telegram">

41 Buka [BotFather](https://t.me/BotFather) di Telegram dan kirim `/newbot`. Berikan nama tampilan dan nama pengguna unik yang diakhiri dengan `bot`. Salin token yang dikembalikan BotFather.

42 </Step>

43 

44 <Step title="Instal plugin">

45 Di Claude Code, jalankan:

46 

47 ```

48 /plugin install telegram@claude-plugins-official

49 ```

50 

51 Jika Claude Code melaporkan bahwa plugin tidak ditemukan di pasar mana pun, pasar Anda hilang atau ketinggalan zaman. Jalankan `/plugin marketplace update claude-plugins-official` untuk menyegarkannya, atau `/plugin marketplace add anthropics/claude-plugins-official` jika Anda belum menambahkannya sebelumnya. Kemudian coba instal lagi.

52 

53 Setelah menginstal, jalankan `/reload-plugins` untuk mengaktifkan perintah konfigurasi plugin.

54 </Step>

55 

56 <Step title="Konfigurasikan token Anda">

57 Jalankan perintah konfigurasi dengan token dari BotFather:

58 

59 ```

60 /telegram:configure <token>

61 ```

62 

63 Ini menyimpannya ke `~/.claude/channels/telegram/.env`. Anda juga dapat mengatur `TELEGRAM_BOT_TOKEN` di lingkungan shell Anda sebelum meluncurkan Claude Code.

64 </Step>

65 

66 <Step title="Mulai ulang dengan channels diaktifkan">

67 Keluar dari Claude Code dan mulai ulang dengan bendera channel. Ini memulai plugin Telegram, yang mulai polling untuk pesan dari bot Anda:

68 

69 ```bash theme={null}

70 claude --channels plugin:telegram@claude-plugins-official

71 ```

72 </Step>

73 

74 <Step title="Pasangkan akun Anda">

75 Buka Telegram dan kirim pesan apa pun ke bot Anda. Bot membalas dengan kode pemasangan.

76 

77 <Note>Jika bot Anda tidak merespons, pastikan Claude Code berjalan dengan `--channels` dari langkah sebelumnya. Bot hanya dapat membalas saat channel aktif.</Note>

78 

79 Kembali di Claude Code, jalankan:

80 

81 ```

82 /telegram:access pair <code>

83 ```

84 

85 Kemudian kunci akses sehingga hanya akun Anda yang dapat mengirim pesan:

86 

87 ```

88 /telegram:access policy allowlist

89 ```

90 </Step>

91 </Steps>

92 </Tab>

93 

94 <Tab title="Discord">

95 Lihat [sumber plugin Discord](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/discord) lengkap.

96 

97 <Steps>

98 <Step title="Buat bot Discord">

99 Buka [Portal Pengembang Discord](https://discord.com/developers/applications), klik **Aplikasi Baru**, dan beri nama. Di bagian **Bot**, buat nama pengguna, kemudian klik **Reset Token** dan salin token.

100 </Step>

101 

102 <Step title="Aktifkan Message Content Intent">

103 Di pengaturan bot Anda, gulir ke **Privileged Gateway Intents** dan aktifkan **Message Content Intent**.

104 </Step>

105 

106 <Step title="Undang bot ke server Anda">

107 Buka **OAuth2 > URL Generator**. Pilih cakupan `bot` dan aktifkan izin ini:

108 

109 * View Channels

110 * Send Messages

111 * Send Messages in Threads

112 * Read Message History

113 * Attach Files

114 * Add Reactions

115 

116 Buka URL yang dihasilkan untuk menambahkan bot ke server Anda.

117 </Step>

118 

119 <Step title="Instal plugin">

120 Di Claude Code, jalankan:

121 

122 ```

123 /plugin install discord@claude-plugins-official

124 ```

125 

126 Jika Claude Code melaporkan bahwa plugin tidak ditemukan di pasar mana pun, pasar Anda hilang atau ketinggalan zaman. Jalankan `/plugin marketplace update claude-plugins-official` untuk menyegarkannya, atau `/plugin marketplace add anthropics/claude-plugins-official` jika Anda belum menambahkannya sebelumnya. Kemudian coba instal lagi.

127 

128 Setelah menginstal, jalankan `/reload-plugins` untuk mengaktifkan perintah konfigurasi plugin.

129 </Step>

130 

131 <Step title="Konfigurasikan token Anda">

132 Jalankan perintah konfigurasi dengan token bot yang Anda salin:

133 

134 ```

135 /discord:configure <token>

136 ```

137 

138 Ini menyimpannya ke `~/.claude/channels/discord/.env`. Anda juga dapat mengatur `DISCORD_BOT_TOKEN` di lingkungan shell Anda sebelum meluncurkan Claude Code.

139 </Step>

140 

141 <Step title="Mulai ulang dengan channels diaktifkan">

142 Keluar dari Claude Code dan mulai ulang dengan bendera channel. Ini menghubungkan plugin Discord sehingga bot Anda dapat menerima dan merespons pesan:

143 

144 ```bash theme={null}

145 claude --channels plugin:discord@claude-plugins-official

146 ```

147 </Step>

148 

149 <Step title="Pasangkan akun Anda">

150 DM bot Anda di Discord. Bot membalas dengan kode pemasangan.

151 

152 <Note>Jika bot Anda tidak merespons, pastikan Claude Code berjalan dengan `--channels` dari langkah sebelumnya. Bot hanya dapat membalas saat channel aktif.</Note>

153 

154 Kembali di Claude Code, jalankan:

155 

156 ```

157 /discord:access pair <code>

158 ```

159 

160 Kemudian kunci akses sehingga hanya akun Anda yang dapat mengirim pesan:

161 

162 ```

163 /discord:access policy allowlist

164 ```

165 </Step>

166 </Steps>

167 </Tab>

168 

169 <Tab title="iMessage">

170 Lihat [sumber plugin iMessage](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/imessage) lengkap.

171 

172 Channel iMessage membaca database Pesan Anda secara langsung dan mengirim balasan melalui AppleScript. Ini memerlukan macOS dan tidak memerlukan token bot atau layanan eksternal.

173 

174 <Steps>

175 <Step title="Berikan Akses Disk Penuh">

176 Database Pesan di `~/Library/Messages/chat.db` dilindungi oleh macOS. Pertama kali server membacanya, macOS meminta akses: klik **Izinkan**. Prompt menamai aplikasi apa pun yang meluncurkan Bun, seperti Terminal, iTerm, atau IDE Anda.

177 

178 Jika prompt tidak muncul atau Anda mengklik Jangan Izinkan, berikan akses secara manual di bawah **Pengaturan Sistem > Privasi & Keamanan > Akses Disk Penuh** dan tambahkan terminal Anda. Tanpa ini, server keluar segera dengan `authorization denied`.

179 </Step>

180 

181 <Step title="Instal plugin">

182 Di Claude Code, jalankan:

183 

184 ```

185 /plugin install imessage@claude-plugins-official

186 ```

187 

188 Jika Claude Code melaporkan bahwa plugin tidak ditemukan di pasar mana pun, pasar Anda hilang atau ketinggalan zaman. Jalankan `/plugin marketplace update claude-plugins-official` untuk menyegarkannya, atau `/plugin marketplace add anthropics/claude-plugins-official` jika Anda belum menambahkannya sebelumnya. Kemudian coba instal lagi.

189 </Step>

190 

191 <Step title="Mulai ulang dengan channels diaktifkan">

192 Keluar dari Claude Code dan mulai ulang dengan bendera channel:

193 

194 ```bash theme={null}

195 claude --channels plugin:imessage@claude-plugins-official

196 ```

197 </Step>

198 

199 <Step title="Kirim pesan ke diri sendiri">

200 Buka Pesan di perangkat apa pun yang masuk ke Apple ID Anda dan kirim pesan ke diri sendiri. Ini mencapai Claude segera: obrolan mandiri melewati kontrol akses tanpa pengaturan.

201 

202 <Note>Balasan pertama yang Claude kirim memicu prompt Otomasi macOS yang menanyakan apakah terminal Anda dapat mengontrol Pesan. Klik **OK**.</Note>

203 </Step>

204 

205 <Step title="Izinkan pengirim lain">

206 Secara default, hanya pesan Anda sendiri yang melewati. Untuk membiarkan kontak lain mencapai Claude, tambahkan handle mereka:

207 

208 ```

209 /imessage:access allow +15551234567

210 ```

211 

212 Handle adalah nomor telepon dalam format `+country` atau email Apple ID seperti `user@example.com`.

213 </Step>

214 </Steps>

215 </Tab>

216</Tabs>

217 

218Anda juga dapat [membangun channel Anda sendiri](/id/channels-reference) untuk sistem yang belum memiliki plugin.

219 

220## Quickstart

221 

222Fakechat adalah channel demo yang didukung secara resmi yang menjalankan UI obrolan di localhost, tanpa apa pun untuk diautentikasi dan tidak ada layanan eksternal untuk dikonfigurasi.

223 

224Setelah Anda menginstal dan mengaktifkan fakechat, Anda dapat mengetik di browser dan pesan tiba di sesi Claude Code Anda. Claude membalas, dan balasan muncul kembali di browser. Setelah Anda menguji antarmuka fakechat, coba [Telegram](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/telegram), [Discord](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/discord), atau [iMessage](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/imessage).

225 

226Untuk mencoba demo fakechat, Anda memerlukan:

227 

228* Claude Code [diinstal dan diautentikasi](/id/quickstart#step-1-install-claude-code) dengan akun claude.ai

229* [Bun](https://bun.sh) diinstal. Plugin channel yang sudah dibangun sebelumnya adalah skrip Bun. Periksa dengan `bun --version`; jika itu gagal, [instal Bun](https://bun.sh/docs/installation).

230* **Pengguna Tim/Enterprise**: admin organisasi Anda harus [mengaktifkan channels](#enterprise-controls) dalam pengaturan terkelola

231 

232<Steps>

233 <Step title="Instal plugin channel fakechat">

234 Mulai sesi Claude Code dan jalankan perintah instal:

235 

236 ```text theme={null}

237 /plugin install fakechat@claude-plugins-official

238 ```

239 

240 Jika Claude Code melaporkan bahwa plugin tidak ditemukan di pasar mana pun, pasar Anda hilang atau ketinggalan zaman. Jalankan `/plugin marketplace update claude-plugins-official` untuk menyegarkannya, atau `/plugin marketplace add anthropics/claude-plugins-official` jika Anda belum menambahkannya sebelumnya. Kemudian coba instal lagi.

241 </Step>

242 

243 <Step title="Mulai ulang dengan channel diaktifkan">

244 Keluar dari Claude Code, kemudian mulai ulang dengan `--channels` dan teruskan plugin fakechat yang Anda instal:

245 

246 ```bash theme={null}

247 claude --channels plugin:fakechat@claude-plugins-official

248 ```

249 

250 Server fakechat dimulai secara otomatis.

251 

252 <Tip>

253 Anda dapat melewatkan beberapa plugin ke `--channels`, dipisahkan dengan spasi.

254 </Tip>

255 </Step>

256 

257 <Step title="Dorong pesan masuk">

258 Buka UI fakechat di [http://localhost:8787](http://localhost:8787) dan ketik pesan:

259 

260 ```text theme={null}

261 hey, what's in my working directory?

262 ```

263 

264 Pesan tiba di sesi Claude Code Anda sebagai acara `<channel source="fakechat">`. Claude membacanya, melakukan pekerjaan, dan memanggil tool `reply` fakechat. Jawabannya muncul di UI obrolan.

265 </Step>

266</Steps>

267 

268Jika Claude mengalami prompt izin saat Anda jauh dari terminal, sesi dijeda sampai Anda merespons. Server channel yang mendeklarasikan [kemampuan relai izin](/id/channels-reference#relay-permission-prompts) dapat meneruskan prompt ini kepada Anda sehingga Anda dapat menyetujui atau menolak dari jarak jauh. Untuk penggunaan tanpa pengawasan, [`--dangerously-skip-permissions`](/id/permission-modes#skip-all-checks-with-bypasspermissions-mode) melewati prompt sepenuhnya, tetapi hanya gunakan di lingkungan yang Anda percayai.

269 

270## Security

271 

272Setiap plugin channel yang disetujui mempertahankan daftar penyetujuan pengirim: hanya ID yang telah Anda tambahkan yang dapat mendorong pesan, dan semua orang lain diam-diam dijatuhkan.

273 

274Telegram dan Discord mem-bootstrap daftar dengan memasangkan:

275 

2761. Temukan bot Anda di Telegram atau Discord dan kirim pesan apa pun

2772. Bot membalas dengan kode pemasangan

2783. Di sesi Claude Code Anda, setujui kode saat diminta

2794. ID pengirim Anda ditambahkan ke daftar penyetujuan

280 

281iMessage bekerja berbeda: mengirim pesan ke diri sendiri melewati gerbang secara otomatis, dan Anda menambahkan kontak lain berdasarkan handle dengan `/imessage:access allow`.

282 

283Di atas itu, Anda mengontrol server mana yang diaktifkan setiap sesi dengan `--channels`, dan di paket Tim dan Enterprise organisasi Anda mengontrol ketersediaan dengan [`channelsEnabled`](#enterprise-controls).

284 

285Berada di `.mcp.json` tidak cukup untuk mendorong pesan: server juga harus dinamai dalam `--channels`.

286 

287Daftar penyetujuan juga membatasi [relai izin](/id/channels-reference#relay-permission-prompts) jika channel mendeklarasikannya. Siapa pun yang dapat membalas melalui channel dapat menyetujui atau menolak penggunaan tool dalam sesi Anda, jadi hanya daftar penyetujuan pengirim yang Anda percayai dengan otoritas itu.

288 

289## Enterprise controls

290 

291Pada paket Tim dan Enterprise, channels dinonaktifkan secara default. Admin mengontrol ketersediaan melalui dua [pengaturan terkelola](/id/settings) yang tidak dapat ditimpa pengguna:

292 

293| Pengaturan | Tujuan | Ketika tidak dikonfigurasi |

294| :---------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :------------------------------- |

295| `channelsEnabled` | Master switch. Harus `true` agar channel apa pun dapat mengirimkan pesan. Atur melalui toggle [konsol Admin claude.ai](https://claude.ai/admin-settings/claude-code) atau langsung dalam pengaturan terkelola. Memblokir semua channels termasuk bendera pengembangan saat dimatikan. | Channels diblokir |

296| `allowedChannelPlugins` | Plugin mana yang dapat mendaftar setelah channels diaktifkan. Menggantikan daftar yang dipertahankan Anthropic saat diatur. Hanya berlaku saat `channelsEnabled` adalah `true`. | Daftar default Anthropic berlaku |

297 

298Pengguna Pro dan Max tanpa organisasi melewati pemeriksaan ini sepenuhnya: channels tersedia dan pengguna memilih per sesi dengan `--channels`.

299 

300### Aktifkan channels untuk organisasi Anda

301 

302Admin dapat mengaktifkan channels dari [**claude.ai → Admin settings → Claude Code → Channels**](https://claude.ai/admin-settings/claude-code), atau dengan mengatur `channelsEnabled` ke `true` dalam pengaturan terkelola.

303 

304Setelah diaktifkan, pengguna di organisasi Anda dapat menggunakan `--channels` untuk memilih server channel ke sesi individual. Jika pengaturan dinonaktifkan atau tidak diatur, server MCP masih terhubung dan alatnya berfungsi, tetapi pesan channel tidak akan tiba. Peringatan startup memberi tahu pengguna untuk meminta admin mengaktifkan pengaturan.

305 

306### Batasi plugin channel mana yang dapat berjalan

307 

308Secara default, plugin apa pun di daftar penyetujuan yang dipertahankan Anthropic dapat mendaftar sebagai channel. Admin pada paket Tim dan Enterprise dapat menggantikan daftar penyetujuan itu dengan milik mereka sendiri dengan mengatur `allowedChannelPlugins` dalam pengaturan terkelola. Gunakan ini untuk membatasi plugin resmi mana yang diizinkan, menyetujui channels dari marketplace internal Anda, atau keduanya. Setiap entri menamai plugin dan marketplace tempat asalnya:

309 

310```json theme={null}

311{

312 "channelsEnabled": true,

313 "allowedChannelPlugins": [

314 { "marketplace": "claude-plugins-official", "plugin": "telegram" },

315 { "marketplace": "claude-plugins-official", "plugin": "discord" },

316 { "marketplace": "acme-corp-plugins", "plugin": "internal-alerts" }

317 ]

318}

319```

320 

321Ketika `allowedChannelPlugins` diatur, itu menggantikan daftar penyetujuan Anthropic sepenuhnya: hanya plugin yang terdaftar yang dapat mendaftar. Biarkan tidak diatur untuk kembali ke daftar penyetujuan Anthropic default. Array kosong memblokir semua plugin channel dari daftar penyetujuan, tetapi `--dangerously-load-development-channels` masih dapat melewatinya untuk pengujian lokal. Untuk memblokir channels sepenuhnya termasuk bendera pengembangan, biarkan `channelsEnabled` tidak diatur sebagai gantinya.

322 

323Pengaturan ini memerlukan `channelsEnabled: true`. Jika pengguna melewatkan plugin ke `--channels` yang tidak ada di daftar Anda, Claude Code dimulai secara normal tetapi channel tidak mendaftar, dan pemberitahuan startup menjelaskan bahwa plugin tidak ada di daftar yang disetujui organisasi.

324 

325## Research preview

326 

327Channels adalah fitur research preview. Ketersediaan sedang diluncurkan secara bertahap, dan sintaks bendera `--channels` dan kontrak protokol dapat berubah berdasarkan umpan balik.

328 

329Selama pratinjau, `--channels` hanya menerima plugin dari daftar penyetujuan yang dipertahankan Anthropic, atau dari daftar penyetujuan organisasi Anda jika admin telah mengatur [`allowedChannelPlugins`](#restrict-which-channel-plugins-can-run). Plugin channel di [claude-plugins-official](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins) adalah set yang disetujui default. Jika Anda melewatkan sesuatu yang tidak ada di daftar penyetujuan yang efektif, Claude Code dimulai secara normal tetapi channel tidak mendaftar, dan pemberitahuan startup memberi tahu Anda mengapa.

330 

331Untuk menguji channel yang Anda bangun, gunakan `--dangerously-load-development-channels`. Lihat [Test during the research preview](/id/channels-reference#test-during-the-research-preview) untuk informasi tentang menguji channels khusus yang Anda bangun.

332 

333Laporkan masalah atau umpan balik di [repositori GitHub Claude Code](https://github.com/anthropics/claude-code/issues).

334 

335## How channels compare

336 

337Beberapa fitur Claude Code terhubung ke sistem di luar terminal, masing-masing cocok untuk jenis pekerjaan yang berbeda:

338 

339| Fitur | Apa yang dilakukannya | Bagus untuk |

340| ---------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------- |

341| [Claude Code on the web](/id/claude-code-on-the-web) | Menjalankan tugas dalam sandbox cloud baru, diklon dari GitHub | Mendelegasikan pekerjaan async yang mandiri yang Anda periksa nanti |

342| [Claude in Slack](/id/slack) | Menjalankan sesi web dari penyebutan `@Claude` di channel atau thread | Memulai tugas langsung dari konteks percakapan tim |

343| Standard [MCP server](/id/mcp) | Claude menanyainya selama tugas; tidak ada yang didorong ke sesi | Memberi Claude akses on-demand untuk membaca atau menanyakan sistem |

344| [Remote Control](/id/remote-control) | Anda mengemudi sesi lokal Anda dari claude.ai atau aplikasi Claude mobile | Mengarahkan sesi yang sedang berlangsung saat jauh dari meja Anda |

345 

346Channels mengisi celah dalam daftar itu dengan mendorong acara dari sumber non-Claude ke dalam sesi lokal Anda yang sudah berjalan.

347 

348* **Chat bridge**: tanyakan sesuatu kepada Claude dari ponsel Anda melalui Telegram, Discord, atau iMessage, dan jawabannya kembali dalam obrolan yang sama saat pekerjaan berjalan di mesin Anda terhadap file nyata Anda.

349* **[Webhook receiver](/id/channels-reference#example-build-a-webhook-receiver)**: webhook dari CI, pelacak kesalahan Anda, pipeline deploy, atau layanan eksternal lainnya tiba di mana Claude sudah memiliki file Anda terbuka dan mengingat apa yang Anda debug.

350 

351## Next steps

352 

353Setelah Anda memiliki channel yang berjalan, jelajahi fitur terkait ini:

354 

355* [Build your own channel](/id/channels-reference) untuk sistem yang belum memiliki plugins

356* [Remote Control](/id/remote-control) untuk mengemudi sesi lokal dari ponsel Anda alih-alih meneruskan acara ke dalamnya

357* [Scheduled tasks](/id/scheduled-tasks) untuk polling pada timer alih-alih bereaksi terhadap acara yang didorong

channels-reference.md +749 −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# Referensi Channels

6 

7> Bangun server MCP yang mendorong webhooks, alerts, dan pesan chat ke dalam sesi Claude Code. Referensi untuk kontrak channel: deklarasi kemampuan, event notifikasi, tools balasan, gating pengirim, dan relay izin.

8 

9<Note>

10 Channels berada dalam [research preview](/id/channels#research-preview) dan memerlukan Claude Code v2.1.80 atau lebih baru. Mereka memerlukan login claude.ai. Autentikasi Console dan API key tidak didukung. Organisasi Team dan Enterprise harus [secara eksplisit mengaktifkannya](/id/channels#enterprise-controls).

11</Note>

12 

13Sebuah channel adalah server MCP yang mendorong event ke dalam sesi Claude Code sehingga Claude dapat bereaksi terhadap hal-hal yang terjadi di luar terminal.

14 

15Anda dapat membangun channel satu arah atau dua arah. Channel satu arah meneruskan alerts, webhooks, atau event monitoring untuk Claude bertindak. Channel dua arah seperti chat bridges juga [mengekspos tool balasan](#expose-a-reply-tool) sehingga Claude dapat mengirim pesan kembali. Sebuah channel dengan jalur pengirim terpercaya juga dapat memilih untuk [relay permission prompts](#relay-permission-prompts) sehingga Anda dapat menyetujui atau menolak penggunaan tool dari jarak jauh.

16 

17Halaman ini mencakup:

18 

19* [Overview](#overview): bagaimana channels bekerja

20* [Yang Anda butuhkan](#what-you-need): persyaratan dan langkah-langkah umum

21* [Contoh: bangun penerima webhook](#example-build-a-webhook-receiver): panduan satu arah minimal

22* [Server options](#server-options): field konstruktor

23* [Notification format](#notification-format): payload event

24* [Expose a reply tool](#expose-a-reply-tool): biarkan Claude mengirim pesan kembali

25* [Gate inbound messages](#gate-inbound-messages): pemeriksaan pengirim untuk mencegah prompt injection

26* [Relay permission prompts](#relay-permission-prompts): teruskan permission prompts ke channels jarak jauh

27 

28Untuk menggunakan channel yang sudah ada daripada membangun satu, lihat [Channels](/id/channels). Telegram, Discord, iMessage, dan fakechat disertakan dalam research preview.

29 

30## Overview

31 

32Sebuah channel adalah server [MCP](https://modelcontextprotocol.io) yang berjalan di mesin yang sama dengan Claude Code. Claude Code menjalankannya sebagai subprocess dan berkomunikasi melalui stdio. Server channel Anda adalah jembatan antara sistem eksternal dan sesi Claude Code:

33 

34* **Chat platforms** (Telegram, Discord): plugin Anda berjalan secara lokal dan polling API platform untuk pesan baru. Ketika seseorang DM bot Anda, plugin menerima pesan dan meneruskannya ke Claude. Tidak ada URL untuk diekspos.

35* **Webhooks** (CI, monitoring): server Anda mendengarkan pada port HTTP lokal. Sistem eksternal POST ke port tersebut, dan server Anda mendorong payload ke Claude.

36 

37<img src="https://mintlify.s3.us-west-1.amazonaws.com/claude-code/id/images/channel-architecture.svg" alt="Diagram arsitektur menunjukkan sistem eksternal terhubung ke server channel lokal Anda, yang berkomunikasi dengan Claude Code melalui stdio" />

38 

39## Yang Anda butuhkan

40 

41Satu-satunya persyaratan keras adalah paket [`@modelcontextprotocol/sdk`](https://www.npmjs.com/package/@modelcontextprotocol/sdk) dan runtime yang kompatibel dengan Node.js. [Bun](https://bun.sh), [Node](https://nodejs.org), dan [Deno](https://deno.com) semuanya bekerja. Plugin pra-bangun dalam research preview menggunakan Bun, tetapi channel Anda tidak harus.

42 

43Server Anda perlu:

44 

451. Mendeklarasikan kemampuan `claude/channel` sehingga Claude Code mendaftarkan pendengar notifikasi

462. Memancarkan event `notifications/claude/channel` ketika sesuatu terjadi

473. Terhubung melalui [stdio transport](https://modelcontextprotocol.io/docs/concepts/transports#standard-io) (Claude Code menjalankan server Anda sebagai subprocess)

48 

49Bagian [Server options](#server-options) dan [Notification format](#notification-format) mencakup masing-masing secara detail. Lihat [Contoh: bangun penerima webhook](#example-build-a-webhook-receiver) untuk panduan lengkap.

50 

51Selama research preview, custom channels tidak ada di [approved allowlist](/id/channels#supported-channels). Gunakan `--dangerously-load-development-channels` untuk menguji secara lokal. Lihat [Test during the research preview](#test-during-the-research-preview) untuk detail.

52 

53## Contoh: bangun penerima webhook

54 

55Panduan ini membangun server file tunggal yang mendengarkan permintaan HTTP dan meneruskannya ke sesi Claude Code Anda. Pada akhirnya, apa pun yang dapat mengirim HTTP POST, seperti pipeline CI, alert monitoring, atau perintah `curl`, dapat mendorong event ke Claude.

56 

57Contoh ini menggunakan [Bun](https://bun.sh) sebagai runtime untuk server HTTP bawaan dan dukungan TypeScript. Anda dapat menggunakan [Node](https://nodejs.org) atau [Deno](https://deno.com) sebagai gantinya; satu-satunya persyaratan adalah [MCP SDK](https://www.npmjs.com/package/@modelcontextprotocol/sdk).

58 

59<Steps>

60 <Step title="Buat proyek">

61 Buat direktori baru dan instal MCP SDK:

62 

63 ```bash theme={null}

64 mkdir webhook-channel && cd webhook-channel

65 bun add @modelcontextprotocol/sdk

66 ```

67 </Step>

68 

69 <Step title="Tulis server channel">

70 Buat file bernama `webhook.ts`. Ini adalah seluruh server channel Anda: terhubung ke Claude Code melalui stdio, dan mendengarkan POST HTTP pada port 8788. Ketika permintaan tiba, mendorong body ke Claude sebagai channel event.

71 

72 ```ts title="webhook.ts" theme={null}

73 #!/usr/bin/env bun

74 import { Server } from '@modelcontextprotocol/sdk/server/index.js'

75 import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'

76 

77 // Buat server MCP dan deklarasikan sebagai channel

78 const mcp = new Server(

79 { name: 'webhook', version: '0.0.1' },

80 {

81 // kunci ini adalah yang membuatnya menjadi channel — Claude Code mendaftarkan pendengar untuknya

82 capabilities: { experimental: { 'claude/channel': {} } },

83 // ditambahkan ke system prompt Claude sehingga tahu cara menangani event ini

84 instructions: 'Events dari webhook channel tiba sebagai <channel source="webhook" ...>. Mereka satu arah: baca dan bertindak, tidak ada balasan yang diharapkan.',

85 },

86 )

87 

88 // Terhubung ke Claude Code melalui stdio (Claude Code menjalankan proses ini)

89 await mcp.connect(new StdioServerTransport())

90 

91 // Mulai server HTTP yang meneruskan setiap POST ke Claude

92 Bun.serve({

93 port: 8788, // port terbuka apa pun berfungsi

94 // localhost-only: tidak ada yang di luar mesin ini dapat POST

95 hostname: '127.0.0.1',

96 async fetch(req) {

97 const body = await req.text()

98 await mcp.notification({

99 method: 'notifications/claude/channel',

100 params: {

101 content: body, // menjadi body dari tag <channel>

102 // setiap kunci menjadi atribut tag, misalnya <channel path="/" method="POST">

103 meta: { path: new URL(req.url).pathname, method: req.method },

104 },

105 })

106 return new Response('ok')

107 },

108 })

109 ```

110 

111 File melakukan tiga hal secara berurutan:

112 

113 * **Server configuration**: membuat server MCP dengan `claude/channel` dalam capabilities, yang memberi tahu Claude Code ini adalah channel. String [`instructions`](#server-options) masuk ke system prompt Claude: beri tahu Claude event apa yang diharapkan, apakah akan membalas, dan bagaimana cara merutekan balasan jika harus.

114 * **Stdio connection**: terhubung ke Claude Code melalui stdin/stdout. Ini standar untuk server [MCP](https://modelcontextprotocol.io/docs/concepts/transports#standard-io) apa pun: Claude Code menjalankannya sebagai subprocess.

115 * **HTTP listener**: memulai server web lokal pada port 8788. Setiap body POST diteruskan ke Claude sebagai channel event melalui `mcp.notification()`. `content` menjadi body event, dan setiap entry `meta` menjadi atribut pada tag `<channel>`. Pendengar memerlukan akses ke instance `mcp`, jadi berjalan dalam proses yang sama. Anda dapat membaginya menjadi modul terpisah untuk proyek yang lebih besar.

116 </Step>

117 

118 <Step title="Daftarkan server Anda dengan Claude Code">

119 Tambahkan server ke konfigurasi MCP Anda sehingga Claude Code tahu cara memulainya. Untuk `.mcp.json` tingkat proyek di direktori yang sama, gunakan jalur relatif. Untuk konfigurasi tingkat pengguna di `~/.claude.json`, gunakan jalur absolut lengkap sehingga server dapat ditemukan dari proyek apa pun:

120 

121 ```json title=".mcp.json" theme={null}

122 {

123 "mcpServers": {

124 "webhook": { "command": "bun", "args": ["./webhook.ts"] }

125 }

126 }

127 ```

128 

129 Claude Code membaca konfigurasi MCP Anda saat startup dan menjalankan setiap server sebagai subprocess.

130 </Step>

131 

132 <Step title="Uji">

133 Selama research preview, custom channels tidak ada di allowlist, jadi mulai Claude Code dengan flag pengembangan:

134 

135 ```bash theme={null}

136 claude --dangerously-load-development-channels server:webhook

137 ```

138 

139 Ketika Claude Code dimulai, membaca konfigurasi MCP Anda, menjalankan `webhook.ts` Anda sebagai subprocess, dan pendengar HTTP dimulai secara otomatis pada port yang Anda konfigurasi (8788 dalam contoh ini). Anda tidak perlu menjalankan server sendiri.

140 

141 Jika Anda melihat "blocked by org policy," admin Team atau Enterprise Anda perlu [mengaktifkan channels](/id/channels#enterprise-controls) terlebih dahulu.

142 

143 Di terminal terpisah, simulasikan webhook dengan mengirim HTTP POST dengan pesan ke server Anda. Contoh ini mengirim alert kegagalan CI ke port 8788 (atau port apa pun yang Anda konfigurasi):

144 

145 ```bash theme={null}

146 curl -X POST localhost:8788 -d "build failed on main: https://ci.example.com/run/1234"

147 ```

148 

149 Payload tiba di sesi Claude Code Anda sebagai tag `<channel>`:

150 

151 ```text theme={null}

152 <channel source="webhook" path="/" method="POST">build failed on main: https://ci.example.com/run/1234</channel>

153 ```

154 

155 Di terminal Claude Code Anda, Anda akan melihat Claude menerima pesan dan mulai merespons: membaca file, menjalankan perintah, atau apa pun yang diminta pesan. Ini adalah channel satu arah, jadi Claude bertindak dalam sesi Anda tetapi tidak mengirim apa pun kembali melalui webhook. Untuk menambahkan balasan, lihat [Expose a reply tool](#expose-a-reply-tool).

156 

157 Jika event tidak tiba, diagnosis tergantung pada apa yang dikembalikan `curl`:

158 

159 * **`curl` berhasil tetapi tidak ada yang mencapai Claude**: jalankan `/mcp` dalam sesi Anda untuk memeriksa status server. "Failed to connect" biasanya berarti kesalahan dependensi atau impor dalam file server Anda; periksa debug log di `~/.claude/debug/<session-id>.txt` untuk jejak stderr.

160 * **`curl` gagal dengan "connection refused"**: port tidak terikat lagi atau proses basi dari run sebelumnya memegangnya. `lsof -i :<port>` menunjukkan apa yang mendengarkan; `kill` proses basi sebelum memulai ulang sesi Anda.

161 </Step>

162</Steps>

163 

164[Server fakechat](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/fakechat) memperluas pola ini dengan UI web, lampiran file, dan tool balasan untuk chat dua arah.

165 

166## Uji selama research preview

167 

168Selama research preview, setiap channel harus ada di [approved allowlist](/id/channels#research-preview) untuk mendaftar. Flag pengembangan melewati allowlist untuk entri spesifik setelah prompt konfirmasi. Contoh ini menunjukkan kedua tipe entri:

169 

170```bash theme={null}

171# Menguji plugin yang sedang Anda kembangkan

172claude --dangerously-load-development-channels plugin:yourplugin@yourmarketplace

173 

174# Menguji server .mcp.json telanjang (belum ada wrapper plugin)

175claude --dangerously-load-development-channels server:webhook

176```

177 

178Bypass per-entri. Menggabungkan flag ini dengan `--channels` tidak memperluas bypass ke entri `--channels`. Selama research preview, approved allowlist dikurasi oleh Anthropic, jadi channel Anda tetap pada flag pengembangan saat Anda membangun dan menguji.

179 

180<Note>

181 Flag ini melewati allowlist saja. Kebijakan organisasi `channelsEnabled` masih berlaku. Jangan gunakan untuk menjalankan channels dari sumber yang tidak terpercaya.

182</Note>

183 

184## Server options

185 

186Sebuah channel menetapkan opsi ini dalam konstruktor [`Server`](https://modelcontextprotocol.io/docs/concepts/servers). Field `instructions` dan `capabilities.tools` adalah [MCP standar](https://modelcontextprotocol.io/docs/concepts/servers); `capabilities.experimental['claude/channel']` dan `capabilities.experimental['claude/channel/permission']` adalah penambahan spesifik channel:

187 

188| Field | Type | Description |

189| :------------------------------------------------------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

190| `capabilities.experimental['claude/channel']` | `object` | Diperlukan. Selalu `{}`. Kehadiran mendaftarkan pendengar notifikasi. |

191| `capabilities.experimental['claude/channel/permission']` | `object` | Opsional. Selalu `{}`. Mendeklarasikan bahwa channel ini dapat menerima permission relay requests. Ketika dideklarasikan, Claude Code meneruskan permission prompts ke channel Anda sehingga Anda dapat menyetujui atau menolak mereka dari jarak jauh. Lihat [Relay permission prompts](#relay-permission-prompts). |

192| `capabilities.tools` | `object` | Dua arah saja. Selalu `{}`. Kemampuan tool MCP standar. Lihat [Expose a reply tool](#expose-a-reply-tool). |

193| `instructions` | `string` | Direkomendasikan. Ditambahkan ke system prompt Claude. Beri tahu Claude event apa yang diharapkan, apa arti atribut tag `<channel>`, apakah akan membalas, dan jika demikian tool mana yang digunakan dan atribut mana yang diteruskan kembali (seperti `chat_id`). |

194 

195Untuk membuat channel satu arah, hilangkan `capabilities.tools`. Contoh ini menunjukkan setup dua arah dengan kemampuan channel, tools, dan instructions yang ditetapkan:

196 

197```ts theme={null}

198import { Server } from '@modelcontextprotocol/sdk/server/index.js'

199 

200const mcp = new Server(

201 { name: 'your-channel', version: '0.0.1' },

202 {

203 capabilities: {

204 experimental: { 'claude/channel': {} }, // mendaftarkan pendengar channel

205 tools: {}, // hilangkan untuk channels satu arah

206 },

207 // ditambahkan ke system prompt Claude sehingga tahu cara menangani event Anda

208 instructions: 'Messages tiba sebagai <channel source="your-channel" ...>. Balas dengan tool balasan.',

209 },

210)

211```

212 

213Untuk mendorong event, panggil `mcp.notification()` dengan method `notifications/claude/channel`. Params ada di bagian berikutnya.

214 

215## Notification format

216 

217Server Anda memancarkan `notifications/claude/channel` dengan dua params:

218 

219| Field | Type | Description |

220| :-------- | :----------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

221| `content` | `string` | Body event. Dikirimkan sebagai body dari tag `<channel>`. |

222| `meta` | `Record<string, string>` | Opsional. Setiap entry menjadi atribut pada tag `<channel>` untuk konteks routing seperti chat ID, nama pengirim, atau severity alert. Kunci harus identifier: huruf, digit, dan underscore saja. Kunci yang berisi hyphen atau karakter lain secara diam-diam dijatuhkan. |

223 

224Server Anda mendorong event dengan memanggil `mcp.notification()` pada instance `Server`. Contoh ini mendorong alert kegagalan CI dengan dua kunci meta:

225 

226```ts theme={null}

227await mcp.notification({

228 method: 'notifications/claude/channel',

229 params: {

230 content: 'build failed on main: https://ci.example.com/run/1234',

231 meta: { severity: 'high', run_id: '1234' },

232 },

233})

234```

235 

236Event tiba dalam konteks Claude dibungkus dalam tag `<channel>`. Atribut `source` ditetapkan secara otomatis dari nama server yang dikonfigurasi:

237 

238```text theme={null}

239<channel source="your-channel" severity="high" run_id="1234">

240build failed on main: https://ci.example.com/run/1234

241</channel>

242```

243 

244## Expose a reply tool

245 

246Jika channel Anda dua arah, seperti chat bridge daripada alert forwarder, ekspos [tool MCP](https://modelcontextprotocol.io/docs/concepts/tools) standar yang dapat dipanggil Claude untuk mengirim pesan kembali. Tidak ada yang spesifik channel tentang registrasi tool. Tool balasan memiliki tiga komponen:

247 

2481. Entry `tools: {}` dalam capabilities konstruktor `Server` Anda sehingga Claude Code menemukan tool

2492. Tool handlers yang mendefinisikan schema tool dan mengimplementasikan logika pengiriman

2503. String `instructions` dalam konstruktor `Server` Anda yang memberi tahu Claude kapan dan bagaimana memanggil tool

251 

252Untuk menambahkan ini ke [penerima webhook di atas](#example-build-a-webhook-receiver):

253 

254<Steps>

255 <Step title="Aktifkan penemuan tool">

256 Dalam konstruktor `Server` Anda di `webhook.ts`, tambahkan `tools: {}` ke capabilities sehingga Claude Code tahu server Anda menawarkan tools:

257 

258 ```ts theme={null}

259 capabilities: {

260 experimental: { 'claude/channel': {} },

261 tools: {}, // mengaktifkan penemuan tool

262 },

263 ```

264 </Step>

265 

266 <Step title="Daftarkan tool balasan">

267 Tambahkan berikut ke `webhook.ts`. `import` masuk di bagian atas file dengan import lainnya; dua handlers masuk antara konstruktor `Server` dan `mcp.connect()`. Ini mendaftarkan tool `reply` yang dapat dipanggil Claude dengan `chat_id` dan `text`:

268 

269 ```ts theme={null}

270 // Tambahkan import ini di bagian atas webhook.ts

271 import { ListToolsRequestSchema, CallToolRequestSchema } from '@modelcontextprotocol/sdk/types.js'

272 

273 // Claude menanyakan ini saat startup untuk menemukan tool apa yang ditawarkan server Anda

274 mcp.setRequestHandler(ListToolsRequestSchema, async () => ({

275 tools: [{

276 name: 'reply',

277 description: 'Kirim pesan kembali melalui channel ini',

278 // inputSchema memberi tahu Claude argumen apa yang harus diteruskan

279 inputSchema: {

280 type: 'object',

281 properties: {

282 chat_id: { type: 'string', description: 'Percakapan untuk membalas' },

283 text: { type: 'string', description: 'Pesan untuk dikirim' },

284 },

285 required: ['chat_id', 'text'],

286 },

287 }],

288 }))

289 

290 // Claude memanggil ini ketika ingin menjalankan tool

291 mcp.setRequestHandler(CallToolRequestSchema, async req => {

292 if (req.params.name === 'reply') {

293 const { chat_id, text } = req.params.arguments as { chat_id: string; text: string }

294 // send() adalah outbound Anda: POST ke platform chat Anda, atau untuk pengujian lokal

295 // broadcast SSE yang ditunjukkan dalam contoh lengkap di bawah.

296 send(`Reply to ${chat_id}: ${text}`)

297 return { content: [{ type: 'text', text: 'sent' }] }

298 }

299 throw new Error(`unknown tool: ${req.params.name}`)

300 })

301 ```

302 </Step>

303 

304 <Step title="Perbarui instructions">

305 Perbarui string `instructions` dalam konstruktor `Server` Anda sehingga Claude tahu merutekan balasan kembali melalui tool. Contoh ini memberi tahu Claude untuk melewatkan `chat_id` dari tag inbound:

306 

307 ```ts theme={null}

308 instructions: 'Messages tiba sebagai <channel source="webhook" chat_id="...">. Balas dengan tool balasan, melewatkan chat_id dari tag.'

309 ```

310 </Step>

311</Steps>

312 

313Berikut adalah `webhook.ts` lengkap dengan dukungan dua arah. Balasan outbound mengalir melalui `GET /events` menggunakan [Server-Sent Events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events) (SSE), jadi `curl -N localhost:8788/events` dapat menontonnya secara langsung; chat inbound tiba di `POST /`:

314 

315```ts title="Full webhook.ts with reply tool' expandable theme={null}

316#!/usr/bin/env bun

317import { Server } from '@modelcontextprotocol/sdk/server/index.js'

318import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'

319import { ListToolsRequestSchema, CallToolRequestSchema } from '@modelcontextprotocol/sdk/types.js'

320 

321// --- Outbound: tulis ke pendengar curl -N apa pun di /events ---

322// Bridge nyata akan POST ke platform chat Anda sebagai gantinya.

323const listeners = new Set<(chunk: string) => void>()

324function send(text: string) {

325 const chunk = text.split('\n').map(l => `data: ${l}\n`).join('') + '\n'

326 for (const emit of listeners) emit(chunk)

327}

328 

329const mcp = new Server(

330 { name: 'webhook', version: '0.0.1' },

331 {

332 capabilities: {

333 experimental: { 'claude/channel': {} },

334 tools: {},

335 },

336 instructions: 'Messages tiba sebagai <channel source="webhook" chat_id="...">. Balas dengan tool balasan, melewatkan chat_id dari tag.',

337 },

338)

339 

340mcp.setRequestHandler(ListToolsRequestSchema, async () => ({

341 tools: [{

342 name: 'reply',

343 description: 'Kirim pesan kembali melalui channel ini',

344 inputSchema: {

345 type: 'object',

346 properties: {

347 chat_id: { type: 'string', description: 'Percakapan untuk membalas' },

348 text: { type: 'string', description: 'Pesan untuk dikirim' },

349 },

350 required: ['chat_id', 'text'],

351 },

352 }],

353}))

354 

355mcp.setRequestHandler(CallToolRequestSchema, async req => {

356 if (req.params.name === 'reply') {

357 const { chat_id, text } = req.params.arguments as { chat_id: string; text: string }

358 send(`Reply to ${chat_id}: ${text}`)

359 return { content: [{ type: 'text', text: 'sent' }] }

360 }

361 throw new Error(`unknown tool: ${req.params.name}`)

362})

363 

364await mcp.connect(new StdioServerTransport())

365 

366let nextId = 1

367Bun.serve({

368 port: 8788,

369 hostname: '127.0.0.1',

370 idleTimeout: 0, // jangan tutup aliran SSE idle

371 async fetch(req) {

372 const url = new URL(req.url)

373 

374 // GET /events: aliran SSE sehingga curl -N dapat menonton balasan Claude secara langsung

375 if (req.method === 'GET' && url.pathname === '/events') {

376 const stream = new ReadableStream({

377 start(ctrl) {

378 ctrl.enqueue(': connected\n\n') // sehingga curl menunjukkan sesuatu segera

379 const emit = (chunk: string) => ctrl.enqueue(chunk)

380 listeners.add(emit)

381 req.signal.addEventListener('abort', () => listeners.delete(emit))

382 },

383 })

384 return new Response(stream, {

385 headers: { 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache' },

386 })

387 }

388 

389 // POST: teruskan ke Claude sebagai channel event

390 const body = await req.text()

391 const chat_id = String(nextId++)

392 await mcp.notification({

393 method: 'notifications/claude/channel',

394 params: {

395 content: body,

396 meta: { chat_id, path: url.pathname, method: req.method },

397 },

398 })

399 return new Response('ok')

400 },

401})

402```

403 

404[Server fakechat](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/fakechat) menunjukkan contoh yang lebih lengkap dengan lampiran file dan pengeditan pesan.

405 

406## Gate inbound messages

407 

408Channel tanpa gate adalah vektor prompt injection. Siapa pun yang dapat menjangkau endpoint Anda dapat menempatkan teks di depan Claude. Channel yang mendengarkan platform chat atau endpoint publik memerlukan pemeriksaan pengirim nyata sebelum memancarkan apa pun.

409 

410Periksa pengirim terhadap allowlist sebelum memanggil `mcp.notification()`. Contoh ini menjatuhkan pesan apa pun dari pengirim yang tidak ada dalam set:

411 

412```ts theme={null}

413const allowed = new Set(loadAllowlist()) // dari access.json Anda atau setara

414 

415// di dalam handler pesan Anda, sebelum memancarkan:

416if (!allowed.has(message.from.id)) { // pengirim, bukan ruangan

417 return // jatuhkan diam-diam

418}

419await mcp.notification({ ... })

420```

421 

422Gate pada identitas pengirim, bukan identitas chat atau ruangan: `message.from.id` dalam contoh, bukan `message.chat.id`. Dalam chat grup, ini berbeda, dan gating pada ruangan akan membiarkan siapa pun dalam grup yang diizinkan menyuntikkan pesan ke dalam sesi.

423 

424Channel [Telegram](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/telegram) dan [Discord](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/discord) gate pada allowlist pengirim dengan cara yang sama. Mereka bootstrap list dengan pairing: pengguna DM bot, bot membalas dengan kode pairing, pengguna menyetujuinya dalam sesi Claude Code mereka, dan ID platform mereka ditambahkan. Lihat implementasi mana pun untuk alur pairing lengkap. Channel [iMessage](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins/imessage) mengambil pendekatan berbeda: mendeteksi alamat pengguna sendiri dari database Messages saat startup dan membiarkan mereka melewati secara otomatis, dengan pengirim lain ditambahkan oleh handle.

425 

426## Relay permission prompts

427 

428<Note>

429 Permission relay memerlukan Claude Code v2.1.81 atau lebih baru. Versi sebelumnya mengabaikan kemampuan `claude/channel/permission`.

430</Note>

431 

432Ketika Claude memanggil tool yang memerlukan persetujuan, dialog terminal lokal terbuka dan sesi menunggu. Channel dua arah dapat memilih untuk menerima prompt yang sama secara paralel dan meneruskannya kepada Anda di perangkat lain. Keduanya tetap aktif: Anda dapat menjawab di terminal atau di ponsel, dan Claude Code menerapkan jawaban mana pun yang tiba terlebih dahulu dan menutup yang lain.

433 

434Relay mencakup persetujuan penggunaan tool seperti `Bash`, `Write`, dan `Edit`. Dialog kepercayaan proyek dan persetujuan server MCP tidak relay; hanya muncul di terminal lokal.

435 

436### Bagaimana relay bekerja

437 

438Ketika permission prompt terbuka, loop relay memiliki empat langkah:

439 

4401. Claude Code menghasilkan ID permintaan pendek dan memberi tahu server Anda

4412. Server Anda meneruskan prompt dan ID ke aplikasi chat Anda

4423. Pengguna jarak jauh membalas dengan ya atau tidak dan ID itu

4434. Handler inbound Anda menguraikan balasan menjadi verdict, dan Claude Code menerapkannya hanya jika ID cocok dengan permintaan terbuka

444 

445Dialog terminal lokal tetap terbuka melalui semua ini. Jika seseorang di terminal menjawab sebelum verdict jarak jauh tiba, jawaban itu diterapkan sebagai gantinya dan permintaan jarak jauh yang tertunda dijatuhkan.

446 

447<img src="https://mintlify.s3.us-west-1.amazonaws.com/claude-code/id/images/channel-permission-relay.svg" alt="Diagram urutan: Claude Code mengirim notifikasi permission_request ke server channel, server memformat dan mengirim prompt ke aplikasi chat, manusia membalas dengan verdict, dan server menguraikan balasan itu menjadi notifikasi permission kembali ke Claude Code" />

448 

449### Permission request fields

450 

451Notifikasi outbound dari Claude Code adalah `notifications/claude/channel/permission_request`. Seperti [channel notification](#notification-format), transport adalah MCP standar tetapi method dan schema adalah ekstensi Claude Code. Objek `params` memiliki empat field string yang server Anda format ke dalam prompt outgoing:

452 

453| Field | Description |

454| --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

455| `request_id` | Lima huruf kecil diambil dari `a`-`z` tanpa `l`, jadi tidak pernah dibaca sebagai `1` atau `I` ketika diketik di ponsel. Sertakan dalam prompt outgoing Anda sehingga dapat diulang dalam balasan. Claude Code hanya menerima verdict yang membawa ID yang dikeluarkannya. Dialog terminal lokal tidak menampilkan ID ini, jadi handler outbound Anda adalah satu-satunya cara untuk mempelajarinya. |

456| `tool_name` | Nama tool yang ingin dipanggil Claude, misalnya `Bash` atau `Write`. |

457| `description` | Ringkasan yang dapat dibaca manusia tentang apa yang dilakukan panggilan tool spesifik ini, teks yang sama yang ditampilkan dialog terminal lokal. Untuk panggilan Bash ini adalah deskripsi Claude tentang perintah, atau perintah itu sendiri jika tidak ada yang diberikan. |

458| `input_preview` | Argumen tool sebagai string JSON, dipotong menjadi 200 karakter. Untuk Bash ini adalah perintah; untuk Write ini adalah jalur file dan awalan konten. Hilangkan dari prompt Anda jika Anda hanya memiliki ruang untuk pesan satu baris. Server Anda memutuskan apa yang akan ditampilkan. |

459 

460Verdict yang dikirim server Anda kembali adalah `notifications/claude/channel/permission` dengan dua field: `request_id` mengulangi ID di atas, dan `behavior` diatur ke `'allow'` atau `'deny'`. Allow membiarkan panggilan tool melanjutkan; deny menolaknya, sama seperti menjawab No dalam dialog lokal. Tidak ada verdict yang mempengaruhi panggilan masa depan.

461 

462### Tambahkan relay ke chat bridge

463 

464Menambahkan permission relay ke channel dua arah memerlukan tiga komponen:

465 

4661. Entry `claude/channel/permission: {}` di bawah capabilities `experimental` dalam konstruktor `Server` Anda sehingga Claude Code tahu untuk meneruskan prompts

4672. Notification handler untuk `notifications/claude/channel/permission_request` yang memformat prompt dan mengirimnya melalui API platform Anda

4683. Pemeriksaan dalam handler pesan inbound Anda yang mengenali `yes <id>` atau `no <id>` dan memancarkan notifikasi `notifications/claude/channel/permission` verdict sebagai gantinya dari meneruskan teks ke Claude

469 

470Hanya deklarasikan kemampuan jika channel Anda [mengautentikasi pengirim](#gate-inbound-messages), karena siapa pun yang dapat membalas melalui channel Anda dapat menyetujui atau menolak penggunaan tool dalam sesi Anda.

471 

472Untuk menambahkan ini ke chat bridge dua arah seperti yang dirakit dalam [Expose a reply tool](#expose-a-reply-tool):

473 

474<Steps>

475 <Step title="Deklarasikan kemampuan permission">

476 Dalam konstruktor `Server` Anda, tambahkan `claude/channel/permission: {}` bersama `claude/channel` di bawah `experimental`:

477 

478 ```ts theme={null}

479 capabilities: {

480 experimental: {

481 'claude/channel': {},

482 'claude/channel/permission': {}, // opt in ke permission relay

483 },

484 tools: {},

485 },

486 ```

487 </Step>

488 

489 <Step title="Tangani permintaan masuk">

490 Daftarkan notification handler antara konstruktor `Server` Anda dan `mcp.connect()`. Claude Code memanggilnya dengan [empat request fields](#permission-request-fields) ketika dialog permission terbuka. Handler Anda memformat prompt untuk platform Anda dan menyertakan instruksi untuk membalas dengan ID:

491 

492 ```ts theme={null}

493 import { z } from 'zod'

494 

495 // setNotificationHandler merutekan oleh z.literal pada field method,

496 // jadi schema ini adalah validator dan kunci dispatch

497 const PermissionRequestSchema = z.object({

498 method: z.literal('notifications/claude/channel/permission_request'),

499 params: z.object({

500 request_id: z.string(), // lima huruf kecil, sertakan verbatim dalam prompt Anda

501 tool_name: z.string(), // misalnya "Bash", "Write"

502 description: z.string(), // ringkasan yang dapat dibaca manusia tentang panggilan ini

503 input_preview: z.string(), // argumen tool sebagai JSON, dipotong menjadi ~200 karakter

504 }),

505 })

506 

507 mcp.setNotificationHandler(PermissionRequestSchema, async ({ params }) => {

508 // send() adalah outbound Anda: POST ke platform chat Anda, atau untuk pengujian lokal

509 // broadcast SSE yang ditunjukkan dalam contoh lengkap di bawah.

510 send(

511 `Claude ingin menjalankan ${params.tool_name}: ${params.description}\n\n` +

512 // ID dalam instruksi adalah apa yang diuraikan handler inbound Anda dalam Langkah 3

513 `Balas "yes ${params.request_id}" atau "no ${params.request_id}"`,

514 )

515 })

516 ```

517 </Step>

518 

519 <Step title="Intersep verdict dalam handler inbound Anda">

520 Handler inbound Anda adalah loop atau callback yang menerima pesan dari platform Anda: tempat yang sama di mana Anda [gate pada pengirim](#gate-inbound-messages) dan memancarkan `notifications/claude/channel` untuk meneruskan chat ke Claude. Tambahkan pemeriksaan sebelum panggilan chat-forwarding yang mengenali format verdict dan memancarkan notifikasi permission sebagai gantinya.

521 

522 Regex cocok dengan format ID yang dihasilkan Claude Code: lima huruf, tidak pernah `l`. Flag `/i` mentoleransi autocorrect ponsel memanfaatkan balasan; hurufkan ID yang ditangkap sebelum mengirimnya kembali.

523 

524 ```ts theme={null}

525 // cocok dengan "y abcde", "yes abcde", "n abcde", "no abcde"

526 // [a-km-z] adalah alfabet ID yang digunakan Claude Code (huruf kecil, lewati 'l')

527 // /i mentoleransi autocorrect ponsel; hurufkan capture sebelum mengirim

528 const PERMISSION_REPLY_RE = /^\s*(y|yes|n|no)\s+([a-km-z]{5})\s*$/i

529 

530 async function onInbound(message: PlatformMessage) {

531 if (!allowed.has(message.from.id)) return // gate pada pengirim terlebih dahulu

532 

533 const m = PERMISSION_REPLY_RE.exec(message.text)

534 if (m) {

535 // m[1] adalah kata verdict, m[2] adalah ID permintaan

536 // mancarkan notifikasi verdict kembali ke Claude Code daripada chat

537 await mcp.notification({

538 method: 'notifications/claude/channel/permission',

539 params: {

540 request_id: m[2].toLowerCase(), // normalisasi jika ada autocorrect caps

541 behavior: m[1].toLowerCase().startsWith('y') ? 'allow' : 'deny',

542 },

543 })

544 return // ditangani sebagai verdict, jangan juga teruskan sebagai chat

545 }

546 

547 // tidak cocok format verdict: jatuh melalui ke jalur chat normal

548 await mcp.notification({

549 method: 'notifications/claude/channel',

550 params: { content: message.text, meta: { chat_id: String(message.chat.id) } },

551 })

552 }

553 ```

554 </Step>

555</Steps>

556 

557Claude Code juga menjaga dialog terminal lokal tetap terbuka, jadi Anda dapat menjawab di tempat mana pun, dan jawaban pertama yang tiba diterapkan. Balasan jarak jauh yang tidak cocok dengan format yang diharapkan dengan tepat gagal dalam salah satu dari dua cara, dan dalam kedua kasus dialog tetap terbuka:

558 

559* **Format berbeda**: regex handler inbound Anda gagal cocok, jadi teks seperti `approve it` atau `yes` tanpa ID jatuh melalui sebagai pesan normal ke Claude.

560* **Format benar, ID salah**: server Anda memancarkan verdict, tetapi Claude Code tidak menemukan permintaan terbuka dengan ID itu dan menjatuhkannya diam-diam.

561 

562### Contoh lengkap

563 

564`webhook.ts` yang dirakit di bawah menggabungkan ketiga ekstensi dari halaman ini: tool balasan, sender gating, dan permission relay. Jika Anda memulai di sini, Anda juga akan memerlukan [project setup dan entry `.mcp.json`](#example-build-a-webhook-receiver) dari panduan awal.

565 

566Untuk membuat kedua arah dapat diuji dari curl, pendengar HTTP melayani dua jalur:

567 

568* **`GET /events`**: memegang aliran SSE terbuka dan mendorong setiap pesan outbound sebagai baris `data:`, jadi `curl -N` dapat menonton balasan Claude dan permission prompts tiba secara langsung.

569* **`POST /`**: sisi inbound, handler yang sama seperti sebelumnya, sekarang dengan pemeriksaan format verdict disisipkan sebelum cabang chat-forward.

570 

571```ts title="Full webhook.ts with permission relay' expandable theme={null}

572#!/usr/bin/env bun

573import { Server } from '@modelcontextprotocol/sdk/server/index.js'

574import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'

575import { ListToolsRequestSchema, CallToolRequestSchema } from '@modelcontextprotocol/sdk/types.js'

576import { z } from 'zod'

577 

578// --- Outbound: tulis ke pendengar curl -N apa pun di /events ---

579// Bridge nyata akan POST ke platform chat Anda sebagai gantinya.

580const listeners = new Set<(chunk: string) => void>()

581function send(text: string) {

582 const chunk = text.split('\n').map(l => `data: ${l}\n`).join('') + '\n'

583 for (const emit of listeners) emit(chunk)

584}

585 

586// Allowlist pengirim. Untuk panduan lokal kami mempercayai nilai header X-Sender tunggal

587// "dev"; bridge nyata akan memeriksa ID pengguna platform.

588const allowed = new Set(['dev'])

589 

590const mcp = new Server(

591 { name: 'webhook', version: '0.0.1' },

592 {

593 capabilities: {

594 experimental: {

595 'claude/channel': {},

596 'claude/channel/permission': {}, // opt in ke permission relay

597 },

598 tools: {},

599 },

600 instructions:

601 'Messages tiba sebagai <channel source="webhook" chat_id="...">. ' +

602 'Balas dengan tool balasan, melewatkan chat_id dari tag.',

603 },

604)

605 

606// --- reply tool: Claude memanggil ini untuk mengirim pesan kembali ---

607mcp.setRequestHandler(ListToolsRequestSchema, async () => ({

608 tools: [{

609 name: 'reply',

610 description: 'Kirim pesan kembali melalui channel ini',

611 inputSchema: {

612 type: 'object',

613 properties: {

614 chat_id: { type: 'string', description: 'Percakapan untuk membalas' },

615 text: { type: 'string', description: 'Pesan untuk dikirim' },

616 },

617 required: ['chat_id', 'text'],

618 },

619 }],

620}))

621 

622mcp.setRequestHandler(CallToolRequestSchema, async req => {

623 if (req.params.name === 'reply') {

624 const { chat_id, text } = req.params.arguments as { chat_id: string; text: string }

625 send(`Reply to ${chat_id}: ${text}`)

626 return { content: [{ type: 'text', text: 'sent' }] }

627 }

628 throw new Error(`unknown tool: ${req.params.name}`)

629})

630 

631// --- permission relay: Claude Code (bukan Claude) memanggil ini ketika dialog terbuka

632const PermissionRequestSchema = z.object({

633 method: z.literal('notifications/claude/channel/permission_request'),

634 params: z.object({

635 request_id: z.string(),

636 tool_name: z.string(),

637 description: z.string(),

638 input_preview: z.string(),

639 }),

640})

641 

642mcp.setNotificationHandler(PermissionRequestSchema, async ({ params }) => {

643 send(

644 `Claude ingin menjalankan ${params.tool_name}: ${params.description}\n\n` +

645 `Balas "yes ${params.request_id}" atau "no ${params.request_id}"`,

646 )

647})

648 

649await mcp.connect(new StdioServerTransport())

650 

651// --- HTTP pada :8788: GET /events mengalirkan outbound, POST merutekan inbound ---

652const PERMISSION_REPLY_RE = /^\s*(y|yes|n|no)\s+([a-km-z]{5})\s*$/i

653let nextId = 1

654 

655Bun.serve({

656 port: 8788,

657 hostname: '127.0.0.1',

658 idleTimeout: 0, // jangan tutup aliran SSE idle

659 async fetch(req) {

660 const url = new URL(req.url)

661 

662 // GET /events: aliran SSE sehingga curl -N dapat menonton balasan dan prompts secara langsung

663 if (req.method === 'GET' && url.pathname === '/events') {

664 const stream = new ReadableStream({

665 start(ctrl) {

666 ctrl.enqueue(': connected\n\n') // sehingga curl menunjukkan sesuatu segera

667 const emit = (chunk: string) => ctrl.enqueue(chunk)

668 listeners.add(emit)

669 req.signal.addEventListener('abort', () => listeners.delete(emit))

670 },

671 })

672 return new Response(stream, {

673 headers: { 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache' },

674 })

675 }

676 

677 // semuanya lainnya adalah inbound: gate pada pengirim terlebih dahulu

678 const body = await req.text()

679 const sender = req.headers.get('X-Sender') ?? ''

680 if (!allowed.has(sender)) return new Response('forbidden', { status: 403 })

681 

682 // periksa format verdict sebelum memperlakukan sebagai chat

683 const m = PERMISSION_REPLY_RE.exec(body)

684 if (m) {

685 await mcp.notification({

686 method: 'notifications/claude/channel/permission',

687 params: {

688 request_id: m[2].toLowerCase(),

689 behavior: m[1].toLowerCase().startsWith('y') ? 'allow' : 'deny',

690 },

691 })

692 return new Response('verdict recorded')

693 }

694 

695 // chat normal: teruskan ke Claude sebagai channel event

696 const chat_id = String(nextId++)

697 await mcp.notification({

698 method: 'notifications/claude/channel',

699 params: { content: body, meta: { chat_id, path: url.pathname } },

700 })

701 return new Response('ok')

702 },

703})

704```

705 

706Uji jalur verdict dalam tiga terminal. Yang pertama adalah sesi Claude Code Anda, dimulai dengan [development flag](#test-during-the-research-preview) sehingga menjalankan `webhook.ts`:

707 

708```bash theme={null}

709claude --dangerously-load-development-channels server:webhook

710```

711 

712Di yang kedua, alirkan sisi outbound sehingga Anda dapat melihat balasan Claude dan permission prompts apa pun saat mereka menyala:

713 

714```bash theme={null}

715curl -N localhost:8788/events

716```

717 

718Di yang ketiga, kirim pesan yang akan membuat Claude mencoba menjalankan perintah:

719 

720```bash theme={null}

721curl -d "list the files in this directory" -H "X-Sender: dev" localhost:8788

722```

723 

724Dialog permission lokal terbuka di terminal Claude Code Anda. Sebentar kemudian prompt muncul dalam aliran `/events`, termasuk ID lima huruf. Setujui dari sisi jarak jauh:

725 

726```bash theme={null}

727curl -d "yes <id>" -H "X-Sender: dev" localhost:8788

728```

729 

730Dialog lokal menutup dan tool berjalan. Balasan Claude kembali melalui tool `reply` dan mendarat dalam aliran juga.

731 

732Tiga bagian spesifik channel dalam file ini:

733 

734* **Capabilities** dalam konstruktor `Server`: `claude/channel` mendaftarkan pendengar notifikasi, `claude/channel/permission` opt in ke permission relay, `tools` membiarkan Claude menemukan tool balasan.

735* **Outbound paths**: handler tool `reply` adalah apa yang dipanggil Claude untuk respons percakapan; handler notifikasi `PermissionRequestSchema` adalah apa yang dipanggil Claude Code ketika dialog permission terbuka. Keduanya memanggil `send()` untuk broadcast melalui `/events`, tetapi dipicu oleh bagian berbeda dari sistem.

736* **HTTP handler**: `GET /events` memegang aliran SSE terbuka sehingga curl dapat menonton outbound secara langsung; `POST` adalah inbound, gated pada header `X-Sender`. Body `yes <id>` atau `no <id>` masuk ke Claude Code sebagai notifikasi verdict dan tidak pernah mencapai Claude; apa pun lainnya diteruskan ke Claude sebagai channel event.

737 

738## Paket sebagai plugin

739 

740Untuk membuat channel Anda dapat diinstal dan dibagikan, bungkus dalam [plugin](/id/plugins) dan publikasikan ke [marketplace](/id/plugin-marketplaces). Pengguna menginstalnya dengan `/plugin install`, kemudian mengaktifkannya per sesi dengan `--channels plugin:<name>@<marketplace>`.

741 

742Channel yang dipublikasikan ke marketplace Anda sendiri masih memerlukan `--dangerously-load-development-channels` untuk berjalan, karena tidak ada di [approved allowlist](/id/channels#supported-channels). Untuk menambahkannya, [kirimkan ke official marketplace](/id/plugins#submit-your-plugin-to-the-official-marketplace). Plugin channel melalui review keamanan sebelum disetujui. Pada rencana Team dan Enterprise, admin dapat sebagai gantinya menyertakan plugin Anda dalam daftar [`allowedChannelPlugins`](/id/channels#restrict-which-channel-plugins-can-run) organisasi, yang menggantikan allowlist Anthropic default.

743 

744## Lihat juga

745 

746* [Channels](/id/channels) untuk menginstal dan menggunakan Telegram, Discord, iMessage, atau demo fakechat, dan untuk mengaktifkan channels untuk Team atau Enterprise org

747* [Working channel implementations](https://github.com/anthropics/claude-plugins-official/tree/main/external_plugins) untuk kode server lengkap dengan alur pairing, tools balasan, dan lampiran file

748* [MCP](/id/mcp) untuk protokol dasar yang diimplementasikan server channel

749* [Plugins](/id/plugins) untuk mengemas channel Anda sehingga pengguna dapat menginstalnya dengan `/plugin install`

checkpointing.md +89 −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# Checkpointing

6 

7> Lacak, putar ulang, dan ringkas edit dan percakapan Claude untuk mengelola status sesi.

8 

9Claude Code secara otomatis melacak edit file Claude saat Anda bekerja, memungkinkan Anda dengan cepat membatalkan perubahan dan memutar ulang ke status sebelumnya jika ada yang tidak sesuai.

10 

11## Cara kerja checkpoints

12 

13Saat Anda bekerja dengan Claude, checkpointing secara otomatis menangkap status kode Anda sebelum setiap edit. Jaring pengaman ini memungkinkan Anda mengejar tugas-tugas yang ambisius dan berskala besar dengan mengetahui Anda selalu dapat kembali ke status kode sebelumnya.

14 

15### Pelacakan otomatis

16 

17Claude Code melacak semua perubahan yang dibuat oleh alat pengeditan filenya:

18 

19* Setiap prompt pengguna membuat checkpoint baru

20* Checkpoints bertahan di seluruh sesi, sehingga Anda dapat mengaksesnya dalam percakapan yang dilanjutkan

21* Dibersihkan secara otomatis bersama dengan sesi setelah 30 hari (dapat dikonfigurasi)

22 

23### Putar ulang dan ringkas

24 

25Tekan `Esc` dua kali (`Esc` + `Esc`) atau gunakan perintah `/rewind` untuk membuka menu putar ulang. Daftar yang dapat digulir menunjukkan setiap prompt Anda dari sesi. Pilih titik yang ingin Anda tindaklanjuti, kemudian pilih tindakan:

26 

27* **Pulihkan kode dan percakapan**: kembalikan kode dan percakapan ke titik tersebut

28* **Pulihkan percakapan**: putar ulang ke pesan tersebut sambil mempertahankan kode saat ini

29* **Pulihkan kode**: kembalikan perubahan file sambil mempertahankan percakapan

30* **Ringkas dari sini**: kompres percakapan dari titik ini ke depan menjadi ringkasan, membebaskan ruang context window

31* **Tidak jadi**: kembali ke daftar pesan tanpa membuat perubahan

32 

33Setelah memulihkan percakapan atau meringkas, prompt asli dari pesan yang dipilih dipulihkan ke dalam bidang input sehingga Anda dapat mengirimnya kembali atau mengeditnya.

34 

35#### Pulihkan vs. ringkas

36 

37Tiga opsi pemulihan mengembalikan status: mereka membatalkan perubahan kode, riwayat percakapan, atau keduanya. "Ringkas dari sini" bekerja berbeda:

38 

39* Pesan sebelum pesan yang dipilih tetap utuh

40* Pesan yang dipilih dan semua pesan berikutnya diganti dengan ringkasan yang dihasilkan AI yang ringkas

41* Tidak ada file di disk yang diubah

42* Pesan asli disimpan dalam transkrip sesi, sehingga Claude dapat mereferensikan detail jika diperlukan

43 

44Ini mirip dengan `/compact`, tetapi ditargetkan: alih-alih meringkas seluruh percakapan, Anda menyimpan konteks awal dalam detail lengkap dan hanya mengompres bagian yang menggunakan ruang. Anda dapat mengetik instruksi opsional untuk memandu fokus ringkasan.

45 

46<Note>

47 Ringkas membuat Anda tetap berada di sesi yang sama dan mengompres konteks. Jika Anda ingin bercabang dan mencoba pendekatan berbeda sambil mempertahankan sesi asli tetap utuh, gunakan [fork](/id/how-claude-code-works#resume-or-fork-sessions) sebagai gantinya (`claude --continue --fork-session`).

48</Note>

49 

50## Kasus penggunaan umum

51 

52Checkpoints sangat berguna ketika:

53 

54* **Menjelajahi alternatif**: coba pendekatan implementasi berbeda tanpa kehilangan titik awal Anda

55* **Memulihkan dari kesalahan**: dengan cepat batalkan perubahan yang memperkenalkan bug atau merusak fungsionalitas

56* **Iterasi pada fitur**: bereksperimen dengan variasi mengetahui Anda dapat kembali ke status yang berfungsi

57* **Membebaskan ruang konteks**: ringkas sesi debugging yang bertele-tele dari titik tengah ke depan, menjaga instruksi awal Anda tetap utuh

58 

59## Keterbatasan

60 

61### Perubahan perintah Bash tidak dilacak

62 

63Checkpointing tidak melacak file yang dimodifikasi oleh perintah bash. Misalnya, jika Claude Code menjalankan:

64 

65```bash theme={null}

66rm file.txt

67mv old.txt new.txt

68cp source.txt dest.txt

69```

70 

71Modifikasi file ini tidak dapat dibatalkan melalui rewind. Hanya edit file langsung yang dibuat melalui alat pengeditan file Claude yang dilacak.

72 

73### Perubahan eksternal tidak dilacak

74 

75Checkpointing hanya melacak file yang telah diedit dalam sesi saat ini. Perubahan manual yang Anda buat pada file di luar Claude Code dan edit dari sesi bersamaan lainnya biasanya tidak ditangkap, kecuali jika kebetulan memodifikasi file yang sama dengan sesi saat ini.

76 

77### Bukan pengganti kontrol versi

78 

79Checkpoints dirancang untuk pemulihan cepat tingkat sesi. Untuk riwayat versi permanen dan kolaborasi:

80 

81* Terus gunakan kontrol versi (mis. Git) untuk commit, branch, dan riwayat jangka panjang

82* Checkpoints melengkapi tetapi tidak menggantikan kontrol versi yang tepat

83* Pikirkan checkpoints sebagai "undo lokal" dan Git sebagai "riwayat permanen"

84 

85## Lihat juga

86 

87* [Mode interaktif](/id/interactive-mode) - Pintasan keyboard dan kontrol sesi

88* [Perintah bawaan](/id/commands) - Mengakses checkpoints menggunakan `/rewind`

89* [Referensi CLI](/id/cli-reference) - Opsi baris perintah

chrome.md +232 −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 Claude Code dengan Chrome (beta)

6 

7> Hubungkan Claude Code ke browser Chrome Anda untuk menguji aplikasi web, debug dengan console logs, otomatisasi pengisian formulir, dan ekstrak data dari halaman web.

8 

9Claude Code terintegrasi dengan [ekstensi Claude in Chrome browser](https://chromewebstore.google.com/detail/claude/fcoeoabgfenejglbffodgkkbkcdhcgfn) untuk memberikan Anda kemampuan otomasi browser dari CLI atau [ekstensi VS Code](/id/vs-code#automate-browser-tasks-with-chrome). Bangun kode Anda, kemudian uji dan debug di browser tanpa beralih konteks.

10 

11Claude membuka tab baru untuk tugas browser dan berbagi status login browser Anda, sehingga dapat mengakses situs apa pun yang sudah Anda masuki. Tindakan browser berjalan di jendela Chrome yang terlihat secara real-time. Ketika Claude menemukan halaman login atau CAPTCHA, ia berhenti dan meminta Anda menanganinya secara manual.

12 

13<Note>

14 Integrasi Chrome sedang dalam beta dan saat ini bekerja dengan Google Chrome dan Microsoft Edge. Belum didukung di Brave, Arc, atau browser berbasis Chromium lainnya. WSL (Windows Subsystem for Linux) juga tidak didukung.

15</Note>

16 

17## Kemampuan

18 

19Dengan Chrome terhubung, Anda dapat menggabungkan tindakan browser dengan tugas coding dalam satu alur kerja:

20 

21* **Live debugging**: baca kesalahan console dan status DOM secara langsung, kemudian perbaiki kode yang menyebabkannya

22* **Verifikasi desain**: bangun UI dari mock Figma, kemudian buka di browser untuk memverifikasi kecocokannya

23* **Pengujian aplikasi web**: uji validasi formulir, periksa regresi visual, atau verifikasi alur pengguna

24* **Aplikasi web terautentikasi**: berinteraksi dengan Google Docs, Gmail, Notion, atau aplikasi apa pun yang Anda masuki tanpa konektor API

25* **Ekstraksi data**: tarik informasi terstruktur dari halaman web dan simpan secara lokal

26* **Otomasi tugas**: otomatisasi tugas browser berulang seperti entri data, pengisian formulir, atau alur kerja multi-situs

27* **Perekaman sesi**: rekam interaksi browser sebagai GIF untuk mendokumentasikan atau berbagi apa yang terjadi

28 

29## Prasyarat

30 

31Sebelum menggunakan Claude Code dengan Chrome, Anda memerlukan:

32 

33* Browser [Google Chrome](https://www.google.com/chrome/) atau [Microsoft Edge](https://www.microsoft.com/edge)

34* Ekstensi [Claude in Chrome](https://chromewebstore.google.com/detail/claude/fcoeoabgfenejglbffodgkkbkcdhcgfn) versi 1.0.36 atau lebih tinggi, tersedia di Chrome Web Store untuk kedua browser

35* [Claude Code](/id/quickstart#step-1-install-claude-code) versi 2.0.73 atau lebih tinggi

36* Paket Anthropic langsung (Pro, Max, Team, atau Enterprise)

37 

38<Note>

39 Integrasi Chrome tidak tersedia melalui penyedia pihak ketiga seperti Amazon Bedrock, Google Cloud Vertex AI, atau Microsoft Foundry. Jika Anda mengakses Claude secara eksklusif melalui penyedia pihak ketiga, Anda memerlukan akun claude.ai terpisah untuk menggunakan fitur ini.

40</Note>

41 

42## Mulai di CLI

43 

44<Steps>

45 <Step title="Luncurkan Claude Code dengan Chrome">

46 Mulai Claude Code dengan flag `--chrome`:

47 

48 ```bash theme={null}

49 claude --chrome

50 ```

51 

52 Anda juga dapat mengaktifkan Chrome dari dalam sesi yang ada dengan menjalankan `/chrome`.

53 </Step>

54 

55 <Step title="Minta Claude menggunakan browser">

56 Contoh ini menavigasi ke halaman, berinteraksi dengannya, dan melaporkan apa yang ditemukannya, semuanya dari terminal atau editor Anda:

57 

58 ```text theme={null}

59 Go to code.claude.com/docs, click on the search box,

60 type "hooks", and tell me what results appear

61 ```

62 </Step>

63</Steps>

64 

65Jalankan `/chrome` kapan saja untuk memeriksa status koneksi, mengelola izin, atau menghubungkan kembali ekstensi.

66 

67Untuk VS Code, lihat [otomasi browser di VS Code](/id/vs-code#automate-browser-tasks-with-chrome).

68 

69### Aktifkan Chrome secara default

70 

71Untuk menghindari melewatkan `--chrome` setiap sesi, jalankan `/chrome` dan pilih "Enabled by default".

72 

73Di [ekstensi VS Code](/id/vs-code#automate-browser-tasks-with-chrome), Chrome tersedia kapan pun ekstensi Chrome diinstal. Tidak ada flag tambahan yang diperlukan.

74 

75<Note>

76 Mengaktifkan Chrome secara default di CLI meningkatkan penggunaan konteks karena alat browser selalu dimuat. Jika Anda melihat peningkatan konsumsi konteks, nonaktifkan pengaturan ini dan gunakan `--chrome` hanya saat diperlukan.

77</Note>

78 

79### Kelola izin situs

80 

81Izin tingkat situs diwarisi dari ekstensi Chrome. Kelola izin di pengaturan ekstensi Chrome untuk mengontrol situs mana yang dapat dijelajahi, diklik, dan diketik oleh Claude.

82 

83## Contoh alur kerja

84 

85Contoh-contoh ini menunjukkan cara umum untuk menggabungkan tindakan browser dengan tugas coding. Jalankan `/mcp` dan pilih `claude-in-chrome` untuk melihat daftar lengkap alat browser yang tersedia.

86 

87### Uji aplikasi web lokal

88 

89Saat mengembangkan aplikasi web, minta Claude untuk memverifikasi perubahan Anda berfungsi dengan benar:

90 

91```text theme={null}

92I just updated the login form validation. Can you open localhost:3000,

93try submitting the form with invalid data, and check if the error

94messages appear correctly?

95```

96 

97Claude menavigasi ke server lokal Anda, berinteraksi dengan formulir, dan melaporkan apa yang diamatinya.

98 

99### Debug dengan console logs

100 

101Claude dapat membaca output console untuk membantu mendiagnosis masalah. Beri tahu Claude pola apa yang harus dicari daripada meminta semua output console, karena log dapat sangat panjang:

102 

103```text theme={null}

104Open the dashboard page and check the console for any errors when

105the page loads.

106```

107 

108Claude membaca pesan console dan dapat memfilter pola atau jenis kesalahan tertentu.

109 

110### Otomatisasi pengisian formulir

111 

112Percepat tugas entri data berulang:

113 

114```text theme={null}

115I have a spreadsheet of customer contacts in contacts.csv. For each row,

116go to the CRM at crm.example.com, click "Add Contact", and fill in the

117name, email, and phone fields.

118```

119 

120Claude membaca file lokal Anda, menavigasi antarmuka web, dan memasukkan data untuk setiap catatan.

121 

122### Buat draf konten di Google Docs

123 

124Gunakan Claude untuk menulis langsung di dokumen Anda tanpa penyiapan API:

125 

126```text theme={null}

127Draft a project update based on the recent commits and add it to my

128Google Doc at docs.google.com/document/d/abc123

129```

130 

131Claude membuka dokumen, mengklik ke editor, dan mengetik konten. Ini bekerja dengan aplikasi web apa pun yang Anda masuki: Gmail, Notion, Sheets, dan lainnya.

132 

133### Ekstrak data dari halaman web

134 

135Tarik informasi terstruktur dari situs web:

136 

137```text theme={null}

138Go to the product listings page and extract the name, price, and

139availability for each item. Save the results as a CSV file.

140```

141 

142Claude menavigasi ke halaman, membaca konten, dan mengompilasi data ke dalam format terstruktur.

143 

144### Jalankan alur kerja multi-situs

145 

146Koordinasikan tugas di berbagai situs web:

147 

148```text theme={null}

149Check my calendar for meetings tomorrow, then for each meeting with

150an external attendee, look up their company website and add a note

151about what they do.

152```

153 

154Claude bekerja di seluruh tab untuk mengumpulkan informasi dan menyelesaikan alur kerja.

155 

156### Rekam GIF demo

157 

158Buat rekaman alur interaksi browser yang dapat dibagikan:

159 

160```text theme={null}

161Record a GIF showing how to complete the checkout flow, from adding

162an item to the cart through to the confirmation page.

163```

164 

165Claude merekam urutan interaksi dan menyimpannya sebagai file GIF.

166 

167## Troubleshooting

168 

169### Ekstensi tidak terdeteksi

170 

171Jika Claude Code menampilkan "Chrome extension not detected":

172 

1731. Verifikasi ekstensi Chrome diinstal dan diaktifkan di `chrome://extensions`

1742. Verifikasi Claude Code terbaru dengan menjalankan `claude --version`

1753. Periksa bahwa Chrome sedang berjalan

1764. Jalankan `/chrome` dan pilih "Reconnect extension" untuk membangun kembali koneksi

1775. Jika masalah berlanjut, restart Claude Code dan Chrome

178 

179Pertama kali Anda mengaktifkan integrasi Chrome, Claude Code menginstal file konfigurasi host messaging asli. Chrome membaca file ini saat startup, jadi jika ekstensi tidak terdeteksi pada upaya pertama Anda, restart Chrome untuk mengambil konfigurasi baru.

180 

181Jika koneksi masih gagal, verifikasi file konfigurasi host ada di:

182 

183Untuk Chrome:

184 

185* **macOS**: `~/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.anthropic.claude_code_browser_extension.json`

186* **Linux**: `~/.config/google-chrome/NativeMessagingHosts/com.anthropic.claude_code_browser_extension.json`

187* **Windows**: periksa `HKCU\Software\Google\Chrome\NativeMessagingHosts\` di Windows Registry

188 

189Untuk Edge:

190 

191* **macOS**: `~/Library/Application Support/Microsoft Edge/NativeMessagingHosts/com.anthropic.claude_code_browser_extension.json`

192* **Linux**: `~/.config/microsoft-edge/NativeMessagingHosts/com.anthropic.claude_code_browser_extension.json`

193* **Windows**: periksa `HKCU\Software\Microsoft\Edge\NativeMessagingHosts\` di Windows Registry

194 

195### Browser tidak merespons

196 

197Jika perintah browser Claude berhenti bekerja:

198 

1991. Periksa apakah dialog modal (alert, confirm, prompt) memblokir halaman. Dialog JavaScript memblokir peristiwa browser dan mencegah Claude menerima perintah. Tutup dialog secara manual, kemudian beri tahu Claude untuk melanjutkan.

2002. Minta Claude membuat tab baru dan coba lagi

2013. Restart ekstensi Chrome dengan menonaktifkan dan mengaktifkannya kembali di `chrome://extensions`

202 

203### Koneksi terputus selama sesi panjang

204 

205Service worker ekstensi Chrome dapat menjadi idle selama sesi yang diperpanjang, yang memutus koneksi. Jika alat browser berhenti bekerja setelah periode inaktivitas, jalankan `/chrome` dan pilih "Reconnect extension".

206 

207### Masalah khusus Windows

208 

209Di Windows, Anda mungkin mengalami:

210 

211* **Konflik named pipe (EADDRINUSE)**: jika proses lain menggunakan named pipe yang sama, restart Claude Code. Tutup sesi Claude Code lain apa pun yang mungkin menggunakan Chrome.

212* **Kesalahan host messaging asli**: jika host messaging asli mogok saat startup, coba instal ulang Claude Code untuk membuat ulang konfigurasi host.

213 

214### Pesan kesalahan umum

215 

216Ini adalah kesalahan yang paling sering dihadapi dan cara menyelesaikannya:

217 

218| Kesalahan | Penyebab | Perbaikan |

219| ------------------------------------ | --------------------------------------------------- | --------------------------------------------------------------------------------------- |

220| "Browser extension is not connected" | Host messaging asli tidak dapat menjangkau ekstensi | Restart Chrome dan Claude Code, kemudian jalankan `/chrome` untuk menghubungkan kembali |

221| "Extension not detected" | Ekstensi Chrome tidak diinstal atau dinonaktifkan | Instal atau aktifkan ekstensi di `chrome://extensions` |

222| "No tab available" | Claude mencoba bertindak sebelum tab siap | Minta Claude membuat tab baru dan coba lagi |

223| "Receiving end does not exist" | Service worker ekstensi menjadi idle | Jalankan `/chrome` dan pilih "Reconnect extension" |

224 

225## Lihat juga

226 

227* [Computer use](/id/computer-use): kontrol aplikasi macOS asli ketika tugas tidak dapat dilakukan di browser

228* [Gunakan Claude Code di VS Code](/id/vs-code#automate-browser-tasks-with-chrome): otomasi browser di ekstensi VS Code

229* [Referensi CLI](/id/cli-reference): flag baris perintah termasuk `--chrome`

230* [Alur kerja umum](/id/common-workflows): lebih banyak cara untuk menggunakan Claude Code

231* [Data dan privasi](/id/data-usage): bagaimana Claude Code menangani data Anda

232* [Memulai dengan Claude in Chrome](https://support.claude.com/en/articles/12012173-getting-started-with-claude-in-chrome): dokumentasi lengkap untuk ekstensi Chrome, termasuk pintasan keyboard, penjadwalan, dan izin

claude-code-on-the-web.md +773 −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 Claude Code di web

6 

7> Konfigurasikan lingkungan cloud, skrip setup, akses jaringan, dan Docker di sandbox Anthropic. Pindahkan sesi antara web dan terminal dengan `--remote` dan `--teleport`.

8 

9<Note>

10 Claude Code di web sedang dalam pratinjau penelitian untuk pengguna Pro, Max, dan Team, serta untuk pengguna Enterprise dengan kursi premium atau kursi Chat + Claude Code.

11</Note>

12 

13Claude Code di web menjalankan tugas pada infrastruktur cloud yang dikelola Anthropic di [claude.ai/code](https://claude.ai/code). Sesi bertahan bahkan jika Anda menutup browser, dan Anda dapat memantaunya dari aplikasi mobile Claude.

14 

15<Tip>

16 Baru mengenal Claude Code di web? Mulai dengan [Memulai](/id/web-quickstart) untuk menghubungkan akun GitHub Anda dan mengirimkan tugas pertama Anda.

17</Tip>

18 

19Halaman ini mencakup:

20 

21* [Opsi autentikasi GitHub](#github-authentication-options): dua cara untuk menghubungkan GitHub

22* [Lingkungan cloud](#the-cloud-environment): konfigurasi apa yang terbawa, alat apa yang diinstal, dan cara mengonfigurasi lingkungan

23* [Skrip setup](#setup-scripts) dan manajemen dependensi

24* [Akses jaringan](#network-access): tingkat, proxy, dan daftar putih default

25* [Pindahkan tugas antara web dan terminal](#move-tasks-between-web-and-terminal) dengan `--remote` dan `--teleport`

26* [Bekerja dengan sesi](#work-with-sessions): meninjau, berbagi, mengarsipkan, menghapus

27* [Auto-fix pull request](#auto-fix-pull-requests): merespons secara otomatis kegagalan CI dan komentar ulasan

28* [Keamanan dan isolasi](#security-and-isolation): bagaimana sesi diisolasi

29* [Batasan](#limitations): batas laju dan pembatasan platform

30 

31## Opsi autentikasi GitHub

32 

33Sesi cloud memerlukan akses ke repositori GitHub Anda untuk mengkloning kode dan mendorong cabang. Anda dapat memberikan akses dengan dua cara:

34 

35| Metode | Cara kerjanya | Terbaik untuk |

36| :--------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------- |

37| **GitHub App** | Instal Claude GitHub App di repositori tertentu selama [onboarding web](/id/web-quickstart). Akses dibatasi per repositori. | Tim yang menginginkan otorisasi eksplisit per-repo |

38| **`/web-setup`** | Jalankan `/web-setup` di terminal Anda untuk menyinkronkan token CLI `gh` lokal ke akun Claude Anda. Akses cocok dengan apa yang dapat dilihat token `gh` Anda. | Pengembang individual yang sudah menggunakan `gh` |

39 

40Kedua metode berfungsi. [`/schedule`](/id/routines) memeriksa salah satu bentuk akses dan meminta Anda menjalankan `/web-setup` jika tidak ada yang dikonfigurasi. Lihat [Hubungkan dari terminal Anda](/id/web-quickstart#connect-from-your-terminal) untuk panduan `/web-setup`.

41 

42GitHub App diperlukan untuk [Auto-fix](#auto-fix-pull-requests), yang menggunakan App untuk menerima webhook PR. Jika Anda terhubung dengan `/web-setup` dan kemudian menginginkan Auto-fix, instal App di repositori tersebut.

43 

44Admin Team dan Enterprise dapat menonaktifkan `/web-setup` dengan toggle Quick web setup di [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code).

45 

46<Note>

47 Organisasi dengan [Zero Data Retention](/id/zero-data-retention) yang diaktifkan tidak dapat menggunakan `/web-setup` atau fitur sesi cloud lainnya.

48</Note>

49 

50## Lingkungan cloud

51 

52Setiap sesi berjalan di VM yang dikelola Anthropic yang segar dengan repositori Anda dikloning. Bagian ini mencakup apa yang tersedia saat sesi dimulai dan cara menyesuaikannya.

53 

54### Apa yang tersedia di sesi cloud

55 

56Sesi cloud dimulai dari klon segar repositori Anda. Apa pun yang dikomit ke repo tersedia. Apa pun yang Anda instal atau konfigurasikan hanya di mesin Anda sendiri tidak tersedia.

57 

58| | Tersedia di sesi cloud | Mengapa |

59| :------------------------------------------------------------------------ | :--------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------- |

60| `CLAUDE.md` repositori Anda | Ya | Bagian dari klon |

61| Hook `.claude/settings.json` repositori Anda | Ya | Bagian dari klon |

62| Server MCP `.mcp.json` repositori Anda | Ya | Bagian dari klon |

63| `.claude/rules/` repositori Anda | Ya | Bagian dari klon |

64| `.claude/skills/`, `.claude/agents/`, `.claude/commands/` repositori Anda | Ya | Bagian dari klon |

65| Plugin yang dideklarasikan di `.claude/settings.json` | Ya | Diinstal saat startup sesi dari [marketplace](/id/plugin-marketplaces) yang Anda deklarasikan. Memerlukan akses jaringan untuk menjangkau sumber marketplace |

66| `~/.claude/CLAUDE.md` pengguna Anda | Tidak | Hidup di mesin Anda, bukan di repo |

67| Plugin yang diaktifkan hanya di pengaturan pengguna Anda | Tidak | `enabledPlugins` bersistem hidup di `~/.claude/settings.json`. Deklarasikan di `.claude/settings.json` repo sebagai gantinya |

68| Server MCP yang Anda tambahkan dengan `claude mcp add` | Tidak | Itu menulis ke konfigurasi pengguna lokal Anda, bukan repo. Deklarasikan server di [`.mcp.json`](/id/mcp#project-scope) sebagai gantinya |

69| Token API statis dan kredensial | Tidak | Tidak ada penyimpanan rahasia khusus yang ada. Lihat di bawah |

70| Autentikasi interaktif seperti AWS SSO | Tidak | Tidak didukung. SSO memerlukan login berbasis browser yang tidak dapat berjalan di sesi cloud |

71 

72Untuk membuat konfigurasi tersedia di sesi cloud, komitkan ke repo. Penyimpanan rahasia khusus belum tersedia. Baik variabel lingkungan maupun skrip setup disimpan dalam konfigurasi lingkungan, terlihat oleh siapa pun yang dapat mengedit lingkungan itu. Jika Anda memerlukan rahasia di sesi cloud, tambahkan sebagai variabel lingkungan dengan visibilitas itu dalam pikiran.

73 

74### Alat yang diinstal

75 

76Sesi cloud dilengkapi dengan runtime bahasa umum, alat build, dan database yang sudah diinstal sebelumnya. Tabel di bawah merangkum apa yang disertakan menurut kategori.

77 

78| Kategori | Disertakan |

79| :------------ | :--------------------------------------------------------------------------------------- |

80| **Python** | Python 3.x dengan pip, poetry, uv, black, mypy, pytest, ruff |

81| **Node.js** | 20, 21, dan 22 melalui nvm, dengan npm, yarn, pnpm, bun¹, eslint, prettier, chromedriver |

82| **Ruby** | 3.1, 3.2, 3.3 dengan gem, bundler, rbenv |

83| **PHP** | 8.4 dengan Composer |

84| **Java** | OpenJDK 21 dengan Maven dan Gradle |

85| **Go** | stabil terbaru dengan dukungan modul |

86| **Rust** | rustc dan cargo |

87| **C/C++** | GCC, Clang, cmake, ninja, conan |

88| **Docker** | docker, dockerd, docker compose |

89| **Databases** | PostgreSQL 16, Redis 7.0 |

90| **Utilities** | git, jq, yq, ripgrep, tmux, vim, nano |

91 

92¹ Bun diinstal tetapi memiliki [masalah kompatibilitas proxy](#install-dependencies-with-a-sessionstart-hook) yang diketahui untuk pengambilan paket.

93 

94Untuk versi yang tepat, minta Claude menjalankan `check-tools` di sesi cloud. Perintah ini hanya ada di sesi cloud.

95 

96### Bekerja dengan masalah GitHub dan pull request

97 

98Sesi cloud menyertakan alat GitHub bawaan yang memungkinkan Claude membaca masalah, membuat daftar pull request, mengambil diff, dan memposting komentar tanpa setup apa pun. Alat ini mengautentikasi melalui [proxy GitHub](#github-proxy) menggunakan metode apa pun yang Anda konfigurasikan di bawah [Opsi autentikasi GitHub](#github-authentication-options), jadi token Anda tidak pernah memasuki kontainer.

99 

100CLI `gh` tidak diinstal sebelumnya. Jika Anda memerlukan perintah `gh` yang tidak dicakup alat bawaan, seperti `gh release` atau `gh workflow run`, instal dan autentikasi sendiri:

101 

102<Steps>

103 <Step title="Instal gh di skrip setup Anda">

104 Tambahkan `apt update && apt install -y gh` ke [skrip setup](#setup-scripts) Anda.

105 </Step>

106 

107 <Step title="Sediakan token">

108 Tambahkan variabel lingkungan `GH_TOKEN` ke [pengaturan lingkungan](#configure-your-environment) Anda dengan token akses pribadi GitHub. `gh` membaca `GH_TOKEN` secara otomatis, jadi tidak ada langkah `gh auth login` yang diperlukan.

109 </Step>

110</Steps>

111 

112### Tautkan artefak kembali ke sesi

113 

114Setiap sesi cloud memiliki URL transkrip di claude.ai, dan sesi dapat membaca ID-nya sendiri dari variabel lingkungan `CLAUDE_CODE_REMOTE_SESSION_ID`. Gunakan ini untuk menempatkan tautan yang dapat dilacak di badan PR, pesan komit, posting Slack, atau laporan yang dihasilkan sehingga pengulas dapat membuka jalannya yang menghasilkannya.

115 

116Minta Claude untuk membuat tautan dari variabel lingkungan. Perintah berikut mencetak URL:

117 

118```bash theme={null}

119echo "https://claude.ai/code/${CLAUDE_CODE_REMOTE_SESSION_ID}"

120```

121 

122### Jalankan tes, mulai layanan, dan tambahkan paket

123 

124Claude menjalankan tes sebagai bagian dari mengerjakan tugas. Minta di prompt Anda, seperti "perbaiki tes yang gagal di `tests/`" atau "jalankan pytest setelah setiap perubahan." Pelari tes seperti pytest, jest, dan cargo test bekerja langsung karena sudah diinstal sebelumnya.

125 

126PostgreSQL dan Redis sudah diinstal tetapi tidak berjalan secara default. Minta Claude untuk memulai masing-masing selama sesi:

127 

128```bash theme={null}

129service postgresql start

130```

131 

132```bash theme={null}

133service redis-server start

134```

135 

136Docker tersedia untuk menjalankan layanan terkontainerisasi. Minta Claude menjalankan `docker compose up` untuk memulai layanan proyek Anda. Akses jaringan untuk menarik gambar mengikuti [tingkat akses](#access-levels) lingkungan Anda, dan [default yang dipercaya](#default-allowed-domains) mencakup Docker Hub dan registri umum lainnya.

137 

138Jika gambar Anda besar atau lambat untuk ditarik, tambahkan `docker compose pull` atau `docker compose build` ke [skrip setup](#setup-scripts) Anda. Gambar yang ditarik disimpan di [lingkungan yang di-cache](#environment-caching), jadi setiap sesi baru memilikinya di disk. Cache menyimpan file saja, bukan proses yang berjalan, jadi Claude masih memulai kontainer setiap sesi.

139 

140Untuk menambahkan paket yang tidak diinstal sebelumnya, gunakan [skrip setup](#setup-scripts). Output skrip [di-cache](#environment-caching), jadi paket yang Anda instal di sana tersedia di awal setiap sesi tanpa menginstal ulang setiap kali. Anda juga dapat meminta Claude menginstal paket selama sesi, tetapi instalasi itu tidak bertahan di sesi lain.

141 

142### Batas sumber daya

143 

144Sesi cloud berjalan dengan batas sumber daya perkiraan yang mungkin berubah seiring waktu:

145 

146* 4 vCPU

147* 16 GB RAM

148* 30 GB disk

149 

150Tugas yang memerlukan memori jauh lebih banyak, seperti pekerjaan build besar atau tes intensif memori, mungkin gagal atau dihentikan. Untuk beban kerja di luar batas ini, gunakan [Remote Control](/id/remote-control) untuk menjalankan Claude Code pada perangkat keras Anda sendiri.

151 

152### Konfigurasikan lingkungan Anda

153 

154Lingkungan mengontrol [akses jaringan](#network-access), variabel lingkungan, dan [skrip setup](#setup-scripts) yang berjalan sebelum sesi dimulai. Lihat [Alat yang diinstal](#installed-tools) untuk apa yang tersedia tanpa konfigurasi apa pun. Anda dapat mengelola lingkungan dari antarmuka web atau terminal:

155 

156| Tindakan | Cara |

157| :---------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

158| Tambahkan lingkungan | Pilih lingkungan saat ini untuk membuka pemilih, kemudian pilih **Tambahkan lingkungan**. Dialog mencakup nama, tingkat akses jaringan, variabel lingkungan, dan skrip setup. |

159| Edit lingkungan | Pilih ikon pengaturan di sebelah kanan nama lingkungan. |

160| Arsipkan lingkungan | Buka lingkungan untuk pengeditan dan pilih **Arsipkan**. Lingkungan yang diarsipkan disembunyikan dari pemilih tetapi sesi yang ada terus berjalan. |

161| Atur default untuk `--remote` | Jalankan `/remote-env` di terminal Anda. Jika Anda memiliki satu lingkungan, perintah ini menunjukkan konfigurasi saat ini Anda. `/remote-env` hanya memilih default; tambahkan, edit, dan arsipkan lingkungan dari antarmuka web. |

162 

163Variabel lingkungan menggunakan format `.env` dengan satu pasangan `KEY=value` per baris. Jangan bungkus nilai dalam tanda kutip, karena tanda kutip disimpan sebagai bagian dari nilai.

164 

165```text theme={null}

166NODE_ENV=development

167LOG_LEVEL=debug

168DATABASE_URL=postgres://localhost:5432/myapp

169```

170 

171## Skrip setup

172 

173Skrip setup adalah skrip Bash yang berjalan saat sesi cloud baru dimulai, sebelum Claude Code diluncurkan. Gunakan skrip setup untuk menginstal dependensi, mengonfigurasi alat, atau mengambil apa pun yang dibutuhkan sesi yang tidak diinstal sebelumnya.

174 

175Skrip berjalan sebagai root di Ubuntu 24.04, jadi `apt install` dan sebagian besar pengelola paket bahasa bekerja.

176 

177Untuk menambahkan skrip setup, buka dialog pengaturan lingkungan dan masukkan skrip Anda di bidang **Skrip setup**.

178 

179Contoh ini menginstal CLI `gh`, yang tidak diinstal sebelumnya:

180 

181```bash theme={null}

182#!/bin/bash

183apt update && apt install -y gh

184```

185 

186Jika skrip keluar dengan non-zero, sesi gagal dimulai. Tambahkan `|| true` ke perintah non-kritis untuk menghindari pemblokiran sesi pada kegagalan instalasi yang tidak stabil.

187 

188<Note>

189 Skrip setup yang menginstal paket memerlukan akses jaringan untuk menjangkau registri. Akses jaringan **Trusted** default memungkinkan koneksi ke [domain paket umum](#default-allowed-domains) termasuk npm, PyPI, RubyGems, dan crates.io. Skrip akan gagal menginstal paket jika lingkungan Anda menggunakan akses jaringan **None**.

190</Note>

191 

192### Caching lingkungan

193 

194Skrip setup berjalan pertama kali Anda memulai sesi di lingkungan. Setelah selesai, Anthropic membuat snapshot sistem file dan menggunakan kembali snapshot itu sebagai titik awal untuk sesi nanti. Sesi baru dimulai dengan dependensi, alat, dan gambar Docker Anda sudah di disk, dan langkah skrip setup dilewati. Ini membuat startup tetap cepat bahkan ketika skrip menginstal toolchain besar atau menarik gambar kontainer.

195 

196Cache menangkap file, bukan proses yang berjalan. Apa pun yang ditulis skrip setup ke disk terbawa. Layanan atau kontainer yang dimulainya tidak, jadi mulai itu per sesi dengan meminta Claude atau dengan hook [SessionStart](#setup-scripts-vs-sessionstart-hooks).

197 

198Skrip setup berjalan lagi untuk membangun kembali cache saat Anda mengubah skrip setup lingkungan atau host jaringan yang diizinkan, dan ketika cache mencapai kedaluwarsa setelah kira-kira tujuh hari. Melanjutkan sesi yang ada tidak pernah menjalankan kembali skrip setup.

199 

200Anda tidak perlu mengaktifkan caching atau mengelola snapshot sendiri.

201 

202### Skrip setup vs. hook SessionStart

203 

204Gunakan skrip setup untuk menginstal hal-hal yang dibutuhkan cloud tetapi laptop Anda sudah memiliki, seperti runtime bahasa atau alat CLI. Gunakan hook [SessionStart](/id/hooks#sessionstart) untuk penyiapan proyek yang harus berjalan di mana-mana, cloud dan lokal, seperti `npm install`.

205 

206Keduanya berjalan di awal sesi, tetapi mereka termasuk di tempat yang berbeda:

207 

208| | Skrip setup | Hook SessionStart |

209| ---------------- | ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- |

210| Terlampir pada | Lingkungan cloud | Repositori Anda |

211| Dikonfigurasi di | UI lingkungan cloud | `.claude/settings.json` di repo Anda |

212| Berjalan | Sebelum Claude Code diluncurkan, ketika tidak ada [lingkungan yang di-cache](#environment-caching) tersedia | Setelah Claude Code diluncurkan, pada setiap sesi termasuk yang dilanjutkan |

213| Cakupan | Hanya lingkungan cloud | Lokal dan cloud |

214 

215Hook SessionStart juga dapat didefinisikan di `~/.claude/settings.json` tingkat pengguna Anda secara lokal, tetapi pengaturan tingkat pengguna tidak terbawa ke sesi cloud. Di cloud, hanya hook yang dikomit ke repo yang berjalan.

216 

217### Instal dependensi dengan hook SessionStart

218 

219Untuk menginstal dependensi hanya di sesi cloud, tambahkan hook SessionStart ke `.claude/settings.json` repo Anda:

220 

221```json theme={null}

222{

223 "hooks": {

224 "SessionStart": [

225 {

226 "matcher": "startup|resume",

227 "hooks": [

228 {

229 "type": "command",

230 "command": "\"$CLAUDE_PROJECT_DIR\"/scripts/install_pkgs.sh"

231 }

232 ]

233 }

234 ]

235 }

236}

237```

238 

239Buat skrip di `scripts/install_pkgs.sh` dan buat dapat dieksekusi dengan `chmod +x`. Variabel lingkungan `CLAUDE_CODE_REMOTE` diatur ke `true` di sesi cloud, jadi Anda dapat menggunakannya untuk melewati eksekusi lokal:

240 

241```bash theme={null}

242#!/bin/bash

243 

244if [ "$CLAUDE_CODE_REMOTE" != "true" ]; then

245 exit 0

246fi

247 

248npm install

249pip install -r requirements.txt

250exit 0

251```

252 

253Hook SessionStart memiliki beberapa batasan di sesi cloud:

254 

255* **Tidak ada scoping khusus cloud**: hook berjalan di sesi lokal dan cloud. Untuk melewati eksekusi lokal, periksa variabel lingkungan `CLAUDE_CODE_REMOTE` seperti yang ditunjukkan di atas.

256* **Memerlukan akses jaringan**: perintah install perlu menjangkau registri paket. Jika lingkungan Anda menggunakan akses jaringan **None**, hook ini gagal. [Daftar putih default](#default-allowed-domains) di bawah **Trusted** mencakup npm, PyPI, RubyGems, dan crates.io.

257* **Kompatibilitas proxy**: semua lalu lintas keluar melewati [proxy keamanan](#security-proxy). Beberapa pengelola paket tidak bekerja dengan benar dengan proxy ini. Bun adalah contoh yang diketahui.

258* **Menambah latensi startup**: hook berjalan setiap kali sesi dimulai atau dilanjutkan, tidak seperti skrip setup yang mendapat manfaat dari [caching lingkungan](#environment-caching). Jaga skrip install tetap cepat dengan memeriksa apakah dependensi sudah ada sebelum menginstal ulang.

259 

260Untuk mempertahankan variabel lingkungan untuk perintah Bash berikutnya, tulis ke file di `$CLAUDE_ENV_FILE`. Lihat [hook SessionStart](/id/hooks#sessionstart) untuk detail.

261 

262Mengganti gambar dasar dengan gambar Docker Anda sendiri belum didukung. Gunakan skrip setup untuk menginstal apa yang Anda butuhkan di atas [gambar yang disediakan](#installed-tools), atau jalankan gambar Anda sebagai kontainer bersama Claude dengan `docker compose`.

263 

264## Akses jaringan

265 

266Akses jaringan mengontrol koneksi keluar dari lingkungan cloud. Setiap lingkungan menentukan satu tingkat akses, dan Anda dapat memperluas dengan domain yang diizinkan khusus. Default adalah **Trusted**, yang memungkinkan registri paket dan [domain yang diizinkan](#default-allowed-domains) lainnya.

267 

268### Tingkat akses

269 

270Pilih tingkat akses saat Anda membuat atau mengedit lingkungan:

271 

272| Tingkat | Koneksi keluar |

273| :---------- | :---------------------------------------------------------------------------------------- |

274| **None** | Tidak ada akses jaringan keluar |

275| **Trusted** | [Domain yang diizinkan](#default-allowed-domains) saja: registri paket, GitHub, SDK cloud |

276| **Full** | Domain apa pun |

277| **Custom** | Daftar putih Anda sendiri, secara opsional termasuk default |

278 

279Operasi GitHub menggunakan [proxy terpisah](#github-proxy) yang independen dari pengaturan ini.

280 

281### Izinkan domain tertentu

282 

283Untuk mengizinkan domain yang tidak ada di daftar Trusted, pilih **Custom** di pengaturan akses jaringan lingkungan. Bidang **Domain yang diizinkan** muncul. Masukkan satu domain per baris:

284 

285```text theme={null}

286api.example.com

287*.internal.example.com

288registry.example.com

289```

290 

291Gunakan `*.` untuk pencocokan subdomain wildcard. Periksa **Juga sertakan daftar default pengelola paket umum** untuk menjaga [domain Trusted](#default-allowed-domains) bersama entri khusus Anda, atau biarkan tidak dicentang untuk hanya mengizinkan apa yang Anda daftarkan.

292 

293### Proxy GitHub

294 

295Untuk keamanan, semua operasi GitHub melewati layanan proxy khusus yang secara transparan menangani semua interaksi git. Di dalam sandbox, klien git mengautentikasi menggunakan kredensial bersistem yang dibuat khusus. Proxy ini:

296 

297* Mengelola autentikasi GitHub dengan aman: klien git menggunakan kredensial bersistem di dalam sandbox, yang diverifikasi proxy dan diterjemahkan ke token autentikasi GitHub aktual Anda

298* Membatasi operasi git push ke cabang kerja saat ini untuk keamanan

299* Memungkinkan kloning, pengambilan, dan operasi PR sambil mempertahankan batas keamanan

300 

301### Proxy keamanan

302 

303Lingkungan berjalan di belakang proxy jaringan HTTP/HTTPS untuk tujuan keamanan dan pencegahan penyalahgunaan. Semua lalu lintas internet keluar melewati proxy ini, yang menyediakan:

304 

305* Perlindungan terhadap permintaan berbahaya

306* Pembatasan laju dan pencegahan penyalahgunaan

307* Penyaringan konten untuk keamanan yang ditingkatkan

308 

309### Domain yang diizinkan secara default

310 

311Saat menggunakan akses jaringan **Trusted**, domain berikut diizinkan secara default. Domain yang ditandai dengan `*` menunjukkan pencocokan subdomain wildcard, jadi `*.gcr.io` memungkinkan subdomain apa pun dari `gcr.io`.

312 

313<AccordionGroup>

314 <Accordion title="Layanan Anthropic">

315 * api.anthropic.com

316 * statsig.anthropic.com

317 * docs.claude.com

318 * platform.claude.com

319 * code.claude.com

320 * claude.ai

321 </Accordion>

322 

323 <Accordion title="Kontrol versi">

324 * github.com

325 * [www.github.com](http://www.github.com)

326 * api.github.com

327 * npm.pkg.github.com

328 * raw\.githubusercontent.com

329 * pkg-npm.githubusercontent.com

330 * objects.githubusercontent.com

331 * release-assets.githubusercontent.com

332 * codeload.github.com

333 * avatars.githubusercontent.com

334 * camo.githubusercontent.com

335 * gist.github.com

336 * gitlab.com

337 * [www.gitlab.com](http://www.gitlab.com)

338 * registry.gitlab.com

339 * bitbucket.org

340 * [www.bitbucket.org](http://www.bitbucket.org)

341 * api.bitbucket.org

342 </Accordion>

343 

344 <Accordion title="Registri kontainer">

345 * registry-1.docker.io

346 * auth.docker.io

347 * index.docker.io

348 * hub.docker.com

349 * [www.docker.com](http://www.docker.com)

350 * production.cloudflare.docker.com

351 * download.docker.com

352 * gcr.io

353 * \*.gcr.io

354 * ghcr.io

355 * mcr.microsoft.com

356 * \*.data.mcr.microsoft.com

357 * public.ecr.aws

358 </Accordion>

359 

360 <Accordion title="Platform cloud">

361 * cloud.google.com

362 * accounts.google.com

363 * gcloud.google.com

364 * \*.googleapis.com

365 * storage.googleapis.com

366 * compute.googleapis.com

367 * container.googleapis.com

368 * azure.com

369 * portal.azure.com

370 * microsoft.com

371 * [www.microsoft.com](http://www.microsoft.com)

372 * \*.microsoftonline.com

373 * packages.microsoft.com

374 * dotnet.microsoft.com

375 * dot.net

376 * visualstudio.com

377 * dev.azure.com

378 * \*.amazonaws.com

379 * \*.api.aws

380 * oracle.com

381 * [www.oracle.com](http://www.oracle.com)

382 * java.com

383 * [www.java.com](http://www.java.com)

384 * java.net

385 * [www.java.net](http://www.java.net)

386 * download.oracle.com

387 * yum.oracle.com

388 </Accordion>

389 

390 <Accordion title="Pengelola paket JavaScript dan Node">

391 * registry.npmjs.org

392 * [www.npmjs.com](http://www.npmjs.com)

393 * [www.npmjs.org](http://www.npmjs.org)

394 * npmjs.com

395 * npmjs.org

396 * yarnpkg.com

397 * registry.yarnpkg.com

398 </Accordion>

399 

400 <Accordion title="Pengelola paket Python">

401 * pypi.org

402 * [www.pypi.org](http://www.pypi.org)

403 * files.pythonhosted.org

404 * pythonhosted.org

405 * test.pypi.org

406 * pypi.python.org

407 * pypa.io

408 * [www.pypa.io](http://www.pypa.io)

409 </Accordion>

410 

411 <Accordion title="Pengelola paket Ruby">

412 * rubygems.org

413 * [www.rubygems.org](http://www.rubygems.org)

414 * api.rubygems.org

415 * index.rubygems.org

416 * ruby-lang.org

417 * [www.ruby-lang.org](http://www.ruby-lang.org)

418 * rubyforge.org

419 * [www.rubyforge.org](http://www.rubyforge.org)

420 * rubyonrails.org

421 * [www.rubyonrails.org](http://www.rubyonrails.org)

422 * rvm.io

423 * get.rvm.io

424 </Accordion>

425 

426 <Accordion title="Pengelola paket Rust">

427 * crates.io

428 * [www.crates.io](http://www.crates.io)

429 * index.crates.io

430 * static.crates.io

431 * rustup.rs

432 * static.rust-lang.org

433 * [www.rust-lang.org](http://www.rust-lang.org)

434 </Accordion>

435 

436 <Accordion title="Pengelola paket Go">

437 * proxy.golang.org

438 * sum.golang.org

439 * index.golang.org

440 * golang.org

441 * [www.golang.org](http://www.golang.org)

442 * goproxy.io

443 * pkg.go.dev

444 </Accordion>

445 

446 <Accordion title="Pengelola paket JVM">

447 * maven.org

448 * repo.maven.org

449 * central.maven.org

450 * repo1.maven.org

451 * repo.maven.apache.org

452 * jcenter.bintray.com

453 * gradle.org

454 * [www.gradle.org](http://www.gradle.org)

455 * services.gradle.org

456 * plugins.gradle.org

457 * kotlinlang.org

458 * [www.kotlinlang.org](http://www.kotlinlang.org)

459 * spring.io

460 * repo.spring.io

461 </Accordion>

462 

463 <Accordion title="Pengelola paket lainnya">

464 * packagist.org (PHP Composer)

465 * [www.packagist.org](http://www.packagist.org)

466 * repo.packagist.org

467 * nuget.org (.NET NuGet)

468 * [www.nuget.org](http://www.nuget.org)

469 * api.nuget.org

470 * pub.dev (Dart/Flutter)

471 * api.pub.dev

472 * hex.pm (Elixir/Erlang)

473 * [www.hex.pm](http://www.hex.pm)

474 * cpan.org (Perl CPAN)

475 * [www.cpan.org](http://www.cpan.org)

476 * metacpan.org

477 * [www.metacpan.org](http://www.metacpan.org)

478 * api.metacpan.org

479 * cocoapods.org (iOS/macOS)

480 * [www.cocoapods.org](http://www.cocoapods.org)

481 * cdn.cocoapods.org

482 * haskell.org

483 * [www.haskell.org](http://www.haskell.org)

484 * hackage.haskell.org

485 * swift.org

486 * [www.swift.org](http://www.swift.org)

487 </Accordion>

488 

489 <Accordion title="Distribusi Linux">

490 * archive.ubuntu.com

491 * security.ubuntu.com

492 * ubuntu.com

493 * [www.ubuntu.com](http://www.ubuntu.com)

494 * \*.ubuntu.com

495 * ppa.launchpad.net

496 * launchpad.net

497 * [www.launchpad.net](http://www.launchpad.net)

498 * \*.nixos.org

499 </Accordion>

500 

501 <Accordion title="Alat pengembangan dan platform">

502 * dl.k8s.io (Kubernetes)

503 * pkgs.k8s.io

504 * k8s.io

505 * [www.k8s.io](http://www.k8s.io)

506 * releases.hashicorp.com (HashiCorp)

507 * apt.releases.hashicorp.com

508 * rpm.releases.hashicorp.com

509 * archive.releases.hashicorp.com

510 * hashicorp.com

511 * [www.hashicorp.com](http://www.hashicorp.com)

512 * repo.anaconda.com (Anaconda/Conda)

513 * conda.anaconda.org

514 * anaconda.org

515 * [www.anaconda.com](http://www.anaconda.com)

516 * anaconda.com

517 * continuum.io

518 * apache.org (Apache)

519 * [www.apache.org](http://www.apache.org)

520 * archive.apache.org

521 * downloads.apache.org

522 * eclipse.org (Eclipse)

523 * [www.eclipse.org](http://www.eclipse.org)

524 * download.eclipse.org

525 * nodejs.org (Node.js)

526 * [www.nodejs.org](http://www.nodejs.org)

527 * developer.apple.com

528 * developer.android.com

529 * pkg.stainless.com

530 * binaries.prisma.sh

531 </Accordion>

532 

533 <Accordion title="Layanan cloud dan monitoring">

534 * statsig.com

535 * [www.statsig.com](http://www.statsig.com)

536 * api.statsig.com

537 * sentry.io

538 * \*.sentry.io

539 * downloads.sentry-cdn.com

540 * http-intake.logs.datadoghq.com

541 * \*.datadoghq.com

542 * \*.datadoghq.eu

543 * api.honeycomb.io

544 </Accordion>

545 

546 <Accordion title="Pengiriman konten dan mirror">

547 * sourceforge.net

548 * \*.sourceforge.net

549 * packagecloud.io

550 * \*.packagecloud.io

551 * fonts.googleapis.com

552 * fonts.gstatic.com

553 </Accordion>

554 

555 <Accordion title="Skema dan konfigurasi">

556 * json-schema.org

557 * [www.json-schema.org](http://www.json-schema.org)

558 * json.schemastore.org

559 * [www.schemastore.org](http://www.schemastore.org)

560 </Accordion>

561 

562 <Accordion title="Model Context Protocol">

563 * \*.modelcontextprotocol.io

564 </Accordion>

565</AccordionGroup>

566 

567## Pindahkan tugas antara web dan terminal

568 

569Alur kerja ini memerlukan [Claude Code CLI](/id/quickstart) yang masuk ke akun claude.ai yang sama. Anda dapat memulai sesi cloud baru dari terminal, atau menarik sesi cloud ke terminal untuk melanjutkan secara lokal. Sesi cloud bertahan bahkan jika Anda menutup laptop, dan Anda dapat memantaunya dari mana saja termasuk aplikasi mobile Claude.

570 

571<Note>

572 Dari CLI, handoff sesi adalah satu arah: Anda dapat menarik sesi cloud ke terminal Anda dengan `--teleport`, tetapi Anda tidak dapat mendorong sesi terminal yang ada ke web. Bendera `--remote` membuat sesi cloud baru untuk repositori saat ini Anda. [Aplikasi Desktop](/id/desktop#continue-in-another-surface) menyediakan menu Continue in yang dapat mengirim sesi lokal ke web.

573</Note>

574 

575### Dari terminal ke web

576 

577Mulai sesi cloud dari baris perintah dengan bendera `--remote`:

578 

579```bash theme={null}

580claude --remote "Fix the authentication bug in src/auth/login.ts"

581```

582 

583Ini membuat sesi cloud baru di claude.ai. Sesi mengkloning remote GitHub direktori saat ini Anda di cabang saat ini Anda, jadi dorong terlebih dahulu jika Anda memiliki komit lokal, karena VM mengkloning dari GitHub daripada mesin Anda. `--remote` bekerja dengan satu repositori pada satu waktu. Tugas berjalan di cloud sementara Anda terus bekerja secara lokal.

584 

585<Note>

586 `--remote` membuat sesi cloud. `--remote-control` tidak terkait: itu mengekspos sesi CLI lokal untuk pemantauan dari web. Lihat [Remote Control](/id/remote-control).

587</Note>

588 

589Gunakan `/tasks` di Claude Code CLI untuk memeriksa kemajuan, atau buka sesi di claude.ai atau aplikasi mobile Claude untuk berinteraksi langsung. Dari sana Anda dapat mengarahkan Claude, memberikan umpan balik, atau menjawab pertanyaan seperti percakapan lainnya.

590 

591#### Tips untuk tugas cloud

592 

593**Rencanakan secara lokal, jalankan dari jarak jauh**: untuk tugas kompleks, mulai Claude dalam plan mode untuk berkolaborasi pada pendekatan, kemudian kirim pekerjaan ke cloud:

594 

595```bash theme={null}

596claude --permission-mode plan

597```

598 

599Dalam plan mode, Claude membaca file, menjalankan perintah untuk menjelajahi, dan mengusulkan rencana tanpa mengedit kode sumber. Setelah Anda puas, simpan rencana ke repo, komit, dan dorong sehingga VM cloud dapat mengklonnya. Kemudian mulai sesi cloud untuk eksekusi otonom:

600 

601```bash theme={null}

602claude --remote "Execute the migration plan in docs/migration-plan.md"

603```

604 

605Pola ini memberi Anda kontrol atas strategi sambil membiarkan Claude mengeksekusi secara otonom di cloud.

606 

607**Rencanakan di cloud dengan ultraplan**: untuk menyusun dan meninjau rencana itu sendiri dalam sesi web, gunakan [ultraplan](/id/ultraplan). Claude menghasilkan rencana di Claude Code di web sementara Anda terus bekerja, kemudian Anda berkomentar pada bagian di browser Anda dan memilih untuk mengeksekusi dari jarak jauh atau mengirim rencana kembali ke terminal Anda.

608 

609**Jalankan tugas secara paralel**: setiap perintah `--remote` membuat sesi cloud sendiri yang berjalan secara independen. Anda dapat memulai beberapa tugas dan semuanya akan berjalan secara bersamaan dalam sesi terpisah:

610 

611```bash theme={null}

612claude --remote "Fix the flaky test in auth.spec.ts"

613claude --remote "Update the API documentation"

614claude --remote "Refactor the logger to use structured output"

615```

616 

617Pantau semua sesi dengan `/tasks` di Claude Code CLI. Ketika sesi selesai, Anda dapat membuat PR dari antarmuka web atau [teleport](#from-web-to-terminal) sesi ke terminal Anda untuk melanjutkan bekerja.

618 

619#### Kirim repositori lokal tanpa GitHub

620 

621Saat Anda menjalankan `claude --remote` dari repositori yang tidak terhubung ke GitHub, Claude Code membundel repositori lokal Anda dan mengunggahnya langsung ke sesi cloud. Bundle mencakup riwayat repositori lengkap Anda di semua cabang, ditambah perubahan yang tidak dikomit ke file yang dilacak.

622 

623Fallback ini diaktifkan secara otomatis saat akses GitHub tidak tersedia. Untuk memaksanya bahkan saat GitHub terhubung, atur `CCR_FORCE_BUNDLE=1`:

624 

625```bash theme={null}

626CCR_FORCE_BUNDLE=1 claude --remote "Run the test suite and fix any failures"

627```

628 

629Repositori yang dibundel harus memenuhi batas ini:

630 

631* Direktori harus berupa repositori git dengan setidaknya satu komit

632* Repositori yang dibundel harus di bawah 100 MB. Repositori yang lebih besar kembali ke bundling hanya cabang saat ini, kemudian ke snapshot kerja tunggal yang diperas, dan gagal hanya jika snapshot masih terlalu besar

633* File yang tidak dilacak tidak disertakan; jalankan `git add` pada file yang ingin dilihat sesi cloud

634* Sesi yang dibuat dari bundle tidak dapat didorong kembali ke remote kecuali Anda juga memiliki [autentikasi GitHub](#github-authentication-options) yang dikonfigurasi

635 

636### Dari web ke terminal

637 

638Tarik sesi cloud ke terminal Anda menggunakan salah satu dari ini:

639 

640* **Menggunakan `--teleport`**: dari baris perintah, jalankan `claude --teleport` untuk pemilih sesi interaktif, atau `claude --teleport <session-id>` untuk melanjutkan sesi tertentu secara langsung. Jika Anda memiliki perubahan yang tidak dikomit, Anda akan diminta untuk menyimpannya terlebih dahulu.

641* **Menggunakan `/teleport`**: di dalam sesi CLI yang ada, jalankan `/teleport` (atau `/tp`) untuk membuka pemilih sesi yang sama tanpa memulai ulang Claude Code.

642* **Dari `/tasks`**: jalankan `/tasks` untuk melihat sesi latar belakang Anda, kemudian tekan `t` untuk teleport ke salah satunya

643* **Dari antarmuka web**: pilih **Buka di CLI** untuk menyalin perintah yang dapat Anda tempel ke terminal Anda

644 

645Saat Anda teleport sesi, Claude memverifikasi Anda berada di repositori yang benar, mengambil dan checkout cabang dari sesi cloud, dan memuat riwayat percakapan lengkap ke terminal Anda.

646 

647`--teleport` berbeda dari `--resume`. `--resume` membuka kembali percakapan dari riwayat lokal mesin ini dan tidak mencantumkan sesi cloud; `--teleport` menarik sesi cloud dan cabangnya.

648 

649#### Persyaratan teleport

650 

651Teleport memeriksa persyaratan ini sebelum melanjutkan sesi. Jika ada persyaratan yang tidak terpenuhi, Anda akan melihat kesalahan atau diminta untuk menyelesaikan masalah.

652 

653| Persyaratan | Detail |

654| --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |

655| Status git bersih | Direktori kerja Anda harus tidak memiliki perubahan yang tidak dikomit. Teleport meminta Anda untuk menyimpan perubahan jika diperlukan. |

656| Repositori yang benar | Anda harus menjalankan `--teleport` dari checkout repositori yang sama, bukan fork. |

657| Cabang tersedia | Cabang dari sesi cloud harus telah didorong ke remote. Teleport secara otomatis mengambil dan checkout. |

658| Akun yang sama | Anda harus diautentikasi ke akun claude.ai yang sama yang digunakan dalam sesi cloud. |

659 

660#### `--teleport` tidak tersedia

661 

662Teleport memerlukan autentikasi langganan claude.ai. Jika Anda diautentikasi melalui kunci API, Bedrock, Vertex AI, atau Microsoft Foundry, jalankan `/login` untuk masuk dengan akun claude.ai Anda sebagai gantinya. Jika Anda sudah masuk melalui claude.ai dan `--teleport` masih tidak tersedia, organisasi Anda mungkin telah menonaktifkan sesi cloud.

663 

664## Bekerja dengan sesi

665 

666Sesi muncul di sidebar di claude.ai/code. Dari sana Anda dapat meninjau perubahan, berbagi dengan rekan kerja, mengarsipkan pekerjaan yang selesai, atau menghapus sesi secara permanen.

667 

668### Kelola konteks

669 

670Sesi cloud mendukung [perintah bawaan](/id/commands) yang menghasilkan output teks. Perintah yang membuka pemilih terminal interaktif, seperti `/model` atau `/config`, tidak tersedia.

671 

672Untuk manajemen konteks khususnya:

673 

674| Perintah | Bekerja di sesi cloud | Catatan |

675| :--------- | :-------------------- | :------------------------------------------------------------------------------------------------------------------------ |

676| `/compact` | Ya | Merangkum percakapan untuk membebaskan konteks. Menerima instruksi fokus opsional seperti `/compact keep the test output` |

677| `/context` | Ya | Menunjukkan apa yang saat ini ada di jendela konteks |

678| `/clear` | Tidak | Mulai sesi baru dari sidebar sebagai gantinya |

679 

680Auto-compaction berjalan secara otomatis saat jendela konteks mendekati kapasitas, sama seperti di CLI. Untuk memicunya lebih awal, atur [`CLAUDE_AUTOCOMPACT_PCT_OVERRIDE`](/id/env-vars) di [variabel lingkungan](#configure-your-environment) Anda. Misalnya, `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=70` mengompak pada kapasitas 70% daripada default \~95%. Untuk mengubah ukuran jendela efektif untuk perhitungan compaction, gunakan [`CLAUDE_CODE_AUTO_COMPACT_WINDOW`](/id/env-vars).

681 

682[Subagents](/id/sub-agents) bekerja dengan cara yang sama seperti secara lokal. Claude dapat menelurkan mereka dengan alat Task untuk mengalihkan penelitian atau pekerjaan paralel ke jendela konteks terpisah, menjaga percakapan utama lebih ringan. Subagents yang didefinisikan di `.claude/agents/` repo Anda diambil secara otomatis. [Tim agen](/id/agent-teams) dimatikan secara default tetapi dapat diaktifkan dengan menambahkan `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` ke [variabel lingkungan](#configure-your-environment) Anda.

683 

684### Tinjau perubahan

685 

686Setiap sesi menunjukkan indikator diff dengan baris yang ditambahkan dan dihapus, seperti `+42 -18`. Pilih untuk membuka tampilan diff, tinggalkan komentar inline pada baris tertentu, dan kirimkan ke Claude dengan pesan berikutnya. Lihat [Tinjau dan ulangi](/id/web-quickstart#review-and-iterate) untuk panduan lengkap termasuk pembuatan PR. Untuk membuat Claude memantau PR untuk kegagalan CI dan komentar ulasan secara otomatis, lihat [Auto-fix pull request](#auto-fix-pull-requests).

687 

688### Bagikan sesi

689 

690Untuk berbagi sesi, alihkan visibilitasnya sesuai dengan jenis akun di bawah ini. Setelah itu, bagikan tautan sesi apa adanya. Penerima melihat status terbaru saat mereka membuka tautan, tetapi tampilan mereka tidak diperbarui secara real-time.

691 

692#### Bagikan dari akun Enterprise atau Team

693 

694Untuk akun Enterprise dan Team, dua opsi visibilitas adalah **Private** dan **Team**. Visibilitas Team membuat sesi terlihat oleh anggota lain dari organisasi claude.ai Anda. Verifikasi akses repositori diaktifkan secara default, berdasarkan akun GitHub yang terhubung ke akun penerima Anda. Nama tampilan akun Anda terlihat oleh semua penerima dengan akses. Sesi [Claude in Slack](/id/slack) secara otomatis dibagikan dengan visibilitas Team.

695 

696#### Bagikan dari akun Max atau Pro

697 

698Untuk akun Max dan Pro, dua opsi visibilitas adalah **Private** dan **Public**. Visibilitas Public membuat sesi terlihat oleh pengguna mana pun yang masuk ke claude.ai.

699 

700Periksa sesi Anda untuk konten sensitif sebelum berbagi. Sesi dapat berisi kode dan kredensial dari repositori GitHub pribadi. Verifikasi akses repositori tidak diaktifkan secara default.

701 

702Untuk memerlukan penerima memiliki akses repositori, atau untuk menyembunyikan nama Anda dari sesi bersama, buka Settings > Claude Code > Sharing settings.

703 

704### Arsipkan sesi

705 

706Anda dapat mengarsipkan sesi untuk menjaga daftar sesi Anda tetap terorganisir. Sesi yang diarsipkan disembunyikan dari daftar sesi default tetapi dapat dilihat dengan memfilter sesi yang diarsipkan.

707 

708Untuk mengarsipkan sesi, arahkan ke sesi di sidebar dan pilih ikon arsip.

709 

710### Hapus sesi

711 

712Menghapus sesi secara permanen menghapus sesi dan datanya. Tindakan ini tidak dapat dibatalkan. Anda dapat menghapus sesi dengan dua cara:

713 

714* **Dari sidebar**: filter untuk sesi yang diarsipkan, kemudian arahkan ke sesi yang ingin Anda hapus dan pilih ikon hapus

715* **Dari menu sesi**: buka sesi, pilih dropdown di sebelah judul sesi, dan pilih **Hapus**

716 

717Anda akan diminta untuk mengonfirmasi sebelum sesi dihapus.

718 

719## Auto-fix pull request

720 

721Claude dapat memantau pull request dan secara otomatis merespons kegagalan CI dan komentar ulasan. Claude berlangganan aktivitas GitHub di PR, dan ketika pemeriksaan gagal atau pengulas meninggalkan komentar, Claude menyelidiki dan mendorong perbaikan jika ada yang jelas.

722 

723<Note>

724 Auto-fix memerlukan Claude GitHub App untuk diinstal di repositori Anda. Jika Anda belum melakukannya, instal dari [halaman GitHub App](https://github.com/apps/claude) atau saat diminta selama [setup](/id/web-quickstart#connect-github-and-create-an-environment).

725</Note>

726 

727Ada beberapa cara untuk mengaktifkan auto-fix tergantung di mana PR berasal dan perangkat apa yang Anda gunakan:

728 

729* **PR yang dibuat di Claude Code di web**: buka bilah status CI dan pilih **Auto-fix**

730* **Dari terminal Anda**: jalankan [`/autofix-pr`](/id/commands) saat berada di cabang PR. Claude Code mendeteksi PR terbuka dengan `gh`, menelurkan sesi web, dan mengaktifkan auto-fix dalam satu langkah

731* **Dari aplikasi mobile**: beri tahu Claude untuk auto-fix PR, misalnya "watch this PR and fix any CI failures or review comments"

732* **PR yang ada**: tempel URL PR ke sesi dan beri tahu Claude untuk auto-fix

733 

734### Bagaimana Claude merespons aktivitas PR

735 

736Saat auto-fix aktif, Claude menerima acara GitHub untuk PR termasuk komentar ulasan baru dan kegagalan pemeriksaan CI. Untuk setiap acara, Claude menyelidiki dan memutuskan cara melanjutkan:

737 

738* **Perbaikan yang jelas**: jika Claude yakin dengan perbaikan dan tidak bertentangan dengan instruksi sebelumnya, Claude membuat perubahan, mendorongnya, dan menjelaskan apa yang dilakukan dalam sesi

739* **Permintaan yang ambigu**: jika komentar pengulas dapat diinterpretasikan dengan beberapa cara atau melibatkan sesuatu yang secara arsitektur signifikan, Claude bertanya kepada Anda sebelum bertindak

740* **Acara duplikat atau tanpa tindakan**: jika acara adalah duplikat atau tidak memerlukan perubahan, Claude mencatatnya dalam sesi dan melanjutkan

741 

742Claude dapat membalas utas komentar ulasan di GitHub sebagai bagian dari penyelesaiannya. Balasan ini diposting menggunakan akun GitHub Anda, sehingga muncul di bawah nama pengguna Anda, tetapi setiap balasan diberi label sebagai berasal dari Claude Code sehingga pengulas tahu itu ditulis oleh agen dan bukan oleh Anda secara langsung.

743 

744<Warning>

745 Jika repositori Anda menggunakan otomasi yang dipicu komentar seperti Atlantis, Terraform Cloud, atau GitHub Actions kustom yang berjalan pada acara `issue_comment`, ketahui bahwa Claude dapat membalas atas nama Anda, yang dapat memicu alur kerja tersebut. Tinjau otomasi repositori Anda sebelum mengaktifkan auto-fix, dan pertimbangkan untuk menonaktifkan auto-fix untuk repositori di mana komentar PR dapat menerapkan infrastruktur atau menjalankan operasi istimewa.

746</Warning>

747 

748## Keamanan dan isolasi

749 

750Setiap sesi cloud dipisahkan dari mesin Anda dan dari sesi lain melalui beberapa lapisan:

751 

752* **Mesin virtual terisolasi**: setiap sesi berjalan di VM yang terisolasi dan dikelola Anthropic

753* **Kontrol akses jaringan**: akses jaringan dibatasi secara default, dan dapat dinonaktifkan. Saat berjalan dengan akses jaringan dinonaktifkan, Claude Code masih dapat berkomunikasi dengan API Anthropic, yang mungkin memungkinkan data keluar dari VM.

754* **Perlindungan kredensial**: kredensial sensitif seperti kredensial git atau kunci penandatanganan tidak pernah ada di dalam sandbox dengan Claude Code. Autentikasi ditangani melalui proxy aman menggunakan kredensial bersistem.

755* **Analisis aman**: kode dianalisis dan dimodifikasi dalam VM terisolasi sebelum membuat PR

756 

757## Batasan

758 

759Sebelum mengandalkan sesi cloud untuk alur kerja, pertimbangkan batasan ini:

760 

761* **Batas laju**: Claude Code di web berbagi batas laju dengan semua penggunaan Claude dan Claude Code lainnya dalam akun Anda. Menjalankan beberapa tugas secara paralel mengonsumsi lebih banyak batas laju secara proporsional. Tidak ada biaya komputasi terpisah untuk VM cloud.

762* **Autentikasi repositori**: Anda hanya dapat memindahkan sesi dari web ke lokal saat Anda diautentikasi ke akun yang sama

763* **Pembatasan platform**: kloning repositori dan pembuatan pull request memerlukan GitHub. Instans [GitHub Enterprise Server](/id/github-enterprise-server) yang di-host sendiri didukung untuk rencana Team dan Enterprise. Repositori GitLab, Bitbucket, dan non-GitHub lainnya dapat dikirim ke sesi cloud sebagai [bundle lokal](#send-local-repositories-without-github), tetapi sesi tidak dapat mendorong hasil kembali ke remote

764 

765## Sumber daya terkait

766 

767* [Ultraplan](/id/ultraplan): menyusun rencana di sesi cloud dan meninjau di browser Anda

768* [Ultrareview](/id/ultrareview): jalankan ulasan kode multi-agen mendalam di sandbox cloud

769* [Routines](/id/routines): otomatisasi pekerjaan pada jadwal, melalui panggilan API, atau sebagai respons terhadap acara GitHub

770* [Konfigurasi Hooks](/id/hooks): jalankan skrip pada acara siklus hidup sesi

771* [Referensi Pengaturan](/id/settings): semua opsi konfigurasi

772* [Keamanan](/id/security): jaminan isolasi dan penanganan data

773* [Penggunaan Data](/id/data-usage): apa yang Anthropic pertahankan dari sesi cloud

claude-directory.md +1583 −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# Jelajahi direktori .claude

6 

7> Tempat Claude Code membaca CLAUDE.md, settings.json, hooks, skills, commands, subagents, rules, dan auto memory. Jelajahi direktori .claude di proyek Anda dan ~/.claude di direktori home Anda.

8 

9export const ClaudeExplorer = () => {

10 const A = useMemo(() => ({href, children}) => <a href={href} style={{

11 color: 'var(--ce-accent)',

12 textDecoration: 'none',

13 borderBottom: '1px dotted var(--ce-accent)'

14 }}>{children}</a>, []);

15 const C = useMemo(() => ({children}) => <code style={{

16 fontFamily: 'var(--ce-mono)',

17 fontSize: '0.92em',

18 padding: '1px 4px',

19 borderRadius: '3px',

20 background: 'var(--ce-surface)',

21 border: '0.5px solid var(--ce-border-subtle)'

22 }}>{children}</code>, []);

23 const commandsNote = useMemo(() => <>Commands and skills are now the same mechanism. For new workflows, use <A href="/en/skills">skills/</A> instead: same <C>/name</C> invocation, plus you can bundle supporting files.</>, []);

24 const FILE_TREE = useMemo(() => ({

25 project: {

26 label: 'your-project/',

27 children: [{

28 id: 'claude-md',

29 label: 'CLAUDE.md',

30 type: 'file',

31 icon: 'md',

32 color: '#6A9BCC',

33 badge: 'committed',

34 oneLiner: 'Project instructions Claude reads every session',

35 when: 'Loaded into context at the start of every session',

36 description: 'Project-specific instructions that shape how Claude works in this repository. Put your conventions, common commands, and architectural context here so Claude operates with the same assumptions your team does.',

37 tips: ['Target under 200 lines. Longer files still load in full but may reduce adherence', <>CLAUDE.md loads into every session. If something only matters for specific tasks, move it to a <A href="/en/skills">skill</A> or a path-scoped <A href="/en/memory#organize-rules-with-claude/rules/">rule</A> so it loads only when needed</>, 'List the commands you run most, like build, test, and format, so Claude knows them without you spelling them out each time', <>Run <C>/memory</C> to open and edit CLAUDE.md from within a session</>, <>Also works at <C>.claude/CLAUDE.md</C> if you prefer to keep the project root clean</>],

38 exampleIntro: 'This example is for a TypeScript and React project. It lists the build and test commands, the framework conventions Claude should follow, and project-specific rules like export style and file layout.',

39 example: `# Project conventions

40 

41## Commands

42- Build: \`npm run build\`

43- Test: \`npm test\`

44- Lint: \`npm run lint\`

45 

46## Stack

47- TypeScript with strict mode

48- React 19, functional components only

49 

50## Rules

51- Named exports, never default exports

52- Tests live next to source: \`foo.ts\` -> \`foo.test.ts\`

53- All API routes return \`{ data, error }\` shape`,

54 docsLink: '/en/memory'

55 }, {

56 id: 'mcp-json',

57 label: '.mcp.json',

58 type: 'file',

59 icon: 'json',

60 color: '#9B7BC4',

61 badge: 'committed',

62 oneLiner: 'Project-scoped MCP servers, shared with your team',

63 when: <>Servers connect when the session begins. Tool schemas are deferred by default and load on demand via <A href="/en/mcp#scale-with-mcp-tool-search">tool search</A></>,

64 description: <>Configures Model Context Protocol (MCP) servers that give Claude access to external tools: databases, APIs, browsers, and more. This file holds the project-scoped servers your whole team uses. Personal servers you want to keep to yourself go in <C>~/.claude.json</C> instead.</>,

65 tips: [<>Use environment variable references for secrets: <C>{'${GITHUB_TOKEN}'}</C></>, <>Lives at the project root, not inside <C>.claude/</C></>, <>For servers only you need, run <C>claude mcp add --scope user</C>. This writes to <C>~/.claude.json</C> instead of <C>.mcp.json</C></>],

66 exampleIntro: <>This example configures the GitHub MCP server so Claude can read issues and open pull requests. The <C>{'${GITHUB_TOKEN}'}</C> reference is read from your shell environment when Claude Code starts the server, so the token never lands in the file.</>,

67 example: `{

68 "mcpServers": {

69 "github": {

70 "command": "npx",

71 "args": ["-y", "@modelcontextprotocol/server-github"],

72 "env": {

73 "GITHUB_TOKEN": "\${GITHUB_TOKEN}"

74 }

75 }

76 }

77}`,

78 docsLink: '/en/mcp'

79 }, {

80 id: 'worktreeinclude',

81 label: '.worktreeinclude',

82 type: 'file',

83 icon: 'md',

84 color: '#8FA876',

85 badge: 'committed',

86 oneLiner: 'Gitignored files to copy into new worktrees',

87 when: <>Read when Claude creates a git worktree via <C>--worktree</C>, the <C>EnterWorktree</C> tool, or subagent <C>isolation: worktree</C></>,

88 description: <>Lists gitignored files to copy from your main repository into each new worktree. Worktrees are fresh checkouts, so untracked files like <C>.env</C> are missing by default. Patterns here use <C>.gitignore</C> syntax. Only files that match a pattern and are also gitignored get copied, so tracked files are never duplicated.</>,

89 tips: [<>Lives at the project root, not inside <C>.claude/</C></>, <>Git-only: if you configure a <A href="/en/hooks#worktreecreate">WorktreeCreate hook</A> for a different VCS, this file is not read. Copy files inside your hook script instead</>, <>Also applies to parallel sessions in the <A href="/en/desktop#work-in-parallel-with-sessions">desktop app</A></>],

90 exampleIntro: 'This example copies your local environment files and a secrets config into every worktree Claude creates. Comments start with # and blank lines are ignored, same as .gitignore.',

91 example: `# Local environment

92.env

93.env.local

94 

95# API credentials

96config/secrets.json`,

97 docsLink: '/en/worktrees#copy-gitignored-files-into-worktrees'

98 }, {

99 id: 'dot-claude',

100 label: '.claude/',

101 type: 'folder',

102 icon: 'folder',

103 color: 'var(--ce-accent)',

104 oneLiner: 'Project-level configuration, rules, and extensions',

105 description: 'Everything Claude Code reads that is specific to this project. If you use git, commit most files here so your team shares them; a few, like settings.local.json, are automatically gitignored. Each file badge shows which.',

106 children: [{

107 id: 'settings-json',

108 label: 'settings.json',

109 type: 'file',

110 icon: 'json',

111 color: 'var(--ce-text-3)',

112 badge: 'committed',

113 oneLiner: 'Permissions, hooks, and configuration',

114 when: <>Overrides global <C>~/.claude/settings.json</C>. Local settings, CLI flags, and managed settings override this</>,

115 description: 'Settings that Claude Code applies directly. Permissions control which commands and tools Claude can use; hooks run your scripts at specific points in a session. Unlike CLAUDE.md, which Claude reads as guidance, these are enforced whether Claude follows them or not.',

116 contains: [<><A href="/en/permissions">permissions</A>: allow, deny, or prompt before Claude uses specific tools or commands</>, <><A href="/en/hooks">hooks</A>: run your own scripts on events like before a tool call or after a file edit</>, <><A href="/en/statusline">statusLine</A>: customize the line shown at the bottom while Claude works</>, <><A href="/en/settings#available-settings">model</A>: pick a default model for this project</>, <><A href="/en/settings#environment-variables">env</A>: environment variables set in every session</>, <><A href="/en/output-styles">outputStyle</A>: select a custom system-prompt style from output-styles/</>],

117 tips: [<>Bash permission patterns support wildcards: <C>Bash(npm test *)</C> matches any command starting with <C>npm test</C></>, <>Array settings like <C>permissions.allow</C> combine across all scopes; scalar settings like <C>model</C> use the most specific value</>],

118 exampleIntro: <>This example allows <C>npm test</C> and <C>npm run</C> commands without prompting, blocks <C>rm -rf</C>, and runs Prettier on files after Claude edits or writes them.</>,

119 example: `{

120 "permissions": {

121 "allow": [

122 "Bash(npm test *)",

123 "Bash(npm run *)"

124 ],

125 "deny": [

126 "Bash(rm -rf *)"

127 ]

128 },

129 "hooks": {

130 "PostToolUse": [{

131 "matcher": "Edit|Write",

132 "hooks": [{

133 "type": "command",

134 "command": "jq -r '.tool_input.file_path' | xargs npx prettier --write"

135 }]

136 }]

137 }

138}`,

139 docsLink: '/en/settings'

140 }, {

141 id: 'settings-local-json',

142 label: 'settings.local.json',

143 type: 'file',

144 icon: 'json',

145 color: 'var(--ce-text-3)',

146 badge: 'gitignored',

147 oneLiner: 'Your personal settings overrides for this project',

148 when: 'Highest of the user-editable settings files; CLI flags and managed settings still take precedence',

149 description: 'Personal settings that take precedence over the project defaults. Same JSON format as settings.json, but not committed. Use this when you need different permissions or defaults than the team config.',

150 tips: [<>Same schema as settings.json. Array settings like <C>permissions.allow</C> combine across scopes; scalar settings like <C>model</C> use the local value</>, <>Claude Code adds this file to <C>~/.config/git/ignore</C> the first time it writes one. If you use a custom <C>core.excludesFile</C>, add the pattern there too. To share the ignore rule with your team, also add it to the project <C>.gitignore</C></>],

151 exampleIntro: 'This example adds Docker permissions on top of whatever the team settings.json allows.',

152 example: `{

153 "permissions": {

154 "allow": [

155 "Bash(docker *)"

156 ]

157 }

158}`,

159 docsLink: '/en/settings'

160 }, {

161 id: 'rules',

162 label: 'rules/',

163 type: 'folder',

164 icon: 'folder',

165 color: '#9B7BC4',

166 oneLiner: 'Topic-scoped instructions, optionally gated by file paths',

167 when: <>Rules without <C>paths:</C> load at session start. Rules with <C>paths:</C> load when a matching file enters context</>,

168 description: [<>Project instructions split into topic files that can load conditionally based on file paths. A rule without <C>paths:</C> frontmatter loads at session start like CLAUDE.md; a rule with <C>paths:</C> loads only when Claude reads a matching file.</>, <>Like CLAUDE.md, rules are guidance Claude reads, not configuration Claude Code enforces. For guaranteed behavior use <A href="/en/hooks">hooks</A> or <A href="/en/permissions">permissions</A>.</>],

169 tips: [<>Use <C>paths:</C> frontmatter with globs to scope rules to directories or file types</>, <>Subdirectories work: <C>.claude/rules/frontend/react.md</C> is discovered automatically</>, 'When CLAUDE.md approaches 200 lines, start splitting into rules'],

170 docsLink: '/en/memory#organize-rules-with-claude/rules/',

171 children: [{

172 id: 'rule-testing',

173 label: 'testing.md',

174 type: 'file',

175 icon: 'md',

176 color: '#9B7BC4',

177 badge: 'committed',

178 oneLiner: 'Test conventions scoped to test files',

179 when: <>Loaded when Claude reads a file matching the <C>paths:</C> globs below</>,

180 description: <>An example rule that only loads when Claude is working on test files. The <C>paths:</C> globs in the frontmatter define which files trigger it; here, anything ending in .test.ts or .test.tsx. For other files, this rule is not loaded into context.</>,

181 example: `---

182paths:

183 - "**/*.test.ts"

184 - "**/*.test.tsx"

185---

186 

187# Testing Rules

188 

189- Use descriptive test names: "should [expected] when [condition]"

190- Mock external dependencies, not internal modules

191- Clean up side effects in afterEach`

192 }, {

193 id: 'rule-api',

194 label: 'api-design.md',

195 type: 'file',

196 icon: 'md',

197 color: '#9B7BC4',

198 badge: 'committed',

199 oneLiner: 'API conventions scoped to backend code',

200 when: <>Loaded when Claude reads a file matching the <C>paths:</C> glob below</>,

201 description: <>A second example showing a rule scoped to backend code. The <C>paths:</C> glob matches files under src/api/, so these conventions load only when Claude is editing API routes.</>,

202 example: `---

203paths:

204 - "src/api/**/*.ts"

205---

206 

207# API Design Rules

208 

209- All endpoints must validate input with Zod schemas

210- Return shape: { data: T } | { error: string }

211- Rate limit all public endpoints`

212 }]

213 }, {

214 id: 'skills',

215 label: 'skills/',

216 type: 'folder',

217 icon: 'folder',

218 color: '#D4A843',

219 oneLiner: 'Reusable prompts you or Claude invoke by name',

220 when: <>Invoked with <C>/skill-name</C> or when Claude matches the task to a skill</>,

221 description: <>Each skill is a folder with a SKILL.md file plus any supporting files it needs. By default, both you and Claude can invoke a skill. Use frontmatter to control that: <C>disable-model-invocation: true</C> for user-only workflows like <C>/deploy</C>, or <C>user-invocable: false</C> to hide from the <C>/</C> menu while Claude can still invoke it.</>,

222 tips: [<>Skills accept arguments: <C>/deploy staging</C> passes "staging" as <C>$ARGUMENTS</C>. Use <C>$0</C>, <C>$1</C>, and so on for positional access</>, <>The <C>description</C> frontmatter determines when Claude auto-invokes the skill</>, 'Bundle reference docs alongside SKILL.md. Claude knows the skill directory path and can read supporting files when you mention them'],

223 docsLink: '/en/skills',

224 children: [{

225 id: 'skill-review',

226 label: 'security-review/',

227 type: 'folder',

228 icon: 'folder',

229 color: '#D4A843',

230 oneLiner: 'A skill bundling SKILL.md with supporting files',

231 children: [{

232 id: 'skill-review-md',

233 label: 'SKILL.md',

234 type: 'file',

235 icon: 'md',

236 color: '#D4A843',

237 badge: 'committed',

238 oneLiner: 'Entrypoint: trigger, invocability, instructions',

239 when: <>User types <C>/security-review &lt;target&gt;</C>; Claude cannot auto-invoke this skill</>,

240 description: [<>This skill uses <C>disable-model-invocation: true</C> so only you can trigger it; Claude never invokes it on its own.</>, <>The <C>!`...`</C> line runs a shell command and injects its output into the prompt. <C>$ARGUMENTS</C> substitutes whatever you typed after the skill name. Claude sees the skill directory path, so mentioning a bundled file like checklist.md lets Claude read it.</>],

241 example: `---

242description: Reviews code changes for security vulnerabilities, authentication gaps, and injection risks

243disable-model-invocation: true

244argument-hint: <branch-or-path>

245---

246 

247## Diff to review

248 

249!\`git diff $ARGUMENTS\`

250 

251Audit the changes above for:

252 

2531. Injection vulnerabilities (SQL, XSS, command)

2542. Authentication and authorization gaps

2553. Hardcoded secrets or credentials

256 

257Use checklist.md in this skill directory for the full review checklist.

258 

259Report findings with severity ratings and remediation steps.`

260 }, {

261 id: 'skill-checklist',

262 label: 'checklist.md',

263 type: 'file',

264 icon: 'md',

265 color: '#D4A843',

266 badge: 'committed',

267 oneLiner: 'Supporting file bundled with the skill',

268 when: 'Claude reads it on demand while running the skill',

269 description: <>Skills can bundle any supporting files: reference docs, templates, scripts. The skill directory path is prepended to SKILL.md, so Claude can read bundled files by name. For scripts in bash injection commands, use the <C>{'${CLAUDE_SKILL_DIR}'}</C> placeholder.</>,

270 example: `# Security Review Checklist

271 

272## Input Validation

273- [ ] All user input sanitized before DB queries

274- [ ] File upload MIME types validated

275- [ ] Path traversal prevented on file operations

276 

277## Authentication

278- [ ] JWT tokens expire after 24 hours

279- [ ] API keys stored in environment variables

280- [ ] Passwords hashed with bcrypt or argon2`

281 }]

282 }]

283 }, {

284 id: 'commands',

285 label: 'commands/',

286 type: 'folder',

287 icon: 'folder',

288 color: '#788C5D',

289 oneLiner: <>Single-file prompts invoked with <C>/name</C></>,

290 note: commandsNote,

291 when: <>User types <C>/command-name</C></>,

292 description: <>A file at <C>commands/deploy.md</C> creates <C>/deploy</C> the same way a skill at <C>skills/deploy/SKILL.md</C> does, and both can be auto-invoked by Claude. Skills use a directory with SKILL.md, letting you bundle reference docs, templates, or scripts alongside the prompt.</>,

293 tips: [<>Use <C>$ARGUMENTS</C> in the file to accept parameters: <C>/fix-issue 123</C></>, 'If a skill and command share a name, the skill takes precedence', 'New commands should usually be skills instead; commands remain supported'],

294 docsLink: '/en/skills',

295 children: [{

296 id: 'cmd-example',

297 label: 'fix-issue.md',

298 type: 'file',

299 icon: 'md',

300 color: '#788C5D',

301 badge: 'committed',

302 oneLiner: <>Invoked as <C>/fix-issue &lt;number&gt;</C></>,

303 note: commandsNote,

304 description: [<>An example command for fixing a GitHub issue. Type <C>/fix-issue 123</C> and the <C>!`...`</C> line runs <C>gh issue view 123</C> in your shell, injecting the output into the prompt before Claude sees it.</>, <><C>$ARGUMENTS</C> substitutes whatever you typed after the command name. For positional access, use <C>$0</C> <C>$1</C> and so on.</>],

305 example: `---

306argument-hint: <issue-number>

307---

308 

309!\`gh issue view $ARGUMENTS\`

310 

311Investigate and fix the issue above.

312 

3131. Trace the bug to its root cause

3142. Implement the fix

3153. Write or update tests

3164. Summarize what you changed and why`

317 }]

318 }, {

319 id: 'output-styles',

320 label: 'output-styles/',

321 type: 'folder',

322 icon: 'folder',

323 color: '#5AA7A7',

324 oneLiner: 'Project-scoped output styles, if your team shares any',

325 when: 'Applied at session start when selected via the outputStyle setting',

326 description: <>Output styles are usually personal, so most live in <C>~/.claude/output-styles/</C>. Put one here if your team shares a style, like a review mode everyone uses. See <A href="#ce-global-output-styles">the Global tab</A> for the full explanation and example.</>,

327 docsLink: '/en/output-styles',

328 children: []

329 }, {

330 id: 'agents',

331 label: 'agents/',

332 type: 'folder',

333 icon: 'folder',

334 color: '#C46686',

335 oneLiner: 'Specialized subagents with their own context window',

336 when: 'Runs in its own context window when you or Claude invoke it',

337 description: 'Each markdown file defines a subagent with its own system prompt, tool access, and optionally its own model. Subagents run in a fresh context window, keeping the main conversation clean. Useful for parallel work or isolated tasks.',

338 tips: ['Each agent gets a fresh context window, separate from your main session', <>Restrict tool access per agent with the <C>tools:</C> frontmatter field</>, 'Type @ and pick an agent from the autocomplete to delegate directly'],

339 docsLink: '/en/sub-agents',

340 children: [{

341 id: 'agent-reviewer',

342 label: 'code-reviewer.md',

343 type: 'file',

344 icon: 'md',

345 color: '#C46686',

346 badge: 'committed',

347 oneLiner: 'Subagent for isolated code review',

348 when: 'Claude spawns it for review tasks, or you @-mention it from the autocomplete',

349 description: <>An example subagent restricted to read-only tools. The <C>description</C> frontmatter tells Claude when to delegate to it automatically; <C>tools:</C> limits it to Read, Grep, and Glob so it can inspect code but never edit. The body becomes the subagent's system prompt.</>,

350 example: `---

351name: code-reviewer

352description: Reviews code for correctness, security, and maintainability

353tools: Read, Grep, Glob

354---

355 

356You are a senior code reviewer. Review for:

357 

3581. Correctness: logic errors, edge cases, null handling

3592. Security: injection, auth bypass, data exposure

3603. Maintainability: naming, complexity, duplication

361 

362Every finding must include a concrete fix.`

363 }]

364 }, {

365 id: 'agent-memory',

366 label: 'agent-memory/',

367 type: 'folder',

368 icon: 'folder',

369 color: '#C46686',

370 badge: 'committed',

371 autogen: true,

372 oneLiner: 'Subagent persistent memory, separate from your main session auto memory',

373 when: 'First 200 lines (capped at 25KB) of MEMORY.md loaded into the subagent system prompt when it runs',

374 description: <>Subagents with <C>memory: project</C> in their frontmatter get a dedicated memory directory here. This is distinct from your <A href="/en/memory#auto-memory">main session auto memory</A> at <C>~/.claude/projects/</C>: each subagent reads and writes its own MEMORY.md, not yours.</>,

375 tips: [<>Only created for subagents that set the <C>memory:</C> frontmatter field</>, <>This directory holds project-scoped subagent memory, meant to be shared with your team. To keep memory out of version control use <C>memory: local</C>, which writes to <C>.claude/agent-memory-local/</C> instead. For cross-project memory use <C>memory: user</C>, which writes to <C>~/.claude/agent-memory/</C></>, <>The main session auto memory is a different feature; see <C>~/.claude/projects/</C> in the Global tab</>],

376 docsLink: '/en/sub-agents#enable-persistent-memory',

377 children: [{

378 id: 'agent-memory-sub',

379 label: '<agent-name>/',

380 type: 'folder',

381 icon: 'folder',

382 color: '#C46686',

383 autogen: true,

384 children: [{

385 id: 'agent-memory-md',

386 label: 'MEMORY.md',

387 type: 'file',

388 icon: 'md',

389 color: '#C46686',

390 badge: 'committed',

391 autogen: true,

392 oneLiner: 'The subagent writes and maintains this file automatically',

393 when: 'Loaded into the subagent system prompt when the subagent starts',

394 description: <>Works the same as your <A href="/en/memory#auto-memory">main auto memory</A>: the subagent creates and updates this file itself. You do not write it. The subagent reads it at the start of each task and writes back what it learns.</>,

395 example: `# code-reviewer memory

396 

397## Patterns seen

398- Project uses custom Result<T, E> type, not exceptions

399- Auth middleware expects Bearer token in Authorization header

400- Tests use factory functions in test/factories/

401 

402## Recurring issues

403- Missing null checks on API responses (src/api/*)

404- Unhandled promise rejections in background jobs`

405 }]

406 }]

407 }]

408 }]

409 },

410 global: {

411 label: '~/',

412 children: [{

413 id: 'claude-json',

414 label: '.claude.json',

415 type: 'file',

416 icon: 'json',

417 color: 'var(--ce-text-3)',

418 badge: 'local',

419 oneLiner: 'App state and UI preferences',

420 when: <>Read at session start for your preferences and MCP servers. Claude Code writes back to it when you change settings in <C>/config</C> or approve trust prompts</>,

421 description: <>Holds state that does not belong in settings.json: theme, OAuth session, per-project trust decisions, your personal MCP servers, and UI toggles. Mostly managed through <C>/config</C> rather than editing directly.</>,

422 tips: [<>IDE toggles like <C>autoConnectIde</C> and <C>externalEditorContext</C> live here, not in settings.json</>, <>The <C>projects</C> key tracks per-project state like trust-dialog acceptance and last-session metrics. Permission rules you approve in-session go to <C>.claude/settings.local.json</C> instead</>, <>MCP servers here are yours only: user scope applies across all projects, local scope is per-project but not committed. Team-shared servers go in <C>.mcp.json</C> at the project root instead</>],

423 example: `{

424 "autoConnectIde": true,

425 "externalEditorContext": true,

426 "mcpServers": {

427 "my-tools": {

428 "command": "npx",

429 "args": ["-y", "@example/mcp-server"]

430 }

431 }

432}`,

433 docsLink: '/en/settings#global-config-settings'

434 }, {

435 id: 'global-dot-claude',

436 label: '.claude/',

437 type: 'folder',

438 icon: 'folder',

439 color: 'var(--ce-accent)',

440 oneLiner: 'Your personal configuration across all projects',

441 description: 'The global counterpart to your project .claude/ directory. Files here apply to every project you work in and are never committed to any repository.',

442 children: [{

443 id: 'global-claude-md',

444 label: 'CLAUDE.md',

445 type: 'file',

446 icon: 'md',

447 color: '#6A9BCC',

448 badge: 'local',

449 oneLiner: 'Personal preferences across every project',

450 when: 'Loaded at the start of every session, in every project',

451 description: 'Your global instruction file. Loaded alongside the project CLAUDE.md at session start, so both are in context together. When instructions conflict, project-level instructions take priority. Keep this to preferences that apply everywhere: response style, commit format, personal conventions.',

452 tips: ['Keep it short since it loads into context for every project, alongside that project\'s own CLAUDE.md', 'Good for response style, commit format, and personal conventions'],

453 example: `# Global preferences

454 

455- Keep explanations concise

456- Use conventional commit format

457- Show the terminal command to verify changes

458- Prefer composition over inheritance`,

459 docsLink: '/en/memory'

460 }, {

461 id: 'global-settings',

462 label: 'settings.json',

463 type: 'file',

464 icon: 'json',

465 color: 'var(--ce-text-3)',

466 badge: 'local',

467 oneLiner: 'Default settings for all projects',

468 when: 'Your defaults. Project and local settings.json override any keys you also set there',

469 description: [<>Same keys as project <C>settings.json</C>: permissions, hooks, model, environment variables, and the rest. Put settings here that you want in every project, like permissions you always allow, a preferred model, or a notification hook that runs regardless of which project you're in.</>, <>Settings follow a precedence order: project <C>settings.json</C> overrides any matching keys you set here. This is different from CLAUDE.md, where global and project files are both loaded into context rather than merged key by key.</>],

470 example: `{

471 "permissions": {

472 "allow": [

473 "Bash(git log *)",

474 "Bash(git diff *)"

475 ]

476 }

477}`,

478 docsLink: '/en/settings'

479 }, {

480 id: 'keybindings',

481 label: 'keybindings.json',

482 type: 'file',

483 icon: 'json',

484 color: 'var(--ce-text-3)',

485 badge: 'local',

486 oneLiner: 'Custom keyboard shortcuts',

487 when: 'Read at session start and hot-reloaded when you edit the file',

488 description: <>Rebind keyboard shortcuts in the interactive CLI. Run <C>/keybindings</C> to create or open this file with a schema reference. Ctrl+C, Ctrl+D, Ctrl+M, and Caps Lock are reserved and cannot be rebound.</>,

489 exampleIntro: <>This example binds <C>Ctrl+E</C> to open your external editor and unbinds <C>Ctrl+U</C> by setting it to <C>null</C>. The <C>context</C> field scopes bindings to a specific part of the CLI, here the main chat input.</>,

490 example: `{

491 "$schema": "https://www.schemastore.org/claude-code-keybindings.json",

492 "$docs": "https://code.claude.com/docs/en/keybindings",

493 "bindings": [

494 {

495 "context": "Chat",

496 "bindings": {

497 "ctrl+e": "chat:externalEditor",

498 "ctrl+u": null

499 }

500 }

501 ]

502}`,

503 docsLink: '/en/keybindings'

504 }, {

505 id: 'themes',

506 label: 'themes/',

507 type: 'folder',

508 icon: 'folder',

509 color: '#5AA7A7',

510 oneLiner: 'Custom color themes',

511 when: <>Read at session start and hot-reloaded when files change. Listed in <C>/theme</C></>,

512 description: <>Each <C>.json</C> file defines a custom color theme: a built-in <C>base</C> preset plus an <C>overrides</C> map of color tokens. Create one interactively with <C>/theme</C> or write the JSON by hand. Selecting a custom theme stores <C>custom:&lt;slug&gt;</C> as your theme preference.</>,

513 example: `{

514 "name": "Dracula",

515 "base": "dark",

516 "overrides": {

517 "claude": "#bd93f9",

518 "error": "#ff5555",

519 "success": "#50fa7b"

520 }

521}`,

522 docsLink: '/en/terminal-config#create-a-custom-theme',

523 children: []

524 }, {

525 id: 'global-projects',

526 label: 'projects/',

527 type: 'folder',

528 icon: 'folder',

529 color: '#E8A45C',

530 autogen: true,

531 oneLiner: "Auto memory: Claude's notes to itself, per project",

532 when: 'MEMORY.md loaded at session start; topic files read on demand',

533 description: 'Auto memory lets Claude accumulate knowledge across sessions without you writing anything. Claude saves notes as it works: build commands, debugging insights, architecture notes. Each project gets its own memory directory keyed by the repository path.',

534 tips: [<>On by default. Toggle with <C>/memory</C> or <C>autoMemoryEnabled</C> in settings</>, 'MEMORY.md is the index loaded each session. The first 200 lines, or 25KB, whichever comes first, are read', 'Topic files like debugging.md are read on demand, not at startup', 'These are plain markdown. Edit or delete them anytime'],

535 docsLink: '/en/memory#auto-memory',

536 children: [{

537 id: 'memory-dir',

538 label: '<project>/memory/',

539 type: 'folder',

540 icon: 'folder',

541 color: '#E8A45C',

542 autogen: true,

543 oneLiner: "Claude's accumulated knowledge for one project",

544 children: [{

545 id: 'memory-md',

546 label: 'MEMORY.md',

547 type: 'file',

548 icon: 'md',

549 color: '#E8A45C',

550 badge: 'local',

551 autogen: true,

552 oneLiner: 'Claude writes and maintains this file automatically',

553 when: 'First 200 lines (capped at 25KB) loaded at session start',

554 description: 'Claude creates and updates this file as it works; you do not write it yourself. It acts as an index that Claude reads at the start of every session, pointing to topic files for detail. You can edit or delete it, but Claude will keep updating it.',

555 example: `# Memory Index

556 

557## Project

558- [build-and-test.md](build-and-test.md): npm run build (~45s), Vitest, dev server on 3001

559- [architecture.md](architecture.md): API client singleton, refresh-token auth

560 

561## Reference

562- [debugging.md](debugging.md): auth token rotation and DB connection troubleshooting`,

563 docsLink: '/en/memory'

564 }, {

565 id: 'memory-topic',

566 label: 'debugging.md',

567 type: 'file',

568 icon: 'md',

569 color: '#E8A45C',

570 badge: 'local',

571 autogen: true,

572 oneLiner: 'Topic notes Claude writes when MEMORY.md gets long',

573 when: 'Claude reads this when a related task comes up',

574 description: 'An example of a topic file Claude creates when MEMORY.md grows too long. Claude picks the filename based on what it splits out: debugging.md, architecture.md, build-commands.md, or similar. You never create these yourself. Claude reads a topic file back only when the current task relates to it.',

575 example: `---

576name: Debugging patterns

577description: Auth token rotation and database connection troubleshooting for this project

578type: reference

579---

580 

581## Auth Token Issues

582- Refresh token rotation: old token invalidated immediately

583- If 401 after refresh: check clock skew between client and server

584 

585## Database Connection Drops

586- Connection pool: max 10 in dev, 50 in prod

587- Always check \`docker compose ps\` first`

588 }]

589 }]

590 }, {

591 id: 'global-rules',

592 label: 'rules/',

593 type: 'folder',

594 icon: 'folder',

595 color: '#9B7BC4',

596 oneLiner: 'User-level rules that apply to every project',

597 when: <>Rules without <C>paths:</C> load at session start. Rules with <C>paths:</C> load when a matching file enters context</>,

598 description: 'Same as project .claude/rules/ but applies everywhere. Use this for conventions you want across all your work, like personal code style or commit message format.',

599 docsLink: '/en/memory#organize-rules-with-claude/rules/',

600 children: []

601 }, {

602 id: 'global-skills',

603 label: 'skills/',

604 type: 'folder',

605 icon: 'folder',

606 color: '#D4A843',

607 oneLiner: 'Personal skills available in every project',

608 when: <>Invoked with <C>/skill-name</C> in any project</>,

609 description: 'Skills you built for yourself that work everywhere. Same structure as project skills: each is a folder with SKILL.md, scoped to your user account instead of a single project.',

610 docsLink: '/en/skills',

611 children: []

612 }, {

613 id: 'global-commands',

614 label: 'commands/',

615 type: 'folder',

616 icon: 'folder',

617 color: '#788C5D',

618 oneLiner: 'Personal single-file commands available in every project',

619 note: commandsNote,

620 when: <>User types <C>/command-name</C> in any project</>,

621 description: 'Same as project commands/ but scoped to your user account. Each markdown file becomes a command available everywhere.',

622 docsLink: '/en/skills',

623 children: []

624 }, {

625 id: 'global-output-styles',

626 label: 'output-styles/',

627 type: 'folder',

628 icon: 'folder',

629 color: '#5AA7A7',

630 oneLiner: 'Custom system-prompt sections that adjust how Claude works',

631 when: 'Applied at session start when selected via the outputStyle setting',

632 description: [<>Each markdown file defines an output style: a section appended to the system prompt that, by default, also drops the built-in software-engineering task instructions. Use this to adapt Claude Code for uses beyond coding, or to add teaching or review modes.</>, <>Select a built-in or custom style with <C>/config</C> or the <C>outputStyle</C> key in settings. Styles here are available in every project; project-level styles with the same name take precedence.</>],

633 tips: ['Built-in styles Explanatory and Learning are included with Claude Code; custom styles go here', <>Set <C>keep-coding-instructions: true</C> in frontmatter to keep the default task instructions alongside your additions</>, 'Changes take effect on the next session since the system prompt is fixed at startup for caching'],

634 docsLink: '/en/output-styles',

635 children: [{

636 id: 'output-style-example',

637 label: 'teaching.md',

638 type: 'file',

639 icon: 'md',

640 color: '#5AA7A7',

641 badge: 'local',

642 oneLiner: 'Example style that adds explanations and leaves small changes for you',

643 when: <>Active when <C>outputStyle</C> in settings is set to <C>teaching</C></>,

644 description: <>This style appends instructions to the system prompt: Claude adds a "Why this approach" note after each task and leaves TODO(human) markers for changes under 10 lines instead of writing them itself. Select it by setting <C>outputStyle</C> to the filename without .md, or to the <C>name</C> field if you set one in frontmatter.</>,

645 example: `---

646description: Explains reasoning and asks you to implement small pieces

647keep-coding-instructions: true

648---

649 

650After completing each task, add a brief "Why this approach" note

651explaining the key design decision.

652 

653When a change is under 10 lines, ask the user to implement it

654themselves by leaving a TODO(human) marker instead of writing it.`

655 }]

656 }, {

657 id: 'global-agents',

658 label: 'agents/',

659 type: 'folder',

660 icon: 'folder',

661 color: '#C46686',

662 oneLiner: 'Personal subagents available in every project',

663 when: 'Claude delegates or you @-mention in any project',

664 description: 'Subagents defined here are available across all your projects. Same format as project agents.',

665 docsLink: '/en/sub-agents',

666 children: []

667 }, {

668 id: 'global-agent-memory',

669 label: 'agent-memory/',

670 type: 'folder',

671 icon: 'folder',

672 color: '#C46686',

673 autogen: true,

674 oneLiner: <>Persistent memory for subagents with <C>memory: user</C></>,

675 when: 'Loaded into the subagent system prompt when the subagent starts',

676 description: <>Subagents with <C>memory: user</C> in their frontmatter store knowledge here that persists across all projects. For project-scoped subagent memory, see <C>.claude/agent-memory/</C> instead.</>,

677 docsLink: '/en/sub-agents#enable-persistent-memory',

678 children: []

679 }]

680 }]

681 }

682 }), []);

683 const BADGE_STYLES = useMemo(() => ({

684 committed: {

685 bg: 'rgba(85,138,66,0.08)',

686 color: 'var(--ce-badge-committed)',

687 border: 'rgba(85,138,66,0.15)',

688 label: 'committed'

689 },

690 gitignored: {

691 bg: 'rgba(217,119,87,0.06)',

692 color: 'var(--ce-badge-gitignored)',

693 border: 'rgba(217,119,87,0.15)',

694 label: 'gitignored'

695 },

696 local: {

697 bg: 'rgba(115,114,108,0.06)',

698 color: 'var(--ce-badge-local)',

699 border: 'rgba(115,114,108,0.12)',

700 label: 'local only'

701 },

702 autogen: {

703 bg: 'rgba(232,164,92,0.1)',

704 color: 'var(--ce-badge-autogen)',

705 border: 'rgba(232,164,92,0.2)',

706 label: 'Claude writes'

707 }

708 }), []);

709 const allNodes = useMemo(() => {

710 const flatten = (nodes, acc, path, parentId) => {

711 for (const node of nodes) {

712 const nextPath = [...path, node.label];

713 acc[node.id] = {

714 ...node,

715 path: nextPath,

716 parentId

717 };

718 if (node.children) flatten(node.children, acc, nextPath, node.id);

719 }

720 return acc;

721 };

722 const project = flatten(FILE_TREE.project.children, {}, [FILE_TREE.project.label]);

723 const global = flatten(FILE_TREE.global.children, {}, [FILE_TREE.global.label]);

724 for (const id in project) project[id].root = 'project';

725 for (const id in global) global[id].root = 'global';

726 return {

727 ...project,

728 ...global

729 };

730 }, [FILE_TREE]);

731 const allFolderIds = useMemo(() => Object.keys(allNodes).filter(id => allNodes[id].type === 'folder'), [allNodes]);

732 const DEFAULT_EXPANDED = ['dot-claude', 'rules', 'skills', 'skill-review', 'commands', 'agents', 'agent-memory', 'agent-memory-sub', 'global-dot-claude', 'global-output-styles', 'global-projects', 'memory-dir'];

733 const [mounted, setMounted] = useState(false);

734 const [activeRoot, setActiveRoot] = useState('project');

735 const [selectedId, setSelectedId] = useState('claude-md');

736 const [expandedFolders, setExpandedFolders] = useState(() => new Set(DEFAULT_EXPANDED));

737 const [forceMobile, setForceMobile] = useState(false);

738 const [copiedId, setCopiedId] = useState(null);

739 const [isFullscreen, setIsFullscreen] = useState(false);

740 const copyTimeoutRef = useRef(null);

741 const rootRef = useRef(null);

742 useEffect(() => {

743 setMounted(true);

744 const applyHash = scroll => {

745 const hash = window.location.hash.slice(1);

746 if (!hash.startsWith('ce-')) return;

747 const id = hash.slice(3);

748 const node = allNodes[id];

749 if (!node) return;

750 setActiveRoot(node.root);

751 setSelectedId(id);

752 setExpandedFolders(new Set(allFolderIds));

753 if (scroll && rootRef.current) rootRef.current.scrollIntoView({

754 behavior: 'smooth',

755 block: 'start'

756 });

757 };

758 applyHash(false);

759 const onHashChange = () => applyHash(true);

760 const onFsChange = () => setIsFullscreen(!!document.fullscreenElement);

761 window.addEventListener('hashchange', onHashChange);

762 document.addEventListener('fullscreenchange', onFsChange);

763 return () => {

764 if (copyTimeoutRef.current) clearTimeout(copyTimeoutRef.current);

765 window.removeEventListener('hashchange', onHashChange);

766 document.removeEventListener('fullscreenchange', onFsChange);

767 };

768 }, []);

769 useEffect(() => {

770 if (!mounted || !rootRef.current) return;

771 const hash = window.location.hash.slice(1);

772 if (hash.startsWith('ce-') && allNodes[hash.slice(3)]) {

773 rootRef.current.scrollIntoView({

774 behavior: 'smooth',

775 block: 'start'

776 });

777 }

778 }, [mounted]);

779 if (!mounted) return null;

780 const selected = allNodes[selectedId];

781 const tree = FILE_TREE[activeRoot];

782 const isCopied = copiedId === selected.id;

783 const toggleFolder = id => {

784 const next = new Set(expandedFolders);

785 next.has(id) ? next.delete(id) : next.add(id);

786 setExpandedFolders(next);

787 };

788 const switchRoot = root => {

789 if (root === activeRoot) return;

790 setActiveRoot(root);

791 const firstId = FILE_TREE[root].children[0].id;

792 setSelectedId(firstId);

793 try {

794 history.replaceState(null, '', '#ce-' + firstId);

795 } catch (e) {}

796 };

797 const toggleFullscreen = () => {

798 if (!rootRef.current) return;

799 if (document.fullscreenElement) document.exitFullscreen(); else rootRef.current.requestFullscreen().catch(() => {});

800 };

801 const selectNode = n => {

802 setSelectedId(n.id);

803 if (n.type === 'folder' && !expandedFolders.has(n.id)) toggleFolder(n.id);

804 try {

805 history.replaceState(null, '', '#ce-' + n.id);

806 } catch (e) {}

807 };

808 const iconBtn = {

809 width: 28,

810 flexShrink: 0,

811 borderRadius: '6px',

812 border: 'none',

813 cursor: 'pointer',

814 background: 'transparent',

815 color: 'var(--ce-text-4)',

816 display: 'flex',

817 alignItems: 'center',

818 justifyContent: 'center'

819 };

820 const visibleFolderIds = allFolderIds.filter(id => allNodes[id].root === activeRoot);

821 const allExpanded = visibleFolderIds.every(id => expandedFolders.has(id));

822 const toggleAllFolders = () => {

823 const next = new Set(expandedFolders);

824 visibleFolderIds.forEach(id => allExpanded ? next.delete(id) : next.add(id));

825 setExpandedFolders(next);

826 };

827 const onTreeKeyDown = e => {

828 if (!['ArrowDown', 'ArrowUp', 'ArrowRight', 'ArrowLeft'].includes(e.key)) return;

829 const visible = [];

830 const walk = nodes => {

831 for (const n of nodes) {

832 visible.push(n.id);

833 if (n.children && expandedFolders.has(n.id)) walk(n.children);

834 }

835 };

836 walk(tree.children);

837 const i = visible.indexOf(selectedId);

838 if (i === -1) return;

839 e.preventDefault();

840 if (e.key === 'ArrowDown' && i < visible.length - 1) selectNode(allNodes[visible[i + 1]]); else if (e.key === 'ArrowUp' && i > 0) selectNode(allNodes[visible[i - 1]]); else if (e.key === 'ArrowRight' && selected.type === 'folder') {

841 if (!expandedFolders.has(selectedId)) toggleFolder(selectedId); else if (selected.children && selected.children.length) selectNode(allNodes[selected.children[0].id]);

842 } else if (e.key === 'ArrowLeft') {

843 if (selected.type === 'folder' && expandedFolders.has(selectedId)) toggleFolder(selectedId); else if (selected.parentId) selectNode(allNodes[selected.parentId]);

844 }

845 };

846 const copyExample = (id, text) => {

847 const done = () => {

848 setCopiedId(id);

849 if (copyTimeoutRef.current) clearTimeout(copyTimeoutRef.current);

850 copyTimeoutRef.current = setTimeout(() => setCopiedId(null), 2000);

851 };

852 const fallback = () => {

853 const ta = document.createElement('textarea');

854 ta.value = text;

855 ta.style.position = 'fixed';

856 ta.style.opacity = '0';

857 document.body.appendChild(ta);

858 ta.select();

859 try {

860 if (document.execCommand('copy')) done();

861 } catch (e) {}

862 document.body.removeChild(ta);

863 };

864 if (navigator.clipboard) {

865 navigator.clipboard.writeText(text).then(done, fallback);

866 } else {

867 fallback();

868 }

869 };

870 const renderIcon = (icon, color, size) => {

871 const sz = size || 14;

872 if (icon === 'folder') {

873 return <svg width={sz} height={sz} viewBox="0 0 14 14" fill="none">

874 <path d="M1.5 3.5a1 1 0 0 1 1-1h2.6l1 1.2h5.4a1 1 0 0 1 1 1v5.8a1 1 0 0 1-1 1h-9a1 1 0 0 1-1-1V3.5z" fill={color} fillOpacity="0.15" stroke={color} strokeWidth="1" />

875 </svg>;

876 }

877 if (icon === 'json') {

878 return <svg width={sz} height={sz} viewBox="0 0 14 14" fill="none">

879 <rect x="2" y="1.5" width="10" height="11" rx="1.5" fill={color} fillOpacity="0.15" stroke={color} strokeWidth="1" />

880 <text x="7" y="9" fontSize="6" fontFamily="monospace" fill={color} textAnchor="middle" fontWeight="700">{'{}'}</text>

881 </svg>;

882 }

883 return <svg width={sz} height={sz} viewBox="0 0 14 14" fill="none">

884 <rect x="2" y="1.5" width="10" height="11" rx="1.5" fill={color} fillOpacity="0.15" stroke={color} strokeWidth="1" />

885 <line x1="4.5" y1="5" x2="9.5" y2="5" stroke={color} strokeWidth="1" />

886 <line x1="4.5" y1="7" x2="9.5" y2="7" stroke={color} strokeWidth="1" />

887 <line x1="4.5" y1="9" x2="8" y2="9" stroke={color} strokeWidth="1" />

888 </svg>;

889 };

890 const renderNode = (node, depth) => {

891 const isFolder = node.type === 'folder';

892 const isExpanded = expandedFolders.has(node.id);

893 const isSelected = selectedId === node.id;

894 return <div key={node.id}>

895 <button role="treeitem" tabIndex={-1} onClick={() => selectNode(node)} aria-selected={isSelected} aria-expanded={isFolder ? isExpanded : undefined} style={{

896 display: 'flex',

897 alignItems: 'center',

898 gap: '5px',

899 width: '100%',

900 padding: `4px 8px 4px ${8 + depth * 16}px`,

901 background: isSelected ? 'var(--ce-accent-bg)' : 'transparent',

902 borderTop: 'none',

903 borderRight: 'none',

904 borderBottom: 'none',

905 borderLeft: isSelected ? '2px solid var(--ce-accent)' : '2px solid transparent',

906 outline: 'none',

907 cursor: 'pointer',

908 textAlign: 'left',

909 fontFamily: 'var(--ce-mono)',

910 fontSize: '13.5px',

911 color: isSelected ? 'var(--ce-accent)' : 'var(--ce-text-2)',

912 fontWeight: isSelected ? 550 : 400,

913 transition: 'all 0.1s'

914 }}>

915 {isFolder ? <span onClick={e => {

916 e.stopPropagation();

917 toggleFolder(node.id);

918 }} style={{

919 fontSize: '14px',

920 color: 'var(--ce-text-4)',

921 width: '20px',

922 height: '20px',

923 display: 'inline-flex',

924 alignItems: 'center',

925 justifyContent: 'center',

926 cursor: 'pointer',

927 borderRadius: '4px',

928 marginLeft: '-6px',

929 flexShrink: 0

930 }} onMouseEnter={e => {

931 e.currentTarget.style.background = 'var(--ce-arrow-hover)';

932 e.currentTarget.style.color = 'var(--ce-text-2)';

933 }} onMouseLeave={e => {

934 e.currentTarget.style.background = 'transparent';

935 e.currentTarget.style.color = 'var(--ce-text-4)';

936 }}>{isExpanded ? '▾' : '▸'}</span> : <span style={{

937 width: '14px',

938 flexShrink: 0

939 }} />}

940 {renderIcon(node.icon, node.color)}

941 <span style={{

942 flex: 1,

943 overflow: 'hidden',

944 textOverflow: 'ellipsis',

945 whiteSpace: 'nowrap'

946 }}>{node.label}</span>

947 {node.badge && BADGE_STYLES[node.badge] && <span title={BADGE_STYLES[node.badge].label} style={{

948 width: 6,

949 height: 6,

950 borderRadius: '50%',

951 background: BADGE_STYLES[node.badge].color,

952 flexShrink: 0,

953 opacity: 0.7

954 }} />}

955 </button>

956 {isFolder && isExpanded && node.children && <div role="group">{node.children.map(child => renderNode(child, depth + 1))}</div>}

957 </div>;

958 };

959 return <>

960 <style>{`

961 .ce-root {

962 --ce-mono: var(--font-mono, ui-monospace, monospace);

963 --ce-accent: #D97757;

964 --ce-accent-bg: rgba(217,119,87,0.06);

965 --ce-accent-border: rgba(217,119,87,0.12);

966 --ce-bg: #fff;

967 --ce-surface: #FAFAF7;

968 --ce-surface-hover: #F0EEE6;

969 --ce-border: #E8E6DC;

970 --ce-border-subtle: #F0EEE6;

971 --ce-text: #141413;

972 --ce-text-2: #5E5D59;

973 --ce-text-3: #73726C;

974 --ce-text-4: #9C9A92;

975 --ce-text-5: #B8B6AE;

976 --ce-sep: #D1CFC5;

977 --ce-code-header: #F5F4ED;

978 --ce-code-bg: #1A1918;

979 --ce-arrow-hover: rgba(0,0,0,0.08);

980 --ce-badge-committed: #3d6b2e;

981 --ce-badge-gitignored: #b85c3a;

982 --ce-badge-local: #5e5d59;

983 --ce-badge-autogen: #b07520;

984 --ce-when-text: #4a7fb5;

985 }

986 .dark .ce-root {

987 --ce-bg: #1a1918;

988 --ce-surface: #232221;

989 --ce-surface-hover: #2e2d2b;

990 --ce-border: #3a3936;

991 --ce-border-subtle: #2e2d2b;

992 --ce-text: #e8e6dc;

993 --ce-text-2: #c4c2b8;

994 --ce-text-3: #9c9a92;

995 --ce-text-4: #73726c;

996 --ce-text-5: #5e5d59;

997 --ce-sep: #4a4946;

998 --ce-code-header: #2e2d2b;

999 --ce-code-bg: #0d0d0c;

1000 --ce-arrow-hover: rgba(255,255,255,0.08);

1001 --ce-badge-committed: #6fa85c;

1002 --ce-badge-gitignored: #e08a60;

1003 --ce-badge-local: #9c9a92;

1004 --ce-badge-autogen: #e8a45c;

1005 --ce-when-text: #8bb4e0;

1006 }

1007 .ce-mobile-fallback { display: none; border: 1px solid rgba(0,0,0,0.1); background: rgba(0,0,0,0.03); }

1008 .dark .ce-mobile-fallback { border-color: rgba(255,255,255,0.15); background: rgba(255,255,255,0.04); }

1009 @media (max-width: 700px) {

1010 .ce-root:not(.ce-force) { display: none !important; }

1011 .ce-mobile-fallback { display: block; }

1012 }

1013 `}</style>

1014 {!forceMobile && <div className="ce-mobile-fallback" style={{

1015 padding: '14px 16px',

1016 borderRadius: '8px',

1017 fontSize: '14px'

1018 }}>

1019 The interactive explorer works best on a larger screen. See the <a href="#file-reference" style={{

1020 color: '#D97757'

1021 }}>file reference table</a> below, or <button onClick={() => setForceMobile(true)} style={{

1022 border: 'none',

1023 background: 'none',

1024 padding: 0,

1025 color: '#D97757',

1026 textDecoration: 'underline',

1027 cursor: 'pointer',

1028 font: 'inherit'

1029 }}>show the explorer anyway</button>.

1030 </div>}

1031 <div ref={rootRef} className={forceMobile ? 'ce-root ce-force' : 'ce-root'} style={{

1032 borderRadius: isFullscreen ? 0 : '12px',

1033 border: '1px solid var(--ce-border)',

1034 background: 'var(--ce-bg)',

1035 display: 'flex',

1036 alignItems: 'stretch',

1037 overflow: 'hidden',

1038 fontFamily: 'var(--font-sans, -apple-system, sans-serif)',

1039 ...isFullscreen && ({

1040 height: '100vh'

1041 })

1042 }}>

1043 {}

1044 <div style={{

1045 width: 'min(240px, 35%)',

1046 minWidth: '180px',

1047 flexShrink: 0,

1048 borderRight: '1px solid var(--ce-border-subtle)',

1049 background: 'var(--ce-surface)',

1050 display: 'flex',

1051 flexDirection: 'column'

1052 }}>

1053 <div style={{

1054 padding: '8px 8px 4px',

1055 borderBottom: '1px solid var(--ce-border-subtle)',

1056 display: 'flex',

1057 gap: '4px'

1058 }}>

1059 {['project', 'global'].map(root => <button key={root} onClick={() => switchRoot(root)} style={{

1060 flex: 1,

1061 padding: '6px 0',

1062 borderRadius: '6px',

1063 border: 'none',

1064 cursor: 'pointer',

1065 fontFamily: 'var(--ce-mono)',

1066 fontSize: '11.5px',

1067 background: activeRoot === root ? 'var(--ce-accent-bg)' : 'transparent',

1068 color: activeRoot === root ? 'var(--ce-accent)' : 'var(--ce-text-4)',

1069 fontWeight: activeRoot === root ? 600 : 430

1070 }}>

1071 {root === 'project' ? 'Project' : 'Global (~/)'}

1072 </button>)}

1073 <button onClick={toggleAllFolders} title={allExpanded ? 'Collapse all' : 'Expand all'} style={{

1074 ...iconBtn,

1075 fontSize: 11

1076 }}>

1077 {allExpanded ? '⊟' : '⊞'}

1078 </button>

1079 <button onClick={toggleFullscreen} title={isFullscreen ? 'Exit fullscreen' : 'Fullscreen'} style={{

1080 ...iconBtn,

1081 fontSize: 13

1082 }}>

1083 {isFullscreen ? '⤡' : '⛶'}

1084 </button>

1085 </div>

1086 <div role="tree" aria-label="Configuration files" tabIndex={0} onKeyDown={onTreeKeyDown} style={{

1087 padding: '6px 0',

1088 overflowY: 'auto',

1089 flex: 1,

1090 outline: 'none'

1091 }}>

1092 {tree.children.map(node => renderNode(node, 0))}

1093 </div>

1094 </div>

1095 

1096 {}

1097 <div style={{

1098 flex: 1,

1099 minWidth: 0,

1100 padding: '20px 24px',

1101 minHeight: '400px',

1102 overflowY: 'auto'

1103 }}>

1104 <span aria-live="polite" style={{

1105 position: 'absolute',

1106 width: 1,

1107 height: 1,

1108 overflow: 'hidden',

1109 clip: 'rect(0 0 0 0)'

1110 }}>{selected.label} selected</span>

1111 {}

1112 <div style={{

1113 fontFamily: 'var(--ce-mono)',

1114 fontSize: '11px',

1115 color: 'var(--ce-text-4)',

1116 marginBottom: '10px',

1117 cursor: 'default'

1118 }}>

1119 {selected.path.map((seg, i) => <span key={i}>

1120 <span style={{

1121 color: i === selected.path.length - 1 ? 'var(--ce-accent)' : 'var(--ce-text-4)'

1122 }}>{seg.replace(/\/$/, '')}</span>

1123 {i < selected.path.length - 1 && <span style={{

1124 color: 'var(--ce-sep)'

1125 }}> / </span>}

1126 </span>)}

1127 </div>

1128 

1129 {}

1130 <div style={{

1131 display: 'flex',

1132 alignItems: 'flex-start',

1133 gap: '10px',

1134 marginBottom: '10px'

1135 }}>

1136 <span style={{

1137 flexShrink: 0,

1138 display: 'flex'

1139 }}>{renderIcon(selected.icon, selected.color, 24)}</span>

1140 <div style={{

1141 flex: 1,

1142 minWidth: 0

1143 }}>

1144 <div style={{

1145 fontSize: '22px',

1146 fontWeight: 600,

1147 color: 'var(--ce-text)',

1148 letterSpacing: '-0.3px',

1149 lineHeight: '26px'

1150 }}>{selected.label}</div>

1151 {selected.oneLiner && <div style={{

1152 fontSize: '15px',

1153 color: 'var(--ce-text-3)',

1154 marginTop: '3px'

1155 }}>{selected.oneLiner}</div>}

1156 </div>

1157 <div style={{

1158 display: 'flex',

1159 gap: '4px',

1160 flexShrink: 0

1161 }}>

1162 {[selected.autogen && 'autogen', selected.badge].filter(Boolean).map(k => {

1163 const s = BADGE_STYLES[k];

1164 if (!s) return null;

1165 return <span key={k} style={{

1166 fontFamily: 'var(--ce-mono)',

1167 fontSize: '10px',

1168 fontWeight: 600,

1169 textTransform: 'uppercase',

1170 letterSpacing: '0.3px',

1171 padding: '2px 6px',

1172 borderRadius: '4px',

1173 background: s.bg,

1174 color: s.color,

1175 border: `0.5px solid ${s.border}`

1176 }}>{s.label}</span>;

1177 })}

1178 </div>

1179 </div>

1180 

1181 {}

1182 {selected.note && <div style={{

1183 padding: '10px 12px',

1184 borderRadius: '8px',

1185 marginBottom: '14px',

1186 background: 'rgba(217,119,87,0.06)',

1187 border: '1px solid rgba(217,119,87,0.2)',

1188 borderLeft: '3px solid var(--ce-accent)',

1189 fontSize: '15px',

1190 color: 'var(--ce-text-2)',

1191 lineHeight: 1.6

1192 }}>

1193 {selected.note}

1194 </div>}

1195 

1196 {}

1197 {selected.when && <div style={{

1198 padding: '8px 12px',

1199 borderRadius: '6px',

1200 background: 'rgba(106,155,204,0.06)',

1201 border: '0.5px solid rgba(106,155,204,0.12)',

1202 fontSize: '15px',

1203 color: 'var(--ce-when-text)',

1204 marginBottom: '16px'

1205 }}>

1206 <div style={{

1207 fontSize: '10px',

1208 fontWeight: 700,

1209 textTransform: 'uppercase',

1210 letterSpacing: '0.4px',

1211 opacity: 0.65,

1212 marginBottom: '3px'

1213 }}>When it loads</div>

1214 <div style={{

1215 fontWeight: 500

1216 }}>{selected.when}</div>

1217 </div>}

1218 

1219 {}

1220 {selected.description && <div style={{

1221 fontSize: '16px',

1222 color: 'var(--ce-text-2)',

1223 lineHeight: 1.65,

1224 marginBottom: '16px'

1225 }}>

1226 {Array.isArray(selected.description) ? selected.description.map((para, i) => <div key={i} style={{

1227 marginBottom: i < selected.description.length - 1 ? '12px' : 0

1228 }}>{para}</div>) : selected.description}

1229 </div>}

1230 

1231 {}

1232 {selected.contains && selected.contains.length > 0 && <div style={{

1233 marginBottom: '16px'

1234 }}>

1235 <div style={{

1236 fontSize: '11px',

1237 fontWeight: 700,

1238 color: 'var(--ce-text-4)',

1239 textTransform: 'uppercase',

1240 letterSpacing: '0.4px',

1241 marginBottom: '8px'

1242 }}>Common keys</div>

1243 {selected.contains.map((item, i) => <div key={i} style={{

1244 display: 'flex',

1245 gap: '7px',

1246 fontSize: '15px',

1247 color: 'var(--ce-text-2)',

1248 lineHeight: 1.5,

1249 marginBottom: '5px'

1250 }}>

1251 <span style={{

1252 fontSize: '7px',

1253 color: 'var(--ce-text-4)',

1254 marginTop: '6px'

1255 }}>●</span>

1256 <span>{item}</span>

1257 </div>)}

1258 </div>}

1259 

1260 {}

1261 {selected.tips && selected.tips.length > 0 && <div style={{

1262 padding: '12px 14px',

1263 borderRadius: '8px',

1264 background: 'var(--ce-surface)',

1265 border: '1px solid var(--ce-border-subtle)',

1266 marginBottom: '16px'

1267 }}>

1268 <div style={{

1269 fontSize: '11px',

1270 fontWeight: 700,

1271 color: 'var(--ce-accent)',

1272 textTransform: 'uppercase',

1273 letterSpacing: '0.4px',

1274 marginBottom: '6px'

1275 }}>Tips</div>

1276 {selected.tips.map((tip, i) => <div key={i} style={{

1277 display: 'flex',

1278 gap: '7px',

1279 fontSize: '14.5px',

1280 color: 'var(--ce-text-2)',

1281 marginBottom: i < selected.tips.length - 1 ? '5px' : 0

1282 }}>

1283 <span style={{

1284 fontSize: '7px',

1285 color: 'var(--ce-accent)',

1286 marginTop: '6px'

1287 }}>●</span>

1288 <span>{tip}</span>

1289 </div>)}

1290 </div>}

1291 

1292 {}

1293 {selected.example && <div style={{

1294 marginBottom: '16px'

1295 }}>

1296 {selected.exampleIntro && <div style={{

1297 fontSize: '15px',

1298 color: 'var(--ce-text-2)',

1299 lineHeight: 1.6,

1300 marginBottom: '10px'

1301 }}>

1302 {selected.exampleIntro}

1303 </div>}

1304 <div style={{

1305 display: 'flex',

1306 justifyContent: 'space-between',

1307 alignItems: 'center',

1308 padding: '6px 10px',

1309 background: 'var(--ce-code-header)',

1310 border: '1px solid var(--ce-border)',

1311 borderRadius: '8px 8px 0 0'

1312 }}>

1313 <span style={{

1314 fontFamily: 'var(--ce-mono)',

1315 fontSize: '11px',

1316 fontWeight: 600,

1317 color: 'var(--ce-text-3)'

1318 }}>{selected.label}</span>

1319 <button onClick={() => copyExample(selected.id, selected.example)} style={{

1320 padding: '3px 8px',

1321 borderRadius: '4px',

1322 fontSize: '11px',

1323 fontWeight: 600,

1324 cursor: 'pointer',

1325 transition: 'all 0.15s',

1326 background: isCopied ? 'rgba(85,138,66,0.08)' : 'var(--ce-code-header)',

1327 border: isCopied ? '0.5px solid rgba(85,138,66,0.2)' : '0.5px solid var(--ce-border)',

1328 color: isCopied ? '#558A42' : 'var(--ce-text-3)'

1329 }}>

1330 {isCopied ? '✓ Copied' : 'Copy'}

1331 </button>

1332 </div>

1333 <pre style={{

1334 margin: 0,

1335 padding: '12px 14px',

1336 background: 'var(--ce-code-bg)',

1337 color: '#E8E6DC',

1338 fontFamily: 'var(--ce-mono)',

1339 fontSize: '13px',

1340 lineHeight: 1.65,

1341 borderRadius: '0 0 8px 8px',

1342 overflowX: 'auto',

1343 whiteSpace: 'pre'

1344 }}>{selected.example}</pre>

1345 </div>}

1346 

1347 {}

1348 {selected.docsLink && <a href={selected.docsLink} style={{

1349 display: 'inline-flex',

1350 padding: '5px 12px',

1351 borderRadius: '6px',

1352 background: 'var(--ce-accent-bg)',

1353 border: '1px solid var(--ce-accent-border)',

1354 color: 'var(--ce-accent)',

1355 fontSize: '12px',

1356 fontWeight: 600,

1357 textDecoration: 'none'

1358 }}>Full docs →</a>}

1359 

1360 {}

1361 {selected.children && selected.children.length > 0 && <div style={{

1362 marginTop: '20px'

1363 }}>

1364 <div style={{

1365 fontSize: '11px',

1366 fontWeight: 700,

1367 color: 'var(--ce-text-4)',

1368 textTransform: 'uppercase',

1369 letterSpacing: '0.4px',

1370 marginBottom: '8px'

1371 }}>Contents</div>

1372 <div style={{

1373 display: 'flex',

1374 flexDirection: 'column',

1375 gap: '4px'

1376 }}>

1377 {selected.children.map(child => <button key={child.id} onClick={() => selectNode(child)} style={{

1378 display: 'flex',

1379 alignItems: 'center',

1380 gap: '8px',

1381 padding: '6px 8px',

1382 width: '100%',

1383 background: 'var(--ce-surface)',

1384 borderRadius: '6px',

1385 border: 'none',

1386 cursor: 'pointer',

1387 textAlign: 'left',

1388 transition: 'background 0.1s'

1389 }} onMouseEnter={e => e.currentTarget.style.background = 'var(--ce-surface-hover)'} onMouseLeave={e => e.currentTarget.style.background = 'var(--ce-surface)'}>

1390 {renderIcon(child.icon, child.color, 13)}

1391 <span style={{

1392 fontFamily: 'var(--ce-mono)',

1393 fontSize: '12px',

1394 color: 'var(--ce-text-2)'

1395 }}>{child.label}</span>

1396 {child.oneLiner && <span style={{

1397 fontSize: '11px',

1398 color: 'var(--ce-text-4)',

1399 overflow: 'hidden',

1400 textOverflow: 'ellipsis',

1401 whiteSpace: 'nowrap'

1402 }}>{child.oneLiner}</span>}

1403 </button>)}

1404 </div>

1405 </div>}

1406 </div>

1407 </div>

1408 </>;

1409};

1410 

1411Claude Code membaca instruksi, pengaturan, skills, subagents, dan memory dari direktori proyek Anda dan dari `~/.claude` di direktori home Anda. Commit file proyek ke git untuk membagikannya dengan tim Anda; file di `~/.claude` adalah konfigurasi pribadi yang berlaku di semua proyek Anda.

1412 

1413Di Windows, `~/.claude` diselesaikan menjadi `%USERPROFILE%\.claude`. Jika Anda menetapkan [`CLAUDE_CONFIG_DIR`](/id/env-vars), setiap jalur `~/.claude` di halaman ini berada di bawah direktori itu sebagai gantinya.

1414 

1415Sebagian besar pengguna hanya mengedit `CLAUDE.md` dan `settings.json`. Sisa direktori bersifat opsional: tambahkan skills, rules, atau subagents sesuai kebutuhan Anda.

1416 

1417## Jelajahi direktori

1418 

1419Klik file di pohon untuk melihat apa yang dilakukan masing-masing, kapan dimuat, dan contohnya.

1420 

1421<ClaudeExplorer />

1422 

1423## Apa yang tidak ditampilkan

1424 

1425Penjelajah mencakup file yang Anda buat dan edit. Beberapa file terkait berada di tempat lain:

1426 

1427| File | Lokasi | Tujuan |

1428| ----------------------- | ------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1429| `managed-settings.json` | Tingkat sistem, bervariasi menurut OS | Pengaturan yang diberlakukan perusahaan yang tidak dapat Anda ganti. Lihat [pengaturan yang dikelola server](/id/server-managed-settings). |

1430| `CLAUDE.local.md` | Akar proyek | Preferensi pribadi Anda untuk proyek ini, dimuat bersama CLAUDE.md. Buat secara manual dan tambahkan ke `.gitignore`. |

1431| Plugin yang diinstal | `~/.claude/plugins` | Marketplace yang dikloning, versi plugin yang diinstal, dan data per-plugin, dikelola oleh perintah `claude plugin`. Versi yatim piatu dihapus 7 hari setelah pembaruan atau penghapusan plugin. Lihat [plugin caching](/id/plugins-reference#plugin-caching-and-file-resolution). |

1432 

1433`~/.claude` juga menyimpan data yang ditulis Claude Code saat Anda bekerja: transkrip, riwayat prompt, snapshot file, cache, dan log. Lihat [data aplikasi](#application-data) di bawah.

1434 

1435## Pilih file yang tepat

1436 

1437Berbagai jenis kustomisasi berada di file yang berbeda. Gunakan tabel ini untuk menemukan di mana perubahan harus dilakukan.

1438 

1439| Anda ingin | Edit | Cakupan | Referensi |

1440| :--------------------------------------------------------------- | :----------------------------------------- | :----------------- | :------------------------------------------------- |

1441| Berikan Claude konteks proyek dan konvensi | `CLAUDE.md` | proyek atau global | [Memory](/id/memory) |

1442| Izinkan atau blokir tool call tertentu | `settings.json` `permissions` atau `hooks` | proyek atau global | [Permissions](/id/permissions), [Hooks](/id/hooks) |

1443| Jalankan skrip sebelum atau sesudah tool call | `settings.json` `hooks` | proyek atau global | [Hooks](/id/hooks) |

1444| Atur variabel lingkungan untuk sesi | `settings.json` `env` | proyek atau global | [Settings](/id/settings#available-settings) |

1445| Simpan penggantian pribadi di luar git | `settings.local.json` | proyek saja | [Settings scopes](/id/settings#settings-files) |

1446| Tambahkan prompt atau kemampuan yang Anda panggil dengan `/name` | `skills/<name>/SKILL.md` | proyek atau global | [Skills](/id/skills) |

1447| Tentukan subagent khusus dengan tools-nya sendiri | `agents/*.md` | proyek atau global | [Subagents](/id/sub-agents) |

1448| Hubungkan tools eksternal melalui MCP | `.mcp.json` | proyek saja | [MCP](/id/mcp) |

1449| Ubah cara Claude memformat respons | `output-styles/*.md` | proyek atau global | [Output styles](/id/output-styles) |

1450 

1451## Referensi file

1452 

1453Tabel ini mencantumkan setiap file yang dicakup penjelajah. File dengan cakupan proyek berada di repo Anda di bawah `.claude/` (atau di akar untuk `CLAUDE.md`, `.mcp.json`, dan `.worktreeinclude`). File dengan cakupan global berada di `~/.claude/` dan berlaku di semua proyek.

1454 

1455<Note>

1456 Beberapa hal dapat mengganti apa yang Anda masukkan dalam file ini:

1457 

1458 * [Pengaturan yang dikelola](/id/server-managed-settings) yang digunakan oleh organisasi Anda memiliki prioritas di atas segalanya

1459 * Bendera CLI seperti `--permission-mode` atau `--settings` mengganti `settings.json` untuk sesi itu

1460 * Beberapa variabel lingkungan memiliki prioritas di atas pengaturan yang setara, tetapi ini bervariasi: periksa [referensi variabel lingkungan](/id/env-vars) untuk masing-masing

1461 

1462 Lihat [prioritas pengaturan](/id/settings#settings-precedence) untuk urutan lengkapnya.

1463</Note>

1464 

1465Klik nama file untuk membuka node itu di penjelajah di atas.

1466 

1467| File | Cakupan | Commit | Apa yang dilakukan | Referensi |

1468| --------------------------------------------------- | ----------------- | ------ | ------------------------------------------------------------------------------ | -------------------------------------------------------------------- |

1469| [`CLAUDE.md`](#ce-claude-md) | Proyek dan global | ✓ | Instruksi dimuat setiap sesi | [Memory](/id/memory) |

1470| [`rules/*.md`](#ce-rules) | Proyek dan global | ✓ | Instruksi dengan cakupan topik, opsional gated path | [Rules](/id/memory#organize-rules-with-claude/rules/) |

1471| [`settings.json`](#ce-settings-json) | Proyek dan global | ✓ | Izin, hooks, variabel env, default model | [Settings](/id/settings) |

1472| [`settings.local.json`](#ce-settings-local-json) | Proyek saja | | Penggantian pribadi Anda, auto-gitignored | [Settings scopes](/id/settings#settings-files) |

1473| [`.mcp.json`](#ce-mcp-json) | Proyek saja | ✓ | Server MCP yang dibagikan tim | [MCP scopes](/id/mcp#mcp-installation-scopes) |

1474| [`.worktreeinclude`](#ce-worktreeinclude) | Proyek saja | ✓ | File yang diabaikan untuk disalin ke worktrees baru | [Worktrees](/id/common-workflows#copy-gitignored-files-to-worktrees) |

1475| [`skills/<name>/SKILL.md`](#ce-skills) | Proyek dan global | ✓ | Prompt yang dapat digunakan kembali dipanggil dengan `/name` atau auto-invoked | [Skills](/id/skills) |

1476| [`commands/*.md`](#ce-commands) | Proyek dan global | ✓ | Prompt file tunggal; mekanisme yang sama dengan skills | [Skills](/id/skills) |

1477| [`output-styles/*.md`](#ce-output-styles) | Proyek dan global | ✓ | Bagian prompt sistem khusus | [Output styles](/id/output-styles) |

1478| [`agents/*.md`](#ce-agents) | Proyek dan global | ✓ | Definisi subagent dengan prompt dan tools mereka sendiri | [Subagents](/id/sub-agents) |

1479| [`agent-memory/<name>/`](#ce-agent-memory) | Proyek dan global | ✓ | Memory persisten untuk subagents | [Persistent memory](/id/sub-agents#enable-persistent-memory) |

1480| [`~/.claude.json`](#ce-claude-json) | Global saja | | Status aplikasi, OAuth, toggle UI, server MCP pribadi | [Global config](/id/settings#global-config-settings) |

1481| [`projects/<project>/memory/`](#ce-global-projects) | Global saja | | Auto memory: catatan Claude untuk dirinya sendiri di seluruh sesi | [Auto memory](/id/memory#auto-memory) |

1482| [`keybindings.json`](#ce-keybindings) | Global saja | | Pintasan keyboard khusus | [Keybindings](/id/keybindings) |

1483| [`themes/*.json`](#ce-themes) | Global saja | | Tema warna khusus | [Custom themes](/id/terminal-config#create-a-custom-theme) |

1484 

1485## Troubleshoot konfigurasi

1486 

1487Jika pengaturan, hook, atau file tidak berlaku, lihat [Debug konfigurasi Anda](/id/debug-your-config) untuk perintah inspeksi dan tabel pencarian berdasarkan gejala.

1488 

1489## Data aplikasi

1490 

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

1492 

1493### Dibersihkan secara otomatis

1494 

1495File di jalur di bawah dihapus saat startup setelah berusia lebih dari [`cleanupPeriodDays`](/id/settings#available-settings). Default adalah 30 hari.

1496 

1497| Jalur di bawah `~/.claude/` | Konten |

1498| -------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |

1499| `projects/<project>/<session>.jsonl` | Transkrip percakapan lengkap: setiap pesan, tool call, dan tool result |

1500| `projects/<project>/<session>/tool-results/` | Output tool besar yang tumpah ke file terpisah |

1501| `file-history/<session>/` | Snapshot pra-edit file yang diubah Claude, digunakan untuk [checkpoint restore](/id/checkpointing) |

1502| `plans/` | File rencana yang ditulis selama [plan mode](/id/permission-modes#analyze-before-you-edit-with-plan-mode) |

1503| `debug/` | Log debug per-sesi, ditulis hanya saat Anda memulai dengan `--debug` atau menjalankan `/debug` |

1504| `paste-cache/`, `image-cache/` | Konten paste besar dan gambar yang dilampirkan |

1505| `session-env/` | Metadata lingkungan per-sesi |

1506| `tasks/` | Daftar tugas per-sesi yang ditulis oleh task tools |

1507| `shell-snapshots/` | Lingkungan shell yang ditangkap digunakan oleh Bash tool. Dihapus saat keluar dengan bersih. Sweep membersihkan yang tertinggal setelah crash. |

1508| `backups/` | Salinan `~/.claude.json` dengan stempel waktu yang diambil sebelum migrasi konfigurasi |

1509 

1510### Disimpan sampai Anda menghapusnya

1511 

1512Jalur berikut tidak tercakup oleh pembersihan otomatis dan bertahan selamanya.

1513 

1514| Jalur di bawah `~/.claude/` | Konten |

1515| --------------------------- | ---------------------------------------------------------------------------------------------------- |

1516| `history.jsonl` | Setiap prompt yang Anda ketik, dengan timestamp dan jalur proyek. Digunakan untuk recall panah atas. |

1517| `stats-cache.json` | Hitungan token dan biaya agregat yang ditampilkan oleh `/usage` |

1518| `todos/` | Daftar tugas per-sesi warisan. Tidak lagi ditulis oleh versi saat ini; aman untuk dihapus. |

1519 

1520File cache dan lock kecil lainnya muncul tergantung fitur mana yang Anda gunakan dan aman untuk dihapus.

1521 

1522### Penyimpanan plaintext

1523 

1524Transkrip dan riwayat tidak dienkripsi saat istirahat. Izin file OS adalah satu-satunya perlindungan. Jika tool membaca file `.env` atau perintah mencetak kredensial, nilai itu ditulis ke `projects/<project>/<session>.jsonl`. Untuk mengurangi paparan:

1525 

1526* Turunkan `cleanupPeriodDays` untuk mempersingkat berapa lama transkrip disimpan

1527* Atur variabel lingkungan [`CLAUDE_CODE_SKIP_PROMPT_HISTORY`](/id/env-vars) untuk melewati penulisan transkrip dan riwayat prompt dalam mode apa pun. Dalam mode non-interaktif, Anda dapat meneruskan `--no-session-persistence` bersama `-p`, atau atur `persistSession: false` di Agent SDK.

1528* Gunakan [aturan izin](/id/permissions) untuk menolak pembacaan file kredensial

1529 

1530### Hapus data lokal

1531 

1532Jalankan `claude project purge` untuk menghapus status yang Claude Code simpan untuk satu proyek:

1533 

1534* Transkrip dan memori otomatis di bawah `projects/`

1535* Entri `tasks/`, `debug/`, dan `file-history/` per-sesi

1536* Baris prompt yang cocok di `history.jsonl`

1537* Entri proyek di `~/.claude.json`

1538 

1539Perintah mencetak rencana penghapusan lengkap dan meminta konfirmasi sebelum menghapus apa pun.

1540 

1541Pratinjau rencana tanpa menghapus apa pun:

1542 

1543```bash theme={null}

1544claude project purge ~/work/my-repo --dry-run

1545```

1546 

1547Hapus dengan prompt konfirmasi tunggal:

1548 

1549```bash theme={null}

1550claude project purge ~/work/my-repo

1551```

1552 

1553Abaikan jalur untuk memilih proyek dari daftar interaktif.

1554 

1555Lewati prompt konfirmasi untuk digunakan dalam skrip:

1556 

1557```bash theme={null}

1558claude project purge ~/work/my-repo --yes

1559```

1560 

1561Teruskan `--all` alih-alih jalur untuk membersihkan status untuk setiap proyek sekaligus, yang menghapus `history.jsonl` sepenuhnya daripada memfilternya. Teruskan `-i` untuk melangkah melalui rencana penghapusan satu item pada satu waktu.

1562 

1563Perintah membiarkan `shell-snapshots/` dan `backups/` sendirian karena tidak termasuk dalam cakupan proyek, dan memperingatkan tentang mereka dalam output rencana. Keluar dengan status 1 jika tidak ada status yang cocok dengan jalur yang diberikan.

1564 

1565Anda juga dapat menghapus salah satu jalur data aplikasi di atas dengan tangan. Sesi baru tidak terpengaruh. Tabel di bawah menunjukkan apa yang Anda hilangkan untuk sesi masa lalu.

1566 

1567| Hapus | Anda kehilangan |

1568| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- |

1569| `~/.claude/projects/` | Resume, continue, dan rewind untuk sesi masa lalu |

1570| `~/.claude/history.jsonl` | Recall prompt panah atas |

1571| `~/.claude/file-history/` | Checkpoint restore untuk sesi masa lalu |

1572| `~/.claude/stats-cache.json` | Total historis yang ditampilkan oleh `/usage` |

1573| `~/.claude/debug/`, `~/.claude/plans/`, `~/.claude/paste-cache/`, `~/.claude/image-cache/`, `~/.claude/session-env/`, `~/.claude/tasks/`, `~/.claude/shell-snapshots/`, `~/.claude/backups/` | Tidak ada yang menghadap pengguna |

1574| `~/.claude/todos/` | Tidak ada. Direktori warisan tidak ditulis oleh versi saat ini. |

1575 

1576Jangan hapus `~/.claude.json`, `~/.claude/settings.json`, atau `~/.claude/plugins/`: file-file itu menyimpan auth, preferensi, dan plugin yang diinstal Anda.

1577 

1578## Sumber daya terkait

1579 

1580* [Kelola memory Claude](/id/memory): tulis dan atur CLAUDE.md, rules, dan auto memory

1581* [Konfigurasi settings](/id/settings): atur izin, hooks, variabel lingkungan, dan default model

1582* [Buat skills](/id/skills): bangun prompt dan workflow yang dapat digunakan kembali

1583* [Konfigurasi subagents](/id/sub-agents): tentukan agen khusus dengan konteks mereka sendiri

cli-reference.md +129 −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# Referensi CLI

6 

7> Referensi lengkap untuk antarmuka baris perintah Claude Code, termasuk perintah dan flag.

8 

9## Perintah CLI

10 

11Anda dapat memulai sesi, menyalurkan konten, melanjutkan percakapan, dan mengelola pembaruan dengan perintah-perintah ini:

12 

13| Perintah | Deskripsi | Contoh |

14| :------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------- |

15| `claude` | Mulai sesi interaktif | `claude` |

16| `claude "query"` | Mulai sesi interaktif dengan prompt awal | `claude "explain this project"` |

17| `claude -p "query"` | Kueri melalui SDK, kemudian keluar | `claude -p "explain this function"` |

18| `cat file \| claude -p "query"` | Proses konten yang disalurkan | `cat logs.txt \| claude -p "explain"` |

19| `claude -c` | Lanjutkan percakapan terbaru di direktori saat ini | `claude -c` |

20| `claude -c -p "query"` | Lanjutkan melalui SDK | `claude -c -p "Check for type errors"` |

21| `claude -r "<session>" "query"` | Lanjutkan sesi berdasarkan ID atau nama | `claude -r "auth-refactor" "Finish this PR"` |

22| `claude update` | Perbarui ke versi terbaru | `claude update` |

23| `claude install [version]` | Instal atau instal ulang binary asli. Menerima versi seperti `2.1.118`, atau `stable` atau `latest`. Lihat [Instal versi tertentu](/id/setup#install-a-specific-version) | `claude install stable` |

24| `claude auth login` | Masuk ke akun Anthropic Anda. Gunakan `--email` untuk mengisi email Anda sebelumnya, `--sso` untuk memaksa autentikasi SSO, dan `--console` untuk masuk dengan Anthropic Console untuk penagihan penggunaan API alih-alih langganan Claude | `claude auth login --console` |

25| `claude auth logout` | Keluar dari akun Anthropic Anda | `claude auth logout` |

26| `claude auth status` | Tampilkan status autentikasi sebagai JSON. Gunakan `--text` untuk output yang dapat dibaca manusia. Keluar dengan kode 0 jika masuk, 1 jika tidak | `claude auth status` |

27| `claude agents` | Daftar semua [subagents](/id/sub-agents) yang dikonfigurasi, dikelompokkan berdasarkan sumber | `claude agents` |

28| `claude auto-mode defaults` | Cetak aturan pengklasifikasi [auto mode](/id/permission-modes#eliminate-prompts-with-auto-mode) bawaan sebagai JSON. Gunakan `claude auto-mode config` untuk melihat konfigurasi efektif Anda dengan pengaturan yang diterapkan | `claude auto-mode defaults > rules.json` |

29| `claude mcp` | Konfigurasi server Model Context Protocol (MCP) | Lihat [dokumentasi Claude Code MCP](/id/mcp). |

30| `claude plugin` | Kelola Claude Code [plugins](/id/plugins). Alias: `claude plugins`. Lihat [referensi plugin](/id/plugins-reference#cli-commands-reference) untuk subperintah | `claude plugin install code-review@claude-plugins-official` |

31| `claude project purge [path]` | Hapus semua status Claude Code lokal untuk proyek: transkrip, daftar tugas, log debug, riwayat edit file, baris riwayat prompt, dan entri proyek di `~/.claude.json`. Abaikan `[path]` untuk memilih dari daftar interaktif. Flag: `--dry-run` untuk pratinjau, `-y`/`--yes` untuk melewati konfirmasi, `-i`/`--interactive` untuk mengonfirmasi setiap item, `--all` untuk setiap proyek. Lihat [Hapus data lokal](/id/claude-directory#clear-local-data) | `claude project purge ~/work/repo --dry-run` |

32| `claude remote-control` | Mulai server [Remote Control](/id/remote-control) untuk mengontrol Claude Code dari Claude.ai atau aplikasi Claude. Berjalan dalam mode server (tidak ada sesi interaktif lokal). Lihat [flag mode server](/id/remote-control#start-a-remote-control-session) | `claude remote-control --name "My Project"` |

33| `claude setup-token` | Hasilkan token OAuth yang tahan lama untuk CI dan skrip. Mencetak token ke terminal tanpa menyimpannya. Memerlukan langganan Claude. Lihat [Hasilkan token yang tahan lama](/id/authentication#generate-a-long-lived-token) | `claude setup-token` |

34| `claude ultrareview [target]` | Jalankan [ultrareview](/id/ultrareview#run-ultrareview-non-interactively) secara non-interaktif. Mencetak temuan ke stdout dan keluar dengan 0 saat berhasil atau 1 saat gagal. Gunakan `--json` untuk payload mentah dan `--timeout <minutes>` untuk mengganti default 30 menit | `claude ultrareview 1234 --json` |

35 

36Jika Anda salah mengetik subperintah, Claude Code menyarankan kecocokan terdekat dan keluar tanpa memulai sesi. Misalnya, `claude udpate` mencetak `Did you mean claude update?`.

37 

38## Flag CLI

39 

40Sesuaikan perilaku Claude Code dengan flag baris perintah ini. `claude --help` tidak mencantumkan setiap flag, jadi ketiadaan flag dari `--help` tidak berarti flag tersebut tidak tersedia.

41 

42| Flag | Deskripsi | Contoh |

43| :---------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------- |

44| `--add-dir` | Tambahkan direktori kerja tambahan untuk Claude membaca dan mengedit file. Memberikan akses file; sebagian besar konfigurasi `.claude/` [tidak ditemukan](/id/permissions#additional-directories-grant-file-access-not-configuration) dari direktori ini. Memvalidasi setiap jalur ada sebagai direktori | `claude --add-dir ../apps ../lib` |

45| `--agent` | Tentukan agen untuk sesi saat ini (menimpa pengaturan `agent`) | `claude --agent my-custom-agent` |

46| `--agents` | Tentukan subagents kustom secara dinamis melalui JSON. Menggunakan nama field yang sama dengan [frontmatter](/id/sub-agents#supported-frontmatter-fields) subagent, ditambah field `prompt` untuk instruksi agen | `claude --agents '{"reviewer":{"description":"Reviews code","prompt":"You are a code reviewer"}}'` |

47| `--allow-dangerously-skip-permissions` | Tambahkan `bypassPermissions` ke siklus mode `Shift+Tab` tanpa memulai di dalamnya. Memungkinkan Anda memulai dalam mode berbeda seperti `plan` dan beralih ke `bypassPermissions` nanti. Lihat [mode izin](/id/permission-modes#skip-all-checks-with-bypasspermissions-mode) | `claude --permission-mode plan --allow-dangerously-skip-permissions` |

48| `--allowedTools` | Tools yang dieksekusi tanpa meminta izin. Lihat [sintaks aturan izin](/id/settings#permission-rule-syntax) untuk pencocokan pola. Untuk membatasi tools mana yang tersedia, gunakan `--tools` sebagai gantinya | `"Bash(git log *)" "Bash(git diff *)" "Read"` |

49| `--append-system-prompt` | Tambahkan teks kustom ke akhir prompt sistem default | `claude --append-system-prompt "Always use TypeScript"` |

50| `--append-system-prompt-file` | Muat teks prompt sistem tambahan dari file dan tambahkan ke prompt default | `claude --append-system-prompt-file ./extra-rules.txt` |

51| `--bare` | Mode minimal: lewati penemuan otomatis hooks, skills, plugins, server MCP, auto memory, dan CLAUDE.md sehingga panggilan skrip dimulai lebih cepat. Claude memiliki akses ke tools Bash, baca file, dan edit file. Menetapkan [`CLAUDE_CODE_SIMPLE`](/id/env-vars). Lihat [bare mode](/id/headless#start-faster-with-bare-mode) | `claude --bare -p "query"` |

52| `--betas` | Header beta untuk disertakan dalam permintaan API (hanya pengguna kunci API) | `claude --betas interleaved-thinking` |

53| `--channels` | (Pratinjau penelitian) Server MCP yang notifikasi [channel](/id/channels) Claude harus dengarkan dalam sesi ini. Daftar yang dipisahkan spasi dari entri `plugin:<name>@<marketplace>`. Memerlukan autentikasi Claude.ai | `claude --channels plugin:my-notifier@my-marketplace` |

54| `--chrome` | Aktifkan [integrasi browser Chrome](/id/chrome) untuk otomasi web dan pengujian | `claude --chrome` |

55| `--continue`, `-c` | Muat percakapan terbaru di direktori saat ini. Mencakup sesi yang menambahkan direktori ini dengan `/add-dir` | `claude --continue` |

56| `--dangerously-load-development-channels` | Aktifkan [channels](/id/channels-reference#test-during-the-research-preview) yang tidak ada di daftar persetujuan, untuk pengembangan lokal. Menerima entri `plugin:<name>@<marketplace>` dan `server:<name>`. Meminta konfirmasi | `claude --dangerously-load-development-channels server:webhook` |

57| `--dangerously-skip-permissions` | Lewati prompt izin. Setara dengan `--permission-mode bypassPermissions`. Lihat [mode izin](/id/permission-modes#skip-all-checks-with-bypasspermissions-mode) untuk apa yang dilakukan dan tidak dilakukan oleh ini | `claude --dangerously-skip-permissions` |

58| `--debug` | Aktifkan mode debug dengan penyaringan kategori opsional (misalnya, `"api,hooks"` atau `"!statsig,!file"`) | `claude --debug "api,mcp"` |

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

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

61| `--disallowedTools` | Tools yang dihapus dari konteks model dan tidak dapat digunakan | `"Bash(git log *)" "Bash(git diff *)" "Edit"` |

62| `--effort` | Atur [tingkat upaya](/id/model-config#adjust-effort-level) untuk sesi saat ini. Opsi: `low`, `medium`, `high`, `xhigh`, `max`; tingkat yang tersedia tergantung pada model. Lingkup sesi dan tidak bertahan ke pengaturan | `claude --effort high` |

63| `--enable-auto-mode` | {/* max-version: 2.1.110 */}Dihapus di v2.1.111. Auto mode sekarang dalam siklus `Shift+Tab` secara default; gunakan `--permission-mode auto` untuk memulai di dalamnya | `claude --permission-mode auto` |

64| `--exclude-dynamic-system-prompt-sections` | Pindahkan bagian per-mesin dari prompt sistem (direktori kerja, informasi lingkungan, jalur memori, status git) ke pesan pengguna pertama. Meningkatkan reuse prompt-cache di berbagai pengguna dan mesin yang menjalankan tugas yang sama. Hanya berlaku dengan prompt sistem default; diabaikan ketika `--system-prompt` atau `--system-prompt-file` diatur. Gunakan dengan `-p` untuk beban kerja multi-pengguna yang ditulis skrip | `claude -p --exclude-dynamic-system-prompt-sections "query"` |

65| `--fallback-model` | Aktifkan fallback otomatis ke model yang ditentukan ketika model default kelebihan beban (mode cetak saja) | `claude -p --fallback-model sonnet "query"` |

66| `--fork-session` | Saat melanjutkan, buat ID sesi baru alih-alih menggunakan kembali yang asli (gunakan dengan `--resume` atau `--continue`) | `claude --resume abc123 --fork-session` |

67| `--from-pr` | Lanjutkan sesi yang ditautkan ke pull request tertentu. Menerima nomor PR, URL GitHub atau GitHub Enterprise PR, URL merge request GitLab, atau URL pull request Bitbucket. Sesi secara otomatis ditautkan ketika Claude membuat pull request | `claude --from-pr 123` |

68| `--ide` | Secara otomatis terhubung ke IDE saat startup jika tepat satu IDE valid tersedia | `claude --ide` |

69| `--init` | Jalankan [Setup hooks](/id/hooks#setup) dengan matcher `init` sebelum sesi (mode cetak saja) | `claude -p --init "query"` |

70| `--init-only` | Jalankan hook [Setup](/id/hooks#setup) dan `SessionStart`, kemudian keluar tanpa memulai percakapan | `claude --init-only` |

71| `--include-hook-events` | Sertakan semua peristiwa siklus hidup hook dalam aliran output. Memerlukan `--output-format stream-json` | `claude -p --output-format stream-json --include-hook-events "query"` |

72| `--include-partial-messages` | Sertakan peristiwa streaming parsial dalam output. Memerlukan `--print` dan `--output-format stream-json` | `claude -p --output-format stream-json --include-partial-messages "query"` |

73| `--input-format` | Tentukan format input untuk mode cetak (opsi: `text`, `stream-json`) | `claude -p --output-format json --input-format stream-json` |

74| `--json-schema` | Dapatkan output JSON yang divalidasi sesuai dengan JSON Schema setelah agen menyelesaikan alurnya (mode cetak saja, lihat [structured outputs](/id/agent-sdk/structured-outputs)) | `claude -p --json-schema '{"type":"object","properties":{...}}' "query"` |

75| `--maintenance` | Jalankan [Setup hooks](/id/hooks#setup) dengan matcher `maintenance` sebelum sesi (mode cetak saja) | `claude -p --maintenance "query"` |

76| `--max-budget-usd` | Jumlah dolar maksimum untuk dihabiskan pada panggilan API sebelum berhenti (mode cetak saja) | `claude -p --max-budget-usd 5.00 "query"` |

77| `--max-turns` | Batasi jumlah putaran agentic (mode cetak saja). Keluar dengan kesalahan saat batas tercapai. Tidak ada batas secara default | `claude -p --max-turns 3 "query"` |

78| `--mcp-config` | Muat server MCP dari file JSON atau string (dipisahkan spasi) | `claude --mcp-config ./mcp.json` |

79| `--model` | Menetapkan model untuk sesi saat ini dengan alias untuk model terbaru (`sonnet` atau `opus`) atau nama lengkap model | `claude --model claude-sonnet-4-6` |

80| `--name`, `-n` | Atur nama tampilan untuk sesi, ditampilkan di `/resume` dan judul terminal. Anda dapat melanjutkan sesi bernama dengan `claude --resume <name>`. <br /><br />[`/rename`](/id/commands) mengubah nama di tengah sesi dan juga menampilkannya di bilah prompt | `claude -n "my-feature-work"` |

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

82| `--no-session-persistence` | Nonaktifkan persistensi sesi sehingga sesi tidak disimpan ke disk dan tidak dapat dilanjutkan (mode cetak saja) | `claude -p --no-session-persistence "query"` |

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

84| `--permission-mode` | Mulai dalam [mode izin](/id/permission-modes) yang ditentukan. Menerima `default`, `acceptEdits`, `plan`, `auto`, `dontAsk`, atau `bypassPermissions`. Menimpa `defaultMode` dari file pengaturan | `claude --permission-mode plan` |

85| `--permission-prompt-tool` | Tentukan tool MCP untuk menangani prompt izin dalam mode non-interaktif | `claude -p --permission-prompt-tool mcp_auth_tool "query"` |

86| `--plugin-dir` | Muat plugin dari direktori untuk sesi ini saja. Setiap flag mengambil satu jalur. Ulangi flag untuk beberapa direktori: `--plugin-dir A --plugin-dir B` | `claude --plugin-dir ./my-plugins` |

87| `--print`, `-p` | Cetak respons tanpa mode interaktif (lihat [dokumentasi Agent SDK](/id/agent-sdk/overview) untuk detail penggunaan programatik) | `claude -p "query"` |

88| `--remote` | Buat sesi [web](/id/claude-code-on-the-web) baru di claude.ai dengan deskripsi tugas yang disediakan | `claude --remote "Fix the login bug"` |

89| `--remote-control`, `--rc` | Mulai sesi interaktif dengan [Remote Control](/id/remote-control#start-a-remote-control-session) diaktifkan sehingga Anda juga dapat mengontrolnya dari claude.ai atau aplikasi Claude. Secara opsional berikan nama untuk sesi | `claude --remote-control "My Project"` |

90| `--remote-control-session-name-prefix <prefix>` | Awalan untuk nama sesi [Remote Control](/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` |

91| `--replay-user-messages` | Re-emit pesan pengguna dari stdin kembali ke stdout untuk pengakuan. Memerlukan `--input-format stream-json` dan `--output-format stream-json` | `claude -p --input-format stream-json --output-format stream-json --replay-user-messages` |

92| `--resume`, `-r` | Lanjutkan sesi tertentu berdasarkan ID atau nama, atau tampilkan pemilih interaktif untuk memilih sesi. Mencakup sesi yang menambahkan direktori ini dengan `/add-dir` | `claude --resume auth-refactor` |

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

94| `--setting-sources` | Daftar sumber pengaturan yang dipisahkan koma untuk dimuat (`user`, `project`, `local`) | `claude --setting-sources user,project` |

95| `--settings` | Jalur ke file JSON pengaturan atau string JSON untuk memuat pengaturan tambahan dari | `claude --settings ./settings.json` |

96| `--strict-mcp-config` | Hanya gunakan server MCP dari `--mcp-config`, abaikan semua konfigurasi MCP lainnya | `claude --strict-mcp-config --mcp-config ./mcp.json` |

97| `--system-prompt` | Ganti seluruh prompt sistem dengan teks kustom | `claude --system-prompt "You are a Python expert"` |

98| `--system-prompt-file` | Muat prompt sistem dari file, mengganti prompt default | `claude --system-prompt-file ./custom-prompt.txt` |

99| `--teleport` | Lanjutkan [sesi web](/id/claude-code-on-the-web) di terminal lokal Anda | `claude --teleport` |

100| `--teammate-mode` | Atur bagaimana [rekan tim agen](/id/agent-teams) ditampilkan: `auto` (default), `in-process`, atau `tmux`. Lihat [Pilih mode tampilan](/id/agent-teams#choose-a-display-mode) | `claude --teammate-mode in-process` |

101| `--tmux` | Buat sesi tmux untuk worktree. Memerlukan `--worktree`. Menggunakan pane native iTerm2 saat tersedia; berikan `--tmux=classic` untuk tmux tradisional | `claude -w feature-auth --tmux` |

102| `--tools` | Batasi tools bawaan mana yang dapat digunakan Claude. Gunakan `""` untuk menonaktifkan semua, `"default"` untuk semua, atau nama tools seperti `"Bash,Edit,Read"` | `claude --tools "Bash,Edit,Read"` |

103| `--verbose` | Aktifkan logging verbose, menampilkan output putaran penuh | `claude --verbose` |

104| `--version`, `-v` | Keluarkan nomor versi | `claude -v` |

105| `--worktree`, `-w` | Mulai Claude dalam [git worktree](/id/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees) terisolasi di `<repo>/.claude/worktrees/<name>`. Jika tidak ada nama yang diberikan, satu akan dibuat secara otomatis | `claude -w feature-auth` |

106 

107### Flag prompt sistem

108 

109Claude Code menyediakan empat flag untuk menyesuaikan prompt sistem. Keempat flag bekerja dalam mode interaktif dan non-interaktif.

110 

111| Flag | Perilaku | Contoh |

112| :---------------------------- | :---------------------------------------- | :------------------------------------------------------ |

113| `--system-prompt` | Mengganti seluruh prompt default | `claude --system-prompt "You are a Python expert"` |

114| `--system-prompt-file` | Mengganti dengan konten file | `claude --system-prompt-file ./prompts/review.txt` |

115| `--append-system-prompt` | Menambahkan ke prompt default | `claude --append-system-prompt "Always use TypeScript"` |

116| `--append-system-prompt-file` | Menambahkan konten file ke prompt default | `claude --append-system-prompt-file ./style-rules.txt` |

117 

118`--system-prompt` dan `--system-prompt-file` saling eksklusif. Flag append dapat dikombinasikan dengan flag penggantian apa pun.

119 

120Untuk sebagian besar kasus penggunaan, gunakan flag append. Menambahkan mempertahankan kemampuan bawaan Claude Code sambil menambahkan persyaratan Anda. Gunakan flag penggantian hanya ketika Anda memerlukan kontrol penuh atas prompt sistem.

121 

122## Lihat juga

123 

124* [Ekstensi Chrome](/id/chrome) - Otomasi browser dan pengujian web

125* [Mode interaktif](/id/interactive-mode) - Pintasan keyboard, mode input, dan fitur interaktif

126* [Panduan quickstart](/id/quickstart) - Memulai dengan Claude Code

127* [Alur kerja umum](/id/common-workflows) - Alur kerja dan pola lanjutan

128* [Pengaturan](/id/settings) - Opsi konfigurasi

129* [Dokumentasi Agent SDK](/id/agent-sdk/overview) - Penggunaan programatik dan integrasi

code-review.md +280 −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# Code Review

6 

7> Siapkan ulasan PR otomatis yang menangkap kesalahan logika, kerentanan keamanan, dan regresi menggunakan analisis multi-agen dari seluruh basis kode Anda

8 

9<Note>

10 Code Review sedang dalam pratinjau penelitian, tersedia untuk langganan [Team dan Enterprise](https://claude.ai/admin-settings/claude-code). Tidak tersedia untuk organisasi dengan [Zero Data Retention](/id/zero-data-retention) yang diaktifkan.

11</Note>

12 

13Code Review menganalisis permintaan tarik GitHub Anda dan memposting temuan sebagai komentar sebaris pada baris kode tempat ditemukannya masalah. Armada agen khusus memeriksa perubahan kode dalam konteks basis kode lengkap Anda, mencari kesalahan logika, kerentanan keamanan, kasus tepi yang rusak, dan regresi halus.

14 

15Temuan diberi tag berdasarkan tingkat keparahan dan tidak menyetujui atau memblokir PR Anda, sehingga alur kerja ulasan yang ada tetap utuh. Anda dapat menyesuaikan apa yang Claude tandai dengan menambahkan file `CLAUDE.md` atau `REVIEW.md` ke repositori Anda.

16 

17Untuk menjalankan Claude di infrastruktur CI Anda sendiri alih-alih layanan terkelola ini, lihat [GitHub Actions](/id/github-actions) atau [GitLab CI/CD](/id/gitlab-ci-cd). Untuk repositori pada instans GitHub yang di-host sendiri, lihat [GitHub Enterprise Server](/id/github-enterprise-server).

18 

19Halaman ini mencakup:

20 

21* [Cara kerja ulasan](#how-reviews-work)

22* [Penyiapan](#set-up-code-review)

23* [Memicu ulasan secara manual](#manually-trigger-reviews) dengan `@claude review` dan `@claude review once`

24* [Menyesuaikan ulasan](#customize-reviews) dengan `CLAUDE.md` dan `REVIEW.md`

25* [Harga](#pricing)

26* [Pemecahan masalah](#troubleshooting) jalankan yang gagal dan komentar yang hilang

27 

28## Cara kerja ulasan

29 

30Setelah admin [mengaktifkan Code Review](#set-up-code-review) untuk organisasi Anda, ulasan dipicu ketika PR dibuka, pada setiap push, atau ketika diminta secara manual, tergantung pada perilaku yang dikonfigurasi repositori. Mengomentari `@claude review` [memulai ulasan pada PR](#manually-trigger-reviews) dalam mode apa pun.

31 

32Ketika ulasan berjalan, beberapa agen menganalisis diff dan kode sekitarnya secara paralel pada infrastruktur Anthropic. Setiap agen mencari kelas masalah yang berbeda, kemudian langkah verifikasi memeriksa kandidat terhadap perilaku kode aktual untuk menyaring positif palsu. Hasilnya dideduplikasi, diurutkan berdasarkan tingkat keparahan, dan diposting sebagai komentar sebaris pada baris spesifik tempat masalah ditemukan, dengan ringkasan dalam badan ulasan. Jika tidak ada masalah yang ditemukan, Claude memposting komentar konfirmasi singkat pada PR.

33 

34Ulasan diskalakan dalam biaya dengan ukuran dan kompleksitas PR, selesai rata-rata dalam 20 menit. Admin dapat memantau aktivitas ulasan dan pengeluaran melalui [dasbor analitik](#view-usage).

35 

36### Tingkat keparahan

37 

38Setiap temuan diberi tag dengan tingkat keparahan:

39 

40| Penanda | Keparahan | Arti |

41| :------ | :------------------- | :---------------------------------------------------------------- |

42| 🔴 | Penting | Bug yang harus diperbaiki sebelum penggabungan |

43| 🟡 | Nit | Masalah kecil, layak diperbaiki tetapi tidak memblokir |

44| 🟣 | Sudah ada sebelumnya | Bug yang ada di basis kode tetapi tidak diperkenalkan oleh PR ini |

45 

46Temuan mencakup bagian penalaran yang dapat diperluas yang dapat Anda perluas untuk memahami mengapa Claude menandai masalah dan bagaimana Claude memverifikasi masalah.

47 

48### Menilai dan membalas temuan

49 

50Setiap komentar ulasan dari Claude tiba dengan 👍 dan 👎 sudah terpasang sehingga kedua tombol muncul di UI GitHub untuk penilaian satu klik. Klik 👍 jika temuan berguna atau 👎 jika salah atau bising. Anthropic mengumpulkan hitungan reaksi setelah PR digabungkan dan menggunakannya untuk menyetel pengulas. Reaksi tidak memicu ulasan kembali atau mengubah apa pun pada PR.

51 

52Membalas komentar sebaris tidak mendorong Claude untuk merespons atau memperbarui PR. Untuk bertindak atas temuan, perbaiki kode dan push. Jika PR berlangganan ulasan yang dipicu push, jalankan berikutnya menyelesaikan utas ketika masalah diperbaiki. Untuk meminta ulasan segar tanpa push, komentari `@claude review once` sebagai [komentar PR tingkat atas](#manually-trigger-reviews).

53 

54### Output jalankan pemeriksaan

55 

56Selain komentar ulasan sebaris, setiap ulasan mengisi jalankan pemeriksaan **Claude Code Review** yang muncul bersama pemeriksaan CI Anda. Perluas tautan **Details** untuk melihat ringkasan setiap temuan di satu tempat, diurutkan berdasarkan keparahan:

57 

58| Keparahan | File:Baris | Masalah |

59| ---------- | ------------------------- | --------------------------------------------------------------------------- |

60| 🔴 Penting | `src/auth/session.ts:142` | Penyegaran token berjalan dengan logout, meninggalkan sesi basi aktif |

61| 🟡 Nit | `src/auth/session.ts:88` | `parseExpiry` secara diam-diam mengembalikan 0 pada input yang salah bentuk |

62 

63Setiap temuan juga muncul sebagai anotasi di tab **Files changed**, ditandai langsung pada baris diff yang relevan. Temuan Penting dirender dengan penanda merah, nit dengan peringatan kuning, dan bug yang sudah ada sebelumnya dengan pemberitahuan abu-abu. Anotasi dan tabel keparahan ditulis ke jalankan pemeriksaan secara independen dari komentar ulasan sebaris, sehingga tetap tersedia bahkan jika GitHub menolak komentar sebaris pada baris yang bergerak.

64 

65Jalankan pemeriksaan selalu selesai dengan kesimpulan netral sehingga tidak pernah memblokir penggabungan melalui aturan perlindungan cabang. Jika Anda ingin menggerbang penggabungan pada temuan Code Review, baca rincian keparahan dari output jalankan pemeriksaan di CI Anda sendiri. Baris terakhir dari teks Details adalah komentar yang dapat dibaca mesin yang dapat diurai alur kerja Anda dengan `gh` dan jq:

66 

67```bash theme={null}

68gh api repos/OWNER/REPO/check-runs/CHECK_RUN_ID \

69 --jq '.output.text | split("bughunter-severity: ")[1] | split(" -->")[0] | fromjson'

70```

71 

72Ini mengembalikan objek JSON dengan hitungan per keparahan, misalnya `{"normal": 2, "nit": 1, "pre_existing": 0}`. Kunci `normal` menyimpan hitungan temuan Penting; nilai bukan nol berarti Claude menemukan setidaknya satu bug yang layak diperbaiki sebelum penggabungan.

73 

74### Apa yang Code Review periksa

75 

76Secara default, Code Review berfokus pada kebenaran: bug yang akan merusak produksi, bukan preferensi pemformatan atau cakupan pengujian yang hilang. Anda dapat memperluas apa yang diperiksa dengan [menambahkan file panduan](#customize-reviews) ke repositori Anda.

77 

78## Siapkan Code Review

79 

80Admin mengaktifkan Code Review sekali untuk organisasi dan memilih repositori mana yang akan disertakan.

81 

82<Steps>

83 <Step title="Buka pengaturan admin Claude Code">

84 Buka [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code) dan temukan bagian Code Review. Anda memerlukan akses admin ke organisasi Claude Anda dan izin untuk memasang GitHub Apps di organisasi GitHub Anda.

85 </Step>

86 

87 <Step title="Mulai penyiapan">

88 Klik **Setup**. Ini memulai alur instalasi GitHub App.

89 </Step>

90 

91 <Step title="Pasang Claude GitHub App">

92 Ikuti petunjuk untuk memasang Claude GitHub App ke organisasi GitHub Anda. Aplikasi meminta izin repositori ini:

93 

94 * **Contents**: baca dan tulis

95 * **Issues**: baca dan tulis

96 * **Pull requests**: baca dan tulis

97 

98 Code Review menggunakan akses baca ke konten dan akses tulis ke permintaan tarik. Kumpulan izin yang lebih luas juga mendukung [GitHub Actions](/id/github-actions) jika Anda mengaktifkannya nanti.

99 </Step>

100 

101 <Step title="Pilih repositori">

102 Pilih repositori mana yang akan diaktifkan untuk Code Review. Jika Anda tidak melihat repositori, pastikan Anda memberikan akses Claude GitHub App ke repositori tersebut selama instalasi. Anda dapat menambahkan lebih banyak repositori nanti.

103 </Step>

104 

105 <Step title="Atur pemicu ulasan per repo">

106 Setelah penyiapan selesai, bagian Code Review menampilkan repositori Anda dalam tabel. Untuk setiap repositori, gunakan dropdown **Review Behavior** untuk memilih kapan ulasan berjalan:

107 

108 * **Once after PR creation**: ulasan berjalan sekali ketika PR dibuka atau ditandai siap untuk ditinjau

109 * **After every push**: ulasan berjalan pada setiap push ke cabang PR, menangkap masalah baru saat PR berkembang dan secara otomatis menyelesaikan utas ketika Anda memperbaiki masalah yang ditandai

110 * **Manual**: ulasan dimulai hanya ketika seseorang [mengomentari `@claude review` atau `@claude review once` pada PR](#manually-trigger-reviews); `@claude review` juga berlangganan PR ke ulasan pada push berikutnya

111 

112 Meninjau pada setiap push menjalankan ulasan paling banyak dan biaya paling banyak. Mode manual berguna untuk repo lalu lintas tinggi di mana Anda ingin memilih PR tertentu untuk ditinjau, atau hanya mulai meninjau PR Anda setelah siap.

113 </Step>

114</Steps>

115 

116Tabel repositori juga menampilkan biaya rata-rata per ulasan untuk setiap repo berdasarkan aktivitas terbaru. Gunakan menu tindakan baris untuk mengaktifkan atau menonaktifkan Code Review per repositori, atau untuk menghapus repositori sepenuhnya.

117 

118Untuk memverifikasi penyiapan, buka PR pengujian. Jika Anda memilih pemicu otomatis, jalankan pemeriksaan bernama **Claude Code Review** muncul dalam beberapa menit. Jika Anda memilih Manual, komentari `@claude review` pada PR untuk memulai ulasan pertama. Jika tidak ada jalankan pemeriksaan yang muncul, konfirmasi repositori terdaftar di pengaturan admin Anda dan Claude GitHub App memiliki akses ke repositori tersebut.

119 

120## Memicu ulasan secara manual

121 

122Dua perintah komentar memulai ulasan sesuai permintaan. Keduanya berfungsi terlepas dari pemicu yang dikonfigurasi repositori, sehingga Anda dapat menggunakannya untuk memilih PR tertentu ke dalam ulasan dalam mode Manual atau untuk mendapatkan ulasan kembali segera di mode lain.

123 

124| Perintah | Apa yang dilakukannya |

125| :-------------------- | :------------------------------------------------------------------------ |

126| `@claude review` | Memulai ulasan dan berlangganan PR ke ulasan yang dipicu push ke depannya |

127| `@claude review once` | Memulai ulasan tunggal tanpa berlangganan PR ke push masa depan |

128 

129Gunakan `@claude review once` ketika Anda menginginkan umpan balik tentang keadaan saat ini dari PR tetapi tidak menginginkan setiap push berikutnya untuk menimbulkan ulasan. Ini berguna untuk PR yang berjalan lama dengan push yang sering, atau ketika Anda menginginkan pendapat kedua sekali saja tanpa mengubah perilaku ulasan PR.

130 

131Agar perintah apa pun memicu ulasan:

132 

133* Posting sebagai komentar PR tingkat atas, bukan komentar sebaris pada baris diff

134* Letakkan perintah di awal komentar, dengan `once` pada baris yang sama jika Anda menggunakan bentuk satu kali

135* Anda harus memiliki akses pemilik, anggota, atau kolaborator ke repositori

136* PR harus terbuka

137 

138Tidak seperti pemicu otomatis, pemicu manual berjalan pada PR draf, karena permintaan eksplisit menandakan Anda menginginkan ulasan sekarang terlepas dari status draf.

139 

140Jika ulasan sudah berjalan pada PR tersebut, permintaan antri sampai ulasan yang sedang berlangsung selesai. Anda dapat memantau kemajuan melalui jalankan pemeriksaan pada PR.

141 

142## Sesuaikan ulasan

143 

144Code Review membaca dua file dari repositori Anda untuk memandu apa yang ditandai. Keduanya berbeda dalam seberapa kuat mereka mempengaruhi ulasan:

145 

146* **`CLAUDE.md`**: instruksi proyek bersama yang digunakan Claude Code untuk semua tugas, bukan hanya ulasan. Code Review membacanya sebagai konteks proyek dan menandai pelanggaran yang baru diperkenalkan sebagai nit.

147* **`REVIEW.md`**: instruksi khusus ulasan, disuntikkan langsung ke setiap agen dalam saluran ulasan sebagai prioritas tertinggi. Gunakan untuk mengubah apa yang ditandai, pada tingkat keparahan apa, dan bagaimana temuan dilaporkan.

148 

149### CLAUDE.md

150 

151Code Review membaca file `CLAUDE.md` repositori Anda dan memperlakukan pelanggaran yang baru diperkenalkan sebagai temuan tingkat [nit](#severity-levels). Ini berfungsi dua arah: jika PR Anda mengubah kode dengan cara yang membuat pernyataan `CLAUDE.md` ketinggalan zaman, Claude menandai bahwa dokumen perlu diperbarui juga.

152 

153Claude membaca file `CLAUDE.md` di setiap tingkat hierarki direktori Anda, jadi aturan di `CLAUDE.md` subdirektori hanya berlaku untuk file di bawah jalur tersebut. Lihat [dokumentasi memori](/id/memory) untuk lebih lanjut tentang cara kerja `CLAUDE.md`.

154 

155Untuk panduan khusus ulasan yang tidak ingin Anda terapkan pada sesi Claude Code umum, gunakan [`REVIEW.md`](#review-md) sebagai gantinya.

156 

157### REVIEW\.md

158 

159`REVIEW.md` adalah file di akar repositori Anda yang mengganti cara Code Review berperilaku di repo Anda. Isinya disuntikkan ke dalam prompt sistem setiap agen dalam saluran ulasan sebagai blok instruksi prioritas tertinggi, mengambil alih dari panduan ulasan default.

160 

161Karena ditempel verbatim, `REVIEW.md` adalah instruksi biasa: sintaks [`@` import](/id/memory#import-additional-files) tidak diperluas, dan file yang direferensikan tidak dibaca ke dalam prompt. Letakkan aturan yang ingin Anda terapkan langsung di file.

162 

163#### Apa yang dapat Anda sesuaikan

164 

165`REVIEW.md` adalah markdown bentuk bebas, jadi apa pun yang dapat Anda ekspresikan sebagai instruksi ulasan berada dalam cakupan. Pola di bawah ini memiliki dampak paling besar dalam praktik.

166 

167**Keparahan**: tentukan ulang apa yang 🔴 Penting berarti untuk repo Anda. Kalibrasi default menargetkan kode produksi; repo dokumen, repo konfigurasi, atau prototipe mungkin menginginkan definisi yang jauh lebih sempit. Nyatakan secara eksplisit kelas temuan mana yang Penting dan mana yang paling banyak Nit. Anda juga dapat meningkatkan ke arah lain, misalnya memperlakukan pelanggaran `CLAUDE.md` apa pun sebagai Penting daripada nit default.

168 

169**Volume nit**: batasi berapa banyak komentar 🟡 Nit yang diposting ulasan tunggal. Prosa dan file konfigurasi dapat dipoles selamanya. Batas seperti "laporkan paling banyak lima nit, sebutkan sisanya sebagai hitungan dalam ringkasan" membuat ulasan dapat ditindaklanjuti.

170 

171**Aturan lewati**: daftar jalur, pola cabang, dan kategori temuan di mana Claude tidak boleh memposting temuan. Kandidat umum adalah kode yang dihasilkan, lockfile, dependensi yang dijual, dan cabang yang dibuat mesin, bersama dengan apa pun yang CI Anda sudah terapkan seperti linting atau pemeriksaan ejaan. Untuk jalur yang memerlukan beberapa ulasan tetapi bukan pengawasan penuh, tetapkan standar yang lebih tinggi alih-alih melewati sepenuhnya: "di `scripts/`, hanya laporkan jika hampir pasti dan parah."

172 

173**Pemeriksaan khusus repo**: tambahkan aturan yang ingin Anda tandai pada setiap PR, seperti "rute API baru harus memiliki tes integrasi." Karena `REVIEW.md` disuntikkan sebagai prioritas tertinggi, ini mendarat lebih andal daripada aturan yang sama dalam `CLAUDE.md` yang panjang.

174 

175**Bilah verifikasi**: memerlukan bukti sebelum kelas temuan diposting. Misalnya, "klaim perilaku memerlukan kutipan `file:line` dalam sumber, bukan inferensi dari penamaan" mengurangi positif palsu yang akan menghabiskan penulis putaran perjalanan.

176 

177**Konvergensi ulasan kembali**: beri tahu Claude cara berperilaku ketika PR sudah ditinjau. Aturan seperti "setelah ulasan pertama, tekan nit baru dan posting temuan Penting saja" menghentikan perbaikan satu baris dari mencapai putaran ketujuh hanya berdasarkan gaya.

178 

179**Bentuk ringkasan**: minta badan ulasan untuk dibuka dengan tally satu baris seperti `2 faktual, 4 gaya`, dan untuk memimpin dengan "tidak ada masalah faktual" ketika itu kasusnya. Penulis ingin mengetahui bentuk pekerjaan sebelum detail.

180 

181#### Contoh

182 

183`REVIEW.md` ini mengkalibrasi ulang keparahan untuk layanan backend, membatasi nit, melewati file yang dihasilkan, dan menambahkan pemeriksaan khusus repo.

184 

185```markdown theme={null}

186# Instruksi ulasan

187 

188## Apa yang Penting berarti di sini

189 

190Cadangkan Penting untuk temuan yang akan merusak perilaku, membocorkan data,

191atau memblokir rollback: logika yang tidak benar, kueri basis data yang tidak terbatas, PII

192dalam log atau pesan kesalahan, dan migrasi yang tidak kompatibel

193ke belakang. Gaya, penamaan, dan saran refactoring adalah Nit paling

194banyak.

195 

196## Batasi nit

197 

198Laporkan paling banyak lima Nit per ulasan. Jika Anda menemukan lebih banyak, katakan "plus N

199item serupa" dalam ringkasan alih-alih mempostingnya sebaris. Jika

200semuanya yang Anda temukan adalah Nit, pimpin ringkasan dengan "Tidak ada masalah pemblokiran."

201 

202## Jangan laporkan

203 

204- Apa pun yang CI sudah terapkan: lint, pemformatan, kesalahan tipe

205- File yang dihasilkan di bawah `src/gen/` dan file `*.lock` apa pun

206- Kode khusus pengujian yang sengaja melanggar aturan produksi

207 

208## Selalu periksa

209 

210- Rute API baru memiliki tes integrasi

211- Baris log tidak menyertakan alamat email, ID pengguna, atau badan permintaan

212- Kueri basis data dibatasi ke penyewa pemanggil

213```

214 

215#### Jaga agar tetap fokus

216 

217Panjang memiliki biaya: `REVIEW.md` yang panjang mengencerkan aturan yang paling penting. Jaga agar tetap pada instruksi yang mengubah perilaku ulasan, dan tinggalkan konteks proyek umum di `CLAUDE.md`.

218 

219## Lihat penggunaan

220 

221Buka [claude.ai/analytics/code-review](https://claude.ai/analytics/code-review) untuk melihat aktivitas Code Review di seluruh organisasi Anda. Dasbor menampilkan:

222 

223| Bagian | Apa yang ditampilkan |

224| :------------------- | :--------------------------------------------------------------------------------------------- |

225| PRs reviewed | Hitungan harian permintaan tarik yang ditinjau selama rentang waktu yang dipilih |

226| Cost weekly | Pengeluaran mingguan pada Code Review |

227| Feedback | Hitungan komentar ulasan yang secara otomatis diselesaikan karena pengembang mengatasi masalah |

228| Repository breakdown | Hitungan per-repo PR yang ditinjau dan komentar yang diselesaikan |

229 

230Tabel repositori di pengaturan admin juga menampilkan biaya rata-rata per ulasan untuk setiap repo. Angka biaya dasbor adalah perkiraan untuk memantau aktivitas; untuk pengeluaran yang akurat pada tagihan, lihat tagihan Anthropic Anda.

231 

232## Harga

233 

234Code Review ditagih berdasarkan penggunaan token. Setiap ulasan rata-rata \$15-25 dalam biaya, diskalakan dengan ukuran PR, kompleksitas basis kode, dan berapa banyak masalah yang memerlukan verifikasi. Penggunaan Code Review ditagih secara terpisah melalui [penggunaan ekstra](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) dan tidak dihitung terhadap penggunaan yang disertakan dalam paket Anda.

235 

236Pemicu ulasan yang Anda pilih mempengaruhi biaya total:

237 

238* **Once after PR creation**: berjalan sekali per PR

239* **After every push**: berjalan pada setiap push, mengalikan biaya dengan jumlah push

240* **Manual**: tidak ada ulasan sampai seseorang mengomentari `@claude review` pada PR

241 

242Dalam mode apa pun, mengomentari `@claude review` [memilih PR ke dalam ulasan yang dipicu push](#manually-trigger-reviews), jadi biaya tambahan terjadi per push setelah komentar tersebut. Untuk menjalankan ulasan tunggal tanpa berlangganan ke push masa depan, komentari `@claude review once` sebagai gantinya.

243 

244Biaya muncul pada tagihan Anthropic Anda terlepas dari apakah organisasi Anda menggunakan Amazon Bedrock atau Google Vertex AI untuk fitur Claude Code lainnya. Untuk menetapkan batas pengeluaran bulanan untuk Code Review, buka [claude.ai/admin-settings/usage](https://claude.ai/admin-settings/usage) dan konfigurasikan batas untuk layanan Claude Code Review.

245 

246Pantau pengeluaran melalui bagan biaya mingguan di [analitik](#view-usage) atau kolom biaya rata-rata per-repo di pengaturan admin.

247 

248## Pemecahan masalah

249 

250Jalankan ulasan adalah upaya terbaik. Jalankan yang gagal tidak pernah memblokir PR Anda, tetapi juga tidak mencoba ulang dengan sendirinya. Bagian ini mencakup cara pulih dari jalankan yang gagal dan tempat mencari ketika jalankan pemeriksaan melaporkan masalah yang tidak dapat Anda temukan.

251 

252### Picu ulang ulasan yang gagal atau habis waktu

253 

254Ketika infrastruktur ulasan mengalami kesalahan internal atau melampaui batas waktu, jalankan pemeriksaan selesai dengan judul **Code review encountered an error** atau **Code review timed out**. Kesimpulannya masih netral, jadi tidak ada yang memblokir penggabungan Anda, tetapi tidak ada temuan yang diposting.

255 

256Untuk menjalankan ulasan lagi, komentari `@claude review once` pada PR. Ini memulai ulasan segar tanpa berlangganan PR ke push masa depan. Jika PR sudah berlangganan ulasan yang dipicu push, push komit baru juga memulai ulasan baru.

257 

258Tombol **Re-run** di tab Checks GitHub tidak memicu ulang Code Review. Gunakan perintah komentar atau push baru sebagai gantinya.

259 

260### Ulasan tidak berjalan dan PR menampilkan pesan batas pengeluaran

261 

262Ketika batas pengeluaran bulanan organisasi Anda tercapai, Code Review memposting komentar tunggal pada PR yang menjelaskan bahwa ulasan dilewati. Ulasan dilanjutkan secara otomatis pada awal periode penagihan berikutnya, atau segera ketika admin menaikkan batas di [claude.ai/admin-settings/usage](https://claude.ai/admin-settings/usage).

263 

264### Temukan masalah yang tidak ditampilkan sebagai komentar sebaris

265 

266Jika judul jalankan pemeriksaan mengatakan masalah ditemukan tetapi Anda tidak melihat komentar ulasan sebaris pada diff, cari di lokasi lain tempat temuan ditampilkan:

267 

268* **Check run Details**: klik **Details** di sebelah jalankan pemeriksaan Claude Code Review di tab Checks. Tabel keparahan mencantumkan setiap temuan dengan file, baris, dan ringkasannya terlepas dari apakah komentar sebaris diterima.

269* **Files changed annotations**: buka tab **Files changed** pada PR. Temuan dirender sebagai anotasi yang terpasang langsung ke baris diff, terpisah dari komentar ulasan.

270* **Review body**: jika Anda push ke PR saat ulasan sedang berjalan, beberapa temuan mungkin mereferensikan baris yang tidak lagi ada di diff saat ini. Ini muncul di bawah judul **Additional findings** dalam teks badan ulasan daripada sebagai komentar sebaris.

271 

272## Sumber daya terkait

273 

274Code Review dirancang untuk bekerja bersama dengan sisa Claude Code. Jika Anda ingin menjalankan ulasan secara lokal sebelum membuka PR, memerlukan penyiapan yang di-host sendiri, atau ingin mendalami cara `CLAUDE.md` membentuk perilaku Claude di seluruh alat, halaman-halaman ini adalah perhentian berikutnya yang baik:

275 

276* [Plugins](/id/discover-plugins): telusuri pasar plugin, termasuk plugin `code-review` untuk menjalankan ulasan sesuai permintaan secara lokal sebelum push

277* [GitHub Actions](/id/github-actions): jalankan Claude dalam alur kerja GitHub Actions Anda sendiri untuk otomasi khusus di luar ulasan kode

278* [GitLab CI/CD](/id/gitlab-ci-cd): integrasi Claude yang di-host sendiri untuk pipeline GitLab

279* [Memory](/id/memory): cara kerja file `CLAUDE.md` di seluruh Claude Code

280* [Analytics](/id/analytics): lacak penggunaan Claude Code di luar ulasan kode

commands.md +113 −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# Perintah

6 

7> Referensi lengkap untuk perintah yang tersedia di Claude Code, termasuk perintah bawaan dan skills bundel.

8 

9Perintah mengontrol Claude Code dari dalam sesi. Mereka menyediakan cara cepat untuk mengganti model, mengelola izin, menghapus konteks, menjalankan alur kerja, dan banyak lagi.

10 

11Ketik `/` untuk melihat setiap perintah yang tersedia untuk Anda, atau ketik `/` diikuti dengan huruf untuk memfilter.

12 

13Tabel di bawah mencantumkan semua perintah yang disertakan dalam Claude Code. Entri yang ditandai **[Skill](/id/skills#bundled-skills)** adalah skills bundel. Mereka menggunakan mekanisme yang sama dengan skills yang Anda tulis sendiri: prompt yang diberikan kepada Claude, yang juga dapat Claude panggil secara otomatis ketika relevan. Semuanya yang lain adalah perintah bawaan yang perilakunya dikodekan ke dalam CLI. Untuk menambahkan perintah Anda sendiri, lihat [skills](/id/skills).

14 

15Tidak setiap perintah muncul untuk setiap pengguna. Ketersediaan tergantung pada platform, paket, dan lingkungan Anda. Misalnya, `/desktop` hanya muncul di macOS dan Windows, dan `/upgrade` hanya muncul di paket Pro dan Max.

16 

17Dalam tabel di bawah, `<arg>` menunjukkan argumen yang diperlukan dan `[arg]` menunjukkan argumen yang opsional.

18 

19| Perintah | Tujuan |

20| :---------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

21| `/add-dir <path>` | Tambahkan direktori kerja untuk akses file selama sesi saat ini. Sebagian besar konfigurasi `.claude/` [tidak ditemukan](/id/permissions#additional-directories-grant-file-access-not-configuration) dari direktori yang ditambahkan. Anda dapat nanti melanjutkan sesi dari direktori yang ditambahkan dengan `--continue` atau `--resume` |

22| `/agents` | Kelola konfigurasi [agent](/id/sub-agents) |

23| `/autofix-pr [prompt]` | Spawn sesi [Claude Code di web](/id/claude-code-on-the-web#auto-fix-pull-requests) yang memantau PR cabang saat ini dan mendorong perbaikan ketika CI gagal atau reviewer meninggalkan komentar. Mendeteksi PR terbuka dari cabang yang Anda checkout dengan `gh pr view`; untuk memantau PR yang berbeda, checkout cabangnya terlebih dahulu. Secara default sesi jarak jauh diberitahu untuk memperbaiki setiap kegagalan CI dan komentar review; teruskan prompt untuk memberikan instruksi yang berbeda, misalnya `/autofix-pr only fix lint and type errors`. Memerlukan CLI `gh` dan akses ke [Claude Code di web](/id/claude-code-on-the-web#who-can-use-claude-code-on-the-web) |

24| `/batch <instruction>` | **[Skill](/id/skills#bundled-skills).** Orkestrasi perubahan skala besar di seluruh codebase secara paralel. Meneliti codebase, menguraikan pekerjaan menjadi 5 hingga 30 unit independen, dan menyajikan rencana. Setelah disetujui, spawn satu agent latar belakang per unit dalam [git worktree](/id/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees) yang terisolasi. Setiap agent mengimplementasikan unitnya, menjalankan tes, dan membuka pull request. Memerlukan repositori git. Contoh: `/batch migrate src/ from Solid to React` |

25| `/branch [name]` | Buat cabang dari percakapan saat ini pada titik ini. Beralih Anda ke cabang dan melestarikan yang asli, yang dapat Anda kembali dengan `/resume`. Alias: `/fork`. Ketika [`CLAUDE_CODE_FORK_SUBAGENT`](/id/env-vars) diatur, `/fork` malah spawn [forked subagent](/id/sub-agents#fork-the-current-conversation) dan tidak lagi menjadi alias untuk perintah ini |

26| `/btw <question>` | Ajukan [pertanyaan sampingan](/id/interactive-mode#side-questions-with-%2Fbtw) dengan cepat tanpa menambahkan ke percakapan |

27| `/chrome` | Konfigurasi pengaturan [Claude in Chrome](/id/chrome) |

28| `/claude-api [migrate\|managed-agents-onboard]` | **[Skill](/id/skills#bundled-skills).** Muat materi referensi Claude API untuk bahasa proyek Anda (Python, TypeScript, Java, Go, Ruby, C#, PHP, atau cURL) dan referensi Managed Agents. Mencakup tool use, streaming, batches, structured outputs, dan pitfalls umum. Juga mengaktifkan secara otomatis ketika kode Anda mengimpor `anthropic` atau `@anthropic-ai/sdk`. Jalankan `/claude-api migrate` untuk meningkatkan kode Claude API yang ada ke model yang lebih baru: Claude menanyakan file mana yang akan dipindai dan model mana yang akan ditargetkan, kemudian memperbarui ID model, konfigurasi thinking, dan parameter lain yang berubah antar versi. Jalankan `/claude-api managed-agents-onboard` untuk panduan interaktif yang membuat Managed Agent baru dari awal |

29| `/clear` | Mulai percakapan baru dengan konteks kosong. Percakapan sebelumnya tetap tersedia di `/resume`. Untuk membebaskan konteks sambil melanjutkan percakapan yang sama, gunakan `/compact` sebagai gantinya. Alias: `/reset`, `/new` |

30| `/color [color\|default]` | Atur warna bilah prompt untuk sesi saat ini. Warna yang tersedia: `red`, `blue`, `green`, `yellow`, `purple`, `orange`, `pink`, `cyan`. Gunakan `default` untuk mengatur ulang. Ketika [Remote Control](/id/remote-control) terhubung, warna disinkronkan ke claude.ai/code |

31| `/compact [instructions]` | Bebaskan konteks dengan merangkum percakapan sejauh ini. Secara opsional teruskan instruksi fokus untuk ringkasan. Lihat [bagaimana compaction menangani rules, skills, dan memory files](/id/context-window#what-survives-compaction) |

32| `/config` | Buka antarmuka [Settings](/id/settings) untuk menyesuaikan tema, model, [output style](/id/output-styles), dan preferensi lainnya. Alias: `/settings` |

33| `/context` | Visualisasikan penggunaan konteks saat ini sebagai grid berwarna. Menampilkan saran optimasi untuk alat yang berat konteks, memory bloat, dan peringatan kapasitas |

34| `/copy [N]` | Salin respons asisten terakhir ke clipboard. Teruskan angka `N` untuk menyalin respons ke-N terbaru: `/copy 2` menyalin respons kedua terakhir. Ketika blok kode ada, menampilkan pemilih interaktif untuk memilih blok individual atau respons lengkap. Tekan `w` di pemilih untuk menulis pilihan ke file alih-alih clipboard, yang berguna melalui SSH |

35| `/cost` | Alias untuk `/usage` |

36| `/debug [description]` | **[Skill](/id/skills#bundled-skills).** Aktifkan debug logging untuk sesi saat ini dan troubleshoot masalah dengan membaca session debug log. Debug logging dimatikan secara default kecuali Anda memulai dengan `claude --debug`, jadi menjalankan `/debug` di tengah sesi mulai menangkap log dari titik itu ke depan. Secara opsional jelaskan masalah untuk fokus analisis |

37| `/desktop` | Lanjutkan sesi saat ini di aplikasi Claude Code Desktop. Hanya macOS dan Windows. Alias: `/app` |

38| `/diff` | Buka penampil diff interaktif yang menampilkan perubahan yang belum di-commit dan per-turn diffs. Gunakan panah kiri/kanan untuk beralih antara git diff saat ini dan turn Claude individual, dan atas/bawah untuk menelusuri file |

39| `/doctor` | Diagnosa dan verifikasi instalasi dan pengaturan Claude Code Anda. Hasil ditampilkan dengan ikon status. Tekan `f` untuk membuat Claude memperbaiki masalah yang dilaporkan |

40| `/effort [level\|auto]` | Atur [effort level](/id/model-config#adjust-effort-level) model. Menerima `low`, `medium`, `high`, `xhigh`, atau `max`; level yang tersedia tergantung pada model dan `max` hanya untuk sesi. `auto` mengatur ulang ke default model. Tanpa argumen, membuka slider interaktif; gunakan panah kiri dan kanan untuk memilih level dan `Enter` untuk menerapkan. Berlaku segera tanpa menunggu respons saat ini selesai |

41| `/exit` | Keluar dari CLI. Alias: `/quit` |

42| `/export [filename]` | Ekspor percakapan saat ini sebagai teks biasa. Dengan nama file, menulis langsung ke file tersebut. Tanpa, membuka dialog untuk menyalin ke clipboard atau menyimpan ke file |

43| `/extra-usage` | Konfigurasi penggunaan ekstra untuk terus bekerja ketika batas laju tercapai |

44| `/fast [on\|off]` | Alihkan [fast mode](/id/fast-mode) aktif atau nonaktif |

45| `/feedback [report]` | Kirimkan umpan balik tentang Claude Code. Alias: `/bug` |

46| `/fewer-permission-prompts` | **[Skill](/id/skills#bundled-skills).** Pindai transkrip Anda untuk Bash dan MCP tool calls read-only umum, kemudian tambahkan allowlist prioritas ke project `.claude/settings.json` untuk mengurangi permission prompts |

47| `/focus` | Alihkan focus view, yang menampilkan hanya prompt terakhir Anda, ringkasan tool-call satu baris dengan edit diffstats, dan respons final. Pilihan bertahan di seluruh sesi. Hanya tersedia dalam [fullscreen rendering](/id/fullscreen) |

48| `/heapdump` | Tulis JavaScript heap snapshot dan memory breakdown ke `~/Desktop`, atau direktori home Anda di Linux tanpa folder Desktop, untuk mendiagnosis penggunaan memori tinggi. Lihat [troubleshooting](/id/troubleshooting#high-cpu-or-memory-usage) |

49| `/help` | Tampilkan bantuan dan perintah yang tersedia |

50| `/hooks` | Lihat konfigurasi [hook](/id/hooks) untuk peristiwa alat |

51| `/ide` | Kelola integrasi IDE dan tampilkan status |

52| `/init` | Inisialisasi proyek dengan panduan `CLAUDE.md`. Atur `CLAUDE_CODE_NEW_INIT=1` untuk alur interaktif yang juga memandu melalui skills, hooks, dan file memori pribadi |

53| `/insights` | Hasilkan laporan yang menganalisis sesi Claude Code Anda, termasuk area proyek, pola interaksi, dan titik gesekan |

54| `/install-github-app` | Siapkan aplikasi [Claude GitHub Actions](/id/github-actions) untuk repositori. Memandu Anda melalui pemilihan repo dan konfigurasi integrasi |

55| `/install-slack-app` | Instal aplikasi Claude Slack. Membuka browser untuk menyelesaikan alur OAuth |

56| `/keybindings` | Buka atau buat file konfigurasi pintasan keyboard Anda |

57| `/login` | Masuk ke akun Anthropic Anda |

58| `/logout` | Keluar dari akun Anthropic Anda |

59| `/loop [interval] [prompt]` | **[Skill](/id/skills#bundled-skills).** Jalankan prompt berulang kali sementara sesi tetap terbuka. Hilangkan interval dan Claude self-paces antara iterasi. Hilangkan prompt dan Claude menjalankan autonomous maintenance check, atau prompt di `.claude/loop.md` jika ada. Contoh: `/loop 5m check if the deploy finished`. Lihat [Run prompts on a schedule](/id/scheduled-tasks). Alias: `/proactive` |

60| `/mcp` | Kelola koneksi server MCP dan autentikasi OAuth |

61| `/memory` | Edit file memori `CLAUDE.md`, aktifkan atau nonaktifkan [auto-memory](/id/memory#auto-memory), dan lihat entri auto-memory |

62| `/mobile` | Tampilkan kode QR untuk mengunduh aplikasi Claude mobile. Alias: `/ios`, `/android` |

63| `/model [model]` | Pilih atau ubah model AI. Untuk model yang mendukungnya, gunakan panah kiri/kanan untuk [menyesuaikan effort level](/id/model-config#adjust-effort-level). Tanpa argumen, membuka pemilih yang meminta konfirmasi ketika percakapan memiliki output sebelumnya, karena respons berikutnya membaca ulang riwayat lengkap tanpa cached context. Setelah dikonfirmasi, perubahan berlaku tanpa menunggu respons saat ini selesai |

64| `/passes` | Bagikan minggu gratis Claude Code dengan teman. Hanya terlihat jika akun Anda memenuhi syarat |

65| `/permissions` | Kelola aturan allow, ask, dan deny untuk izin alat. Membuka dialog interaktif di mana Anda dapat melihat aturan berdasarkan scope, menambah atau menghapus aturan, mengelola direktori kerja, dan meninjau [recent auto mode denials](/id/auto-mode-config#review-denials). Alias: `/allowed-tools` |

66| `/plan [description]` | Masuki plan mode langsung dari prompt. Teruskan deskripsi opsional untuk memasuki plan mode dan segera mulai dengan tugas tersebut, misalnya `/plan fix the auth bug` |

67| `/plugin` | Kelola Claude Code [plugins](/id/plugins) |

68| `/powerup` | Temukan fitur Claude Code melalui pelajaran interaktif cepat dengan demo animasi |

69| `/pr-comments [PR]` | {/* max-version: 2.1.90 */}Dihapus di v2.1.91. Tanyakan Claude secara langsung untuk melihat komentar pull request sebagai gantinya. Pada versi sebelumnya, mengambil dan menampilkan komentar dari pull request GitHub; secara otomatis mendeteksi PR untuk cabang saat ini, atau teruskan URL atau nomor PR. Memerlukan CLI `gh` |

70| `/privacy-settings` | Lihat dan perbarui pengaturan privasi Anda. Hanya tersedia untuk pelanggan paket Pro dan Max |

71| `/recap` | Hasilkan ringkasan satu baris dari sesi saat ini sesuai permintaan. Lihat [Session recap](/id/interactive-mode#session-recap) untuk recap otomatis yang muncul setelah Anda pergi |

72| `/release-notes` | Lihat changelog dalam pemilih versi interaktif. Pilih versi spesifik untuk melihat release notes-nya, atau pilih untuk menampilkan semua versi |

73| `/reload-plugins` | Muat ulang semua [plugins](/id/plugins) aktif untuk menerapkan perubahan yang tertunda tanpa memulai ulang. Melaporkan jumlah untuk setiap komponen yang dimuat ulang dan menandai kesalahan pemuatan apa pun |

74| `/remote-control` | Buat sesi ini tersedia untuk [remote control](/id/remote-control) dari claude.ai. Alias: `/rc` |

75| `/remote-env` | Konfigurasi lingkungan jarak jauh default untuk [sesi web yang dimulai dengan `--remote`](/id/claude-code-on-the-web#configure-your-environment) |

76| `/rename [name]` | Ubah nama sesi saat ini dan tampilkan nama di bilah prompt. Tanpa nama, secara otomatis menghasilkan satu dari riwayat percakapan |

77| `/resume [session]` | Lanjutkan percakapan berdasarkan ID atau nama, atau buka pemilih sesi. Alias: `/continue` |

78| `/review [PR]` | Tinjau pull request secara lokal dalam sesi saat ini Anda. Untuk review berbasis cloud yang lebih dalam, lihat [`/ultrareview`](/id/ultrareview) |

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

80| `/sandbox` | Alihkan [sandbox mode](/id/sandboxing). Tersedia hanya di platform yang didukung |

81| `/schedule [description]` | Buat, perbarui, daftar, atau jalankan [routines](/id/routines). Claude memandu Anda melalui pengaturan secara percakapan. Alias: `/routines` |

82| `/security-review` | Analisis perubahan yang tertunda pada cabang saat ini untuk kerentanan keamanan. Meninjau git diff dan mengidentifikasi risiko seperti injeksi, masalah auth, dan paparan data |

83| `/setup-bedrock` | Konfigurasi autentikasi [Amazon Bedrock](/id/amazon-bedrock), region, dan model pins melalui wizard interaktif. Hanya terlihat ketika `CLAUDE_CODE_USE_BEDROCK=1` diatur. Pengguna Bedrock pertama kali juga dapat mengakses wizard ini dari layar login |

84| `/setup-vertex` | Konfigurasi autentikasi [Google Vertex AI](/id/google-vertex-ai), proyek, region, dan model pins melalui wizard interaktif. Hanya terlihat ketika `CLAUDE_CODE_USE_VERTEX=1` diatur. Pengguna Vertex AI pertama kali juga dapat mengakses wizard ini dari layar login |

85| `/simplify [focus]` | **[Skill](/id/skills#bundled-skills).** Tinjau file yang baru-baru ini diubah untuk reuse kode, kualitas, dan masalah efisiensi, kemudian perbaiki. Spawn tiga review agents secara paralel, agregat temuan mereka, dan terapkan perbaikan. Teruskan teks untuk fokus pada kekhawatiran spesifik: `/simplify focus on memory efficiency` |

86| `/skills` | Daftar [skills](/id/skills) yang tersedia. Tekan `t` untuk mengurutkan berdasarkan token count |

87| `/stats` | Alias untuk `/usage`. Membuka pada tab Stats |

88| `/status` | Buka antarmuka Settings (tab Status) yang menampilkan versi, model, akun, dan konektivitas. Bekerja saat Claude merespons, tanpa menunggu respons saat ini selesai |

89| `/statusline` | Konfigurasi [status line](/id/statusline) Claude Code. Jelaskan apa yang Anda inginkan, atau jalankan tanpa argumen untuk auto-configure dari prompt shell Anda |

90| `/stickers` | Pesan stiker Claude Code |

91| `/tasks` | Daftar dan kelola tugas latar belakang. Juga tersedia sebagai `/bashes` |

92| `/team-onboarding` | Hasilkan panduan onboarding tim dari riwayat penggunaan Claude Code Anda. Claude menganalisis sesi, perintah, dan penggunaan server MCP Anda dari 30 hari terakhir dan menghasilkan panduan markdown yang dapat ditempel rekan kerja sebagai pesan pertama untuk setup dengan cepat |

93| `/teleport` | Tarik sesi [Claude Code di web](/id/claude-code-on-the-web#from-web-to-terminal) ke terminal ini: membuka pemilih, kemudian mengambil cabang dan percakapan. Juga tersedia sebagai `/tp`. Memerlukan langganan claude.ai |

94| `/terminal-setup` | Konfigurasi pintasan keyboard terminal untuk Shift+Enter dan pintasan lainnya. Hanya terlihat di terminal yang membutuhkannya, seperti VS Code, Cursor, Windsurf, Alacritty, atau Zed |

95| `/theme` | Ubah tema warna. Mencakup opsi `auto` yang mengikuti mode gelap atau terang terminal Anda, varian terang dan gelap, tema yang dapat diakses buta warna (daltonized), tema ANSI yang menggunakan palet warna terminal Anda, dan [custom themes](/id/terminal-config#create-a-custom-theme) apa pun dari `~/.claude/themes/` atau plugins. Pilih **New custom theme…** untuk membuat satu |

96| `/tui [default\|fullscreen]` | Atur renderer UI terminal dan luncurkan ulang ke dalamnya dengan percakapan Anda tetap utuh. `fullscreen` mengaktifkan [flicker-free alt-screen renderer](/id/fullscreen). Tanpa argumen, mencetak renderer aktif |

97| `/ultraplan <prompt>` | Buat draf rencana dalam sesi [ultraplan](/id/ultraplan), tinjau di browser Anda, kemudian jalankan secara jarak jauh atau kirim kembali ke terminal Anda |

98| `/ultrareview [PR]` | Jalankan review kode multi-agent yang mendalam dalam sandbox cloud dengan [ultrareview](/id/ultrareview). Mencakup 3 run gratis di Pro dan Max melalui 5 Mei 2026, kemudian memerlukan [extra usage](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) |

99| `/upgrade` | Buka halaman upgrade untuk beralih ke tingkat paket yang lebih tinggi |

100| `/usage` | Tampilkan biaya sesi, batas penggunaan paket, dan statistik aktivitas. Lihat [cost tracking guide](/id/costs#using-the-%2Fusage-command) untuk detail khusus langganan. `/cost` dan `/stats` adalah alias |

101| `/vim` | {/* max-version: 2.1.91 */}Dihapus di v2.1.92. Untuk beralih antara mode pengeditan Vim dan Normal, gunakan `/config` → Editor mode |

102| `/voice [hold\|tap\|off]` | Alihkan [voice dictation](/id/voice-dictation), atau aktifkan dalam mode spesifik. Memerlukan akun Claude.ai |

103| `/web-setup` | Hubungkan akun GitHub Anda ke [Claude Code di web](/id/web-quickstart#connect-from-your-terminal) menggunakan kredensial CLI `gh` lokal Anda. `/schedule` meminta ini secara otomatis jika GitHub tidak terhubung |

104 

105## MCP prompts

106 

107Server MCP dapat mengekspos prompt yang muncul sebagai perintah. Ini menggunakan format `/mcp__<server>__<prompt>` dan secara dinamis ditemukan dari server yang terhubung. Lihat [MCP prompts](/id/mcp#use-mcp-prompts-as-commands) untuk detail.

108 

109## Lihat juga

110 

111* [Skills](/id/skills): buat perintah Anda sendiri

112* [Interactive mode](/id/interactive-mode): pintasan keyboard, Vim mode, dan command history

113* [CLI reference](/id/cli-reference): launch-time flags

common-workflows.md +1030 −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# Alur kerja umum

6 

7> Panduan langkah demi langkah untuk menjelajahi basis kode, memperbaiki bug, refactoring, pengujian, dan tugas sehari-hari lainnya dengan Claude Code.

8 

9Halaman ini mencakup alur kerja praktis untuk pengembangan sehari-hari: menjelajahi kode yang tidak familiar, debugging, refactoring, menulis tes, membuat PR, dan mengelola sesi. Setiap bagian mencakup contoh prompt yang dapat Anda sesuaikan dengan proyek Anda sendiri. Untuk pola dan tips tingkat yang lebih tinggi, lihat [Best practices](/id/best-practices).

10 

11## Pahami basis kode baru

12 

13### Dapatkan gambaran umum basis kode dengan cepat

14 

15Misalkan Anda baru saja bergabung dengan proyek baru dan perlu memahami strukturnya dengan cepat.

16 

17<Steps>

18 <Step title="Navigasi ke direktori root proyek">

19 ```bash theme={null}

20 cd /path/to/project

21 ```

22 </Step>

23 

24 <Step title="Mulai Claude Code">

25 ```bash theme={null}

26 claude

27 ```

28 </Step>

29 

30 <Step title="Minta gambaran umum tingkat tinggi">

31 ```text theme={null}

32 give me an overview of this codebase

33 ```

34 </Step>

35 

36 <Step title="Selami komponen spesifik lebih dalam">

37 ```text theme={null}

38 explain the main architecture patterns used here

39 ```

40 

41 ```text theme={null}

42 what are the key data models?

43 ```

44 

45 ```text theme={null}

46 how is authentication handled?

47 ```

48 </Step>

49</Steps>

50 

51<Tip>

52 Tips:

53 

54 * Mulai dengan pertanyaan luas, kemudian fokus ke area spesifik

55 * Tanyakan tentang konvensi koding dan pola yang digunakan dalam proyek

56 * Minta glosarium istilah khusus proyek

57</Tip>

58 

59### Temukan kode yang relevan

60 

61Misalkan Anda perlu menemukan kode yang terkait dengan fitur atau fungsionalitas tertentu.

62 

63<Steps>

64 <Step title="Minta Claude untuk menemukan file yang relevan">

65 ```text theme={null}

66 find the files that handle user authentication

67 ```

68 </Step>

69 

70 <Step title="Dapatkan konteks tentang cara komponen berinteraksi">

71 ```text theme={null}

72 how do these authentication files work together?

73 ```

74 </Step>

75 

76 <Step title="Pahami alur eksekusi">

77 ```text theme={null}

78 trace the login process from front-end to database

79 ```

80 </Step>

81</Steps>

82 

83<Tip>

84 Tips:

85 

86 * Jadilah spesifik tentang apa yang Anda cari

87 * Gunakan bahasa domain dari proyek

88 * Instal [code intelligence plugin](/id/discover-plugins#code-intelligence) untuk bahasa Anda untuk memberikan Claude navigasi "go to definition" dan "find references" yang presisi

89</Tip>

90 

91***

92 

93## Perbaiki bug secara efisien

94 

95Misalkan Anda telah mengalami pesan kesalahan dan perlu menemukan dan memperbaiki sumbernya.

96 

97<Steps>

98 <Step title="Bagikan kesalahan dengan Claude">

99 ```text theme={null}

100 I'm seeing an error when I run npm test

101 ```

102 </Step>

103 

104 <Step title="Minta rekomendasi perbaikan">

105 ```text theme={null}

106 suggest a few ways to fix the @ts-ignore in user.ts

107 ```

108 </Step>

109 

110 <Step title="Terapkan perbaikan">

111 ```text theme={null}

112 update user.ts to add the null check you suggested

113 ```

114 </Step>

115</Steps>

116 

117<Tip>

118 Tips:

119 

120 * Beri tahu Claude perintah untuk mereproduksi masalah dan dapatkan stack trace

121 * Sebutkan langkah apa pun untuk mereproduksi kesalahan

122 * Beri tahu Claude jika kesalahan bersifat intermiten atau konsisten

123</Tip>

124 

125***

126 

127## Refactor kode

128 

129Misalkan Anda perlu memperbarui kode lama untuk menggunakan pola dan praktik modern.

130 

131<Steps>

132 <Step title="Identifikasi kode legacy untuk refactoring">

133 ```text theme={null}

134 find deprecated API usage in our codebase

135 ```

136 </Step>

137 

138 <Step title="Dapatkan rekomendasi refactoring">

139 ```text theme={null}

140 suggest how to refactor utils.js to use modern JavaScript features

141 ```

142 </Step>

143 

144 <Step title="Terapkan perubahan dengan aman">

145 ```text theme={null}

146 refactor utils.js to use ES2024 features while maintaining the same behavior

147 ```

148 </Step>

149 

150 <Step title="Verifikasi refactoring">

151 ```text theme={null}

152 run tests for the refactored code

153 ```

154 </Step>

155</Steps>

156 

157<Tip>

158 Tips:

159 

160 * Minta Claude untuk menjelaskan manfaat pendekatan modern

161 * Minta agar perubahan mempertahankan kompatibilitas backward ketika diperlukan

162 * Lakukan refactoring dalam kenaikan kecil yang dapat diuji

163</Tip>

164 

165***

166 

167## Gunakan subagents khusus

168 

169Misalkan Anda ingin menggunakan subagents AI khusus untuk menangani tugas spesifik dengan lebih efektif.

170 

171<Steps>

172 <Step title="Lihat subagents yang tersedia">

173 ```text theme={null}

174 /agents

175 ```

176 

177 Ini menampilkan semua subagents yang tersedia dan memungkinkan Anda membuat yang baru.

178 </Step>

179 

180 <Step title="Gunakan subagents secara otomatis">

181 Claude Code secara otomatis mendelegasikan tugas yang sesuai ke subagents khusus:

182 

183 ```text theme={null}

184 review my recent code changes for security issues

185 ```

186 

187 ```text theme={null}

188 run all tests and fix any failures

189 ```

190 </Step>

191 

192 <Step title="Secara eksplisit minta subagents spesifik">

193 ```text theme={null}

194 use the code-reviewer subagent to check the auth module

195 ```

196 

197 ```text theme={null}

198 have the debugger subagent investigate why users can't log in

199 ```

200 </Step>

201 

202 <Step title="Buat subagents kustom untuk alur kerja Anda">

203 ```text theme={null}

204 /agents

205 ```

206 

207 Kemudian pilih "Create New subagent" dan ikuti prompt untuk menentukan:

208 

209 * Pengenal unik yang menggambarkan tujuan subagent (misalnya, `code-reviewer`, `api-designer`).

210 * Kapan Claude harus menggunakan agen ini

211 * Alat mana yang dapat diaksesnya

212 * Prompt sistem yang menggambarkan peran dan perilaku agen

213 </Step>

214</Steps>

215 

216<Tip>

217 Tips:

218 

219 * Buat subagents khusus proyek di `.claude/agents/` untuk berbagi tim

220 * Gunakan bidang `description` deskriptif untuk mengaktifkan delegasi otomatis

221 * Batasi akses alat ke apa yang benar-benar dibutuhkan setiap subagent

222 * Periksa [dokumentasi subagents](/id/sub-agents) untuk contoh terperinci

223</Tip>

224 

225***

226 

227## Gunakan Plan Mode untuk analisis kode yang aman

228 

229Plan Mode menginstruksikan Claude untuk membuat rencana dengan menganalisis basis kode dengan operasi read-only, sempurna untuk menjelajahi basis kode, merencanakan perubahan kompleks, atau meninjau kode dengan aman. Dalam Plan Mode, Claude menggunakan [`AskUserQuestion`](/id/tools-reference) untuk mengumpulkan persyaratan dan memperjelas tujuan Anda sebelum mengusulkan rencana.

230 

231### Kapan menggunakan Plan Mode

232 

233* **Implementasi multi-langkah**: Ketika fitur Anda memerlukan pengeditan ke banyak file

234* **Eksplorasi kode**: Ketika Anda ingin meneliti basis kode secara menyeluruh sebelum mengubah apa pun

235* **Pengembangan interaktif**: Ketika Anda ingin mengulangi arah dengan Claude

236 

237### Cara menggunakan Plan Mode

238 

239**Aktifkan Plan Mode selama sesi**

240 

241Anda dapat beralih ke Plan Mode selama sesi menggunakan **Shift+Tab** untuk bersiklus melalui mode izin.

242 

243Jika Anda berada dalam Normal Mode, **Shift+Tab** pertama kali beralih ke Auto-Accept Mode, ditunjukkan oleh `⏵⏵ accept edits on` di bagian bawah terminal. **Shift+Tab** berikutnya akan beralih ke Plan Mode, ditunjukkan oleh `⏸ plan mode on`.

244 

245**Mulai sesi baru dalam Plan Mode**

246 

247Untuk memulai sesi baru dalam Plan Mode, gunakan flag `--permission-mode plan`:

248 

249```bash theme={null}

250claude --permission-mode plan

251```

252 

253**Jalankan kueri "headless" dalam Plan Mode**

254 

255Anda juga dapat menjalankan kueri dalam Plan Mode secara langsung dengan `-p` (yaitu, dalam ["headless mode"](/id/headless)):

256 

257```bash theme={null}

258claude --permission-mode plan -p "Analyze the authentication system and suggest improvements"

259```

260 

261### Contoh: Merencanakan refactor kompleks

262 

263```bash theme={null}

264claude --permission-mode plan

265```

266 

267```text theme={null}

268I need to refactor our authentication system to use OAuth2. Create a detailed migration plan.

269```

270 

271Claude menganalisis implementasi saat ini dan membuat rencana komprehensif. Perbaiki dengan tindak lanjut:

272 

273```text theme={null}

274What about backward compatibility?

275```

276 

277```text theme={null}

278How should we handle database migration?

279```

280 

281<Tip>Tekan `Ctrl+G` untuk membuka rencana di editor teks default Anda, di mana Anda dapat mengeditnya secara langsung sebelum Claude melanjutkan.</Tip>

282 

283Ketika Anda menerima rencana, Claude secara otomatis memberi nama sesi dari konten rencana. Nama muncul di bilah prompt dan di pemilih sesi. Jika Anda telah menetapkan nama dengan `--name` atau `/rename`, menerima rencana tidak akan menimpanya.

284 

285### Konfigurasikan Plan Mode sebagai default

286 

287```json theme={null}

288// .claude/settings.json

289{

290 "permissions": {

291 "defaultMode": "plan"

292 }

293}

294```

295 

296Lihat [dokumentasi settings](/id/settings#available-settings) untuk opsi konfigurasi lainnya.

297 

298***

299 

300## Bekerja dengan tes

301 

302Misalkan Anda perlu menambahkan tes untuk kode yang tidak tercakup.

303 

304<Steps>

305 <Step title="Identifikasi kode yang tidak diuji">

306 ```text theme={null}

307 find functions in NotificationsService.swift that are not covered by tests

308 ```

309 </Step>

310 

311 <Step title="Hasilkan scaffolding tes">

312 ```text theme={null}

313 add tests for the notification service

314 ```

315 </Step>

316 

317 <Step title="Tambahkan kasus tes yang bermakna">

318 ```text theme={null}

319 add test cases for edge conditions in the notification service

320 ```

321 </Step>

322 

323 <Step title="Jalankan dan verifikasi tes">

324 ```text theme={null}

325 run the new tests and fix any failures

326 ```

327 </Step>

328</Steps>

329 

330Claude dapat menghasilkan tes yang mengikuti pola dan konvensi proyek Anda yang ada. Saat meminta tes, jadilah spesifik tentang perilaku apa yang ingin Anda verifikasi. Claude memeriksa file tes yang ada untuk mencocokkan gaya, framework, dan pola pernyataan yang sudah digunakan.

331 

332Untuk cakupan komprehensif, minta Claude untuk mengidentifikasi kasus tepi yang mungkin Anda lewatkan. Claude dapat menganalisis jalur kode Anda dan menyarankan tes untuk kondisi kesalahan, nilai batas, dan input yang tidak terduga yang mudah diabaikan.

333 

334***

335 

336## Buat pull request

337 

338Anda dapat membuat pull request dengan meminta Claude secara langsung ("create a pr for my changes"), atau memandu Claude melaluinya langkah demi langkah:

339 

340<Steps>

341 <Step title="Ringkas perubahan Anda">

342 ```text theme={null}

343 summarize the changes I've made to the authentication module

344 ```

345 </Step>

346 

347 <Step title="Hasilkan pull request">

348 ```text theme={null}

349 create a pr

350 ```

351 </Step>

352 

353 <Step title="Tinjau dan perbaiki">

354 ```text theme={null}

355 enhance the PR description with more context about the security improvements

356 ```

357 </Step>

358</Steps>

359 

360Ketika Anda membuat PR menggunakan `gh pr create`, sesi secara otomatis ditautkan ke PR tersebut. Anda dapat melanjutkannya nanti dengan `claude --from-pr <number>`.

361 

362<Tip>

363 Tinjau PR yang dihasilkan Claude sebelum mengirimkan dan minta Claude untuk menyoroti risiko atau pertimbangan potensial.

364</Tip>

365 

366## Tangani dokumentasi

367 

368Misalkan Anda perlu menambah atau memperbarui dokumentasi untuk kode Anda.

369 

370<Steps>

371 <Step title="Identifikasi kode yang tidak terdokumentasi">

372 ```text theme={null}

373 find functions without proper JSDoc comments in the auth module

374 ```

375 </Step>

376 

377 <Step title="Hasilkan dokumentasi">

378 ```text theme={null}

379 add JSDoc comments to the undocumented functions in auth.js

380 ```

381 </Step>

382 

383 <Step title="Tinjau dan tingkatkan">

384 ```text theme={null}

385 improve the generated documentation with more context and examples

386 ```

387 </Step>

388 

389 <Step title="Verifikasi dokumentasi">

390 ```text theme={null}

391 check if the documentation follows our project standards

392 ```

393 </Step>

394</Steps>

395 

396<Tip>

397 Tips:

398 

399 * Tentukan gaya dokumentasi yang Anda inginkan (JSDoc, docstrings, dll.)

400 * Minta contoh dalam dokumentasi

401 * Minta dokumentasi untuk API publik, antarmuka, dan logika kompleks

402</Tip>

403 

404***

405 

406## Bekerja dalam catatan dan folder non-kode

407 

408Claude Code bekerja di direktori apa pun. Jalankan di dalam vault catatan, folder dokumentasi, atau koleksi file markdown apa pun untuk mencari, mengedit, dan mengatur ulang konten dengan cara yang sama seperti Anda melakukan kode.

409 

410Direktori `.claude/` dan `CLAUDE.md` duduk bersama direktori konfigurasi alat lain tanpa konflik. Claude membaca file segar pada setiap panggilan alat, jadi ia melihat edit yang Anda buat di aplikasi lain saat berikutnya membaca file tersebut.

411 

412***

413 

414## Bekerja dengan gambar

415 

416Misalkan Anda perlu bekerja dengan gambar dalam basis kode Anda, dan Anda ingin bantuan Claude menganalisis konten gambar.

417 

418<Steps>

419 <Step title="Tambahkan gambar ke percakapan">

420 Anda dapat menggunakan salah satu metode ini:

421 

422 1. Seret dan lepas gambar ke jendela Claude Code

423 2. Salin gambar dan tempel ke CLI dengan ctrl+v (Jangan gunakan cmd+v)

424 3. Berikan jalur gambar ke Claude. Misalnya, "Analyze this image: /path/to/your/image.png"

425 </Step>

426 

427 <Step title="Minta Claude untuk menganalisis gambar">

428 ```text theme={null}

429 What does this image show?

430 ```

431 

432 ```text theme={null}

433 Describe the UI elements in this screenshot

434 ```

435 

436 ```text theme={null}

437 Are there any problematic elements in this diagram?

438 ```

439 </Step>

440 

441 <Step title="Gunakan gambar untuk konteks">

442 ```text theme={null}

443 Here's a screenshot of the error. What's causing it?

444 ```

445 

446 ```text theme={null}

447 This is our current database schema. How should we modify it for the new feature?

448 ```

449 </Step>

450 

451 <Step title="Dapatkan saran kode dari konten visual">

452 ```text theme={null}

453 Generate CSS to match this design mockup

454 ```

455 

456 ```text theme={null}

457 What HTML structure would recreate this component?

458 ```

459 </Step>

460</Steps>

461 

462<Tip>

463 Tips:

464 

465 * Gunakan gambar ketika deskripsi teks akan tidak jelas atau merepotkan

466 * Sertakan tangkapan layar kesalahan, desain UI, atau diagram untuk konteks yang lebih baik

467 * Anda dapat bekerja dengan beberapa gambar dalam percakapan

468 * Analisis gambar bekerja dengan diagram, tangkapan layar, mockup, dan lainnya

469 * Ketika Claude mereferensikan gambar (misalnya, `[Image #1]`), `Cmd+Click` (Mac) atau `Ctrl+Click` (Windows/Linux) tautan untuk membuka gambar di penampil default Anda

470</Tip>

471 

472***

473 

474## File dan direktori referensi

475 

476Gunakan @ untuk dengan cepat menyertakan file atau direktori tanpa menunggu Claude membacanya.

477 

478<Steps>

479 <Step title="Referensikan file tunggal">

480 ```text theme={null}

481 Explain the logic in @src/utils/auth.js

482 ```

483 

484 Ini menyertakan konten lengkap file dalam percakapan.

485 </Step>

486 

487 <Step title="Referensikan direktori">

488 ```text theme={null}

489 What's the structure of @src/components?

490 ```

491 

492 Ini menyediakan daftar direktori dengan informasi file.

493 </Step>

494 

495 <Step title="Referensikan sumber daya MCP">

496 ```text theme={null}

497 Show me the data from @github:repos/owner/repo/issues

498 ```

499 

500 Ini mengambil data dari server MCP yang terhubung menggunakan format @server:resource. Lihat [sumber daya MCP](/id/mcp#use-mcp-resources) untuk detail.

501 </Step>

502</Steps>

503 

504<Tip>

505 Tips:

506 

507 * Jalur file dapat relatif atau absolut

508 * Referensi file @ menambahkan `CLAUDE.md` di direktori file dan direktori induk ke konteks

509 * Referensi direktori menampilkan daftar file, bukan konten

510 * Anda dapat mereferensikan beberapa file dalam satu pesan (misalnya, "@file1.js and @file2.js")

511</Tip>

512 

513***

514 

515## Gunakan extended thinking (thinking mode)

516 

517[Extended thinking](https://platform.claude.com/docs/en/build-with-claude/extended-thinking) diaktifkan secara default, memberikan Claude ruang untuk bernalar melalui masalah kompleks langkah demi langkah sebelum merespons. Penalaran ini terlihat dalam verbose mode, yang dapat Anda aktifkan dengan `Ctrl+O`. Selama extended thinking, spinner menampilkan petunjuk kemajuan inline seperti "still thinking" dan "almost done thinking" untuk menunjukkan bahwa Claude sedang bekerja secara aktif.

518 

519Selain itu, [model yang mendukung effort](/id/model-config#adjust-effort-level) menggunakan adaptive reasoning: alih-alih anggaran token thinking yang tetap, model secara dinamis memutuskan apakah dan berapa banyak untuk berpikir berdasarkan pengaturan effort level Anda dan tugas yang dihadapi. Adaptive reasoning memungkinkan Claude merespons lebih cepat untuk prompt rutin dan menyisihkan pemikiran yang lebih dalam untuk langkah-langkah yang mendapat manfaat darinya.

520 

521Extended thinking sangat berharga untuk keputusan arsitektur kompleks, bug menantang, perencanaan implementasi multi-langkah, dan mengevaluasi trade-off antara pendekatan yang berbeda.

522 

523<Note>

524 Frasa seperti "think", "think hard", dan "think more" ditafsirkan sebagai instruksi prompt reguler dan tidak mengalokasikan token thinking.

525</Note>

526 

527### Konfigurasikan thinking mode

528 

529Thinking diaktifkan secara default, tetapi Anda dapat menyesuaikan atau menonaktifkannya.

530 

531| Scope | Cara mengkonfigurasi | Detail |

532| --------------------------- | ----------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

533| **Effort level** | Jalankan `/effort`, sesuaikan di `/model`, atau atur [`CLAUDE_CODE_EFFORT_LEVEL`](/id/env-vars) | Kontrol kedalaman thinking pada [model yang didukung](/id/model-config#adjust-effort-level) |

534| **Kata kunci `ultrathink`** | Sertakan "ultrathink" di mana saja dalam prompt Anda | Menambahkan instruksi in-context yang memberi tahu model untuk bernalar lebih banyak pada giliran itu. Tidak mengubah effort level itu sendiri; lihat [Adjust effort level](/id/model-config#adjust-effort-level) untuk itu |

535| **Pintasan toggle** | Tekan `Option+T` (macOS) atau `Alt+T` (Windows/Linux) | Toggle thinking on/off untuk sesi saat ini (semua model). Mungkin memerlukan [konfigurasi terminal](/id/terminal-config) untuk mengaktifkan pintasan tombol Option |

536| **Default global** | Gunakan `/config` untuk toggle thinking mode | Menetapkan default Anda di semua proyek (semua model).<br />Disimpan sebagai `alwaysThinkingEnabled` di `~/.claude/settings.json` |

537| **Batasi anggaran token** | Atur variabel lingkungan [`MAX_THINKING_TOKENS`](/id/env-vars) | Batasi anggaran thinking ke jumlah token tertentu. Pada model dengan adaptive reasoning, hanya `0` berlaku kecuali adaptive reasoning dinonaktifkan. Contoh: `export MAX_THINKING_TOKENS=10000` |

538 

539Untuk melihat proses thinking Claude, tekan `Ctrl+O` untuk toggle verbose mode dan lihat penalaran internal ditampilkan sebagai teks italic abu-abu.

540 

541### Cara extended thinking bekerja

542 

543Extended thinking mengontrol berapa banyak penalaran internal yang dilakukan Claude sebelum merespons. Lebih banyak thinking memberikan lebih banyak ruang untuk menjelajahi solusi, menganalisis kasus tepi, dan memperbaiki kesalahan sendiri.

544 

545Pada [model yang mendukung effort](/id/model-config#adjust-effort-level), thinking menggunakan adaptive reasoning: model secara dinamis mengalokasikan token thinking berdasarkan effort level yang Anda pilih. Ini adalah cara yang direkomendasikan untuk menyesuaikan trade-off antara kecepatan dan kedalaman penalaran. Jika Anda ingin Claude berpikir lebih atau kurang sering daripada yang akan dihasilkan effort level Anda, Anda juga dapat mengatakan demikian secara langsung dalam prompt Anda atau di `CLAUDE.md`.

546 

547Dengan model yang lebih lama, thinking menggunakan anggaran token tetap yang diambil dari alokasi output Anda. Anggaran bervariasi menurut model; lihat [`MAX_THINKING_TOKENS`](/id/env-vars) untuk batas per-model. Anda dapat membatasinya dengan variabel lingkungan itu, atau menonaktifkan thinking sepenuhnya melalui `/config` atau toggle `Option+T`/`Alt+T`.

548 

549Pada model dengan adaptive reasoning, `MAX_THINKING_TOKENS` hanya berlaku ketika diatur ke `0` untuk menonaktifkan thinking, atau ketika `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1` mengembalikan model ke anggaran tetap. `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING` berlaku untuk Opus 4.6 dan Sonnet 4.6 saja. Opus 4.7 selalu menggunakan adaptive reasoning dan tidak mendukung anggaran thinking tetap. Lihat [variabel lingkungan](/id/env-vars).

550 

551<Warning>

552 Anda dikenakan biaya untuk semua token thinking yang digunakan bahkan ketika ringkasan thinking dihilangkan. Dalam mode interaktif, thinking muncul sebagai stub yang diruntuhkan secara default. Atur `showThinkingSummaries: true` di `settings.json` untuk menampilkan ringkasan lengkap.

553</Warning>

554 

555***

556 

557## Lanjutkan percakapan sebelumnya

558 

559Saat memulai Claude Code, Anda dapat melanjutkan sesi sebelumnya:

560 

561* `claude --continue` melanjutkan percakapan terbaru di direktori saat ini

562* `claude --resume` membuka pemilih percakapan atau melanjutkan berdasarkan nama

563* `claude --from-pr 123` melanjutkan sesi yang ditautkan ke pull request tertentu

564 

565Dari dalam sesi aktif, gunakan `/resume` untuk beralih ke percakapan berbeda.

566 

567Ketika sesi yang dipilih sudah lama dan cukup besar sehingga membacanya kembali akan mengonsumsi bagian substansial dari batas penggunaan Anda, `--resume`, `--continue`, dan `/resume` menawarkan untuk melanjutkan dari ringkasan alih-alih memuat transkrip lengkap. Prompt ini tidak tersedia di Amazon Bedrock, Google Cloud Vertex AI, atau Microsoft Foundry.

568 

569Sesi disimpan per direktori proyek. Secara default, pemilih `/resume` menampilkan sesi interaktif dari worktree saat ini, dengan pintasan keyboard untuk memperluas daftar ke worktrees lain atau proyek, mencari, melihat pratinjau, dan mengganti nama. Lihat [Gunakan pemilih sesi](#use-the-session-picker) di bawah untuk referensi pintasan lengkap.

570 

571Ketika Anda memilih sesi dari worktree lain dari repositori yang sama, Claude Code melanjutkannya secara langsung tanpa memerlukan Anda untuk beralih direktori terlebih dahulu. Memilih sesi dari proyek yang tidak terkait menyalin perintah `cd` dan resume ke clipboard Anda sebagai gantinya.

572 

573Melanjutkan berdasarkan nama menyelesaikan di seluruh repositori saat ini dan worktrees-nya. Baik `claude --resume <name>` dan `/resume <name>` mencari kecocokan yang tepat dan melanjutkannya secara langsung, bahkan jika sesi berada di worktree yang berbeda.

574 

575Ketika nama ambigu, `claude --resume <name>` membuka pemilih dengan nama yang sudah diisi sebagai istilah pencarian. `/resume <name>` dari dalam sesi melaporkan kesalahan sebagai gantinya, jadi jalankan `/resume` tanpa argumen untuk membuka pemilih dan pilih.

576 

577Sesi yang dibuat oleh `claude -p` atau invokasi SDK tidak muncul di pemilih, tetapi Anda masih dapat melanjutkan satu dengan meneruskan ID sesinya langsung ke `claude --resume <session-id>`.

578 

579### Beri nama sesi Anda

580 

581Berikan sesi nama deskriptif untuk menemukannya nanti. Ini adalah praktik terbaik saat mengerjakan beberapa tugas atau fitur.

582 

583<Steps>

584 <Step title="Beri nama sesi">

585 Beri nama sesi saat startup dengan `-n`:

586 

587 ```bash theme={null}

588 claude -n auth-refactor

589 ```

590 

591 Atau gunakan `/rename` selama sesi, yang juga menampilkan nama di bilah prompt:

592 

593 ```text theme={null}

594 /rename auth-refactor

595 ```

596 

597 Anda juga dapat mengganti nama sesi apa pun dari pemilih: jalankan `/resume`, navigasi ke sesi, dan tekan `Ctrl+R`.

598 </Step>

599 

600 <Step title="Lanjutkan berdasarkan nama nanti">

601 Dari baris perintah:

602 

603 ```bash theme={null}

604 claude --resume auth-refactor

605 ```

606 

607 Atau dari dalam sesi aktif:

608 

609 ```text theme={null}

610 /resume auth-refactor

611 ```

612 </Step>

613</Steps>

614 

615### Gunakan pemilih sesi

616 

617Perintah `/resume` (atau `claude --resume` tanpa argumen) membuka pemilih sesi interaktif dengan fitur-fitur ini:

618 

619**Pintasan keyboard dalam pemilih:**

620 

621| Pintasan | Tindakan |

622| :---------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------- |

623| `↑` / `↓` | Navigasi antar sesi |

624| `→` / `←` | Perluas atau tutup sesi yang dikelompokkan |

625| `Enter` | Pilih dan lanjutkan sesi yang disorot |

626| `Space` | Lihat pratinjau konten sesi. `Ctrl+V` juga bekerja di terminal yang tidak menangkapnya sebagai paste |

627| `Ctrl+R` | Ganti nama sesi yang disorot |

628| `/` atau karakter yang dapat dicetak lainnya selain `Space` | Masuk mode pencarian dan filter sesi |

629| `Ctrl+A` | Tampilkan sesi dari semua proyek di mesin ini. Tekan lagi untuk mengembalikan repositori saat ini |

630| `Ctrl+W` | Tampilkan sesi dari semua worktrees dari repositori saat ini. Tekan lagi untuk mengembalikan worktree saat ini. Hanya ditampilkan di repositori multi-worktree |

631| `Ctrl+B` | Filter ke sesi dari cabang git saat ini Anda. Tekan lagi untuk menampilkan sesi dari semua cabang |

632| `Esc` | Keluar dari pemilih atau mode pencarian |

633 

634**Organisasi sesi:**

635 

636Pemilih menampilkan sesi dengan metadata yang membantu:

637 

638* Nama sesi jika diatur, jika tidak ringkasan percakapan atau prompt pengguna pertama

639* Waktu yang telah berlalu sejak aktivitas terakhir

640* Jumlah pesan

641* Cabang Git (jika berlaku)

642* Jalur proyek, ditampilkan setelah memperluas ke semua proyek dengan `Ctrl+A`

643 

644Sesi yang di-fork (dibuat dengan `/branch`, `/rewind`, atau `--fork-session`) dikelompokkan bersama di bawah sesi root mereka, memudahkan menemukan percakapan terkait.

645 

646<Tip>

647 Tips:

648 

649 * **Beri nama sesi lebih awal**: Gunakan `/rename` saat memulai pekerjaan pada tugas yang berbeda—jauh lebih mudah menemukan "payment-integration" daripada "explain this function" nanti

650 * Gunakan `--continue` untuk akses cepat ke percakapan terbaru Anda di direktori saat ini

651 * Gunakan `--resume session-name` ketika Anda tahu sesi mana yang Anda butuhkan

652 * Gunakan `--resume` (tanpa nama) ketika Anda perlu menjelajahi dan memilih

653 * Untuk skrip, gunakan `claude --continue --print "prompt"` untuk melanjutkan dalam mode non-interaktif

654 * Tekan `Space` dalam pemilih untuk melihat pratinjau sesi sebelum melanjutkannya

655 * Percakapan yang dilanjutkan dimulai dengan model dan konfigurasi yang sama dengan yang asli

656 

657 Cara kerjanya:

658 

659 1. **Penyimpanan Percakapan**: Semua percakapan secara otomatis disimpan secara lokal dengan riwayat pesan lengkap mereka

660 2. **Deserialisasi Pesan**: Saat melanjutkan, seluruh riwayat pesan dipulihkan untuk mempertahankan konteks

661 3. **Status Alat**: Penggunaan alat dan hasil dari percakapan sebelumnya dipertahankan

662 4. **Pemulihan Konteks**: Percakapan dilanjutkan dengan semua konteks sebelumnya utuh

663</Tip>

664 

665***

666 

667## Jalankan sesi Claude Code paralel dengan Git worktrees

668 

669Saat mengerjakan beberapa tugas sekaligus, Anda memerlukan setiap sesi Claude untuk memiliki salinannya sendiri dari basis kode sehingga perubahan tidak bertabrakan. Git worktrees menyelesaikan ini dengan membuat direktori kerja terpisah yang masing-masing memiliki file dan cabang mereka sendiri, sambil berbagi riwayat repositori dan koneksi remote yang sama. Ini berarti Anda dapat memiliki Claude bekerja pada fitur di satu worktree sambil memperbaiki bug di worktree lain, tanpa sesi mana pun mengganggu yang lain.

670 

671Gunakan flag `--worktree` (`-w`) untuk membuat worktree terisolasi dan memulai Claude di dalamnya. Nilai yang Anda berikan menjadi nama direktori worktree dan nama cabang:

672 

673```bash theme={null}

674# Mulai Claude dalam worktree bernama "feature-auth"

675# Membuat .claude/worktrees/feature-auth/ dengan cabang baru

676claude --worktree feature-auth

677 

678# Mulai sesi lain dalam worktree terpisah

679claude --worktree bugfix-123

680```

681 

682Jika Anda menghilangkan nama, Claude secara otomatis menghasilkan nama acak:

683 

684```bash theme={null}

685# Auto-generates a name like "bright-running-fox"

686claude --worktree

687```

688 

689Worktrees dibuat di `<repo>/.claude/worktrees/<name>` dan bercabang dari cabang remote default, yang merupakan tempat `origin/HEAD` menunjuk. Cabang worktree dinamai `worktree-<name>`.

690 

691Cabang dasar tidak dapat dikonfigurasi melalui flag atau pengaturan Claude Code. `origin/HEAD` adalah referensi yang disimpan di direktori `.git` lokal Anda yang Git atur sekali saat Anda mengkloning. Jika cabang default repositori berubah nanti di GitHub atau GitLab, `origin/HEAD` lokal Anda terus menunjuk ke yang lama, dan worktrees akan bercabang dari sana. Untuk menyinkronkan ulang referensi lokal Anda dengan apa pun yang dianggap remote sebagai default saat ini:

692 

693```bash theme={null}

694git remote set-head origin -a

695```

696 

697Ini adalah perintah Git standar yang hanya memperbarui direktori `.git` lokal Anda. Tidak ada yang berubah di server remote. Jika Anda ingin worktrees bercabang dari cabang tertentu daripada default remote, atur secara eksplisit dengan `git remote set-head origin your-branch-name`.

698 

699Untuk kontrol penuh atas cara worktrees dibuat, termasuk memilih base yang berbeda per invokasi, konfigurasikan hook [WorktreeCreate](/id/hooks#worktreecreate). Hook menggantikan logika `git worktree` default Claude Code sepenuhnya, jadi Anda dapat mengambil dan bercabang dari ref apa pun yang Anda butuhkan.

700 

701Anda juga dapat meminta Claude untuk "work in a worktree" atau "start a worktree" selama sesi, dan itu akan membuat satu secara otomatis.

702 

703### Worktrees subagent

704 

705Subagents juga dapat menggunakan isolasi worktree untuk bekerja secara paralel tanpa konflik. Minta Claude untuk "use worktrees for your agents" atau konfigurasikan di [custom subagent](/id/sub-agents#supported-frontmatter-fields) dengan menambahkan `isolation: worktree` ke frontmatter agen. Setiap subagent mendapatkan worktree-nya sendiri yang secara otomatis dibersihkan ketika subagent selesai tanpa perubahan.

706 

707### Pembersihan worktree

708 

709Ketika Anda keluar dari sesi worktree, Claude menangani pembersihan berdasarkan apakah Anda membuat perubahan:

710 

711* **Tidak ada perubahan**: worktree dan cabangnya dihapus secara otomatis

712* **Perubahan atau commit ada**: Claude meminta Anda untuk menyimpan atau menghapus worktree. Menyimpan mempertahankan direktori dan cabang sehingga Anda dapat kembali nanti. Menghapus menghapus direktori worktree dan cabangnya, membuang semua perubahan yang tidak dilakukan dan commit

713 

714Worktrees subagent yang ditinggalkan oleh crash atau run paralel yang terputus dihapus secara otomatis saat startup setelah mereka lebih lama dari pengaturan [`cleanupPeriodDays`](/id/settings#available-settings) Anda, asalkan mereka tidak memiliki perubahan yang tidak dilakukan, tidak ada file yang tidak dilacak, dan tidak ada commit yang tidak didorong. Worktrees yang Anda buat dengan `--worktree` tidak pernah dihapus oleh sweep ini.

715 

716Untuk membersihkan worktrees di luar sesi Claude, gunakan [manajemen worktree manual](#manage-worktrees-manually).

717 

718<Tip>

719 Tambahkan `.claude/worktrees/` ke `.gitignore` Anda untuk mencegah konten worktree muncul sebagai file yang tidak dilacak dalam repositori utama Anda.

720</Tip>

721 

722### Salin file yang diabaikan git ke worktrees

723 

724Git worktrees adalah checkout segar, jadi mereka tidak menyertakan file yang tidak dilacak seperti `.env` atau `.env.local` dari repositori utama Anda. Untuk secara otomatis menyalin file ini ketika Claude membuat worktree, tambahkan file `.worktreeinclude` ke root proyek Anda.

725 

726File menggunakan sintaks `.gitignore` untuk mencantumkan file mana yang akan disalin. Hanya file yang cocok dengan pola dan juga diabaikan yang disalin, jadi file yang dilacak tidak pernah diduplikasi.

727 

728```text .worktreeinclude theme={null}

729.env

730.env.local

731config/secrets.json

732```

733 

734Ini berlaku untuk worktrees yang dibuat dengan `--worktree`, worktrees subagent, dan sesi paralel di [aplikasi desktop](/id/desktop#work-in-parallel-with-sessions).

735 

736### Kelola worktrees secara manual

737 

738Untuk kontrol lebih besar atas lokasi worktree dan konfigurasi cabang, buat worktrees dengan Git secara langsung. Ini berguna ketika Anda perlu checkout cabang yang ada tertentu atau menempatkan worktree di luar repositori.

739 

740```bash theme={null}

741# Buat worktree dengan cabang baru

742git worktree add ../project-feature-a -b feature-a

743 

744# Buat worktree dengan cabang yang ada

745git worktree add ../project-bugfix bugfix-123

746 

747# Mulai Claude dalam worktree

748cd ../project-feature-a && claude

749 

750# Bersihkan saat selesai

751git worktree list

752git worktree remove ../project-feature-a

753```

754 

755Pelajari lebih lanjut di [dokumentasi Git worktree resmi](https://git-scm.com/docs/git-worktree).

756 

757<Tip>

758 Ingat untuk menginisialisasi lingkungan pengembangan Anda di setiap worktree baru sesuai dengan setup proyek Anda. Tergantung pada stack Anda, ini mungkin termasuk menjalankan instalasi dependensi (`npm install`, `yarn`), menyiapkan lingkungan virtual, atau mengikuti proses setup standar proyek Anda.

759</Tip>

760 

761### Kontrol versi non-git

762 

763Isolasi worktree bekerja dengan git secara default. Untuk sistem kontrol versi lain seperti SVN, Perforce, atau Mercurial, konfigurasikan [hook WorktreeCreate dan WorktreeRemove](/id/hooks#worktreecreate) untuk menyediakan logika pembuatan dan pembersihan worktree kustom. Ketika dikonfigurasi, hook ini menggantikan perilaku git default saat Anda menggunakan `--worktree`, jadi [`.worktreeinclude`](#copy-gitignored-files-to-worktrees) tidak diproses. Salin file konfigurasi lokal apa pun di dalam skrip hook Anda sebagai gantinya.

764 

765Untuk koordinasi otomatis sesi paralel dengan tugas bersama dan pesan, lihat [agent teams](/id/agent-teams).

766 

767***

768 

769## Dapatkan notifikasi ketika Claude membutuhkan perhatian Anda

770 

771Ketika Anda memulai tugas yang berjalan lama dan beralih ke jendela lain, Anda dapat menyiapkan notifikasi desktop sehingga Anda tahu ketika Claude selesai atau membutuhkan input Anda. Ini menggunakan event hook `Notification` [](/id/hooks-guide#get-notified-when-claude-needs-input), yang diaktifkan setiap kali Claude menunggu izin, idle dan siap untuk prompt baru, atau menyelesaikan autentikasi.

772 

773<Steps>

774 <Step title="Tambahkan hook ke pengaturan Anda">

775 Buka `~/.claude/settings.json` dan tambahkan hook `Notification` yang memanggil perintah notifikasi asli platform Anda:

776 

777 <Tabs>

778 <Tab title="macOS">

779 ```json theme={null}

780 {

781 "hooks": {

782 "Notification": [

783 {

784 "matcher": "",

785 "hooks": [

786 {

787 "type": "command",

788 "command": "osascript -e 'display notification \"Claude Code needs your attention\" with title \"Claude Code\"'"

789 }

790 ]

791 }

792 ]

793 }

794 }

795 ```

796 </Tab>

797 

798 <Tab title="Linux">

799 ```json theme={null}

800 {

801 "hooks": {

802 "Notification": [

803 {

804 "matcher": "",

805 "hooks": [

806 {

807 "type": "command",

808 "command": "notify-send 'Claude Code' 'Claude Code needs your attention'"

809 }

810 ]

811 }

812 ]

813 }

814 }

815 ```

816 </Tab>

817 

818 <Tab title="Windows">

819 ```json theme={null}

820 {

821 "hooks": {

822 "Notification": [

823 {

824 "matcher": "",

825 "hooks": [

826 {

827 "type": "command",

828 "command": "powershell.exe -Command \"[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms'); [System.Windows.Forms.MessageBox]::Show('Claude Code needs your attention', 'Claude Code')\""

829 }

830 ]

831 }

832 ]

833 }

834 }

835 ```

836 </Tab>

837 </Tabs>

838 

839 Jika file pengaturan Anda sudah memiliki kunci `hooks`, gabungkan entri `Notification` ke dalamnya daripada menimpa. Anda juga dapat meminta Claude untuk menulis hook untuk Anda dengan menggambarkan apa yang Anda inginkan di CLI.

840 </Step>

841 

842 <Step title="Secara opsional sempit matcher">

843 Secara default hook diaktifkan pada semua jenis notifikasi. Untuk diaktifkan hanya untuk event tertentu, atur bidang `matcher` ke salah satu nilai ini:

844 

845 | Matcher | Diaktifkan ketika |

846 | :--------------------- | :------------------------------------------------------- |

847 | `permission_prompt` | Claude membutuhkan Anda untuk menyetujui penggunaan alat |

848 | `idle_prompt` | Claude selesai dan menunggu prompt berikutnya Anda |

849 | `auth_success` | Autentikasi selesai |

850 | `elicitation_dialog` | Server MCP membuka formulir elicitation |

851 | `elicitation_complete` | Formulir elicitation MCP dikirimkan atau ditutup |

852 | `elicitation_response` | Respons elicitation MCP dikirim kembali ke server |

853 </Step>

854 

855 <Step title="Verifikasi hook">

856 Ketik `/hooks` dan pilih `Notification` untuk mengkonfirmasi hook muncul. Memilihnya menampilkan perintah yang akan dijalankan. Untuk mengujinya end-to-end, minta Claude untuk menjalankan perintah yang memerlukan izin dan beralih dari terminal, atau minta Claude untuk memicu notifikasi secara langsung.

857 </Step>

858</Steps>

859 

860Untuk skema event lengkap dan jenis notifikasi, lihat [referensi Notification](/id/hooks#notification).

861 

862***

863 

864## Gunakan Claude sebagai utilitas gaya unix

865 

866### Tambahkan Claude ke proses verifikasi Anda

867 

868Misalkan Anda ingin menggunakan Claude Code sebagai linter atau code reviewer.

869 

870**Tambahkan Claude ke skrip build Anda:**

871 

872```json theme={null}

873// package.json

874{

875 ...

876 "scripts": {

877 ...

878 "lint:claude": "claude -p 'you are a linter. please look at the changes vs. main and report any issues related to typos. report the filename and line number on one line, and a description of the issue on the second line. do not return any other text.'"

879 }

880}

881```

882 

883<Tip>

884 Tips:

885 

886 * Gunakan Claude untuk code review otomatis dalam pipeline CI/CD Anda

887 * Sesuaikan prompt untuk memeriksa masalah spesifik yang relevan dengan proyek Anda

888 * Pertimbangkan membuat beberapa skrip untuk jenis verifikasi yang berbeda

889</Tip>

890 

891### Pipe in, pipe out

892 

893Misalkan Anda ingin pipe data ke Claude, dan dapatkan kembali data dalam format terstruktur.

894 

895**Pipe data melalui Claude:**

896 

897```bash theme={null}

898cat build-error.txt | claude -p 'concisely explain the root cause of this build error' > output.txt

899```

900 

901<Tip>

902 Tips:

903 

904 * Gunakan pipe untuk mengintegrasikan Claude ke dalam skrip shell yang ada

905 * Gabungkan dengan alat Unix lain untuk alur kerja yang kuat

906 * Pertimbangkan menggunakan `--output-format` untuk output terstruktur

907</Tip>

908 

909### Kontrol format output

910 

911Misalkan Anda memerlukan output Claude dalam format tertentu, terutama saat mengintegrasikan Claude Code ke dalam skrip atau alat lain.

912 

913<Steps>

914 <Step title="Gunakan format teks (default)">

915 ```bash theme={null}

916 cat data.txt | claude -p 'summarize this data' --output-format text > summary.txt

917 ```

918 

919 Ini menampilkan hanya respons teks biasa Claude (perilaku default).

920 </Step>

921 

922 <Step title="Gunakan format JSON">

923 ```bash theme={null}

924 cat code.py | claude -p 'analyze this code for bugs' --output-format json > analysis.json

925 ```

926 

927 Ini menampilkan array JSON pesan dengan metadata termasuk biaya dan durasi.

928 </Step>

929 

930 <Step title="Gunakan format streaming JSON">

931 ```bash theme={null}

932 cat log.txt | claude -p 'parse this log file for errors' --output-format stream-json

933 ```

934 

935 Ini menampilkan serangkaian objek JSON secara real-time saat Claude memproses permintaan. Setiap pesan adalah objek JSON yang valid, tetapi seluruh output bukan JSON yang valid jika digabungkan.

936 </Step>

937</Steps>

938 

939<Tip>

940 Tips:

941 

942 * Gunakan `--output-format text` untuk integrasi sederhana di mana Anda hanya memerlukan respons Claude

943 * Gunakan `--output-format json` ketika Anda memerlukan log percakapan lengkap

944 * Gunakan `--output-format stream-json` untuk output real-time dari setiap giliran percakapan

945</Tip>

946 

947***

948 

949## Jalankan Claude pada jadwal

950 

951Misalkan Anda ingin Claude menangani tugas secara otomatis secara berulang, seperti meninjau PR terbuka setiap pagi, mengaudit dependensi mingguan, atau memeriksa kegagalan CI semalam.

952 

953Pilih opsi penjadwalan berdasarkan tempat Anda ingin tugas berjalan:

954 

955| Opsi | Tempat berjalan | Terbaik untuk |

956| :----------------------------------------------------- | :------------------------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

957| [Routines](/id/routines) | Infrastruktur yang dikelola Anthropic | Tugas yang harus berjalan bahkan ketika komputer Anda mati. Dapat juga dipicu oleh panggilan API atau event GitHub selain jadwal. Konfigurasikan di [claude.ai/code/routines](https://claude.ai/code/routines). |

958| [Desktop scheduled tasks](/id/desktop-scheduled-tasks) | Mesin Anda, melalui aplikasi desktop | Tugas yang memerlukan akses langsung ke file lokal, alat, atau perubahan yang tidak dilakukan. |

959| [GitHub Actions](/id/github-actions) | Pipeline CI Anda | Tugas yang terikat pada event repo seperti PR yang dibuka, atau jadwal cron yang harus hidup bersama konfigurasi alur kerja Anda. |

960| [`/loop`](/id/scheduled-tasks) | Sesi CLI saat ini | Polling cepat saat sesi terbuka. Tugas berhenti ketika Anda memulai percakapan baru; `--resume` dan `--continue` mengembalikan yang belum kadaluarsa. |

961 

962<Tip>

963 Saat menulis prompt untuk tugas terjadwal, jelaskan apa yang terlihat seperti kesuksesan dan apa yang harus dilakukan dengan hasil. Tugas berjalan secara otonom, jadi tidak dapat mengajukan pertanyaan klarifikasi. Misalnya: "Review open PRs labeled `needs-review`, leave inline comments on any issues, and post a summary in the `#eng-reviews` Slack channel."

964</Tip>

965 

966***

967 

968## Tanyakan Claude tentang kemampuannya

969 

970Claude memiliki akses bawaan ke dokumentasinya dan dapat menjawab pertanyaan tentang fitur dan keterbatasannya sendiri.

971 

972### Contoh pertanyaan

973 

974```text theme={null}

975can Claude Code create pull requests?

976```

977 

978```text theme={null}

979how does Claude Code handle permissions?

980```

981 

982```text theme={null}

983what skills are available?

984```

985 

986```text theme={null}

987how do I use MCP with Claude Code?

988```

989 

990```text theme={null}

991how do I configure Claude Code for Amazon Bedrock?

992```

993 

994```text theme={null}

995what are the limitations of Claude Code?

996```

997 

998<Note>

999 Claude memberikan jawaban berbasis dokumentasi untuk pertanyaan-pertanyaan ini. Untuk demonstrasi langsung, jalankan `/powerup` untuk pelajaran interaktif dengan demo animasi, atau lihat bagian alur kerja spesifik di atas.

1000</Note>

1001 

1002<Tip>

1003 Tips:

1004 

1005 * Claude selalu memiliki akses ke dokumentasi Claude Code terbaru, terlepas dari versi yang Anda gunakan

1006 * Ajukan pertanyaan spesifik untuk mendapatkan jawaban terperinci

1007 * Claude dapat menjelaskan fitur kompleks seperti integrasi MCP, konfigurasi enterprise, dan alur kerja lanjutan

1008</Tip>

1009 

1010***

1011 

1012## Langkah berikutnya

1013 

1014<CardGroup cols={2}>

1015 <Card title="Best practices" icon="lightbulb" href="/id/best-practices">

1016 Pola untuk mendapatkan hasil maksimal dari Claude Code

1017 </Card>

1018 

1019 <Card title="Cara Claude Code bekerja" icon="gear" href="/id/how-claude-code-works">

1020 Pahami loop agentic dan manajemen konteks

1021 </Card>

1022 

1023 <Card title="Perluas Claude Code" icon="puzzle-piece" href="/id/features-overview">

1024 Tambahkan skills, hooks, MCP, subagents, dan plugins

1025 </Card>

1026 

1027 <Card title="Implementasi referensi" icon="code" href="https://github.com/anthropics/claude-code/tree/main/.devcontainer">

1028 Clone implementasi referensi container pengembangan kami

1029 </Card>

1030</CardGroup>

communications-kit.md +520 −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# Kit komunikasi

6 

7> Luncurkan pengumuman, pesan kampanye bertahap, dan respons FAQ untuk meluncurkan Claude Code ke organisasi teknik Anda.

8 

9Halaman ini untuk administrator dan pemimpin teknik yang meluncurkan Claude Code ke tim. Halaman ini menyediakan pengumuman peluncuran siap pakai, kampanye tips-dan-trik bertahap, dan respons FAQ satu baris untuk pertanyaan yang paling sering Anda terima.

10 

11<Note>

12 Perlakukan semuanya di sini sebagai naskah draf, bukan naskah final. Tulis ulang setiap pesan dengan suara organisasi Anda, tukar tugas contoh dengan bug dan modul nyata dari basis kode Anda sendiri, dan ganti `[placeholder dalam kurung]` sebelum mengirim. Pengumuman yang mendorong adopsi adalah yang terdengar seperti ditulis oleh seseorang di perusahaan Anda.

13</Note>

14 

15## Komunikasi peluncuran

16 

17Satu pengumuman dalam dua format, ditambah dua varian opsional. Pilih yang paling sesuai dengan peluncuran Anda dan tulis ulang dari sana.

18 

19### Sebelum Anda mengirim

20 

21Kerjakan daftar periksa ini sebelum pengumuman dikirim. Setiap item menutup celah yang sebaliknya berubah menjadi utas dukungan hari peluncuran.

22 

23| Item | Mengapa penting |

24| ------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |

25| Saluran `#claude-code` dibuat dan ditautkan dalam pesan | Memberikan pertanyaan satu tempat untuk mendarat |

26| Perintah instalasi diuji pada setidaknya satu mesin di lingkungan Anda | Menangkap masalah proxy atau firewall sebelum semua orang mengalaminya sekaligus |

27| Tautan keamanan dan penanganan data siap ([Penggunaan data](/id/data-usage) atau setara internal Anda) | "Ke mana kode saya pergi?" akan menjadi balasan pertama |

28| Satu tugas pertama konkret dipilih, bug nyata atau file di basis kode Anda | Contoh generik tidak mengkonversi; "perbaiki tes yang tidak stabil di `auth_test.go`" melakukannya |

29| Pemilik bernama untuk saluran selama 48 jam pertama | Pertanyaan hari peluncuran yang tidak terjawab membunuh momentum |

30| Sponsor C-suite yang siap mengirim atau menandatangani pengumuman | Peluncuran yang dikirim dengan nama eksekutif secara konsisten melihat adopsi minggu pertama yang lebih tinggi daripada yang dikirim oleh admin atau tim tooling |

31 

32### Pengumuman

33 

34Gunakan ini sebagai pesan peluncuran organisasi luas standar Anda. Ini mencakup apa itu Claude Code, memberikan jalur instalasi dua menit, memberikan pembaca satu tugas konkret untuk dicoba, dan menjawab "ke mana kode saya pergi?" sebelum siapa pun harus bertanya.

35 

36<Tabs>

37 <Tab title="Email">

38 ```text theme={null}

39 Subject: Claude Code aktif untuk [Engineering / tim Anda]

40 

41 Tim,

42 

43 Mulai hari ini Anda memiliki akses ke Claude Code, agen pengkodean AI yang berjalan di

44 terminal Anda, membaca basis kode aktual Anda, dan menyelesaikan tugas nyata dari awal hingga akhir:

45 debugging, refactor, tes, PR. Ini bukan autocomplete dan bukan jendela chat. Ini mengedit file,

46 menjalankan perintah Anda, dan meminta izin sebelum apa pun yang berisiko.

47 

48 Mulai berjalan dalam dua menit:

49 

50 curl -fsSL https://claude.ai/install.sh | bash

51 cd <repo-Anda>

52 claude

53 

54 Kemudian jalankan /init sekali. Claude membaca proyek Anda dan menulis CLAUDE.md dengan

55 perintah build dan konvensi Anda, sehingga Anda berhenti menjelaskan ulang dasar-dasarnya.

56 

57 Kemudian coba salah satu dari ini di repo yang sudah Anda gunakan:

58 

59 - "Tes di [file] tidak stabil. Cari tahu mengapa dan perbaiki"

60 - "Jelaskan kepada saya bagaimana [modul] menangani [X]"

61 - "Lihat diff kerja saya dan beri tahu saya apa yang berisiko sebelum saya push"

62 

63 Ke mana kode Anda pergi: Claude Code berjalan di terminal Anda dan berbicara langsung

64 ke API Anthropic, tanpa server pihak ketiga dalam loop. Ini meminta sebelum

65 mengedit file atau menjalankan perintah. Di bawah perjanjian Enterprise kami, Anthropic

66 tidak menggunakan kode atau prompt Anda untuk melatih modelnya.

67 Detail: https://code.claude.com/docs/en/data-usage

68 https://code.claude.com/docs/en/security

69 

70 Di mana harus pergi dengan pertanyaan: #claude-code. [Nama pemilik] mengawasi

71 minggu ini.

72 

73 - [Nama]

74 

75 P.S. Lebih suka editor Anda? Ada ekstensi VS Code dan plugin JetBrains.

76 Agen yang sama, tidak perlu terminal.

77 ```

78 </Tab>

79 

80 <Tab title="Slack atau Teams">

81 ```markdown theme={null}

82 🚀 *Claude Code aktif untuk [tim]*

83 

84 Agen pengkodean AI, berjalan di terminal Anda, membaca repo Anda, melakukan pekerjaan nyata:

85 bug, refactor, tes, PR. Meminta sebelum menyentuh apa pun.

86 

87 `curl -fsSL https://claude.ai/install.sh | bash` → `cd repo-Anda` → `claude`

88 

89 *Hal pertama untuk dicoba* → jalankan `/init`, kemudian: "tes di [file] tidak stabil,

90 cari tahu mengapa dan perbaiki."

91 

92 🔒 Berjalan di terminal Anda, berbicara hanya ke API Anthropic. Di bawah paket

93 Enterprise kami, kode dan prompt Anda tidak digunakan untuk melatih model.

94 Penggunaan data → https://code.claude.com/docs/en/data-usage

95 

96 📚 Quickstart · VS Code · Kursus gratis 1 jam

97 https://code.claude.com/docs/en/quickstart

98 https://code.claude.com/docs/en/vs-code

99 https://anthropic.skilljar.com/claude-code-in-action

100 

101 Pertanyaan → utas ini. [Pemilik] sedang mengerjakan.

102 ```

103 </Tab>

104</Tabs>

105 

106### Varian sponsor eksekutif

107 

108Kirim ini dari eksekutif sponsor Anda, seperti CTO, CIO, atau SVP Engineering, dengan nama mereka dan dari akun mereka. Peluncuran yang dikirim dengan nama eksekutif secara konsisten melihat tingkat pembukaan yang lebih tinggi dan aktivasi minggu pertama yang lebih cepat daripada pesan yang sama dari admin atau tim tooling. Ini menandakan prioritas perusahaan daripada eksperimen opsional.

109 

110Versi ini sengaja dikurangi menjadi satu permintaan: instal dan jalankan pada satu tugas nyata. Pekerjaan eksekutif adalah membuat permintaan mendarat; pengumuman standar dan `#claude-code` menangani caranya.

111 

112<Tabs>

113 <Tab title="Email">

114 ```text theme={null}

115 Subject: Satu hal yang ingin saya coba setiap insinyur minggu ini

116 

117 Tim,

118 

119 Kami telah mengaktifkan Claude Code untuk semua teknik. Ini adalah agen AI

120 yang bekerja langsung di terminal Anda, pada basis kode aktual Anda, dan

121 hasil awal dari tim yang sudah menggunakannya cukup kuat sehingga saya ingin

122 semua orang menggunakannya minggu ini.

123 

124 Saya meminta sepuluh menit:

125 

126 curl -fsSL https://claude.ai/install.sh | bash

127 cd <repo-Anda>

128 claude

129 

130 Kemudian berikan satu tugas nyata: bug yang telah Anda tunda, atau "jelaskan

131 kepada saya bagaimana [modul] bekerja."

132 

133 Itu saja permintaannya. [Nama pemilik] dan tim ada di #claude-code untuk

134 apa pun yang Anda alami.

135 

136 - [Nama Eksekutif]

137 [Judul]

138 ```

139 </Tab>

140 

141 <Tab title="Slack atau Teams">

142 ```markdown theme={null}

143 📣 *Dari [Nama Eksekutif]: satu hal untuk dicoba minggu ini*

144 

145 Kami telah mengaktifkan *Claude Code* untuk semua teknik. Hasil awal cukup

146 kuat sehingga saya meminta semua orang untuk memberikan sepuluh menit pada

147 pekerjaan nyata minggu ini.

148 

149 `curl -fsSL https://claude.ai/install.sh | bash` → `cd repo-Anda` →

150 `claude` → berikan satu tugas nyata.

151 

152 Itu saja. Pertanyaan → #claude-code.

153 ```

154 </Tab>

155</Tabs>

156 

157### Varian grup pilot

158 

159Gunakan untuk peluncuran bertahap. Kirim hanya ke kohort pilot.

160 

161```text theme={null}

162Subject: Anda dalam pilot Claude Code

163 

164[Nama / tim],

165 

166Anda berada dalam gelombang pertama Claude Code di [perusahaan]. Kami memilih grup ini

167karena Anda akan menggunakannya pada masalah nyata dan memberi tahu kami kebenaran tentangnya.

168 

169Permintaan: gunakan pada setidaknya satu tugas nyata minggu ini, kemudian tulis catatan di

170#claude-code-pilot yang mencakup apa yang berhasil, apa yang mengganggu, dan apa yang

171mengejutkan Anda. Umpan balik itu menentukan bagaimana kami meluncurkannya ke semua orang.

172 

173[Lanjutkan dengan "Mulai berjalan dalam dua menit" dari pengumuman standar]

174 

175Satu hal ekstra untuk pilot: pada perubahan multi-file pertama Anda, tekan Shift+Tab

176sampai Anda melihat "plan". Claude akan meletakkan persis apa yang dimaksudkan untuk dilakukan

177sebelum menyentuh file. Ini adalah cara tercepat untuk mengkalibrasi berapa banyak yang harus

178dipercayai.

179```

180 

181### DM perekrutan juara

182 

183Setelah peluncuran, DM dua atau tiga orang yang paling aktif di `#claude-code`.

184 

185```text theme={null}

186Hei [nama], posting #claude-code Anda melakukan lebih banyak untuk adopsi daripada

187pengumuman saya. Beberapa orang memberi tahu saya bahwa [utas / tangkapan layar] Anda

188adalah alasan mereka benar-benar mencobanya.

189 

190Ingin membuat itu semi-resmi? Beban ringan: sebagian besar terus memposting apa yang

191Anda posting, ditambah akses pertama ke fitur baru dan jalur langsung ke tim Anthropic.

192Saya dapat berbagi playbook singkat jika Anda tertarik.

193```

194 

195## Kampanye tips dan trik

196 

197Pesan Slack atau Teams siap tempel yang dirancang untuk mendorong aktivasi fitur setelah peluncuran. Masing-masing mengikuti pola yang sama: hook, hasil, prompt "coba sekarang", dan tautan docs. Teteskan satu atau dua per minggu di `#claude-code`, atau pilih segelintir yang cocok dengan celah tim Anda. Mereka berdiri sendiri tanpa urutan yang diperlukan.

198 

199Salin badan pesan dari setiap blok langsung ke Slack atau Teams. Ganti `[placeholder dalam kurung]` sebelum mengirim.

200 

201### Memulai

202 

203**Memilih model yang tepat**

204 

205```markdown theme={null}

206🎯 *Tip: Cocokkan model dengan momen*

207 

208Menggunakan Opus untuk memperbaiki typo membakar komputasi. Menggunakan Haiku untuk refactor 12 file

209adalah meminta pengerjaan ulang.

210 

211Claude Code berjalan pada model yang sama dengan aplikasi Claude, dan Anda dapat beralih

212di tengah sesi. *Sonnet* adalah default workhorse untuk pekerjaan fitur sehari-hari,

213bug, tes, dan review. Gunakan *Opus* untuk refactor besar, debugging rumit, atau apa pun

214yang berisiko tinggi. Turun ke *Haiku* untuk pertanyaan cepat, pemformatan, dan edit mekanis

215di mana kecepatan menang.

216 

217*Coba sekarang:* ketik `/model` dan pilih Sonnet jika Anda belum melakukannya. Ini adalah

218default yang tepat untuk sebagian besar tugas.

219 

220📖 Konfigurasi model → https://code.claude.com/docs/en/model-config

221```

222 

223| Model | Terbaik untuk |

224| ------ | --------------------------------------------------------------------------------------------------------- |

225| Opus | Refactor skala besar, debugging kompleks, keputusan arsitektur, perubahan berisiko tinggi |

226| Sonnet | Pekerjaan fitur sehari-hari, perbaikan bug, tes, dokumentasi, review kode. Default yang direkomendasikan. |

227| Haiku | Pertanyaan cepat, pemformatan, edit mekanis, iterasi cepat |

228 

229**Kemenangan cepat untuk dicoba terlebih dahulu**

230 

231```markdown theme={null}

232🚀 *Tip: Tiga hal untuk dicoba dalam 10 menit pertama Anda*

233 

234Menginstal Claude Code tetapi tidak yakin apa yang sebenarnya harus diminta? Mulai dengan

235hal yang telah mengganggu Anda sepanjang minggu.

236 

237 - Perbaiki sesuatu yang mengganggu: "tes di [file] tidak stabil, cari tahu mengapa"

238 - Orientasikan diri di kode yang tidak Anda tulis: "jelaskan kepada saya bagaimana [modul] bekerja"

239 - Sanity-check sebelum Anda push: "lihat diff kerja saya dan beri tahu saya apa yang

240 terlihat berisiko"

241 

242Tidak ada yang memerlukan setup. Cukup `cd` ke repo Anda dan jalankan `claude`.

243 

244*Coba sekarang:* pilih bug yang telah Anda hindari dan tempel pesan kesalahan.

245 

246📖 Quickstart → https://code.claude.com/docs/en/quickstart

247```

248 

249### Memori proyek

250 

251**`/init` dan CLAUDE.md**

252 

253```markdown theme={null}

254📁 *Tip: Berhenti menjelaskan ulang repo Anda setiap sesi*

255 

256Mengatakan Claude "kami menggunakan pnpm, bukan npm" untuk kelima kalinya? Ada

257perbaikan satu kali.

258 

259Jalankan `/init` sekali per repo. Claude membaca struktur proyek Anda dan menulis file

260CLAUDE.md dengan perintah build, arsitektur, dan konvensi Anda. Setiap sesi masa depan

261di repo itu dimulai dari file ini secara otomatis. Simpan di bawah dua layar. Ini adalah

262lembar cheat, bukan dokumentasi.

263 

264*Coba sekarang:* buka repo utama Anda, jalankan `claude`, ketik `/init`. Tiga puluh

265detik, membayar setiap sesi setelahnya.

266 

267📖 CLAUDE.md dan memori proyek → https://code.claude.com/docs/en/memory

268```

269 

270**Referensi @**

271 

272```markdown theme={null}

273📎 *Tip: Berhenti menempel konten file ke dalam chat*

274 

275Menyalin 200 baris komponen ke prompt Anda sehingga Claude dapat "melihatnya"?

276Anda tidak harus.

277 

278Ketik `@` kemudian jalur file. Claude menarik file langsung ke konteks.

279Bekerja untuk seluruh direktori juga.

280 

281> gaya di @src/components/Button.tsx terlihat salah, periksa terhadap

282> @docs/design-system.md

283 

284*Coba sekarang:* ketik `@` kemudian Tab. Autocomplete menunjukkan Anda setiap file dalam jangkauan.

285 

286📖 Mereferensikan file → https://code.claude.com/docs/en/common-workflows

287```

288 

289### Kontrol dan keamanan

290 

291**Mode izin**

292 

293```markdown theme={null}

294🛡️ *Tip: Satu keystroke antara "lihat tetapi jangan sentuh" dan "lakukan saja"*

295 

296Kadang-kadang Anda ingin Claude meminta sebelum setiap edit. Kadang-kadang Anda hanya ingin

297itu dikirim. Anda tidak harus memilih satu selamanya.

298 

299*Shift+Tab* bersiklus melalui berapa banyak tali yang didapat Claude: *default* meminta sebelum

300hal-hal berisiko, *acceptEdits* membiarkan edit file dan perintah filesystem umum mengalir

301sementara masih memeriksa sebelum perintah shell lainnya, dan *plan* mengusulkan perubahan

302untuk persetujuan Anda sebelum apa pun disentuh. Mode plan adalah pembangun kepercayaan, jadi

303mulai dari sana untuk apa pun yang menyentuh beberapa file.

304 

305*Coba sekarang:* pada refactor berikutnya, tekan Shift+Tab sampai Anda melihat "plan",

306kemudian jelaskan perubahan. Anda akan mendapatkan proposal lengkap sebelum file tunggal bergerak.

307 

308📖 Mode izin → https://code.claude.com/docs/en/permissions

309```

310 

311**Checkpointing dan `/rewind`**

312 

313```markdown theme={null}

314⏪ *Tip: Ada tombol undo untuk seluruh percakapan*

315 

316Claude pergi ke jalur yang salah tiga putaran yang lalu dan sekarang Anda membongkarnya?

317Anda tidak harus memperbaiki maju.

318 

319`/rewind` menggulung kembali ke titik sebelumnya dalam percakapan, termasuk

320perubahan file yang dibuat Claude. Checkpointing otomatis; Anda tidak mengatur apa pun.

321 

322*Coba sekarang:* tekan *Esc* dua kali untuk membuka menu rewind, atau ketik `/rewind`.

323Pilih titik sebelum hal-hal menjadi miring.

324 

325📖 Checkpointing → https://code.claude.com/docs/en/checkpointing

326```

327 

328### Hubungkan alat Anda

329 

330**Konektor MCP**

331 

332```markdown theme={null}

333🔌 *Tip: Biarkan Claude membaca pelacak masalah Anda sehingga Anda tidak harus menempel tiket*

334 

335Menyalin-menempel tiket Jira ke terminal terasa seperti langkah mundur.

336Memang demikian.

337 

338Satu file konfigurasi (`.mcp.json` di root proyek Anda) menghubungkan Claude ke GitHub,

339Jira, Linear, atau tracker apa pun yang Anda gunakan. Kemudian "apa masalah prioritas teratas

340yang ditugaskan kepada saya?" dan "lanjutkan dan perbaiki" terjadi dalam percakapan yang sama.

341 

342*Coba sekarang:* tanya Claude "atur konektor MCP untuk [GitHub/Jira/Linear]

343di repo ini". Itu akan menulis konfigurasi untuk Anda.

344 

345📖 Konektor MCP → https://code.claude.com/docs/en/mcp

346```

347 

348### Otomatisasi alur kerja Anda

349 

350**Skills**

351 

352```markdown theme={null}

353⚡ *Tip: Ubah prompt yang terus Anda ketik ulang menjadi perintah*

354 

355Mengetik "ringkas apa yang saya kerjakan hari ini dari git log, format untuk standup"

356tiga kali minggu ini? Itu adalah slash command yang menunggu untuk terjadi.

357 

358File SKILL.md di `.claude/skills/<name>/` menjadi prompt yang dapat digunakan kembali; ketik

359`/name` untuk menjalankannya. Buat satu kali kedua Anda mengetik prompt multi-langkah yang

360telah Anda ketik sebelumnya. Jalur termudah: minta Claude untuk membuatnya untuk Anda.

361 

362*Coba sekarang:* ketik "buat saya skill /standup yang merangkum apa yang saya kerjakan

363hari ini dari git log", kemudian jalankan `/standup` besok pagi.

364 

365📖 Skills → https://code.claude.com/docs/en/skills

366```

367 

368**Hooks**

369 

370```markdown theme={null}

371🔔 *Tip: Dapatkan ping saat refactor Anda selesai*

372 

373Duduk di meja Anda menonton Claude menyelesaikan tugas panjang? Anda memiliki

374hal yang lebih baik untuk dilakukan selama delapan menit itu.

375 

376Hooks adalah perintah shell yang dijalankan pada acara Claude Code. Hook Stop yang

377mengirim notifikasi desktop berarti Anda dapat memulai refactor panjang, pergi,

378dan mendapatkan ping saat selesai.

379 

380*Coba sekarang:* tanya Claude "tambahkan Hook Stop yang mengirim notifikasi desktop

381saat Anda selesai". Itu akan menulis skrip dan menghubungkannya.

382 

383📖 Panduan hooks → https://code.claude.com/docs/en/hooks-guide

384```

385 

386### Pengembangan sehari-hari

387 

388**Tangkapan layar dan gambar**

389 

390```markdown theme={null}

391📸 *Tip: Berhenti menjelaskan dialog kesalahan. Tunjukkan saja.*

392 

393Mengetik "ada kotak merah yang mengatakan sesuatu tentang referensi null

394dan menunjuk ke baris 47-ish"? Tangkap layarnya.

395 

396Seret tangkapan layar langsung ke terminal dan Claude melihatnya: dialog kesalahan, mockup UI,

397foto whiteboard, ekspor Figma. *Ctrl+V* menempel dari clipboard (gunakan Ctrl+V di macOS juga,

398bukan Cmd+V).

399 

400*Coba sekarang:* lain kali sesuatu yang visual rusak, tangkap layarnya dan tempel langsung

401ke prompt. Kemudian cukup ketik "apa yang salah di sini?"

402 

403📖 Bekerja dengan gambar → https://code.claude.com/docs/en/common-workflows

404```

405 

406**Alur kerja Git**

407 

408```markdown theme={null}

409🌿 *Tip: Serahkan seluruh upacara git*

410 

411Perbaikan memakan waktu 5 menit. Pesan commit, branch, dan deskripsi PR

412memakan waktu 15. Rasio itu salah.

413 

414Claude menangani alur git lengkap: commit dengan pesan konvensional,

415branch, PR dengan ringkasan yang tepat. Satu permintaan: "perbaiki off-by-one, commit

416dengan pesan commit konvensional, dan buka PR." Meninjau pekerjaan orang lain?

417Tempel URL PR dan minta Claude untuk menjelaskan diff kepada Anda.

418 

419*Coba sekarang:* setelah perbaikan berikutnya, alih-alih beralih ke klien git Anda,

420cukup ketik "commit ini dengan pesan yang baik dan buka PR".

421 

422📖 Membuat pull request → https://code.claude.com/docs/en/common-workflows

423```

424 

425### Bagikan dan skalakan

426 

427**Plugins**

428 

429```markdown theme={null}

430📦 *Tip: Seseorang mungkin sudah membangun skill itu*

431 

432Tentang untuk menghabiskan satu jam membangun perintah `/deploy`? Periksa apakah

433sudah ada.

434 

435Skills dikemas dan dibagikan sebagai plugin. `/plugin` menelusuri apa yang

436tersedia dan menginstal dalam satu langkah. Lima menit browsing dapat menghemat

437satu jam pembangunan.

438 

439*Coba sekarang:* ketik `/plugin` dan gulir. Anda akan menemukan setidaknya satu

440hal yang tidak Anda tahu Anda inginkan.

441 

442📖 Plugins → https://code.claude.com/docs/en/plugins

443```

444 

445### Keamanan dan admin

446 

447**Arsitektur keamanan**

448 

449```markdown theme={null}

450🔐 *Tip: Jawaban untuk "apakah ini aman?" untuk lain kali Anda ditanya*

451 

452Seseorang di tim Anda akan bertanya "tunggu, ke mana kode saya pergi?"

453Berikut versi singkat yang dapat Anda tempel.

454 

455Izin-pertama dengan desain. Setiap edit file, perintah shell, dan panggilan eksternal

456dijaga oleh persetujuan Anda. CLI berjalan di terminal Anda dan berbicara langsung

457ke API Anthropic, tanpa server pihak ketiga, dan mendukung sandboxing tingkat OS opsional

458untuk perintah shell. Di bawah paket Enterprise kami, Anthropic tidak menggunakan kode

459atau prompt Anda untuk melatih modelnya.

460 

461*Coba sekarang:* simpan dua tautan ini untuk lain kali pertanyaan muncul.

462Mereka menjawab sebagian besar pertanyaan review keamanan.

463 

464📖 https://code.claude.com/docs/en/security

465📖 https://code.claude.com/docs/en/data-usage

466```

467 

468**Praktik terbaik**

469 

470```markdown theme={null}

471✅ *Tip: 4 kebiasaan yang memisahkan "mencoba sekali" dari "gunakan setiap hari"*

472 

473Sebagian besar orang yang terpental dari Claude Code melewatkan salah satu dari ini.

474Sebagian besar orang yang bertahan melakukan keempat-empatnya dalam minggu pertama.

475 

476 - Mulai dalam mode plan untuk apa pun yang menyentuh beberapa file

477 - Jalankan /init lebih awal; konteks bertambah

478 - Tinjau diff sebelum commit; Claude dapat dengan percaya diri salah

479 - Verifikasi perubahan yang menyentuh jalur kritis; perlakukan seperti junior

480 yang tajam, bukan oracle

481 

482*Coba sekarang:* jika Anda hanya melakukan satu atau dua dari ini, pilih yang Anda

483lewatkan dan lakukan pada tugas berikutnya. Posting apa yang berubah di #claude-code.

484 

485📖 Praktik terbaik → https://code.claude.com/docs/en/best-practices

486```

487 

488## Referensi cepat

489 

490### Respons FAQ

491 

492Balasan satu baris untuk pertanyaan yang paling sering Anda terima.

493 

494| Pertanyaan | Respons |

495| ----------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

496| "Apakah itu bekerja di VS Code?" | Ya. Ada ekstensi VS Code dan plugin JetBrains dengan fitur yang sama, tertanam di editor Anda. [VS Code →](/id/vs-code) |

497| "Apakah saya harus mengonfigurasi apa pun terlebih dahulu?" | Tidak. Instal, kemudian jalankan `claude` di repo apa pun. Jalankan `/init` sekali dan Anda siap. [Quickstart →](/id/quickstart) |

498| "Di mana kode saya pergi?" | CLI berjalan di terminal Anda dan mengirim konteks ke API Anthropic untuk inferensi, tanpa server pihak ketiga. Di bawah paket Enterprise Anda, kode dan prompt Anda tidak digunakan untuk melatih model. [Penggunaan data →](/id/data-usage) |

499| "Bisakah itu melihat seluruh repo saya?" | Itu membaca apa yang Anda berikan akses. Pembacaan file di dalam direktori kerja Anda tidak meminta; prompt izin menjaga edit, perintah shell, dan apa pun di luar direktori itu. [Izin →](/id/permissions) |

500| "Bagaimana ini berbeda dari Copilot?" | Copilot melengkapi baris. Claude Code adalah agen yang membaca file, menjalankan perintah, dan membuat edit multi-file. [Ikhtisar →](/id/overview) |

501| "Apa yang harus saya coba terlebih dahulu?" | Bug yang telah Anda tunda karena membosankan. "Tes di \[file] tidak stabil, cari tahu mengapa." [Quickstart →](/id/quickstart) |

502 

503### Template prompt

504 

505Bagikan prompt pemula ini dengan insinyur yang telah menginstal tetapi tidak yakin apa yang harus diminta. Masing-masing ditulis dengan cara yang akan diketik ke sesi nyata; ganti bagian dalam kurung dengan file dari repo Anda sendiri.

506 

507| Tugas | Prompt |

508| --------------------- | ------------------------------------------------------------------------------------------------- |

509| Perbaiki bug | "tes di \[file] gagal, cari tahu mengapa dan perbaiki" |

510| Pahami kode | "jelaskan kepada saya bagaimana \[modul] bekerja, kemudian beri tahu saya di mana titik masuknya" |

511| Refactor aman | "refactor \[modul] ke \[tujuan], gunakan mode plan sehingga saya dapat meninjau terlebih dahulu" |

512| Tulis tes | "tulis tes untuk \[file] yang mencakup kasus tepi di sekitar \[skenario]" |

513| Tinjau sebelum commit | "lihat diff kerja saya dan beri tahu saya apa yang terlihat berisiko" |

514| Buka PR | "perbaiki \[masalah], tulis commit konvensional, dan buka PR dengan ringkasan" |

515| Buat skill | "buat saya skill /ship yang menjalankan tes dan lint sebelum commit" |

516| Debug stack trace | "berikut stack trace, temukan akar penyebabnya, jangan hanya menutupinya" |

517 

518<Tip>

519 Claude Code dikirim dengan sering. Verifikasi detail spesifik versi terhadap [halaman beranda dokumentasi](/id/overview) sebelum mendistribusikan secara internal.

520</Tip>

computer-use.md +207 −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# Biarkan Claude menggunakan komputer Anda dari CLI

6 

7> Aktifkan computer use di Claude Code CLI sehingga Claude dapat membuka aplikasi, mengklik, mengetik, dan melihat layar Anda di macOS. Uji aplikasi native, debug masalah visual, dan otomatisasi alat GUI-only tanpa meninggalkan terminal Anda.

8 

9<Note>

10 {/* plan-availability: feature=computer-use plans=pro,max */}

11 

12 Computer use adalah research preview di macOS yang memerlukan paket Pro atau Max. Tidak tersedia di paket Team atau Enterprise. Memerlukan Claude Code v2.1.85 atau lebih baru dan sesi interaktif, jadi tidak tersedia dalam mode non-interaktif dengan flag `-p`.

13</Note>

14 

15Computer use memungkinkan Claude membuka aplikasi, mengontrol layar Anda, dan bekerja di mesin Anda seperti yang Anda lakukan. Dari CLI, Claude dapat mengompilasi aplikasi Swift, meluncurkannya, mengklik setiap tombol, dan mengambil screenshot hasilnya, semuanya dalam percakapan yang sama di mana Claude menulis kodenya.

16 

17Halaman ini mencakup cara kerja computer use di CLI. Untuk aplikasi Desktop, lihat [computer use di Desktop](/id/desktop#let-claude-use-your-computer).

18 

19## Apa yang dapat Anda lakukan dengan computer use

20 

21Computer use menangani tugas yang memerlukan GUI: apa pun yang biasanya harus Anda tinggalkan terminal dan lakukan dengan tangan.

22 

23* **Bangun dan validasi aplikasi native**: minta Claude untuk membangun aplikasi menu bar macOS. Claude menulis Swift, mengompilasinya, meluncurkannya, dan mengklik setiap kontrol untuk memverifikasi bahwa itu berfungsi sebelum Anda pernah membukanya.

24* **Pengujian UI end-to-end**: arahkan Claude ke aplikasi Electron lokal dan katakan "uji alur onboarding." Claude membuka aplikasi, mengklik melalui pendaftaran, dan mengambil screenshot setiap langkah. Tidak ada konfigurasi Playwright, tidak ada test harness.

25* **Debug masalah visual dan tata letak**: beri tahu Claude "modal terpotong di jendela kecil." Claude mengubah ukuran jendela, mereproduksi bug, mengambil screenshot, menambal CSS, dan memverifikasi perbaikan. Claude melihat apa yang Anda lihat.

26* **Jalankan alat GUI-only**: berinteraksi dengan alat desain, panel kontrol hardware, iOS Simulator, atau aplikasi proprietary yang tidak memiliki CLI atau API.

27 

28## Kapan computer use berlaku

29 

30Claude memiliki beberapa cara untuk berinteraksi dengan aplikasi atau layanan. Computer use adalah yang paling luas dan paling lambat, jadi Claude mencoba alat yang paling presisi terlebih dahulu:

31 

32* Jika Anda memiliki [MCP server](/id/mcp) untuk layanan tersebut, Claude menggunakannya.

33* Jika tugasnya adalah perintah shell, Claude menggunakan Bash.

34* Jika tugasnya adalah pekerjaan browser dan Anda memiliki [Claude di Chrome](/id/chrome) yang diatur, Claude menggunakannya.

35* Jika tidak ada yang berlaku, Claude menggunakan computer use.

36 

37Kontrol layar dicadangkan untuk hal-hal yang tidak dapat dijangkau oleh yang lain: aplikasi native, simulator, dan alat tanpa API.

38 

39## Aktifkan computer use

40 

41Computer use tersedia sebagai MCP server bawaan yang disebut `computer-use`. Ini dimatikan secara default sampai Anda mengaktifkannya.

42 

43<Steps>

44 <Step title="Buka menu MCP">

45 Dalam sesi Claude Code interaktif, jalankan:

46 

47 ```text theme={null}

48 /mcp

49 ```

50 

51 Temukan `computer-use` dalam daftar server. Ini ditampilkan sebagai disabled.

52 </Step>

53 

54 <Step title="Aktifkan server">

55 Pilih `computer-use` dan pilih **Enable**. Pengaturan bertahan per proyek, jadi Anda hanya melakukan ini sekali untuk setiap proyek di mana Anda ingin computer use.

56 </Step>

57 

58 <Step title="Berikan izin macOS">

59 Pertama kali Claude mencoba menggunakan komputer Anda, Anda akan melihat prompt untuk memberikan dua izin macOS:

60 

61 * **Accessibility**: memungkinkan Claude mengklik, mengetik, dan menggulir

62 * **Screen Recording**: memungkinkan Claude melihat apa yang ada di layar Anda

63 

64 Prompt mencakup tautan untuk membuka pane System Settings yang relevan. Berikan keduanya, kemudian pilih **Try again** dalam prompt. macOS mungkin memerlukan Anda untuk memulai ulang Claude Code setelah memberikan Screen Recording.

65 </Step>

66</Steps>

67 

68Setelah setup, minta Claude untuk melakukan sesuatu yang memerlukan GUI:

69 

70```text theme={null}

71Build the app target, launch it, and click through each tab to make

72sure nothing crashes. Screenshot any error states you find.

73```

74 

75## Setujui aplikasi per sesi

76 

77Mengaktifkan server `computer-use` tidak memberikan Claude akses ke setiap aplikasi di mesin Anda. Pertama kali Claude memerlukan aplikasi tertentu dalam sesi, prompt muncul di terminal Anda menampilkan:

78 

79* Aplikasi mana yang ingin Claude kontrol

80* Izin tambahan apa pun yang diminta, seperti akses clipboard

81* Berapa banyak aplikasi lain yang akan disembunyikan saat Claude bekerja

82 

83Pilih **Allow for this session** atau **Deny**. Persetujuan berlaku untuk sesi saat ini. Anda dapat menyetujui beberapa aplikasi sekaligus ketika Claude memintanya bersama-sama.

84 

85Aplikasi dengan jangkauan luas menampilkan peringatan tambahan dalam prompt sehingga Anda tahu apa yang disetujui mereka:

86 

87| Peringatan | Berlaku untuk |

88| :-------------------------------------- | :------------------------------------------------------------- |

89| Setara dengan akses shell | Terminal, iTerm, VS Code, Warp, dan terminal serta IDE lainnya |

90| Dapat membaca atau menulis file apa pun | Finder |

91| Dapat mengubah pengaturan sistem | System Settings |

92 

93Aplikasi ini tidak diblokir. Peringatan memungkinkan Anda memutuskan apakah tugas tersebut memerlukan tingkat akses itu.

94 

95Tingkat kontrol Claude juga bervariasi menurut kategori aplikasi: browser dan platform perdagangan adalah view-only, terminal dan IDE adalah click-only, dan semuanya mendapatkan kontrol penuh. Lihat [app permissions di Desktop](/id/desktop#app-permissions) untuk rincian tier lengkap.

96 

97## Bagaimana Claude bekerja di layar Anda

98 

99Memahami alurnya membantu Anda mengantisipasi apa yang akan Claude lakukan dan cara untuk campur tangan.

100 

101### Satu sesi pada satu waktu

102 

103Computer use menahan kunci machine-wide saat aktif. Jika sesi Claude Code lain sudah menggunakan komputer Anda, upaya baru gagal dengan pesan yang memberi tahu Anda sesi mana yang menahan kunci. Selesaikan atau keluar dari sesi itu terlebih dahulu.

104 

105### Aplikasi disembunyikan saat Claude bekerja

106 

107Ketika Claude mulai mengontrol layar Anda, aplikasi terlihat lainnya disembunyikan sehingga Claude berinteraksi hanya dengan aplikasi yang disetujui. Jendela terminal Anda tetap terlihat dan dikecualikan dari screenshot, sehingga Anda dapat menonton sesi dan Claude tidak pernah melihat output-nya sendiri.

108 

109Ketika Claude menyelesaikan giliran, aplikasi yang disembunyikan dipulihkan secara otomatis.

110 

111### Hentikan kapan saja

112 

113Ketika Claude memperoleh kunci, notifikasi macOS muncul: "Claude is using your computer · press Esc to stop." Tekan `Esc` di mana saja untuk membatalkan tindakan saat ini segera, atau tekan `Ctrl+C` di terminal. Bagaimanapun, Claude melepaskan kunci, menampilkan kembali aplikasi Anda, dan mengembalikan kontrol kepada Anda.

114 

115Notifikasi kedua muncul ketika Claude selesai.

116 

117## Keamanan dan batas kepercayaan

118 

119<Warning>

120 Tidak seperti [alat Bash yang di-sandbox](/id/sandboxing), computer use berjalan di desktop aktual Anda dengan akses ke aplikasi yang Anda setujui. Claude memeriksa setiap tindakan dan menandai potensi prompt injection dari konten on-screen, tetapi batas kepercayaan berbeda. Lihat [panduan keamanan computer use](https://support.claude.com/en/articles/14128542) untuk praktik terbaik.

121</Warning>

122 

123Guardrail bawaan mengurangi risiko tanpa memerlukan konfigurasi:

124 

125* **Persetujuan per-aplikasi**: Claude hanya dapat mengontrol aplikasi yang telah Anda setujui dalam sesi saat ini.

126* **Peringatan sentinel**: aplikasi yang memberikan akses shell, filesystem, atau pengaturan sistem ditandai sebelum Anda menyetujuinya.

127* **Terminal dikecualikan dari screenshot**: Claude tidak pernah melihat jendela terminal Anda, jadi prompt on-screen dalam sesi Anda tidak dapat umpan balik ke model.

128* **Escape global**: tombol `Esc` membatalkan computer use dari mana saja, dan penekanan tombol dikonsumsi sehingga prompt injection tidak dapat menggunakannya untuk menutup dialog.

129* **File kunci**: hanya satu sesi yang dapat mengontrol mesin Anda pada satu waktu.

130 

131## Contoh alur kerja

132 

133Contoh-contoh ini menunjukkan cara umum untuk menggabungkan computer use dengan tugas coding.

134 

135### Validasi build native

136 

137Setelah membuat perubahan pada aplikasi macOS atau iOS, minta Claude untuk mengompilasi dan memverifikasi dalam satu lintasan:

138 

139```text theme={null}

140Build the MenuBarStats target, launch it, open the preferences window,

141and verify the interval slider updates the label. Screenshot the

142preferences window when you're done.

143```

144 

145Claude menjalankan `xcodebuild`, meluncurkan aplikasi, berinteraksi dengan UI, dan melaporkan apa yang ditemukannya.

146 

147### Reproduksi bug tata letak

148 

149Ketika bug visual hanya muncul pada ukuran jendela tertentu, biarkan Claude menemukannya:

150 

151```text theme={null}

152The settings modal clips its footer on narrow windows. Resize the app

153window down until you can reproduce it, screenshot the clipped state,

154then check the CSS for the modal container.

155```

156 

157Claude mengubah ukuran jendela, menangkap status yang rusak, dan membaca stylesheet yang relevan.

158 

159### Uji alur simulator

160 

161Jalankan iOS Simulator tanpa menulis XCTest:

162 

163```text theme={null}

164Open the iOS Simulator, launch the app, tap through the onboarding

165screens, and tell me if any screen takes more than a second to load.

166```

167 

168Claude mengontrol simulator dengan cara yang sama seperti Anda dengan mouse.

169 

170## Perbedaan dari aplikasi Desktop

171 

172Permukaan CLI dan Desktop berbagi mesin computer use yang sama. Beberapa kontrol khusus Desktop belum ada di CLI:

173 

174| Fitur | Desktop | CLI |

175| :--------------------------- | :---------------------------------------------------------- | :-------------------------------- |

176| Enable | Toggle di **Settings > General** (di bawah **Desktop app**) | Aktifkan `computer-use` di `/mcp` |

177| Daftar aplikasi yang ditolak | Dapat dikonfigurasi di Settings | Belum tersedia |

178| Toggle auto-unhide | Opsional | Selalu aktif |

179| Integrasi Dispatch | Sesi yang dispawn Dispatch dapat menggunakan computer use | Tidak berlaku |

180 

181## Troubleshooting

182 

183### "Computer use is in use by another Claude session"

184 

185Sesi Claude Code lain menahan kunci. Selesaikan tugas dalam sesi itu atau keluar darinya. Jika sesi lain mogok, kunci dilepaskan secara otomatis ketika Claude mendeteksi proses tidak lagi berjalan.

186 

187### Prompt izin macOS terus muncul kembali

188 

189macOS kadang-kadang memerlukan restart dari proses yang meminta setelah Anda memberikan Screen Recording. Keluar dari Claude Code sepenuhnya dan mulai sesi baru. Jika prompt terus berlanjut, buka **System Settings > Privacy & Security > Screen Recording** dan konfirmasi aplikasi terminal Anda terdaftar dan diaktifkan.

190 

191### `computer-use` tidak muncul di `/mcp`

192 

193Server hanya muncul pada setup yang memenuhi syarat. Periksa bahwa:

194 

195* Anda berada di macOS. Computer use tidak tersedia di Linux atau Windows.

196* Anda menjalankan Claude Code v2.1.85 atau lebih baru. Jalankan `claude --version` untuk memeriksa.

197* Anda berada di paket Pro atau Max. Jalankan `/status` untuk mengonfirmasi langganan Anda.

198* Anda diautentikasi melalui claude.ai. Computer use tidak tersedia dengan penyedia pihak ketiga seperti Amazon Bedrock, Google Cloud Vertex AI, atau Microsoft Foundry. Jika Anda mengakses Claude secara eksklusif melalui penyedia pihak ketiga, Anda memerlukan akun claude.ai terpisah untuk menggunakan fitur ini.

199* Anda berada dalam sesi interaktif. Computer use tidak tersedia dalam mode non-interaktif dengan flag `-p`.

200 

201## Lihat juga

202 

203* [Computer use di Desktop](/id/desktop#let-claude-use-your-computer): kemampuan yang sama dengan halaman pengaturan grafis

204* [Claude di Chrome](/id/chrome): otomasi browser untuk tugas berbasis web

205* [MCP](/id/mcp): hubungkan Claude ke alat dan API terstruktur

206* [Sandboxing](/id/sandboxing): bagaimana alat Bash Claude mengisolasi akses filesystem dan jaringan

207* [Panduan keamanan computer use](https://support.claude.com/en/articles/14128542): praktik terbaik untuk computer use yang aman

costs.md +203 −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 biaya secara efektif

6 

7> Lacak penggunaan token, tetapkan batas pengeluaran tim, dan kurangi biaya Claude Code dengan manajemen konteks, pemilihan model, pengaturan pemikiran yang diperluas, dan hook prapemrosesan.

8 

9Claude Code mengenakan biaya berdasarkan konsumsi token API. Untuk harga paket langganan (Pro, Max, Team, Enterprise), lihat [claude.com/pricing](https://claude.com/pricing). Biaya per pengembang bervariasi luas berdasarkan pemilihan model, ukuran basis kode, dan pola penggunaan seperti menjalankan beberapa instans atau otomasi.

10 

11Di seluruh penyebaran perusahaan, biaya rata-rata adalah sekitar \$13 per pengembang per hari aktif dan \$150-250 per pengembang per bulan, dengan biaya tetap di bawah \$30 per hari aktif untuk 90% pengguna. Untuk memperkirakan pengeluaran untuk tim Anda sendiri, mulai dengan kelompok pilot kecil dan gunakan alat pelacakan di bawah untuk membangun baseline sebelum peluncuran yang lebih luas.

12 

13Halaman ini mencakup cara [melacak biaya Anda](#track-your-costs), [mengelola biaya untuk tim](#managing-costs-for-teams), dan [mengurangi penggunaan token](#reduce-token-usage).

14 

15## Lacak biaya Anda

16 

17### Menggunakan perintah `/usage`

18 

19<Note>

20 Blok Session dalam `/usage` menampilkan penggunaan token API dan dimaksudkan untuk pengguna API. Pelanggan Claude Max dan Pro memiliki penggunaan yang disertakan dalam langganan mereka, jadi angka biaya sesi tidak relevan untuk tujuan penagihan. Pelanggan melihat bilah penggunaan paket dan statistik aktivitas di layar yang sama.

21</Note>

22 

23Perintah `/usage` menyediakan statistik penggunaan token terperinci untuk sesi Anda saat ini. Angka dolar adalah perkiraan yang dihitung secara lokal dari jumlah token dan mungkin berbeda dari tagihan aktual Anda. Untuk penagihan yang berwenang, lihat halaman Penggunaan di [Claude Console](https://platform.claude.com/usage).

24 

25```text theme={null}

26Total cost: $0.55

27Total duration (API): 6m 19.7s

28Total duration (wall): 6h 33m 10.2s

29Total code changes: 0 lines added, 0 lines removed

30```

31 

32## Mengelola biaya untuk tim

33 

34Saat menggunakan Claude API, Anda dapat [menetapkan batas pengeluaran ruang kerja](https://platform.claude.com/docs/id/build-with-claude/workspaces#workspace-limits) pada total pengeluaran ruang kerja Claude Code. Admin dapat [melihat pelaporan biaya dan penggunaan](https://platform.claude.com/docs/id/build-with-claude/workspaces#usage-and-cost-tracking) di Konsol.

35 

36<Note>

37 Ketika Anda pertama kali mengautentikasi Claude Code dengan akun Claude Console Anda, ruang kerja yang disebut "Claude Code" secara otomatis dibuat untuk Anda. Ruang kerja ini menyediakan pelacakan dan manajemen biaya terpusat untuk semua penggunaan Claude Code di organisasi Anda. Anda tidak dapat membuat kunci API untuk ruang kerja ini; ini secara eksklusif untuk autentikasi dan penggunaan Claude Code.

38 

39 Untuk organisasi dengan batas laju kustom, lalu lintas Claude Code di ruang kerja ini dihitung terhadap batas laju API keseluruhan organisasi Anda. Anda dapat menetapkan [batas laju ruang kerja](https://platform.claude.com/docs/id/api/rate-limits#setting-lower-limits-for-workspaces) di halaman Batas ruang kerja ini di Claude Console untuk membatasi bagian Claude Code dan melindungi beban kerja produksi lainnya.

40</Note>

41 

42Di Bedrock, Vertex, dan Foundry, Claude Code tidak mengirim metrik dari cloud Anda. Untuk mendapatkan metrik biaya, beberapa perusahaan besar melaporkan menggunakan [LiteLLM](/id/llm-gateway#litellm-configuration), yang merupakan alat sumber terbuka yang membantu perusahaan [melacak pengeluaran berdasarkan kunci](https://docs.litellm.ai/docs/proxy/virtual_keys#tracking-spend). Proyek ini tidak berafiliasi dengan Anthropic dan belum diaudit untuk keamanan.

43 

44### Rekomendasi batas laju

45 

46Saat menyiapkan Claude Code untuk tim, pertimbangkan rekomendasi Token Per Minute (TPM) dan Request Per Minute (RPM) per pengguna ini berdasarkan ukuran organisasi Anda:

47 

48| Ukuran tim | TPM per pengguna | RPM per pengguna |

49| ---------------- | ---------------- | ---------------- |

50| 1-5 pengguna | 200k-300k | 5-7 |

51| 5-20 pengguna | 100k-150k | 2.5-3.5 |

52| 20-50 pengguna | 50k-75k | 1.25-1.75 |

53| 50-100 pengguna | 25k-35k | 0.62-0.87 |

54| 100-500 pengguna | 15k-20k | 0.37-0.47 |

55| 500+ pengguna | 10k-15k | 0.25-0.35 |

56 

57Misalnya, jika Anda memiliki 200 pengguna, Anda mungkin meminta 20k TPM untuk setiap pengguna, atau 4 juta total TPM (200\*20.000 = 4 juta).

58 

59TPM per pengguna menurun seiring pertumbuhan ukuran tim karena lebih sedikit pengguna yang cenderung menggunakan Claude Code secara bersamaan di organisasi yang lebih besar. Batas laju ini berlaku di tingkat organisasi, bukan per pengguna individual, yang berarti pengguna individual dapat sementara mengonsumsi lebih dari bagian yang dihitung mereka ketika orang lain tidak secara aktif menggunakan layanan.

60 

61<Note>

62 Jika Anda mengantisipasi skenario dengan penggunaan bersamaan yang tidak biasa tinggi (seperti sesi pelatihan langsung dengan kelompok besar), Anda mungkin memerlukan alokasi TPM yang lebih tinggi per pengguna.

63</Note>

64 

65### Biaya token tim agen

66 

67[Tim agen](/id/agent-teams) menjalankan beberapa instans Claude Code, masing-masing dengan jendela konteks sendiri. Penggunaan token diskalakan dengan jumlah rekan kerja aktif dan berapa lama masing-masing berjalan.

68 

69Untuk menjaga biaya tim agen tetap dapat dikelola:

70 

71* Gunakan Sonnet untuk rekan kerja. Ini menyeimbangkan kemampuan dan biaya untuk tugas koordinasi.

72* Jaga tim tetap kecil. Setiap rekan kerja menjalankan jendela konteks sendiri, jadi penggunaan token kira-kira sebanding dengan ukuran tim.

73* Jaga prompt spawn tetap fokus. Rekan kerja memuat CLAUDE.md, server MCP, dan skills secara otomatis, tetapi semuanya dalam prompt spawn menambah konteks mereka dari awal.

74* Bersihkan tim ketika pekerjaan selesai. Rekan kerja aktif terus mengonsumsi token bahkan jika menganggur.

75* Tim agen dinonaktifkan secara default. Atur `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` di [settings.json](/id/settings) atau lingkungan Anda untuk mengaktifkannya. Lihat [aktifkan tim agen](/id/agent-teams#enable-agent-teams).

76 

77## Kurangi penggunaan token

78 

79Biaya token diskalakan dengan ukuran konteks: semakin banyak konteks yang diproses Claude, semakin banyak token yang Anda gunakan. Claude Code secara otomatis mengoptimalkan biaya melalui prompt caching (yang mengurangi biaya untuk konten berulang seperti prompt sistem) dan auto-compact (yang merangkum riwayat percakapan saat mendekati batas konteks).

80 

81Strategi berikut membantu Anda menjaga konteks tetap kecil dan mengurangi biaya per pesan.

82 

83### Kelola konteks secara proaktif

84 

85Gunakan `/usage` untuk memeriksa penggunaan token Anda saat ini, atau [konfigurasi baris status Anda](/id/statusline#context-window-usage) untuk menampilkannya secara berkelanjutan.

86 

87* **Bersihkan antar tugas**: Gunakan `/clear` untuk memulai segar saat beralih ke pekerjaan yang tidak terkait. Konteks basi membuang token pada setiap pesan berikutnya. Gunakan `/rename` sebelum membersihkan sehingga Anda dapat dengan mudah menemukan sesi nanti, kemudian `/resume` untuk kembali ke sana.

88* **Tambahkan instruksi compaction kustom**: `/compact Focus on code samples and API usage` memberi tahu Claude apa yang harus dipertahankan selama perangkuman.

89 

90Anda juga dapat menyesuaikan perilaku compaction di CLAUDE.md Anda:

91 

92```markdown theme={null}

93# Compact instructions

94 

95When you are using compact, please focus on test output and code changes

96```

97 

98### Pilih model yang tepat

99 

100Sonnet menangani sebagian besar tugas pengkodean dengan baik dan biayanya lebih rendah dari Opus. Cadangkan Opus untuk keputusan arsitektur yang kompleks atau penalaran multi-langkah. Gunakan `/model` untuk beralih model di tengah sesi, atau atur default di `/config`. Untuk tugas subagent sederhana, tentukan `model: haiku` di [konfigurasi subagent](/id/sub-agents#choose-a-model) Anda.

101 

102### Kurangi overhead server MCP

103 

104Definisi alat MCP adalah [ditunda secara default](/id/mcp#scale-with-mcp-tool-search), jadi hanya nama alat yang masuk ke konteks sampai Claude menggunakan alat tertentu. Jalankan `/context` untuk melihat apa yang mengonsumsi ruang.

105 

106* **Lebih suka alat CLI jika tersedia**: Alat seperti `gh`, `aws`, `gcloud`, dan `sentry-cli` masih lebih efisien konteks daripada server MCP karena mereka tidak menambahkan daftar per-alat apa pun. Claude dapat menjalankan perintah CLI secara langsung.

107* **Nonaktifkan server yang tidak digunakan**: Jalankan `/mcp` untuk melihat server yang dikonfigurasi dan nonaktifkan yang tidak Anda gunakan secara aktif.

108 

109### Instal plugin kecerdasan kode untuk bahasa yang diketik

110 

111[Plugin kecerdasan kode](/id/discover-plugins#code-intelligence) memberi Claude navigasi simbol yang tepat daripada pencarian berbasis teks, mengurangi pembacaan file yang tidak perlu saat menjelajahi kode yang tidak dikenal. Satu panggilan "go to definition" menggantikan apa yang mungkin merupakan grep diikuti dengan membaca beberapa file kandidat. Server bahasa yang diinstal juga melaporkan kesalahan tipe secara otomatis setelah pengeditan, jadi Claude menangkap kesalahan tanpa menjalankan compiler.

112 

113### Offload pemrosesan ke hooks dan skills

114 

115[Hooks](/id/hooks) kustom dapat memproses data sebelum Claude melihatnya. Alih-alih Claude membaca file log 10.000 baris untuk menemukan kesalahan, hook dapat grep untuk `ERROR` dan mengembalikan hanya baris yang cocok, mengurangi konteks dari puluhan ribu token menjadi ratusan.

116 

117[Skill](/id/skills) dapat memberi Claude pengetahuan domain sehingga tidak harus menjelajahi. Misalnya, skill "codebase-overview" dapat mendeskripsikan arsitektur proyek Anda, direktori kunci, dan konvensi penamaan. Ketika Claude memanggil skill, ia mendapatkan konteks ini segera daripada menghabiskan token membaca beberapa file untuk memahami struktur.

118 

119Misalnya, hook PreToolUse ini memfilter output tes untuk menampilkan hanya kegagalan:

120 

121<Tabs>

122 <Tab title="settings.json">

123 Tambahkan ini ke [settings.json](/id/settings#settings-files) Anda untuk menjalankan hook sebelum setiap perintah Bash:

124 

125 ```json theme={null}

126 {

127 "hooks": {

128 "PreToolUse": [

129 {

130 "matcher": "Bash",

131 "hooks": [

132 {

133 "type": "command",

134 "command": "~/.claude/hooks/filter-test-output.sh"

135 }

136 ]

137 }

138 ]

139 }

140 }

141 ```

142 </Tab>

143 

144 <Tab title="filter-test-output.sh">

145 Hook memanggil skrip ini, yang memeriksa apakah perintah adalah test runner dan memodifikasinya untuk menampilkan hanya kegagalan:

146 

147 ```bash theme={null}

148 #!/bin/bash

149 input=$(cat)

150 cmd=$(echo "$input" | jq -r '.tool_input.command')

151 

152 # If running tests, filter to show only failures

153 if [[ "$cmd" =~ ^(npm test|pytest|go test) ]]; then

154 filtered_cmd="$cmd 2>&1 | grep -A 5 -E '(FAIL|ERROR|error:)' | head -100"

155 echo "{\"hookSpecificOutput\":{\"hookEventName\":\"PreToolUse\",\"permissionDecision\":\"allow\",\"updatedInput\":{\"command\":\"$filtered_cmd\"}}}"

156 else

157 echo "{}"

158 fi

159 ```

160 </Tab>

161</Tabs>

162 

163### Pindahkan instruksi dari CLAUDE.md ke skills

164 

165File [CLAUDE.md](/id/memory) Anda dimuat ke konteks saat awal sesi. Jika berisi instruksi terperinci untuk alur kerja spesifik (seperti ulasan PR atau migrasi database), token tersebut ada bahkan ketika Anda melakukan pekerjaan yang tidak terkait. [Skills](/id/skills) dimuat sesuai permintaan hanya saat dipanggil, jadi memindahkan instruksi khusus ke skills menjaga konteks dasar Anda tetap lebih kecil. Bertujuan untuk menjaga CLAUDE.md di bawah 200 baris dengan hanya menyertakan hal-hal penting.

166 

167### Sesuaikan pemikiran yang diperluas

168 

169Pemikiran yang diperluas diaktifkan secara default karena secara signifikan meningkatkan kinerja pada tugas perencanaan dan penalaran yang kompleks. Token pemikiran ditagih sebagai token output, dan anggaran default dapat mencapai puluhan ribu token per permintaan tergantung pada model. Untuk tugas yang lebih sederhana di mana penalaran mendalam tidak diperlukan, Anda dapat mengurangi biaya dengan menurunkan [tingkat upaya](/id/model-config#adjust-effort-level) dengan `/effort` atau di `/model`, menonaktifkan pemikiran di `/config`, atau menurunkan anggaran dengan `MAX_THINKING_TOKENS=8000`.

170 

171### Delegasikan operasi verbose ke subagents

172 

173Menjalankan tes, mengambil dokumentasi, atau memproses file log dapat mengonsumsi konteks yang signifikan. Delegasikan ini ke [subagents](/id/sub-agents#isolate-high-volume-operations) sehingga output verbose tetap dalam konteks subagent sementara hanya ringkasan yang kembali ke percakapan utama Anda.

174 

175### Kelola biaya tim agen

176 

177Tim agen menggunakan sekitar 7x lebih banyak token daripada sesi standar ketika rekan kerja berjalan dalam plan mode, karena setiap rekan kerja mempertahankan jendela konteks sendiri dan berjalan sebagai instans Claude terpisah. Jaga tugas tim tetap kecil dan mandiri untuk membatasi penggunaan token per rekan kerja. Lihat [tim agen](/id/agent-teams) untuk detail.

178 

179### Tulis prompt spesifik

180 

181Permintaan yang tidak jelas seperti "tingkatkan basis kode ini" memicu pemindaian luas. Permintaan spesifik seperti "tambahkan validasi input ke fungsi login di auth.ts" memungkinkan Claude bekerja secara efisien dengan pembacaan file minimal.

182 

183### Bekerja secara efisien pada tugas yang kompleks

184 

185Untuk pekerjaan yang lebih lama atau lebih kompleks, kebiasaan ini membantu menghindari token yang terbuang dari mengambil jalan yang salah:

186 

187* **Gunakan plan mode untuk tugas yang kompleks**: Tekan Shift+Tab untuk memasuki [plan mode](/id/common-workflows#use-plan-mode-for-safe-code-analysis) sebelum implementasi. Claude menjelajahi basis kode dan mengusulkan pendekatan untuk persetujuan Anda, mencegah pekerjaan ulang yang mahal ketika arah awal salah.

188* **Koreksi kursus lebih awal**: Jika Claude mulai menuju arah yang salah, tekan Escape untuk berhenti segera. Gunakan `/rewind` atau tekan dua kali Escape untuk mengembalikan percakapan dan kode ke checkpoint sebelumnya.

189* **Berikan target verifikasi**: Sertakan kasus uji, tempel tangkapan layar, atau tentukan output yang diharapkan dalam prompt Anda. Ketika Claude dapat memverifikasi pekerjaan sendiri, ia menangkap masalah sebelum Anda perlu meminta perbaikan.

190* **Uji secara bertahap**: Tulis satu file, uji, kemudian lanjutkan. Ini menangkap masalah lebih awal ketika murah untuk diperbaiki.

191 

192## Penggunaan token latar belakang

193 

194Claude Code menggunakan token untuk beberapa fungsi latar belakang bahkan saat menganggur:

195 

196* **Perangkuman percakapan**: Pekerjaan latar belakang yang merangkum percakapan sebelumnya untuk fitur `claude --resume`

197* **Pemrosesan perintah**: Beberapa perintah seperti `/usage` dapat menghasilkan permintaan untuk memeriksa status

198 

199Proses latar belakang ini mengonsumsi sejumlah kecil token (biasanya di bawah \$0,04 per sesi) bahkan tanpa interaksi aktif.

200 

201## Memahami perubahan dalam perilaku Claude Code

202 

203Claude Code secara teratur menerima pembaruan yang dapat mengubah cara fitur bekerja, termasuk pelaporan biaya. Jalankan `claude --version` untuk memeriksa versi Anda saat ini. Untuk pertanyaan penagihan spesifik, hubungi dukungan Anthropic melalui [akun Konsol](https://platform.claude.com/login) Anda.

data-usage.md +124 −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# Penggunaan data

6 

7> Pelajari kebijakan penggunaan data Anthropic untuk Claude

8 

9## Kebijakan data

10 

11### Kebijakan pelatihan data

12 

13**Pengguna konsumen (paket Free, Pro, dan Max)**:

14Kami memberi Anda pilihan untuk mengizinkan data Anda digunakan untuk meningkatkan model Claude di masa depan. Kami akan melatih model baru menggunakan data dari akun Free, Pro, dan Max ketika pengaturan ini aktif (termasuk ketika Anda menggunakan Claude Code dari akun-akun ini).

15 

16**Pengguna komersial**: (paket Team dan Enterprise, API, platform pihak ketiga, dan Claude Gov) mempertahankan kebijakan yang ada: Anthropic tidak melatih model generatif menggunakan kode atau prompt yang dikirim ke Claude Code berdasarkan syarat komersial, kecuali pelanggan telah memilih untuk memberikan data mereka kepada kami untuk peningkatan model (misalnya, [Program Mitra Pengembang](https://support.claude.com/en/articles/11174108-about-the-development-partner-program)).

17 

18### Program Mitra Pengembang

19 

20Jika Anda secara eksplisit memilih untuk memberikan materi kepada kami untuk dilatih, seperti melalui [Program Mitra Pengembang](https://support.claude.com/en/articles/11174108-about-the-development-partner-program), kami dapat menggunakan materi tersebut untuk melatih model kami. Admin organisasi dapat secara tegas memilih untuk bergabung dengan Program Mitra Pengembang untuk organisasi mereka. Perhatikan bahwa program ini hanya tersedia untuk API pihak pertama Anthropic, dan bukan untuk pengguna Bedrock atau Vertex.

21 

22### Umpan balik menggunakan perintah `/feedback`

23 

24Jika Anda memilih untuk mengirimkan umpan balik kepada kami tentang Claude Code menggunakan perintah `/feedback`, kami dapat menggunakan umpan balik Anda untuk meningkatkan produk dan layanan kami. Transkrip yang dibagikan melalui `/feedback` disimpan selama 5 tahun.

25 

26### Survei kualitas sesi

27 

28Ketika Anda melihat prompt "Bagaimana Claude melakukan ini di sesi ini?" di Claude Code, merespons survei ini, termasuk memilih "Abaikan", hanya peringkat Anda yang dicatat. Kami tidak mengumpulkan atau menyimpan transkrip percakapan, input, output, atau data sesi lainnya sebagai bagian dari prompt penilaian itu sendiri. Tidak seperti umpan balik jempol ke atas/ke bawah atau laporan `/feedback`, survei kualitas sesi ini adalah metrik kepuasan produk sederhana.

29 

30Setelah prompt penilaian, Anda mungkin melihat pertanyaan tindak lanjut terpisah yang menanyakan "Dapatkah Anthropic melihat transkrip sesi Anda untuk membantu kami meningkatkan Claude Code?". Ini adalah langkah kedua opsional yang berbeda dari penilaian:

31 

32* **Ya**: mengunggah transkrip percakapan Anda, transkrip subagen apa pun, dan file log sesi mentah dari disk ke Anthropic. Pola kunci API dan token yang dikenal diredaksi sebelum pengunggahan. Kode sumber, konten file, dan konten percakapan lainnya diunggah apa adanya. Transkrip yang dibagikan disimpan hingga 6 bulan.

33* **Tidak**: menolak tanpa mengirim apa pun

34* **Jangan tanya lagi**: menolak dan menghentikan pertanyaan tindak lanjut ini agar tidak muncul di sesi mendatang

35 

36Tidak ada yang diunggah kecuali Anda secara eksplisit memilih **Ya**. Organisasi dengan [retensi data nol](/id/zero-data-retention), atau di mana umpan balik produk dinonaktifkan oleh kebijakan organisasi, tidak pernah melihat pertanyaan tindak lanjut ini. Respons Anda terhadap survei ini, termasuk transkrip sesi yang dikirimkan setelah prompt penilaian, tidak mempengaruhi preferensi pelatihan data Anda dan tidak dapat digunakan untuk melatih model AI kami.

37 

38Untuk menonaktifkan survei ini, atur `CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY=1`. Survei juga dinonaktifkan ketika `DISABLE_TELEMETRY` atau `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` diatur. Untuk mengontrol frekuensi alih-alih menonaktifkan, atur [`feedbackSurveyRate`](/id/settings#available-settings) dalam file pengaturan Anda ke probabilitas antara `0` dan `1`.

39 

40### Retensi data

41 

42Anthropic menyimpan data Claude Code berdasarkan jenis akun dan preferensi Anda.

43 

44**Pengguna konsumen (paket Free, Pro, dan Max)**:

45 

46* Pengguna yang mengizinkan penggunaan data untuk peningkatan model: periode retensi 5 tahun untuk mendukung pengembangan model dan peningkatan keamanan

47* Pengguna yang tidak mengizinkan penggunaan data untuk peningkatan model: periode retensi 30 hari

48* Pengaturan privasi dapat diubah kapan saja di [claude.ai/settings/data-privacy-controls](https://claude.ai/settings/data-privacy-controls).

49 

50**Pengguna komersial (Team, Enterprise, dan API)**:

51 

52* Standar: periode retensi 30 hari

53* [Retensi data nol](/id/zero-data-retention): tersedia untuk Claude Code di Claude untuk Enterprise. ZDR diaktifkan berdasarkan per-organisasi; setiap organisasi baru harus memiliki ZDR diaktifkan secara terpisah oleh tim akun Anda

54* Penyimpanan lokal: klien Claude Code menyimpan transkrip sesi secara lokal dalam plaintext di bawah `~/.claude/projects/` selama 30 hari secara default untuk memungkinkan pemulihan sesi. Sesuaikan periode dengan `cleanupPeriodDays`. Lihat [data aplikasi](/id/claude-directory#application-data) untuk apa yang disimpan dan cara menghapusnya.

55 

56Anda dapat menghapus sesi Claude Code individual di web kapan saja. Menghapus sesi secara permanen menghapus data peristiwa sesi. Untuk instruksi tentang cara menghapus sesi, lihat [Menghapus sesi](/id/claude-code-on-the-web#delete-sessions).

57 

58Pelajari lebih lanjut tentang praktik retensi data di [Pusat Privasi](https://privacy.anthropic.com/) kami.

59 

60Untuk detail lengkap, silakan tinjau [Syarat Layanan Komersial](https://www.anthropic.com/legal/commercial-terms) kami (untuk pengguna Team, Enterprise, dan API) atau [Syarat Konsumen](https://www.anthropic.com/legal/consumer-terms) (untuk pengguna Free, Pro, dan Max) dan [Kebijakan Privasi](https://www.anthropic.com/legal/privacy).

61 

62## Akses data

63 

64Untuk semua pengguna pihak pertama, Anda dapat mempelajari lebih lanjut tentang data apa yang dicatat untuk [Claude Code lokal](#local-claude-code-data-flow-and-dependencies) dan [Claude Code cloud](#cloud-execution-data-flow-and-dependencies). Sesi [Remote Control](/id/remote-control) mengikuti alur data lokal karena semua eksekusi terjadi di mesin Anda. Perhatikan untuk Claude Code jarak jauh, Claude mengakses repositori tempat Anda memulai sesi Claude Code Anda. Claude tidak mengakses repositori yang telah Anda hubungkan tetapi belum memulai sesi di dalamnya.

65 

66## Claude Code Lokal: Alur data dan dependensi

67 

68Diagram di bawah menunjukkan bagaimana Claude Code terhubung ke layanan eksternal selama instalasi dan operasi normal. Garis solid menunjukkan koneksi yang diperlukan, sementara garis putus-putus mewakili alur data opsional atau yang dimulai pengguna.

69 

70<img src="https://mintcdn.com/claude-code/YcBW2H7CArGcduPb/images/claude-code-data-flow.svg?fit=max&auto=format&n=YcBW2H7CArGcduPb&q=85&s=b600a89f84fc86f9ff7be00a466c0635" alt="Diagram menunjukkan koneksi eksternal Claude Code: install/update terhubung ke server distribusi, dan permintaan pengguna terhubung ke layanan Anthropic termasuk auth Console, public-api, dan secara opsional Statsig, Sentry, dan pelaporan bug" width="720" height="520" data-path="images/claude-code-data-flow.svg" />

71 

72Claude Code berjalan secara lokal. Untuk berinteraksi dengan LLM, Claude Code mengirimkan data melalui jaringan. Data ini mencakup semua prompt pengguna dan output model, dienkripsi dalam transit melalui TLS 1.2+. Claude Code kompatibel dengan sebagian besar VPN dan proxy LLM populer.

73 

74Enkripsi saat istirahat tergantung pada penyedia model Anda:

75 

76| Penyedia | Enkripsi saat istirahat |

77| ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |

78| Anthropic API | Enkripsi disk tingkat infrastruktur (AES-256). Aktifkan [Zero Data Retention](/id/zero-data-retention) untuk tidak ada persistensi sisi server. |

79| Amazon Bedrock | AES-256 dengan kunci yang dikelola AWS. Kunci yang dikelola pelanggan tersedia melalui AWS KMS. |

80| Google Cloud Vertex AI | Kunci enkripsi yang dikelola Google. CMEK tersedia. |

81| Microsoft Foundry | Permintaan dialihkan ke infrastruktur Anthropic dengan enkripsi disk AES-256. |

82 

83Claude Code dibangun di atas API Anthropic. Untuk detail mengenai kontrol keamanan API, termasuk prosedur logging API, lihat artefak kepatuhan di [Pusat Kepercayaan Anthropic](https://trust.anthropic.com).

84 

85### Eksekusi cloud: Alur data dan dependensi

86 

87Saat menggunakan [Claude Code di web](/id/claude-code-on-the-web), sesi berjalan di mesin virtual yang dikelola Anthropic alih-alih secara lokal. Di lingkungan cloud:

88 

89* **Penyimpanan kode dan data:** Repositori Anda diklon ke VM terisolasi. Kode dan data sesi tunduk pada kebijakan retensi dan penggunaan untuk jenis akun Anda (lihat bagian Retensi data di atas)

90* **Kredensial:** Autentikasi GitHub ditangani melalui proxy aman; kredensial GitHub Anda tidak pernah memasuki sandbox

91* **Lalu lintas jaringan:** Semua lalu lintas keluar melewati proxy keamanan untuk logging audit dan pencegahan penyalahgunaan

92* **Data sesi:** Prompt, perubahan kode, dan output mengikuti kebijakan data yang sama dengan penggunaan Claude Code lokal

93 

94Untuk detail keamanan tentang eksekusi cloud, lihat [Keamanan](/id/security#cloud-execution-security).

95 

96## Layanan telemetri

97 

98Claude Code terhubung dari mesin pengguna ke layanan Statsig untuk mencatat metrik operasional seperti latensi, keandalan, dan pola penggunaan. Logging ini tidak mencakup kode atau jalur file apa pun. Data dienkripsi dalam transit menggunakan TLS dan saat istirahat menggunakan enkripsi AES 256-bit. Baca lebih lanjut di [dokumentasi keamanan Statsig](https://www.statsig.com/trust/security). Untuk menolak telemetri Statsig, atur variabel lingkungan `DISABLE_TELEMETRY`.

99 

100Claude Code terhubung dari mesin pengguna ke Sentry untuk logging kesalahan operasional. Data dienkripsi dalam transit menggunakan TLS dan saat istirahat menggunakan enkripsi AES 256-bit. Baca lebih lanjut di [dokumentasi keamanan Sentry](https://sentry.io/security/). Untuk menolak logging kesalahan, atur variabel lingkungan `DISABLE_ERROR_REPORTING`.

101 

102Ketika pengguna menjalankan perintah `/feedback`, salinan riwayat percakapan lengkap mereka termasuk kode dikirim ke Anthropic. Data dienkripsi dalam transit menggunakan TLS. Secara opsional, masalah GitHub dibuat di repositori publik. Untuk menolak, atur variabel lingkungan `DISABLE_FEEDBACK_COMMAND` ke `1`.

103 

104## Perilaku default menurut penyedia API

105 

106Secara default, pelaporan kesalahan, telemetri, dan pelaporan bug dinonaktifkan saat menggunakan Bedrock, Vertex, atau Foundry. Survei kualitas sesi dan pemeriksaan keamanan domain WebFetch adalah pengecualian dan berjalan terlepas dari penyedia. Anda dapat menolak semua lalu lintas non-esensial, termasuk survei, sekaligus dengan mengatur `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`. Variabel ini tidak mempengaruhi pemeriksaan WebFetch, yang memiliki opt-out tersendiri. Berikut adalah perilaku default lengkapnya:

107 

108| Layanan | Claude API | Vertex API | Bedrock API | Foundry API |

109| ---------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |

110| **Statsig (Metrik)** | Default aktif.<br />`DISABLE_TELEMETRY=1` untuk menonaktifkan. | Default nonaktif.<br />`CLAUDE_CODE_USE_VERTEX` harus 1. | Default nonaktif.<br />`CLAUDE_CODE_USE_BEDROCK` harus 1. | Default nonaktif.<br />`CLAUDE_CODE_USE_FOUNDRY` harus 1. |

111| **Sentry (Kesalahan)** | Default aktif.<br />`DISABLE_ERROR_REPORTING=1` untuk menonaktifkan. | Default nonaktif.<br />`CLAUDE_CODE_USE_VERTEX` harus 1. | Default nonaktif.<br />`CLAUDE_CODE_USE_BEDROCK` harus 1. | Default nonaktif.<br />`CLAUDE_CODE_USE_FOUNDRY` harus 1. |

112| **Claude API (laporan `/feedback`)** | Default aktif.<br />`DISABLE_FEEDBACK_COMMAND=1` untuk menonaktifkan. | Default nonaktif.<br />`CLAUDE_CODE_USE_VERTEX` harus 1. | Default nonaktif.<br />`CLAUDE_CODE_USE_BEDROCK` harus 1. | Default nonaktif.<br />`CLAUDE_CODE_USE_FOUNDRY` harus 1. |

113| **Survei kualitas sesi** | Default aktif.<br />`CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY=1` untuk menonaktifkan. | Default aktif.<br />`CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY=1` untuk menonaktifkan. | Default aktif.<br />`CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY=1` untuk menonaktifkan. | Default aktif.<br />`CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY=1` untuk menonaktifkan. |

114| **Pemeriksaan keamanan domain WebFetch** | Default aktif.<br />`skipWebFetchPreflight: true` di [settings](/id/settings) untuk menonaktifkan. | Default aktif.<br />`skipWebFetchPreflight: true` di [settings](/id/settings) untuk menonaktifkan. | Default aktif.<br />`skipWebFetchPreflight: true` di [settings](/id/settings) untuk menonaktifkan. | Default aktif.<br />`skipWebFetchPreflight: true` di [settings](/id/settings) untuk menonaktifkan. |

115 

116Semua variabel lingkungan dapat diperiksa ke dalam `settings.json` (lihat [referensi settings](/id/settings)).

117 

118Mulai dari v2.1.126, ketika platform host mengatur `CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`, metrik Statsig default aktif untuk Vertex, Bedrock, dan Foundry, dan mengikuti opt-out standar `DISABLE_TELEMETRY`. Pelaporan kesalahan Sentry dan laporan `/feedback` tetap nonaktif secara default pada penyedia tersebut.

119 

120### Pemeriksaan keamanan domain WebFetch

121 

122Sebelum mengambil URL, alat WebFetch mengirimkan nama host yang diminta ke `api.anthropic.com` untuk memeriksanya terhadap daftar blocklist keamanan yang dikelola oleh Anthropic. Hanya nama host yang dikirim, bukan URL lengkap, jalur, atau konten halaman. Hasil disimpan dalam cache per nama host selama lima menit.

123 

124Pemeriksaan ini berjalan terlepas dari penyedia model mana yang Anda gunakan dan tidak dipengaruhi oleh `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`. Jika jaringan Anda memblokir `api.anthropic.com`, permintaan WebFetch gagal sampai Anda memungkinkan daftar domain atau mengatur `skipWebFetchPreflight: true` di [settings](/id/settings). Menonaktifkan pemeriksaan berarti WebFetch mencoba mengambil URL apa pun tanpa berkonsultasi dengan daftar blocklist, jadi gabungkan dengan [aturan izin `WebFetch`](/id/permissions#webfetch) jika Anda perlu membatasi domain mana yang dapat diakses Claude.

debug-your-config.md +97 −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# Debug konfigurasi Anda

6 

7> Diagnosis mengapa CLAUDE.md, settings, hooks, server MCP, atau skills tidak berlaku. Gunakan /context, /doctor, /hooks, dan /mcp untuk melihat apa yang benar-benar dimuat.

8 

9Ketika Claude mengabaikan instruksi atau fitur yang Anda konfigurasi tidak muncul, penyebabnya biasanya adalah file tidak dimuat, dimuat dari lokasi berbeda dari yang Anda harapkan, atau file lain menggantinya. Panduan ini menunjukkan cara memeriksa apa yang benar-benar dimuat oleh Claude Code sehingga Anda dapat mempersempit mana yang berlaku.

10 

11Untuk masalah instalasi, autentikasi, dan konektivitas, lihat [Troubleshooting](/id/troubleshoot-install) sebagai gantinya.

12 

13## Lihat apa yang dimuat ke dalam context

14 

15Perintah `/context` menampilkan semua yang menempati jendela context untuk sesi saat ini, dipecah berdasarkan kategori: system prompt, file memory, skills, alat MCP, dan pesan percakapan. Jalankan terlebih dahulu untuk mengonfirmasi apakah `CLAUDE.md`, rules, atau deskripsi skill Anda ada sama sekali.

16 

17Untuk detail tentang kategori tertentu, lanjutkan dengan perintah khusus:

18 

19| Perintah | Menampilkan |

20| :------------- | :------------------------------------------------------------------------------- |

21| `/memory` | File `CLAUDE.md` dan rules mana yang dimuat, ditambah entri auto-memory |

22| `/skills` | Skill yang tersedia dari sumber proyek, pengguna, dan plugin |

23| `/agents` | Subagent yang dikonfigurasi dan pengaturannya |

24| `/hooks` | Konfigurasi hook aktif |

25| `/mcp` | Server MCP yang terhubung dan statusnya |

26| `/permissions` | Aturan allow dan deny yang diselesaikan saat ini berlaku |

27| `/doctor` | Diagnostik konfigurasi: kunci tidak valid, kesalahan schema, kesehatan instalasi |

28| `/status` | Sumber pengaturan aktif, termasuk apakah pengaturan terkelola berlaku |

29 

30Jika file memory hilang dari `/memory`, periksa lokasinya terhadap [bagaimana file CLAUDE.md dimuat](/id/memory#how-claude-md-files-load). File `CLAUDE.md` subdirektori dimuat sesuai permintaan ketika Claude membaca file di direktori itu dengan alat Read, bukan pada awal sesi.

31 

32Jika `/memory` mengonfirmasi file dimuat tetapi Claude masih tidak mengikuti instruksi tertentu, masalahnya kemungkinan adalah cara instruksi ditulis daripada apakah itu dimuat. CLAUDE.md bekerja dengan baik untuk jenis panduan yang akan Anda berikan kepada rekan kerja baru, seperti konvensi proyek, perintah build, dan di mana file berada.

33 

34Kepatuhan menurun ketika instruksi cukup samar untuk diinterpretasikan dengan berbagai cara, ketika dua file memberikan arahan yang bertentangan, atau ketika file telah tumbuh cukup panjang sehingga aturan individual mendapat perhatian lebih sedikit. [Tulis instruksi yang efektif](/id/memory#write-effective-instructions) mencakup pola spesifisitas, ukuran, dan struktur yang menjaga kepatuhan tetap tinggi.

35 

36<Note>

37 CLAUDE.md dan permissions menyelesaikan masalah yang berbeda. CLAUDE.md memberi tahu Claude bagaimana proyek Anda bekerja sehingga membuat keputusan yang baik. [Permissions](/id/permissions) dan [hooks](/id/hooks) memberlakukan batas terlepas dari apa yang Claude putuskan. Gunakan CLAUDE.md untuk "kami melakukannya dengan cara ini di sini." Gunakan permissions atau hooks untuk batas keamanan dan apa pun yang tidak boleh terjadi, di mana Anda membutuhkan jaminan daripada panduan.

38</Note>

39 

40## Periksa pengaturan yang diselesaikan

41 

42Pengaturan menggabungkan di seluruh cakupan terkelola, pengguna, proyek, dan lokal. Pengaturan terkelola selalu menang ketika ada. Di antara sisanya, cakupan yang lebih dekat menggantikan yang lebih luas dalam urutan lokal, kemudian proyek, kemudian pengguna. Beberapa pengaturan juga dapat diatur oleh flag baris perintah atau [variabel lingkungan](/id/env-vars), yang bertindak sebagai lapisan penggantian lain. Ketika pengaturan tidak tampak berlaku, nilai yang Anda atur biasanya ditimpa oleh cakupan lain atau variabel lingkungan.

43 

44Jalankan `/doctor` untuk memvalidasi file konfigurasi Anda dan permukaan kunci tidak valid atau kesalahan schema. Jalankan `/status` untuk melihat sumber pengaturan mana yang aktif, termasuk apakah pengaturan terkelola berlaku. Untuk memahami cakupan mana yang menang untuk kunci tertentu, lihat [Bagaimana cakupan berinteraksi](/id/settings#how-scopes-interact).

45 

46## Periksa server MCP

47 

48Jalankan `/mcp` untuk melihat setiap server yang dikonfigurasi, status koneksinya, dan apakah Anda telah menyetujuinya untuk proyek saat ini. Server dapat didefinisikan dengan benar tetapi masih tidak menyediakan alat untuk beberapa alasan umum:

49 

50* Server berscopeproyek di `.mcp.json` memerlukan persetujuan satu kali. Jika prompt ditutup, server tetap dinonaktifkan sampai Anda menyetujuinya dari `/mcp`.

51* Server yang gagal dimulai ditampilkan sebagai gagal di `/mcp`. Jalur file relatif di `command` atau `args` adalah penyebab yang sering, karena mereka diselesaikan terhadap direktori tempat Anda meluncurkan Claude Code daripada lokasi `.mcp.json`.

52* Server yang menampilkan sebagai terhubung tetapi mencantumkan alat nol telah dimulai dengan sukses tetapi tidak mengembalikan daftar alat. Pilih **Reconnect** dari `/mcp`. Jika hitungan tetap nol, jalankan `claude --debug mcp` untuk melihat output stderr server.

53 

54Untuk lokasi konfigurasi dan aturan cakupan, lihat [MCP](/id/mcp).

55 

56## Periksa hooks

57 

58Jalankan `/hooks` untuk mencantumkan setiap hook yang terdaftar untuk sesi saat ini, dikelompokkan berdasarkan acara. Jika hook yang Anda tentukan tidak muncul, itu tidak dibaca: hooks berada di bawah kunci `"hooks"` dalam file pengaturan, bukan dalam file mandiri.

59 

60Jika hook muncul tetapi tidak aktif, matcher adalah penyebab yang biasa. Bidang `matcher` adalah string tunggal yang menggunakan `|` untuk mencocokkan beberapa nama alat, misalnya `"Edit|Write"`. Nama alat yang salah eja gagal diam-diam karena matcher tidak pernah cocok. Nilai array adalah kesalahan schema: Claude Code menampilkan pemberitahuan kesalahan pengaturan, `/doctor` melaporkan kegagalan validasi, dan entri hook dijatuhkan sehingga tidak akan muncul di `/hooks`.

61 

62Edit ke `settings.json` berlaku dalam sesi yang berjalan setelah penundaan stabilitas file singkat. Anda tidak perlu memulai ulang. Jika `/hooks` masih menampilkan definisi lama beberapa detik setelah menyimpan, jalankan `/hooks` lagi untuk menyegarkan tampilan.

63 

64Jika `/hooks` menampilkan hook tetapi masih tidak aktif, langkah berikutnya adalah menonton evaluasi hook secara langsung. Mulai sesi dengan `claude --debug hooks` dan picu panggilan alat. Log debug mencatat setiap acara, matcher mana yang diperiksa, dan kode keluar dan output hook. Lihat [Debug hooks](/id/hooks#debug-hooks) untuk format log dan [troubleshooting hooks](/id/hooks-guide#limitations-and-troubleshooting) untuk pola kegagalan umum.

65 

66## Penyebab umum

67 

68Sebagian besar kejutan konfigurasi dapat dilacak kembali ke serangkaian kecil aturan lokasi dan sintaks. Periksa ini sebelum menganggap bug:

69 

70| Gejala | Penyebab | Perbaikan |

71| :--------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

72| Hook tidak pernah aktif | `matcher` adalah array JSON bukan string | Gunakan string tunggal dengan `\|` untuk mencocokkan beberapa alat, misalnya `"Edit\|Write"`. Lihat [pola matcher](/id/hooks#matcher-patterns). |

73| Hook tidak pernah aktif | Nilai `matcher` adalah huruf kecil, misalnya `"bash"` | Pencocokan peka huruf besar-kecil. Nama alat dikapitalisasi: `Bash`, `Edit`, `Write`, `Read`. |

74| Hook tidak pernah aktif | Hook berada dalam file `.claude/hooks.json` mandiri | Tidak ada file hooks mandiri. Tentukan hooks di bawah kunci `"hooks"` di `settings.json`. Lihat [konfigurasi hook](/id/hooks). |

75| Permissions, hooks, atau env yang diatur secara global diabaikan | Konfigurasi ditambahkan ke `~/.claude.json` | `~/.claude.json` menyimpan status aplikasi dan toggle UI. `permissions`, `hooks`, dan `env` termasuk dalam `~/.claude/settings.json`. Ini adalah dua file berbeda. |

76| Nilai `settings.json` tampak diabaikan | Kunci yang sama diatur di `settings.local.json` | `settings.local.json` menggantikan `settings.json`, dan keduanya menggantikan `~/.claude/settings.json`. Lihat [preseden pengaturan](/id/settings#how-scopes-interact). |

77| Skill tidak muncul di `/skills` | File skill berada di `.claude/skills/name.md` bukan dalam folder | Gunakan folder dengan `SKILL.md` di dalamnya: `.claude/skills/name/SKILL.md`. |

78| Skill muncul di `/skills` tetapi Claude tidak pernah menginvokasinya | Skill memiliki `disable-model-invocation: true` di frontmatter-nya, atau deskripsinya tidak cocok dengan cara Anda merumuskan permintaan | Periksa lencana di `/skills`: label "user-only" berarti Claude tidak akan memicunya sendiri. Lihat [skill invocation](/id/skills). |

79| Instruksi `CLAUDE.md` subdirektori tampak diabaikan | File subdirektori dimuat sesuai permintaan, bukan pada awal sesi | Mereka dimuat ketika Claude membaca file di direktori itu dengan alat Read, bukan saat peluncuran dan bukan saat menulis atau membuat file di sana. Lihat [bagaimana file CLAUDE.md dimuat](/id/memory#how-claude-md-files-load). |

80| Subagent mengabaikan instruksi `CLAUDE.md` | Subagent tidak selalu mewarisi memory proyek | Letakkan aturan penting di badan file agen, yang menjadi system prompt subagent. Lihat [konfigurasi subagent](/id/sub-agents). |

81| Logika pembersihan tidak pernah berjalan di akhir sesi | Tidak ada hook `SessionEnd` yang dikonfigurasi | Tambahkan hook `SessionEnd` di `settings.json`. Lihat [daftar acara hook](/id/hooks#hook-events). |

82| Server MCP di `.mcp.json` tidak pernah dimuat | File berada di bawah `.claude/` atau menggunakan format konfigurasi Claude Desktop | Konfigurasi MCP proyek berada di akar repositori sebagai `.mcp.json`, bukan di dalam `.claude/`. Lihat [konfigurasi MCP](/id/mcp). |

83| Server MCP proyek ditambahkan tetapi tidak muncul | Prompt persetujuan satu kali ditutup | Server berscopeproyek memerlukan persetujuan. Jalankan `/mcp` untuk melihat status dan setujui. |

84| Server MCP gagal dimulai dari beberapa direktori | `command` atau `args` menggunakan jalur file relatif | Gunakan jalur absolut untuk skrip lokal. Executable di `PATH` Anda seperti `npx` atau `uvx` bekerja apa adanya. |

85| Server MCP dimulai tanpa variabel lingkungan yang diharapkan | Variabel berada di `settings.json` `env`, yang tidak menyebar ke proses anak MCP | Atur `env` per-server di dalam `.mcp.json` sebagai gantinya. |

86| Aturan deny `Bash(rm *)` tidak memblokir `/bin/rm` atau `find -delete` | Aturan awalan mencocokkan string perintah literal, bukan executable yang mendasar | Tambahkan pola eksplisit untuk setiap varian, atau gunakan [hook PreToolUse](/id/hooks-guide) atau [sandbox](/id/sandboxing) untuk jaminan keras. |

87 

88## Sumber daya terkait

89 

90Untuk referensi lengkap pada setiap permukaan konfigurasi, lihat halaman khusus:

91 

92* **[Referensi direktori `.claude`](/id/claude-directory)**: setiap lokasi file konfigurasi dan apa yang membacanya

93* **[Settings](/id/settings)**: urutan preseden dan daftar kunci lengkap

94* **[Referensi Hooks](/id/hooks)**: nama acara, payload, dan format output `--debug hooks`

95* **[MCP](/id/mcp)**: konfigurasi server, persetujuan, dan output `/mcp`

96* **[Troubleshoot installation and login](/id/troubleshoot-install)**: `command not found`, PATH, dan masalah autentikasi

97* **[Troubleshooting](/id/troubleshooting)**: kinerja, hang, dan masalah pencarian

desktop.md +761 −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 Claude Code Desktop

6 

7> Dapatkan lebih banyak dari Claude Code Desktop: sesi paralel dengan isolasi Git, tata letak pane drag-and-drop, terminal terintegrasi dan editor file, side chats, computer use, Dispatch sessions dari ponsel Anda, tinjauan diff visual, pratinjau aplikasi, pemantauan PR, konektor, dan konfigurasi enterprise.

8 

9Aplikasi Claude Desktop memiliki tiga tab: **Chat** untuk percakapan, **Cowork** untuk [Dispatch dan pekerjaan agentic yang lebih panjang](https://claude.com/product/cowork), dan **Code** untuk pengembangan perangkat lunak. Halaman ini adalah referensi untuk tab Code.

10 

11<CardGroup cols={2}>

12 <Card title="Download for macOS" icon="apple" href="https://claude.ai/api/desktop/darwin/universal/dmg/latest/redirect?utm_source=claude_code&utm_medium=docs">

13 Universal build for Intel and Apple Silicon

14 </Card>

15 

16 <Card title="Download for Windows" icon="windows" href="https://claude.ai/api/desktop/win32/x64/setup/latest/redirect?utm_source=claude_code&utm_medium=docs">

17 For x64 processors

18 </Card>

19</CardGroup>

20 

21For Windows ARM64, download the [ARM64 installer](https://claude.ai/api/desktop/win32/arm64/setup/latest/redirect?utm_source=claude_code\&utm_medium=docs). The desktop app is not available on Linux; use the [CLI](/en/quickstart) instead.

22 

23Setelah menginstal, luncurkan Claude, masuk, dan klik tab **Code**. Pertama kali Anda membukanya di Windows, Anda perlu menginstal [Git for Windows](https://git-scm.com/downloads/win); mulai ulang aplikasi setelah menginstalnya. Untuk panduan sesi pertama Anda, lihat [panduan Memulai](/id/desktop-quickstart).

24 

25Di tab Code, setiap percakapan adalah sebuah **sesi**: ia memiliki riwayat chat sendiri, folder proyek, dan perubahan kode, independen dari sesi lainnya. Bilah sisi mencantumkan sesi Anda dan memungkinkan Anda menjalankan beberapa secara paralel. Dalam sesi Anda dapat:

26 

27* [Meninjau dan mengomentari diff](#review-changes-with-diff-view), kemudian [memantau PR yang dihasilkan melalui CI](#monitor-pull-request-status)

28* [Pratinjau aplikasi yang berjalan](#preview-your-app) di browser tertanam sementara Claude memverifikasi perubahan miliknya sendiri

29* [Mengatur pane](#arrange-your-workspace) untuk chat, diff, pratinjau, terminal, dan editor file berdampingan

30* Mengajukan [pertanyaan sampingan](#ask-a-side-question-without-derailing-the-session) yang menggunakan konteks sesi tanpa mengganggu alurnya

31* [Menghubungkan alat eksternal](#connect-external-tools) seperti GitHub, Slack, dan Linear

32* Biarkan Claude [membuka aplikasi dan mengontrol layar Anda](#let-claude-use-your-computer)

33* Jalankan di mesin Anda, di [cloud](#run-long-running-tasks-remotely), atau melalui [SSH](#ssh-sessions)

34 

35Untuk [pekerjaan berulang terjadwal](/id/desktop-scheduled-tasks), [pintasan keyboard](#keyboard-shortcuts), atau [mengirim tugas dari ponsel Anda](#sessions-from-dispatch), lihat halaman dan bagian yang ditautkan. Jika Anda sudah menggunakan CLI berbasis terminal, lihat [perbandingan CLI](#coming-from-the-cli) untuk apa yang berlanjut.

36 

37## Mulai sesi

38 

39Sebelum Anda mengirim pesan pertama, konfigurasikan empat hal di area prompt:

40 

41* **Environment**: pilih di mana Claude berjalan. Pilih **Local** untuk mesin Anda, **Remote** untuk sesi cloud yang dihosting Anthropic, atau [**koneksi SSH**](#ssh-sessions) untuk mesin jarak jauh yang Anda kelola. Lihat [konfigurasi lingkungan](#environment-configuration).

42* **Project folder**: pilih folder atau repositori tempat Claude bekerja. Untuk sesi jarak jauh, Anda dapat menambahkan [beberapa repositori](#run-long-running-tasks-remotely).

43* **Model**: pilih [model](/id/model-config#available-models) dari dropdown di sebelah tombol kirim. Anda dapat mengubah ini selama sesi.

44* **Permission mode**: pilih berapa banyak otonomi yang dimiliki Claude dari [pemilih mode](#choose-a-permission-mode). Anda dapat mengubah ini selama sesi.

45 

46Ketik tugas Anda dan tekan **Enter** untuk memulai. Setiap sesi melacak konteksnya sendiri dan perubahan secara independen.

47 

48## Bekerja dengan kode

49 

50Berikan Claude konteks yang tepat, kontrol berapa banyak yang dilakukannya sendiri, dan tinjau apa yang diubahnya.

51 

52### Gunakan kotak prompt

53 

54Ketik apa yang ingin Anda lakukan Claude dan tekan **Enter** untuk mengirim. Claude membaca file proyek Anda, membuat perubahan, dan menjalankan perintah berdasarkan [permission mode](#choose-a-permission-mode) Anda. Anda dapat menghentikan Claude kapan saja: klik tombol stop atau ketik koreksi Anda dan tekan **Enter**. Claude berhenti melakukan apa yang sedang dilakukannya dan menyesuaikan berdasarkan input Anda.

55 

56Tombol **+** di sebelah kotak prompt memberi Anda akses ke lampiran file, [skills](#use-skills), [konektor](#connect-external-tools), dan [plugins](#install-plugins).

57 

58### Tambahkan file dan konteks ke prompt

59 

60Kotak prompt mendukung dua cara untuk membawa konteks eksternal:

61 

62* **@mention files**: ketik `@` diikuti dengan nama file untuk menambahkan file ke konteks percakapan. Claude kemudian dapat membaca dan mereferensikan file tersebut. @mention tidak tersedia di sesi jarak jauh.

63* **Attach files**: lampirkan gambar, PDF, dan file lainnya ke prompt Anda menggunakan tombol lampiran, atau seret dan lepas file langsung ke prompt. Ini berguna untuk berbagi tangkapan layar bug, mockup desain, atau dokumen referensi.

64 

65### Pilih permission mode

66 

67Permission modes mengontrol berapa banyak otonomi yang dimiliki Claude selama sesi: apakah itu meminta izin sebelum mengedit file, menjalankan perintah, atau keduanya. Anda dapat beralih mode kapan saja menggunakan pemilih mode di sebelah tombol kirim. Mulai dengan Ask permissions untuk melihat dengan tepat apa yang dilakukan Claude, kemudian pindah ke Auto accept edits atau Plan mode saat Anda merasa nyaman.

68 

69| Mode | Settings key | Behavior |

70| ---------------------- | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

71| **Ask permissions** | `default` | Claude meminta izin sebelum mengedit file atau menjalankan perintah. Anda melihat diff dan dapat menerima atau menolak setiap perubahan. Direkomendasikan untuk pengguna baru. |

72| **Auto accept edits** | `acceptEdits` | Claude secara otomatis menerima edit file dan perintah filesystem umum seperti `mkdir`, `touch`, dan `mv`, tetapi masih meminta izin sebelum menjalankan perintah terminal lainnya. Gunakan ini ketika Anda mempercayai perubahan file dan menginginkan iterasi yang lebih cepat. |

73| **Plan mode** | `plan` | Claude membaca file dan menjalankan perintah untuk menjelajahi, kemudian mengusulkan rencana tanpa mengedit kode sumber Anda. Bagus untuk tugas kompleks di mana Anda ingin meninjau pendekatan terlebih dahulu. |

74| **Auto** | `auto` | Claude mengeksekusi semua tindakan dengan pemeriksaan keamanan latar belakang yang memverifikasi keselarasan dengan permintaan Anda. Mengurangi prompt izin sambil mempertahankan pengawasan. Aktifkan di Settings → Claude Code Anda. Lihat [availability requirements](#auto-mode-availability) di bawah. |

75| **Bypass permissions** | `bypassPermissions` | Claude berjalan tanpa prompt izin apa pun, setara dengan `--dangerously-skip-permissions` di CLI. Aktifkan di Settings → Claude Code Anda di bawah "Allow bypass permissions mode". Hanya gunakan ini di kontainer atau VM yang disandbox. Admin enterprise dapat menonaktifkan opsi ini. |

76 

77Mode izin `dontAsk` hanya tersedia di [CLI](/id/permission-modes#allow-only-pre-approved-tools-with-dontask-mode).

78 

79<span id="auto-mode-availability" />

80 

81Auto mode adalah pratinjau penelitian yang tersedia di rencana Max, Team, Enterprise, dan API. Tidak tersedia di rencana Pro atau penyedia pihak ketiga. Di rencana Team, Enterprise, dan API memerlukan Claude Sonnet 4.6, Opus 4.6, atau Opus 4.7. Di rencana Max memerlukan Claude Opus 4.7.

82 

83<Tip title="Best practice">

84 Mulai tugas kompleks di Plan mode sehingga Claude memetakan pendekatan sebelum membuat perubahan. Setelah Anda menyetujui rencana, beralih ke Auto accept edits atau Ask permissions untuk menjalankannya. Lihat [explore first, then plan, then code](/id/best-practices#explore-first-then-plan-then-code) untuk informasi lebih lanjut tentang alur kerja ini.

85</Tip>

86 

87Sesi jarak jauh mendukung Auto accept edits dan Plan mode. Ask permissions tidak tersedia karena sesi jarak jauh secara otomatis menerima edit file secara default, dan Bypass permissions tidak tersedia karena lingkungan jarak jauh sudah disandbox.

88 

89Admin enterprise dapat membatasi permission modes mana yang tersedia. Lihat [enterprise configuration](#enterprise-configuration) untuk detail.

90 

91### Pratinjau aplikasi Anda

92 

93Claude dapat memulai dev server dan membuka browser tertanam untuk memverifikasi perubahannya. Ini berfungsi untuk aplikasi web frontend serta server backend: Claude dapat menguji endpoint API, melihat log server, dan mengulangi masalah yang ditemukannya. Dalam kebanyakan kasus, Claude memulai server secara otomatis setelah mengedit file proyek. Anda juga dapat meminta Claude untuk pratinjau kapan saja. Secara default, Claude [auto-verifies](#auto-verify-changes) perubahan setelah setiap edit.

94 

95Pane pratinjau juga dapat membuka file HTML statis, PDF, gambar, dan video dari proyek Anda. Klik path HTML, PDF, gambar, atau video di chat untuk membukanya di pratinjau.

96 

97Dari pane pratinjau, Anda dapat:

98 

99* Berinteraksi dengan aplikasi yang sedang berjalan langsung di browser tertanam

100* Tonton Claude memverifikasi perubahannya sendiri secara otomatis: mengambil tangkapan layar, memeriksa DOM, mengklik elemen, mengisi formulir, dan memperbaiki masalah yang ditemukannya

101* Mulai atau hentikan server dari dropdown **Preview** di toolbar sesi

102* Pertahankan cookie dan penyimpanan lokal di seluruh restart server dengan memilih **Persist sessions** di dropdown, sehingga Anda tidak perlu masuk kembali selama pengembangan

103* Edit konfigurasi server atau hentikan semua server sekaligus

104 

105Claude membuat konfigurasi server awal berdasarkan proyek Anda. Jika aplikasi Anda menggunakan perintah dev kustom, edit `.claude/launch.json` agar sesuai dengan setup Anda. Lihat [Configure preview servers](#configure-preview-servers) untuk referensi lengkap.

106 

107Untuk menghapus data sesi yang disimpan, alihkan **Persist preview sessions** di Settings → Claude Code. Untuk menonaktifkan pratinjau sepenuhnya, alihkan **Preview** di Settings → Claude Code.

108 

109### Tinjau perubahan dengan diff view

110 

111Setelah Claude membuat perubahan pada kode Anda, diff view memungkinkan Anda meninjau modifikasi file demi file sebelum membuat pull request.

112 

113Ketika Claude mengubah file, indikator statistik diff muncul menunjukkan jumlah baris yang ditambahkan dan dihapus, seperti `+12 -1`. Klik indikator ini untuk membuka diff viewer, yang menampilkan daftar file di sebelah kiri dan perubahan untuk setiap file di sebelah kanan.

114 

115Untuk mengomentari baris tertentu, klik baris apa pun di diff untuk membuka kotak komentar. Ketik umpan balik Anda dan tekan **Enter** untuk menambahkan komentar. Setelah menambahkan komentar ke beberapa baris, kirimkan semua komentar sekaligus:

116 

117* **macOS**: tekan **Cmd+Enter**

118* **Windows**: tekan **Ctrl+Enter**

119 

120Claude membaca komentar Anda dan membuat perubahan yang diminta, yang muncul sebagai diff baru yang dapat Anda tinjau.

121 

122### Tinjau kode Anda

123 

124Di diff view, klik **Review code** di toolbar kanan atas untuk meminta Claude mengevaluasi perubahan sebelum Anda melakukan commit. Claude memeriksa diff saat ini dan meninggalkan komentar langsung di diff view. Anda dapat merespons komentar apa pun atau meminta Claude untuk merevisi.

125 

126Tinjauan berfokus pada masalah sinyal tinggi: kesalahan kompilasi, kesalahan logika pasti, kerentanan keamanan, dan bug yang jelas. Ini tidak menandai gaya, pemformatan, masalah yang sudah ada sebelumnya, atau apa pun yang akan ditangkap linter.

127 

128### Pantau status pull request

129 

130Setelah Anda membuka pull request, bilah status CI muncul di sesi. Claude Code menggunakan GitHub CLI untuk menanyakan hasil pemeriksaan dan menampilkan kegagalan.

131 

132* **Auto-fix**: ketika diaktifkan, Claude secara otomatis mencoba memperbaiki pemeriksaan CI yang gagal dengan membaca output kegagalan dan mengulangi.

133* **Auto-merge**: ketika diaktifkan, Claude menggabungkan PR setelah semua pemeriksaan lulus. Metode penggabungan adalah squash. Auto-merge harus [diaktifkan di pengaturan repositori GitHub Anda](https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/managing-auto-merge-for-pull-requests-in-your-repository) agar ini berfungsi.

134 

135Gunakan toggle **Auto-fix** dan **Auto-merge** di bilah status CI untuk mengaktifkan salah satu opsi. Claude Code juga mengirim notifikasi desktop ketika CI selesai. Untuk mengarsipkan sesi secara otomatis setelah PR digabungkan atau ditutup, aktifkan [auto-archive](#work-in-parallel-with-sessions) di Settings → Claude Code.

136 

137<Note>

138 Pemantauan PR memerlukan [GitHub CLI (`gh`)](https://cli.github.com/) untuk diinstal dan diautentikasi di mesin Anda. Jika `gh` tidak diinstal, Desktop akan meminta Anda untuk memasangnya saat pertama kali Anda mencoba membuat PR.

139</Note>

140 

141## Atur workspace Anda

142 

143Tab Code dibangun di sekitar pane yang dapat Anda atur dalam tata letak apa pun: chat, diff, preview, terminal, file, plan, tasks, dan subagent. Seret pane dengan headernya untuk memposisikan ulang, atau seret tepi pane untuk mengubah ukurannya. Tekan **Cmd+\\** di macOS atau **Ctrl+\\** di Windows untuk menutup pane yang fokus. Buka pane tambahan dari menu **Views** di toolbar sesi.

144 

145<Note>

146 Tata letak pane, terminal, editor file, dan view modes di bagian ini memerlukan Claude Desktop v1.2581.0 atau lebih baru. Buka **Claude → Check for Updates** di macOS atau **Help → Check for Updates** di Windows untuk memperbarui.

147</Note>

148 

149### Jalankan perintah di terminal

150 

151Terminal terintegrasi memungkinkan Anda menjalankan perintah bersama sesi Anda tanpa beralih ke aplikasi lain. Buka dari menu **Views** atau tekan **Ctrl+\`** di macOS atau Windows. Terminal terbuka di direktori kerja sesi Anda dan berbagi lingkungan yang sama dengan Claude, jadi perintah seperti `npm test` atau `git status` melihat file yang sama yang sedang diedit Claude. Terminal hanya tersedia di sesi lokal.

152 

153### Buka dan edit file

154 

155Klik path file di chat atau diff viewer untuk membukanya di pane file. Path HTML, PDF, gambar, dan video terbuka di [pane preview](#preview-your-app) sebagai gantinya. Buat edit spot dan klik **Save** untuk menulisnya kembali. Jika file berubah di disk sejak Anda membukanya, pane memperingatkan Anda dan memungkinkan Anda menimpa atau membuang. Klik **Discard** untuk mengembalikan edit Anda, atau klik path di header pane untuk menyalin path absolut.

156 

157Pane file tersedia di sesi lokal dan SSH. Untuk sesi jarak jauh, minta Claude untuk membuat perubahan.

158 

159### Buka file di aplikasi lain

160 

161Klik kanan path file apa pun di chat, diff viewer, atau pane file untuk membuka menu konteks:

162 

163* **Attach as context**: tambahkan file ke prompt berikutnya Anda

164* **Open in**: buka file di editor yang diinstal seperti VS Code, Cursor, atau Zed

165* **Show in Finder** di macOS, **Show in Explorer** di Windows: buka folder yang berisi

166* **Copy path**: salin path absolut ke clipboard Anda

167 

168### Alihkan view modes

169 

170View modes mengontrol berapa banyak detail yang muncul di transkrip chat. Alihkan mode dari dropdown **Transcript view** di sebelah tombol kirim, atau tekan **Ctrl+O** di macOS atau Windows untuk bersiklus melaluinya.

171 

172| Mode | Apa yang ditampilkan |

173| ----------- | ---------------------------------------------------------------------- |

174| **Normal** | Tool calls yang diciutkan menjadi ringkasan, dengan respons teks penuh |

175| **Verbose** | Setiap tool call, file read, dan langkah perantara yang diambil Claude |

176| **Summary** | Hanya respons final Claude dan perubahan yang dibuatnya |

177 

178Gunakan Verbose saat men-debug mengapa Claude mengambil tindakan tertentu. Gunakan Summary ketika Anda menjalankan beberapa sesi dan ingin memindai hasil dengan cepat.

179 

180### Keyboard shortcuts

181 

182Tekan **Cmd+/** di macOS atau **Ctrl+/** di Windows untuk melihat semua pintasan keyboard yang tersedia di tab Code. Di Windows, gunakan **Ctrl** sebagai pengganti **Cmd** untuk pintasan di bawah. Siklus sesi, toggle terminal, dan toggle view-mode menggunakan **Ctrl** di setiap platform.

183 

184| Shortcut | Action |

185| ------------------------------------- | ------------------------------- |

186| `Cmd` `/` | Tampilkan pintasan keyboard |

187| `Cmd` `N` | Sesi baru |

188| `Cmd` `W` | Tutup sesi |

189| `Ctrl` `Tab` / `Ctrl` `Shift` `Tab` | Sesi berikutnya atau sebelumnya |

190| `Cmd` `Shift` `]` / `Cmd` `Shift` `[` | Sesi berikutnya atau sebelumnya |

191| `Esc` | Hentikan respons Claude |

192| `Cmd` `Shift` `D` | Alihkan pane diff |

193| `Cmd` `Shift` `P` | Alihkan pane preview |

194| `Cmd` `Shift` `S` | Pilih elemen di preview |

195| `Ctrl` `` ` `` | Alihkan pane terminal |

196| `Cmd` `\` | Tutup pane yang fokus |

197| `Cmd` `;` | Buka side chat |

198| `Ctrl` `O` | Siklus view modes |

199| `Cmd` `Shift` `M` | Buka menu permission mode |

200| `Cmd` `Shift` `I` | Buka menu model |

201| `Cmd` `Shift` `E` | Buka menu effort |

202| `1`–`9` | Pilih item di menu terbuka |

203 

204Pintasan ini hanya berlaku untuk tab Code. Pintasan [interactive mode](/id/interactive-mode#keyboard-shortcuts) berbasis terminal, seperti `Shift+Tab` untuk siklus mode, tidak berlaku di Desktop.

205 

206### Periksa penggunaan

207 

208Klik cincin penggunaan di sebelah pemilih model untuk melihat penggunaan jendela konteks saat ini Anda dan penggunaan rencana Anda untuk periode tersebut. Penggunaan konteks per sesi; penggunaan rencana dibagikan di semua permukaan Claude Code Anda.

209 

210## Biarkan Claude menggunakan komputer Anda

211 

212Computer use memungkinkan Claude membuka aplikasi Anda, mengontrol layar Anda, dan bekerja langsung di mesin Anda seperti yang Anda lakukan. Minta Claude untuk menguji aplikasi native di mobile simulator, berinteraksi dengan alat desktop yang tidak memiliki CLI, atau mengotomatisasi sesuatu yang hanya berfungsi melalui GUI.

213 

214<Note>

215 Computer use adalah pratinjau penelitian di macOS dan Windows yang memerlukan rencana Pro atau Max. Ini tidak tersedia di rencana Team atau Enterprise. Aplikasi Claude Desktop harus berjalan.

216</Note>

217 

218Computer use dimatikan secara default. [Aktifkan di Settings](#enable-computer-use) sebelum Claude dapat mengontrol layar Anda. Di macOS, Anda juga perlu memberikan izin Accessibility dan Screen Recording.

219 

220<Warning>

221 Tidak seperti [alat Bash yang disandbox](/id/sandboxing), computer use berjalan di desktop aktual Anda dengan akses ke apa pun yang Anda setujui. Claude memeriksa setiap tindakan dan menandai potensi prompt injection dari konten di layar, tetapi batas kepercayaan berbeda. Lihat [panduan keamanan computer use](https://support.claude.com/en/articles/14128542) untuk praktik terbaik.

222</Warning>

223 

224### Kapan computer use berlaku

225 

226Claude memiliki beberapa cara untuk berinteraksi dengan aplikasi atau layanan, dan computer use adalah yang paling luas dan paling lambat. Ini mencoba alat yang paling presisi terlebih dahulu:

227 

228* Jika Anda memiliki [konektor](#connect-external-tools) untuk layanan, Claude menggunakan konektor.

229* Jika tugas adalah perintah shell, Claude menggunakan Bash.

230* Jika tugas adalah pekerjaan browser dan Anda memiliki [Claude di Chrome](/id/chrome) yang disiapkan, Claude menggunakan itu.

231* Jika tidak ada yang berlaku, Claude menggunakan computer use.

232 

233[Per-app access tiers](#app-permissions) memperkuat ini: browser dibatasi hanya tampilan, dan terminal serta IDE dibatasi hanya klik, mengarahkan Claude ke alat khusus bahkan ketika computer use aktif. Kontrol layar dicadangkan untuk hal-hal yang tidak dapat dijangkau oleh yang lain, seperti aplikasi native, panel kontrol perangkat keras, mobile simulator, atau alat proprietary tanpa API.

234 

235### Aktifkan computer use

236 

237Computer use dimatikan secara default. Jika Anda meminta Claude melakukan sesuatu yang membutuhkannya saat dimatikan, Claude memberi tahu Anda bahwa itu dapat melakukan tugas jika Anda mengaktifkan computer use di Settings.

238 

239<Steps>

240 <Step title="Perbarui aplikasi desktop">

241 Pastikan Anda memiliki versi terbaru Claude Desktop. Unduh atau perbarui di [claude.com/download](https://claude.com/download), kemudian mulai ulang aplikasi.

242 </Step>

243 

244 <Step title="Aktifkan toggle">

245 Di aplikasi desktop, buka **Settings > General** (di bawah **Desktop app**). Temukan toggle **Computer use** dan aktifkan. Di Windows, toggle berlaku segera dan setup selesai. Di macOS, lanjutkan ke langkah berikutnya.

246 

247 Jika Anda tidak melihat toggle, konfirmasi Anda menggunakan macOS atau Windows dengan rencana Pro atau Max, kemudian perbarui dan mulai ulang aplikasi.

248 </Step>

249 

250 <Step title="Berikan izin macOS">

251 Di macOS, berikan dua izin sistem sebelum toggle berlaku:

252 

253 * **Accessibility**: memungkinkan Claude mengklik, mengetik, dan menggulir

254 * **Screen Recording**: memungkinkan Claude melihat apa yang ada di layar Anda

255 

256 Halaman Settings menunjukkan status saat ini dari setiap izin. Jika salah satu ditolak, klik badge untuk membuka pane System Settings yang relevan.

257 </Step>

258</Steps>

259 

260### App permissions

261 

262Pertama kali Claude perlu menggunakan aplikasi, prompt muncul di sesi Anda. Klik **Allow for this session** atau **Deny**. Persetujuan berlaku untuk sesi saat ini, atau 30 menit di [sesi yang dispawn Dispatch](#sessions-from-dispatch).

263 

264Prompt juga menunjukkan tingkat kontrol apa yang diperoleh Claude untuk aplikasi itu. Tingkat ini diperbaiki berdasarkan kategori aplikasi dan tidak dapat diubah:

265 

266| Tier | Apa yang dapat dilakukan Claude | Berlaku untuk |

267| :----------- | :----------------------------------------------------------------------- | :---------------------------- |

268| View only | Lihat aplikasi di tangkapan layar | Browser, platform perdagangan |

269| Click only | Klik dan gulir, tetapi tidak mengetik atau menggunakan pintasan keyboard | Terminal, IDE |

270| Full control | Klik, ketik, seret, dan gunakan pintasan keyboard | Semuanya yang lain |

271 

272Aplikasi dengan jangkauan luas seperti terminal, Finder atau File Explorer, dan System Settings atau Settings menampilkan peringatan tambahan di prompt sehingga Anda tahu apa yang disetujui.

273 

274Anda dapat mengonfigurasi dua pengaturan di **Settings > General** (di bawah **Desktop app**):

275 

276* **Denied apps**: tambahkan aplikasi di sini untuk menolaknya tanpa meminta. Claude mungkin masih mempengaruhi aplikasi yang ditolak secara tidak langsung melalui tindakan di aplikasi yang diizinkan, tetapi tidak dapat berinteraksi dengan aplikasi yang ditolak secara langsung.

277* **Unhide apps when Claude finishes**: saat Claude bekerja, jendela lain Anda disembunyikan sehingga hanya berinteraksi dengan aplikasi yang disetujui. Ketika Claude selesai, jendela yang disembunyikan dipulihkan kecuali Anda mematikan pengaturan ini.

278 

279## Kelola sesi

280 

281Setiap sesi adalah percakapan independen dengan konteks dan perubahannya sendiri. Anda dapat menjalankan beberapa sesi secara paralel, membuat side chat, mengirim pekerjaan ke cloud, atau membiarkan Dispatch memulai sesi untuk Anda dari ponsel Anda.

282 

283### Bekerja secara paralel dengan sesi

284 

285Klik **+ New session** di sidebar, atau tekan **Cmd+N** di macOS atau **Ctrl+N** di Windows, untuk bekerja pada beberapa tugas secara paralel. Tekan **Ctrl+Tab** dan **Ctrl+Shift+Tab** untuk bersiklus melalui sesi di sidebar. Untuk repositori Git, setiap sesi mendapatkan salinan proyek Anda yang terisolasi menggunakan [Git worktrees](/id/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees), sehingga perubahan dalam satu sesi tidak mempengaruhi sesi lain sampai Anda melakukan commit.

286 

287Worktrees disimpan di `<project-root>/.claude/worktrees/` secara default. Anda dapat mengubah ini ke direktori kustom di Settings → Claude Code di bawah "Worktree location". Anda juga dapat mengatur awalan cabang yang ditambahkan ke setiap nama cabang worktree, yang berguna untuk menjaga cabang yang dibuat Claude tetap terorganisir. Untuk menghapus worktree ketika selesai, arahkan ke sesi di sidebar dan klik ikon archive. Untuk memiliki sesi mengarsipkan diri mereka sendiri ketika pull request mereka digabungkan atau ditutup, aktifkan **Auto-archive after PR merge or close** di Settings → Claude Code. Auto-archive hanya berlaku untuk sesi lokal yang telah selesai berjalan.

288 

289Untuk menyertakan file yang diabaikan git seperti `.env` di worktree baru, buat file [`.worktreeinclude`](/id/common-workflows#copy-gitignored-files-to-worktrees) di root proyek Anda.

290 

291<Note>

292 Isolasi sesi memerlukan [Git](https://git-scm.com/downloads). Sebagian besar Mac menyertakan Git secara default. Jalankan `git --version` di Terminal untuk memeriksa. Di Windows, Git diperlukan agar tab Code berfungsi: [unduh Git untuk Windows](https://git-scm.com/downloads/win), pasang, dan mulai ulang aplikasi. Jika Anda mengalami kesalahan Git, tanyakan Claude di tab [Cowork](https://claude.com/product/cowork) untuk membantu memecahkan masalah setup Anda.

293</Note>

294 

295Gunakan kontrol di bagian atas sidebar untuk memfilter sesi berdasarkan status, proyek, atau lingkungan, dan untuk mengelompokkan sesi berdasarkan proyek. Untuk mengganti nama sesi, klik judul sesi di toolbar di bagian atas sesi aktif. Untuk memeriksa penggunaan konteks, lihat [Check usage](#check-usage). Ketika konteks penuh, Claude secara otomatis merangkum percakapan dan terus bekerja. Anda juga dapat mengetik `/compact` untuk memicu perangkuman lebih awal dan membebaskan ruang konteks. Lihat [jendela konteks](/id/how-claude-code-works#the-context-window) untuk detail tentang cara pemadatan bekerja.

296 

297### Tanyakan pertanyaan sampingan tanpa menggoyahkan sesi

298 

299Side chat memungkinkan Anda mengajukan pertanyaan kepada Claude yang menggunakan konteks sesi Anda tetapi tidak menambahkan apa pun kembali ke percakapan utama. Gunakan ketika Anda ingin memahami sepotong kode, memeriksa asumsi, atau menjelajahi ide tanpa mengarahkan sesi ke arah yang berbeda.

300 

301Tekan **Cmd+;** di macOS atau **Ctrl+;** di Windows untuk membuka side chat, atau ketik `/btw` di kotak prompt. Side chat dapat membaca semuanya di thread utama hingga titik itu. Ketika selesai, tutup side chat dan lanjutkan sesi utama di mana Anda tinggalkan. Side chats tersedia di sesi lokal dan SSH.

302 

303### Tonton background tasks

304 

305Pane tasks menunjukkan pekerjaan latar belakang yang berjalan di dalam sesi saat ini: subagent, perintah shell latar belakang, dan workflow. Buka dari menu **Views** atau seret ke dalam tata letak Anda.

306 

307Klik entri apa pun untuk melihat outputnya di pane subagent atau hentikan. Untuk melihat apa yang dilakukan sesi lain, gunakan [sidebar](#work-in-parallel-with-sessions).

308 

309### Jalankan tugas jangka panjang dari jarak jauh

310 

311Untuk refaktor besar, suite pengujian, migrasi, atau tugas jangka panjang lainnya, pilih **Remote** alih-alih **Local** saat memulai sesi. Sesi jarak jauh berjalan pada infrastruktur cloud Anthropic dan terus berjalan bahkan jika Anda menutup aplikasi atau mematikan komputer. Periksa kembali kapan saja untuk melihat kemajuan atau mengarahkan Claude ke arah yang berbeda. Anda juga dapat memantau sesi jarak jauh dari [claude.ai/code](https://claude.ai/code) atau aplikasi Claude iOS.

312 

313Sesi jarak jauh juga mendukung beberapa repositori. Setelah memilih lingkungan cloud, klik tombol **+** di sebelah pil repo untuk menambahkan repositori tambahan ke sesi. Setiap repo mendapatkan pemilih cabang sendiri. Ini berguna untuk tugas yang mencakup beberapa basis kode, seperti memperbarui perpustakaan bersama dan konsumennya.

314 

315Lihat [Claude Code di web](/id/claude-code-on-the-web) untuk informasi lebih lanjut tentang cara kerja sesi jarak jauh.

316 

317### Lanjutkan di permukaan lain

318 

319Menu **Continue in**, dapat diakses dari ikon VS Code di kanan bawah toolbar sesi, memungkinkan Anda memindahkan sesi ke permukaan lain:

320 

321* **Claude Code on the Web**: mengirim sesi lokal Anda untuk terus berjalan dari jarak jauh. Desktop mendorong cabang Anda, menghasilkan ringkasan percakapan, dan membuat sesi jarak jauh baru dengan konteks lengkap. Anda kemudian dapat memilih untuk mengarsipkan sesi lokal atau menyimpannya. Ini memerlukan pohon kerja yang bersih, dan tidak tersedia untuk sesi SSH.

322* **Your IDE**: membuka proyek Anda di IDE yang didukung di direktori kerja saat ini.

323 

324### Sesi dari Dispatch

325 

326[Dispatch](https://support.claude.com/en/articles/13947068) adalah percakapan persisten dengan Claude yang tinggal di tab [Cowork](https://claude.com/product/cowork#dispatch-and-computer-use). Anda mengirim pesan Dispatch dengan tugas, dan itu memutuskan cara menanganinya.

327 

328Tugas dapat berakhir sebagai sesi Code dengan dua cara: Anda meminta satu secara langsung, seperti "buka sesi Claude Code dan perbaiki bug login", atau Dispatch memutuskan tugas adalah pekerjaan pengembangan dan menspawn satu sendiri. Tugas yang biasanya diarahkan ke Code termasuk memperbaiki bug, memperbarui dependensi, menjalankan tes, atau membuka pull request. Penelitian, pengeditan dokumen, dan pekerjaan spreadsheet tetap di Cowork.

329 

330Bagaimanapun, sesi Code muncul di sidebar tab Code dengan badge **Dispatch**. Anda mendapatkan notifikasi push di ponsel Anda ketika selesai atau memerlukan persetujuan Anda.

331 

332Jika Anda memiliki [computer use](#let-claude-use-your-computer) diaktifkan, sesi Code yang dispawn Dispatch juga dapat menggunakannya. Persetujuan aplikasi di sesi tersebut kedaluwarsa setelah 30 menit dan meminta kembali, daripada berlangsung untuk sesi penuh seperti sesi Code biasa.

333 

334Untuk setup, pairing, dan pengaturan Dispatch, lihat [artikel bantuan Dispatch](https://support.claude.com/en/articles/13947068). Dispatch memerlukan rencana Pro atau Max dan tidak tersedia di rencana Team atau Enterprise.

335 

336Dispatch adalah salah satu dari beberapa cara untuk bekerja dengan Claude ketika Anda jauh dari terminal Anda. Lihat [Platforms and integrations](/id/platforms#work-when-you-are-away-from-your-terminal) untuk membandingkannya dengan Remote Control, Channels, Slack, dan tugas terjadwal.

337 

338## Perluas Claude Code

339 

340Hubungkan layanan eksternal, tambahkan alur kerja yang dapat digunakan kembali, sesuaikan perilaku Claude, dan konfigurasikan server pratinjau. Untuk mengelola connectors, skills, dan plugins di satu tempat, klik **Customize** di sidebar.

341 

342### Hubungkan alat eksternal

343 

344Untuk sesi lokal dan [SSH](#ssh-sessions), klik tombol **+** di sebelah kotak prompt dan pilih **Connectors** untuk menambahkan integrasi seperti Google Calendar, Slack, GitHub, Linear, Notion, dan lainnya. Anda dapat menambahkan connectors sebelum atau selama sesi. Tombol **+** tidak tersedia di sesi jarak jauh, tetapi [routines](/id/routines) mengonfigurasi connectors pada waktu pembuatan routine.

345 

346Untuk mengelola atau memutuskan connectors, buka Settings → Connectors di aplikasi desktop, atau pilih **Manage connectors** dari menu Connectors di kotak prompt.

347 

348Setelah terhubung, Claude dapat membaca kalender Anda, mengirim pesan, membuat masalah, dan berinteraksi dengan alat Anda secara langsung. Anda dapat meminta Claude konektor apa yang dikonfigurasi di sesi Anda.

349 

350Connectors adalah [MCP servers](/id/mcp) dengan alur pengaturan grafis. Gunakan untuk integrasi cepat dengan layanan yang didukung. Untuk integrasi yang tidak tercantum di Connectors, tambahkan MCP servers secara manual melalui [file pengaturan](/id/mcp#installing-mcp-servers). Anda juga dapat [membuat custom connectors](https://support.claude.com/en/articles/11175166-getting-started-with-custom-connectors-using-remote-mcp).

351 

352### Gunakan skills

353 

354[Skills](/id/skills) memperluas apa yang dapat dilakukan Claude. Claude memuatnya secara otomatis ketika relevan, atau Anda dapat menginvokan satu secara langsung: ketik `/` di kotak prompt atau klik tombol **+** dan pilih **Slash commands** untuk melihat apa yang tersedia. Ini mencakup [built-in commands](/id/commands), [custom skills](/id/skills#create-your-first-skill) Anda, project skills dari basis kode Anda, dan skills dari [installed plugins](/id/plugins) apa pun. Pilih satu dan itu muncul disorot di bidang input. Ketik tugas Anda setelahnya dan kirim seperti biasa.

355 

356### Instal plugins

357 

358[Plugins](/id/plugins) adalah paket yang dapat digunakan kembali yang menambahkan skills, agents, hooks, MCP servers, dan konfigurasi LSP ke Claude Code. Anda dapat memasang plugins dari aplikasi desktop tanpa menggunakan terminal.

359 

360Untuk sesi lokal dan [SSH](#ssh-sessions), klik tombol **+** di sebelah kotak prompt dan pilih **Plugins** untuk melihat plugins yang diinstal dan skills mereka. Untuk menambahkan plugin, pilih **Add plugin** dari submenu untuk membuka plugin browser, yang menampilkan plugins yang tersedia dari [marketplaces](/id/plugin-marketplaces) yang dikonfigurasi termasuk marketplace Anthropic resmi. Pilih **Manage plugins** untuk mengaktifkan, menonaktifkan, atau mencopot plugins.

361 

362Plugins dapat dibatasi pada akun pengguna Anda, proyek tertentu, atau lokal saja. Jika organisasi Anda mengelola plugins secara terpusat, plugins tersebut tersedia di sesi desktop dengan cara yang sama seperti di CLI. Plugins tidak tersedia untuk sesi jarak jauh. Untuk referensi plugin lengkap termasuk membuat plugins Anda sendiri, lihat [plugins](/id/plugins).

363 

364### Konfigurasikan server pratinjau

365 

366Claude secara otomatis mendeteksi setup dev server Anda dan menyimpan konfigurasi di `.claude/launch.json` di root folder yang Anda pilih saat memulai sesi. Preview menggunakan folder ini sebagai direktori kerjanya, jadi jika Anda memilih folder induk, subfolder dengan server dev mereka sendiri tidak akan terdeteksi secara otomatis. Untuk bekerja dengan server subfolder, mulai sesi di folder itu secara langsung atau tambahkan konfigurasi secara manual.

367 

368Untuk menyesuaikan cara server Anda dimulai, misalnya menggunakan `yarn dev` alih-alih `npm run dev` atau mengubah port, edit file secara manual atau klik **Edit configuration** di dropdown Preview untuk membukanya di editor kode Anda. File mendukung JSON dengan komentar.

369 

370```json theme={null}

371{

372 "version": "0.0.1",

373 "configurations": [

374 {

375 "name": "my-app",

376 "runtimeExecutable": "npm",

377 "runtimeArgs": ["run", "dev"],

378 "port": 3000

379 }

380 ]

381}

382```

383 

384Anda dapat menentukan beberapa konfigurasi untuk menjalankan server berbeda dari proyek yang sama, seperti frontend dan API. Lihat [examples](#examples) di bawah.

385 

386#### Auto-verify changes

387 

388Ketika `autoVerify` diaktifkan, Claude secara otomatis memverifikasi perubahan kode setelah mengedit file. Mengambil tangkapan layar, memeriksa kesalahan, dan mengkonfirmasi perubahan berfungsi sebelum menyelesaikan responsnya.

389 

390Auto-verify aktif secara default. Nonaktifkan per-proyek dengan menambahkan `"autoVerify": false` ke `.claude/launch.json`, atau alihkan dari menu dropdown **Preview**.

391 

392```json theme={null}

393{

394 "version": "0.0.1",

395 "autoVerify": false,

396 "configurations": [...]

397}

398```

399 

400Ketika dinonaktifkan, alat pratinjau masih tersedia dan Anda dapat meminta Claude untuk memverifikasi kapan saja. Auto-verify membuatnya otomatis setelah setiap edit.

401 

402#### Configuration fields

403 

404Setiap entri dalam array `configurations` menerima bidang berikut:

405 

406| Field | Type | Description |

407| ------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

408| `name` | string | Pengidentifikasi unik untuk server ini |

409| `runtimeExecutable` | string | Perintah untuk dijalankan, seperti `npm`, `yarn`, atau `node` |

410| `runtimeArgs` | string\[] | Argumen yang dilewatkan ke `runtimeExecutable`, seperti `["run", "dev"]` |

411| `port` | number | Port yang didengarkan server Anda. Default ke 3000 |

412| `cwd` | string | Direktori kerja relatif terhadap root proyek Anda. Default ke root proyek. Gunakan `${workspaceFolder}` untuk mereferensikan root proyek secara eksplisit |

413| `env` | object | Variabel lingkungan tambahan sebagai pasangan kunci-nilai, seperti `{ "NODE_ENV": "development" }`. Jangan letakkan rahasia di sini karena file ini dilakukan commit ke repo Anda. Untuk meneruskan rahasia ke dev server Anda, aturlah di [local environment editor](#local-sessions) sebagai gantinya. |

414| `autoPort` | boolean | Cara menangani konflik port. Lihat di bawah |

415| `program` | string | Skrip untuk dijalankan dengan `node`. Lihat [when to use `program` vs `runtimeExecutable`](#when-to-use-program-vs-runtimeexecutable) |

416| `args` | string\[] | Argumen yang dilewatkan ke `program`. Hanya digunakan ketika `program` diatur |

417 

418##### When to use `program` vs `runtimeExecutable`

419 

420Gunakan `runtimeExecutable` dengan `runtimeArgs` untuk memulai dev server melalui package manager. Misalnya, `"runtimeExecutable": "npm"` dengan `"runtimeArgs": ["run", "dev"]` menjalankan `npm run dev`.

421 

422Gunakan `program` ketika Anda memiliki skrip mandiri yang ingin Anda jalankan dengan `node` secara langsung. Misalnya, `"program": "server.js"` menjalankan `node server.js`. Lewatkan flag tambahan dengan `args`.

423 

424#### Port conflicts

425 

426Bidang `autoPort` mengontrol apa yang terjadi ketika port pilihan Anda sudah digunakan:

427 

428* **`true`**: Claude menemukan dan menggunakan port gratis secara otomatis. Cocok untuk sebagian besar dev server.

429* **`false`**: Claude gagal dengan kesalahan. Gunakan ini ketika server Anda harus menggunakan port tertentu, seperti untuk callback OAuth atau allowlist CORS.

430* **Not set (default)**: Claude menanyakan apakah server memerlukan port itu, kemudian menyimpan jawaban Anda.

431 

432Ketika Claude memilih port yang berbeda, itu melewatkan port yang ditugaskan ke server Anda melalui variabel lingkungan `PORT`.

433 

434#### Examples

435 

436Konfigurasi ini menunjukkan setup umum untuk tipe proyek berbeda:

437 

438<Tabs>

439 <Tab title="Next.js">

440 Konfigurasi ini menjalankan aplikasi Next.js menggunakan Yarn di port 3000:

441 

442 ```json theme={null}

443 {

444 "version": "0.0.1",

445 "configurations": [

446 {

447 "name": "web",

448 "runtimeExecutable": "yarn",

449 "runtimeArgs": ["dev"],

450 "port": 3000

451 }

452 ]

453 }

454 ```

455 </Tab>

456 

457 <Tab title="Multiple servers">

458 Untuk monorepo dengan server frontend dan API, tentukan beberapa konfigurasi. Frontend menggunakan `autoPort: true` sehingga memilih port gratis jika 3000 diambil, sementara server API memerlukan port 8080 dengan tepat:

459 

460 ```json theme={null}

461 {

462 "version": "0.0.1",

463 "configurations": [

464 {

465 "name": "frontend",

466 "runtimeExecutable": "npm",

467 "runtimeArgs": ["run", "dev"],

468 "cwd": "apps/web",

469 "port": 3000,

470 "autoPort": true

471 },

472 {

473 "name": "api",

474 "runtimeExecutable": "npm",

475 "runtimeArgs": ["run", "start"],

476 "cwd": "server",

477 "port": 8080,

478 "env": { "NODE_ENV": "development" },

479 "autoPort": false

480 }

481 ]

482 }

483 ```

484 </Tab>

485 

486 <Tab title="Node.js script">

487 Untuk menjalankan skrip Node.js secara langsung alih-alih menggunakan perintah package manager, gunakan bidang `program`:

488 

489 ```json theme={null}

490 {

491 "version": "0.0.1",

492 "configurations": [

493 {

494 "name": "server",

495 "program": "server.js",

496 "args": ["--verbose"],

497 "port": 4000

498 }

499 ]

500 }

501 ```

502 </Tab>

503</Tabs>

504 

505## Konfigurasi lingkungan

506 

507Lingkungan yang Anda pilih saat [memulai sesi](#start-a-session) menentukan di mana Claude mengeksekusi dan cara Anda terhubung:

508 

509* **Local**: berjalan di mesin Anda dengan akses langsung ke file Anda

510* **Remote**: berjalan pada infrastruktur cloud Anthropic. Sesi terus berlanjut bahkan jika Anda menutup aplikasi.

511* **SSH**: berjalan di mesin jarak jauh yang Anda hubungkan melalui SSH, seperti server Anda sendiri, cloud VM, atau dev container

512 

513### Local sessions

514 

515Aplikasi desktop tidak selalu mewarisi lingkungan shell lengkap Anda. Di macOS, ketika Anda meluncurkan aplikasi dari Dock atau Finder, itu membaca profil shell Anda, seperti `~/.zshrc` atau `~/.bashrc`, untuk mengekstrak `PATH` dan set tetap variabel Claude Code, tetapi variabel lain yang Anda ekspor di sana tidak diambil. Di Windows, aplikasi mewarisi variabel lingkungan pengguna dan sistem tetapi tidak membaca profil PowerShell.

516 

517Untuk mengatur variabel lingkungan untuk sesi lokal dan dev server di platform apa pun, buka dropdown lingkungan di kotak prompt, arahkan ke **Local**, dan klik ikon gear untuk membuka editor lingkungan lokal. Variabel yang Anda simpan di sini disimpan terenkripsi di mesin Anda dan berlaku untuk setiap sesi lokal dan server pratinjau yang Anda mulai. Anda juga dapat menambahkan variabel ke kunci `env` di file `~/.claude/settings.json` Anda, meskipun ini hanya mencapai sesi Claude dan bukan dev server. Lihat [environment variables](/id/env-vars) untuk daftar lengkap variabel yang didukung.

518 

519[Extended thinking](/id/common-workflows#use-extended-thinking-thinking-mode) diaktifkan secara default, yang meningkatkan kinerja pada tugas penalaran kompleks tetapi menggunakan token tambahan. Untuk menonaktifkan pemikiran sepenuhnya, atur `MAX_THINKING_TOKENS` ke `0` di editor lingkungan lokal. Pada model dengan [adaptive reasoning](/id/model-config#adjust-effort-level), nilai `MAX_THINKING_TOKENS` apa pun yang lain diabaikan karena adaptive reasoning mengontrol kedalaman pemikiran sebagai gantinya. Pada Opus 4.6 dan Sonnet 4.6, atur `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING` ke `1` untuk menggunakan anggaran pemikiran tetap; Opus 4.7 selalu menggunakan adaptive reasoning dan tidak memiliki mode anggaran tetap.

520 

521### Remote sessions

522 

523Sesi jarak jauh terus berlanjut di latar belakang bahkan jika Anda menutup aplikasi. Penggunaan dihitung terhadap [batas rencana langganan](/id/costs) Anda tanpa biaya komputasi terpisah.

524 

525Anda dapat membuat lingkungan cloud kustom dengan tingkat akses jaringan dan variabel lingkungan yang berbeda. Pilih dropdown lingkungan saat memulai sesi jarak jauh dan pilih **Add environment**. Lihat [cloud environment](/id/claude-code-on-the-web#the-cloud-environment) untuk detail tentang mengonfigurasi akses jaringan dan variabel lingkungan.

526 

527### SSH sessions

528 

529Sesi SSH memungkinkan Anda menjalankan Claude Code di mesin jarak jauh sambil menggunakan aplikasi desktop sebagai antarmuka Anda. Ini berguna untuk bekerja dengan basis kode yang tinggal di cloud VM, dev container, atau server dengan perangkat keras atau dependensi tertentu.

530 

531Untuk menambahkan koneksi SSH, klik dropdown lingkungan sebelum memulai sesi dan pilih **+ Add SSH connection**. Dialog menanyakan:

532 

533* **Name**: label ramah untuk koneksi ini

534* **SSH Host**: `user@hostname` atau host yang ditentukan di `~/.ssh/config`

535* **SSH Port**: default ke 22 jika dibiarkan kosong, atau menggunakan port dari konfigurasi SSH Anda

536* **Identity File**: path ke kunci pribadi Anda, seperti `~/.ssh/id_rsa`. Biarkan kosong untuk menggunakan kunci default atau konfigurasi SSH Anda.

537 

538Setelah ditambahkan, koneksi muncul di dropdown lingkungan. Pilih untuk memulai sesi di mesin itu. Claude berjalan di mesin jarak jauh dengan akses ke file dan alatnya.

539 

540Mesin jarak jauh harus menjalankan Linux atau macOS. Desktop menginstal Claude Code di mesin jarak jauh secara otomatis saat pertama kali Anda terhubung. Setelah terhubung, sesi SSH mendukung permission modes, connectors, plugins, dan MCP servers.

541 

542#### Pre-configure SSH connections for your team

543 

544Administrator dapat mendistribusikan koneksi SSH kepada anggota tim dengan menambahkan `sshConfigs` ke file [managed settings](/id/settings#settings-precedence). Koneksi yang ditentukan dengan cara ini muncul di dropdown lingkungan setiap pengguna secara otomatis dan ditampilkan sebagai terkelola, sehingga pengguna dapat memilihnya tetapi tidak dapat mengedit atau menghapusnya di aplikasi.

545 

546Contoh berikut pre-configure satu koneksi yang terbuka di `~/projects` pada host jarak jauh:

547 

548```json theme={null}

549{

550 "sshConfigs": [

551 {

552 "id": "shared-dev-vm",

553 "name": "Shared Dev VM",

554 "sshHost": "user@dev.example.com",

555 "sshPort": 22,

556 "sshIdentityFile": "~/.ssh/id_ed25519",

557 "startDirectory": "~/projects"

558 }

559 ]

560}

561```

562 

563Setiap entri memerlukan `id`, `name`, dan `sshHost`. Bidang `sshPort`, `sshIdentityFile`, dan `startDirectory` bersifat opsional. Pengguna juga dapat menambahkan `sshConfigs` ke `~/.claude/settings.json` mereka sendiri, yang merupakan tempat koneksi yang ditambahkan melalui dialog disimpan.

564 

565## Konfigurasi Enterprise

566 

567Organisasi pada rencana Team atau Enterprise dapat mengelola perilaku aplikasi desktop melalui kontrol konsol admin, file pengaturan yang dikelola, dan kebijakan manajemen perangkat.

568 

569### Kontrol konsol admin

570 

571Pengaturan ini dikonfigurasi melalui [konsol pengaturan admin](https://claude.ai/admin-settings/claude-code):

572 

573* **Code in the desktop**: kontrol apakah pengguna di organisasi Anda dapat mengakses Claude Code di aplikasi desktop

574* **Code in the web**: aktifkan atau nonaktifkan [web sessions](/id/claude-code-on-the-web) untuk organisasi Anda

575* **Remote Control**: aktifkan atau nonaktifkan [Remote Control](/id/remote-control) untuk organisasi Anda

576* **Disable Bypass permissions mode**: cegah pengguna di organisasi Anda dari mengaktifkan bypass permissions mode

577 

578### Pengaturan yang dikelola

579 

580Pengaturan yang dikelola menimpa pengaturan proyek dan pengguna dan berlaku ketika Desktop menjalankan sesi CLI. Anda dapat mengatur kunci ini di file [managed settings](/id/settings#settings-precedence) organisasi Anda atau mendorongnya dari jarak jauh melalui konsol admin.

581 

582| Key | Description |

583| ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

584| `permissions.disableBypassPermissionsMode` | atur ke `"disable"` untuk mencegah pengguna dari mengaktifkan Bypass permissions mode. |

585| `disableAutoMode` | atur ke `"disable"` untuk mencegah pengguna dari mengaktifkan [Auto](/id/permission-modes#eliminate-prompts-with-auto-mode) mode. Menghapus Auto dari pemilih mode. Juga diterima di bawah `permissions`. |

586| `autoMode` | sesuaikan apa yang dipercaya dan diblokir oleh pengklasifikasi auto mode di seluruh organisasi Anda. Lihat [Configure auto mode](/id/auto-mode-config). |

587| `sshConfigs` | pre-configure [SSH connections](#pre-configure-ssh-connections-for-your-team) yang muncul di dropdown lingkungan. Pengguna tidak dapat mengedit atau menghapus koneksi yang dikelola. |

588 

589File pengaturan yang dikelola yang disebarkan ke disk pada setiap mesin berlaku untuk sesi Desktop. Pengaturan yang dikelola yang didorong dari jarak jauh melalui konsol admin saat ini hanya mencapai sesi CLI dan IDE, jadi untuk penyebaran Desktop baik distribusikan file melalui MDM atau gunakan [kontrol konsol admin](#admin-console-controls) di atas.

590 

591`permissions.disableBypassPermissionsMode` dan `disableAutoMode` juga bekerja di pengaturan pengguna dan proyek, tetapi menempatkannya di pengaturan yang dikelola mencegah pengguna dari menimpanya. `autoMode` dibaca dari pengaturan pengguna, `.claude/settings.local.json`, dan pengaturan yang dikelola, tetapi bukan dari `.claude/settings.json` yang diperiksa: repositori yang diklon tidak dapat menyuntikkan aturan pengklasifikasinya sendiri. Untuk daftar lengkap pengaturan khusus yang dikelola termasuk `allowManagedPermissionRulesOnly` dan `allowManagedHooksOnly`, lihat [managed-only settings](/id/permissions#managed-only-settings).

592 

593### Kebijakan manajemen perangkat

594 

595Tim IT dapat mengelola aplikasi desktop melalui MDM di macOS atau group policy di Windows. Kebijakan yang tersedia termasuk mengaktifkan atau menonaktifkan fitur Claude Code, mengontrol auto-updates, dan menetapkan URL penyebaran kustom.

596 

597* **macOS**: konfigurasikan melalui domain preferensi `com.anthropic.Claude` menggunakan alat seperti Jamf atau Kandji

598* **Windows**: konfigurasikan melalui registri di `SOFTWARE\Policies\Claude`

599 

600### Autentikasi dan SSO

601 

602Organisasi enterprise dapat memerlukan SSO untuk semua pengguna. Lihat [authentication](/id/authentication) untuk detail tingkat rencana dan [Setting up SSO](https://support.claude.com/en/articles/13132885-setting-up-single-sign-on-sso) untuk konfigurasi SAML dan OIDC.

603 

604### Penanganan data

605 

606Claude Code memproses kode Anda secara lokal dalam sesi lokal atau pada infrastruktur cloud Anthropic dalam sesi jarak jauh. Percakapan dan konteks kode dikirim ke API Anthropic untuk diproses. Lihat [data handling](/id/data-usage) untuk detail tentang retensi data, privasi, dan kepatuhan.

607 

608### Penyebaran

609 

610Desktop dapat didistribusikan melalui alat penyebaran enterprise:

611 

612* **macOS**: distribusikan melalui MDM seperti Jamf atau Kandji menggunakan installer `.dmg`

613* **Windows**: sebarkan melalui paket MSIX atau installer `.exe`. Lihat [Deploy Claude Desktop for Windows](https://support.claude.com/en/articles/12622703-deploy-claude-desktop-for-windows) untuk opsi penyebaran enterprise termasuk instalasi senyap

614 

615Untuk konfigurasi jaringan seperti pengaturan proxy, allowlist firewall, dan LLM gateway, lihat [network configuration](/id/network-config).

616 

617Untuk referensi konfigurasi enterprise lengkap, lihat [enterprise configuration guide](https://support.claude.com/en/articles/12622667-enterprise-configuration).

618 

619## Datang dari CLI?

620 

621Jika Anda sudah menggunakan CLI Claude Code, Desktop menjalankan mesin yang sama dengan antarmuka grafis. Anda dapat menjalankan keduanya secara bersamaan di mesin yang sama, bahkan di proyek yang sama. Masing-masing mempertahankan riwayat sesi terpisah, tetapi mereka berbagi konfigurasi dan memori proyek melalui file CLAUDE.md.

622 

623Untuk memindahkan sesi CLI ke Desktop, jalankan `/desktop` di terminal. Claude menyimpan sesi Anda dan membukanya di aplikasi desktop, kemudian keluar dari CLI. Perintah ini hanya tersedia di macOS dan Windows.

624 

625<Tip>

626 Kapan menggunakan Desktop vs CLI: gunakan Desktop ketika Anda ingin mengelola sesi paralel di satu jendela, mengatur pane berdampingan, atau meninjau perubahan secara visual. Gunakan CLI ketika Anda memerlukan scripting, otomasi, atau lebih suka alur kerja terminal.

627</Tip>

628 

629### Setara flag CLI

630 

631Tabel ini menunjukkan setara aplikasi desktop untuk flag CLI umum. Flag yang tidak tercantum tidak memiliki setara desktop karena dirancang untuk scripting atau otomasi.

632 

633| CLI | Setara Desktop |

634| ------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |

635| `--model sonnet` | Dropdown model di sebelah tombol kirim |

636| `--resume`, `--continue` | Klik sesi di sidebar |

637| `--permission-mode` | Pemilih mode di sebelah tombol kirim |

638| `--dangerously-skip-permissions` | Bypass permissions mode. Aktifkan di Settings → Claude Code → "Allow bypass permissions mode". Admin enterprise dapat menonaktifkan pengaturan ini. |

639| `--add-dir` | Tambahkan beberapa repo dengan tombol **+** di sesi jarak jauh |

640| `--allowedTools`, `--disallowedTools` | Tidak ada setara per-sesi. Aturan izin di [file pengaturan](/id/settings) masih berlaku. |

641| `--verbose` | [Mode tampilan verbose](#switch-view-modes) di dropdown tampilan Transcript |

642| `--print`, `--output-format` | Tidak tersedia. Desktop hanya interaktif. |

643| `ANTHROPIC_MODEL` env var | Dropdown model di sebelah tombol kirim |

644| `MAX_THINKING_TOKENS` env var | Atur di editor lingkungan lokal. Lihat [konfigurasi lingkungan](#environment-configuration). |

645 

646### Konfigurasi bersama

647 

648Desktop dan CLI membaca file konfigurasi yang sama, jadi setup Anda terbawa:

649 

650* **[CLAUDE.md](/id/memory)** dan file `CLAUDE.local.md` di proyek Anda digunakan oleh keduanya

651* **[MCP servers](/id/mcp)** yang dikonfigurasi di `~/.claude.json` atau `.mcp.json` bekerja di keduanya

652* **[Hooks](/id/hooks)** dan **[skills](/id/skills)** yang ditentukan dalam pengaturan berlaku untuk keduanya

653* **[Settings](/id/settings)** di `~/.claude.json` dan `~/.claude/settings.json` dibagikan. Aturan izin, alat yang diizinkan, dan pengaturan lainnya di `settings.json` berlaku untuk sesi Desktop.

654* **Models**: Sonnet, Opus, dan Haiku tersedia di keduanya. Di Desktop, pilih model dari dropdown di sebelah tombol kirim. Anda dapat mengubah model selama sesi dari dropdown yang sama.

655 

656<Note>

657 **MCP servers: aplikasi chat desktop vs Claude Code**: MCP servers yang dikonfigurasi untuk aplikasi chat Claude Desktop di `claude_desktop_config.json` terpisah dari Claude Code dan tidak akan muncul di tab Code. Untuk menggunakan MCP servers di Claude Code, konfigurasikan di `~/.claude.json` atau file `.mcp.json` proyek Anda. Lihat [konfigurasi MCP](/id/mcp#installing-mcp-servers) untuk detail.

658</Note>

659 

660### Perbandingan fitur

661 

662Tabel ini membandingkan kemampuan inti antara CLI dan Desktop. Untuk daftar lengkap flag CLI, lihat [referensi CLI](/id/cli-reference).

663 

664| Fitur | CLI | Desktop |

665| ----------------------------------------------------- | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

666| Mode izin | Semua mode termasuk `dontAsk` | Tanyakan izin, Terima otomatis edit, Plan Mode, Auto, dan Bypass permissions via Settings |

667| `--dangerously-skip-permissions` | Flag CLI | Bypass permissions mode. Aktifkan di Settings → Claude Code → "Allow bypass permissions mode" |

668| [Penyedia pihak ketiga](/id/third-party-integrations) | Bedrock, Vertex, Foundry | API Anthropic secara default. Penerapan enterprise dapat mengonfigurasi Vertex AI dan penyedia gateway. Lihat [panduan konfigurasi enterprise](https://support.claude.com/en/articles/12622667-enterprise-configuration). |

669| [MCP servers](/id/mcp) | Konfigurasikan di file pengaturan | UI Connectors untuk sesi lokal dan SSH, atau file pengaturan |

670| [Plugins](/id/plugins) | Perintah `/plugin` | UI plugin manager |

671| File @mention | Berbasis teks | Dengan autocomplete; hanya sesi lokal dan SSH |

672| Lampiran file | Tidak tersedia | Gambar, PDF |

673| Isolasi sesi | Flag [`--worktree`](/id/cli-reference) | Worktrees otomatis |

674| Sesi ganda | Terminal terpisah | Tab sidebar |

675| Tugas berulang | Cron jobs, CI pipelines | [Tugas terjadwal](/id/desktop-scheduled-tasks) |

676| Penggunaan komputer | [Aktifkan via `/mcp`](/id/computer-use) di macOS | [Kontrol aplikasi dan layar](#let-claude-use-your-computer) di macOS dan Windows |

677| Integrasi Dispatch | Tidak tersedia | [Sesi Dispatch](#sessions-from-dispatch) di sidebar |

678| Scripting dan otomasi | [`--print`](/id/cli-reference), [Agent SDK](/id/headless) | Tidak tersedia |

679 

680### Apa yang tidak tersedia di Desktop

681 

682Fitur berikut hanya tersedia di CLI atau ekstensi VS Code:

683 

684* **Penyedia pihak ketiga**: Desktop terhubung ke API Anthropic secara default. Penerapan enterprise dapat mengonfigurasi Vertex AI dan penyedia gateway melalui [pengaturan terkelola](https://support.claude.com/en/articles/12622667-enterprise-configuration). Untuk Bedrock atau Foundry, gunakan [CLI](/id/quickstart).

685* **Linux**: aplikasi desktop hanya tersedia di macOS dan Windows. Di Linux, gunakan [CLI](/id/quickstart).

686* **Saran kode inline**: Desktop tidak menyediakan saran gaya autocomplete. Ini bekerja melalui prompt percakapan dan perubahan kode eksplisit.

687* **Tim agent**: orkestrasi multi-agent tersedia melalui [CLI](/id/agent-teams) dan [Agent SDK](/id/headless), bukan di Desktop.

688 

689## Troubleshooting

690 

691Bagian di bawah mencakup masalah khusus untuk aplikasi desktop. Untuk kesalahan API runtime yang muncul di chat seperti `API Error: 500`, `529 Overloaded`, `429`, atau `Prompt is too long`, lihat [Error reference](/id/errors). Kesalahan tersebut dan perbaikannya sama di CLI, desktop, dan web.

692 

693### Check your version

694 

695Untuk melihat versi aplikasi desktop yang Anda jalankan:

696 

697* **macOS**: klik **Claude** di menu bar, kemudian **About Claude**

698* **Windows**: klik **Help**, kemudian **About**

699 

700Klik nomor versi untuk menyalinnya ke clipboard Anda.

701 

702### 403 or authentication errors in the Code tab

703 

704Jika Anda melihat `Error 403: Forbidden` atau kegagalan autentikasi lainnya saat menggunakan tab Code:

705 

7061. Keluar dan masuk kembali dari menu aplikasi. Ini adalah perbaikan paling umum.

7072. Verifikasi Anda memiliki langganan berbayar aktif: Pro, Max, Team, atau Enterprise.

7083. Jika CLI berfungsi tetapi Desktop tidak, keluar dari aplikasi desktop sepenuhnya, bukan hanya tutup jendela, kemudian buka kembali dan masuk.

7094. Periksa koneksi internet dan pengaturan proxy Anda.

710 

711### Blank or stuck screen on launch

712 

713Jika aplikasi terbuka tetapi menampilkan layar kosong atau tidak responsif:

714 

7151. Mulai ulang aplikasi.

7162. Periksa pembaruan yang tertunda. Aplikasi secara otomatis memperbarui saat peluncuran.

7173. Di Windows, periksa Event Viewer untuk log crash di bawah **Windows Logs → Application**.

718 

719### "Failed to load session"

720 

721Jika Anda melihat `Failed to load session`, folder yang dipilih mungkin tidak lagi ada, repositori Git mungkin memerlukan Git LFS yang tidak diinstal, atau izin file mungkin mencegah akses. Coba pilih folder berbeda atau mulai ulang aplikasi.

722 

723### Session not finding installed tools

724 

725Jika Claude tidak dapat menemukan alat seperti `npm`, `node`, atau perintah CLI lainnya, verifikasi alat bekerja di terminal biasa Anda, periksa bahwa profil shell Anda dengan benar menyiapkan PATH, dan mulai ulang aplikasi desktop untuk memuat ulang variabel lingkungan.

726 

727### Git and Git LFS errors

728 

729Di Windows, Git diperlukan agar tab Code memulai sesi lokal. Jika Anda melihat "Git is required," instal [Git for Windows](https://git-scm.com/downloads/win) dan mulai ulang aplikasi.

730 

731Jika Anda melihat "Git LFS is required by this repository but is not installed," instal Git LFS dari [git-lfs.com](https://git-lfs.com/), jalankan `git lfs install`, dan mulai ulang aplikasi.

732 

733### MCP servers not working on Windows

734 

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

736 

737### App won't quit

738 

739* **macOS**: tekan Cmd+Q. Jika aplikasi tidak merespons, gunakan Force Quit dengan Cmd+Option+Esc, pilih Claude, dan klik Force Quit.

740* **Windows**: gunakan Task Manager dengan Ctrl+Shift+Esc untuk mengakhiri proses Claude.

741 

742### Windows-specific issues

743 

744* **PATH not updated after install**: buka jendela terminal baru. Pembaruan PATH hanya berlaku untuk sesi terminal baru.

745* **Concurrent installation error**: jika Anda melihat kesalahan tentang instalasi lain sedang berlangsung tetapi tidak ada, coba jalankan installer sebagai Administrator.

746 

747### "Branch doesn't exist yet" when opening in CLI

748 

749Sesi jarak jauh dapat membuat cabang yang tidak ada di mesin lokal Anda. Klik nama cabang di toolbar sesi untuk menyalinnya, kemudian ambil secara lokal:

750 

751```bash theme={null}

752git fetch origin <branch-name>

753git checkout <branch-name>

754```

755 

756### Still stuck?

757 

758* Cari atau laporkan bug di [GitHub Issues](https://github.com/anthropics/claude-code/issues)

759* Kunjungi [Claude support center](https://support.claude.com/)

760 

761Saat melaporkan bug, sertakan versi aplikasi desktop Anda, sistem operasi Anda, pesan kesalahan yang tepat, dan log yang relevan. Di macOS, periksa Console.app. Di Windows, periksa Event Viewer → Windows Logs → Application.

desktop-quickstart.md +127 −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# Memulai dengan aplikasi desktop

6 

7> Instal Claude Code di desktop dan mulai sesi coding pertama Anda

8 

9Aplikasi desktop memberi Anda Claude Code dengan antarmuka grafis yang dirancang untuk menjalankan beberapa sesi berdampingan: sidebar untuk mengelola pekerjaan paralel, tata letak drag-and-drop dengan terminal terintegrasi dan editor file, tinjauan diff visual, pratinjau aplikasi langsung, pemantauan GitHub PR dengan penggabungan otomatis, dan tugas terjadwal. Tidak perlu terminal.

10 

11<CardGroup cols={2}>

12 <Card title="Download for macOS" icon="apple" href="https://claude.ai/api/desktop/darwin/universal/dmg/latest/redirect?utm_source=claude_code&utm_medium=docs">

13 Universal build for Intel and Apple Silicon

14 </Card>

15 

16 <Card title="Download for Windows" icon="windows" href="https://claude.ai/api/desktop/win32/x64/setup/latest/redirect?utm_source=claude_code&utm_medium=docs">

17 For x64 processors

18 </Card>

19</CardGroup>

20 

21For Windows ARM64, download the [ARM64 installer](https://claude.ai/api/desktop/win32/arm64/setup/latest/redirect?utm_source=claude_code\&utm_medium=docs). The desktop app is not available on Linux; use the [CLI](/en/quickstart) instead.

22 

23<Note>

24 Claude Code memerlukan [langganan Pro, Max, Team, atau Enterprise](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=desktop_quickstart_pricing).

25</Note>

26 

27Halaman ini memandu Anda melalui instalasi aplikasi dan memulai sesi pertama Anda. Jika Anda sudah siap, lihat [Gunakan Claude Code Desktop](/id/desktop) untuk referensi lengkap.

28 

29Aplikasi desktop memiliki tiga tab:

30 

31* **Chat**: Percakapan umum tanpa akses file, mirip dengan claude.ai.

32* **Cowork**: Agen latar belakang otonom yang bekerja pada tugas di VM cloud dengan lingkungannya sendiri. Dapat berjalan secara independen saat Anda melakukan pekerjaan lain.

33* **Code**: Asisten coding interaktif dengan akses langsung ke file lokal Anda. Anda meninjau dan menyetujui setiap perubahan secara real-time.

34 

35Chat dan Cowork tercakup dalam [artikel dukungan Claude Desktop](https://support.claude.com/en/collections/16163169-claude-desktop). Halaman ini berfokus pada tab **Code**.

36 

37## Instal

38 

39<Steps>

40 <Step title="Instal dan masuk">

41 Unduh installer untuk platform Anda dari tautan di atas dan jalankan. Luncurkan Claude dari folder Aplikasi Anda di macOS atau menu Start di Windows, kemudian masuk dengan akun Anthropic Anda.

42 </Step>

43 

44 <Step title="Buka tab Code">

45 Klik tab **Code** di bagian atas tengah. Jika mengklik Code meminta Anda untuk upgrade, Anda perlu [berlangganan paket berbayar](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=desktop_quickstart_upgrade) terlebih dahulu. Jika meminta Anda untuk masuk online, selesaikan masuk dan mulai ulang aplikasi. Jika Anda melihat kesalahan 403, lihat [pemecahan masalah autentikasi](/id/desktop#403-or-authentication-errors-in-the-code-tab).

46 </Step>

47</Steps>

48 

49Aplikasi desktop menyertakan Claude Code. Anda tidak perlu menginstal Node.js atau CLI secara terpisah. Untuk menggunakan `claude` dari terminal, instal CLI secara terpisah. Lihat [Memulai dengan CLI](/id/quickstart).

50 

51## Mulai sesi pertama Anda

52 

53Dengan tab Code terbuka, pilih proyek dan beri Claude sesuatu untuk dikerjakan.

54 

55<Steps>

56 <Step title="Pilih lingkungan dan folder">

57 Pilih **Local** untuk menjalankan Claude di mesin Anda menggunakan file Anda secara langsung. Klik **Select folder** dan pilih direktori proyek Anda.

58 

59 <Tip>

60 Mulai dengan proyek kecil yang Anda kenal dengan baik. Ini adalah cara tercepat untuk melihat apa yang dapat dilakukan Claude Code. Di Windows, [Git](https://git-scm.com/downloads/win) harus diinstal agar sesi lokal berfungsi. Sebagian besar Mac menyertakan Git secara default.

61 </Tip>

62 

63 Anda juga dapat memilih:

64 

65 * **Remote**: Jalankan sesi pada infrastruktur cloud Anthropic yang berlanjut bahkan jika Anda menutup aplikasi. Sesi remote menggunakan infrastruktur yang sama dengan [Claude Code di web](/id/claude-code-on-the-web).

66 * **SSH**: Terhubung ke mesin jarak jauh melalui SSH (server Anda sendiri, VM cloud, atau dev containers). Claude Code harus diinstal di mesin jarak jauh.

67 </Step>

68 

69 <Step title="Pilih model">

70 Pilih model dari dropdown di sebelah tombol kirim. Lihat [models](/id/model-config#available-models) untuk perbandingan Opus, Sonnet, dan Haiku. Anda dapat mengubah model nanti dari dropdown yang sama.

71 </Step>

72 

73 <Step title="Beri tahu Claude apa yang harus dilakukan">

74 Ketik apa yang ingin Anda lakukan Claude:

75 

76 * `Find a TODO comment and fix it`

77 * `Add tests for the main function`

78 * `Create a CLAUDE.md with instructions for this codebase`

79 

80 [Sesi](/id/desktop#work-in-parallel-with-sessions) adalah percakapan dengan Claude tentang kode Anda. Setiap sesi melacak konteks dan perubahannya sendiri, sehingga Anda dapat bekerja pada beberapa tugas tanpa saling mengganggu.

81 </Step>

82 

83 <Step title="Tinjau dan terima perubahan">

84 Secara default, tab Code dimulai dalam [mode Minta izin](/id/desktop#choose-a-permission-mode), di mana Claude mengusulkan perubahan dan menunggu persetujuan Anda sebelum menerapkannya. Anda akan melihat:

85 

86 1. [Tampilan diff](/id/desktop#review-changes-with-diff-view) yang menunjukkan dengan tepat apa yang akan berubah di setiap file

87 2. Tombol Terima/Tolak untuk menyetujui atau menolak setiap perubahan

88 3. Pembaruan real-time saat Claude menyelesaikan permintaan Anda

89 

90 Jika Anda menolak perubahan, Claude akan bertanya bagaimana Anda ingin melanjutkan dengan cara yang berbeda. File Anda tidak dimodifikasi sampai Anda menerima.

91 </Step>

92</Steps>

93 

94## Sekarang apa?

95 

96Anda telah membuat edit pertama Anda. Untuk referensi lengkap tentang semua yang dapat dilakukan Desktop, lihat [Gunakan Claude Code Desktop](/id/desktop). Berikut adalah beberapa hal yang dapat dicoba selanjutnya.

97 

98**Interupsi dan arahkan.** Anda dapat menghentikan Claude kapan saja. Jika itu menuju jalan yang salah, klik tombol stop atau ketik koreksi Anda dan tekan **Enter**. Claude berhenti melakukan apa yang sedang dilakukannya dan menyesuaikan berdasarkan input Anda. Anda tidak perlu menunggu sampai selesai atau memulai dari awal.

99 

100**Beri Claude lebih banyak konteks.** Ketik `@filename` di kotak prompt untuk menarik file tertentu ke dalam percakapan, lampirkan gambar dan PDF menggunakan tombol lampiran, atau seret dan lepas file langsung ke prompt. Semakin banyak konteks yang dimiliki Claude, semakin baik hasilnya. Lihat [Tambahkan file dan konteks](/id/desktop#add-files-and-context-to-prompts).

101 

102**Gunakan skills untuk tugas yang dapat diulang.** Ketik `/` atau klik **+** → **Slash commands** untuk menjelajahi [perintah bawaan](/id/commands), [skills kustom](/id/skills), dan skills plugin. Skills adalah prompt yang dapat digunakan kembali yang dapat Anda panggil kapan pun Anda membutuhkannya, seperti daftar periksa tinjauan kode atau langkah penyebaran.

103 

104**Tinjau perubahan sebelum melakukan commit.** Setelah Claude mengedit file, indikator `+12 -1` muncul. Klik untuk membuka [tampilan diff](/id/desktop#review-changes-with-diff-view), tinjau modifikasi file demi file, dan beri komentar pada baris tertentu. Claude membaca komentar Anda dan merevisi. Klik **Review code** untuk membuat Claude mengevaluasi diff itu sendiri dan meninggalkan saran inline.

105 

106**Sesuaikan berapa banyak kontrol yang Anda miliki.** [Mode izin](/id/desktop#choose-a-permission-mode) Anda mengontrol keseimbangan. Minta izin (default) memerlukan persetujuan sebelum setiap edit. Auto accept edits secara otomatis menerima edit file untuk iterasi yang lebih cepat. Plan mode memungkinkan Claude memetakan pendekatan tanpa menyentuh file apa pun, yang berguna sebelum refactor besar.

107 

108**Tambahkan plugins untuk kemampuan lebih.** Klik tombol **+** di sebelah kotak prompt dan pilih **Plugins** untuk menjelajahi dan menginstal [plugins](/id/desktop#install-plugins) yang menambahkan skills, agents, MCP servers, dan lainnya.

109 

110**Pratinjau aplikasi Anda.** Klik dropdown **Preview** untuk menjalankan dev server Anda langsung di desktop. Claude dapat melihat aplikasi yang berjalan, menguji endpoint, memeriksa log, dan melakukan iterasi pada apa yang dilihatnya. Lihat [Pratinjau aplikasi Anda](/id/desktop#preview-your-app).

111 

112**Lacak pull request Anda.** Setelah membuka PR, Claude Code memantau hasil pemeriksaan CI dan dapat secara otomatis memperbaiki kegagalan atau menggabungkan PR setelah semua pemeriksaan lulus. Lihat [Pantau status pull request](/id/desktop#monitor-pull-request-status).

113 

114**Letakkan Claude pada jadwal.** Atur [tugas terjadwal](/id/desktop-scheduled-tasks) untuk menjalankan Claude secara otomatis secara berulang: tinjauan kode harian setiap pagi, audit dependensi mingguan, atau briefing yang menarik dari alat yang terhubung.

115 

116**Skalakan ketika Anda siap.** Buka [sesi paralel](/id/desktop#work-in-parallel-with-sessions) dari sidebar untuk bekerja pada beberapa tugas sekaligus, masing-masing di Git worktree-nya sendiri, dan buka [pane tugas](/id/desktop#watch-background-tasks) untuk menonton subagents dan perintah latar belakang yang sedang dijalankan sesi. Buka [side chat](/id/desktop#ask-a-side-question-without-derailing-the-session) untuk mengajukan pertanyaan tanpa mengganggu thread utama. Kirim [pekerjaan jangka panjang ke cloud](/id/desktop#run-long-running-tasks-remotely) sehingga terus berjalan bahkan jika Anda menutup aplikasi, atau [lanjutkan sesi di web atau di IDE Anda](/id/desktop#continue-in-another-surface) jika tugas memakan waktu lebih lama dari yang diharapkan. [Hubungkan alat eksternal](/id/desktop#extend-claude-code) seperti GitHub, Slack, dan Linear untuk menyatukan alur kerja Anda.

117 

118## Datang dari CLI?

119 

120Desktop menjalankan mesin yang sama dengan CLI dengan antarmuka grafis. Anda dapat menjalankan keduanya secara bersamaan pada proyek yang sama, dan mereka berbagi konfigurasi (file CLAUDE.md, MCP servers, hooks, skills, dan settings). Untuk perbandingan lengkap fitur, setara flag, dan apa yang tidak tersedia di Desktop, lihat [Perbandingan CLI](/id/desktop#coming-from-the-cli).

121 

122## Apa selanjutnya

123 

124* [Gunakan Claude Code Desktop](/id/desktop): mode izin, sesi paralel, tampilan diff, konektor, dan konfigurasi enterprise

125* [Pemecahan masalah](/id/desktop#troubleshooting): solusi untuk kesalahan umum dan masalah setup

126* [Praktik terbaik](/id/best-practices): tips untuk menulis prompt yang efektif dan mendapatkan hasil maksimal dari Claude Code

127* [Alur kerja umum](/id/common-workflows): tutorial untuk debugging, refactoring, testing, dan lainnya

devcontainer.md +194 −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# Kontainer pengembangan

6 

7> Jalankan Claude Code di dalam kontainer pengembangan untuk lingkungan yang konsisten dan terisolasi di seluruh tim Anda.

8 

9Sebuah [kontainer pengembangan](https://containers.dev/), atau dev container, memungkinkan Anda mendefinisikan lingkungan yang identik dan terisolasi yang dapat dijalankan oleh setiap insinyur di tim Anda. Dengan Claude Code yang diinstal di kontainer tersebut, perintah yang dijalankan Claude dieksekusi di dalamnya daripada di mesin host, sementara pengeditan file proyek Anda muncul di repositori lokal Anda saat Anda bekerja.

10 

11Halaman ini mencakup [menginstal Claude Code di dev container Anda](#add-claude-code-to-your-dev-container) dan topik konfigurasi yang mengikuti. Setiap topik berdiri sendiri, jadi lompat ke topik yang sesuai dengan apa yang perlu Anda atur:

12 

13* [Pertahankan autentikasi dan pengaturan di seluruh rebuild](#persist-authentication-and-settings-across-rebuilds)

14* [Terapkan kebijakan organisasi](#enforce-organization-policy)

15* [Batasi egress jaringan](#restrict-network-egress)

16* [Jalankan tanpa permintaan izin](#run-without-permission-prompts)

17 

18<Warning>

19 Meskipun dev container menyediakan perlindungan yang substansial, tidak ada sistem yang sepenuhnya kebal terhadap semua serangan.

20 Ketika dijalankan dengan `--dangerously-skip-permissions`, dev container tidak mencegah proyek berbahaya dari mengekstraksi apa pun yang dapat diakses di dalam kontainer, termasuk kredensial Claude Code yang disimpan di [`~/.claude`](/id/claude-directory).

21 Hanya gunakan dev container saat mengembangkan dengan repositori terpercaya, dan pantau aktivitas Claude.

22 Hindari memasang rahasia host seperti `~/.ssh` atau file kredensial cloud ke dalam kontainer; lebih suka token yang dibatasi repositori atau token berumur pendek.

23</Warning>

24 

25<Accordion title="Bagaimana dev container bekerja dengan editor Anda">

26 <img src="https://mintcdn.com/claude-code/YvJyjZfd9yMihr0i/images/devcontainer-architecture.svg?fit=max&auto=format&n=YvJyjZfd9yMihr0i&q=85&s=9017b1d16a446c6cc37ba562f35b9aae" className="dark:hidden" alt="Diagram menunjukkan editor di host yang terhubung ke Docker dev container. Claude Code, terminal, dan alat build berjalan di dalam kontainer. Repositori host di-bind-mount ke dalam kontainer sebagai workspace." width="640" height="300" data-path="images/devcontainer-architecture.svg" />

27 

28 <img src="https://mintcdn.com/claude-code/YvJyjZfd9yMihr0i/images/devcontainer-architecture-dark.svg?fit=max&auto=format&n=YvJyjZfd9yMihr0i&q=85&s=ef00c8e25b1ea7a3a152895f1488831b" className="hidden dark:block" alt="Diagram menunjukkan editor di host yang terhubung ke Docker dev container. Claude Code, terminal, dan alat build berjalan di dalam kontainer. Repositori host di-bind-mount ke dalam kontainer sebagai workspace." width="640" height="300" data-path="images/devcontainer-architecture-dark.svg" />

29 

30 Dev container berjalan sebagai Docker container, baik di mesin Anda atau di host cloud seperti GitHub Codespaces. Editor yang mendukung spesifikasi Dev Containers, seperti VS Code, GitHub Codespaces, JetBrains IDE, atau Cursor, terhubung ke kontainer tersebut: Anda menjelajahi dan mengedit file di editor seperti biasa, tetapi terminal terintegrasi, language server, dan alat build semuanya berjalan di dalam kontainer daripada di host Anda. Editor tanpa dukungan dev container, seperti Vim biasa, bukan bagian dari alur kerja ini.

31 

32 Claude Code berjalan di dalam kontainer, jadi ia melihat file, dependensi, dan alat yang sama seperti sisa toolchain proyek Anda. Di VS Code Anda dapat menggunakan [panel ekstensi Claude Code](/id/vs-code) atau menjalankan `claude` di terminal terintegrasi; keduanya berjalan di dalam kontainer dan berbagi konfigurasi `~/.claude` yang sama.

33</Accordion>

34 

35## Tambahkan Claude Code ke dev container Anda

36 

37Claude Code diinstal ke dalam dev container apa pun melalui [Claude Code Dev Container Feature](https://github.com/anthropics/devcontainer-features/tree/main/src/claude-code).

38 

39Pengaturan bekerja dengan alat apa pun yang mendukung spesifikasi Dev Containers, seperti VS Code, GitHub Codespaces, atau JetBrains IDEs. Langkah-langkah di bawah menggunakan VS Code sebagai contoh.

40 

41Ketika Anda membuka kontainer di VS Code atau Codespaces, fitur juga menambahkan ekstensi VS Code Claude Code; editor lain mengabaikan bagian itu.

42 

43<Tip>

44 Baru mengenal dev container? Tutorial [VS Code Dev Containers](https://code.visualstudio.com/docs/devcontainers/tutorial) memandu Anda melalui penginstalan Docker, ekstensi, dan membuka kontainer pertama Anda. Untuk contoh yang lebih lengkap dan diperkuat dengan firewall dan volume persisten, lihat [Coba kontainer referensi](#try-the-reference-container).

45</Tip>

46 

47<Steps>

48 <Step title="Buat atau perbarui devcontainer.json">

49 Simpan yang berikut sebagai `.devcontainer/devcontainer.json` di repositori Anda, atau tambahkan blok `features` ke file yang sudah ada.

50 

51 Tag versi di akhir, seperti `:1.0`, menentukan skrip instalasi fitur, bukan rilis Claude Code. Fitur menginstal Claude Code terbaru, dan Claude Code secara otomatis memperbarui dirinya sendiri di dalam kontainer secara default.

52 

53 Untuk menentukan versi CLI atau menonaktifkan auto-update, lihat [Terapkan kebijakan organisasi](#enforce-organization-policy).

54 

55 ```json .devcontainer/devcontainer.json theme={null}

56 {

57 "image": "mcr.microsoft.com/devcontainers/base:ubuntu",

58 "features": {

59 "ghcr.io/anthropics/devcontainer-features/claude-code:1.0": {}

60 }

61 }

62 ```

63 

64 Ganti baris `image` dengan citra dasar proyek Anda atau hapus jika file yang ada menggunakan Dockerfile.

65 </Step>

66 

67 <Step title="Rebuild kontainer">

68 Buka Command Palette VS Code dengan `Cmd+Shift+P` di Mac atau `Ctrl+Shift+P` di Windows dan Linux, dan jalankan **Dev Containers: Rebuild Container**.

69 

70 Untuk alat lain, ikuti tindakan rebuild alat tersebut: lihat [rebuilding di GitHub Codespaces](https://docs.github.com/en/codespaces/developing-in-a-codespace/rebuilding-the-container-in-a-codespace), [Dev Containers CLI](https://github.com/devcontainers/cli), atau dokumentasi dev container IDE Anda.

71 </Step>

72 

73 <Step title="Masuk ke Claude Code">

74 Buka terminal di kontainer yang telah dibangun kembali dan jalankan `claude`, kemudian ikuti permintaan autentikasi.

75 </Step>

76</Steps>

77 

78Apa yang Anda lihat di permintaan autentikasi tergantung pada penyedia Anda:

79 

80* **Anthropic**: masuk melalui browser dengan akun Claude atau Anthropic Console Anda

81* **[Amazon Bedrock, Google Vertex AI, atau Microsoft Foundry](/id/third-party-integrations)**: Claude Code menggunakan kredensial penyedia cloud Anda, tanpa permintaan browser

82 

83Untuk penyedia cloud, teruskan kredensial ke dalam kontainer sebagai variabel lingkungan melalui `containerEnv`, rahasia Codespaces, atau identitas workload cloud Anda daripada memasang file kredensial dari host. Lihat [Amazon Bedrock](/id/amazon-bedrock), [Google Vertex AI](/id/google-vertex-ai), atau [Microsoft Foundry](/id/microsoft-foundry) untuk rantai kredensial yang dibaca Claude Code.

84 

85Lihat [Pilih penyedia API Anda](/id/admin-setup#choose-your-api-provider) untuk memutuskan jalur mana yang sesuai dengan organisasi Anda.

86 

87<Note>

88 Jika masuk browser selesai tetapi callback tidak pernah mencapai kontainer, salin kode yang ditampilkan di browser dan tempel di permintaan `Paste code here if prompted` di terminal. Ini dapat terjadi ketika port forwarding editor tidak merutekan callback localhost.

89</Note>

90 

91## Pertahankan autentikasi dan pengaturan di seluruh rebuild

92 

93Secara default, direktori home kontainer dibuang saat rebuild, jadi insinyur harus masuk lagi setiap kali. Claude Code menyimpan token autentikasi, pengaturan pengguna, dan riwayat sesi di bawah [`~/.claude`](/id/claude-directory). Pasang volume bernama di jalur tersebut untuk menjaga status ini di seluruh rebuild.

94 

95Contoh berikut memasang volume di direktori home pengguna `node`:

96 

97```json devcontainer.json theme={null}

98"mounts": [

99 "source=claude-code-config,target=/home/node/.claude,type=volume"

100]

101```

102 

103Ganti `/home/node` dengan direktori home `remoteUser` kontainer Anda. Jika Anda memasang volume di tempat lain selain `~/.claude`, atur [`CLAUDE_CONFIG_DIR`](/id/env-vars) ke jalur mount sehingga Claude Code membaca dan menulis di sana.

104 

105Untuk mengisolasi status per proyek daripada berbagi satu volume di semua repositori, sertakan variabel `${devcontainerId}` dalam nama sumber. [Konfigurasi referensi](https://github.com/anthropics/claude-code/blob/main/.devcontainer/devcontainer.json) menggunakan `source=claude-code-config-${devcontainerId}` untuk tujuan ini.

106 

107Di GitHub Codespaces, `~/.claude` bertahan di seluruh penghentian dan memulai codespace, tetapi masih dihapus saat Anda membangun kembali kontainer, jadi pemasangan volume di atas juga berlaku di sana. Untuk membawa autentikasi di seluruh codespace, simpan `ANTHROPIC_API_KEY` atau `CLAUDE_CODE_OAUTH_TOKEN` dari [`claude setup-token`](/id/authentication#generate-a-long-lived-token) sebagai [rahasia Codespaces](https://docs.github.com/en/codespaces/managing-your-codespaces/managing-your-account-specific-secrets-for-github-codespaces); Codespaces membuat rahasia tersedia sebagai variabel lingkungan di dalam kontainer secara otomatis.

108 

109## Terapkan kebijakan organisasi

110 

111Dev container adalah tempat yang nyaman untuk menerapkan kebijakan organisasi, karena citra dan konfigurasi yang sama berjalan di mesin setiap insinyur.

112 

113Claude Code membaca `/etc/claude-code/managed-settings.json` di Linux dan menerapkannya dengan prioritas tertinggi dalam [hierarki pengaturan](/id/settings#how-scopes-interact), jadi nilai di sana menggantikan apa pun yang ditetapkan insinyur di `~/.claude` atau direktori `.claude/` proyek. Salin file ke tempat dari Dockerfile Anda:

114 

115```dockerfile Dockerfile theme={null}

116RUN mkdir -p /etc/claude-code

117COPY managed-settings.json /etc/claude-code/managed-settings.json

118```

119 

120Karena Dockerfile berada di repositori, siapa pun dengan akses tulis dapat mengubah atau menghapus langkah ini. Untuk kebijakan yang tidak dapat dilewati insinyur dengan mengedit file repositori, berikan pengaturan terkelola melalui [pengaturan yang dikelola server](/id/server-managed-settings) atau MDM Anda. Lihat [file pengaturan terkelola](/id/settings#settings-files) untuk kunci yang tersedia dan jalur pengiriman lainnya.

121 

122Untuk mengatur [variabel lingkungan](/id/env-vars) yang berlaku untuk setiap sesi Claude Code di kontainer, tambahkan ke `containerEnv` di `devcontainer.json` Anda. Contoh berikut memilih keluar dari telemetri dan pelaporan kesalahan dan mencegah Claude Code dari auto-update setelah instalasi:

123 

124```json devcontainer.json theme={null}

125"containerEnv": {

126 "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",

127 "DISABLE_AUTOUPDATER": "1"

128}

129```

130 

131Dev Container Feature selalu menginstal rilis Claude Code terbaru. Untuk menentukan versi Claude Code tertentu untuk build yang dapat direproduksi, instal dari Dockerfile Anda dengan `npm install -g @anthropic-ai/claude-code@X.Y.Z` daripada menggunakan fitur, dan atur `DISABLE_AUTOUPDATER` seperti yang ditunjukkan di atas.

132 

133Untuk daftar lengkap kontrol kebijakan termasuk aturan izin, pembatasan alat, dan allowlist server MCP, lihat [Atur Claude Code untuk organisasi Anda](/id/admin-setup).

134 

135Untuk membuat [server MCP](/id/mcp) tersedia di dalam kontainer, tentukan di [cakupan proyek](/id/mcp#mcp-installation-scopes) dalam file `.mcp.json` di akar repositori sehingga diperiksa bersama konfigurasi dev container Anda. Instal binari apa pun yang bergantung pada server stdio lokal di Dockerfile Anda, dan tambahkan domain server jarak jauh ke allowlist jaringan Anda.

136 

137## Batasi egress jaringan

138 

139Anda dapat membatasi lalu lintas keluar kontainer hanya ke domain yang dibutuhkan Claude Code. Lihat [Persyaratan akses jaringan](/id/network-config#network-access-requirements) untuk domain inferensi dan autentikasi, dan [Layanan telemetri](/id/data-usage#telemetry-services) untuk koneksi telemetri dan pelaporan kesalahan opsional dan cara menonaktifkannya.

140 

141Kontainer referensi mencakup skrip [`init-firewall.sh`](https://github.com/anthropics/claude-code/blob/main/.devcontainer/init-firewall.sh) yang memblokir semua lalu lintas keluar kecuali domain yang dibutuhkan Claude Code dan alat pengembangan Anda. Menjalankan firewall di dalam kontainer memerlukan izin ekstra, jadi referensi menambahkan kemampuan `NET_ADMIN` dan `NET_RAW` melalui `runArgs`. Skrip firewall dan kemampuan ini tidak diperlukan untuk Claude Code itu sendiri: Anda dapat meninggalkannya dan mengandalkan kontrol jaringan Anda sendiri.

142 

143## Jalankan tanpa permintaan izin

144 

145Karena kontainer menjalankan Claude Code sebagai pengguna non-root dan membatasi eksekusi perintah ke kontainer, Anda dapat melewatkan `--dangerously-skip-permissions` untuk operasi tanpa pengawasan. CLI menolak flag ini saat diluncurkan sebagai root, jadi konfirmasi `remoteUser` diatur ke akun non-root.

146 

147Melewatkan permintaan izin menghilangkan kesempatan Anda untuk meninjau panggilan alat sebelum dijalankan. Claude masih dapat memodifikasi file apa pun di workspace yang di-bind-mount, yang muncul langsung di host Anda, dan menjangkau apa pun yang diizinkan kebijakan jaringan kontainer. Pasangkan flag ini dengan [pembatasan egress jaringan](#restrict-network-egress) di atas untuk membatasi apa yang dapat dijangkau sesi yang dilewati.

148 

149Jika Anda menginginkan lebih sedikit permintaan tanpa menonaktifkan pemeriksaan keamanan, pertimbangkan [mode otomatis](/id/permission-modes#eliminate-prompts-with-auto-mode), yang memiliki pengklasifikasi meninjau tindakan sebelum dijalankan. Untuk mencegah insinyur menggunakan `--dangerously-skip-permissions` sama sekali, atur `permissions.disableBypassPermissionsMode` ke `"disable"` dalam [pengaturan terkelola](/id/settings#permission-settings).

150 

151## Coba kontainer referensi

152 

153Repositori [`anthropics/claude-code`](https://github.com/anthropics/claude-code/tree/main/.devcontainer) mencakup contoh dev container yang menggabungkan CLI, firewall egress, volume persisten, dan shell berbasis Zsh. Ini disediakan sebagai contoh kerja daripada citra dasar yang dipertahankan; gunakan untuk melihat bagaimana potongan-potongan cocok bersama sebelum menerapkannya ke konfigurasi Anda sendiri.

154 

155<Steps>

156 <Step title="Instal prasyarat">

157 Instal VS Code dan [ekstensi Dev Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers).

158 </Step>

159 

160 <Step title="Kloning referensi">

161 Kloning [repositori Claude Code](https://github.com/anthropics/claude-code) dan buka di VS Code.

162 </Step>

163 

164 <Step title="Buka kembali di kontainer">

165 Ketika diminta, klik **Reopen in Container**, atau jalankan **Dev Containers: Reopen in Container** dari Command Palette.

166 </Step>

167 

168 <Step title="Mulai Claude Code">

169 Setelah kontainer selesai dibangun, buka terminal dengan `` Ctrl+` `` dan jalankan `claude` untuk masuk dan mulai sesi pertama Anda.

170 </Step>

171</Steps>

172 

173Untuk menggunakan konfigurasi ini dengan proyek Anda sendiri, salin direktori `.devcontainer/` ke repositori Anda dan sesuaikan Dockerfile untuk toolchain Anda, atau kembali ke [Tambahkan Claude Code ke dev container Anda](#add-claude-code-to-your-dev-container) untuk menambahkan hanya fitur ke setup yang sudah Anda miliki.

174 

175Konfigurasi referensi terdiri dari tiga file. Tidak satupun dari mereka diperlukan saat Anda menambahkan Claude Code ke dev container Anda sendiri melalui fitur, tetapi mereka menunjukkan satu cara untuk menggabungkan potongan-potongan.

176 

177| File | Tujuan |

178| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |

179| [`devcontainer.json`](https://github.com/anthropics/claude-code/blob/main/.devcontainer/devcontainer.json) | Pemasangan volume, kemampuan `runArgs`, ekstensi VS Code, dan `containerEnv` |

180| [`Dockerfile`](https://github.com/anthropics/claude-code/blob/main/.devcontainer/Dockerfile) | Citra dasar, alat pengembangan, dan instalasi Claude Code |

181| [`init-firewall.sh`](https://github.com/anthropics/claude-code/blob/main/.devcontainer/init-firewall.sh) | Memblokir semua lalu lintas jaringan keluar kecuali domain yang diizinkan |

182 

183## Langkah berikutnya

184 

185Setelah Claude Code berjalan di dev container Anda, halaman di bawah mencakup sisa peluncuran organisasi: memilih jalur autentikasi, memberikan kebijakan terkelola di luar repositori, memantau penggunaan, dan memahami apa yang disimpan dan dikirim Claude Code.

186 

187* [Atur Claude Code untuk organisasi Anda](/id/admin-setup): pilih penyedia autentikasi, putuskan bagaimana kebijakan mencapai perangkat, dan rencanakan peluncuran

188* [Pengaturan yang dikelola server](/id/server-managed-settings): berikan kebijakan terkelola dari konsol admin Claude.ai sehingga insinyur tidak dapat melewatinya dengan mengedit file repositori

189* [Pantau penggunaan dan aktivitas audit](/id/monitoring-usage): ekspor metrik OpenTelemetry dan tinjau apa yang dijalankan tim Anda

190* [Persyaratan akses jaringan](/id/network-config#network-access-requirements): daftar domain lengkap untuk proxy dan firewall

191* [Layanan telemetri dan opt-out](/id/data-usage#telemetry-services): apa yang dikirim Claude Code secara default dan variabel lingkungan yang menonaktifkannya

192* [Jelajahi direktori `.claude`](/id/claude-directory): apa yang disimpan pemasangan volume, termasuk kredensial, pengaturan, dan riwayat sesi

193* [Model keamanan](/id/security): bagaimana sistem izin Claude Code, sandboxing, dan perlindungan injeksi prompt cocok bersama

194* [Mode izin](/id/permission-modes): rentang lengkap dari mode rencana ke mode otomatis ke bypass, dan kapan menggunakan masing-masing

discover-plugins.md +427 −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# Temukan dan instal plugin yang sudah dibuat melalui marketplace

6 

7> Temukan dan instal plugin dari marketplace untuk memperluas Claude Code dengan perintah, agen, dan kemampuan baru.

8 

9Plugin memperluas Claude Code dengan skills, agen, hooks, dan MCP servers. Plugin marketplace adalah katalog yang membantu Anda menemukan dan menginstal ekstensi ini tanpa membuatnya sendiri.

10 

11Mencari cara membuat dan mendistribusikan marketplace Anda sendiri? Lihat [Buat dan distribusikan plugin marketplace](/id/plugin-marketplaces).

12 

13## Cara kerja marketplace

14 

15Marketplace adalah katalog plugin yang telah dibuat dan dibagikan oleh orang lain. Menggunakan marketplace adalah proses dua langkah:

16 

17<Steps>

18 <Step title="Tambahkan marketplace">

19 Ini mendaftarkan katalog dengan Claude Code sehingga Anda dapat menjelajahi apa yang tersedia. Tidak ada plugin yang diinstal lagi.

20 </Step>

21 

22 <Step title="Instal plugin individual">

23 Jelajahi katalog dan instal plugin yang Anda inginkan.

24 </Step>

25</Steps>

26 

27Anggap saja seperti menambahkan app store: menambahkan toko memberi Anda akses untuk menjelajahi koleksinya, tetapi Anda masih memilih aplikasi mana yang akan diunduh secara individual.

28 

29## Official Anthropic marketplace

30 

31Official Anthropic marketplace (`claude-plugins-official`) secara otomatis tersedia saat Anda memulai Claude Code. Jalankan `/plugin` dan buka tab **Discover** untuk menjelajahi apa yang tersedia, atau lihat katalog di [claude.com/plugins](https://claude.com/plugins).

32 

33Untuk menginstal plugin dari official marketplace, gunakan `/plugin install <name>@claude-plugins-official`. Misalnya, untuk menginstal integrasi GitHub:

34 

35```shell theme={null}

36/plugin install github@claude-plugins-official

37```

38 

39<Note>

40 Official marketplace dikelola oleh Anthropic. Untuk mengirimkan plugin ke official marketplace, gunakan salah satu formulir pengajuan dalam aplikasi:

41 

42 * **Claude.ai**: [claude.ai/settings/plugins/submit](https://claude.ai/settings/plugins/submit)

43 * **Console**: [platform.claude.com/plugins/submit](https://platform.claude.com/plugins/submit)

44 

45 Untuk mendistribusikan plugin secara independen, [buat marketplace Anda sendiri](/id/plugin-marketplaces) dan bagikan dengan pengguna.

46</Note>

47 

48Official marketplace mencakup beberapa kategori plugin:

49 

50### Code intelligence

51 

52Plugin code intelligence mengaktifkan alat LSP bawaan Claude Code, memberikan Claude kemampuan untuk melompat ke definisi, menemukan referensi, dan melihat kesalahan tipe segera setelah edit. Plugin ini mengonfigurasi koneksi [Language Server Protocol](https://microsoft.github.io/language-server-protocol/), teknologi yang sama yang mendukung code intelligence VS Code.

53 

54Plugin ini memerlukan binary language server untuk diinstal di sistem Anda. Jika Anda sudah memiliki language server yang diinstal, Claude mungkin akan meminta Anda untuk menginstal plugin yang sesuai saat Anda membuka proyek.

55 

56| Language | Plugin | Binary required |

57| :--------- | :------------------ | :--------------------------- |

58| C/C++ | `clangd-lsp` | `clangd` |

59| C# | `csharp-lsp` | `csharp-ls` |

60| Go | `gopls-lsp` | `gopls` |

61| Java | `jdtls-lsp` | `jdtls` |

62| Kotlin | `kotlin-lsp` | `kotlin-language-server` |

63| Lua | `lua-lsp` | `lua-language-server` |

64| PHP | `php-lsp` | `intelephense` |

65| Python | `pyright-lsp` | `pyright-langserver` |

66| Rust | `rust-analyzer-lsp` | `rust-analyzer` |

67| Swift | `swift-lsp` | `sourcekit-lsp` |

68| TypeScript | `typescript-lsp` | `typescript-language-server` |

69 

70Anda juga dapat [membuat plugin LSP Anda sendiri](/id/plugins-reference#lsp-servers) untuk bahasa lain.

71 

72<Note>

73 Jika Anda melihat `Executable not found in $PATH` di tab `/plugin` Errors setelah menginstal plugin, instal binary yang diperlukan dari tabel di atas.

74</Note>

75 

76#### Apa yang Claude dapatkan dari plugin code intelligence

77 

78Setelah plugin code intelligence diinstal dan binary language server-nya tersedia, Claude mendapatkan dua kemampuan:

79 

80* **Automatic diagnostics**: setelah setiap edit file yang dilakukan Claude, language server menganalisis perubahan dan melaporkan kesalahan dan peringatan secara otomatis. Claude melihat kesalahan tipe, impor yang hilang, dan masalah sintaks tanpa perlu menjalankan compiler atau linter. Jika Claude memperkenalkan kesalahan, itu akan menyadari dan memperbaiki masalah dalam giliran yang sama. Ini tidak memerlukan konfigurasi apa pun selain menginstal plugin. Anda dapat melihat diagnostik secara inline dengan menekan **Ctrl+O** saat indikator "diagnostics found" muncul.

81* **Code navigation**: Claude dapat menggunakan language server untuk melompat ke definisi, menemukan referensi, mendapatkan informasi tipe saat hover, membuat daftar simbol, menemukan implementasi, dan melacak hierarki panggilan. Operasi ini memberikan Claude navigasi yang lebih presisi daripada pencarian berbasis grep, meskipun ketersediaan mungkin berbeda menurut bahasa dan lingkungan.

82 

83Jika Anda mengalami masalah, lihat [Code intelligence troubleshooting](#code-intelligence-issues).

84 

85### External integrations

86 

87Plugin ini menggabungkan [MCP servers](/id/mcp) yang sudah dikonfigurasi sebelumnya sehingga Anda dapat menghubungkan Claude ke layanan eksternal tanpa setup manual:

88 

89* **Source control**: `github`, `gitlab`

90* **Project management**: `atlassian` (Jira/Confluence), `asana`, `linear`, `notion`

91* **Design**: `figma`

92* **Infrastructure**: `vercel`, `firebase`, `supabase`

93* **Communication**: `slack`

94* **Monitoring**: `sentry`

95 

96### Development workflows

97 

98Plugin yang menambahkan perintah dan agen untuk tugas pengembangan umum:

99 

100* **commit-commands**: Git commit workflows termasuk commit, push, dan pembuatan PR

101* **pr-review-toolkit**: Agen khusus untuk meninjau pull request

102* **agent-sdk-dev**: Tools untuk membangun dengan Claude Agent SDK

103* **plugin-dev**: Toolkit untuk membuat plugin Anda sendiri

104 

105### Output styles

106 

107Sesuaikan cara Claude merespons:

108 

109* **explanatory-output-style**: Wawasan edukatif tentang pilihan implementasi

110* **learning-output-style**: Mode pembelajaran interaktif untuk membangun skill

111 

112## Coba: tambahkan demo marketplace

113 

114Anthropic juga memelihara [demo plugins marketplace](https://github.com/anthropics/claude-code/tree/main/plugins) (`claude-code-plugins`) dengan plugin contoh yang menunjukkan apa yang mungkin dengan sistem plugin. Tidak seperti official marketplace, Anda perlu menambahkan ini secara manual.

115 

116<Steps>

117 <Step title="Tambahkan marketplace">

118 Dari dalam Claude Code, jalankan perintah `plugin marketplace add` untuk marketplace `anthropics/claude-code`:

119 

120 ```shell theme={null}

121 /plugin marketplace add anthropics/claude-code

122 ```

123 

124 Ini mengunduh katalog marketplace dan membuat plugin-nya tersedia untuk Anda.

125 </Step>

126 

127 <Step title="Jelajahi plugin yang tersedia">

128 Jalankan `/plugin` untuk membuka plugin manager. Ini membuka antarmuka bertab dengan empat tab yang dapat Anda siklus menggunakan **Tab** (atau **Shift+Tab** untuk mundur):

129 

130 * **Discover**: jelajahi plugin yang tersedia dari semua marketplace Anda

131 * **Installed**: lihat dan kelola plugin yang diinstal

132 * **Marketplaces**: tambah, hapus, atau perbarui marketplace yang ditambahkan

133 * **Errors**: lihat kesalahan pemuatan plugin apa pun

134 

135 Buka tab **Discover** untuk melihat plugin dari marketplace yang baru saja Anda tambahkan.

136 </Step>

137 

138 <Step title="Instal plugin">

139 Pilih plugin untuk melihat detailnya, kemudian pilih cakupan instalasi:

140 

141 * **User scope**: instal untuk diri sendiri di semua proyek

142 * **Project scope**: instal untuk semua kolaborator di repositori ini

143 * **Local scope**: instal untuk diri sendiri di repositori ini saja

144 

145 Misalnya, pilih **commit-commands** (plugin yang menambahkan perintah alur kerja git) dan instal ke cakupan pengguna Anda.

146 

147 Anda juga dapat menginstal langsung dari baris perintah:

148 

149 ```shell theme={null}

150 /plugin install commit-commands@anthropics-claude-code

151 ```

152 

153 Lihat [Configuration scopes](/id/settings#configuration-scopes) untuk mempelajari lebih lanjut tentang cakupan.

154 </Step>

155 

156 <Step title="Gunakan plugin baru Anda">

157 Setelah menginstal, jalankan `/reload-plugins` untuk mengaktifkan plugin. Perintah plugin diberi namespace oleh nama plugin, jadi **commit-commands** menyediakan perintah seperti `/commit-commands:commit`.

158 

159 Coba dengan membuat perubahan pada file dan menjalankan:

160 

161 ```shell theme={null}

162 /commit-commands:commit

163 ```

164 

165 Ini menampilkan perubahan Anda, menghasilkan pesan commit, dan membuat commit.

166 

167 Setiap plugin bekerja berbeda. Periksa deskripsi plugin di tab **Discover** atau homepage-nya untuk mempelajari perintah dan kemampuan apa yang disediakan.

168 </Step>

169</Steps>

170 

171Sisa panduan ini mencakup semua cara Anda dapat menambahkan marketplace, menginstal plugin, dan mengelola konfigurasi Anda.

172 

173## Tambahkan marketplace

174 

175Gunakan perintah `/plugin marketplace add` untuk menambahkan marketplace dari sumber yang berbeda.

176 

177<Tip>

178 **Shortcuts**: Anda dapat menggunakan `/plugin market` sebagai ganti `/plugin marketplace`, dan `rm` sebagai ganti `remove`.

179</Tip>

180 

181* **GitHub repositories**: format `owner/repo` (misalnya, `anthropics/claude-code`)

182* **Git URLs**: URL repositori git apa pun (GitLab, Bitbucket, self-hosted)

183* **Local paths**: direktori atau jalur langsung ke file `marketplace.json`

184* **Remote URLs**: URL langsung ke file `marketplace.json` yang dihosting

185 

186### Tambahkan dari GitHub

187 

188Tambahkan repositori GitHub yang berisi file `.claude-plugin/marketplace.json` menggunakan format `owner/repo`—di mana `owner` adalah nama pengguna atau organisasi GitHub dan `repo` adalah nama repositori.

189 

190Misalnya, `anthropics/claude-code` merujuk ke repositori `claude-code` yang dimiliki oleh `anthropics`:

191 

192```shell theme={null}

193/plugin marketplace add anthropics/claude-code

194```

195 

196### Tambahkan dari host Git lainnya

197 

198Tambahkan repositori git apa pun dengan memberikan URL lengkap. Ini bekerja dengan host Git apa pun, termasuk GitLab, Bitbucket, dan server self-hosted:

199 

200Menggunakan HTTPS:

201 

202```shell theme={null}

203/plugin marketplace add https://gitlab.com/company/plugins.git

204```

205 

206Menggunakan SSH:

207 

208```shell theme={null}

209/plugin marketplace add git@gitlab.com:company/plugins.git

210```

211 

212Untuk menambahkan cabang atau tag tertentu, tambahkan `#` diikuti oleh ref:

213 

214```shell theme={null}

215/plugin marketplace add https://gitlab.com/company/plugins.git#v1.0.0

216```

217 

218### Tambahkan dari jalur lokal

219 

220Tambahkan direktori lokal yang berisi file `.claude-plugin/marketplace.json`:

221 

222```shell theme={null}

223/plugin marketplace add ./my-marketplace

224```

225 

226Anda juga dapat menambahkan jalur langsung ke file `marketplace.json`:

227 

228```shell theme={null}

229/plugin marketplace add ./path/to/marketplace.json

230```

231 

232### Tambahkan dari URL jarak jauh

233 

234Tambahkan file `marketplace.json` jarak jauh melalui URL:

235 

236```shell theme={null}

237/plugin marketplace add https://example.com/marketplace.json

238```

239 

240<Note>

241 Marketplace berbasis URL memiliki beberapa keterbatasan dibandingkan dengan marketplace berbasis Git. Jika Anda mengalami kesalahan "path not found" saat menginstal plugin, lihat [Troubleshooting](/id/plugin-marketplaces#plugins-with-relative-paths-fail-in-url-based-marketplaces).

242</Note>

243 

244## Instal plugin

245 

246Setelah Anda menambahkan marketplace, Anda dapat menginstal plugin secara langsung (menginstal ke cakupan pengguna secara default):

247 

248```shell theme={null}

249/plugin install plugin-name@marketplace-name

250```

251 

252Untuk memilih [cakupan instalasi](/id/settings#configuration-scopes) yang berbeda, gunakan UI interaktif: jalankan `/plugin`, buka tab **Discover**, dan tekan **Enter** pada plugin. Anda akan melihat opsi untuk:

253 

254* **User scope** (default): instal untuk diri sendiri di semua proyek

255* **Project scope**: instal untuk semua kolaborator di repositori ini (menambahkan ke `.claude/settings.json`)

256* **Local scope**: instal untuk diri sendiri di repositori ini saja (tidak dibagikan dengan kolaborator)

257 

258Anda juga dapat melihat plugin dengan cakupan **managed**—ini diinstal oleh administrator melalui [managed settings](/id/settings#settings-files) dan tidak dapat dimodifikasi.

259 

260Jalankan `/plugin` dan buka tab **Installed** untuk melihat plugin Anda dikelompokkan menurut cakupan.

261 

262<Warning>

263 Pastikan Anda mempercayai plugin sebelum menginstalnya. Anthropic tidak mengontrol MCP servers, file, atau perangkat lunak lain apa yang disertakan dalam plugin dan tidak dapat memverifikasi bahwa mereka bekerja seperti yang dimaksudkan. Periksa homepage setiap plugin untuk informasi lebih lanjut.

264</Warning>

265 

266## Kelola plugin yang diinstal

267 

268Jalankan `/plugin` dan buka tab **Installed** untuk melihat, mengaktifkan, menonaktifkan, atau menghapus plugin Anda. Ketik untuk memfilter daftar berdasarkan nama atau deskripsi plugin.

269 

270Anda juga dapat mengelola plugin dengan perintah langsung.

271 

272Nonaktifkan plugin tanpa menghapusnya:

273 

274```shell theme={null}

275/plugin disable plugin-name@marketplace-name

276```

277 

278Aktifkan kembali plugin yang dinonaktifkan:

279 

280```shell theme={null}

281/plugin enable plugin-name@marketplace-name

282```

283 

284Hapus plugin sepenuhnya:

285 

286```shell theme={null}

287/plugin uninstall plugin-name@marketplace-name

288```

289 

290Opsi `--scope` memungkinkan Anda menargetkan cakupan tertentu dengan perintah CLI:

291 

292```shell theme={null}

293claude plugin install formatter@your-org --scope project

294claude plugin uninstall formatter@your-org --scope project

295```

296 

297### Terapkan perubahan plugin tanpa restart

298 

299Saat Anda menginstal, mengaktifkan, atau menonaktifkan plugin selama sesi, jalankan `/reload-plugins` untuk mengambil semua perubahan tanpa restart:

300 

301```shell theme={null}

302/reload-plugins

303```

304 

305Claude Code memuat ulang semua plugin aktif dan menampilkan hitungan untuk plugin, skills, agen, hooks, server MCP plugin, dan server LSP plugin.

306 

307## Kelola marketplace

308 

309Anda dapat mengelola marketplace melalui antarmuka `/plugin` interaktif atau dengan perintah CLI.

310 

311### Gunakan antarmuka interaktif

312 

313Jalankan `/plugin` dan buka tab **Marketplaces** untuk:

314 

315* Lihat semua marketplace yang ditambahkan dengan sumber dan statusnya

316* Tambahkan marketplace baru

317* Perbarui daftar marketplace untuk mengambil plugin terbaru

318* Hapus marketplace yang tidak lagi Anda butuhkan

319 

320### Gunakan perintah CLI

321 

322Anda juga dapat mengelola marketplace dengan perintah langsung.

323 

324Daftar semua marketplace yang dikonfigurasi:

325 

326```shell theme={null}

327/plugin marketplace list

328```

329 

330Segarkan daftar plugin dari marketplace:

331 

332```shell theme={null}

333/plugin marketplace update marketplace-name

334```

335 

336Hapus marketplace:

337 

338```shell theme={null}

339/plugin marketplace remove marketplace-name

340```

341 

342<Warning>

343 Menghapus marketplace akan menghapus instalasi plugin apa pun yang Anda instal darinya.

344</Warning>

345 

346### Konfigurasi auto-updates

347 

348Claude Code dapat secara otomatis memperbarui marketplace dan plugin yang diinstal saat startup. Saat auto-update diaktifkan untuk marketplace, Claude Code menyegarkan data marketplace dan memperbarui plugin yang diinstal ke versi terbaru mereka. Jika ada plugin yang diperbarui, Anda akan melihat notifikasi yang meminta Anda untuk menjalankan `/reload-plugins`.

349 

350Alihkan auto-update untuk marketplace individual melalui UI:

351 

3521. Jalankan `/plugin` untuk membuka plugin manager

3532. Pilih **Marketplaces**

3543. Pilih marketplace dari daftar

3554. Pilih **Enable auto-update** atau **Disable auto-update**

356 

357Official Anthropic marketplace memiliki auto-update diaktifkan secara default. Marketplace pihak ketiga dan pengembangan lokal memiliki auto-update dinonaktifkan secara default.

358 

359Untuk menonaktifkan semua pembaruan otomatis sepenuhnya untuk Claude Code dan semua plugin, atur variabel lingkungan `DISABLE_AUTOUPDATER`. Lihat [Auto updates](/id/setup#auto-updates) untuk detail.

360 

361Untuk menjaga plugin auto-updates tetap diaktifkan sambil menonaktifkan Claude Code auto-updates, atur `FORCE_AUTOUPDATE_PLUGINS=1` bersama dengan `DISABLE_AUTOUPDATER`:

362 

363```bash theme={null}

364export DISABLE_AUTOUPDATER=1

365export FORCE_AUTOUPDATE_PLUGINS=1

366```

367 

368Ini berguna saat Anda ingin mengelola pembaruan Claude Code secara manual tetapi masih menerima pembaruan plugin otomatis.

369 

370## Konfigurasi team marketplace

371 

372Admin tim dapat menyiapkan instalasi marketplace otomatis untuk proyek dengan menambahkan konfigurasi marketplace ke `.claude/settings.json`. Saat anggota tim mempercayai folder repositori, Claude Code meminta mereka untuk menginstal marketplace dan plugin ini.

373 

374Tambahkan `extraKnownMarketplaces` ke `.claude/settings.json` proyek Anda:

375 

376```json theme={null}

377{

378 "extraKnownMarketplaces": {

379 "my-team-tools": {

380 "source": {

381 "source": "github",

382 "repo": "your-org/claude-plugins"

383 }

384 }

385 }

386}

387```

388 

389Untuk opsi konfigurasi lengkap termasuk `extraKnownMarketplaces` dan `enabledPlugins`, lihat [Plugin settings](/id/settings#plugin-settings).

390 

391## Security

392 

393Plugin dan marketplace adalah komponen yang sangat dipercaya yang dapat menjalankan kode arbitrer di mesin Anda dengan hak istimewa pengguna Anda. Hanya instal plugin dan tambahkan marketplace dari sumber yang Anda percayai. Organisasi dapat membatasi marketplace mana yang diizinkan pengguna untuk ditambahkan menggunakan [managed marketplace restrictions](/id/plugin-marketplaces#managed-marketplace-restrictions).

394 

395## Troubleshooting

396 

397### /plugin command not recognized

398 

399Jika Anda melihat "unknown command" atau perintah `/plugin` tidak muncul:

400 

4011. **Periksa versi Anda**: Jalankan `claude --version` untuk melihat apa yang diinstal.

4022. **Perbarui Claude Code**:

403 * **Homebrew**: `brew upgrade claude-code`

404 * **npm**: `npm update -g @anthropic-ai/claude-code`

405 * **Native installer**: Jalankan kembali perintah install dari [Setup](/id/setup)

4063. **Restart Claude Code**: Setelah memperbarui, restart terminal Anda dan jalankan `claude` lagi.

407 

408### Common issues

409 

410* **Marketplace not loading**: Verifikasi URL dapat diakses dan bahwa `.claude-plugin/marketplace.json` ada di jalur

411* **Plugin installation failures**: Periksa bahwa URL sumber plugin dapat diakses dan repositori bersifat publik (atau Anda memiliki akses)

412* **Files not found after installation**: Plugin disalin ke cache, jadi jalur yang mereferensikan file di luar direktori plugin tidak akan berfungsi

413* **Plugin skills not appearing**: Hapus cache dengan `rm -rf ~/.claude/plugins/cache`, restart Claude Code, dan instal ulang plugin.

414 

415Untuk troubleshooting terperinci dengan solusi, lihat [Troubleshooting](/id/plugin-marketplaces#troubleshooting) dalam panduan marketplace. Untuk tools debugging, lihat [Debugging and development tools](/id/plugins-reference#debugging-and-development-tools).

416 

417### Code intelligence issues

418 

419* **Language server not starting**: verifikasi binary diinstal dan tersedia di `$PATH` Anda. Periksa tab `/plugin` Errors untuk detail.

420* **High memory usage**: language server seperti `rust-analyzer` dan `pyright` dapat mengonsumsi memori signifikan pada proyek besar. Jika Anda mengalami masalah memori, nonaktifkan plugin dengan `/plugin disable <plugin-name>` dan andalkan tools pencarian bawaan Claude sebagai gantinya.

421* **False positive diagnostics in monorepos**: language server mungkin melaporkan kesalahan impor yang tidak terselesaikan untuk paket internal jika workspace tidak dikonfigurasi dengan benar. Ini tidak mempengaruhi kemampuan Claude untuk mengedit kode.

422 

423## Next steps

424 

425* **Build your own plugins**: Lihat [Plugins](/id/plugins) untuk membuat skills, agen, dan hooks

426* **Create a marketplace**: Lihat [Create a plugin marketplace](/id/plugin-marketplaces) untuk mendistribusikan plugin ke tim atau komunitas Anda

427* **Technical reference**: Lihat [Plugins reference](/id/plugins-reference) untuk spesifikasi lengkap

env-vars.md +238 −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# Variabel lingkungan

6 

7> Referensi lengkap untuk variabel lingkungan yang mengontrol perilaku Claude Code.

8 

9Claude Code mendukung variabel lingkungan berikut untuk mengontrol perilakunya. Atur variabel ini di shell Anda sebelum meluncurkan `claude`, atau konfigurasikan di [`settings.json`](/id/settings#available-settings) di bawah kunci `env` untuk menerapkannya ke setiap sesi atau menerapkannya di seluruh tim Anda.

10 

11| Variabel | Tujuan |

12| :------------------------------------------------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

13| `ANTHROPIC_API_KEY` | Kunci API yang dikirim sebagai header `X-Api-Key`. Saat diatur, kunci ini digunakan alih-alih langganan Claude Pro, Max, Team, atau Enterprise Anda bahkan jika Anda sudah masuk. Dalam mode non-interaktif (`-p`), kunci selalu digunakan saat ada. Dalam mode interaktif, Anda diminta untuk menyetujui kunci sekali sebelum mengganti langganan Anda. Untuk menggunakan langganan Anda sebagai gantinya, jalankan `unset ANTHROPIC_API_KEY` |

14| `ANTHROPIC_AUTH_TOKEN` | Nilai kustom untuk header `Authorization` (nilai yang Anda atur di sini akan diawali dengan `Bearer `) |

15| `ANTHROPIC_BASE_URL` | Ganti titik akhir API untuk merutekan permintaan melalui proxy atau gateway. Saat diatur ke host non-pihak pertama, [pencarian alat MCP](/id/mcp#scale-with-mcp-tool-search) dinonaktifkan secara default. Atur `ENABLE_TOOL_SEARCH=true` jika proxy Anda meneruskan blok `tool_reference` |

16| `ANTHROPIC_BEDROCK_BASE_URL` | Ganti URL titik akhir Bedrock. Gunakan untuk titik akhir Bedrock kustom atau saat merutekan melalui [gateway LLM](/id/llm-gateway). Lihat [Amazon Bedrock](/id/amazon-bedrock) |

17| `ANTHROPIC_BEDROCK_MANTLE_BASE_URL` | Ganti URL titik akhir Bedrock Mantle. Lihat [titik akhir Mantle](/id/amazon-bedrock#use-the-mantle-endpoint) |

18| `ANTHROPIC_BEDROCK_SERVICE_TIER` | Bedrock [service tier](https://docs.aws.amazon.com/bedrock/latest/userguide/service-tiers-inference.html) (`default`, `flex`, atau `priority`). Dikirim sebagai header `X-Amzn-Bedrock-Service-Tier`. Lihat [Amazon Bedrock](/id/amazon-bedrock#service-tiers) |

19| `ANTHROPIC_BETAS` | Daftar nilai header `anthropic-beta` tambahan yang dipisahkan koma untuk disertakan dalam permintaan API. Claude Code sudah mengirim header beta yang dibutuhkannya; gunakan ini untuk memilih [beta API Anthropic](https://platform.claude.com/docs/en/api/beta-headers) sebelum Claude Code menambahkan dukungan asli. Tidak seperti [flag `--betas`](/id/cli-reference#cli-flags), yang memerlukan autentikasi kunci API, variabel ini bekerja dengan semua metode auth termasuk langganan Claude.ai |

20| `ANTHROPIC_CUSTOM_HEADERS` | Header kustom untuk ditambahkan ke permintaan (format `Name: Value`, dipisahkan baris baru untuk beberapa header) |

21| `ANTHROPIC_CUSTOM_MODEL_OPTION` | ID model untuk ditambahkan sebagai entri kustom di pemilih `/model`. Gunakan ini untuk membuat model non-standar atau spesifik gateway dapat dipilih tanpa mengganti alias bawaan. Lihat [Konfigurasi Model](/id/model-config#add-a-custom-model-option) |

22| `ANTHROPIC_CUSTOM_MODEL_OPTION_DESCRIPTION` | Deskripsi tampilan untuk entri model kustom di pemilih `/model`. Default ke `Custom model (<model-id>)` saat tidak diatur |

23| `ANTHROPIC_CUSTOM_MODEL_OPTION_NAME` | Nama tampilan untuk entri model kustom di pemilih `/model`. Default ke ID model saat tidak diatur |

24| `ANTHROPIC_CUSTOM_MODEL_OPTION_SUPPORTED_CAPABILITIES` | Lihat [Konfigurasi Model](/id/model-config#customize-pinned-model-display-and-capabilities) |

25| `ANTHROPIC_DEFAULT_HAIKU_MODEL` | Lihat [Konfigurasi Model](/id/model-config#environment-variables) |

26| `ANTHROPIC_DEFAULT_HAIKU_MODEL_DESCRIPTION` | Lihat [Konfigurasi Model](/id/model-config#customize-pinned-model-display-and-capabilities) |

27| `ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME` | Lihat [Konfigurasi Model](/id/model-config#customize-pinned-model-display-and-capabilities) |

28| `ANTHROPIC_DEFAULT_HAIKU_MODEL_SUPPORTED_CAPABILITIES` | Lihat [Konfigurasi Model](/id/model-config#customize-pinned-model-display-and-capabilities) |

29| `ANTHROPIC_DEFAULT_OPUS_MODEL` | Lihat [Konfigurasi Model](/id/model-config#environment-variables) |

30| `ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION` | Lihat [Konfigurasi Model](/id/model-config#customize-pinned-model-display-and-capabilities) |

31| `ANTHROPIC_DEFAULT_OPUS_MODEL_NAME` | Lihat [Konfigurasi Model](/id/model-config#customize-pinned-model-display-and-capabilities) |

32| `ANTHROPIC_DEFAULT_OPUS_MODEL_SUPPORTED_CAPABILITIES` | Lihat [Konfigurasi Model](/id/model-config#customize-pinned-model-display-and-capabilities) |

33| `ANTHROPIC_DEFAULT_SONNET_MODEL` | Lihat [Konfigurasi Model](/id/model-config#environment-variables) |

34| `ANTHROPIC_DEFAULT_SONNET_MODEL_DESCRIPTION` | Lihat [Konfigurasi Model](/id/model-config#customize-pinned-model-display-and-capabilities) |

35| `ANTHROPIC_DEFAULT_SONNET_MODEL_NAME` | Lihat [Konfigurasi Model](/id/model-config#customize-pinned-model-display-and-capabilities) |

36| `ANTHROPIC_DEFAULT_SONNET_MODEL_SUPPORTED_CAPABILITIES` | Lihat [Konfigurasi Model](/id/model-config#customize-pinned-model-display-and-capabilities) |

37| `ANTHROPIC_FOUNDRY_API_KEY` | Kunci API untuk autentikasi Microsoft Foundry (lihat [Microsoft Foundry](/id/microsoft-foundry)) |

38| `ANTHROPIC_FOUNDRY_BASE_URL` | URL dasar lengkap untuk sumber daya Foundry (misalnya, `https://my-resource.services.ai.azure.com/anthropic`). Alternatif untuk `ANTHROPIC_FOUNDRY_RESOURCE` (lihat [Microsoft Foundry](/id/microsoft-foundry)) |

39| `ANTHROPIC_FOUNDRY_RESOURCE` | Nama sumber daya Foundry (misalnya, `my-resource`). Diperlukan jika `ANTHROPIC_FOUNDRY_BASE_URL` tidak diatur (lihat [Microsoft Foundry](/id/microsoft-foundry)) |

40| `ANTHROPIC_MODEL` | Nama pengaturan model yang akan digunakan (lihat [Konfigurasi Model](/id/model-config#environment-variables)) |

41| `ANTHROPIC_SMALL_FAST_MODEL` | \[DEPRECATED] Nama [model kelas Haiku untuk tugas latar belakang](/id/costs) |

42| `ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION` | Ganti wilayah AWS untuk model kelas Haiku saat menggunakan Bedrock atau Bedrock Mantle |

43| `ANTHROPIC_VERTEX_BASE_URL` | Ganti URL titik akhir Vertex AI. Gunakan untuk titik akhir Vertex kustom atau saat merutekan melalui [gateway LLM](/id/llm-gateway). Lihat [Google Vertex AI](/id/google-vertex-ai) |

44| `ANTHROPIC_VERTEX_PROJECT_ID` | ID proyek GCP untuk Vertex AI. Diperlukan saat menggunakan [Google Vertex AI](/id/google-vertex-ai) |

45| `API_TIMEOUT_MS` | Waktu tunggu untuk permintaan API dalam milidetik (default: 600000, atau 10 menit; maksimum: 2147483647). Tingkatkan ini saat permintaan habis waktu pada jaringan lambat atau saat merutekan melalui proxy. Nilai di atas maksimum akan meluap timer yang mendasar dan menyebabkan permintaan gagal segera |

46| `AWS_BEARER_TOKEN_BEDROCK` | Kunci API Bedrock untuk autentikasi (lihat [Kunci API Bedrock](https://aws.amazon.com/blogs/machine-learning/accelerate-ai-development-with-amazon-bedrock-api-keys/)) |

47| `BASH_DEFAULT_TIMEOUT_MS` | Waktu tunggu default untuk perintah bash yang berjalan lama (default: 120000, atau 2 menit) |

48| `BASH_MAX_OUTPUT_LENGTH` | Jumlah maksimal karakter dalam keluaran bash sebelum dipotong di tengah |

49| `BASH_MAX_TIMEOUT_MS` | Waktu tunggu maksimal yang dapat diatur model untuk perintah bash yang berjalan lama (default: 600000, atau 10 menit) |

50| `CCR_FORCE_BUNDLE` | Atur ke `1` untuk memaksa [`claude --remote`](/id/claude-code-on-the-web#send-local-repositories-without-github) untuk menggabungkan dan mengunggah repositori lokal Anda bahkan saat akses GitHub tersedia |

51| `CLAUDECODE` | Atur ke `1` di lingkungan shell yang Claude Code luncurkan (alat Bash, sesi tmux). Tidak diatur di perintah [hooks](/id/hooks) atau [baris status](/id/statusline). Gunakan untuk mendeteksi saat skrip berjalan di dalam shell yang diluncurkan oleh Claude Code |

52| `CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS` | Atur ke `1` untuk menonaktifkan semua tipe [subagent](/id/sub-agents) bawaan seperti Explore dan Plan. Hanya berlaku dalam mode non-interaktif (flag `-p`). Berguna untuk pengguna SDK yang menginginkan slate kosong |

53| `CLAUDE_AGENT_SDK_MCP_NO_PREFIX` | Atur ke `1` untuk melewati awalan `mcp__<server>__` pada nama alat dari server MCP yang dibuat SDK. Alat menggunakan nama asli mereka. Penggunaan SDK saja |

54| `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` | Atur persentase kapasitas konteks (1-100) di mana pemadatan otomatis dipicu. Secara default, pemadatan otomatis dipicu pada kapasitas sekitar 95%. Gunakan nilai yang lebih rendah seperti `50` untuk memadatkan lebih awal. Nilai di atas ambang batas default tidak berpengaruh. Berlaku untuk percakapan utama dan subagent. Persentase ini selaras dengan bidang `context_window.used_percentage` yang tersedia di [baris status](/id/statusline) |

55| `CLAUDE_AUTO_BACKGROUND_TASKS` | Atur ke `1` untuk memaksa pengaktifan backgrounding otomatis tugas agent yang berjalan lama. Saat diaktifkan, subagent dipindahkan ke latar belakang setelah berjalan selama sekitar dua menit |

56| `CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR` | Kembali ke direktori kerja asli setelah setiap perintah Bash atau PowerShell dalam sesi utama |

57| `CLAUDE_CODE_ACCESSIBILITY` | Atur ke `1` untuk menjaga kursor terminal asli tetap terlihat dan menonaktifkan indikator kursor teks terbalik. Memungkinkan pembesar layar seperti macOS Zoom untuk melacak posisi kursor |

58| `CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD` | Atur ke `1` untuk memuat file memori dari direktori yang ditentukan dengan `--add-dir`. Memuat `CLAUDE.md`, `.claude/CLAUDE.md`, `.claude/rules/*.md`, dan `CLAUDE.local.md`. Secara default, direktori tambahan tidak memuat file memori |

59| `CLAUDE_CODE_API_KEY_HELPER_TTL_MS` | Interval dalam milidetik di mana kredensial harus disegarkan (saat menggunakan [`apiKeyHelper`](/id/settings#available-settings)) |

60| `CLAUDE_CODE_ATTRIBUTION_HEADER` | Atur ke `0` untuk menghilangkan blok atribusi (versi klien dan sidik jari prompt) dari awal prompt sistem. Menonaktifkannya meningkatkan tingkat hit cache prompt saat merutekan melalui [gateway LLM](/id/llm-gateway). Caching API Anthropic tidak terpengaruh |

61| `CLAUDE_CODE_AUTO_COMPACT_WINDOW` | Atur kapasitas konteks dalam token yang digunakan untuk perhitungan pemadatan otomatis. Default ke jendela konteks model: 200K untuk model standar atau 1M untuk model [konteks diperluas](/id/model-config#extended-context). Gunakan nilai yang lebih rendah seperti `500000` pada model 1M untuk memperlakukan jendela sebagai 500K untuk tujuan pemadatan. Nilai dibatasi pada jendela konteks aktual model. `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` diterapkan sebagai persentase dari nilai ini. Mengatur variabel ini memisahkan ambang batas pemadatan dari `used_percentage` baris status, yang selalu menggunakan jendela konteks penuh model |

62| `CLAUDE_CODE_AUTO_CONNECT_IDE` | Ganti [koneksi IDE](/id/vs-code) otomatis. Secara default, Claude Code terhubung secara otomatis saat diluncurkan di dalam terminal terintegrasi IDE yang didukung. Atur ke `false` untuk mencegah ini. Atur ke `true` untuk memaksa upaya koneksi saat deteksi otomatis gagal, seperti saat tmux mengaburkan terminal induk |

63| `CLAUDE_CODE_CERT_STORE` | Daftar sumber sertifikat CA yang dipisahkan koma untuk koneksi TLS. `bundled` adalah set Mozilla CA yang dikirim dengan Claude Code. `system` adalah penyimpanan kepercayaan sistem operasi. Default adalah `bundled,system`. Distribusi biner asli diperlukan untuk integrasi penyimpanan sistem. Pada runtime Node.js, hanya set bundel yang digunakan terlepas dari nilai ini |

64| `CLAUDE_CODE_CLIENT_CERT` | Jalur ke file sertifikat klien untuk autentikasi mTLS |

65| `CLAUDE_CODE_CLIENT_KEY` | Jalur ke file kunci pribadi klien untuk autentikasi mTLS |

66| `CLAUDE_CODE_CLIENT_KEY_PASSPHRASE` | Frasa sandi untuk `CLAUDE_CODE_CLIENT_KEY` terenkripsi (opsional) |

67| `CLAUDE_CODE_DEBUG_LOGS_DIR` | Ganti jalur file log debug. Meskipun namanya, ini adalah jalur file, bukan direktori. Memerlukan mode debug diaktifkan secara terpisah melalui `--debug` atau `/debug`: mengatur variabel ini saja tidak mengaktifkan logging. Flag [`--debug-file`](/id/cli-reference#cli-flags) melakukan keduanya sekaligus. Default ke `~/.claude/debug/<session-id>.txt` |

68| `CLAUDE_CODE_DEBUG_LOG_LEVEL` | Tingkat log minimum yang ditulis ke file log debug. Nilai: `verbose`, `debug` (default), `info`, `warn`, `error`. Atur ke `verbose` untuk menyertakan diagnostik volume tinggi seperti keluaran perintah baris status lengkap, atau naikkan ke `error` untuk mengurangi kebisingan |

69| `CLAUDE_CODE_DISABLE_1M_CONTEXT` | Atur ke `1` untuk menonaktifkan dukungan [jendela konteks 1M](/id/model-config#extended-context). Saat diatur, varian model 1M tidak tersedia di pemilih model. Berguna untuk lingkungan perusahaan dengan persyaratan kepatuhan |

70| `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING` | Atur ke `1` untuk menonaktifkan [penalaran adaptif](/id/model-config#adjust-effort-level) pada Opus 4.6 dan Sonnet 4.6 dan kembali ke anggaran pemikiran tetap yang dikendalikan oleh `MAX_THINKING_TOKENS`. {/* min-version: 2.1.111 */}Tidak berpengaruh pada Opus 4.7, yang selalu menggunakan penalaran adaptif |

71| `CLAUDE_CODE_DISABLE_ATTACHMENTS` | Atur ke `1` untuk menonaktifkan pemrosesan lampiran. Penyebutan file dengan sintaks `@` dikirim sebagai teks biasa alih-alih diperluas menjadi konten file |

72| `CLAUDE_CODE_DISABLE_AUTO_MEMORY` | Atur ke `1` untuk menonaktifkan [memori otomatis](/id/memory#auto-memory). Atur ke `0` untuk memaksa memori otomatis selama peluncuran bertahap. Saat dinonaktifkan, Claude tidak membuat atau memuat file memori otomatis |

73| `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` | Atur ke `1` untuk menonaktifkan semua fungsi tugas latar belakang, termasuk parameter `run_in_background` pada alat Bash dan subagent, auto-backgrounding, dan pintasan Ctrl+B |

74| `CLAUDE_CODE_DISABLE_CLAUDE_MDS` | Atur ke `1` untuk mencegah memuat file memori CLAUDE.md apa pun ke dalam konteks, termasuk file pengguna, proyek, dan memori otomatis |

75| `CLAUDE_CODE_DISABLE_CRON` | Atur ke `1` untuk menonaktifkan [tugas terjadwal](/id/scheduled-tasks). Skill `/loop` dan alat cron menjadi tidak tersedia dan tugas yang sudah dijadwalkan berhenti berfungsi, termasuk tugas yang sudah berjalan di tengah sesi |

76| `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS` | Atur ke `1` untuk menghapus header permintaan `anthropic-beta` spesifik Anthropic dan bidang skema alat beta (seperti `defer_loading` dan `eager_input_streaming`). Gunakan ini saat proxy gateway menolak permintaan dengan kesalahan seperti "Unexpected value(s) for the `anthropic-beta` header" atau "Extra inputs are not permitted". Bidang standar (`name`, `description`, `input_schema`, `cache_control`) dipertahankan. |

77| `CLAUDE_CODE_DISABLE_FAST_MODE` | Atur ke `1` untuk menonaktifkan [mode cepat](/id/fast-mode) |

78| `CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY` | Atur ke `1` untuk menonaktifkan survei kualitas sesi "How is Claude doing?". Survei juga dinonaktifkan saat `DISABLE_TELEMETRY` atau `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` diatur. Lihat [Survei kualitas sesi](/id/data-usage#session-quality-surveys) |

79| `CLAUDE_CODE_DISABLE_FILE_CHECKPOINTING` | Atur ke `1` untuk menonaktifkan file [checkpointing](/id/checkpointing). Perintah `/rewind` tidak akan dapat mengembalikan perubahan kode |

80| `CLAUDE_CODE_DISABLE_GIT_INSTRUCTIONS` | Atur ke `1` untuk menghapus instruksi alur kerja commit dan PR bawaan dan snapshot status git dari prompt sistem Claude. Berguna saat menggunakan skill alur kerja git Anda sendiri. Mengambil alih pengaturan [`includeGitInstructions`](/id/settings#available-settings) saat diatur |

81| `CLAUDE_CODE_DISABLE_LEGACY_MODEL_REMAP` | Atur ke `1` untuk mencegah pemetaan ulang otomatis Opus 4.0 dan 4.1 ke versi Opus saat ini di API Anthropic. Gunakan saat Anda ingin secara sengaja menyematkan model yang lebih lama. Pemetaan ulang tidak berjalan pada Bedrock, Vertex, atau Foundry |

82| `CLAUDE_CODE_DISABLE_MOUSE` | Atur ke `1` untuk menonaktifkan pelacakan mouse dalam [rendering layar penuh](/id/fullscreen). Pengguliran keyboard dengan `PgUp` dan `PgDn` masih berfungsi. Gunakan ini untuk mempertahankan perilaku copy-on-select asli terminal Anda |

83| `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` | Setara dengan pengaturan `DISABLE_AUTOUPDATER`, `DISABLE_FEEDBACK_COMMAND`, `DISABLE_ERROR_REPORTING`, dan `DISABLE_TELEMETRY` |

84| `CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACK` | Atur ke `1` untuk menonaktifkan fallback non-streaming saat permintaan streaming gagal di tengah aliran. Kesalahan streaming menyebar ke lapisan retry sebagai gantinya. Berguna saat proxy atau gateway menyebabkan fallback menghasilkan eksekusi alat duplikat |

85| `CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL` | Atur ke `1` untuk melewati penambahan otomatis marketplace plugin resmi pada run pertama |

86| `CLAUDE_CODE_DISABLE_POLICY_SKILLS` | Atur ke `1` untuk melewati pemuatan skill dari direktori skill terkelola di seluruh sistem. Berguna untuk sesi kontainer atau CI yang tidak boleh memuat skill yang disediakan operator |

87| `CLAUDE_CODE_DISABLE_TERMINAL_TITLE` | Atur ke `1` untuk menonaktifkan pembaruan judul terminal otomatis berdasarkan konteks percakapan |

88| `CLAUDE_CODE_DISABLE_THINKING` | Atur ke `1` untuk memaksa menonaktifkan [extended thinking](https://platform.claude.com/docs/en/build-with-claude/extended-thinking) terlepas dari dukungan model atau pengaturan lainnya. Lebih langsung daripada `MAX_THINKING_TOKENS=0` |

89| `CLAUDE_CODE_DISABLE_VIRTUAL_SCROLL` | Atur ke `1` untuk menonaktifkan pengguliran virtual dalam [rendering layar penuh](/id/fullscreen) dan merender setiap pesan dalam transkrip. Gunakan ini jika pengguliran dalam mode layar penuh menunjukkan wilayah kosong di mana pesan seharusnya muncul |

90| `CLAUDE_CODE_EFFORT_LEVEL` | Atur tingkat upaya untuk model yang didukung. Nilai: `low`, `medium`, `high`, `xhigh`, `max`, atau `auto` untuk menggunakan default model. Tingkat yang tersedia tergantung pada model. Mengambil alih `/effort` dan pengaturan `effortLevel`. Lihat [Sesuaikan tingkat upaya](/id/model-config#adjust-effort-level) |

91| `CLAUDE_CODE_ENABLE_AWAY_SUMMARY` | Ganti ketersediaan [session recap](/id/interactive-mode#session-recap). Atur ke `0` untuk memaksa recap mati terlepas dari toggle `/config`. Atur ke `1` untuk memaksa recap aktif saat [`awaySummaryEnabled`](/id/settings#available-settings) adalah `false`. Mengambil alih pengaturan dan toggle `/config` |

92| `CLAUDE_CODE_ENABLE_BACKGROUND_PLUGIN_REFRESH` | Atur ke `1` untuk menyegarkan status plugin pada batas giliran dalam [mode non-interaktif](/id/headless) setelah instalasi latar belakang selesai. Dimatikan secara default karena penyegaran mengubah prompt sistem di tengah sesi, yang membatalkan [prompt caching](https://platform.claude.com/docs/en/build-with-claude/prompt-caching) untuk giliran itu |

93| `CLAUDE_CODE_ENABLE_FINE_GRAINED_TOOL_STREAMING` | Atur ke `1` untuk memaksa pengaktifan streaming input alat berbutir halus. Tanpa ini, API membuffer parameter input alat sepenuhnya sebelum mengirim peristiwa delta, yang dapat menunda tampilan pada input alat besar. API Anthropic saja: tidak berpengaruh pada Bedrock, Vertex, atau Foundry |

94| `CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION` | Atur ke `false` untuk menonaktifkan saran prompt (toggle "Prompt suggestions" di `/config`). Ini adalah prediksi yang diarsir yang muncul di input prompt Anda setelah Claude merespons. Lihat [Saran prompt](/id/interactive-mode#prompt-suggestions) |

95| `CLAUDE_CODE_ENABLE_TASKS` | Atur ke `1` untuk mengaktifkan sistem pelacakan tugas dalam mode non-interaktif (flag `-p`). Tugas aktif secara default dalam mode interaktif. Lihat [Daftar tugas](/id/interactive-mode#task-list) |

96| `CLAUDE_CODE_ENABLE_TELEMETRY` | Atur ke `1` untuk mengaktifkan pengumpulan data OpenTelemetry untuk metrik dan logging. Diperlukan sebelum mengonfigurasi pengekspor OTel. Lihat [Monitoring](/id/monitoring-usage) |

97| `CLAUDE_CODE_EXIT_AFTER_STOP_DELAY` | Waktu dalam milidetik untuk menunggu setelah loop kueri menjadi idle sebelum keluar secara otomatis. Berguna untuk alur kerja otomatis dan skrip menggunakan mode SDK |

98| `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` | Atur ke `1` untuk mengaktifkan [tim agent](/id/agent-teams). Tim agent bersifat eksperimental dan dinonaktifkan secara default |

99| `CLAUDE_CODE_EXTRA_BODY` | Objek JSON untuk digabungkan ke tingkat atas dari setiap badan permintaan API. Berguna untuk meneruskan parameter spesifik penyedia yang Claude Code tidak mengekspos secara langsung |

100| `CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS` | Ganti batas token default untuk pembacaan file. Berguna saat Anda perlu membaca file yang lebih besar secara lengkap |

101| `CLAUDE_CODE_FORK_SUBAGENT` | Atur ke `1` untuk mengaktifkan [subagent yang di-fork](/id/sub-agents#fork-the-current-conversation). Subagent yang di-fork mewarisi konteks percakapan lengkap dari sesi utama alih-alih memulai dari awal. Saat diaktifkan, `/fork` meluncurkan subagent yang di-fork daripada bertindak sebagai alias untuk [`/branch`](/id/commands), dan semua peluncuran subagent berjalan di latar belakang. Bekerja dalam mode interaktif dan melalui SDK atau `claude -p` |

102| `CLAUDE_CODE_GIT_BASH_PATH` | Hanya Windows: jalur ke executable Git Bash (`bash.exe`). Gunakan saat Git Bash diinstal tetapi tidak ada di PATH Anda. Lihat [Pengaturan Windows](/id/setup#set-up-on-windows) |

103| `CLAUDE_CODE_GLOB_HIDDEN` | Atur ke `false` untuk mengecualikan dotfile dari hasil saat Claude memanggil [alat Glob](/id/tools-reference). Disertakan secara default. Tidak mempengaruhi autocomplete file `@`, `ls`, Grep, atau Read |

104| `CLAUDE_CODE_GLOB_NO_IGNORE` | Atur ke `false` untuk membuat [alat Glob](/id/tools-reference) menghormati pola `.gitignore`. Secara default, Glob mengembalikan semua file yang cocok termasuk yang diabaikan git. Tidak mempengaruhi autocomplete file `@`, yang memiliki pengaturan [`respectGitignore`](/id/settings#available-settings) sendiri |

105| `CLAUDE_CODE_GLOB_TIMEOUT_SECONDS` | Waktu tunggu dalam detik untuk penemuan file alat Glob. Default ke 20 detik di sebagian besar platform dan 60 detik di WSL |

106| `CLAUDE_CODE_HIDE_CWD` | Atur ke `1` untuk menyembunyikan direktori kerja dalam logo startup. Berguna untuk screenshare atau rekaman di mana jalur mengekspos nama pengguna OS Anda |

107| `CLAUDE_CODE_IDE_HOST_OVERRIDE` | Ganti alamat host yang digunakan untuk terhubung ke ekstensi IDE. Secara default Claude Code mendeteksi otomatis alamat yang benar, termasuk perutean WSL-ke-Windows |

108| `CLAUDE_CODE_IDE_SKIP_AUTO_INSTALL` | Lewati instalasi otomatis ekstensi IDE. Setara dengan pengaturan [`autoInstallIdeExtension`](/id/settings#global-config-settings) ke `false` |

109| `CLAUDE_CODE_IDE_SKIP_VALID_CHECK` | Atur ke `1` untuk melewati validasi entri lockfile IDE selama koneksi. Gunakan saat auto-connect gagal menemukan IDE Anda meskipun sedang berjalan |

110| `CLAUDE_CODE_MAX_CONTEXT_TOKENS` | Ganti ukuran jendela konteks yang Claude Code asumsikan untuk model aktif. Hanya berlaku saat `DISABLE_COMPACT` juga diatur. Gunakan ini saat merutekan ke model melalui `ANTHROPIC_BASE_URL` yang jendela konteksnya tidak cocok dengan ukuran bawaan untuk namanya |

111| `CLAUDE_CODE_MAX_OUTPUT_TOKENS` | Atur jumlah maksimal token keluaran untuk sebagian besar permintaan. Default dan batas bervariasi menurut model; lihat [max output tokens](https://platform.claude.com/docs/en/about-claude/models/overview#latest-models-comparison). Meningkatkan nilai ini mengurangi jendela konteks efektif yang tersedia sebelum [pemadatan otomatis](/id/costs#reduce-token-usage) dipicu. |

112| `CLAUDE_CODE_MAX_RETRIES` | Ganti jumlah kali untuk mencoba ulang permintaan API yang gagal (default: 10) |

113| `CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY` | Jumlah maksimal alat baca-saja dan subagent yang dapat dieksekusi secara paralel (default: 10). Nilai yang lebih tinggi meningkatkan paralelisme tetapi mengonsumsi lebih banyak sumber daya |

114| `CLAUDE_CODE_MCP_ALLOWLIST_ENV` | Atur ke `1` untuk meluncurkan server MCP stdio dengan hanya lingkungan dasar yang aman ditambah `env` yang dikonfigurasi server, alih-alih mewarisi lingkungan shell Anda |

115| `CLAUDE_CODE_NEW_INIT` | Atur ke `1` untuk membuat `/init` menjalankan alur pengaturan interaktif. Alur menanyakan file mana yang akan dibuat, termasuk CLAUDE.md, skill, dan hook, sebelum menjelajahi basis kode dan menulisnya. Tanpa variabel ini, `/init` membuat CLAUDE.md secara otomatis tanpa meminta. |

116| `CLAUDE_CODE_NO_FLICKER` | Atur ke `1` untuk mengaktifkan [rendering layar penuh](/id/fullscreen), pratinjau penelitian yang mengurangi flicker dan menjaga memori tetap datar dalam percakapan panjang. Setara dengan pengaturan [`tui`](/id/settings#available-settings); Anda juga dapat beralih dengan `/tui fullscreen` |

117| `CLAUDE_CODE_OAUTH_REFRESH_TOKEN` | Token refresh OAuth untuk autentikasi Claude.ai. Saat diatur, `claude auth login` menukar token ini secara langsung alih-alih membuka browser. Memerlukan `CLAUDE_CODE_OAUTH_SCOPES`. Berguna untuk menyediakan autentikasi di lingkungan otomatis |

118| `CLAUDE_CODE_OAUTH_SCOPES` | Cakupan OAuth yang dipisahkan spasi yang token refresh dikeluarkan dengan, seperti `"user:profile user:inference user:sessions:claude_code"`. Diperlukan saat `CLAUDE_CODE_OAUTH_REFRESH_TOKEN` diatur |

119| `CLAUDE_CODE_OAUTH_TOKEN` | Token akses OAuth untuk autentikasi Claude.ai. Alternatif untuk `/login` untuk SDK dan lingkungan otomatis. Mengambil alih kredensial yang disimpan keychain. Buat satu dengan [`claude setup-token`](/id/authentication#generate-a-long-lived-token) |

120| `CLAUDE_CODE_OTEL_FLUSH_TIMEOUT_MS` | Waktu tunggu dalam milidetik untuk menyiram span OpenTelemetry yang tertunda (default: 5000). Lihat [Monitoring](/id/monitoring-usage) |

121| `CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS` | Interval untuk menyegarkan header OpenTelemetry dinamis dalam milidetik (default: 1740000 / 29 menit). Lihat [Header dinamis](/id/monitoring-usage#dynamic-headers) |

122| `CLAUDE_CODE_OTEL_SHUTDOWN_TIMEOUT_MS` | Waktu tunggu dalam milidetik untuk pengekspor OpenTelemetry selesai saat shutdown (default: 2000). Tingkatkan jika metrik dijatuhkan saat keluar. Lihat [Monitoring](/id/monitoring-usage) |

123| `CLAUDE_CODE_PERFORCE_MODE` | Atur ke `1` untuk mengaktifkan perlindungan penulisan yang menyadari Perforce. Saat diatur, Edit, Write, dan NotebookEdit gagal dengan petunjuk `p4 edit <file>` jika file target tidak memiliki bit pemilik-tulis, yang Perforce hapus pada file yang disinkronkan sampai `p4 edit` membukanya. Ini mencegah Claude Code dari melewati pelacakan perubahan Perforce |

124| `CLAUDE_CODE_PLUGIN_CACHE_DIR` | Ganti direktori root plugin. Meskipun namanya, ini mengatur direktori induk, bukan cache itu sendiri: marketplace dan cache plugin berada di subdirektori di bawah jalur ini. Default ke `~/.claude/plugins` |

125| `CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS` | Waktu tunggu dalam milidetik untuk operasi git saat memasang atau memperbarui plugin (default: 120000). Tingkatkan nilai ini untuk repositori besar atau koneksi jaringan lambat. Lihat [Operasi Git habis waktu](/id/plugin-marketplaces#git-operations-time-out) |

126| `CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE` | Atur ke `1` untuk menyimpan cache marketplace yang ada saat `git pull` gagal alih-alih menghapus dan re-cloning. Berguna di lingkungan offline atau airgapped di mana re-cloning akan gagal dengan cara yang sama. Lihat [Pembaruan Marketplace gagal di lingkungan offline](/id/plugin-marketplaces#marketplace-updates-fail-in-offline-environments) |

127| `CLAUDE_CODE_PLUGIN_SEED_DIR` | Jalur ke satu atau lebih direktori seed plugin baca-saja, dipisahkan oleh `:` pada Unix atau `;` pada Windows. Gunakan ini untuk menggabungkan direktori plugin yang sudah diisi sebelumnya ke dalam gambar kontainer. Claude Code mendaftarkan marketplace dari direktori ini saat startup dan menggunakan plugin yang sudah di-cache tanpa re-cloning. Lihat [Pre-populate plugins for containers](/id/plugin-marketplaces#pre-populate-plugins-for-containers) |

128| `CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST` | Atur oleh platform host yang menyematkan Claude Code dan mengelola perutean penyedia model atas namanya. Saat diatur, pemilihan penyedia, titik akhir, dan variabel autentikasi seperti `CLAUDE_CODE_USE_BEDROCK`, `ANTHROPIC_BASE_URL`, dan `ANTHROPIC_API_KEY` dalam file pengaturan diabaikan sehingga pengaturan pengguna tidak dapat mengganti perutean host. Opt-out telemetri otomatis untuk Bedrock, Vertex, dan Foundry juga dilewati, sehingga telemetri mengikuti opt-out standar `DISABLE_TELEMETRY`. Lihat [Perilaku default menurut penyedia API](/id/data-usage#default-behaviors-by-api-provider) |

129| `CLAUDE_CODE_PROXY_RESOLVES_HOSTS` | Atur ke `1` untuk memungkinkan proxy melakukan resolusi DNS alih-alih pemanggil. Opt-in untuk lingkungan di mana proxy harus menangani resolusi nama host |

130| `CLAUDE_CODE_REMOTE` | Atur secara otomatis ke `true` saat Claude Code berjalan sebagai [sesi cloud](/id/claude-code-on-the-web). Baca ini dari hook atau skrip setup untuk mendeteksi apakah Anda berada di lingkungan cloud |

131| `CLAUDE_CODE_REMOTE_SESSION_ID` | Atur secara otomatis dalam [sesi cloud](/id/claude-code-on-the-web) ke ID sesi saat ini. Baca ini untuk membuat tautan kembali ke transkrip sesi. Lihat [Link artifacts back to the session](/id/claude-code-on-the-web#link-artifacts-back-to-the-session) |

132| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` | Atur ke `1` untuk melanjutkan secara otomatis jika sesi sebelumnya berakhir di tengah-tengah. Digunakan dalam mode SDK sehingga model melanjutkan tanpa memerlukan SDK untuk mengirim ulang prompt |

133| `CLAUDE_CODE_SCRIPT_CAPS` | Objek JSON yang membatasi berapa kali skrip spesifik dapat dipanggil per sesi saat `CLAUDE_CODE_SUBPROCESS_ENV_SCRUB` diatur. Kunci adalah substring yang cocok dengan teks perintah; nilai adalah batas panggilan integer. Misalnya, `{"deploy.sh": 2}` memungkinkan `deploy.sh` dipanggil paling banyak dua kali. Pencocokan berbasis substring sehingga trik ekspansi shell seperti `./scripts/deploy.sh $(evil)` masih dihitung terhadap batas. Fan-out runtime melalui `xargs` atau `find -exec` tidak terdeteksi; ini adalah kontrol pertahanan mendalam |

134| `CLAUDE_CODE_SCROLL_SPEED` | Atur pengali pengguliran roda mouse dalam [rendering layar penuh](/id/fullscreen#mouse-wheel-scrolling). Menerima nilai dari 1 hingga 20. Atur ke `3` untuk mencocokkan `vim` jika terminal Anda mengirim satu peristiwa roda per takik tanpa amplifikasi |

135| `CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS` | Ganti anggaran waktu dalam milidetik untuk hook [SessionEnd](/id/hooks#sessionend). Berlaku untuk keluar sesi, `/clear`, dan beralih sesi melalui `/resume` interaktif. Secara default anggaran adalah 1,5 detik, secara otomatis dinaikkan ke `timeout` per-hook tertinggi yang dikonfigurasi dalam file pengaturan, hingga 60 detik. Timeout pada hook yang disediakan plugin tidak menaikkan anggaran |

136| `CLAUDE_CODE_SHELL` | Ganti deteksi shell otomatis. Berguna saat shell login Anda berbeda dari shell kerja pilihan Anda (misalnya, `bash` vs `zsh`) |

137| `CLAUDE_CODE_SHELL_PREFIX` | Awalan perintah yang membungkus perintah shell Claude Code luncurkan: panggilan alat Bash, perintah [hook](/id/hooks), dan perintah startup server [MCP](/id/mcp) stdio. Berguna untuk logging atau audit. Contoh: mengatur `/path/to/logger.sh` menjalankan setiap perintah sebagai `/path/to/logger.sh <command>` |

138| `CLAUDE_CODE_SIMPLE` | Atur ke `1` untuk menjalankan dengan prompt sistem minimal dan hanya alat Bash, pembacaan file, dan pengeditan file. Alat MCP dari `--mcp-config` masih tersedia. Menonaktifkan penemuan otomatis hook, skill, plugin, server MCP, memori otomatis, dan CLAUDE.md. Flag CLI [`--bare`](/id/headless#start-faster-with-bare-mode) mengatur ini |

139| `CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT` | Atur ke `1` untuk menggunakan prompt sistem yang lebih pendek dan deskripsi alat yang disingkat pada Opus 4.7. Tidak berpengaruh pada model lain. Set alat lengkap, hook, server MCP, dan penemuan CLAUDE.md tetap diaktifkan |

140| `CLAUDE_CODE_SKIP_BEDROCK_AUTH` | Lewati autentikasi AWS untuk Bedrock (misalnya, saat menggunakan gateway LLM) |

141| `CLAUDE_CODE_SKIP_FOUNDRY_AUTH` | Lewati autentikasi Azure untuk Microsoft Foundry (misalnya, saat menggunakan gateway LLM) |

142| `CLAUDE_CODE_SKIP_MANTLE_AUTH` | Lewati autentikasi AWS untuk Bedrock Mantle (misalnya, saat menggunakan gateway LLM) |

143| `CLAUDE_CODE_SKIP_PROMPT_HISTORY` | Atur ke `1` untuk melewati penulisan riwayat prompt dan transkrip sesi ke disk. Sesi yang dimulai dengan variabel ini diatur tidak muncul dalam `--resume`, `--continue`, atau riwayat panah-atas. Berguna untuk sesi skrip yang bersifat sementara |

144| `CLAUDE_CODE_SKIP_VERTEX_AUTH` | Lewati autentikasi Google untuk Vertex (misalnya, saat menggunakan gateway LLM) |

145| `CLAUDE_CODE_SUBAGENT_MODEL` | Lihat [Konfigurasi Model](/id/model-config) |

146| `CLAUDE_CODE_SUBPROCESS_ENV_SCRUB` | Atur ke `1` untuk menghapus kredensial Anthropic dan penyedia cloud dari lingkungan subprocess (alat Bash, hook, server MCP stdio). Proses Claude induk menyimpan kredensial ini untuk panggilan API, tetapi proses anak tidak dapat membacanya, mengurangi paparan terhadap serangan injeksi prompt yang mencoba mengekstrak rahasia melalui ekspansi shell. Pada Linux, ini juga menjalankan subprocess Bash dalam namespace PID terisolasi sehingga mereka tidak dapat membaca lingkungan proses host melalui `/proc`; sebagai efek samping, `ps`, `pgrep`, dan `kill` tidak dapat melihat atau menandatangani proses host. `claude-code-action` mengatur ini secara otomatis saat `allowed_non_write_users` dikonfigurasi |

147| `CLAUDE_CODE_SYNC_PLUGIN_INSTALL` | Atur ke `1` dalam mode non-interaktif (flag `-p`) untuk menunggu instalasi plugin selesai sebelum kueri pertama. Tanpa ini, plugin diinstal di latar belakang dan mungkin tidak tersedia pada giliran pertama. Gabungkan dengan `CLAUDE_CODE_SYNC_PLUGIN_INSTALL_TIMEOUT_MS` untuk membatasi waktu tunggu |

148| `CLAUDE_CODE_SYNC_PLUGIN_INSTALL_TIMEOUT_MS` | Waktu tunggu dalam milidetik untuk instalasi plugin sinkron. Saat terlampaui, Claude Code melanjutkan tanpa plugin dan mencatat kesalahan. Tidak ada default: tanpa variabel ini, instalasi sinkron menunggu sampai selesai |

149| `CLAUDE_CODE_SYNTAX_HIGHLIGHT` | Atur ke `false` untuk menonaktifkan penyorotan sintaks dalam keluaran diff. Berguna saat warna mengganggu pengaturan terminal Anda |

150| `CLAUDE_CODE_TASK_LIST_ID` | Bagikan daftar tugas di seluruh sesi. Atur ID yang sama di beberapa instans Claude Code untuk berkoordinasi pada daftar tugas bersama. Lihat [Daftar tugas](/id/interactive-mode#task-list) |

151| `CLAUDE_CODE_TEAM_NAME` | Nama tim agent yang menjadi anggota rekan kerja ini. Atur secara otomatis pada anggota [tim agent](/id/agent-teams) |

152| `CLAUDE_CODE_TMPDIR` | Ganti direktori temp yang digunakan untuk file temp internal. Claude Code menambahkan `/claude-{uid}/` (Unix) atau `/claude/` (Windows) ke jalur ini. Default: `/tmp` pada macOS, `os.tmpdir()` pada Linux/Windows |

153| `CLAUDE_CODE_TMUX_TRUECOLOR` | Atur ke `1` untuk memungkinkan keluaran truecolor 24-bit di dalam tmux. Secara default, Claude Code membatasi ke 256 warna saat `$TMUX` diatur karena tmux tidak melewatkan urutan escape truecolor kecuali dikonfigurasi untuk melakukannya. Atur ini setelah menambahkan `set -ga terminal-overrides ',*:Tc'` ke `~/.tmux.conf` Anda. Lihat [Konfigurasi Terminal](/id/terminal-config) untuk pengaturan tmux lainnya |

154| `CLAUDE_CODE_USE_BEDROCK` | Gunakan [Bedrock](/id/amazon-bedrock) |

155| `CLAUDE_CODE_USE_FOUNDRY` | Gunakan [Microsoft Foundry](/id/microsoft-foundry) |

156| `CLAUDE_CODE_USE_MANTLE` | Gunakan titik akhir Bedrock [Mantle](/id/amazon-bedrock#use-the-mantle-endpoint) |

157| `CLAUDE_CODE_USE_NATIVE_FILE_SEARCH` | Atur ke `1` untuk menemukan perintah kustom, subagent, dan gaya keluaran menggunakan API file Node.js alih-alih ripgrep. Atur ini jika biner ripgrep bundel tidak tersedia atau diblokir di lingkungan Anda. Tidak mempengaruhi alat Grep atau pencarian file |

158| `CLAUDE_CODE_USE_POWERSHELL_TOOL` | Mengontrol alat PowerShell. Pada Windows tanpa Git Bash, alat diaktifkan secara otomatis; atur ke `0` untuk menonaktifkannya. Pada Windows dengan Git Bash diinstal, alat sedang diluncurkan secara progresif: atur ke `1` untuk memilih atau `0` untuk menolak. Pada Linux, macOS, dan WSL, atur ke `1` untuk mengaktifkannya, yang memerlukan `pwsh` di `PATH` Anda. Saat diaktifkan pada Windows, Claude dapat menjalankan perintah PowerShell secara native alih-alih merutekan melalui Git Bash. Lihat [Alat PowerShell](/id/tools-reference#powershell-tool) |

159| `CLAUDE_CODE_USE_VERTEX` | Gunakan [Vertex](/id/google-vertex-ai) |

160| `CLAUDE_CONFIG_DIR` | Ganti direktori konfigurasi (default: `~/.claude`). Semua pengaturan, kredensial, riwayat sesi, dan plugin disimpan di bawah jalur ini. Berguna untuk menjalankan beberapa akun berdampingan: misalnya, `alias claude-work='CLAUDE_CONFIG_DIR=~/.claude-work claude'` |

161| `CLAUDE_ENABLE_BYTE_WATCHDOG` | Atur ke `1` untuk memaksa pengaktifan byte-level streaming idle watchdog, atau atur ke `0` untuk memaksa menonaktifkannya. Saat tidak diatur, watchdog diaktifkan secara default untuk koneksi API Anthropic. Byte watchdog membatalkan koneksi saat tidak ada byte tiba di kawat untuk durasi yang diatur oleh `CLAUDE_STREAM_IDLE_TIMEOUT_MS`, dengan minimum 5 menit, terlepas dari watchdog tingkat peristiwa |

162| `CLAUDE_ENABLE_STREAM_WATCHDOG` | Atur ke `1` untuk mengaktifkan event-level streaming idle watchdog. Dimatikan secara default. Untuk Bedrock, Vertex, dan Foundry, ini adalah satu-satunya idle watchdog yang tersedia. Konfigurasikan waktu tunggu dengan `CLAUDE_STREAM_IDLE_TIMEOUT_MS` |

163| `CLAUDE_ENV_FILE` | Jalur ke skrip shell yang isinya Claude Code jalankan sebelum setiap perintah Bash dalam proses shell yang sama, sehingga ekspor dalam file terlihat oleh perintah. Gunakan untuk mempertahankan aktivasi virtualenv atau conda di seluruh perintah. Juga diisi secara dinamis oleh hook [SessionStart](/id/hooks#persist-environment-variables), [Setup](/id/hooks#setup), [CwdChanged](/id/hooks#cwdchanged), dan [FileChanged](/id/hooks#filechanged) |

164| `CLAUDE_REMOTE_CONTROL_SESSION_NAME_PREFIX` | Awalan untuk nama sesi [Remote Control](/id/remote-control) yang dibuat otomatis saat tidak ada nama eksplisit yang disediakan. Default ke nama mesin Anda, menghasilkan nama seperti `myhost-graceful-unicorn`. Flag CLI `--remote-control-session-name-prefix` mengatur nilai yang sama untuk satu pemanggilan |

165| `CLAUDE_STREAM_IDLE_TIMEOUT_MS` | Waktu tunggu dalam milidetik sebelum streaming idle watchdog menutup koneksi yang macet. Default dan minimum `300000` (5 menit) untuk byte-level dan event-level watchdog; nilai yang lebih rendah secara diam-diam diklem untuk menyerap jeda pemikiran yang diperluas dan buffering proxy. Untuk penyedia pihak ketiga, memerlukan `CLAUDE_ENABLE_STREAM_WATCHDOG=1` |

166| `DISABLE_AUTOUPDATER` | Atur ke `1` untuk menonaktifkan pembaruan otomatis latar belakang. Manual `claude update` masih berfungsi. Gunakan `DISABLE_UPDATES` untuk memblokir keduanya |

167| `DISABLE_AUTO_COMPACT` | Atur ke `1` untuk menonaktifkan pemadatan otomatis saat mendekati batas konteks. Perintah manual `/compact` tetap tersedia. Gunakan saat Anda menginginkan kontrol eksplisit atas kapan pemadatan terjadi |

168| `DISABLE_COMPACT` | Atur ke `1` untuk menonaktifkan semua pemadatan: baik pemadatan otomatis maupun perintah manual `/compact` |

169| `DISABLE_COST_WARNINGS` | Atur ke `1` untuk menonaktifkan pesan peringatan biaya |

170| `DISABLE_DOCTOR_COMMAND` | Atur ke `1` untuk menyembunyikan perintah `/doctor`. Berguna untuk penerapan terkelola di mana pengguna tidak boleh menjalankan diagnostik instalasi |

171| `DISABLE_ERROR_REPORTING` | Atur ke `1` untuk menolak pelaporan kesalahan Sentry |

172| `DISABLE_EXTRA_USAGE_COMMAND` | Atur ke `1` untuk menyembunyikan perintah `/extra-usage` yang memungkinkan pengguna membeli penggunaan tambahan di luar batas laju |

173| `DISABLE_FEEDBACK_COMMAND` | Atur ke `1` untuk menonaktifkan perintah `/feedback`. Nama yang lebih lama `DISABLE_BUG_COMMAND` juga diterima |

174| `DISABLE_GROWTHBOOK` | Atur ke `1` untuk menonaktifkan pengambilan flag fitur GrowthBook dan menggunakan default kode untuk setiap flag. Logging peristiwa telemetri tetap aktif kecuali `DISABLE_TELEMETRY` juga diatur |

175| `DISABLE_INSTALLATION_CHECKS` | Atur ke `1` untuk menonaktifkan peringatan instalasi. Gunakan hanya saat mengelola lokasi instalasi secara manual, karena ini dapat menyembunyikan masalah dengan instalasi standar |

176| `DISABLE_INSTALL_GITHUB_APP_COMMAND` | Atur ke `1` untuk menyembunyikan perintah `/install-github-app`. Sudah disembunyikan saat menggunakan penyedia pihak ketiga (Bedrock, Vertex, atau Foundry) |

177| `DISABLE_INTERLEAVED_THINKING` | Atur ke `1` untuk mencegah pengiriman header beta interleaved-thinking. Berguna saat gateway LLM atau penyedia Anda tidak mendukung [interleaved thinking](https://platform.claude.com/docs/en/build-with-claude/extended-thinking#interleaved-thinking) |

178| `DISABLE_LOGIN_COMMAND` | Atur ke `1` untuk menyembunyikan perintah `/login`. Berguna saat autentikasi ditangani secara eksternal melalui kunci API atau `apiKeyHelper` |

179| `DISABLE_LOGOUT_COMMAND` | Atur ke `1` untuk menyembunyikan perintah `/logout` |

180| `DISABLE_PROMPT_CACHING` | Atur ke `1` untuk menonaktifkan prompt caching untuk semua model (mengambil alih pengaturan per-model) |

181| `DISABLE_PROMPT_CACHING_HAIKU` | Atur ke `1` untuk menonaktifkan prompt caching untuk model Haiku |

182| `DISABLE_PROMPT_CACHING_OPUS` | Atur ke `1` untuk menonaktifkan prompt caching untuk model Opus |

183| `DISABLE_PROMPT_CACHING_SONNET` | Atur ke `1` untuk menonaktifkan prompt caching untuk model Sonnet |

184| `DISABLE_TELEMETRY` | Atur ke `1` untuk menolak telemetri Statsig (perhatikan bahwa peristiwa Statsig tidak menyertakan data pengguna seperti kode, jalur file, atau perintah bash) |

185| `DISABLE_UPDATES` | Atur ke `1` untuk memblokir semua pembaruan termasuk manual `claude update` dan `claude install`. Lebih ketat daripada `DISABLE_AUTOUPDATER`. Gunakan saat mendistribusikan Claude Code melalui saluran Anda sendiri dan pengguna tidak boleh memperbarui diri |

186| `DISABLE_UPGRADE_COMMAND` | Atur ke `1` untuk menyembunyikan perintah `/upgrade` |

187| `ENABLE_CLAUDEAI_MCP_SERVERS` | Atur ke `false` untuk menonaktifkan [server MCP claude.ai](/id/mcp#use-mcp-servers-from-claude-ai) di Claude Code. Diaktifkan secara default untuk pengguna yang masuk |

188| `ENABLE_PROMPT_CACHING_1H` | Atur ke `1` untuk meminta TTL cache prompt 1 jam alih-alih default 5 menit. Dimaksudkan untuk pengguna kunci API, [Bedrock](/id/amazon-bedrock), [Vertex](/id/google-vertex-ai), dan [Foundry](/id/microsoft-foundry). Pengguna langganan menerima TTL 1 jam secara otomatis. Penulisan cache 1 jam ditagih dengan tarif yang lebih tinggi |

189| `ENABLE_PROMPT_CACHING_1H_BEDROCK` | Deprecated. Gunakan `ENABLE_PROMPT_CACHING_1H` sebagai gantinya |

190| `ENABLE_TOOL_SEARCH` | Kontrol [pencarian alat MCP](/id/mcp#scale-with-mcp-tool-search). Tidak diatur: semua alat MCP ditangguhkan secara default, tetapi dimuat di muka pada Vertex AI atau saat `ANTHROPIC_BASE_URL` menunjuk ke host non-pihak pertama. Nilai: `true` (selalu tangguhkan termasuk proxy), `auto` (mode ambang batas: muat di muka jika alat sesuai dalam 10% konteks), `auto:N` (ambang batas kustom, misalnya `auto:5` untuk 5%), `false` (muat semua di muka) |

191| `FALLBACK_FOR_ALL_PRIMARY_MODELS` | Atur ke nilai non-kosong apa pun untuk memicu fallback ke [`--fallback-model`](/id/cli-reference#cli-flags) setelah kesalahan overload berulang pada model primer apa pun. Secara default, hanya model Opus yang memicu fallback |

192| `FORCE_AUTOUPDATE_PLUGINS` | Atur ke `1` untuk memaksa pembaruan otomatis plugin bahkan saat auto-updater utama dinonaktifkan melalui `DISABLE_AUTOUPDATER` |

193| `FORCE_PROMPT_CACHING_5M` | Atur ke `1` untuk memaksa TTL cache prompt 5 menit bahkan saat TTL 1 jam akan berlaku sebaliknya. Mengganti `ENABLE_PROMPT_CACHING_1H` |

194| `HTTP_PROXY` | Tentukan server proxy HTTP untuk koneksi jaringan |

195| `HTTPS_PROXY` | Tentukan server proxy HTTPS untuk koneksi jaringan |

196| `IS_DEMO` | Atur ke `1` untuk mengaktifkan mode demo: menyembunyikan email dan nama organisasi dari header dan keluaran `/status`, dan melewati onboarding. Berguna saat streaming atau merekam sesi |

197| `MAX_MCP_OUTPUT_TOKENS` | Jumlah maksimal token yang diizinkan dalam respons alat MCP. Claude Code menampilkan peringatan saat keluaran melebihi 10.000 token. Alat yang mendeklarasikan [`anthropic/maxResultSizeChars`](/id/mcp#raise-the-limit-for-a-specific-tool) menggunakan batas karakter itu untuk konten teks sebagai gantinya, tetapi konten gambar dari alat tersebut masih tunduk pada variabel ini (default: 25000) |

198| `MAX_STRUCTURED_OUTPUT_RETRIES` | Jumlah kali untuk mencoba ulang saat respons model gagal validasi terhadap [`--json-schema`](/id/cli-reference#cli-flags) dalam mode non-interaktif (flag `-p`). Default ke 5 |

199| `MAX_THINKING_TOKENS` | Ganti anggaran token [extended thinking](https://platform.claude.com/docs/en/build-with-claude/extended-thinking). Batas maksimal adalah [max output tokens](https://platform.claude.com/docs/en/about-claude/models/overview#latest-models-comparison) model dikurangi satu. Atur ke `0` untuk menonaktifkan pemikiran sepenuhnya. Pada model dengan [penalaran adaptif](/id/model-config#adjust-effort-level), anggaran diabaikan kecuali penalaran adaptif dinonaktifkan melalui `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING` |

200| `MCP_CLIENT_SECRET` | Rahasia klien OAuth untuk server MCP yang memerlukan [kredensial yang dikonfigurasi sebelumnya](/id/mcp#use-pre-configured-oauth-credentials). Menghindari prompt interaktif saat menambahkan server dengan `--client-secret` |

201| `MCP_CONNECTION_NONBLOCKING` | Atur ke `true` dalam mode non-interaktif (`-p`) untuk melewati penantian koneksi MCP sepenuhnya. Berguna untuk pipeline skrip di mana alat MCP tidak diperlukan. Tanpa variabel ini, kueri pertama menunggu hingga 5 detik untuk koneksi server `--mcp-config` |

202| `MCP_OAUTH_CALLBACK_PORT` | Port tetap untuk callback pengalihan OAuth, sebagai alternatif untuk `--callback-port` saat menambahkan server MCP dengan [kredensial yang dikonfigurasi sebelumnya](/id/mcp#use-pre-configured-oauth-credentials) |

203| `MCP_REMOTE_SERVER_CONNECTION_BATCH_SIZE` | Jumlah maksimal server MCP jarak jauh (HTTP/SSE) untuk terhubung secara paralel selama startup (default: 20) |

204| `MCP_SERVER_CONNECTION_BATCH_SIZE` | Jumlah maksimal server MCP lokal (stdio) untuk terhubung secara paralel selama startup (default: 3) |

205| `MCP_TIMEOUT` | Waktu tunggu dalam milidetik untuk startup server MCP (default: 30000, atau 30 detik) |

206| `MCP_TOOL_TIMEOUT` | Waktu tunggu dalam milidetik untuk eksekusi alat MCP (default: 100000000, sekitar 28 jam) |

207| `NO_PROXY` | Daftar domain dan IP ke mana permintaan akan dikeluarkan secara langsung, melewati proxy |

208| `OTEL_LOG_RAW_API_BODIES` | Atur ke `1` untuk memancarkan permintaan dan respons JSON API Anthropic Messages lengkap sebagai peristiwa log `api_request_body` / `api_response_body`. Atur ke `file:<dir>` untuk menulis badan yang tidak dipotong ke disk dan memancarkan referensi `body_ref` sebagai gantinya. Dinonaktifkan secara default; badan menyertakan seluruh riwayat percakapan. Lihat [Monitoring](/id/monitoring-usage#api-request-body-event) |

209| `OTEL_LOG_TOOL_CONTENT` | Atur ke `1` untuk menyertakan konten input dan output alat dalam peristiwa span OpenTelemetry. Dinonaktifkan secara default untuk melindungi data sensitif. Lihat [Monitoring](/id/monitoring-usage) |

210| `OTEL_LOG_TOOL_DETAILS` | Atur ke `1` untuk menyertakan argumen input alat, nama server MCP, string kesalahan mentah pada kegagalan alat, dan detail alat lainnya dalam jejak dan log OpenTelemetry. Dinonaktifkan secara default untuk melindungi PII. Lihat [Monitoring](/id/monitoring-usage) |

211| `OTEL_LOG_USER_PROMPTS` | Atur ke `1` untuk menyertakan teks prompt pengguna dalam jejak dan log OpenTelemetry. Dinonaktifkan secara default (prompt diredaksi). Lihat [Monitoring](/id/monitoring-usage) |

212| `OTEL_METRICS_INCLUDE_ACCOUNT_UUID` | Atur ke `false` untuk mengecualikan UUID akun dari atribut metrik (default: disertakan). Lihat [Monitoring](/id/monitoring-usage) |

213| `OTEL_METRICS_INCLUDE_SESSION_ID` | Atur ke `false` untuk mengecualikan ID sesi dari atribut metrik (default: disertakan). Lihat [Monitoring](/id/monitoring-usage) |

214| `OTEL_METRICS_INCLUDE_VERSION` | Atur ke `true` untuk menyertakan versi Claude Code dalam atribut metrik (default: dikecualikan). Lihat [Monitoring](/id/monitoring-usage) |

215| `SLASH_COMMAND_TOOL_CHAR_BUDGET` | Ganti anggaran karakter untuk metadata skill yang ditampilkan ke [alat Skill](/id/skills#control-who-invokes-a-skill). Anggaran diskalakan secara dinamis pada 1% dari jendela konteks, dengan fallback 8.000 karakter. Nama warisan disimpan untuk kompatibilitas mundur |

216| `TASK_MAX_OUTPUT_LENGTH` | Jumlah maksimal karakter dalam keluaran [subagent](/id/sub-agents) sebelum pemotongan (default: 32000, maksimum: 160000). Saat dipotong, keluaran lengkap disimpan ke disk dan jalur disertakan dalam respons yang dipotong |

217| `USE_BUILTIN_RIPGREP` | Atur ke `0` untuk menggunakan `rg` yang diinstal sistem alih-alih `rg` yang disertakan dengan Claude Code |

218| `VERTEX_REGION_CLAUDE_3_5_HAIKU` | Ganti wilayah untuk Claude 3.5 Haiku saat menggunakan Vertex AI |

219| `VERTEX_REGION_CLAUDE_3_5_SONNET` | Ganti wilayah untuk Claude 3.5 Sonnet saat menggunakan Vertex AI |

220| `VERTEX_REGION_CLAUDE_3_7_SONNET` | Ganti wilayah untuk Claude 3.7 Sonnet saat menggunakan Vertex AI |

221| `VERTEX_REGION_CLAUDE_4_0_OPUS` | Ganti wilayah untuk Claude 4.0 Opus saat menggunakan Vertex AI |

222| `VERTEX_REGION_CLAUDE_4_0_SONNET` | Ganti wilayah untuk Claude 4.0 Sonnet saat menggunakan Vertex AI |

223| `VERTEX_REGION_CLAUDE_4_1_OPUS` | Ganti wilayah untuk Claude 4.1 Opus saat menggunakan Vertex AI |

224| `VERTEX_REGION_CLAUDE_4_5_OPUS` | Ganti wilayah untuk Claude Opus 4.5 saat menggunakan Vertex AI |

225| `VERTEX_REGION_CLAUDE_4_5_SONNET` | Ganti wilayah untuk Claude Sonnet 4.5 saat menggunakan Vertex AI |

226| `VERTEX_REGION_CLAUDE_4_6_OPUS` | Ganti wilayah untuk Claude Opus 4.6 saat menggunakan Vertex AI |

227| `VERTEX_REGION_CLAUDE_4_6_SONNET` | Ganti wilayah untuk Claude Sonnet 4.6 saat menggunakan Vertex AI |

228| `VERTEX_REGION_CLAUDE_4_7_OPUS` | {/* min-version: 2.1.111 */}Ganti wilayah untuk Claude Opus 4.7 saat menggunakan Vertex AI |

229| `VERTEX_REGION_CLAUDE_HAIKU_4_5` | Ganti wilayah untuk Claude Haiku 4.5 saat menggunakan Vertex AI |

230 

231Variabel pengekspor OpenTelemetry standar (`OTEL_METRICS_EXPORTER`, `OTEL_LOGS_EXPORTER`, `OTEL_EXPORTER_OTLP_ENDPOINT`, `OTEL_EXPORTER_OTLP_PROTOCOL`, `OTEL_EXPORTER_OTLP_HEADERS`, `OTEL_METRIC_EXPORT_INTERVAL`, `OTEL_RESOURCE_ATTRIBUTES`, dan varian spesifik sinyal) juga didukung. Lihat [Monitoring](/id/monitoring-usage) untuk detail konfigurasi.

232 

233## Lihat juga

234 

235* [Pengaturan](/id/settings): konfigurasikan variabel lingkungan di `settings.json` sehingga berlaku untuk setiap sesi

236* [Referensi CLI](/id/cli-reference): flag waktu peluncuran

237* [Konfigurasi jaringan](/id/network-config): pengaturan proxy dan TLS

238* [Monitoring](/id/monitoring-usage): konfigurasi OpenTelemetry

errors.md +536 −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# Referensi kesalahan

6 

7> Cari pesan kesalahan runtime Claude Code dengan penjelasan arti dan cara memperbaikinya.

8 

9Halaman ini mencantumkan kesalahan runtime yang ditampilkan Claude Code dan cara memulihkan dari masing-masing, ditambah apa yang harus diperiksa ketika respons tampak tidak normal tanpa kesalahan. Untuk kesalahan instalasi seperti `command not found` atau kegagalan TLS selama penyiapan, lihat [Troubleshoot installation and login](/id/troubleshoot-install).

10 

11Kesalahan dan perintah pemulihan ini berlaku di seluruh CLI, [aplikasi Desktop](/id/desktop), dan [Claude Code di web](/id/claude-code-on-the-web), karena ketiganya membungkus CLI Claude Code yang sama. Untuk masalah khusus permukaan, lihat bagian troubleshooting di halaman permukaan tersebut.

12 

13<Note>

14 Claude Code memanggil Claude API untuk respons model, jadi sebagian besar kesalahan runtime memetakan ke kode kesalahan API yang mendasar. Halaman ini mencakup apa arti setiap kesalahan di dalam Claude Code dan cara memulihkan. Untuk definisi kode status HTTP mentah, lihat [referensi kesalahan Platform Claude](https://platform.claude.com/docs/en/api/errors).

15</Note>

16 

17## Temukan kesalahan Anda

18 

19Cocokkan pesan yang Anda lihat di terminal dengan bagian di bawah ini.

20 

21| Pesan | Bagian |

22| :----------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------ |

23| `API Error: 500 ... Internal server error` | [Kesalahan server](#api-error-500-internal-server-error) |

24| `API Error: Repeated 529 Overloaded errors` | [Kesalahan server](#api-error-repeated-529-overloaded-errors) |

25| `Request timed out` | [Kesalahan server](#request-timed-out), atau [Jaringan](#unable-to-connect-to-api) jika pesan menyebutkan koneksi internet Anda |

26| `<model> is temporarily unavailable, so auto mode cannot determine the safety of...` | [Kesalahan server](#auto-mode-cannot-determine-the-safety-of-an-action) |

27| `You've hit your session limit` / `You've hit your weekly limit` | [Batas penggunaan](#youve-hit-your-session-limit) |

28| `Server is temporarily limiting requests` | [Batas penggunaan](#server-is-temporarily-limiting-requests) |

29| `Request rejected (429)` | [Batas penggunaan](#request-rejected-429) |

30| `Credit balance is too low` | [Batas penggunaan](#credit-balance-is-too-low) |

31| `Not logged in · Please run /login` | [Autentikasi](#not-logged-in) |

32| `Invalid API key` | [Autentikasi](#invalid-api-key) |

33| `This organization has been disabled` | [Autentikasi](#this-organization-has-been-disabled) |

34| `OAuth token revoked` / `OAuth token has expired` | [Autentikasi](#oauth-token-revoked-or-expired) |

35| `does not meet scope requirement user:profile` | [Autentikasi](#oauth-scope-requirement) |

36| `Unable to connect to API` | [Jaringan](#unable-to-connect-to-api) |

37| `SSL certificate verification failed` | [Jaringan](#ssl-certificate-errors) |

38| `Prompt is too long` | [Kesalahan permintaan](#prompt-is-too-long) |

39| `Error during compaction: Conversation too long` | [Kesalahan permintaan](#error-during-compaction-conversation-too-long) |

40| `Request too large` | [Kesalahan permintaan](#request-too-large) |

41| `Image was too large` | [Kesalahan permintaan](#image-was-too-large) |

42| `PDF too large` / `PDF is password protected` | [Kesalahan permintaan](#pdf-errors) |

43| `Extra inputs are not permitted` | [Kesalahan permintaan](#extra-inputs-are-not-permitted) |

44| `There's an issue with the selected model` | [Kesalahan permintaan](#theres-an-issue-with-the-selected-model) |

45| `Claude Opus is not available with the Claude Pro plan` | [Kesalahan permintaan](#claude-opus-is-not-available-with-the-claude-pro-plan) |

46| `thinking.type.enabled is not supported for this model` | [Kesalahan permintaan](#thinking-type-enabled-is-not-supported-for-this-model) |

47| `max_tokens must be greater than thinking.budget_tokens` | [Kesalahan permintaan](#thinking-budget-exceeds-output-limit) |

48| `API Error: 400 due to tool use concurrency issues` | [Kesalahan permintaan](#tool-use-or-thinking-block-mismatch) |

49| Respons tampak berkualitas lebih rendah dari biasanya | [Kualitas respons](#responses-seem-lower-quality-than-usual) |

50 

51## Percobaan ulang otomatis

52 

53Claude Code mencoba ulang kegagalan transien sebelum menampilkan kesalahan kepada Anda. Kesalahan server, respons kelebihan beban, waktu tunggu permintaan, throttle 429 sementara, dan koneksi yang terputus semuanya dicoba ulang hingga 10 kali dengan backoff eksponensial. Saat mencoba ulang, spinner menampilkan hitungan mundur `Retrying in Ns · attempt x/y`.

54 

55Ketika Anda melihat salah satu kesalahan di halaman ini, percobaan ulang tersebut telah habis. Anda dapat menyesuaikan perilaku dengan dua variabel lingkungan:

56 

57| Variabel | Default | Efek |

58| :---------------------------------------- | :------ | :------------------------------------------------------------------------------------------------------------------------------------ |

59| [`CLAUDE_CODE_MAX_RETRIES`](/id/env-vars) | 10 | Jumlah percobaan ulang. Turunkan untuk menampilkan kegagalan lebih cepat dalam skrip; naikkan untuk menunggu insiden yang lebih lama. |

60| [`API_TIMEOUT_MS`](/id/env-vars) | 600000 | Waktu tunggu per permintaan dalam milidetik. Naikkan untuk jaringan lambat atau proxy. |

61 

62## Kesalahan server

63 

64Kesalahan ini berasal dari infrastruktur Anthropic daripada akun atau permintaan Anda.

65 

66### API Error: 500 Internal server error

67 

68Claude Code menampilkan badan respons API mentah untuk status 5xx apa pun. Contoh di bawah menunjukkan respons 500:

69 

70```text theme={null}

71API Error: 500 {"type":"error","error":{"type":"api_error","message":"Internal server error"}} · check status.claude.com

72```

73 

74Ini menunjukkan kegagalan yang tidak terduga di dalam API. Ini tidak disebabkan oleh prompt, pengaturan, atau akun Anda.

75 

76**Yang harus dilakukan:**

77 

78* Periksa [status.claude.com](https://status.claude.com) untuk insiden aktif

79* Tunggu satu menit, kemudian kirim pesan Anda lagi. Pesan asli Anda masih ada dalam percakapan, jadi untuk prompt panjang Anda dapat mengetik `try again` daripada menempel seluruh hal.

80* Jika kesalahan berlanjut tanpa insiden yang diposting, jalankan `/feedback` sehingga Anthropic dapat menyelidiki dengan detail permintaan Anda. Lihat [Laporkan kesalahan](#report-an-error) jika `/feedback` tidak tersedia di penyedia Anda.

81 

82### API Error: Repeated 529 Overloaded errors

83 

84API sementara pada kapasitas di semua pengguna. Claude Code telah mencoba ulang beberapa kali sebelum menampilkan pesan ini:

85 

86```text theme={null}

87API Error: Repeated 529 Overloaded errors · check status.claude.com

88```

89 

90529 bukan batas penggunaan Anda dan tidak dihitung terhadap kuota Anda.

91 

92**Yang harus dilakukan:**

93 

94* Periksa [status.claude.com](https://status.claude.com) untuk pemberitahuan kapasitas

95* Coba lagi dalam beberapa menit

96* Jalankan `/model` dan beralih ke model berbeda untuk terus bekerja, karena kapasitas dilacak per model. Claude Code meminta Anda melakukan ini ketika satu model mengalami beban yang sangat tinggi, misalnya `Opus is experiencing high load, please use /model to switch to Sonnet`.

97 

98### Request timed out

99 

100API tidak merespons sebelum batas waktu koneksi.

101 

102```text theme={null}

103Request timed out

104```

105 

106Ini dapat terjadi selama periode beban tinggi atau ketika respons yang sangat besar sedang dihasilkan. Waktu tunggu permintaan default adalah 10 menit.

107 

108**Yang harus dilakukan:**

109 

110* Coba ulang permintaan

111* Untuk tugas yang berjalan lama, pecah pekerjaan menjadi prompt yang lebih kecil

112* Jika jaringan lambat atau proxy adalah penyebabnya, naikkan `API_TIMEOUT_MS` seperti yang dijelaskan dalam [Percobaan ulang otomatis](#automatic-retries)

113* Jika waktu tunggu sering terjadi dan jaringan Anda sehat, lihat [Kesalahan jaringan dan koneksi](#network-and-connection-errors) di bawah

114 

115### Auto mode cannot determine the safety of an action

116 

117Model yang digunakan [auto mode](/id/permission-modes#eliminate-prompts-with-auto-mode) untuk mengklasifikasikan tindakan kelebihan beban, jadi auto mode memblokir tindakan daripada menyetujuinya tanpa diperiksa.

118 

119```text theme={null}

120<model> is temporarily unavailable, so auto mode cannot determine the safety of <tool> right now. Wait briefly and then try this action again.

121```

122 

123Pembacaan, pencarian, dan pengeditan di dalam direktori kerja Anda melewati pengklasifikasi, jadi mereka terus bekerja selama pemadaman.

124 

125**Yang harus dilakukan:**

126 

127* Coba ulang setelah beberapa detik; Claude melihat pesan yang sama dan biasanya mencoba ulang sendiri

128* Jika percobaan ulang terus gagal, lanjutkan dengan tugas baca-saja dan kembali ke tindakan yang diblokir nanti

129* Ini bersifat sementara dan tidak terkait dengan [kelayakan auto mode](/id/permission-modes#eliminate-prompts-with-auto-mode); Anda tidak perlu mengubah pengaturan

130 

131## Batas penggunaan

132 

133Kesalahan ini berarti kuota yang terikat pada akun atau paket Anda telah tercapai. Mereka berbeda dari [kesalahan server](#server-errors), yang mempengaruhi semua orang.

134 

135### You've hit your session limit

136 

137Paket langganan mencakup tunjangan penggunaan bergulir. Ketika habis Anda melihat salah satu pesan ini:

138 

139```text theme={null}

140You've hit your session limit · resets 3:45pm

141You've hit your weekly limit · resets Mon 12:00am

142You've hit your Opus limit · resets 3:45pm

143```

144 

145Claude Code memblokir permintaan lebih lanjut hingga waktu reset yang ditunjukkan dalam pesan.

146 

147**Yang harus dilakukan:**

148 

149* Tunggu waktu reset yang ditunjukkan dalam kesalahan

150* Jalankan `/usage` untuk melihat batas paket Anda dan kapan mereka direset

151* Jalankan `/extra-usage` untuk membeli penggunaan tambahan di Pro dan Max, atau untuk memintanya dari admin Anda di Team dan Enterprise. Lihat [Extra usage for paid plans](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) untuk cara ini ditagih.

152* Untuk meningkatkan paket Anda untuk batas dasar yang lebih tinggi, lihat [claude.com/pricing](https://claude.com/pricing)

153 

154Untuk menonton tunjangan sisa Anda sebelum Anda mencapai batas, tambahkan bidang `rate_limits` ke [baris status kustom](/id/statusline#rate-limit-usage), atau di aplikasi Desktop klik [cincin penggunaan](/id/desktop#check-usage) di sebelah pemilih model.

155 

156### Server is temporarily limiting requests

157 

158API menerapkan throttle berumur pendek yang tidak terkait dengan kuota paket Anda.

159 

160```text theme={null}

161API Error: Server is temporarily limiting requests (not your usage limit)

162```

163 

164Ini [dicoba ulang secara otomatis](#automatic-retries) sebelum ditampilkan.

165 

166**Yang harus dilakukan:**

167 

168* Tunggu sebentar dan coba lagi

169* Periksa [status.claude.com](https://status.claude.com) jika berlanjut

170 

171### Request rejected (429)

172 

173Anda telah mencapai batas laju yang dikonfigurasi untuk kunci API, proyek Amazon Bedrock, atau proyek Google Vertex AI Anda.

174 

175```text theme={null}

176API Error: Request rejected (429) · this may be a temporary capacity issue

177```

178 

179**Yang harus dilakukan:**

180 

181* Jalankan `/status` dan konfirmasi kredensial aktif adalah yang Anda harapkan. `ANTHROPIC_API_KEY` yang tersesat di lingkungan Anda dapat merutekan permintaan melalui kunci tingkat rendah daripada langganan Anda.

182* Periksa konsol penyedia Anda untuk batas aktif dan minta tingkat yang lebih tinggi jika diperlukan

183* Untuk kunci API Anthropic, lihat [referensi batas laju](https://platform.claude.com/docs/en/api/rate-limits) untuk cara kerja tingkat dan cara menetapkan batas per-workspace

184* Kurangi konkurensi: turunkan [`CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY`](/id/env-vars), hindari menjalankan banyak subagen paralel, atau beralih ke model yang lebih kecil dengan `/model` untuk run skrip volume tinggi

185 

186### Credit balance is too low

187 

188Organisasi Console Anda telah kehabisan kredit prabayar.

189 

190```text theme={null}

191Credit balance is too low

192```

193 

194**Yang harus dilakukan:**

195 

196* Tambahkan kredit di [platform.claude.com/settings/billing](https://platform.claude.com/settings/billing), dan pertimbangkan untuk mengaktifkan auto-reload di sana sehingga saldo terisi ulang sebelum mencapai nol

197* Beralih ke autentikasi langganan dengan `/login` jika Anda memiliki paket Pro, Max, Team, atau Enterprise

198* Tetapkan batas pengeluaran per-workspace di Console untuk mencegah satu proyek menguras saldo org. Lihat [Manage costs effectively](/id/costs).

199 

200## Kesalahan autentikasi

201 

202Kesalahan ini berarti Claude Code tidak dapat membuktikan siapa Anda kepada API. Jalankan `/status` kapan saja untuk melihat kredensial mana yang saat ini aktif.

203 

204### Not logged in

205 

206Tidak ada kredensial yang valid tersedia untuk sesi ini.

207 

208```text theme={null}

209Not logged in · Please run /login

210```

211 

212**Yang harus dilakukan:**

213 

214* Jalankan `/login` untuk autentikasi dengan langganan Claude atau akun Console Anda

215* Jika Anda mengharapkan variabel lingkungan untuk mengautentikasi Anda, konfirmasi `ANTHROPIC_API_KEY` diatur dan diekspor di shell tempat Anda meluncurkan `claude`

216* Untuk CI atau otomasi di mana login interaktif tidak mungkin, konfigurasikan skrip [`apiKeyHelper`](/id/settings#available-settings) yang mengambil kunci saat startup

217* Lihat [Authentication precedence](/id/authentication#authentication-precedence) untuk memahami kredensial mana yang menang ketika beberapa ada

218 

219Jika Anda diminta untuk masuk berulang kali, lihat [Not logged in or token expired](/id/troubleshoot-install#not-logged-in-or-token-expired) untuk perbaikan jam sistem dan macOS Keychain.

220 

221### Invalid API key

222 

223Variabel lingkungan `ANTHROPIC_API_KEY` atau skrip `apiKeyHelper` mengembalikan kunci yang ditolak API.

224 

225```text theme={null}

226Invalid API key · Fix external API key

227```

228 

229**Yang harus dilakukan:**

230 

231* Periksa kesalahan ketik dan konfirmasi kunci belum dicabut di [Console](https://platform.claude.com/settings/keys)

232* Jalankan `env | grep ANTHROPIC` di shell yang sama. Alat seperti direnv, plugin shell dotenv, dan terminal IDE dapat memuat kunci basi dari file `.env` di proyek Anda tanpa Anda menetapkannya secara eksplisit.

233* Batalkan pengaturan `ANTHROPIC_API_KEY` dan jalankan `/login` untuk menggunakan autentikasi langganan sebagai gantinya

234* Jika kunci berasal dari skrip [`apiKeyHelper`](/id/settings#available-settings), jalankan skrip secara langsung untuk mengonfirmasi itu mencetak kunci yang valid di stdout

235* Jalankan `/status` untuk mengonfirmasi sumber kredensial mana yang sebenarnya digunakan Claude Code

236 

237### This organization has been disabled

238 

239`ANTHROPIC_API_KEY` basi dari organisasi Console yang dinonaktifkan menimpa login langganan Anda.

240 

241```text theme={null}

242Your ANTHROPIC_API_KEY belongs to a disabled organization · Unset the environment variable to use your other credentials

243API Error: 400 ... This organization has been disabled.

244```

245 

246Variabel lingkungan memiliki prioritas daripada `/login`, jadi kunci yang diekspor di profil shell Anda atau dimuat dari file `.env` digunakan bahkan ketika Anda memiliki langganan Pro atau Max yang berfungsi. Dalam mode non-interaktif (`-p`), kunci selalu digunakan saat ada.

247 

248**Yang harus dilakukan:**

249 

250* Batalkan pengaturan `ANTHROPIC_API_KEY` di shell saat ini dan hapus dari profil shell Anda, kemudian luncurkan ulang `claude`

251* Jalankan `/status` setelahnya untuk mengonfirmasi kredensial aktif adalah langganan Anda

252* Jika tidak ada variabel lingkungan yang diatur dan kesalahan berlanjut, organisasi yang dinonaktifkan adalah yang terikat pada `/login` Anda. Hubungi dukungan atau masuk dengan akun berbeda.

253 

254### OAuth token revoked or expired

255 

256Login yang disimpan tidak lagi valid. Token yang dicabut berarti Anda keluar di mana-mana atau admin menghapus akses; token yang kedaluwarsa berarti penyegaran otomatis gagal di tengah sesi.

257 

258```text theme={null}

259OAuth token revoked · Please run /login

260OAuth token has expired · Please run /login

261API Error: 401 ... authentication_error

262```

263 

264**Yang harus dilakukan:**

265 

266* Jalankan `/login` untuk masuk lagi

267* Jika kesalahan kembali dalam sesi yang sama setelah autentikasi ulang, jalankan `/logout` terlebih dahulu untuk sepenuhnya menghapus token yang disimpan, kemudian `/login`

268* Untuk prompt berulang untuk masuk di seluruh peluncuran, lihat pemeriksaan jam sistem dan macOS Keychain di [Troubleshooting](/id/troubleshoot-install#not-logged-in-or-token-expired)

269* Untuk kegagalan lainnya termasuk `403 Forbidden` dan masalah browser OAuth, lihat [Login and authentication](/id/troubleshoot-install#login-and-authentication)

270 

271### OAuth scope requirement

272 

273Token yang disimpan mendahului cakupan izin yang diperlukan fitur yang lebih baru. Anda melihat ini paling sering dari `/usage` dan indikator penggunaan baris status:

274 

275```text theme={null}

276OAuth token does not meet scope requirement: user:profile

277```

278 

279**Yang harus dilakukan:**

280 

281* Jalankan `/login` untuk membuat token baru dengan cakupan saat ini. Anda tidak perlu keluar terlebih dahulu.

282 

283## Kesalahan jaringan dan koneksi

284 

285Kesalahan ini berarti Claude Code tidak dapat menjangkau API sama sekali. Mereka hampir selalu berasal dari jaringan lokal, proxy, atau firewall Anda daripada infrastruktur Anthropic.

286 

287### Unable to connect to API

288 

289Koneksi TCP ke API gagal atau tidak pernah selesai.

290 

291```text theme={null}

292Unable to connect to API. Check your internet connection

293Unable to connect to API (ECONNREFUSED)

294Unable to connect to API (ECONNRESET)

295Unable to connect to API (ETIMEDOUT)

296fetch failed

297Request timed out. Check your internet connection and proxy settings

298```

299 

300Penyebab umum termasuk tidak ada akses internet, VPN yang memblokir `api.anthropic.com`, atau proxy perusahaan yang diperlukan yang tidak dikonfigurasi.

301 

302**Yang harus dilakukan:**

303 

304* Konfirmasi Anda dapat menjangkau host API dari shell yang sama dengan menjalankan `curl -I https://api.anthropic.com`. Di Windows PowerShell gunakan `curl.exe -I https://api.anthropic.com` sehingga alias `Invoke-WebRequest` bawaan tidak digunakan.

305* Jika Anda berada di belakang proxy perusahaan, atur `HTTPS_PROXY` sebelum meluncurkan Claude Code dan lihat [Network configuration](/id/network-config)

306* Jika Anda merutekan melalui gateway LLM atau relay, atur [`ANTHROPIC_BASE_URL`](/id/env-vars) ke alamatnya. Lihat [LLM gateway configuration](/id/llm-gateway) untuk penyiapan.

307* Pastikan firewall Anda memungkinkan host yang tercantum dalam [Network access requirements](/id/network-config#network-access-requirements)

308* Kegagalan intermiten [dicoba ulang secara otomatis](#automatic-retries); kegagalan persisten menunjukkan masalah jaringan lokal

309 

310Jika `curl` berhasil tetapi Claude Code masih gagal, penyebabnya biasanya sesuatu antara Node.js dan jaringan daripada jaringan itu sendiri:

311 

312* Di Linux dan WSL, periksa `/etc/resolv.conf` untuk nameserver yang tidak dapat dijangkau. WSL khususnya dapat mewarisi resolver yang rusak dari host.

313* Di macOS, klien VPN yang terputus atau dihapus dapat meninggalkan antarmuka terowongan atau aturan perutean. Periksa `ifconfig` untuk antarmuka `utun` basi dan hapus ekstensi jaringan VPN di System Settings.

314* Docker Desktop dan runtime kontainer serupa dapat mencegat lalu lintas keluar. Keluar dari mereka dan coba ulang untuk mengesampingkan ini.

315 

316### SSL certificate errors

317 

318Proxy atau perangkat keamanan di jaringan Anda mencegat lalu lintas TLS dengan sertifikatnya sendiri, dan Node.js tidak mempercayainya.

319 

320```text theme={null}

321Unable to connect to API: SSL certificate verification failed. Check your proxy or corporate SSL certificates

322Unable to connect to API: Self-signed certificate detected

323```

324 

325**Yang harus dilakukan:**

326 

327* Ekspor bundel CA organisasi Anda dan arahkan Node ke sana dengan `NODE_EXTRA_CA_CERTS=/path/to/ca-bundle.pem`

328* Lihat [Network configuration](/id/network-config#custom-ca-certificates) untuk instruksi penyiapan lengkap

329* Jangan atur `NODE_TLS_REJECT_UNAUTHORIZED=0`, yang menonaktifkan validasi sertifikat sepenuhnya

330 

331## Kesalahan permintaan

332 

333Kesalahan ini berarti API menerima permintaan Anda tetapi menolak kontennya.

334 

335### Prompt is too long

336 

337Percakapan ditambah file terlampir melebihi jendela konteks model.

338 

339```text theme={null}

340Prompt is too long

341```

342 

343**Yang harus dilakukan:**

344 

345* Jalankan `/compact` untuk merangkum putaran sebelumnya dan membebaskan ruang, atau `/clear` untuk memulai segar

346* Jalankan `/context` untuk melihat rincian apa yang mengonsumsi jendela: prompt sistem, alat, file memori, dan pesan

347* Nonaktifkan server MCP yang tidak Anda gunakan dengan `/mcp disable <name>` untuk menghapus definisi alat mereka dari konteks

348* Pangkas file memori `CLAUDE.md` besar, atau pindahkan instruksi ke [aturan bersisir jalur](/id/memory#path-specific-rules) yang dimuat hanya ketika relevan

349* Subagen mewarisi setiap definisi alat MCP dari sesi induk, yang dapat mengisi jendela konteks mereka sebelum putaran pertama. Nonaktifkan server MCP yang tidak Anda gunakan sebelum menghasilkan subagen.

350* Auto-compact aktif secara default dan biasanya mencegah kesalahan ini. Jika Anda telah menetapkan [`DISABLE_AUTO_COMPACT`](/id/env-vars), aktifkan kembali atau jalankan `/compact` secara manual sebelum jendela terisi.

351 

352Lihat [Jelajahi jendela konteks](/id/context-window) untuk tampilan interaktif tentang bagaimana konteks terisi.

353 

354### Error during compaction: Conversation too long

355 

356`/compact` itu sendiri gagal karena tidak ada cukup konteks gratis untuk menampung ringkasan yang dihasilkannya.

357 

358```text theme={null}

359Error during compaction: Conversation too long. Press esc twice to go up a few messages and try again.

360```

361 

362Ini dapat terjadi ketika jendela sudah penuh pada saat auto-compact dipicu, atau ketika Anda menjalankan `/compact` setelah melihat `Prompt is too long`.

363 

364**Yang harus dilakukan:**

365 

366* Tekan Esc dua kali untuk membuka daftar pesan dan mundur beberapa putaran. Ini menghapus pesan terbaru dari konteks. Kemudian jalankan `/compact` lagi.

367* Jika mundur tidak membebaskan cukup ruang, jalankan `/clear` untuk memulai sesi segar. Percakapan sebelumnya Anda dipertahankan dan dapat dibuka kembali dengan `/resume`.

368 

369### Request too large

370 

371Badan permintaan mentah melebihi batas byte API sebelum tokenisasi, biasanya karena file atau lampiran besar yang ditempel.

372 

373```text theme={null}

374Request too large (max 30 MB). Double press esc to go back and remove or shrink the attached content.

375```

376 

377Ini adalah batas ukuran pada permintaan HTTP, terpisah dari [batas jendela konteks](#prompt-is-too-long).

378 

379**Yang harus dilakukan:**

380 

381* Tekan Esc dua kali dan mundur melewati putaran yang menambahkan konten yang terlalu besar

382* Referensikan file besar berdasarkan jalur daripada menempel kontennya, sehingga Claude dapat membacanya dalam potongan

383* Untuk gambar, lihat [Image was too large](#image-was-too-large) di bawah

384 

385### Image was too large

386 

387Gambar yang ditempel atau dilampirkan melebihi batas ukuran atau dimensi API.

388 

389```text theme={null}

390Image was too large. Double press esc to go back and try again with a smaller image.

391API Error: 400 ... image dimensions exceed max allowed size

392```

393 

394Gambar tetap dalam riwayat percakapan setelah kesalahan, jadi setiap pesan berikutnya gagal dengan kesalahan yang sama sampai Anda menghapusnya.

395 

396**Yang harus dilakukan:**

397 

398* Tekan Esc dua kali dan mundur melewati putaran tempat gambar ditambahkan

399* Ubah ukuran gambar sebelum menempel. API menerima gambar hingga 8000 piksel di tepi terpanjang untuk satu gambar, atau 2000 piksel ketika banyak gambar ada dalam konteks.

400* Ambil tangkapan layar yang lebih ketat dari wilayah yang relevan daripada layar penuh

401 

402### PDF errors

403 

404PDF yang Anda lampirkan tidak dapat diproses.

405 

406```text theme={null}

407PDF too large (max 100 pages, 32 MB). Try splitting it or extracting text first.

408PDF is password protected. Try removing protection or extracting text first.

409The PDF file was not valid. Try converting to a different format first.

410```

411 

412**Yang harus dilakukan:**

413 

414* Untuk PDF yang terlalu besar, minta Claude untuk membaca rentang halaman dengan alat Read daripada melampirkan seluruh file, atau ekstrak teks dengan alat seperti `pdftotext` dan referensikan file output berdasarkan jalur

415* Untuk PDF yang dilindungi atau tidak valid, hapus kata sandi atau ekspor ulang file dari aplikasi sumbernya, kemudian coba lagi

416 

417### Extra inputs are not permitted

418 

419Proxy atau gateway LLM antara Claude Code dan API menghapus header permintaan `anthropic-beta`, jadi API menolak bidang yang bergantung padanya.

420 

421```text theme={null}

422API Error: 400 ... Extra inputs are not permitted ... context_management

423API Error: 400 ... Extra inputs are not permitted ... tools.0.custom.input_examples

424API Error: 400 ... Unexpected value(s) for the `anthropic-beta` header

425```

426 

427Claude Code mengirim bidang khusus beta seperti `context_management`, `effort`, dan alat `input_examples` bersama dengan header `anthropic-beta` yang mengaktifkannya. Ketika gateway meneruskan badan tetapi menghapus header, API melihat bidang yang tidak dikenalinya.

428 

429**Yang harus dilakukan:**

430 

431* Konfigurasikan gateway Anda untuk meneruskan header `anthropic-beta`. Lihat [Konfigurasi gateway LLM](/id/llm-gateway).

432* Sebagai fallback, atur [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1`](/id/env-vars) sebelum meluncurkan. Ini menonaktifkan fitur yang memerlukan header beta sehingga permintaan berhasil melalui gateway yang tidak dapat meneruskannya.

433 

434### There's an issue with the selected model

435 

436Nama model yang dikonfigurasi tidak dikenali atau akun Anda tidak memiliki akses ke sana.

437 

438```text theme={null}

439There's an issue with the selected model (claude-...). It may not exist or you may not have access to it. Run /model to select a different one.

440```

441 

442**Yang harus dilakukan:**

443 

444* Jalankan `/model` untuk memilih dari model yang tersedia untuk akun Anda

445* Gunakan alias seperti `sonnet` atau `opus` daripada ID versi lengkap. Alias melacak rilis terbaru sehingga tidak menjadi usang. Lihat [Konfigurasi model](/id/model-config).

446* Jika model yang salah terus kembali, ID basi diatur di suatu tempat. Periksa dalam [urutan prioritas](/id/model-config#setting-your-model): flag `--model`, variabel lingkungan `ANTHROPIC_MODEL`, kemudian bidang `model` di `.claude/settings.local.json`, `.claude/settings.json` proyek Anda, dan `~/.claude/settings.json`. Hapus nilai basi dan Claude Code kembali ke default akun Anda.

447* Untuk penyebaran Vertex AI, lihat [Pemecahan masalah Vertex AI](/id/google-vertex-ai#troubleshooting).

448 

449### Claude Opus is not available with the Claude Pro plan

450 

451Paket langganan aktif Anda tidak menyertakan model yang Anda pilih.

452 

453```text theme={null}

454Claude Opus is not available with the Claude Pro plan · Select a different model in /model

455```

456 

457**Yang harus dilakukan:**

458 

459* Jalankan `/model` dan pilih model yang disertakan paket Anda

460* Jika Anda baru-baru ini meningkatkan paket dan masih melihat ini, jalankan `/logout` kemudian `/login`. Token yang disimpan mencerminkan paket Anda pada saat Anda masuk, jadi meningkatkan di web tidak berlaku dalam sesi yang ada sampai Anda autentikasi ulang.

461* Lihat [claude.com/pricing](https://claude.com/pricing) untuk model mana yang disertakan setiap paket

462 

463### thinking.type.enabled is not supported for this model

464 

465Versi Claude Code Anda lebih lama dari minimum untuk Opus 4.7. CLI mengirim konfigurasi pemikiran yang tidak lagi diterima model.

466 

467```text theme={null}

468API Error: 400 ... "thinking.type.enabled" is not supported for this model. Use "thinking.type.adaptive" and "output_config.effort" to control thinking behavior.

469```

470 

471**Yang harus dilakukan:**

472 

473* Jalankan `claude update` untuk meningkatkan ke v2.1.111 atau lebih baru, kemudian restart Claude Code

474* Jika Anda tidak dapat meningkatkan, jalankan `/model` dan pilih Opus 4.6 atau Sonnet sebagai gantinya

475* Jika Anda mengalami ini di Agent SDK, lihat [Pemecahan masalah SDK](/id/agent-sdk/quickstart#troubleshooting)

476 

477### Thinking budget exceeds output limit

478 

479Anggaran pemikiran yang diperluas yang dikonfigurasi melebihi panjang respons maksimum, jadi tidak ada ruang yang tersisa untuk jawaban sebenarnya.

480 

481```text theme={null}

482API Error: 400 ... max_tokens must be greater than thinking.budget_tokens

483```

484 

485Claude Code menyesuaikan nilai-nilai ini secara otomatis di Anthropic API. Anda biasanya melihat kesalahan ini di Amazon Bedrock atau Google Vertex AI ketika [`MAX_THINKING_TOKENS`](/id/env-vars) diatur lebih tinggi dari batas output penyedia, atau ketika mode rencana menaikkan anggaran pemikiran.

486 

487**Yang harus dilakukan:**

488 

489* Turunkan `MAX_THINKING_TOKENS`, atau naikkan [`CLAUDE_CODE_MAX_OUTPUT_TOKENS`](/id/env-vars) di atas anggaran pemikiran

490* Lihat [Pemikiran yang diperluas](/id/common-workflows#use-extended-thinking-thinking-mode) untuk cara anggaran berinteraksi dengan panjang output

491 

492### Tool use or thinking block mismatch

493 

494Riwayat percakapan mencapai API dalam keadaan tidak konsisten, biasanya setelah panggilan alat terputus atau putaran diedit di tengah aliran.

495 

496```text theme={null}

497API Error: 400 due to tool use concurrency issues. Run /rewind to recover the conversation.

498API Error: 400 ... unexpected `tool_use_id` found in `tool_result` blocks

499API Error: 400 ... thinking blocks ... cannot be modified

500```

501 

502Ketiga varian berarti hal yang sama: urutan blok `tool_use`, `tool_result`, dan `thinking` dalam riwayat tidak lagi cocok dengan apa yang diharapkan API.

503 

504**Yang harus dilakukan:**

505 

506* Jalankan `/rewind`, atau tekan Esc dua kali, untuk mundur ke checkpoint sebelum putaran yang rusak dan lanjutkan dari sana. Lihat [Checkpointing](/id/checkpointing) untuk cara checkpoint dibuat dan dipulihkan.

507 

508## Responses seem lower quality than usual

509 

510Jika jawaban Claude tampak kurang mampu dari yang Anda harapkan tetapi tidak ada kesalahan yang ditampilkan, penyebabnya biasanya keadaan percakapan daripada model itu sendiri. Claude Code tidak secara diam-diam mengubah versi model. Ini dapat beralih ke model fallback dalam kasus spesifik seperti kuota Opus tercapai atau Bedrock atau Vertex AI region tidak memiliki model Anda; pemeriksaan Model selection di bawah menangkap keduanya, dan [Model configuration](/id/model-config) menjelaskan kapan fallback berlaku.

511 

512Periksa ini terlebih dahulu:

513 

514* **Model selection**: jalankan `/model` untuk mengonfirmasi Anda berada di model yang Anda harapkan. Pilihan `/model` sebelumnya atau variabel lingkungan `ANTHROPIC_MODEL` mungkin membuat Anda di model yang lebih kecil dari yang Anda maksudkan.

515* **Effort level**: jalankan `/effort` untuk memeriksa tingkat penalaran saat ini dan naikkan untuk debugging atau pekerjaan desain yang sulit. Default bervariasi menurut model, jadi periksa sebelum menganggap Anda di bawah maksimum. Lihat [Adjust effort level](/id/model-config#adjust-effort-level) untuk default per-model dan pintasan `ultrathink`.

516* **Context pressure**: jalankan `/context` untuk melihat seberapa penuh jendela. Jika mendekati kapasitas, jalankan `/compact` pada titik istirahat alami atau `/clear` untuk memulai segar. Lihat [Explore the context window](/id/context-window) untuk cara auto-compact mempengaruhi putaran sebelumnya.

517* **Stale instructions**: file `CLAUDE.md` besar atau usang dan definisi alat MCP mengonsumsi konteks dan dapat mengarahkan respons. `/doctor` menandai file memori yang terlalu besar dan definisi subagen; `/context` menunjukkan penggunaan token alat MCP.

518 

519Ketika respons salah, mundur biasanya bekerja lebih baik daripada membalas dengan koreksi. Tekan Esc dua kali atau jalankan `/rewind` untuk mundur ke sebelum putaran yang buruk, kemudian rephrase prompt dengan lebih spesifik. Mengoreksi dalam-thread menjaga upaya yang salah dalam konteks, yang dapat menambatkan jawaban nanti ke sana. Lihat [Checkpointing](/id/checkpointing).

520 

521Jika kualitas masih tampak tidak normal setelah memeriksa di atas, jalankan `/feedback` dan jelaskan apa yang Anda harapkan versus apa yang Anda dapatkan. Umpan balik yang dikirimkan dengan cara ini mencakup transkrip percakapan, yang merupakan cara tercepat bagi Anthropic untuk mendiagnosis regresi nyata. Lihat [Report an error](#report-an-error) jika `/feedback` tidak tersedia di penyedia Anda.

522 

523## Laporkan kesalahan

524 

525Halaman ini mencakup kesalahan dari Claude API. Untuk kesalahan dari komponen Claude Code lainnya, lihat panduan yang relevan:

526 

527* Server MCP gagal terhubung atau autentikasi: [MCP](/id/mcp)

528* Skrip hook gagal atau memblokir alat: [Debug hooks](/id/hooks#debug-hooks)

529* Izin ditolak atau kesalahan filesystem selama instalasi: [Troubleshooting installation and login](/id/troubleshoot-install)

530 

531Jika kesalahan tidak tercantum di sini atau perbaikan yang disarankan tidak membantu:

532 

533* Jalankan `/feedback` di dalam Claude Code untuk mengirim transkrip dan deskripsi ke Anthropic. Perintah juga menawarkan untuk membuka masalah GitHub yang sudah diisi sebelumnya. Umpan balik tidak tersedia di Bedrock, Vertex AI, dan penyebaran Foundry.

534* Jalankan `/doctor` untuk memeriksa masalah konfigurasi lokal

535* Periksa [status.claude.com](https://status.claude.com) untuk insiden aktif

536* Cari [masalah yang ada](https://github.com/anthropics/claude-code/issues) di GitHub

fast-mode.md +151 −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# Percepat respons dengan mode cepat

6 

7> Dapatkan respons Opus 4.6 yang lebih cepat di Claude Code dengan mengaktifkan mode cepat.

8 

9<Note>

10 Mode cepat berada dalam [pratinjau penelitian](#research-preview). Fitur, harga, dan ketersediaan dapat berubah berdasarkan umpan balik.

11</Note>

12 

13Mode cepat adalah konfigurasi kecepatan tinggi untuk Claude Opus 4.6, membuat model 2,5x lebih cepat dengan biaya per token yang lebih tinggi. Aktifkan dengan `/fast` ketika Anda membutuhkan kecepatan untuk pekerjaan interaktif seperti iterasi cepat atau debugging langsung, dan nonaktifkan ketika biaya lebih penting daripada latensi.

14 

15Mode cepat bukan model yang berbeda. Mode ini menggunakan Opus 4.6 yang sama dengan konfigurasi API berbeda yang memprioritaskan kecepatan daripada efisiensi biaya. Anda mendapatkan kualitas dan kemampuan yang identik, hanya respons yang lebih cepat.

16 

17<Note>

18 Mode cepat memerlukan Claude Code v2.1.36 atau lebih baru. Periksa versi Anda dengan `claude --version`.

19</Note>

20 

21Yang perlu diketahui:

22 

23* Gunakan `/fast` untuk mengaktifkan mode cepat di Claude Code CLI. Juga tersedia melalui `/fast` di Ekstensi Claude Code VS Code.

24* Harga mode cepat untuk Opus 4.6 dimulai dari \$30/150 MTok. Mode cepat tersedia dengan diskon 50% untuk semua paket hingga 23:59 PT pada 16 Februari.

25* Tersedia untuk semua pengguna Claude Code pada paket berlangganan (Pro/Max/Team/Enterprise) dan Claude Console.

26* Untuk pengguna Claude Code pada paket berlangganan (Pro/Max/Team/Enterprise), mode cepat tersedia hanya melalui penggunaan tambahan dan tidak termasuk dalam batas laju penggunaan berlangganan.

27 

28Halaman ini mencakup cara [mengaktifkan mode cepat](#toggle-fast-mode), [pertukaran biayanya](#understand-the-cost-tradeoff), [kapan menggunakannya](#decide-when-to-use-fast-mode), [persyaratan](#requirements), [opt-in per sesi](#require-per-session-opt-in), dan [perilaku batas laju](#handle-rate-limits).

29 

30## Aktifkan mode cepat

31 

32Aktifkan mode cepat dengan salah satu cara berikut:

33 

34* Ketik `/fast` dan tekan Tab untuk mengaktifkan atau menonaktifkan

35* Atur `"fastMode": true` di [file pengaturan pengguna Anda](/id/settings)

36 

37Secara default, mode cepat bertahan di seluruh sesi. Administrator dapat mengonfigurasi mode cepat untuk disetel ulang setiap sesi. Lihat [require per-session opt-in](#require-per-session-opt-in) untuk detail.

38 

39Untuk efisiensi biaya terbaik, aktifkan mode cepat di awal sesi daripada beralih di tengah percakapan. Lihat [understand the cost tradeoff](#understand-the-cost-tradeoff) untuk detail.

40 

41Ketika Anda mengaktifkan mode cepat:

42 

43* Jika Anda berada di model yang berbeda, Claude Code secara otomatis beralih ke Opus 4.6

44* Anda akan melihat pesan konfirmasi: "Fast mode ON"

45* Ikon kecil `↯` muncul di sebelah prompt saat mode cepat aktif

46* Jalankan `/fast` lagi kapan saja untuk memeriksa apakah mode cepat aktif atau tidak

47 

48Ketika Anda menonaktifkan mode cepat dengan `/fast` lagi, Anda tetap berada di Opus 4.6. Model tidak kembali ke model sebelumnya. Untuk beralih ke model yang berbeda, gunakan `/model`.

49 

50## Pahami pertukaran biaya

51 

52Mode cepat memiliki harga per-token yang lebih tinggi daripada Opus 4.6 standar:

53 

54| Mode | Input (MTok) | Output (MTok) |

55| ------------------------------- | ------------ | ------------- |

56| Mode cepat di Opus 4.6 (\<200K) | \$30 | \$150 |

57| Mode cepat di Opus 4.6 (>200K) | \$60 | \$225 |

58 

59Mode cepat kompatibel dengan jendela konteks yang diperluas 1M token.

60 

61Ketika Anda beralih ke mode cepat di tengah percakapan, Anda membayar harga token input tanpa cache mode cepat penuh untuk seluruh konteks percakapan. Ini lebih mahal daripada jika Anda telah mengaktifkan mode cepat dari awal.

62 

63## Tentukan kapan menggunakan mode cepat

64 

65Mode cepat terbaik untuk pekerjaan interaktif di mana latensi respons lebih penting daripada biaya:

66 

67* Iterasi cepat pada perubahan kode

68* Sesi debugging langsung

69* Pekerjaan sensitif waktu dengan tenggat waktu ketat

70 

71Mode standar lebih baik untuk:

72 

73* Tugas otonomi jangka panjang di mana kecepatan kurang penting

74* Pemrosesan batch atau pipeline CI/CD

75* Beban kerja sensitif biaya

76 

77### Mode cepat vs tingkat usaha

78 

79Mode cepat dan tingkat usaha keduanya mempengaruhi kecepatan respons, tetapi dengan cara yang berbeda:

80 

81| Pengaturan | Efek |

82| ------------------------------ | ----------------------------------------------------------------------------------------------------- |

83| **Mode cepat** | Kualitas model yang sama, latensi lebih rendah, biaya lebih tinggi |

84| **Tingkat usaha lebih rendah** | Waktu pemikiran lebih sedikit, respons lebih cepat, potensi kualitas lebih rendah pada tugas kompleks |

85 

86Anda dapat menggabungkan keduanya: gunakan mode cepat dengan [tingkat usaha](/id/model-config#adjust-effort-level) yang lebih rendah untuk kecepatan maksimal pada tugas yang mudah.

87 

88## Persyaratan

89 

90Mode cepat memerlukan semua hal berikut:

91 

92* **Tidak tersedia di penyedia cloud pihak ketiga**: mode cepat tidak tersedia di Amazon Bedrock, Google Vertex AI, atau Microsoft Azure Foundry. Mode cepat tersedia melalui API Konsol Anthropic dan untuk paket berlangganan Claude menggunakan penggunaan tambahan.

93* **Penggunaan tambahan diaktifkan**: akun Anda harus memiliki penggunaan tambahan diaktifkan, yang memungkinkan penagihan di luar penggunaan yang disertakan dalam paket Anda. Untuk akun individual, aktifkan ini di [pengaturan penagihan Konsol Anda](https://platform.claude.com/settings/organization/billing). Untuk Teams dan Enterprise, admin harus mengaktifkan penggunaan tambahan untuk organisasi.

94 

95<Note>

96 Penggunaan mode cepat ditagih langsung ke penggunaan tambahan, bahkan jika Anda memiliki penggunaan yang tersisa di paket Anda. Ini berarti token mode cepat tidak dihitung terhadap penggunaan yang disertakan dalam paket Anda dan dikenakan biaya dengan tarif mode cepat dari token pertama.

97</Note>

98 

99* **Aktivasi admin untuk Teams dan Enterprise**: mode cepat dinonaktifkan secara default untuk organisasi Teams dan Enterprise. Admin harus secara eksplisit [mengaktifkan mode cepat](#enable-fast-mode-for-your-organization) sebelum pengguna dapat mengaksesnya.

100 

101<Note>

102 Jika admin Anda belum mengaktifkan mode cepat untuk organisasi Anda, perintah `/fast` akan menampilkan "Fast mode has been disabled by your organization."

103</Note>

104 

105### Aktifkan mode cepat untuk organisasi Anda

106 

107Admin dapat mengaktifkan mode cepat di:

108 

109* **Konsol** (pelanggan API): [preferensi Claude Code](https://platform.claude.com/claude-code/preferences)

110* **Claude AI** (Teams dan Enterprise): [Admin Settings > Claude Code](https://claude.ai/admin-settings/claude-code)

111 

112Opsi lain untuk menonaktifkan mode cepat sepenuhnya adalah dengan menetapkan `CLAUDE_CODE_DISABLE_FAST_MODE=1`. Lihat [Variabel lingkungan](/id/env-vars).

113 

114### Require per-session opt-in

115 

116Secara default, mode cepat bertahan di seluruh sesi: jika pengguna mengaktifkan mode cepat, mode ini tetap aktif di sesi mendatang. Administrator pada paket [Teams](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=fast_mode_teams#team-&-enterprise) atau [Enterprise](https://anthropic.com/contact-sales?utm_source=claude_code\&utm_medium=docs\&utm_content=fast_mode_enterprise) dapat mencegah ini dengan menetapkan `fastModePerSessionOptIn` ke `true` di [pengaturan terkelola](/id/settings#settings-files) atau [pengaturan yang dikelola server](/id/server-managed-settings). Ini menyebabkan setiap sesi dimulai dengan mode cepat mati, memerlukan pengguna untuk secara eksplisit mengaktifkannya dengan `/fast`.

117 

118```json theme={null}

119{

120 "fastModePerSessionOptIn": true

121}

122```

123 

124Ini berguna untuk mengontrol biaya di organisasi di mana pengguna menjalankan beberapa sesi bersamaan. Pengguna masih dapat mengaktifkan mode cepat dengan `/fast` ketika mereka membutuhkan kecepatan, tetapi mode ini disetel ulang di awal setiap sesi baru. Preferensi mode cepat pengguna masih disimpan, jadi menghapus pengaturan ini mengembalikan perilaku persisten default.

125 

126## Tangani batas laju

127 

128Mode cepat memiliki batas laju terpisah dari Opus 4.6 standar. Ketika Anda mencapai batas laju mode cepat atau kehabisan kredit penggunaan tambahan:

129 

1301. Mode cepat secara otomatis kembali ke Opus 4.6 standar

1312. Ikon `↯` berubah menjadi abu-abu untuk menunjukkan cooldown

1323. Anda terus bekerja dengan kecepatan dan harga standar

1334. Ketika cooldown berakhir, mode cepat secara otomatis diaktifkan kembali

134 

135Untuk menonaktifkan mode cepat secara manual daripada menunggu cooldown, jalankan `/fast` lagi.

136 

137## Pratinjau penelitian

138 

139Mode cepat adalah fitur pratinjau penelitian. Ini berarti:

140 

141* Fitur dapat berubah berdasarkan umpan balik

142* Ketersediaan dan harga dapat berubah

143* Konfigurasi API yang mendasar dapat berkembang

144 

145Laporkan masalah atau umpan balik melalui saluran dukungan Anthropic biasa Anda.

146 

147## Lihat juga

148 

149* [Konfigurasi model](/id/model-config): beralih model dan sesuaikan tingkat usaha

150* [Kelola biaya secara efektif](/id/costs): lacak penggunaan token dan kurangi biaya

151* [Konfigurasi baris status](/id/statusline): tampilkan informasi model dan konteks

features-overview.md +294 −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# Perluas Claude Code

6 

7> Pahami kapan menggunakan CLAUDE.md, Skills, subagents, hooks, MCP, dan plugins.

8 

9Claude Code menggabungkan model yang bernalar tentang kode Anda dengan [alat bawaan](/id/how-claude-code-works#tools) untuk operasi file, pencarian, eksekusi, dan akses web. Alat bawaan mencakup sebagian besar tugas pengkodean. Panduan ini mencakup lapisan ekstensi: fitur yang Anda tambahkan untuk menyesuaikan apa yang Claude ketahui, menghubungkannya ke layanan eksternal, dan mengotomatisasi alur kerja.

10 

11<Note>

12 Untuk cara loop agentic inti bekerja, lihat [Cara Claude Code Bekerja](/id/how-claude-code-works).

13</Note>

14 

15**Baru di Claude Code?** Mulai dengan [CLAUDE.md](/id/memory) untuk konvensi proyek. Tambahkan ekstensi lain sesuai kebutuhan Anda.

16 

17## Ikhtisar

18 

19Ekstensi terhubung ke bagian berbeda dari loop agentic:

20 

21* **[CLAUDE.md](/id/memory)** menambahkan konteks persisten yang Claude lihat setiap sesi

22* **[Skills](/id/skills)** menambahkan pengetahuan yang dapat digunakan kembali dan alur kerja yang dapat dipanggil

23* **[MCP](/id/mcp)** menghubungkan Claude ke layanan dan alat eksternal

24* **[Subagents](/id/sub-agents)** menjalankan loop mereka sendiri dalam konteks terisolasi, mengembalikan ringkasan

25* **[Agent teams](/id/agent-teams)** mengoordinasikan beberapa sesi independen dengan tugas bersama dan pesan peer-to-peer

26* **[Hooks](/id/hooks)** berjalan di luar loop sepenuhnya sebagai skrip deterministik

27* **[Plugins](/id/plugins)** dan **[marketplaces](/id/plugin-marketplaces)** mengemas dan mendistribusikan fitur-fitur ini

28 

29[Skills](/id/skills) adalah ekstensi paling fleksibel. Skill adalah file markdown yang berisi pengetahuan, alur kerja, atau instruksi. Anda dapat memanggil skills dengan perintah seperti `/deploy`, atau Claude dapat memuatnya secara otomatis ketika relevan. Skills dapat berjalan dalam percakapan Anda saat ini atau dalam konteks terisolasi melalui subagents.

30 

31## Cocokkan fitur dengan tujuan Anda

32 

33Fitur berkisar dari konteks yang selalu aktif yang Claude lihat setiap sesi, hingga kemampuan on-demand yang dapat Anda atau Claude panggil, hingga otomasi latar belakang yang berjalan pada acara tertentu. Tabel di bawah menunjukkan apa yang tersedia dan kapan masing-masing masuk akal.

34 

35| Fitur | Apa yang dilakukannya | Kapan menggunakannya | Contoh |

36| ---------------------------------- | ------------------------------------------------------------------ | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |

37| **CLAUDE.md** | Konteks persisten dimuat setiap percakapan | Konvensi proyek, aturan "selalu lakukan X" | "Gunakan pnpm, bukan npm. Jalankan tes sebelum commit." |

38| **Skill** | Instruksi, pengetahuan, dan alur kerja yang dapat digunakan Claude | Konten yang dapat digunakan kembali, dokumen referensi, tugas yang dapat diulang | `/deploy` menjalankan daftar periksa deployment Anda; skill dokumen API dengan pola endpoint |

39| **Subagent** | Konteks eksekusi terisolasi yang mengembalikan hasil ringkasan | Isolasi konteks, tugas paralel, pekerja khusus | Tugas penelitian yang membaca banyak file tetapi hanya mengembalikan temuan kunci |

40| **[Agent teams](/id/agent-teams)** | Mengoordinasikan beberapa sesi Claude Code independen | Penelitian paralel, pengembangan fitur baru, debugging dengan hipotesis bersaing | Spawn reviewer untuk memeriksa keamanan, performa, dan tes secara bersamaan |

41| **MCP** | Terhubung ke layanan eksternal | Data atau tindakan eksternal | Kueri database Anda, posting ke Slack, kontrol browser |

42| **Hook** | Skrip deterministik yang berjalan pada acara | Otomasi yang dapat diprediksi, tidak ada LLM yang terlibat | Jalankan ESLint setelah setiap edit file |

43 

44**[Plugins](/id/plugins)** adalah lapisan pengemasan. Plugin menggabungkan skills, hooks, subagents, dan MCP servers menjadi satu unit yang dapat diinstal. Plugin skills memiliki namespace (seperti `/my-plugin:review`) sehingga beberapa plugin dapat hidup berdampingan. Gunakan plugins ketika Anda ingin menggunakan kembali setup yang sama di beberapa repositori atau mendistribusikan ke orang lain melalui **[marketplace](/id/plugin-marketplaces)**.

45 

46### Bandingkan fitur serupa

47 

48Beberapa fitur dapat terlihat serupa. Berikut cara membedakannya.

49 

50<Tabs>

51 <Tab title="Skill vs Subagent">

52 Skills dan subagents menyelesaikan masalah yang berbeda:

53 

54 * **Skills** adalah konten yang dapat digunakan kembali yang dapat Anda muat ke konteks apa pun

55 * **Subagents** adalah pekerja terisolasi yang berjalan terpisah dari percakapan utama Anda

56 

57 | Aspek | Skill | Subagent |

58 | ----------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------------------- |

59 | **Apa itu** | Instruksi, pengetahuan, atau alur kerja yang dapat digunakan kembali | Pekerja terisolasi dengan konteksnya sendiri |

60 | **Manfaat utama** | Bagikan konten di seluruh konteks | Isolasi konteks. Pekerjaan terjadi secara terpisah, hanya ringkasan yang kembali |

61 | **Terbaik untuk** | Materi referensi, alur kerja yang dapat dipanggil | Tugas yang membaca banyak file, pekerjaan paralel, pekerja khusus |

62 

63 **Skills dapat berupa referensi atau tindakan.** Skills referensi memberikan pengetahuan yang Claude gunakan sepanjang sesi Anda (seperti panduan gaya API Anda). Skills tindakan memberi tahu Claude untuk melakukan sesuatu yang spesifik (seperti `/deploy` yang menjalankan alur kerja deployment Anda).

64 

65 **Gunakan subagent** ketika Anda membutuhkan isolasi konteks atau ketika jendela konteks Anda penuh. Subagent mungkin membaca puluhan file atau menjalankan pencarian ekstensif, tetapi percakapan utama Anda hanya menerima ringkasan. Karena pekerjaan subagent tidak mengonsumsi konteks utama Anda, ini juga berguna ketika Anda tidak memerlukan pekerjaan perantara untuk tetap terlihat. Subagents kustom dapat memiliki instruksi mereka sendiri dan dapat memuat skills sebelumnya.

66 

67 **Mereka dapat digabungkan.** Subagent dapat memuat skills tertentu sebelumnya (field `skills:`). Skill dapat berjalan dalam konteks terisolasi menggunakan `context: fork`. Lihat [Skills](/id/skills) untuk detail.

68 </Tab>

69 

70 <Tab title="CLAUDE.md vs Skill">

71 Keduanya menyimpan instruksi, tetapi mereka dimuat secara berbeda dan melayani tujuan yang berbeda.

72 

73 | Aspek | CLAUDE.md | Skill |

74 | --------------------------- | ---------------------------- | ------------------------------------------------- |

75 | **Dimuat** | Setiap sesi, secara otomatis | On demand |

76 | **Dapat menyertakan file** | Ya, dengan impor `@path` | Ya, dengan impor `@path` |

77 | **Dapat memicu alur kerja** | Tidak | Ya, dengan `/<name>` |

78 | **Terbaik untuk** | Aturan "selalu lakukan X" | Materi referensi, alur kerja yang dapat dipanggil |

79 

80 **Letakkan di CLAUDE.md** jika Claude harus selalu mengetahuinya: konvensi pengkodean, perintah build, struktur proyek, aturan "jangan pernah lakukan X".

81 

82 **Letakkan di skill** jika itu materi referensi yang Claude butuhkan kadang-kadang (dokumen API, panduan gaya) atau alur kerja yang Anda picu dengan `/<name>` (deploy, review, release).

83 

84 **Aturan praktis:** Jaga CLAUDE.md di bawah 200 baris. Jika berkembang, pindahkan konten referensi ke skills atau pisahkan ke file [`.claude/rules/`](/id/memory#organize-rules-with-clauderules).

85 </Tab>

86 

87 <Tab title="CLAUDE.md vs Rules vs Skills">

88 Ketiganya menyimpan instruksi, tetapi mereka dimuat secara berbeda:

89 

90 | Aspek | CLAUDE.md | `.claude/rules/` | Skill |

91 | ----------------- | -------------------------------- | ----------------------------------------------- | ----------------------------------------------- |

92 | **Dimuat** | Setiap sesi | Setiap sesi, atau ketika file yang cocok dibuka | On demand, ketika dipanggil atau relevan |

93 | **Cakupan** | Seluruh proyek | Dapat dibatasi ke jalur file | Spesifik tugas |

94 | **Terbaik untuk** | Konvensi inti dan perintah build | Panduan spesifik bahasa atau direktori | Materi referensi, alur kerja yang dapat diulang |

95 

96 **Gunakan CLAUDE.md** untuk instruksi yang setiap sesi butuhkan: perintah build, konvensi tes, arsitektur proyek.

97 

98 **Gunakan rules** untuk menjaga CLAUDE.md tetap fokus. Rules dengan [`paths` frontmatter](/id/memory#path-specific-rules) hanya dimuat ketika Claude bekerja dengan file yang cocok, menghemat konteks.

99 

100 **Gunakan skills** untuk konten yang Claude hanya butuhkan kadang-kadang, seperti dokumentasi API atau daftar periksa deployment yang Anda picu dengan `/<name>`.

101 </Tab>

102 

103 <Tab title="Subagent vs Agent team">

104 Keduanya melakukan paralelisasi pekerjaan, tetapi mereka secara arsitektur berbeda:

105 

106 * **Subagents** berjalan di dalam sesi Anda dan melaporkan hasil kembali ke konteks utama Anda

107 * **Agent teams** adalah sesi Claude Code independen yang berkomunikasi satu sama lain

108 

109 | Aspek | Subagent | Agent team |

110 | ----------------- | ------------------------------------------------------ | --------------------------------------------------------------- |

111 | **Konteks** | Jendela konteks sendiri; hasil kembali ke pemanggil | Jendela konteks sendiri; sepenuhnya independen |

112 | **Komunikasi** | Melaporkan hasil kembali ke agen utama saja | Rekan kerja saling mengirim pesan secara langsung |

113 | **Koordinasi** | Agen utama mengelola semua pekerjaan | Daftar tugas bersama dengan koordinasi diri |

114 | **Terbaik untuk** | Tugas terfokus di mana hanya hasil yang penting | Pekerjaan kompleks yang memerlukan diskusi dan kolaborasi |

115 | **Biaya token** | Lebih rendah: hasil diringkas kembali ke konteks utama | Lebih tinggi: setiap rekan kerja adalah instans Claude terpisah |

116 

117 **Gunakan subagent** ketika Anda membutuhkan pekerja cepat dan terfokus: teliti pertanyaan, verifikasi klaim, tinjau file. Subagent melakukan pekerjaan dan mengembalikan ringkasan. Percakapan utama Anda tetap bersih.

118 

119 **Gunakan agent team** ketika rekan kerja perlu berbagi temuan, menantang satu sama lain, dan berkoordinasi secara independen. Agent teams terbaik untuk penelitian dengan hipotesis bersaing, tinjauan kode paralel, dan pengembangan fitur baru di mana setiap rekan kerja memiliki bagian terpisah.

120 

121 **Titik transisi:** Jika Anda menjalankan subagents paralel tetapi mencapai batas konteks, atau jika subagents Anda perlu berkomunikasi satu sama lain, agent teams adalah langkah alami berikutnya.

122 

123 <Note>

124 Agent teams bersifat eksperimental dan dinonaktifkan secara default. Lihat [agent teams](/id/agent-teams) untuk setup dan batasan saat ini.

125 </Note>

126 </Tab>

127 

128 <Tab title="MCP vs Skill">

129 MCP menghubungkan Claude ke layanan eksternal. Skills memperluas apa yang Claude ketahui, termasuk cara menggunakan layanan tersebut secara efektif.

130 

131 | Aspek | MCP | Skill |

132 | --------------- | ------------------------------------------------ | ----------------------------------------------------------------- |

133 | **Apa itu** | Protokol untuk terhubung ke layanan eksternal | Pengetahuan, alur kerja, dan materi referensi |

134 | **Menyediakan** | Akses alat dan data | Pengetahuan, alur kerja, materi referensi |

135 | **Contoh** | Integrasi Slack, kueri database, kontrol browser | Daftar periksa tinjauan kode, alur kerja deploy, panduan gaya API |

136 

137 Ini menyelesaikan masalah yang berbeda dan bekerja dengan baik bersama:

138 

139 **MCP** memberi Claude kemampuan untuk berinteraksi dengan sistem eksternal. Tanpa MCP, Claude tidak dapat mengueri database Anda atau posting ke Slack.

140 

141 **Skills** memberi Claude pengetahuan tentang cara menggunakan alat tersebut secara efektif, ditambah alur kerja yang dapat Anda picu dengan `/<name>`. Skill mungkin menyertakan skema database tim Anda dan pola kueri, atau alur kerja `/post-to-slack` dengan aturan pemformatan pesan tim Anda.

142 

143 Contoh: Server MCP menghubungkan Claude ke database Anda. Skill mengajarkan Claude model data Anda, pola kueri umum, dan tabel mana yang digunakan untuk tugas berbeda.

144 </Tab>

145</Tabs>

146 

147### Pahami bagaimana fitur berlapis

148 

149Fitur dapat didefinisikan di beberapa tingkat: seluruh pengguna, per-proyek, melalui plugins, atau melalui kebijakan terkelola. Anda juga dapat menyarangkan file CLAUDE.md di subdirektori atau menempatkan skills di paket tertentu dari monorepo. Ketika fitur yang sama ada di beberapa tingkat, berikut cara mereka berlapis:

150 

151* **File CLAUDE.md** bersifat aditif: semua tingkat berkontribusi konten ke konteks Claude secara bersamaan. File dari direktori kerja Anda dan di atas dimuat saat peluncuran; subdirektori dimuat saat Anda bekerja di dalamnya. Ketika instruksi bertentangan, Claude menggunakan penilaian untuk merekonsiliasi mereka, dengan instruksi yang lebih spesifik biasanya mengambil alih. Lihat [bagaimana file CLAUDE.md dimuat](/id/memory#how-claudemd-files-load).

152* **Skills dan subagents** menimpa berdasarkan nama: ketika nama yang sama ada di beberapa tingkat, satu definisi menang berdasarkan prioritas (terkelola > pengguna > proyek untuk skills; terkelola > bendera CLI > proyek > pengguna > plugin untuk subagents). Plugin skills adalah [namespaced](/id/plugins#add-skills-to-your-plugin) untuk menghindari konflik. Lihat [penemuan skill](/id/skills#where-skills-live) dan [cakupan subagent](/id/sub-agents#choose-the-subagent-scope).

153* **Server MCP** menimpa berdasarkan nama: lokal > proyek > pengguna. Lihat [cakupan MCP](/id/mcp#scope-hierarchy-and-precedence).

154* **Hooks** bergabung: semua hook terdaftar api untuk acara pencocokan mereka terlepas dari sumber. Lihat [hooks](/id/hooks).

155 

156### Gabungkan fitur

157 

158Setiap ekstensi menyelesaikan masalah yang berbeda: CLAUDE.md menangani konteks yang selalu aktif, skills menangani pengetahuan dan alur kerja on-demand, MCP menangani koneksi eksternal, subagents menangani isolasi, dan hooks menangani otomasi. Setup nyata menggabungkan mereka berdasarkan alur kerja Anda.

159 

160Misalnya, Anda mungkin menggunakan CLAUDE.md untuk konvensi proyek, skill untuk alur kerja deployment Anda, MCP untuk terhubung ke database Anda, dan hook untuk menjalankan linting setelah setiap edit. Setiap fitur menangani apa yang terbaik.

161 

162| Pola | Cara kerjanya | Contoh |

163| ---------------------- | ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |

164| **Skill + MCP** | MCP menyediakan koneksi; skill mengajarkan Claude cara menggunakannya dengan baik | MCP terhubung ke database Anda, skill mendokumentasikan skema dan pola kueri Anda |

165| **Skill + Subagent** | Skill menspawn subagents untuk pekerjaan paralel | Skill `/audit` memulai subagents keamanan, performa, dan gaya yang bekerja dalam konteks terisolasi |

166| **CLAUDE.md + Skills** | CLAUDE.md menyimpan aturan yang selalu aktif; skills menyimpan materi referensi yang dimuat on-demand | CLAUDE.md mengatakan "ikuti konvensi API kami," skill berisi panduan gaya API lengkap |

167| **Hook + MCP** | Hook memicu tindakan eksternal melalui MCP | Hook pasca-edit mengirim notifikasi Slack ketika Claude memodifikasi file kritis |

168 

169## Pahami biaya konteks

170 

171Setiap fitur yang Anda tambahkan mengonsumsi beberapa konteks Claude. Terlalu banyak dapat mengisi jendela konteks Anda, tetapi juga dapat menambah kebisingan yang membuat Claude kurang efektif; skills mungkin tidak dipicu dengan benar, atau Claude mungkin kehilangan jejak konvensi Anda. Memahami trade-off ini membantu Anda membangun setup yang efektif.

172 

173### Biaya konteks berdasarkan fitur

174 

175Setiap fitur memiliki strategi pemuatan dan biaya konteks yang berbeda:

176 

177| Fitur | Kapan dimuat | Apa yang dimuat | Biaya konteks |

178| -------------- | ---------------------------- | ------------------------------------------------ | ------------------------------------------------ |

179| **CLAUDE.md** | Awal sesi | Konten penuh | Setiap permintaan |

180| **Skills** | Awal sesi + ketika digunakan | Deskripsi di awal, konten penuh ketika digunakan | Rendah (deskripsi setiap permintaan)\* |

181| **Server MCP** | Awal sesi | Semua definisi alat dan skema | Setiap permintaan |

182| **Subagents** | Ketika dispawn | Konteks segar dengan skills yang ditentukan | Terisolasi dari sesi utama |

183| **Hooks** | Saat dipicu | Tidak ada (berjalan secara eksternal) | Nol, kecuali hook mengembalikan konteks tambahan |

184 

185\*Secara default, deskripsi skill dimuat saat awal sesi sehingga Claude dapat memutuskan kapan menggunakannya. Atur `disable-model-invocation: true` di frontmatter skill untuk menyembunyikannya dari Claude sepenuhnya sampai Anda memanggilnya secara manual. Ini mengurangi biaya konteks menjadi nol untuk skills yang hanya Anda picu sendiri.

186 

187### Pahami bagaimana fitur dimuat

188 

189Setiap fitur dimuat pada titik berbeda dalam sesi Anda. Tab di bawah menjelaskan kapan masing-masing dimuat dan apa yang masuk ke konteks.

190 

191<img src="https://mintcdn.com/claude-code/6yTCYq1p37ZB8-CQ/images/context-loading.svg?fit=max&auto=format&n=6yTCYq1p37ZB8-CQ&q=85&s=5a58ce953a35a2412892015e2ad6cb67" alt="Pemuatan konteks: CLAUDE.md dan MCP dimuat saat awal sesi dan tetap di setiap permintaan. Skills memuat deskripsi di awal, konten penuh saat invokasi. Subagents mendapat konteks terisolasi. Hooks berjalan secara eksternal." width="720" height="410" data-path="images/context-loading.svg" />

192 

193<Tabs>

194 <Tab title="CLAUDE.md">

195 **Kapan:** Awal sesi

196 

197 **Apa yang dimuat:** Konten penuh semua file CLAUDE.md (tingkat terkelola, pengguna, dan proyek).

198 

199 **Warisan:** Claude membaca file CLAUDE.md dari direktori kerja Anda hingga ke root, dan menemukan yang tersarang di subdirektori saat mengakses file tersebut. Lihat [Bagaimana file CLAUDE.md dimuat](/id/memory#how-claudemd-files-load) untuk detail.

200 

201 <Tip>Jaga CLAUDE.md di bawah 200 baris. Pindahkan materi referensi ke skills, yang dimuat on-demand.</Tip>

202 </Tab>

203 

204 <Tab title="Skills">

205 Skills adalah kemampuan tambahan dalam toolkit Claude. Mereka dapat berupa materi referensi (seperti panduan gaya API) atau alur kerja yang dapat dipanggil yang Anda picu dengan `/<name>` (seperti `/deploy`). Claude Code dilengkapi dengan [skills bundel](/id/skills#bundled-skills) seperti `/simplify`, `/batch`, dan `/debug` yang bekerja langsung. Anda juga dapat membuat yang Anda sendiri. Claude menggunakan skills ketika sesuai, atau Anda dapat memanggil satu secara langsung.

206 

207 **Kapan:** Tergantung pada konfigurasi skill. Secara default, deskripsi dimuat saat awal sesi dan konten penuh dimuat ketika digunakan. Untuk skills hanya pengguna (`disable-model-invocation: true`), tidak ada yang dimuat sampai Anda memanggilnya.

208 

209 **Apa yang dimuat:** Untuk skills yang dapat dipanggil model, Claude melihat nama dan deskripsi di setiap permintaan. Ketika Anda memanggil skill dengan `/<name>` atau Claude memuatnya secara otomatis, konten penuh dimuat ke percakapan Anda.

210 

211 **Bagaimana Claude memilih skills:** Claude mencocokkan tugas Anda terhadap deskripsi skill untuk memutuskan mana yang relevan. Jika deskripsi samar atau tumpang tindih, Claude mungkin memuat skill yang salah atau melewatkan yang akan membantu. Untuk memberi tahu Claude menggunakan skill tertentu, panggilnya dengan `/<name>`. Skills dengan `disable-model-invocation: true` tidak terlihat oleh Claude sampai Anda memanggilnya.

212 

213 **Biaya konteks:** Rendah sampai digunakan. Skills hanya pengguna memiliki biaya nol sampai dipanggil.

214 

215 **Di subagents:** Skills bekerja berbeda di subagents. Alih-alih pemuatan on-demand, skills yang dilewatkan ke subagent sepenuhnya dimuat sebelumnya ke konteksnya saat peluncuran. Subagents tidak mewarisi skills dari sesi utama; Anda harus menentukannya secara eksplisit.

216 

217 <Tip>Gunakan `disable-model-invocation: true` untuk skills dengan efek samping. Ini menghemat konteks dan memastikan hanya Anda yang memicunya.</Tip>

218 </Tab>

219 

220 <Tab title="Server MCP">

221 **Kapan:** Awal sesi.

222 

223 **Apa yang dimuat:** Semua definisi alat dan skema JSON dari server yang terhubung.

224 

225 **Biaya konteks:** [Pencarian alat](/id/mcp#scale-with-mcp-tool-search) (diaktifkan secara default) memuat alat MCP hingga 10% konteks dan menunda sisanya sampai diperlukan.

226 

227 **Catatan keandalan:** Koneksi MCP dapat gagal secara diam-diam di tengah sesi. Jika server terputus, alatnya hilang tanpa peringatan. Claude mungkin mencoba menggunakan alat yang tidak lagi ada. Jika Anda melihat Claude gagal menggunakan alat MCP yang sebelumnya dapat diakses, periksa koneksi dengan `/mcp`.

228 

229 <Tip>Jalankan `/mcp` untuk melihat biaya token per server. Putuskan server yang tidak Anda gunakan secara aktif.</Tip>

230 </Tab>

231 

232 <Tab title="Subagents">

233 **Kapan:** On demand, ketika Anda atau Claude menspawn satu untuk tugas.

234 

235 **Apa yang dimuat:** Konteks segar dan terisolasi yang berisi:

236 

237 * Prompt sistem (dibagikan dengan induk untuk efisiensi cache)

238 * Konten penuh skills yang tercantum di field `skills:` agen

239 * CLAUDE.md dan status git (diwarisi dari induk)

240 * Apa pun konteks yang agen utama lewatkan dalam prompt

241 

242 **Biaya konteks:** Terisolasi dari sesi utama. Subagents tidak mewarisi riwayat percakapan Anda atau skills yang dipanggil.

243 

244 <Tip>Gunakan subagents untuk pekerjaan yang tidak memerlukan konteks percakapan penuh Anda. Isolasi mereka mencegah mengembang sesi utama Anda.</Tip>

245 </Tab>

246 

247 <Tab title="Hooks">

248 **Kapan:** Saat dipicu. Hooks api pada acara siklus hidup tertentu seperti eksekusi alat, batas sesi, pengajuan prompt, permintaan izin, dan pemadatan. Lihat [Hooks](/id/hooks) untuk daftar lengkap.

249 

250 **Apa yang dimuat:** Tidak ada secara default. Hooks berjalan sebagai skrip eksternal.

251 

252 **Biaya konteks:** Nol, kecuali hook mengembalikan output yang ditambahkan sebagai pesan ke percakapan Anda.

253 

254 <Tip>Hooks ideal untuk efek samping (linting, logging) yang tidak perlu mempengaruhi konteks Claude.</Tip>

255 </Tab>

256</Tabs>

257 

258## Pelajari lebih lanjut

259 

260Setiap fitur memiliki panduan sendiri dengan instruksi setup, contoh, dan opsi konfigurasi.

261 

262<CardGroup cols={2}>

263 <Card title="CLAUDE.md" icon="file-lines" href="/id/memory">

264 Simpan konteks proyek, konvensi, dan instruksi

265 </Card>

266 

267 <Card title="Skills" icon="brain" href="/id/skills">

268 Berikan Claude keahlian domain dan alur kerja yang dapat digunakan kembali

269 </Card>

270 

271 <Card title="Subagents" icon="users" href="/id/sub-agents">

272 Alihkan pekerjaan ke konteks terisolasi

273 </Card>

274 

275 <Card title="Agent teams" icon="network" href="/id/agent-teams">

276 Koordinasikan beberapa sesi yang bekerja secara paralel

277 </Card>

278 

279 <Card title="MCP" icon="plug" href="/id/mcp">

280 Hubungkan Claude ke layanan eksternal

281 </Card>

282 

283 <Card title="Hooks" icon="bolt" href="/id/hooks-guide">

284 Otomatisasi alur kerja dengan hooks

285 </Card>

286 

287 <Card title="Plugins" icon="puzzle-piece" href="/id/plugins">

288 Bundel dan bagikan set fitur

289 </Card>

290 

291 <Card title="Marketplaces" icon="store" href="/id/plugin-marketplaces">

292 Host dan distribusikan koleksi plugin

293 </Card>

294</CardGroup>

fullscreen.md +159 −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# Rendering fullscreen

6 

7> Aktifkan mode rendering yang lebih halus dan bebas flicker dengan dukungan mouse dan penggunaan memori yang stabil dalam percakapan panjang.

8 

9<Note>

10 Rendering fullscreen adalah [pratinjau penelitian](#research-preview) yang bersifat opt-in dan memerlukan Claude Code v2.1.89 atau lebih baru. Jalankan `/tui fullscreen` untuk beralih dalam percakapan Anda saat ini, atau atur `CLAUDE_CODE_NO_FLICKER=1` pada versi sebelum v2.1.110. Perilaku dapat berubah berdasarkan umpan balik.

11</Note>

12 

13Rendering fullscreen adalah jalur rendering alternatif untuk Claude Code CLI yang menghilangkan flicker, menjaga penggunaan memori tetap datar dalam percakapan panjang, dan menambahkan dukungan mouse. Ini menggambar antarmuka pada buffer layar alternatif terminal, seperti `vim` atau `htop`, dan hanya merender pesan yang saat ini terlihat. Ini mengurangi jumlah data yang dikirim ke terminal Anda pada setiap pembaruan.

14 

15Perbedaannya paling terlihat di emulator terminal di mana throughput rendering adalah hambatan, seperti terminal terintegrasi VS Code, tmux, dan iTerm2. Jika posisi scroll terminal Anda melompat ke atas saat Claude sedang bekerja, atau layar berkedip saat output alat mengalir masuk, mode ini mengatasi masalah tersebut.

16 

17<Note>

18 Istilah fullscreen menggambarkan bagaimana Claude Code mengambil alih permukaan gambar terminal, seperti yang dilakukan `vim`. Ini tidak ada hubungannya dengan memaksimalkan jendela terminal Anda, dan bekerja pada ukuran jendela apa pun.

19</Note>

20 

21## Aktifkan rendering fullscreen

22 

23Jalankan `/tui fullscreen` di dalam percakapan Claude Code apa pun. CLI menyimpan pengaturan [`tui`](/id/settings#available-settings) dan meluncurkan kembali ke fullscreen dengan percakapan Anda tetap utuh, sehingga Anda dapat beralih di tengah sesi tanpa kehilangan konteks. Jalankan `/tui` tanpa argumen untuk mencetak renderer mana yang aktif.

24 

25Anda juga dapat mengatur variabel lingkungan `CLAUDE_CODE_NO_FLICKER` sebelum memulai Claude Code:

26 

27```bash theme={null}

28CLAUDE_CODE_NO_FLICKER=1 claude

29```

30 

31Pengaturan `tui` dan variabel lingkungan adalah setara. Perintah `/tui` menghapus `CLAUDE_CODE_NO_FLICKER` dari proses yang diluncurkan kembali sehingga pengaturan yang ditulisnya berlaku.

32 

33## Apa yang berubah

34 

35Rendering fullscreen mengubah cara CLI menggambar ke terminal Anda. Kotak input tetap berada di bagian bawah layar alih-alih bergerak saat output mengalir masuk. Jika input tetap di tempatnya saat Claude sedang bekerja, rendering fullscreen aktif. Hanya pesan yang terlihat yang disimpan di pohon render, sehingga memori tetap konstan terlepas dari panjang percakapan.

36 

37Karena percakapan berada di buffer layar alternatif alih-alih scrollback terminal Anda, beberapa hal bekerja berbeda:

38 

39| Sebelumnya | Sekarang | Detail |

40| :------------------------------------------------------ | :--------------------------------------------------------------------------------------------- | :---------------------------------------------------------------- |

41| `Cmd+f` atau pencarian tmux untuk menemukan teks | `Ctrl+o` untuk mode transkrip, kemudian `/` untuk mencari atau `[` untuk menulis ke scrollback | [Cari dan tinjau percakapan](#search-and-review-the-conversation) |

42| Klik-dan-seret asli terminal untuk memilih dan menyalin | Pemilihan dalam aplikasi, menyalin secara otomatis saat pelepasan mouse | [Gunakan mouse](#use-the-mouse) |

43| `Cmd`-klik untuk membuka URL | Klik URL | [Gunakan mouse](#use-the-mouse) |

44 

45Jika penangkapan mouse mengganggu alur kerja Anda, Anda dapat [mematikannya](#keep-native-text-selection) sambil mempertahankan rendering bebas flicker.

46 

47## Gunakan mouse

48 

49Rendering fullscreen menangkap peristiwa mouse dan menanganinya di dalam Claude Code:

50 

51* **Klik di input prompt** untuk memposisikan kursor Anda di mana saja dalam teks yang Anda ketik.

52* **Klik hasil alat yang diciutkan** untuk memperluasnya dan melihat output lengkap. Klik lagi untuk menciutkan. Panggilan alat dan hasilnya berkembang bersama. Hanya pesan yang memiliki lebih banyak untuk ditampilkan yang dapat diklik.

53* **Klik URL atau jalur file** untuk membukanya. Jalur file dalam output alat, seperti yang dicetak setelah Edit atau Write, terbuka di aplikasi default Anda. URL `http://` dan `https://` biasa terbuka di browser Anda. Di sebagian besar terminal ini menggantikan `Cmd`-klik atau `Ctrl`-klik asli, yang penangkapan mouse mencegat. Di terminal terintegrasi VS Code dan terminal berbasis xterm.js serupa, terus gunakan `Cmd`-klik. Claude Code menunda ke penanganan tautan terminal sendiri di sana untuk menghindari pembukaan tautan dua kali.

54* **Klik dan seret** untuk memilih teks di mana saja dalam percakapan. Klik ganda memilih kata, mencocokkan batas kata iTerm2 sehingga jalur file memilih sebagai satu unit. Klik tiga kali memilih baris.

55* **Gulir dengan roda mouse** untuk bergerak melalui percakapan.

56 

57Teks yang dipilih disalin ke clipboard Anda secara otomatis saat pelepasan mouse. Untuk mematikan ini, alihkan Copy on select di `/config`. Dengan itu dimatikan, tekan `Ctrl+Shift+c` untuk menyalin secara manual. Di terminal yang mendukung protokol keyboard kitty, seperti kitty, WezTerm, Ghostty, dan iTerm2, `Cmd+c` juga berfungsi. Jika Anda memiliki pemilihan aktif, `Ctrl+c` menyalin alih-alih membatalkan.

58 

59Dengan pemilihan aktif, tahan `Shift` dan tekan tombol panah untuk memperluas dari keyboard. `Shift+↑` dan `Shift+↓` menggulir viewport saat pemilihan mencapai tepi atas atau bawah. `Shift+Home` dan `Shift+End` memperluas ke awal atau akhir baris saat ini.

60 

61## Gulir percakapan

62 

63Rendering fullscreen menangani scrolling di dalam aplikasi. Gunakan pintasan ini untuk menavigasi:

64 

65| Pintasan | Tindakan |

66| :-------------- | :------------------------------------------------------- |

67| `PgUp` / `PgDn` | Gulir naik atau turun setengah layar |

68| `Ctrl+Home` | Lompat ke awal percakapan |

69| `Ctrl+End` | Lompat ke pesan terbaru dan aktifkan kembali auto-follow |

70| Roda mouse | Gulir beberapa baris sekaligus |

71 

72Pada keyboard tanpa tombol `PgUp`, `PgDn`, `Home`, atau `End` khusus, seperti keyboard MacBook, tahan `Fn` dengan tombol panah: `Fn+↑` mengirim `PgUp`, `Fn+↓` mengirim `PgDn`, `Fn+←` mengirim `Home`, dan `Fn+→` mengirim `End`. Itu membuat `Ctrl+Fn+→` pintasan lompat-ke-bawah. Jika itu terasa canggung, gulir ke bawah dengan roda mouse untuk melanjutkan mengikuti, atau ikat ulang `scroll:bottom` ke sesuatu yang dapat dijangkau.

73 

74Tindakan ini dapat diikat ulang. Lihat [Scroll actions](/id/keybindings#scroll-actions) untuk daftar lengkap nama tindakan, termasuk varian setengah halaman dan halaman penuh yang tidak memiliki pengikatan default.

75 

76### Auto-follow

77 

78Menggulir naik menjeda auto-follow sehingga output baru tidak menarik Anda kembali ke bawah. Tekan `Ctrl+End` atau gulir ke bawah untuk melanjutkan mengikuti.

79 

80Untuk mematikan auto-follow sepenuhnya sehingga tampilan tetap di mana Anda meninggalkannya, buka `/config` dan atur Auto-scroll ke off. Dengan auto-scroll dinonaktifkan, tampilan tidak pernah melompat ke bawah dengan sendirinya. Prompt izin dan dialog lainnya yang memerlukan respons masih menggulir ke tampilan terlepas dari pengaturan ini.

81 

82### Scrolling roda mouse

83 

84Scrolling roda mouse memerlukan terminal Anda untuk meneruskan peristiwa mouse ke Claude Code. Sebagian besar terminal melakukan ini setiap kali aplikasi memintanya. iTerm2 menjadikannya pengaturan per-profil: jika roda tidak melakukan apa pun tetapi `PgUp` dan `PgDn` berfungsi, buka Settings → Profiles → Terminal dan aktifkan Enable mouse reporting. Pengaturan yang sama juga diperlukan untuk klik-untuk-memperluas dan pemilihan teks agar berfungsi.

85 

86Jika scrolling roda mouse terasa lambat, terminal Anda mungkin mengirim satu peristiwa scroll per takik fisik tanpa pengganda. Beberapa terminal, seperti Ghostty dan iTerm2 dengan scrolling lebih cepat diaktifkan, sudah memperkuat peristiwa roda. Yang lain, termasuk terminal terintegrasi VS Code, mengirim tepat satu peristiwa per takik. Claude Code tidak dapat mendeteksi mana.

87 

88Atur `CLAUDE_CODE_SCROLL_SPEED` untuk mengalikan jarak scroll dasar:

89 

90```bash theme={null}

91export CLAUDE_CODE_SCROLL_SPEED=3

92```

93 

94Nilai `3` cocok dengan default di `vim` dan aplikasi serupa. Pengaturan menerima nilai dari 1 hingga 20.

95 

96## Cari dan tinjau percakapan

97 

98`Ctrl+o` mengalihkan antara prompt normal dan mode transkrip. Untuk tampilan yang lebih tenang yang menampilkan hanya prompt terakhir Anda, ringkasan satu baris panggilan alat dengan diffstat edit, dan respons akhir, jalankan `/focus`. Pengaturan bertahan di seluruh sesi. Jalankan `/focus` lagi untuk mematikannya.

99 

100Mode transkrip mendapatkan navigasi dan pencarian gaya `less`:

101 

102| Kunci | Tindakan |

103| :------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------ |

104| `/` | Buka pencarian. Ketik untuk menemukan kecocokan, `Enter` untuk menerima, `Esc` untuk membatalkan dan mengembalikan posisi scroll Anda |

105| `n` / `N` | Lompat ke kecocokan berikutnya atau sebelumnya. Bekerja setelah Anda menutup bilah pencarian |

106| `j` / `k` atau `↑` / `↓` | Gulir satu baris |

107| `g` / `G` atau `Home` / `End` | Lompat ke atas atau bawah |

108| `Ctrl+u` / `Ctrl+d` | Gulir setengah halaman |

109| `Ctrl+b` / `Ctrl+f` atau `Space` / `b` | Gulir halaman penuh |

110| `Ctrl+o`, `Esc`, atau `q` | Keluar dari mode transkrip dan kembali ke prompt |

111 

112`Cmd+f` dan pencarian tmux terminal Anda tidak melihat percakapan karena berada di buffer layar alternatif, bukan scrollback asli. Untuk mengembalikan konten ke terminal Anda, tekan `Ctrl+o` untuk memasuki mode transkrip terlebih dahulu, kemudian:

113 

114* **`[`**: menulis percakapan lengkap ke buffer scrollback asli terminal Anda, dengan semua output alat diperluas. Percakapan sekarang merupakan teks biasa di terminal Anda, sehingga `Cmd+f`, mode salinan tmux, dan alat asli lainnya dapat mencari atau memilihnya. Sesi panjang mungkin berhenti sejenak saat ini terjadi. Ini berlangsung sampai Anda keluar dari mode transkrip dengan `Esc` atau `q`, yang mengembalikan Anda ke rendering fullscreen. `Ctrl+o` berikutnya dimulai segar.

115* **`v`**: menulis percakapan ke file sementara dan membukanya di `$VISUAL` atau `$EDITOR`.

116 

117Tekan `Esc` atau `q` untuk kembali ke prompt.

118 

119## Hapus percakapan

120 

121Tekan `Ctrl+L` dua kali dalam dua detik untuk menjalankan `/clear` dan memulai percakapan baru. Penekanan pertama menggambar ulang layar dan menampilkan petunjuk; penekanan kedua menghapus percakapan. Di macOS, menekan ganda `Cmd+K` juga menjalankan `/clear`.

122 

123## Gunakan dengan tmux

124 

125Rendering fullscreen bekerja di dalam tmux, dengan dua peringatan.

126 

127Scrolling roda mouse memerlukan mode mouse tmux. Jika `~/.tmux.conf` Anda belum mengaktifkannya, tambahkan baris ini dan muat ulang konfigurasi Anda:

128 

129```bash theme={null}

130set -g mouse on

131```

132 

133Tanpa mode mouse, peristiwa roda pergi ke tmux alih-alih Claude Code. Scrolling keyboard dengan `PgUp` dan `PgDn` bekerja baik cara. Claude Code mencetak petunjuk satu kali saat startup jika mendeteksi tmux dengan mode mouse dimatikan.

134 

135Rendering fullscreen tidak kompatibel dengan mode integrasi tmux iTerm2, yang merupakan mode yang Anda masuki dengan `tmux -CC`. Dalam mode integrasi, iTerm2 merender setiap panel tmux sebagai pemisah asli daripada membiarkan tmux menggambar ke terminal. Buffer layar alternatif dan pelacakan mouse tidak bekerja dengan benar di sana: roda mouse tidak melakukan apa pun, dan klik ganda dapat merusak status terminal. Jangan aktifkan rendering fullscreen di sesi `tmux -CC`. Tmux reguler di dalam iTerm2, tanpa `-CC`, bekerja dengan baik.

136 

137## Pertahankan pemilihan teks asli

138 

139Penangkapan mouse adalah titik gesekan paling umum, terutama melalui SSH atau di dalam tmux. Ketika Claude Code menangkap peristiwa mouse, copy-on-select asli terminal Anda berhenti bekerja. Pemilihan yang Anda buat dengan klik-dan-seret ada di dalam Claude Code, bukan di buffer pemilihan terminal Anda, sehingga mode salinan tmux, petunjuk Kitty, dan alat serupa tidak melihatnya.

140 

141Claude Code mencoba menulis pemilihan ke clipboard Anda, tetapi jalur yang digunakan tergantung pada pengaturan Anda. Di dalam tmux itu menulis ke buffer pasta tmux. Melalui SSH itu kembali ke urutan escape OSC 52, yang beberapa terminal blokir secara default. iTerm2 memblokir mereka sampai Anda mengaktifkan Settings → General → Selection → Applications in terminal may access clipboard. Menjalankan [`/terminal-setup`](/id/terminal-config) di iTerm2 mengaktifkan ini untuk Anda. Claude Code mencetak toast setelah setiap salinan memberi tahu Anda jalur mana yang digunakan.

142 

143Untuk pemilihan asli sekali pakai, tahan pengubah bypass terminal Anda sambil Anda klik dan seret: `Option` di iTerm2, atau `Shift` di sebagian besar terminal Linux dan Windows. Pengubah memberi tahu terminal Anda untuk menangani pemilihan itu sendiri alih-alih meneruskan peristiwa mouse ke Claude Code, sehingga `Cmd+C` dan pintasan salinan lainnya dari terminal Anda bekerja padanya.

144 

145Jika Anda mengandalkan pemilihan asli sepanjang waktu, atur `CLAUDE_CODE_DISABLE_MOUSE=1` untuk keluar dari penangkapan mouse sambil mempertahankan rendering bebas flicker dan memori datar:

146 

147```bash theme={null}

148CLAUDE_CODE_NO_FLICKER=1 CLAUDE_CODE_DISABLE_MOUSE=1 claude

149```

150 

151Dengan penangkapan mouse dinonaktifkan, scrolling keyboard dengan `PgUp`, `PgDn`, `Ctrl+Home`, dan `Ctrl+End` masih berfungsi, dan terminal Anda menangani pemilihan secara asli. Anda kehilangan klik-untuk-memposisikan-kursor, klik-untuk-memperluas-output-alat, klik-URL, dan scrolling roda di dalam Claude Code.

152 

153## Pratinjau penelitian

154 

155Rendering fullscreen adalah fitur pratinjau penelitian. Ini telah diuji pada emulator terminal umum, tetapi Anda mungkin mengalami masalah rendering pada terminal yang kurang umum atau konfigurasi yang tidak biasa.

156 

157Jika Anda mengalami masalah, jalankan `/feedback` di dalam Claude Code untuk melaporkannya, atau buka masalah di [repositori GitHub claude-code](https://github.com/anthropics/claude-code/issues). Sertakan nama dan versi emulator terminal Anda.

158 

159Untuk mematikan rendering fullscreen, jalankan `/tui default`, atau batalkan pengaturan variabel lingkungan jika Anda mengaktifkannya dengan cara itu.

github-actions.md +670 −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# Claude Code GitHub Actions

6 

7> Pelajari tentang integrasi Claude Code ke dalam alur kerja pengembangan Anda dengan Claude Code GitHub Actions

8 

9Claude Code GitHub Actions membawa otomasi bertenaga AI ke alur kerja GitHub Anda. Dengan penyebutan `@claude` sederhana di PR atau issue apa pun, Claude dapat menganalisis kode Anda, membuat pull request, mengimplementasikan fitur, dan memperbaiki bug - semuanya sambil mengikuti standar proyek Anda. Untuk ulasan otomatis yang diposting di setiap PR tanpa pemicu, lihat [GitHub Code Review](/id/code-review).

10 

11<Note>

12 Claude Code GitHub Actions dibangun di atas [Claude Agent SDK](/id/agent-sdk/overview), yang memungkinkan integrasi programatik Claude Code ke dalam aplikasi Anda. Anda dapat menggunakan SDK untuk membangun alur kerja otomasi kustom di luar GitHub Actions.

13</Note>

14 

15<Info>

16 **Claude Opus 4.7 sekarang tersedia.** Claude Code GitHub Actions default ke Sonnet. Untuk menggunakan Opus 4.7, konfigurasikan [parameter model](#breaking-changes-reference) untuk menggunakan `claude-opus-4-7`.

17</Info>

18 

19## Mengapa menggunakan Claude Code GitHub Actions?

20 

21* **Pembuatan PR instan**: Jelaskan apa yang Anda butuhkan, dan Claude membuat PR lengkap dengan semua perubahan yang diperlukan

22* **Implementasi kode otomatis**: Ubah issue menjadi kode yang berfungsi dengan satu perintah

23* **Mengikuti standar Anda**: Claude menghormati panduan `CLAUDE.md` Anda dan pola kode yang ada

24* **Penyiapan sederhana**: Mulai dalam hitungan menit dengan installer dan kunci API kami

25* **Aman secara default**: Kode Anda tetap berada di runner Github

26 

27## Apa yang dapat dilakukan Claude?

28 

29Claude Code menyediakan GitHub Action yang kuat yang mengubah cara Anda bekerja dengan kode:

30 

31### Claude Code Action

32 

33GitHub Action ini memungkinkan Anda menjalankan Claude Code dalam alur kerja GitHub Actions Anda. Anda dapat menggunakannya untuk membangun alur kerja kustom apa pun di atas Claude Code.

34 

35[Lihat repositori →](https://github.com/anthropics/claude-code-action)

36 

37## Penyiapan

38 

39## Penyiapan cepat

40 

41Cara termudah untuk menyiapkan action ini adalah melalui Claude Code di terminal. Cukup buka claude dan jalankan `/install-github-app`.

42 

43Perintah ini akan memandu Anda melalui penyiapan aplikasi GitHub dan rahasia yang diperlukan.

44 

45<Note>

46 * Anda harus menjadi admin repositori untuk menginstal aplikasi GitHub dan menambahkan rahasia

47 * Aplikasi GitHub akan meminta izin baca & tulis untuk Contents, Issues, dan Pull requests

48 * Metode quickstart ini hanya tersedia untuk pengguna Claude API langsung. Jika Anda menggunakan Amazon Bedrock atau Google Vertex AI, silakan lihat bagian [Using with Amazon Bedrock & Google Vertex AI](#using-with-amazon-bedrock-%26-google-vertex-ai).

49</Note>

50 

51## Penyiapan manual

52 

53Jika perintah `/install-github-app` gagal atau Anda lebih suka penyiapan manual, silakan ikuti instruksi penyiapan manual ini:

54 

551. **Instal aplikasi Claude GitHub** ke repositori Anda: [https://github.com/apps/claude](https://github.com/apps/claude)

56 

57 Aplikasi Claude GitHub memerlukan izin repositori berikut:

58 

59 * **Contents**: Baca & tulis (untuk memodifikasi file repositori)

60 * **Issues**: Baca & tulis (untuk merespons issue)

61 * **Pull requests**: Baca & tulis (untuk membuat PR dan push perubahan)

62 

63 Untuk detail lebih lanjut tentang keamanan dan izin, lihat [dokumentasi keamanan](https://github.com/anthropics/claude-code-action/blob/main/docs/security.md).

642. **Tambahkan ANTHROPIC\_API\_KEY** ke rahasia repositori Anda ([Pelajari cara menggunakan rahasia di GitHub Actions](https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions))

653. **Salin file workflow** dari [examples/claude.yml](https://github.com/anthropics/claude-code-action/blob/main/examples/claude.yml) ke dalam direktori `.github/workflows/` repositori Anda

66 

67<Tip>

68 Setelah menyelesaikan penyiapan cepat atau manual, uji action dengan menandai `@claude` dalam komentar issue atau PR.

69</Tip>

70 

71## Upgrade dari Beta

72 

73<Warning>

74 Claude Code GitHub Actions v1.0 memperkenalkan perubahan breaking yang memerlukan pembaruan file workflow Anda untuk upgrade ke v1.0 dari versi beta.

75</Warning>

76 

77Jika Anda saat ini menggunakan versi beta Claude Code GitHub Actions, kami merekomendasikan untuk memperbarui workflow Anda agar menggunakan versi GA. Versi baru menyederhanakan konfigurasi sambil menambahkan fitur baru yang kuat seperti deteksi mode otomatis.

78 

79### Perubahan penting

80 

81Semua pengguna beta harus membuat perubahan ini pada file workflow mereka untuk upgrade:

82 

831. **Perbarui versi action**: Ubah `@beta` menjadi `@v1`

842. **Hapus konfigurasi mode**: Hapus `mode: "tag"` atau `mode: "agent"` (sekarang terdeteksi otomatis)

853. **Perbarui input prompt**: Ganti `direct_prompt` dengan `prompt`

864. **Pindahkan opsi CLI**: Konversi `max_turns`, `model`, `custom_instructions`, dll. ke `claude_args`

87 

88### Breaking Changes Reference

89 

90| Old Beta Input | New v1.0 Input |

91| --------------------- | ------------------------------------- |

92| `mode` | *(Removed - auto-detected)* |

93| `direct_prompt` | `prompt` |

94| `override_prompt` | `prompt` with GitHub variables |

95| `custom_instructions` | `claude_args: --append-system-prompt` |

96| `max_turns` | `claude_args: --max-turns` |

97| `model` | `claude_args: --model` |

98| `allowed_tools` | `claude_args: --allowedTools` |

99| `disallowed_tools` | `claude_args: --disallowedTools` |

100| `claude_env` | `settings` JSON format |

101 

102### Contoh Sebelum dan Sesudah

103 

104**Versi beta:**

105 

106```yaml theme={null}

107- uses: anthropics/claude-code-action@beta

108 with:

109 mode: "tag"

110 direct_prompt: "Review this PR for security issues"

111 anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}

112 custom_instructions: "Follow our coding standards"

113 max_turns: "10"

114 model: "claude-sonnet-4-6"

115```

116 

117**Versi GA (v1.0):**

118 

119```yaml theme={null}

120- uses: anthropics/claude-code-action@v1

121 with:

122 prompt: "Review this PR for security issues"

123 anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}

124 claude_args: |

125 --append-system-prompt "Follow our coding standards"

126 --max-turns 10

127 --model claude-sonnet-4-6

128```

129 

130<Tip>

131 Action sekarang secara otomatis mendeteksi apakah akan dijalankan dalam mode interaktif (merespons penyebutan `@claude`) atau mode otomasi (berjalan segera dengan prompt) berdasarkan konfigurasi Anda.

132</Tip>

133 

134## Contoh kasus penggunaan

135 

136Claude Code GitHub Actions dapat membantu Anda dengan berbagai tugas. Direktori [examples](https://github.com/anthropics/claude-code-action/tree/main/examples) berisi workflow siap pakai untuk skenario berbeda.

137 

138### Workflow dasar

139 

140```yaml theme={null}

141name: Claude Code

142on:

143 issue_comment:

144 types: [created]

145 pull_request_review_comment:

146 types: [created]

147jobs:

148 claude:

149 runs-on: ubuntu-latest

150 steps:

151 - uses: anthropics/claude-code-action@v1

152 with:

153 anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}

154 # Responds to @claude mentions in comments

155```

156 

157### Menggunakan skills

158 

159```yaml theme={null}

160name: Code Review

161on:

162 pull_request:

163 types: [opened, synchronize]

164jobs:

165 review:

166 runs-on: ubuntu-latest

167 steps:

168 - uses: anthropics/claude-code-action@v1

169 with:

170 anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}

171 prompt: "Review this pull request for code quality, correctness, and security. Analyze the diff, then post your findings as review comments."

172 claude_args: "--max-turns 5"

173```

174 

175### Otomasi kustom dengan prompt

176 

177```yaml theme={null}

178name: Daily Report

179on:

180 schedule:

181 - cron: "0 9 * * *"

182jobs:

183 report:

184 runs-on: ubuntu-latest

185 steps:

186 - uses: anthropics/claude-code-action@v1

187 with:

188 anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}

189 prompt: "Generate a summary of yesterday's commits and open issues"

190 claude_args: "--model opus"

191```

192 

193### Kasus penggunaan umum

194 

195Dalam komentar issue atau PR:

196 

197```text theme={null}

198@claude implement this feature based on the issue description

199@claude how should I implement user authentication for this endpoint?

200@claude fix the TypeError in the user dashboard component

201```

202 

203Claude akan secara otomatis menganalisis konteks dan merespons dengan tepat.

204 

205## Praktik terbaik

206 

207### Konfigurasi CLAUDE.md

208 

209Buat file `CLAUDE.md` di root repositori Anda untuk mendefinisikan panduan gaya kode, kriteria ulasan, aturan khusus proyek, dan pola yang disukai. File ini memandu pemahaman Claude tentang standar proyek Anda.

210 

211### Pertimbangan keamanan

212 

213<Warning>Jangan pernah commit kunci API langsung ke repositori Anda.</Warning>

214 

215Untuk panduan keamanan komprehensif termasuk izin, autentikasi, dan praktik terbaik, lihat [dokumentasi keamanan Claude Code Action](https://github.com/anthropics/claude-code-action/blob/main/docs/security.md).

216 

217Selalu gunakan GitHub Secrets untuk kunci API:

218 

219* Tambahkan kunci API Anda sebagai rahasia repositori bernama `ANTHROPIC_API_KEY`

220* Referensikan dalam workflow: `anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}`

221* Batasi izin action hanya untuk apa yang diperlukan

222* Tinjau saran Claude sebelum merge

223 

224Selalu gunakan GitHub Secrets (misalnya, `${{ secrets.ANTHROPIC_API_KEY }}`) daripada hardcoding kunci API langsung dalam file workflow Anda.

225 

226### Mengoptimalkan kinerja

227 

228Gunakan template issue untuk memberikan konteks, jaga `CLAUDE.md` Anda ringkas dan terfokus, dan konfigurasikan timeout yang sesuai untuk workflow Anda.

229 

230### Biaya CI

231 

232Saat menggunakan Claude Code GitHub Actions, waspadai biaya terkait:

233 

234**Biaya GitHub Actions:**

235 

236* Claude Code berjalan di runner yang dihosting GitHub, yang mengonsumsi menit GitHub Actions Anda

237* Lihat [dokumentasi penagihan GitHub](https://docs.github.com/en/billing/managing-billing-for-your-products/managing-billing-for-github-actions/about-billing-for-github-actions) untuk harga terperinci dan batas menit

238 

239**Biaya API:**

240 

241* Setiap interaksi Claude mengonsumsi token API berdasarkan panjang prompt dan respons

242* Penggunaan token bervariasi menurut kompleksitas tugas dan ukuran codebase

243* Lihat [halaman harga Claude](https://claude.com/platform/api) untuk tarif token saat ini

244 

245**Tips optimasi biaya:**

246 

247* Gunakan perintah `@claude` spesifik untuk mengurangi panggilan API yang tidak perlu

248* Konfigurasikan `--max-turns` yang sesuai dalam `claude_args` untuk mencegah iterasi berlebihan

249* Atur timeout tingkat workflow untuk menghindari pekerjaan yang tidak terkontrol

250* Pertimbangkan menggunakan kontrol concurrency GitHub untuk membatasi run paralel

251 

252## Contoh konfigurasi

253 

254Claude Code Action v1 menyederhanakan konfigurasi dengan parameter terpadu:

255 

256```yaml theme={null}

257- uses: anthropics/claude-code-action@v1

258 with:

259 anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}

260 prompt: "Your instructions here" # Optional

261 claude_args: "--max-turns 5" # Optional CLI arguments

262```

263 

264Fitur utama:

265 

266* **Antarmuka prompt terpadu** - Gunakan `prompt` untuk semua instruksi

267* **Skills** - Panggil [skills](/id/skills) yang terinstal langsung dari prompt

268* **Passthrough CLI** - Argumen Claude Code CLI apa pun melalui `claude_args`

269* **Pemicu fleksibel** - Bekerja dengan event GitHub apa pun

270 

271Kunjungi [direktori examples](https://github.com/anthropics/claude-code-action/tree/main/examples) untuk file workflow lengkap.

272 

273<Tip>

274 Saat merespons komentar issue atau PR, Claude secara otomatis merespons penyebutan @claude. Untuk event lainnya, gunakan parameter `prompt` untuk memberikan instruksi.

275</Tip>

276 

277## Menggunakan dengan Amazon Bedrock & Google Vertex AI

278 

279Untuk lingkungan enterprise, Anda dapat menggunakan Claude Code GitHub Actions dengan infrastruktur cloud Anda sendiri. Pendekatan ini memberi Anda kontrol atas residensi data dan penagihan sambil mempertahankan fungsionalitas yang sama.

280 

281### Prasyarat

282 

283Sebelum menyiapkan Claude Code GitHub Actions dengan penyedia cloud, Anda memerlukan:

284 

285#### Untuk Google Cloud Vertex AI:

286 

2871. Proyek Google Cloud dengan Vertex AI diaktifkan

2882. Workload Identity Federation dikonfigurasi untuk GitHub Actions

2893. Akun layanan dengan izin yang diperlukan

2904. Aplikasi GitHub (direkomendasikan) atau gunakan GITHUB\_TOKEN default

291 

292#### Untuk Amazon Bedrock:

293 

2941. Akun AWS dengan Amazon Bedrock diaktifkan

2952. GitHub OIDC Identity Provider dikonfigurasi di AWS

2963. Peran IAM dengan izin Bedrock

2974. Aplikasi GitHub (direkomendasikan) atau gunakan GITHUB\_TOKEN default

298 

299<Steps>

300 <Step title="Buat aplikasi GitHub kustom (Direkomendasikan untuk Penyedia Pihak Ketiga)">

301 Untuk kontrol dan keamanan terbaik saat menggunakan penyedia pihak ketiga seperti Vertex AI atau Bedrock, kami merekomendasikan membuat aplikasi GitHub Anda sendiri:

302 

303 1. Buka [https://github.com/settings/apps/new](https://github.com/settings/apps/new)

304 2. Isi informasi dasar:

305 * **GitHub App name**: Pilih nama unik (misalnya, "YourOrg Claude Assistant")

306 * **Homepage URL**: Website organisasi Anda atau URL repositori

307 3. Konfigurasikan pengaturan aplikasi:

308 * **Webhooks**: Hapus centang "Active" (tidak diperlukan untuk integrasi ini)

309 4. Atur izin yang diperlukan:

310 * **Repository permissions**:

311 * Contents: Read & Write

312 * Issues: Read & Write

313 * Pull requests: Read & Write

314 5. Klik "Create GitHub App"

315 6. Setelah pembuatan, klik "Generate a private key" dan simpan file `.pem` yang diunduh

316 7. Catat App ID Anda dari halaman pengaturan aplikasi

317 8. Instal aplikasi ke repositori Anda:

318 * Dari halaman pengaturan aplikasi Anda, klik "Install App" di sidebar kiri

319 * Pilih akun atau organisasi Anda

320 * Pilih "Only select repositories" dan pilih repositori spesifik

321 * Klik "Install"

322 9. Tambahkan kunci pribadi sebagai rahasia ke repositori Anda:

323 * Buka Settings → Secrets and variables → Actions repositori Anda

324 * Buat rahasia baru bernama `APP_PRIVATE_KEY` dengan isi file `.pem`

325 10. Tambahkan App ID sebagai rahasia:

326 

327 * Buat rahasia baru bernama `APP_ID` dengan ID aplikasi GitHub Anda

328 

329 <Note>

330 Aplikasi ini akan digunakan dengan action [actions/create-github-app-token](https://github.com/actions/create-github-app-token) untuk menghasilkan token autentikasi dalam workflow Anda.

331 </Note>

332 

333 **Alternatif untuk Claude API atau jika Anda tidak ingin menyiapkan aplikasi Github Anda sendiri**: Gunakan aplikasi Anthropic resmi:

334 

335 1. Instal dari: [https://github.com/apps/claude](https://github.com/apps/claude)

336 2. Tidak ada konfigurasi tambahan yang diperlukan untuk autentikasi

337 </Step>

338 

339 <Step title="Konfigurasikan autentikasi penyedia cloud">

340 Pilih penyedia cloud Anda dan siapkan autentikasi aman:

341 

342 <AccordionGroup>

343 <Accordion title="Amazon Bedrock">

344 **Konfigurasikan AWS untuk memungkinkan GitHub Actions mengautentikasi dengan aman tanpa menyimpan kredensial.**

345 

346 > **Security Note**: Gunakan konfigurasi khusus repositori dan berikan hanya izin minimum yang diperlukan.

347 

348 **Required Setup**:

349 

350 1. **Enable Amazon Bedrock**:

351 * Minta akses ke model Claude di Amazon Bedrock

352 * Untuk model lintas region, minta akses di semua region yang diperlukan

353 

354 2. **Set up GitHub OIDC Identity Provider**:

355 * Provider URL: `https://token.actions.githubusercontent.com`

356 * Audience: `sts.amazonaws.com`

357 

358 3. **Create IAM Role for GitHub Actions**:

359 * Trusted entity type: Web identity

360 * Identity provider: `token.actions.githubusercontent.com`

361 * Permissions: `AmazonBedrockFullAccess` policy

362 * Configure trust policy for your specific repository

363 

364 **Required Values**:

365 

366 Setelah penyiapan, Anda akan memerlukan:

367 

368 * **AWS\_ROLE\_TO\_ASSUME**: ARN dari peran IAM yang Anda buat

369 

370 <Tip>

371 OIDC lebih aman daripada menggunakan kunci akses AWS statis karena kredensial bersifat sementara dan secara otomatis dirotasi.

372 </Tip>

373 

374 Lihat [dokumentasi AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_oidc.html) untuk instruksi penyiapan OIDC terperinci.

375 </Accordion>

376 

377 <Accordion title="Google Vertex AI">

378 **Konfigurasikan Google Cloud untuk memungkinkan GitHub Actions mengautentikasi dengan aman tanpa menyimpan kredensial.**

379 

380 > **Security Note**: Gunakan konfigurasi khusus repositori dan berikan hanya izin minimum yang diperlukan.

381 

382 **Required Setup**:

383 

384 1. **Enable APIs** di proyek Google Cloud Anda:

385 * IAM Credentials API

386 * Security Token Service (STS) API

387 * Vertex AI API

388 

389 2. **Create Workload Identity Federation resources**:

390 * Buat Workload Identity Pool

391 * Tambahkan penyedia OIDC GitHub dengan:

392 * Issuer: `https://token.actions.githubusercontent.com`

393 * Attribute mappings untuk repositori dan pemilik

394 * **Security recommendation**: Gunakan kondisi atribut khusus repositori

395 

396 3. **Create a Service Account**:

397 * Berikan hanya peran `Vertex AI User`

398 * **Security recommendation**: Buat akun layanan khusus per repositori

399 

400 4. **Configure IAM bindings**:

401 * Izinkan Workload Identity Pool untuk menyamar sebagai akun layanan

402 * **Security recommendation**: Gunakan set principal khusus repositori

403 

404 **Required Values**:

405 

406 Setelah penyiapan, Anda akan memerlukan:

407 

408 * **GCP\_WORKLOAD\_IDENTITY\_PROVIDER**: Nama sumber daya penyedia lengkap

409 * **GCP\_SERVICE\_ACCOUNT**: Alamat email akun layanan

410 

411 <Tip>

412 Workload Identity Federation menghilangkan kebutuhan untuk kunci akun layanan yang dapat diunduh, meningkatkan keamanan.

413 </Tip>

414 

415 Untuk instruksi penyiapan terperinci, konsultasikan [dokumentasi Google Cloud Workload Identity Federation](https://cloud.google.com/iam/docs/workload-identity-federation).

416 </Accordion>

417 </AccordionGroup>

418 </Step>

419 

420 <Step title="Tambahkan Rahasia yang Diperlukan">

421 Tambahkan rahasia berikut ke repositori Anda (Settings → Secrets and variables → Actions):

422 

423 #### Untuk Claude API (Langsung):

424 

425 1. **Untuk Autentikasi API**:

426 * `ANTHROPIC_API_KEY`: Kunci Claude API Anda dari [console.anthropic.com](https://console.anthropic.com)

427 

428 2. **Untuk Aplikasi GitHub (jika menggunakan aplikasi Anda sendiri)**:

429 * `APP_ID`: ID Aplikasi GitHub Anda

430 * `APP_PRIVATE_KEY`: Konten kunci pribadi (.pem)

431 

432 #### Untuk Google Cloud Vertex AI

433 

434 1. **Untuk Autentikasi GCP**:

435 * `GCP_WORKLOAD_IDENTITY_PROVIDER`

436 * `GCP_SERVICE_ACCOUNT`

437 

438 2. **Untuk Aplikasi GitHub (jika menggunakan aplikasi Anda sendiri)**:

439 * `APP_ID`: ID Aplikasi GitHub Anda

440 * `APP_PRIVATE_KEY`: Konten kunci pribadi (.pem)

441 

442 #### Untuk AWS Bedrock

443 

444 1. **Untuk Autentikasi AWS**:

445 * `AWS_ROLE_TO_ASSUME`

446 

447 2. **Untuk Aplikasi GitHub (jika menggunakan aplikasi Anda sendiri)**:

448 * `APP_ID`: ID Aplikasi GitHub Anda

449 * `APP_PRIVATE_KEY`: Konten kunci pribadi (.pem)

450 </Step>

451 

452 <Step title="Buat file workflow">

453 Buat file workflow GitHub Actions yang terintegrasi dengan penyedia cloud Anda. Contoh di bawah menunjukkan konfigurasi lengkap untuk Amazon Bedrock dan Google Vertex AI:

454 

455 <AccordionGroup>

456 <Accordion title="Workflow Amazon Bedrock">

457 **Prasyarat:**

458 

459 * Akses Amazon Bedrock diaktifkan dengan izin model Claude

460 * GitHub dikonfigurasi sebagai penyedia identitas OIDC di AWS

461 * Peran IAM dengan izin Bedrock yang mempercayai GitHub Actions

462 

463 **Rahasia GitHub yang diperlukan:**

464 

465 | Secret Name | Description |

466 | -------------------- | ----------------------------------------------------------- |

467 | `AWS_ROLE_TO_ASSUME` | ARN dari peran IAM untuk akses Bedrock |

468 | `APP_ID` | ID Aplikasi GitHub Anda (dari pengaturan aplikasi) |

469 | `APP_PRIVATE_KEY` | Kunci pribadi yang Anda hasilkan untuk Aplikasi GitHub Anda |

470 

471 ```yaml theme={null}

472 name: Claude PR Action

473 

474 permissions:

475 contents: write

476 pull-requests: write

477 issues: write

478 id-token: write

479 

480 on:

481 issue_comment:

482 types: [created]

483 pull_request_review_comment:

484 types: [created]

485 issues:

486 types: [opened, assigned]

487 

488 jobs:

489 claude-pr:

490 if: |

491 (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||

492 (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||

493 (github.event_name == 'issues' && contains(github.event.issue.body, '@claude'))

494 runs-on: ubuntu-latest

495 env:

496 AWS_REGION: us-west-2

497 steps:

498 - name: Checkout repository

499 uses: actions/checkout@v4

500 

501 - name: Generate GitHub App token

502 id: app-token

503 uses: actions/create-github-app-token@v2

504 with:

505 app-id: ${{ secrets.APP_ID }}

506 private-key: ${{ secrets.APP_PRIVATE_KEY }}

507 

508 - name: Configure AWS Credentials (OIDC)

509 uses: aws-actions/configure-aws-credentials@v4

510 with:

511 role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }}

512 aws-region: us-west-2

513 

514 - uses: anthropics/claude-code-action@v1

515 with:

516 github_token: ${{ steps.app-token.outputs.token }}

517 use_bedrock: "true"

518 claude_args: '--model us.anthropic.claude-sonnet-4-6 --max-turns 10'

519 ```

520 

521 <Tip>

522 Format ID model untuk Bedrock mencakup awalan region (misalnya, `us.anthropic.claude-sonnet-4-6`).

523 </Tip>

524 </Accordion>

525 

526 <Accordion title="Workflow Google Vertex AI">

527 **Prasyarat:**

528 

529 * Vertex AI API diaktifkan di proyek GCP Anda

530 * Workload Identity Federation dikonfigurasi untuk GitHub

531 * Akun layanan dengan izin Vertex AI

532 

533 **Rahasia GitHub yang diperlukan:**

534 

535 | Secret Name | Description |

536 | -------------------------------- | ----------------------------------------------------------- |

537 | `GCP_WORKLOAD_IDENTITY_PROVIDER` | Nama sumber daya penyedia identitas workload |

538 | `GCP_SERVICE_ACCOUNT` | Email akun layanan dengan akses Vertex AI |

539 | `APP_ID` | ID Aplikasi GitHub Anda (dari pengaturan aplikasi) |

540 | `APP_PRIVATE_KEY` | Kunci pribadi yang Anda hasilkan untuk Aplikasi GitHub Anda |

541 

542 ```yaml theme={null}

543 name: Claude PR Action

544 

545 permissions:

546 contents: write

547 pull-requests: write

548 issues: write

549 id-token: write

550 

551 on:

552 issue_comment:

553 types: [created]

554 pull_request_review_comment:

555 types: [created]

556 issues:

557 types: [opened, assigned]

558 

559 jobs:

560 claude-pr:

561 if: |

562 (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||

563 (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||

564 (github.event_name == 'issues' && contains(github.event.issue.body, '@claude'))

565 runs-on: ubuntu-latest

566 steps:

567 - name: Checkout repository

568 uses: actions/checkout@v4

569 

570 - name: Generate GitHub App token

571 id: app-token

572 uses: actions/create-github-app-token@v2

573 with:

574 app-id: ${{ secrets.APP_ID }}

575 private-key: ${{ secrets.APP_PRIVATE_KEY }}

576 

577 - name: Authenticate to Google Cloud

578 id: auth

579 uses: google-github-actions/auth@v2

580 with:

581 workload_identity_provider: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }}

582 service_account: ${{ secrets.GCP_SERVICE_ACCOUNT }}

583 

584 - uses: anthropics/claude-code-action@v1

585 with:

586 github_token: ${{ steps.app-token.outputs.token }}

587 trigger_phrase: "@claude"

588 use_vertex: "true"

589 claude_args: '--model claude-sonnet-4-5@20250929 --max-turns 10'

590 env:

591 ANTHROPIC_VERTEX_PROJECT_ID: ${{ steps.auth.outputs.project_id }}

592 CLOUD_ML_REGION: us-east5

593 VERTEX_REGION_CLAUDE_4_5_SONNET: us-east5

594 ```

595 

596 <Tip>

597 ID proyek secara otomatis diambil dari langkah autentikasi Google Cloud, jadi Anda tidak perlu hardcode.

598 </Tip>

599 </Accordion>

600 </AccordionGroup>

601 </Step>

602</Steps>

603 

604## Troubleshooting

605 

606### Claude tidak merespons perintah @claude

607 

608Verifikasi aplikasi GitHub terinstal dengan benar, periksa bahwa workflow diaktifkan, pastikan kunci API diatur dalam rahasia repositori, dan konfirmkan komentar berisi `@claude` (bukan `/claude`).

609 

610### CI tidak berjalan pada commit Claude

611 

612Pastikan Anda menggunakan aplikasi GitHub atau aplikasi kustom (bukan pengguna Actions), periksa pemicu workflow mencakup event yang diperlukan, dan verifikasi izin aplikasi mencakup pemicu CI.

613 

614### Kesalahan autentikasi

615 

616Konfirmkan kunci API valid dan memiliki izin yang cukup. Untuk Bedrock/Vertex, periksa konfigurasi kredensial dan pastikan rahasia dinamai dengan benar dalam workflow.

617 

618## Konfigurasi lanjutan

619 

620### Parameter action

621 

622Claude Code Action v1 menggunakan konfigurasi yang disederhanakan:

623 

624| Parameter | Description | Required |

625| ------------------- | ----------------------------------------------------------------- | -------- |

626| `prompt` | Instruksi untuk Claude (teks biasa atau nama [skill](/id/skills)) | No\* |

627| `claude_args` | Argumen CLI yang diteruskan ke Claude Code | No |

628| `anthropic_api_key` | Kunci Claude API | Yes\*\* |

629| `github_token` | Token GitHub untuk akses API | No |

630| `trigger_phrase` | Frasa pemicu kustom (default: "@claude") | No |

631| `use_bedrock` | Gunakan Amazon Bedrock alih-alih Claude API | No |

632| `use_vertex` | Gunakan Google Vertex AI alih-alih Claude API | No |

633 

634\*Prompt opsional - saat dihilangkan untuk komentar issue/PR, Claude merespons frasa pemicu\

635\*\*Diperlukan untuk Claude API langsung, bukan untuk Bedrock/Vertex

636 

637#### Teruskan argumen CLI

638 

639Parameter `claude_args` menerima argumen Claude Code CLI apa pun:

640 

641```yaml theme={null}

642claude_args: "--max-turns 5 --model claude-sonnet-4-6 --mcp-config /path/to/config.json"

643```

644 

645Argumen umum:

646 

647* `--max-turns`: Maksimum conversation turns (default: 10)

648* `--model`: Model yang digunakan (misalnya, `claude-sonnet-4-6`)

649* `--mcp-config`: Path ke konfigurasi MCP

650* `--allowedTools`: Daftar tools yang diizinkan dipisahkan koma. Alias `--allowed-tools` juga berfungsi.

651* `--debug`: Aktifkan output debug

652 

653### Metode integrasi alternatif

654 

655Meskipun perintah `/install-github-app` adalah pendekatan yang direkomendasikan, Anda juga dapat:

656 

657* **Custom GitHub App**: Untuk organisasi yang memerlukan nama pengguna bermerek atau alur autentikasi kustom. Buat aplikasi GitHub Anda sendiri dengan izin yang diperlukan (contents, issues, pull requests) dan gunakan action actions/create-github-app-token untuk menghasilkan token dalam workflow Anda.

658* **Manual GitHub Actions**: Konfigurasi workflow langsung untuk fleksibilitas maksimal

659* **MCP Configuration**: Pemuatan dinamis server Model Context Protocol

660 

661Lihat [dokumentasi Claude Code Action](https://github.com/anthropics/claude-code-action/blob/main/docs) untuk panduan terperinci tentang autentikasi, keamanan, dan konfigurasi lanjutan.

662 

663### Menyesuaikan perilaku Claude

664 

665Anda dapat mengonfigurasi perilaku Claude dengan dua cara:

666 

6671. **CLAUDE.md**: Tentukan standar coding, kriteria ulasan, dan aturan khusus proyek dalam file `CLAUDE.md` di root repositori Anda. Claude akan mengikuti panduan ini saat membuat PR dan merespons permintaan. Lihat [dokumentasi Memory](/id/memory) kami untuk detail lebih lanjut.

6682. **Custom prompts**: Gunakan parameter `prompt` dalam file workflow untuk memberikan instruksi khusus workflow. Ini memungkinkan Anda menyesuaikan perilaku Claude untuk workflow atau tugas berbeda.

669 

670Claude akan mengikuti panduan ini saat membuat PR dan merespons permintaan.

gitlab-ci-cd.md +466 −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# Claude Code GitLab CI/CD

6 

7> Pelajari tentang mengintegrasikan Claude Code ke dalam alur kerja pengembangan Anda dengan GitLab CI/CD

8 

9<Info>

10 Claude Code untuk GitLab CI/CD saat ini dalam versi beta. Fitur dan fungsionalitas dapat berkembang saat kami menyempurnakan pengalaman.

11 

12 Integrasi ini dikelola oleh GitLab. Untuk dukungan, lihat [masalah GitLab](https://gitlab.com/gitlab-org/gitlab/-/issues/573776) berikut.

13</Info>

14 

15<Note>

16 Integrasi ini dibangun di atas [Claude Code CLI dan Agent SDK](/id/agent-sdk/overview), memungkinkan penggunaan Claude secara terprogram dalam pekerjaan CI/CD dan alur kerja otomasi khusus Anda.

17</Note>

18 

19## Mengapa menggunakan Claude Code dengan GitLab?

20 

21* **Pembuatan MR instan**: Jelaskan apa yang Anda butuhkan, dan Claude mengusulkan MR lengkap dengan perubahan dan penjelasan

22* **Implementasi otomatis**: Ubah masalah menjadi kode yang berfungsi dengan satu perintah atau penyebutan

23* **Menyadari proyek**: Claude mengikuti panduan `CLAUDE.md` Anda dan pola kode yang ada

24* **Pengaturan sederhana**: Tambahkan satu pekerjaan ke `.gitlab-ci.yml` dan satu variabel CI/CD yang disembunyikan

25* **Siap untuk perusahaan**: Pilih Claude API, Amazon Bedrock, atau Google Vertex AI untuk memenuhi kebutuhan residensi data dan pengadaan

26* **Aman secara default**: Berjalan di runner GitLab Anda dengan perlindungan cabang dan persetujuan Anda

27 

28## Cara kerjanya

29 

30Claude Code menggunakan GitLab CI/CD untuk menjalankan tugas AI dalam pekerjaan terisolasi dan melakukan commit hasil kembali melalui MR:

31 

321. **Orkestrasi berbasis peristiwa**: GitLab mendengarkan pemicu pilihan Anda (misalnya, komentar yang menyebutkan `@claude` dalam masalah, MR, atau utas ulasan). Pekerjaan mengumpulkan konteks dari utas dan repositori, membangun prompt dari input tersebut, dan menjalankan Claude Code.

33 

342. **Abstraksi penyedia**: Gunakan penyedia yang sesuai dengan lingkungan Anda:

35 * Claude API (SaaS)

36 * Amazon Bedrock (akses berbasis IAM, opsi lintas wilayah)

37 * Google Vertex AI (asli GCP, Workload Identity Federation)

38 

393. **Eksekusi bersandbox**: Setiap interaksi berjalan dalam kontainer dengan aturan jaringan dan sistem file yang ketat. Claude Code memberlakukan izin berskop ruang kerja untuk membatasi penulisan. Setiap perubahan mengalir melalui MR sehingga pengulas melihat diff dan persetujuan masih berlaku.

40 

41Pilih titik akhir regional untuk mengurangi latensi dan memenuhi persyaratan kedaulatan data sambil menggunakan perjanjian cloud yang ada.

42 

43## Apa yang dapat dilakukan Claude?

44 

45Claude Code memungkinkan alur kerja CI/CD yang kuat yang mengubah cara Anda bekerja dengan kode:

46 

47* Buat dan perbarui MR dari deskripsi masalah atau komentar

48* Analisis regresi kinerja dan usulkan optimisasi

49* Implementasikan fitur langsung di cabang, kemudian buka MR

50* Perbaiki bug dan regresi yang diidentifikasi oleh tes atau komentar

51* Merespons komentar lanjutan untuk mengulangi perubahan yang diminta

52 

53## Pengaturan

54 

55### Pengaturan cepat

56 

57Cara tercepat untuk memulai adalah menambahkan pekerjaan minimal ke `.gitlab-ci.yml` Anda dan menetapkan kunci API Anda sebagai variabel yang disembunyikan.

58 

591. **Tambahkan variabel CI/CD yang disembunyikan**

60 * Buka **Settings** → **CI/CD** → **Variables**

61 * Tambahkan `ANTHROPIC_API_KEY` (disembunyikan, dilindungi sesuai kebutuhan)

62 

632. **Tambahkan pekerjaan Claude ke `.gitlab-ci.yml`**

64 

65```yaml theme={null}

66stages:

67 - ai

68 

69claude:

70 stage: ai

71 image: node:24-alpine3.21

72 # Sesuaikan aturan agar sesuai dengan cara Anda ingin memicu pekerjaan:

73 # - menjalankan secara manual

74 # - peristiwa permintaan penggabungan

75 # - pemicu web/API ketika komentar berisi '@claude'

76 rules:

77 - if: '$CI_PIPELINE_SOURCE == "web"'

78 - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'

79 variables:

80 GIT_STRATEGY: fetch

81 before_script:

82 - apk update

83 - apk add --no-cache git curl bash

84 - curl -fsSL https://claude.ai/install.sh | bash

85 script:

86 # Opsional: mulai server GitLab MCP jika pengaturan Anda menyediakannya

87 - /bin/gitlab-mcp-server || true

88 # Gunakan variabel AI_FLOW_* saat memanggil melalui pemicu web/API dengan muatan konteks

89 - echo "$AI_FLOW_INPUT for $AI_FLOW_CONTEXT on $AI_FLOW_EVENT"

90 - >

91 claude

92 -p "${AI_FLOW_INPUT:-'Review this MR and implement the requested changes'}"

93 --permission-mode acceptEdits

94 --allowedTools "Bash Read Edit Write mcp__gitlab"

95 --debug

96```

97 

98Setelah menambahkan pekerjaan dan variabel `ANTHROPIC_API_KEY` Anda, uji dengan menjalankan pekerjaan secara manual dari **CI/CD** → **Pipelines**, atau picu dari MR untuk membiarkan Claude mengusulkan pembaruan di cabang dan membuka MR jika diperlukan.

99 

100<Note>

101 Untuk menjalankan di Amazon Bedrock atau Google Vertex AI alih-alih Claude API, lihat bagian [Menggunakan dengan Amazon Bedrock & Google Vertex AI](#menggunakan-dengan-amazon-bedrock--google-vertex-ai) di bawah untuk pengaturan autentikasi dan lingkungan.

102</Note>

103 

104### Pengaturan manual (direkomendasikan untuk produksi)

105 

106Jika Anda lebih suka pengaturan yang lebih terkontrol atau memerlukan penyedia perusahaan:

107 

1081. **Konfigurasi akses penyedia**:

109 * **Claude API**: Buat dan simpan `ANTHROPIC_API_KEY` sebagai variabel CI/CD yang disembunyikan

110 * **Amazon Bedrock**: **Konfigurasi GitLab** → **AWS OIDC** dan buat peran IAM untuk Bedrock

111 * **Google Vertex AI**: **Konfigurasi Workload Identity Federation untuk GitLab** → **GCP**

112 

1132. **Tambahkan kredensial proyek untuk operasi GitLab API**:

114 * Gunakan `CI_JOB_TOKEN` secara default, atau buat Project Access Token dengan cakupan `api`

115 * Simpan sebagai `GITLAB_ACCESS_TOKEN` (disembunyikan) jika menggunakan PAT

116 

1173. **Tambahkan pekerjaan Claude ke `.gitlab-ci.yml`** (lihat contoh di bawah)

118 

1194. **(Opsional) Aktifkan pemicu berbasis penyebutan**:

120 * Tambahkan webhook proyek untuk "Comments (notes)" ke pendengar peristiwa Anda (jika Anda menggunakannya)

121 * Buat pendengar memanggil API pemicu pipeline dengan variabel seperti `AI_FLOW_INPUT` dan `AI_FLOW_CONTEXT` ketika komentar berisi `@claude`

122 

123## Contoh kasus penggunaan

124 

125### Ubah masalah menjadi MR

126 

127Dalam komentar masalah:

128 

129```text theme={null}

130@claude implement this feature based on the issue description

131```

132 

133Claude menganalisis masalah dan basis kode, menulis perubahan di cabang, dan membuka MR untuk ditinjau.

134 

135### Dapatkan bantuan implementasi

136 

137Dalam diskusi MR:

138 

139```text theme={null}

140@claude suggest a concrete approach to cache the results of this API call

141```

142 

143Claude mengusulkan perubahan, menambahkan kode dengan caching yang sesuai, dan memperbarui MR.

144 

145### Perbaiki bug dengan cepat

146 

147Dalam komentar masalah atau MR:

148 

149```text theme={null}

150@claude fix the TypeError in the user dashboard component

151```

152 

153Claude menemukan bug, mengimplementasikan perbaikan, dan memperbarui cabang atau membuka MR baru.

154 

155## Menggunakan dengan Amazon Bedrock & Google Vertex AI

156 

157Untuk lingkungan perusahaan, Anda dapat menjalankan Claude Code sepenuhnya di infrastruktur cloud Anda dengan pengalaman pengembang yang sama.

158 

159<Tabs>

160 <Tab title="Amazon Bedrock">

161 ### Prasyarat

162 

163 Sebelum menyiapkan Claude Code dengan Amazon Bedrock, Anda memerlukan:

164 

165 1. Akun AWS dengan akses Amazon Bedrock ke model Claude yang diinginkan

166 2. GitLab dikonfigurasi sebagai penyedia identitas OIDC di AWS IAM

167 3. Peran IAM dengan izin Bedrock dan kebijakan kepercayaan yang dibatasi pada proyek/ref GitLab Anda

168 4. Variabel CI/CD GitLab untuk asumsi peran:

169 * `AWS_ROLE_TO_ASSUME` (ARN peran)

170 * `AWS_REGION` (wilayah Bedrock)

171 

172 ### Instruksi pengaturan

173 

174 Konfigurasi AWS untuk memungkinkan pekerjaan GitLab CI mengasumsikan peran IAM melalui OIDC (tanpa kunci statis).

175 

176 **Pengaturan yang diperlukan:**

177 

178 1. Aktifkan Amazon Bedrock dan minta akses ke model Claude target Anda

179 2. Buat penyedia OIDC IAM untuk GitLab jika belum ada

180 3. Buat peran IAM yang dipercaya oleh penyedia OIDC GitLab, dibatasi pada proyek dan ref yang dilindungi Anda

181 4. Lampirkan izin hak istimewa minimal untuk API invoke Bedrock

182 

183 **Nilai yang diperlukan untuk disimpan dalam variabel CI/CD:**

184 

185 * `AWS_ROLE_TO_ASSUME`

186 * `AWS_REGION`

187 

188 Tambahkan variabel di Settings → CI/CD → Variables:

189 

190 ```yaml theme={null}

191 # Untuk Amazon Bedrock:

192 - AWS_ROLE_TO_ASSUME

193 - AWS_REGION

194 ```

195 

196 Gunakan contoh pekerjaan Amazon Bedrock di atas untuk menukar token pekerjaan GitLab dengan kredensial AWS sementara saat runtime.

197 </Tab>

198 

199 <Tab title="Google Vertex AI">

200 ### Prasyarat

201 

202 Sebelum menyiapkan Claude Code dengan Google Vertex AI, Anda memerlukan:

203 

204 1. Proyek Google Cloud dengan:

205 * Vertex AI API diaktifkan

206 * Workload Identity Federation dikonfigurasi untuk mempercayai GitLab OIDC

207 2. Akun layanan khusus dengan hanya peran Vertex AI yang diperlukan

208 3. Variabel CI/CD GitLab untuk WIF:

209 * `GCP_WORKLOAD_IDENTITY_PROVIDER` (nama sumber daya lengkap)

210 * `GCP_SERVICE_ACCOUNT` (email akun layanan)

211 

212 ### Instruksi pengaturan

213 

214 Konfigurasi Google Cloud untuk memungkinkan pekerjaan GitLab CI menyamar sebagai akun layanan melalui Workload Identity Federation.

215 

216 **Pengaturan yang diperlukan:**

217 

218 1. Aktifkan IAM Credentials API, STS API, dan Vertex AI API

219 2. Buat Workload Identity Pool dan penyedia untuk GitLab OIDC

220 3. Buat akun layanan khusus dengan peran Vertex AI

221 4. Berikan izin principal WIF untuk menyamar sebagai akun layanan

222 

223 **Nilai yang diperlukan untuk disimpan dalam variabel CI/CD:**

224 

225 * `GCP_WORKLOAD_IDENTITY_PROVIDER`

226 * `GCP_SERVICE_ACCOUNT`

227 

228 Tambahkan variabel di Settings → CI/CD → Variables:

229 

230 ```yaml theme={null}

231 # Untuk Google Vertex AI:

232 - GCP_WORKLOAD_IDENTITY_PROVIDER

233 - GCP_SERVICE_ACCOUNT

234 - CLOUD_ML_REGION (misalnya, us-east5)

235 ```

236 

237 Gunakan contoh pekerjaan Google Vertex AI di atas untuk autentikasi tanpa menyimpan kunci.

238 </Tab>

239</Tabs>

240 

241## Contoh konfigurasi

242 

243Di bawah ini adalah cuplikan siap pakai yang dapat Anda sesuaikan dengan pipeline Anda.

244 

245### .gitlab-ci.yml dasar (Claude API)

246 

247```yaml theme={null}

248stages:

249 - ai

250 

251claude:

252 stage: ai

253 image: node:24-alpine3.21

254 rules:

255 - if: '$CI_PIPELINE_SOURCE == "web"'

256 - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'

257 variables:

258 GIT_STRATEGY: fetch

259 before_script:

260 - apk update

261 - apk add --no-cache git curl bash

262 - curl -fsSL https://claude.ai/install.sh | bash

263 script:

264 - /bin/gitlab-mcp-server || true

265 - >

266 claude

267 -p "${AI_FLOW_INPUT:-'Summarize recent changes and suggest improvements'}"

268 --permission-mode acceptEdits

269 --allowedTools "Bash Read Edit Write mcp__gitlab"

270 --debug

271 # Claude Code akan menggunakan ANTHROPIC_API_KEY dari variabel CI/CD

272```

273 

274### Contoh pekerjaan Amazon Bedrock (OIDC)

275 

276**Prasyarat:**

277 

278* Amazon Bedrock diaktifkan dengan akses ke model Claude pilihan Anda

279* GitLab OIDC dikonfigurasi di AWS dengan peran yang mempercayai proyek dan ref GitLab Anda

280* Peran IAM dengan izin Bedrock (hak istimewa minimal direkomendasikan)

281 

282**Variabel CI/CD yang diperlukan:**

283 

284* `AWS_ROLE_TO_ASSUME`: ARN peran IAM untuk akses Bedrock

285* `AWS_REGION`: Wilayah Bedrock (misalnya, `us-west-2`)

286 

287```yaml theme={null}

288claude-bedrock:

289 stage: ai

290 image: node:24-alpine3.21

291 rules:

292 - if: '$CI_PIPELINE_SOURCE == "web"'

293 before_script:

294 - apk add --no-cache bash curl jq git python3 py3-pip

295 - pip install --no-cache-dir awscli

296 - curl -fsSL https://claude.ai/install.sh | bash

297 # Tukar token OIDC GitLab dengan kredensial AWS

298 - export AWS_WEB_IDENTITY_TOKEN_FILE="${CI_JOB_JWT_FILE:-/tmp/oidc_token}"

299 - if [ -n "${CI_JOB_JWT_V2}" ]; then printf "%s" "$CI_JOB_JWT_V2" > "$AWS_WEB_IDENTITY_TOKEN_FILE"; fi

300 - >

301 aws sts assume-role-with-web-identity

302 --role-arn "$AWS_ROLE_TO_ASSUME"

303 --role-session-name "gitlab-claude-$(date +%s)"

304 --web-identity-token "file://$AWS_WEB_IDENTITY_TOKEN_FILE"

305 --duration-seconds 3600 > /tmp/aws_creds.json

306 - export AWS_ACCESS_KEY_ID="$(jq -r .Credentials.AccessKeyId /tmp/aws_creds.json)"

307 - export AWS_SECRET_ACCESS_KEY="$(jq -r .Credentials.SecretAccessKey /tmp/aws_creds.json)"

308 - export AWS_SESSION_TOKEN="$(jq -r .Credentials.SessionToken /tmp/aws_creds.json)"

309 script:

310 - /bin/gitlab-mcp-server || true

311 - >

312 claude

313 -p "${AI_FLOW_INPUT:-'Implement the requested changes and open an MR'}"

314 --permission-mode acceptEdits

315 --allowedTools "Bash Read Edit Write mcp__gitlab"

316 --debug

317 variables:

318 AWS_REGION: "us-west-2"

319```

320 

321<Note>

322 ID model untuk Bedrock mencakup awalan khusus wilayah (misalnya, `us.anthropic.claude-sonnet-4-6`). Teruskan model yang diinginkan melalui konfigurasi pekerjaan atau prompt Anda jika alur kerja Anda mendukungnya.

323</Note>

324 

325### Contoh pekerjaan Google Vertex AI (Workload Identity Federation)

326 

327**Prasyarat:**

328 

329* Vertex AI API diaktifkan di proyek GCP Anda

330* Workload Identity Federation dikonfigurasi untuk mempercayai GitLab OIDC

331* Akun layanan dengan izin Vertex AI

332 

333**Variabel CI/CD yang diperlukan:**

334 

335* `GCP_WORKLOAD_IDENTITY_PROVIDER`: Nama sumber daya penyedia lengkap

336* `GCP_SERVICE_ACCOUNT`: Email akun layanan

337* `CLOUD_ML_REGION`: Wilayah Vertex (misalnya, `us-east5`)

338 

339```yaml theme={null}

340claude-vertex:

341 stage: ai

342 image: gcr.io/google.com/cloudsdktool/google-cloud-cli:slim

343 rules:

344 - if: '$CI_PIPELINE_SOURCE == "web"'

345 before_script:

346 - apt-get update && apt-get install -y git && apt-get clean

347 - curl -fsSL https://claude.ai/install.sh | bash

348 # Autentikasi ke Google Cloud melalui WIF (tanpa kunci yang diunduh)

349 - >

350 gcloud auth login --cred-file=<(cat <<EOF

351 {

352 "type": "external_account",

353 "audience": "${GCP_WORKLOAD_IDENTITY_PROVIDER}",

354 "subject_token_type": "urn:ietf:params:oauth:token-type:jwt",

355 "service_account_impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/${GCP_SERVICE_ACCOUNT}:generateAccessToken",

356 "token_url": "https://sts.googleapis.com/v1/token"

357 }

358 EOF

359 )

360 - gcloud config set project "$(gcloud projects list --format='value(projectId)' --filter="name:${CI_PROJECT_NAMESPACE}" | head -n1)" || true

361 script:

362 - /bin/gitlab-mcp-server || true

363 - >

364 CLOUD_ML_REGION="${CLOUD_ML_REGION:-us-east5}"

365 claude

366 -p "${AI_FLOW_INPUT:-'Review and update code as requested'}"

367 --permission-mode acceptEdits

368 --allowedTools "Bash Read Edit Write mcp__gitlab"

369 --debug

370 variables:

371 CLOUD_ML_REGION: "us-east5"

372```

373 

374<Note>

375 Dengan Workload Identity Federation, Anda tidak perlu menyimpan kunci akun layanan. Gunakan kondisi kepercayaan khusus repositori dan akun layanan dengan hak istimewa minimal.

376</Note>

377 

378## Praktik terbaik

379 

380### Konfigurasi CLAUDE.md

381 

382Buat file `CLAUDE.md` di akar repositori untuk menentukan standar pengkodean, kriteria ulasan, dan aturan khusus proyek. Claude membaca file ini selama berjalan dan mengikuti konvensi Anda saat mengusulkan perubahan.

383 

384### Pertimbangan keamanan

385 

386**Jangan pernah melakukan commit kunci API atau kredensial cloud ke repositori Anda**. Selalu gunakan variabel GitLab CI/CD:

387 

388* Tambahkan `ANTHROPIC_API_KEY` sebagai variabel yang disembunyikan (dan lindungi jika diperlukan)

389* Gunakan OIDC khusus penyedia jika memungkinkan (tanpa kunci jangka panjang)

390* Batasi izin pekerjaan dan egress jaringan

391* Tinjau MR Claude seperti kontributor lainnya

392 

393### Mengoptimalkan kinerja

394 

395* Jaga `CLAUDE.md` tetap fokus dan ringkas

396* Berikan deskripsi masalah/MR yang jelas untuk mengurangi iterasi

397* Konfigurasi timeout pekerjaan yang masuk akal untuk menghindari lari liar

398* Cache npm dan instalasi paket di runner jika memungkinkan

399 

400### Biaya CI

401 

402Saat menggunakan Claude Code dengan GitLab CI/CD, waspadai biaya terkait:

403 

404* **Waktu GitLab Runner**:

405 * Claude berjalan di runner GitLab Anda dan mengonsumsi menit komputasi

406 * Lihat penagihan runner rencana GitLab Anda untuk detail

407 

408* **Biaya API**:

409 * Setiap interaksi Claude mengonsumsi token berdasarkan ukuran prompt dan respons

410 * Penggunaan token bervariasi menurut kompleksitas tugas dan ukuran basis kode

411 * Lihat [harga Anthropic](https://platform.claude.com/docs/id/about-claude/pricing) untuk detail

412 

413* **Tips optimisasi biaya**:

414 * Gunakan perintah `@claude` spesifik untuk mengurangi putaran yang tidak perlu

415 * Tetapkan nilai `max_turns` dan timeout pekerjaan yang sesuai

416 * Batasi keselarasan untuk mengontrol lari paralel

417 

418## Keamanan dan tata kelola

419 

420* Setiap pekerjaan berjalan dalam kontainer terisolasi dengan akses jaringan terbatas

421* Perubahan Claude mengalir melalui MR sehingga pengulas melihat setiap diff

422* Perlindungan cabang dan aturan persetujuan berlaku untuk kode yang dihasilkan AI

423* Claude Code menggunakan izin berskop ruang kerja untuk membatasi penulisan

424* Biaya tetap di bawah kontrol Anda karena Anda membawa kredensial penyedia Anda sendiri

425 

426## Pemecahan masalah

427 

428### Claude tidak merespons perintah @claude

429 

430* Verifikasi pipeline Anda dipicu (secara manual, peristiwa MR, atau melalui pendengar peristiwa catatan/webhook)

431* Pastikan variabel CI/CD (`ANTHROPIC_API_KEY` atau pengaturan penyedia cloud) ada dan tidak disembunyikan

432* Periksa bahwa komentar berisi `@claude` (bukan `/claude`) dan pemicu penyebutan Anda dikonfigurasi

433 

434### Pekerjaan tidak dapat menulis komentar atau membuka MR

435 

436* Pastikan `CI_JOB_TOKEN` memiliki izin yang cukup untuk proyek, atau gunakan Project Access Token dengan cakupan `api`

437* Periksa alat `mcp__gitlab` diaktifkan dalam `--allowedTools`

438* Konfirmasi pekerjaan berjalan dalam konteks MR atau memiliki konteks yang cukup melalui variabel `AI_FLOW_*`

439 

440### Kesalahan autentikasi

441 

442* **Untuk Claude API**: Konfirmasi `ANTHROPIC_API_KEY` valid dan tidak kedaluwarsa

443* **Untuk Bedrock/Vertex**: Verifikasi konfigurasi OIDC/WIF, impersonasi peran, dan nama rahasia; konfirmasi ketersediaan wilayah dan model

444 

445## Konfigurasi lanjutan

446 

447### Parameter dan variabel umum

448 

449Claude Code mendukung input yang umum digunakan ini:

450 

451* `prompt` / `prompt_file`: Berikan instruksi inline (`-p`) atau melalui file

452* `max_turns`: Batasi jumlah iterasi bolak-balik

453* `timeout_minutes`: Batasi waktu eksekusi total

454* `ANTHROPIC_API_KEY`: Diperlukan untuk Claude API (tidak digunakan untuk Bedrock/Vertex)

455* Lingkungan khusus penyedia: `AWS_REGION`, variabel proyek/wilayah untuk Vertex

456 

457<Note>

458 Bendera dan parameter yang tepat dapat bervariasi menurut versi `@anthropic-ai/claude-code`. Jalankan `claude --help` dalam pekerjaan Anda untuk melihat opsi yang didukung.

459</Note>

460 

461### Menyesuaikan perilaku Claude

462 

463Anda dapat memandu Claude dengan dua cara utama:

464 

4651. **CLAUDE.md**: Tentukan standar pengkodean, persyaratan keamanan, dan konvensi proyek. Claude membaca ini selama berjalan dan mengikuti aturan Anda.

4662. **Prompt khusus**: Teruskan instruksi khusus tugas melalui `prompt`/`prompt_file` dalam pekerjaan. Gunakan prompt berbeda untuk pekerjaan berbeda (misalnya, ulasan, implementasi, refaktor).

glossary.md +307 −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# Glosarium

6 

7> Definisi untuk terminologi Claude Code. Pelajari apa itu agentic loop, compaction, CLAUDE.md, hooks, subagents, MCP, dan konsep inti lainnya.

8 

9Glosarium ini mendefinisikan terminologi Claude Code. Setiap entri menghubungkan ke halaman tempat konsep dibahas secara mendalam. Untuk konsep tingkat model seperti tokens, temperature, dan RAG, lihat [glosarium platform](https://platform.claude.com/docs/en/about-claude/glossary).

10 

11## A

12 

13### Agent teams

14 

15Beberapa sesi Claude Code independen yang dikoordinasikan oleh pemimpin tim, dengan daftar tugas bersama dan pesan peer-to-peer. Tidak seperti [subagents](#subagent), yang berjalan dalam satu sesi dan hanya melaporkan ke induk, rekan kerja masing-masing memiliki jendela konteks mereka sendiri dan Anda dapat berinteraksi dengan salah satu dari mereka secara langsung. Agent teams bersifat eksperimental dan harus diaktifkan dengan menetapkan `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1`.

16 

17Pelajari lebih lanjut: [Run agent teams](/id/agent-teams)

18 

19### Agentic coding

20 

21Alur kerja di mana AI dapat membaca file, menjalankan perintah, dan membuat perubahan secara otonom saat Anda menonton, mengalihkan, atau pergi, berbeda dengan asisten berbasis chat yang hanya merespons dengan teks yang harus Anda terapkan sendiri. Claude Code bersifat agentic karena memiliki [tools](#tool) yang memungkinkannya bertindak, bukan hanya memberi saran.

22 

23Pelajari lebih lanjut: [How Claude Code works](/id/how-claude-code-works)

24 

25### Agentic harness

26 

27Tools, manajemen konteks, dan lingkungan eksekusi yang mengubah model bahasa menjadi agen coding yang mampu. Claude Code adalah harness; Claude adalah model di dalamnya. Harness menyediakan akses file, eksekusi shell, gating izin, pemuatan memori, dan loop yang menghubungkan tindakan bersama-sama.

28 

29Pelajari lebih lanjut: [How Claude Code works](/id/how-claude-code-works)

30 

31### Agentic loop

32 

33Siklus yang Claude lalui untuk setiap tugas: kumpulkan konteks, ambil tindakan, verifikasi hasil, dan ulangi sampai selesai. Setiap penggunaan tool mengembalikan informasi yang menginformasikan langkah berikutnya. Anda dapat mengganggu loop kapan saja untuk mengalihkan. Sebagian besar titik ekstensi, termasuk [hooks](#hook), [skills](#skill), dan [MCP](#mcp-model-context-protocol), terhubung ke fase spesifik dari loop ini.

34 

35Pelajari lebih lanjut: [How Claude Code works](/id/how-claude-code-works#the-agentic-loop)

36 

37### Auto memory

38 

39Catatan yang Claude tulis untuk dirinya sendiri berdasarkan koreksi dan preferensi Anda, disimpan per repositori git di bawah `~/.claude/projects/`. Semua worktrees dari repositori yang sama berbagi satu direktori auto memory. 200 baris pertama atau 25 KB dari indeks `MEMORY.md` dimuat di awal setiap sesi. Auto memory adalah rekan Claude-written untuk [CLAUDE.md](#claude-md), yang Anda tulis.

40 

41Pelajari lebih lanjut: [Auto memory](/id/memory#auto-memory)

42 

43### Auto mode

44 

45Sebuah [permission mode](#permission-mode) di mana model classifier terpisah meninjau setiap tindakan di latar belakang alih-alih menampilkan prompt persetujuan kepada Anda. Classifier memblokir eskalasi scope, infrastruktur yang tidak dipercaya, dan [prompt injection](#prompt-injection). Classifier tidak pernah melihat hasil tool, jadi instruksi yang disuntikkan tidak dapat mempengaruhi keputusannya. Auto mode adalah pratinjau penelitian yang tersedia di paket Max, Team, Enterprise, dan API.

46 

47Pelajari lebih lanjut: [Eliminate prompts with auto mode](/id/permission-modes#eliminate-prompts-with-auto-mode)

48 

49## B

50 

51### Bare mode

52 

53Bendera startup, `--bare`, yang melewati auto-discovery hooks, skills, plugins, MCP servers, auto memory, dan CLAUDE.md. Hanya bendera yang Anda lewatkan secara eksplisit yang berlaku. Direkomendasikan untuk CI dan panggilan script di mana Anda memerlukan perilaku identik di seluruh mesin terlepas dari konfigurasi lokal.

54 

55Pelajari lebih lanjut: [Start faster with bare mode](/id/headless#start-faster-with-bare-mode)

56 

57### Bundled skills

58 

59Playbook berbasis prompt yang disertakan dengan Claude Code, seperti `/batch`, `/simplify`, `/debug`, dan `/loop`. Tidak seperti perintah built-in, yang mengeksekusi logika tetap, bundled skills memberikan Claude prompt terperinci dan membiarkannya mengorkestrasi pekerjaan, sehingga mereka dapat menelurkan agen, membaca file, dan beradaptasi dengan codebase Anda.

60 

61Pelajari lebih lanjut: [Bundled skills](/id/skills#bundled-skills)

62 

63## C

64 

65### Channel

66 

67Sebuah [MCP server](#mcp-model-context-protocol) yang mendorong peristiwa ke sesi yang sedang berjalan sehingga Claude dapat bereaksi terhadap hal-hal yang terjadi saat Anda jauh dari terminal. Channel dapat dua arah: Claude membaca peristiwa masuk dan membalas kembali melalui channel yang sama. Telegram, Discord, dan iMessage disertakan dalam pratinjau penelitian.

68 

69Pelajari lebih lanjut: [Channels](/id/channels)

70 

71### Checkpoint

72 

73Snapshot otomatis dari kode Anda yang ditangkap sebelum setiap edit yang Claude buat. Tekan `Esc` dua kali atau jalankan `/rewind` untuk mengembalikan kode, percakapan, atau keduanya ke titik sebelumnya. Checkpoint bersifat lokal untuk sesi, terpisah dari git, dan tidak melacak perubahan yang dibuat melalui tool Bash.

74 

75Pelajari lebih lanjut: [Checkpointing](/id/checkpointing)

76 

77### `.claude` directory

78 

79Direktori tempat Claude Code membaca konfigurasi yang dibatasi proyek: settings, hooks, skills, subagents, rules, dan auto memory. Sebuah proyek memiliki `.claude/` di akarnya; default tingkat pengguna Anda berada di `~/.claude/`.

80 

81Pelajari lebih lanjut: [The `.claude` directory](/id/claude-directory)

82 

83### CLAUDE.md

84 

85File markdown dari instruksi persisten yang Anda tulis untuk Claude, dimuat di awal setiap sesi sebagai pesan pengguna setelah system prompt. Letakkan konvensi proyek, catatan arsitektur, dan aturan "selalu lakukan X" di sini. CLAUDE.md bertahan [compaction](#compaction) dan dibaca ulang segar dari disk sesudahnya.

86 

87Anda dapat menempatkan CLAUDE.md di scope proyek di `./CLAUDE.md` atau `./.claude/CLAUDE.md`, di scope pengguna di `~/.claude/CLAUDE.md`, atau sebagai [managed policy](#managed-settings) untuk organisasi Anda. Lokasi yang lebih spesifik memiliki prioritas.

88 

89Pelajari lebih lanjut: [CLAUDE.md files](/id/memory#claude-md-files)

90 

91### Command

92 

93Instruksi yang dapat digunakan kembali yang Anda panggil dengan mengetik `/name` dalam prompt. Perintah built-in seperti `/clear`, `/model`, dan `/compact` mengontrol sesi. Anda dapat menentukan perintah Anda sendiri sebagai file di `.claude/commands/`, atau menginstalnya dari [plugin](#plugin). [Skills](#skill) adalah cara yang direkomendasikan untuk mengemas perintah multi-langkah.

94 

95Pelajari lebih lanjut: [Commands](/id/commands) · [Skills](/id/skills)

96 

97### Compaction

98 

99Ringkasan otomatis percakapan Anda ketika [context window](#context-window) mendekati batasnya. Output tool yang lebih lama dihapus terlebih dahulu, kemudian percakapan diringkas. CLAUDE.md akar proyek dan auto memory bertahan compaction dan dimuat ulang dari disk; instruksi yang diberikan hanya dalam percakapan mungkin hilang. Jalankan `/compact` untuk memicu secara manual, secara opsional dengan fokus seperti `/compact focus on the API changes`.

100 

101Pelajari lebih lanjut: [What survives compaction](/id/context-window#what-survives-compaction) · [When context fills up](/id/how-claude-code-works#when-context-fills-up)

102 

103### Context window

104 

105Memori kerja untuk sesi, menampung riwayat percakapan, konten file, output perintah, CLAUDE.md, auto memory, skills yang dimuat, dan instruksi sistem. Saat Anda bekerja, konteks terisi sampai [compaction](#compaction) meringkasnya. Jalankan `/context` untuk melihat apa yang menggunakan ruang. Untuk konsep model yang mendasar, lihat [glosarium platform](https://platform.claude.com/docs/en/about-claude/glossary#context-window).

106 

107Pelajari lebih lanjut: [Explore the context window](/id/context-window)

108 

109## D

110 

111### Dispatch

112 

113Router tugas yang diinisiasi telepon yang menelurkan sesi Claude Code di aplikasi Desktop ketika Anda mengirim tugas coding dari aplikasi mobile Claude. Prompt Anda merutekan ke tool yang tepat secara otomatis. Tersedia di paket Pro dan Max.

114 

115Pelajari lebih lanjut: [Sessions from Dispatch](/id/desktop#sessions-from-dispatch)

116 

117## E

118 

119### Effort level

120 

121Pengaturan yang mengontrol berapa banyak anggaran thinking adaptive-reasoning yang Claude gunakan pada setiap giliran. Effort yang lebih tinggi berarti lebih banyak thinking tokens dan reasoning yang lebih dalam; effort yang lebih rendah lebih cepat dan lebih murah. Effort didukung di Opus 4.7, Opus 4.6, dan Sonnet 4.6.

122 

123Pelajari lebih lanjut: [Adjust effort level](/id/model-config#adjust-effort-level)

124 

125### Extended thinking

126 

127Reasoning step-by-step yang terlihat yang dilakukan model sebelum merespons. Anda dapat membatasi thinking tokens dengan `MAX_THINKING_TOKENS` atau menyesuaikan [effort level](#effort-level). Thinking muncul dalam teks italic abu-abu di terminal.

128 

129Pelajari lebih lanjut: [Use extended thinking](/id/common-workflows#use-extended-thinking-thinking-mode)

130 

131## H

132 

133### Hook

134 

135Handler yang ditentukan pengguna yang dieksekusi secara otomatis pada titik spesifik dalam lifecycle Claude Code, seperti sebelum tool berjalan, setelah edit file, atau di awal sesi. Handler dapat berupa perintah shell, endpoint HTTP, MCP tool, prompt LLM, atau subagent. Hook bersifat deterministik: mereka menyala pada titik lifecycle tetap daripada atas kebijakan model.

136 

137Konfigurasi hook memiliki tiga level:

138 

139* **Hook event**: titik lifecycle

140* **Matcher**: filter yang peristiwa menyalakannya

141* **Hook handler**: apa yang berjalan

142 

143Pelajari lebih lanjut: [Get started with hooks](/id/hooks-guide) · [Hooks reference](/id/hooks)

144 

145## M

146 

147### Managed settings

148 

149File settings yang diberlakukan di seluruh organisasi oleh IT atau DevOps, ditempatkan di jalur tingkat OS di luar `~/.claude`. Pengguna tidak dapat mengesampingkan atau mengecualikan managed settings. Gunakan ini untuk kebijakan keamanan, persyaratan kepatuhan, atau tooling standar di seluruh armada.

150 

151Pelajari lebih lanjut: [Server-managed settings](/id/server-managed-settings)

152 

153### MCP (Model Context Protocol)

154 

155Standar terbuka untuk menghubungkan tools AI ke sumber data eksternal dan layanan. MCP servers memberikan Claude tools baru untuk Slack, Jira, database, browser, dan ratusan integrasi lainnya. Anda menghubungkan servers melalui `/mcp` atau dengan menambahkannya ke `.mcp.json`. Untuk protokol itu sendiri, lihat [glosarium platform](https://platform.claude.com/docs/en/about-claude/glossary#mcp-model-context-protocol).

156 

157Pelajari lebih lanjut: [Model Context Protocol](/id/mcp)

158 

159### MCP Tool Search

160 

161Mekanisme penghematan konteks yang menunda skema MCP tool sampai diperlukan. Hanya nama tool yang dimuat saat startup; Claude mengambil skema lengkap sesuai permintaan ketika memutuskan untuk menggunakan tool spesifik. Ini menjaga MCP servers idle dari mengonsumsi banyak konteks.

162 

163Pelajari lebih lanjut: [Scale with MCP Tool Search](/id/mcp#scale-with-mcp-tool-search)

164 

165## N

166 

167### Non-interactive mode

168 

169Mode yang mengeksekusi prompt tunggal dan keluar tanpa sesi percakapan, dipanggil dengan `-p` atau `--print`. Digunakan untuk CI, script, dan piping. [Agent SDK](/id/agent-sdk/overview) adalah setara Python dan TypeScript. Sebelumnya disebut headless mode.

170 

171Pelajari lebih lanjut: [Run Claude Code programmatically](/id/headless)

172 

173## O

174 

175### Output style

176 

177Konfigurasi yang memodifikasi system prompt Claude untuk mengubah perilaku respons, nada, atau format. Output styles mematikan bagian khusus software-engineering dari system prompt default, tidak seperti [CLAUDE.md](#claude-md) yang dikirimkan sebagai pesan pengguna mengikuti system prompt. Style built-in termasuk Default, Explanatory, dan Learning.

178 

179Pelajari lebih lanjut: [Output styles](/id/output-styles)

180 

181## P

182 

183### Permission mode

184 

185Perilaku persetujuan baseline untuk sesi. Siklus dengan `Shift+Tab` di CLI atau gunakan pemilih mode di VS Code, Desktop, dan claude.ai. Mode yang tersedia adalah `default`, `acceptEdits`, `plan`, `auto`, `dontAsk`, dan `bypassPermissions`.

186 

187Pelajari lebih lanjut: [Choose a permission mode](/id/permission-modes)

188 

189### Permission rule

190 

191Entri settings yang memungkinkan, menanyakan tentang, atau menolak invokasi tool berdasarkan nama tool dan pola argumen. Aturan dievaluasi deny→ask→allow, kecocokan pertama menang. Permission rules adalah kontrol granular yang berlapis di atas [permission mode](#permission-mode) yang lebih luas.

192 

193Pelajari lebih lanjut: [Configure permissions](/id/permissions)

194 

195### Plan mode

196 

197Sebuah [permission mode](#permission-mode) di mana Claude meneliti dan mengusulkan perubahan tanpa mengedit file sumber Anda. Dapat membaca, mencari, dan menjalankan perintah eksplorasi, kemudian menyajikan rencana untuk persetujuan sebelum menyentuh apa pun. Masukkan plan mode dengan `/plan` atau dengan menekan `Shift+Tab`.

198 

199Pelajari lebih lanjut: [Analyze before you edit with plan mode](/id/permission-modes#analyze-before-you-edit-with-plan-mode)

200 

201### Plugin

202 

203Bundle skills, hooks, subagents, dan MCP servers yang dikemas sebagai unit yang dapat diinstal tunggal. Plugin skills diberi namespace sebagai `plugin-name:skill-name` sehingga beberapa plugin dapat hidup berdampingan. Distribusikan plugins di seluruh tim melalui [marketplace](/id/plugin-marketplaces).

204 

205Pelajari lebih lanjut: [Plugins](/id/plugins)

206 

207### Project trust

208 

209Dialog satu kali yang menerima direktori sebelum Claude Code memuat konfigurasinya. Trust gates auto-installation marketplace plugins dan eksekusi project-defined hooks. Mempercayai direktori berarti `.claude/settings.json`, `.mcp.json`, dan file config lainnya berlaku.

210 

211Pelajari lebih lanjut: [The `.claude` directory](/id/claude-directory)

212 

213### Prompt injection

214 

215Instruksi bermusuhan yang tertanam dalam file, halaman web, atau hasil tool yang mencoba mengalihkan Claude ke arah tindakan yang tidak pernah Anda minta. Pertahanan Claude Code termasuk sistem izin, blocklists perintah, dan verifikasi kepercayaan. [Auto mode](#auto-mode) menambahkan probe sisi server yang memindai hasil tool untuk konten mencurigakan dan classifier yang tidak pernah melihat hasil tool, jadi teks yang disuntikkan tidak dapat mempengaruhi keputusan persetujuannya.

216 

217Pelajari lebih lanjut: [Protect against prompt injection](/id/security#protect-against-prompt-injection)

218 

219## R

220 

221### Remote Control

222 

223Cara untuk melanjutkan sesi Claude Code lokal dari telepon atau browser Anda melalui claude.ai. Kode Anda tetap di mesin Anda; hanya UI yang remote. Berbeda dari Claude Code di web, yang berjalan dalam sandbox cloud.

224 

225Pelajari lebih lanjut: [Remote Control](/id/remote-control)

226 

227### Rules

228 

229File instruksi modular di `.claude/rules/` yang dimuat bersama CLAUDE.md. Aturan dapat dibatasi path dengan frontmatter YAML `paths:` sehingga hanya dimuat ketika Claude membaca file yang cocok, menjaga konteks tetap ramping sampai relevan.

230 

231Pelajari lebih lanjut: [Organize rules with `.claude/rules/`](/id/memory#organize-rules-with-claude/rules/)

232 

233## S

234 

235### Sandboxing

236 

237Isolasi filesystem dan jaringan tingkat OS untuk tool Bash. Perintah berjalan di dalam batas yang Anda tentukan di muka, sehingga Claude dapat bekerja dengan bebas di dalamnya tanpa prompt persetujuan per-perintah. Sandboxing adalah lapisan terpisah dari [permission rules](#permission-rule).

238 

239Pelajari lebih lanjut: [Sandboxing](/id/sandboxing)

240 

241### Session

242 

243Percakapan yang terikat pada direktori saat ini, dengan [context window](#context-window) independen sendiri. Sesi dapat dilanjutkan dengan `claude -c`, difork dengan `--fork-session` untuk mempertahankan riwayat di bawah ID sesi baru, atau dijalankan secara paralel di seluruh terminal. Menjalankan `/clear` memulai sesi baru; sesi sebelumnya tetap disimpan dan tersedia melalui `/resume`. Transkrip setiap sesi disimpan di bawah `~/.claude/projects/`.

244 

245Pelajari lebih lanjut: [Work with sessions](/id/how-claude-code-works#work-with-sessions)

246 

247### Settings layers

248 

249Hierarki yang Claude Code baca konfigurasi dari, dalam urutan prioritas dari tertinggi ke terendah: [managed policy](#managed-settings), argumen command-line, local settings di `.claude/settings.local.json`, project settings di `.claude/settings.json`, kemudian user settings di `~/.claude/settings.json`. Array merge di seluruh layer; scalar di layer yang lebih tinggi mengesampingkan yang lebih rendah.

250 

251Pelajari lebih lanjut: [Settings files](/id/settings#settings-files)

252 

253### Skill

254 

255File `SKILL.md` yang berisi instruksi, pengetahuan, atau alur kerja yang Claude tambahkan ke toolkit-nya. Claude memuat skill secara otomatis ketika relevan, atau Anda memanggilnya secara langsung dengan `/skill-name`. Skills mengikuti standar Agent Skills terbuka; Claude Code memperluas dengan kontrol invokasi dan eksekusi subagent.

256 

257Skills adalah penerus yang direkomendasikan untuk perintah kustom. File di `.claude/commands/deploy.md` dan satu di `.claude/skills/deploy/SKILL.md` keduanya membuat `/deploy` dan bekerja dengan cara yang sama; file perintah yang ada terus bekerja.

258 

259Pelajari lebih lanjut: [Extend Claude with skills](/id/skills)

260 

261### Subagent

262 

263Asisten AI khusus yang berjalan di jendela konteks sendiri dengan system prompt kustom, akses tool spesifik, dan izin independen. Bekerja pada tugas yang didelegasikan dan mengembalikan ringkasan ke percakapan utama. Gunakan subagents untuk menjaga eksplorasi besar keluar dari konteks utama Anda atau untuk menjalankan penelitian paralel. Berbeda dari [agent teams](#agent-teams), di mana setiap agen adalah sesi independen penuh yang dapat Anda bicarakan secara langsung.

264 

265Subagents built-in termasuk Explore, Plan, dan general-purpose.

266 

267Pelajari lebih lanjut: [Create custom subagents](/id/sub-agents)

268 

269### Surface

270 

271Tempat apa pun Anda mengakses Claude Code: CLI, VS Code, JetBrains, Desktop, atau claude.ai. Semua surface berbagi engine yang sama, jadi CLAUDE.md, settings, dan skills Anda bekerja dengan cara yang sama di seluruhnya. Slack dan Chrome extension adalah integrasi yang terhubung ke surface daripada surface itu sendiri.

272 

273Pelajari lebih lanjut: [Platforms and integrations](/id/platforms)

274 

275## T

276 

277### Teleport

278 

279Perintah, `/teleport`, yang menarik sesi Claude Code cloud ke terminal lokal Anda. Claude mengambil branch, memuat riwayat percakapan, dan melanjutkan dari keadaan terakhir sesi web. Arah sebaliknya adalah `--remote`, yang mengirim tugas lokal untuk dijalankan di web.

280 

281Pelajari lebih lanjut: [From web to terminal](/id/claude-code-on-the-web#from-web-to-terminal)

282 

283### Tool

284 

285Tindakan yang dapat Claude ambil: baca file, edit kode, jalankan perintah shell, cari web, telurkan subagent. Tools adalah apa yang membuat Claude Code agentic. Tanpa mereka, Claude hanya dapat merespons dengan teks. Setiap penggunaan tool mengembalikan hasil yang menginformasikan keputusan Claude berikutnya dalam [agentic loop](#agentic-loop).

286 

287Pelajari lebih lanjut: [Tools available to Claude](/id/tools-reference)

288 

289## W

290 

291### Worktree isolation

292 

293Mode isolasi yang menjalankan Claude di git worktree terpisah di bawah `.claude/worktrees/`, diaktifkan dengan bendera `-w` atau `isolation: worktree` dalam config subagent. Perubahan tetap di branch terpisah di direktori terpisah, sehingga agen paralel tidak menimpa file satu sama lain.

294 

295Pelajari lebih lanjut: [Run parallel sessions with git worktrees](/id/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees)

296 

297***

298 

299## Deprecated and renamed terms

300 

301Istilah-istilah ini muncul dalam docs yang lebih lama, posting blog, dan konten komunitas. Gunakan nama saat ini saat mencari di situs ini.

302 

303| Old term | Now called | Notes |

304| --------------- | --------------------------------------------- | ------------------------------------ |

305| Headless mode | [Non-interactive mode](#non-interactive-mode) | Same `-p` flag, same behavior |

306| Custom commands | [Skills](#skill) | `.claude/commands/` files still work |

307| Slash commands | Commands | "Slash" dropped from product copy |

google-vertex-ai.md +387 −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# Claude Code di Google Vertex AI

6 

7> Pelajari tentang mengonfigurasi Claude Code melalui Google Vertex AI, termasuk pengaturan, konfigurasi IAM, dan pemecahan masalah.

8 

9export const ContactSalesCard = ({surface}) => {

10 const utm = content => `utm_source=claude_code&utm_medium=docs&utm_content=${surface}_${content}`;

11 const iconArrowRight = (size = 13) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

12 <line x1="5" y1="12" x2="19" y2="12" />

13 <polyline points="12 5 19 12 12 19" />

14 </svg>;

15 const STYLES = `

16.cc-cs {

17 --cs-slate: #141413;

18 --cs-clay: #d97757;

19 --cs-clay-deep: #c6613f;

20 --cs-gray-000: #ffffff;

21 --cs-gray-700: #3d3d3a;

22 --cs-border-default: rgba(31, 30, 29, 0.15);

23 font-family: inherit;

24}

25.dark .cc-cs {

26 --cs-slate: #f0eee6;

27 --cs-gray-000: #262624;

28 --cs-gray-700: #bfbdb4;

29 --cs-border-default: rgba(240, 238, 230, 0.14);

30}

31.cc-cs-card {

32 display: flex; align-items: center; justify-content: space-between;

33 gap: 16px; padding: 14px 16px; margin: 0;

34 background: var(--cs-gray-000); border: 0.5px solid var(--cs-border-default);

35 border-radius: 8px; flex-wrap: wrap;

36}

37.cc-cs-text { font-size: 13px; color: var(--cs-gray-700); line-height: 1.5; flex: 1; min-width: 240px; }

38.cc-cs-text strong { font-weight: 550; color: var(--cs-slate); }

39.cc-cs-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }

40.cc-cs-btn-clay {

41 display: inline-flex; align-items: center; gap: 8px;

42 background: var(--cs-clay-deep); color: #fff; border: none;

43 border-radius: 8px; padding: 8px 14px;

44 font-size: 13px; font-weight: 500;

45 transition: background-color 0.15s; white-space: nowrap;

46}

47.cc-cs-btn-clay:hover { background: var(--cs-clay); }

48.cc-cs-btn-ghost {

49 display: inline-flex; align-items: center; gap: 8px;

50 background: transparent; color: var(--cs-gray-700);

51 border: 0.5px solid var(--cs-border-default);

52 border-radius: 8px; padding: 8px 14px;

53 font-size: 13px; font-weight: 500;

54}

55.cc-cs-btn-ghost:hover { background: rgba(0, 0, 0, 0.04); }

56.dark .cc-cs-btn-ghost:hover { background: rgba(255, 255, 255, 0.04); }

57@media (max-width: 720px) {

58 .cc-cs-actions { width: 100%; }

59}

60`;

61 return <div className="cc-cs not-prose">

62 <style>{STYLES}</style>

63 <div className="cc-cs-card">

64 <div className="cc-cs-text">

65 <strong>Deploying Claude Code across your organization?</strong> Talk to sales about enterprise plans, SSO, and centralized billing.

66 </div>

67 <div className="cc-cs-actions">

68 <a href={`https://claude.com/pricing?${utm('view_plans')}#plans-business`} className="cc-cs-btn-ghost">

69 View plans

70 </a>

71 <a href={`https://claude.com/contact-sales?${utm('contact_sales')}`} className="cc-cs-btn-clay">

72 Contact sales {iconArrowRight()}

73 </a>

74 </div>

75 </div>

76 </div>;

77};

78 

79export const Experiment = ({flag, treatment, children}) => {

80 const VID_KEY = 'exp_vid';

81 const CONSENT_COUNTRIES = new Set(['AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'RE', 'GP', 'MQ', 'GF', 'YT', 'BL', 'MF', 'PM', 'WF', 'PF', 'NC', 'AW', 'CW', 'SX', 'FO', 'GL', 'AX', 'GB', 'UK', 'AI', 'BM', 'IO', 'VG', 'KY', 'FK', 'GI', 'MS', 'PN', 'SH', 'TC', 'GG', 'JE', 'IM', 'CA', 'BR', 'IN']);

82 const fnv1a = s => {

83 let h = 0x811c9dc5;

84 for (let i = 0; i < s.length; i++) {

85 h ^= s.charCodeAt(i);

86 h += (h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24);

87 }

88 return h >>> 0;

89 };

90 const bucket = (seed, vid) => fnv1a(fnv1a(seed + vid) + '') % 10000 < 5000 ? 'control' : 'treatment';

91 const [decision] = useState(() => {

92 const params = new URLSearchParams(location.search);

93 const preBucketed = document.documentElement.dataset['gb_' + flag.replace(/-/g, '_')];

94 const force = params.get('gb-force');

95 if (force) {

96 for (const p of force.split(',')) {

97 const [k, v] = p.split(':');

98 if (k === flag) return {

99 variant: v || 'treatment',

100 track: false

101 };

102 }

103 }

104 if (navigator.globalPrivacyControl) {

105 return {

106 variant: 'control',

107 track: false

108 };

109 }

110 const prefsMatch = document.cookie.match(/(?:^|; )anthropic-consent-preferences=([^;]+)/);

111 if (prefsMatch) {

112 try {

113 if (JSON.parse(decodeURIComponent(prefsMatch[1])).analytics !== true) {

114 return {

115 variant: 'control',

116 track: false

117 };

118 }

119 } catch {

120 return {

121 variant: 'control',

122 track: false

123 };

124 }

125 } else {

126 const country = params.get('country')?.toUpperCase() || (document.cookie.match(/(?:^|; )cf_geo=([A-Z]{2})/) || [])[1];

127 if (!country || CONSENT_COUNTRIES.has(country)) {

128 return {

129 variant: 'control',

130 track: false

131 };

132 }

133 }

134 let vid;

135 try {

136 const ajsMatch = document.cookie.match(/(?:^|; )ajs_anonymous_id=([^;]+)/);

137 if (ajsMatch) {

138 vid = decodeURIComponent(ajsMatch[1]).replace(/^"|"$/g, '');

139 } else {

140 vid = localStorage.getItem(VID_KEY);

141 if (!vid) {

142 vid = crypto.randomUUID();

143 }

144 document.cookie = `ajs_anonymous_id=${vid}; domain=.claude.com; path=/; Secure; SameSite=Lax; max-age=31536000`;

145 }

146 try {

147 localStorage.setItem(VID_KEY, vid);

148 } catch {}

149 } catch {

150 return {

151 variant: 'control',

152 track: false

153 };

154 }

155 const variant = preBucketed === '1' ? 'treatment' : preBucketed === '0' ? 'control' : bucket(flag, vid);

156 return {

157 variant,

158 track: true,

159 vid

160 };

161 });

162 useEffect(() => {

163 if (!decision.track) return;

164 fetch('https://api.anthropic.com/api/event_logging/v2/batch', {

165 method: 'POST',

166 headers: {

167 'Content-Type': 'application/json',

168 'x-service-name': 'claude_code_docs'

169 },

170 body: JSON.stringify({

171 events: [{

172 event_type: 'GrowthbookExperimentEvent',

173 event_data: {

174 device_id: decision.vid,

175 anonymous_id: decision.vid,

176 timestamp: new Date().toISOString(),

177 experiment_id: flag,

178 variation_id: decision.variant === 'treatment' ? 1 : 0,

179 environment: 'production'

180 }

181 }]

182 }),

183 keepalive: true

184 }).catch(() => {});

185 }, []);

186 return decision.variant === 'treatment' ? treatment : children;

187};

188 

189<Experiment flag="docs-contact-sales-cta" treatment={<ContactSalesCard surface="vertex" />} />

190 

191## Prasyarat

192 

193Sebelum mengonfigurasi Claude Code dengan Vertex AI, pastikan Anda memiliki:

194 

195* Akun Google Cloud Platform (GCP) dengan penagihan diaktifkan

196* Proyek GCP dengan Vertex AI API diaktifkan

197* Akses ke model Claude yang diinginkan (misalnya, Claude Sonnet 4.6)

198* Google Cloud SDK (`gcloud`) terinstal dan dikonfigurasi

199* Kuota dialokasikan di wilayah GCP yang diinginkan

200 

201Untuk masuk dengan kredensial Vertex AI Anda sendiri, ikuti [Masuk dengan Vertex AI](#sign-in-with-vertex-ai) di bawah. Untuk menerapkan Claude Code di seluruh tim, gunakan langkah [pengaturan manual](#set-up-manually) dan [pin versi model Anda](#5-pin-model-versions) sebelum melakukan peluncuran.

202 

203## Masuk dengan Vertex AI

204 

205Jika Anda memiliki kredensial Google Cloud dan ingin mulai menggunakan Claude Code melalui Vertex AI, wizard login akan memandu Anda. Anda menyelesaikan prasyarat sisi GCP sekali per proyek; wizard menangani sisi Claude Code.

206 

207<Note>

208 Wizard pengaturan Vertex AI memerlukan Claude Code v2.1.98 atau lebih baru. Jalankan `claude --version` untuk memeriksa.

209</Note>

210 

211<Steps>

212 <Step title="Aktifkan model Claude di proyek GCP Anda">

213 [Aktifkan Vertex AI API](#1-enable-vertex-ai-api) untuk proyek Anda, kemudian minta akses ke model Claude yang Anda inginkan di [Vertex AI Model Garden](https://console.cloud.google.com/vertex-ai/model-garden). Lihat [konfigurasi IAM](#iam-configuration) untuk izin yang akun Anda butuhkan.

214 </Step>

215 

216 <Step title="Mulai Claude Code dan pilih Vertex AI">

217 Jalankan `claude`. Pada prompt login, pilih **3rd-party platform**, kemudian **Google Vertex AI**.

218 </Step>

219 

220 <Step title="Ikuti prompt wizard">

221 Pilih cara Anda melakukan autentikasi ke Google Cloud: Application Default Credentials dari `gcloud`, file kunci akun layanan, atau kredensial yang sudah ada di lingkungan Anda. Wizard mendeteksi proyek dan wilayah Anda, memverifikasi model Claude mana yang dapat dijalankan proyek Anda, dan memungkinkan Anda untuk mempinnya. Ini menyimpan hasilnya ke blok `env` dari [file pengaturan pengguna Anda](/id/settings), jadi Anda tidak perlu mengekspor variabel lingkungan sendiri.

222 </Step>

223</Steps>

224 

225Setelah Anda masuk, jalankan `/setup-vertex` kapan saja untuk membuka kembali wizard dan mengubah kredensial, proyek, wilayah, atau pin model Anda.

226 

227## Konfigurasi wilayah

228 

229Claude Code mendukung Vertex AI [global](https://cloud.google.com/blog/products/ai-machine-learning/global-endpoint-for-claude-models-generally-available-on-vertex-ai), multi-region, dan titik akhir regional. Atur `CLOUD_ML_REGION` ke `global`, lokasi multi-region seperti `eu` atau `us`, atau wilayah spesifik seperti `us-east5`. Claude Code memilih nama host Vertex AI yang benar untuk setiap bentuk, termasuk host `aiplatform.eu.rep.googleapis.com` dan `aiplatform.us.rep.googleapis.com` untuk lokasi multi-region.

230 

231<Note>

232 Vertex AI mungkin tidak mendukung model default Claude Code di setiap jenis titik akhir. Ketersediaan model bervariasi di [wilayah spesifik](https://cloud.google.com/vertex-ai/generative-ai/docs/learn/locations#genai-partner-models), lokasi multi-region, dan [titik akhir global](https://cloud.google.com/vertex-ai/generative-ai/docs/partner-models/use-partner-models#supported_models). Anda mungkin perlu beralih ke lokasi yang didukung atau menentukan model yang didukung.

233</Note>

234 

235## Pengaturan manual

236 

237Untuk mengonfigurasi Vertex AI melalui variabel lingkungan alih-alih wizard, misalnya di CI atau peluncuran perusahaan yang ditulis skrip, ikuti langkah-langkah di bawah.

238 

239### 1. Aktifkan Vertex AI API

240 

241Aktifkan Vertex AI API di proyek GCP Anda:

242 

243```bash theme={null}

244# Atur ID proyek Anda

245gcloud config set project YOUR-PROJECT-ID

246 

247# Aktifkan Vertex AI API

248gcloud services enable aiplatform.googleapis.com

249```

250 

251### 2. Minta akses model

252 

253Minta akses ke model Claude di Vertex AI:

254 

2551. Navigasikan ke [Vertex AI Model Garden](https://console.cloud.google.com/vertex-ai/model-garden)

2562. Cari model "Claude"

2573. Minta akses ke model Claude yang diinginkan (misalnya, Claude Sonnet 4.6)

2584. Tunggu persetujuan (mungkin memakan waktu 24-48 jam)

259 

260### 3. Konfigurasi kredensial GCP

261 

262Claude Code menggunakan autentikasi Google Cloud standar.

263 

264Untuk informasi lebih lanjut, lihat [dokumentasi autentikasi Google Cloud](https://cloud.google.com/docs/authentication).

265 

266Claude Code v2.1.121 atau lebih baru mendukung [Workload Identity Federation berbasis sertifikat X.509](https://cloud.google.com/iam/docs/workload-identity-federation-with-x509-certificates) melalui rantai Application Default Credentials yang sama. Atur `GOOGLE_APPLICATION_CREDENTIALS` ke jalur file konfigurasi kredensial Anda.

267 

268<Note>

269 Saat melakukan autentikasi, Claude Code akan secara otomatis menggunakan ID proyek dari variabel lingkungan `ANTHROPIC_VERTEX_PROJECT_ID`. Untuk menimpanya, atur salah satu variabel lingkungan ini: `GCLOUD_PROJECT`, `GOOGLE_CLOUD_PROJECT`, atau `GOOGLE_APPLICATION_CREDENTIALS`.

270</Note>

271 

272### 4. Konfigurasi Claude Code

273 

274Atur variabel lingkungan berikut:

275 

276```bash theme={null}

277# Aktifkan integrasi Vertex AI

278export CLAUDE_CODE_USE_VERTEX=1

279export CLOUD_ML_REGION=global

280export ANTHROPIC_VERTEX_PROJECT_ID=YOUR-PROJECT-ID

281 

282# Opsional: Timpa URL titik akhir Vertex untuk titik akhir kustom atau gateway

283# export ANTHROPIC_VERTEX_BASE_URL=https://aiplatform.googleapis.com

284 

285# Opsional: Nonaktifkan prompt caching jika diperlukan

286export DISABLE_PROMPT_CACHING=1

287 

288# Opsional: Minta TTL cache prompt 1 jam alih-alih default 5 menit

289export ENABLE_PROMPT_CACHING_1H=1

290 

291# Ketika CLOUD_ML_REGION=global, timpa wilayah untuk model yang tidak mendukung titik akhir global

292export VERTEX_REGION_CLAUDE_HAIKU_4_5=us-east5

293export VERTEX_REGION_CLAUDE_4_6_SONNET=europe-west1

294```

295 

296Sebagian besar versi model memiliki variabel `VERTEX_REGION_CLAUDE_*` yang sesuai. Lihat [referensi variabel lingkungan](/id/env-vars) untuk daftar lengkap. Periksa [Vertex Model Garden](https://console.cloud.google.com/vertex-ai/model-garden) untuk menentukan model mana yang mendukung titik akhir global versus regional saja.

297 

298[Prompt caching](https://platform.claude.com/docs/en/build-with-claude/prompt-caching) diaktifkan secara otomatis. Untuk menonaktifkannya, atur `DISABLE_PROMPT_CACHING=1`. Untuk meminta TTL cache 1 jam alih-alih default 5 menit, atur `ENABLE_PROMPT_CACHING_1H=1`; penulisan cache dengan TTL 1 jam ditagih dengan tarif yang lebih tinggi. Untuk batas laju yang lebih tinggi, hubungi dukungan Google Cloud. Saat menggunakan Vertex AI, perintah `/login` dan `/logout` dinonaktifkan karena autentikasi ditangani melalui kredensial Google Cloud.

299 

300[Pencarian alat MCP](/id/mcp#scale-with-mcp-tool-search) dinonaktifkan secara default di Vertex AI karena titik akhir tidak menerima header beta yang diperlukan. Semua definisi alat MCP dimuat di muka sebagai gantinya. Untuk memilih, atur `ENABLE_TOOL_SEARCH=true`.

301 

302### 5. Pin versi model

303 

304<Warning>

305 Pin versi model spesifik saat menerapkan ke beberapa pengguna. Tanpa pinning, alias model seperti `sonnet` dan `opus` diselesaikan ke versi terbaru, yang mungkin belum diaktifkan di proyek Vertex AI Anda ketika Anthropic merilis pembaruan. Claude Code [kembali](#startup-model-checks) ke versi sebelumnya saat startup ketika versi terbaru tidak tersedia, tetapi pinning memungkinkan Anda mengontrol kapan pengguna Anda pindah ke model baru.

306</Warning>

307 

308Atur variabel lingkungan ini ke ID model Vertex AI spesifik.

309 

310Tanpa `ANTHROPIC_DEFAULT_OPUS_MODEL`, alias `opus` di Vertex diselesaikan ke Opus 4.6. Aturnya ke ID Opus 4.7 untuk menggunakan model terbaru:

311 

312```bash theme={null}

313export ANTHROPIC_DEFAULT_OPUS_MODEL='claude-opus-4-7'

314export ANTHROPIC_DEFAULT_SONNET_MODEL='claude-sonnet-4-6'

315export ANTHROPIC_DEFAULT_HAIKU_MODEL='claude-haiku-4-5@20251001'

316```

317 

318Untuk ID model saat ini dan warisan, lihat [Ikhtisar Model](https://platform.claude.com/docs/en/about-claude/models/overview). Lihat [Konfigurasi Model](/id/model-config#pin-models-for-third-party-deployments) untuk daftar lengkap variabel lingkungan.

319 

320Claude Code menggunakan model default ini ketika tidak ada variabel pinning yang diatur:

321 

322| Jenis model | Nilai default |

323| :---------------- | :--------------------------- |

324| Model utama | `claude-sonnet-4-5@20250929` |

325| Model kecil/cepat | `claude-haiku-4-5@20251001` |

326 

327Untuk menyesuaikan model lebih lanjut:

328 

329```bash theme={null}

330export ANTHROPIC_MODEL='claude-opus-4-7'

331export ANTHROPIC_DEFAULT_HAIKU_MODEL='claude-haiku-4-5@20251001'

332```

333 

334## Pemeriksaan model startup

335 

336Ketika Claude Code dimulai dengan Vertex AI dikonfigurasi, ia memverifikasi bahwa model yang dimaksudkan untuk digunakan dapat diakses di proyek Anda. Pemeriksaan ini memerlukan Claude Code v2.1.98 atau lebih baru.

337 

338Jika Anda telah mempinkan versi model yang lebih lama dari default Claude Code saat ini, dan proyek Anda dapat memanggil versi yang lebih baru, Claude Code akan meminta Anda untuk memperbarui pin. Menerima menulis ID model baru ke [file pengaturan pengguna Anda](/id/settings) dan memulai ulang Claude Code. Menolak diingat sampai perubahan versi default berikutnya.

339 

340Jika Anda belum mempinkan model dan default saat ini tidak tersedia di proyek Anda, Claude Code kembali ke versi sebelumnya untuk sesi saat ini dan menampilkan pemberitahuan. Fallback tidak disimpan. Aktifkan model yang lebih baru di [Model Garden](https://console.cloud.google.com/vertex-ai/model-garden) atau [pin versi](#5-pin-model-versions) untuk membuat pilihan permanen.

341 

342## Konfigurasi IAM

343 

344Tetapkan izin IAM yang diperlukan:

345 

346Peran `roles/aiplatform.user` mencakup izin yang diperlukan:

347 

348* `aiplatform.endpoints.predict` - Diperlukan untuk invokasi model dan penghitungan token

349 

350Untuk izin yang lebih ketat, buat peran kustom dengan hanya izin di atas.

351 

352Untuk detail, lihat [dokumentasi Vertex IAM](https://cloud.google.com/vertex-ai/docs/general/access-control).

353 

354<Note>

355 Buat proyek GCP khusus untuk Claude Code untuk menyederhanakan pelacakan biaya dan kontrol akses.

356</Note>

357 

358## Jendela konteks token 1M

359 

360Claude Opus 4.7, Opus 4.6, dan Sonnet 4.6 mendukung [jendela konteks token 1M](https://platform.claude.com/docs/en/build-with-claude/context-windows#1m-token-context-window) di Vertex AI. Claude Code secara otomatis mengaktifkan jendela konteks yang diperluas ketika Anda memilih varian model 1M.

361 

362[Wizard pengaturan](#sign-in-with-vertex-ai) menawarkan opsi konteks 1M ketika mempinkan model. Untuk mengaktifkannya untuk model yang dipinkan secara manual, tambahkan `[1m]` ke ID model. Lihat [Pin models for third-party deployments](/id/model-config#pin-models-for-third-party-deployments) untuk detail.

363 

364## Pemecahan masalah

365 

366Jika Anda mengalami masalah kuota:

367 

368* Periksa kuota saat ini atau minta peningkatan kuota melalui [Cloud Console](https://cloud.google.com/docs/quotas/view-manage)

369 

370Jika Anda mengalami kesalahan "model not found" 404:

371 

372* Konfirmasi model diaktifkan di [Model Garden](https://console.cloud.google.com/vertex-ai/model-garden)

373* Verifikasi model tersedia di lokasi yang Anda tentukan. Beberapa model hanya ditawarkan di lokasi `global` atau multi-region seperti `eu` dan `us`, bukan di wilayah spesifik

374* Jika menggunakan `CLOUD_ML_REGION=global`, periksa bahwa model Anda mendukung titik akhir global di [Model Garden](https://console.cloud.google.com/vertex-ai/model-garden) di bawah "Supported features". Untuk model yang tidak mendukung titik akhir global, baik:

375 * Tentukan model yang didukung melalui `ANTHROPIC_MODEL` atau `ANTHROPIC_DEFAULT_HAIKU_MODEL`, atau

376 * Atur wilayah atau lokasi multi-region menggunakan variabel lingkungan `VERTEX_REGION_<MODEL_NAME>`

377 

378Jika Anda mengalami kesalahan 429:

379 

380* Untuk titik akhir regional, pastikan model utama dan model kecil/cepat didukung di wilayah yang Anda pilih

381* Pertimbangkan untuk beralih ke `CLOUD_ML_REGION=global` untuk ketersediaan yang lebih baik

382 

383## Sumber daya tambahan

384 

385* [Dokumentasi Vertex AI](https://cloud.google.com/vertex-ai/docs)

386* [Harga Vertex AI](https://cloud.google.com/vertex-ai/pricing)

387* [Kuota dan batas Vertex AI](https://cloud.google.com/vertex-ai/docs/quotas)

headless.md +225 −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# Jalankan Claude Code secara programatis

6 

7> Gunakan Agent SDK untuk menjalankan Claude Code secara programatis dari CLI, Python, atau TypeScript.

8 

9[Agent SDK](/id/agent-sdk/overview) memberikan Anda alat yang sama, loop agen, dan manajemen konteks yang mendukung Claude Code. Tersedia sebagai CLI untuk skrip dan CI/CD, atau sebagai paket [Python](/id/agent-sdk/python) dan [TypeScript](/id/agent-sdk/typescript) untuk kontrol programatis penuh.

10 

11<Note>

12 CLI sebelumnya disebut "headless mode." Bendera `-p` dan semua opsi CLI bekerja dengan cara yang sama.

13</Note>

14 

15Untuk menjalankan Claude Code secara programatis dari CLI, berikan `-p` dengan prompt Anda dan [opsi CLI](/id/cli-reference) apa pun:

16 

17```bash theme={null}

18claude -p "Find and fix the bug in auth.py" --allowedTools "Read,Edit,Bash"

19```

20 

21Halaman ini mencakup penggunaan Agent SDK melalui CLI (`claude -p`). Untuk paket SDK Python dan TypeScript dengan output terstruktur, callback persetujuan alat, dan objek pesan asli, lihat [dokumentasi Agent SDK lengkap](/id/agent-sdk/overview).

22 

23## Penggunaan dasar

24 

25Tambahkan bendera `-p` (atau `--print`) ke perintah `claude` apa pun untuk menjalankannya secara non-interaktif. Semua [opsi CLI](/id/cli-reference) bekerja dengan `-p`, termasuk:

26 

27* `--continue` untuk [melanjutkan percakapan](#continue-conversations)

28* `--allowedTools` untuk [persetujuan otomatis alat](#auto-approve-tools)

29* `--output-format` untuk [output terstruktur](#get-structured-output)

30 

31Contoh ini menanyakan Claude tentang basis kode Anda dan mencetak respons:

32 

33```bash theme={null}

34claude -p "What does the auth module do?"

35```

36 

37### Mulai lebih cepat dengan bare mode

38 

39Tambahkan `--bare` untuk mengurangi waktu startup dengan melewati penemuan otomatis hooks, skills, plugins, server MCP, auto memory, dan CLAUDE.md. Tanpanya, `claude -p` memuat [konteks](/id/how-claude-code-works#the-context-window) yang sama dengan sesi interaktif, termasuk apa pun yang dikonfigurasi di direktori kerja atau `~/.claude`.

40 

41Bare mode berguna untuk CI dan skrip di mana Anda memerlukan hasil yang sama di setiap mesin. Hook di `~/.claude` rekan kerja atau server MCP di `.mcp.json` proyek tidak akan berjalan, karena bare mode tidak pernah membacanya. Hanya bendera yang Anda berikan secara eksplisit yang berlaku.

42 

43Contoh ini menjalankan tugas ringkasan sekali pakai dalam bare mode dan pra-menyetujui alat Read sehingga panggilan selesai tanpa prompt izin:

44 

45```bash theme={null}

46claude --bare -p "Summarize this file" --allowedTools "Read"

47```

48 

49Dalam bare mode Claude memiliki akses ke alat Bash, pembacaan file, dan pengeditan file. Berikan konteks apa pun yang Anda butuhkan dengan bendera:

50 

51| Untuk memuat | Gunakan |

52| ------------------------ | ------------------------------------------------------- |

53| Penambahan prompt sistem | `--append-system-prompt`, `--append-system-prompt-file` |

54| Pengaturan | `--settings <file-or-json>` |

55| Server MCP | `--mcp-config <file-or-json>` |

56| Agen kustom | `--agents <json>` |

57| Direktori plugin | `--plugin-dir <path>` |

58 

59Bare mode melewati pembacaan OAuth dan keychain. Autentikasi Anthropic harus berasal dari `ANTHROPIC_API_KEY` atau `apiKeyHelper` dalam JSON yang diteruskan ke `--settings`. Bedrock, Vertex, dan Foundry menggunakan kredensial penyedia biasa mereka.

60 

61<Note>

62 `--bare` adalah mode yang direkomendasikan untuk panggilan skrip dan SDK, dan akan menjadi default untuk `-p` di rilis mendatang.

63</Note>

64 

65## Contoh

66 

67Contoh-contoh ini menyoroti pola CLI umum. Untuk CI dan panggilan skrip lainnya, tambahkan [`--bare`](#start-faster-with-bare-mode) sehingga mereka tidak mengambil apa pun yang kebetulan dikonfigurasi secara lokal.

68 

69### Dapatkan output terstruktur

70 

71Gunakan `--output-format` untuk mengontrol bagaimana respons dikembalikan:

72 

73* `text` (default): output teks biasa

74* `json`: JSON terstruktur dengan hasil, ID sesi, dan metadata

75* `stream-json`: JSON yang dibatasi baris baru untuk streaming real-time

76 

77Contoh ini mengembalikan ringkasan proyek sebagai JSON dengan metadata sesi, dengan hasil teks di bidang `result`:

78 

79```bash theme={null}

80claude -p "Summarize this project" --output-format json

81```

82 

83Untuk mendapatkan output yang sesuai dengan skema tertentu, gunakan `--output-format json` dengan `--json-schema` dan definisi [JSON Schema](https://json-schema.org/). Respons mencakup metadata tentang permintaan (ID sesi, penggunaan, dll.) dengan output terstruktur di bidang `structured_output`.

84 

85Contoh ini mengekstrak nama fungsi dan mengembalikannya sebagai array string:

86 

87```bash theme={null}

88claude -p "Extract the main function names from auth.py" \

89 --output-format json \

90 --json-schema '{"type":"object","properties":{"functions":{"type":"array","items":{"type":"string"}}},"required":["functions"]}'

91```

92 

93<Tip>

94 Gunakan alat seperti [jq](https://jqlang.github.io/jq/) untuk mengurai respons dan mengekstrak bidang tertentu:

95 

96 ```bash theme={null}

97 # Extract the text result

98 claude -p "Summarize this project" --output-format json | jq -r '.result'

99 

100 # Extract structured output

101 claude -p "Extract function names from auth.py" \

102 --output-format json \

103 --json-schema '{"type":"object","properties":{"functions":{"type":"array","items":{"type":"string"}}},"required":["functions"]}' \

104 | jq '.structured_output'

105 ```

106</Tip>

107 

108### Streaming respons

109 

110Gunakan `--output-format stream-json` dengan `--verbose` dan `--include-partial-messages` untuk menerima token saat dihasilkan. Setiap baris adalah objek JSON yang mewakili acara:

111 

112```bash theme={null}

113claude -p "Explain recursion" --output-format stream-json --verbose --include-partial-messages

114```

115 

116Contoh berikut menggunakan [jq](https://jqlang.github.io/jq/) untuk memfilter delta teks dan menampilkan hanya teks streaming. Bendera `-r` menampilkan string mentah (tanpa tanda kutip) dan `-j` bergabung tanpa baris baru sehingga token streaming terus menerus:

117 

118```bash theme={null}

119claude -p "Write a poem" --output-format stream-json --verbose --include-partial-messages | \

120 jq -rj 'select(.type == "stream_event" and .event.delta.type? == "text_delta") | .event.delta.text'

121```

122 

123Ketika permintaan API gagal dengan kesalahan yang dapat dicoba ulang, Claude Code memancarkan acara `system/api_retry` sebelum mencoba ulang. Anda dapat menggunakan ini untuk menampilkan kemajuan percobaan ulang atau menerapkan logika backoff kustom.

124 

125| Bidang | Tipe | Deskripsi |

126| ---------------- | ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

127| `type` | `"system"` | tipe pesan |

128| `subtype` | `"api_retry"` | mengidentifikasi ini sebagai acara percobaan ulang |

129| `attempt` | integer | nomor percobaan saat ini, dimulai dari 1 |

130| `max_retries` | integer | total percobaan ulang yang diizinkan |

131| `retry_delay_ms` | integer | milidetik hingga percobaan berikutnya |

132| `error_status` | integer atau null | kode status HTTP, atau `null` untuk kesalahan koneksi tanpa respons HTTP |

133| `error` | string | kategori kesalahan: `authentication_failed`, `oauth_org_not_allowed`, `billing_error`, `rate_limit`, `invalid_request`, `server_error`, `max_output_tokens`, atau `unknown` |

134| `uuid` | string | pengidentifikasi acara unik |

135| `session_id` | string | sesi yang dimiliki acara |

136 

137Acara `system/init` melaporkan metadata sesi termasuk model, alat, server MCP, dan plugin yang dimuat. Ini adalah acara pertama dalam aliran kecuali [`CLAUDE_CODE_SYNC_PLUGIN_INSTALL`](/id/env-vars) diatur, dalam hal ini acara `plugin_install` mendahuluinya. Gunakan bidang plugin untuk gagal CI ketika plugin tidak dimuat:

138 

139| Bidang | Tipe | Deskripsi |

140| --------------- | ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

141| `plugins` | array | plugin yang berhasil dimuat, masing-masing dengan `name` dan `path` |

142| `plugin_errors` | array | kesalahan waktu muat plugin seperti versi dependensi yang tidak terpenuhi, masing-masing dengan `plugin`, `type`, dan `message`. Plugin yang terpengaruh diturunkan dan tidak ada di `plugins`. Kunci dihilangkan ketika tidak ada kesalahan |

143 

144Ketika [`CLAUDE_CODE_SYNC_PLUGIN_INSTALL`](/id/env-vars) diatur, Claude Code memancarkan acara `system/plugin_install` saat plugin marketplace dipasang sebelum giliran pertama. Gunakan ini untuk menampilkan kemajuan pemasangan di UI Anda sendiri.

145 

146| Bidang | Tipe | Deskripsi |

147| ------------ | ---------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |

148| `type` | `"system"` | tipe pesan |

149| `subtype` | `"plugin_install"` | mengidentifikasi ini sebagai acara pemasangan plugin |

150| `status` | `"started"`, `"installed"`, `"failed"`, atau `"completed"` | `started` dan `completed` membatasi pemasangan keseluruhan; `installed` dan `failed` melaporkan marketplace individual |

151| `name` | string, opsional | nama marketplace, hadir pada `installed` dan `failed` |

152| `error` | string, opsional | pesan kegagalan, hadir pada `failed` |

153| `uuid` | string | pengidentifikasi acara unik |

154| `session_id` | string | sesi yang dimiliki acara |

155 

156Untuk streaming programatis dengan callback dan objek pesan, lihat [Stream responses in real-time](/id/agent-sdk/streaming-output) dalam dokumentasi Agent SDK.

157 

158### Persetujuan otomatis alat

159 

160Gunakan `--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:

161 

162```bash theme={null}

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

164 --allowedTools "Bash,Read,Edit"

165```

166 

167Untuk menetapkan baseline untuk seluruh sesi alih-alih mencantumkan alat individual, berikan [mode izin](/id/permission-modes). `dontAsk` menolak apa pun yang tidak ada dalam aturan `permissions.allow` Anda atau [set perintah read-only](/id/permissions#read-only-commands), yang berguna untuk CI runs yang terkunci. `acceptEdits` memungkinkan Claude menulis file tanpa meminta dan juga persetujuan otomatis perintah filesystem umum seperti `mkdir`, `touch`, `mv`, dan `cp`. Perintah shell lainnya dan permintaan jaringan masih memerlukan entri `--allowedTools` atau aturan `permissions.allow`, jika tidak run akan berhenti ketika salah satu dicoba:

168 

169```bash theme={null}

170claude -p "Apply the lint fixes" --permission-mode acceptEdits

171```

172 

173### Buat komit

174 

175Contoh ini meninjau perubahan yang dipentaskan dan membuat komit dengan pesan yang sesuai:

176 

177```bash theme={null}

178claude -p "Look at my staged changes and create an appropriate commit" \

179 --allowedTools "Bash(git diff *),Bash(git log *),Bash(git status *),Bash(git commit *)"

180```

181 

182Bendera `--allowedTools` menggunakan [sintaks aturan izin](/id/settings#permission-rule-syntax). Spasi di akhir ` *` memungkinkan pencocokan awalan, jadi `Bash(git diff *)` memungkinkan perintah apa pun yang dimulai dengan `git diff`. Spasi sebelum `*` penting: tanpanya, `Bash(git diff*)` juga akan cocok dengan `git diff-index`.

183 

184<Note>

185 [skills](/id/skills) yang dipanggil pengguna seperti `/commit` dan [perintah bawaan](/id/commands) hanya tersedia dalam mode interaktif. Dalam mode `-p`, jelaskan tugas yang ingin Anda capai.

186</Note>

187 

188### Sesuaikan prompt sistem

189 

190Gunakan `--append-system-prompt` untuk menambahkan instruksi sambil mempertahankan perilaku default Claude Code. Contoh ini menyalurkan diff PR ke Claude dan menginstruksikannya untuk meninjau kerentanan keamanan:

191 

192```bash theme={null}

193gh pr diff "$1" | claude -p \

194 --append-system-prompt "You are a security engineer. Review for vulnerabilities." \

195 --output-format json

196```

197 

198Lihat [system prompt flags](/id/cli-reference#system-prompt-flags) untuk opsi lebih lanjut termasuk `--system-prompt` untuk sepenuhnya mengganti prompt default.

199 

200### Lanjutkan percakapan

201 

202Gunakan `--continue` untuk melanjutkan percakapan terbaru, atau `--resume` dengan ID sesi untuk melanjutkan percakapan tertentu. Contoh ini menjalankan tinjauan, kemudian mengirim prompt tindak lanjut:

203 

204```bash theme={null}

205# First request

206claude -p "Review this codebase for performance issues"

207 

208# Continue the most recent conversation

209claude -p "Now focus on the database queries" --continue

210claude -p "Generate a summary of all issues found" --continue

211```

212 

213Jika Anda menjalankan beberapa percakapan, tangkap ID sesi untuk melanjutkan percakapan tertentu:

214 

215```bash theme={null}

216session_id=$(claude -p "Start a review" --output-format json | jq -r '.session_id')

217claude -p "Continue that review" --resume "$session_id"

218```

219 

220## Langkah berikutnya

221 

222* [Agent SDK quickstart](/id/agent-sdk/quickstart): bangun agen pertama Anda dengan Python atau TypeScript

223* [CLI reference](/id/cli-reference): semua bendera dan opsi CLI

224* [GitHub Actions](/id/github-actions): gunakan Agent SDK dalam alur kerja GitHub

225* [GitLab CI/CD](/id/gitlab-ci-cd): gunakan Agent SDK dalam pipeline GitLab

hooks.md +2653 −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# Referensi hooks

6 

7> Referensi untuk event hook Claude Code, skema konfigurasi, format JSON input/output, kode keluar, hooks asinkron, hooks HTTP, prompt hooks, dan MCP tool hooks.

8 

9<Tip>

10 Untuk panduan quickstart dengan contoh, lihat [Otomatisasi alur kerja dengan hooks](/id/hooks-guide).

11</Tip>

12 

13Hooks adalah perintah shell yang ditentukan pengguna, endpoint HTTP, atau prompt LLM yang dijalankan secara otomatis pada titik-titik tertentu dalam siklus hidup Claude Code. Gunakan referensi ini untuk mencari skema event, opsi konfigurasi, format JSON input/output, dan fitur lanjutan seperti async hooks, HTTP hooks, dan MCP tool hooks. Jika Anda menyiapkan hooks untuk pertama kalinya, mulai dengan [panduan](/id/hooks-guide) sebagai gantinya.

14 

15## Siklus hidup hook

16 

17Hooks dijalankan pada titik-titik tertentu selama sesi Claude Code. Ketika event dijalankan dan matcher cocok, Claude Code meneruskan konteks JSON tentang event ke handler hook Anda. Untuk command hooks, input tiba di stdin. Untuk HTTP hooks, input tiba sebagai badan permintaan POST. Handler Anda kemudian dapat memeriksa input, mengambil tindakan, dan secara opsional mengembalikan keputusan. Events jatuh ke dalam tiga cadence: sekali per sesi (`SessionStart`, `SessionEnd`), sekali per turn (`UserPromptSubmit`, `Stop`, `StopFailure`), dan pada setiap pemanggilan tool di dalam loop agentic (`PreToolUse`, `PostToolUse`):

18 

19<div style={{maxWidth: "500px", margin: "0 auto"}}>

20 <Frame>

21 <img src="https://mintcdn.com/claude-code/ZIW26Z9pnpsXLhbS/images/hooks-lifecycle.svg?fit=max&auto=format&n=ZIW26Z9pnpsXLhbS&q=85&s=ee23691324deb6501df09bfdae560b64" alt="Diagram siklus hidup hook menunjukkan Setup opsional yang mengalir ke SessionStart, kemudian loop per-turn yang berisi UserPromptSubmit, UserPromptExpansion untuk slash commands, loop agentic bersarang (PreToolUse, PermissionRequest, PostToolUse, PostToolUseFailure, PostToolBatch, SubagentStart/Stop, TaskCreated, TaskCompleted), dan Stop atau StopFailure, diikuti TeammateIdle, PreCompact, PostCompact, dan SessionEnd, dengan Elicitation dan ElicitationResult bersarang di dalam eksekusi MCP tool, PermissionDenied sebagai cabang samping dari PermissionRequest untuk penolakan mode otomatis, dan WorktreeCreate, WorktreeRemove, Notification, ConfigChange, InstructionsLoaded, CwdChanged, dan FileChanged sebagai event asinkron mandiri" width="520" height="1228" data-path="images/hooks-lifecycle.svg" />

22 </Frame>

23</div>

24 

25Tabel di bawah merangkum kapan setiap event dijalankan. Bagian [Hook events](#hook-events) mendokumentasikan skema input lengkap dan opsi kontrol keputusan untuk masing-masing.

26 

27| Event | When it fires |

28| :-------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------- |

29| `SessionStart` | When a session begins or resumes |

30| `Setup` | When you start Claude Code with `--init-only`, or with `--init` or `--maintenance` in `-p` mode. For one-time preparation in CI or scripts |

31| `UserPromptSubmit` | When you submit a prompt, before Claude processes it |

32| `UserPromptExpansion` | When a user-typed command expands into a prompt, before it reaches Claude. Can block the expansion |

33| `PreToolUse` | Before a tool call executes. Can block it |

34| `PermissionRequest` | When a permission dialog appears |

35| `PermissionDenied` | When a tool call is denied by the auto mode classifier. Return `{retry: true}` to tell the model it may retry the denied tool call |

36| `PostToolUse` | After a tool call succeeds |

37| `PostToolUseFailure` | After a tool call fails |

38| `PostToolBatch` | After a full batch of parallel tool calls resolves, before the next model call |

39| `Notification` | When Claude Code sends a notification |

40| `SubagentStart` | When a subagent is spawned |

41| `SubagentStop` | When a subagent finishes |

42| `TaskCreated` | When a task is being created via `TaskCreate` |

43| `TaskCompleted` | When a task is being marked as completed |

44| `Stop` | When Claude finishes responding |

45| `StopFailure` | When the turn ends due to an API error. Output and exit code are ignored |

46| `TeammateIdle` | When an [agent team](/en/agent-teams) teammate is about to go idle |

47| `InstructionsLoaded` | When a CLAUDE.md or `.claude/rules/*.md` file is loaded into context. Fires at session start and when files are lazily loaded during a session |

48| `ConfigChange` | When a configuration file changes during a session |

49| `CwdChanged` | When the working directory changes, for example when Claude executes a `cd` command. Useful for reactive environment management with tools like direnv |

50| `FileChanged` | When a watched file changes on disk. The `matcher` field specifies which filenames to watch |

51| `WorktreeCreate` | When a worktree is being created via `--worktree` or `isolation: "worktree"`. Replaces default git behavior |

52| `WorktreeRemove` | When a worktree is being removed, either at session exit or when a subagent finishes |

53| `PreCompact` | Before context compaction |

54| `PostCompact` | After context compaction completes |

55| `Elicitation` | When an MCP server requests user input during a tool call |

56| `ElicitationResult` | After a user responds to an MCP elicitation, before the response is sent back to the server |

57| `SessionEnd` | When a session terminates |

58 

59### Bagaimana hook diselesaikan

60 

61Untuk melihat bagaimana potongan-potongan ini cocok bersama, pertimbangkan hook `PreToolUse` ini yang memblokir perintah shell yang merusak. `matcher` mempersempit ke pemanggilan tool Bash dan kondisi `if` mempersempit lebih lanjut ke perintah Bash yang cocok dengan `rm *`, jadi `block-rm.sh` hanya spawn ketika kedua filter cocok:

62 

63```json theme={null}

64{

65 "hooks": {

66 "PreToolUse": [

67 {

68 "matcher": "Bash",

69 "hooks": [

70 {

71 "type": "command",

72 "if": "Bash(rm *)",

73 "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/block-rm.sh"

74 }

75 ]

76 }

77 ]

78 }

79}

80```

81 

82Skrip membaca input JSON dari stdin, mengekstrak perintah, dan mengembalikan `permissionDecision` dari `"deny"` jika berisi `rm -rf`:

83 

84```bash theme={null}

85#!/bin/bash

86# .claude/hooks/block-rm.sh

87COMMAND=$(jq -r '.tool_input.command')

88 

89if echo "$COMMAND" | grep -q 'rm -rf'; then

90 jq -n '{

91 hookSpecificOutput: {

92 hookEventName: "PreToolUse",

93 permissionDecision: "deny",

94 permissionDecisionReason: "Destructive command blocked by hook"

95 }

96 }'

97else

98 exit 0 # allow the command

99fi

100```

101 

102Sekarang anggaplah Claude Code memutuskan untuk menjalankan `Bash "rm -rf /tmp/build"`. Inilah yang terjadi:

103 

104<Frame>

105 <img src="https://mintcdn.com/claude-code/-tYw1BD_DEqfyyOZ/images/hook-resolution.svg?fit=max&auto=format&n=-tYw1BD_DEqfyyOZ&q=85&s=c73ebc1eeda2037570427d7af1e0a891" alt="Alur resolusi hook: event PreToolUse dijalankan, matcher memeriksa kecocokan Bash, kondisi if memeriksa kecocokan Bash(rm *), handler hook dijalankan, hasil dikembalikan ke Claude Code" width="930" height="290" data-path="images/hook-resolution.svg" />

106</Frame>

107 

108<Steps>

109 <Step title="Event dijalankan">

110 Event `PreToolUse` dijalankan. Claude Code mengirimkan input tool sebagai JSON di stdin ke hook:

111 

112 ```json theme={null}

113 { "tool_name": "Bash", "tool_input": { "command": "rm -rf /tmp/build" }, ... }

114 ```

115 </Step>

116 

117 <Step title="Matcher memeriksa">

118 Matcher `"Bash"` cocok dengan nama tool, jadi grup hook ini diaktifkan. Jika Anda menghilangkan matcher atau menggunakan `"*"`, grup diaktifkan pada setiap kemunculan event.

119 </Step>

120 

121 <Step title="Kondisi if memeriksa">

122 Kondisi `if` `"Bash(rm *)"` cocok karena `rm -rf /tmp/build` adalah subperintah yang cocok dengan `rm *`, jadi handler ini spawn. Jika perintah telah `npm test`, pemeriksaan `if` akan gagal dan `block-rm.sh` tidak akan pernah dijalankan, menghindari overhead spawn proses. Bidang `if` bersifat opsional; tanpanya, setiap handler dalam grup yang cocok dijalankan.

123 </Step>

124 

125 <Step title="Handler hook dijalankan">

126 Skrip memeriksa perintah lengkap dan menemukan `rm -rf`, jadi itu mencetak keputusan ke stdout:

127 

128 ```json theme={null}

129 {

130 "hookSpecificOutput": {

131 "hookEventName": "PreToolUse",

132 "permissionDecision": "deny",

133 "permissionDecisionReason": "Destructive command blocked by hook"

134 }

135 }

136 ```

137 

138 Jika perintah telah menjadi varian `rm` yang lebih aman seperti `rm file.txt`, skrip akan mencapai `exit 0` sebagai gantinya, yang memberitahu Claude Code untuk mengizinkan pemanggilan tool tanpa tindakan lebih lanjut.

139 </Step>

140 

141 <Step title="Claude Code bertindak atas hasil">

142 Claude Code membaca keputusan JSON, memblokir pemanggilan tool, dan menunjukkan alasannya kepada Claude.

143 </Step>

144</Steps>

145 

146Bagian [Configuration](#configuration) di bawah mendokumentasikan skema lengkap, dan setiap bagian [hook event](#hook-events) mendokumentasikan input apa yang diterima perintah Anda dan output apa yang dapat dikembalikan.

147 

148## Konfigurasi

149 

150Hooks didefinisikan dalam file pengaturan JSON. Konfigurasi memiliki tiga tingkat nesting:

151 

1521. Pilih [hook event](#hook-events) untuk merespons, seperti `PreToolUse` atau `Stop`

1532. Tambahkan [matcher group](#matcher-patterns) untuk memfilter kapan dijalankan, seperti "hanya untuk tool Bash"

1543. Tentukan satu atau lebih [hook handlers](#hook-handler-fields) untuk dijalankan saat cocok

155 

156Lihat [Bagaimana hook diselesaikan](#how-a-hook-resolves) di atas untuk panduan lengkap dengan contoh beranotasi.

157 

158<Note>

159 Halaman ini menggunakan istilah spesifik untuk setiap tingkat: **hook event** untuk titik siklus hidup, **matcher group** untuk filter, dan **hook handler** untuk perintah shell, endpoint HTTP, tool MCP, prompt, atau agent yang dijalankan. "Hook" sendiri merujuk pada fitur umum.

160</Note>

161 

162### Lokasi hook

163 

164Tempat Anda mendefinisikan hook menentukan cakupannya:

165 

166| Lokasi | Cakupan | Dapat Dibagikan |

167| :----------------------------------------------------------- | :----------------------- | :------------------------------------ |

168| `~/.claude/settings.json` | Semua proyek Anda | Tidak, lokal ke mesin Anda |

169| `.claude/settings.json` | Proyek tunggal | Ya, dapat dikomit ke repo |

170| `.claude/settings.local.json` | Proyek tunggal | Tidak, gitignored |

171| Pengaturan kebijakan terkelola | Seluruh organisasi | Ya, dikendalikan admin |

172| [Plugin](/id/plugins) `hooks/hooks.json` | Ketika plugin diaktifkan | Ya, dibundel dengan plugin |

173| [Skill](/id/skills) atau [agent](/id/sub-agents) frontmatter | Saat komponen aktif | Ya, didefinisikan dalam file komponen |

174 

175Untuk detail tentang resolusi file pengaturan, lihat [settings](/id/settings). Administrator enterprise dapat menggunakan `allowManagedHooksOnly` untuk memblokir hooks pengguna, proyek, dan plugin. Hooks dari plugins yang dipaksa-aktifkan dalam pengaturan terkelola `enabledPlugins` dikecualikan, jadi administrator dapat mendistribusikan hooks yang telah diverifikasi melalui marketplace organisasi. Lihat [Hook configuration](/id/settings#hook-configuration).

176 

177### Pola matcher

178 

179Bidang `matcher` memfilter kapan hooks dijalankan. Bagaimana matcher dievaluasi tergantung pada karakter yang dikandungnya:

180 

181| Nilai matcher | Dievaluasi sebagai | Contoh |

182| :-------------------------------- | :--------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------- |

183| `"*"`, `""`, atau dihilangkan | Cocokkan semua | dijalankan pada setiap kemunculan event |

184| Hanya huruf, digit, `_`, dan `\|` | String yang tepat, atau daftar string yang tepat dipisahkan `\|` | `Bash` cocok hanya dengan tool Bash; `Edit\|Write` cocok dengan salah satu tool dengan tepat |

185| Berisi karakter lain apa pun | Ekspresi reguler JavaScript | `^Notebook` cocok dengan tool apa pun yang dimulai dengan Notebook; `mcp__memory__.*` cocok dengan setiap tool dari server `memory` |

186 

187Event `FileChanged` tidak mengikuti aturan ini saat membangun daftar watch-nya. Lihat [FileChanged](#filechanged).

188 

189Setiap tipe event cocok pada bidang yang berbeda:

190 

191| Event | Apa yang difilter matcher | Contoh nilai matcher |

192| :------------------------------------------------------------------------------------------------------------------------------ | :------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------- |

193| `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, `PermissionDenied` | nama tool | `Bash`, `Edit\|Write`, `mcp__.*` |

194| `SessionStart` | bagaimana sesi dimulai | `startup`, `resume`, `clear`, `compact` |

195| `Setup` | flag CLI mana yang memicu setup | `init`, `maintenance` |

196| `SessionEnd` | mengapa sesi berakhir | `clear`, `resume`, `logout`, `prompt_input_exit`, `bypass_permissions_disabled`, `other` |

197| `Notification` | tipe notifikasi | `permission_prompt`, `idle_prompt`, `auth_success`, `elicitation_dialog`, `elicitation_complete`, `elicitation_response` |

198| `SubagentStart` | tipe agent | `general-purpose`, `Explore`, `Plan`, atau nama agent kustom |

199| `PreCompact`, `PostCompact` | apa yang memicu compaction | `manual`, `auto` |

200| `SubagentStop` | tipe agent | nilai yang sama seperti `SubagentStart` |

201| `ConfigChange` | sumber konfigurasi | `user_settings`, `project_settings`, `local_settings`, `policy_settings`, `skills` |

202| `CwdChanged` | tidak ada dukungan matcher | selalu dijalankan pada setiap perubahan direktori |

203| `FileChanged` | nama file literal untuk ditonton (lihat [FileChanged](#filechanged)) | `.envrc\|.env` |

204| `StopFailure` | tipe kesalahan | `rate_limit`, `authentication_failed`, `oauth_org_not_allowed`, `billing_error`, `invalid_request`, `server_error`, `max_output_tokens`, `unknown` |

205| `InstructionsLoaded` | alasan load | `session_start`, `nested_traversal`, `path_glob_match`, `include`, `compact` |

206| `UserPromptExpansion` | nama command | nama skill atau command Anda |

207| `Elicitation` | nama server MCP | nama server MCP yang dikonfigurasi Anda |

208| `ElicitationResult` | nama server MCP | nilai yang sama seperti `Elicitation` |

209| `UserPromptSubmit`, `PostToolBatch`, `Stop`, `TeammateIdle`, `TaskCreated`, `TaskCompleted`, `WorktreeCreate`, `WorktreeRemove` | tidak ada dukungan matcher | selalu dijalankan pada setiap kemunculan |

210 

211Matcher dijalankan terhadap bidang dari [JSON input](#hook-input-and-output) yang Claude Code kirimkan ke hook Anda di stdin. Untuk tool events, bidang itu adalah `tool_name`. Setiap bagian [hook event](#hook-events) mencantumkan set lengkap nilai matcher dan skema input untuk event itu.

212 

213Contoh ini menjalankan skrip linting hanya ketika Claude menulis atau mengedit file:

214 

215```json theme={null}

216{

217 "hooks": {

218 "PostToolUse": [

219 {

220 "matcher": "Edit|Write",

221 "hooks": [

222 {

223 "type": "command",

224 "command": "/path/to/lint-check.sh"

225 }

226 ]

227 }

228 ]

229 }

230}

231```

232 

233`UserPromptSubmit`, `PostToolBatch`, `Stop`, `TeammateIdle`, `TaskCreated`, `TaskCompleted`, `WorktreeCreate`, `WorktreeRemove`, dan `CwdChanged` tidak mendukung matchers dan selalu dijalankan pada setiap kemunculan. Jika Anda menambahkan bidang `matcher` ke event ini, itu akan diabaikan secara diam-diam.

234 

235Untuk tool events, Anda dapat memfilter lebih sempit dengan menetapkan bidang [`if`](#common-fields) pada handler hook individual. `if` menggunakan [sintaks aturan izin](/id/permissions) untuk mencocokkan terhadap nama tool dan argumen bersama-sama, jadi `"Bash(git *)"` dijalankan ketika subperintah apa pun dari input Bash cocok dengan `git *` dan `"Edit(*.ts)"` dijalankan hanya untuk file TypeScript.

236 

237#### Cocokkan MCP tools

238 

239Tool server [MCP](/id/mcp) muncul sebagai tool reguler dalam tool events (`PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, `PermissionDenied`), jadi Anda dapat mencocokkannya dengan cara yang sama seperti Anda mencocokkan nama tool lainnya.

240 

241MCP tools mengikuti pola penamaan `mcp__<server>__<tool>`, misalnya:

242 

243* `mcp__memory__create_entities`: tool create entities dari Memory server

244* `mcp__filesystem__read_file`: tool read file dari Filesystem server

245* `mcp__github__search_repositories`: tool search dari GitHub server

246 

247Untuk mencocokkan setiap tool dari server, tambahkan `.*` ke awalan server. `.*` diperlukan: matcher seperti `mcp__memory` hanya berisi huruf dan underscore, jadi dibandingkan sebagai string yang tepat dan tidak cocok dengan tool apa pun.

248 

249* `mcp__memory__.*` cocok dengan semua tools dari server `memory`

250* `mcp__.*__write.*` cocok dengan tool apa pun yang namanya dimulai dengan `write` dari server apa pun

251 

252Contoh ini mencatat semua operasi memory server dan memvalidasi operasi write dari server MCP apa pun:

253 

254```json theme={null}

255{

256 "hooks": {

257 "PreToolUse": [

258 {

259 "matcher": "mcp__memory__.*",

260 "hooks": [

261 {

262 "type": "command",

263 "command": "echo 'Memory operation initiated' >> ~/mcp-operations.log"

264 }

265 ]

266 },

267 {

268 "matcher": "mcp__.*__write.*",

269 "hooks": [

270 {

271 "type": "command",

272 "command": "/home/user/scripts/validate-mcp-write.py"

273 }

274 ]

275 }

276 ]

277 }

278}

279```

280 

281### Bidang hook handler

282 

283Setiap objek dalam array `hooks` inner adalah hook handler: perintah shell, endpoint HTTP, tool MCP, prompt LLM, atau agent yang dijalankan saat matcher cocok. Ada lima tipe:

284 

285* **[Command hooks](#command-hook-fields)** (`type: "command"`): jalankan perintah shell. Skrip Anda menerima [JSON input](#hook-input-and-output) event di stdin dan mengkomunikasikan hasil kembali melalui kode keluar dan stdout.

286* **[HTTP hooks](#http-hook-fields)** (`type: "http"`): kirimkan JSON input event sebagai permintaan HTTP POST ke URL. Endpoint mengkomunikasikan hasil kembali melalui badan respons menggunakan [format JSON output](#json-output) yang sama seperti command hooks.

287* **[MCP tool hooks](#mcp-tool-hook-fields)** (`type: "mcp_tool"`): panggil tool pada [MCP server](/id/mcp) yang sudah terhubung. Output teks tool diperlakukan seperti command-hook stdout.

288* **[Prompt hooks](#prompt-and-agent-hook-fields)** (`type: "prompt"`): kirimkan prompt ke model Claude untuk evaluasi single-turn. Model mengembalikan keputusan yes/no sebagai JSON. Lihat [Prompt-based hooks](#prompt-based-hooks).

289* **[Agent hooks](#prompt-and-agent-hook-fields)** (`type: "agent"`): spawn subagent yang dapat menggunakan tools seperti Read, Grep, dan Glob untuk memverifikasi kondisi sebelum mengembalikan keputusan. Agent hooks adalah eksperimental dan mungkin berubah. Lihat [Agent-based hooks](#agent-based-hooks).

290 

291#### Bidang umum

292 

293Bidang-bidang ini berlaku untuk semua tipe hook:

294 

295| Bidang | Diperlukan | Deskripsi |

296| :-------------- | :--------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

297| `type` | ya | `"command"`, `"http"`, `"mcp_tool"`, `"prompt"`, atau `"agent"` |

298| `if` | tidak | Sintaks aturan izin untuk memfilter kapan hook ini dijalankan, seperti `"Bash(git *)"` atau `"Edit(*.ts)"`. Hook hanya spawn jika pemanggilan tool cocok dengan pola, atau jika perintah Bash terlalu kompleks untuk diurai. Hanya dievaluasi pada tool events: `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, dan `PermissionDenied`. Pada event lain, hook dengan `if` yang ditetapkan tidak akan pernah dijalankan. Menggunakan sintaks yang sama seperti [aturan izin](/id/permissions) |

299| `timeout` | tidak | Detik sebelum membatalkan. Default: 600 untuk command, 30 untuk prompt, 60 untuk agent |

300| `statusMessage` | tidak | Pesan spinner kustom ditampilkan saat hook dijalankan |

301| `once` | tidak | Jika `true`, dijalankan hanya sekali per sesi kemudian dihapus. Hanya dihormati untuk hooks yang dideklarasikan dalam [skill frontmatter](#hooks-in-skills-and-agents); diabaikan dalam file pengaturan dan agent frontmatter |

302 

303Bidang `if` menyimpan tepat satu aturan izin. Tidak ada sintaks `&&`, `||`, atau list untuk menggabungkan aturan; untuk menerapkan beberapa kondisi, tentukan handler hook terpisah untuk masing-masing. Untuk Bash, aturan dicocokkan terhadap setiap subperintah dari input tool setelah penugasan `VAR=value` terkemuka dihapus, jadi `if: "Bash(git push *)"` cocok dengan `FOO=bar git push` dan `npm test && git push`. Hook dijalankan jika ada subperintah yang cocok, dan selalu dijalankan ketika perintah terlalu kompleks untuk diurai.

304 

305#### Bidang command hook

306 

307Selain [bidang umum](#common-fields), command hooks menerima bidang-bidang ini:

308 

309| Bidang | Diperlukan | Deskripsi |

310| :------------ | :--------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

311| `command` | ya | Perintah shell untuk dijalankan |

312| `async` | tidak | Jika `true`, dijalankan di latar belakang tanpa memblokir. Lihat [Run hooks in the background](#run-hooks-in-the-background) |

313| `asyncRewake` | tidak | Jika `true`, dijalankan di latar belakang dan membangunkan Claude pada kode keluar 2. Menyiratkan `async`. stderr hook, atau stdout jika stderr kosong, ditampilkan ke Claude sebagai pengingat sistem sehingga dapat bereaksi terhadap kegagalan latar belakang yang berjalan lama |

314| `shell` | tidak | Shell untuk digunakan untuk hook ini. Menerima `"bash"` (default) atau `"powershell"`. Menetapkan `"powershell"` menjalankan perintah melalui PowerShell di Windows. Tidak memerlukan `CLAUDE_CODE_USE_POWERSHELL_TOOL` karena hooks spawn PowerShell secara langsung |

315 

316#### Bidang HTTP hook

317 

318Selain [bidang umum](#common-fields), HTTP hooks menerima bidang-bidang ini:

319 

320| Bidang | Diperlukan | Deskripsi |

321| :--------------- | :--------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

322| `url` | ya | URL untuk mengirimkan permintaan POST ke |

323| `headers` | tidak | Header HTTP tambahan sebagai pasangan kunci-nilai. Nilai mendukung interpolasi variabel lingkungan menggunakan sintaks `$VAR_NAME` atau `${VAR_NAME}`. Hanya variabel yang tercantum dalam `allowedEnvVars` yang diselesaikan |

324| `allowedEnvVars` | tidak | Daftar nama variabel lingkungan yang dapat diinterpolasi ke nilai header. Referensi ke variabel yang tidak tercantum diganti dengan string kosong. Diperlukan untuk interpolasi variabel env apa pun untuk bekerja |

325 

326Claude Code mengirimkan [JSON input](#hook-input-and-output) hook sebagai badan permintaan POST dengan `Content-Type: application/json`. Badan respons menggunakan [format JSON output](#json-output) yang sama seperti command hooks.

327 

328Penanganan kesalahan berbeda dari command hooks: respons non-2xx, kegagalan koneksi, dan timeout semuanya menghasilkan kesalahan non-blocking yang memungkinkan eksekusi berlanjut. Untuk memblokir pemanggilan tool atau menolak izin, kembalikan respons 2xx dengan badan JSON yang berisi `decision: "block"` atau `hookSpecificOutput` dengan `permissionDecision: "deny"`.

329 

330Contoh ini mengirimkan event `PreToolUse` ke layanan validasi lokal, mengautentikasi dengan token dari variabel lingkungan `MY_TOKEN`:

331 

332```json theme={null}

333{

334 "hooks": {

335 "PreToolUse": [

336 {

337 "matcher": "Bash",

338 "hooks": [

339 {

340 "type": "http",

341 "url": "http://localhost:8080/hooks/pre-tool-use",

342 "timeout": 30,

343 "headers": {

344 "Authorization": "Bearer $MY_TOKEN"

345 },

346 "allowedEnvVars": ["MY_TOKEN"]

347 }

348 ]

349 }

350 ]

351 }

352}

353```

354 

355#### Bidang MCP tool hook

356 

357Selain [bidang umum](#common-fields), MCP tool hooks menerima bidang-bidang ini:

358 

359| Bidang | Diperlukan | Deskripsi |

360| :------- | :--------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------- |

361| `server` | ya | Nama server MCP yang dikonfigurasi. Server harus sudah terhubung; hook tidak pernah memicu alur OAuth atau koneksi |

362| `tool` | ya | Nama tool untuk dipanggil di server itu |

363| `input` | tidak | Argumen yang dilewatkan ke tool. Nilai string mendukung substitusi `${path}` dari [JSON input](#hook-input-and-output) hook, seperti `"${tool_input.file_path}"` |

364 

365Output teks tool diperlakukan seperti command-hook stdout: jika itu diurai sebagai [JSON output](#json-output) yang valid, itu diproses sebagai keputusan, jika tidak, itu ditampilkan sebagai teks biasa. Jika server bernama tidak terhubung, atau tool mengembalikan `isError: true`, hook menghasilkan kesalahan non-blocking dan eksekusi berlanjut.

366 

367MCP tool hooks tersedia pada setiap hook event setelah Claude Code terhubung ke server MCP Anda. `SessionStart` dan `Setup` biasanya dijalankan sebelum server selesai terhubung, jadi hooks pada event tersebut harus mengharapkan kesalahan "not connected" pada run pertama.

368 

369Contoh ini memanggil tool `security_scan` pada server MCP `my_server` setelah setiap `Write` atau `Edit`, melewatkan path file yang diedit:

370 

371```json theme={null}

372{

373 "hooks": {

374 "PostToolUse": [

375 {

376 "matcher": "Write|Edit",

377 "hooks": [

378 {

379 "type": "mcp_tool",

380 "server": "my_server",

381 "tool": "security_scan",

382 "input": { "file_path": "${tool_input.file_path}" }

383 }

384 ]

385 }

386 ]

387 }

388}

389```

390 

391#### Bidang prompt dan agent hook

392 

393Selain [bidang umum](#common-fields), prompt dan agent hooks menerima bidang-bidang ini:

394 

395| Bidang | Diperlukan | Deskripsi |

396| :------- | :--------- | :------------------------------------------------------------------------------------------------- |

397| `prompt` | ya | Teks prompt untuk dikirim ke model. Gunakan `$ARGUMENTS` sebagai placeholder untuk JSON input hook |

398| `model` | tidak | Model untuk digunakan untuk evaluasi. Default ke model cepat |

399 

400Semua matching hooks dijalankan secara paralel, dan handler identik dideduplikasi secara otomatis. Command hooks dideduplikasi berdasarkan string perintah, dan HTTP hooks dideduplikasi berdasarkan URL. Handlers dijalankan di direktori saat ini dengan lingkungan Claude Code. Variabel lingkungan `$CLAUDE_CODE_REMOTE` diatur ke `"true"` di lingkungan web jarak jauh dan tidak diatur di CLI lokal.

401 

402### Referensi skrip berdasarkan path

403 

404Gunakan variabel lingkungan untuk mereferensikan skrip hook relatif terhadap akar proyek atau plugin, terlepas dari direktori kerja saat hook dijalankan:

405 

406* `$CLAUDE_PROJECT_DIR`: akar proyek. Bungkus dalam tanda kutip untuk menangani path dengan spasi.

407* `${CLAUDE_PLUGIN_ROOT}`: direktori instalasi plugin, untuk skrip yang dibundel dengan [plugin](/id/plugins). Berubah pada setiap pembaruan plugin.

408* `${CLAUDE_PLUGIN_DATA}`: [direktori data persisten](/id/plugins-reference#persistent-data-directory) plugin, untuk dependensi dan status yang harus bertahan pembaruan plugin.

409 

410<Tabs>

411 <Tab title="Skrip proyek">

412 Contoh ini menggunakan `$CLAUDE_PROJECT_DIR` untuk menjalankan pemeriksa gaya dari direktori `.claude/hooks/` proyek setelah pemanggilan tool `Write` atau `Edit` apa pun:

413 

414 ```json theme={null}

415 {

416 "hooks": {

417 "PostToolUse": [

418 {

419 "matcher": "Write|Edit",

420 "hooks": [

421 {

422 "type": "command",

423 "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/check-style.sh"

424 }

425 ]

426 }

427 ]

428 }

429 }

430 ```

431 </Tab>

432 

433 <Tab title="Skrip plugin">

434 Tentukan plugin hooks dalam `hooks/hooks.json` dengan bidang `description` tingkat atas opsional. Ketika plugin diaktifkan, hooks-nya bergabung dengan hooks pengguna dan proyek Anda.

435 

436 Contoh ini menjalankan skrip pemformatan yang dibundel dengan plugin:

437 

438 ```json theme={null}

439 {

440 "description": "Automatic code formatting",

441 "hooks": {

442 "PostToolUse": [

443 {

444 "matcher": "Write|Edit",

445 "hooks": [

446 {

447 "type": "command",

448 "command": "${CLAUDE_PLUGIN_ROOT}/scripts/format.sh",

449 "timeout": 30

450 }

451 ]

452 }

453 ]

454 }

455 }

456 ```

457 

458 Lihat [plugin components reference](/id/plugins-reference#hooks) untuk detail tentang membuat plugin hooks.

459 </Tab>

460</Tabs>

461 

462### Hooks dalam skills dan agents

463 

464Selain file pengaturan dan plugin, hooks dapat didefinisikan langsung dalam [skills](/id/skills) dan [subagents](/id/sub-agents) menggunakan frontmatter. Hooks ini dibatasi pada siklus hidup komponen dan hanya dijalankan ketika komponen itu aktif.

465 

466Semua hook events didukung. Untuk subagents, `Stop` hooks secara otomatis dikonversi ke `SubagentStop` karena itu adalah event yang dijalankan ketika subagent selesai.

467 

468Hooks menggunakan format konfigurasi yang sama seperti hooks berbasis pengaturan tetapi dibatasi pada masa hidup komponen dan dibersihkan saat selesai.

469 

470Skill ini mendefinisikan hook `PreToolUse` yang menjalankan skrip validasi keamanan sebelum setiap perintah `Bash`:

471 

472```yaml theme={null}

473---

474name: secure-operations

475description: Perform operations with security checks

476hooks:

477 PreToolUse:

478 - matcher: "Bash"

479 hooks:

480 - type: command

481 command: "./scripts/security-check.sh"

482---

483```

484 

485Agents menggunakan format yang sama dalam frontmatter YAML mereka.

486 

487### Menu `/hooks`

488 

489Ketik `/hooks` di Claude Code untuk membuka browser hooks read-only. Menu menampilkan setiap hook event dengan jumlah hooks yang dikonfigurasi, memungkinkan Anda menggali ke dalam matchers, dan menampilkan detail lengkap setiap hook handler. Gunakan untuk memverifikasi konfigurasi, memeriksa file pengaturan mana hook berasal, atau memeriksa perintah, prompt, atau URL hook.

490 

491Menu menampilkan semua lima tipe hook: `command`, `prompt`, `agent`, `http`, dan `mcp_tool`. Setiap hook diberi label dengan awalan `[type]` dan sumber menunjukkan di mana itu didefinisikan:

492 

493* `User`: dari `~/.claude/settings.json`

494* `Project`: dari `.claude/settings.json`

495* `Local`: dari `.claude/settings.local.json`

496* `Plugin`: dari `hooks/hooks.json` plugin

497* `Session`: terdaftar dalam memori untuk sesi saat ini

498* `Built-in`: terdaftar secara internal oleh Claude Code

499 

500Memilih hook membuka tampilan detail menampilkan event, matcher, tipe, file sumber, dan perintah lengkap, prompt, atau URL. Menu adalah read-only: untuk menambah, memodifikasi, atau menghapus hooks, edit JSON pengaturan secara langsung atau minta Claude membuat perubahan.

501 

502### Nonaktifkan atau hapus hooks

503 

504Untuk menghapus hook, hapus entrinya dari file JSON pengaturan.

505 

506Untuk menonaktifkan semua hooks sementara tanpa menghapusnya, atur `"disableAllHooks": true` dalam file pengaturan Anda. Tidak ada cara untuk menonaktifkan hook individual sambil menyimpannya dalam konfigurasi.

507 

508Pengaturan `disableAllHooks` menghormati hierarki pengaturan terkelola. Jika administrator telah mengonfigurasi hooks melalui pengaturan kebijakan terkelola, `disableAllHooks` yang diatur dalam pengaturan pengguna, proyek, atau lokal tidak dapat menonaktifkan hooks terkelola tersebut. Hanya `disableAllHooks` yang diatur pada tingkat pengaturan terkelola yang dapat menonaktifkan hooks terkelola.

509 

510Pengeditan langsung ke hooks dalam file pengaturan biasanya diambil secara otomatis oleh file watcher.

511 

512## Hook input dan output

513 

514Command hooks menerima data JSON melalui stdin dan mengkomunikasikan hasil melalui kode keluar, stdout, dan stderr. HTTP hooks menerima JSON yang sama sebagai badan permintaan POST dan mengkomunikasikan hasil melalui badan respons HTTP. Bagian ini mencakup bidang dan perilaku yang umum untuk semua events. Setiap bagian event di bawah [Hook events](#hook-events) mencakup skema input spesifiknya dan opsi kontrol keputusan.

515 

516### Bidang input umum

517 

518Hook events menerima bidang-bidang ini sebagai JSON, selain bidang spesifik event yang didokumentasikan dalam setiap bagian [hook event](#hook-events). Untuk command hooks, JSON ini tiba melalui stdin. Untuk HTTP hooks, itu tiba sebagai badan permintaan POST.

519 

520| Bidang | Deskripsi |

521| :---------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

522| `session_id` | Pengenal sesi saat ini |

523| `transcript_path` | Path ke JSON percakapan |

524| `cwd` | Direktori kerja saat hook dipanggil |

525| `permission_mode` | [Mode izin](/id/permissions#permission-modes) saat ini: `"default"`, `"plan"`, `"acceptEdits"`, `"auto"`, `"dontAsk"`, atau `"bypassPermissions"`. Tidak semua events menerima bidang ini: lihat contoh JSON setiap event di bawah untuk memeriksa |

526| `hook_event_name` | Nama event yang dijalankan |

527 

528Saat berjalan dengan `--agent` atau di dalam subagent, dua bidang tambahan disertakan:

529 

530| Bidang | Deskripsi |

531| :----------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

532| `agent_id` | Pengenal unik untuk subagent. Hadir hanya ketika hook dijalankan di dalam pemanggilan subagent. Gunakan ini untuk membedakan pemanggilan hook subagent dari pemanggilan thread utama. |

533| `agent_type` | Nama agent (misalnya, `"Explore"` atau `"security-reviewer"`). Hadir ketika sesi menggunakan `--agent` atau hook dijalankan di dalam subagent. Untuk subagents, tipe subagent mengambil alih nilai `--agent` sesi. |

534 

535Misalnya, hook `PreToolUse` untuk perintah Bash menerima ini di stdin:

536 

537```json theme={null}

538{

539 "session_id": "abc123",

540 "transcript_path": "/home/user/.claude/projects/.../transcript.jsonl",

541 "cwd": "/home/user/my-project",

542 "permission_mode": "default",

543 "hook_event_name": "PreToolUse",

544 "tool_name": "Bash",

545 "tool_input": {

546 "command": "npm test"

547 }

548}

549```

550 

551Bidang `tool_name` dan `tool_input` spesifik untuk event. Setiap bagian [hook event](#hook-events) mendokumentasikan bidang tambahan untuk event itu.

552 

553### Output kode keluar

554 

555Kode keluar dari perintah hook Anda memberitahu Claude Code apakah tindakan harus dilanjutkan, diblokir, atau diabaikan.

556 

557**Exit 0** berarti sukses. Claude Code mengurai stdout untuk [bidang output JSON](#json-output). Output JSON hanya diproses pada exit 0. Untuk sebagian besar events, stdout ditulis ke debug log tetapi tidak ditampilkan dalam transkrip. Pengecualiannya adalah `UserPromptSubmit`, `UserPromptExpansion`, dan `SessionStart`, di mana stdout ditambahkan sebagai konteks yang dapat dilihat dan ditindaklanjuti Claude.

558 

559**Exit 2** berarti kesalahan blocking. Claude Code mengabaikan stdout dan JSON apa pun di dalamnya. Sebagai gantinya, teks stderr diumpankan kembali ke Claude sebagai pesan kesalahan. Efeknya tergantung pada event: `PreToolUse` memblokir pemanggilan tool, `UserPromptSubmit` menolak prompt, dan sebagainya. Lihat [perilaku kode keluar 2](#exit-code-2-behavior-per-event) untuk daftar lengkap.

560 

561**Kode keluar lainnya** adalah kesalahan non-blocking untuk sebagian besar hook events. Transkrip menampilkan pemberitahuan `<hook name> hook error` diikuti oleh baris pertama stderr, jadi Anda dapat mengidentifikasi penyebabnya tanpa `--debug`. Eksekusi berlanjut dan stderr lengkap ditulis ke debug log.

562 

563Misalnya, skrip perintah hook yang memblokir perintah Bash berbahaya:

564 

565```bash theme={null}

566#!/bin/bash

567# Membaca input JSON dari stdin, memeriksa perintah

568command=$(jq -r '.tool_input.command' < /dev/stdin)

569 

570if [[ "$command" == rm* ]]; then

571 echo "Blocked: rm commands are not allowed" >&2

572 exit 2 # Blocking error: tool call is prevented

573fi

574 

575exit 0 # Success: tool call proceeds

576```

577 

578<Warning>

579 Untuk sebagian besar hook events, hanya kode keluar 2 yang memblokir tindakan. Claude Code memperlakukan kode keluar 1 sebagai kesalahan non-blocking dan melanjutkan dengan tindakan, meskipun 1 adalah kode kegagalan Unix konvensional. Jika hook Anda dimaksudkan untuk menegakkan kebijakan, gunakan `exit 2`. Pengecualiannya adalah `WorktreeCreate`, di mana kode keluar non-zero apa pun membatalkan pembuatan worktree.

580</Warning>

581 

582#### Perilaku kode keluar 2 per event

583 

584Kode keluar 2 adalah cara hook menandakan "berhenti, jangan lakukan ini." Efeknya tergantung pada event, karena beberapa event mewakili tindakan yang dapat diblokir (seperti pemanggilan tool yang belum terjadi) dan yang lain mewakili hal-hal yang sudah terjadi atau tidak dapat dicegah.

585 

586| Hook event | Dapat diblokir? | Apa yang terjadi pada exit 2 |

587| :-------------------- | :-------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------- |

588| `PreToolUse` | Ya | Memblokir pemanggilan tool |

589| `PermissionRequest` | Ya | Menolak izin |

590| `UserPromptSubmit` | Ya | Memblokir pemrosesan prompt dan menghapus prompt |

591| `UserPromptExpansion` | Ya | Memblokir ekspansi |

592| `Stop` | Ya | Mencegah Claude berhenti, melanjutkan percakapan |

593| `SubagentStop` | Ya | Mencegah subagent berhenti |

594| `TeammateIdle` | Ya | Mencegah teammate menjadi idle (teammate terus bekerja) |

595| `TaskCreated` | Ya | Membatalkan pembuatan tugas |

596| `TaskCompleted` | Ya | Mencegah tugas ditandai sebagai selesai |

597| `ConfigChange` | Ya | Memblokir perubahan konfigurasi dari berlaku (kecuali `policy_settings`) |

598| `StopFailure` | Tidak | Output dan kode keluar diabaikan |

599| `PostToolUse` | Tidak | Menampilkan stderr ke Claude (tool sudah dijalankan) |

600| `PostToolUseFailure` | Tidak | Menampilkan stderr ke Claude (tool sudah gagal) |

601| `PostToolBatch` | Ya | Menghentikan loop agentic sebelum pemanggilan model berikutnya |

602| `PermissionDenied` | Tidak | Kode keluar dan stderr diabaikan (penolakan sudah terjadi). Gunakan JSON `hookSpecificOutput.retry: true` untuk memberitahu model itu dapat mencoba lagi |

603| `Notification` | Tidak | Menampilkan stderr ke pengguna saja |

604| `SubagentStart` | Tidak | Menampilkan stderr ke pengguna saja |

605| `SessionStart` | Tidak | Menampilkan stderr ke pengguna saja |

606| `Setup` | Tidak | Menampilkan stderr ke pengguna saja |

607| `SessionEnd` | Tidak | Menampilkan stderr ke pengguna saja |

608| `CwdChanged` | Tidak | Menampilkan stderr ke pengguna saja |

609| `FileChanged` | Tidak | Menampilkan stderr ke pengguna saja |

610| `PreCompact` | Ya | Memblokir compaction |

611| `PostCompact` | Tidak | Menampilkan stderr ke pengguna saja |

612| `Elicitation` | Ya | Menolak elicitation |

613| `ElicitationResult` | Ya | Memblokir respons (tindakan menjadi decline) |

614| `WorktreeCreate` | Ya | Kode keluar non-zero apa pun menyebabkan pembuatan worktree gagal |

615| `WorktreeRemove` | Tidak | Kegagalan dicatat dalam mode debug saja |

616| `InstructionsLoaded` | Tidak | Kode keluar diabaikan |

617 

618### Penanganan respons HTTP

619 

620HTTP hooks menggunakan kode status HTTP dan badan respons sebagai pengganti kode keluar dan stdout:

621 

622* **2xx dengan badan kosong**: sukses, setara dengan kode keluar 0 tanpa output

623* **2xx dengan badan teks biasa**: sukses, teks ditambahkan sebagai konteks

624* **2xx dengan badan JSON**: sukses, diurai menggunakan skema [JSON output](#json-output) yang sama seperti command hooks

625* **Status non-2xx**: kesalahan non-blocking, eksekusi berlanjut

626* **Kegagalan koneksi atau timeout**: kesalahan non-blocking, eksekusi berlanjut

627 

628Tidak seperti command hooks, HTTP hooks tidak dapat menandakan kesalahan blocking hanya melalui kode status. Untuk memblokir pemanggilan tool atau menolak izin, kembalikan respons 2xx dengan badan JSON yang berisi bidang keputusan yang sesuai.

629 

630### Output JSON

631 

632Kode keluar memungkinkan Anda mengizinkan atau memblokir, tetapi output JSON memberikan kontrol yang lebih halus. Alih-alih keluar dengan kode 2 untuk memblokir, keluar 0 dan cetak objek JSON ke stdout. Claude Code membaca bidang tertentu dari JSON itu untuk mengontrol perilaku, termasuk [decision control](#decision-control) untuk memblokir, mengizinkan, atau meningkatkan ke pengguna.

633 

634<Note>

635 Anda harus memilih satu pendekatan per hook, bukan keduanya: gunakan kode keluar saja untuk signaling, atau keluar 0 dan cetak JSON untuk kontrol terstruktur. Claude Code hanya memproses JSON pada exit 0. Jika Anda keluar 2, JSON apa pun diabaikan.

636</Note>

637 

638Stdout hook Anda harus berisi hanya objek JSON. Jika profil shell Anda mencetak teks saat startup, itu dapat mengganggu parsing JSON. Lihat [JSON validation failed](/id/hooks-guide#json-validation-failed) dalam panduan troubleshooting.

639 

640Hook output yang disuntikkan ke dalam konteks (`additionalContext`, `systemMessage`, atau plain stdout) dibatasi pada 10.000 karakter. Output yang melebihi batas ini disimpan ke file dan diganti dengan pratinjau dan path file, dengan cara yang sama seperti hasil tool besar ditangani.

641 

642Objek JSON mendukung tiga jenis bidang:

643 

644* **Bidang universal** seperti `continue` bekerja di semua events. Ini tercantum dalam tabel di bawah.

645* **Top-level `decision` dan `reason`** digunakan oleh beberapa events untuk memblokir atau memberikan umpan balik.

646* **`hookSpecificOutput`** adalah objek bersarang untuk events yang memerlukan kontrol yang lebih kaya. Ini memerlukan bidang `hookEventName` yang diatur ke nama event.

647 

648| Bidang | Default | Deskripsi |

649| :--------------- | :-------- | :--------------------------------------------------------------------------------------------------------------------------------- |

650| `continue` | `true` | Jika `false`, Claude berhenti memproses sepenuhnya setelah hook dijalankan. Mengambil alih bidang keputusan spesifik event apa pun |

651| `stopReason` | tidak ada | Pesan ditampilkan ke pengguna saat `continue` adalah `false`. Tidak ditampilkan ke Claude |

652| `suppressOutput` | `false` | Jika `true`, menyembunyikan stdout dari debug log |

653| `systemMessage` | tidak ada | Pesan peringatan ditampilkan ke pengguna |

654 

655Untuk menghentikan Claude sepenuhnya terlepas dari tipe event:

656 

657```json theme={null}

658{ "continue": false, "stopReason": "Build failed, fix errors before continuing" }

659```

660 

661#### Tambahkan konteks untuk Claude

662 

663Bidang `additionalContext` meneruskan string dari hook Anda ke jendela konteks Claude. Claude Code membungkus string dalam pengingat sistem dan menyisipkannya ke dalam percakapan pada titik di mana hook dijalankan. Claude membaca pengingat pada permintaan model berikutnya, tetapi itu tidak muncul sebagai pesan chat dalam antarmuka.

664 

665Kembalikan `additionalContext` di dalam `hookSpecificOutput` bersama nama event:

666 

667```json theme={null}

668{

669 "hookSpecificOutput": {

670 "hookEventName": "PostToolUse",

671 "additionalContext": "This file is generated. Edit src/schema.ts and run `bun generate` instead."

672 }

673}

674```

675 

676Di mana pengingat muncul tergantung pada event:

677 

678* [SessionStart](#sessionstart), [Setup](#setup), dan [SubagentStart](#subagentstart): di awal percakapan, sebelum prompt pertama

679* [UserPromptSubmit](#userpromptsubmit) dan [UserPromptExpansion](#userpromptexpansion): bersama prompt yang dikirimkan

680* [PreToolUse](#pretooluse), [PostToolUse](#posttooluse), [PostToolUseFailure](#posttoolusefailure), dan [PostToolBatch](#posttoolbatch): di sebelah hasil tool

681 

682Ketika beberapa hooks mengembalikan `additionalContext` untuk event yang sama, Claude menerima semua nilai. Jika nilai melebihi 10.000 karakter, Claude Code menulis teks lengkap ke file di direktori sesi dan meneruskan Claude path file dengan pratinjau singkat sebagai gantinya.

683 

684Gunakan `additionalContext` untuk informasi yang harus diketahui Claude tentang keadaan saat ini lingkungan Anda atau operasi yang baru saja dijalankan:

685 

686* **Keadaan lingkungan**: branch saat ini, target deployment, atau flag fitur aktif

687* **Aturan proyek bersyarat**: perintah test mana yang berlaku untuk file yang baru diedit, direktori mana yang read-only di worktree ini

688* **Data eksternal**: masalah terbuka yang ditugaskan kepada Anda, hasil CI terbaru, konten yang diambil dari layanan internal

689 

690Untuk instruksi yang tidak pernah berubah, lebih suka [CLAUDE.md](/id/memory). Itu dimuat tanpa menjalankan skrip dan merupakan tempat standar untuk konvensi proyek statis.

691 

692Tulis teks sebagai pernyataan faktual daripada instruksi sistem imperatif. Frasa seperti "Target deployment adalah production" atau "Repo ini menggunakan `bun test`" dibaca sebagai informasi proyek. Teks yang dibingkai sebagai perintah sistem out-of-band dapat memicu pertahanan injeksi prompt Claude, yang menyebabkan Claude menampilkan teks kepada Anda alih-alih memperlakukannya sebagai konteks.

693 

694Setelah disuntikkan, teks disimpan dalam transkrip sesi. Untuk events mid-session seperti `PostToolUse` atau `UserPromptSubmit`, melanjutkan dengan `--continue` atau `--resume` memutar ulang teks yang disimpan daripada menjalankan kembali hook untuk giliran masa lalu, jadi nilai seperti timestamp atau commit SHA menjadi usang pada resume. Hook `SessionStart` dijalankan lagi pada resume dengan `source` diatur ke `"resume"`, jadi mereka dapat menyegarkan konteks mereka.

695 

696#### Kontrol keputusan

697 

698Tidak setiap event mendukung pemblokiran atau kontrol perilaku melalui JSON. Events yang melakukannya masing-masing menggunakan set bidang yang berbeda untuk mengekspresikan keputusan itu. Gunakan tabel ini sebagai referensi cepat sebelum menulis hook:

699 

700| Events | Pola keputusan | Bidang kunci |

701| :---------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

702| UserPromptSubmit, UserPromptExpansion, PostToolUse, PostToolUseFailure, PostToolBatch, Stop, SubagentStop, ConfigChange, PreCompact | Top-level `decision` | `decision: "block"`, `reason` |

703| TeammateIdle, TaskCreated, TaskCompleted | Kode keluar atau `continue: false` | Kode keluar 2 memblokir tindakan dengan umpan balik stderr. JSON `{"continue": false, "stopReason": "..."}` juga menghentikan teammate sepenuhnya, mencocokkan perilaku hook `Stop` |

704| PreToolUse | `hookSpecificOutput` | `permissionDecision` (allow/deny/ask/defer), `permissionDecisionReason` |

705| PermissionRequest | `hookSpecificOutput` | `decision.behavior` (allow/deny) |

706| PermissionDenied | `hookSpecificOutput` | `retry: true` memberitahu model itu dapat mencoba lagi pemanggilan tool yang ditolak |

707| WorktreeCreate | path return | Command hook mencetak path di stdout; HTTP hook mengembalikan `hookSpecificOutput.worktreePath`. Kegagalan hook atau path yang hilang gagal membuat |

708| Elicitation | `hookSpecificOutput` | `action` (accept/decline/cancel), `content` (nilai field form untuk accept) |

709| ElicitationResult | `hookSpecificOutput` | `action` (accept/decline/cancel), `content` (nilai field form override) |

710| WorktreeRemove, Notification, SessionEnd, PostCompact, InstructionsLoaded, StopFailure, CwdChanged, FileChanged | Tidak ada | Tidak ada kontrol keputusan. Digunakan untuk efek samping seperti logging atau cleanup |

711 

712Berikut adalah contoh setiap pola dalam aksi:

713 

714<Tabs>

715 <Tab title="Top-level decision">

716 Digunakan oleh `UserPromptSubmit`, `UserPromptExpansion`, `PostToolUse`, `PostToolUseFailure`, `PostToolBatch`, `Stop`, `SubagentStop`, `ConfigChange`, dan `PreCompact`. Satu-satunya nilai adalah `"block"`. Untuk mengizinkan tindakan dilanjutkan, hilangkan `decision` dari JSON Anda, atau keluar 0 tanpa JSON apa pun:

717 

718 ```json theme={null}

719 {

720 "decision": "block",

721 "reason": "Test suite must pass before proceeding"

722 }

723 ```

724 </Tab>

725 

726 <Tab title="PreToolUse">

727 Menggunakan `hookSpecificOutput` untuk kontrol yang lebih kaya: izinkan, tolak, atau eskalasi ke pengguna. Anda juga dapat memodifikasi input tool sebelum dijalankan atau menyuntikkan konteks tambahan untuk Claude. Lihat [PreToolUse decision control](#pretooluse-decision-control) untuk set lengkap opsi.

728 

729 ```json theme={null}

730 {

731 "hookSpecificOutput": {

732 "hookEventName": "PreToolUse",

733 "permissionDecision": "deny",

734 "permissionDecisionReason": "Database writes are not allowed"

735 }

736 }

737 ```

738 </Tab>

739 

740 <Tab title="PermissionRequest">

741 Menggunakan `hookSpecificOutput` untuk mengizinkan atau menolak permintaan izin atas nama pengguna. Saat mengizinkan, Anda juga dapat memodifikasi input tool atau menerapkan aturan izin sehingga pengguna tidak diminta lagi. Lihat [PermissionRequest decision control](#permissionrequest-decision-control) untuk set lengkap opsi.

742 

743 ```json theme={null}

744 {

745 "hookSpecificOutput": {

746 "hookEventName": "PermissionRequest",

747 "decision": {

748 "behavior": "allow",

749 "updatedInput": {

750 "command": "npm run lint"

751 }

752 }

753 }

754 }

755 ```

756 </Tab>

757</Tabs>

758 

759Untuk contoh yang diperluas termasuk validasi perintah Bash, pemfilteran prompt, dan skrip persetujuan otomatis, lihat [What you can automate](/id/hooks-guide#what-you-can-automate) dalam panduan dan [Bash command validator reference implementation](https://github.com/anthropics/claude-code/blob/main/examples/hooks/bash_command_validator_example.py).

760 

761## Hook events

762 

763Setiap event sesuai dengan titik dalam siklus hidup Claude Code di mana hooks dapat dijalankan. Bagian-bagian di bawah diurutkan untuk mencocokkan siklus hidup: dari pengaturan sesi melalui loop agentic ke akhir sesi. Setiap bagian menjelaskan kapan event dijalankan, matcher apa yang didukungnya, JSON input yang diterima, dan cara mengontrol perilaku melalui output.

764 

765### SessionStart

766 

767Dijalankan ketika Claude Code memulai sesi baru atau melanjutkan sesi yang ada. Berguna untuk memuat konteks pengembangan seperti masalah yang ada atau perubahan terbaru pada codebase Anda, atau menyiapkan variabel lingkungan. Untuk konteks statis yang tidak memerlukan skrip, gunakan [CLAUDE.md](/id/memory) sebagai gantinya.

768 

769SessionStart dijalankan pada setiap sesi, jadi jaga hooks ini tetap cepat. Hanya hooks `type: "command"` dan `type: "mcp_tool"` yang didukung.

770 

771Nilai matcher sesuai dengan cara sesi dimulai:

772 

773| Matcher | Kapan dijalankan |

774| :-------- | :--------------------------------------- |

775| `startup` | Sesi baru |

776| `resume` | `--resume`, `--continue`, atau `/resume` |

777| `clear` | `/clear` |

778| `compact` | Compaction otomatis atau manual |

779 

780#### Input SessionStart

781 

782Selain [bidang input umum](#common-input-fields), SessionStart hooks menerima `source`, `model`, dan secara opsional `agent_type`. Bidang `source` menunjukkan bagaimana sesi dimulai: `"startup"` untuk sesi baru, `"resume"` untuk sesi yang dilanjutkan, `"clear"` setelah `/clear`, atau `"compact"` setelah compaction. Bidang `model` berisi pengenal model. Jika Anda memulai Claude Code dengan `claude --agent <name>`, bidang `agent_type` berisi nama agent.

783 

784```json theme={null}

785{

786 "session_id": "abc123",

787 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

788 "cwd": "/Users/...",

789 "hook_event_name": "SessionStart",

790 "source": "startup",

791 "model": "claude-sonnet-4-6"

792}

793```

794 

795#### Kontrol keputusan SessionStart

796 

797Teks apa pun yang dicetak skrip hook ke stdout ditambahkan sebagai konteks untuk Claude. Selain [bidang output JSON](#json-output) yang tersedia untuk semua hooks, Anda dapat mengembalikan bidang spesifik event ini:

798 

799| Bidang | Deskripsi |

800| :------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

801| `additionalContext` | String ditambahkan ke konteks Claude pada awal percakapan, sebelum prompt pertama. Lihat [Tambahkan konteks untuk Claude](#add-context-for-claude) untuk cara teks disampaikan dan apa yang harus dimasukkan |

802 

803```json theme={null}

804{

805 "hookSpecificOutput": {

806 "hookEventName": "SessionStart",

807 "additionalContext": "Current branch: feat/auth-refactor\nUncommitted changes: src/auth.ts, src/login.tsx\nActive issue: #4211 Migrate to OAuth2"

808 }

809}

810```

811 

812Karena plain stdout sudah mencapai Claude untuk event ini, hook yang hanya memuat konteks dapat mencetak ke stdout secara langsung tanpa membangun JSON. Gunakan bentuk JSON ketika Anda perlu menggabungkan konteks dengan bidang lain seperti `suppressOutput`.

813 

814#### Pertahankan variabel lingkungan

815 

816SessionStart hooks memiliki akses ke variabel lingkungan `CLAUDE_ENV_FILE`, yang menyediakan path file di mana Anda dapat mempertahankan variabel lingkungan untuk perintah Bash berikutnya.

817 

818Untuk menetapkan variabel lingkungan individual, tulis pernyataan `export` ke `CLAUDE_ENV_FILE`. Gunakan append (`>>`) untuk mempertahankan variabel yang ditetapkan oleh hooks lain:

819 

820```bash theme={null}

821#!/bin/bash

822 

823if [ -n "$CLAUDE_ENV_FILE" ]; then

824 echo 'export NODE_ENV=production' >> "$CLAUDE_ENV_FILE"

825 echo 'export DEBUG_LOG=true' >> "$CLAUDE_ENV_FILE"

826 echo 'export PATH="$PATH:./node_modules/.bin"' >> "$CLAUDE_ENV_FILE"

827fi

828 

829exit 0

830```

831 

832Untuk menangkap semua perubahan lingkungan dari perintah setup, bandingkan variabel yang diekspor sebelum dan sesudah:

833 

834```bash theme={null}

835#!/bin/bash

836 

837ENV_BEFORE=$(export -p | sort)

838 

839# Jalankan perintah setup Anda yang memodifikasi lingkungan

840source ~/.nvm/nvm.sh

841nvm use 20

842 

843if [ -n "$CLAUDE_ENV_FILE" ]; then

844 ENV_AFTER=$(export -p | sort)

845 comm -13 <(echo "$ENV_BEFORE") <(echo "$ENV_AFTER") >> "$CLAUDE_ENV_FILE"

846fi

847 

848exit 0

849```

850 

851Variabel apa pun yang ditulis ke file ini akan tersedia dalam semua perintah Bash berikutnya yang dijalankan Claude Code selama sesi.

852 

853<Note>

854 `CLAUDE_ENV_FILE` tersedia untuk SessionStart, [Setup](#setup), [CwdChanged](#cwdchanged), dan [FileChanged](#filechanged) hooks. Tipe hook lainnya tidak memiliki akses ke variabel ini.

855</Note>

856 

857### Setup

858 

859Dijalankan hanya ketika Anda meluncurkan Claude Code dengan `--init-only`, atau dengan `--init` atau `--maintenance` dalam mode print (`-p`). Itu tidak dijalankan pada startup normal. Gunakan untuk instalasi dependensi satu kali atau pembersihan terjadwal yang Anda picu secara eksplisit dari CI atau skrip, terpisah dari startup sesi normal. Untuk inisialisasi per-sesi, gunakan [SessionStart](#sessionstart) sebagai gantinya.

860 

861Nilai matcher sesuai dengan flag CLI yang memicu hook:

862 

863| Matcher | Kapan dijalankan |

864| :------------ | :------------------------------------------- |

865| `init` | `claude --init-only` atau `claude -p --init` |

866| `maintenance` | `claude -p --maintenance` |

867 

868`--init-only` menjalankan Setup hooks dan SessionStart hooks dengan matcher `startup`, kemudian keluar tanpa memulai percakapan. `--init` dan `--maintenance` menjalankan Setup hooks hanya ketika digabungkan dengan `-p` (mode print); dalam sesi interaktif dua flag itu saat ini tidak menjalankan Setup hooks.

869 

870Karena Setup tidak dijalankan pada setiap peluncuran, plugin yang memerlukan dependensi yang diinstal tidak dapat mengandalkan Setup saja. Pola praktis adalah memeriksa dependensi pada penggunaan pertama dan menginstal jika tidak ada, misalnya hook atau skill yang menguji `${CLAUDE_PLUGIN_DATA}/node_modules` dan menjalankan `npm install` jika tidak ada. Lihat [direktori data persisten](/id/plugins-reference#persistent-data-directory) untuk tempat menyimpan dependensi yang diinstal.

871 

872#### Input Setup

873 

874Selain [bidang input umum](#common-input-fields), Setup hooks menerima bidang `trigger` yang diatur ke `"init"` atau `"maintenance"`:

875 

876```json theme={null}

877{

878 "session_id": "abc123",

879 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

880 "cwd": "/Users/...",

881 "hook_event_name": "Setup",

882 "trigger": "init"

883}

884```

885 

886#### Kontrol keputusan Setup

887 

888Setup hooks tidak dapat memblokir. Pada kode keluar 2, stderr ditampilkan kepada pengguna; pada kode keluar non-nol lainnya, stderr muncul hanya ketika Anda meluncurkan dengan `--verbose`. Dalam kedua kasus eksekusi berlanjut. Untuk meneruskan informasi ke konteks Claude, kembalikan `additionalContext` dalam output JSON; plain stdout ditulis ke debug log saja. Selain [bidang output JSON](#json-output) yang tersedia untuk semua hooks, Anda dapat mengembalikan bidang spesifik event ini:

889 

890| Bidang | Deskripsi |

891| :------------------ | :-------------------------------------------------------------------------- |

892| `additionalContext` | String ditambahkan ke konteks Claude. Nilai dari beberapa hooks digabungkan |

893 

894```json theme={null}

895{

896 "hookSpecificOutput": {

897 "hookEventName": "Setup",

898 "additionalContext": "Dependencies installed: node_modules, .venv"

899 }

900}

901```

902 

903Setup hooks memiliki akses ke `CLAUDE_ENV_FILE`. Variabel yang ditulis ke file itu bertahan ke perintah Bash berikutnya untuk sesi, sama seperti dalam [SessionStart hooks](#persist-environment-variables). Hanya hooks `type: "command"` dan `type: "mcp_tool"` yang didukung.

904 

905### InstructionsLoaded

906 

907Dijalankan ketika file `CLAUDE.md` atau `.claude/rules/*.md` dimuat ke dalam konteks. Event ini dijalankan saat startup sesi untuk file yang dimuat dengan eager dan lagi nanti ketika file dimuat dengan lazy, misalnya ketika Claude mengakses subdirektori yang berisi `CLAUDE.md` bersarang atau ketika aturan bersyarat dengan frontmatter `paths:` cocok. Hook tidak mendukung pemblokiran atau kontrol keputusan. Itu dijalankan secara asinkron untuk tujuan observabilitas.

908 

909Matcher dijalankan terhadap `load_reason`. Misalnya, gunakan `"matcher": "session_start"` untuk dijalankan hanya untuk file yang dimuat saat startup sesi, atau `"matcher": "path_glob_match|nested_traversal"` untuk dijalankan hanya untuk lazy loads.

910 

911#### Input InstructionsLoaded

912 

913Selain [bidang input umum](#common-input-fields), InstructionsLoaded hooks menerima bidang-bidang ini:

914 

915| Bidang | Deskripsi |

916| :------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

917| `file_path` | Path absolut ke file instruksi yang dimuat |

918| `memory_type` | Cakupan file: `"User"`, `"Project"`, `"Local"`, atau `"Managed"` |

919| `load_reason` | Mengapa file dimuat: `"session_start"`, `"nested_traversal"`, `"path_glob_match"`, `"include"`, atau `"compact"`. Nilai `"compact"` dijalankan ketika file instruksi dimuat ulang setelah event compaction |

920| `globs` | Pola glob path dari frontmatter `paths:` file, jika ada. Hadir hanya untuk load `path_glob_match` |

921| `trigger_file_path` | Path ke file yang akses memicu load ini, untuk lazy loads |

922| `parent_file_path` | Path ke file instruksi induk yang menyertakan ini, untuk load `include` |

923 

924```json theme={null}

925{

926 "session_id": "abc123",

927 "transcript_path": "/Users/.../.claude/projects/.../transcript.jsonl",

928 "cwd": "/Users/my-project",

929 "hook_event_name": "InstructionsLoaded",

930 "file_path": "/Users/my-project/CLAUDE.md",

931 "memory_type": "Project",

932 "load_reason": "session_start"

933}

934```

935 

936#### Kontrol keputusan InstructionsLoaded

937 

938InstructionsLoaded hooks tidak memiliki kontrol keputusan. Mereka tidak dapat memblokir atau memodifikasi pemuatan instruksi. Gunakan event ini untuk audit logging, compliance tracking, atau observabilitas.

939 

940### UserPromptSubmit

941 

942Dijalankan ketika pengguna mengirimkan prompt, sebelum Claude memproses. Ini memungkinkan Anda menambahkan konteks tambahan berdasarkan prompt/percakapan, memvalidasi prompts, atau memblokir jenis prompts tertentu.

943 

944#### Input UserPromptSubmit

945 

946Selain [bidang input umum](#common-input-fields), UserPromptSubmit hooks menerima bidang `prompt` yang berisi teks yang dikirimkan pengguna.

947 

948```json theme={null}

949{

950 "session_id": "abc123",

951 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

952 "cwd": "/Users/...",

953 "permission_mode": "default",

954 "hook_event_name": "UserPromptSubmit",

955 "prompt": "Write a function to calculate the factorial of a number"

956}

957```

958 

959#### Kontrol keputusan UserPromptSubmit

960 

961Hooks `UserPromptSubmit` dapat mengontrol apakah prompt pengguna diproses dan menambahkan konteks. Semua [bidang output JSON](#json-output) tersedia.

962 

963Ada dua cara untuk menambahkan konteks ke percakapan pada kode keluar 0:

964 

965* **Plain text stdout**: teks non-JSON apa pun yang ditulis ke stdout ditambahkan sebagai konteks

966* **JSON dengan `additionalContext`**: gunakan format JSON di bawah untuk kontrol lebih. Bidang `additionalContext` ditambahkan sebagai konteks

967 

968Plain stdout ditampilkan sebagai output hook dalam transkrip. Bidang `additionalContext` ditambahkan lebih diskrit.

969 

970Untuk memblokir prompt, kembalikan objek JSON dengan `decision` diatur ke `"block"`:

971 

972| Bidang | Deskripsi |

973| :------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

974| `decision` | `"block"` mencegah prompt diproses dan menghapusnya dari konteks. Hilangkan untuk mengizinkan prompt dilanjutkan |

975| `reason` | Ditampilkan ke pengguna saat `decision` adalah `"block"`. Tidak ditambahkan ke konteks |

976| `additionalContext` | String ditambahkan ke konteks Claude bersama prompt yang dikirimkan. Lihat [Tambahkan konteks untuk Claude](#add-context-for-claude) untuk cara teks disampaikan dan apa yang harus dimasukkan |

977| `sessionTitle` | Menetapkan judul sesi, efek yang sama seperti `/rename`. Gunakan untuk memberi nama sesi secara otomatis berdasarkan konten prompt |

978 

979```json theme={null}

980{

981 "decision": "block",

982 "reason": "Explanation for decision",

983 "hookSpecificOutput": {

984 "hookEventName": "UserPromptSubmit",

985 "additionalContext": "My additional context here",

986 "sessionTitle": "My session title"

987 }

988}

989```

990 

991<Note>

992 Format JSON tidak diperlukan untuk kasus penggunaan sederhana. Untuk menambahkan konteks, Anda dapat mencetak teks biasa ke stdout dengan kode keluar 0. Gunakan JSON ketika Anda perlu memblokir prompts atau menginginkan kontrol yang lebih terstruktur.

993</Note>

994 

995### UserPromptExpansion

996 

997Dijalankan ketika perintah slash yang diketik pengguna berkembang menjadi prompt sebelum mencapai Claude. Gunakan ini untuk memblokir perintah tertentu dari invokasi langsung, menyuntikkan konteks untuk skill tertentu, atau mencatat perintah mana yang diinvokasi pengguna. Misalnya, hook yang cocok dengan `deploy` dapat memblokir `/deploy` kecuali file persetujuan ada, atau hook yang cocok dengan skill review dapat menambahkan checklist review tim sebagai `additionalContext`.

998 

999Event ini mencakup path yang `PreToolUse` tidak: hook `PreToolUse` yang cocok dengan tool `Skill` hanya dijalankan ketika Claude memanggil tool, tetapi mengetik `/skillname` secara langsung melewati `PreToolUse`. `UserPromptExpansion` dijalankan pada path langsung itu.

1000 

1001Cocok pada `command_name`. Biarkan matcher kosong untuk dijalankan pada setiap slash command prompt-type.

1002 

1003#### Input UserPromptExpansion

1004 

1005Selain [bidang input umum](#common-input-fields), UserPromptExpansion hooks menerima `expansion_type`, `command_name`, `command_args`, `command_source`, dan string `prompt` asli. Bidang `expansion_type` adalah `slash_command` untuk skill dan custom commands, atau `mcp_prompt` untuk MCP server prompts.

1006 

1007```json theme={null}

1008{

1009 "session_id": "abc123",

1010 "transcript_path": "/Users/.../00893aaf.jsonl",

1011 "cwd": "/Users/...",

1012 "permission_mode": "default",

1013 "hook_event_name": "UserPromptExpansion",

1014 "expansion_type": "slash_command",

1015 "command_name": "example-skill",

1016 "command_args": "arg1 arg2",

1017 "command_source": "plugin",

1018 "prompt": "/example-skill arg1 arg2"

1019}

1020```

1021 

1022#### Kontrol keputusan UserPromptExpansion

1023 

1024Hooks `UserPromptExpansion` dapat memblokir ekspansi atau menambahkan konteks. Semua [bidang output JSON](#json-output) tersedia.

1025 

1026| Bidang | Deskripsi |

1027| :------------------ | :----------------------------------------------------------------------------------------------------------------------------------- |

1028| `decision` | `"block"` mencegah slash command berkembang. Hilangkan untuk mengizinkannya dilanjutkan |

1029| `reason` | Ditampilkan ke pengguna saat `decision` adalah `"block"` |

1030| `additionalContext` | String ditambahkan ke konteks Claude bersama prompt yang berkembang. Lihat [Tambahkan konteks untuk Claude](#add-context-for-claude) |

1031 

1032```json theme={null}

1033{

1034 "decision": "block",

1035 "reason": "This slash command is not available",

1036 "hookSpecificOutput": {

1037 "hookEventName": "UserPromptExpansion",

1038 "additionalContext": "Additional context for this expansion"

1039 }

1040}

1041```

1042 

1043### PreToolUse

1044 

1045Dijalankan setelah Claude membuat parameter tool dan sebelum memproses pemanggilan tool. Cocok pada nama tool: `Bash`, `Edit`, `Write`, `Read`, `Glob`, `Grep`, `Agent`, `WebFetch`, `WebSearch`, `AskUserQuestion`, `ExitPlanMode`, dan nama [MCP tool](#match-mcp-tools) apa pun.

1046 

1047Gunakan [PreToolUse decision control](#pretooluse-decision-control) untuk mengizinkan, menolak, menanyakan, atau menunda pemanggilan tool.

1048 

1049#### Input PreToolUse

1050 

1051Selain [bidang input umum](#common-input-fields), PreToolUse hooks menerima `tool_name`, `tool_input`, dan `tool_use_id`. Bidang `tool_input` tergantung pada tool:

1052 

1053##### Bash

1054 

1055Menjalankan perintah shell.

1056 

1057| Bidang | Tipe | Contoh | Deskripsi |

1058| :------------------ | :------ | :----------------- | :----------------------------------------------------- |

1059| `command` | string | `"npm test"` | Perintah shell untuk dijalankan |

1060| `description` | string | `"Run test suite"` | Deskripsi opsional tentang apa yang dilakukan perintah |

1061| `timeout` | number | `120000` | Timeout opsional dalam milidetik |

1062| `run_in_background` | boolean | `false` | Apakah menjalankan perintah di latar belakang |

1063 

1064##### Write

1065 

1066Membuat atau menimpa file.

1067 

1068| Bidang | Tipe | Contoh | Deskripsi |

1069| :---------- | :----- | :-------------------- | :--------------------------------- |

1070| `file_path` | string | `"/path/to/file.txt"` | Path absolut ke file untuk ditulis |

1071| `content` | string | `"file content"` | Konten untuk ditulis ke file |

1072 

1073##### Edit

1074 

1075Mengganti string dalam file yang ada.

1076 

1077| Bidang | Tipe | Contoh | Deskripsi |

1078| :------------ | :------ | :-------------------- | :-------------------------------- |

1079| `file_path` | string | `"/path/to/file.txt"` | Path absolut ke file untuk diedit |

1080| `old_string` | string | `"original text"` | Teks untuk dicari dan diganti |

1081| `new_string` | string | `"replacement text"` | Teks pengganti |

1082| `replace_all` | boolean | `false` | Apakah mengganti semua kemunculan |

1083 

1084##### Read

1085 

1086Membaca konten file.

1087 

1088| Bidang | Tipe | Contoh | Deskripsi |

1089| :---------- | :----- | :-------------------- | :-------------------------------------------- |

1090| `file_path` | string | `"/path/to/file.txt"` | Path absolut ke file untuk dibaca |

1091| `offset` | number | `10` | Nomor baris opsional untuk mulai membaca dari |

1092| `limit` | number | `50` | Jumlah baris opsional untuk dibaca |

1093 

1094##### Glob

1095 

1096Menemukan file yang cocok dengan pola glob.

1097 

1098| Bidang | Tipe | Contoh | Deskripsi |

1099| :-------- | :----- | :--------------- | :------------------------------------------------------------------- |

1100| `pattern` | string | `"**/*.ts"` | Pola glob untuk mencocokkan file terhadap |

1101| `path` | string | `"/path/to/dir"` | Direktori opsional untuk dicari. Default ke direktori kerja saat ini |

1102 

1103##### Grep

1104 

1105Mencari konten file dengan ekspresi reguler.

1106 

1107| Bidang | Tipe | Contoh | Deskripsi |

1108| :------------ | :------ | :--------------- | :------------------------------------------------------------------------------------- |

1109| `pattern` | string | `"TODO.*fix"` | Pola ekspresi reguler untuk dicari |

1110| `path` | string | `"/path/to/dir"` | File atau direktori opsional untuk dicari |

1111| `glob` | string | `"*.ts"` | Pola glob opsional untuk memfilter file |

1112| `output_mode` | string | `"content"` | `"content"`, `"files_with_matches"`, atau `"count"`. Default ke `"files_with_matches"` |

1113| `-i` | boolean | `true` | Pencarian case insensitive |

1114| `multiline` | boolean | `false` | Aktifkan pencocokan multiline |

1115 

1116##### WebFetch

1117 

1118Mengambil dan memproses konten web.

1119 

1120| Bidang | Tipe | Contoh | Deskripsi |

1121| :------- | :----- | :---------------------------- | :----------------------------------------------- |

1122| `url` | string | `"https://example.com/api"` | URL untuk mengambil konten dari |

1123| `prompt` | string | `"Extract the API endpoints"` | Prompt untuk dijalankan pada konten yang diambil |

1124 

1125##### WebSearch

1126 

1127Mencari web.

1128 

1129| Bidang | Tipe | Contoh | Deskripsi |

1130| :---------------- | :----- | :----------------------------- | :--------------------------------------------- |

1131| `query` | string | `"react hooks best practices"` | Query pencarian |

1132| `allowed_domains` | array | `["docs.example.com"]` | Opsional: hanya sertakan hasil dari domain ini |

1133| `blocked_domains` | array | `["spam.example.com"]` | Opsional: kecualikan hasil dari domain ini |

1134 

1135##### Agent

1136 

1137Spawn [subagent](/id/sub-agents).

1138 

1139| Bidang | Tipe | Contoh | Deskripsi |

1140| :-------------- | :----- | :------------------------- | :----------------------------------------- |

1141| `prompt` | string | `"Find all API endpoints"` | Tugas untuk agent lakukan |

1142| `description` | string | `"Find API endpoints"` | Deskripsi singkat tugas |

1143| `subagent_type` | string | `"Explore"` | Tipe agent khusus untuk digunakan |

1144| `model` | string | `"sonnet"` | Alias model opsional untuk menimpa default |

1145 

1146##### AskUserQuestion

1147 

1148Mengajukan pertanyaan multiple-choice satu hingga empat kepada pengguna.

1149 

1150| Bidang | Tipe | Contoh | Deskripsi |

1151| :---------- | :----- | :----------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1152| `questions` | array | `[{"question": "Which framework?", "header": "Framework", "options": [{"label": "React"}], "multiSelect": false}]` | Pertanyaan untuk disajikan, masing-masing dengan string `question`, `header` pendek, array `options`, dan flag `multiSelect` opsional |

1153| `answers` | object | `{"Which framework?": "React"}` | Opsional. Memetakan teks pertanyaan ke label opsi yang dipilih. Jawaban multi-select menggabungkan label dengan koma. Claude tidak menetapkan bidang ini; sediakan melalui `updatedInput` untuk menjawab secara programatis |

1154 

1155#### Kontrol keputusan PreToolUse

1156 

1157Hooks `PreToolUse` dapat mengontrol apakah pemanggilan tool dilanjutkan. Tidak seperti hooks lain yang menggunakan bidang `decision` tingkat atas, PreToolUse mengembalikan keputusannya di dalam objek `hookSpecificOutput`. Ini memberikannya kontrol yang lebih kaya: empat hasil (izinkan, tolak, tanya, atau tunda) ditambah kemampuan untuk memodifikasi input tool sebelum eksekusi.

1158 

1159| Bidang | Deskripsi |

1160| :------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1161| `permissionDecision` | `"allow"` melewati prompt izin. `"deny"` mencegah pemanggilan tool. `"ask"` meminta pengguna untuk mengkonfirmasi. `"defer"` keluar dengan baik sehingga tool dapat dilanjutkan nanti. [Deny and ask rules](/id/permissions#manage-permissions) masih berlaku terlepas dari apa yang dikembalikan hook |

1162| `permissionDecisionReason` | Untuk `"allow"` dan `"ask"`, ditampilkan ke pengguna tetapi bukan Claude. Untuk `"deny"`, ditampilkan ke Claude. Untuk `"defer"`, diabaikan |

1163| `updatedInput` | Memodifikasi parameter input tool sebelum eksekusi. Menggantikan seluruh objek input, jadi sertakan bidang yang tidak berubah bersama yang dimodifikasi. Gabungkan dengan `"allow"` untuk persetujuan otomatis, atau `"ask"` untuk menampilkan input yang dimodifikasi ke pengguna. Untuk `"defer"`, diabaikan |

1164| `additionalContext` | String ditambahkan ke konteks Claude bersama hasil tool. Diabaikan ketika `permissionDecision` adalah `"defer"`. Lihat [Tambahkan konteks untuk Claude](#add-context-for-claude) |

1165 

1166Ketika beberapa PreToolUse hooks mengembalikan keputusan berbeda, prioritas adalah `deny` > `defer` > `ask` > `allow`.

1167 

1168Ketika hook mengembalikan `"ask"`, dialog izin yang ditampilkan kepada pengguna mencakup label yang mengidentifikasi dari mana hook berasal: misalnya, `[User]`, `[Project]`, `[Plugin]`, atau `[Local]`. Ini membantu pengguna memahami sumber konfigurasi mana yang meminta konfirmasi.

1169 

1170```json theme={null}

1171{

1172 "hookSpecificOutput": {

1173 "hookEventName": "PreToolUse",

1174 "permissionDecision": "allow",

1175 "permissionDecisionReason": "My reason here",

1176 "updatedInput": {

1177 "field_to_modify": "new value"

1178 },

1179 "additionalContext": "Current environment: production. Proceed with caution."

1180 }

1181}

1182```

1183 

1184`AskUserQuestion` dan `ExitPlanMode` memerlukan interaksi pengguna dan biasanya memblokir dalam [mode non-interaktif](/id/headless) dengan flag `-p`. Mengembalikan `permissionDecision: "allow"` bersama dengan `updatedInput` memenuhi persyaratan itu: hook membaca input tool dari stdin, mengumpulkan jawaban melalui UI Anda sendiri, dan mengembalikannya dalam `updatedInput` sehingga tool dijalankan tanpa meminta. Mengembalikan `"allow"` saja tidak cukup untuk tools ini. Untuk `AskUserQuestion`, kembalikan array `questions` asli dan tambahkan objek [`answers`](#askuserquestion) yang memetakan teks setiap pertanyaan ke jawaban yang dipilih.

1185 

1186<Note>

1187 PreToolUse sebelumnya menggunakan bidang `decision` dan `reason` tingkat atas, tetapi ini sudah usang untuk event ini. Gunakan `hookSpecificOutput.permissionDecision` dan `hookSpecificOutput.permissionDecisionReason` sebagai gantinya. Nilai usang `"approve"` dan `"block"` memetakan ke `"allow"` dan `"deny"` masing-masing. Events lain seperti PostToolUse dan Stop terus menggunakan `decision` dan `reason` tingkat atas sebagai format saat ini mereka.

1188</Note>

1189 

1190#### Tunda pemanggilan tool untuk nanti

1191 

1192`"defer"` adalah untuk integrasi yang menjalankan `claude -p` sebagai subprocess dan membaca output JSON-nya, seperti aplikasi Agent SDK atau UI kustom yang dibangun di atas Claude Code. Ini memungkinkan proses pemanggil itu menjeda Claude pada pemanggilan tool, mengumpulkan input melalui antarmuka miliknya sendiri, dan melanjutkan di mana ia berhenti. Claude Code menghormati nilai ini hanya dalam [mode non-interaktif](/id/headless) dengan flag `-p`. Dalam sesi interaktif itu mencatat peringatan dan mengabaikan hasil hook.

1193 

1194<Note>

1195 Nilai `defer` memerlukan Claude Code v2.1.89 atau lebih baru. Versi sebelumnya tidak mengenalinya dan tool melanjutkan melalui alur izin normal.

1196</Note>

1197 

1198Tool `AskUserQuestion` adalah kasus tipikal: Claude ingin menanyakan sesuatu kepada pengguna, tetapi tidak ada terminal untuk menjawab. Perjalanan bolak-balik bekerja seperti ini:

1199 

12001. Claude memanggil `AskUserQuestion`. Hook `PreToolUse` dijalankan.

12012. Hook mengembalikan `permissionDecision: "defer"`. Tool tidak dijalankan. Proses keluar dengan `stop_reason: "tool_deferred"` dan pemanggilan tool yang tertunda dipertahankan dalam transkrip.

12023. Proses pemanggil membaca `deferred_tool_use` dari hasil SDK, menampilkan pertanyaan di UI miliknya sendiri, dan menunggu jawaban.

12034. Proses pemanggil menjalankan `claude -p --resume <session-id>`. Pemanggilan tool yang sama menjalankan `PreToolUse` lagi.

12045. Hook mengembalikan `permissionDecision: "allow"` dengan jawaban dalam `updatedInput`. Tool dijalankan dan Claude melanjutkan.

1205 

1206Bidang `deferred_tool_use` membawa `id`, `name`, dan `input` tool. `input` adalah parameter yang Claude hasilkan untuk pemanggilan tool, ditangkap sebelum eksekusi:

1207 

1208```json theme={null}

1209{

1210 "type": "result",

1211 "subtype": "success",

1212 "stop_reason": "tool_deferred",

1213 "session_id": "abc123",

1214 "deferred_tool_use": {

1215 "id": "toolu_01abc",

1216 "name": "AskUserQuestion",

1217 "input": { "questions": [{ "question": "Which framework?", "header": "Framework", "options": [{"label": "React"}, {"label": "Vue"}], "multiSelect": false }] }

1218 }

1219}

1220```

1221 

1222Tidak ada timeout atau batas retry. Sesi tetap di disk sampai Anda melanjutkannya, tunduk pada penyapuan retensi [`cleanupPeriodDays`](/id/settings#available-settings) yang menghapus file sesi setelah 30 hari secara default. Jika jawaban tidak siap saat Anda melanjutkan, hook dapat mengembalikan `"defer"` lagi dan proses keluar dengan cara yang sama. Proses pemanggil mengontrol kapan harus memecah loop dengan akhirnya mengembalikan `"allow"` atau `"deny"` dari hook.

1223 

1224`"defer"` hanya bekerja ketika Claude membuat satu pemanggilan tool dalam giliran. Jika Claude membuat beberapa pemanggilan tool sekaligus, `"defer"` diabaikan dengan peringatan dan tool melanjutkan melalui alur izin normal. Batasan ada karena resume hanya dapat menjalankan kembali satu tool: tidak ada cara untuk menunda satu pemanggilan dari batch tanpa meninggalkan yang lain tidak terselesaikan.

1225 

1226Jika tool yang ditunda tidak lagi tersedia saat Anda melanjutkan, proses keluar dengan `stop_reason: "tool_deferred_unavailable"` dan `is_error: true` sebelum hook dijalankan. Ini terjadi ketika server MCP yang menyediakan tool tidak terhubung untuk sesi yang dilanjutkan. Payload `deferred_tool_use` masih disertakan sehingga Anda dapat mengidentifikasi tool mana yang hilang.

1227 

1228<Warning>

1229 `--resume` tidak mengembalikan mode izin dari sesi sebelumnya. Teruskan flag `--permission-mode` yang sama pada resume yang aktif saat tool ditunda. Claude Code mencatat peringatan jika mode berbeda.

1230</Warning>

1231 

1232### PermissionRequest

1233 

1234Dijalankan ketika pengguna ditampilkan dialog izin.

1235Gunakan [PermissionRequest decision control](#permissionrequest-decision-control) untuk mengizinkan atau menolak atas nama pengguna.

1236 

1237Cocok pada nama tool, nilai yang sama seperti PreToolUse.

1238 

1239#### Input PermissionRequest

1240 

1241PermissionRequest hooks menerima bidang `tool_name` dan `tool_input` seperti PreToolUse hooks, tetapi tanpa `tool_use_id`. Array `permission_suggestions` opsional berisi opsi "selalu izinkan" yang biasanya dilihat pengguna dalam dialog izin. Perbedaannya adalah kapan hook dijalankan: PermissionRequest hooks dijalankan ketika dialog izin akan ditampilkan ke pengguna, sementara PreToolUse hooks dijalankan sebelum eksekusi tool terlepas dari status izin.

1242 

1243```json theme={null}

1244{

1245 "session_id": "abc123",

1246 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1247 "cwd": "/Users/...",

1248 "permission_mode": "default",

1249 "hook_event_name": "PermissionRequest",

1250 "tool_name": "Bash",

1251 "tool_input": {

1252 "command": "rm -rf node_modules",

1253 "description": "Remove node_modules directory"

1254 },

1255 "permission_suggestions": [

1256 {

1257 "type": "addRules",

1258 "rules": [{ "toolName": "Bash", "ruleContent": "rm -rf node_modules" }],

1259 "behavior": "allow",

1260 "destination": "localSettings"

1261 }

1262 ]

1263}

1264```

1265 

1266#### Kontrol keputusan PermissionRequest

1267 

1268Hooks `PermissionRequest` dapat mengizinkan atau menolak permintaan izin. Selain [bidang output JSON](#json-output) yang tersedia untuk semua hooks, skrip hook Anda dapat mengembalikan objek `decision` dengan bidang spesifik event ini:

1269 

1270| Bidang | Deskripsi |

1271| :------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1272| `behavior` | `"allow"` memberikan izin, `"deny"` menolaknya. [Deny and ask rules](/id/permissions#manage-permissions) masih dievaluasi, jadi hook yang mengembalikan `"allow"` tidak menimpa aturan deny yang cocok |

1273| `updatedInput` | Untuk `"allow"` saja: memodifikasi parameter input tool sebelum eksekusi. Menggantikan seluruh objek input, jadi sertakan bidang yang tidak berubah bersama yang dimodifikasi. Input yang dimodifikasi dievaluasi ulang terhadap aturan deny dan ask |

1274| `updatedPermissions` | Untuk `"allow"` saja: array dari [permission update entries](#permission-update-entries) untuk diterapkan, seperti menambahkan aturan allow atau mengubah mode izin sesi |

1275| `message` | Untuk `"deny"` saja: memberitahu Claude mengapa izin ditolak |

1276| `interrupt` | Untuk `"deny"` saja: jika `true`, menghentikan Claude |

1277 

1278```json theme={null}

1279{

1280 "hookSpecificOutput": {

1281 "hookEventName": "PermissionRequest",

1282 "decision": {

1283 "behavior": "allow",

1284 "updatedInput": {

1285 "command": "npm run lint"

1286 }

1287 }

1288 }

1289}

1290```

1291 

1292#### Permission update entries

1293 

1294Bidang output `updatedPermissions` dan bidang input [`permission_suggestions`](#permissionrequest-input) keduanya menggunakan array objek entry yang sama. Setiap entry memiliki `type` yang menentukan bidang lainnya, dan `destination` yang mengontrol di mana perubahan ditulis.

1295 

1296| `type` | Bidang | Efek |

1297| :------------------ | :--------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1298| `addRules` | `rules`, `behavior`, `destination` | Menambahkan aturan izin. `rules` adalah array dari objek `{toolName, ruleContent?}`. Hilangkan `ruleContent` untuk mencocokkan seluruh tool. `behavior` adalah `"allow"`, `"deny"`, atau `"ask"` |

1299| `replaceRules` | `rules`, `behavior`, `destination` | Mengganti semua aturan dari `behavior` yang diberikan di `destination` dengan `rules` yang disediakan |

1300| `removeRules` | `rules`, `behavior`, `destination` | Menghapus aturan yang cocok dari `behavior` yang diberikan |

1301| `setMode` | `mode`, `destination` | Mengubah mode izin. Mode yang valid adalah `default`, `acceptEdits`, `dontAsk`, `bypassPermissions`, dan `plan` |

1302| `addDirectories` | `directories`, `destination` | Menambahkan direktori kerja. `directories` adalah array dari string path |

1303| `removeDirectories` | `directories`, `destination` | Menghapus direktori kerja |

1304 

1305<Note>

1306 `setMode` dengan `bypassPermissions` hanya berlaku jika sesi diluncurkan dengan mode bypass sudah tersedia: `--dangerously-skip-permissions`, `--permission-mode bypassPermissions`, `--allow-dangerously-skip-permissions`, atau `permissions.defaultMode: "bypassPermissions"` dalam pengaturan, dan mode tidak dinonaktifkan oleh [`permissions.disableBypassPermissionsMode`](/id/permissions#managed-settings). Jika tidak, update adalah no-op. `bypassPermissions` tidak pernah dipertahankan sebagai `defaultMode` terlepas dari `destination`.

1307</Note>

1308 

1309Bidang `destination` pada setiap entry menentukan apakah perubahan tetap dalam memori atau persisten ke file pengaturan.

1310 

1311| `destination` | Menulis ke |

1312| :---------------- | :----------------------------------------------- |

1313| `session` | hanya dalam memori, dibuang ketika sesi berakhir |

1314| `localSettings` | `.claude/settings.local.json` |

1315| `projectSettings` | `.claude/settings.json` |

1316| `userSettings` | `~/.claude/settings.json` |

1317 

1318Hook dapat mengembalikan salah satu dari `permission_suggestions` yang diterima sebagai output `updatedPermissions` miliknya sendiri, yang setara dengan pengguna memilih opsi "selalu izinkan" itu dalam dialog.

1319 

1320### PostToolUse

1321 

1322Dijalankan segera setelah tool selesai dengan sukses.

1323 

1324Cocok pada nama tool, nilai yang sama seperti PreToolUse.

1325 

1326#### Input PostToolUse

1327 

1328Hooks `PostToolUse` dijalankan setelah tool sudah dijalankan dengan sukses. Input mencakup `tool_input`, argumen yang dikirim ke tool, dan `tool_response`, hasil yang dikembalikan. Skema yang tepat untuk keduanya tergantung pada tool.

1329 

1330```json theme={null}

1331{

1332 "session_id": "abc123",

1333 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1334 "cwd": "/Users/...",

1335 "permission_mode": "default",

1336 "hook_event_name": "PostToolUse",

1337 "tool_name": "Write",

1338 "tool_input": {

1339 "file_path": "/path/to/file.txt",

1340 "content": "file content"

1341 },

1342 "tool_response": {

1343 "filePath": "/path/to/file.txt",

1344 "success": true

1345 },

1346 "tool_use_id": "toolu_01ABC123...",

1347 "duration_ms": 12

1348}

1349```

1350 

1351| Bidang | Deskripsi |

1352| :------------ | :------------------------------------------------------------------------------------------------------------------------ |

1353| `duration_ms` | Opsional. Waktu eksekusi tool dalam milidetik. Mengecualikan waktu yang dihabiskan dalam prompt izin dan PreToolUse hooks |

1354 

1355#### Kontrol keputusan PostToolUse

1356 

1357Hooks `PostToolUse` dapat memberikan umpan balik ke Claude setelah eksekusi tool. Selain [bidang output JSON](#json-output) yang tersedia untuk semua hooks, skrip hook Anda dapat mengembalikan bidang spesifik event ini:

1358 

1359| Bidang | Deskripsi |

1360| :--------------------- | :------------------------------------------------------------------------------------------------------------------------ |

1361| `decision` | `"block"` meminta Claude dengan `reason`. Hilangkan untuk mengizinkan tindakan dilanjutkan |

1362| `reason` | Penjelasan ditampilkan ke Claude saat `decision` adalah `"block"` |

1363| `additionalContext` | String ditambahkan ke konteks Claude bersama hasil tool. Lihat [Tambahkan konteks untuk Claude](#add-context-for-claude) |

1364| `updatedToolOutput` | Mengganti output tool dengan nilai yang disediakan sebelum dikirim ke Claude. Nilai harus cocok dengan bentuk output tool |

1365| `updatedMCPToolOutput` | Mengganti output untuk [MCP tools](#match-mcp-tools) saja. Lebih suka `updatedToolOutput`, yang bekerja untuk semua tools |

1366 

1367Contoh di bawah mengganti output pemanggilan `Bash`. Nilai pengganti cocok dengan bentuk output tool `Bash`:

1368 

1369```json theme={null}

1370{

1371 "hookSpecificOutput": {

1372 "hookEventName": "PostToolUse",

1373 "additionalContext": "Additional information for Claude",

1374 "updatedToolOutput": {

1375 "stdout": "[redacted]",

1376 "stderr": "",

1377 "interrupted": false,

1378 "isImage": false

1379 }

1380 }

1381}

1382```

1383 

1384<Warning>

1385 `updatedToolOutput` hanya mengubah apa yang dilihat Claude. Tool sudah dijalankan pada saat hook dijalankan, jadi file apa pun yang ditulis, perintah yang dijalankan, atau permintaan jaringan yang dikirim sudah berlaku. Telemetri seperti span tool OpenTelemetry dan acara analitik juga menangkap output asli sebelum hook dijalankan. Untuk mencegah atau memodifikasi pemanggilan tool sebelum dijalankan, gunakan hook [PreToolUse](#pretooluse) sebagai gantinya.

1386 

1387 Nilai pengganti harus cocok dengan bentuk output tool. Tools bawaan mengembalikan objek terstruktur daripada string biasa. Misalnya, `Bash` mengembalikan objek dengan bidang `stdout`, `stderr`, `interrupted`, dan `isImage`. Untuk tools bawaan, nilai yang tidak cocok dengan skema output tool diabaikan dan output asli digunakan. Output tool MCP dilewatkan tanpa validasi skema. Menghapus detail kesalahan yang Claude butuhkan dapat menyebabkannya melanjutkan dengan asumsi yang salah.

1388</Warning>

1389 

1390### PostToolUseFailure

1391 

1392Dijalankan ketika eksekusi tool gagal. Event ini dijalankan untuk pemanggilan tool yang melempar kesalahan atau mengembalikan hasil kegagalan. Gunakan ini untuk mencatat kegagalan, mengirim alert, atau memberikan umpan balik korektif ke Claude.

1393 

1394Cocok pada nama tool, nilai yang sama seperti PreToolUse.

1395 

1396#### Input PostToolUseFailure

1397 

1398PostToolUseFailure hooks menerima bidang `tool_name` dan `tool_input` yang sama seperti PostToolUse, bersama dengan informasi kesalahan sebagai bidang tingkat atas:

1399 

1400```json theme={null}

1401{

1402 "session_id": "abc123",

1403 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1404 "cwd": "/Users/...",

1405 "permission_mode": "default",

1406 "hook_event_name": "PostToolUseFailure",

1407 "tool_name": "Bash",

1408 "tool_input": {

1409 "command": "npm test",

1410 "description": "Run test suite"

1411 },

1412 "tool_use_id": "toolu_01ABC123...",

1413 "error": "Command exited with non-zero status code 1",

1414 "is_interrupt": false,

1415 "duration_ms": 4187

1416}

1417```

1418 

1419| Bidang | Deskripsi |

1420| :------------- | :------------------------------------------------------------------------------------------------------------------------ |

1421| `error` | String menjelaskan apa yang salah |

1422| `is_interrupt` | Boolean opsional menunjukkan apakah kegagalan disebabkan oleh interupsi pengguna |

1423| `duration_ms` | Opsional. Waktu eksekusi tool dalam milidetik. Mengecualikan waktu yang dihabiskan dalam prompt izin dan PreToolUse hooks |

1424 

1425#### Kontrol keputusan PostToolUseFailure

1426 

1427Hooks `PostToolUseFailure` dapat memberikan konteks ke Claude setelah kegagalan tool. Selain [bidang output JSON](#json-output) yang tersedia untuk semua hooks, skrip hook Anda dapat mengembalikan bidang spesifik event ini:

1428 

1429| Bidang | Deskripsi |

1430| :------------------ | :---------------------------------------------------------------------------------------------------------------------- |

1431| `additionalContext` | String ditambahkan ke konteks Claude bersama kesalahan. Lihat [Tambahkan konteks untuk Claude](#add-context-for-claude) |

1432 

1433```json theme={null}

1434{

1435 "hookSpecificOutput": {

1436 "hookEventName": "PostToolUseFailure",

1437 "additionalContext": "Additional information about the failure for Claude"

1438 }

1439}

1440```

1441 

1442### PostToolBatch

1443 

1444Dijalankan sekali setelah setiap tool call dalam batch telah terselesaikan, sebelum Claude Code mengirimkan permintaan berikutnya ke model. `PostToolUse` dijalankan sekali per tool, yang berarti dijalankan secara bersamaan ketika Claude membuat pemanggilan tool paralel. `PostToolBatch` dijalankan tepat sekali dengan batch lengkap, jadi ini adalah tempat yang tepat untuk menyuntikkan konteks yang bergantung pada set tools yang dijalankan daripada pada tool tunggal. Tidak ada matcher untuk event ini.

1445 

1446#### Input PostToolBatch

1447 

1448Selain [bidang input umum](#common-input-fields), PostToolBatch hooks menerima `tool_calls`, array yang menjelaskan setiap pemanggilan tool dalam batch:

1449 

1450```json theme={null}

1451{

1452 "session_id": "abc123",

1453 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1454 "cwd": "/Users/...",

1455 "permission_mode": "default",

1456 "hook_event_name": "PostToolBatch",

1457 "tool_calls": [

1458 {

1459 "tool_name": "Read",

1460 "tool_input": {"file_path": "/.../ledger/accounts.py"},

1461 "tool_use_id": "toolu_01...",

1462 "tool_response": " 1\tfrom __future__ import annotations\n 2\t..."

1463 },

1464 {

1465 "tool_name": "Read",

1466 "tool_input": {"file_path": "/.../ledger/transactions.py"},

1467 "tool_use_id": "toolu_02...",

1468 "tool_response": " 1\tfrom __future__ import annotations\n 2\t..."

1469 }

1470 ]

1471}

1472```

1473 

1474`tool_response` berisi konten yang sama yang diterima model dalam blok `tool_result` yang sesuai. Nilainya adalah string yang diserialisasi atau array blok konten, persis seperti yang dikeluarkan tool. Untuk `Read`, itu berarti teks dengan awalan nomor baris daripada konten file mentah. Respons dapat besar, jadi hanya parse bidang yang Anda butuhkan.

1475 

1476<Note>

1477 Bentuk `tool_response` berbeda dari `PostToolUse`. `PostToolUse` meneruskan objek `Output` terstruktur tool, seperti `{filePath: "...", success: true}` untuk `Write`; `PostToolBatch` meneruskan konten `tool_result` yang diserialisasi yang dilihat model.

1478</Note>

1479 

1480#### Kontrol keputusan PostToolBatch

1481 

1482Hooks `PostToolBatch` dapat menyuntikkan konteks untuk Claude. Selain [bidang output JSON](#json-output) yang tersedia untuk semua hooks, skrip hook Anda dapat mengembalikan bidang spesifik event ini:

1483 

1484| Bidang | Deskripsi |

1485| :------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

1486| `additionalContext` | String konteks yang disuntikkan sekali sebelum panggilan model berikutnya. Lihat [Tambahkan konteks untuk Claude](#add-context-for-claude) untuk detail pengiriman, apa yang harus dimasukkan, dan cara sesi yang dilanjutkan menangani nilai masa lalu |

1487 

1488```json theme={null}

1489{

1490 "hookSpecificOutput": {

1491 "hookEventName": "PostToolBatch",

1492 "additionalContext": "These files are part of the ledger module. Run pytest before marking the task complete."

1493 }

1494}

1495```

1496 

1497Mengembalikan `decision: "block"` atau `continue: false` menghentikan loop agentic sebelum panggilan model berikutnya.

1498 

1499### PermissionDenied

1500 

1501Dijalankan ketika pengklasifikasi [mode otomatis](/id/permission-modes#eliminate-prompts-with-auto-mode) menolak pemanggilan tool. Hook ini hanya dijalankan dalam mode otomatis: itu tidak dijalankan ketika Anda secara manual menolak dialog izin, ketika hook `PreToolUse` memblokir pemanggilan, atau ketika aturan `deny` cocok. Gunakan untuk mencatat penolakan pengklasifikasi, menyesuaikan konfigurasi, atau memberitahu model itu dapat mencoba lagi pemanggilan tool.

1502 

1503Cocok pada nama tool, nilai yang sama seperti PreToolUse.

1504 

1505#### Input PermissionDenied

1506 

1507Selain [bidang input umum](#common-input-fields), PermissionDenied hooks menerima `tool_name`, `tool_input`, `tool_use_id`, dan `reason`.

1508 

1509```json theme={null}

1510{

1511 "session_id": "abc123",

1512 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1513 "cwd": "/Users/...",

1514 "permission_mode": "auto",

1515 "hook_event_name": "PermissionDenied",

1516 "tool_name": "Bash",

1517 "tool_input": {

1518 "command": "rm -rf /tmp/build",

1519 "description": "Clean build directory"

1520 },

1521 "tool_use_id": "toolu_01ABC123...",

1522 "reason": "Auto mode denied: command targets a path outside the project"

1523}

1524```

1525 

1526| Bidang | Deskripsi |

1527| :------- | :------------------------------------------------------------------ |

1528| `reason` | Penjelasan pengklasifikasi tentang mengapa pemanggilan tool ditolak |

1529 

1530#### Kontrol keputusan PermissionDenied

1531 

1532PermissionDenied hooks dapat memberitahu model itu dapat mencoba lagi pemanggilan tool yang ditolak. Kembalikan objek JSON dengan `hookSpecificOutput.retry` diatur ke `true`:

1533 

1534```json theme={null}

1535{

1536 "hookSpecificOutput": {

1537 "hookEventName": "PermissionDenied",

1538 "retry": true

1539 }

1540}

1541```

1542 

1543Ketika `retry` adalah `true`, Claude Code menambahkan pesan ke percakapan memberitahu model itu dapat mencoba lagi pemanggilan tool. Penolakan itu sendiri tidak dibatalkan. Jika hook Anda tidak mengembalikan JSON, atau mengembalikan `retry: false`, penolakan tetap dan model menerima pesan penolakan asli.

1544 

1545### Notification

1546 

1547Dijalankan ketika Claude Code mengirimkan notifikasi. Cocok pada tipe notifikasi: `permission_prompt`, `idle_prompt`, `auth_success`, `elicitation_dialog`, `elicitation_complete`, `elicitation_response`. Hilangkan matcher untuk menjalankan hooks untuk semua tipe notifikasi.

1548 

1549Gunakan matchers terpisah untuk menjalankan handler berbeda tergantung pada tipe notifikasi. Konfigurasi ini memicu skrip alert khusus izin ketika Claude memerlukan persetujuan izin dan notifikasi berbeda ketika Claude telah idle:

1550 

1551```json theme={null}

1552{

1553 "hooks": {

1554 "Notification": [

1555 {

1556 "matcher": "permission_prompt",

1557 "hooks": [

1558 {

1559 "type": "command",

1560 "command": "/path/to/permission-alert.sh"

1561 }

1562 ]

1563 },

1564 {

1565 "matcher": "idle_prompt",

1566 "hooks": [

1567 {

1568 "type": "command",

1569 "command": "/path/to/idle-notification.sh"

1570 }

1571 ]

1572 }

1573 ]

1574 }

1575}

1576```

1577 

1578#### Input Notification

1579 

1580Selain [bidang input umum](#common-input-fields), Notification hooks menerima `message` dengan teks notifikasi, `title` opsional, dan `notification_type` menunjukkan tipe mana yang dijalankan.

1581 

1582```json theme={null}

1583{

1584 "session_id": "abc123",

1585 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1586 "cwd": "/Users/...",

1587 "hook_event_name": "Notification",

1588 "message": "Claude needs your permission to use Bash",

1589 "title": "Permission needed",

1590 "notification_type": "permission_prompt"

1591}

1592```

1593 

1594Notification hooks tidak dapat memblokir atau memodifikasi notifikasi. Mereka dimaksudkan untuk efek samping seperti meneruskan notifikasi ke layanan eksternal. [Bidang output JSON](#json-output) umum seperti `systemMessage` berlaku.

1595 

1596### SubagentStart

1597 

1598Dijalankan ketika subagent Claude Code dispawn melalui tool Agent. Mendukung matchers untuk memfilter berdasarkan nama tipe agent (agent bawaan seperti `general-purpose`, `Explore`, `Plan`, atau nama agent kustom dari `.claude/agents/`).

1599 

1600#### Input SubagentStart

1601 

1602Selain [bidang input umum](#common-input-fields), SubagentStart hooks menerima `agent_id` dengan pengenal unik untuk subagent dan `agent_type` dengan nama agent (agent bawaan seperti `"general-purpose"`, `"Explore"`, `"Plan"`, atau nama agent kustom).

1603 

1604```json theme={null}

1605{

1606 "session_id": "abc123",

1607 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1608 "cwd": "/Users/...",

1609 "hook_event_name": "SubagentStart",

1610 "agent_id": "agent-abc123",

1611 "agent_type": "Explore"

1612}

1613```

1614 

1615SubagentStart hooks tidak dapat memblokir pembuatan subagent, tetapi mereka dapat menyuntikkan konteks ke subagent. Selain [bidang output JSON](#json-output) yang tersedia untuk semua hooks, Anda dapat mengembalikan:

1616 

1617| Bidang | Deskripsi |

1618| :------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------- |

1619| `additionalContext` | String ditambahkan ke konteks subagent pada awal percakapannya, sebelum prompt pertamanya. Lihat [Tambahkan konteks untuk Claude](#add-context-for-claude) |

1620 

1621```json theme={null}

1622{

1623 "hookSpecificOutput": {

1624 "hookEventName": "SubagentStart",

1625 "additionalContext": "Follow security guidelines for this task"

1626 }

1627}

1628```

1629 

1630### SubagentStop

1631 

1632Dijalankan ketika subagent Claude Code telah selesai merespons. Cocok pada tipe agent, nilai yang sama seperti SubagentStart.

1633 

1634#### Input SubagentStop

1635 

1636Selain [bidang input umum](#common-input-fields), SubagentStop hooks menerima `stop_hook_active`, `agent_id`, `agent_type`, `agent_transcript_path`, dan `last_assistant_message`. Bidang `agent_type` adalah nilai yang digunakan untuk pemfilteran matcher. `transcript_path` adalah transkrip sesi utama, sementara `agent_transcript_path` adalah transkrip subagent sendiri yang disimpan dalam folder `subagents/` bersarang. Bidang `last_assistant_message` berisi konten teks respons akhir subagent, jadi hooks dapat mengaksesnya tanpa mengurai file transkrip.

1637 

1638```json theme={null}

1639{

1640 "session_id": "abc123",

1641 "transcript_path": "~/.claude/projects/.../abc123.jsonl",

1642 "cwd": "/Users/...",

1643 "permission_mode": "default",

1644 "hook_event_name": "SubagentStop",

1645 "stop_hook_active": false,

1646 "agent_id": "def456",

1647 "agent_type": "Explore",

1648 "agent_transcript_path": "~/.claude/projects/.../abc123/subagents/agent-def456.jsonl",

1649 "last_assistant_message": "Analysis complete. Found 3 potential issues..."

1650}

1651```

1652 

1653SubagentStop hooks menggunakan format kontrol keputusan yang sama seperti [Stop hooks](#stop-decision-control).

1654 

1655### TaskCreated

1656 

1657Dijalankan ketika tugas sedang dibuat melalui tool `TaskCreate`. Gunakan ini untuk menegakkan konvensi penamaan, memerlukan deskripsi tugas, atau mencegah tugas tertentu dari dibuat.

1658 

1659Ketika hook `TaskCreated` keluar dengan kode 2, tugas tidak dibuat dan pesan stderr diumpankan kembali ke model sebagai umpan balik. Untuk menghentikan teammate sepenuhnya alih-alih menjalankannya kembali, kembalikan JSON dengan `{"continue": false, "stopReason": "..."}`. TaskCreated hooks tidak mendukung matchers dan dijalankan pada setiap kemunculan.

1660 

1661#### Input TaskCreated

1662 

1663Selain [bidang input umum](#common-input-fields), TaskCreated hooks menerima `task_id`, `task_subject`, dan secara opsional `task_description`, `teammate_name`, dan `team_name`.

1664 

1665```json theme={null}

1666{

1667 "session_id": "abc123",

1668 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1669 "cwd": "/Users/...",

1670 "permission_mode": "default",

1671 "hook_event_name": "TaskCreated",

1672 "task_id": "task-001",

1673 "task_subject": "Implement user authentication",

1674 "task_description": "Add login and signup endpoints",

1675 "teammate_name": "implementer",

1676 "team_name": "my-project"

1677}

1678```

1679 

1680| Bidang | Deskripsi |

1681| :----------------- | :-------------------------------------------------- |

1682| `task_id` | Pengenal tugas yang sedang dibuat |

1683| `task_subject` | Judul tugas |

1684| `task_description` | Deskripsi detail tugas. Mungkin tidak ada |

1685| `teammate_name` | Nama teammate yang membuat tugas. Mungkin tidak ada |

1686| `team_name` | Nama team. Mungkin tidak ada |

1687 

1688#### Kontrol keputusan TaskCreated

1689 

1690TaskCreated hooks mendukung dua cara untuk mengontrol pembuatan tugas:

1691 

1692* **Kode keluar 2**: tugas tidak dibuat dan pesan stderr diumpankan kembali ke model sebagai umpan balik.

1693* **JSON `{"continue": false, "stopReason": "..."}`**: menghentikan teammate sepenuhnya, mencocokkan perilaku hook `Stop`. `stopReason` ditampilkan ke pengguna.

1694 

1695Contoh ini memblokir tugas yang subjeknya tidak mengikuti format yang diperlukan:

1696 

1697```bash theme={null}

1698#!/bin/bash

1699INPUT=$(cat)

1700TASK_SUBJECT=$(echo "$INPUT" | jq -r '.task_subject')

1701 

1702if [[ ! "$TASK_SUBJECT" =~ ^\[TICKET-[0-9]+\] ]]; then

1703 echo "Task subject must start with a ticket number, e.g. '[TICKET-123] Add feature'" >&2

1704 exit 2

1705fi

1706 

1707exit 0

1708```

1709 

1710### TaskCompleted

1711 

1712Dijalankan ketika tugas sedang ditandai sebagai selesai. Ini dijalankan dalam dua situasi: ketika agent apa pun secara eksplisit menandai tugas sebagai selesai melalui tool TaskUpdate, atau ketika [agent team](/id/agent-teams) teammate menyelesaikan giliran dengan tugas yang sedang berlangsung. Gunakan ini untuk menegakkan kriteria penyelesaian seperti passing tests atau lint checks sebelum tugas dapat ditutup.

1713 

1714Ketika hook `TaskCompleted` keluar dengan kode 2, tugas tidak ditandai sebagai selesai dan pesan stderr diumpankan kembali ke model sebagai umpan balik. Untuk menghentikan teammate sepenuhnya alih-alih menjalankannya kembali, kembalikan JSON dengan `{"continue": false, "stopReason": "..."}`. TaskCompleted hooks tidak mendukung matchers dan dijalankan pada setiap kemunculan.

1715 

1716#### Input TaskCompleted

1717 

1718Selain [bidang input umum](#common-input-fields), TaskCompleted hooks menerima `task_id`, `task_subject`, dan secara opsional `task_description`, `teammate_name`, dan `team_name`.

1719 

1720```json theme={null}

1721{

1722 "session_id": "abc123",

1723 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1724 "cwd": "/Users/...",

1725 "permission_mode": "default",

1726 "hook_event_name": "TaskCompleted",

1727 "task_id": "task-001",

1728 "task_subject": "Implement user authentication",

1729 "task_description": "Add login and signup endpoints",

1730 "teammate_name": "implementer",

1731 "team_name": "my-project"

1732}

1733```

1734 

1735| Bidang | Deskripsi |

1736| :----------------- | :-------------------------------------------------------- |

1737| `task_id` | Pengenal tugas yang sedang diselesaikan |

1738| `task_subject` | Judul tugas |

1739| `task_description` | Deskripsi detail tugas. Mungkin tidak ada |

1740| `teammate_name` | Nama teammate yang menyelesaikan tugas. Mungkin tidak ada |

1741| `team_name` | Nama team. Mungkin tidak ada |

1742 

1743#### Kontrol keputusan TaskCompleted

1744 

1745TaskCompleted hooks mendukung dua cara untuk mengontrol penyelesaian tugas:

1746 

1747* **Kode keluar 2**: tugas tidak ditandai sebagai selesai dan pesan stderr diumpankan kembali ke model sebagai umpan balik.

1748* **JSON `{"continue": false, "stopReason": "..."}`**: menghentikan teammate sepenuhnya, mencocokkan perilaku hook `Stop`. `stopReason` ditampilkan ke pengguna.

1749 

1750Contoh ini menjalankan tests dan memblokir penyelesaian tugas jika gagal:

1751 

1752```bash theme={null}

1753#!/bin/bash

1754INPUT=$(cat)

1755TASK_SUBJECT=$(echo "$INPUT" | jq -r '.task_subject')

1756 

1757# Jalankan test suite

1758if ! npm test 2>&1; then

1759 echo "Tests not passing. Fix failing tests before completing: $TASK_SUBJECT" >&2

1760 exit 2

1761fi

1762 

1763exit 0

1764```

1765 

1766### Stop

1767 

1768Dijalankan ketika agent Claude Code utama telah selesai merespons. Tidak dijalankan jika penghentian terjadi karena interupsi pengguna. Kesalahan API menjalankan [StopFailure](#stopfailure) sebagai gantinya.

1769 

1770#### Input Stop

1771 

1772Selain [bidang input umum](#common-input-fields), Stop hooks menerima `stop_hook_active` dan `last_assistant_message`. Bidang `stop_hook_active` adalah `true` ketika Claude Code sudah melanjutkan sebagai hasil dari stop hook. Periksa nilai ini atau proses transkrip untuk mencegah Claude Code berjalan tanpa batas. Bidang `last_assistant_message` berisi konten teks respons akhir Claude, jadi hooks dapat mengaksesnya tanpa mengurai file transkrip.

1773 

1774```json theme={null}

1775{

1776 "session_id": "abc123",

1777 "transcript_path": "~/.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1778 "cwd": "/Users/...",

1779 "permission_mode": "default",

1780 "hook_event_name": "Stop",

1781 "stop_hook_active": true,

1782 "last_assistant_message": "I've completed the refactoring. Here's a summary..."

1783}

1784```

1785 

1786#### Kontrol keputusan Stop

1787 

1788Hooks `Stop` dan `SubagentStop` dapat mengontrol apakah Claude melanjutkan. Selain [bidang output JSON](#json-output) yang tersedia untuk semua hooks, skrip hook Anda dapat mengembalikan bidang spesifik event ini:

1789 

1790| Bidang | Deskripsi |

1791| :--------- | :-------------------------------------------------------------------------------------------- |

1792| `decision` | `"block"` mencegah Claude berhenti. Hilangkan untuk mengizinkan Claude berhenti |

1793| `reason` | Diperlukan saat `decision` adalah `"block"`. Memberitahu Claude mengapa itu harus melanjutkan |

1794 

1795```json theme={null}

1796{

1797 "decision": "block",

1798 "reason": "Must be provided when Claude is blocked from stopping"

1799}

1800```

1801 

1802### StopFailure

1803 

1804Dijalankan alih-alih [Stop](#stop) ketika giliran berakhir karena kesalahan API. Output dan kode keluar diabaikan. Gunakan ini untuk mencatat kegagalan, mengirim alert, atau mengambil tindakan pemulihan ketika Claude tidak dapat menyelesaikan respons karena rate limits, masalah autentikasi, atau kesalahan API lainnya.

1805 

1806#### Input StopFailure

1807 

1808Selain [bidang input umum](#common-input-fields), StopFailure hooks menerima `error`, `error_details` opsional, dan `last_assistant_message` opsional. Bidang `error` mengidentifikasi tipe kesalahan dan digunakan untuk pemfilteran matcher.

1809 

1810| Bidang | Deskripsi |

1811| :----------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1812| `error` | Tipe kesalahan: `rate_limit`, `authentication_failed`, `oauth_org_not_allowed`, `billing_error`, `invalid_request`, `server_error`, `max_output_tokens`, atau `unknown` |

1813| `error_details` | Detail tambahan tentang kesalahan, ketika tersedia |

1814| `last_assistant_message` | Teks kesalahan yang dirender ditampilkan dalam percakapan. Tidak seperti `Stop` dan `SubagentStop`, di mana bidang ini menyimpan output percakapan Claude, untuk `StopFailure` itu berisi string kesalahan API itu sendiri, seperti `"API Error: Rate limit reached"` |

1815 

1816```json theme={null}

1817{

1818 "session_id": "abc123",

1819 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1820 "cwd": "/Users/...",

1821 "hook_event_name": "StopFailure",

1822 "error": "rate_limit",

1823 "error_details": "429 Too Many Requests",

1824 "last_assistant_message": "API Error: Rate limit reached"

1825}

1826```

1827 

1828StopFailure hooks tidak memiliki kontrol keputusan. Mereka dijalankan untuk tujuan notifikasi dan logging saja.

1829 

1830### TeammateIdle

1831 

1832Dijalankan ketika [agent team](/id/agent-teams) teammate akan menjadi idle setelah menyelesaikan giliran. Gunakan ini untuk menegakkan quality gates sebelum teammate berhenti bekerja, seperti memerlukan passing lint checks atau memverifikasi bahwa file output ada.

1833 

1834Ketika hook `TeammateIdle` keluar dengan kode 2, teammate menerima pesan stderr sebagai umpan balik dan terus bekerja alih-alih menjadi idle. Untuk menghentikan teammate sepenuhnya alih-alih menjalankannya kembali, kembalikan JSON dengan `{"continue": false, "stopReason": "..."}`. TeammateIdle hooks tidak mendukung matchers dan dijalankan pada setiap kemunculan.

1835 

1836#### Input TeammateIdle

1837 

1838Selain [bidang input umum](#common-input-fields), TeammateIdle hooks menerima `teammate_name` dan `team_name`.

1839 

1840```json theme={null}

1841{

1842 "session_id": "abc123",

1843 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1844 "cwd": "/Users/...",

1845 "permission_mode": "default",

1846 "hook_event_name": "TeammateIdle",

1847 "teammate_name": "researcher",

1848 "team_name": "my-project"

1849}

1850```

1851 

1852| Bidang | Deskripsi |

1853| :-------------- | :----------------------------------- |

1854| `teammate_name` | Nama teammate yang akan menjadi idle |

1855| `team_name` | Nama team |

1856 

1857#### Kontrol keputusan TeammateIdle

1858 

1859TeammateIdle hooks mendukung dua cara untuk mengontrol perilaku teammate:

1860 

1861* **Kode keluar 2**: teammate menerima pesan stderr sebagai umpan balik dan terus bekerja alih-alih menjadi idle.

1862* **JSON `{"continue": false, "stopReason": "..."}`**: menghentikan teammate sepenuhnya, mencocokkan perilaku hook `Stop`. `stopReason` ditampilkan ke pengguna.

1863 

1864Contoh ini memeriksa bahwa artefak build ada sebelum mengizinkan teammate menjadi idle:

1865 

1866```bash theme={null}

1867#!/bin/bash

1868 

1869if [ ! -f "./dist/output.js" ]; then

1870 echo "Build artifact missing. Run the build before stopping." >&2

1871 exit 2

1872fi

1873 

1874exit 0

1875```

1876 

1877### ConfigChange

1878 

1879Dijalankan ketika file konfigurasi berubah selama sesi. Gunakan ini untuk mengaudit perubahan pengaturan, menegakkan kebijakan keamanan, atau memblokir modifikasi tidak sah ke file konfigurasi.

1880 

1881ConfigChange hooks dijalankan untuk perubahan ke file pengaturan, pengaturan kebijakan terkelola, dan file skill. Bidang `source` dalam input memberitahu Anda tipe konfigurasi mana yang berubah, dan bidang `file_path` opsional menyediakan path ke file yang berubah.

1882 

1883Matcher memfilter pada sumber konfigurasi:

1884 

1885| Matcher | Kapan dijalankan |

1886| :----------------- | :----------------------------------------- |

1887| `user_settings` | `~/.claude/settings.json` berubah |

1888| `project_settings` | `.claude/settings.json` berubah |

1889| `local_settings` | `.claude/settings.local.json` berubah |

1890| `policy_settings` | Pengaturan kebijakan terkelola berubah |

1891| `skills` | File skill dalam `.claude/skills/` berubah |

1892 

1893Contoh ini mencatat semua perubahan konfigurasi untuk audit keamanan:

1894 

1895```json theme={null}

1896{

1897 "hooks": {

1898 "ConfigChange": [

1899 {

1900 "hooks": [

1901 {

1902 "type": "command",

1903 "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/audit-config-change.sh"

1904 }

1905 ]

1906 }

1907 ]

1908 }

1909}

1910```

1911 

1912#### Input ConfigChange

1913 

1914Selain [bidang input umum](#common-input-fields), ConfigChange hooks menerima `source` dan secara opsional `file_path`. Bidang `source` menunjukkan tipe konfigurasi mana yang berubah, dan `file_path` menyediakan path ke file spesifik yang dimodifikasi.

1915 

1916```json theme={null}

1917{

1918 "session_id": "abc123",

1919 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

1920 "cwd": "/Users/...",

1921 "hook_event_name": "ConfigChange",

1922 "source": "project_settings",

1923 "file_path": "/Users/.../my-project/.claude/settings.json"

1924}

1925```

1926 

1927#### Kontrol keputusan ConfigChange

1928 

1929ConfigChange hooks dapat memblokir perubahan konfigurasi dari berlaku. Gunakan kode keluar 2 atau JSON `decision` untuk mencegah perubahan. Ketika diblokir, pengaturan baru tidak diterapkan ke sesi yang berjalan.

1930 

1931| Bidang | Deskripsi |

1932| :--------- | :----------------------------------------------------------------------------------------- |

1933| `decision` | `"block"` mencegah perubahan konfigurasi diterapkan. Hilangkan untuk mengizinkan perubahan |

1934| `reason` | Penjelasan ditampilkan ke pengguna saat `decision` adalah `"block"` |

1935 

1936```json theme={null}

1937{

1938 "decision": "block",

1939 "reason": "Configuration changes to project settings require admin approval"

1940}

1941```

1942 

1943Perubahan `policy_settings` tidak dapat diblokir. Hooks masih dijalankan untuk sumber `policy_settings`, jadi Anda dapat menggunakannya untuk audit logging, tetapi keputusan blocking apa pun diabaikan. Ini memastikan pengaturan yang dikelola enterprise selalu berlaku.

1944 

1945### CwdChanged

1946 

1947Dijalankan ketika direktori kerja berubah selama sesi, misalnya ketika Claude menjalankan perintah `cd`. Gunakan ini untuk bereaksi terhadap perubahan direktori: muat ulang variabel lingkungan, aktifkan toolchains khusus proyek, atau jalankan skrip setup secara otomatis. Berpasangan dengan [FileChanged](#filechanged) untuk tools seperti [direnv](https://direnv.net/) yang mengelola lingkungan per-direktori.

1948 

1949CwdChanged hooks memiliki akses ke `CLAUDE_ENV_FILE`. Variabel yang ditulis ke file itu bertahan ke perintah Bash berikutnya untuk sesi, sama seperti dalam [SessionStart hooks](#persist-environment-variables).

1950 

1951CwdChanged tidak mendukung matchers dan dijalankan pada setiap perubahan direktori.

1952 

1953#### Input CwdChanged

1954 

1955Selain [bidang input umum](#common-input-fields), CwdChanged hooks menerima `old_cwd` dan `new_cwd`.

1956 

1957```json theme={null}

1958{

1959 "session_id": "abc123",

1960 "transcript_path": "/Users/.../.claude/projects/.../transcript.jsonl",

1961 "cwd": "/Users/my-project/src",

1962 "hook_event_name": "CwdChanged",

1963 "old_cwd": "/Users/my-project",

1964 "new_cwd": "/Users/my-project/src"

1965}

1966```

1967 

1968#### Output CwdChanged

1969 

1970Selain [bidang output JSON](#json-output) yang tersedia untuk semua hooks, CwdChanged hooks dapat mengembalikan `watchPaths` untuk secara dinamis menetapkan path file mana yang [FileChanged](#filechanged) pantau:

1971 

1972| Bidang | Deskripsi |

1973| :----------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1974| `watchPaths` | Array path absolut. Menggantikan daftar watch dinamis saat ini (path dari konfigurasi `matcher` Anda selalu dipantau). Mengembalikan array kosong menghapus daftar dinamis, yang khas saat memasuki direktori baru |

1975 

1976CwdChanged hooks tidak memiliki kontrol keputusan. Mereka tidak dapat memblokir perubahan direktori.

1977 

1978### FileChanged

1979 

1980Dijalankan ketika file yang dipantau berubah di disk. Berguna untuk memuat ulang variabel lingkungan ketika file konfigurasi proyek dimodifikasi.

1981 

1982Bidang `matcher` untuk event ini melayani dua peran:

1983 

1984* **Bangun daftar watch**: nilai dibagi pada `|` dan setiap segmen terdaftar sebagai nama file literal di direktori kerja, jadi `".envrc|.env"` menonton tepat dua file itu. Pola regex tidak berguna di sini: nilai seperti `^\.env` akan menonton file yang secara harfiah bernama `^\.env`.

1985* **Filter hooks mana yang dijalankan**: ketika file yang dipantau berubah, nilai yang sama memfilter grup hook mana yang dijalankan menggunakan [aturan matcher](#matcher-patterns) standar terhadap basename file yang berubah.

1986 

1987FileChanged hooks memiliki akses ke `CLAUDE_ENV_FILE`. Variabel yang ditulis ke file itu bertahan ke perintah Bash berikutnya untuk sesi, sama seperti dalam [SessionStart hooks](#persist-environment-variables).

1988 

1989#### Input FileChanged

1990 

1991Selain [bidang input umum](#common-input-fields), FileChanged hooks menerima `file_path` dan `event`.

1992 

1993| Bidang | Deskripsi |

1994| :---------- | :------------------------------------------------------------------------------------------------------ |

1995| `file_path` | Path absolut ke file yang berubah |

1996| `event` | Apa yang terjadi: `"change"` (file dimodifikasi), `"add"` (file dibuat), atau `"unlink"` (file dihapus) |

1997 

1998```json theme={null}

1999{

2000 "session_id": "abc123",

2001 "transcript_path": "/Users/.../.claude/projects/.../transcript.jsonl",

2002 "cwd": "/Users/my-project",

2003 "hook_event_name": "FileChanged",

2004 "file_path": "/Users/my-project/.envrc",

2005 "event": "change"

2006}

2007```

2008 

2009#### Output FileChanged

2010 

2011Selain [bidang output JSON](#json-output) yang tersedia untuk semua hooks, FileChanged hooks dapat mengembalikan `watchPaths` untuk secara dinamis memperbarui path file mana yang dipantau:

2012 

2013| Bidang | Deskripsi |

2014| :----------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

2015| `watchPaths` | Array path absolut. Menggantikan daftar watch dinamis saat ini (path dari konfigurasi `matcher` Anda selalu dipantau). Gunakan ini ketika skrip hook Anda menemukan file tambahan untuk dipantau berdasarkan file yang berubah |

2016 

2017FileChanged hooks tidak memiliki kontrol keputusan. Mereka tidak dapat memblokir perubahan file dari terjadi.

2018 

2019### WorktreeCreate

2020 

2021Ketika Anda menjalankan `claude --worktree` atau [subagent menggunakan `isolation: "worktree"`](/id/sub-agents#choose-the-subagent-scope), Claude Code membuat salinan kerja terisolasi menggunakan `git worktree`. Jika Anda mengonfigurasi hook WorktreeCreate, itu menggantikan perilaku git default, memungkinkan Anda menggunakan sistem kontrol versi berbeda seperti SVN, Perforce, atau Mercurial.

2022 

2023Karena hook menggantikan perilaku default sepenuhnya, [`.worktreeinclude`](/id/worktrees#copy-gitignored-files-into-worktrees) tidak diproses. Jika Anda perlu menyalin file konfigurasi lokal seperti `.env` ke worktree baru, lakukan di dalam skrip hook Anda.

2024 

2025Hook harus mengembalikan path absolut ke direktori worktree yang dibuat. Claude Code menggunakan path ini sebagai direktori kerja untuk sesi terisolasi. Command hooks mencetaknya di stdout; HTTP hooks mengembalikannya melalui `hookSpecificOutput.worktreePath`.

2026 

2027Contoh ini membuat salinan kerja SVN dan mencetak path untuk Claude Code gunakan. Ganti URL repositori dengan milik Anda sendiri:

2028 

2029```json theme={null}

2030{

2031 "hooks": {

2032 "WorktreeCreate": [

2033 {

2034 "hooks": [

2035 {

2036 "type": "command",

2037 "command": "bash -c 'NAME=$(jq -r .name); DIR=\"$HOME/.claude/worktrees/$NAME\"; svn checkout https://svn.example.com/repo/trunk \"$DIR\" >&2 && echo \"$DIR\"'"

2038 }

2039 ]

2040 }

2041 ]

2042 }

2043}

2044```

2045 

2046Hook membaca `name` worktree dari input JSON di stdin, melakukan checkout salinan segar ke direktori baru, dan mencetak path direktori. `echo` pada baris terakhir adalah apa yang Claude Code baca sebagai path worktree. Alihkan output lainnya ke stderr sehingga tidak mengganggu path.

2047 

2048#### Input WorktreeCreate

2049 

2050Selain [bidang input umum](#common-input-fields), WorktreeCreate hooks menerima bidang `name`. Ini adalah pengenal slug untuk worktree baru, baik ditentukan oleh pengguna atau auto-generated (misalnya, `bold-oak-a3f2`).

2051 

2052```json theme={null}

2053{

2054 "session_id": "abc123",

2055 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

2056 "cwd": "/Users/...",

2057 "hook_event_name": "WorktreeCreate",

2058 "name": "feature-auth"

2059}

2060```

2061 

2062#### Output WorktreeCreate

2063 

2064WorktreeCreate hooks tidak menggunakan model keputusan allow/block standar. Sebaliknya, kesuksesan atau kegagalan hook menentukan hasil. Hook harus mengembalikan path absolut ke direktori worktree yang dibuat:

2065 

2066* **Command hooks** (`type: "command"`): cetak path di stdout.

2067* **HTTP hooks** (`type: "http"`): kembalikan `{ "hookSpecificOutput": { "hookEventName": "WorktreeCreate", "worktreePath": "/absolute/path" } }` dalam badan respons.

2068 

2069Jika hook gagal atau tidak menghasilkan path, pembuatan worktree gagal dengan kesalahan.

2070 

2071### WorktreeRemove

2072 

2073Pasangan cleanup untuk [WorktreeCreate](#worktreecreate). Hook ini dijalankan ketika worktree sedang dihapus, baik ketika Anda keluar dari sesi `--worktree` dan memilih untuk menghapusnya, atau ketika subagent dengan `isolation: "worktree"` selesai. Untuk worktrees berbasis git, Claude menangani cleanup secara otomatis dengan `git worktree remove`. Jika Anda mengonfigurasi hook WorktreeCreate untuk sistem kontrol versi non-git, pasangkan dengan hook WorktreeRemove untuk menangani cleanup. Tanpanya, direktori worktree ditinggalkan di disk.

2074 

2075Claude Code meneruskan path yang dikembalikan oleh WorktreeCreate sebagai `worktree_path` dalam input hook. Contoh ini membaca path itu dan menghapus direktori:

2076 

2077```json theme={null}

2078{

2079 "hooks": {

2080 "WorktreeRemove": [

2081 {

2082 "hooks": [

2083 {

2084 "type": "command",

2085 "command": "bash -c 'jq -r .worktree_path | xargs rm -rf'"

2086 }

2087 ]

2088 }

2089 ]

2090 }

2091}

2092```

2093 

2094#### Input WorktreeRemove

2095 

2096Selain [bidang input umum](#common-input-fields), WorktreeRemove hooks menerima bidang `worktree_path`, yang merupakan path absolut ke worktree yang sedang dihapus.

2097 

2098```json theme={null}

2099{

2100 "session_id": "abc123",

2101 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

2102 "cwd": "/Users/...",

2103 "hook_event_name": "WorktreeRemove",

2104 "worktree_path": "/Users/.../my-project/.claude/worktrees/feature-auth"

2105}

2106```

2107 

2108WorktreeRemove hooks tidak memiliki kontrol keputusan. Mereka tidak dapat memblokir penghapusan worktree tetapi dapat melakukan tugas cleanup seperti menghapus status kontrol versi atau mengarsipkan perubahan. Kegagalan hook dicatat dalam mode debug saja.

2109 

2110### PreCompact

2111 

2112Dijalankan sebelum Claude Code akan menjalankan operasi compact.

2113 

2114Nilai matcher menunjukkan apakah compaction dipicu secara manual atau otomatis:

2115 

2116| Matcher | Kapan dijalankan |

2117| :------- | :--------------------------------------- |

2118| `manual` | `/compact` |

2119| `auto` | Auto-compact ketika context window penuh |

2120 

2121Keluar dengan kode 2 untuk memblokir compaction. Untuk manual `/compact`, pesan stderr ditampilkan ke pengguna. Anda juga dapat memblokir dengan mengembalikan JSON dengan `"decision": "block"`.

2122 

2123Memblokir automatic compaction memiliki efek berbeda tergantung pada kapan dijalankan. Jika compaction dipicu secara proaktif sebelum batas konteks, Claude Code melewatinya dan percakapan berlanjut tanpa compaction. Jika compaction dipicu untuk pulih dari kesalahan batas konteks yang sudah dikembalikan oleh API, kesalahan yang mendasar muncul dan permintaan saat ini gagal.

2124 

2125#### Input PreCompact

2126 

2127Selain [bidang input umum](#common-input-fields), PreCompact hooks menerima `trigger` dan `custom_instructions`. Untuk `manual`, `custom_instructions` berisi apa yang diteruskan pengguna ke `/compact`. Untuk `auto`, `custom_instructions` kosong.

2128 

2129```json theme={null}

2130{

2131 "session_id": "abc123",

2132 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

2133 "cwd": "/Users/...",

2134 "hook_event_name": "PreCompact",

2135 "trigger": "manual",

2136 "custom_instructions": ""

2137}

2138```

2139 

2140### PostCompact

2141 

2142Dijalankan setelah Claude Code menyelesaikan operasi compact. Gunakan event ini untuk bereaksi terhadap status compacted baru, misalnya untuk mencatat ringkasan yang dihasilkan atau memperbarui status eksternal.

2143 

2144Nilai matcher yang sama berlaku seperti untuk `PreCompact`:

2145 

2146| Matcher | Kapan dijalankan |

2147| :------- | :----------------------------------------------- |

2148| `manual` | Setelah `/compact` |

2149| `auto` | Setelah auto-compact ketika context window penuh |

2150 

2151#### Input PostCompact

2152 

2153Selain [bidang input umum](#common-input-fields), PostCompact hooks menerima `trigger` dan `compact_summary`. Bidang `compact_summary` berisi ringkasan percakapan yang dihasilkan oleh operasi compact.

2154 

2155```json theme={null}

2156{

2157 "session_id": "abc123",

2158 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

2159 "cwd": "/Users/...",

2160 "hook_event_name": "PostCompact",

2161 "trigger": "manual",

2162 "compact_summary": "Summary of the compacted conversation..."

2163}

2164```

2165 

2166PostCompact hooks tidak memiliki kontrol keputusan. Mereka tidak dapat mempengaruhi hasil compaction tetapi dapat melakukan tugas follow-up.

2167 

2168### SessionEnd

2169 

2170Dijalankan ketika sesi Claude Code berakhir. Berguna untuk tugas cleanup, logging statistik sesi, atau menyimpan status sesi. Mendukung matchers untuk memfilter berdasarkan alasan keluar.

2171 

2172Bidang `reason` dalam input hook menunjukkan mengapa sesi berakhir:

2173 

2174| Alasan | Deskripsi |

2175| :---------------------------- | :----------------------------------------- |

2176| `clear` | Sesi dihapus dengan perintah `/clear` |

2177| `resume` | Sesi beralih melalui `/resume` interaktif |

2178| `logout` | Pengguna logout |

2179| `prompt_input_exit` | Pengguna keluar saat input prompt terlihat |

2180| `bypass_permissions_disabled` | Mode bypass permissions dinonaktifkan |

2181| `other` | Alasan keluar lainnya |

2182 

2183#### Input SessionEnd

2184 

2185Selain [bidang input umum](#common-input-fields), SessionEnd hooks menerima bidang `reason` menunjukkan mengapa sesi berakhir. Lihat [tabel reason](#sessionend) di atas untuk semua nilai.

2186 

2187```json theme={null}

2188{

2189 "session_id": "abc123",

2190 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

2191 "cwd": "/Users/...",

2192 "hook_event_name": "SessionEnd",

2193 "reason": "other"

2194}

2195```

2196 

2197SessionEnd hooks tidak memiliki kontrol keputusan. Mereka tidak dapat memblokir penghentian sesi tetapi dapat melakukan tugas cleanup.

2198 

2199SessionEnd hooks memiliki timeout default 1.5 detik. Ini berlaku untuk keluar sesi, `/clear`, dan beralih sesi melalui `/resume` interaktif. Jika hook memerlukan lebih banyak waktu, atur per-hook `timeout` dalam konfigurasi hook. Anggaran keseluruhan secara otomatis dinaikkan ke timeout per-hook tertinggi yang dikonfigurasi dalam file pengaturan, hingga 60 detik. Timeout yang ditetapkan pada hooks yang disediakan plugin tidak menaikkan anggaran. Untuk menimpa anggaran secara eksplisit, atur variabel lingkungan `CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS` dalam milidetik.

2200 

2201```bash theme={null}

2202CLAUDE_CODE_SESSIONEND_HOOKS_TIMEOUT_MS=5000 claude

2203```

2204 

2205### Elicitation

2206 

2207Dijalankan ketika server MCP meminta input pengguna mid-task. Secara default, Claude Code menampilkan dialog interaktif untuk pengguna merespons. Hooks dapat mengintersepsi permintaan ini dan merespons secara programatis, melewati dialog sepenuhnya.

2208 

2209Bidang matcher mencocokkan nama server MCP.

2210 

2211#### Input Elicitation

2212 

2213Selain [bidang input umum](#common-input-fields), Elicitation hooks menerima `mcp_server_name`, `message`, dan bidang opsional `mode`, `url`, `elicitation_id`, dan `requested_schema`.

2214 

2215Untuk form-mode elicitation (kasus paling umum):

2216 

2217```json theme={null}

2218{

2219 "session_id": "abc123",

2220 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

2221 "cwd": "/Users/...",

2222 "permission_mode": "default",

2223 "hook_event_name": "Elicitation",

2224 "mcp_server_name": "my-mcp-server",

2225 "message": "Please provide your credentials",

2226 "mode": "form",

2227 "requested_schema": {

2228 "type": "object",

2229 "properties": {

2230 "username": { "type": "string", "title": "Username" }

2231 }

2232 }

2233}

2234```

2235 

2236Untuk URL-mode elicitation (autentikasi berbasis browser):

2237 

2238```json theme={null}

2239{

2240 "session_id": "abc123",

2241 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

2242 "cwd": "/Users/...",

2243 "permission_mode": "default",

2244 "hook_event_name": "Elicitation",

2245 "mcp_server_name": "my-mcp-server",

2246 "message": "Please authenticate",

2247 "mode": "url",

2248 "url": "https://auth.example.com/login"

2249}

2250```

2251 

2252#### Output Elicitation

2253 

2254Untuk merespons secara programatis tanpa menampilkan dialog, kembalikan objek JSON dengan `hookSpecificOutput`:

2255 

2256```json theme={null}

2257{

2258 "hookSpecificOutput": {

2259 "hookEventName": "Elicitation",

2260 "action": "accept",

2261 "content": {

2262 "username": "alice"

2263 }

2264 }

2265}

2266```

2267 

2268| Bidang | Nilai | Deskripsi |

2269| :-------- | :---------------------------- | :------------------------------------------------------------------------------- |

2270| `action` | `accept`, `decline`, `cancel` | Apakah menerima, menolak, atau membatalkan permintaan |

2271| `content` | object | Nilai field form untuk dikirimkan. Hanya digunakan saat `action` adalah `accept` |

2272 

2273Kode keluar 2 menolak elicitation dan menampilkan stderr ke pengguna.

2274 

2275### ElicitationResult

2276 

2277Dijalankan setelah pengguna merespons elicitation MCP. Hooks dapat mengamati, memodifikasi, atau memblokir respons sebelum dikirim kembali ke server MCP.

2278 

2279Bidang matcher mencocokkan nama server MCP.

2280 

2281#### Input ElicitationResult

2282 

2283Selain [bidang input umum](#common-input-fields), ElicitationResult hooks menerima `mcp_server_name`, `action`, dan bidang opsional `mode`, `elicitation_id`, dan `content`.

2284 

2285```json theme={null}

2286{

2287 "session_id": "abc123",

2288 "transcript_path": "/Users/.../.claude/projects/.../00893aaf-19fa-41d2-8238-13269b9b3ca0.jsonl",

2289 "cwd": "/Users/...",

2290 "permission_mode": "default",

2291 "hook_event_name": "ElicitationResult",

2292 "mcp_server_name": "my-mcp-server",

2293 "action": "accept",

2294 "content": { "username": "alice" },

2295 "mode": "form",

2296 "elicitation_id": "elicit-123"

2297}

2298```

2299 

2300#### Output ElicitationResult

2301 

2302Untuk menimpa respons pengguna, kembalikan objek JSON dengan `hookSpecificOutput`:

2303 

2304```json theme={null}

2305{

2306 "hookSpecificOutput": {

2307 "hookEventName": "ElicitationResult",

2308 "action": "decline",

2309 "content": {}

2310 }

2311}

2312```

2313 

2314| Bidang | Nilai | Deskripsi |

2315| :-------- | :---------------------------- | :--------------------------------------------------------------------- |

2316| `action` | `accept`, `decline`, `cancel` | Menimpa tindakan pengguna |

2317| `content` | object | Menimpa nilai field form. Hanya bermakna saat `action` adalah `accept` |

2318 

2319Kode keluar 2 memblokir respons, mengubah tindakan efektif menjadi `decline`.

2320 

2321## Prompt-based hooks

2322 

2323Selain command, HTTP, dan MCP tool hooks, Claude Code mendukung prompt-based hooks (`type: "prompt"`) yang menggunakan LLM untuk mengevaluasi apakah akan mengizinkan atau memblokir tindakan, dan agent hooks (`type: "agent"`) yang spawn agentic verifier dengan akses tool. Tidak semua events mendukung setiap tipe hook.

2324 

2325Events yang mendukung semua lima tipe hook (`command`, `http`, `mcp_tool`, `prompt`, dan `agent`):

2326 

2327* `PermissionRequest`

2328* `PostToolBatch`

2329* `PostToolUse`

2330* `PostToolUseFailure`

2331* `PreToolUse`

2332* `Stop`

2333* `SubagentStop`

2334* `TaskCompleted`

2335* `TaskCreated`

2336* `UserPromptExpansion`

2337* `UserPromptSubmit`

2338 

2339Events yang mendukung hooks `command`, `http`, dan `mcp_tool` tetapi bukan `prompt` atau `agent`:

2340 

2341* `ConfigChange`

2342* `CwdChanged`

2343* `Elicitation`

2344* `ElicitationResult`

2345* `FileChanged`

2346* `InstructionsLoaded`

2347* `Notification`

2348* `PermissionDenied`

2349* `PostCompact`

2350* `PreCompact`

2351* `SessionEnd`

2352* `StopFailure`

2353* `SubagentStart`

2354* `TeammateIdle`

2355* `WorktreeCreate`

2356* `WorktreeRemove`

2357 

2358`SessionStart` dan `Setup` mendukung hooks `command` dan `mcp_tool`. Mereka tidak mendukung hooks `http`, `prompt`, atau `agent`.

2359 

2360### Bagaimana prompt-based hooks bekerja

2361 

2362Alih-alih menjalankan perintah Bash, prompt-based hooks:

2363 

23641. Mengirimkan input hook dan prompt Anda ke model Claude, Haiku secara default

23652. LLM merespons dengan JSON terstruktur yang berisi keputusan

23663. Claude Code memproses keputusan secara otomatis

2367 

2368### Konfigurasi prompt hook

2369 

2370Atur `type` ke `"prompt"` dan sediakan string `prompt` alih-alih `command`. Gunakan placeholder `$ARGUMENTS` untuk menyuntikkan data JSON input hook ke dalam teks prompt Anda. Claude Code mengirimkan prompt gabungan dan input ke model Claude cepat, yang mengembalikan keputusan JSON.

2371 

2372Hook `Stop` ini meminta LLM untuk mengevaluasi apakah semua tugas selesai sebelum mengizinkan Claude selesai:

2373 

2374```json theme={null}

2375{

2376 "hooks": {

2377 "Stop": [

2378 {

2379 "hooks": [

2380 {

2381 "type": "prompt",

2382 "prompt": "Evaluate if Claude should stop: $ARGUMENTS. Check if all tasks are complete."

2383 }

2384 ]

2385 }

2386 ]

2387 }

2388}

2389```

2390 

2391| Bidang | Diperlukan | Deskripsi |

2392| :-------- | :--------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------- |

2393| `type` | ya | Harus `"prompt"` |

2394| `prompt` | ya | Teks prompt untuk dikirim ke LLM. Gunakan `$ARGUMENTS` sebagai placeholder untuk JSON input hook. Jika `$ARGUMENTS` tidak ada, JSON input ditambahkan ke prompt |

2395| `model` | tidak | Model untuk digunakan untuk evaluasi. Default ke model cepat |

2396| `timeout` | tidak | Timeout dalam detik. Default: 30 |

2397 

2398### Skema respons

2399 

2400LLM harus merespons dengan JSON yang berisi:

2401 

2402```json theme={null}

2403{

2404 "ok": true | false,

2405 "reason": "Explanation for the decision"

2406}

2407```

2408 

2409| Bidang | Deskripsi |

2410| :------- | :---------------------------------------------------------------- |

2411| `ok` | `true` mengizinkan tindakan, `false` mencegahnya |

2412| `reason` | Diperlukan saat `ok` adalah `false`. Penjelasan untuk pemblokiran |

2413 

2414Apa yang terjadi pada `ok: false` tergantung pada event:

2415 

2416* `Stop` dan `SubagentStop`: alasan diumpankan kembali ke Claude sebagai instruksi berikutnya dan giliran berlanjut

2417* `PreToolUse`: panggilan tool ditolak dan alasan dikembalikan ke Claude sebagai kesalahan tool, setara dengan command hook's `permissionDecision: "deny"`

2418* `PostToolUse`, `PostToolBatch`, `UserPromptSubmit`, dan `UserPromptExpansion`: giliran berakhir dan alasan muncul dalam chat sebagai baris peringatan, setara dengan mengembalikan `"continue": false` dari command hook

2419* `PostToolUseFailure`, `TaskCreated`, dan `TaskCompleted`: alasan dikembalikan ke Claude sebagai kesalahan tool, mirip dengan `PreToolUse`

2420* `PermissionRequest`: `ok: false` tidak berpengaruh. Untuk menolak persetujuan dari hook, gunakan [command hook](#command-hook-fields) yang mengembalikan `hookSpecificOutput.decision.behavior: "deny"`

2421 

2422Jika Anda memerlukan kontrol yang lebih halus pada event apa pun, gunakan [command hook](#command-hook-fields) dengan bidang per-event yang dijelaskan dalam [Decision control](#decision-control).

2423 

2424### Contoh: Multi-criteria Stop hook

2425 

2426Hook `Stop` ini menggunakan prompt detail untuk memeriksa tiga kondisi sebelum mengizinkan Claude berhenti. Jika `"ok"` adalah `false`, Claude terus bekerja dengan alasan yang disediakan sebagai instruksi berikutnya. Hooks `SubagentStop` menggunakan format yang sama untuk mengevaluasi apakah [subagent](/id/sub-agents) harus berhenti:

2427 

2428```json theme={null}

2429{

2430 "hooks": {

2431 "Stop": [

2432 {

2433 "hooks": [

2434 {

2435 "type": "prompt",

2436 "prompt": "You are evaluating whether Claude should stop working. Context: $ARGUMENTS\n\nAnalyze the conversation and determine if:\n1. All user-requested tasks are complete\n2. Any errors need to be addressed\n3. Follow-up work is needed\n\nRespond with JSON: {\"ok\": true} to allow stopping, or {\"ok\": false, \"reason\": \"your explanation\"} to continue working.",

2437 "timeout": 30

2438 }

2439 ]

2440 }

2441 ]

2442 }

2443}

2444```

2445 

2446## Agent-based hooks

2447 

2448<Warning>

2449 Agent hooks adalah eksperimental. Perilaku dan konfigurasi mungkin berubah di rilis mendatang. Untuk alur kerja produksi, lebih suka [command hooks](#command-hook-fields).

2450</Warning>

2451 

2452Agent-based hooks (`type: "agent"`) seperti prompt-based hooks tetapi dengan akses tool multi-turn. Alih-alih pemanggilan LLM tunggal, hook agent spawn subagent yang dapat membaca file, mencari kode, dan memeriksa codebase untuk memverifikasi kondisi. Agent hooks mendukung events yang sama seperti prompt-based hooks.

2453 

2454### Bagaimana agent hooks bekerja

2455 

2456Ketika hook agent dijalankan:

2457 

24581. Claude Code spawn subagent dengan prompt Anda dan JSON input hook

24592. Subagent dapat menggunakan tools seperti Read, Grep, dan Glob untuk menyelidiki

24603. Setelah hingga 50 turn, subagent mengembalikan keputusan terstruktur `{ "ok": true/false }`

24614. Claude Code memproses keputusan dengan cara yang sama seperti prompt hook

2462 

2463Agent hooks berguna ketika verifikasi memerlukan memeriksa file aktual atau output test, bukan hanya mengevaluasi data input hook saja.

2464 

2465### Konfigurasi agent hook

2466 

2467Atur `type` ke `"agent"` dan sediakan string `prompt`. Bidang konfigurasi sama seperti [prompt hooks](#prompt-hook-configuration), dengan timeout default lebih lama:

2468 

2469| Bidang | Diperlukan | Deskripsi |

2470| :-------- | :--------- | :------------------------------------------------------------------------------------------------------- |

2471| `type` | ya | Harus `"agent"` |

2472| `prompt` | ya | Prompt menjelaskan apa yang diverifikasi. Gunakan `$ARGUMENTS` sebagai placeholder untuk JSON input hook |

2473| `model` | tidak | Model untuk digunakan. Default ke model cepat |

2474| `timeout` | tidak | Timeout dalam detik. Default: 60 |

2475 

2476Skema respons sama seperti prompt hooks: `{ "ok": true }` untuk mengizinkan atau `{ "ok": false, "reason": "..." }` untuk memblokir.

2477 

2478Hook `Stop` ini memverifikasi bahwa semua unit tests lulus sebelum mengizinkan Claude selesai:

2479 

2480```json theme={null}

2481{

2482 "hooks": {

2483 "Stop": [

2484 {

2485 "hooks": [

2486 {

2487 "type": "agent",

2488 "prompt": "Verify that all unit tests pass. Run the test suite and check the results. $ARGUMENTS",

2489 "timeout": 120

2490 }

2491 ]

2492 }

2493 ]

2494 }

2495}

2496```

2497 

2498## Jalankan hooks di latar belakang

2499 

2500Secara default, hooks memblokir eksekusi Claude sampai selesai. Untuk tugas yang berjalan lama seperti deployments, test suites, atau panggilan API eksternal, atur `"async": true` untuk menjalankan hook di latar belakang sementara Claude terus bekerja. Async hooks tidak dapat memblokir atau mengontrol perilaku Claude: bidang respons seperti `decision`, `permissionDecision`, dan `continue` tidak berpengaruh, karena tindakan yang akan mereka kontrol sudah selesai.

2501 

2502### Konfigurasi async hook

2503 

2504Tambahkan `"async": true` ke konfigurasi command hook untuk menjalankannya di latar belakang tanpa memblokir Claude. Bidang ini hanya tersedia pada hooks `type: "command"`.

2505 

2506Hook ini menjalankan skrip test setelah setiap pemanggilan tool `Write`. Claude terus bekerja segera sementara `run-tests.sh` dijalankan hingga 120 detik. Ketika skrip selesai, outputnya disampaikan pada turn percakapan berikutnya:

2507 

2508```json theme={null}

2509{

2510 "hooks": {

2511 "PostToolUse": [

2512 {

2513 "matcher": "Write",

2514 "hooks": [

2515 {

2516 "type": "command",

2517 "command": "/path/to/run-tests.sh",

2518 "async": true,

2519 "timeout": 120

2520 }

2521 ]

2522 }

2523 ]

2524 }

2525}

2526```

2527 

2528Bidang `timeout` menetapkan waktu maksimum dalam detik untuk proses latar belakang. Jika tidak ditentukan, async hooks menggunakan default 10 menit yang sama seperti sync hooks.

2529 

2530### Bagaimana async hooks dijalankan

2531 

2532Ketika async hook dijalankan, Claude Code memulai proses hook dan segera melanjutkan tanpa menunggu selesai. Hook menerima JSON input yang sama melalui stdin seperti hook sinkron.

2533 

2534Setelah proses latar belakang keluar, jika hook menghasilkan respons JSON dengan bidang `systemMessage` atau `additionalContext`, konten itu disampaikan ke Claude sebagai konteks pada turn percakapan berikutnya.

2535 

2536Notifikasi penyelesaian async hook ditekan secara default. Untuk melihatnya, aktifkan mode verbose dengan `Ctrl+O` atau mulai Claude Code dengan `--verbose`.

2537 

2538### Contoh: jalankan tests setelah perubahan file

2539 

2540Hook ini memulai test suite di latar belakang setiap kali Claude menulis file, kemudian melaporkan hasil kembali ke Claude ketika tests selesai. Simpan skrip ini ke `.claude/hooks/run-tests-async.sh` dalam proyek Anda dan buat dapat dijalankan dengan `chmod +x`:

2541 

2542```bash theme={null}

2543#!/bin/bash

2544# run-tests-async.sh

2545 

2546# Baca hook input dari stdin

2547INPUT=$(cat)

2548FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')

2549 

2550# Hanya jalankan tests untuk file sumber

2551if [[ "$FILE_PATH" != *.ts && "$FILE_PATH" != *.js ]]; then

2552 exit 0

2553fi

2554 

2555# Jalankan tests dan laporkan hasil via systemMessage

2556RESULT=$(npm test 2>&1)

2557EXIT_CODE=$?

2558 

2559if [ $EXIT_CODE -eq 0 ]; then

2560 echo "{\"systemMessage\": \"Tests passed after editing $FILE_PATH\"}"

2561else

2562 echo "{\"systemMessage\": \"Tests failed after editing $FILE_PATH: $RESULT\"}"

2563fi

2564```

2565 

2566Kemudian tambahkan konfigurasi ini ke `.claude/settings.json` dalam akar proyek Anda. Flag `async: true` memungkinkan Claude terus bekerja sementara tests dijalankan:

2567 

2568```json theme={null}

2569{

2570 "hooks": {

2571 "PostToolUse": [

2572 {

2573 "matcher": "Write|Edit",

2574 "hooks": [

2575 {

2576 "type": "command",

2577 "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/run-tests-async.sh",

2578 "async": true,

2579 "timeout": 300

2580 }

2581 ]

2582 }

2583 ]

2584 }

2585}

2586```

2587 

2588### Keterbatasan

2589 

2590Async hooks memiliki beberapa keterbatasan dibandingkan dengan hooks sinkron:

2591 

2592* Hanya hooks `type: "command"` yang mendukung `async`. Prompt-based hooks tidak dapat dijalankan secara asinkron.

2593* Async hooks tidak dapat memblokir pemanggilan tool atau mengembalikan keputusan. Pada saat hook selesai, tindakan pemicu sudah dilanjutkan.

2594* Output hook disampaikan pada turn percakapan berikutnya. Jika sesi idle, respons menunggu sampai interaksi pengguna berikutnya. Pengecualian: hook `asyncRewake` yang keluar dengan kode 2 membangunkan Claude segera bahkan ketika sesi idle.

2595* Setiap eksekusi membuat proses latar belakang terpisah. Tidak ada deduplikasi di seluruh beberapa penjalankan hook async yang sama.

2596 

2597## Pertimbangan keamanan

2598 

2599### Penafian

2600 

2601Command hooks dijalankan dengan izin pengguna sistem penuh Anda.

2602 

2603<Warning>

2604 Command hooks menjalankan perintah shell dengan izin pengguna penuh Anda. Mereka dapat memodifikasi, menghapus, atau mengakses file apa pun yang dapat diakses akun pengguna Anda. Tinjau dan uji semua perintah hook sebelum menambahkannya ke konfigurasi Anda.

2605</Warning>

2606 

2607### Praktik terbaik keamanan

2608 

2609Ingat praktik-praktik ini saat menulis hooks:

2610 

2611* **Validasi dan sanitasi input**: jangan pernah mempercayai data input secara membabi buta

2612* **Selalu kutip variabel shell**: gunakan `"$VAR"` bukan `$VAR`

2613* **Blokir path traversal**: periksa `..` dalam path file

2614* **Gunakan path absolut**: tentukan path lengkap untuk skrip, menggunakan `"$CLAUDE_PROJECT_DIR"` untuk akar proyek

2615* **Lewati file sensitif**: hindari `.env`, `.git/`, keys, dll.

2616 

2617## Windows PowerShell tool

2618 

2619Di Windows, Anda dapat menjalankan hook individual dalam PowerShell dengan menetapkan `"shell": "powershell"` pada command hook. Hooks spawn PowerShell secara langsung, jadi ini bekerja terlepas dari apakah `CLAUDE_CODE_USE_POWERSHELL_TOOL` diatur. Claude Code auto-detects `pwsh.exe` (PowerShell 7+) dengan fallback ke `powershell.exe` (5.1).

2620 

2621```json theme={null}

2622{

2623 "hooks": {

2624 "PostToolUse": [

2625 {

2626 "matcher": "Write",

2627 "hooks": [

2628 {

2629 "type": "command",

2630 "shell": "powershell",

2631 "command": "Write-Host 'File written'"

2632 }

2633 ]

2634 }

2635 ]

2636 }

2637}

2638```

2639 

2640## Debug hooks

2641 

2642Hook execution details, termasuk hooks mana yang cocok, kode keluar mereka, dan stdout dan stderr lengkap, ditulis ke file debug log. Mulai Claude Code dengan `claude --debug-file <path>` untuk menulis log ke lokasi yang diketahui, atau jalankan `claude --debug` dan baca log di `~/.claude/debug/<session-id>.txt`. Flag `--debug` tidak mencetak ke terminal.

2643 

2644```text theme={null}

2645[DEBUG] Executing hooks for PostToolUse:Write

2646[DEBUG] Found 1 hook commands to execute

2647[DEBUG] Executing hook command: <Your command> with timeout 600000ms

2648[DEBUG] Hook command completed with status 0: <Your stdout>

2649```

2650 

2651Untuk detail pencocokan hook yang lebih granular, atur `CLAUDE_CODE_DEBUG_LOG_LEVEL=verbose` untuk melihat baris log tambahan seperti jumlah matcher hook dan pencocokan query.

2652 

2653Untuk troubleshooting masalah umum seperti hooks tidak dijalankan, infinite Stop hook loops, atau kesalahan konfigurasi, lihat [Limitations and troubleshooting](/id/hooks-guide#limitations-and-troubleshooting) dalam panduan. Untuk panduan diagnostik yang lebih luas mencakup `/context`, `/doctor`, dan precedence pengaturan, lihat [Debug your config](/id/debug-your-config).

hooks-guide.md +927 −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# Otomatisasi alur kerja dengan hooks

6 

7> Jalankan perintah shell secara otomatis ketika Claude Code mengedit file, menyelesaikan tugas, atau memerlukan input. Format kode, kirim notifikasi, validasi perintah, dan terapkan aturan proyek.

8 

9Hooks adalah perintah shell yang ditentukan pengguna yang dijalankan pada titik-titik spesifik dalam siklus hidup Claude Code. Mereka memberikan kontrol deterministik atas perilaku Claude Code, memastikan tindakan tertentu selalu terjadi daripada mengandalkan LLM untuk memilih menjalankannya. Gunakan hooks untuk menegakkan aturan proyek, mengotomatisasi tugas berulang, dan mengintegrasikan Claude Code dengan alat yang sudah ada.

10 

11Untuk keputusan yang memerlukan penilaian daripada aturan deterministik, Anda juga dapat menggunakan [prompt-based hooks](#prompt-based-hooks) atau [agent-based hooks](#agent-based-hooks) yang menggunakan model Claude untuk mengevaluasi kondisi.

12 

13Untuk cara lain memperluas Claude Code, lihat [skills](/id/skills) untuk memberikan Claude instruksi tambahan dan perintah yang dapat dieksekusi, [subagents](/id/sub-agents) untuk menjalankan tugas dalam konteks terisolasi, dan [plugins](/id/plugins) untuk mengemas ekstensi untuk dibagikan di seluruh proyek.

14 

15<Tip>

16 Panduan ini mencakup kasus penggunaan umum dan cara memulai. Untuk skema acara lengkap, format input/output JSON, dan fitur lanjutan seperti async hooks dan MCP tool hooks, lihat [Hooks reference](/id/hooks).

17</Tip>

18 

19## Siapkan hook pertama Anda

20 

21Untuk membuat hook, tambahkan blok `hooks` ke [file pengaturan](#configure-hook-location). Panduan ini membuat hook notifikasi desktop, sehingga Anda mendapat peringatan kapan pun Claude menunggu input Anda daripada menonton terminal.

22 

23<Steps>

24 <Step title="Tambahkan hook ke pengaturan Anda">

25 Buka `~/.claude/settings.json` dan tambahkan hook `Notification`. Contoh di bawah menggunakan `osascript` untuk macOS; lihat [Dapatkan notifikasi ketika Claude memerlukan input](#get-notified-when-claude-needs-input) untuk perintah Linux dan Windows.

26 

27 ```json theme={null}

28 {

29 "hooks": {

30 "Notification": [

31 {

32 "matcher": "",

33 "hooks": [

34 {

35 "type": "command",

36 "command": "osascript -e 'display notification \"Claude Code needs your attention\" with title \"Claude Code\"'"

37 }

38 ]

39 }

40 ]

41 }

42 }

43 ```

44 

45 Jika file pengaturan Anda sudah memiliki kunci `hooks`, tambahkan `Notification` sebagai sibling dari kunci acara yang ada daripada mengganti seluruh objek. Setiap nama acara adalah kunci di dalam objek `hooks` tunggal:

46 

47 ```json theme={null}

48 {

49 "hooks": {

50 "PostToolUse": [

51 {

52 "matcher": "Edit|Write",

53 "hooks": [{ "type": "command", "command": "jq -r '.tool_input.file_path' | xargs npx prettier --write" }]

54 }

55 ],

56 "Notification": [

57 {

58 "matcher": "",

59 "hooks": [{ "type": "command", "command": "osascript -e 'display notification \"Claude Code needs your attention\" with title \"Claude Code\"'" }]

60 }

61 ]

62 }

63 }

64 ```

65 

66 Anda juga dapat meminta Claude untuk menulis hook untuk Anda dengan mendeskripsikan apa yang Anda inginkan di CLI.

67 </Step>

68 

69 <Step title="Verifikasi konfigurasi">

70 Ketik `/hooks` untuk membuka browser hooks. Anda akan melihat daftar semua acara hook yang tersedia, dengan hitungan di sebelah setiap acara yang memiliki hooks yang dikonfigurasi. Pilih `Notification` untuk mengonfirmasi hook baru Anda muncul dalam daftar. Memilih hook menampilkan detailnya: acara, matcher, jenis, file sumber, dan perintah.

71 </Step>

72 

73 <Step title="Uji hook">

74 Tekan `Esc` untuk kembali ke CLI. Minta Claude untuk melakukan sesuatu yang memerlukan izin, kemudian beralih dari terminal. Anda harus menerima notifikasi desktop.

75 </Step>

76</Steps>

77 

78<Tip>

79 Menu `/hooks` bersifat read-only. Untuk menambah, memodifikasi, atau menghapus hooks, edit JSON pengaturan Anda secara langsung atau minta Claude untuk membuat perubahan.

80</Tip>

81 

82## Apa yang dapat Anda otomatisasi

83 

84Hooks memungkinkan Anda menjalankan kode pada titik-titik kunci dalam siklus hidup Claude Code: format file setelah edit, blokir perintah sebelum dijalankan, kirim notifikasi ketika Claude memerlukan input, injeksi konteks saat awal sesi, dan banyak lagi. Untuk daftar lengkap acara hook, lihat [Hooks reference](/id/hooks#hook-lifecycle).

85 

86Setiap contoh mencakup blok konfigurasi siap pakai yang Anda tambahkan ke [file pengaturan](#configure-hook-location). Pola paling umum:

87 

88* [Dapatkan notifikasi ketika Claude memerlukan input](#get-notified-when-claude-needs-input)

89* [Auto-format kode setelah edit](#auto-format-code-after-edits)

90* [Blokir edit ke file yang dilindungi](#block-edits-to-protected-files)

91* [Re-inject konteks setelah compaction](#re-inject-context-after-compaction)

92* [Audit perubahan konfigurasi](#audit-configuration-changes)

93* [Muat ulang lingkungan ketika direktori atau file berubah](#reload-environment-when-directory-or-files-change)

94* [Auto-approve prompt izin tertentu](#auto-approve-specific-permission-prompts)

95 

96### Dapatkan notifikasi ketika Claude memerlukan input

97 

98Dapatkan notifikasi desktop kapan pun Claude selesai bekerja dan memerlukan input Anda, sehingga Anda dapat beralih ke tugas lain tanpa memeriksa terminal.

99 

100Hook ini menggunakan acara `Notification`, yang aktif ketika Claude menunggu input atau izin. Setiap tab di bawah menggunakan perintah notifikasi asli platform. Tambahkan ini ke `~/.claude/settings.json`:

101 

102<Tabs>

103 <Tab title="macOS">

104 ```json theme={null}

105 {

106 "hooks": {

107 "Notification": [

108 {

109 "matcher": "",

110 "hooks": [

111 {

112 "type": "command",

113 "command": "osascript -e 'display notification \"Claude Code needs your attention\" with title \"Claude Code\"'"

114 }

115 ]

116 }

117 ]

118 }

119 }

120 ```

121 

122 <Accordion title="Jika tidak ada notifikasi yang muncul">

123 `osascript` merutekan notifikasi melalui aplikasi Script Editor bawaan. Jika Script Editor tidak memiliki izin notifikasi, perintah gagal diam-diam, dan macOS tidak akan meminta Anda untuk memberikannya. Jalankan ini di Terminal sekali untuk membuat Script Editor muncul di pengaturan notifikasi Anda:

124 

125 ```bash theme={null}

126 osascript -e 'display notification "test"'

127 ```

128 

129 Tidak ada yang akan muncul dulu. Buka **System Settings > Notifications**, temukan **Script Editor** dalam daftar, dan aktifkan **Allow Notifications**. Jalankan perintah lagi untuk mengonfirmasi notifikasi uji muncul.

130 </Accordion>

131 </Tab>

132 

133 <Tab title="Linux">

134 ```json theme={null}

135 {

136 "hooks": {

137 "Notification": [

138 {

139 "matcher": "",

140 "hooks": [

141 {

142 "type": "command",

143 "command": "notify-send 'Claude Code' 'Claude Code needs your attention'"

144 }

145 ]

146 }

147 ]

148 }

149 }

150 ```

151 </Tab>

152 

153 <Tab title="Windows (PowerShell)">

154 ```json theme={null}

155 {

156 "hooks": {

157 "Notification": [

158 {

159 "matcher": "",

160 "hooks": [

161 {

162 "type": "command",

163 "command": "powershell.exe -Command \"[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms'); [System.Windows.Forms.MessageBox]::Show('Claude Code needs your attention', 'Claude Code')\""

164 }

165 ]

166 }

167 ]

168 }

169 }

170 ```

171 </Tab>

172</Tabs>

173 

174Matcher kosong `matcher` aktif pada semua jenis notifikasi. Untuk aktif hanya pada acara tertentu, atur ke salah satu nilai berikut:

175 

176| Matcher | Aktif ketika |

177| :--------------------- | :------------------------------------------------------ |

178| `permission_prompt` | Claude memerlukan Anda untuk menyetujui penggunaan alat |

179| `idle_prompt` | Claude selesai dan menunggu prompt berikutnya Anda |

180| `auth_success` | Autentikasi selesai |

181| `elicitation_dialog` | Server MCP membuka formulir elicitation |

182| `elicitation_complete` | Formulir elicitation MCP dikirimkan atau ditutup |

183| `elicitation_response` | Respons elicitation MCP dikirim kembali ke server |

184 

185Ketik `/hooks` dan pilih `Notification` untuk mengonfirmasi hook terdaftar. Untuk skema acara lengkap, lihat [Notification reference](/id/hooks#notification).

186 

187### Auto-format kode setelah edit

188 

189Jalankan [Prettier](https://prettier.io/) secara otomatis pada setiap file yang Claude edit, sehingga pemformatan tetap konsisten tanpa intervensi manual.

190 

191Hook ini menggunakan acara `PostToolUse` dengan matcher `Edit|Write`, sehingga hanya berjalan setelah alat pengeditan file. Perintah mengekstrak jalur file yang diedit dengan [`jq`](https://jqlang.github.io/jq/) dan meneruskannya ke Prettier. Tambahkan ini ke `.claude/settings.json` di root proyek Anda:

192 

193```json theme={null}

194{

195 "hooks": {

196 "PostToolUse": [

197 {

198 "matcher": "Edit|Write",

199 "hooks": [

200 {

201 "type": "command",

202 "command": "jq -r '.tool_input.file_path' | xargs npx prettier --write"

203 }

204 ]

205 }

206 ]

207 }

208}

209```

210 

211<Note>

212 Contoh Bash di halaman ini menggunakan `jq` untuk parsing JSON. Instal dengan `brew install jq` (macOS), `apt-get install jq` (Debian/Ubuntu), atau lihat [`jq` downloads](https://jqlang.github.io/jq/download/).

213</Note>

214 

215### Blokir edit ke file yang dilindungi

216 

217Cegah Claude dari memodifikasi file sensitif seperti `.env`, `package-lock.json`, atau apa pun di `.git/`. Claude menerima umpan balik yang menjelaskan mengapa edit diblokir, sehingga dapat menyesuaikan pendekatannya.

218 

219Contoh ini menggunakan file skrip terpisah yang dipanggil hook. Skrip memeriksa jalur file target terhadap daftar pola yang dilindungi dan keluar dengan kode 2 untuk memblokir edit.

220 

221<Steps>

222 <Step title="Buat skrip hook">

223 Simpan ini ke `.claude/hooks/protect-files.sh`:

224 

225 ```bash theme={null}

226 #!/bin/bash

227 # protect-files.sh

228 

229 INPUT=$(cat)

230 FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')

231 

232 PROTECTED_PATTERNS=(".env" "package-lock.json" ".git/")

233 

234 for pattern in "${PROTECTED_PATTERNS[@]}"; do

235 if [[ "$FILE_PATH" == *"$pattern"* ]]; then

236 echo "Blocked: $FILE_PATH matches protected pattern '$pattern'" >&2

237 exit 2

238 fi

239 done

240 

241 exit 0

242 ```

243 </Step>

244 

245 <Step title="Buat skrip dapat dieksekusi (macOS/Linux)">

246 Skrip hook harus dapat dieksekusi agar Claude Code dapat menjalankannya:

247 

248 ```bash theme={null}

249 chmod +x .claude/hooks/protect-files.sh

250 ```

251 </Step>

252 

253 <Step title="Daftarkan hook">

254 Tambahkan hook `PreToolUse` ke `.claude/settings.json` yang menjalankan skrip sebelum panggilan alat `Edit` atau `Write`:

255 

256 ```json theme={null}

257 {

258 "hooks": {

259 "PreToolUse": [

260 {

261 "matcher": "Edit|Write",

262 "hooks": [

263 {

264 "type": "command",

265 "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/protect-files.sh"

266 }

267 ]

268 }

269 ]

270 }

271 }

272 ```

273 </Step>

274</Steps>

275 

276### Re-inject konteks setelah compaction

277 

278Ketika jendela konteks Claude penuh, compaction merangkum percakapan untuk membebaskan ruang. Ini dapat kehilangan detail penting. Gunakan hook `SessionStart` dengan matcher `compact` untuk re-inject konteks kritis setelah setiap compaction.

279 

280Teks apa pun yang ditulis perintah Anda ke stdout ditambahkan ke konteks Claude. Contoh ini mengingatkan Claude tentang konvensi proyek dan pekerjaan terbaru. Tambahkan ini ke `.claude/settings.json` di root proyek Anda:

281 

282```json theme={null}

283{

284 "hooks": {

285 "SessionStart": [

286 {

287 "matcher": "compact",

288 "hooks": [

289 {

290 "type": "command",

291 "command": "echo 'Reminder: use Bun, not npm. Run bun test before committing. Current sprint: auth refactor.'"

292 }

293 ]

294 }

295 ]

296 }

297}

298```

299 

300Anda dapat mengganti `echo` dengan perintah apa pun yang menghasilkan output dinamis, seperti `git log --oneline -5` untuk menampilkan commit terbaru. Untuk injeksi konteks pada setiap awal sesi, pertimbangkan menggunakan [CLAUDE.md](/id/memory) sebagai gantinya. Untuk variabel lingkungan, lihat [`CLAUDE_ENV_FILE`](/id/hooks#persist-environment-variables) dalam referensi.

301 

302### Audit perubahan konfigurasi

303 

304Lacak ketika file pengaturan atau skills berubah selama sesi. Acara `ConfigChange` aktif ketika proses eksternal atau editor memodifikasi file konfigurasi, sehingga Anda dapat mencatat perubahan untuk kepatuhan atau memblokir modifikasi yang tidak sah.

305 

306Contoh ini menambahkan setiap perubahan ke log audit. Tambahkan ini ke `~/.claude/settings.json`:

307 

308```json theme={null}

309{

310 "hooks": {

311 "ConfigChange": [

312 {

313 "matcher": "",

314 "hooks": [

315 {

316 "type": "command",

317 "command": "jq -c '{timestamp: now | todate, source: .source, file: .file_path}' >> ~/claude-config-audit.log"

318 }

319 ]

320 }

321 ]

322 }

323}

324```

325 

326Matcher memfilter berdasarkan jenis konfigurasi: `user_settings`, `project_settings`, `local_settings`, `policy_settings`, atau `skills`. Untuk memblokir perubahan agar tidak berlaku, keluar dengan kode 2 atau kembalikan `{"decision": "block"}`. Lihat [ConfigChange reference](/id/hooks#configchange) untuk skema input lengkap.

327 

328### Muat ulang lingkungan ketika direktori atau file berubah

329 

330Beberapa proyek menetapkan variabel lingkungan berbeda tergantung pada direktori mana Anda berada. Alat seperti [direnv](https://direnv.net/) melakukan ini secara otomatis di shell Anda, tetapi alat Bash Claude tidak mengambil perubahan itu sendiri.

331 

332Memasangkan hook `SessionStart` dengan hook `CwdChanged` memperbaiki ini. `SessionStart` memuat variabel untuk direktori tempat Anda meluncurkan, dan `CwdChanged` memuat ulang variabel setiap kali Claude mengubah direktori. Keduanya menulis ke `CLAUDE_ENV_FILE`, yang Claude Code jalankan sebagai preamble skrip sebelum setiap perintah Bash. Tambahkan ini ke `~/.claude/settings.json`:

333 

334```json theme={null}

335{

336 "hooks": {

337 "SessionStart": [

338 {

339 "hooks": [

340 {

341 "type": "command",

342 "command": "direnv export bash > \"$CLAUDE_ENV_FILE\""

343 }

344 ]

345 }

346 ],

347 "CwdChanged": [

348 {

349 "hooks": [

350 {

351 "type": "command",

352 "command": "direnv export bash > \"$CLAUDE_ENV_FILE\""

353 }

354 ]

355 }

356 ]

357 }

358}

359```

360 

361Jalankan `direnv allow` sekali di setiap direktori yang memiliki `.envrc` sehingga direnv diizinkan untuk memuatnya. Jika Anda menggunakan devbox atau nix sebagai gantinya direnv, pola yang sama berfungsi dengan `devbox shellenv` atau `devbox global shellenv` sebagai pengganti `direnv export bash`.

362 

363Untuk bereaksi terhadap file spesifik daripada setiap perubahan direktori, gunakan `FileChanged` dengan `matcher` yang mencantumkan nama file yang akan dipantau, dipisahkan dengan `|`. Untuk membangun daftar pantau, nilai ini dibagi menjadi nama file literal daripada dievaluasi sebagai regex. Lihat [FileChanged](/id/hooks#filechanged) untuk cara nilai yang sama juga memfilter hook mana yang berjalan ketika file berubah. Contoh ini memantau `.envrc` dan `.env` di direktori kerja:

364 

365```json theme={null}

366{

367 "hooks": {

368 "FileChanged": [

369 {

370 "matcher": ".envrc|.env",

371 "hooks": [

372 {

373 "type": "command",

374 "command": "direnv export bash > \"$CLAUDE_ENV_FILE\""

375 }

376 ]

377 }

378 ]

379 }

380}

381```

382 

383Lihat entri referensi [CwdChanged](/id/hooks#cwdchanged) dan [FileChanged](/id/hooks#filechanged) untuk skema input, output `watchPaths`, dan detail `CLAUDE_ENV_FILE`.

384 

385### Auto-approve prompt izin tertentu

386 

387Lewati dialog persetujuan untuk panggilan alat yang selalu Anda izinkan. Contoh ini auto-approve `ExitPlanMode`, alat yang Claude panggil ketika selesai menyajikan rencana dan meminta untuk melanjutkan, sehingga Anda tidak diminta setiap kali rencana siap.

388 

389Tidak seperti contoh kode keluar di atas, auto-approval memerlukan hook Anda untuk menulis keputusan JSON ke stdout. Hook `PermissionRequest` aktif ketika Claude Code akan menampilkan dialog izin, dan mengembalikan `"behavior": "allow"` menjawabnya atas nama Anda.

390 

391Matcher membatasi hook ke `ExitPlanMode` saja, sehingga tidak ada prompt lain yang terpengaruh. Tambahkan ini ke `~/.claude/settings.json`:

392 

393```json theme={null}

394{

395 "hooks": {

396 "PermissionRequest": [

397 {

398 "matcher": "ExitPlanMode",

399 "hooks": [

400 {

401 "type": "command",

402 "command": "echo '{\"hookSpecificOutput\": {\"hookEventName\": \"PermissionRequest\", \"decision\": {\"behavior\": \"allow\"}}}'"

403 }

404 ]

405 }

406 ]

407 }

408}

409```

410 

411Ketika hook menyetujui, Claude Code keluar dari plan mode dan mengembalikan mode izin apa pun yang aktif sebelum Anda memasuki plan mode. Transkrip menunjukkan "Allowed by PermissionRequest hook" di mana dialog akan muncul. Jalur hook selalu menjaga percakapan saat ini: tidak dapat menghapus konteks dan memulai sesi implementasi segar seperti yang dapat dilakukan dialog.

412 

413Untuk menetapkan mode izin tertentu sebagai gantinya, output hook Anda dapat menyertakan array `updatedPermissions` dengan entri `setMode`. Nilai `mode` adalah mode izin apa pun seperti `default`, `acceptEdits`, atau `bypassPermissions`, dan `destination: "session"` menerapkannya hanya untuk sesi saat ini.

414 

415<Note>

416 `bypassPermissions` hanya berlaku jika sesi diluncurkan dengan mode bypass sudah tersedia: `--dangerously-skip-permissions`, `--permission-mode bypassPermissions`, `--allow-dangerously-skip-permissions`, atau `permissions.defaultMode: "bypassPermissions"` dalam pengaturan, dan tidak dinonaktifkan oleh [`permissions.disableBypassPermissionsMode`](/id/permissions#managed-settings). Ini tidak pernah disimpan sebagai `defaultMode`.

417</Note>

418 

419Untuk beralih sesi ke `acceptEdits`, hook Anda menulis JSON ini ke stdout:

420 

421```json theme={null}

422{

423 "hookSpecificOutput": {

424 "hookEventName": "PermissionRequest",

425 "decision": {

426 "behavior": "allow",

427 "updatedPermissions": [

428 { "type": "setMode", "mode": "acceptEdits", "destination": "session" }

429 ]

430 }

431 }

432}

433```

434 

435Jaga matcher sesempit mungkin. Mencocokkan pada `.*` atau membiarkan matcher kosong akan auto-approve setiap prompt izin, termasuk penulisan file dan perintah shell. Lihat [PermissionRequest reference](/id/hooks#permissionrequest-decision-control) untuk set lengkap bidang keputusan.

436 

437## Cara kerja hooks

438 

439Acara hook aktif pada titik-titik siklus hidup spesifik di Claude Code. Ketika acara aktif, semua hook yang cocok berjalan secara paralel, dan perintah hook yang identik secara otomatis dideduplikasi. Tabel di bawah menunjukkan setiap acara dan kapan dipicu:

440 

441| Event | When it fires |

442| :-------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------- |

443| `SessionStart` | When a session begins or resumes |

444| `Setup` | When you start Claude Code with `--init-only`, or with `--init` or `--maintenance` in `-p` mode. For one-time preparation in CI or scripts |

445| `UserPromptSubmit` | When you submit a prompt, before Claude processes it |

446| `UserPromptExpansion` | When a user-typed command expands into a prompt, before it reaches Claude. Can block the expansion |

447| `PreToolUse` | Before a tool call executes. Can block it |

448| `PermissionRequest` | When a permission dialog appears |

449| `PermissionDenied` | When a tool call is denied by the auto mode classifier. Return `{retry: true}` to tell the model it may retry the denied tool call |

450| `PostToolUse` | After a tool call succeeds |

451| `PostToolUseFailure` | After a tool call fails |

452| `PostToolBatch` | After a full batch of parallel tool calls resolves, before the next model call |

453| `Notification` | When Claude Code sends a notification |

454| `SubagentStart` | When a subagent is spawned |

455| `SubagentStop` | When a subagent finishes |

456| `TaskCreated` | When a task is being created via `TaskCreate` |

457| `TaskCompleted` | When a task is being marked as completed |

458| `Stop` | When Claude finishes responding |

459| `StopFailure` | When the turn ends due to an API error. Output and exit code are ignored |

460| `TeammateIdle` | When an [agent team](/en/agent-teams) teammate is about to go idle |

461| `InstructionsLoaded` | When a CLAUDE.md or `.claude/rules/*.md` file is loaded into context. Fires at session start and when files are lazily loaded during a session |

462| `ConfigChange` | When a configuration file changes during a session |

463| `CwdChanged` | When the working directory changes, for example when Claude executes a `cd` command. Useful for reactive environment management with tools like direnv |

464| `FileChanged` | When a watched file changes on disk. The `matcher` field specifies which filenames to watch |

465| `WorktreeCreate` | When a worktree is being created via `--worktree` or `isolation: "worktree"`. Replaces default git behavior |

466| `WorktreeRemove` | When a worktree is being removed, either at session exit or when a subagent finishes |

467| `PreCompact` | Before context compaction |

468| `PostCompact` | After context compaction completes |

469| `Elicitation` | When an MCP server requests user input during a tool call |

470| `ElicitationResult` | After a user responds to an MCP elicitation, before the response is sent back to the server |

471| `SessionEnd` | When a session terminates |

472 

473Ketika beberapa hook cocok, masing-masing mengembalikan hasilnya sendiri. Untuk keputusan, Claude Code memilih jawaban yang paling ketat. Hook `PreToolUse` yang mengembalikan `deny` membatalkan panggilan alat tidak peduli apa yang dikembalikan yang lain. Satu hook yang mengembalikan `ask` memaksa prompt izin bahkan jika sisanya mengembalikan `allow`. Teks dari `additionalContext` disimpan dari setiap hook dan diteruskan ke Claude bersama-sama.

474 

475Setiap hook memiliki `type` yang menentukan cara menjalankannya. Sebagian besar hooks menggunakan `"type": "command"`, yang menjalankan perintah shell. Empat jenis lain tersedia:

476 

477* `"type": "http"`: POST data acara ke URL. Lihat [HTTP hooks](#http-hooks).

478* `"type": "mcp_tool"`: panggil alat pada server MCP yang sudah terhubung. Lihat [MCP tool hooks](/id/hooks#mcp-tool-hook-fields).

479* `"type": "prompt"`: evaluasi LLM single-turn. Lihat [Prompt-based hooks](#prompt-based-hooks).

480* `"type": "agent"`: verifikasi multi-turn dengan akses alat. Agent hooks bersifat eksperimental dan mungkin berubah. Lihat [Agent-based hooks](#agent-based-hooks).

481 

482### Baca input dan kembalikan output

483 

484Hooks berkomunikasi dengan Claude Code melalui stdin, stdout, stderr, dan kode keluar. Ketika acara aktif, Claude Code meneruskan data spesifik acara sebagai JSON ke stdin skrip Anda. Skrip Anda membaca data itu, melakukan pekerjaan, dan memberi tahu Claude Code apa yang harus dilakukan selanjutnya melalui kode keluar.

485 

486#### Hook input

487 

488Setiap acara mencakup bidang umum seperti `session_id` dan `cwd`, tetapi setiap jenis acara menambahkan data berbeda. Misalnya, ketika Claude menjalankan perintah Bash, hook `PreToolUse` menerima sesuatu seperti ini di stdin:

489 

490```json theme={null}

491{

492 "session_id": "abc123", // unique ID for this session

493 "cwd": "/Users/sarah/myproject", // working directory when the event fired

494 "hook_event_name": "PreToolUse", // which event triggered this hook

495 "tool_name": "Bash", // the tool Claude is about to use

496 "tool_input": { // the arguments Claude passed to the tool

497 "command": "npm test" // for Bash, this is the shell command

498 }

499}

500```

501 

502Skrip Anda dapat mengurai JSON itu dan bertindak atas bidang apa pun. Hook `UserPromptSubmit` mendapatkan teks `prompt` sebagai gantinya, hook `SessionStart` mendapatkan `source` (startup, resume, clear, compact), dan seterusnya. Lihat [Common input fields](/id/hooks#common-input-fields) dalam referensi untuk bidang bersama, dan bagian setiap acara untuk skema spesifik acara.

503 

504#### Hook output

505 

506Skrip Anda memberi tahu Claude Code apa yang harus dilakukan selanjutnya dengan menulis ke stdout atau stderr dan keluar dengan kode spesifik. Misalnya, hook `PreToolUse` yang ingin memblokir perintah:

507 

508```bash theme={null}

509#!/bin/bash

510INPUT=$(cat)

511COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command')

512 

513if echo "$COMMAND" | grep -q "drop table"; then

514 echo "Blocked: dropping tables is not allowed" >&2 # stderr becomes Claude's feedback

515 exit 2 # exit 2 = block the action

516fi

517 

518exit 0 # exit 0 = let it proceed

519```

520 

521Kode keluar menentukan apa yang terjadi selanjutnya:

522 

523* **Exit 0**: tindakan berlanjut. Untuk hook `UserPromptSubmit`, `UserPromptExpansion`, dan `SessionStart`, apa pun yang Anda tulis ke stdout ditambahkan ke konteks Claude.

524* **Exit 2**: tindakan diblokir. Tulis alasan ke stderr, dan Claude menerimanya sebagai umpan balik sehingga dapat menyesuaikan. Beberapa acara tidak dapat diblokir: untuk `SessionStart`, `Setup`, `Notification`, dan lainnya, exit 2 menampilkan stderr kepada pengguna dan eksekusi berlanjut. Lihat [exit code 2 behavior per event](/id/hooks#exit-code-2-behavior-per-event) untuk daftar lengkap.

525* **Kode keluar lainnya**: tindakan berlanjut. Transkrip menunjukkan pemberitahuan `<hook name> hook error` diikuti oleh baris pertama stderr; stderr lengkap masuk ke [debug log](/id/hooks#debug-hooks).

526 

527#### Structured JSON output

528 

529Kode keluar memberi Anda dua opsi: izinkan atau blokir. Untuk kontrol lebih, keluar 0 dan cetak objek JSON ke stdout sebagai gantinya.

530 

531<Note>

532 Gunakan exit 2 untuk memblokir dengan pesan stderr, atau exit 0 dengan JSON untuk kontrol terstruktur. Jangan campur: Claude Code mengabaikan JSON ketika Anda exit 2.

533</Note>

534 

535Misalnya, hook `PreToolUse` dapat menolak panggilan alat dan memberi tahu Claude mengapa, atau meningkatkannya ke pengguna untuk persetujuan:

536 

537```json theme={null}

538{

539 "hookSpecificOutput": {

540 "hookEventName": "PreToolUse",

541 "permissionDecision": "deny",

542 "permissionDecisionReason": "Use rg instead of grep for better performance"

543 }

544}

545```

546 

547Dengan `"deny"`, Claude Code membatalkan panggilan alat dan memberi makan `permissionDecisionReason` kembali ke Claude. Nilai `permissionDecision` ini spesifik untuk `PreToolUse`:

548 

549* `"allow"`: lewati prompt izin interaktif. Aturan deny dan ask, termasuk daftar deny yang dikelola perusahaan, masih berlaku

550* `"deny"`: batalkan panggilan alat dan kirim alasan ke Claude

551* `"ask"`: tampilkan prompt izin kepada pengguna seperti biasa

552 

553Nilai keempat, `"defer"`, tersedia dalam [non-interactive mode](/id/headless) dengan flag `-p`. Ini keluar dari proses dengan panggilan alat yang dipertahankan sehingga pembungkus Agent SDK dapat mengumpulkan input dan melanjutkan. Lihat [Defer a tool call for later](/id/hooks#defer-a-tool-call-for-later) dalam referensi.

554 

555Mengembalikan `"allow"` melewati prompt interaktif tetapi tidak mengesampingkan [aturan izin](/id/permissions#manage-permissions). Jika aturan deny cocok dengan panggilan alat, panggilan diblokir bahkan ketika hook Anda mengembalikan `"allow"`. Jika aturan ask cocok, pengguna masih diminta. Ini berarti aturan deny dari cakupan pengaturan apa pun, termasuk [pengaturan terkelola](/id/settings#settings-files), selalu mengambil alih persetujuan hook.

556 

557Acara lain menggunakan pola keputusan berbeda. Misalnya, hook `PostToolUse` dan `Stop` menggunakan bidang `decision: "block"` tingkat atas, sementara `PermissionRequest` menggunakan `hookSpecificOutput.decision.behavior`. Lihat [summary table](/id/hooks#decision-control) dalam referensi untuk rincian lengkap berdasarkan acara.

558 

559Untuk hook `UserPromptSubmit`, gunakan `additionalContext` sebagai gantinya untuk menyuntikkan teks ke dalam konteks Claude. Hook berbasis prompt (`type: "prompt"`) menangani output secara berbeda: lihat [Prompt-based hooks](#prompt-based-hooks).

560 

561### Filter hooks dengan matchers

562 

563Tanpa matcher, hook aktif pada setiap kemunculan acaranya. Matchers memungkinkan Anda mempersempit itu. Misalnya, jika Anda ingin menjalankan formatter hanya setelah edit file (bukan setelah setiap panggilan alat), tambahkan matcher ke hook `PostToolUse` Anda:

564 

565```json theme={null}

566{

567 "hooks": {

568 "PostToolUse": [

569 {

570 "matcher": "Edit|Write",

571 "hooks": [

572 { "type": "command", "command": "prettier --write ..." }

573 ]

574 }

575 ]

576 }

577}

578```

579 

580Matcher `"Edit|Write"` aktif hanya ketika Claude menggunakan alat `Edit` atau `Write`, bukan ketika menggunakan `Bash`, `Read`, atau alat lainnya. Lihat [Matcher patterns](/id/hooks#matcher-patterns) untuk cara nama biasa dan ekspresi reguler dievaluasi.

581 

582<Note>

583 Claude juga dapat membuat atau memodifikasi file dengan menjalankan perintah shell melalui alat `Bash`. Jika hook Anda harus melihat setiap perubahan file, seperti untuk pemindaian kepatuhan atau pencatatan audit, tambahkan hook [`Stop`](/id/hooks#stop) yang memindai pohon kerja sekali per giliran. Untuk cakupan per-panggilan sebagai gantinya, juga cocokkan `Bash` dan buat skrip Anda mencantumkan file yang dimodifikasi dan tidak dilacak dengan `git status --porcelain`.

584</Note>

585 

586Setiap jenis acara cocok pada bidang spesifik:

587 

588| Acara | Apa yang difilter matcher | Contoh nilai matcher |

589| :-------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------- |

590| `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, `PermissionDenied` | nama alat | `Bash`, `Edit\|Write`, `mcp__.*` |

591| `SessionStart` | cara sesi dimulai | `startup`, `resume`, `clear`, `compact` |

592| `Setup` | flag CLI mana yang memicu setup | `init`, `maintenance` |

593| `SessionEnd` | mengapa sesi berakhir | `clear`, `resume`, `logout`, `prompt_input_exit`, `bypass_permissions_disabled`, `other` |

594| `Notification` | jenis notifikasi | `permission_prompt`, `idle_prompt`, `auth_success`, `elicitation_dialog`, `elicitation_complete`, `elicitation_response` |

595| `SubagentStart` | jenis agen | `general-purpose`, `Explore`, `Plan`, atau nama agen khusus |

596| `PreCompact`, `PostCompact` | apa yang memicu compaction | `manual`, `auto` |

597| `SubagentStop` | jenis agen | nilai yang sama seperti `SubagentStart` |

598| `ConfigChange` | sumber konfigurasi | `user_settings`, `project_settings`, `local_settings`, `policy_settings`, `skills` |

599| `StopFailure` | jenis kesalahan | `rate_limit`, `authentication_failed`, `oauth_org_not_allowed`, `billing_error`, `invalid_request`, `server_error`, `max_output_tokens`, `unknown` |

600| `InstructionsLoaded` | alasan pemuatan | `session_start`, `nested_traversal`, `path_glob_match`, `include`, `compact` |

601| `Elicitation` | nama server MCP | nama server MCP yang dikonfigurasi Anda |

602| `ElicitationResult` | nama server MCP | nilai yang sama seperti `Elicitation` |

603| `FileChanged` | nama file literal yang dipantau (lihat [FileChanged](/id/hooks#filechanged)) | `.envrc\|.env` |

604| `UserPromptExpansion` | nama perintah | nama skill atau perintah Anda |

605| `UserPromptSubmit`, `PostToolBatch`, `Stop`, `TeammateIdle`, `TaskCreated`, `TaskCompleted`, `WorktreeCreate`, `WorktreeRemove`, `CwdChanged` | tidak ada dukungan matcher | selalu aktif pada setiap kemunculan |

606 

607Beberapa contoh lagi menunjukkan matchers pada jenis acara berbeda:

608 

609<Tabs>

610 <Tab title="Catat setiap perintah Bash">

611 Cocokkan hanya panggilan alat `Bash` dan catat setiap perintah ke file. Acara `PostToolUse` aktif setelah perintah selesai, jadi `tool_input.command` berisi apa yang berjalan. Hook menerima data acara sebagai JSON di stdin, dan `jq -r '.tool_input.command'` mengekstrak hanya string perintah, yang `>>` tambahkan ke file log:

612 

613 ```json theme={null}

614 {

615 "hooks": {

616 "PostToolUse": [

617 {

618 "matcher": "Bash",

619 "hooks": [

620 {

621 "type": "command",

622 "command": "jq -r '.tool_input.command' >> ~/.claude/command-log.txt"

623 }

624 ]

625 }

626 ]

627 }

628 }

629 ```

630 </Tab>

631 

632 <Tab title="Cocokkan alat MCP">

633 Alat MCP menggunakan konvensi penamaan berbeda dari alat bawaan: `mcp__<server>__<tool>`, di mana `<server>` adalah nama server MCP dan `<tool>` adalah alat yang disediakannya. Misalnya, `mcp__github__search_repositories` atau `mcp__filesystem__read_file`. Gunakan matcher regex untuk menargetkan semua alat dari server spesifik, atau cocokkan di seluruh server dengan pola seperti `mcp__.*__write.*`. Lihat [Match MCP tools](/id/hooks#match-mcp-tools) dalam referensi untuk daftar lengkap contoh.

634 

635 Perintah di bawah mengekstrak nama alat dari input JSON hook dengan `jq` dan menulisnya ke stderr. Menulis ke stderr menjaga stdout bersih untuk output JSON dan mengirim pesan ke [debug log](/id/hooks#debug-hooks):

636 

637 ```json theme={null}

638 {

639 "hooks": {

640 "PreToolUse": [

641 {

642 "matcher": "mcp__github__.*",

643 "hooks": [

644 {

645 "type": "command",

646 "command": "echo \"GitHub tool called: $(jq -r '.tool_name')\" >&2"

647 }

648 ]

649 }

650 ]

651 }

652 }

653 ```

654 </Tab>

655 

656 <Tab title="Bersihkan saat akhir sesi">

657 Acara `SessionEnd` mendukung matchers pada alasan sesi berakhir. Hook ini hanya aktif pada `clear` (ketika Anda menjalankan `/clear`), bukan pada keluar normal:

658 

659 ```json theme={null}

660 {

661 "hooks": {

662 "SessionEnd": [

663 {

664 "matcher": "clear",

665 "hooks": [

666 {

667 "type": "command",

668 "command": "rm -f /tmp/claude-scratch-*.txt"

669 }

670 ]

671 }

672 ]

673 }

674 }

675 ```

676 </Tab>

677</Tabs>

678 

679Untuk sintaks matcher lengkap, lihat [Hooks reference](/id/hooks#configuration).

680 

681#### Filter berdasarkan nama alat dan argumen dengan bidang `if`

682 

683<Note>

684 Bidang `if` memerlukan Claude Code v2.1.85 atau lebih baru. Versi sebelumnya mengabaikannya dan menjalankan hook pada setiap panggilan yang cocok.

685</Note>

686 

687Bidang `if` menggunakan [sintaks aturan izin](/id/permissions) untuk memfilter hooks berdasarkan nama alat dan argumen bersama-sama, sehingga proses hook hanya muncul ketika panggilan alat cocok, atau ketika perintah Bash terlalu kompleks untuk diurai. Ini melampaui `matcher`, yang memfilter pada tingkat grup berdasarkan nama alat saja.

688 

689Misalnya, untuk menjalankan hook hanya ketika Claude menggunakan perintah `git` daripada semua perintah Bash:

690 

691```json theme={null}

692{

693 "hooks": {

694 "PreToolUse": [

695 {

696 "matcher": "Bash",

697 "hooks": [

698 {

699 "type": "command",

700 "if": "Bash(git *)",

701 "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/check-git-policy.sh"

702 }

703 ]

704 }

705 ]

706 }

707}

708```

709 

710Proses hook hanya muncul ketika subperintah dari perintah Bash cocok dengan `git *`, atau ketika perintah terlalu kompleks untuk diurai menjadi subperintah. Untuk perintah gabungan seperti `npm test && git push`, Claude Code mengevaluasi setiap subperintah dan menjalankan hook karena `git push` cocok. Bidang `if` menerima pola yang sama seperti aturan izin: `"Bash(git *)"`, `"Edit(*.ts)"`, dan seterusnya. Untuk mencocokkan beberapa nama alat, gunakan handler terpisah masing-masing dengan nilai `if` sendiri, atau cocokkan pada tingkat `matcher` di mana alternasi pipa didukung.

711 

712`if` hanya bekerja pada acara alat: `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, dan `PermissionDenied`. Menambahkannya ke acara lain mencegah hook dari berjalan.

713 

714### Konfigurasi lokasi hook

715 

716Di mana Anda menambahkan hook menentukan cakupannya:

717 

718| Lokasi | Cakupan | Dapat Dibagikan |

719| :----------------------------------------------------------- | :-------------------------- | :------------------------------------ |

720| `~/.claude/settings.json` | Semua proyek Anda | Tidak, lokal ke mesin Anda |

721| `.claude/settings.json` | Proyek tunggal | Ya, dapat dikomit ke repo |

722| `.claude/settings.local.json` | Proyek tunggal | Tidak, gitignored |

723| Pengaturan kebijakan terkelola | Seluruh organisasi | Ya, dikendalikan admin |

724| [Plugin](/id/plugins) `hooks/hooks.json` | Ketika plugin diaktifkan | Ya, dikemas dengan plugin |

725| [Skill](/id/skills) atau [agent](/id/sub-agents) frontmatter | Saat skill atau agent aktif | Ya, didefinisikan dalam file komponen |

726 

727Jalankan [`/hooks`](/id/hooks#the-hooks-menu) di Claude Code untuk menjelajahi semua hooks yang dikonfigurasi dikelompokkan berdasarkan acara. Untuk menonaktifkan semua hooks sekaligus, atur `"disableAllHooks": true` dalam file pengaturan Anda.

728 

729Jika Anda mengedit file pengaturan secara langsung saat Claude Code berjalan, file watcher biasanya mengambil perubahan hook secara otomatis.

730 

731## Prompt-based hooks

732 

733Untuk keputusan yang memerlukan penilaian daripada aturan deterministik, gunakan hook `type: "prompt"`. Daripada menjalankan perintah shell, Claude Code mengirim prompt Anda dan data input hook ke model Claude (Haiku secara default) untuk membuat keputusan. Anda dapat menentukan model berbeda dengan bidang `model` jika Anda memerlukan kemampuan lebih.

734 

735Satu-satunya pekerjaan model adalah mengembalikan keputusan ya/tidak sebagai JSON:

736 

737* `"ok": true`: tindakan berlanjut

738* `"ok": false`: apa yang terjadi tergantung pada peristiwa:

739 * `Stop` dan `SubagentStop`: `reason` diberi makan kembali ke Claude sehingga terus bekerja

740 * `PreToolUse`: panggilan alat ditolak dan `reason` dikembalikan ke Claude sebagai kesalahan alat, sehingga dapat menyesuaikan dan melanjutkan

741 * `PostToolUse`, `PostToolBatch`, `UserPromptSubmit`, dan `UserPromptExpansion`: giliran berakhir dan `reason` muncul dalam obrolan sebagai baris peringatan

742 

743Contoh ini menggunakan hook `Stop` untuk menanyakan kepada model apakah semua tugas yang diminta selesai. Jika model mengembalikan `"ok": false`, Claude terus bekerja dan menggunakan `reason` sebagai instruksi berikutnya:

744 

745```json theme={null}

746{

747 "hooks": {

748 "Stop": [

749 {

750 "hooks": [

751 {

752 "type": "prompt",

753 "prompt": "Check if all tasks are complete. If not, respond with {\"ok\": false, \"reason\": \"what remains to be done\"}."

754 }

755 ]

756 }

757 ]

758 }

759}

760```

761 

762Untuk opsi konfigurasi lengkap, lihat [Prompt-based hooks](/id/hooks#prompt-based-hooks) dalam referensi.

763 

764## Agent-based hooks

765 

766<Warning>

767 Agent hooks bersifat eksperimental. Perilaku dan konfigurasi mungkin berubah dalam rilis mendatang. Untuk alur kerja produksi, lebih suka [command hooks](/id/hooks#command-hook-fields).

768</Warning>

769 

770Ketika verifikasi memerlukan inspeksi file atau menjalankan perintah, gunakan hook `type: "agent"`. Tidak seperti hook prompt yang membuat panggilan LLM tunggal, hook agent menelurkan subagent yang dapat membaca file, mencari kode, dan menggunakan alat lain untuk memverifikasi kondisi sebelum mengembalikan keputusan.

771 

772Hook agent menggunakan format respons `"ok"` / `"reason"` yang sama seperti hook prompt, tetapi dengan timeout default lebih lama 60 detik dan hingga 50 putaran penggunaan alat.

773 

774Contoh ini memverifikasi bahwa tes lulus sebelum memungkinkan Claude berhenti:

775 

776```json theme={null}

777{

778 "hooks": {

779 "Stop": [

780 {

781 "hooks": [

782 {

783 "type": "agent",

784 "prompt": "Verify that all unit tests pass. Run the test suite and check the results. $ARGUMENTS",

785 "timeout": 120

786 }

787 ]

788 }

789 ]

790 }

791}

792```

793 

794Gunakan hook prompt ketika data input hook saja cukup untuk membuat keputusan. Gunakan hook agent ketika Anda perlu memverifikasi sesuatu terhadap keadaan aktual codebase.

795 

796Untuk opsi konfigurasi lengkap, lihat [Agent-based hooks](/id/hooks#agent-based-hooks) dalam referensi.

797 

798## HTTP hooks

799 

800Gunakan hook `type: "http"` untuk POST data acara ke endpoint HTTP daripada menjalankan perintah shell. Endpoint menerima JSON yang sama yang diterima hook perintah di stdin, dan mengembalikan hasil melalui badan respons HTTP menggunakan format JSON yang sama.

801 

802HTTP hooks berguna ketika Anda ingin server web, fungsi cloud, atau layanan eksternal menangani logika hook: misalnya, layanan audit bersama yang mencatat acara penggunaan alat di seluruh tim.

803 

804Contoh ini memposting setiap penggunaan alat ke layanan logging lokal:

805 

806```json theme={null}

807{

808 "hooks": {

809 "PostToolUse": [

810 {

811 "hooks": [

812 {

813 "type": "http",

814 "url": "http://localhost:8080/hooks/tool-use",

815 "headers": {

816 "Authorization": "Bearer $MY_TOKEN"

817 },

818 "allowedEnvVars": ["MY_TOKEN"]

819 }

820 ]

821 }

822 ]

823 }

824}

825```

826 

827Endpoint harus mengembalikan badan respons JSON menggunakan [output format](/id/hooks#json-output) yang sama seperti hook perintah. Untuk memblokir panggilan alat, kembalikan respons 2xx dengan bidang `hookSpecificOutput` yang sesuai. Kode status HTTP saja tidak dapat memblokir tindakan.

828 

829Nilai header mendukung interpolasi variabel lingkungan menggunakan sintaks `$VAR_NAME` atau `${VAR_NAME}`. Hanya variabel yang tercantum dalam array `allowedEnvVars` yang diselesaikan; semua referensi `$VAR` lainnya tetap kosong.

830 

831Untuk opsi konfigurasi lengkap dan penanganan respons, lihat [HTTP hooks](/id/hooks#http-hook-fields) dalam referensi.

832 

833## Keterbatasan dan troubleshooting

834 

835### Keterbatasan

836 

837* Hook perintah berkomunikasi melalui stdout, stderr, dan kode keluar saja. Mereka tidak dapat memicu perintah `/` atau panggilan alat secara langsung. Teks yang dikembalikan melalui `additionalContext` disuntikkan sebagai pengingat sistem yang Claude baca sebagai teks biasa. HTTP hooks berkomunikasi melalui badan respons sebagai gantinya.

838* Timeout hook adalah 10 menit secara default, dapat dikonfigurasi per hook dengan bidang `timeout` (dalam detik).

839* Hook `PostToolUse` tidak dapat membatalkan tindakan karena alat sudah dieksekusi.

840* Hook `PermissionRequest` tidak aktif dalam [non-interactive mode](/id/headless) (`-p`). Gunakan hook `PreToolUse` untuk keputusan izin otomatis.

841* Hook `Stop` aktif kapan pun Claude selesai merespons, bukan hanya pada penyelesaian tugas. Mereka tidak aktif pada interupsi pengguna. Kesalahan API menjalankan [StopFailure](/id/hooks#stopfailure) sebagai gantinya.

842* Ketika beberapa hook PreToolUse mengembalikan [`updatedInput`](/id/hooks#pretooluse) untuk menulis ulang argumen alat, yang terakhir selesai menang. Karena hooks berjalan secara paralel, urutannya tidak deterministik. Hindari memiliki lebih dari satu hook memodifikasi input alat yang sama.

843 

844### Hooks dan mode izin

845 

846Hook PreToolUse aktif sebelum pemeriksaan mode izin apa pun. 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.

847 

848Kebalikannya tidak benar: hook yang mengembalikan `"allow"` tidak melewati aturan deny dari pengaturan. Hooks dapat mengetatkan pembatasan tetapi tidak melonggarkan mereka melampaui apa yang aturan izin izinkan.

849 

850### Hook tidak aktif

851 

852Hook dikonfigurasi tetapi tidak pernah dieksekusi.

853 

854* Jalankan `/hooks` dan konfirmasi hook muncul di bawah acara yang benar

855* Periksa bahwa pola matcher cocok dengan nama alat dengan tepat (matcher peka huruf besar-kecil)

856* Verifikasi Anda memicu jenis acara yang benar (misalnya, `PreToolUse` aktif sebelum eksekusi alat, `PostToolUse` aktif setelah)

857* Jika menggunakan hook `PermissionRequest` dalam mode non-interaktif (`-p`), beralih ke `PreToolUse` sebagai gantinya

858 

859### Hook error dalam output

860 

861Anda melihat pesan seperti "PreToolUse hook error: ..." dalam transkrip.

862 

863* Skrip Anda keluar dengan kode non-nol secara tidak terduga. Uji secara manual dengan menyalurkan JSON sampel:

864 ```bash theme={null}

865 echo '{"tool_name":"Bash","tool_input":{"command":"ls"}}' | ./my-hook.sh

866 echo $? # Check the exit code

867 ```

868* Jika Anda melihat "command not found", gunakan jalur absolut atau `$CLAUDE_PROJECT_DIR` untuk mereferensikan skrip

869* Jika Anda melihat "jq: command not found", instal `jq` atau gunakan Python/Node.js untuk parsing JSON

870* Jika skrip tidak berjalan sama sekali, buat dapat dieksekusi: `chmod +x ./my-hook.sh`

871 

872### `/hooks` menunjukkan tidak ada hooks yang dikonfigurasi

873 

874Anda mengedit file pengaturan tetapi hooks tidak muncul dalam menu.

875 

876* Edit file biasanya diambil secara otomatis. Jika belum muncul setelah beberapa detik, file watcher mungkin melewatkan perubahan: mulai ulang sesi Anda untuk memaksa reload.

877* Verifikasi JSON Anda valid (trailing commas dan comments tidak diizinkan)

878* Konfirmkan file pengaturan berada di lokasi yang benar: `.claude/settings.json` untuk hook proyek, `~/.claude/settings.json` untuk hook global

879 

880### Stop hook berjalan selamanya

881 

882Claude terus bekerja dalam loop tak terbatas daripada berhenti.

883 

884Skrip Stop hook Anda perlu memeriksa apakah sudah memicu kelanjutan. Parsing bidang `stop_hook_active` dari input JSON dan keluar lebih awal jika `true`:

885 

886```bash theme={null}

887#!/bin/bash

888INPUT=$(cat)

889if [ "$(echo "$INPUT" | jq -r '.stop_hook_active')" = "true" ]; then

890 exit 0 # Allow Claude to stop

891fi

892# ... rest of your hook logic

893```

894 

895### JSON validation failed

896 

897Claude Code menampilkan kesalahan parsing JSON meskipun skrip hook Anda mengeluarkan JSON yang valid.

898 

899Ketika Claude Code menjalankan hook, ia menelurkan shell yang bersumber dari profil Anda (`~/.zshrc` atau `~/.bashrc`). Jika profil Anda berisi pernyataan `echo` tanpa syarat, output itu ditambahkan ke JSON hook Anda:

900 

901```text theme={null}

902Shell ready on arm64

903{"decision": "block", "reason": "Not allowed"}

904```

905 

906Claude Code mencoba mengurai ini sebagai JSON dan gagal. Untuk memperbaiki ini, bungkus pernyataan echo dalam profil shell Anda sehingga hanya berjalan di shell interaktif:

907 

908```bash theme={null}

909# In ~/.zshrc or ~/.bashrc

910if [[ $- == *i* ]]; then

911 echo "Shell ready"

912fi

913```

914 

915Variabel `$-` berisi flag shell, dan `i` berarti interaktif. Hooks berjalan di shell non-interaktif, jadi echo dilewati.

916 

917### Teknik debug

918 

919Tampilan transkrip, diaktifkan dengan `Ctrl+O`, menunjukkan ringkasan satu baris untuk setiap hook yang aktif: kesuksesan diam-diam, kesalahan pemblokiran menampilkan stderr, dan kesalahan non-pemblokiran menampilkan pemberitahuan `<hook name> hook error` diikuti oleh baris pertama stderr.

920 

921Untuk detail eksekusi lengkap termasuk hook mana yang cocok, kode keluar mereka, stdout, dan stderr, baca debug log. Mulai Claude Code dengan `claude --debug-file /tmp/claude.log` untuk menulis ke jalur yang diketahui, kemudian `tail -f /tmp/claude.log` di terminal lain. Jika Anda memulai tanpa flag itu, jalankan `/debug` di tengah sesi untuk mengaktifkan logging dan temukan jalur log.

922 

923## Pelajari lebih lanjut

924 

925* [Hooks reference](/id/hooks): skema acara lengkap, format output JSON, async hooks, dan MCP tool hooks

926* [Security considerations](/id/hooks#security-considerations): tinjau sebelum menerapkan hooks dalam lingkungan bersama atau produksi

927* [Bash command validator example](https://github.com/anthropics/claude-code/blob/main/examples/hooks/bash_command_validator_example.py): implementasi referensi lengkap

how-claude-code-works.md +263 −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# Cara Kerja Claude Code

6 

7> Pahami loop agentic, tools bawaan, dan bagaimana Claude Code berinteraksi dengan proyek Anda.

8 

9Claude Code adalah asisten agentic yang berjalan di terminal Anda. Meskipun unggul dalam coding, Claude Code dapat membantu dengan apa pun yang dapat Anda lakukan dari command line: menulis dokumentasi, menjalankan build, mencari file, meneliti topik, dan banyak lagi.

10 

11Panduan ini mencakup arsitektur inti, kemampuan bawaan, dan [tips untuk bekerja secara efektif dengan Claude Code](#work-effectively-with-claude-code). Untuk panduan langkah demi langkah, lihat [Common workflows](/id/common-workflows). Untuk fitur extensibility seperti skills, MCP, dan hooks, lihat [Extend Claude Code](/id/features-overview).

12 

13## Loop agentic

14 

15Ketika Anda memberikan tugas kepada Claude, Claude bekerja melalui tiga fase: **mengumpulkan konteks**, **mengambil tindakan**, dan **memverifikasi hasil**. Fase-fase ini berpadu bersama. Claude menggunakan tools di seluruh proses, baik mencari file untuk memahami kode Anda, mengedit untuk membuat perubahan, atau menjalankan test untuk memeriksa pekerjaannya.

16 

17<img src="https://mintcdn.com/claude-code/c5r9_6tjPMzFdDDT/images/agentic-loop.svg?fit=max&auto=format&n=c5r9_6tjPMzFdDDT&q=85&s=5f1827dec8539f38adee90ead3a85a38" alt="Loop agentic: Prompt Anda mengarah ke Claude mengumpulkan konteks, mengambil tindakan, memverifikasi hasil, dan mengulangi sampai tugas selesai. Anda dapat mengganggu kapan saja." width="720" height="280" data-path="images/agentic-loop.svg" />

18 

19Loop beradaptasi dengan apa yang Anda minta. Pertanyaan tentang codebase Anda mungkin hanya memerlukan pengumpulan konteks. Perbaikan bug melakukan siklus melalui ketiga fase berulang kali. Refactor mungkin melibatkan verifikasi ekstensif. Claude memutuskan apa yang setiap langkah perlukan berdasarkan apa yang dipelajarinya dari langkah sebelumnya, menghubungkan puluhan tindakan bersama-sama dan melakukan koreksi jalur di sepanjang jalan.

20 

21Anda juga bagian dari loop ini. Anda dapat mengganggu kapan saja untuk mengarahkan Claude ke arah yang berbeda, memberikan konteks tambahan, atau memintanya mencoba pendekatan yang berbeda. Claude bekerja secara otonom tetapi tetap responsif terhadap input Anda.

22 

23Loop agentic didukung oleh dua komponen: [models](#models) yang bernalar dan [tools](#tools) yang bertindak. Claude Code berfungsi sebagai **agentic harness** di sekitar Claude: Claude Code menyediakan tools, manajemen konteks, dan lingkungan eksekusi yang mengubah model bahasa menjadi agen coding yang mampu.

24 

25### Models

26 

27Claude Code menggunakan model Claude untuk memahami kode Anda dan bernalar tentang tugas. Claude dapat membaca kode dalam bahasa apa pun, memahami bagaimana komponen terhubung, dan mengetahui apa yang perlu berubah untuk mencapai tujuan Anda. Untuk tugas kompleks, Claude memecah pekerjaan menjadi langkah-langkah, menjalankannya, dan menyesuaikan berdasarkan apa yang dipelajarinya.

28 

29[Multiple models](/id/model-config) tersedia dengan trade-off yang berbeda. Sonnet menangani sebagian besar tugas coding dengan baik. Opus memberikan penalaran yang lebih kuat untuk keputusan arsitektur yang kompleks. Beralih dengan `/model` selama sesi atau mulai dengan `claude --model <name>`.

30 

31Ketika panduan ini mengatakan "Claude memilih" atau "Claude memutuskan," itu adalah model yang melakukan penalaran.

32 

33### Tools

34 

35Tools adalah apa yang membuat Claude Code agentic. Tanpa tools, Claude hanya dapat merespons dengan teks. Dengan tools, Claude dapat bertindak: membaca kode Anda, mengedit file, menjalankan perintah, mencari web, dan berinteraksi dengan layanan eksternal. Setiap penggunaan tool mengembalikan informasi yang umpan balik ke dalam loop, menginformasikan keputusan Claude berikutnya.

36 

37Tools bawaan umumnya terbagi menjadi lima kategori, masing-masing mewakili jenis agency yang berbeda.

38 

39| Kategori | Apa yang dapat dilakukan Claude |

40| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

41| **File operations** | Membaca file, mengedit kode, membuat file baru, mengganti nama dan mengorganisir ulang |

42| **Search** | Menemukan file berdasarkan pola, mencari konten dengan regex, menjelajahi codebase |

43| **Execution** | Menjalankan perintah shell, memulai server, menjalankan test, menggunakan git |

44| **Web** | Mencari web, mengambil dokumentasi, mencari pesan error |

45| **Code intelligence** | Melihat type error dan warning setelah edit, melompat ke definisi, menemukan referensi (memerlukan [code intelligence plugins](/id/discover-plugins#code-intelligence)) |

46 

47Ini adalah kemampuan utama. Claude juga memiliki tools untuk spawning subagents, mengajukan pertanyaan kepada Anda, dan tugas orchestration lainnya. Lihat [Tools available to Claude](/id/tools-reference) untuk daftar lengkap.

48 

49Claude memilih tools mana yang akan digunakan berdasarkan prompt Anda dan apa yang dipelajarinya di sepanjang jalan. Ketika Anda mengatakan "perbaiki test yang gagal," Claude mungkin:

50 

511. Menjalankan test suite untuk melihat apa yang gagal

522. Membaca output error

533. Mencari file sumber yang relevan

544. Membaca file tersebut untuk memahami kode

555. Mengedit file untuk memperbaiki masalah

566. Menjalankan test lagi untuk memverifikasi

57 

58Setiap penggunaan tool memberikan Claude informasi baru yang menginformasikan langkah berikutnya. Ini adalah loop agentic dalam aksi.

59 

60**Memperluas kemampuan dasar:** Tools bawaan adalah fondasi. Anda dapat memperluas apa yang diketahui Claude dengan [skills](/id/skills), terhubung ke layanan eksternal dengan [MCP](/id/mcp), mengotomatisasi workflow dengan [hooks](/id/hooks), dan mendelegasikan tugas ke [subagents](/id/sub-agents). Ekstensi ini membentuk lapisan di atas loop agentic inti. Lihat [Extend Claude Code](/id/features-overview) untuk panduan memilih ekstensi yang tepat untuk kebutuhan Anda.

61 

62## Apa yang dapat diakses Claude

63 

64Panduan ini berfokus pada terminal. Claude Code juga berjalan di [VS Code](/id/vs-code), [JetBrains IDEs](/id/jetbrains), dan lingkungan lainnya.

65 

66Ketika Anda menjalankan `claude` di direktori, Claude Code mendapatkan akses ke:

67 

68* **Proyek Anda.** File di direktori dan subdirektori Anda, ditambah file di tempat lain dengan izin Anda.

69* **Terminal Anda.** Perintah apa pun yang dapat Anda jalankan: build tools, git, package managers, system utilities, scripts. Jika Anda dapat melakukannya dari command line, Claude juga dapat.

70* **Status git Anda.** Branch saat ini, perubahan yang belum di-commit, dan riwayat commit terbaru.

71* **[CLAUDE.md](/id/memory) Anda.** File markdown tempat Anda menyimpan instruksi khusus proyek, konvensi, dan konteks yang harus diketahui Claude setiap sesi.

72* **[Auto memory](/id/memory#auto-memory).** Pembelajaran yang disimpan Claude secara otomatis saat Anda bekerja, seperti pola proyek dan preferensi Anda. 200 baris pertama atau 25KB MEMORY.md, mana pun yang lebih dulu, dimuat di awal setiap sesi.

73* **Ekstensi yang Anda konfigurasi.** [MCP servers](/id/mcp) untuk layanan eksternal, [skills](/id/skills) untuk workflow, [subagents](/id/sub-agents) untuk pekerjaan yang didelegasikan, dan [Claude in Chrome](/id/chrome) untuk interaksi browser.

74 

75Karena Claude melihat seluruh proyek Anda, Claude dapat bekerja di seluruhnya. Ketika Anda meminta Claude untuk "perbaiki bug autentikasi," Claude mencari file yang relevan, membaca beberapa file untuk memahami konteks, membuat edit terkoordinasi di seluruhnya, menjalankan test untuk memverifikasi perbaikan, dan melakukan commit perubahan jika Anda meminta. Ini berbeda dari asisten kode inline yang hanya melihat file saat ini.

76 

77## Lingkungan dan interface

78 

79Loop agentic, tools, dan kemampuan yang dijelaskan di atas sama di mana pun Anda menggunakan Claude Code. Apa yang berubah adalah di mana kode dieksekusi dan bagaimana Anda berinteraksi dengannya.

80 

81### Lingkungan eksekusi

82 

83Claude Code berjalan di tiga lingkungan, masing-masing dengan trade-off berbeda untuk di mana kode Anda dieksekusi.

84 

85| Lingkungan | Di mana kode berjalan | Use case |

86| ------------------ | ---------------------------------- | --------------------------------------------------------------------------- |

87| **Local** | Mesin Anda | Default. Akses penuh ke file, tools, dan lingkungan Anda |

88| **Cloud** | VM yang dikelola Anthropic | Mendelegasikan tugas, bekerja pada repo yang tidak Anda miliki secara lokal |

89| **Remote Control** | Mesin Anda, dikontrol dari browser | Gunakan web UI sambil menjaga semuanya tetap lokal |

90 

91### Interface

92 

93Anda dapat mengakses Claude Code melalui terminal, [desktop app](/id/desktop), [IDE extensions](/id/vs-code), [claude.ai/code](https://claude.ai/code), [Remote Control](/id/remote-control), [Slack](/id/slack), dan [CI/CD pipelines](/id/github-actions). Interface menentukan bagaimana Anda melihat dan berinteraksi dengan Claude, tetapi loop agentic yang mendasarinya identik. Lihat [Use Claude Code everywhere](/id/overview#use-claude-code-everywhere) untuk daftar lengkap.

94 

95## Bekerja dengan session

96 

97Claude Code menyimpan percakapan Anda secara lokal saat Anda bekerja. Setiap pesan, penggunaan tool, dan hasil disimpan, yang memungkinkan [rewinding](#undo-changes-with-checkpoints), [resuming, dan forking](#resume-or-fork-sessions) session. Sebelum Claude membuat perubahan kode, Claude juga membuat snapshot file yang terpengaruh sehingga Anda dapat mengembalikan jika diperlukan.

98 

99**Session bersifat independen.** Setiap session baru dimulai dengan context window segar, tanpa riwayat percakapan dari session sebelumnya. Claude dapat mempertahankan pembelajaran di seluruh session menggunakan [auto memory](/id/memory#auto-memory), dan Anda dapat menambahkan instruksi persisten Anda sendiri di [CLAUDE.md](/id/memory).

100 

101### Bekerja di seluruh branch

102 

103Setiap percakapan Claude Code adalah session yang terikat pada direktori saat ini Anda. Ketika Anda melanjutkan, Anda hanya melihat session dari direktori itu.

104 

105Claude melihat file branch saat ini Anda. Ketika Anda beralih branch, Claude melihat file branch baru, tetapi riwayat percakapan Anda tetap sama. Claude mengingat apa yang Anda diskusikan bahkan setelah beralih.

106 

107Karena session terikat pada direktori, Anda dapat menjalankan session Claude paralel dengan menggunakan [git worktrees](/id/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees), yang membuat direktori terpisah untuk branch individual.

108 

109### Resume atau fork session

110 

111Ketika Anda melanjutkan session dengan `claude --continue` atau `claude --resume`, Anda melanjutkan dari tempat Anda berhenti menggunakan session ID yang sama. Pesan baru ditambahkan ke percakapan yang ada. Riwayat percakapan lengkap Anda dipulihkan, tetapi izin session-scoped tidak. Anda perlu menyetujui ulang.

112 

113<img src="https://mintcdn.com/claude-code/c5r9_6tjPMzFdDDT/images/session-continuity.svg?fit=max&auto=format&n=c5r9_6tjPMzFdDDT&q=85&s=fa41d12bfb57579cabfeece907151d30" alt="Kontinuitas session: resume melanjutkan session yang sama, fork membuat branch baru dengan ID baru." width="560" height="280" data-path="images/session-continuity.svg" />

114 

115Untuk membuat cabang dan mencoba pendekatan berbeda tanpa mempengaruhi session asli, gunakan flag `--fork-session`:

116 

117```bash theme={null}

118claude --continue --fork-session

119```

120 

121Ini membuat session ID baru sambil mempertahankan riwayat percakapan hingga titik itu. Session asli tetap tidak berubah. Seperti resume, session yang di-fork tidak mewarisi izin session-scoped.

122 

123**Session yang sama di multiple terminal**: Jika Anda melanjutkan session yang sama di multiple terminal, kedua terminal menulis ke file session yang sama. Pesan dari keduanya saling tumpang tindih, seperti dua orang menulis di notebook yang sama. Tidak ada yang rusak, tetapi percakapan menjadi kacau. Setiap terminal hanya melihat pesan miliknya sendiri selama session, tetapi jika Anda melanjutkan session itu nanti, Anda akan melihat semuanya saling tumpang tindih. Untuk pekerjaan paralel dari titik awal yang sama, gunakan `--fork-session` untuk memberikan setiap terminal session bersihnya sendiri.

124 

125### Context window

126 

127Context window Claude menampung riwayat percakapan Anda, konten file, output perintah, [CLAUDE.md](/id/memory), [auto memory](/id/memory#auto-memory), skill yang dimuat, dan instruksi sistem. Saat Anda bekerja, konteks terisi. Claude melakukan compacting secara otomatis, tetapi instruksi dari awal percakapan dapat hilang. Letakkan aturan persisten di CLAUDE.md, dan jalankan `/context` untuk melihat apa yang menggunakan ruang.

128 

129Untuk panduan interaktif tentang apa yang dimuat dan kapan, lihat [Explore the context window](/id/context-window).

130 

131#### Ketika context terisi

132 

133Claude Code mengelola konteks secara otomatis saat Anda mendekati batas. Claude menghapus output tool yang lebih lama terlebih dahulu, kemudian merangkum percakapan jika diperlukan. Permintaan Anda dan snippet kode kunci dipertahankan; instruksi terperinci dari awal percakapan mungkin hilang. Letakkan aturan persisten di CLAUDE.md daripada mengandalkan riwayat percakapan.

134 

135Untuk mengontrol apa yang dipertahankan selama compacting, tambahkan bagian "Compact Instructions" ke CLAUDE.md atau jalankan `/compact` dengan fokus (seperti `/compact focus on the API changes`).

136 

137Jalankan `/context` untuk melihat apa yang menggunakan ruang. Definisi tool MCP ditunda secara default dan dimuat sesuai permintaan melalui [tool search](/id/mcp#scale-with-mcp-tool-search), jadi hanya nama tool yang mengonsumsi konteks sampai Claude menggunakan tool spesifik. Jalankan `/mcp` untuk memeriksa biaya per-server.

138 

139#### Kelola konteks dengan skills dan subagents

140 

141Selain compacting, Anda dapat menggunakan fitur lain untuk mengontrol apa yang dimuat ke dalam konteks.

142 

143[Skills](/id/skills) dimuat sesuai permintaan. Claude melihat deskripsi skill pada awal session, tetapi konten lengkap hanya dimuat ketika skill digunakan. Untuk skill yang Anda panggil secara manual, atur `disable-model-invocation: true` untuk menjaga deskripsi keluar dari konteks sampai Anda membutuhkannya.

144 

145[Subagents](/id/sub-agents) mendapatkan konteks segar mereka sendiri, sepenuhnya terpisah dari percakapan utama Anda. Pekerjaan mereka tidak membengkak konteks Anda. Ketika selesai, mereka mengembalikan ringkasan. Isolasi ini adalah alasan mengapa subagents membantu dengan session yang panjang.

146 

147Lihat [context costs](/id/features-overview#understand-context-costs) untuk apa yang setiap fitur biayai, dan [reduce token usage](/id/costs#reduce-token-usage) untuk tips mengelola konteks.

148 

149## Tetap aman dengan checkpoint dan permission

150 

151Claude memiliki dua mekanisme keamanan: checkpoint memungkinkan Anda membatalkan perubahan file, dan permission mengontrol apa yang dapat dilakukan Claude tanpa bertanya.

152 

153### Batalkan perubahan dengan checkpoint

154 

155**Setiap edit file dapat dikembalikan.** Sebelum Claude mengedit file apa pun, Claude membuat snapshot konten saat ini. Jika ada yang salah, tekan `Esc` dua kali untuk kembali ke state sebelumnya, atau minta Claude untuk membatalkan.

156 

157Checkpoint bersifat lokal untuk session Anda, terpisah dari git. Mereka hanya mencakup perubahan file. Tindakan yang mempengaruhi sistem remote (database, API, deployment) tidak dapat di-checkpoint, itulah mengapa Claude bertanya sebelum menjalankan perintah dengan efek samping eksternal.

158 

159### Kontrol apa yang dapat dilakukan Claude

160 

161Tekan `Shift+Tab` untuk melakukan siklus melalui mode permission:

162 

163* **Default**: Claude bertanya sebelum edit file dan perintah shell

164* **Auto-accept edits**: Claude mengedit file tanpa bertanya, masih bertanya untuk perintah

165* **Plan mode**: Claude hanya menggunakan tools read-only, membuat rencana yang dapat Anda setujui sebelum eksekusi

166* **Auto mode**: Claude mengevaluasi semua tindakan dengan pemeriksaan keamanan latar belakang. Saat ini preview penelitian

167 

168Anda juga dapat mengizinkan perintah spesifik di `.claude/settings.json` sehingga Claude tidak bertanya setiap kali. Ini berguna untuk perintah terpercaya seperti `npm test` atau `git status`. Settings dapat dibatasi dari kebijakan organisasi-luas hingga preferensi pribadi. Lihat [Permissions](/id/permissions) untuk detail.

169 

170***

171 

172## Bekerja secara efektif dengan Claude Code

173 

174Tips ini membantu Anda mendapatkan hasil yang lebih baik dari Claude Code.

175 

176### Minta bantuan Claude Code

177 

178Claude Code dapat mengajarkan Anda cara menggunakannya. Ajukan pertanyaan seperti "bagaimana cara mengatur hooks?" atau "apa cara terbaik untuk menyusun CLAUDE.md saya?" dan Claude akan menjelaskan.

179 

180Perintah bawaan juga memandu Anda melalui setup:

181 

182* `/init` memandu Anda membuat CLAUDE.md untuk proyek Anda

183* `/agents` membantu Anda mengonfigurasi subagents kustom

184* `/doctor` mendiagnosis masalah umum dengan instalasi Anda

185 

186### Ini adalah percakapan

187 

188Claude Code bersifat conversational. Anda tidak memerlukan prompt yang sempurna. Mulai dengan apa yang Anda inginkan, kemudian perbaiki:

189 

190```text theme={null}

191Perbaiki bug login

192```

193 

194\[Claude menyelidiki, mencoba sesuatu]

195 

196```text theme={null}

197Itu tidak cukup benar. Masalahnya ada di session handling.

198```

199 

200\[Claude menyesuaikan pendekatan]

201 

202Ketika upaya pertama tidak benar, Anda tidak memulai dari awal. Anda melakukan iterasi.

203 

204#### Ganggu dan arahkan

205 

206Anda dapat mengganggu Claude kapan saja. Jika Claude sedang menuju jalur yang salah, cukup ketik koreksi Anda dan tekan Enter. Claude akan berhenti melakukan apa yang sedang dilakukan dan menyesuaikan pendekatannya berdasarkan input Anda. Anda tidak harus menunggu sampai selesai atau memulai dari awal.

207 

208### Jadilah spesifik di awal

209 

210Semakin presisi prompt awal Anda, semakin sedikit koreksi yang Anda perlukan. Referensikan file spesifik, sebutkan batasan, dan tunjukkan pola contoh.

211 

212```text theme={null}

213Alur checkout rusak untuk pengguna dengan kartu yang kadaluarsa.

214Periksa src/payments/ untuk masalahnya, terutama token refresh.

215Tulis test yang gagal terlebih dahulu, kemudian perbaiki.

216```

217 

218Prompt yang samar-samar berfungsi, tetapi Anda akan menghabiskan lebih banyak waktu untuk mengarahkan. Prompt spesifik seperti yang di atas sering berhasil pada upaya pertama.

219 

220### Berikan Claude sesuatu untuk diverifikasi

221 

222Claude berkinerja lebih baik ketika dapat memeriksa pekerjaannya sendiri. Sertakan test case, tempel screenshot UI yang diharapkan, atau tentukan output yang Anda inginkan.

223 

224```text theme={null}

225Implementasikan validateEmail. Test case: 'user@example.com' → true,

226'invalid' → false, 'user@.com' → false. Jalankan test setelahnya.

227```

228 

229Untuk pekerjaan visual, tempel screenshot desain dan minta Claude membandingkan implementasinya dengannya.

230 

231### Jelajahi sebelum mengimplementasikan

232 

233Untuk masalah kompleks, pisahkan penelitian dari coding. Gunakan plan mode (`Shift+Tab` dua kali) untuk menganalisis codebase terlebih dahulu:

234 

235```text theme={null}

236Baca src/auth/ dan pahami bagaimana kami menangani session.

237Kemudian buat rencana untuk menambahkan dukungan OAuth.

238```

239 

240Tinjau rencana, perbaiki melalui percakapan, kemudian biarkan Claude mengimplementasikan. Pendekatan dua fase ini menghasilkan hasil yang lebih baik daripada langsung melompat ke kode.

241 

242### Delegasikan, jangan mendikte

243 

244Pikirkan mendelegasikan kepada rekan kerja yang mampu. Berikan konteks dan arah, kemudian percayai Claude untuk mengetahui detail:

245 

246```text theme={null}

247Alur checkout rusak untuk pengguna dengan kartu yang kadaluarsa.

248Kode yang relevan ada di src/payments/. Bisakah Anda menyelidiki dan memperbaikinya?

249```

250 

251Anda tidak perlu menentukan file mana yang harus dibaca atau perintah mana yang harus dijalankan. Claude mengetahui itu.

252 

253## Apa selanjutnya

254 

255<CardGroup cols={2}>

256 <Card title="Perluas dengan fitur" icon="puzzle-piece" href="/id/features-overview">

257 Tambahkan Skills, koneksi MCP, dan perintah kustom

258 </Card>

259 

260 <Card title="Common workflows" icon="graduation-cap" href="/id/common-workflows">

261 Panduan langkah demi langkah untuk tugas khas

262 </Card>

263</CardGroup>

interactive-mode.md +361 −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# Mode interaktif

6 

7> Referensi lengkap untuk pintasan keyboard, mode input, dan fitur interaktif dalam sesi Claude Code.

8 

9## Pintasan keyboard

10 

11<Note>

12 Pintasan keyboard mungkin berbeda menurut platform dan terminal. Tekan `?` untuk melihat pintasan yang tersedia untuk lingkungan Anda.

13 

14 **Pengguna macOS**: Pintasan tombol Option/Alt (`Alt+B`, `Alt+F`, `Alt+Y`, `Alt+M`, `Alt+P`, `Alt+T`) memerlukan konfigurasi Option sebagai Meta di terminal Anda:

15 

16 * **iTerm2**: Settings → Profiles → Keys → General → atur Left/Right Option key ke "Esc+"

17 * **Apple Terminal**: Settings → Profiles → Keyboard → centang "Use Option as Meta Key"

18 * **VS Code**: atur `"terminal.integrated.macOptionIsMeta": true` dalam pengaturan VS Code

19 

20 Lihat [Konfigurasi terminal](/id/terminal-config) untuk detail.

21</Note>

22 

23### Kontrol umum

24 

25| Pintasan | Deskripsi | Konteks |

26| :---------------------------------------------------- | :---------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

27| `Ctrl+C` | Batalkan input atau generasi saat ini | Interupsi standar |

28| `Ctrl+X Ctrl+K` | Matikan semua agen latar belakang. Tekan dua kali dalam 3 detik untuk mengonfirmasi | Kontrol agen latar belakang |

29| `Ctrl+D` | Keluar dari sesi Claude Code | Sinyal EOF |

30| `Ctrl+G` atau `Ctrl+X Ctrl+E` | Buka di editor teks default | Edit prompt atau respons kustom Anda di editor teks default. `Ctrl+X Ctrl+E` adalah binding readline-native. Aktifkan Show last response in external editor di `/config` untuk menambahkan respons Claude sebelumnya sebagai konteks berkomentar `#` di atas prompt Anda; blok komentar dihapus saat Anda menyimpan |

31| `Ctrl+L` | Hapus input prompt dan gambar ulang layar | Menghapus teks yang diketik dan memaksa redraw terminal penuh. Riwayat percakapan disimpan. Gunakan ini untuk memulihkan jika tampilan menjadi berantakan atau sebagian kosong |

32| `Ctrl+O` | Alihkan penampil transkrip | Menampilkan penggunaan dan eksekusi alat yang terperinci. Juga memperluas panggilan MCP, yang runtuh menjadi satu baris seperti "Called slack 3 times" secara default |

33| `Ctrl+R` | Pencarian riwayat perintah terbalik | Cari melalui perintah sebelumnya secara interaktif |

34| `Ctrl+V` atau `Cmd+V` (iTerm2) atau `Alt+V` (Windows) | Tempel gambar dari clipboard | Menyisipkan chip `[Image #N]` di kursor sehingga Anda dapat mereferensikannya secara posisional dalam prompt Anda |

35| `Ctrl+B` | Tugas yang berjalan di latar belakang | Menjalankan perintah bash dan agen di latar belakang. Pengguna Tmux tekan dua kali |

36| `Ctrl+T` | Alihkan daftar tugas | Tampilkan atau sembunyikan [daftar tugas](#task-list) di area status terminal |

37| `Left/Right arrows` | Siklus melalui tab dialog | Navigasi antar tab dalam dialog izin dan menu |

38| `Up/Down arrows` atau `Ctrl+P`/`Ctrl+N` | Pindahkan kursor atau navigasi riwayat perintah | Dalam input multiline, pertama-tama memindahkan kursor dalam prompt. Setelah kursor sudah berada di tepi atas atau bawah, menekan lagi menavigasi riwayat perintah |

39| `Esc` + `Esc` | Putar ulang atau ringkas | Kembalikan kode dan/atau percakapan ke titik sebelumnya, atau ringkas dari pesan yang dipilih |

40| `Shift+Tab` atau `Alt+M` (beberapa konfigurasi) | Alihkan mode izin | Beralih antara `default`, `acceptEdits`, `plan`, dan mode apa pun yang telah Anda aktifkan, seperti `auto` atau `bypassPermissions`. Lihat [permission modes](/id/permission-modes). |

41| `Option+P` (macOS) atau `Alt+P` (Windows/Linux) | Alihkan model | Alihkan model tanpa menghapus prompt Anda |

42| `Option+T` (macOS) atau `Alt+T` (Windows/Linux) | Alihkan extended thinking | Aktifkan atau nonaktifkan mode extended thinking. Di macOS, konfigurasi terminal Anda untuk mengirim Option sebagai Meta agar pintasan ini berfungsi |

43| `Option+O` (macOS) atau `Alt+O` (Windows/Linux) | Alihkan mode cepat | Aktifkan atau nonaktifkan [fast mode](/id/fast-mode) |

44 

45### Pengeditan teks

46 

47| Pintasan | Deskripsi | Konteks |

48| :------------------------- | :--------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

49| `Ctrl+A` | Pindahkan kursor ke awal baris saat ini | Dalam input multiline, memindahkan ke awal baris logis saat ini |

50| `Ctrl+E` | Pindahkan kursor ke akhir baris saat ini | Dalam input multiline, memindahkan ke akhir baris logis saat ini |

51| `Ctrl+K` | Hapus hingga akhir baris | Menyimpan teks yang dihapus untuk ditempel |

52| `Ctrl+U` | Hapus dari kursor ke awal baris | Menyimpan teks yang dihapus untuk ditempel. Ulangi untuk menghapus di seluruh baris dalam input multiline. Di macOS, emulator terminal termasuk iTerm2 dan Terminal.app memetakan `Cmd+Backspace` ke pintasan ini |

53| `Ctrl+W` | Hapus kata sebelumnya | Menyimpan teks yang dihapus untuk ditempel. Di Windows, `Ctrl+Backspace` juga menghapus kata sebelumnya |

54| `Ctrl+Y` | Tempel teks yang dihapus | Tempel teks yang dihapus dengan `Ctrl+K`, `Ctrl+U`, atau `Ctrl+W` |

55| `Alt+Y` (setelah `Ctrl+Y`) | Siklus riwayat tempel | Setelah menempel, siklus melalui teks yang dihapus sebelumnya. Memerlukan [Option as Meta](#keyboard-shortcuts) di macOS |

56| `Alt+B` | Pindahkan kursor kembali satu kata | Navigasi kata. Memerlukan [Option as Meta](#keyboard-shortcuts) di macOS |

57| `Alt+F` | Pindahkan kursor maju satu kata | Navigasi kata. Memerlukan [Option as Meta](#keyboard-shortcuts) di macOS |

58 

59### Tema dan tampilan

60 

61| Pintasan | Deskripsi | Konteks |

62| :------- | :----------------------------------------- | :------------------------------------------------------------------------------------------------------------------------ |

63| `Ctrl+T` | Alihkan penyorotan sintaks untuk blok kode | Hanya berfungsi di dalam menu pemilih `/theme`. Mengontrol apakah kode dalam respons Claude menggunakan pewarnaan sintaks |

64 

65### Input multiline

66 

67| Metode | Pintasan | Konteks |

68| :------------- | :-------------- | :------------------------------------------------------------------------------------------------------- |

69| Escape cepat | `\` + `Enter` | Berfungsi di semua terminal |

70| Tombol Option | `Option+Enter` | Setelah mengaktifkan [Option as Meta](/id/terminal-config#enable-option-key-shortcuts-on-macos) di macOS |

71| Shift+Enter | `Shift+Enter` | Bawaan di iTerm2, WezTerm, Ghostty, Kitty, Warp, Apple Terminal |

72| Urutan kontrol | `Ctrl+J` | Berfungsi di terminal apa pun tanpa konfigurasi |

73| Mode tempel | Tempel langsung | Untuk blok kode, log |

74 

75<Tip>

76 Shift+Enter berfungsi tanpa konfigurasi di iTerm2, WezTerm, Ghostty, Kitty, Warp, dan Apple Terminal. Untuk VS Code, Cursor, Windsurf, Alacritty, dan Zed, jalankan `/terminal-setup` untuk memasang binding.

77</Tip>

78 

79### Perintah cepat

80 

81| Pintasan | Deskripsi | Catatan |

82| :---------- | :-------------------- | :---------------------------------------------------------------------- |

83| `/` di awal | Perintah atau skill | Lihat [perintah](#commands) dan [skills](/id/skills) |

84| `!` di awal | Mode Bash | Jalankan perintah secara langsung dan tambahkan output eksekusi ke sesi |

85| `@` | Penyebutan jalur file | Picu pelengkapan otomatis jalur file |

86 

87### Penampil transkrip

88 

89Ketika penampil transkrip terbuka (dialihkan dengan `Ctrl+O`), pintasan ini tersedia. `Ctrl+E` dapat diubah melalui [`transcript:toggleShowAll`](/id/keybindings).

90 

91| Pintasan | Deskripsi |

92| :------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

93| `Ctrl+E` | Alihkan tampilkan semua konten |

94| `[` | Tulis percakapan lengkap ke scrollback asli terminal Anda sehingga `Cmd+F`, mode copy tmux, dan alat asli lainnya dapat mencarinya. Memerlukan [fullscreen rendering](/id/fullscreen#search-and-review-the-conversation) |

95| `v` | Tulis percakapan ke file sementara dan buka di `$VISUAL` atau `$EDITOR`. Memerlukan [fullscreen rendering](/id/fullscreen) |

96| `q`, `Ctrl+C`, `Esc` | Keluar dari tampilan transkrip. Ketiganya dapat diubah melalui [`transcript:exit`](/id/keybindings) |

97 

98### Input suara

99 

100| Pintasan | Deskripsi | Catatan |

101| :----------------------- | :-------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

102| Tahan atau ketuk `Space` | Dictation suara | Memerlukan [voice dictation](/id/voice-dictation) untuk diaktifkan. Tahan untuk merekam, atau jalankan `/voice tap` untuk tap-to-toggle. [Dapat diubah](/id/voice-dictation#rebind-the-dictation-key) |

103 

104## Perintah

105 

106Ketik `/` di Claude Code untuk melihat semua perintah yang tersedia, atau ketik `/` diikuti huruf apa pun untuk memfilter. Menu `/` menampilkan semua yang dapat Anda panggil: perintah bawaan, [skills](/id/skills) bundel dan yang ditulis pengguna, dan perintah yang disumbangkan oleh [plugins](/id/plugins) dan [MCP servers](/id/mcp#use-mcp-prompts-as-commands). Tidak semua perintah bawaan terlihat oleh setiap pengguna karena beberapa bergantung pada platform atau paket Anda.

107 

108Lihat [referensi perintah](/id/commands) untuk daftar lengkap perintah yang disertakan dalam Claude Code.

109 

110## Mode editor Vim

111 

112Aktifkan pengeditan gaya vim melalui `/config` → Editor mode.

113 

114### Pengalihan mode

115 

116| Perintah | Tindakan | Dari mode |

117| :------- | :------------------------------------------ | :------------- |

118| `Esc` | Masuk mode NORMAL | INSERT, VISUAL |

119| `i` | Sisipkan sebelum kursor | NORMAL |

120| `I` | Sisipkan di awal baris | NORMAL |

121| `a` | Sisipkan setelah kursor | NORMAL |

122| `A` | Sisipkan di akhir baris | NORMAL |

123| `o` | Buka baris di bawah | NORMAL |

124| `O` | Buka baris di atas | NORMAL |

125| `v` | Mulai pemilihan visual berdasarkan karakter | NORMAL |

126| `V` | Mulai pemilihan visual berdasarkan baris | NORMAL |

127 

128### Navigasi (mode NORMAL)

129 

130| Perintah | Tindakan |

131| :-------------- | :---------------------------------------------------------- |

132| `h`/`j`/`k`/`l` | Pindah kiri/bawah/atas/kanan |

133| `w` | Kata berikutnya |

134| `e` | Akhir kata |

135| `b` | Kata sebelumnya |

136| `0` | Awal baris |

137| `$` | Akhir baris |

138| `^` | Karakter non-blank pertama |

139| `gg` | Awal input |

140| `G` | Akhir input |

141| `f{char}` | Lompat ke kemunculan berikutnya dari karakter |

142| `F{char}` | Lompat ke kemunculan sebelumnya dari karakter |

143| `t{char}` | Lompat ke tepat sebelum kemunculan berikutnya dari karakter |

144| `T{char}` | Lompat ke tepat setelah kemunculan sebelumnya dari karakter |

145| `;` | Ulangi gerakan f/F/t/T terakhir |

146| `,` | Ulangi gerakan f/F/t/T terakhir dalam urutan terbalik |

147 

148<Note>

149 Dalam mode normal vim, jika kursor berada di awal atau akhir input dan tidak dapat bergerak lebih jauh, `j`/`k` dan tombol panah menavigasi riwayat perintah sebagai gantinya.

150</Note>

151 

152### Pengeditan (mode NORMAL)

153 

154| Perintah | Tindakan |

155| :------------- | :------------------------------ |

156| `x` | Hapus karakter |

157| `dd` | Hapus baris |

158| `D` | Hapus hingga akhir baris |

159| `dw`/`de`/`db` | Hapus kata/hingga akhir/kembali |

160| `cc` | Ubah baris |

161| `C` | Ubah hingga akhir baris |

162| `cw`/`ce`/`cb` | Ubah kata/hingga akhir/kembali |

163| `yy`/`Y` | Yank (salin) baris |

164| `yw`/`ye`/`yb` | Yank kata/hingga akhir/kembali |

165| `p` | Tempel setelah kursor |

166| `P` | Tempel sebelum kursor |

167| `>>` | Indentasi baris |

168| `<<` | Kurangi indentasi baris |

169| `J` | Gabungkan baris |

170| `u` | Batalkan |

171| `.` | Ulangi perubahan terakhir |

172 

173### Objek teks (mode NORMAL)

174 

175Objek teks bekerja dengan operator seperti `d`, `c`, dan `y`:

176 

177| Perintah | Tindakan |

178| :-------- | :--------------------------------------- |

179| `iw`/`aw` | Kata dalam/sekitar |

180| `iW`/`aW` | KATA dalam/sekitar (dibatasi whitespace) |

181| `i"`/`a"` | Dalam/sekitar tanda kutip ganda |

182| `i'`/`a'` | Dalam/sekitar tanda kutip tunggal |

183| `i(`/`a(` | Dalam/sekitar tanda kurung |

184| `i[`/`a[` | Dalam/sekitar kurung siku |

185| `i{`/`a{` | Dalam/sekitar kurung kurawal |

186 

187### Mode visual

188 

189Tekan `v` untuk pemilihan berdasarkan karakter atau `V` untuk pemilihan berdasarkan baris. Gerakan memperluas pemilihan, dan operator bertindak langsung padanya.

190 

191| Perintah | Tindakan |

192| :--------------- | :--------------------------------------------------------------------- |

193| `d`/`x` | Hapus pemilihan |

194| `y` | Yank pemilihan |

195| `c`/`s` | Ubah pemilihan |

196| `p` | Ganti pemilihan dengan isi register |

197| `r{char}` | Ganti setiap karakter yang dipilih dengan `{char}` |

198| `~`/`u`/`U` | Alihkan, huruf kecil, atau huruf besar pemilihan |

199| `>`/`<` | Indentasi atau kurangi indentasi baris yang dipilih |

200| `J` | Gabungkan baris yang dipilih |

201| `o` | Tukar kursor dan jangkar |

202| `iw`/`aw`/`i"`/… | Pilih objek teks |

203| `v`/`V` | Alihkan antara berdasarkan karakter dan berdasarkan baris, atau keluar |

204 

205Mode visual berdasarkan blok dengan `Ctrl+V` tidak didukung.

206 

207## Riwayat perintah

208 

209Claude Code mempertahankan riwayat perintah untuk sesi saat ini:

210 

211* Riwayat input disimpan per direktori kerja

212* Riwayat input direset ketika Anda menjalankan `/clear` untuk memulai sesi baru. Percakapan sesi sebelumnya disimpan dan dapat dilanjutkan.

213* Gunakan panah Atas/Bawah untuk menavigasi (lihat pintasan keyboard di atas)

214* **Catatan**: ekspansi riwayat (`!`) dinonaktifkan secara default

215 

216### Pencarian terbalik dengan Ctrl+R

217 

218Tekan `Ctrl+R` untuk mencari secara interaktif melalui riwayat perintah Anda:

219 

2201. **Mulai pencarian**: tekan `Ctrl+R` untuk mengaktifkan pencarian riwayat terbalik

2212. **Ketik kueri**: masukkan teks untuk dicari dalam perintah sebelumnya. Istilah pencarian disorot dalam hasil yang cocok

2223. **Navigasi kecocokan**: tekan `Ctrl+R` lagi untuk siklus melalui kecocokan yang lebih lama

2234. **Terima kecocokan**:

224 * Tekan `Tab` atau `Esc` untuk menerima kecocokan saat ini dan lanjutkan pengeditan

225 * Tekan `Enter` untuk menerima dan menjalankan perintah segera

2265. **Batalkan pencarian**:

227 * Tekan `Ctrl+C` untuk membatalkan dan mengembalikan input asli Anda

228 * Tekan `Backspace` pada pencarian kosong untuk membatalkan

229 

230Pencarian menampilkan perintah yang cocok dengan istilah pencarian disorot, sehingga Anda dapat menemukan dan menggunakan kembali input sebelumnya.

231 

232## Perintah bash latar belakang

233 

234Claude Code mendukung menjalankan perintah bash di latar belakang, memungkinkan Anda untuk terus bekerja sementara proses yang berjalan lama dieksekusi.

235 

236### Cara backgrounding bekerja

237 

238Ketika Claude Code menjalankan perintah di latar belakang, ia menjalankan perintah secara asinkron dan segera mengembalikan ID tugas latar belakang. Claude Code dapat merespons prompt baru sementara perintah terus dieksekusi di latar belakang.

239 

240Untuk menjalankan perintah di latar belakang, Anda dapat:

241 

242* Minta Claude Code untuk menjalankan perintah di latar belakang

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

244 

245**Fitur utama:**

246 

247* Output ditulis ke file dan Claude dapat mengambilnya menggunakan alat Read

248* Tugas latar belakang memiliki ID unik untuk pelacakan dan pengambilan output

249* Tugas latar belakang dibersihkan secara otomatis ketika Claude Code keluar

250* Tugas latar belakang secara otomatis dihentikan jika output melebihi 5GB, dengan catatan di stderr yang menjelaskan alasannya

251 

252Untuk menonaktifkan semua fungsionalitas tugas latar belakang, atur variabel lingkungan `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` ke `1`. Lihat [Environment variables](/id/env-vars) untuk detail.

253 

254**Perintah yang sering di-background:**

255 

256* Alat build (webpack, vite, make)

257* Manajer paket (npm, yarn, pnpm)

258* Pelari tes (jest, pytest)

259* Server pengembangan

260* Proses yang berjalan lama (docker, terraform)

261 

262### Mode Bash dengan awalan `!`

263 

264Jalankan perintah bash secara langsung tanpa melalui Claude dengan menambahkan awalan input Anda dengan `!`:

265 

266```bash theme={null}

267! npm test

268! git status

269! ls -la

270```

271 

272Mode Bash:

273 

274* Menambahkan perintah dan outputnya ke konteks percakapan

275* Menampilkan kemajuan dan output secara real-time

276* Mendukung backgrounding `Ctrl+B` yang sama untuk perintah yang berjalan lama

277* Tidak memerlukan Claude untuk menginterpretasi atau menyetujui perintah

278* Mendukung pelengkapan otomatis berbasis riwayat: ketik perintah parsial dan tekan **Tab** untuk melengkapi dari perintah `!` sebelumnya dalam proyek saat ini

279* Keluar dengan `Escape`, `Backspace`, atau `Ctrl+U` pada prompt kosong

280* Menempel teks yang dimulai dengan `!` ke prompt kosong memasuki mode bash secara otomatis, sesuai dengan perilaku `!` yang diketik

281 

282Ini berguna untuk operasi shell cepat sambil mempertahankan konteks percakapan.

283 

284## Saran prompt

285 

286Ketika Anda pertama kali membuka sesi, perintah contoh yang digelapkan muncul di input prompt untuk membantu Anda memulai. Claude Code memilih ini dari riwayat git proyek Anda, sehingga mencerminkan file yang telah Anda kerjakan baru-baru ini.

287 

288Setelah Claude merespons, saran terus muncul berdasarkan riwayat percakapan Anda, seperti langkah lanjutan dari permintaan multi-bagian atau kelanjutan alami dari alur kerja Anda.

289 

290* Tekan **Tab** atau **Right arrow** untuk menerima saran, atau tekan **Enter** untuk menerima dan mengirimkan

291* Mulai mengetik untuk menolaknya

292 

293Saran berjalan sebagai permintaan latar belakang yang menggunakan kembali cache prompt percakapan induk, sehingga biaya tambahan minimal. Claude Code melewati pembuatan saran ketika cache dingin untuk menghindari biaya yang tidak perlu.

294 

295Saran secara otomatis dilewati setelah giliran pertama percakapan, dalam mode non-interaktif, dan dalam Plan Mode.

296 

297Untuk menonaktifkan saran prompt sepenuhnya, atur variabel lingkungan atau alihkan pengaturan di `/config`:

298 

299```bash theme={null}

300export CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION=false

301```

302 

303## Pertanyaan sampingan dengan /btw

304 

305Gunakan `/btw` untuk mengajukan pertanyaan cepat tentang pekerjaan saat ini Anda tanpa menambahkan ke riwayat percakapan. Ini berguna ketika Anda menginginkan jawaban cepat tetapi tidak ingin mengacaukan konteks utama atau mengalihkan Claude dari tugas yang berjalan lama.

306 

307```

308/btw what was the name of that config file again?

309```

310 

311Pertanyaan sampingan memiliki visibilitas penuh ke percakapan saat ini, sehingga Anda dapat bertanya tentang kode yang telah dibaca Claude, keputusan yang dibuatnya sebelumnya, atau apa pun dari sesi. Pertanyaan dan jawaban bersifat sementara: mereka muncul dalam overlay yang dapat ditutup dan tidak pernah memasuki riwayat percakapan.

312 

313* **Tersedia saat Claude sedang bekerja**: Anda dapat menjalankan `/btw` bahkan saat Claude memproses respons. Pertanyaan sampingan berjalan secara independen dan tidak mengganggu giliran utama.

314* **Tidak ada akses alat**: pertanyaan sampingan hanya menjawab dari apa yang sudah ada dalam konteks. Claude tidak dapat membaca file, menjalankan perintah, atau mencari saat menjawab pertanyaan sampingan.

315* **Respons tunggal**: tidak ada giliran lanjutan. Jika Anda memerlukan bolak-balik, gunakan prompt normal sebagai gantinya.

316* **Biaya rendah**: pertanyaan sampingan menggunakan kembali cache prompt percakapan induk, sehingga biaya tambahan minimal.

317 

318Tekan **Space**, **Enter**, atau **Escape** untuk menolak jawaban dan kembali ke prompt.

319 

320`/btw` adalah kebalikan dari [subagent](/id/sub-agents): ia melihat percakapan lengkap Anda tetapi tidak memiliki alat, sementara subagent memiliki alat lengkap tetapi dimulai dengan konteks kosong. Gunakan `/btw` untuk bertanya tentang apa yang sudah diketahui Claude dari sesi ini; gunakan subagent untuk menemukan sesuatu yang baru.

321 

322## Daftar tugas

323 

324Ketika mengerjakan pekerjaan yang kompleks dan multi-langkah, Claude membuat daftar tugas untuk melacak kemajuan. Tugas muncul di area status terminal Anda dengan indikator yang menunjukkan apa yang tertunda, sedang berlangsung, atau selesai.

325 

326* Tekan `Ctrl+T` untuk mengalihkan tampilan daftar tugas. Tampilan menampilkan hingga 5 tugas sekaligus

327* Untuk melihat semua tugas atau menghapusnya, minta Claude secara langsung: "show me all tasks" atau "clear all tasks"

328* Tugas bertahan di seluruh pemadatan konteks, membantu Claude tetap terorganisir pada proyek yang lebih besar

329* Untuk berbagi daftar tugas di seluruh sesi, atur `CLAUDE_CODE_TASK_LIST_ID` untuk menggunakan direktori bernama di `~/.claude/tasks/`: `CLAUDE_CODE_TASK_LIST_ID=my-project claude`

330 

331## Ringkasan sesi

332 

333Ketika Anda kembali ke terminal setelah pergi, Claude Code menampilkan ringkasan satu baris tentang apa yang terjadi dalam sesi sejauh ini. Ringkasan dihasilkan di latar belakang setelah setidaknya tiga menit telah berlalu sejak giliran terakhir yang selesai dan terminal tidak fokus, sehingga siap ketika Anda beralih kembali. Ringkasan hanya muncul setelah sesi memiliki setidaknya tiga giliran, dan tidak pernah dua kali berturut-turut.

334 

335Jalankan `/recap` untuk menghasilkan ringkasan sesuai permintaan. Untuk mematikan ringkasan otomatis, buka `/config` dan nonaktifkan **Session recap**.

336 

337Ringkasan sesi aktif secara default untuk setiap paket dan penyedia. Ringkasan selalu dilewati dalam mode non-interaktif.

338 

339## Status tinjauan PR

340 

341Ketika bekerja pada cabang dengan permintaan tarik terbuka, Claude Code menampilkan tautan PR yang dapat diklik di footer (misalnya, "PR #446"). Tautan memiliki garis bawah berwarna yang menunjukkan status tinjauan:

342 

343* Hijau: disetujui

344* Kuning: menunggu tinjauan

345* Merah: perubahan diminta

346* Abu-abu: draft

347* Ungu: digabungkan

348 

349`Cmd+click` (Mac) atau `Ctrl+click` (Windows/Linux) tautan untuk membuka permintaan tarik di browser Anda. Status diperbarui secara otomatis setiap 60 detik.

350 

351<Note>

352 Status PR memerlukan CLI `gh` untuk diinstal dan diautentikasi (`gh auth login`).

353</Note>

354 

355## Lihat juga

356 

357* [Skills](/id/skills) - Prompt dan alur kerja kustom

358* [Checkpointing](/id/checkpointing) - Putar ulang pengeditan Claude dan kembalikan status sebelumnya

359* [Referensi CLI](/id/cli-reference) - Bendera dan opsi baris perintah

360* [Pengaturan](/id/settings) - Opsi konfigurasi

361* [Manajemen memori](/id/memory) - Mengelola file CLAUDE.md

jetbrains.md +192 −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# JetBrains IDEs

6 

7> Gunakan Claude Code dengan JetBrains IDEs termasuk IntelliJ, PyCharm, WebStorm, dan lainnya

8 

9Claude Code terintegrasi dengan JetBrains IDEs melalui plugin khusus, menyediakan fitur seperti tampilan diff interaktif, berbagi konteks seleksi, dan lainnya.

10 

11## IDE yang Didukung

12 

13Plugin Claude Code bekerja dengan sebagian besar JetBrains IDEs, termasuk:

14 

15* IntelliJ IDEA

16* PyCharm

17* Android Studio

18* WebStorm

19* PhpStorm

20* GoLand

21 

22## Fitur

23 

24* **Peluncuran cepat**: Gunakan `Cmd+Esc` (Mac) atau `Ctrl+Esc` (Windows/Linux) untuk membuka Claude Code langsung dari editor Anda, atau klik tombol Claude Code di UI

25* **Tampilan diff**: Perubahan kode dapat ditampilkan langsung di penampil diff IDE alih-alih terminal

26* **Konteks seleksi**: Seleksi atau tab saat ini di IDE secara otomatis dibagikan dengan Claude Code

27* **Pintasan referensi file**: Gunakan `Cmd+Option+K` (Mac) atau `Alt+Ctrl+K` (Linux/Windows) untuk menyisipkan referensi file seperti `@src/auth.ts#L1-99`

28* **Berbagi diagnostik**: Kesalahan diagnostik dari IDE, seperti lint dan kesalahan sintaks, secara otomatis dibagikan dengan Claude saat Anda bekerja

29 

30## Instalasi

31 

32### Instalasi Marketplace

33 

34Temukan dan instal [plugin Claude Code](https://plugins.jetbrains.com/plugin/27310-claude-code-beta-) dari marketplace JetBrains dan mulai ulang IDE Anda.

35 

36Jika Anda belum menginstal Claude Code, lihat [panduan quickstart](/id/quickstart) untuk instruksi instalasi.

37 

38<Note>

39 Setelah menginstal plugin, Anda mungkin perlu memulai ulang IDE Anda sepenuhnya agar dapat diterapkan.

40</Note>

41 

42## Penggunaan

43 

44### Dari IDE Anda

45 

46Jalankan `claude` dari terminal terintegrasi IDE Anda, dan semua fitur integrasi akan aktif.

47 

48### Dari Terminal Eksternal

49 

50Gunakan perintah `/ide` di terminal eksternal apa pun untuk menghubungkan Claude Code ke JetBrains IDE Anda dan mengaktifkan semua fitur:

51 

52```bash theme={null}

53claude

54```

55 

56```text theme={null}

57/ide

58```

59 

60Jika Anda ingin Claude memiliki akses ke file yang sama dengan IDE Anda, mulai Claude Code dari direktori yang sama dengan root proyek IDE Anda.

61 

62## Konfigurasi

63 

64### Pengaturan Claude Code

65 

66Konfigurasikan integrasi IDE melalui pengaturan Claude Code:

67 

681. Jalankan `claude`

692. Masukkan perintah `/config`

703. Atur alat diff ke `auto` untuk menampilkan diff di IDE, atau `terminal` untuk menyimpannya di terminal

71 

72### Pengaturan Plugin

73 

74Konfigurasikan plugin Claude Code dengan membuka **Settings → Tools → Claude Code \[Beta]**:

75 

76#### Pengaturan Umum

77 

78* **Perintah Claude**: Tentukan perintah khusus untuk menjalankan Claude, misalnya `claude`, `/usr/local/bin/claude`, atau `npx @anthropic-ai/claude-code`

79* **Tekan notifikasi untuk perintah Claude tidak ditemukan**: Lewati notifikasi tentang tidak menemukan perintah Claude

80* **Aktifkan penggunaan Option+Enter untuk prompt multi-baris**: Hanya di macOS. Ketika diaktifkan, Option+Enter menyisipkan baris baru dalam prompt Claude Code. Nonaktifkan jika tombol Option ditangkap secara tidak terduga. Memerlukan restart terminal.

81* **Aktifkan pembaruan otomatis**: Secara otomatis periksa dan instal pembaruan plugin, diterapkan saat restart

82 

83<Tip>

84 Untuk pengguna WSL: Atur `wsl -d Ubuntu -- bash -lic "claude"` sebagai perintah Claude Anda (ganti `Ubuntu` dengan nama distribusi WSL Anda)

85</Tip>

86 

87#### Konfigurasi Tombol ESC

88 

89Jika tombol ESC tidak menghentikan operasi Claude Code di terminal JetBrains:

90 

911. Buka **Settings → Tools → Terminal**

922. Salah satu dari:

93 * Batalkan centang "Pindahkan fokus ke editor dengan Escape", atau

94 * Klik "Konfigurasikan pintasan keyboard terminal" dan hapus pintasan "Alihkan fokus ke Editor"

953. Terapkan perubahan

96 

97Ini memungkinkan tombol ESC untuk dengan benar menghentikan operasi Claude Code.

98 

99## Konfigurasi Khusus

100 

101### Pengembangan Jarak Jauh

102 

103<Warning>

104 Saat menggunakan JetBrains Remote Development, Anda harus menginstal plugin di host jarak jauh melalui **Settings → Plugin (Host)**.

105</Warning>

106 

107Plugin harus diinstal di host jarak jauh, bukan di mesin klien lokal Anda.

108 

109### Konfigurasi WSL

110 

111Jika Anda menggunakan Claude Code di WSL2 dengan JetBrains IDE dan melihat "No available IDEs detected", penyebabnya biasanya adalah jaringan NAT WSL2 atau Windows Firewall yang memblokir koneksi antara WSL2 dan IDE yang berjalan di host Windows. WSL1 menggunakan jaringan host secara langsung dan tidak terpengaruh.

112 

113#### Izinkan lalu lintas WSL2 melalui Windows Firewall

114 

115Ini adalah perbaikan yang direkomendasikan karena mempertahankan mode jaringan WSL2 yang ada.

116 

117<Steps>

118 <Step title="Temukan alamat IP WSL2 Anda">

119 Dari dalam shell WSL Anda, jalankan:

120 

121 ```bash theme={null}

122 hostname -I

123 ```

124 

125 Catat subnet, misalnya `172.21.123.45` berada di `172.21.0.0/16`.

126 </Step>

127 

128 <Step title="Buat aturan firewall">

129 Buka PowerShell sebagai Administrator dan jalankan yang berikut, sesuaikan rentang IP untuk mencocokkan subnet Anda:

130 

131 ```powershell theme={null}

132 New-NetFirewallRule -DisplayName "Allow WSL2 Internal Traffic" -Direction Inbound -Protocol TCP -Action Allow -RemoteAddress 172.21.0.0/16 -LocalAddress 172.21.0.0/16

133 ```

134 </Step>

135 

136 <Step title="Mulai ulang IDE dan Claude Code Anda">

137 Tutup dan buka kembali keduanya agar aturan baru berlaku.

138 </Step>

139</Steps>

140 

141#### Alihkan WSL2 ke jaringan mirrored

142 

143Jaringan mirrored memerlukan Windows 11 22H2 atau lebih baru. Jika Anda menggunakan Windows 10, gunakan aturan firewall di atas.

144 

145Tambahkan ini ke `.wslconfig` di direktori pengguna Windows Anda:

146 

147```ini theme={null}

148[wsl2]

149networkingMode=mirrored

150```

151 

152Kemudian mulai ulang WSL dengan `wsl --shutdown` dari PowerShell.

153 

154## Troubleshooting

155 

156### Plugin tidak berfungsi

157 

158Jika plugin diinstal tetapi fitur Claude Code tidak muncul di IDE Anda:

159 

160* Pastikan Anda menjalankan Claude Code dari direktori root proyek

161* Periksa bahwa plugin JetBrains diaktifkan dalam pengaturan IDE

162* Mulai ulang IDE sepenuhnya (Anda mungkin perlu melakukan ini beberapa kali)

163* Untuk Remote Development, pastikan plugin diinstal di host jarak jauh

164 

165### IDE tidak terdeteksi

166 

167Jika menjalankan `claude` menunjukkan "No available IDEs detected":

168 

169* Verifikasi plugin diinstal dan diaktifkan

170* Mulai ulang IDE sepenuhnya

171* Periksa bahwa Anda menjalankan Claude Code dari terminal terintegrasi

172* Untuk pengguna WSL, lihat [konfigurasi WSL](#wsl-configuration) di atas

173 

174### Perintah tidak ditemukan

175 

176Jika mengklik ikon Claude menunjukkan "command not found":

177 

1781. Verifikasi Claude Code diinstal dengan menjalankan `claude --version` di terminal

1792. Konfigurasikan jalur perintah Claude dalam pengaturan plugin

1803. Untuk pengguna WSL, gunakan format perintah WSL yang disebutkan di bagian konfigurasi

181 

182## Pertimbangan Keamanan

183 

184Ketika Claude Code berjalan di JetBrains IDE dengan izin auto-edit diaktifkan, Claude Code mungkin dapat memodifikasi file konfigurasi IDE yang dapat dijalankan secara otomatis oleh IDE Anda. Ini dapat meningkatkan risiko menjalankan Claude Code dalam mode auto-edit dan memungkinkan melewati prompt izin Claude Code untuk eksekusi bash.

185 

186Saat berjalan di JetBrains IDEs, pertimbangkan:

187 

188* Menggunakan mode persetujuan manual untuk edit

189* Berhati-hati ekstra untuk memastikan Claude hanya digunakan dengan prompt terpercaya

190* Menyadari file mana yang Claude Code memiliki akses untuk memodifikasi

191 

192Untuk masalah instalasi atau login Claude Code di luar IDE, lihat [Troubleshoot installation and login](/id/troubleshoot-install).

keybindings.md +463 −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# Sesuaikan pintasan keyboard

6 

7> Sesuaikan pintasan keyboard di Claude Code dengan file konfigurasi keybindings.

8 

9<Note>

10 Pintasan keyboard yang dapat disesuaikan memerlukan Claude Code v2.1.18 atau lebih baru. Periksa versi Anda dengan `claude --version`.

11</Note>

12 

13Claude Code mendukung pintasan keyboard yang dapat disesuaikan. Jalankan `/keybindings` untuk membuat atau membuka file konfigurasi Anda di `~/.claude/keybindings.json`.

14 

15## File konfigurasi

16 

17File konfigurasi keybindings adalah objek dengan array `bindings`. Setiap blok menentukan konteks dan peta dari keystroke ke tindakan.

18 

19<Note>Perubahan pada file keybindings secara otomatis terdeteksi dan diterapkan tanpa perlu memulai ulang Claude Code.</Note>

20 

21| Field | Deskripsi |

22| :--------- | :---------------------------------------------------------- |

23| `$schema` | URL JSON Schema opsional untuk penyelesaian otomatis editor |

24| `$docs` | URL dokumentasi opsional |

25| `bindings` | Array blok binding berdasarkan konteks |

26 

27Contoh ini mengikat `Ctrl+E` untuk membuka editor eksternal dalam konteks chat, dan membatalkan ikatan `Ctrl+U`:

28 

29```json theme={null}

30{

31 "$schema": "https://www.schemastore.org/claude-code-keybindings.json",

32 "$docs": "https://code.claude.com/docs/id/keybindings",

33 "bindings": [

34 {

35 "context": "Chat",

36 "bindings": {

37 "ctrl+e": "chat:externalEditor",

38 "ctrl+u": null

39 }

40 }

41 ]

42}

43```

44 

45## Konteks

46 

47Setiap blok binding menentukan **konteks** di mana binding berlaku:

48 

49| Konteks | Deskripsi |

50| :---------------- | :-------------------------------------------------------------- |

51| `Global` | Berlaku di mana saja dalam aplikasi |

52| `Chat` | Area input chat utama |

53| `Autocomplete` | Menu penyelesaian otomatis terbuka |

54| `Settings` | Menu pengaturan |

55| `Confirmation` | Dialog izin dan konfirmasi |

56| `Tabs` | Komponen navigasi tab |

57| `Help` | Menu bantuan terlihat |

58| `Transcript` | Penampil transkrip |

59| `HistorySearch` | Mode pencarian riwayat (Ctrl+R) |

60| `Task` | Tugas latar belakang sedang berjalan |

61| `ThemePicker` | Dialog pemilih tema |

62| `Attachments` | Navigasi lampiran gambar dalam dialog pilih |

63| `Footer` | Navigasi indikator footer (tugas, tim, diff) |

64| `MessageSelector` | Pemilihan pesan dialog rewind dan ringkasan |

65| `DiffDialog` | Navigasi penampil diff |

66| `ModelPicker` | Tingkat upaya pemilih model |

67| `Select` | Komponen select/list generik |

68| `Plugin` | Dialog plugin (jelajahi, temukan, kelola) |

69| `Scroll` | Pengguliran percakapan dan pemilihan teks dalam mode fullscreen |

70| `Doctor` | Layar diagnostik `/doctor` |

71 

72## Tindakan yang tersedia

73 

74Tindakan mengikuti format `namespace:action`, seperti `chat:submit` untuk mengirim pesan atau `app:toggleTodos` untuk menampilkan daftar tugas. Setiap konteks memiliki tindakan spesifik yang tersedia.

75 

76### Tindakan aplikasi

77 

78Tindakan yang tersedia dalam konteks `Global`:

79 

80| Tindakan | Default | Deskripsi |

81| :--------------------- | :-------- | :---------------------------------- |

82| `app:interrupt` | Ctrl+C | Batalkan operasi saat ini |

83| `app:exit` | Ctrl+D | Keluar dari Claude Code |

84| `app:redraw` | (unbound) | Paksa terminal untuk digambar ulang |

85| `app:toggleTodos` | Ctrl+T | Alihkan visibilitas daftar tugas |

86| `app:toggleTranscript` | Ctrl+O | Alihkan transkrip verbose |

87 

88### Tindakan riwayat

89 

90Tindakan untuk menavigasi riwayat perintah:

91 

92| Tindakan | Default | Deskripsi |

93| :----------------- | :------ | :---------------------- |

94| `history:search` | Ctrl+R | Buka pencarian riwayat |

95| `history:previous` | Up | Item riwayat sebelumnya |

96| `history:next` | Down | Item riwayat berikutnya |

97 

98### Tindakan chat

99 

100Tindakan yang tersedia dalam konteks `Chat`:

101 

102| Tindakan | Default | Deskripsi |

103| :-------------------- | :------------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

104| `chat:cancel` | Escape | Batalkan input saat ini |

105| `chat:clearInput` | Ctrl+L | Paksa gambar ulang layar penuh, mempertahankan input. Dalam [rendering fullscreen](/id/fullscreen#clear-the-conversation), tekan dua kali dalam dua detik untuk menjalankan `/clear` |

106| `chat:clearScreen` | Cmd+K | Dalam [rendering fullscreen](/id/fullscreen#clear-the-conversation), tekan dua kali dalam dua detik untuk menjalankan `/clear` |

107| `chat:killAgents` | Ctrl+X Ctrl+K | Matikan semua agen latar belakang |

108| `chat:cycleMode` | Shift+Tab\* | Mode izin siklus |

109| `chat:modelPicker` | Meta+P | Buka pemilih model |

110| `chat:fastMode` | Meta+O | Alihkan mode cepat |

111| `chat:thinkingToggle` | Meta+T | Alihkan pemikiran yang diperluas |

112| `chat:submit` | Enter | Kirim pesan |

113| `chat:newline` | Ctrl+J | Sisipkan baris baru tanpa mengirim |

114| `chat:undo` | Ctrl+\_, Ctrl+Shift+- | Batalkan tindakan terakhir |

115| `chat:externalEditor` | Ctrl+G, Ctrl+X Ctrl+E | Buka di editor eksternal |

116| `chat:stash` | Ctrl+S | Simpan prompt saat ini |

117| `chat:imagePaste` | Ctrl+V (Alt+V di Windows) | Tempel gambar |

118 

119\*Di Windows tanpa mode VT (Node \<24.2.0/\<22.17.0, Bun \<1.2.23), default ke Meta+M.

120 

121### Tindakan penyelesaian otomatis

122 

123Tindakan yang tersedia dalam konteks `Autocomplete`:

124 

125| Tindakan | Default | Deskripsi |

126| :---------------------- | :------ | :--------------- |

127| `autocomplete:accept` | Tab | Terima saran |

128| `autocomplete:dismiss` | Escape | Tutup menu |

129| `autocomplete:previous` | Up | Saran sebelumnya |

130| `autocomplete:next` | Down | Saran berikutnya |

131 

132### Tindakan konfirmasi

133 

134Tindakan yang tersedia dalam konteks `Confirmation`:

135 

136| Tindakan | Default | Deskripsi |

137| :-------------------------- | :-------- | :---------------------- |

138| `confirm:yes` | Y, Enter | Konfirmasi tindakan |

139| `confirm:no` | N, Escape | Tolak tindakan |

140| `confirm:previous` | Up | Opsi sebelumnya |

141| `confirm:next` | Down | Opsi berikutnya |

142| `confirm:nextField` | Tab | Bidang berikutnya |

143| `confirm:previousField` | (unbound) | Bidang sebelumnya |

144| `confirm:toggle` | Space | Alihkan pilihan |

145| `confirm:cycleMode` | Shift+Tab | Mode izin siklus |

146| `confirm:toggleExplanation` | Ctrl+E | Alihkan penjelasan izin |

147 

148### Tindakan izin

149 

150Tindakan yang tersedia dalam konteks `Confirmation` untuk dialog izin:

151 

152| Tindakan | Default | Deskripsi |

153| :----------------------- | :------ | :---------------------- |

154| `permission:toggleDebug` | Ctrl+D | Alihkan info debug izin |

155 

156### Tindakan transkrip

157 

158Tindakan yang tersedia dalam konteks `Transcript`:

159 

160| Tindakan | Default | Deskripsi |

161| :------------------------- | :---------------- | :----------------------------- |

162| `transcript:toggleShowAll` | Ctrl+E | Alihkan tampilkan semua konten |

163| `transcript:exit` | q, Ctrl+C, Escape | Keluar dari tampilan transkrip |

164 

165### Tindakan pencarian riwayat

166 

167Tindakan yang tersedia dalam konteks `HistorySearch`:

168 

169| Tindakan | Default | Deskripsi |

170| :------------------------- | :---------- | :----------------------------------------- |

171| `historySearch:next` | Ctrl+R | Kecocokan berikutnya |

172| `historySearch:accept` | Escape, Tab | Terima pilihan |

173| `historySearch:cancel` | Ctrl+C | Batalkan pencarian |

174| `historySearch:execute` | Enter | Jalankan perintah yang dipilih |

175| `historySearch:cycleScope` | Ctrl+S | Siklus cakupan: sesi, proyek, di mana saja |

176 

177### Tindakan tugas

178 

179Tindakan yang tersedia dalam konteks `Task`:

180 

181| Tindakan | Default | Deskripsi |

182| :---------------- | :------ | :---------------------------- |

183| `task:background` | Ctrl+B | Tugas latar belakang saat ini |

184 

185### Tindakan tema

186 

187Tindakan yang tersedia dalam konteks `ThemePicker`:

188 

189| Tindakan | Default | Deskripsi |

190| :------------------------------- | :------ | :------------------------- |

191| `theme:toggleSyntaxHighlighting` | Ctrl+T | Alihkan penyorotan sintaks |

192 

193### Tindakan bantuan

194 

195Tindakan yang tersedia dalam konteks `Help`:

196 

197| Tindakan | Default | Deskripsi |

198| :------------- | :------ | :----------------- |

199| `help:dismiss` | Escape | Tutup menu bantuan |

200 

201### Tindakan tab

202 

203Tindakan yang tersedia dalam konteks `Tabs`:

204 

205| Tindakan | Default | Deskripsi |

206| :-------------- | :-------------- | :------------- |

207| `tabs:next` | Tab, Right | Tab berikutnya |

208| `tabs:previous` | Shift+Tab, Left | Tab sebelumnya |

209 

210### Tindakan lampiran

211 

212Tindakan yang tersedia dalam konteks `Attachments`:

213 

214| Tindakan | Default | Deskripsi |

215| :--------------------- | :---------------- | :---------------------------- |

216| `attachments:next` | Right | Lampiran berikutnya |

217| `attachments:previous` | Left | Lampiran sebelumnya |

218| `attachments:remove` | Backspace, Delete | Hapus lampiran yang dipilih |

219| `attachments:exit` | Down, Escape | Keluar dari navigasi lampiran |

220 

221### Tindakan footer

222 

223Tindakan yang tersedia dalam konteks `Footer`:

224 

225| Tindakan | Default | Deskripsi |

226| :---------------------- | :------ | :------------------------------------------------------- |

227| `footer:next` | Right | Item footer berikutnya |

228| `footer:previous` | Left | Item footer sebelumnya |

229| `footer:up` | Up | Navigasi ke atas dalam footer (batalkan pilihan di atas) |

230| `footer:down` | Down | Navigasi ke bawah dalam footer |

231| `footer:openSelected` | Enter | Buka item footer yang dipilih |

232| `footer:clearSelection` | Escape | Hapus pilihan footer |

233 

234### Tindakan pemilih pesan

235 

236Tindakan yang tersedia dalam konteks `MessageSelector`:

237 

238| Tindakan | Default | Deskripsi |

239| :----------------------- | :---------------------------------------- | :----------------- |

240| `messageSelector:up` | Up, K, Ctrl+P | Naik dalam daftar |

241| `messageSelector:down` | Down, J, Ctrl+N | Turun dalam daftar |

242| `messageSelector:top` | Ctrl+Up, Shift+Up, Meta+Up, Shift+K | Lompat ke atas |

243| `messageSelector:bottom` | Ctrl+Down, Shift+Down, Meta+Down, Shift+J | Lompat ke bawah |

244| `messageSelector:select` | Enter | Pilih pesan |

245 

246### Tindakan diff

247 

248Tindakan yang tersedia dalam konteks `DiffDialog`:

249 

250| Tindakan | Default | Deskripsi |

251| :-------------------- | :----------------- | :-------------------------- |

252| `diff:dismiss` | Escape | Tutup penampil diff |

253| `diff:previousSource` | Left | Sumber diff sebelumnya |

254| `diff:nextSource` | Right | Sumber diff berikutnya |

255| `diff:previousFile` | Up | File sebelumnya dalam diff |

256| `diff:nextFile` | Down | File berikutnya dalam diff |

257| `diff:viewDetails` | Enter | Lihat detail diff |

258| `diff:back` | (context-specific) | Kembali dalam penampil diff |

259 

260### Tindakan pemilih model

261 

262Tindakan yang tersedia dalam konteks `ModelPicker`:

263 

264| Tindakan | Default | Deskripsi |

265| :--------------------------- | :------ | :----------------------- |

266| `modelPicker:decreaseEffort` | Left | Kurangi tingkat upaya |

267| `modelPicker:increaseEffort` | Right | Tingkatkan tingkat upaya |

268 

269### Tindakan pilih

270 

271Tindakan yang tersedia dalam konteks `Select`:

272 

273| Tindakan | Default | Deskripsi |

274| :---------------- | :-------------- | :--------------- |

275| `select:next` | Down, J, Ctrl+N | Opsi berikutnya |

276| `select:previous` | Up, K, Ctrl+P | Opsi sebelumnya |

277| `select:accept` | Enter | Terima pilihan |

278| `select:cancel` | Escape | Batalkan pilihan |

279 

280### Tindakan plugin

281 

282Tindakan yang tersedia dalam konteks `Plugin`:

283 

284| Tindakan | Default | Deskripsi |

285| :---------------- | :------ | :----------------------------------------------------------------------------------------------- |

286| `plugin:toggle` | Space | Alihkan pemilihan plugin |

287| `plugin:install` | I | Instal plugin yang dipilih |

288| `plugin:favorite` | F | Tandai plugin yang dipilih sebagai favorit sehingga diurutkan di dekat bagian atas tab Installed |

289 

290### Tindakan pengaturan

291 

292Tindakan yang tersedia dalam konteks `Settings`:

293 

294| Tindakan | Default | Deskripsi |

295| :---------------- | :------ | :------------------------------------------------------------------------------------- |

296| `settings:search` | / | Masuk mode pencarian |

297| `settings:retry` | R | Coba muat ulang data penggunaan (saat terjadi kesalahan) |

298| `settings:close` | Enter | Simpan perubahan dan tutup panel konfigurasi. Escape membatalkan perubahan dan menutup |

299 

300### Tindakan dokter

301 

302Tindakan yang tersedia dalam konteks `Doctor`:

303 

304| Tindakan | Default | Deskripsi |

305| :----------- | :------ | :----------------------------------------------------------------------------------------------------------------- |

306| `doctor:fix` | F | Kirim laporan diagnostik ke Claude untuk memperbaiki masalah yang dilaporkan. Hanya aktif ketika masalah ditemukan |

307 

308### Tindakan suara

309 

310Tindakan yang tersedia dalam konteks `Chat` ketika [dikte suara](/id/voice-dictation) diaktifkan:

311 

312| Tindakan | Default | Deskripsi |

313| :----------------- | :------ | :--------------------------------------------- |

314| `voice:pushToTalk` | Space | Tahan atau ketuk tergantung pada mode `/voice` |

315 

316### Tindakan scroll

317 

318Tindakan yang tersedia dalam konteks `Scroll` ketika [rendering fullscreen](/id/fullscreen) diaktifkan:

319 

320| Tindakan | Default | Deskripsi |

321| :-------------------------- | :------------------- | :-------------------------------------------------------------------------------------------------------------------- |

322| `scroll:lineUp` | (unbound) | Gulir ke atas satu baris. Pengguliran roda mouse memicu tindakan ini |

323| `scroll:lineDown` | (unbound) | Gulir ke bawah satu baris. Pengguliran roda mouse memicu tindakan ini |

324| `scroll:pageUp` | PageUp | Gulir ke atas setengah tinggi viewport |

325| `scroll:pageDown` | PageDown | Gulir ke bawah setengah tinggi viewport |

326| `scroll:top` | Ctrl+Home | Lompat ke awal percakapan |

327| `scroll:bottom` | Ctrl+End | Lompat ke pesan terbaru dan aktifkan kembali auto-follow |

328| `scroll:halfPageUp` | (unbound) | Gulir ke atas setengah tinggi viewport. Perilaku yang sama dengan `scroll:pageUp`, disediakan untuk rebind gaya vi |

329| `scroll:halfPageDown` | (unbound) | Gulir ke bawah setengah tinggi viewport. Perilaku yang sama dengan `scroll:pageDown`, disediakan untuk rebind gaya vi |

330| `scroll:fullPageUp` | (unbound) | Gulir ke atas tinggi viewport penuh |

331| `scroll:fullPageDown` | (unbound) | Gulir ke bawah tinggi viewport penuh |

332| `selection:copy` | Ctrl+Shift+C / Cmd+C | Salin teks yang dipilih ke clipboard |

333| `selection:clear` | (unbound) | Hapus pemilihan teks aktif |

334| `selection:extendLeft` | Shift+Left | Perluas pemilihan aktif satu kolom ke kiri |

335| `selection:extendRight` | Shift+Right | Perluas pemilihan aktif satu kolom ke kanan |

336| `selection:extendUp` | Shift+Up | Perluas pemilihan aktif satu baris ke atas. Menggulir viewport ketika pemilihan mencapai tepi atas |

337| `selection:extendDown` | Shift+Down | Perluas pemilihan aktif satu baris ke bawah. Menggulir viewport ketika pemilihan mencapai tepi bawah |

338| `selection:extendLineStart` | Shift+Home | Perluas pemilihan aktif ke awal baris |

339| `selection:extendLineEnd` | Shift+End | Perluas pemilihan aktif ke akhir baris |

340 

341## Sintaks keystroke

342 

343### Pengubah

344 

345Gunakan tombol pengubah dengan pemisah `+`:

346 

347* `ctrl` atau `control` - Tombol Control

348* `shift` - Tombol Shift

349* `alt`, `opt`, `option`, atau `meta` - Tombol Alt pada Windows dan Linux, tombol Option pada macOS

350* `cmd`, `command`, `super`, atau `win` - Tombol Command pada macOS, tombol Windows pada Windows, tombol Super pada Linux

351 

352Grup `cmd` hanya terdeteksi di terminal yang melaporkan pengubah Super, seperti yang mendukung protokol keyboard Kitty atau mode `modifyOtherKeys` xterm. Sebagian besar terminal tidak mengirimnya, jadi gunakan `ctrl` atau `meta` untuk binding yang ingin Anda gunakan di mana saja.

353 

354Sebagai contoh:

355 

356```text theme={null}

357ctrl+k Ctrl + K

358shift+tab Shift + Tab

359meta+p Option + P pada macOS, Alt + P di tempat lain

360ctrl+shift+c Pengubah ganda

361```

362 

363### Huruf besar

364 

365Huruf besar yang berdiri sendiri menyiratkan Shift. Sebagai contoh, `K` setara dengan `shift+k`. Ini berguna untuk binding gaya vim di mana kunci huruf besar dan kecil memiliki arti berbeda.

366 

367Huruf besar dengan pengubah (misalnya, `ctrl+K`) diperlakukan sebagai gaya dan **tidak** menyiratkan Shift: `ctrl+K` sama dengan `ctrl+k`.

368 

369### Chord

370 

371Chord adalah urutan keystroke yang dipisahkan oleh spasi:

372 

373```text theme={null}

374ctrl+k ctrl+s Tekan Ctrl+K, lepaskan, lalu Ctrl+S

375```

376 

377### Tombol khusus

378 

379* `escape` atau `esc` - Tombol Escape

380* `enter` atau `return` - Tombol Enter

381* `tab` - Tombol Tab

382* `space` - Bilah spasi

383* `up`, `down`, `left`, `right` - Tombol panah

384* `backspace`, `delete` - Tombol hapus

385 

386## Batalkan pintasan default

387 

388Atur tindakan ke `null` untuk membatalkan ikatan pintasan default:

389 

390```json theme={null}

391{

392 "bindings": [

393 {

394 "context": "Chat",

395 "bindings": {

396 "ctrl+s": null

397 }

398 }

399 ]

400}

401```

402 

403Ini juga berfungsi untuk binding chord. Membatalkan setiap chord yang berbagi awalan membebaskan awalan itu untuk digunakan sebagai binding tombol tunggal:

404 

405```json theme={null}

406{

407 "bindings": [

408 {

409 "context": "Chat",

410 "bindings": {

411 "ctrl+x ctrl+k": null,

412 "ctrl+x ctrl+e": null,

413 "ctrl+x": "chat:newline"

414 }

415 }

416 ]

417}

418```

419 

420Jika Anda membatalkan beberapa tetapi tidak semua chord pada awalan, menekan awalan masih memasuki mode chord-wait untuk binding yang tersisa.

421 

422## Pintasan yang dicadangkan

423 

424Pintasan ini tidak dapat diikat ulang:

425 

426| Pintasan | Alasan |

427| :-------- | :------------------------------------------------------ |

428| Ctrl+C | Interrupt/cancel yang dikodekan keras |

429| Ctrl+D | Exit yang dikodekan keras |

430| Ctrl+M | Identik dengan Enter di terminal (keduanya mengirim CR) |

431| Caps Lock | Tidak dikirimkan ke aplikasi terminal |

432 

433## Konflik terminal

434 

435Beberapa pintasan mungkin bertentangan dengan multiplexer terminal:

436 

437| Pintasan | Konflik |

438| :------- | :------------------------------------------ |

439| Ctrl+B | Awalan tmux (tekan dua kali untuk mengirim) |

440| Ctrl+A | Awalan GNU screen |

441| Ctrl+Z | Suspend proses Unix (SIGTSTP) |

442 

443## Interaksi mode vim

444 

445Ketika mode vim diaktifkan melalui `/config` → Editor mode, keybindings dan mode vim beroperasi secara independen:

446 

447* **Mode vim** menangani input pada tingkat input teks (gerakan kursor, mode, motions)

448* **Keybindings** menangani tindakan pada tingkat komponen (alihkan todos, kirim, dll.)

449* Tombol Escape dalam mode vim beralih dari INSERT ke mode NORMAL; itu tidak memicu `chat:cancel`

450* Sebagian besar pintasan Ctrl+key melewati mode vim ke sistem keybinding

451* Dalam mode NORMAL vim, `?` menampilkan menu bantuan (perilaku vim)

452 

453## Validasi

454 

455Claude Code memvalidasi keybindings Anda dan menampilkan peringatan untuk:

456 

457* Parse errors (JSON atau struktur tidak valid)

458* Nama konteks tidak valid

459* Konflik pintasan yang dicadangkan

460* Konflik multiplexer terminal

461* Binding duplikat dalam konteks yang sama

462 

463Jalankan `/doctor` untuk melihat peringatan keybinding apa pun.

llm-gateway.md +196 −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# Konfigurasi LLM gateway

6 

7> Pelajari cara mengonfigurasi Claude Code untuk bekerja dengan solusi LLM gateway. Mencakup persyaratan gateway, konfigurasi autentikasi, pemilihan model, dan pengaturan endpoint khusus penyedia.

8 

9LLM gateway menyediakan lapisan proxy terpusat antara Claude Code dan penyedia model, sering kali menyediakan:

10 

11* **Autentikasi terpusat** - Titik tunggal untuk manajemen kunci API

12* **Pelacakan penggunaan** - Pantau penggunaan di seluruh tim dan proyek

13* **Kontrol biaya** - Terapkan anggaran dan batas laju

14* **Pencatatan audit** - Lacak semua interaksi model untuk kepatuhan

15* **Perutean model** - Beralih antar penyedia tanpa perubahan kode

16 

17## Persyaratan gateway

18 

19Agar LLM gateway dapat bekerja dengan Claude Code, gateway harus memenuhi persyaratan berikut:

20 

21**Format API**

22 

23Gateway harus mengekspos ke klien setidaknya salah satu format API berikut:

24 

251. **Anthropic Messages**: `/v1/messages`, `/v1/messages/count_tokens`

26 * Harus meneruskan header permintaan: `anthropic-beta`, `anthropic-version`

27 

282. **Bedrock InvokeModel**: `/invoke`, `/invoke-with-response-stream`

29 * Harus mempertahankan bidang badan permintaan: `anthropic_beta`, `anthropic_version`

30 

313. **Vertex rawPredict**: `:rawPredict`, `:streamRawPredict`, `/count-tokens:rawPredict`

32 * Harus meneruskan header permintaan: `anthropic-beta`, `anthropic-version`

33 

34Kegagalan untuk meneruskan header atau mempertahankan bidang badan dapat mengakibatkan fungsionalitas berkurang atau ketidakmampuan menggunakan fitur Claude Code.

35 

36<Note>

37 Claude Code menentukan fitur mana yang akan diaktifkan berdasarkan format API. Saat menggunakan format Anthropic Messages dengan Bedrock atau Vertex, Anda mungkin perlu mengatur variabel lingkungan `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1`.

38</Note>

39 

40**Header permintaan**

41 

42Claude Code menyertakan header berikut pada setiap permintaan API:

43 

44| Header | Deskripsi |

45| :------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

46| `X-Claude-Code-Session-Id` | Pengidentifikasi unik untuk sesi Claude Code saat ini. Proxy dapat menggunakan ini untuk mengagregasi semua permintaan API dari sesi tunggal tanpa mengurai badan permintaan. |

47 

48Claude Code juga menambahkan blok atribusi singkat ke prompt sistem yang berisi versi klien dan sidik jari yang berasal dari percakapan. API Anthropic menghapus blok ini sebelum memproses, sehingga tidak mempengaruhi prompt caching pihak pertama. Jika gateway Anda menerapkan cache prompt sendiri yang dikunci pada badan permintaan lengkap, atur [`CLAUDE_CODE_ATTRIBUTION_HEADER=0`](/id/env-vars) untuk menghilangkannya.

49 

50## Konfigurasi

51 

52### Pemilihan model

53 

54Secara default, Claude Code menggunakan nama model standar untuk format API yang dipilih.

55 

56Ketika `ANTHROPIC_BASE_URL` menunjuk ke gateway yang mengekspos format Anthropic Messages, Claude Code menanyakan endpoint `/v1/models` gateway saat startup dan menambahkan model yang dikembalikan ke pemilih `/model`. Setiap entri yang ditemukan diberi label "From gateway" dan menggunakan field `display_name` dari respons ketika satu disediakan. Ini memerlukan Claude Code v2.1.126 atau lebih baru.

57 

58Penemuan hanya berlaku untuk format Anthropic Messages. Ini tidak berjalan untuk endpoint pass-through Bedrock atau Vertex, dan tidak berjalan ketika `ANTHROPIC_BASE_URL` tidak diatur atau menunjuk ke `api.anthropic.com`.

59 

60Permintaan penemuan mengautentikasi dengan cara yang sama seperti permintaan inferensi: ia mengirimkan `ANTHROPIC_AUTH_TOKEN` sebagai token bearer, atau `ANTHROPIC_API_KEY` sebagai header `x-api-key` ketika tidak ada token auth yang diatur, bersama dengan header apa pun dari `ANTHROPIC_CUSTOM_HEADERS`. Hanya model yang ID-nya dimulai dengan `claude` atau `anthropic` yang ditambahkan ke pemilih. Hasil disimpan dalam cache ke `~/.claude/cache/gateway-models.json` dan disegarkan pada setiap startup. Jika permintaan gagal atau gateway tidak mengimplementasikan `/v1/models`, pemilih kembali ke daftar cache dari startup sebelumnya atau ke daftar model bawaan.

61 

62Jika gateway Anda menggunakan nama model yang tidak cocok dengan filter penemuan, gunakan variabel lingkungan yang didokumentasikan dalam [Konfigurasi Model](/id/model-config) untuk menambahkannya secara manual.

63 

64## Konfigurasi LiteLLM

65 

66<Warning>

67 Versi PyPI LiteLLM 1.82.7 dan 1.82.8 dikompromikan dengan malware pencuri kredensial. Jangan instal versi ini. Jika Anda telah menginstalnya:

68 

69 * Hapus paket

70 * Putar semua kredensial pada sistem yang terpengaruh

71 * Ikuti langkah remediasi dalam [BerriAI/litellm#24518](https://github.com/BerriAI/litellm/issues/24518)

72 

73 LiteLLM adalah layanan proxy pihak ketiga. Anthropic tidak mendukung, memelihara, atau mengaudit keamanan atau fungsionalitas LiteLLM. Panduan ini disediakan untuk tujuan informasi dan mungkin menjadi ketinggalan zaman. Gunakan atas kebijakan Anda sendiri.

74</Warning>

75 

76### Prasyarat

77 

78* Claude Code diperbarui ke versi terbaru

79* LiteLLM Proxy Server diterapkan dan dapat diakses

80* Akses ke model Claude melalui penyedia pilihan Anda

81 

82### Pengaturan LiteLLM dasar

83 

84**Konfigurasi Claude Code**:

85 

86#### Metode autentikasi

87 

88##### Kunci API statis

89 

90Metode paling sederhana menggunakan kunci API tetap:

91 

92```bash theme={null}

93# Atur di lingkungan

94export ANTHROPIC_AUTH_TOKEN=sk-litellm-static-key

95 

96# Atau di pengaturan Claude Code

97{

98 "env": {

99 "ANTHROPIC_AUTH_TOKEN": "sk-litellm-static-key"

100 }

101}

102```

103 

104Nilai ini akan dikirim sebagai header `Authorization`.

105 

106##### Kunci API dinamis dengan pembantu

107 

108Untuk kunci yang berputar atau autentikasi per pengguna:

109 

1101. Buat skrip pembantu kunci API:

111 

112```bash theme={null}

113#!/bin/bash

114# ~/bin/get-litellm-key.sh

115 

116# Contoh: Ambil kunci dari vault

117vault kv get -field=api_key secret/litellm/claude-code

118 

119# Contoh: Hasilkan token JWT

120jwt encode \

121 --secret="${JWT_SECRET}" \

122 --exp="+1h" \

123 '{"user":"'${USER}'","team":"engineering"}'

124```

125 

1262. Konfigurasi pengaturan Claude Code untuk menggunakan pembantu:

127 

128```json theme={null}

129{

130 "apiKeyHelper": "~/bin/get-litellm-key.sh"

131}

132```

133 

1343. Atur interval penyegaran token:

135 

136```bash theme={null}

137# Segarkan setiap jam (3600000 ms)

138export CLAUDE_CODE_API_KEY_HELPER_TTL_MS=3600000

139```

140 

141Nilai ini akan dikirim sebagai header `Authorization` dan `X-Api-Key`. `apiKeyHelper` memiliki prioritas lebih rendah daripada `ANTHROPIC_AUTH_TOKEN` atau `ANTHROPIC_API_KEY`.

142 

143#### Endpoint terpadu (direkomendasikan)

144 

145Menggunakan [endpoint format Anthropic](https://docs.litellm.ai/docs/anthropic_unified) LiteLLM:

146 

147```bash theme={null}

148export ANTHROPIC_BASE_URL=https://litellm-server:4000

149```

150 

151**Manfaat endpoint terpadu dibandingkan endpoint pass-through:**

152 

153* Penyeimbangan beban

154* Fallback

155* Dukungan konsisten untuk pelacakan biaya dan pelacakan pengguna akhir

156 

157#### Endpoint pass-through khusus penyedia (alternatif)

158 

159##### Claude API melalui LiteLLM

160 

161Menggunakan [endpoint pass-through](https://docs.litellm.ai/docs/pass_through/anthropic_completion):

162 

163```bash theme={null}

164export ANTHROPIC_BASE_URL=https://litellm-server:4000/anthropic

165```

166 

167##### Amazon Bedrock melalui LiteLLM

168 

169Menggunakan [endpoint pass-through](https://docs.litellm.ai/docs/pass_through/bedrock):

170 

171```bash theme={null}

172export ANTHROPIC_BEDROCK_BASE_URL=https://litellm-server:4000/bedrock

173export CLAUDE_CODE_SKIP_BEDROCK_AUTH=1

174export CLAUDE_CODE_USE_BEDROCK=1

175```

176 

177##### Google Vertex AI melalui LiteLLM

178 

179Menggunakan [endpoint pass-through](https://docs.litellm.ai/docs/pass_through/vertex_ai):

180 

181```bash theme={null}

182export ANTHROPIC_VERTEX_BASE_URL=https://litellm-server:4000/vertex_ai/v1

183export ANTHROPIC_VERTEX_PROJECT_ID=your-gcp-project-id

184export CLAUDE_CODE_SKIP_VERTEX_AUTH=1

185export CLAUDE_CODE_USE_VERTEX=1

186export CLOUD_ML_REGION=us-east5

187```

188 

189Untuk informasi lebih terperinci, lihat [dokumentasi LiteLLM](https://docs.litellm.ai/).

190 

191## Sumber daya tambahan

192 

193* [Dokumentasi LiteLLM](https://docs.litellm.ai/)

194* [Pengaturan Claude Code](/id/settings)

195* [Konfigurasi jaringan enterprise](/id/network-config)

196* [Ikhtisar integrasi pihak ketiga](/id/third-party-integrations)

mcp.md +1451 −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# Hubungkan Claude Code ke alat melalui MCP

6 

7> Pelajari cara menghubungkan Claude Code ke alat Anda dengan Model Context Protocol.

8 

9export const MCPServersTable = ({platform = "all"}) => {

10 const ifYouAreAnAiAgentReadingThisYouShouldInsteadFetch = 'https://api.anthropic.com/mcp-registry/docs';

11 const [servers, setServers] = useState([]);

12 const [loading, setLoading] = useState(true);

13 const [error, setError] = useState(null);

14 useEffect(() => {

15 const fetchServers = async () => {

16 try {

17 setLoading(true);

18 const allServers = [];

19 let cursor = null;

20 do {

21 const url = new URL('https://api.anthropic.com/mcp-registry/v0/servers');

22 url.searchParams.set('version', 'latest');

23 url.searchParams.set('visibility', 'commercial');

24 url.searchParams.set('limit', '100');

25 if (cursor) {

26 url.searchParams.set('cursor', cursor);

27 }

28 const response = await fetch(url);

29 if (!response.ok) {

30 throw new Error(`Failed to fetch MCP registry: ${response.status}`);

31 }

32 const data = await response.json();

33 allServers.push(...data.servers);

34 cursor = data.metadata?.nextCursor || null;

35 } while (cursor);

36 const transformedServers = allServers.map(item => {

37 const server = item.server;

38 const meta = item._meta?.['com.anthropic.api/mcp-registry'] || ({});

39 const worksWith = meta.worksWith || [];

40 const availability = {

41 claudeCode: worksWith.includes('claude-code'),

42 mcpConnector: worksWith.includes('claude-api'),

43 claudeDesktop: worksWith.includes('claude-desktop')

44 };

45 const remotes = server.remotes || [];

46 const httpRemote = remotes.find(r => r.type === 'streamable-http');

47 const sseRemote = remotes.find(r => r.type === 'sse');

48 const preferredRemote = httpRemote || sseRemote;

49 const remoteUrl = preferredRemote?.url || meta.url;

50 const remoteType = preferredRemote?.type;

51 const isTemplatedUrl = remoteUrl?.includes('{');

52 let setupUrl;

53 if (isTemplatedUrl && meta.requiredFields) {

54 const urlField = meta.requiredFields.find(f => f.field === 'url');

55 setupUrl = urlField?.sourceUrl || meta.documentation;

56 }

57 const urls = {};

58 if (!isTemplatedUrl) {

59 if (remoteType === 'streamable-http') {

60 urls.http = remoteUrl;

61 } else if (remoteType === 'sse') {

62 urls.sse = remoteUrl;

63 }

64 }

65 let envVars = [];

66 if (server.packages && server.packages.length > 0) {

67 const npmPackage = server.packages.find(p => p.registryType === 'npm');

68 if (npmPackage) {

69 urls.stdio = `npx -y ${npmPackage.identifier}`;

70 if (npmPackage.environmentVariables) {

71 envVars = npmPackage.environmentVariables;

72 }

73 }

74 }

75 return {

76 name: meta.displayName || server.title || server.name,

77 description: meta.oneLiner || server.description,

78 documentation: meta.documentation,

79 urls: urls,

80 envVars: envVars,

81 availability: availability,

82 customCommands: meta.claudeCodeCopyText ? {

83 claudeCode: meta.claudeCodeCopyText

84 } : undefined,

85 setupUrl: setupUrl

86 };

87 });

88 setServers(transformedServers);

89 setError(null);

90 } catch (err) {

91 setError(err.message);

92 console.error('Error fetching MCP registry:', err);

93 } finally {

94 setLoading(false);

95 }

96 };

97 fetchServers();

98 }, []);

99 const generateClaudeCodeCommand = server => {

100 if (server.customCommands && server.customCommands.claudeCode) {

101 return server.customCommands.claudeCode.replace('--transport streamable-http', '--transport http');

102 }

103 const serverSlug = server.name.toLowerCase().replace(/[^a-z0-9]/g, '-');

104 if (server.urls.http) {

105 return `claude mcp add ${serverSlug} --transport http ${server.urls.http}`;

106 }

107 if (server.urls.sse) {

108 return `claude mcp add ${serverSlug} --transport sse ${server.urls.sse}`;

109 }

110 if (server.urls.stdio) {

111 const envFlags = server.envVars && server.envVars.length > 0 ? server.envVars.map(v => `--env ${v.name}=YOUR_${v.name}`).join(' ') : '';

112 const baseCommand = `claude mcp add ${serverSlug} --transport stdio`;

113 return envFlags ? `${baseCommand} ${envFlags} -- ${server.urls.stdio}` : `${baseCommand} -- ${server.urls.stdio}`;

114 }

115 return null;

116 };

117 if (loading) {

118 return <div>Loading MCP servers...</div>;

119 }

120 if (error) {

121 return <div>Error loading MCP servers: {error}</div>;

122 }

123 const filteredServers = servers.filter(server => {

124 if (platform === "claudeCode") {

125 return server.availability.claudeCode;

126 } else if (platform === "mcpConnector") {

127 return server.availability.mcpConnector;

128 } else if (platform === "claudeDesktop") {

129 return server.availability.claudeDesktop;

130 } else if (platform === "all") {

131 return true;

132 } else {

133 throw new Error(`Unknown platform: ${platform}`);

134 }

135 });

136 return <>

137 <style jsx>{`

138 .cards-container {

139 display: grid;

140 gap: 1rem;

141 margin-bottom: 2rem;

142 }

143 .server-card {

144 border: 1px solid var(--border-color, #e5e7eb);

145 border-radius: 6px;

146 padding: 1rem;

147 }

148 .command-row {

149 display: flex;

150 align-items: center;

151 gap: 0.25rem;

152 }

153 .command-row code {

154 font-size: 0.75rem;

155 overflow-x: auto;

156 }

157 `}</style>

158 

159 <div className="cards-container">

160 {filteredServers.map(server => {

161 const claudeCodeCommand = generateClaudeCodeCommand(server);

162 const mcpUrl = server.urls.http || server.urls.sse;

163 const commandToShow = platform === "claudeCode" ? claudeCodeCommand : mcpUrl;

164 return <div key={server.name} className="server-card">

165 <div>

166 {server.documentation ? <a href={server.documentation}>

167 <strong>{server.name}</strong>

168 </a> : <strong>{server.name}</strong>}

169 </div>

170 

171 <p style={{

172 margin: '0.5rem 0',

173 fontSize: '0.9rem'

174 }}>

175 {server.description}

176 </p>

177 

178 {server.setupUrl && <p style={{

179 margin: '0.25rem 0',

180 fontSize: '0.8rem',

181 fontStyle: 'italic',

182 opacity: 0.7

183 }}>

184 Requires user-specific URL.{' '}

185 <a href={server.setupUrl} style={{

186 textDecoration: 'underline'

187 }}>

188 Get your URL here

189 </a>.

190 </p>}

191 

192 {commandToShow && !server.setupUrl && <>

193 <p style={{

194 display: 'block',

195 fontSize: '0.75rem',

196 fontWeight: 500,

197 minWidth: 'fit-content',

198 marginTop: '0.5rem',

199 marginBottom: 0

200 }}>

201 {platform === "claudeCode" ? "Command" : "URL"}

202 </p>

203 <div className="command-row">

204 <code>

205 {commandToShow}

206 </code>

207 </div>

208 </>}

209 </div>;

210 })}

211 </div>

212 </>;

213};

214 

215Claude Code dapat terhubung ke ratusan alat eksternal dan sumber data melalui [Model Context Protocol (MCP)](https://modelcontextprotocol.io/introduction), standar sumber terbuka untuk integrasi AI-alat. Server MCP memberikan Claude Code akses ke alat, database, dan API Anda.

216 

217Hubungkan server ketika Anda menemukan diri Anda menyalin data ke dalam chat dari alat lain, seperti pelacak masalah atau dasbor pemantauan. Setelah terhubung, Claude dapat membaca dan bertindak pada sistem tersebut secara langsung alih-alih bekerja dari apa yang Anda tempel.

218 

219## Apa yang dapat Anda lakukan dengan MCP

220 

221Dengan server MCP yang terhubung, Anda dapat meminta Claude Code untuk:

222 

223* **Menerapkan fitur dari pelacak masalah**: "Tambahkan fitur yang dijelaskan dalam masalah JIRA ENG-4521 dan buat PR di GitHub."

224* **Menganalisis data pemantauan**: "Periksa Sentry dan Statsig untuk memeriksa penggunaan fitur yang dijelaskan dalam ENG-4521."

225* **Menanyakan database**: "Temukan email 10 pengguna acak yang menggunakan fitur ENG-4521, berdasarkan database PostgreSQL kami."

226* **Mengintegrasikan desain**: "Perbarui template email standar kami berdasarkan desain Figma baru yang diposting di Slack"

227* **Mengotomatisasi alur kerja**: "Buat draf Gmail mengundang 10 pengguna ini ke sesi umpan balik tentang fitur baru."

228* **Bereaksi terhadap peristiwa eksternal**: Server MCP juga dapat bertindak sebagai [saluran](/id/channels) yang mendorong pesan ke dalam sesi Anda, sehingga Claude bereaksi terhadap pesan Telegram, obrolan Discord, atau peristiwa webhook saat Anda sedang pergi.

229 

230## Server MCP populer

231 

232Berikut adalah beberapa server MCP yang umum digunakan yang dapat Anda hubungkan ke Claude Code:

233 

234<Warning>

235 Gunakan server MCP pihak ketiga dengan risiko Anda sendiri - Anthropic belum memverifikasi

236 kebenaran atau keamanan semua server ini.

237 Pastikan Anda mempercayai server MCP yang Anda instal.

238 Berhati-hatilah terutama saat menggunakan server MCP yang dapat mengambil konten

239 yang tidak dipercaya, karena ini dapat mengekspos Anda ke risiko injeksi prompt.

240</Warning>

241 

242<MCPServersTable platform="claudeCode" />

243 

244<Note>

245 **Membutuhkan integrasi spesifik?** [Temukan ratusan server MCP lainnya di GitHub](https://github.com/modelcontextprotocol/servers), atau buat server Anda sendiri menggunakan [MCP SDK](https://modelcontextprotocol.io/quickstart/server).

246</Note>

247 

248## Menginstal server MCP

249 

250Server MCP dapat dikonfigurasi dengan tiga cara berbeda tergantung pada kebutuhan Anda:

251 

252### Opsi 1: Tambahkan server HTTP jarak jauh

253 

254Server HTTP adalah opsi yang direkomendasikan untuk terhubung ke server MCP jarak jauh. Ini adalah transport yang paling banyak didukung untuk layanan berbasis cloud.

255 

256```bash theme={null}

257# Sintaks dasar

258claude mcp add --transport http <name> <url>

259 

260# Contoh nyata: Hubungkan ke Notion

261claude mcp add --transport http notion https://mcp.notion.com/mcp

262 

263# Contoh dengan token Bearer

264claude mcp add --transport http secure-api https://api.example.com/mcp \

265 --header "Authorization: Bearer your-token"

266```

267 

268### Opsi 2: Tambahkan server SSE jarak jauh

269 

270<Warning>

271 Transport SSE (Server-Sent Events) sudah usang. Gunakan server HTTP sebagai gantinya, jika tersedia.

272</Warning>

273 

274```bash theme={null}

275# Sintaks dasar

276claude mcp add --transport sse <name> <url>

277 

278# Contoh nyata: Hubungkan ke Asana

279claude mcp add --transport sse asana https://mcp.asana.com/sse

280 

281# Contoh dengan header autentikasi

282claude mcp add --transport sse private-api https://api.company.com/sse \

283 --header "X-API-Key: your-key-here"

284```

285 

286### Opsi 3: Tambahkan server stdio lokal

287 

288Server stdio berjalan sebagai proses lokal di mesin Anda. Mereka ideal untuk alat yang memerlukan akses sistem langsung atau skrip khusus.

289 

290```bash theme={null}

291# Sintaks dasar

292claude mcp add [options] <name> -- <command> [args...]

293 

294# Contoh nyata: Tambahkan server Airtable

295claude mcp add --transport stdio --env AIRTABLE_API_KEY=YOUR_KEY airtable \

296 -- npx -y airtable-mcp-server

297```

298 

299<Note>

300 **Penting: Urutan opsi**

301 

302 Semua opsi (`--transport`, `--env`, `--scope`, `--header`) harus datang **sebelum** nama server. `--` (tanda hubung ganda) kemudian memisahkan nama server dari perintah dan argumen yang diteruskan ke server MCP.

303 

304 Sebagai contoh:

305 

306 * `claude mcp add --transport stdio myserver -- npx server` → menjalankan `npx server`

307 * `claude mcp add --transport stdio --env KEY=value myserver -- python server.py --port 8080` → menjalankan `python server.py --port 8080` dengan `KEY=value` di lingkungan

308 

309 Ini mencegah konflik antara flag Claude dan flag server.

310</Note>

311 

312### Mengelola server Anda

313 

314Setelah dikonfigurasi, Anda dapat mengelola server MCP Anda dengan perintah ini:

315 

316```bash theme={null}

317# Daftar semua server yang dikonfigurasi

318claude mcp list

319 

320# Dapatkan detail untuk server tertentu

321claude mcp get github

322 

323# Hapus server

324claude mcp remove github

325 

326# (dalam Claude Code) Periksa status server

327/mcp

328```

329 

330### Pembaruan alat dinamis

331 

332Claude Code mendukung notifikasi `list_changed` MCP, memungkinkan server MCP untuk secara dinamis memperbarui alat, prompt, dan sumber daya yang tersedia tanpa memerlukan Anda untuk memutuskan dan menghubungkan kembali. Ketika server MCP mengirim notifikasi `list_changed`, Claude Code secara otomatis menyegarkan kemampuan yang tersedia dari server tersebut.

333 

334### Koneksi ulang otomatis

335 

336Jika server HTTP atau SSE terputus di tengah sesi, Claude Code secara otomatis menghubungkan kembali dengan backoff eksponensial: hingga lima upaya, dimulai dengan penundaan satu detik dan berlipat ganda setiap kali. Server muncul sebagai tertunda dalam `/mcp` saat koneksi ulang sedang berlangsung. Setelah lima upaya gagal, server ditandai sebagai gagal dan Anda dapat mencoba lagi secara manual dari `/mcp`. Server stdio adalah proses lokal dan tidak dihubungkan kembali secara otomatis.

337 

338Backoff yang sama berlaku ketika server HTTP atau SSE gagal koneksi awalnya saat startup. Mulai dari v2.1.121, Claude Code mencoba ulang koneksi awal hingga tiga kali pada kesalahan transien seperti respons 5xx, koneksi ditolak, atau timeout, kemudian menandai server sebagai gagal jika masih tidak dapat terhubung. Kesalahan autentikasi dan not-found tidak dicoba ulang karena memerlukan perubahan konfigurasi untuk diselesaikan.

339 

340### Dorong pesan dengan saluran

341 

342Server MCP juga dapat mendorong pesan langsung ke dalam sesi Anda sehingga Claude dapat bereaksi terhadap peristiwa eksternal seperti hasil CI, peringatan pemantauan, atau pesan obrolan. Untuk mengaktifkan ini, server Anda mendeklarasikan kemampuan `claude/channel` dan Anda memilihnya dengan flag `--channels` saat startup. Lihat [Saluran](/id/channels) untuk menggunakan saluran yang didukung secara resmi, atau [Referensi saluran](/id/channels-reference) untuk membangun saluran Anda sendiri.

343 

344<Tip>

345 Tips:

346 

347 * Gunakan flag `--scope` untuk menentukan di mana konfigurasi disimpan:

348 * `local` (default): Hanya tersedia untuk Anda di proyek saat ini (disebut `project` di versi yang lebih lama)

349 * `project`: Dibagikan dengan semua orang di proyek melalui file `.mcp.json`

350 * `user`: Tersedia untuk Anda di semua proyek (disebut `global` di versi yang lebih lama)

351 * Atur variabel lingkungan dengan flag `--env` (misalnya, `--env KEY=value`)

352 * Konfigurasi waktu tunggu startup server MCP menggunakan variabel lingkungan MCP\_TIMEOUT (misalnya, `MCP_TIMEOUT=10000 claude` menetapkan waktu tunggu 10 detik)

353 * Claude Code akan menampilkan peringatan ketika output alat MCP melebihi 10.000 token. Untuk meningkatkan batas ini, atur variabel lingkungan `MAX_MCP_OUTPUT_TOKENS` (misalnya, `MAX_MCP_OUTPUT_TOKENS=50000`)

354 * Gunakan `/mcp` untuk autentikasi dengan server jarak jauh yang memerlukan autentikasi OAuth 2.0

355</Tip>

356 

357### Server MCP yang disediakan plugin

358 

359[Plugin](/id/plugins) dapat menggabungkan server MCP, secara otomatis menyediakan alat dan integrasi ketika plugin diaktifkan. Server MCP plugin bekerja identik dengan server yang dikonfigurasi pengguna.

360 

361**Cara kerja server MCP plugin**:

362 

363* Plugin menentukan server MCP dalam `.mcp.json` di root plugin atau inline dalam `plugin.json`

364* Ketika plugin diaktifkan, server MCP-nya dimulai secara otomatis

365* Alat MCP plugin muncul bersama alat MCP yang dikonfigurasi secara manual

366* Server plugin dikelola melalui instalasi plugin (bukan perintah `/mcp`)

367 

368**Contoh konfigurasi MCP plugin**:

369 

370Dalam `.mcp.json` di root plugin:

371 

372```json theme={null}

373{

374 "mcpServers": {

375 "database-tools": {

376 "command": "${CLAUDE_PLUGIN_ROOT}/servers/db-server",

377 "args": ["--config", "${CLAUDE_PLUGIN_ROOT}/config.json"],

378 "env": {

379 "DB_URL": "${DB_URL}"

380 }

381 }

382 }

383}

384```

385 

386Atau inline dalam `plugin.json`:

387 

388```json theme={null}

389{

390 "name": "my-plugin",

391 "mcpServers": {

392 "plugin-api": {

393 "command": "${CLAUDE_PLUGIN_ROOT}/servers/api-server",

394 "args": ["--port", "8080"]

395 }

396 }

397}

398```

399 

400**Fitur MCP plugin**:

401 

402* **Siklus hidup otomatis**: Pada startup sesi, server untuk plugin yang diaktifkan terhubung secara otomatis. Jika Anda mengaktifkan atau menonaktifkan plugin selama sesi, jalankan `/reload-plugins` untuk menghubungkan atau memutuskan server MCP-nya

403* **Variabel lingkungan**: gunakan `${CLAUDE_PLUGIN_ROOT}` untuk file plugin bundel dan `${CLAUDE_PLUGIN_DATA}` untuk [status persisten](/id/plugins-reference#persistent-data-directory) yang bertahan pembaruan plugin

404* **Akses lingkungan pengguna**: Akses ke variabel lingkungan yang sama seperti server yang dikonfigurasi secara manual

405* **Jenis transport berganda**: Dukungan transport stdio, SSE, dan HTTP (dukungan transport dapat bervariasi menurut server)

406 

407**Melihat server MCP plugin**:

408 

409```bash theme={null}

410# Dalam Claude Code, lihat semua server MCP termasuk yang dari plugin

411/mcp

412```

413 

414Server plugin muncul dalam daftar dengan indikator yang menunjukkan mereka berasal dari plugin.

415 

416**Manfaat server MCP plugin**:

417 

418* **Distribusi bundel**: Alat dan server dikemas bersama

419* **Pengaturan otomatis**: Tidak perlu konfigurasi MCP manual

420* **Konsistensi tim**: Semua orang mendapatkan alat yang sama ketika plugin diinstal

421 

422Lihat [referensi komponen plugin](/id/plugins-reference#mcp-servers) untuk detail tentang penggabungan server MCP dengan plugin.

423 

424## Cakupan instalasi MCP

425 

426Server MCP dapat dikonfigurasi pada tiga cakupan berbeda. Cakupan yang Anda pilih mengontrol proyek mana tempat server dimuat dan apakah konfigurasi dibagikan dengan tim Anda.

427 

428| Cakupan | Dimuat dalam | Dibagikan dengan tim | Disimpan dalam |

429| ------------------------ | --------------------- | ------------------------- | -------------------------- |

430| [Lokal](#local-scope) | Hanya proyek saat ini | Tidak | `~/.claude.json` |

431| [Proyek](#project-scope) | Hanya proyek saat ini | Ya, melalui kontrol versi | `.mcp.json` di root proyek |

432| [Pengguna](#user-scope) | Semua proyek Anda | Tidak | `~/.claude.json` |

433 

434### Cakupan lokal

435 

436Cakupan lokal adalah default. Server dengan cakupan lokal hanya dimuat di proyek tempat Anda menambahkannya dan tetap pribadi untuk Anda. Claude Code menyimpannya dalam `~/.claude.json` di bawah jalur proyek tersebut, jadi server yang sama tidak akan muncul di proyek lain Anda. Gunakan cakupan lokal untuk server pengembangan pribadi, konfigurasi eksperimental, atau server dengan kredensial yang tidak ingin Anda masukkan ke dalam kontrol versi.

437 

438<Note>

439 Istilah "cakupan lokal" untuk server MCP berbeda dari pengaturan lokal umum. Server MCP dengan cakupan lokal disimpan dalam `~/.claude.json` (direktori home Anda), sementara pengaturan lokal umum menggunakan `.claude/settings.local.json` (di direktori proyek). Lihat [Pengaturan](/id/settings#settings-files) untuk detail tentang lokasi file pengaturan.

440</Note>

441 

442```bash theme={null}

443# Tambahkan server dengan cakupan lokal (default)

444claude mcp add --transport http stripe https://mcp.stripe.com

445 

446# Tentukan cakupan lokal secara eksplisit

447claude mcp add --transport http stripe --scope local https://mcp.stripe.com

448```

449 

450Perintah menulis server ke dalam entri untuk proyek saat ini di dalam `~/.claude.json`. Contoh di bawah menunjukkan hasilnya ketika Anda menjalankannya dari `/path/to/your/project`:

451 

452```json theme={null}

453{

454 "projects": {

455 "/path/to/your/project": {

456 "mcpServers": {

457 "stripe": {

458 "type": "http",

459 "url": "https://mcp.stripe.com"

460 }

461 }

462 }

463 }

464}

465```

466 

467### Cakupan proyek

468 

469Server dengan cakupan proyek memungkinkan kolaborasi tim dengan menyimpan konfigurasi dalam file `.mcp.json` di direktori root proyek Anda. File ini dirancang untuk diperiksa ke dalam kontrol versi, memastikan semua anggota tim memiliki akses ke alat dan layanan MCP yang sama. Ketika Anda menambahkan server dengan cakupan proyek, Claude Code secara otomatis membuat atau memperbarui file ini dengan struktur konfigurasi yang sesuai.

470 

471```bash theme={null}

472# Tambahkan server dengan cakupan proyek

473claude mcp add --transport http paypal --scope project https://mcp.paypal.com/mcp

474```

475 

476File `.mcp.json` yang dihasilkan mengikuti format standar:

477 

478```json theme={null}

479{

480 "mcpServers": {

481 "shared-server": {

482 "command": "/path/to/server",

483 "args": [],

484 "env": {}

485 }

486 }

487}

488```

489 

490Untuk alasan keamanan, Claude Code meminta persetujuan sebelum menggunakan server dengan cakupan proyek dari file `.mcp.json`. Jika Anda perlu mengatur ulang pilihan persetujuan ini, gunakan perintah `claude mcp reset-project-choices`.

491 

492### Cakupan pengguna

493 

494Server dengan cakupan pengguna disimpan dalam `~/.claude.json` dan menyediakan aksesibilitas lintas proyek, menjadikannya tersedia di semua proyek di mesin Anda sambil tetap pribadi untuk akun pengguna Anda. Cakupan ini bekerja dengan baik untuk server utilitas pribadi, alat pengembangan, atau layanan yang sering Anda gunakan di berbagai proyek.

495 

496```bash theme={null}

497# Tambahkan server pengguna

498claude mcp add --transport http hubspot --scope user https://mcp.hubspot.com/anthropic

499```

500 

501### Hierarki cakupan dan prioritas

502 

503Ketika server yang sama ditentukan di lebih dari satu tempat, Claude Code terhubung ke server tersebut sekali, menggunakan definisi dari sumber dengan prioritas tertinggi:

504 

5051. Cakupan lokal

5062. Cakupan proyek

5073. Cakupan pengguna

5084. [Server yang disediakan plugin](/id/plugins)

5095. [Konektor claude.ai](#use-mcp-servers-from-claude-ai)

510 

511Tiga cakupan mencocokkan duplikat berdasarkan nama. Plugin dan konektor mencocokkan berdasarkan endpoint, jadi yang menunjuk ke URL atau perintah yang sama dengan server di atas diperlakukan sebagai duplikat.

512 

513### Ekspansi variabel lingkungan dalam `.mcp.json`

514 

515Claude Code mendukung ekspansi variabel lingkungan dalam file `.mcp.json`, memungkinkan tim untuk berbagi konfigurasi sambil mempertahankan fleksibilitas untuk jalur spesifik mesin dan nilai sensitif seperti kunci API.

516 

517**Sintaks yang didukung:**

518 

519* `${VAR}` - Berkembang menjadi nilai variabel lingkungan `VAR`

520* `${VAR:-default}` - Berkembang menjadi `VAR` jika diatur, jika tidak menggunakan `default`

521 

522**Lokasi ekspansi:**

523Variabel lingkungan dapat berkembang dalam:

524 

525* `command` - Jalur executable server

526* `args` - Argumen baris perintah

527* `env` - Variabel lingkungan yang diteruskan ke server

528* `url` - Untuk jenis server HTTP

529* `headers` - Untuk autentikasi server HTTP

530 

531**Contoh dengan ekspansi variabel:**

532 

533```json theme={null}

534{

535 "mcpServers": {

536 "api-server": {

537 "type": "http",

538 "url": "${API_BASE_URL:-https://api.example.com}/mcp",

539 "headers": {

540 "Authorization": "Bearer ${API_KEY}"

541 }

542 }

543 }

544}

545```

546 

547Jika variabel lingkungan yang diperlukan tidak diatur dan tidak memiliki nilai default, Claude Code akan gagal mengurai konfigurasi.

548 

549## Contoh praktis

550 

551{/* ### Contoh: Otomatisasi pengujian browser dengan Playwright

552 

553```bash

554claude mcp add --transport stdio playwright -- npx -y @playwright/mcp@latest

555```

556 

557Kemudian tulis dan jalankan tes browser:

558 

559```text

560Test if the login flow works with test@example.com

561```

562```text

563Take a screenshot of the checkout page on mobile

564```

565```text

566Verify that the search feature returns results

567``` */}

568 

569### Contoh: Pantau kesalahan dengan Sentry

570 

571```bash theme={null}

572claude mcp add --transport http sentry https://mcp.sentry.dev/mcp

573```

574 

575Autentikasi dengan akun Sentry Anda:

576 

577```text theme={null}

578/mcp

579```

580 

581Kemudian debug masalah produksi:

582 

583```text theme={null}

584What are the most common errors in the last 24 hours?

585```

586 

587```text theme={null}

588Show me the stack trace for error ID abc123

589```

590 

591```text theme={null}

592Which deployment introduced these new errors?

593```

594 

595### Contoh: Hubungkan ke GitHub untuk tinjauan kode

596 

597Token akses pribadi GitHub MCP server jarak jauh diautentikasi dengan token akses pribadi GitHub yang diteruskan sebagai header. Untuk mendapatkan satu, buka [pengaturan token GitHub Anda](https://github.com/settings/personal-access-tokens), hasilkan token baru yang bagus dengan akses ke repositori yang ingin Claude kerjakan, kemudian tambahkan server:

598 

599```bash theme={null}

600claude mcp add --transport http github https://api.githubcopilot.com/mcp/ \

601 --header "Authorization: Bearer YOUR_GITHUB_PAT"

602```

603 

604Kemudian bekerja dengan GitHub:

605 

606```text theme={null}

607Review PR #456 and suggest improvements

608```

609 

610```text theme={null}

611Create a new issue for the bug we just found

612```

613 

614```text theme={null}

615Show me all open PRs assigned to me

616```

617 

618### Contoh: Tanyakan database PostgreSQL Anda

619 

620```bash theme={null}

621claude mcp add --transport stdio db -- npx -y @bytebase/dbhub \

622 --dsn "postgresql://readonly:pass@prod.db.com:5432/analytics"

623```

624 

625Kemudian tanyakan database Anda secara alami:

626 

627```text theme={null}

628What's our total revenue this month?

629```

630 

631```text theme={null}

632Show me the schema for the orders table

633```

634 

635```text theme={null}

636Find customers who haven't made a purchase in 90 days

637```

638 

639## Autentikasi dengan server MCP jarak jauh

640 

641Banyak server MCP berbasis cloud memerlukan autentikasi. Claude Code mendukung OAuth 2.0 untuk koneksi yang aman.

642 

643<Steps>

644 <Step title="Tambahkan server yang memerlukan autentikasi">

645 Sebagai contoh:

646 

647 ```bash theme={null}

648 claude mcp add --transport http sentry https://mcp.sentry.dev/mcp

649 ```

650 </Step>

651 

652 <Step title="Gunakan perintah /mcp dalam Claude Code">

653 Dalam Claude Code, gunakan perintah:

654 

655 ```text theme={null}

656 /mcp

657 ```

658 

659 Kemudian ikuti langkah-langkah di browser Anda untuk login.

660 </Step>

661</Steps>

662 

663<Tip>

664 Tips:

665 

666 * Token autentikasi disimpan dengan aman dan disegarkan secara otomatis

667 * Gunakan "Clear authentication" dalam menu `/mcp` untuk mencabut akses

668 * Jika browser Anda tidak terbuka secara otomatis, salin URL yang disediakan dan buka secara manual

669 * Jika pengalihan browser gagal dengan kesalahan koneksi setelah autentikasi, tempel URL callback lengkap dari bilah alamat browser Anda ke prompt URL yang muncul di Claude Code

670 * Autentikasi OAuth bekerja dengan server HTTP

671</Tip>

672 

673### Gunakan port callback OAuth tetap

674 

675Beberapa server MCP memerlukan URI pengalihan tertentu yang terdaftar sebelumnya. Secara default, Claude Code memilih port acak yang tersedia untuk callback OAuth. Gunakan `--callback-port` untuk memperbaiki port sehingga cocok dengan URI pengalihan yang telah terdaftar sebelumnya dalam bentuk `http://localhost:PORT/callback`.

676 

677Anda dapat menggunakan `--callback-port` sendiri (dengan pendaftaran klien dinamis) atau bersama dengan `--client-id` (dengan kredensial yang telah dikonfigurasi sebelumnya).

678 

679```bash theme={null}

680# Port callback tetap dengan pendaftaran klien dinamis

681claude mcp add --transport http \

682 --callback-port 8080 \

683 my-server https://mcp.example.com/mcp

684```

685 

686### Gunakan kredensial OAuth yang telah dikonfigurasi sebelumnya

687 

688Beberapa server MCP tidak mendukung pengaturan OAuth otomatis melalui Dynamic Client Registration. Jika Anda melihat kesalahan seperti "Incompatible auth server: does not support dynamic client registration," server memerlukan kredensial yang telah dikonfigurasi sebelumnya. Claude Code juga mendukung server yang menggunakan Client ID Metadata Document (CIMD) alih-alih Dynamic Client Registration, dan menemukan ini secara otomatis. Jika penemuan otomatis gagal, daftarkan aplikasi OAuth melalui portal pengembang server terlebih dahulu, kemudian berikan kredensial saat menambahkan server.

689 

690<Steps>

691 <Step title="Daftarkan aplikasi OAuth dengan server">

692 Buat aplikasi melalui portal pengembang server dan catat ID klien dan rahasia klien Anda.

693 

694 Banyak server juga memerlukan URI pengalihan. Jika demikian, pilih port dan daftarkan URI pengalihan dalam format `http://localhost:PORT/callback`. Gunakan port yang sama dengan `--callback-port` di langkah berikutnya.

695 </Step>

696 

697 <Step title="Tambahkan server dengan kredensial Anda">

698 Pilih salah satu metode berikut. Port yang digunakan untuk `--callback-port` dapat berupa port apa pun yang tersedia. Itu hanya perlu cocok dengan URI pengalihan yang Anda daftarkan di langkah sebelumnya.

699 

700 <Tabs>

701 <Tab title="claude mcp add">

702 Gunakan `--client-id` untuk meneruskan ID klien aplikasi Anda. Flag `--client-secret` meminta rahasia dengan input yang disembunyikan:

703 

704 ```bash theme={null}

705 claude mcp add --transport http \

706 --client-id your-client-id --client-secret --callback-port 8080 \

707 my-server https://mcp.example.com/mcp

708 ```

709 </Tab>

710 

711 <Tab title="claude mcp add-json">

712 Sertakan objek `oauth` dalam konfigurasi JSON dan teruskan `--client-secret` sebagai flag terpisah:

713 

714 ```bash theme={null}

715 claude mcp add-json my-server \

716 '{"type":"http","url":"https://mcp.example.com/mcp","oauth":{"clientId":"your-client-id","callbackPort":8080}}' \

717 --client-secret

718 ```

719 </Tab>

720 

721 <Tab title="claude mcp add-json (callback port only)">

722 Gunakan `--callback-port` tanpa ID klien untuk memperbaiki port sambil menggunakan pendaftaran klien dinamis:

723 

724 ```bash theme={null}

725 claude mcp add-json my-server \

726 '{"type":"http","url":"https://mcp.example.com/mcp","oauth":{"callbackPort":8080}}'

727 ```

728 </Tab>

729 

730 <Tab title="CI / env var">

731 Atur rahasia melalui variabel lingkungan untuk melewati prompt interaktif:

732 

733 ```bash theme={null}

734 MCP_CLIENT_SECRET=your-secret claude mcp add --transport http \

735 --client-id your-client-id --client-secret --callback-port 8080 \

736 my-server https://mcp.example.com/mcp

737 ```

738 </Tab>

739 </Tabs>

740 </Step>

741 

742 <Step title="Autentikasi di Claude Code">

743 Jalankan `/mcp` di Claude Code dan ikuti alur login browser.

744 </Step>

745</Steps>

746 

747<Tip>

748 Tips:

749 

750 * Rahasia klien disimpan dengan aman di keychain sistem Anda (macOS) atau file kredensial, bukan di konfigurasi Anda

751 * Jika server menggunakan klien OAuth publik tanpa rahasia, gunakan hanya `--client-id` tanpa `--client-secret`

752 * `--callback-port` dapat digunakan dengan atau tanpa `--client-id`

753 * Flag ini hanya berlaku untuk transport HTTP dan SSE. Mereka tidak berpengaruh pada server stdio

754 * Gunakan `claude mcp get <name>` untuk memverifikasi bahwa kredensial OAuth dikonfigurasi untuk server

755</Tip>

756 

757### Ganti penemuan metadata OAuth

758 

759Arahkan Claude Code ke URL metadata otorisasi OAuth tertentu untuk melewati rantai penemuan default. Atur `authServerMetadataUrl` ketika endpoint standar server MCP mengembalikan kesalahan, atau ketika Anda ingin merutekan penemuan melalui proxy internal. Secara default, Claude Code pertama kali memeriksa Protected Resource Metadata RFC 9728 di `/.well-known/oauth-protected-resource`, kemudian kembali ke metadata server otorisasi RFC 8414 di `/.well-known/oauth-authorization-server`.

760 

761Atur `authServerMetadataUrl` dalam objek `oauth` dari konfigurasi server Anda di `.mcp.json`:

762 

763```json theme={null}

764{

765 "mcpServers": {

766 "my-server": {

767 "type": "http",

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

769 "oauth": {

770 "authServerMetadataUrl": "https://auth.example.com/.well-known/openid-configuration"

771 }

772 }

773 }

774}

775```

776 

777URL harus menggunakan `https://`. `authServerMetadataUrl` memerlukan Claude Code v2.1.64 atau lebih baru. `scopes_supported` dari URL metadata mengganti cakupan yang diiklankan server upstream.

778 

779### Batasi cakupan OAuth

780 

781Atur `oauth.scopes` untuk menyematkan cakupan yang diminta Claude Code selama alur otorisasi. Ini adalah cara yang didukung untuk membatasi server MCP ke subset yang disetujui tim keamanan ketika server otorisasi upstream mengiklankan lebih banyak cakupan daripada yang ingin Anda berikan. Nilainya adalah string tunggal yang dipisahkan spasi, cocok dengan format parameter `scope` dalam RFC 6749 §3.3.

782 

783```json theme={null}

784{

785 "mcpServers": {

786 "slack": {

787 "type": "http",

788 "url": "https://mcp.slack.com/mcp",

789 "oauth": {

790 "scopes": "channels:read chat:write search:read"

791 }

792 }

793 }

794}

795```

796 

797`oauth.scopes` mengambil prioritas atas `authServerMetadataUrl` dan cakupan yang ditemukan server di `/.well-known`. Biarkan tidak diatur untuk membiarkan server MCP menentukan set cakupan yang diminta.

798 

799Jika server otorisasi mengiklankan `offline_access` dalam `scopes_supported`, Claude Code menambahkannya ke cakupan yang disematkan sehingga token akses dapat disegarkan tanpa login browser baru.

800 

801Jika server kemudian mengembalikan 403 `insufficient_scope` untuk panggilan alat, Claude Code melakukan autentikasi ulang dengan cakupan yang disematkan yang sama. Perluas `oauth.scopes` ketika alat yang Anda butuhkan memerlukan cakupan di luar pin.

802 

803### Gunakan header dinamis untuk autentikasi khusus

804 

805Jika server MCP Anda menggunakan skema autentikasi selain OAuth (seperti Kerberos, token berumur pendek, atau SSO internal), gunakan `headersHelper` untuk menghasilkan header permintaan pada waktu koneksi. Claude Code menjalankan perintah dan menggabungkan outputnya ke dalam header koneksi.

806 

807```json theme={null}

808{

809 "mcpServers": {

810 "internal-api": {

811 "type": "http",

812 "url": "https://mcp.internal.example.com",

813 "headersHelper": "/opt/bin/get-mcp-auth-headers.sh"

814 }

815 }

816}

817```

818 

819Perintah juga dapat inline:

820 

821```json theme={null}

822{

823 "mcpServers": {

824 "internal-api": {

825 "type": "http",

826 "url": "https://mcp.internal.example.com",

827 "headersHelper": "echo '{\"Authorization\": \"Bearer '\"$(get-token)\"'\"}'"

828 }

829 }

830}

831```

832 

833**Persyaratan:**

834 

835* Perintah harus menulis objek JSON dari pasangan kunci-nilai string ke stdout

836* Perintah berjalan dalam shell dengan waktu tunggu 10 detik

837* Header dinamis mengganti `headers` statis apa pun dengan nama yang sama

838 

839Helper berjalan segar pada setiap koneksi (pada startup sesi dan pada reconnect). Tidak ada caching, jadi skrip Anda bertanggung jawab untuk penggunaan kembali token apa pun.

840 

841Claude Code menetapkan variabel lingkungan ini saat menjalankan helper:

842 

843| Variabel | Nilai |

844| :---------------------------- | :-------------- |

845| `CLAUDE_CODE_MCP_SERVER_NAME` | nama server MCP |

846| `CLAUDE_CODE_MCP_SERVER_URL` | URL server MCP |

847 

848Gunakan ini untuk menulis satu skrip helper yang melayani beberapa server MCP.

849 

850<Note>

851 `headersHelper` mengeksekusi perintah shell arbitrer. Ketika ditentukan pada cakupan proyek atau lokal, itu hanya berjalan setelah Anda menerima dialog kepercayaan ruang kerja.

852</Note>

853 

854## Tambahkan server MCP dari konfigurasi JSON

855 

856Jika Anda memiliki konfigurasi JSON untuk server MCP, Anda dapat menambahkannya secara langsung:

857 

858<Steps>

859 <Step title="Tambahkan server MCP dari JSON">

860 ```bash theme={null}

861 # Sintaks dasar

862 claude mcp add-json <name> '<json>'

863 

864 # Contoh: Menambahkan server HTTP dengan konfigurasi JSON

865 claude mcp add-json weather-api '{"type":"http","url":"https://api.weather.com/mcp","headers":{"Authorization":"Bearer token"}}'

866 

867 # Contoh: Menambahkan server stdio dengan konfigurasi JSON

868 claude mcp add-json local-weather '{"type":"stdio","command":"/path/to/weather-cli","args":["--api-key","abc123"],"env":{"CACHE_DIR":"/tmp"}}'

869 

870 # Contoh: Menambahkan server HTTP dengan kredensial OAuth yang telah dikonfigurasi sebelumnya

871 claude mcp add-json my-server '{"type":"http","url":"https://mcp.example.com/mcp","oauth":{"clientId":"your-client-id","callbackPort":8080}}' --client-secret

872 ```

873 </Step>

874 

875 <Step title="Verifikasi server ditambahkan">

876 ```bash theme={null}

877 claude mcp get weather-api

878 ```

879 </Step>

880</Steps>

881 

882<Tip>

883 Tips:

884 

885 * Pastikan JSON diloloskan dengan benar di shell Anda

886 * JSON harus sesuai dengan skema konfigurasi server MCP

887 * Anda dapat menggunakan `--scope user` untuk menambahkan server ke konfigurasi pengguna Anda alih-alih yang spesifik proyek

888</Tip>

889 

890## Impor server MCP dari Claude Desktop

891 

892Jika Anda telah mengonfigurasi server MCP di Claude Desktop, Anda dapat mengimpornya:

893 

894<Steps>

895 <Step title="Impor server dari Claude Desktop">

896 ```bash theme={null}

897 # Sintaks dasar

898 claude mcp add-from-claude-desktop

899 ```

900 </Step>

901 

902 <Step title="Pilih server mana yang akan diimpor">

903 Setelah menjalankan perintah, Anda akan melihat dialog interaktif yang memungkinkan Anda memilih server mana yang ingin Anda impor.

904 </Step>

905 

906 <Step title="Verifikasi server diimpor">

907 ```bash theme={null}

908 claude mcp list

909 ```

910 </Step>

911</Steps>

912 

913<Tip>

914 Tips:

915 

916 * Fitur ini hanya bekerja di macOS dan Windows Subsystem for Linux (WSL)

917 * Ini membaca file konfigurasi Claude Desktop dari lokasi standarnya di platform tersebut

918 * Gunakan flag `--scope user` untuk menambahkan server ke konfigurasi pengguna Anda

919 * Server yang diimpor akan memiliki nama yang sama seperti di Claude Desktop

920 * Jika server dengan nama yang sama sudah ada, mereka akan mendapatkan akhiran numerik (misalnya, `server_1`)

921</Tip>

922 

923## Gunakan server MCP dari Claude.ai

924 

925Jika Anda telah masuk ke Claude Code dengan akun [Claude.ai](https://claude.ai), server MCP yang telah Anda tambahkan di Claude.ai secara otomatis tersedia di Claude Code:

926 

927<Steps>

928 <Step title="Konfigurasi server MCP di Claude.ai">

929 Tambahkan server di [claude.ai/customize/connectors](https://claude.ai/customize/connectors). Pada paket Tim dan Enterprise, hanya admin yang dapat menambahkan server.

930 </Step>

931 

932 <Step title="Autentikasi server MCP">

933 Selesaikan langkah autentikasi yang diperlukan di Claude.ai.

934 </Step>

935 

936 <Step title="Lihat dan kelola server di Claude Code">

937 Di Claude Code, gunakan perintah:

938 

939 ```text theme={null}

940 /mcp

941 ```

942 

943 Server Claude.ai muncul dalam daftar dengan indikator yang menunjukkan mereka berasal dari Claude.ai.

944 </Step>

945</Steps>

946 

947Untuk menonaktifkan server MCP claude.ai di Claude Code, atur variabel lingkungan `ENABLE_CLAUDEAI_MCP_SERVERS` ke `false`:

948 

949```bash theme={null}

950ENABLE_CLAUDEAI_MCP_SERVERS=false claude

951```

952 

953## Gunakan Claude Code sebagai server MCP

954 

955Anda dapat menggunakan Claude Code itu sendiri sebagai server MCP yang dapat terhubung oleh aplikasi lain:

956 

957```bash theme={null}

958# Mulai Claude sebagai server MCP stdio

959claude mcp serve

960```

961 

962Anda dapat menggunakan ini di Claude Desktop dengan menambahkan konfigurasi ini ke claude\_desktop\_config.json:

963 

964```json theme={null}

965{

966 "mcpServers": {

967 "claude-code": {

968 "type": "stdio",

969 "command": "claude",

970 "args": ["mcp", "serve"],

971 "env": {}

972 }

973 }

974}

975```

976 

977<Warning>

978 **Mengonfigurasi jalur executable**: Field `command` harus mereferensikan executable Claude Code. Jika perintah `claude` tidak ada di PATH sistem Anda, Anda perlu menentukan jalur lengkap ke executable.

979 

980 Untuk menemukan jalur lengkap:

981 

982 ```bash theme={null}

983 which claude

984 ```

985 

986 Kemudian gunakan jalur lengkap dalam konfigurasi Anda:

987 

988 ```json theme={null}

989 {

990 "mcpServers": {

991 "claude-code": {

992 "type": "stdio",

993 "command": "/full/path/to/claude",

994 "args": ["mcp", "serve"],

995 "env": {}

996 }

997 }

998 }

999 ```

1000 

1001 Tanpa jalur executable yang benar, Anda akan mengalami kesalahan seperti `spawn claude ENOENT`.

1002</Warning>

1003 

1004<Tip>

1005 Tips:

1006 

1007 * Server menyediakan akses ke alat Claude seperti View, Edit, LS, dll.

1008 * Di Claude Desktop, coba minta Claude untuk membaca file di direktori, membuat edit, dan lainnya.

1009 * Perhatikan bahwa server MCP ini hanya mengekspos alat Claude Code ke klien MCP Anda, jadi klien Anda sendiri bertanggung jawab untuk menerapkan konfirmasi pengguna untuk panggilan alat individual.

1010</Tip>

1011 

1012## Batas output MCP dan peringatan

1013 

1014Ketika alat MCP menghasilkan output besar, Claude Code membantu mengelola penggunaan token untuk mencegah membanjiri konteks percakapan Anda:

1015 

1016* **Ambang batas peringatan output**: Claude Code menampilkan peringatan ketika output alat MCP apa pun melebihi 10.000 token

1017* **Batas yang dapat dikonfigurasi**: Anda dapat menyesuaikan token output MCP maksimum yang diizinkan menggunakan variabel lingkungan `MAX_MCP_OUTPUT_TOKENS`

1018* **Batas default**: Maksimum default adalah 25.000 token

1019* **Cakupan**: Variabel lingkungan berlaku untuk alat yang tidak mendeklarasikan batas mereka sendiri. Alat yang menetapkan [`anthropic/maxResultSizeChars`](#raise-the-limit-for-a-specific-tool) menggunakan nilai itu sebagai gantinya untuk konten teks, terlepas dari apa yang `MAX_MCP_OUTPUT_TOKENS` diatur. Alat yang mengembalikan data gambar masih tunduk pada `MAX_MCP_OUTPUT_TOKENS`

1020 

1021Untuk meningkatkan batas untuk alat yang menghasilkan output besar:

1022 

1023```bash theme={null}

1024export MAX_MCP_OUTPUT_TOKENS=50000

1025claude

1026```

1027 

1028Ini sangat berguna saat bekerja dengan server MCP yang:

1029 

1030* Menanyakan dataset atau database besar

1031* Menghasilkan laporan atau dokumentasi terperinci

1032* Memproses file log atau informasi debugging yang luas

1033 

1034### Naikkan batas untuk alat tertentu

1035 

1036Jika Anda membangun server MCP, Anda dapat mengizinkan alat individual untuk mengembalikan hasil yang lebih besar dari ambang batas default dengan menetapkan `_meta["anthropic/maxResultSizeChars"]` dalam entri `tools/list` alat. Claude Code menaikkan ambang batas alat tersebut ke nilai yang dianotasi, hingga batas keras 500.000 karakter.

1037 

1038Ini berguna untuk alat yang mengembalikan output yang secara inheren besar tetapi diperlukan, seperti skema database atau pohon file lengkap. Tanpa anotasi, hasil yang melebihi ambang batas default disimpan ke disk dan diganti dengan referensi file dalam percakapan.

1039 

1040```json theme={null}

1041{

1042 "name": "get_schema",

1043 "description": "Returns the full database schema",

1044 "_meta": {

1045 "anthropic/maxResultSizeChars": 200000

1046 }

1047}

1048```

1049 

1050Anotasi berlaku secara independen dari `MAX_MCP_OUTPUT_TOKENS` untuk konten teks, jadi pengguna tidak perlu menaikkan variabel lingkungan untuk alat yang mendeklarasikannya. Alat yang mengembalikan data gambar masih tunduk pada batas token.

1051 

1052<Warning>

1053 Jika Anda sering mengalami peringatan output dengan server MCP tertentu yang tidak Anda kontrol, pertimbangkan untuk meningkatkan batas `MAX_MCP_OUTPUT_TOKENS`. Anda juga dapat meminta penulis server untuk menambahkan anotasi `anthropic/maxResultSizeChars` atau untuk membuat halaman respons mereka. Anotasi tidak berpengaruh pada alat yang mengembalikan konten gambar; untuk itu, menaikkan `MAX_MCP_OUTPUT_TOKENS` adalah satu-satunya opsi.

1054</Warning>

1055 

1056## Tanggapi permintaan elicitasi MCP

1057 

1058Server MCP dapat meminta input terstruktur dari Anda di tengah tugas menggunakan elicitasi. Ketika server memerlukan informasi yang tidak dapat diperolehnya sendiri, Claude Code menampilkan dialog interaktif dan meneruskan respons Anda kembali ke server. Tidak ada konfigurasi yang diperlukan di pihak Anda: dialog elicitasi muncul secara otomatis ketika server memintanya.

1059 

1060Server dapat meminta input dengan dua cara:

1061 

1062* **Mode formulir**: Claude Code menampilkan dialog dengan field formulir yang ditentukan oleh server (misalnya, prompt nama pengguna dan kata sandi). Isi field dan kirim.

1063* **Mode URL**: Claude Code membuka URL browser untuk autentikasi atau persetujuan. Selesaikan alur di browser, kemudian konfirmasi di CLI.

1064 

1065Untuk merespons otomatis permintaan elicitasi tanpa menampilkan dialog, gunakan [hook `Elicitation`](/id/hooks#elicitation).

1066 

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

1068 

1069## Gunakan sumber daya MCP

1070 

1071Server MCP dapat mengekspos sumber daya yang dapat Anda referensikan menggunakan penyebutan @, mirip dengan cara Anda mereferensikan file.

1072 

1073### Referensikan sumber daya MCP

1074 

1075<Steps>

1076 <Step title="Daftar sumber daya yang tersedia">

1077 Ketik `@` dalam prompt Anda untuk melihat sumber daya yang tersedia dari semua server MCP yang terhubung. Sumber daya muncul bersama file dalam menu pelengkapan otomatis.

1078 </Step>

1079 

1080 <Step title="Referensikan sumber daya tertentu">

1081 Gunakan format `@server:protocol://resource/path` untuk mereferensikan sumber daya:

1082 

1083 ```text theme={null}

1084 Can you analyze @github:issue://123 and suggest a fix?

1085 ```

1086 

1087 ```text theme={null}

1088 Please review the API documentation at @docs:file://api/authentication

1089 ```

1090 </Step>

1091 

1092 <Step title="Referensi sumber daya berganda">

1093 Anda dapat mereferensikan beberapa sumber daya dalam satu prompt:

1094 

1095 ```text theme={null}

1096 Compare @postgres:schema://users with @docs:file://database/user-model

1097 ```

1098 </Step>

1099</Steps>

1100 

1101<Tip>

1102 Tips:

1103 

1104 * Sumber daya secara otomatis diambil dan disertakan sebagai lampiran saat direferensikan

1105 * Jalur sumber daya dapat dicari fuzzy dalam pelengkapan otomatis penyebutan @

1106 * Claude Code secara otomatis menyediakan alat untuk membuat daftar dan membaca sumber daya MCP ketika server mendukungnya

1107 * Sumber daya dapat berisi jenis konten apa pun yang disediakan server MCP (teks, JSON, data terstruktur, dll.)

1108</Tip>

1109 

1110## Skala dengan Pencarian Alat MCP

1111 

1112Pencarian Alat menjaga penggunaan konteks MCP tetap rendah dengan menunda definisi alat sampai Claude membutuhkannya. Hanya nama alat yang dimuat saat startup sesi, jadi menambahkan lebih banyak server MCP memiliki dampak minimal pada jendela konteks Anda.

1113 

1114### Cara kerjanya

1115 

1116Pencarian Alat diaktifkan secara default. Alat MCP ditangguhkan daripada dimuat ke konteks sebelumnya, dan Claude menggunakan alat pencarian untuk menemukan yang relevan saat tugas membutuhkannya. Hanya alat yang benar-benar digunakan Claude yang memasuki konteks. Dari perspektif Anda, alat MCP bekerja persis seperti sebelumnya.

1117 

1118Jika Anda lebih suka pemuatan berbasis ambang batas, atur `ENABLE_TOOL_SEARCH=auto` untuk memuat skema sebelumnya ketika mereka cocok dalam 10% jendela konteks dan hanya menunda overflow. Lihat [Konfigurasi pencarian alat](#configure-tool-search) untuk semua opsi.

1119 

1120### Untuk penulis server MCP

1121 

1122Jika Anda membangun server MCP, field instruksi server menjadi lebih berguna dengan Pencarian Alat yang diaktifkan. Instruksi server membantu Claude memahami kapan harus mencari alat Anda, mirip dengan cara [skills](/id/skills) bekerja.

1123 

1124Tambahkan instruksi server yang jelas dan deskriptif yang menjelaskan:

1125 

1126* Kategori tugas apa yang ditangani alat Anda

1127* Kapan Claude harus mencari alat Anda

1128* Kemampuan utama yang disediakan server Anda

1129 

1130Claude Code memotong deskripsi alat dan instruksi server pada 2KB masing-masing. Jaga agar ringkas untuk menghindari pemotongan, dan letakkan detail penting di dekat awal.

1131 

1132### Konfigurasi pencarian alat

1133 

1134Pencarian alat diaktifkan secara default: alat MCP ditangguhkan dan ditemukan sesuai permintaan. Pencarian alat dinonaktifkan secara default di Vertex AI, yang tidak menerima header beta pencarian alat, dan ketika `ANTHROPIC_BASE_URL` menunjuk ke host non-pihak pertama, karena sebagian besar proxy tidak meneruskan blok `tool_reference`. Atur `ENABLE_TOOL_SEARCH` secara eksplisit untuk memilih. Fitur ini memerlukan model yang mendukung blok `tool_reference`: Sonnet 4 dan lebih baru, atau Opus 4 dan lebih baru. Model Haiku tidak mendukung pencarian alat.

1135 

1136Kontrol perilaku pencarian alat dengan variabel lingkungan `ENABLE_TOOL_SEARCH`:

1137 

1138| Nilai | Perilaku |

1139| :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1140| (tidak diatur) | Semua alat MCP ditangguhkan dan dimuat sesuai permintaan. Kembali ke pemuatan sebelumnya di Vertex AI atau ketika `ANTHROPIC_BASE_URL` adalah host non-pihak pertama |

1141| `true` | Semua alat MCP ditangguhkan, termasuk di Vertex AI dan untuk `ANTHROPIC_BASE_URL` non-pihak pertama |

1142| `auto` | Mode ambang batas: alat dimuat sebelumnya jika cocok dalam 10% jendela konteks, ditangguhkan sebaliknya |

1143| `auto:<N>` | Mode ambang batas dengan persentase khusus, di mana `<N>` adalah 0-100 (misalnya, `auto:5` untuk 5%) |

1144| `false` | Semua alat MCP dimuat sebelumnya, tidak ada penundaan |

1145 

1146```bash theme={null}

1147# Gunakan ambang batas khusus 5%

1148ENABLE_TOOL_SEARCH=auto:5 claude

1149 

1150# Nonaktifkan pencarian alat sepenuhnya

1151ENABLE_TOOL_SEARCH=false claude

1152```

1153 

1154Atau atur nilai dalam [field `env` settings.json](/id/settings#available-settings) Anda.

1155 

1156Anda juga dapat menonaktifkan alat ToolSearch secara khusus:

1157 

1158```json theme={null}

1159{

1160 "permissions": {

1161 "deny": ["ToolSearch"]

1162 }

1163}

1164```

1165 

1166### Keluarkan server dari penundaan

1167 

1168Jika alat server harus selalu terlihat oleh Claude tanpa langkah pencarian, atur `alwaysLoad` ke `true` dalam konfigurasi server tersebut. Setiap alat dari server tersebut kemudian dimuat ke konteks saat startup sesi terlepas dari pengaturan `ENABLE_TOOL_SEARCH`. Gunakan ini untuk sejumlah kecil alat yang Claude butuhkan di setiap putaran, karena setiap alat sebelumnya mengonsumsi konteks yang sebaliknya akan tersedia untuk percakapan Anda.

1169 

1170Entri `.mcp.json` berikut mengecualikan satu server HTTP sambil membiarkan server lain ditangguhkan:

1171 

1172```json theme={null}

1173{

1174 "mcpServers": {

1175 "core-tools": {

1176 "type": "http",

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

1178 "alwaysLoad": true

1179 }

1180 }

1181}

1182```

1183 

1184Field `alwaysLoad` tersedia di semua jenis server dan memerlukan Claude Code v2.1.121 atau lebih baru. Server MCP juga dapat menandai alat individual sebagai selalu-dimuat dengan menyertakan `"anthropic/alwaysLoad": true` dalam objek `_meta` alat, yang memiliki efek yang sama hanya untuk alat tersebut.

1185 

1186## Gunakan prompt MCP sebagai perintah

1187 

1188Server MCP dapat mengekspos prompt yang menjadi tersedia sebagai perintah di Claude Code.

1189 

1190### Jalankan prompt MCP

1191 

1192<Steps>

1193 <Step title="Temukan prompt yang tersedia">

1194 Ketik `/` untuk melihat semua perintah yang tersedia, termasuk yang dari server MCP. Prompt MCP muncul dengan format `/mcp__servername__promptname`.

1195 </Step>

1196 

1197 <Step title="Jalankan prompt tanpa argumen">

1198 ```text theme={null}

1199 /mcp__github__list_prs

1200 ```

1201 </Step>

1202 

1203 <Step title="Jalankan prompt dengan argumen">

1204 Banyak prompt menerima argumen. Teruskan mereka dipisahkan spasi setelah perintah:

1205 

1206 ```text theme={null}

1207 /mcp__github__pr_review 456

1208 ```

1209 

1210 ```text theme={null}

1211 /mcp__jira__create_issue "Bug in login flow" high

1212 ```

1213 </Step>

1214</Steps>

1215 

1216<Tip>

1217 Tips:

1218 

1219 * Prompt MCP ditemukan secara dinamis dari server yang terhubung

1220 * Argumen diurai berdasarkan parameter yang ditentukan prompt

1221 * Hasil prompt disuntikkan langsung ke dalam percakapan

1222 * Nama server dan prompt dinormalisasi (spasi menjadi garis bawah)

1223</Tip>

1224 

1225## Konfigurasi MCP yang dikelola

1226 

1227Untuk organisasi yang memerlukan kontrol terpusat atas server MCP, Claude Code mendukung dua opsi konfigurasi:

1228 

12291. **Kontrol eksklusif dengan `managed-mcp.json`**: Terapkan set server MCP tetap yang tidak dapat dimodifikasi atau diperluas pengguna

12302. **Kontrol berbasis kebijakan dengan daftar putih/daftar hitam**: Izinkan pengguna menambahkan server mereka sendiri, tetapi batasi server mana yang diizinkan

1231 

1232Opsi ini memungkinkan administrator IT untuk:

1233 

1234* **Kontrol server MCP mana yang dapat diakses karyawan**: Terapkan set server MCP yang disetujui secara standar di seluruh organisasi

1235* **Cegah server MCP yang tidak sah**: Batasi pengguna dari menambahkan server MCP yang tidak disetujui

1236* **Nonaktifkan MCP sepenuhnya**: Hapus fungsionalitas MCP sepenuhnya jika diperlukan

1237 

1238### Opsi 1: Kontrol eksklusif dengan managed-mcp.json

1239 

1240Ketika Anda menerapkan file `managed-mcp.json`, file tersebut mengambil **kontrol eksklusif** atas semua server MCP. Pengguna tidak dapat menambahkan, memodifikasi, atau menggunakan server MCP apa pun selain yang ditentukan dalam file ini. Ini adalah pendekatan paling sederhana untuk organisasi yang menginginkan kontrol penuh.

1241 

1242Administrator sistem menerapkan file konfigurasi ke direktori sistem:

1243 

1244* macOS: `/Library/Application Support/ClaudeCode/managed-mcp.json`

1245* Linux dan WSL: `/etc/claude-code/managed-mcp.json`

1246* Windows: `C:\Program Files\ClaudeCode\managed-mcp.json`

1247 

1248<Note>

1249 Ini adalah jalur sistem (bukan direktori home pengguna seperti `~/Library/...`) yang memerlukan hak istimewa administrator. Mereka dirancang untuk diterapkan oleh administrator IT.

1250</Note>

1251 

1252File `managed-mcp.json` menggunakan format yang sama seperti file `.mcp.json` standar:

1253 

1254```json theme={null}

1255{

1256 "mcpServers": {

1257 "github": {

1258 "type": "http",

1259 "url": "https://api.githubcopilot.com/mcp/"

1260 },

1261 "sentry": {

1262 "type": "http",

1263 "url": "https://mcp.sentry.dev/mcp"

1264 },

1265 "company-internal": {

1266 "type": "stdio",

1267 "command": "/usr/local/bin/company-mcp-server",

1268 "args": ["--config", "/etc/company/mcp-config.json"],

1269 "env": {

1270 "COMPANY_API_URL": "https://internal.company.com"

1271 }

1272 }

1273 }

1274}

1275```

1276 

1277### Opsi 2: Kontrol berbasis kebijakan dengan daftar putih dan daftar hitam

1278 

1279Alih-alih mengambil kontrol eksklusif, administrator dapat mengizinkan pengguna mengonfigurasi server MCP mereka sendiri sambil memberlakukan pembatasan pada server mana yang diizinkan. Pendekatan ini menggunakan `allowedMcpServers` dan `deniedMcpServers` dalam [file pengaturan yang dikelola](/id/settings#settings-files).

1280 

1281<Note>

1282 **Memilih antara opsi**: Gunakan Opsi 1 (`managed-mcp.json`) ketika Anda ingin menerapkan set server tetap tanpa kustomisasi pengguna. Gunakan Opsi 2 (daftar putih/daftar hitam) ketika Anda ingin mengizinkan pengguna menambahkan server mereka sendiri dalam batasan kebijakan.

1283</Note>

1284 

1285#### Opsi pembatasan

1286 

1287Setiap entri dalam daftar putih atau daftar hitam dapat membatasi server dengan tiga cara:

1288 

12891. **Berdasarkan nama server** (`serverName`): Cocok dengan nama server yang dikonfigurasi

12902. **Berdasarkan perintah** (`serverCommand`): Cocok dengan perintah dan argumen yang tepat yang digunakan untuk memulai server stdio

12913. **Berdasarkan pola URL** (`serverUrl`): Cocok dengan URL server jarak jauh dengan dukungan wildcard

1292 

1293**Penting**: Setiap entri harus memiliki tepat satu dari `serverName`, `serverCommand`, atau `serverUrl`.

1294 

1295#### Contoh konfigurasi

1296 

1297```json theme={null}

1298{

1299 "allowedMcpServers": [

1300 // Izinkan berdasarkan nama server

1301 { "serverName": "github" },

1302 { "serverName": "sentry" },

1303 

1304 // Izinkan berdasarkan perintah yang tepat (untuk server stdio)

1305 { "serverCommand": ["npx", "-y", "@modelcontextprotocol/server-filesystem"] },

1306 { "serverCommand": ["python", "/usr/local/bin/approved-server.py"] },

1307 

1308 // Izinkan berdasarkan pola URL (untuk server jarak jauh)

1309 { "serverUrl": "https://mcp.company.com/*" },

1310 { "serverUrl": "https://*.internal.corp/*" }

1311 ],

1312 "deniedMcpServers": [

1313 // Blokir berdasarkan nama server

1314 { "serverName": "dangerous-server" },

1315 

1316 // Blokir berdasarkan perintah yang tepat (untuk server stdio)

1317 { "serverCommand": ["npx", "-y", "unapproved-package"] },

1318 

1319 // Blokir berdasarkan pola URL (untuk server jarak jauh)

1320 { "serverUrl": "https://*.untrusted.com/*" }

1321 ]

1322}

1323```

1324 

1325#### Cara kerja pembatasan berbasis perintah

1326 

1327**Pencocokan yang tepat**:

1328 

1329* Array perintah harus cocok **persis** - baik perintah maupun semua argumen dalam urutan yang benar

1330* Contoh: `["npx", "-y", "server"]` akan TIDAK cocok dengan `["npx", "server"]` atau `["npx", "-y", "server", "--flag"]`

1331 

1332**Perilaku server stdio**:

1333 

1334* Ketika daftar putih berisi **entri** `serverCommand` apa pun, server stdio **harus** cocok dengan salah satu perintah tersebut

1335* Server stdio tidak dapat lulus berdasarkan nama saja ketika pembatasan perintah ada

1336* Ini memastikan administrator dapat memberlakukan perintah mana yang diizinkan untuk dijalankan

1337 

1338**Perilaku server non-stdio**:

1339 

1340* Server jarak jauh (HTTP, SSE, WebSocket) menggunakan pencocokan berbasis URL ketika entri `serverUrl` ada dalam daftar putih

1341* Jika tidak ada entri URL, server jarak jauh kembali ke pencocokan berbasis nama

1342* Pembatasan perintah tidak berlaku untuk server jarak jauh

1343 

1344#### Cara kerja pembatasan berbasis URL

1345 

1346Pola URL mendukung wildcard menggunakan `*` untuk mencocokkan urutan karakter apa pun. Ini berguna untuk mengizinkan seluruh domain atau subdomain.

1347 

1348**Contoh wildcard**:

1349 

1350* `https://mcp.company.com/*` - Izinkan semua jalur di domain tertentu

1351* `https://*.example.com/*` - Izinkan subdomain apa pun dari example.com

1352* `http://localhost:*/*` - Izinkan port apa pun di localhost

1353 

1354**Perilaku server jarak jauh**:

1355 

1356* Ketika daftar putih berisi **entri** `serverUrl` apa pun, server jarak jauh **harus** cocok dengan salah satu pola URL tersebut

1357* Server jarak jauh tidak dapat lulus berdasarkan nama saja ketika pembatasan URL ada

1358* Ini memastikan administrator dapat memberlakukan endpoint jarak jauh mana yang diizinkan

1359 

1360<Accordion title="Contoh: Daftar putih hanya URL">

1361 ```json theme={null}

1362 {

1363 "allowedMcpServers": [

1364 { "serverUrl": "https://mcp.company.com/*" },

1365 { "serverUrl": "https://*.internal.corp/*" }

1366 ]

1367 }

1368 ```

1369 

1370 **Hasil**:

1371 

1372 * Server HTTP di `https://mcp.company.com/api`: ✅ Diizinkan (cocok dengan pola URL)

1373 * Server HTTP di `https://api.internal.corp/mcp`: ✅ Diizinkan (cocok dengan wildcard subdomain)

1374 * Server HTTP di `https://external.com/mcp`: ❌ Diblokir (tidak cocok dengan pola URL apa pun)

1375 * Server stdio dengan perintah apa pun: ❌ Diblokir (tidak ada entri nama atau perintah untuk dicocokkan)

1376</Accordion>

1377 

1378<Accordion title="Contoh: Daftar putih hanya perintah">

1379 ```json theme={null}

1380 {

1381 "allowedMcpServers": [

1382 { "serverCommand": ["npx", "-y", "approved-package"] }

1383 ]

1384 }

1385 ```

1386 

1387 **Hasil**:

1388 

1389 * Server stdio dengan `["npx", "-y", "approved-package"]`: ✅ Diizinkan (cocok dengan perintah)

1390 * Server stdio dengan `["node", "server.js"]`: ❌ Diblokir (tidak cocok dengan perintah)

1391 * Server HTTP bernama "my-api": ❌ Diblokir (tidak ada entri nama untuk dicocokkan)

1392</Accordion>

1393 

1394<Accordion title="Contoh: Daftar putih nama dan perintah campuran">

1395 ```json theme={null}

1396 {

1397 "allowedMcpServers": [

1398 { "serverName": "github" },

1399 { "serverCommand": ["npx", "-y", "approved-package"] }

1400 ]

1401 }

1402 ```

1403 

1404 **Hasil**:

1405 

1406 * Server stdio bernama "local-tool" dengan `["npx", "-y", "approved-package"]`: ✅ Diizinkan (cocok dengan perintah)

1407 * Server stdio bernama "local-tool" dengan `["node", "server.js"]`: ❌ Diblokir (entri perintah ada tetapi tidak cocok)

1408 * Server stdio bernama "github" dengan `["node", "server.js"]`: ❌ Diblokir (server stdio harus cocok dengan perintah ketika entri perintah ada)

1409 * Server HTTP bernama "github": ✅ Diizinkan (cocok dengan nama)

1410 * Server HTTP bernama "other-api": ❌ Diblokir (nama tidak cocok)

1411</Accordion>

1412 

1413<Accordion title="Contoh: Daftar putih hanya nama">

1414 ```json theme={null}

1415 {

1416 "allowedMcpServers": [

1417 { "serverName": "github" },

1418 { "serverName": "internal-tool" }

1419 ]

1420 }

1421 ```

1422 

1423 **Hasil**:

1424 

1425 * Server stdio bernama "github" dengan perintah apa pun: ✅ Diizinkan (tidak ada pembatasan perintah)

1426 * Server stdio bernama "internal-tool" dengan perintah apa pun: ✅ Diizinkan (tidak ada pembatasan perintah)

1427 * Server HTTP bernama "github": ✅ Diizinkan (cocok dengan nama)

1428 * Server apa pun bernama "other": ❌ Diblokir (nama tidak cocok)

1429</Accordion>

1430 

1431#### Perilaku daftar putih (`allowedMcpServers`)

1432 

1433* `undefined` (default): Tidak ada pembatasan - pengguna dapat mengonfigurasi server MCP apa pun

1434* Array kosong `[]`: Penguncian lengkap - pengguna tidak dapat mengonfigurasi server MCP apa pun

1435* Daftar entri: Pengguna hanya dapat mengonfigurasi server yang cocok berdasarkan nama, perintah, atau pola URL

1436 

1437#### Perilaku daftar hitam (`deniedMcpServers`)

1438 

1439* `undefined` (default): Tidak ada server yang diblokir

1440* Array kosong `[]`: Tidak ada server yang diblokir

1441* Daftar entri: Server yang ditentukan secara eksplisit diblokir di semua cakupan

1442 

1443#### Catatan penting

1444 

1445* **Opsi 1 dan Opsi 2 dapat digabungkan**: Jika `managed-mcp.json` ada, file tersebut memiliki kontrol eksklusif dan pengguna tidak dapat menambahkan server. Daftar putih/daftar hitam masih berlaku untuk server yang dikelola itu sendiri.

1446* **Daftar hitam mengambil prioritas absolut**: Jika server cocok dengan entri daftar hitam (berdasarkan nama, perintah, atau URL), server akan diblokir bahkan jika ada di daftar putih

1447* Pembatasan berbasis nama, berbasis perintah, dan berbasis URL bekerja bersama: server lulus jika cocok dengan **entri** nama, entri perintah, atau pola URL (kecuali diblokir oleh daftar hitam)

1448 

1449<Note>

1450 **Saat menggunakan `managed-mcp.json`**: Pengguna tidak dapat menambahkan server MCP melalui `claude mcp add` atau file konfigurasi. Pengaturan `allowedMcpServers` dan `deniedMcpServers` masih berlaku untuk memfilter server yang dikelola mana yang benar-benar dimuat.

1451</Note>

memory.md +408 −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# Bagaimana Claude mengingat proyek Anda

6 

7> Berikan Claude instruksi persisten dengan file CLAUDE.md, dan biarkan Claude mengumpulkan pembelajaran secara otomatis dengan auto memory.

8 

9Setiap sesi Claude Code dimulai dengan context window yang segar. Dua mekanisme membawa pengetahuan lintas sesi:

10 

11* **File CLAUDE.md**: instruksi yang Anda tulis untuk memberikan Claude konteks persisten

12* **Auto memory**: catatan yang Claude tulis sendiri berdasarkan koreksi dan preferensi Anda

13 

14Halaman ini mencakup cara untuk:

15 

16* [Menulis dan mengorganisir file CLAUDE.md](#claude-md-files)

17* [Membatasi aturan ke tipe file tertentu](#organize-rules-with-claude/rules/) dengan `.claude/rules/`

18* [Mengonfigurasi auto memory](#auto-memory) agar Claude membuat catatan secara otomatis

19* [Troubleshoot](#troubleshoot-memory-issues) ketika instruksi tidak diikuti

20 

21## CLAUDE.md vs auto memory

22 

23Claude Code memiliki dua sistem memori yang saling melengkapi. Keduanya dimuat di awal setiap percakapan. Claude memperlakukan mereka sebagai konteks, bukan konfigurasi yang diberlakukan. Semakin spesifik dan ringkas instruksi Anda, semakin konsisten Claude mengikutinya.

24 

25| | File CLAUDE.md | Auto memory |

26| :------------------------ | :------------------------------------------------ | :---------------------------------------------------------------- |

27| **Siapa yang menulisnya** | Anda | Claude |

28| **Apa yang dikandungnya** | Instruksi dan aturan | Pembelajaran dan pola |

29| **Cakupan** | Proyek, pengguna, atau organisasi | Per working tree |

30| **Dimuat ke dalam** | Setiap sesi | Setiap sesi (200 baris pertama atau 25KB) |

31| **Gunakan untuk** | Standar pengkodean, alur kerja, arsitektur proyek | Perintah build, wawasan debugging, preferensi yang Claude temukan |

32 

33Gunakan file CLAUDE.md ketika Anda ingin memandu perilaku Claude. Auto memory memungkinkan Claude belajar dari koreksi Anda tanpa usaha manual.

34 

35Subagents juga dapat mempertahankan auto memory mereka sendiri. Lihat [konfigurasi subagent](/id/sub-agents#enable-persistent-memory) untuk detail.

36 

37## File CLAUDE.md

38 

39File CLAUDE.md adalah file markdown yang memberikan Claude instruksi persisten untuk proyek, alur kerja pribadi Anda, atau seluruh organisasi Anda. Anda menulis file ini dalam teks biasa; Claude membacanya di awal setiap sesi.

40 

41### Kapan harus menambahkan ke CLAUDE.md

42 

43Perlakukan CLAUDE.md sebagai tempat Anda menulis apa yang sebaliknya akan Anda jelaskan kembali. Tambahkan ke dalamnya ketika:

44 

45* Claude membuat kesalahan yang sama untuk kedua kalinya

46* Tinjauan kode menangkap sesuatu yang seharusnya Claude ketahui tentang basis kode ini

47* Anda mengetik koreksi atau klarifikasi yang sama ke dalam chat yang Anda ketik di sesi terakhir

48* Anggota tim baru akan membutuhkan konteks yang sama untuk produktif

49 

50Pertahankan fakta yang seharusnya Claude pegang di setiap sesi: perintah build, konvensi, tata letak proyek, aturan "selalu lakukan X". Jika entri adalah prosedur multi-langkah atau hanya penting untuk satu bagian dari basis kode, pindahkan ke [skill](/id/skills) atau [aturan bersyarat jalur](#organize-rules-with-claude/rules/) sebagai gantinya. [Gambaran umum ekstensi](/id/features-overview#build-your-setup-over-time) mencakup kapan menggunakan setiap mekanisme.

51 

52### Pilih di mana menempatkan file CLAUDE.md

53 

54File CLAUDE.md dapat berada di beberapa lokasi, masing-masing dengan cakupan yang berbeda. Lokasi yang lebih spesifik memiliki prioritas lebih tinggi daripada yang lebih luas.

55 

56| Cakupan | Lokasi | Tujuan | Contoh kasus penggunaan | Dibagikan dengan |

57| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------------------ | ---------------------------------- |

58| **Kebijakan terkelola** | • macOS: `/Library/Application Support/ClaudeCode/CLAUDE.md`<br />• Linux dan WSL: `/etc/claude-code/CLAUDE.md`<br />• Windows: `C:\Program Files\ClaudeCode\CLAUDE.md` | Instruksi di seluruh organisasi yang dikelola oleh IT/DevOps | Standar pengkodean perusahaan, kebijakan keamanan, persyaratan kepatuhan | Semua pengguna dalam organisasi |

59| **Instruksi proyek** | `./CLAUDE.md` atau `./.claude/CLAUDE.md` | Instruksi bersama tim untuk proyek | Arsitektur proyek, standar pengkodean, alur kerja umum | Anggota tim melalui kontrol sumber |

60| **Instruksi pengguna** | `~/.claude/CLAUDE.md` | Preferensi pribadi untuk semua proyek | Preferensi gaya kode, pintasan alat pribadi | Hanya Anda (semua proyek) |

61| **Instruksi lokal** | `./CLAUDE.local.md` | Preferensi pribadi khusus proyek; tambahkan ke `.gitignore` | URL sandbox Anda, data test pilihan | Hanya Anda (proyek saat ini) |

62 

63File CLAUDE.md dan CLAUDE.local.md dalam hierarki direktori di atas direktori kerja dimuat sepenuhnya saat peluncuran. File di subdirektori dimuat sesuai permintaan ketika Claude membaca file di direktori tersebut. Lihat [Bagaimana file CLAUDE.md dimuat](#how-claude-md-files-load) untuk urutan resolusi lengkap.

64 

65Untuk proyek besar, Anda dapat memecah instruksi menjadi file khusus topik menggunakan [aturan proyek](#organize-rules-with-claude/rules/). Aturan memungkinkan Anda membatasi instruksi ke tipe file atau subdirektori tertentu.

66 

67### Siapkan CLAUDE.md proyek

68 

69CLAUDE.md proyek dapat disimpan di `./CLAUDE.md` atau `./.claude/CLAUDE.md`. Buat file ini dan tambahkan instruksi yang berlaku untuk siapa pun yang bekerja pada proyek: perintah build dan test, standar pengkodean, keputusan arsitektur, konvensi penamaan, dan alur kerja umum. Instruksi ini dibagikan dengan tim Anda melalui kontrol versi, jadi fokus pada standar tingkat proyek daripada preferensi pribadi.

70 

71<Tip>

72 Jalankan `/init` untuk menghasilkan CLAUDE.md awal secara otomatis. Claude menganalisis basis kode Anda dan membuat file dengan perintah build, instruksi test, dan konvensi proyek yang ditemukannya. Jika CLAUDE.md sudah ada, `/init` menyarankan perbaikan daripada menimpanya. Perbaiki dari sana dengan instruksi yang Claude tidak akan temukan sendiri.

73 

74 Atur `CLAUDE_CODE_NEW_INIT=1` untuk mengaktifkan alur multi-fase interaktif. `/init` menanyakan artefak mana yang akan diatur: file CLAUDE.md, skills, dan hooks. Kemudian mengeksplorasi basis kode Anda dengan subagent, mengisi celah melalui pertanyaan lanjutan, dan menyajikan proposal yang dapat ditinjau sebelum menulis file apa pun.

75</Tip>

76 

77### Tulis instruksi yang efektif

78 

79File CLAUDE.md dimuat ke dalam context window di awal setiap sesi, mengonsumsi token bersama percakapan Anda. [Visualisasi context window](/id/context-window) menunjukkan di mana CLAUDE.md dimuat relatif terhadap sisa startup context. Karena mereka adalah konteks daripada konfigurasi yang diberlakukan, cara Anda menulis instruksi mempengaruhi seberapa andal Claude mengikutinya. Instruksi yang spesifik, ringkas, dan terstruktur dengan baik bekerja paling baik.

80 

81**Ukuran**: targetkan di bawah 200 baris per file CLAUDE.md. File yang lebih panjang mengonsumsi lebih banyak konteks dan mengurangi kepatuhan. Jika instruksi Anda berkembang besar, gunakan [aturan bersyarat jalur](#path-specific-rules) sehingga instruksi hanya dimuat ketika Claude bekerja dengan file yang cocok, menghemat ruang konteks. Anda juga dapat membagi konten menjadi [impor](#import-additional-files) untuk organisasi, meskipun file yang diimpor masih dimuat dan memasuki context window saat peluncuran.

82 

83**Struktur**: gunakan header markdown dan bullet untuk mengelompokkan instruksi terkait. Claude memindai struktur dengan cara yang sama seperti pembaca: bagian yang terorganisir lebih mudah diikuti daripada paragraf padat.

84 

85**Spesifisitas**: tulis instruksi yang cukup konkret untuk diverifikasi. Misalnya:

86 

87* "Gunakan indentasi 2 spasi" daripada "Format kode dengan baik"

88* "Jalankan `npm test` sebelum commit" daripada "Uji perubahan Anda"

89* "Handler API berada di `src/api/handlers/`" daripada "Jaga file tetap terorganisir"

90 

91**Konsistensi**: jika dua aturan saling bertentangan, Claude mungkin memilih satu secara sembarangan. Tinjau file CLAUDE.md Anda, file CLAUDE.md bersarang di subdirektori, dan file [`.claude/rules/`](#organize-rules-with-claude/rules/) secara berkala untuk menghapus instruksi yang ketinggalan zaman atau bertentangan. Dalam monorepo, gunakan [`claudeMdExcludes`](#exclude-specific-claude-md-files) untuk melewati file CLAUDE.md dari tim lain yang tidak relevan dengan pekerjaan Anda.

92 

93### Impor file tambahan

94 

95File CLAUDE.md dapat mengimpor file tambahan menggunakan sintaks `@path/to/import`. File yang diimpor diperluas dan dimuat ke dalam konteks saat peluncuran bersama CLAUDE.md yang mereferensikannya.

96 

97Jalur relatif dan absolut diizinkan. Jalur relatif diselesaikan relatif terhadap file yang berisi impor, bukan direktori kerja. File yang diimpor dapat secara rekursif mengimpor file lain, dengan kedalaman maksimal lima hop.

98 

99Untuk menarik README, package.json, dan panduan alur kerja, referensikan mereka dengan sintaks `@` di mana saja di CLAUDE.md Anda:

100 

101```text theme={null}

102Lihat @README untuk gambaran umum proyek dan @package.json untuk perintah npm yang tersedia untuk proyek ini.

103 

104# Instruksi Tambahan

105- alur kerja git @docs/git-instructions.md

106```

107 

108Untuk preferensi pribadi per-proyek yang tidak ingin Anda periksa ke dalam kontrol versi, buat `CLAUDE.local.md` di root proyek. Itu dimuat bersama `CLAUDE.md` dan diperlakukan dengan cara yang sama. Tambahkan `CLAUDE.local.md` ke `.gitignore` Anda sehingga tidak dikomit; menjalankan `/init` dan memilih opsi pribadi melakukan ini untuk Anda.

109 

110Jika Anda bekerja di seluruh beberapa git worktrees dari repositori yang sama, `CLAUDE.local.md` yang diabaikan git hanya ada di worktree tempat Anda membuatnya. Untuk berbagi instruksi pribadi di seluruh worktrees, impor file dari direktori home Anda sebagai gantinya:

111 

112```text theme={null}

113# Preferensi Individu

114- @~/.claude/my-project-instructions.md

115```

116 

117<Warning>

118 Pertama kali Claude Code menemukan impor eksternal dalam proyek, itu menampilkan dialog persetujuan yang mencantumkan file. Jika Anda menolak, impor tetap dinonaktifkan dan dialog tidak muncul lagi.

119</Warning>

120 

121Untuk pendekatan yang lebih terstruktur untuk mengorganisir instruksi, lihat [`.claude/rules/`](#organize-rules-with-claude/rules/).

122 

123### AGENTS.md

124 

125Claude Code membaca `CLAUDE.md`, bukan `AGENTS.md`. Jika repositori Anda sudah menggunakan `AGENTS.md` untuk agen pengkodean lain, buat `CLAUDE.md` yang mengimpornya sehingga kedua alat membaca instruksi yang sama tanpa menduplikasinya. Anda juga dapat menambahkan instruksi khusus Claude di bawah impor. Claude memuat file yang diimpor saat awal sesi, kemudian menambahkan sisanya:

126 

127```markdown CLAUDE.md theme={null}

128@AGENTS.md

129 

130## Claude Code

131 

132Gunakan plan mode untuk perubahan di bawah `src/billing/`.

133```

134 

135### Bagaimana file CLAUDE.md dimuat

136 

137Claude Code membaca file CLAUDE.md dengan berjalan naik pohon direktori dari direktori kerja saat ini, memeriksa setiap direktori di sepanjang jalan untuk file `CLAUDE.md` dan `CLAUDE.local.md`. Ini berarti jika Anda menjalankan Claude Code di `foo/bar/`, itu memuat instruksi dari `foo/bar/CLAUDE.md`, `foo/CLAUDE.md`, dan file `CLAUDE.local.md` apa pun di sebelahnya.

138 

139Semua file yang ditemukan digabungkan ke dalam konteks daripada menimpa satu sama lain. Dalam setiap direktori, `CLAUDE.local.md` ditambahkan setelah `CLAUDE.md`, jadi ketika instruksi bertentangan, catatan pribadi Anda adalah hal terakhir yang Claude baca di tingkat itu.

140 

141Claude juga menemukan file `CLAUDE.md` dan `CLAUDE.local.md` di subdirektori di bawah direktori kerja saat ini. Alih-alih memuatnya saat peluncuran, mereka disertakan ketika Claude membaca file di subdirektori tersebut.

142 

143Jika Anda bekerja di monorepo besar di mana file CLAUDE.md tim lain diambil, gunakan [`claudeMdExcludes`](#exclude-specific-claude-md-files) untuk melewatinya.

144 

145Komentar HTML tingkat blok (`<!-- maintainer notes -->`) dalam file CLAUDE.md dihapus sebelum konten disuntikkan ke dalam konteks Claude. Gunakan mereka untuk meninggalkan catatan bagi pengelola manusia tanpa menghabiskan token konteks pada mereka. Komentar di dalam blok kode dipertahankan. Ketika Anda membuka file CLAUDE.md secara langsung dengan alat Read, komentar tetap terlihat.

146 

147#### Muat dari direktori tambahan

148 

149Flag `--add-dir` memberikan Claude akses ke direktori tambahan di luar direktori kerja utama Anda. Secara default, file CLAUDE.md dari direktori ini tidak dimuat.

150 

151Untuk juga memuat file memori dari direktori tambahan, atur variabel lingkungan `CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD`:

152 

153```bash theme={null}

154CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1 claude --add-dir ../shared-config

155```

156 

157Ini memuat `CLAUDE.md`, `.claude/CLAUDE.md`, `.claude/rules/*.md`, dan `CLAUDE.local.md` dari direktori tambahan. `CLAUDE.local.md` dilewati jika Anda mengecualikan `local` dari [`--setting-sources`](/id/cli-reference).

158 

159### Organisir aturan dengan `.claude/rules/`

160 

161Untuk proyek yang lebih besar, Anda dapat mengorganisir instruksi menjadi beberapa file menggunakan direktori `.claude/rules/`. Ini membuat instruksi modular dan lebih mudah bagi tim untuk dipertahankan. Aturan juga dapat [dibatasi ke jalur file tertentu](#path-specific-rules), sehingga mereka hanya dimuat ke dalam konteks ketika Claude bekerja dengan file yang cocok, mengurangi kebisingan dan menghemat ruang konteks.

162 

163<Note>

164 Aturan dimuat ke dalam konteks setiap sesi atau ketika file yang cocok dibuka. Untuk instruksi khusus tugas yang tidak perlu berada dalam konteks sepanjang waktu, gunakan [skills](/id/skills) sebagai gantinya, yang hanya dimuat ketika Anda menginvokasinya atau ketika Claude menentukan mereka relevan dengan prompt Anda.

165</Note>

166 

167#### Siapkan aturan

168 

169Tempatkan file markdown di direktori `.claude/rules/` proyek Anda. Setiap file harus mencakup satu topik, dengan nama file deskriptif seperti `testing.md` atau `api-design.md`. Semua file `.md` ditemukan secara rekursif, jadi Anda dapat mengorganisir aturan ke dalam subdirektori seperti `frontend/` atau `backend/`:

170 

171```text theme={null}

172your-project/

173├── .claude/

174│ ├── CLAUDE.md # Instruksi proyek utama

175│ └── rules/

176│ ├── code-style.md # Pedoman gaya kode

177│ ├── testing.md # Konvensi pengujian

178│ └── security.md # Persyaratan keamanan

179```

180 

181Aturan tanpa [frontmatter `paths`](#path-specific-rules) dimuat saat peluncuran dengan prioritas yang sama seperti `.claude/CLAUDE.md`.

182 

183#### Aturan khusus jalur

184 

185Aturan dapat dibatasi ke file tertentu menggunakan frontmatter YAML dengan bidang `paths`. Aturan bersyarat ini hanya berlaku ketika Claude bekerja dengan file yang cocok dengan pola yang ditentukan.

186 

187```markdown theme={null}

188---

189paths:

190 - "src/api/**/*.ts"

191---

192 

193# Aturan Pengembangan API

194 

195- Semua endpoint API harus menyertakan validasi input

196- Gunakan format respons kesalahan standar

197- Sertakan komentar dokumentasi OpenAPI

198```

199 

200Aturan tanpa bidang `paths` dimuat tanpa syarat dan berlaku untuk semua file. Aturan bersyarat jalur dipicu ketika Claude membaca file yang cocok dengan pola, bukan pada setiap penggunaan alat.

201 

202Gunakan pola glob di bidang `paths` untuk mencocokkan file berdasarkan ekstensi, direktori, atau kombinasi apa pun:

203 

204| Pola | Cocok dengan |

205| ---------------------- | ------------------------------------------ |

206| `**/*.ts` | Semua file TypeScript di direktori apa pun |

207| `src/**/*` | Semua file di bawah direktori `src/` |

208| `*.md` | File Markdown di root proyek |

209| `src/components/*.tsx` | Komponen React di direktori tertentu |

210 

211Anda dapat menentukan beberapa pola dan menggunakan ekspansi brace untuk mencocokkan beberapa ekstensi dalam satu pola:

212 

213```markdown theme={null}

214---

215paths:

216 - "src/**/*.{ts,tsx}"

217 - "lib/**/*.ts"

218 - "tests/**/*.test.ts"

219---

220```

221 

222#### Bagikan aturan lintas proyek dengan symlinks

223 

224Direktori `.claude/rules/` mendukung symlinks, jadi Anda dapat mempertahankan set aturan bersama dan menautkannya ke beberapa proyek. Symlinks diselesaikan dan dimuat secara normal, dan symlinks melingkar terdeteksi dan ditangani dengan anggun.

225 

226Contoh ini menautkan direktori bersama dan file individual:

227 

228```bash theme={null}

229ln -s ~/shared-claude-rules .claude/rules/shared

230ln -s ~/company-standards/security.md .claude/rules/security.md

231```

232 

233#### Aturan tingkat pengguna

234 

235Aturan pribadi di `~/.claude/rules/` berlaku untuk setiap proyek di mesin Anda. Gunakan untuk preferensi yang bukan khusus proyek:

236 

237```text theme={null}

238~/.claude/rules/

239├── preferences.md # Preferensi pengkodean pribadi Anda

240└── workflows.md # Alur kerja pilihan Anda

241```

242 

243Aturan tingkat pengguna dimuat sebelum aturan proyek, memberikan aturan proyek prioritas lebih tinggi.

244 

245### Kelola CLAUDE.md untuk tim besar

246 

247Untuk organisasi yang menerapkan Claude Code di seluruh tim, Anda dapat memusatkan instruksi dan mengontrol file CLAUDE.md mana yang dimuat.

248 

249#### Terapkan CLAUDE.md di seluruh organisasi

250 

251Organisasi dapat menerapkan CLAUDE.md yang dikelola secara terpusat yang berlaku untuk semua pengguna di mesin. File ini tidak dapat dikecualikan oleh pengaturan individual.

252 

253<Steps>

254 <Step title="Buat file di lokasi kebijakan terkelola">

255 * macOS: `/Library/Application Support/ClaudeCode/CLAUDE.md`

256 * Linux dan WSL: `/etc/claude-code/CLAUDE.md`

257 * Windows: `C:\Program Files\ClaudeCode\CLAUDE.md`

258 </Step>

259 

260 <Step title="Terapkan dengan sistem manajemen konfigurasi Anda">

261 Gunakan MDM, Group Policy, Ansible, atau alat serupa untuk mendistribusikan file di seluruh mesin pengembang. Lihat [pengaturan terkelola](/id/permissions#managed-settings) untuk opsi konfigurasi di seluruh organisasi lainnya.

262 </Step>

263</Steps>

264 

265CLAUDE.md yang dikelola dan [pengaturan terkelola](/id/settings#settings-files) melayani tujuan yang berbeda. Gunakan pengaturan untuk penegakan teknis dan CLAUDE.md untuk panduan perilaku:

266 

267| Kekhawatiran | Konfigurasi dalam |

268| :---------------------------------------------- | :------------------------------------------------------------ |

269| Blokir alat, perintah, atau jalur file tertentu | Pengaturan terkelola: `permissions.deny` |

270| Paksakan isolasi sandbox | Pengaturan terkelola: `sandbox.enabled` |

271| Variabel lingkungan dan perutean penyedia API | Pengaturan terkelola: `env` |

272| Metode autentikasi dan kunci organisasi | Pengaturan terkelola: `forceLoginMethod`, `forceLoginOrgUUID` |

273| Panduan gaya kode dan kualitas | CLAUDE.md terkelola |

274| Pengingat penanganan data dan kepatuhan | CLAUDE.md terkelola |

275| Instruksi perilaku untuk Claude | CLAUDE.md terkelola |

276 

277Aturan pengaturan diberlakukan oleh klien terlepas dari apa yang Claude putuskan untuk dilakukan. Instruksi CLAUDE.md membentuk perilaku Claude tetapi bukan lapisan penegakan keras.

278 

279#### Kecualikan file CLAUDE.md tertentu

280 

281Dalam monorepo besar, file CLAUDE.md leluhur mungkin berisi instruksi yang tidak relevan dengan pekerjaan Anda. Pengaturan `claudeMdExcludes` memungkinkan Anda melewati file tertentu berdasarkan jalur atau pola glob.

282 

283Contoh ini mengecualikan CLAUDE.md tingkat atas dan direktori aturan dari folder induk. Tambahkan ke `.claude/settings.local.json` agar pengecualian tetap lokal ke mesin Anda:

284 

285```json theme={null}

286{

287 "claudeMdExcludes": [

288 "**/monorepo/CLAUDE.md",

289 "/home/user/monorepo/other-team/.claude/rules/**"

290 ]

291}

292```

293 

294Pola dicocokkan dengan jalur file absolut menggunakan sintaks glob. Anda dapat mengonfigurasi `claudeMdExcludes` di lapisan [pengaturan](/id/settings#settings-files) apa pun: pengguna, proyek, lokal, atau kebijakan terkelola. Array digabungkan di seluruh lapisan.

295 

296File CLAUDE.md kebijakan terkelola tidak dapat dikecualikan. Ini memastikan instruksi di seluruh organisasi selalu berlaku terlepas dari pengaturan individual.

297 

298## Auto memory

299 

300Auto memory memungkinkan Claude mengumpulkan pengetahuan lintas sesi tanpa Anda menulis apa pun. Claude menyimpan catatan untuk dirinya sendiri saat bekerja: perintah build, wawasan debugging, catatan arsitektur, preferensi gaya kode, dan kebiasaan alur kerja. Claude tidak menyimpan sesuatu setiap sesi. Itu memutuskan apa yang layak diingat berdasarkan apakah informasi akan berguna dalam percakapan masa depan.

301 

302<Note>

303 Auto memory memerlukan Claude Code v2.1.59 atau lebih baru. Periksa versi Anda dengan `claude --version`.

304</Note>

305 

306### Aktifkan atau nonaktifkan auto memory

307 

308Auto memory aktif secara default. Untuk mengalihkannya, buka `/memory` dalam sesi dan gunakan toggle auto memory, atau atur `autoMemoryEnabled` dalam pengaturan proyek Anda:

309 

310```json theme={null}

311{

312 "autoMemoryEnabled": false

313}

314```

315 

316Untuk menonaktifkan auto memory melalui variabel lingkungan, atur `CLAUDE_CODE_DISABLE_AUTO_MEMORY=1`.

317 

318### Lokasi penyimpanan

319 

320Setiap proyek mendapatkan direktori memori sendiri di `~/.claude/projects/<project>/memory/`. Jalur `<project>` berasal dari repositori git, jadi semua worktrees dan subdirektori dalam repo yang sama berbagi satu direktori auto memory. Di luar repo git, root proyek digunakan sebagai gantinya.

321 

322Untuk menyimpan auto memory di lokasi berbeda, atur `autoMemoryDirectory` dalam pengaturan pengguna Anda di `~/.claude/settings.json`:

323 

324```json theme={null}

325{

326 "autoMemoryDirectory": "~/my-custom-memory-dir"

327}

328```

329 

330Nilai harus berupa jalur absolut atau dimulai dengan `~/`. Pengaturan ini diterima dari pengaturan kebijakan dan pengguna, dan dari flag `--settings`. Itu tidak diterima dari pengaturan proyek atau lokal, karena kedua file berada di dalam direktori proyek dan repositori yang dikloning dapat menyediakan salah satu untuk mengarahkan ulang penulisan auto memory ke lokasi sensitif.

331 

332Direktori berisi titik masuk `MEMORY.md` dan file topik opsional:

333 

334```text theme={null}

335~/.claude/projects/<project>/memory/

336├── MEMORY.md # Indeks ringkas, dimuat ke dalam setiap sesi

337├── debugging.md # Catatan terperinci tentang pola debugging

338├── api-conventions.md # Keputusan desain API

339└── ... # File topik lain yang Claude buat

340```

341 

342`MEMORY.md` bertindak sebagai indeks direktori memori. Claude membaca dan menulis file di direktori ini sepanjang sesi Anda, menggunakan `MEMORY.md` untuk melacak apa yang disimpan di mana.

343 

344Auto memory adalah mesin-lokal. Semua worktrees dan subdirektori dalam repositori git yang sama berbagi satu direktori auto memory. File tidak dibagikan di seluruh mesin atau lingkungan cloud.

345 

346### Bagaimana cara kerjanya

347 

348200 baris pertama `MEMORY.md`, atau 25KB pertama, mana pun yang lebih dulu, dimuat di awal setiap percakapan. Konten di luar batas itu tidak dimuat saat awal sesi. Claude membuat `MEMORY.md` ringkas dengan memindahkan catatan terperinci ke file topik terpisah.

349 

350Batas ini hanya berlaku untuk `MEMORY.md`. File CLAUDE.md dimuat sepenuhnya terlepas dari panjangnya, meskipun file yang lebih pendek menghasilkan kepatuhan yang lebih baik.

351 

352File topik seperti `debugging.md` atau `patterns.md` tidak dimuat saat startup. Claude membacanya sesuai permintaan menggunakan alat file standarnya ketika membutuhkan informasi.

353 

354Claude membaca dan menulis file memori selama sesi Anda. Ketika Anda melihat "Writing memory" atau "Recalled memory" di antarmuka Claude Code, Claude secara aktif memperbarui atau membaca dari `~/.claude/projects/<project>/memory/`.

355 

356### Audit dan edit memori Anda

357 

358File auto memory adalah markdown biasa yang dapat Anda edit atau hapus kapan saja. Jalankan [`/memory`](#view-and-edit-with-memory) untuk menelusuri dan membuka file memori dari dalam sesi.

359 

360## Lihat dan edit dengan `/memory`

361 

362Perintah `/memory` mencantumkan semua file CLAUDE.md, CLAUDE.local.md, dan rules yang dimuat dalam sesi saat ini, memungkinkan Anda mengalihkan auto memory aktif atau mati, dan menyediakan tautan untuk membuka folder auto memory. Pilih file apa pun untuk membukanya di editor Anda.

363 

364Ketika Anda meminta Claude untuk mengingat sesuatu, seperti "selalu gunakan pnpm, bukan npm" atau "ingat bahwa tes API memerlukan instans Redis lokal," Claude menyimpannya ke auto memory. Untuk menambahkan instruksi ke CLAUDE.md sebagai gantinya, minta Claude secara langsung, seperti "tambahkan ini ke CLAUDE.md," atau edit file sendiri melalui `/memory`.

365 

366## Troubleshoot masalah memori

367 

368Ini adalah masalah paling umum dengan CLAUDE.md dan auto memory, bersama dengan langkah-langkah untuk men-debug mereka.

369 

370### Claude tidak mengikuti CLAUDE.md saya

371 

372Konten CLAUDE.md disampaikan sebagai pesan pengguna setelah prompt sistem, bukan sebagai bagian dari prompt sistem itu sendiri. Claude membacanya dan mencoba mengikutinya, tetapi tidak ada jaminan kepatuhan ketat, terutama untuk instruksi yang samar atau bertentangan.

373 

374Untuk men-debug:

375 

376* Jalankan `/memory` untuk memverifikasi file CLAUDE.md dan CLAUDE.local.md Anda dimuat. Jika file tidak terdaftar, Claude tidak dapat melihatnya.

377* Periksa bahwa CLAUDE.md yang relevan berada di lokasi yang dimuat untuk sesi Anda (lihat [Pilih di mana menempatkan file CLAUDE.md](#choose-where-to-put-claude-md-files)).

378* Buat instruksi lebih spesifik. "Gunakan indentasi 2 spasi" bekerja lebih baik daripada "format kode dengan baik."

379* Cari instruksi yang bertentangan di seluruh file CLAUDE.md. Jika dua file memberikan panduan berbeda untuk perilaku yang sama, Claude mungkin memilih satu secara sembarangan.

380 

381Untuk instruksi yang Anda inginkan di tingkat prompt sistem, gunakan [`--append-system-prompt`](/id/cli-reference#system-prompt-flags). Ini harus dilewatkan setiap invokasi, jadi lebih cocok untuk skrip dan otomasi daripada penggunaan interaktif.

382 

383<Tip>

384 Gunakan [hook `InstructionsLoaded`](/id/hooks#instructionsloaded) untuk mencatat dengan tepat file instruksi mana yang dimuat, kapan mereka dimuat, dan mengapa. Ini berguna untuk men-debug aturan khusus jalur atau file yang dimuat malas di subdirektori.

385</Tip>

386 

387### Saya tidak tahu apa yang disimpan auto memory

388 

389Jalankan `/memory` dan pilih folder auto memory untuk menelusuri apa yang telah disimpan Claude. Semuanya adalah markdown biasa yang dapat Anda baca, edit, atau hapus.

390 

391### CLAUDE.md saya terlalu besar

392 

393File di atas 200 baris mengonsumsi lebih banyak konteks dan dapat mengurangi kepatuhan. Gunakan [aturan yang dibatasi jalur](#path-specific-rules) untuk memuat instruksi hanya ketika Claude bekerja dengan file yang cocok, atau pangkas konten yang tidak diperlukan dalam setiap sesi. Memisahkan ke dalam [impor `@path`](#import-additional-files) membantu organisasi tetapi tidak mengurangi konteks, karena file yang diimpor dimuat saat peluncuran.

394 

395### Instruksi tampak hilang setelah `/compact`

396 

397CLAUDE.md root proyek bertahan dari pemadatan: setelah `/compact`, Claude membaca ulang CLAUDE.md dari disk dan menyuntikkannya kembali ke dalam sesi. File CLAUDE.md bersarang di subdirektori tidak disuntikkan kembali secara otomatis; mereka dimuat ulang saat berikutnya Claude membaca file di subdirektori tersebut.

398 

399Jika instruksi hilang setelah pemadatan, itu diberikan hanya dalam percakapan atau berada di CLAUDE.md bersarang yang belum dimuat ulang. Tambahkan instruksi percakapan ke CLAUDE.md untuk membuatnya bertahan. Lihat [Apa yang bertahan pemadatan](/id/context-window#what-survives-compaction) untuk rincian lengkap.

400 

401Lihat [Tulis instruksi yang efektif](#write-effective-instructions) untuk panduan tentang ukuran, struktur, dan spesifisitas.

402 

403## Sumber daya terkait

404 

405* [Debug konfigurasi Anda](/id/debug-your-config): diagnosis mengapa CLAUDE.md atau pengaturan tidak berlaku

406* [Skills](/id/skills): paket alur kerja yang dapat diulang yang dimuat sesuai permintaan

407* [Settings](/id/settings): konfigurasi perilaku Claude Code dengan file pengaturan

408* [Memori subagent](/id/sub-agents#enable-persistent-memory): biarkan subagents mempertahankan auto memory mereka sendiri

microsoft-foundry.md +314 −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# Claude Code di Microsoft Foundry

6 

7> Pelajari tentang mengonfigurasi Claude Code melalui Microsoft Foundry, termasuk setup, konfigurasi, dan pemecahan masalah.

8 

9export const ContactSalesCard = ({surface}) => {

10 const utm = content => `utm_source=claude_code&utm_medium=docs&utm_content=${surface}_${content}`;

11 const iconArrowRight = (size = 13) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

12 <line x1="5" y1="12" x2="19" y2="12" />

13 <polyline points="12 5 19 12 12 19" />

14 </svg>;

15 const STYLES = `

16.cc-cs {

17 --cs-slate: #141413;

18 --cs-clay: #d97757;

19 --cs-clay-deep: #c6613f;

20 --cs-gray-000: #ffffff;

21 --cs-gray-700: #3d3d3a;

22 --cs-border-default: rgba(31, 30, 29, 0.15);

23 font-family: inherit;

24}

25.dark .cc-cs {

26 --cs-slate: #f0eee6;

27 --cs-gray-000: #262624;

28 --cs-gray-700: #bfbdb4;

29 --cs-border-default: rgba(240, 238, 230, 0.14);

30}

31.cc-cs-card {

32 display: flex; align-items: center; justify-content: space-between;

33 gap: 16px; padding: 14px 16px; margin: 0;

34 background: var(--cs-gray-000); border: 0.5px solid var(--cs-border-default);

35 border-radius: 8px; flex-wrap: wrap;

36}

37.cc-cs-text { font-size: 13px; color: var(--cs-gray-700); line-height: 1.5; flex: 1; min-width: 240px; }

38.cc-cs-text strong { font-weight: 550; color: var(--cs-slate); }

39.cc-cs-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }

40.cc-cs-btn-clay {

41 display: inline-flex; align-items: center; gap: 8px;

42 background: var(--cs-clay-deep); color: #fff; border: none;

43 border-radius: 8px; padding: 8px 14px;

44 font-size: 13px; font-weight: 500;

45 transition: background-color 0.15s; white-space: nowrap;

46}

47.cc-cs-btn-clay:hover { background: var(--cs-clay); }

48.cc-cs-btn-ghost {

49 display: inline-flex; align-items: center; gap: 8px;

50 background: transparent; color: var(--cs-gray-700);

51 border: 0.5px solid var(--cs-border-default);

52 border-radius: 8px; padding: 8px 14px;

53 font-size: 13px; font-weight: 500;

54}

55.cc-cs-btn-ghost:hover { background: rgba(0, 0, 0, 0.04); }

56.dark .cc-cs-btn-ghost:hover { background: rgba(255, 255, 255, 0.04); }

57@media (max-width: 720px) {

58 .cc-cs-actions { width: 100%; }

59}

60`;

61 return <div className="cc-cs not-prose">

62 <style>{STYLES}</style>

63 <div className="cc-cs-card">

64 <div className="cc-cs-text">

65 <strong>Deploying Claude Code across your organization?</strong> Talk to sales about enterprise plans, SSO, and centralized billing.

66 </div>

67 <div className="cc-cs-actions">

68 <a href={`https://claude.com/pricing?${utm('view_plans')}#plans-business`} className="cc-cs-btn-ghost">

69 View plans

70 </a>

71 <a href={`https://claude.com/contact-sales?${utm('contact_sales')}`} className="cc-cs-btn-clay">

72 Contact sales {iconArrowRight()}

73 </a>

74 </div>

75 </div>

76 </div>;

77};

78 

79export const Experiment = ({flag, treatment, children}) => {

80 const VID_KEY = 'exp_vid';

81 const CONSENT_COUNTRIES = new Set(['AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'RE', 'GP', 'MQ', 'GF', 'YT', 'BL', 'MF', 'PM', 'WF', 'PF', 'NC', 'AW', 'CW', 'SX', 'FO', 'GL', 'AX', 'GB', 'UK', 'AI', 'BM', 'IO', 'VG', 'KY', 'FK', 'GI', 'MS', 'PN', 'SH', 'TC', 'GG', 'JE', 'IM', 'CA', 'BR', 'IN']);

82 const fnv1a = s => {

83 let h = 0x811c9dc5;

84 for (let i = 0; i < s.length; i++) {

85 h ^= s.charCodeAt(i);

86 h += (h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24);

87 }

88 return h >>> 0;

89 };

90 const bucket = (seed, vid) => fnv1a(fnv1a(seed + vid) + '') % 10000 < 5000 ? 'control' : 'treatment';

91 const [decision] = useState(() => {

92 const params = new URLSearchParams(location.search);

93 const preBucketed = document.documentElement.dataset['gb_' + flag.replace(/-/g, '_')];

94 const force = params.get('gb-force');

95 if (force) {

96 for (const p of force.split(',')) {

97 const [k, v] = p.split(':');

98 if (k === flag) return {

99 variant: v || 'treatment',

100 track: false

101 };

102 }

103 }

104 if (navigator.globalPrivacyControl) {

105 return {

106 variant: 'control',

107 track: false

108 };

109 }

110 const prefsMatch = document.cookie.match(/(?:^|; )anthropic-consent-preferences=([^;]+)/);

111 if (prefsMatch) {

112 try {

113 if (JSON.parse(decodeURIComponent(prefsMatch[1])).analytics !== true) {

114 return {

115 variant: 'control',

116 track: false

117 };

118 }

119 } catch {

120 return {

121 variant: 'control',

122 track: false

123 };

124 }

125 } else {

126 const country = params.get('country')?.toUpperCase() || (document.cookie.match(/(?:^|; )cf_geo=([A-Z]{2})/) || [])[1];

127 if (!country || CONSENT_COUNTRIES.has(country)) {

128 return {

129 variant: 'control',

130 track: false

131 };

132 }

133 }

134 let vid;

135 try {

136 const ajsMatch = document.cookie.match(/(?:^|; )ajs_anonymous_id=([^;]+)/);

137 if (ajsMatch) {

138 vid = decodeURIComponent(ajsMatch[1]).replace(/^"|"$/g, '');

139 } else {

140 vid = localStorage.getItem(VID_KEY);

141 if (!vid) {

142 vid = crypto.randomUUID();

143 }

144 document.cookie = `ajs_anonymous_id=${vid}; domain=.claude.com; path=/; Secure; SameSite=Lax; max-age=31536000`;

145 }

146 try {

147 localStorage.setItem(VID_KEY, vid);

148 } catch {}

149 } catch {

150 return {

151 variant: 'control',

152 track: false

153 };

154 }

155 const variant = preBucketed === '1' ? 'treatment' : preBucketed === '0' ? 'control' : bucket(flag, vid);

156 return {

157 variant,

158 track: true,

159 vid

160 };

161 });

162 useEffect(() => {

163 if (!decision.track) return;

164 fetch('https://api.anthropic.com/api/event_logging/v2/batch', {

165 method: 'POST',

166 headers: {

167 'Content-Type': 'application/json',

168 'x-service-name': 'claude_code_docs'

169 },

170 body: JSON.stringify({

171 events: [{

172 event_type: 'GrowthbookExperimentEvent',

173 event_data: {

174 device_id: decision.vid,

175 anonymous_id: decision.vid,

176 timestamp: new Date().toISOString(),

177 experiment_id: flag,

178 variation_id: decision.variant === 'treatment' ? 1 : 0,

179 environment: 'production'

180 }

181 }]

182 }),

183 keepalive: true

184 }).catch(() => {});

185 }, []);

186 return decision.variant === 'treatment' ? treatment : children;

187};

188 

189<Experiment flag="docs-contact-sales-cta" treatment={<ContactSalesCard surface="foundry" />} />

190 

191## Prasyarat

192 

193Sebelum mengonfigurasi Claude Code dengan Microsoft Foundry, pastikan Anda memiliki:

194 

195* Langganan Azure dengan akses ke Microsoft Foundry

196* Izin RBAC untuk membuat sumber daya dan deployment Microsoft Foundry

197* Azure CLI diinstal dan dikonfigurasi (opsional - hanya diperlukan jika Anda tidak memiliki mekanisme lain untuk mendapatkan kredensial)

198 

199<Note>

200 Jika Anda menerapkan Claude Code ke beberapa pengguna, [pin versi model Anda](#4-pin-model-versions) untuk mencegah kerusakan ketika Anthropic merilis model baru.

201</Note>

202 

203## Setup

204 

205### 1. Menyediakan sumber daya Microsoft Foundry

206 

207Pertama, buat sumber daya Claude di Azure:

208 

2091. Navigasikan ke [portal Microsoft Foundry](https://ai.azure.com/)

2102. Buat sumber daya baru, catat nama sumber daya Anda

2113. Buat deployment untuk model Claude:

212 * Claude Opus

213 * Claude Sonnet

214 * Claude Haiku

215 

216### 2. Konfigurasi kredensial Azure

217 

218Claude Code mendukung dua metode autentikasi untuk Microsoft Foundry. Pilih metode yang paling sesuai dengan persyaratan keamanan Anda.

219 

220**Opsi A: Autentikasi kunci API**

221 

2221. Navigasikan ke sumber daya Anda di portal Microsoft Foundry

2232. Buka bagian **Endpoints and keys**

2243. Salin **API Key**

2254. Atur variabel lingkungan:

226 

227```bash theme={null}

228export ANTHROPIC_FOUNDRY_API_KEY=your-azure-api-key

229```

230 

231**Opsi B: Autentikasi Microsoft Entra ID**

232 

233Ketika `ANTHROPIC_FOUNDRY_API_KEY` tidak diatur, Claude Code secara otomatis menggunakan Azure SDK [rantai kredensial default](https://learn.microsoft.com/en-us/azure/developer/javascript/sdk/authentication/credential-chains#defaultazurecredential-overview).

234Ini mendukung berbagai metode untuk mengautentikasi beban kerja lokal dan jarak jauh.

235 

236Di lingkungan lokal, Anda biasanya dapat menggunakan Azure CLI:

237 

238```bash theme={null}

239az login

240```

241 

242<Note>

243 Saat menggunakan Microsoft Foundry, perintah `/login` dan `/logout` dinonaktifkan karena autentikasi ditangani melalui kredensial Azure.

244</Note>

245 

246### 3. Konfigurasi Claude Code

247 

248Atur variabel lingkungan berikut untuk mengaktifkan Microsoft Foundry:

249 

250```bash theme={null}

251# Aktifkan integrasi Microsoft Foundry

252export CLAUDE_CODE_USE_FOUNDRY=1

253 

254# Nama sumber daya Azure (ganti {resource} dengan nama sumber daya Anda)

255export ANTHROPIC_FOUNDRY_RESOURCE={resource}

256# Atau berikan URL dasar lengkap:

257# export ANTHROPIC_FOUNDRY_BASE_URL=https://{resource}.services.ai.azure.com/anthropic

258```

259 

260### 4. Pin model versions

261 

262<Warning>

263 Pin versi model spesifik untuk setiap deployment. Jika Anda menggunakan alias model (`sonnet`, `opus`, `haiku`) tanpa pinning, Claude Code mungkin mencoba menggunakan versi model yang lebih baru yang tidak tersedia di akun Foundry Anda, merusak pengguna yang ada ketika Anthropic merilis pembaruan. Ketika Anda membuat deployment Azure, pilih versi model spesifik daripada "auto-update to latest."

264</Warning>

265 

266Atur variabel model agar sesuai dengan nama deployment yang Anda buat di langkah 1.

267 

268Tanpa `ANTHROPIC_DEFAULT_OPUS_MODEL`, alias `opus` di Foundry diselesaikan ke Opus 4.6. Aturnya ke ID Opus 4.7 untuk menggunakan model terbaru:

269 

270```bash theme={null}

271export ANTHROPIC_DEFAULT_OPUS_MODEL='claude-opus-4-7'

272export ANTHROPIC_DEFAULT_SONNET_MODEL='claude-sonnet-4-6'

273export ANTHROPIC_DEFAULT_HAIKU_MODEL='claude-haiku-4-5'

274```

275 

276Untuk ID model saat ini dan legacy, lihat [Models overview](https://platform.claude.com/docs/en/about-claude/models/overview). Lihat [Model configuration](/id/model-config#pin-models-for-third-party-deployments) untuk daftar lengkap variabel lingkungan.

277 

278[Prompt caching](https://platform.claude.com/docs/en/build-with-claude/prompt-caching) diaktifkan secara otomatis. Untuk meminta TTL cache 1 jam alih-alih default 5 menit, atur variabel berikut; cache writes dengan TTL 1 jam ditagih dengan tarif yang lebih tinggi:

279 

280```bash theme={null}

281export ENABLE_PROMPT_CACHING_1H=1

282```

283 

284## Konfigurasi Azure RBAC

285 

286Peran default `Azure AI User` dan `Cognitive Services User` mencakup semua izin yang diperlukan untuk memanggil model Claude.

287 

288Untuk izin yang lebih ketat, buat peran khusus dengan yang berikut:

289 

290```json theme={null}

291{

292 "permissions": [

293 {

294 "dataActions": [

295 "Microsoft.CognitiveServices/accounts/providers/*"

296 ]

297 }

298 ]

299}

300```

301 

302Untuk detail, lihat [dokumentasi RBAC Microsoft Foundry](https://learn.microsoft.com/en-us/azure/ai-foundry/concepts/rbac-azure-ai-foundry).

303 

304## Pemecahan Masalah

305 

306Jika Anda menerima kesalahan "Failed to get token from azureADTokenProvider: ChainedTokenCredential authentication failed":

307 

308* Konfigurasi Entra ID di lingkungan, atau atur `ANTHROPIC_FOUNDRY_API_KEY`.

309 

310## Sumber daya tambahan

311 

312* [Dokumentasi Microsoft Foundry](https://learn.microsoft.com/en-us/azure/ai-foundry/what-is-azure-ai-foundry)

313* [Model Microsoft Foundry](https://ai.azure.com/explore/models)

314* [Harga Microsoft Foundry](https://azure.microsoft.com/en-us/pricing/details/ai-foundry/)

model-config.md +382 −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# Konfigurasi model

6 

7> Pelajari tentang konfigurasi model Claude Code, termasuk alias model seperti `opusplan`

8 

9## Model yang tersedia

10 

11Untuk pengaturan `model` di Claude Code, Anda dapat mengonfigurasi salah satu dari:

12 

13* Sebuah **alias model**

14* Sebuah **nama model**

15 * Anthropic API: Sebuah **[nama model](https://platform.claude.com/docs/id/about-claude/models/overview)** lengkap

16 * Bedrock: ARN profil inferensi

17 * Foundry: nama deployment

18 * Vertex: nama versi

19 

20### Alias model

21 

22Alias model menyediakan cara yang nyaman untuk memilih pengaturan model tanpa perlu mengingat nomor versi yang tepat:

23 

24| Alias model | Perilaku |

25| ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

26| **`default`** | Nilai khusus yang menghapus penggantian model apa pun dan kembali ke model yang direkomendasikan untuk jenis akun Anda. Bukan sendiri alias model |

27| **`best`** | Menggunakan model yang paling mampu tersedia, saat ini setara dengan `opus` |

28| **`sonnet`** | Menggunakan model Sonnet terbaru untuk tugas coding sehari-hari |

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

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

31| **`sonnet[1m]`** | Menggunakan Sonnet dengan [jendela konteks 1 juta token](https://platform.claude.com/docs/id/build-with-claude/context-windows#1m-token-context-window) untuk sesi panjang |

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

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

34 

35Di Anthropic API, `opus` diselesaikan ke Opus 4.7 dan `sonnet` diselesaikan ke Sonnet 4.6. Di Bedrock, Vertex, dan Foundry, `opus` diselesaikan ke Opus 4.6 dan `sonnet` diselesaikan ke Sonnet 4.5; model yang lebih baru tersedia di penyedia tersebut dengan memilih nama model lengkap secara eksplisit atau mengatur `ANTHROPIC_DEFAULT_OPUS_MODEL` atau `ANTHROPIC_DEFAULT_SONNET_MODEL`.

36 

37Alias menunjuk ke versi yang direkomendasikan untuk penyedia Anda dan diperbarui seiring waktu. Untuk menetapkan versi tertentu, gunakan nama model lengkap (misalnya, `claude-opus-4-7`) atau atur variabel lingkungan yang sesuai seperti `ANTHROPIC_DEFAULT_OPUS_MODEL`.

38 

39<Note>

40 Opus 4.7 memerlukan Claude Code v2.1.111 atau lebih baru. Jalankan `claude update` untuk meningkatkan.

41</Note>

42 

43### Mengatur model Anda

44 

45Anda dapat mengonfigurasi model Anda dengan beberapa cara, yang tercantum dalam urutan prioritas:

46 

471. **Selama sesi** - Gunakan `/model <alias|name>` untuk beralih segera, atau jalankan `/model` tanpa argumen untuk membuka pemilih. Pemilih meminta konfirmasi ketika percakapan memiliki output sebelumnya, karena respons berikutnya membaca ulang riwayat lengkap tanpa konteks cache

482. **Saat startup** - Luncurkan dengan `claude --model <alias|name>`

493. **Variabel lingkungan** - Atur `ANTHROPIC_MODEL=<alias|name>`

504. **Pengaturan** - Konfigurasi secara permanen di file pengaturan Anda menggunakan bidang `model`.

51 

52Pilihan `/model` Anda disimpan ke pengaturan pengguna dan bertahan di seluruh restart. Mulai dari v2.1.117, jika `.claude/settings.json` proyek menetapkan model yang berbeda, Claude Code juga menulis pilihan Anda ke `.claude/settings.local.json` sehingga terus berlaku di proyek tersebut setelah restart. Pengaturan yang dikelola memiliki prioritas dan diterapkan kembali pada peluncuran berikutnya.

53 

54Ketika model aktif saat startup berasal dari pengaturan proyek atau yang dikelola daripada pilihan Anda sendiri, header startup menunjukkan file pengaturan mana yang menetapkannya. Jalankan `/model` untuk mengganti untuk sesi saat ini.

55 

56Contoh penggunaan:

57 

58```bash theme={null}

59# Mulai dengan Opus

60claude --model opus

61 

62# Beralih ke Sonnet selama sesi

63/model sonnet

64```

65 

66Contoh file pengaturan:

67 

68```json theme={null}

69{

70 "permissions": {

71 ...

72 },

73 "model": "opus"

74}

75```

76 

77## Batasi pemilihan model

78 

79Administrator enterprise dapat menggunakan `availableModels` dalam [pengaturan terkelola atau kebijakan](/id/settings#settings-files) untuk membatasi model mana yang dapat dipilih pengguna.

80 

81Ketika `availableModels` diatur, pengguna tidak dapat beralih ke model yang tidak ada dalam daftar melalui `/model`, flag `--model`, atau variabel lingkungan `ANTHROPIC_MODEL`.

82 

83```json theme={null}

84{

85 "availableModels": ["sonnet", "haiku"]

86}

87```

88 

89### Perilaku model default

90 

91Opsi Default di pemilih model tidak dipengaruhi oleh `availableModels`. Opsi ini selalu tetap tersedia dan mewakili default runtime sistem [berdasarkan tingkat langganan pengguna](#default-model-setting).

92 

93Bahkan dengan `availableModels: []`, pengguna masih dapat menggunakan Claude Code dengan model Default untuk tingkat mereka.

94 

95### Kontrol model yang dijalankan pengguna

96 

97Pengaturan `model` adalah pilihan 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 sistem untuk tingkat mereka terlepas dari apa yang `model` ditetapkan.

98 

99Untuk sepenuhnya mengontrol pengalaman model, gabungkan tiga pengaturan:

100 

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

102* **`model`**: menetapkan pilihan model awal ketika sesi dimulai

103* **`ANTHROPIC_DEFAULT_SONNET_MODEL`** / **`ANTHROPIC_DEFAULT_OPUS_MODEL`** / **`ANTHROPIC_DEFAULT_HAIKU_MODEL`**: mengontrol apa yang diselesaikan opsi Default dan alias `sonnet`, `opus`, dan `haiku`

104 

105Contoh ini memulai pengguna di Sonnet 4.5, membatasi pemilih ke Sonnet dan Haiku, dan menetapkan Default untuk diselesaikan ke Sonnet 4.5 daripada rilis terbaru:

106 

107```json theme={null}

108{

109 "model": "claude-sonnet-4-5",

110 "availableModels": ["claude-sonnet-4-5", "haiku"],

111 "env": {

112 "ANTHROPIC_DEFAULT_SONNET_MODEL": "claude-sonnet-4-5"

113 }

114}

115```

116 

117Tanpa blok `env`, pengguna yang memilih Default di pemilih akan mendapatkan rilis Sonnet terbaru, melewati pin versi dalam `model` dan `availableModels`.

118 

119### Perilaku penggabungan

120 

121Ketika `availableModels` diatur di beberapa tingkat, seperti pengaturan pengguna dan pengaturan proyek, array digabungkan dan dideduplikasi. Untuk memberlakukan allowlist ketat, atur `availableModels` dalam pengaturan terkelola atau kebijakan yang memiliki prioritas tertinggi.

122 

123### ID model Mantle

124 

125Ketika [endpoint Bedrock Mantle](/id/amazon-bedrock#use-the-mantle-endpoint) diaktifkan, entri dalam `availableModels` yang dimulai dengan `anthropic.` ditambahkan ke pemilih `/model` sebagai opsi kustom dan dirutekan ke endpoint Mantle. Ini adalah pengecualian terhadap pencocokan alias-saja yang dijelaskan dalam [Tetapkan model untuk deployment pihak ketiga](#pin-models-for-third-party-deployments). Pengaturan masih membatasi pemilih ke entri yang tercantum, jadi sertakan alias standar bersama ID Mantle apa pun.

126 

127## Perilaku model khusus

128 

129### Pengaturan model `default`

130 

131Perilaku `default` tergantung pada jenis akun Anda:

132 

133* **Max dan Team Premium**: default ke Opus 4.7

134* **Pro, Team Standard, Enterprise, dan Anthropic API**: default ke Sonnet 4.6

135* **Bedrock, Vertex, dan Foundry**: default ke Sonnet 4.5

136 

137Claude Code dapat secara otomatis kembali ke Sonnet jika Anda mencapai ambang penggunaan dengan Opus.

138 

139<Note>

140 Pada 23 April 2026, model default untuk pengguna Enterprise pay-as-you-go dan Anthropic API akan berubah ke Opus 4.7. Untuk mempertahankan default yang berbeda, atur `ANTHROPIC_MODEL` atau bidang `model` dalam [pengaturan yang dikelola server](/id/server-managed-settings).

141</Note>

142 

143### Pengaturan model `opusplan`

144 

145Alias model `opusplan` menyediakan pendekatan hibrida otomatis:

146 

147* **Dalam plan mode** - Menggunakan `opus` untuk penalaran kompleks dan keputusan arsitektur

148* **Dalam execution mode** - Secara otomatis beralih ke `sonnet` untuk pembuatan kode dan implementasi

149 

150Ini memberi Anda yang terbaik dari kedua dunia: penalaran superior Opus untuk perencanaan, dan efisiensi Sonnet untuk eksekusi.

151 

152Fase Opus dalam plan mode berjalan dengan jendela konteks standar 200K. Peningkatan 1M otomatis yang dijelaskan dalam [Konteks diperluas](#extended-context) berlaku untuk pengaturan model `opus` dan tidak memperluas ke `opusplan`.

153 

154### Sesuaikan tingkat usaha

155 

156[Tingkat usaha](https://platform.claude.com/docs/en/build-with-claude/effort) mengontrol penalaran adaptif, yang memungkinkan model memutuskan apakah dan berapa banyak untuk berpikir pada setiap langkah berdasarkan kompleksitas tugas. Usaha lebih rendah lebih cepat dan lebih murah untuk tugas-tugas langsung, sementara usaha lebih tinggi memberikan penalaran lebih dalam untuk masalah kompleks.

157 

158Usaha didukung pada Opus 4.7, Opus 4.6, dan Sonnet 4.6. Tingkat yang tersedia tergantung pada model:

159 

160| Model | Tingkat |

161| :---------------------- | :-------------------------------------- |

162| Opus 4.7 | `low`, `medium`, `high`, `xhigh`, `max` |

163| Opus 4.6 dan Sonnet 4.6 | `low`, `medium`, `high`, `max` |

164 

165Jika Anda menetapkan tingkat yang tidak didukung model aktif, Claude Code kembali ke tingkat tertinggi yang didukung pada atau di bawah tingkat yang Anda tetapkan. Misalnya, `xhigh` berjalan sebagai `high` pada Opus 4.6.

166 

167Mulai dari v2.1.117, usaha default adalah `xhigh` pada Opus 4.7 dan `high` pada Opus 4.6 dan Sonnet 4.6.

168 

169Ketika Anda pertama kali menjalankan Opus 4.7, Claude Code menerapkan `xhigh` bahkan jika Anda sebelumnya menetapkan tingkat usaha yang berbeda untuk Opus 4.6 atau Sonnet 4.6. Jalankan `/effort` lagi untuk memilih tingkat yang berbeda setelah beralih.

170 

171`low`, `medium`, `high`, dan `xhigh` bertahan di seluruh sesi. `max` memberikan penalaran paling dalam tanpa batasan pengeluaran token dan berlaku untuk sesi saat ini saja, kecuali ketika diatur melalui variabel lingkungan `CLAUDE_CODE_EFFORT_LEVEL`.

172 

173#### Pilih tingkat usaha

174 

175Setiap tingkat menukar pengeluaran token terhadap kemampuan. Default cocok untuk sebagian besar tugas coding; sesuaikan ketika Anda menginginkan keseimbangan yang berbeda.

176 

177| Tingkat | Kapan menggunakannya |

178| :------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

179| `low` | Cadangkan untuk tugas pendek, terbatas, sensitif latensi yang tidak sensitif intelijen |

180| `medium` | Mengurangi penggunaan token untuk pekerjaan sensitif biaya yang dapat menukar beberapa intelijen |

181| `high` | Menyeimbangkan penggunaan token dan intelijen. Gunakan sebagai minimum untuk pekerjaan sensitif intelijen, atau untuk mengurangi pengeluaran token relatif terhadap `xhigh` |

182| `xhigh` | Hasil terbaik untuk sebagian besar tugas coding dan agentic. Default yang direkomendasikan di Opus 4.7 |

183| `max` | Dapat meningkatkan kinerja pada tugas yang menuntut tetapi mungkin menunjukkan hasil yang berkurang dan rentan terhadap overthinking. Uji sebelum mengadopsi secara luas |

184 

185Skala usaha dikalibrasi per model, jadi nama tingkat yang sama tidak mewakili nilai yang sama di seluruh model.

186 

187Untuk penalaran mendalam sekali tanpa mengubah pengaturan sesi Anda, sertakan "ultrathink" dalam prompt Anda. Ini menambahkan instruksi dalam konteks yang memberi tahu model untuk bernalar lebih pada giliran itu; ini tidak mengubah tingkat usaha yang dikirim ke API.

188 

189#### Atur tingkat usaha

190 

191Anda dapat mengubah usaha melalui salah satu dari berikut ini:

192 

193* **`/effort`**: jalankan `/effort` tanpa argumen untuk membuka slider interaktif, `/effort` diikuti dengan nama tingkat untuk menetapkannya secara langsung, atau `/effort auto` untuk mengatur ulang ke default model

194* **Dalam `/model`**: gunakan tombol panah kiri/kanan untuk menyesuaikan slider usaha saat memilih model

195* **Flag `--effort`**: teruskan nama tingkat untuk menetapkannya untuk sesi tunggal saat meluncurkan Claude Code

196* **Variabel lingkungan**: atur `CLAUDE_CODE_EFFORT_LEVEL` ke nama tingkat atau `auto`

197* **Pengaturan**: atur `effortLevel` di file pengaturan Anda

198* **Skill dan subagent frontmatter**: atur `effort` dalam file markdown [skill](/id/skills#frontmatter-reference) atau [subagent](/id/sub-agents#supported-frontmatter-fields) untuk mengganti tingkat usaha ketika skill atau subagent itu berjalan

199 

200Variabel lingkungan mengambil alih semua metode lain, kemudian tingkat yang Anda konfigurasi, kemudian default model. Usaha frontmatter berlaku ketika skill atau subagent itu aktif, mengganti tingkat sesi tetapi bukan variabel lingkungan.

201 

202Slider usaha muncul dalam `/model` ketika model yang didukung dipilih. Tingkat usaha saat ini juga ditampilkan di sebelah logo dan spinner, misalnya "with low effort", sehingga Anda dapat mengkonfirmasi pengaturan mana yang aktif tanpa membuka `/model`.

203 

204#### Penalaran adaptif dan anggaran pemikiran tetap

205 

206Penalaran adaptif membuat pemikiran opsional pada setiap langkah, jadi Claude dapat merespons lebih cepat ke prompt rutin dan menyisihkan pemikiran lebih dalam untuk langkah yang mendapat manfaat darinya. Jika Anda ingin Claude berpikir lebih atau kurang sering daripada tingkat saat ini menghasilkan, Anda dapat mengatakan demikian secara langsung dalam prompt Anda atau dalam `CLAUDE.md`; model merespons panduan itu dalam pengaturan usahanya.

207 

208Opus 4.7 selalu menggunakan penalaran adaptif. Mode anggaran pemikiran tetap dan `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING` tidak berlaku untuk itu.

209 

210Di Opus 4.6 dan Sonnet 4.6, Anda dapat mengatur `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1` untuk kembali ke anggaran pemikiran tetap sebelumnya yang dikendalikan oleh `MAX_THINKING_TOKENS`. Lihat [variabel lingkungan](/id/env-vars).

211 

212### Konteks diperluas

213 

214Opus 4.7, Opus 4.6, dan Sonnet 4.6 mendukung [jendela konteks 1 juta token](https://platform.claude.com/docs/en/build-with-claude/context-windows#1m-token-context-window) untuk sesi panjang dengan basis kode besar.

215 

216Ketersediaan bervariasi menurut model dan paket. Di paket Max, Team, dan Enterprise, Opus secara otomatis ditingkatkan ke konteks 1M tanpa konfigurasi tambahan. Ini berlaku untuk kedua kursi Team Standard dan Team Premium.

217 

218| Paket | Opus dengan konteks 1M | Sonnet dengan konteks 1M |

219| ------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |

220| Max, Team, dan Enterprise | Disertakan dengan langganan | Memerlukan [penggunaan tambahan](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) |

221| Pro | Memerlukan [penggunaan tambahan](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) | Memerlukan [penggunaan tambahan](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans) |

222| API dan pay-as-you-go | Akses penuh | Akses penuh |

223 

224Untuk menonaktifkan konteks 1M sepenuhnya, atur `CLAUDE_CODE_DISABLE_1M_CONTEXT=1`. Ini menghapus varian model 1M dari pemilih model. Lihat [variabel lingkungan](/id/env-vars).

225 

226Jendela konteks 1M menggunakan harga model standar tanpa premium untuk token di luar 200K. Untuk paket di mana konteks diperluas disertakan dengan langganan Anda, penggunaan tetap tercakup oleh langganan Anda. Untuk paket yang mengakses konteks diperluas melalui penggunaan tambahan, token ditagihkan ke penggunaan tambahan.

227 

228Jika akun Anda mendukung konteks 1M, opsi muncul di pemilih model (`/model`) dalam versi terbaru Claude Code. Jika Anda tidak melihatnya, coba mulai ulang sesi Anda.

229 

230Anda juga dapat menggunakan akhiran `[1m]` dengan alias model atau nama model lengkap:

231 

232```bash theme={null}

233# Gunakan alias opus[1m] atau sonnet[1m]

234/model opus[1m]

235/model sonnet[1m]

236 

237# Atau tambahkan [1m] ke nama model lengkap

238/model claude-opus-4-7[1m]

239```

240 

241## Memeriksa model Anda saat ini

242 

243Anda dapat melihat model mana yang sedang Anda gunakan dengan beberapa cara:

244 

2451. Dalam [status line](/id/statusline) (jika dikonfigurasi)

2462. Dalam `/status`, yang juga menampilkan informasi akun Anda.

247 

248## Tambahkan opsi model kustom

249 

250Gunakan `ANTHROPIC_CUSTOM_MODEL_OPTION` untuk menambahkan satu entri kustom ke pemilih `/model` tanpa mengganti alias bawaan. Ini berguna untuk pengujian ID model yang tidak tercantum Claude Code secara default. Untuk deployment gateway LLM, Claude Code mengisi pemilih secara otomatis dari endpoint `/v1/models` gateway, jadi variabel ini diperlukan hanya ketika penemuan tidak mengembalikan model yang Anda inginkan. Lihat [pemilihan model gateway LLM](/id/llm-gateway#model-selection).

251 

252Contoh ini menetapkan ketiga variabel untuk membuat deployment Opus yang dirutekan gateway dapat dipilih:

253 

254```bash theme={null}

255export ANTHROPIC_CUSTOM_MODEL_OPTION="my-gateway/claude-opus-4-7"

256export ANTHROPIC_CUSTOM_MODEL_OPTION_NAME="Opus via Gateway"

257export ANTHROPIC_CUSTOM_MODEL_OPTION_DESCRIPTION="Custom deployment routed through the internal LLM gateway"

258```

259 

260Entri kustom muncul di bagian bawah pemilih `/model`. `ANTHROPIC_CUSTOM_MODEL_OPTION_NAME` dan `ANTHROPIC_CUSTOM_MODEL_OPTION_DESCRIPTION` bersifat opsional. Jika dihilangkan, ID model digunakan sebagai nama dan deskripsi default ke `Custom model (<model-id>)`.

261 

262Claude Code melewati validasi untuk ID model yang ditetapkan dalam `ANTHROPIC_CUSTOM_MODEL_OPTION`, sehingga Anda dapat menggunakan string apa pun yang diterima endpoint API Anda.

263 

264## Variabel lingkungan

265 

266Anda dapat menggunakan variabel lingkungan berikut, yang harus berupa **nama model** lengkap (atau setara untuk penyedia API Anda), untuk mengontrol nama model yang dipetakan alias.

267 

268| Variabel lingkungan | Deskripsi |

269| -------------------------------- | ---------------------------------------------------------------------------------------------------------- |

270| `ANTHROPIC_DEFAULT_OPUS_MODEL` | Model yang digunakan untuk `opus`, atau untuk `opusplan` ketika Plan Mode aktif. |

271| `ANTHROPIC_DEFAULT_SONNET_MODEL` | Model yang digunakan untuk `sonnet`, atau untuk `opusplan` ketika Plan Mode tidak aktif. |

272| `ANTHROPIC_DEFAULT_HAIKU_MODEL` | Model yang digunakan untuk `haiku`, atau [fungsionalitas latar belakang](/id/costs#background-token-usage) |

273| `CLAUDE_CODE_SUBAGENT_MODEL` | Model yang digunakan untuk [subagents](/id/sub-agents) |

274 

275Catatan: `ANTHROPIC_SMALL_FAST_MODEL` sudah usang dan digantikan oleh `ANTHROPIC_DEFAULT_HAIKU_MODEL`.

276 

277### Tetapkan model untuk deployment pihak ketiga

278 

279Saat menerapkan Claude Code melalui [Bedrock](/id/amazon-bedrock), [Vertex AI](/id/google-vertex-ai), atau [Foundry](/id/microsoft-foundry), tetapkan versi model sebelum meluncurkan ke pengguna.

280 

281Tanpa penentapan, Claude Code menggunakan alias model (`sonnet`, `opus`, `haiku`) yang diselesaikan ke versi terbaru. Ketika Anthropic merilis model baru yang belum diaktifkan di akun pengguna, pengguna Bedrock dan Vertex AI melihat pemberitahuan dan kembali ke versi sebelumnya untuk sesi itu, sementara pengguna Foundry melihat kesalahan karena Foundry tidak memiliki pemeriksaan startup yang setara.

282 

283<Warning>

284 Atur ketiga variabel lingkungan model ke ID versi spesifik sebagai bagian dari pengaturan awal Anda. Penentapan memungkinkan Anda mengontrol kapan pengguna Anda pindah ke model baru.

285</Warning>

286 

287Gunakan variabel lingkungan berikut dengan ID model spesifik versi untuk penyedia Anda:

288 

289| Penyedia | Contoh |

290| :-------- | :------------------------------------------------------------------- |

291| Bedrock | `export ANTHROPIC_DEFAULT_OPUS_MODEL='us.anthropic.claude-opus-4-7'` |

292| Vertex AI | `export ANTHROPIC_DEFAULT_OPUS_MODEL='claude-opus-4-7'` |

293| Foundry | `export ANTHROPIC_DEFAULT_OPUS_MODEL='claude-opus-4-7'` |

294 

295Terapkan pola yang sama untuk `ANTHROPIC_DEFAULT_SONNET_MODEL` dan `ANTHROPIC_DEFAULT_HAIKU_MODEL`. Untuk ID model saat ini dan warisan di semua penyedia, lihat [Ikhtisar Model](https://platform.claude.com/docs/en/about-claude/models/overview). Untuk meningkatkan pengguna ke versi model baru, perbarui variabel lingkungan ini dan terapkan kembali.

296 

297Untuk mengaktifkan [konteks diperluas](#extended-context) untuk model yang ditetapkan, tambahkan `[1m]` ke ID model dalam `ANTHROPIC_DEFAULT_OPUS_MODEL` atau `ANTHROPIC_DEFAULT_SONNET_MODEL`:

298 

299```bash theme={null}

300export ANTHROPIC_DEFAULT_OPUS_MODEL='claude-opus-4-7[1m]'

301```

302 

303Akhiran `[1m]` menerapkan jendela konteks 1M ke semua penggunaan alias tersebut, termasuk `opusplan`. Claude Code menghapus akhiran sebelum mengirim ID model ke penyedia Anda. Hanya tambahkan `[1m]` ketika model yang mendasar mendukung konteks 1M, seperti Opus 4.7 atau Sonnet 4.6.

304 

305<Note>

306 Allowlist `settings.availableModels` masih berlaku saat menggunakan penyedia pihak ketiga. Penyaringan cocok pada alias model (`opus`, `sonnet`, `haiku`), bukan ID model spesifik penyedia.

307</Note>

308 

309### Sesuaikan tampilan dan kemampuan model yang ditetapkan

310 

311Ketika Anda menetapkan model pada penyedia pihak ketiga, ID spesifik penyedia muncul apa adanya di pemilih `/model` dan Claude Code mungkin tidak mengenali fitur mana yang didukung model. Anda dapat mengganti nama tampilan dan mendeklarasikan kemampuan dengan variabel lingkungan pendamping untuk setiap model yang ditetapkan.

312 

313Variabel ini berlaku pada penyedia pihak ketiga seperti Bedrock, Vertex AI, dan Foundry. Variabel `_NAME` dan `_DESCRIPTION` juga berlaku ketika `ANTHROPIC_BASE_URL` menunjuk ke [gateway LLM](/id/llm-gateway). Mereka tidak berpengaruh saat menghubungkan langsung ke `api.anthropic.com`.

314 

315| Variabel lingkungan | Deskripsi |

316| ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |

317| `ANTHROPIC_DEFAULT_OPUS_MODEL_NAME` | Nama tampilan untuk model Opus yang ditetapkan di pemilih `/model`. Default ke ID model saat tidak diatur |

318| `ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION` | Deskripsi tampilan untuk model Opus yang ditetapkan di pemilih `/model`. Default ke `Custom Opus model` saat tidak diatur |

319| `ANTHROPIC_DEFAULT_OPUS_MODEL_SUPPORTED_CAPABILITIES` | Daftar kemampuan yang dipisahkan koma yang didukung model Opus yang ditetapkan |

320 

321Akhiran `_NAME`, `_DESCRIPTION`, dan `_SUPPORTED_CAPABILITIES` yang sama tersedia untuk `ANTHROPIC_DEFAULT_SONNET_MODEL`, `ANTHROPIC_DEFAULT_HAIKU_MODEL`, dan `ANTHROPIC_CUSTOM_MODEL_OPTION`.

322 

323Claude Code mengaktifkan fitur seperti [tingkat usaha](#adjust-effort-level) dan [extended thinking](/id/common-workflows#use-extended-thinking-thinking-mode) dengan mencocokkan ID model terhadap pola yang dikenal. ID spesifik penyedia seperti ARN Bedrock atau nama deployment kustom sering kali tidak cocok dengan pola ini, meninggalkan fitur yang didukung dinonaktifkan. Atur `_SUPPORTED_CAPABILITIES` untuk memberi tahu Claude Code fitur mana yang benar-benar didukung model:

324 

325| Nilai kemampuan | Mengaktifkan |

326| ---------------------- | --------------------------------------------------------------------------------------------- |

327| `effort` | [Tingkat usaha](#adjust-effort-level) dan perintah `/effort` |

328| `xhigh_effort` | {/* min-version: 2.1.111 */}Tingkat usaha `xhigh` |

329| `max_effort` | Tingkat usaha `max` |

330| `thinking` | [Extended thinking](/id/common-workflows#use-extended-thinking-thinking-mode) |

331| `adaptive_thinking` | Penalaran adaptif yang secara dinamis mengalokasikan pemikiran berdasarkan kompleksitas tugas |

332| `interleaved_thinking` | Pemikiran antara panggilan alat |

333 

334Ketika `_SUPPORTED_CAPABILITIES` diatur, kemampuan yang tercantum diaktifkan dan kemampuan yang tidak tercantum dinonaktifkan untuk model yang ditetapkan yang cocok. Ketika variabel tidak diatur, Claude Code kembali ke deteksi bawaan berdasarkan ID model.

335 

336Contoh ini menetapkan Opus ke ARN model kustom Bedrock, menetapkan nama yang ramah, dan mendeklarasikan kemampuannya:

337 

338```bash theme={null}

339export ANTHROPIC_DEFAULT_OPUS_MODEL='arn:aws:bedrock:us-east-1:123456789012:custom-model/abc'

340export ANTHROPIC_DEFAULT_OPUS_MODEL_NAME='Opus via Bedrock'

341export ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION='Opus 4.7 routed through a Bedrock custom endpoint'

342export ANTHROPIC_DEFAULT_OPUS_MODEL_SUPPORTED_CAPABILITIES='effort,xhigh_effort,max_effort,thinking,adaptive_thinking,interleaved_thinking'

343```

344 

345### Ganti ID model per versi

346 

347Variabel lingkungan tingkat keluarga di atas mengonfigurasi satu ID model per alias keluarga. Jika Anda perlu memetakan beberapa versi dalam keluarga yang sama ke ID penyedia yang berbeda, gunakan pengaturan `modelOverrides` sebagai gantinya.

348 

349`modelOverrides` memetakan ID model Anthropic individual ke string spesifik penyedia yang dikirim Claude Code ke API penyedia Anda. Ketika pengguna memilih model yang dipetakan di pemilih `/model`, Claude Code menggunakan nilai yang Anda konfigurasi alih-alih default bawaan.

350 

351Ini memungkinkan administrator enterprise untuk merutekan setiap versi model ke ARN profil inferensi Bedrock tertentu, nama versi Vertex AI, atau nama deployment Foundry untuk tata kelola, alokasi biaya, atau perutean regional.

352 

353Atur `modelOverrides` dalam [file pengaturan](/id/settings#settings-files) Anda:

354 

355```json theme={null}

356{

357 "modelOverrides": {

358 "claude-opus-4-7": "arn:aws:bedrock:us-east-2:123456789012:application-inference-profile/opus-prod",

359 "claude-opus-4-6": "arn:aws:bedrock:us-east-2:123456789012:application-inference-profile/opus-46-prod",

360 "claude-sonnet-4-6": "arn:aws:bedrock:us-east-2:123456789012:application-inference-profile/sonnet-prod"

361 }

362}

363```

364 

365Kunci harus berupa ID model Anthropic seperti yang tercantum dalam [Ikhtisar Model](https://platform.claude.com/docs/en/about-claude/models/overview). Untuk ID model bertanggal, sertakan akhiran tanggal persis seperti yang muncul di sana. Kunci yang tidak dikenal diabaikan.

366 

367Penggantian menggantikan ID model bawaan yang mendukung setiap entri di pemilih `/model`. Di Bedrock, penggantian mengambil alih profil inferensi apa pun yang ditemukan Claude Code secara otomatis saat startup. Nilai yang Anda berikan langsung melalui `ANTHROPIC_MODEL`, `--model`, atau variabel lingkungan `ANTHROPIC_DEFAULT_*_MODEL` diteruskan ke penyedia apa adanya dan tidak diubah oleh `modelOverrides`.

368 

369`modelOverrides` bekerja bersama `availableModels`. Allowlist dievaluasi terhadap ID model Anthropic, bukan nilai penggantian, jadi entri seperti `"opus"` dalam `availableModels` terus cocok bahkan ketika versi Opus dipetakan ke ARN.

370 

371### Konfigurasi prompt caching

372 

373Claude Code secara otomatis menggunakan [prompt caching](https://platform.claude.com/docs/en/build-with-claude/prompt-caching) untuk mengoptimalkan kinerja dan mengurangi biaya. Anda dapat menonaktifkan prompt caching secara global atau untuk tingkat model tertentu:

374 

375| Variabel lingkungan | Deskripsi |

376| ------------------------------- | ------------------------------------------------------------------------------------------------------ |

377| `DISABLE_PROMPT_CACHING` | Atur ke `1` untuk menonaktifkan prompt caching untuk semua model (mengambil alih pengaturan per-model) |

378| `DISABLE_PROMPT_CACHING_HAIKU` | Atur ke `1` untuk menonaktifkan prompt caching hanya untuk model Haiku |

379| `DISABLE_PROMPT_CACHING_SONNET` | Atur ke `1` untuk menonaktifkan prompt caching hanya untuk model Sonnet |

380| `DISABLE_PROMPT_CACHING_OPUS` | Atur ke `1` untuk menonaktifkan prompt caching hanya untuk model Opus |

381 

382Variabel lingkungan ini memberi Anda kontrol terperinci atas perilaku prompt caching. Pengaturan global `DISABLE_PROMPT_CACHING` mengambil alih pengaturan spesifik model, memungkinkan Anda dengan cepat menonaktifkan semua caching saat diperlukan. Pengaturan per-model berguna untuk kontrol selektif, seperti saat men-debug model tertentu atau bekerja dengan penyedia cloud yang mungkin memiliki implementasi caching berbeda.

monitoring-usage.md +955 −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# Pemantauan

6 

7> Pelajari cara mengaktifkan dan mengonfigurasi OpenTelemetry untuk Claude Code.

8 

9Lacak penggunaan Claude Code, biaya, dan aktivitas alat di seluruh organisasi Anda dengan mengekspor data telemetri melalui OpenTelemetry (OTel). Claude Code mengekspor metrik sebagai data deret waktu melalui protokol metrik standar, acara melalui protokol log/acara, dan secara opsional distributed traces melalui [protokol traces](#traces-beta). Konfigurasikan backend metrik, log, dan traces Anda agar sesuai dengan persyaratan pemantauan Anda.

10 

11## Mulai cepat

12 

13Konfigurasikan OpenTelemetry menggunakan variabel lingkungan:

14 

15```bash theme={null}

16# 1. Aktifkan telemetri

17export CLAUDE_CODE_ENABLE_TELEMETRY=1

18 

19# 2. Pilih pengekspor (keduanya bersifat opsional - konfigurasikan hanya yang Anda butuhkan)

20export OTEL_METRICS_EXPORTER=otlp # Opsi: otlp, prometheus, console, none

21export OTEL_LOGS_EXPORTER=otlp # Opsi: otlp, console, none

22 

23# 3. Konfigurasikan titik akhir OTLP (untuk pengekspor OTLP)

24export OTEL_EXPORTER_OTLP_PROTOCOL=grpc

25export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317

26 

27# 4. Atur autentikasi (jika diperlukan)

28export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer your-token"

29 

30# 5. Untuk debugging: kurangi interval ekspor

31export OTEL_METRIC_EXPORT_INTERVAL=10000 # 10 detik (default: 60000ms)

32export OTEL_LOGS_EXPORT_INTERVAL=5000 # 5 detik (default: 5000ms)

33 

34# 6. Jalankan Claude Code

35claude

36```

37 

38<Note>

39 Interval ekspor default adalah 60 detik untuk metrik dan 5 detik untuk log. Selama pengaturan, Anda mungkin ingin menggunakan interval yang lebih pendek untuk tujuan debugging. Ingat untuk mengatur ulang ini untuk penggunaan produksi.

40</Note>

41 

42Untuk opsi konfigurasi lengkap, lihat [spesifikasi OpenTelemetry](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/exporter.md#configuration-options).

43 

44## Konfigurasi administrator

45 

46Administrator dapat mengonfigurasi pengaturan OpenTelemetry untuk semua pengguna melalui [file pengaturan terkelola](/id/settings#settings-files). Ini memungkinkan kontrol terpusat pengaturan telemetri di seluruh organisasi. Lihat [prioritas pengaturan](/id/settings#settings-precedence) untuk informasi lebih lanjut tentang bagaimana pengaturan diterapkan.

47 

48Contoh konfigurasi pengaturan terkelola:

49 

50```json theme={null}

51{

52 "env": {

53 "CLAUDE_CODE_ENABLE_TELEMETRY": "1",

54 "OTEL_METRICS_EXPORTER": "otlp",

55 "OTEL_LOGS_EXPORTER": "otlp",

56 "OTEL_EXPORTER_OTLP_PROTOCOL": "grpc",

57 "OTEL_EXPORTER_OTLP_ENDPOINT": "http://collector.example.com:4317",

58 "OTEL_EXPORTER_OTLP_HEADERS": "Authorization=Bearer example-token"

59 }

60}

61```

62 

63<Note>

64 Pengaturan terkelola dapat didistribusikan melalui MDM (Mobile Device Management) atau solusi manajemen perangkat lainnya. Variabel lingkungan yang ditentukan dalam file pengaturan terkelola memiliki prioritas tinggi dan tidak dapat ditimpa oleh pengguna.

65</Note>

66 

67## Detail konfigurasi

68 

69### Variabel konfigurasi umum

70 

71| Variabel Lingkungan | Deskripsi | Nilai Contoh |

72| --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |

73| `CLAUDE_CODE_ENABLE_TELEMETRY` | Mengaktifkan pengumpulan telemetri (diperlukan) | `1` |

74| `OTEL_METRICS_EXPORTER` | Jenis pengekspor metrik, dipisahkan koma. Gunakan `none` untuk menonaktifkan | `console`, `otlp`, `prometheus`, `none` |

75| `OTEL_LOGS_EXPORTER` | Jenis pengekspor log/acara, dipisahkan koma. Gunakan `none` untuk menonaktifkan | `console`, `otlp`, `none` |

76| `OTEL_EXPORTER_OTLP_PROTOCOL` | Protokol untuk pengekspor OTLP, berlaku untuk semua sinyal | `grpc`, `http/json`, `http/protobuf` |

77| `OTEL_EXPORTER_OTLP_ENDPOINT` | Titik akhir pengumpul OTLP untuk semua sinyal | `http://localhost:4317` |

78| `OTEL_EXPORTER_OTLP_METRICS_PROTOCOL` | Protokol untuk metrik, menimpa pengaturan umum | `grpc`, `http/json`, `http/protobuf` |

79| `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` | Titik akhir metrik OTLP, menimpa pengaturan umum | `http://localhost:4318/v1/metrics` |

80| `OTEL_EXPORTER_OTLP_LOGS_PROTOCOL` | Protokol untuk log, menimpa pengaturan umum | `grpc`, `http/json`, `http/protobuf` |

81| `OTEL_EXPORTER_OTLP_LOGS_ENDPOINT` | Titik akhir log OTLP, menimpa pengaturan umum | `http://localhost:4318/v1/logs` |

82| `OTEL_EXPORTER_OTLP_HEADERS` | Header autentikasi untuk OTLP | `Authorization=Bearer token` |

83| `OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY` | Kunci klien untuk autentikasi mTLS | Jalur ke file kunci klien |

84| `OTEL_EXPORTER_OTLP_METRICS_CLIENT_CERTIFICATE` | Sertifikat klien untuk autentikasi mTLS | Jalur ke file sertifikat klien |

85| `OTEL_METRIC_EXPORT_INTERVAL` | Interval ekspor dalam milidetik (default: 60000) | `5000`, `60000` |

86| `OTEL_LOGS_EXPORT_INTERVAL` | Interval ekspor log dalam milidetik (default: 5000) | `1000`, `10000` |

87| `OTEL_LOG_USER_PROMPTS` | Aktifkan pencatatan konten prompt pengguna (default: dinonaktifkan) | `1` untuk mengaktifkan |

88| `OTEL_LOG_TOOL_DETAILS` | Aktifkan pencatatan parameter alat dan argumen input dalam acara alat dan atribut span trace: perintah Bash, nama server MCP dan alat, nama skill, dan input alat. Juga mengaktifkan nama perintah custom, plugin, dan MCP pada acara `user_prompt` (default: dinonaktifkan) | `1` untuk mengaktifkan |

89| `OTEL_LOG_TOOL_CONTENT` | Aktifkan pencatatan konten input dan output alat dalam acara span (default: dinonaktifkan). Memerlukan [tracing](#traces-beta). Konten dipotong pada 60 KB | `1` untuk mengaktifkan |

90| `OTEL_LOG_RAW_API_BODIES` | Emit badan permintaan dan respons JSON API Anthropic Messages lengkap sebagai acara log `api_request_body` / `api_response_body` (default: dinonaktifkan). Badan mencakup seluruh riwayat percakapan. Mengaktifkan ini menyiratkan persetujuan untuk semua yang akan diungkapkan oleh `OTEL_LOG_USER_PROMPTS`, `OTEL_LOG_TOOL_DETAILS`, dan `OTEL_LOG_TOOL_CONTENT` | `1` untuk badan inline dipotong pada 60 KB, atau `file:<dir>` untuk badan tidak dipotong di disk dengan pointer `body_ref` dalam acara |

91| `OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE` | Preferensi temporalitas metrik (default: `delta`). Atur ke `cumulative` jika backend Anda mengharapkan temporalitas kumulatif | `delta`, `cumulative` |

92| `CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS` | Interval untuk menyegarkan header dinamis (default: 1740000ms / 29 menit) | `900000` |

93 

94### Kontrol kardinalitas metrik

95 

96Variabel lingkungan berikut mengontrol atribut mana yang disertakan dalam metrik untuk mengelola kardinalitas:

97 

98| Variabel Lingkungan | Deskripsi | Nilai Default | Contoh untuk Menonaktifkan |

99| ----------------------------------- | --------------------------------------------------------------------- | ------------- | -------------------------- |

100| `OTEL_METRICS_INCLUDE_SESSION_ID` | Sertakan atribut session.id dalam metrik | `true` | `false` |

101| `OTEL_METRICS_INCLUDE_VERSION` | Sertakan atribut app.version dalam metrik | `false` | `true` |

102| `OTEL_METRICS_INCLUDE_ACCOUNT_UUID` | Sertakan atribut user.account\_uuid dan user.account\_id dalam metrik | `true` | `false` |

103 

104Variabel-variabel ini membantu mengontrol kardinalitas metrik, yang mempengaruhi persyaratan penyimpanan dan kinerja kueri di backend metrik Anda. Kardinalitas yang lebih rendah umumnya berarti kinerja yang lebih baik dan biaya penyimpanan yang lebih rendah tetapi data yang kurang granular untuk analisis.

105 

106### Traces (beta)

107 

108Distributed tracing mengekspor spans yang menghubungkan setiap prompt pengguna ke permintaan API dan eksekusi alat yang dipicunya, sehingga Anda dapat melihat permintaan lengkap sebagai satu trace di backend tracing Anda.

109 

110Tracing dimatikan secara default. Untuk mengaktifkannya, atur `CLAUDE_CODE_ENABLE_TELEMETRY=1` dan `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1`, kemudian atur `OTEL_TRACES_EXPORTER` untuk memilih tempat spans dikirim. Traces menggunakan kembali [konfigurasi OTLP umum](#common-configuration-variables) untuk titik akhir, protokol, dan header.

111 

112| Variabel Lingkungan | Deskripsi | Nilai Contoh |

113| ------------------------------------- | ---------------------------------------------------------------------------------- | ------------------------------------ |

114| `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA` | Aktifkan span tracing (diperlukan). `ENABLE_ENHANCED_TELEMETRY_BETA` juga diterima | `1` |

115| `OTEL_TRACES_EXPORTER` | Jenis pengekspor traces, dipisahkan koma. Gunakan `none` untuk menonaktifkan | `console`, `otlp`, `none` |

116| `OTEL_EXPORTER_OTLP_TRACES_PROTOCOL` | Protokol untuk traces, menimpa `OTEL_EXPORTER_OTLP_PROTOCOL` | `grpc`, `http/json`, `http/protobuf` |

117| `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` | Titik akhir traces OTLP, menimpa `OTEL_EXPORTER_OTLP_ENDPOINT` | `http://localhost:4318/v1/traces` |

118| `OTEL_TRACES_EXPORT_INTERVAL` | Interval ekspor batch span dalam milidetik (default: 5000) | `1000`, `10000` |

119 

120Spans menyunting teks prompt pengguna, detail input alat, dan konten alat secara default. Atur `OTEL_LOG_USER_PROMPTS=1`, `OTEL_LOG_TOOL_DETAILS=1`, dan `OTEL_LOG_TOOL_CONTENT=1` untuk menyertakannya.

121 

122Saat tracing aktif, subproses Bash dan PowerShell secara otomatis mewarisi variabel lingkungan `TRACEPARENT` yang berisi konteks trace W3C dari span eksekusi alat yang aktif. Ini memungkinkan subproses apa pun yang membaca `TRACEPARENT` untuk membuat parent spans-nya di bawah trace yang sama, memungkinkan distributed tracing end-to-end melalui skrip dan perintah yang dijalankan Claude.

123 

124Dalam sesi Agent SDK dan non-interaktif yang dimulai dengan `-p`, Claude Code juga membaca `TRACEPARENT` dan `TRACESTATE` dari lingkungannya sendiri saat memulai setiap span interaksi. Ini memungkinkan proses embedding untuk melewatkan konteks trace W3C aktifnya ke dalam subproses sehingga spans Claude Code muncul sebagai anak dari distributed trace pemanggil. Sesi interaktif mengabaikan `TRACEPARENT` inbound untuk menghindari secara tidak sengaja mewarisi nilai ambient dari lingkungan CI atau container.

125 

126#### Hierarki span

127 

128Setiap prompt pengguna memulai span root `claude_code.interaction`. Panggilan API, panggilan alat, dan eksekusi hook dicatat sebagai anak-anaknya. Spans alat memiliki dua span anak mereka sendiri: satu untuk waktu yang dihabiskan menunggu keputusan izin dan satu untuk eksekusi itu sendiri. Ketika alat Task menghasilkan subagent, spans API dan alat subagent bersarang di bawah span `claude_code.tool` induk.

129 

130```text theme={null}

131claude_code.interaction

132├── claude_code.llm_request

133├── claude_code.hook (memerlukan detailed beta tracing)

134└── claude_code.tool

135 ├── claude_code.tool.blocked_on_user

136 ├── claude_code.tool.execution

137 └── (Task tool) subagent claude_code.llm_request / claude_code.tool spans

138```

139 

140Dalam sesi Agent SDK dan `claude -p`, `claude_code.interaction` itu sendiri menjadi anak dari span pemanggil saat `TRACEPARENT` diatur dalam lingkungan.

141 

142#### Atribut span

143 

144Setiap span membawa [atribut standar](#standard-attributes) ditambah atribut `span.type` yang cocok dengan namanya. Tabel di bawah mencantumkan atribut tambahan yang diatur pada setiap span. Spans `llm_request`, `tool.execution`, dan `hook` menetapkan status OpenTelemetry `ERROR` saat mereka mencatat kegagalan; span lainnya selalu berakhir dengan status `UNSET`.

145 

146**`claude_code.interaction`**

147 

148| Atribut | Deskripsi | Gated by |

149| ------------------------- | ---------------------------------------------------------- | ----------------------- |

150| `user_prompt` | Teks prompt. Nilai adalah `<REDACTED>` kecuali gate diatur | `OTEL_LOG_USER_PROMPTS` |

151| `user_prompt_length` | Panjang prompt dalam karakter | |

152| `interaction.sequence` | Penghitung berbasis 1 dari interaksi dalam sesi ini | |

153| `interaction.duration_ms` | Durasi wall-clock dari giliran | |

154 

155**`claude_code.llm_request`**

156 

157| Atribut | Deskripsi | Gated by |

158| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | -------- |

159| `model` | Pengidentifikasi model | |

160| `gen_ai.system` | Selalu `anthropic`. Konvensi semantik GenAI OpenTelemetry | |

161| `gen_ai.request.model` | Nilai yang sama dengan `model`. Konvensi semantik GenAI OpenTelemetry | |

162| `query_source` | Subsistem yang mengeluarkan permintaan, seperti `repl_main_thread` atau nama subagent | |

163| `speed` | `fast` atau `normal` | |

164| `llm_request.context` | `interaction`, `tool`, atau `standalone` tergantung pada span induk | |

165| `duration_ms` | Durasi wall-clock termasuk retry | |

166| `ttft_ms` | Waktu ke token pertama dalam milidetik | |

167| `input_tokens` | Jumlah token input dari blok penggunaan API | |

168| `output_tokens` | Jumlah token output | |

169| `cache_read_tokens` | Token yang dibaca dari prompt cache | |

170| `cache_creation_tokens` | Token yang ditulis ke prompt cache | |

171| `request_id` | ID permintaan API Anthropic dari header respons `request-id` | |

172| `gen_ai.response.id` | Nilai yang sama dengan `request_id`. Konvensi semantik GenAI OpenTelemetry | |

173| `client_request_id` | `x-client-request-id` yang dihasilkan klien dari upaya terakhir | |

174| `attempt` | Total upaya yang dilakukan untuk permintaan ini | |

175| `success` | `true` atau `false` | |

176| `status_code` | Kode status HTTP saat permintaan gagal | |

177| `error` | Pesan kesalahan saat permintaan gagal | |

178| `response.has_tool_call` | `true` saat respons berisi blok tool-use | |

179| `stop_reason` | API response `stop_reason`, seperti `end_turn`, `tool_use`, `max_tokens`, `stop_sequence`, `pause_turn`, atau `refusal` | |

180| `gen_ai.response.finish_reasons` | Nilai yang sama dengan `stop_reason`, dibungkus dalam array string. Konvensi semantik GenAI OpenTelemetry | |

181 

182Setiap upaya retry juga dicatat sebagai acara span `gen_ai.request.attempt` dengan atribut `attempt` dan `client_request_id`.

183 

184**`claude_code.tool`**

185 

186| Atribut | Deskripsi | Gated by |

187| --------------- | --------------------------------------------------- | ----------------------- |

188| `tool_name` | Nama alat | |

189| `duration_ms` | Durasi wall-clock termasuk tunggu izin dan eksekusi | |

190| `result_tokens` | Ukuran token perkiraan dari hasil alat | |

191| `file_path` | Jalur file target untuk alat Read, Edit, dan Write | `OTEL_LOG_TOOL_DETAILS` |

192| `full_command` | String perintah untuk alat Bash | `OTEL_LOG_TOOL_DETAILS` |

193| `skill_name` | Nama skill untuk alat Skill | `OTEL_LOG_TOOL_DETAILS` |

194| `subagent_type` | Jenis subagent untuk alat Task | `OTEL_LOG_TOOL_DETAILS` |

195 

196Saat `OTEL_LOG_TOOL_CONTENT=1`, span ini juga mencatat acara span `tool.output` yang atributnya berisi badan input dan output alat, dipotong pada 60 KB per atribut.

197 

198**`claude_code.tool.blocked_on_user`**

199 

200| Atribut | Deskripsi | Gated by |

201| ------------- | -------------------------------------------------------------------------------- | -------- |

202| `duration_ms` | Waktu yang dihabiskan menunggu keputusan izin | |

203| `decision` | `accept` atau `reject` | |

204| `source` | Sumber keputusan, cocok dengan acara [Tool decision event](#tool-decision-event) | |

205 

206**`claude_code.tool.execution`**

207 

208| Atribut | Deskripsi | Gated by |

209| ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------- |

210| `duration_ms` | Waktu yang dihabiskan menjalankan badan alat | |

211| `success` | `true` atau `false` | |

212| `error` | String kategori kesalahan saat eksekusi gagal, seperti `Error:ENOENT` atau `ShellError`. Berisi pesan kesalahan lengkap sebagai gantinya saat gate diatur | `OTEL_LOG_TOOL_DETAILS` |

213 

214**`claude_code.hook`**

215 

216Span ini dipancarkan hanya saat detailed beta tracing aktif, yang memerlukan `ENABLE_BETA_TRACING_DETAILED=1` dan `BETA_TRACING_ENDPOINT` selain konfigurasi pengekspor trace di atas. Dalam sesi CLI interaktif, ini juga memerlukan organisasi Anda untuk berada dalam daftar putih untuk fitur ini. Sesi Agent SDK dan non-interaktif `-p` tidak gated. Ini tidak dipancarkan saat hanya `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA` yang diatur.

217 

218| Atribut | Deskripsi | Gated by |

219| ------------------------ | ------------------------------------------------- | ----------------------- |

220| `hook_event` | Jenis acara hook, seperti `PreToolUse` | |

221| `hook_name` | Nama hook lengkap, seperti `PreToolUse:Write` | |

222| `num_hooks` | Jumlah perintah hook yang cocok dieksekusi | |

223| `hook_definitions` | Konfigurasi hook yang diserialisasi JSON | `OTEL_LOG_TOOL_DETAILS` |

224| `duration_ms` | Durasi wall-clock dari semua hook yang cocok | |

225| `num_success` | Jumlah hook yang selesai dengan sukses | |

226| `num_blocking` | Jumlah hook yang mengembalikan keputusan blocking | |

227| `num_non_blocking_error` | Jumlah hook yang gagal tanpa blocking | |

228| `num_cancelled` | Jumlah hook yang dibatalkan sebelum selesai | |

229 

230<Note>

231 Atribut tambahan yang mengandung konten seperti `new_context`, `system_prompt_preview`, `user_system_prompt`, `tool_input`, dan `response.model_output` dipancarkan hanya saat detailed beta tracing aktif. Mereka bukan bagian dari skema span yang stabil. `user_system_prompt` juga memerlukan `OTEL_LOG_USER_PROMPTS=1`. Ini membawa hanya teks prompt sistem yang Anda berikan melalui opsi SDK `systemPrompt` atau flag `--system-prompt` dan `--append-system-prompt`, dipotong pada 60 KB, dan dipancarkan sekali per sesi daripada per permintaan.

232</Note>

233 

234### Header dinamis

235 

236Untuk lingkungan perusahaan yang memerlukan autentikasi dinamis, Anda dapat mengonfigurasi skrip untuk menghasilkan header secara dinamis:

237 

238#### Konfigurasi pengaturan

239 

240Tambahkan ke `.claude/settings.json` Anda:

241 

242```json theme={null}

243{

244 "otelHeadersHelper": "/bin/generate_opentelemetry_headers.sh"

245}

246```

247 

248#### Persyaratan skrip

249 

250Skrip harus menampilkan JSON yang valid dengan pasangan kunci-nilai string yang mewakili header HTTP:

251 

252```bash theme={null}

253#!/bin/bash

254# Contoh: Header ganda

255echo "{\"Authorization\": \"Bearer $(get-token.sh)\", \"X-API-Key\": \"$(get-api-key.sh)\"}"

256```

257 

258#### Perilaku penyegaran

259 

260Skrip pembantu header berjalan saat startup dan secara berkala setelahnya untuk mendukung penyegaran token. Secara default, skrip berjalan setiap 29 menit. Sesuaikan interval dengan variabel lingkungan `CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS`.

261 

262### Dukungan organisasi multi-tim

263 

264Organisasi dengan beberapa tim atau departemen dapat menambahkan atribut khusus untuk membedakan antara kelompok yang berbeda menggunakan variabel lingkungan `OTEL_RESOURCE_ATTRIBUTES`:

265 

266```bash theme={null}

267# Tambahkan atribut khusus untuk identifikasi tim

268export OTEL_RESOURCE_ATTRIBUTES="department=engineering,team.id=platform,cost_center=eng-123"

269```

270 

271Atribut khusus ini akan disertakan dalam semua metrik dan acara, memungkinkan Anda untuk:

272 

273* Filter metrik berdasarkan tim atau departemen

274* Lacak biaya per pusat biaya

275* Buat dasbor khusus tim

276* Atur peringatan untuk tim tertentu

277 

278<Warning>

279 **Persyaratan pemformatan penting untuk OTEL\_RESOURCE\_ATTRIBUTES:**

280 

281 Variabel lingkungan `OTEL_RESOURCE_ATTRIBUTES` menggunakan pasangan kunci=nilai yang dipisahkan koma dengan persyaratan pemformatan yang ketat:

282 

283 * **Tidak ada spasi yang diizinkan**: Nilai tidak dapat berisi spasi. Misalnya, `user.organizationName=My Company` tidak valid

284 * **Format**: Harus berupa pasangan kunci=nilai yang dipisahkan koma: `key1=value1,key2=value2`

285 * **Karakter yang diizinkan**: Hanya karakter US-ASCII yang tidak termasuk karakter kontrol, spasi, tanda kutip ganda, koma, titik koma, dan garis miring terbalik

286 * **Karakter khusus**: Karakter di luar rentang yang diizinkan harus dikodekan persen

287 

288 **Contoh:**

289 

290 ```bash theme={null}

291 # ❌ Tidak valid - berisi spasi

292 export OTEL_RESOURCE_ATTRIBUTES="org.name=John's Organization"

293 

294 # ✅ Valid - gunakan garis bawah atau camelCase sebagai gantinya

295 export OTEL_RESOURCE_ATTRIBUTES="org.name=Johns_Organization"

296 export OTEL_RESOURCE_ATTRIBUTES="org.name=JohnsOrganization"

297 

298 # ✅ Valid - kodekan persen karakter khusus jika diperlukan

299 export OTEL_RESOURCE_ATTRIBUTES="org.name=John%27s%20Organization"

300 ```

301 

302 Catatan: membungkus nilai dalam tanda kutip tidak menghindari spasi. Misalnya, `org.name="My Company"` menghasilkan nilai literal `"My Company"` (dengan tanda kutip disertakan), bukan `My Company`.

303</Warning>

304 

305### Konfigurasi contoh

306 

307Atur variabel lingkungan ini sebelum menjalankan `claude`. Setiap blok menunjukkan konfigurasi lengkap untuk pengekspor atau skenario penerapan yang berbeda:

308 

309```bash theme={null}

310# Debugging konsol (interval 1 detik)

311export CLAUDE_CODE_ENABLE_TELEMETRY=1

312export OTEL_METRICS_EXPORTER=console

313export OTEL_METRIC_EXPORT_INTERVAL=1000

314 

315# OTLP/gRPC

316export CLAUDE_CODE_ENABLE_TELEMETRY=1

317export OTEL_METRICS_EXPORTER=otlp

318export OTEL_EXPORTER_OTLP_PROTOCOL=grpc

319export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317

320 

321# Prometheus

322export CLAUDE_CODE_ENABLE_TELEMETRY=1

323export OTEL_METRICS_EXPORTER=prometheus

324 

325# Pengekspor ganda

326export CLAUDE_CODE_ENABLE_TELEMETRY=1

327export OTEL_METRICS_EXPORTER=console,otlp

328export OTEL_EXPORTER_OTLP_PROTOCOL=http/json

329 

330# Titik akhir/backend berbeda untuk metrik dan log

331export CLAUDE_CODE_ENABLE_TELEMETRY=1

332export OTEL_METRICS_EXPORTER=otlp

333export OTEL_LOGS_EXPORTER=otlp

334export OTEL_EXPORTER_OTLP_METRICS_PROTOCOL=http/protobuf

335export OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=http://metrics.example.com:4318

336export OTEL_EXPORTER_OTLP_LOGS_PROTOCOL=grpc

337export OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=http://logs.example.com:4317

338 

339# Hanya metrik (tanpa acara/log)

340export CLAUDE_CODE_ENABLE_TELEMETRY=1

341export OTEL_METRICS_EXPORTER=otlp

342export OTEL_EXPORTER_OTLP_PROTOCOL=grpc

343export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317

344 

345# Hanya acara/log (tanpa metrik)

346export CLAUDE_CODE_ENABLE_TELEMETRY=1

347export OTEL_LOGS_EXPORTER=otlp

348export OTEL_EXPORTER_OTLP_PROTOCOL=grpc

349export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317

350```

351 

352## Metrik dan acara yang tersedia

353 

354### Atribut standar

355 

356Semua metrik dan acara berbagi atribut standar ini:

357 

358| Atribut | Deskripsi | Dikendalikan Oleh |

359| ------------------- | ---------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------- |

360| `session.id` | Pengidentifikasi sesi unik | `OTEL_METRICS_INCLUDE_SESSION_ID` (default: true) |

361| `app.version` | Versi Claude Code saat ini | `OTEL_METRICS_INCLUDE_VERSION` (default: false) |

362| `organization.id` | UUID organisasi (saat diautentikasi) | Selalu disertakan saat tersedia |

363| `user.account_uuid` | UUID akun (saat diautentikasi) | `OTEL_METRICS_INCLUDE_ACCOUNT_UUID` (default: true) |

364| `user.account_id` | ID akun dalam format yang ditandai sesuai dengan API admin Anthropic (saat diautentikasi), seperti `user_01BWBeN28...` | `OTEL_METRICS_INCLUDE_ACCOUNT_UUID` (default: true) |

365| `user.id` | Pengidentifikasi perangkat/instalasi anonim, dihasilkan per instalasi Claude Code | Selalu disertakan |

366| `user.email` | Alamat email pengguna (saat diautentikasi melalui OAuth) | Selalu disertakan saat tersedia |

367| `terminal.type` | Jenis terminal, seperti `iTerm.app`, `vscode`, `cursor`, atau `tmux` | Selalu disertakan saat terdeteksi |

368 

369Acara juga menyertakan atribut berikut. Ini tidak pernah dilampirkan pada metrik karena akan menyebabkan kardinalitas tak terbatas:

370 

371* `prompt.id`: UUID yang menghubungkan prompt pengguna dengan semua acara berikutnya hingga prompt berikutnya. Lihat [Atribut korelasi acara](#event-correlation-attributes).

372* `workspace.host_paths`: direktori ruang kerja host yang dipilih di aplikasi desktop, sebagai array string

373 

374### Metrik

375 

376Claude Code mengekspor metrik berikut:

377 

378| Nama Metrik | Deskripsi | Unit |

379| ------------------------------------- | ------------------------------------------ | ------ |

380| `claude_code.session.count` | Jumlah sesi CLI yang dimulai | count |

381| `claude_code.lines_of_code.count` | Jumlah baris kode yang dimodifikasi | count |

382| `claude_code.pull_request.count` | Jumlah permintaan tarik yang dibuat | count |

383| `claude_code.commit.count` | Jumlah komit git yang dibuat | count |

384| `claude_code.cost.usage` | Biaya sesi Claude Code | USD |

385| `claude_code.token.usage` | Jumlah token yang digunakan | tokens |

386| `claude_code.code_edit_tool.decision` | Jumlah keputusan izin alat pengeditan kode | count |

387| `claude_code.active_time.total` | Total waktu aktif dalam detik | s |

388 

389### Detail metrik

390 

391Setiap metrik mencakup atribut standar yang tercantum di atas. Metrik dengan atribut khusus konteks tambahan dicatat di bawah ini.

392 

393#### Penghitung sesi

394 

395Ditingkatkan pada awal setiap sesi.

396 

397**Atribut**:

398 

399* Semua [atribut standar](#standard-attributes)

400* `start_type`: Bagaimana sesi dimulai. Salah satu dari `"fresh"`, `"resume"`, atau `"continue"`

401 

402#### Penghitung baris kode

403 

404Ditingkatkan saat kode ditambahkan atau dihapus.

405 

406**Atribut**:

407 

408* Semua [atribut standar](#standard-attributes)

409* `type`: (`"added"`, `"removed"`)

410 

411#### Penghitung permintaan tarik

412 

413Ditingkatkan saat membuat permintaan tarik melalui Claude Code.

414 

415**Atribut**:

416 

417* Semua [atribut standar](#standard-attributes)

418 

419#### Penghitung komit

420 

421Ditingkatkan saat membuat komit git melalui Claude Code.

422 

423**Atribut**:

424 

425* Semua [atribut standar](#standard-attributes)

426 

427#### Penghitung biaya

428 

429Ditingkatkan setelah setiap permintaan API.

430 

431**Atribut**:

432 

433* Semua [atribut standar](#standard-attributes)

434* `model`: Pengidentifikasi model (misalnya, "claude-sonnet-4-6")

435* `query_source`: Kategori subsistem yang mengeluarkan permintaan. Salah satu dari `"main"`, `"subagent"`, atau `"auxiliary"`

436* `speed`: `"fast"` saat permintaan menggunakan mode cepat. Tidak ada sebaliknya

437* `effort`: [Tingkat effort](/id/model-config#adjust-effort-level) yang diterapkan pada permintaan: `"low"`, `"medium"`, `"high"`, `"xhigh"`, atau `"max"`. Tidak ada saat model tidak mendukung effort.

438 

439#### Penghitung token

440 

441Ditingkatkan setelah setiap permintaan API.

442 

443**Atribut**:

444 

445* Semua [atribut standar](#standard-attributes)

446* `type`: (`"input"`, `"output"`, `"cacheRead"`, `"cacheCreation"`)

447* `model`: Pengidentifikasi model (misalnya, "claude-sonnet-4-6")

448* `query_source`: Kategori subsistem yang mengeluarkan permintaan. Salah satu dari `"main"`, `"subagent"`, atau `"auxiliary"`

449* `speed`: `"fast"` saat permintaan menggunakan mode cepat. Tidak ada sebaliknya

450* `effort`: [Tingkat effort](/id/model-config#adjust-effort-level) yang diterapkan pada permintaan. Lihat [Penghitung biaya](#cost-counter) untuk detail.

451 

452#### Penghitung keputusan alat pengeditan kode

453 

454Ditingkatkan saat pengguna menerima atau menolak penggunaan alat Edit, Write, atau NotebookEdit.

455 

456**Atribut**:

457 

458* Semua [atribut standar](#standard-attributes)

459* `tool_name`: Nama alat (`"Edit"`, `"Write"`, `"NotebookEdit"`)

460* `decision`: Keputusan pengguna (`"accept"`, `"reject"`)

461* `source`: Sumber keputusan. Salah satu dari `"config"`, `"hook"`, `"user_permanent"`, `"user_temporary"`, `"user_abort"`, atau `"user_reject"`. Lihat [Acara keputusan alat](#tool-decision-event) untuk mengetahui apa arti setiap nilai.

462* `language`: Bahasa pemrograman file yang diedit, seperti `"TypeScript"`, `"Python"`, `"JavaScript"`, atau `"Markdown"`. Mengembalikan `"unknown"` untuk ekstensi file yang tidak dikenali.

463 

464#### Penghitung waktu aktif

465 

466Melacak waktu aktual yang dihabiskan secara aktif menggunakan Claude Code, tidak termasuk waktu idle. Metrik ini ditingkatkan selama interaksi pengguna (mengetik, membaca respons) dan selama pemrosesan CLI (eksekusi alat, pembuatan respons AI).

467 

468**Atribut**:

469 

470* Semua [atribut standar](#standard-attributes)

471* `type`: `"user"` untuk interaksi keyboard, `"cli"` untuk eksekusi alat dan respons AI

472 

473### Acara

474 

475Claude Code mengekspor acara berikut melalui log/acara OpenTelemetry (saat `OTEL_LOGS_EXPORTER` dikonfigurasi):

476 

477#### Atribut korelasi acara

478 

479Saat pengguna mengirimkan prompt, Claude Code dapat membuat beberapa panggilan API dan menjalankan beberapa alat. Atribut `prompt.id` memungkinkan Anda menghubungkan semua acara tersebut kembali ke prompt tunggal yang memicunya.

480 

481| Atribut | Deskripsi |

482| ----------- | -------------------------------------------------------------------------------------------------------------- |

483| `prompt.id` | Pengidentifikasi UUID v4 yang menghubungkan semua acara yang dihasilkan saat memproses prompt pengguna tunggal |

484 

485Untuk melacak semua aktivitas yang dipicu oleh prompt tunggal, filter acara Anda berdasarkan nilai `prompt.id` tertentu. Ini mengembalikan acara user\_prompt, acara api\_request apa pun, dan acara tool\_result apa pun yang terjadi saat memproses prompt tersebut.

486 

487<Note>

488 `prompt.id` sengaja dikecualikan dari metrik karena setiap prompt menghasilkan ID unik, yang akan membuat jumlah deret waktu terus bertambah. Gunakan untuk analisis tingkat acara dan jejak audit saja.

489</Note>

490 

491#### Acara prompt pengguna

492 

493Dicatat saat pengguna mengirimkan prompt.

494 

495**Nama Acara**: `claude_code.user_prompt`

496 

497**Atribut**:

498 

499* Semua [atribut standar](#standard-attributes)

500* `event.name`: `"user_prompt"`

501* `event.timestamp`: Stempel waktu ISO 8601

502* `event.sequence`: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesi

503* `prompt_length`: Panjang prompt

504* `prompt`: Konten prompt (diredaksi secara default, aktifkan dengan `OTEL_LOG_USER_PROMPTS=1`)

505* `command_name`: Nama perintah saat prompt memanggil satu. Nama perintah built-in dan bundled seperti `compact` atau `debug` dipancarkan apa adanya; alias seperti `reset` dipancarkan sebagai yang diketik daripada nama kanonik. Nama perintah custom, plugin, dan MCP runtuh menjadi `custom` atau `mcp` kecuali `OTEL_LOG_TOOL_DETAILS=1` diatur

506* `command_source`: Asal perintah saat ada: `builtin`, `custom`, atau `mcp`. Perintah yang disediakan plugin melaporkan sebagai `custom`

507 

508#### Acara hasil alat

509 

510Dicatat saat alat menyelesaikan eksekusi.

511 

512**Nama Acara**: `claude_code.tool_result`

513 

514**Atribut**:

515 

516* Semua [atribut standar](#standard-attributes)

517* `event.name`: `"tool_result"`

518* `event.timestamp`: Stempel waktu ISO 8601

519* `event.sequence`: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesi

520* `tool_name`: Nama alat

521* `tool_use_id`: Pengidentifikasi unik untuk invokasi alat ini. Cocok dengan `tool_use_id` yang diteruskan ke hooks, memungkinkan korelasi antara acara OTel dan data yang ditangkap hook.

522* `success`: `"true"` atau `"false"`

523* `duration_ms`: Waktu eksekusi dalam milidetik

524* `error_type`: String kategori kesalahan saat alat gagal, seperti `"Error:ENOENT"` atau `"ShellError"`

525* `error` (saat `OTEL_LOG_TOOL_DETAILS=1`): Pesan kesalahan lengkap saat alat gagal

526* `decision_type`: Baik `"accept"` atau `"reject"`

527* `decision_source`: Sumber keputusan. Salah satu dari `"config"`, `"hook"`, `"user_permanent"`, `"user_temporary"`, `"user_abort"`, atau `"user_reject"`. Lihat [Acara keputusan alat](#tool-decision-event) untuk mengetahui apa arti setiap nilai.

528* `tool_input_size_bytes`: Ukuran input alat yang diserialisasi JSON dalam byte

529* `tool_result_size_bytes`: Ukuran hasil alat dalam byte

530* `mcp_server_scope`: Pengidentifikasi cakupan server MCP (untuk alat MCP)

531* `tool_parameters` (saat `OTEL_LOG_TOOL_DETAILS=1`): String JSON yang berisi parameter khusus alat:

532 * Untuk alat Bash: mencakup `bash_command`, `full_command`, `timeout`, `description`, `dangerouslyDisableSandbox`, dan `git_commit_id` (SHA komit, saat perintah `git commit` berhasil)

533 * Untuk alat MCP: mencakup `mcp_server_name`, `mcp_tool_name`

534 * Untuk alat Skill: mencakup `skill_name`

535 * Untuk alat Task: mencakup `subagent_type`

536* `tool_input` (saat `OTEL_LOG_TOOL_DETAILS=1`): Argumen alat yang diserialisasi JSON. Nilai individual di atas 512 karakter dipotong, dan muatan penuh dibatasi hingga \~4 K karakter. Berlaku untuk semua alat termasuk alat MCP.

537 

538#### Acara permintaan API

539 

540Dicatat untuk setiap permintaan API ke Claude.

541 

542**Nama Acara**: `claude_code.api_request`

543 

544**Atribut**:

545 

546* Semua [atribut standar](#standard-attributes)

547* `event.name`: `"api_request"`

548* `event.timestamp`: Stempel waktu ISO 8601

549* `event.sequence`: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesi

550* `model`: Model yang digunakan (misalnya, "claude-sonnet-4-6")

551* `cost_usd`: Biaya perkiraan dalam USD

552* `duration_ms`: Durasi permintaan dalam milidetik

553* `input_tokens`: Jumlah token input

554* `output_tokens`: Jumlah token output

555* `cache_read_tokens`: Jumlah token yang dibaca dari cache

556* `cache_creation_tokens`: Jumlah token yang digunakan untuk pembuatan cache

557* `request_id`: ID permintaan API Anthropic dari header `request-id` respons, seperti `"req_011..."`. Hadir hanya saat API mengembalikan satu.

558* `speed`: `"fast"` atau `"normal"`, menunjukkan apakah mode cepat aktif

559* `query_source`: Subsistem yang mengeluarkan permintaan, seperti `"repl_main_thread"`, `"compact"`, atau nama subagent

560* `effort`: [Tingkat effort](/id/model-config#adjust-effort-level) yang diterapkan pada permintaan: `"low"`, `"medium"`, `"high"`, `"xhigh"`, atau `"max"`. Tidak ada saat model tidak mendukung effort.

561 

562#### Acara kesalahan API

563 

564Dicatat saat permintaan API ke Claude gagal.

565 

566**Nama Acara**: `claude_code.api_error`

567 

568**Atribut**:

569 

570* Semua [atribut standar](#standard-attributes)

571* `event.name`: `"api_error"`

572* `event.timestamp`: Stempel waktu ISO 8601

573* `event.sequence`: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesi

574* `model`: Model yang digunakan (misalnya, "claude-sonnet-4-6")

575* `error`: Pesan kesalahan

576* `status_code`: Kode status HTTP sebagai angka. Tidak ada untuk kesalahan non-HTTP seperti kegagalan koneksi.

577* `duration_ms`: Durasi permintaan dalam milidetik

578* `attempt`: Jumlah total upaya yang dilakukan, termasuk permintaan awal (`1` berarti tidak ada retry yang terjadi)

579* `request_id`: ID permintaan API Anthropic dari header `request-id` respons, seperti `"req_011..."`. Hadir hanya saat API mengembalikan satu.

580* `speed`: `"fast"` atau `"normal"`, menunjukkan apakah mode cepat aktif

581* `query_source`: Subsistem yang mengeluarkan permintaan, seperti `"repl_main_thread"`, `"compact"`, atau nama subagent

582* `effort`: [Tingkat effort](/id/model-config#adjust-effort-level) yang diterapkan pada permintaan. Tidak ada saat model tidak mendukung effort.

583 

584#### Acara badan permintaan API

585 

586Dicatat untuk setiap upaya permintaan API saat `OTEL_LOG_RAW_API_BODIES` diatur. Satu acara dipancarkan per upaya, jadi retry dengan parameter yang disesuaikan masing-masing menghasilkan acara mereka sendiri.

587 

588**Nama Acara**: `claude_code.api_request_body`

589 

590**Atribut**:

591 

592* Semua [atribut standar](#standard-attributes)

593* `event.name`: `"api_request_body"`

594* `event.timestamp`: Stempel waktu ISO 8601

595* `event.sequence`: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesi

596* `body`: Parameter permintaan Messages API yang diserialisasi JSON (system prompt, messages, tools, dll.), dipotong pada 60 KB. Konten extended-thinking dalam giliran asisten sebelumnya diredaksi. Dipancarkan hanya dalam mode inline (`OTEL_LOG_RAW_API_BODIES=1`).

597* `body_ref`: Jalur absolut ke file `<dir>/<uuid>.request.json` yang berisi badan yang tidak dipotong. Dipancarkan hanya dalam mode file (`OTEL_LOG_RAW_API_BODIES=file:<dir>`).

598* `body_length`: Panjang badan yang tidak dipotong. Byte UTF-8 saat `OTEL_LOG_RAW_API_BODIES=file:<dir>`, atau unit kode UTF-16 saat `=1`

599* `body_truncated`: `"true"` saat pemotongan inline terjadi. Tidak ada dalam mode file dan saat tidak ada pemotongan yang terjadi.

600* `model`: Pengidentifikasi model dari parameter permintaan

601* `query_source`: Subsistem yang mengeluarkan permintaan (misalnya, `"compact"`)

602 

603#### Acara badan respons API

604 

605Dicatat untuk setiap respons API yang berhasil saat `OTEL_LOG_RAW_API_BODIES` diatur.

606 

607**Nama Acara**: `claude_code.api_response_body`

608 

609**Atribut**:

610 

611* Semua [atribut standar](#standard-attributes)

612* `event.name`: `"api_response_body"`

613* `event.timestamp`: Stempel waktu ISO 8601

614* `event.sequence`: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesi

615* `body`: Respons Messages API yang diserialisasi JSON (id, content blocks, usage, stop reason), dipotong pada 60 KB. Konten extended-thinking diredaksi. Dipancarkan hanya dalam mode inline (`OTEL_LOG_RAW_API_BODIES=1`).

616* `body_ref`: Jalur absolut ke file `<dir>/<request_id>.response.json` yang berisi badan yang tidak dipotong. Dipancarkan hanya dalam mode file (`OTEL_LOG_RAW_API_BODIES=file:<dir>`).

617* `body_length`: Panjang badan yang tidak dipotong. Byte UTF-8 saat `OTEL_LOG_RAW_API_BODIES=file:<dir>`, atau unit kode UTF-16 saat `=1`

618* `body_truncated`: `"true"` saat pemotongan inline terjadi. Tidak ada dalam mode file dan saat tidak ada pemotongan yang terjadi.

619* `model`: Pengidentifikasi model

620* `query_source`: Subsistem yang mengeluarkan permintaan

621* `request_id`: ID permintaan API Anthropic dari header `request-id` respons, seperti `"req_011..."`. Hadir hanya saat API mengembalikan satu.

622 

623#### Acara keputusan alat

624 

625Dicatat saat keputusan izin alat dibuat (terima/tolak).

626 

627**Nama Acara**: `claude_code.tool_decision`

628 

629**Atribut**:

630 

631* Semua [atribut standar](#standard-attributes)

632* `event.name`: `"tool_decision"`

633* `event.timestamp`: Stempel waktu ISO 8601

634* `event.sequence`: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesi

635* `tool_name`: Nama alat (misalnya, "Read", "Edit", "Write", "NotebookEdit")

636* `tool_use_id`: Pengidentifikasi unik untuk invokasi alat ini. Cocok dengan `tool_use_id` yang diteruskan ke hooks, memungkinkan korelasi antara acara OTel dan data yang ditangkap hook.

637* `decision`: Baik `"accept"` atau `"reject"`

638* `source`: Sumber keputusan:

639 * `"config"`: Diputuskan secara otomatis tanpa diminta, berdasarkan pengaturan proyek, kebijakan terkelola perusahaan, flag `--allowedTools` atau `--disallowedTools`, mode izin aktif, atau karena alat itu aman secara inheren.

640 * `"hook"`: Hook `PreToolUse` atau `PermissionRequest` mengembalikan keputusan.

641 * `"user_permanent"`: Dipancarkan saat pengguna memilih "Selalu izinkan" saat diminta, menyimpan aturan ke pengaturan pribadi mereka. Juga dipancarkan untuk panggilan nanti yang cocok dengan aturan tersimpan itu. Diperlakukan sebagai penerimaan.

642 * `"user_temporary"`: Dipancarkan saat pengguna memilih "Ya" atau "Ya, untuk sesi ini" saat diminta, tanpa menyimpan aturan. Juga dipancarkan untuk panggilan nanti dalam sesi yang sama yang cocok dengan izin berskop sesi itu. Diperlakukan sebagai penerimaan.

643 * `"user_abort"`: Dipancarkan saat pengguna menutup prompt izin tanpa menjawab. Diperlakukan sebagai penolakan.

644 * `"user_reject"`: Dipancarkan saat pengguna memilih "Tidak" saat diminta, atau panggilan cocok dengan aturan penolakan dalam pengaturan pribadi mereka. Diperlakukan sebagai penolakan.

645 

646#### Acara mode izin berubah

647 

648Dicatat saat mode izin berubah, misalnya dari siklus Shift+Tab, keluar dari plan mode, atau pemeriksaan gate mode otomatis.

649 

650**Nama Acara**: `claude_code.permission_mode_changed`

651 

652**Atribut**:

653 

654* Semua [atribut standar](#standard-attributes)

655* `event.name`: `"permission_mode_changed"`

656* `event.timestamp`: Stempel waktu ISO 8601

657* `event.sequence`: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesi

658* `from_mode`: Mode izin sebelumnya, misalnya `"default"`, `"plan"`, `"acceptEdits"`, `"auto"`, atau `"bypassPermissions"`

659* `to_mode`: Mode izin baru

660* `trigger`: Apa yang menyebabkan perubahan. Salah satu dari `"shift_tab"`, `"exit_plan_mode"`, `"auto_gate_denied"`, atau `"auto_opt_in"`. Tidak ada saat transisi berasal dari SDK atau bridge

661 

662#### Acara auth

663 

664Dicatat saat `/login` atau `/logout` selesai.

665 

666**Nama Acara**: `claude_code.auth`

667 

668**Atribut**:

669 

670* Semua [atribut standar](#standard-attributes)

671* `event.name`: `"auth"`

672* `event.timestamp`: Stempel waktu ISO 8601

673* `event.sequence`: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesi

674* `action`: `"login"` atau `"logout"`

675* `success`: `"true"` atau `"false"`

676* `auth_method`: Metode autentikasi, seperti `"oauth"`

677* `error_category`: Jenis kesalahan kategori saat tindakan gagal. Pesan kesalahan mentah tidak pernah disertakan

678* `status_code`: Kode status HTTP sebagai string saat tindakan gagal dengan kesalahan HTTP

679 

680#### Acara koneksi server MCP

681 

682Dicatat saat server MCP terhubung, terputus, atau gagal terhubung.

683 

684**Nama Acara**: `claude_code.mcp_server_connection`

685 

686**Atribut**:

687 

688* Semua [atribut standar](#standard-attributes)

689* `event.name`: `"mcp_server_connection"`

690* `event.timestamp`: Stempel waktu ISO 8601

691* `event.sequence`: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesi

692* `status`: `"connected"`, `"failed"`, atau `"disconnected"`

693* `transport_type`: Transport server, seperti `"stdio"`, `"sse"`, atau `"http"`

694* `server_scope`: Cakupan server dikonfigurasi di, seperti `"user"`, `"project"`, atau `"local"`

695* `duration_ms`: Durasi upaya koneksi dalam milidetik

696* `error_code`: Kode kesalahan saat koneksi gagal

697* `server_name` (saat `OTEL_LOG_TOOL_DETAILS=1`): Nama server yang dikonfigurasi

698* `error` (saat `OTEL_LOG_TOOL_DETAILS=1`): Pesan kesalahan lengkap saat koneksi gagal

699 

700#### Acara kesalahan internal

701 

702Dicatat saat Claude Code menangkap kesalahan internal yang tidak terduga. Hanya nama kelas kesalahan dan kode gaya errno yang dicatat. Pesan kesalahan dan stack trace tidak pernah disertakan. Acara ini tidak dipancarkan saat berjalan terhadap Bedrock, Vertex, atau Foundry, atau saat `DISABLE_ERROR_REPORTING` diatur.

703 

704**Nama Acara**: `claude_code.internal_error`

705 

706**Atribut**:

707 

708* Semua [atribut standar](#standard-attributes)

709* `event.name`: `"internal_error"`

710* `event.timestamp`: Stempel waktu ISO 8601

711* `event.sequence`: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesi

712* `error_name`: Nama kelas kesalahan, seperti `"TypeError"` atau `"SyntaxError"`

713* `error_code`: Kode errno Node.js seperti `"ENOENT"` saat ada pada kesalahan

714 

715#### Acara plugin terinstal

716 

717Dicatat saat plugin selesai menginstal, dari perintah CLI `claude plugin install` dan UI interaktif `/plugin`.

718 

719**Nama Acara**: `claude_code.plugin_installed`

720 

721**Atribut**:

722 

723* Semua [atribut standar](#standard-attributes)

724* `event.name`: `"plugin_installed"`

725* `event.timestamp`: Stempel waktu ISO 8601

726* `event.sequence`: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesi

727* `marketplace.is_official`: `"true"` jika marketplace adalah marketplace Anthropic resmi, `"false"` sebaliknya

728* `install.trigger`: `"cli"` atau `"ui"`

729* `plugin.name`: Nama plugin yang diinstal. Untuk marketplace pihak ketiga ini disertakan hanya saat `OTEL_LOG_TOOL_DETAILS=1`

730* `plugin.version`: Versi plugin saat dideklarasikan dalam entri marketplace. Untuk marketplace pihak ketiga ini disertakan hanya saat `OTEL_LOG_TOOL_DETAILS=1`

731* `marketplace.name`: Marketplace plugin diinstal dari. Untuk marketplace pihak ketiga ini disertakan hanya saat `OTEL_LOG_TOOL_DETAILS=1`

732 

733#### Acara skill diaktifkan

734 

735Dicatat saat skill dipanggil, baik Claude memanggilnya melalui alat Skill atau Anda menjalankannya sebagai perintah `/`.

736 

737**Nama Acara**: `claude_code.skill_activated`

738 

739**Atribut**:

740 

741* Semua [atribut standar](#standard-attributes)

742* `event.name`: `"skill_activated"`

743* `event.timestamp`: Stempel waktu ISO 8601

744* `event.sequence`: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesi

745* `skill.name`: Nama skill. Untuk skill yang ditentukan pengguna dan plugin pihak ketiga nilainya adalah placeholder `"custom_skill"` kecuali `OTEL_LOG_TOOL_DETAILS=1`

746* `invocation_trigger`: Bagaimana skill dipicu (`"user-slash"`, `"claude-proactive"`, atau `"nested-skill"`)

747* `skill.source`: Tempat skill dimuat dari (misalnya, `"bundled"`, `"userSettings"`, `"projectSettings"`, `"plugin"`)

748* `plugin.name` (saat `OTEL_LOG_TOOL_DETAILS=1` atau plugin dari marketplace resmi): Nama plugin pemilik saat skill disediakan oleh plugin

749* `marketplace.name` (saat `OTEL_LOG_TOOL_DETAILS=1` atau plugin dari marketplace resmi): Marketplace plugin pemilik diinstal dari, saat skill disediakan oleh plugin

750 

751#### Acara mention @

752 

753Dicatat saat Claude Code menyelesaikan mention `@` dalam prompt. Tidak setiap mention memancarkan acara: jalur early-exit seperti penolakan izin, file berukuran besar, lampiran referensi PDF, dan kegagalan listing direktori kembali tanpa logging.

754 

755**Nama Acara**: `claude_code.at_mention`

756 

757**Atribut**:

758 

759* Semua [atribut standar](#standard-attributes)

760* `event.name`: `"at_mention"`

761* `event.timestamp`: Stempel waktu ISO 8601

762* `event.sequence`: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesi

763* `mention_type`: Jenis mention (`"file"`, `"directory"`, `"agent"`, `"mcp_resource"`)

764* `success`: Apakah mention berhasil diselesaikan (`"true"` atau `"false"`)

765 

766#### Acara retry API habis

767 

768Dicatat sekali saat permintaan API gagal setelah lebih dari satu upaya. Dipancarkan bersama acara `api_error` terakhir.

769 

770**Nama Acara**: `claude_code.api_retries_exhausted`

771 

772**Atribut**:

773 

774* Semua [atribut standar](#standard-attributes)

775* `event.name`: `"api_retries_exhausted"`

776* `event.timestamp`: Stempel waktu ISO 8601

777* `event.sequence`: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesi

778* `model`: Model yang digunakan

779* `error`: Pesan kesalahan terakhir

780* `status_code`: Kode status HTTP sebagai angka. Tidak ada untuk kesalahan non-HTTP.

781* `total_attempts`: Jumlah total upaya yang dilakukan

782* `total_retry_duration_ms`: Total waktu wall-clock di semua upaya

783* `speed`: `"fast"` atau `"normal"`

784 

785#### Acara mulai eksekusi hook

786 

787Dicatat saat satu atau lebih hooks mulai dieksekusi untuk acara hook.

788 

789**Nama Acara**: `claude_code.hook_execution_start`

790 

791**Atribut**:

792 

793* Semua [atribut standar](#standard-attributes)

794* `event.name`: `"hook_execution_start"`

795* `event.timestamp`: Stempel waktu ISO 8601

796* `event.sequence`: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesi

797* `hook_event`: Jenis acara hook, seperti `"PreToolUse"` atau `"PostToolUse"`

798* `hook_name`: Nama hook lengkap termasuk matcher, seperti `"PreToolUse:Write"`

799* `num_hooks`: Jumlah perintah hook yang cocok

800* `managed_only`: `"true"` saat hanya hooks kebijakan terkelola yang diizinkan

801* `hook_source`: `"policySettings"` atau `"merged"`

802* `hook_definitions`: Konfigurasi hook yang diserialisasi JSON. Disertakan hanya saat detailed beta tracing dan `OTEL_LOG_TOOL_DETAILS=1` keduanya diaktifkan

803 

804#### Acara eksekusi hook selesai

805 

806Dicatat saat semua hooks untuk acara hook selesai.

807 

808**Nama Acara**: `claude_code.hook_execution_complete`

809 

810**Atribut**:

811 

812* Semua [atribut standar](#standard-attributes)

813* `event.name`: `"hook_execution_complete"`

814* `event.timestamp`: Stempel waktu ISO 8601

815* `event.sequence`: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesi

816* `hook_event`: Jenis acara hook

817* `hook_name`: Nama hook lengkap termasuk matcher

818* `num_hooks`: Jumlah perintah hook yang cocok

819* `num_success`: Jumlah yang selesai dengan sukses

820* `num_blocking`: Jumlah yang mengembalikan keputusan blocking

821* `num_non_blocking_error`: Jumlah yang gagal tanpa blocking

822* `num_cancelled`: Jumlah dibatalkan sebelum selesai

823* `total_duration_ms`: Durasi wall-clock dari semua hooks yang cocok

824* `managed_only`: `"true"` saat hanya hooks kebijakan terkelola yang diizinkan

825* `hook_source`: `"policySettings"` atau `"merged"`

826* `hook_definitions`: Konfigurasi hook yang diserialisasi JSON. Disertakan hanya saat detailed beta tracing dan `OTEL_LOG_TOOL_DETAILS=1` keduanya diaktifkan

827 

828#### Acara pemadatan

829 

830Dicatat saat pemadatan percakapan selesai.

831 

832**Nama Acara**: `claude_code.compaction`

833 

834**Atribut**:

835 

836* Semua [atribut standar](#standard-attributes)

837* `event.name`: `"compaction"`

838* `event.timestamp`: Stempel waktu ISO 8601

839* `event.sequence`: penghitung yang meningkat secara monoton untuk mengurutkan acara dalam sesi

840* `trigger`: `"auto"` atau `"manual"`

841* `success`: `"true"` atau `"false"`

842* `duration_ms`: Durasi pemadatan

843* `pre_tokens`: Jumlah token perkiraan sebelum pemadatan

844* `post_tokens`: Jumlah token perkiraan setelah pemadatan

845* `error`: Pesan kesalahan saat pemadatan gagal

846 

847## Menafsirkan data metrik dan acara

848 

849Metrik dan acara yang diekspor mendukung berbagai analisis:

850 

851### Pemantauan penggunaan

852 

853| Metrik | Peluang Analisis |

854| ------------------------------------------------------------- | --------------------------------------------------------------------- |

855| `claude_code.token.usage` | Pecahkan berdasarkan `type` (input/output), pengguna, tim, atau model |

856| `claude_code.session.count` | Lacak adopsi dan keterlibatan dari waktu ke waktu |

857| `claude_code.lines_of_code.count` | Ukur produktivitas dengan melacak penambahan/penghapusan kode |

858| `claude_code.commit.count` & `claude_code.pull_request.count` | Pahami dampak pada alur kerja pengembangan |

859 

860### Pemantauan biaya

861 

862Metrik `claude_code.cost.usage` membantu dengan:

863 

864* Melacak tren penggunaan di seluruh tim atau individu

865* Mengidentifikasi sesi penggunaan tinggi untuk optimasi

866 

867<Note>

868 Metrik biaya adalah perkiraan. Untuk data penagihan resmi, lihat penyedia API Anda (Claude Console, Amazon Bedrock, atau Google Cloud Vertex).

869</Note>

870 

871### Peringatan dan segmentasi

872 

873Peringatan umum untuk dipertimbangkan:

874 

875* Lonjakan biaya

876* Konsumsi token yang tidak biasa

877* Volume sesi tinggi dari pengguna tertentu

878 

879Semua metrik dapat disegmentasikan berdasarkan `user.account_uuid`, `user.account_id`, `organization.id`, `session.id`, `model`, dan `app.version`.

880 

881### Deteksi kelelahan retry

882 

883Claude Code mencoba ulang permintaan API yang gagal secara internal dan hanya memancarkan acara `claude_code.api_error` tunggal setelah menyerah, jadi acara itu sendiri adalah sinyal terminal untuk permintaan tersebut. Upaya retry perantara tidak dicatat sebagai acara terpisah.

884 

885Atribut `attempt` pada acara mencatat berapa banyak upaya yang dilakukan secara total. Nilai yang lebih besar dari `CLAUDE_CODE_MAX_RETRIES` (default `10`) menunjukkan permintaan menghabiskan semua retry pada kesalahan transien. Nilai yang lebih rendah menunjukkan kesalahan yang tidak dapat dicoba ulang seperti respons `400`.

886 

887Untuk membedakan sesi yang pulih dari sesi yang terhenti, kelompokkan acara berdasarkan `session.id` dan periksa apakah acara `api_request` yang lebih baru ada setelah kesalahan.

888 

889### Analisis acara

890 

891Data acara memberikan wawasan terperinci tentang interaksi Claude Code:

892 

893**Pola Penggunaan Alat**: analisis acara hasil alat untuk mengidentifikasi:

894 

895* Alat yang paling sering digunakan

896* Tingkat keberhasilan alat

897* Waktu eksekusi alat rata-rata

898* Pola kesalahan berdasarkan jenis alat

899 

900**Pemantauan Kinerja**: lacak durasi permintaan API dan waktu eksekusi alat untuk mengidentifikasi hambatan kinerja.

901 

902## Pertimbangan backend

903 

904Pilihan backend metrik, log, dan traces Anda menentukan jenis analisis yang dapat Anda lakukan:

905 

906### Untuk metrik

907 

908* **Database deret waktu (misalnya, Prometheus)**: Perhitungan laju, metrik agregat

909* **Toko kolumnar (misalnya, ClickHouse)**: Kueri kompleks, analisis pengguna unik

910* **Platform observabilitas lengkap (misalnya, Honeycomb, Datadog)**: Kueri lanjutan, visualisasi, peringatan

911 

912### Untuk acara/log

913 

914* **Sistem agregasi log (misalnya, Elasticsearch, Loki)**: Pencarian teks lengkap, analisis log

915* **Toko kolumnar (misalnya, ClickHouse)**: Analisis acara terstruktur

916* **Platform observabilitas lengkap (misalnya, Honeycomb, Datadog)**: Korelasi antara metrik dan acara

917 

918### Untuk traces

919 

920Pilih backend yang mendukung penyimpanan distributed trace dan korelasi span:

921 

922* **Sistem distributed tracing (misalnya, Jaeger, Zipkin, Grafana Tempo)**: Visualisasi span, request waterfalls, analisis latensi

923* **Platform observabilitas lengkap (misalnya, Honeycomb, Datadog)**: Pencarian trace dan korelasi dengan metrik dan log

924 

925Untuk organisasi yang memerlukan metrik Pengguna Aktif Harian/Mingguan/Bulanan (DAU/WAU/MAU), pertimbangkan backend yang mendukung kueri nilai unik yang efisien.

926 

927## Informasi layanan

928 

929Semua metrik dan acara diekspor dengan atribut sumber daya berikut:

930 

931* `service.name`: `claude-code`

932* `service.version`: Versi Claude Code saat ini

933* `os.type`: Jenis sistem operasi (misalnya, `linux`, `darwin`, `windows`)

934* `os.version`: String versi sistem operasi

935* `host.arch`: Arsitektur host (misalnya, `amd64`, `arm64`)

936* `wsl.version`: Nomor versi WSL (hanya ada saat berjalan di Windows Subsystem for Linux)

937* Nama Meter: `com.anthropic.claude_code`

938 

939## Sumber daya pengukuran ROI

940 

941Untuk panduan komprehensif tentang mengukur pengembalian investasi untuk Claude Code, termasuk pengaturan telemetri, analisis biaya, metrik produktivitas, dan pelaporan otomatis, lihat [Panduan Pengukuran ROI Claude Code](https://github.com/anthropics/claude-code-monitoring-guide). Repositori ini menyediakan konfigurasi Docker Compose siap pakai, pengaturan Prometheus dan OpenTelemetry, dan template untuk menghasilkan laporan produktivitas yang terintegrasi dengan alat seperti Linear.

942 

943## Keamanan dan privasi

944 

945* Ekspor OpenTelemetry ke backend Anda adalah opt-in dan memerlukan konfigurasi eksplisit. Untuk telemetri operasional terpisah Anthropic dan cara menonaktifkannya, lihat [Penggunaan data](/id/data-usage#telemetry-services)

946* Konten file mentah dan cuplikan kode tidak disertakan dalam metrik atau acara. Trace spans adalah jalur data terpisah: lihat poin `OTEL_LOG_TOOL_CONTENT` di bawah

947* Saat diautentikasi melalui OAuth, `user.email` disertakan dalam atribut telemetri. Jika ini menjadi perhatian bagi organisasi Anda, bekerja dengan backend telemetri Anda untuk memfilter atau menyunting bidang ini

948* Konten prompt pengguna tidak dikumpulkan secara default. Hanya panjang prompt yang dicatat. Untuk menyertakan konten prompt, atur `OTEL_LOG_USER_PROMPTS=1`

949* Argumen input alat dan parameter tidak dicatat secara default. Untuk menyertakannya, atur `OTEL_LOG_TOOL_DETAILS=1`. Saat diaktifkan, acara `tool_result` menyertakan atribut `tool_parameters` dengan perintah Bash, nama server MCP dan alat, dan nama skill, ditambah atribut `tool_input` dengan jalur file, URL, pola pencarian, dan argumen lainnya. Acara `user_prompt` menyertakan `command_name` verbatim untuk perintah custom, plugin, dan MCP. Trace spans menyertakan atribut `tool_input` yang sama dan atribut yang diturunkan dari input seperti `file_path`. Nilai individual di atas 512 karakter dipotong dan total dibatasi hingga \~4 K karakter, tetapi argumen mungkin masih berisi nilai sensitif. Konfigurasikan backend telemetri Anda untuk memfilter atau menyunting atribut ini sesuai kebutuhan

950* Konten input dan output alat tidak dicatat dalam trace spans secara default. Untuk menyertakannya, atur `OTEL_LOG_TOOL_CONTENT=1`. Saat diaktifkan, acara span menyertakan konten input dan output alat lengkap dipotong pada 60 KB per span. Ini dapat mencakup konten file mentah dari hasil alat Read dan output perintah Bash. Konfigurasikan backend telemetri Anda untuk memfilter atau menyunting atribut ini sesuai kebutuhan

951* Badan permintaan dan respons API Anthropic Messages mentah tidak dicatat secara default. Untuk menyertakannya, atur `OTEL_LOG_RAW_API_BODIES`. Dengan `=1`, setiap panggilan API memancarkan acara log `api_request_body` dan `api_response_body` yang atribut `body`-nya adalah muatan yang diserialisasi JSON, dipotong pada 60 KB. Dengan `=file:<dir>`, badan yang tidak dipotong ditulis ke file `.request.json` dan `.response.json` di bawah direktori tersebut dan acara membawa jalur `body_ref` sebagai gantinya dari badan inline. Kirim direktori dengan pengumpul log atau sidecar daripada melalui aliran telemetri. Dalam kedua mode, badan berisi riwayat percakapan lengkap (system prompt, setiap giliran pengguna dan asisten sebelumnya, hasil alat), jadi mengaktifkan ini menyiratkan persetujuan untuk semua yang akan diungkapkan oleh flag konten `OTEL_LOG_*` lainnya. Konten extended-thinking Claude selalu diredaksi dari badan ini terlepas dari pengaturan lain

952 

953## Memantau Claude Code di Amazon Bedrock

954 

955Untuk panduan pemantauan penggunaan Claude Code terperinci untuk Amazon Bedrock, lihat [Implementasi Pemantauan Claude Code (Bedrock)](https://github.com/aws-solutions-library-samples/guidance-for-claude-code-with-amazon-bedrock/blob/main/assets/docs/MONITORING.md).

network-config.md +132 −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# Konfigurasi jaringan enterprise

6 

7> Konfigurasikan Claude Code untuk lingkungan enterprise dengan server proxy, Certificate Authorities (CA) kustom, dan autentikasi mutual Transport Layer Security (mTLS).

8 

9Claude Code mendukung berbagai konfigurasi jaringan dan keamanan enterprise melalui variabel lingkungan. Ini termasuk merutekan lalu lintas melalui server proxy perusahaan, mempercayai Certificate Authorities (CA) kustom, dan mengautentikasi dengan sertifikat mutual Transport Layer Security (mTLS) untuk keamanan yang ditingkatkan.

10 

11<Note>

12 Semua variabel lingkungan yang ditampilkan di halaman ini juga dapat dikonfigurasi di [`settings.json`](/id/settings).

13</Note>

14 

15## Konfigurasi proxy

16 

17### Variabel lingkungan

18 

19Claude Code menghormati variabel lingkungan proxy standar:

20 

21```bash theme={null}

22# HTTPS proxy (direkomendasikan)

23export HTTPS_PROXY=https://proxy.example.com:8080

24 

25# HTTP proxy (jika HTTPS tidak tersedia)

26export HTTP_PROXY=http://proxy.example.com:8080

27 

28# Lewati proxy untuk permintaan tertentu - format terpisah spasi

29export NO_PROXY="localhost 192.168.1.1 example.com .example.com"

30# Lewati proxy untuk permintaan tertentu - format terpisah koma

31export NO_PROXY="localhost,192.168.1.1,example.com,.example.com"

32# Lewati proxy untuk semua permintaan

33export NO_PROXY="*"

34```

35 

36<Note>

37 Claude Code tidak mendukung proxy SOCKS.

38</Note>

39 

40### Autentikasi dasar

41 

42Jika proxy Anda memerlukan autentikasi dasar, sertakan kredensial dalam URL proxy:

43 

44```bash theme={null}

45export HTTPS_PROXY=http://username:password@proxy.example.com:8080

46```

47 

48<Warning>

49 Hindari hardcoding kata sandi dalam skrip. Gunakan variabel lingkungan atau penyimpanan kredensial aman sebagai gantinya.

50</Warning>

51 

52<Tip>

53 Untuk proxy yang memerlukan autentikasi lanjutan (NTLM, Kerberos, dll.), pertimbangkan menggunakan layanan LLM Gateway yang mendukung metode autentikasi Anda.

54</Tip>

55 

56## Penyimpanan sertifikat CA

57 

58Secara default, Claude Code mempercayai baik sertifikat CA Mozilla yang disertakan maupun penyimpanan sertifikat sistem operasi Anda. Proxy inspeksi TLS enterprise seperti CrowdStrike Falcon dan Zscaler bekerja tanpa konfigurasi tambahan ketika sertifikat akar mereka diinstal di penyimpanan kepercayaan OS.

59 

60<Note>

61 Integrasi penyimpanan CA sistem memerlukan distribusi biner Claude Code asli. Saat berjalan di runtime Node.js, penyimpanan CA sistem tidak digabungkan secara otomatis. Dalam hal itu, atur `NODE_EXTRA_CA_CERTS=/path/to/ca-cert.pem` untuk mempercayai CA akar enterprise.

62</Note>

63 

64`CLAUDE_CODE_CERT_STORE` menerima daftar sumber yang dipisahkan koma. Nilai yang dikenali adalah `bundled` untuk set CA Mozilla yang dikirimkan dengan Claude Code dan `system` untuk penyimpanan kepercayaan sistem operasi. Default adalah `bundled,system`.

65 

66Untuk mempercayai hanya set CA Mozilla yang disertakan:

67 

68```bash theme={null}

69export CLAUDE_CODE_CERT_STORE=bundled

70```

71 

72Untuk mempercayai hanya penyimpanan sertifikat OS:

73 

74```bash theme={null}

75export CLAUDE_CODE_CERT_STORE=system

76```

77 

78<Note>

79 `CLAUDE_CODE_CERT_STORE` tidak memiliki kunci skema `settings.json` khusus. Aturnya melalui blok `env` di `~/.claude/settings.json` atau langsung di lingkungan proses.

80</Note>

81 

82## Sertifikat CA kustom

83 

84Jika lingkungan enterprise Anda menggunakan CA kustom, konfigurasikan Claude Code untuk mempercayainya secara langsung:

85 

86```bash theme={null}

87export NODE_EXTRA_CA_CERTS=/path/to/ca-cert.pem

88```

89 

90## Autentikasi mTLS

91 

92Untuk lingkungan enterprise yang memerlukan autentikasi sertifikat klien:

93 

94```bash theme={null}

95# Sertifikat klien untuk autentikasi

96export CLAUDE_CODE_CLIENT_CERT=/path/to/client-cert.pem

97 

98# Kunci pribadi klien

99export CLAUDE_CODE_CLIENT_KEY=/path/to/client-key.pem

100 

101# Opsional: Frasa sandi untuk kunci pribadi terenkripsi

102export CLAUDE_CODE_CLIENT_KEY_PASSPHRASE="your-passphrase"

103```

104 

105## Persyaratan akses jaringan

106 

107Claude Code memerlukan akses ke URL berikut. Izinkan URL ini dalam konfigurasi proxy dan aturan firewall Anda, terutama di lingkungan jaringan terkontainer atau terbatas.

108 

109| URL | Diperlukan untuk |

110| ------------------------------ | -------------------------------------------------------------------------------------------------- |

111| `api.anthropic.com` | Permintaan Claude API |

112| `claude.ai` | Autentikasi akun claude.ai |

113| `platform.claude.com` | Autentikasi akun Anthropic Console |

114| `downloads.claude.ai` | Unduhan plugin yang dapat dieksekusi; penginstal asli dan pembaruan otomatis asli |

115| `storage.googleapis.com` | {/* max-version: 2.1.115 */}Penginstal asli dan pembaruan otomatis asli pada versi sebelum 2.1.116 |

116| `bridge.claudeusercontent.com` | Jembatan WebSocket ekstensi [Claude di Chrome](/id/chrome) |

117 

118Jika Anda menginstal Claude Code melalui npm atau mengelola distribusi biner Anda sendiri, pengguna akhir mungkin tidak memerlukan akses ke `downloads.claude.ai` atau `storage.googleapis.com`.

119 

120Claude Code juga mengirimkan telemetri operasional opsional secara default, yang dapat Anda nonaktifkan dengan variabel lingkungan. Lihat [Layanan telemetri](/id/data-usage#telemetry-services) untuk cara menonaktifkannya sebelum menyelesaikan daftar izin Anda.

121 

122Saat menggunakan [Amazon Bedrock](/id/amazon-bedrock), [Google Vertex AI](/id/google-vertex-ai), atau [Microsoft Foundry](/id/microsoft-foundry), lalu lintas model dan autentikasi menuju penyedia Anda alih-alih `api.anthropic.com`, `claude.ai`, atau `platform.claude.com`. Alat WebFetch masih memanggil `api.anthropic.com` untuk [pemeriksaan keamanan domainnya](/id/data-usage#webfetch-domain-safety-check) kecuali Anda menetapkan `skipWebFetchPreflight: true` di [pengaturan](/id/settings).

123 

124[Claude Code di web](/id/claude-code-on-the-web) dan [Code Review](/id/code-review) terhubung ke repositori Anda dari infrastruktur yang dikelola Anthropic. Jika organisasi GitHub Enterprise Cloud Anda membatasi akses berdasarkan alamat IP, aktifkan [pewarisan daftar izin IP untuk GitHub Apps yang diinstal](https://docs.github.com/en/enterprise-cloud@latest/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-allowed-ip-addresses-for-your-organization#allowing-access-by-github-apps). Claude GitHub App mendaftarkan rentang IP-nya, jadi mengaktifkan pengaturan ini memungkinkan akses tanpa konfigurasi manual. Untuk [menambahkan rentang ke daftar izin Anda secara manual](https://docs.github.com/en/enterprise-cloud@latest/organizations/keeping-your-organization-secure/managing-security-settings-for-your-organization/managing-allowed-ip-addresses-for-your-organization#adding-an-allowed-ip-address) sebagai gantinya, atau untuk mengonfigurasi firewall lainnya, lihat [Alamat IP API Anthropic](https://platform.claude.com/docs/en/api/ip-addresses).

125 

126Untuk instans [GitHub Enterprise Server](/id/github-enterprise-server) yang dihosting sendiri di belakang firewall, izinkan daftar [Alamat IP API Anthropic](https://platform.claude.com/docs/en/api/ip-addresses) yang sama sehingga infrastruktur Anthropic dapat menjangkau host GHES Anda untuk mengkloning repositori dan memposting komentar tinjauan.

127 

128## Sumber daya tambahan

129 

130* [Pengaturan Claude Code](/id/settings)

131* [Referensi variabel lingkungan](/id/env-vars)

132* [Panduan pemecahan masalah](/id/troubleshooting)

output-styles.md +120 −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# Output styles

6 

7> Sesuaikan Claude Code untuk penggunaan di luar rekayasa perangkat lunak

8 

9Output styles memungkinkan Anda menggunakan Claude Code sebagai jenis agen apa pun sambil mempertahankan

10kemampuan intinya, seperti menjalankan skrip lokal, membaca/menulis file, dan

11melacak TODOs.

12 

13## Built-in output styles

14 

15**Default** output style Claude Code adalah system prompt yang ada, dirancang

16untuk membantu Anda menyelesaikan tugas-tugas rekayasa perangkat lunak secara efisien.

17 

18Ada dua built-in output styles tambahan yang berfokus pada pengajaran Anda tentang

19codebase dan cara Claude beroperasi:

20 

21* **Explanatory**: Menyediakan "Insights" edukatif di antara membantu Anda

22 menyelesaikan tugas-tugas rekayasa perangkat lunak. Membantu Anda memahami

23 pilihan implementasi dan pola codebase.

24 

25* **Learning**: Mode kolaboratif belajar-dengan-melakukan di mana Claude tidak hanya

26 akan berbagi "Insights" saat coding, tetapi juga meminta Anda untuk berkontribusi dengan

27 potongan kode kecil dan strategis sendiri. Claude Code akan menambahkan penanda `TODO(human)` dalam kode Anda

28 untuk Anda implementasikan.

29 

30## Cara kerja output styles

31 

32Output styles secara langsung memodifikasi system prompt Claude Code.

33 

34* Custom output styles mengecualikan instruksi untuk coding (seperti memverifikasi kode

35 dengan tes), kecuali `keep-coding-instructions` bernilai true.

36* Semua output styles memiliki instruksi kustom mereka sendiri yang ditambahkan ke akhir

37 system prompt.

38* Semua output styles memicu pengingat bagi Claude untuk mematuhi instruksi output style

39 selama percakapan.

40 

41Penggunaan token tergantung pada style. Menambahkan instruksi ke system prompt

42meningkatkan input tokens, meskipun prompt caching mengurangi biaya ini setelah permintaan pertama

43dalam sesi. Built-in Explanatory dan Learning styles menghasilkan respons yang lebih panjang

44daripada Default secara desain, yang meningkatkan output tokens. Untuk custom styles,

45penggunaan output tokens tergantung pada apa yang instruksi Anda katakan kepada Claude untuk diproduksi.

46 

47## Ubah output style Anda

48 

49Jalankan `/config` dan pilih **Output style** untuk memilih style dari menu. Pilihan Anda

50disimpan ke `.claude/settings.local.json` di

51[tingkat proyek lokal](/id/settings).

52 

53Untuk menetapkan style tanpa menu, edit field `outputStyle` secara langsung dalam

54file settings:

55 

56```json theme={null}

57{

58 "outputStyle": "Explanatory"

59}

60```

61 

62Karena output style ditetapkan dalam system prompt saat awal sesi,

63perubahan berlaku saat Anda memulai sesi baru. Ini menjaga system

64prompt tetap stabil sepanjang percakapan sehingga prompt caching dapat mengurangi latensi dan

65biaya.

66 

67## Buat custom output style

68 

69Custom output styles adalah file Markdown dengan frontmatter dan teks yang akan

70ditambahkan ke system prompt:

71 

72```markdown theme={null}

73---

74name: My Custom Style

75description:

76 A brief description of what this style does, to be displayed to the user

77---

78 

79# Custom Style Instructions

80 

81You are an interactive CLI tool that helps users with software engineering

82tasks. [Your custom instructions here...]

83 

84## Specific Behaviors

85 

86[Define how the assistant should behave in this style...]

87```

88 

89Anda dapat menyimpan file-file ini di tingkat pengguna (`~/.claude/output-styles`) atau

90tingkat proyek (`.claude/output-styles`).

91 

92### Frontmatter

93 

94File output style mendukung frontmatter untuk menentukan metadata:

95 

96| Frontmatter | Tujuan | Default |

97| :------------------------- | :-------------------------------------------------------------------------------------------------- | :---------------------- |

98| `name` | Nama output style, jika bukan nama file | Mewarisi dari nama file |

99| `description` | Deskripsi output style, ditampilkan dalam picker `/config` | Tidak ada |

100| `keep-coding-instructions` | Apakah akan mempertahankan bagian-bagian dari system prompt Claude Code yang terkait dengan coding. | false |

101 

102## Perbandingan dengan fitur terkait

103 

104### Output Styles vs. CLAUDE.md vs. --append-system-prompt

105 

106Output styles sepenuhnya "mematikan" bagian-bagian dari default system prompt Claude Code

107yang spesifik untuk rekayasa perangkat lunak. Baik CLAUDE.md maupun

108`--append-system-prompt` tidak mengedit default system prompt Claude Code. CLAUDE.md

109menambahkan konten sebagai pesan pengguna *setelah* default system prompt Claude Code. `--append-system-prompt` menambahkan konten ke system prompt.

110 

111### Output Styles vs. [Agents](/id/sub-agents)

112 

113Output styles secara langsung mempengaruhi loop agen utama dan hanya mempengaruhi system

114prompt. Agents dipanggil untuk menangani tugas-tugas spesifik dan dapat mencakup pengaturan tambahan

115seperti model yang akan digunakan, tools yang tersedia bagi mereka, dan beberapa konteks

116tentang kapan menggunakan agent.

117 

118### Output Styles vs. [Skills](/id/skills)

119 

120Output styles memodifikasi cara Claude merespons (pemformatan, nada, struktur) dan selalu aktif setelah dipilih. Skills adalah prompts khusus tugas yang Anda panggil dengan `/skill-name` atau yang Claude muat secara otomatis saat relevan. Gunakan output styles untuk preferensi pemformatan yang konsisten; gunakan skills untuk alur kerja dan tugas yang dapat digunakan kembali.

overview.md +875 −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 Claude Code

6 

7> Claude Code adalah alat pengkodean agentic yang membaca basis kode Anda, mengedit file, menjalankan perintah, dan terintegrasi dengan alat pengembangan Anda. Tersedia di terminal, IDE, aplikasi desktop, dan browser.

8 

9export const InstallConfigurator = ({defaultSurface = 'terminal'}) => {

10 const TERM = {

11 mac: {

12 label: 'macOS / Linux',

13 cmd: 'curl -fsSL https://claude.ai/install.sh | bash'

14 },

15 win: {

16 label: 'Windows'

17 },

18 brew: {

19 label: 'Homebrew',

20 cmd: 'brew install --cask claude-code'

21 },

22 winget: {

23 label: 'WinGet',

24 cmd: 'winget install Anthropic.ClaudeCode'

25 }

26 };

27 const WIN_VARIANTS = {

28 ps: 'irm https://claude.ai/install.ps1 | iex',

29 cmd: 'curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd'

30 };

31 const TABS = [{

32 key: 'terminal',

33 label: 'Terminal'

34 }, {

35 key: 'desktop',

36 label: 'Desktop'

37 }, {

38 key: 'vscode',

39 label: 'VS Code'

40 }, {

41 key: 'jetbrains',

42 label: 'JetBrains'

43 }];

44 const ALT_TARGETS = {

45 desktop: {

46 name: 'Desktop',

47 tagline: 'The full agent in a native app for macOS and Windows.',

48 installLabel: 'Download the app',

49 installHref: 'https://claude.com/download?utm_source=claude_code&utm_medium=docs&utm_content=configurator_desktop_download',

50 guideHref: '/en/desktop-quickstart'

51 },

52 vscode: {

53 name: 'VS Code',

54 tagline: 'Review diffs, manage context, and chat without leaving your editor.',

55 installLabel: 'Install from Marketplace',

56 installHref: 'https://marketplace.visualstudio.com/items?itemName=anthropic.claude-code',

57 altCmd: 'code --install-extension anthropic.claude-code',

58 guideHref: '/en/vs-code'

59 },

60 jetbrains: {

61 name: 'JetBrains',

62 tagline: 'Native plugin for IntelliJ, PyCharm, WebStorm, and other JetBrains IDEs.',

63 installLabel: 'Install from Marketplace',

64 installHref: 'https://plugins.jetbrains.com/plugin/27310-claude-code-beta-',

65 guideHref: '/en/jetbrains'

66 }

67 };

68 const PROVIDERS = [{

69 key: 'anthropic',

70 label: 'Anthropic'

71 }, {

72 key: 'bedrock',

73 label: 'Amazon Bedrock'

74 }, {

75 key: 'foundry',

76 label: 'Microsoft Foundry'

77 }, {

78 key: 'vertex',

79 label: 'Google Vertex AI'

80 }];

81 const PROVIDER_NOTICE = {

82 bedrock: <>

83 <strong>Configure your AWS account first.</strong> Running on Bedrock

84 requires model access enabled in the AWS console and IAM credentials.{' '}

85 <a href="/en/amazon-bedrock">Bedrock setup guide →</a>

86 </>,

87 vertex: <>

88 <strong>Configure your GCP project first.</strong> Running on Vertex AI

89 requires the Vertex API enabled and a service account with the right

90 permissions.{' '}

91 <a href="/en/google-vertex-ai">Vertex setup guide →</a>

92 </>,

93 foundry: <>

94 <strong>Configure your Azure resources first.</strong> Running on

95 Microsoft Foundry requires an Azure subscription with a Foundry resource

96 and model deployments provisioned.{' '}

97 <a href="/en/microsoft-foundry">Foundry setup guide →</a>

98 </>

99 };

100 const iconCheck = (size = 14) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="3" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

101 <polyline points="20 6 9 17 4 12" />

102 </svg>;

103 const iconCopy = (size = 14) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

104 <rect x="9" y="9" width="13" height="13" rx="2" />

105 <path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" />

106 </svg>;

107 const iconArrowRight = (size = 13) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

108 <line x1="5" y1="12" x2="19" y2="12" />

109 <polyline points="12 5 19 12 12 19" />

110 </svg>;

111 const iconArrowUpRight = (size = 14) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

112 <line x1="7" y1="17" x2="17" y2="7" />

113 <polyline points="7 7 17 7 17 17" />

114 </svg>;

115 const iconInfo = (size = 16) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

116 <circle cx="12" cy="12" r="10" />

117 <line x1="12" y1="16" x2="12" y2="12" />

118 <line x1="12" y1="8" x2="12.01" y2="8" />

119 </svg>;

120 const [target, setTarget] = useState(defaultSurface);

121 const [team, setTeam] = useState(false);

122 const [provider, setProvider] = useState('anthropic');

123 const [pkg, setPkg] = useState(() => (/Win/).test(navigator.userAgent) ? 'win' : 'mac');

124 const [winCmd, setWinCmd] = useState(false);

125 const [copied, setCopied] = useState(null);

126 const copyTimer = useRef(null);

127 const handleCopy = async (text, key) => {

128 try {

129 await navigator.clipboard.writeText(text);

130 } catch {

131 const ta = document.createElement('textarea');

132 ta.value = text;

133 document.body.appendChild(ta);

134 ta.select();

135 document.execCommand('copy');

136 document.body.removeChild(ta);

137 }

138 clearTimeout(copyTimer.current);

139 setCopied(key);

140 copyTimer.current = setTimeout(() => setCopied(null), 1800);

141 };

142 const cardBodyCmd = (cmd, prompt) => {

143 const on = copied === 'term';

144 return <div className="cc-ic-card-body">

145 <span className="cc-ic-prompt">{prompt || '$'}</span>

146 <div className="cc-ic-cmd">{cmd}</div>

147 <button type="button" className={'cc-ic-copy' + (on ? ' cc-ic-copied' : '')} onClick={() => handleCopy(cmd, 'term')}>

148 {on ? iconCheck(13) : iconCopy(13)}

149 <span>{on ? 'Copied' : 'Copy'}</span>

150 </button>

151 </div>;

152 };

153 const isWinInstaller = pkg === 'win';

154 const isWinPrompt = pkg === 'win' || pkg === 'winget';

155 const terminalCmd = isWinInstaller ? WIN_VARIANTS[winCmd ? 'cmd' : 'ps'] : TERM[pkg].cmd;

156 const alt = ALT_TARGETS[target];

157 const showNotice = team && provider !== 'anthropic';

158 const STYLES = `

159.cc-ic {

160 --ic-slate: #141413;

161 --ic-clay: #d97757;

162 --ic-clay-deep: #c6613f;

163 --ic-gray-000: #ffffff;

164 --ic-gray-150: #f0eee6;

165 --ic-gray-550: #73726c;

166 --ic-gray-700: #3d3d3a;

167 --ic-border-subtle: rgba(31, 30, 29, 0.08);

168 --ic-border-default: rgba(31, 30, 29, 0.15);

169 --ic-border-strong: rgba(31, 30, 29, 0.3);

170 --ic-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Courier New', monospace;

171 font-family: 'Anthropic Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;

172 font-size: 14px; line-height: 1.5; color: var(--ic-slate);

173 margin: 8px 0 32px;

174}

175.dark .cc-ic {

176 --ic-slate: #f0eee6;

177 --ic-gray-000: #262624;

178 --ic-gray-150: #1f1e1d;

179 --ic-gray-550: #91908a;

180 --ic-gray-700: #bfbdb4;

181 --ic-border-subtle: rgba(240, 238, 230, 0.08);

182 --ic-border-default: rgba(240, 238, 230, 0.14);

183 --ic-border-strong: rgba(240, 238, 230, 0.28);

184}

185.dark .cc-ic-check { background: transparent; }

186.dark .cc-ic-card { border: 0.5px solid var(--ic-border-subtle); }

187.dark .cc-ic-p-pill.cc-ic-active { box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); }

188.cc-ic *, .cc-ic *::before, .cc-ic *::after { box-sizing: border-box; }

189.cc-ic a { text-decoration: none; }

190.cc-ic a:not([class]) { color: inherit; }

191.cc-ic button { font-family: inherit; cursor: pointer; }

192 

193.cc-ic-tab-strip {

194 display: inline-flex; gap: 2px;

195 padding: 4px; background: var(--ic-gray-150);

196 border-radius: 10px; overflow-x: auto;

197 max-width: 100%;

198}

199.cc-ic-tab {

200 appearance: none; background: none; border: none;

201 padding: 10px 18px; font-size: 15px; font-weight: 430;

202 color: var(--ic-gray-550); border-radius: 7px;

203 white-space: nowrap;

204 transition: color 0.12s, background-color 0.12s;

205}

206.cc-ic-tab:hover { color: var(--ic-gray-700); }

207.cc-ic-tab.cc-ic-active {

208 color: var(--ic-slate); font-weight: 500;

209 background: var(--ic-gray-000);

210 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);

211}

212.dark .cc-ic-tab.cc-ic-active { box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4); }

213 

214.cc-ic-team-wrap { padding: 16px 0 20px; }

215.cc-ic-team-toggle {

216 display: flex; align-items: center; gap: 12px; font-family: inherit;

217 padding: 12px 16px; font-size: 14px; font-weight: 430;

218 color: var(--ic-gray-700); cursor: pointer; user-select: none;

219 width: fit-content; background: var(--ic-gray-150);

220 border: 0.5px solid var(--ic-border-subtle); border-radius: 8px;

221 transition: border-color 0.15s;

222}

223.cc-ic-team-toggle:hover { border-color: var(--ic-border-default); }

224.cc-ic-team-toggle.cc-ic-checked {

225 background: rgba(217, 119, 87, 0.08);

226 border-color: rgba(217, 119, 87, 0.25);

227}

228.cc-ic-check {

229 width: 16px; height: 16px;

230 border: 1px solid var(--ic-border-strong); border-radius: 4px;

231 background: var(--ic-gray-000);

232 display: flex; align-items: center; justify-content: center;

233 flex-shrink: 0;

234}

235.cc-ic-check svg { color: #fff; display: none; }

236.cc-ic-team-toggle.cc-ic-checked .cc-ic-check { background: var(--ic-clay-deep); border-color: var(--ic-clay-deep); }

237.cc-ic-team-toggle.cc-ic-checked .cc-ic-check svg { display: block; }

238 

239.cc-ic-team-reveal { display: flex; flex-direction: column; gap: 12px; margin-bottom: 16px; }

240.cc-ic-sales {

241 display: flex; align-items: center; justify-content: space-between;

242 gap: 16px; padding: 14px 16px;

243 background: var(--ic-gray-000); border: 0.5px solid var(--ic-border-default);

244 border-radius: 8px; flex-wrap: wrap;

245}

246.cc-ic-sales-text { font-size: 13px; color: var(--ic-gray-700); line-height: 1.5; flex: 1; min-width: 200px; }

247.cc-ic-sales-text strong { font-weight: 550; color: var(--ic-slate); }

248.cc-ic-sales-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }

249.cc-ic-btn-clay {

250 display: inline-flex; align-items: center; gap: 8px;

251 background: var(--ic-clay-deep); color: #fff; border: none;

252 border-radius: 8px; padding: 8px 14px;

253 font-size: 13px; font-weight: 500;

254 transition: background-color 0.15s; white-space: nowrap;

255}

256.cc-ic-btn-clay:hover { background: var(--ic-clay); }

257.cc-ic-btn-ghost {

258 display: inline-flex; align-items: center; gap: 8px;

259 background: transparent; color: var(--ic-gray-700);

260 border: 0.5px solid var(--ic-border-default);

261 border-radius: 8px; padding: 8px 14px;

262 font-size: 13px; font-weight: 500;

263}

264.cc-ic-btn-ghost:hover { background: rgba(0, 0, 0, 0.04); }

265 

266.cc-ic-provider-bar {

267 display: flex; align-items: center; gap: 12px;

268 padding: 14px 16px; background: var(--ic-gray-150);

269 border-radius: 8px; font-size: 13px; flex-wrap: wrap;

270}

271.cc-ic-provider-bar .cc-ic-label { color: var(--ic-gray-550); flex-shrink: 0; }

272.cc-ic-provider-pills { display: flex; gap: 4px; flex-wrap: wrap; }

273.cc-ic-p-pill {

274 appearance: none; border: none; background: transparent;

275 padding: 6px 12px; border-radius: 6px;

276 font-size: 13px; font-weight: 430; color: var(--ic-gray-700);

277 white-space: nowrap;

278}

279.cc-ic-p-pill:hover { background: rgba(0, 0, 0, 0.04); }

280.cc-ic-p-pill.cc-ic-active {

281 background: var(--ic-gray-000); color: var(--ic-slate);

282 font-weight: 500; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);

283}

284.cc-ic-provider-notice {

285 display: flex; padding: 16px 18px;

286 background: var(--ic-gray-000); border: 0.5px solid var(--ic-border-default);

287 border-radius: 8px; gap: 14px; align-items: flex-start;

288}

289.cc-ic-provider-notice > svg { color: var(--ic-gray-550); margin-top: 2px; flex-shrink: 0; }

290.cc-ic-provider-notice-body { font-size: 14px; line-height: 1.55; color: var(--ic-gray-700); }

291.cc-ic-provider-notice-body strong { font-weight: 550; color: var(--ic-slate); }

292.cc-ic-provider-notice-body a { color: var(--ic-clay-deep); font-weight: 500; }

293.cc-ic-provider-notice-body a:hover { text-decoration: underline; }

294 

295.cc-ic-card { background: #141413; border-radius: 12px; overflow: hidden; }

296.cc-ic-subtabs {

297 display: flex; align-items: center;

298 background: #1a1918;

299 border-bottom: 0.5px solid rgba(255, 255, 255, 0.08);

300 padding: 0 8px; overflow-x: auto;

301}

302.cc-ic-subtab {

303 appearance: none; background: none; border: none;

304 padding: 12px 16px; font-size: 12px;

305 color: rgba(255, 255, 255, 0.5);

306 position: relative; white-space: nowrap;

307}

308.cc-ic-subtab:hover { color: rgba(255, 255, 255, 0.75); }

309.cc-ic-subtab.cc-ic-active { color: #fff; }

310.cc-ic-subtab.cc-ic-active::after {

311 content: ''; position: absolute;

312 left: 12px; right: 12px; bottom: -0.5px;

313 height: 2px; background: var(--ic-clay);

314}

315.cc-ic-shell-switch {

316 display: inline-flex; gap: 2px;

317 margin: 14px 26px 0; padding: 3px;

318 background: rgba(255, 255, 255, 0.06);

319 border: 0.5px solid rgba(255, 255, 255, 0.08);

320 border-radius: 8px;

321 font-family: inherit;

322}

323.cc-ic-shell-option {

324 font: inherit; font-size: 12px; font-weight: 500;

325 padding: 5px 12px; border-radius: 6px;

326 background: transparent; border: none;

327 color: rgba(255, 255, 255, 0.55);

328 cursor: pointer; user-select: none; white-space: nowrap;

329 transition: color 120ms ease, background-color 120ms ease;

330}

331.cc-ic-shell-option:hover { color: rgba(255, 255, 255, 0.85); }

332.cc-ic-shell-option.cc-ic-active {

333 background: rgba(255, 255, 255, 0.12);

334 color: #fff;

335 box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25);

336}

337 

338.cc-ic-card-body { padding: 24px 26px; display: flex; align-items: flex-start; gap: 14px; }

339.cc-ic-prompt {

340 color: var(--ic-clay); font-family: var(--ic-font-mono);

341 font-size: 17px; user-select: none; padding-top: 2px;

342}

343.cc-ic-cmd {

344 flex: 1; font-family: var(--ic-font-mono);

345 font-size: 17px; color: #f0eee6;

346 line-height: 1.55; white-space: pre-wrap; word-break: break-word;

347}

348.cc-ic-copy {

349 display: inline-flex; align-items: center; gap: 6px;

350 background: rgba(255, 255, 255, 0.08);

351 border: 0.5px solid rgba(255, 255, 255, 0.12);

352 color: rgba(255, 255, 255, 0.85);

353 padding: 7px 13px; border-radius: 8px;

354 font-size: 13px; font-weight: 500; flex-shrink: 0;

355}

356.cc-ic-copy:hover { background: rgba(255, 255, 255, 0.14); }

357.cc-ic-copy.cc-ic-copied { background: var(--ic-clay-deep); border-color: var(--ic-clay-deep); color: #fff; }

358 

359.cc-ic-below {

360 margin-top: 12px; font-size: 13px; color: var(--ic-gray-550);

361 display: flex; gap: 16px; flex-wrap: wrap; align-items: baseline;

362}

363.cc-ic-below a { color: var(--ic-gray-700); border-bottom: 0.5px solid var(--ic-border-default); }

364.cc-ic-below a:hover { color: var(--ic-clay-deep); border-bottom-color: var(--ic-clay-deep); }

365.cc-ic-handoff {

366 padding: 22px 24px;

367 background: linear-gradient(180deg, #faf9f4 0%, #f3f1e9 100%);

368 border: 0.5px solid var(--ic-border-default);

369 border-radius: 12px;

370 box-shadow: 0 1px 2px rgba(31, 30, 29, 0.04), 0 6px 16px -4px rgba(31, 30, 29, 0.06);

371}

372.dark .cc-ic-handoff {

373 background: linear-gradient(180deg, #262624 0%, #1f1e1d 100%);

374 box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3), 0 6px 16px -4px rgba(0, 0, 0, 0.4);

375}

376.cc-ic-handoff-title {

377 font-size: 16px; font-weight: 550; color: var(--ic-slate);

378 letter-spacing: -0.01em; margin-bottom: 4px;

379}

380.cc-ic-handoff-sub {

381 font-size: 14px; line-height: 1.5; color: var(--ic-gray-700);

382 margin-bottom: 18px;

383}

384.cc-ic-handoff-actions { display: flex; gap: 10px; flex-wrap: wrap; }

385.cc-ic-handoff-alt {

386 margin-top: 12px; font-size: 12px; color: var(--ic-gray-550);

387}

388.cc-ic-handoff-alt code {

389 font-family: var(--ic-font-mono); font-size: 11px;

390 background: var(--ic-gray-150); padding: 2px 6px;

391 border-radius: 4px; color: var(--ic-gray-700);

392}

393.cc-ic-copy-sm {

394 appearance: none; border: none;

395 display: inline-flex; align-items: center; justify-content: center;

396 width: 22px; height: 22px;

397 margin-left: 4px; vertical-align: middle;

398 background: var(--ic-gray-150); color: var(--ic-gray-550);

399 border-radius: 4px;

400 transition: color 0.1s, background-color 0.1s;

401}

402.cc-ic-copy-sm:hover { color: var(--ic-gray-700); background: var(--ic-border-default); }

403.cc-ic-copy-sm.cc-ic-copied { background: var(--ic-clay-deep); color: #fff; }

404 

405@media (max-width: 720px) {

406 .cc-ic-tab { padding: 12px 14px; font-size: 14px; }

407 .cc-ic-sales-actions { width: 100%; }

408 .cc-ic-card-body { padding: 20px; }

409 .cc-ic-cmd { font-size: 15px; }

410}

411`;

412 return <div className="cc-ic not-prose">

413 <style>{STYLES}</style>

414 

415 {}

416 <div className="cc-ic-tab-strip" role="tablist">

417 {TABS.map(t => <button key={t.key} type="button" role="tab" aria-selected={target === t.key} className={'cc-ic-tab' + (target === t.key ? ' cc-ic-active' : '')} onClick={() => setTarget(t.key)}>

418 {t.label}

419 </button>)}

420 </div>

421 

422 {}

423 <div className="cc-ic-team-wrap">

424 <button type="button" role="switch" aria-checked={team} className={'cc-ic-team-toggle' + (team ? ' cc-ic-checked' : '')} onClick={() => setTeam(!team)}>

425 <span className="cc-ic-check">{iconCheck(11)}</span>

426 <span>

427 I’m buying for a team or company (SSO, AWS/Azure/GCP, central billing)

428 </span>

429 </button>

430 </div>

431 

432 {}

433 {team && <div className="cc-ic-team-reveal">

434 <div className="cc-ic-sales">

435 <div className="cc-ic-sales-text">

436 <strong>Set up your team:</strong> self-serve or talk to sales.

437 </div>

438 <div className="cc-ic-sales-actions">

439 <a href="https://claude.ai/upgrade?initialPlanType=team&amp;utm_source=claude_code&amp;utm_medium=docs&amp;utm_content=configurator_team_get_started" className="cc-ic-btn-ghost">

440 Get started

441 </a>

442 <a href="https://www.anthropic.com/contact-sales?utm_source=claude_code&amp;utm_medium=docs&amp;utm_content=configurator_team_contact_sales" className="cc-ic-btn-clay">

443 Contact sales {iconArrowRight()}

444 </a>

445 </div>

446 </div>

447 

448 <div className="cc-ic-provider-bar">

449 <span className="cc-ic-label">Run on</span>

450 <div className="cc-ic-provider-pills" role="radiogroup" aria-label="Provider">

451 {PROVIDERS.map(p => <button key={p.key} type="button" role="radio" aria-checked={provider === p.key} className={'cc-ic-p-pill' + (provider === p.key ? ' cc-ic-active' : '')} onClick={() => setProvider(p.key)}>

452 {p.label}

453 </button>)}

454 </div>

455 </div>

456 

457 {showNotice && <div className="cc-ic-provider-notice">

458 {iconInfo()}

459 <div className="cc-ic-provider-notice-body">

460 {PROVIDER_NOTICE[provider]}

461 </div>

462 </div>}

463 </div>}

464 

465 {}

466 {target === 'terminal' && <div className="cc-ic-card">

467 <div className="cc-ic-subtabs" role="tablist" aria-label="Install method">

468 {Object.keys(TERM).map(k => <button key={k} type="button" role="tab" aria-selected={pkg === k} className={'cc-ic-subtab' + (pkg === k ? ' cc-ic-active' : '')} onClick={() => setPkg(k)}>

469 {TERM[k].label}

470 </button>)}

471 </div>

472 {isWinInstaller && <div className="cc-ic-shell-switch" role="tablist" aria-label="Shell">

473 {[{

474 k: 'ps',

475 label: 'PowerShell'

476 }, {

477 k: 'cmd',

478 label: 'CMD'

479 }].map(({k, label}) => {

480 const active = k === 'cmd' === winCmd;

481 return <button key={k} type="button" role="tab" aria-selected={active} className={'cc-ic-shell-option' + (active ? ' cc-ic-active' : '')} onClick={() => setWinCmd(k === 'cmd')}>

482 {label}

483 </button>;

484 })}

485 </div>}

486 {cardBodyCmd(terminalCmd, isWinPrompt ? '>' : '$')}

487 </div>}

488 

489 {}

490 {target === 'terminal' && <div className="cc-ic-below">

491 {isWinInstaller && <span>

492 <a href="https://git-scm.com/downloads/win" target="_blank" rel="noopener">

493 Git for Windows

494 </a>{' '}

495 recommended. PowerShell is used if Git Bash is absent.

496 </span>}

497 {(pkg === 'brew' || pkg === 'winget') && <span>

498 Does not auto-update. Run{' '}

499 <code>{pkg === 'brew' ? 'brew upgrade claude-code' : 'winget upgrade Anthropic.ClaudeCode'}</code>{' '}

500 periodically.

501 </span>}

502 <a href="/en/troubleshoot-install">Installation troubleshooting</a>

503 </div>}

504 

505 {alt && <div className="cc-ic-handoff">

506 <div className="cc-ic-handoff-title">Claude Code for {alt.name}</div>

507 <div className="cc-ic-handoff-sub">{alt.tagline}</div>

508 <div className="cc-ic-handoff-actions">

509 <a href={alt.installHref} className="cc-ic-btn-clay" {...alt.installHref.startsWith('http') ? {

510 target: '_blank',

511 rel: 'noopener'

512 } : {}}>

513 {alt.installLabel} {iconArrowUpRight(13)}

514 </a>

515 <a href={alt.guideHref} className="cc-ic-btn-ghost">

516 {alt.name} guide {iconArrowRight(12)}

517 </a>

518 </div>

519 {alt.altCmd && <div className="cc-ic-handoff-alt">

520 or run <code>{alt.altCmd}</code>

521 <button type="button" className={'cc-ic-copy-sm' + (copied === 'alt' ? ' cc-ic-copied' : '')} onClick={() => handleCopy(alt.altCmd, 'alt')} aria-label="Copy command">

522 {copied === 'alt' ? iconCheck(11) : iconCopy(11)}

523 </button>

524 </div>}

525 </div>}

526 </div>;

527};

528 

529export const Experiment = ({flag, treatment, children}) => {

530 const VID_KEY = 'exp_vid';

531 const CONSENT_COUNTRIES = new Set(['AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'RE', 'GP', 'MQ', 'GF', 'YT', 'BL', 'MF', 'PM', 'WF', 'PF', 'NC', 'AW', 'CW', 'SX', 'FO', 'GL', 'AX', 'GB', 'UK', 'AI', 'BM', 'IO', 'VG', 'KY', 'FK', 'GI', 'MS', 'PN', 'SH', 'TC', 'GG', 'JE', 'IM', 'CA', 'BR', 'IN']);

532 const fnv1a = s => {

533 let h = 0x811c9dc5;

534 for (let i = 0; i < s.length; i++) {

535 h ^= s.charCodeAt(i);

536 h += (h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24);

537 }

538 return h >>> 0;

539 };

540 const bucket = (seed, vid) => fnv1a(fnv1a(seed + vid) + '') % 10000 < 5000 ? 'control' : 'treatment';

541 const [decision] = useState(() => {

542 const params = new URLSearchParams(location.search);

543 const preBucketed = document.documentElement.dataset['gb_' + flag.replace(/-/g, '_')];

544 const force = params.get('gb-force');

545 if (force) {

546 for (const p of force.split(',')) {

547 const [k, v] = p.split(':');

548 if (k === flag) return {

549 variant: v || 'treatment',

550 track: false

551 };

552 }

553 }

554 if (navigator.globalPrivacyControl) {

555 return {

556 variant: 'control',

557 track: false

558 };

559 }

560 const prefsMatch = document.cookie.match(/(?:^|; )anthropic-consent-preferences=([^;]+)/);

561 if (prefsMatch) {

562 try {

563 if (JSON.parse(decodeURIComponent(prefsMatch[1])).analytics !== true) {

564 return {

565 variant: 'control',

566 track: false

567 };

568 }

569 } catch {

570 return {

571 variant: 'control',

572 track: false

573 };

574 }

575 } else {

576 const country = params.get('country')?.toUpperCase() || (document.cookie.match(/(?:^|; )cf_geo=([A-Z]{2})/) || [])[1];

577 if (!country || CONSENT_COUNTRIES.has(country)) {

578 return {

579 variant: 'control',

580 track: false

581 };

582 }

583 }

584 let vid;

585 try {

586 const ajsMatch = document.cookie.match(/(?:^|; )ajs_anonymous_id=([^;]+)/);

587 if (ajsMatch) {

588 vid = decodeURIComponent(ajsMatch[1]).replace(/^"|"$/g, '');

589 } else {

590 vid = localStorage.getItem(VID_KEY);

591 if (!vid) {

592 vid = crypto.randomUUID();

593 }

594 document.cookie = `ajs_anonymous_id=${vid}; domain=.claude.com; path=/; Secure; SameSite=Lax; max-age=31536000`;

595 }

596 try {

597 localStorage.setItem(VID_KEY, vid);

598 } catch {}

599 } catch {

600 return {

601 variant: 'control',

602 track: false

603 };

604 }

605 const variant = preBucketed === '1' ? 'treatment' : preBucketed === '0' ? 'control' : bucket(flag, vid);

606 return {

607 variant,

608 track: true,

609 vid

610 };

611 });

612 useEffect(() => {

613 if (!decision.track) return;

614 fetch('https://api.anthropic.com/api/event_logging/v2/batch', {

615 method: 'POST',

616 headers: {

617 'Content-Type': 'application/json',

618 'x-service-name': 'claude_code_docs'

619 },

620 body: JSON.stringify({

621 events: [{

622 event_type: 'GrowthbookExperimentEvent',

623 event_data: {

624 device_id: decision.vid,

625 anonymous_id: decision.vid,

626 timestamp: new Date().toISOString(),

627 experiment_id: flag,

628 variation_id: decision.variant === 'treatment' ? 1 : 0,

629 environment: 'production'

630 }

631 }]

632 }),

633 keepalive: true

634 }).catch(() => {});

635 }, []);

636 return decision.variant === 'treatment' ? treatment : children;

637};

638 

639Claude Code adalah asisten pengkodean bertenaga AI yang membantu Anda membangun fitur, memperbaiki bug, dan mengotomatisasi tugas pengembangan. Ini memahami seluruh basis kode Anda dan dapat bekerja di berbagai file dan alat untuk menyelesaikan pekerjaan.

640 

641<div data-gb-slot="overview-install-configurator">

642 <Experiment flag="overview-install-configurator" treatment={<InstallConfigurator />} />

643</div>

644 

645## Memulai

646 

647Pilih lingkungan Anda untuk memulai. Sebagian besar permukaan memerlukan akun [langganan Claude](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=overview_pricing) atau [Konsol Anthropic](https://console.anthropic.com/). CLI Terminal dan VS Code juga mendukung [penyedia pihak ketiga](/id/third-party-integrations).

648 

649<Tabs>

650 <Tab title="Terminal">

651 CLI lengkap untuk bekerja dengan Claude Code langsung di terminal Anda. Edit file, jalankan perintah, dan kelola seluruh proyek Anda dari baris perintah.

652 

653 To install Claude Code, use one of the following methods:

654 

655 <Tabs>

656 <Tab title="Native Install (Recommended)">

657 **macOS, Linux, WSL:**

658 

659 ```bash theme={null}

660 curl -fsSL https://claude.ai/install.sh | bash

661 ```

662 

663 **Windows PowerShell:**

664 

665 ```powershell theme={null}

666 irm https://claude.ai/install.ps1 | iex

667 ```

668 

669 **Windows CMD:**

670 

671 ```batch theme={null}

672 curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd

673 ```

674 

675 If you see `The token '&&' is not a valid statement separator`, you're in PowerShell, not CMD. If you see `'irm' is not recognized as an internal or external command`, you're in CMD, not PowerShell. Your prompt shows `PS C:\` when you're in PowerShell and `C:\` without the `PS` when you're in CMD.

676 

677 [Git for Windows](https://git-scm.com/downloads/win) is recommended on native Windows so Claude Code can use the Bash tool. If Git for Windows is not installed, Claude Code uses PowerShell as the shell tool instead. WSL setups do not need Git for Windows.

678 

679 <Info>

680 Native installations automatically update in the background to keep you on the latest version.

681 </Info>

682 </Tab>

683 

684 <Tab title="Homebrew">

685 ```bash theme={null}

686 brew install --cask claude-code

687 ```

688 

689 Homebrew offers two casks. `claude-code` tracks the stable release channel, which is typically about a week behind and skips releases with major regressions. `claude-code@latest` tracks the latest channel and receives new versions as soon as they ship.

690 

691 <Info>

692 Homebrew installations do not auto-update. Run `brew upgrade claude-code` or `brew upgrade claude-code@latest`, depending on which cask you installed, to get the latest features and security fixes.

693 </Info>

694 </Tab>

695 

696 <Tab title="WinGet">

697 ```powershell theme={null}

698 winget install Anthropic.ClaudeCode

699 ```

700 

701 <Info>

702 WinGet installations do not auto-update. Run `winget upgrade Anthropic.ClaudeCode` periodically to get the latest features and security fixes.

703 </Info>

704 </Tab>

705 </Tabs>

706 

707 You can also install with [apt, dnf, or apk](/en/setup#install-with-linux-package-managers) on Debian, Fedora, RHEL, and Alpine.

708 

709 Kemudian mulai Claude Code di proyek apa pun:

710 

711 ```bash theme={null}

712 cd your-project

713 claude

714 ```

715 

716 Anda akan diminta untuk masuk pada penggunaan pertama. Itu saja! [Lanjutkan dengan Quickstart →](/id/quickstart)

717 

718 <Tip>

719 Lihat [pengaturan lanjutan](/id/setup) untuk opsi instalasi, pembaruan manual, atau instruksi penghapusan. Kunjungi [pemecahan masalah instalasi](/id/troubleshoot-install) jika Anda mengalami masalah.

720 </Tip>

721 </Tab>

722 

723 <Tab title="VS Code">

724 Ekstensi VS Code menyediakan diff inline, @-mentions, tinjauan rencana, dan riwayat percakapan langsung di editor Anda.

725 

726 * [Instal untuk VS Code](vscode:extension/anthropic.claude-code)

727 * [Instal untuk Cursor](cursor:extension/anthropic.claude-code)

728 

729 Atau cari "Claude Code" di tampilan Ekstensi (`Cmd+Shift+X` di Mac, `Ctrl+Shift+X` di Windows/Linux). Setelah menginstal, buka Palet Perintah (`Cmd+Shift+P` / `Ctrl+Shift+P`), ketik "Claude Code", dan pilih **Buka di Tab Baru**.

730 

731 [Mulai dengan VS Code →](/id/vs-code#get-started)

732 </Tab>

733 

734 <Tab title="Desktop app">

735 Aplikasi mandiri untuk menjalankan Claude Code di luar IDE atau terminal Anda. Tinjau diff secara visual, jalankan beberapa sesi berdampingan, jadwalkan tugas berulang, dan mulai sesi cloud.

736 

737 Unduh dan instal:

738 

739 * [macOS](https://claude.ai/api/desktop/darwin/universal/dmg/latest/redirect?utm_source=claude_code\&utm_medium=docs) (Intel dan Apple Silicon)

740 * [Windows](https://claude.ai/api/desktop/win32/x64/setup/latest/redirect?utm_source=claude_code\&utm_medium=docs) (x64)

741 * [Windows ARM64](https://claude.ai/api/desktop/win32/arm64/setup/latest/redirect?utm_source=claude_code\&utm_medium=docs)

742 

743 Setelah menginstal, luncurkan Claude, masuk, dan klik tab **Code** untuk mulai pengkodean. [Langganan berbayar](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=overview_desktop_pricing) diperlukan.

744 

745 [Pelajari lebih lanjut tentang aplikasi desktop →](/id/desktop-quickstart)

746 </Tab>

747 

748 <Tab title="Web">

749 Jalankan Claude Code di browser Anda tanpa pengaturan lokal. Mulai tugas yang berjalan lama dan periksa kembali saat selesai, bekerja pada repo yang tidak Anda miliki secara lokal, atau jalankan beberapa tugas secara paralel. Tersedia di browser desktop dan aplikasi Claude iOS.

750 

751 Mulai pengkodean di [claude.ai/code](https://claude.ai/code).

752 

753 [Mulai di web →](/id/web-quickstart)

754 </Tab>

755 

756 <Tab title="JetBrains">

757 Plugin untuk IntelliJ IDEA, PyCharm, WebStorm, dan IDE JetBrains lainnya dengan tampilan diff interaktif dan berbagi konteks seleksi.

758 

759 Instal [plugin Claude Code](https://plugins.jetbrains.com/plugin/27310-claude-code-beta-) dari JetBrains Marketplace dan mulai ulang IDE Anda.

760 

761 [Mulai dengan JetBrains →](/id/jetbrains)

762 </Tab>

763</Tabs>

764 

765## Apa yang dapat Anda lakukan

766 

767Berikut adalah beberapa cara Anda dapat menggunakan Claude Code:

768 

769<AccordionGroup>

770 <Accordion title="Otomatisasi pekerjaan yang terus Anda tunda" icon="wand-magic-sparkles">

771 Claude Code menangani tugas-tugas membosankan yang menghabiskan hari Anda: menulis tes untuk kode yang tidak diuji, memperbaiki kesalahan lint di seluruh proyek, menyelesaikan konflik penggabungan, memperbarui dependensi, dan menulis catatan rilis.

772 

773 ```bash theme={null}

774 claude "write tests for the auth module, run them, and fix any failures"

775 ```

776 </Accordion>

777 

778 <Accordion title="Bangun fitur dan perbaiki bug" icon="hammer">

779 Jelaskan apa yang Anda inginkan dalam bahasa biasa. Claude Code merencanakan pendekatan, menulis kode di berbagai file, dan memverifikasi bahwa itu berfungsi.

780 

781 Untuk bug, tempel pesan kesalahan atau jelaskan gejalanya. Claude Code melacak masalah melalui basis kode Anda, mengidentifikasi akar penyebabnya, dan menerapkan perbaikan. Lihat [alur kerja umum](/id/common-workflows) untuk contoh lebih lanjut.

782 </Accordion>

783 

784 <Accordion title="Buat commit dan pull request" icon="code-branch">

785 Claude Code bekerja langsung dengan git. Ini menampilkan perubahan, menulis pesan commit, membuat cabang, dan membuka pull request.

786 

787 ```bash theme={null}

788 claude "commit my changes with a descriptive message"

789 ```

790 

791 Di CI, Anda dapat mengotomatisasi tinjauan kode dan triase masalah dengan [GitHub Actions](/id/github-actions) atau [GitLab CI/CD](/id/gitlab-ci-cd).

792 </Accordion>

793 

794 <Accordion title="Hubungkan alat Anda dengan MCP" icon="plug">

795 [Model Context Protocol (MCP)](/id/mcp) adalah standar terbuka untuk menghubungkan alat AI ke sumber data eksternal. Dengan MCP, Claude Code dapat membaca dokumen desain Anda di Google Drive, memperbarui tiket di Jira, menarik data dari Slack, atau menggunakan alat khusus Anda sendiri.

796 </Accordion>

797 

798 <Accordion title="Sesuaikan dengan instruksi, skills, dan hooks" icon="sliders">

799 [`CLAUDE.md`](/id/memory) adalah file markdown yang Anda tambahkan ke root proyek Anda yang dibaca Claude Code di awal setiap sesi. Gunakan untuk menetapkan standar pengkodean, keputusan arsitektur, perpustakaan pilihan, dan daftar periksa tinjauan. Claude juga membangun [memori otomatis](/id/memory#auto-memory) saat bekerja, menyimpan pembelajaran seperti perintah build dan wawasan debugging di seluruh sesi tanpa Anda menulis apa pun.

800 

801 Buat [perintah khusus](/id/skills) untuk mengemas alur kerja yang dapat diulang yang dapat dibagikan tim Anda, seperti `/review-pr` atau `/deploy-staging`.

802 

803 [Hooks](/id/hooks) memungkinkan Anda menjalankan perintah shell sebelum atau sesudah tindakan Claude Code, seperti pemformatan otomatis setelah setiap pengeditan file atau menjalankan lint sebelum commit.

804 </Accordion>

805 

806 <Accordion title="Jalankan tim agen dan bangun agen khusus" icon="users">

807 Spawn [beberapa agen Claude Code](/id/sub-agents) yang bekerja pada bagian berbeda dari tugas secara bersamaan. Agen utama mengoordinasikan pekerjaan, menetapkan subtask, dan menggabungkan hasil.

808 

809 Untuk alur kerja yang sepenuhnya khusus, [Agent SDK](/id/agent-sdk/overview) memungkinkan Anda membangun agen Anda sendiri yang didukung oleh alat dan kemampuan Claude Code, dengan kontrol penuh atas orkestrasi, akses alat, dan izin.

810 </Accordion>

811 

812 <Accordion title="Pipa, skrip, dan otomatisasi dengan CLI" icon="terminal">

813 Claude Code dapat dikomposisi dan mengikuti filosofi Unix. Pipa log ke dalamnya, jalankan di CI, atau rantai dengan alat lain:

814 

815 ```bash theme={null}

816 # Analisis keluaran log terbaru

817 tail -200 app.log | claude -p "Slack me if you see any anomalies"

818 

819 # Otomatisasi terjemahan di CI

820 claude -p "translate new strings into French and raise a PR for review"

821 

822 # Operasi massal di seluruh file

823 git diff main --name-only | claude -p "review these changed files for security issues"

824 ```

825 

826 Lihat [referensi CLI](/id/cli-reference) untuk set lengkap perintah dan flag.

827 </Accordion>

828 

829 <Accordion title="Jadwalkan tugas berulang" icon="clock">

830 Jalankan Claude sesuai jadwal untuk mengotomatisasi pekerjaan yang berulang: tinjauan PR pagi, analisis kegagalan CI semalam, audit dependensi mingguan, atau sinkronisasi dokumen setelah PR digabung.

831 

832 * [Routines](/id/routines) berjalan pada infrastruktur yang dikelola Anthropic, jadi mereka terus berjalan bahkan ketika komputer Anda mati. Mereka juga dapat dipicu oleh panggilan API atau acara GitHub. Buatnya dari web, aplikasi Desktop, atau dengan menjalankan `/schedule` di CLI.

833 * [Tugas terjadwal desktop](/id/desktop-scheduled-tasks) berjalan di mesin Anda, dengan akses langsung ke file dan alat lokal Anda

834 * [`/loop`](/id/scheduled-tasks) mengulangi prompt dalam sesi CLI untuk polling cepat

835 </Accordion>

836 

837 <Accordion title="Bekerja dari mana saja" icon="globe">

838 Sesi tidak terikat pada satu permukaan. Pindahkan pekerjaan antar lingkungan saat konteks Anda berubah:

839 

840 * Tinggalkan meja Anda dan terus bekerja dari ponsel atau browser apa pun dengan [Remote Control](/id/remote-control)

841 * Kirim pesan [Dispatch](/id/desktop#sessions-from-dispatch) tugas dari ponsel Anda dan buka sesi Desktop yang dibuatnya

842 * Mulai tugas yang berjalan lama di [web](/id/claude-code-on-the-web) atau [aplikasi iOS](https://apps.apple.com/app/claude-by-anthropic/id6473753684), kemudian tariknya ke terminal Anda dengan `claude --teleport`

843 * Serahkan sesi terminal ke [aplikasi Desktop](/id/desktop) dengan `/desktop` untuk tinjauan diff visual

844 * Rute tugas dari obrolan tim: sebutkan `@Claude` di [Slack](/id/slack) dengan laporan bug dan dapatkan pull request kembali

845 </Accordion>

846</AccordionGroup>

847 

848## Gunakan Claude Code di mana saja

849 

850Setiap permukaan terhubung ke mesin Claude Code yang mendasar yang sama, jadi file CLAUDE.md, pengaturan, dan server MCP Anda bekerja di semua permukaan.

851 

852Selain lingkungan [Terminal](/id/quickstart), [VS Code](/id/vs-code), [JetBrains](/id/jetbrains), [Desktop](/id/desktop), dan [Web](/id/claude-code-on-the-web) di atas, Claude Code terintegrasi dengan alur kerja CI/CD, obrolan, dan browser:

853 

854| Saya ingin... | Opsi terbaik |

855| -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |

856| Lanjutkan sesi lokal dari ponsel atau perangkat lain | [Remote Control](/id/remote-control) |

857| Dorong acara dari Telegram, Discord, iMessage, atau webhook saya sendiri ke dalam sesi | [Channels](/id/channels) |

858| Mulai tugas secara lokal, lanjutkan di mobile | [Web](/id/claude-code-on-the-web) atau [aplikasi Claude iOS](https://apps.apple.com/app/claude-by-anthropic/id6473753684) |

859| Jalankan Claude sesuai jadwal berulang | [Routines](/id/routines) atau [Tugas terjadwal desktop](/id/desktop-scheduled-tasks) |

860| Otomatisasi tinjauan PR dan triase masalah | [GitHub Actions](/id/github-actions) atau [GitLab CI/CD](/id/gitlab-ci-cd) |

861| Dapatkan tinjauan kode otomatis di setiap PR | [GitHub Code Review](/id/code-review) |

862| Rute laporan bug dari Slack ke pull request | [Slack](/id/slack) |

863| Debug aplikasi web langsung | [Chrome](/id/chrome) |

864| Bangun agen khusus untuk alur kerja Anda sendiri | [Agent SDK](/id/agent-sdk/overview) |

865 

866## Langkah berikutnya

867 

868Setelah Anda menginstal Claude Code, panduan ini membantu Anda menggali lebih dalam.

869 

870* [Quickstart](/id/quickstart): berjalan melalui tugas nyata pertama Anda, dari menjelajahi basis kode hingga melakukan perbaikan

871* [Simpan instruksi dan memori](/id/memory): berikan Claude instruksi persisten dengan file CLAUDE.md dan memori otomatis

872* [Alur kerja umum](/id/common-workflows) dan [praktik terbaik](/id/best-practices): pola untuk mendapatkan hasil maksimal dari Claude Code

873* [Pengaturan](/id/settings): sesuaikan Claude Code untuk alur kerja Anda

874* [Pemecahan masalah](/id/troubleshooting): solusi untuk masalah umum

875* [code.claude.com](https://code.claude.com/): demo, harga, dan detail produk

permission-modes.md +290 −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# Pilih mode izin

6 

7> Kontrol apakah Claude meminta izin sebelum mengedit file atau menjalankan perintah. Siklus mode dengan Shift+Tab di CLI atau gunakan pemilih mode di VS Code, Desktop, dan claude.ai.

8 

9Ketika Claude ingin mengedit file, menjalankan perintah shell, atau membuat permintaan jaringan, ia berhenti dan meminta Anda untuk menyetujui tindakan tersebut. Mode izin mengontrol seberapa sering jeda itu terjadi. Mode yang Anda pilih membentuk alur sesi: mode default membuat Anda meninjau setiap tindakan saat tiba, sementara mode yang lebih longgar memungkinkan Claude bekerja dalam peregangan yang lebih lama tanpa gangguan dan melaporkan kembali saat selesai. Pilih pengawasan lebih untuk pekerjaan sensitif, atau gangguan lebih sedikit ketika Anda mempercayai arahnya.

10 

11## Mode yang tersedia

12 

13Setiap mode membuat tradeoff yang berbeda antara kenyamanan dan pengawasan. Tabel di bawah menunjukkan apa yang dapat dilakukan Claude tanpa prompt izin di setiap mode.

14 

15| Mode | Apa yang berjalan tanpa bertanya | Terbaik untuk |

16| :------------------------------------------------------------------ | :-------------------------------------------------------------------------------------------- | :----------------------------------------- |

17| `default` | Pembacaan saja | Memulai, pekerjaan sensitif |

18| [`acceptEdits`](#auto-approve-file-edits-with-acceptedits-mode) | Pembacaan, pengeditan file, dan perintah filesystem umum (`mkdir`, `touch`, `mv`, `cp`, dll.) | Iterasi pada kode yang Anda tinjau |

19| [`plan`](#analyze-before-you-edit-with-plan-mode) | Pembacaan saja | Menjelajahi basis kode sebelum mengubahnya |

20| [`auto`](#eliminate-prompts-with-auto-mode) | Semuanya, dengan pemeriksaan keamanan latar belakang | Tugas panjang, mengurangi kelelahan prompt |

21| [`dontAsk`](#allow-only-pre-approved-tools-with-dontask-mode) | Hanya alat yang telah disetujui sebelumnya | CI terkunci dan skrip |

22| [`bypassPermissions`](#skip-all-checks-with-bypasspermissions-mode) | Semuanya | Kontainer dan VM terisolasi saja |

23 

24Di setiap mode kecuali `bypassPermissions`, penulisan ke [jalur yang dilindungi](#protected-paths) tidak pernah disetujui otomatis, menjaga status repositori dan konfigurasi Claude sendiri dari kerusakan yang tidak disengaja.

25 

26Mode menetapkan baseline. Lapisi [aturan izin](/id/permissions#manage-permissions) di atas untuk pre-approve atau memblokir alat tertentu di mode apa pun kecuali `bypassPermissions`, yang melewati lapisan izin sepenuhnya.

27 

28## Beralih mode izin

29 

30Anda dapat beralih mode di tengah sesi, saat startup, atau sebagai default yang persisten. Mode diatur melalui kontrol ini, bukan dengan meminta Claude dalam obrolan. Pilih antarmuka Anda di bawah untuk melihat cara mengubahnya.

31 

32<Tabs>

33 <Tab title="CLI">

34 **Selama sesi**: tekan `Shift+Tab` untuk siklus `default` → `acceptEdits` → `plan`. Mode saat ini muncul di bilah status. Tidak setiap mode ada dalam siklus default:

35 

36 * `auto`: muncul ketika akun Anda memenuhi [persyaratan mode auto](#eliminate-prompts-with-auto-mode); bersiklus ke auto menampilkan prompt opt-in sampai Anda menerimanya, atau pilih **Tidak, jangan tanya lagi** untuk menghapus auto dari siklus

37 * `bypassPermissions`: muncul setelah Anda memulai dengan `--permission-mode bypassPermissions`, `--dangerously-skip-permissions`, atau `--allow-dangerously-skip-permissions`; varian `--allow-` menambahkan mode ke siklus tanpa mengaktifkannya

38 * `dontAsk`: tidak pernah muncul dalam siklus; atur dengan `--permission-mode dontAsk`

39 

40 Mode opsional yang diaktifkan masuk setelah `plan`, dengan `bypassPermissions` terlebih dahulu dan `auto` terakhir. Jika Anda memiliki keduanya diaktifkan, Anda akan bersiklus melalui `bypassPermissions` dalam perjalanan ke `auto`.

41 

42 **Saat startup**: lewatkan mode sebagai flag.

43 

44 ```bash theme={null}

45 claude --permission-mode plan

46 ```

47 

48 **Sebagai default**: atur `defaultMode` di [pengaturan](/id/settings#settings-files).

49 

50 ```json theme={null}

51 {

52 "permissions": {

53 "defaultMode": "acceptEdits"

54 }

55 }

56 ```

57 

58 Flag `--permission-mode` yang sama berfungsi dengan `-p` untuk [run non-interaktif](/id/headless).

59 </Tab>

60 

61 <Tab title="VS Code">

62 **Selama sesi**: klik indikator mode di bagian bawah kotak prompt.

63 

64 **Sebagai default**: atur `claudeCode.initialPermissionMode` di pengaturan VS Code, atau gunakan panel pengaturan ekstensi Claude Code.

65 

66 Indikator mode menampilkan label ini, dipetakan ke mode yang masing-masing berlaku:

67 

68 | Label UI | Mode |

69 | :--------------------- | :------------------ |

70 | Minta sebelum mengedit | `default` |

71 | Edit secara otomatis | `acceptEdits` |

72 | Mode rencana | `plan` |

73 | Mode otomatis | `auto` |

74 | Lewati izin | `bypassPermissions` |

75 

76 Mode otomatis muncul di indikator mode setelah Anda mengaktifkan **Izinkan lewati izin dengan berbahaya** di pengaturan ekstensi, tetapi tetap tidak tersedia sampai akun Anda memenuhi setiap persyaratan yang tercantum di [bagian mode auto](#eliminate-prompts-with-auto-mode). Pengaturan `claudeCode.initialPermissionMode` tidak menerima `auto`; untuk memulai dalam mode auto secara default, atur `defaultMode` di [`settings.json`](/id/settings#settings-files) Claude Code Anda sebagai gantinya.

77 

78 Lewati izin juga memerlukan toggle **Izinkan lewati izin dengan berbahaya** sebelum muncul di indikator mode.

79 

80 Lihat [panduan VS Code](/id/vs-code) untuk detail khusus ekstensi.

81 </Tab>

82 

83 <Tab title="JetBrains">

84 Plugin JetBrains menjalankan Claude Code di terminal IDE, jadi beralih mode berfungsi sama seperti di CLI: tekan `Shift+Tab` untuk bersiklus, atau lewatkan `--permission-mode` saat meluncurkan.

85 </Tab>

86 

87 <Tab title="Desktop">

88 Gunakan pemilih mode di sebelah tombol kirim. Mode otomatis dan Lewati izin muncul hanya setelah Anda mengaktifkannya di pengaturan Desktop. Lihat [panduan Desktop](/id/desktop#choose-a-permission-mode).

89 </Tab>

90 

91 <Tab title="Web dan mobile">

92 Gunakan dropdown mode di sebelah kotak prompt di [claude.ai/code](https://claude.ai/code) atau di aplikasi mobile. Prompt izin muncul di claude.ai untuk persetujuan. Mode mana yang muncul tergantung di mana sesi berjalan:

93 

94 * **Sesi cloud** di [Claude Code di web](/id/claude-code-on-the-web): Terima pengeditan otomatis dan Mode rencana. Minta izin, Mode otomatis, dan Lewati izin tidak tersedia.

95 * **Sesi [Remote Control](/id/remote-control)** di mesin lokal Anda: Minta izin, Terima pengeditan otomatis, dan Mode rencana. Mode otomatis dan Lewati izin tidak tersedia.

96 

97 Untuk Remote Control, Anda juga dapat mengatur mode awal saat meluncurkan host:

98 

99 ```bash theme={null}

100 claude remote-control --permission-mode acceptEdits

101 ```

102 </Tab>

103</Tabs>

104 

105## Auto-approve pengeditan file dengan mode acceptEdits

106 

107Mode `acceptEdits` memungkinkan Claude membuat dan mengedit file di direktori kerja Anda tanpa meminta. Bilah status menunjukkan `⏵⏵ accept edits on` saat mode ini aktif.

108 

109Selain pengeditan file, mode `acceptEdits` auto-approve perintah Bash filesystem umum: `mkdir`, `touch`, `rm`, `rmdir`, `mv`, `cp`, dan `sed`. Perintah ini juga auto-approved ketika diawali dengan variabel lingkungan aman seperti `LANG=C` atau `NO_COLOR=1`, atau pembungkus proses seperti `timeout`, `nice`, atau `nohup`. Seperti pengeditan file, auto-approval hanya berlaku untuk jalur di dalam direktori kerja Anda atau `additionalDirectories`. Jalur di luar cakupan itu, penulisan ke [jalur yang dilindungi](#protected-paths), dan semua perintah Bash lainnya masih meminta.

110 

111Ketika [alat PowerShell](/id/tools-reference#powershell-tool) diaktifkan, mode `acceptEdits` juga auto-approve `Set-Content`, `Add-Content`, `Clear-Content`, dan `Remove-Item` pada jalur dalam cakupan, bersama dengan alias umum mereka. Aturan cakupan dan jalur yang dilindungi yang sama berlaku.

112 

113Gunakan `acceptEdits` ketika Anda ingin meninjau perubahan di editor Anda atau melalui `git diff` setelahnya daripada menyetujui setiap pengeditan inline. Tekan `Shift+Tab` sekali dari mode default untuk memasukkannya, atau mulai dengannya langsung:

114 

115```bash theme={null}

116claude --permission-mode acceptEdits

117```

118 

119## Analisis sebelum Anda mengedit dengan mode rencana

120 

121Mode rencana memberi tahu Claude untuk meneliti dan mengusulkan perubahan tanpa membuatnya. Claude membaca file, menjalankan perintah shell untuk menjelajahi, dan menulis rencana, tetapi tidak mengedit sumber Anda. Prompt izin masih berlaku sama seperti mode default.

122 

123Masukkan mode rencana dengan menekan `Shift+Tab` atau mengawali prompt tunggal dengan `/plan`. Anda juga dapat memulai dalam mode rencana dari CLI:

124 

125```bash theme={null}

126claude --permission-mode plan

127```

128 

129Tekan `Shift+Tab` lagi untuk meninggalkan mode rencana tanpa menyetujui rencana.

130 

131Ketika rencana siap, Claude menyajikannya dan menanyakan cara melanjutkan. Dari prompt itu Anda dapat:

132 

133* Setujui dan mulai dalam mode otomatis

134* Setujui dan terima pengeditan

135* Setujui dan tinjau setiap pengeditan secara manual

136* Terus merencanakan dengan umpan balik

137* Perbaiki dengan [Ultraplan](/id/ultraplan) untuk tinjauan berbasis browser

138 

139Setiap opsi persetujuan juga menawarkan untuk menghapus konteks perencanaan terlebih dahulu.

140 

141## Hilangkan prompt dengan mode otomatis

142 

143<Note>

144 Mode otomatis memerlukan Claude Code v2.1.83 atau lebih baru.

145</Note>

146 

147Mode otomatis memungkinkan Claude menjalankan tanpa prompt izin. Model pengklasifikasi terpisah meninjau tindakan sebelum berjalan, memblokir apa pun yang melampaui permintaan Anda, menargetkan infrastruktur yang tidak dikenali, atau tampak didorong oleh konten bermusuhan yang dibaca Claude.

148 

149<Warning>

150 Mode otomatis adalah pratinjau penelitian. Ini mengurangi prompt tetapi tidak menjamin keamanan. Gunakan untuk tugas di mana Anda mempercayai arah umum, bukan sebagai pengganti tinjauan pada operasi sensitif.

151</Warning>

152 

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

154 

155* **Rencana**: Max, Team, Enterprise, atau API. Tidak tersedia di Pro.

156* **Admin**: di Team dan Enterprise, admin harus mengaktifkannya di [pengaturan admin Claude Code](https://claude.ai/admin-settings/claude-code) sebelum pengguna dapat mengaktifkannya. Admin juga dapat menguncinya dengan mengatur `permissions.disableAutoMode` ke `"disable"` di [pengaturan terkelola](/id/permissions#managed-settings).

157* **Model**: Claude Sonnet 4.6, Opus 4.6, atau Opus 4.7 di rencana Team, Enterprise, dan API; Claude Opus 4.7 saja di rencana Max. Model lain, termasuk Haiku dan model claude-3, tidak didukung.

158* **Penyedia**: Hanya API Anthropic. Tidak tersedia di Bedrock, Vertex, atau Foundry.

159 

160Jika Claude Code melaporkan mode otomatis sebagai tidak tersedia, salah satu persyaratan ini tidak terpenuhi; ini bukan pemadaman sementara. Pesan terpisah yang menyebutkan model dan mengatakan mode otomatis "tidak dapat menentukan keamanan" tindakan adalah pemadaman pengklasifikasi sementara; lihat [referensi kesalahan](/id/errors#auto-mode-cannot-determine-the-safety-of-an-action).

161 

162### Apa yang diblokir pengklasifikasi secara default

163 

164Pengklasifikasi mempercayai direktori kerja Anda dan remote yang dikonfigurasi repo Anda. Semuanya yang lain diperlakukan sebagai eksternal sampai Anda [mengkonfigurasi infrastruktur terpercaya](/id/auto-mode-config).

165 

166**Diblokir secara default**:

167 

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

169* Mengirim data sensitif ke endpoint eksternal

170* Deploy dan migrasi produksi

171* Penghapusan massal pada penyimpanan cloud

172* Memberikan izin IAM atau repo

173* Memodifikasi infrastruktur bersama

174* Menghancurkan file secara tidak dapat dipulihkan yang ada sebelum sesi

175* Force push, atau push langsung ke `main`

176 

177**Diizinkan secara default**:

178 

179* Operasi file lokal di direktori kerja Anda

180* Menginstal dependensi yang dideklarasikan dalam file kunci atau manifes Anda

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

182* Permintaan HTTP read-only

183* Push ke cabang yang Anda mulai atau yang dibuat Claude

184 

185Permintaan akses jaringan sandbox dirutekan melalui pengklasifikasi daripada diizinkan secara default. Jalankan `claude auto-mode defaults` untuk melihat daftar aturan lengkap. Jika tindakan rutin diblokir, administrator dapat menambahkan repo terpercaya, bucket, dan layanan melalui pengaturan `autoMode.environment`: lihat [Konfigurasi mode otomatis](/id/auto-mode-config).

186 

187### Batas yang Anda nyatakan dalam percakapan

188 

189Pengklasifikasi memperlakukan batas yang Anda nyatakan dalam percakapan sebagai sinyal blokir. Jika Anda memberi tahu Claude "jangan push" atau "tunggu sampai saya tinjau sebelum deploy", pengklasifikasi memblokir tindakan yang cocok bahkan ketika aturan default akan mengizinkannya. Batas tetap berlaku sampai Anda mengangkatnya dalam pesan yang lebih baru. Penilaian Claude sendiri bahwa kondisi terpenuhi tidak mengangkatnya.

190 

191Batas tidak disimpan sebagai aturan. Pengklasifikasi membaca ulang dari transkrip pada setiap pemeriksaan, jadi batas dapat hilang jika [pemadatan konteks](/id/costs#reduce-token-usage) menghapus pesan yang menyatakannya. Untuk jaminan keras, tambahkan [aturan deny](/id/permissions#permission-rule-syntax) sebagai gantinya.

192 

193### Ketika mode otomatis jatuh kembali

194 

195Setiap tindakan yang ditolak menunjukkan notifikasi dan muncul di `/permissions` di bawah tab Recently denied, di mana Anda dapat menekan `r` untuk mencoba ulang dengan persetujuan manual.

196 

197Jika pengklasifikasi memblokir tindakan 3 kali berturut-turut atau 20 kali total, mode otomatis dijeda dan Claude Code melanjutkan prompting. Menyetujui tindakan yang diminta melanjutkan mode otomatis. Ambang batas ini tidak dapat dikonfigurasi. Tindakan yang diizinkan apa pun mengatur ulang penghitung berturut-turut, sementara penghitung total bertahan untuk sesi dan hanya direset ketika batasnya sendiri memicu fallback.

198 

199Dalam [mode non-interaktif](/id/headless) dengan flag `-p`, blokir berulang membatalkan sesi karena tidak ada pengguna untuk diminta.

200 

201Blokir berulang biasanya berarti pengklasifikasi kehilangan konteks tentang infrastruktur Anda. Gunakan `/feedback` untuk melaporkan positif palsu, atau minta administrator untuk [mengkonfigurasi infrastruktur terpercaya](/id/auto-mode-config).

202 

203<AccordionGroup>

204 <Accordion title="Bagaimana pengklasifikasi mengevaluasi tindakan">

205 Setiap tindakan melalui urutan keputusan yang tetap. Langkah pertama yang cocok menang:

206 

207 1. Tindakan yang cocok dengan [aturan allow atau deny Anda](/id/permissions#manage-permissions) diselesaikan segera

208 2. Tindakan read-only dan pengeditan file di direktori kerja Anda disetujui otomatis, kecuali penulisan ke [jalur yang dilindungi](#protected-paths)

209 3. Semuanya yang lain pergi ke pengklasifikasi

210 4. Jika pengklasifikasi memblokir, Claude menerima alasan dan mencoba alternatif

211 

212 Saat memasuki mode otomatis, aturan allow luas yang memberikan eksekusi kode arbitrer dijatuhkan:

213 

214 * Blanket `Bash(*)` atau `PowerShell(*)`

215 * Penafsir yang diberi wildcard seperti `Bash(python*)`

216 * Perintah run manajer paket

217 * Aturan `Agent` allow

218 

219 Aturan sempit seperti `Bash(npm test)` dibawa. Aturan yang dijatuhkan dipulihkan ketika Anda meninggalkan mode otomatis.

220 

221 Pengklasifikasi melihat pesan pengguna, panggilan alat, dan konten CLAUDE.md Anda. Hasil alat dilepas, jadi konten bermusuhan dalam file atau halaman web tidak dapat memanipulasinya secara langsung. Probe sisi server terpisah memindai hasil alat masuk dan menandai konten mencurigakan sebelum Claude membacanya. Untuk lebih lanjut tentang cara lapisan ini bekerja bersama, lihat [pengumuman mode otomatis](https://claude.com/blog/auto-mode) dan [penggalian teknis](https://www.anthropic.com/engineering/claude-code-auto-mode).

222 </Accordion>

223 

224 <Accordion title="Bagaimana mode otomatis menangani subagen">

225 Pengklasifikasi memeriksa pekerjaan [subagen](/id/sub-agents) di tiga titik:

226 

227 1. Sebelum subagen dimulai, deskripsi tugas yang didelegasikan dievaluasi, jadi tugas yang terlihat berbahaya diblokir pada waktu spawn.

228 2. Saat subagen berjalan, setiap tindakannya melalui pengklasifikasi dengan aturan yang sama seperti sesi induk, dan `permissionMode` apa pun di frontmatter subagen diabaikan.

229 3. Ketika subagen selesai, pengklasifikasi meninjau riwayat tindakan lengkapnya; jika pemeriksaan pengembalian menandai kekhawatiran, peringatan keamanan ditambahkan ke hasil subagen.

230 </Accordion>

231 

232 <Accordion title="Biaya dan latensi">

233 Pengklasifikasi berjalan pada model yang dikonfigurasi server yang independen dari pilihan `/model` Anda, jadi beralih model tidak mengubah ketersediaan pengklasifikasi. Panggilan pengklasifikasi dihitung terhadap penggunaan token Anda. Setiap pemeriksaan mengirim sebagian dari transkrip ditambah tindakan yang tertunda, menambahkan perjalanan bolak-balik sebelum eksekusi. Pembacaan dan pengeditan direktori kerja di luar jalur yang dilindungi melewati pengklasifikasi, jadi overhead terutama berasal dari perintah shell dan operasi jaringan.

234 </Accordion>

235</AccordionGroup>

236 

237## Izinkan hanya alat yang telah disetujui sebelumnya dengan mode dontAsk

238 

239Mode `dontAsk` auto-deny setiap panggilan alat yang akan meminta sebaliknya. Hanya tindakan yang cocok dengan aturan `permissions.allow` Anda dan [perintah Bash read-only](/id/permissions#read-only-commands) yang dapat dijalankan; aturan `ask` eksplisit ditolak daripada meminta. Ini membuat mode sepenuhnya non-interaktif untuk pipeline CI atau lingkungan terbatas di mana Anda pre-define dengan tepat apa yang Claude boleh lakukan.

240 

241Atur saat startup dengan flag:

242 

243```bash theme={null}

244claude --permission-mode dontAsk

245```

246 

247## Lewati semua pemeriksaan dengan mode bypassPermissions

248 

249Mode `bypassPermissions` menonaktifkan prompt izin dan pemeriksaan keamanan sehingga panggilan alat dijalankan segera. Sejak v2.1.126 ini mencakup penulisan ke [jalur yang dilindungi](#protected-paths), yang versi sebelumnya masih meminta. Penghapusan yang menargetkan akar sistem file atau direktori home, seperti `rm -rf /` dan `rm -rf ~`, masih meminta sebagai pemutus sirkuit terhadap kesalahan model. Hanya gunakan mode ini di lingkungan terisolasi seperti kontainer, VM, atau dev container tanpa akses internet, di mana Claude Code tidak dapat merusak sistem host Anda.

250 

251Anda tidak dapat memasukkan `bypassPermissions` dari sesi yang dimulai tanpa salah satu flag yang mengaktifkan; restart dengan salah satu untuk mengaktifkannya:

252 

253```bash theme={null}

254claude --permission-mode bypassPermissions

255```

256 

257Flag `--dangerously-skip-permissions` setara.

258 

259<Warning>

260 `bypassPermissions` tidak menawarkan perlindungan terhadap injeksi prompt atau tindakan yang tidak diinginkan. Untuk pemeriksaan keamanan latar belakang tanpa prompt, gunakan [mode otomatis](#eliminate-prompts-with-auto-mode) sebagai gantinya. Administrator dapat memblokir mode ini dengan mengatur `permissions.disableBypassPermissionsMode` ke `"disable"` di [pengaturan terkelola](/id/permissions#managed-settings).

261</Warning>

262 

263## Jalur yang dilindungi

264 

265Penulisan ke serangkaian jalur kecil tidak pernah disetujui otomatis, di setiap mode kecuali `bypassPermissions`. Ini mencegah kerusakan yang tidak disengaja dari status repositori dan konfigurasi Claude sendiri. Di `default`, `acceptEdits`, dan `plan` penulisan ini meminta; di `auto` mereka dirutekan ke pengklasifikasi; di `dontAsk` mereka ditolak; di `bypassPermissions` mereka diizinkan.

266 

267Direktori yang dilindungi:

268 

269* `.git`

270* `.vscode`

271* `.idea`

272* `.husky`

273* `.claude`, kecuali untuk `.claude/commands`, `.claude/agents`, `.claude/skills`, dan `.claude/worktrees` di mana Claude secara rutin membuat konten

274 

275File yang dilindungi:

276 

277* `.gitconfig`, `.gitmodules`

278* `.bashrc`, `.bash_profile`, `.zshrc`, `.zprofile`, `.profile`

279* `.ripgreprc`

280* `.mcp.json`, `.claude.json`

281 

282## Lihat juga

283 

284* [Permissions](/id/permissions): aturan allow, ask, dan deny; kebijakan terkelola

285* [Konfigurasi mode otomatis](/id/auto-mode-config): beri tahu pengklasifikasi infrastruktur mana yang dipercaya organisasi Anda

286* [Hooks](/id/hooks): logika izin kustom melalui hook `PreToolUse` dan `PermissionRequest`

287* [Ultraplan](/id/ultraplan): jalankan mode rencana dalam sesi Claude Code di web dengan tinjauan berbasis browser

288* [Security](/id/security): perlindungan dan praktik terbaik

289* [Sandboxing](/id/sandboxing): isolasi filesystem dan jaringan untuk perintah Bash

290* [Mode non-interaktif](/id/headless): jalankan Claude Code dengan flag `-p`

permissions.md +358 −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# Konfigurasi izin

6 

7> Kontrol apa yang dapat diakses Claude Code dan lakukan dengan aturan izin terperinci, mode, dan kebijakan terkelola.

8 

9Claude Code mendukung izin terperinci sehingga Anda dapat menentukan dengan tepat apa yang diizinkan dilakukan oleh agen dan apa yang tidak. Pengaturan izin dapat diperiksa ke dalam kontrol versi dan didistribusikan ke semua pengembang di organisasi Anda, serta disesuaikan oleh pengembang individual.

10 

11## Sistem izin

12 

13Claude Code menggunakan sistem izin berjenjang untuk menyeimbangkan kekuatan dan keamanan:

14 

15| Jenis alat | Contoh | Persetujuan diperlukan | Perilaku "Ya, jangan tanya lagi" |

16| :-------------- | :------------------- | :--------------------- | :------------------------------------------------ |

17| Hanya baca | Pembacaan file, Grep | Tidak | T/A |

18| Perintah Bash | Eksekusi shell | Ya | Secara permanen per direktori proyek dan perintah |

19| Modifikasi file | Edit/tulis file | Ya | Hingga akhir sesi |

20 

21## Kelola izin

22 

23Anda dapat melihat dan mengelola izin alat Claude Code dengan `/permissions`. UI ini mencantumkan semua aturan izin dan file settings.json tempat mereka bersumber.

24 

25* Aturan **Allow** memungkinkan Claude Code menggunakan alat yang ditentukan tanpa persetujuan manual.

26* Aturan **Ask** meminta konfirmasi setiap kali Claude Code mencoba menggunakan alat yang ditentukan.

27* Aturan **Deny** mencegah Claude Code menggunakan alat yang ditentukan.

28 

29Aturan dievaluasi secara berurutan: **deny -> ask -> allow**. Aturan pertama yang cocok menang, jadi aturan deny selalu memiliki prioritas.

30 

31## Mode izin

32 

33Claude Code mendukung beberapa mode izin yang mengontrol bagaimana alat disetujui. Lihat [Permission modes](/id/permission-modes) untuk mengetahui kapan menggunakan masing-masing. Atur `defaultMode` dalam [file pengaturan](/id/settings#settings-files) Anda:

34 

35| Mode | Deskripsi |

36| :------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

37| `default` | Perilaku standar: meminta izin pada penggunaan pertama setiap alat |

38| `acceptEdits` | Secara otomatis menerima edit file dan perintah sistem file umum (`mkdir`, `touch`, `mv`, `cp`, dll.) untuk jalur di direktori kerja atau `additionalDirectories` |

39| `plan` | Plan Mode: Claude dapat menganalisis tetapi tidak memodifikasi file atau menjalankan perintah |

40| `auto` | Secara otomatis menyetujui panggilan alat dengan pemeriksaan keamanan latar belakang yang memverifikasi tindakan selaras dengan permintaan Anda. Saat ini pratinjau penelitian |

41| `dontAsk` | Secara otomatis menolak alat kecuali pra-disetujui melalui `/permissions` atau aturan `permissions.allow` |

42| `bypassPermissions` | Melewati semua prompt izin. Penghapusan direktori root dan home seperti `rm -rf /` masih meminta sebagai circuit breaker |

43 

44<Warning>

45 Mode `bypassPermissions` melewati semua prompt izin, termasuk penulisan ke `.git`, `.claude`, `.vscode`, `.idea`, dan `.husky`. Penghapusan yang menargetkan akar sistem file atau direktori home, seperti `rm -rf /` dan `rm -rf ~`, masih meminta sebagai circuit breaker terhadap kesalahan model. Hanya gunakan mode ini di lingkungan terisolasi seperti kontainer atau VM tempat Claude Code tidak dapat menyebabkan kerusakan. Administrator dapat mencegah mode ini dengan mengatur `permissions.disableBypassPermissionsMode` ke `"disable"` dalam [pengaturan terkelola](#managed-settings).

46</Warning>

47 

48Untuk mencegah `bypassPermissions` atau mode `auto` digunakan, atur `permissions.disableBypassPermissionsMode` atau `permissions.disableAutoMode` ke `"disable"` dalam [file pengaturan](/id/settings#settings-files) apa pun. Ini paling berguna dalam [pengaturan terkelola](#managed-settings) di mana mereka tidak dapat ditimpa.

49 

50## Sintaks aturan izin

51 

52Aturan izin mengikuti format `Tool` atau `Tool(specifier)`.

53 

54### Cocokkan semua penggunaan alat

55 

56Untuk mencocokkan semua penggunaan alat, gunakan hanya nama alat tanpa tanda kurung:

57 

58| Aturan | Efek |

59| :--------- | :------------------------------------------- |

60| `Bash` | Mencocokkan semua perintah Bash |

61| `WebFetch` | Mencocokkan semua permintaan pengambilan web |

62| `Read` | Mencocokkan semua pembacaan file |

63 

64`Bash(*)` setara dengan `Bash` dan mencocokkan semua perintah Bash.

65 

66### Gunakan specifier untuk kontrol terperinci

67 

68Tambahkan specifier dalam tanda kurung untuk mencocokkan penggunaan alat tertentu:

69 

70| Aturan | Efek |

71| :----------------------------- | :------------------------------------------------------ |

72| `Bash(npm run build)` | Mencocokkan perintah yang tepat `npm run build` |

73| `Read(./.env)` | Mencocokkan pembacaan file `.env` di direktori saat ini |

74| `WebFetch(domain:example.com)` | Mencocokkan permintaan pengambilan ke example.com |

75 

76### Pola wildcard

77 

78Aturan Bash mendukung pola glob dengan `*`. Wildcard dapat muncul di posisi mana pun dalam perintah. Konfigurasi ini memungkinkan perintah npm dan git commit sambil memblokir git push:

79 

80```json theme={null}

81{

82 "permissions": {

83 "allow": [

84 "Bash(npm run *)",

85 "Bash(git commit *)",

86 "Bash(git * main)",

87 "Bash(* --version)",

88 "Bash(* --help *)"

89 ],

90 "deny": [

91 "Bash(git push *)"

92 ]

93 }

94}

95```

96 

97Spasi sebelum `*` penting: `Bash(ls *)` mencocokkan `ls -la` tetapi bukan `lsof`, sementara `Bash(ls*)` mencocokkan keduanya. Akhiran `:*` adalah cara setara untuk menulis wildcard trailing, jadi `Bash(ls:*)` mencocokkan perintah yang sama dengan `Bash(ls *)`.

98 

99Dialog izin menulis bentuk yang dipisahkan spasi ketika Anda memilih "Ya, jangan tanya lagi" untuk awalan perintah. Bentuk `:*` hanya dikenali di akhir pola. Dalam pola seperti `Bash(git:* push)`, titik dua diperlakukan sebagai karakter literal dan tidak akan mencocokkan perintah git.

100 

101## Aturan izin khusus alat

102 

103### Bash

104 

105Aturan izin Bash mendukung pencocokan wildcard dengan `*`. Wildcard dapat muncul di posisi mana pun dalam perintah, termasuk di awal, tengah, atau akhir:

106 

107* `Bash(npm run build)` mencocokkan perintah Bash yang tepat `npm run build`

108* `Bash(npm run test *)` mencocokkan perintah Bash yang dimulai dengan `npm run test`

109* `Bash(npm *)` mencocokkan perintah apa pun yang dimulai dengan `npm `

110* `Bash(* install)` mencocokkan perintah apa pun yang berakhir dengan ` install`

111* `Bash(git * main)` mencocokkan perintah seperti `git checkout main` dan `git log --oneline main`

112 

113Satu `*` mencocokkan urutan karakter apa pun termasuk spasi, jadi satu wildcard dapat mencakup beberapa argumen. `Bash(git *)` mencocokkan `git log --oneline --all`, dan `Bash(git * main)` mencocokkan `git push origin main` serta `git merge main`.

114 

115Ketika `*` muncul di akhir dengan spasi sebelumnya (seperti `Bash(ls *)`), ini memberlakukan batas kata, memerlukan awalan diikuti oleh spasi atau akhir string. Misalnya, `Bash(ls *)` mencocokkan `ls -la` tetapi bukan `lsof`. Sebaliknya, `Bash(ls*)` tanpa spasi mencocokkan `ls -la` dan `lsof` karena tidak ada batasan batas kata.

116 

117#### Perintah gabungan

118 

119<Tip>

120 Claude Code menyadari operator shell, jadi aturan seperti `Bash(safe-cmd *)` tidak akan memberinya izin untuk menjalankan perintah `safe-cmd && other-cmd`. Pemisah perintah yang dikenali adalah `&&`, `||`, `;`, `|`, `|&`, `&`, dan baris baru. Aturan harus mencocokkan setiap subperintah secara independen.

121</Tip>

122 

123Ketika Anda menyetujui perintah gabungan dengan "Ya, jangan tanya lagi", Claude Code menyimpan aturan terpisah untuk setiap subperintah yang memerlukan persetujuan, bukan satu aturan untuk string gabungan lengkap. Misalnya, menyetujui `git status && npm test` menyimpan aturan untuk `npm test`, jadi invokasi `npm test` di masa depan dikenali terlepas dari apa yang mendahului `&&`. Subperintah seperti `cd` ke subdirektori menghasilkan aturan Read mereka sendiri untuk jalur itu. Hingga 5 aturan dapat disimpan untuk satu perintah gabungan.

124 

125#### Pembungkus proses

126 

127Sebelum mencocokkan aturan Bash, Claude Code menghilangkan serangkaian pembungkus proses tetap sehingga aturan seperti `Bash(npm test *)` juga mencocokkan `timeout 30 npm test`. Pembungkus yang dikenali adalah `timeout`, `time`, `nice`, `nohup`, dan `stdbuf`.

128 

129`xargs` telanjang juga dihilangkan, jadi `Bash(grep *)` mencocokkan `xargs grep pattern`. Penghilangan hanya berlaku ketika `xargs` tidak memiliki flag: invokasi seperti `xargs -n1 grep pattern` dicocokkan sebagai perintah `xargs`, jadi aturan yang ditulis untuk perintah inner tidak mencakupnya.

130 

131Daftar pembungkus ini bawaan dan tidak dapat dikonfigurasi. Pelari lingkungan pengembangan seperti `direnv exec`, `devbox run`, `mise exec`, `npx`, dan `docker exec` tidak ada dalam daftar. Karena alat ini menjalankan argumen mereka sebagai perintah, aturan seperti `Bash(devbox run *)` mencocokkan apa pun yang datang setelah `run`, termasuk `devbox run rm -rf .`. Untuk menyetujui pekerjaan di dalam pelari lingkungan, tulis aturan spesifik yang mencakup baik pelari maupun perintah inner, seperti `Bash(devbox run npm test)`. Tambahkan satu aturan per perintah inner yang ingin Anda izinkan.

132 

133Pembungkus exec seperti `watch`, `setsid`, `ionice`, dan `flock` selalu meminta dan tidak dapat disetujui otomatis oleh aturan awalan seperti `Bash(watch *)`. Hal yang sama berlaku untuk `find` dengan `-exec` atau `-delete`: aturan `Bash(find *)` tidak mencakup bentuk ini. Untuk menyetujui invokasi spesifik, tulis aturan pencocokan tepat untuk string perintah lengkap.

134 

135#### Perintah hanya baca

136 

137Claude Code mengenali serangkaian perintah Bash bawaan sebagai hanya baca dan menjalankannya tanpa prompt izin di setiap mode. Ini termasuk `ls`, `cat`, `head`, `tail`, `grep`, `find`, `wc`, `diff`, `stat`, `du`, `cd`, dan bentuk hanya baca dari `git`. Serangkaian ini tidak dapat dikonfigurasi; untuk memerlukan prompt untuk salah satu perintah ini, tambahkan aturan `ask` atau `deny` untuk itu.

138 

139Pola glob yang tidak dikutip diizinkan untuk perintah yang setiap flagnya hanya baca, jadi `ls *.ts` dan `wc -l src/*.py` berjalan tanpa prompt. Perintah dengan flag yang mampu menulis atau exec, seperti `find`, `sort`, `sed`, dan `git`, masih meminta ketika glob yang tidak dikutip ada karena glob dapat berkembang menjadi flag seperti `-delete`.

140 

141`cd` ke jalur di dalam direktori kerja Anda atau [direktori tambahan](#working-directories) juga hanya baca. Perintah gabungan seperti `cd packages/api && ls` berjalan tanpa prompt ketika setiap bagian memenuhi syarat sendiri. Menggabungkan `cd` dengan `git` dalam satu perintah gabungan selalu meminta, terlepas dari direktori target.

142 

143<Warning>

144 Pola izin Bash yang mencoba membatasi argumen perintah rapuh. Misalnya, `Bash(curl http://github.com/ *)` dimaksudkan untuk membatasi curl ke URL GitHub, tetapi tidak akan mencocokkan variasi seperti:

145 

146 * Opsi sebelum URL: `curl -X GET http://github.com/...`

147 * Protokol berbeda: `curl https://github.com/...`

148 * Pengalihan: `curl -L http://bit.ly/xyz` (pengalihan ke github)

149 * Variabel: `URL=http://github.com && curl $URL`

150 * Spasi ekstra: `curl http://github.com`

151 

152 Untuk penyaringan URL yang lebih andal, pertimbangkan:

153 

154 * **Batasi alat jaringan Bash**: gunakan aturan deny untuk memblokir `curl`, `wget`, dan perintah serupa, kemudian gunakan alat WebFetch dengan izin `WebFetch(domain:github.com)` untuk domain yang diizinkan

155 * **Gunakan hook PreToolUse**: implementasikan hook yang memvalidasi URL dalam perintah Bash dan memblokir domain yang tidak diizinkan

156 * Menginstruksikan Claude Code tentang pola curl yang diizinkan Anda melalui CLAUDE.md

157 

158 Perhatikan bahwa menggunakan WebFetch saja tidak mencegah akses jaringan. Jika Bash diizinkan, Claude masih dapat menggunakan `curl`, `wget`, atau alat lain untuk menjangkau URL apa pun.

159</Warning>

160 

161### PowerShell

162 

163Aturan izin PowerShell menggunakan bentuk yang sama dengan aturan Bash. Wildcard dengan `*` cocok di posisi mana pun, akhiran `:*` setara dengan trailing ` *`, dan PowerShell telanjang atau `PowerShell(*)` cocok dengan setiap perintah. Konfigurasi ini memungkinkan perintah `Get-ChildItem` dan `git commit` sambil memblokir `Remove-Item`:

164 

165```json theme={null}

166{

167 "permissions": {

168 "allow": [

169 "PowerShell(Get-ChildItem *)",

170 "PowerShell(git commit *)"

171 ],

172 "deny": [

173 "PowerShell(Remove-Item *)"

174 ]

175 }

176}

177```

178 

179Alias umum dikanonikalisasi sebelum pencocokan. Aturan yang ditulis untuk nama cmdlet juga cocok dengan aliasnya, jadi `PowerShell(Get-ChildItem *)` cocok dengan `gci`, `ls`, dan `dir` juga. Pencocokan tidak peka huruf besar-kecil.

180 

181Claude Code mengurai AST PowerShell dan memeriksa setiap perintah dalam perintah gabungan secara independen. Operator pipeline `|`, pemisah pernyataan `;`, dan pada PowerShell 7+ operator rantai `&&` dan `||` membagi perintah gabungan menjadi subperintah. Aturan harus cocok dengan setiap subperintah agar perintah gabungan diizinkan.

182 

183### Read dan Edit

184 

185Aturan `Edit` berlaku untuk semua alat bawaan yang mengedit file. Claude membuat upaya terbaik untuk menerapkan aturan `Read` ke semua alat bawaan yang membaca file seperti Grep dan Glob.

186 

187<Warning>

188 Aturan deny Read dan Edit berlaku untuk alat file bawaan Claude, bukan untuk subproses Bash. Aturan deny `Read(./.env)` memblokir alat Read tetapi tidak mencegah `cat .env` di Bash. Untuk penegakan tingkat OS yang memblokir semua proses dari mengakses jalur, [aktifkan sandbox](/id/sandboxing).

189</Warning>

190 

191Aturan Read dan Edit keduanya mengikuti spesifikasi [gitignore](https://git-scm.com/docs/gitignore) dengan empat jenis pola yang berbeda:

192 

193| Pola | Arti | Contoh | Cocok |

194| -------------------- | --------------------------------------------- | -------------------------------- | ------------------------------ |

195| `//path` | Jalur **absolut** dari akar sistem file | `Read(//Users/alice/secrets/**)` | `/Users/alice/secrets/**` |

196| `~/path` | Jalur dari direktori **home** | `Read(~/Documents/*.pdf)` | `/Users/alice/Documents/*.pdf` |

197| `/path` | Jalur **relatif terhadap akar proyek** | `Edit(/src/**/*.ts)` | `<project root>/src/**/*.ts` |

198| `path` atau `./path` | Jalur **relatif terhadap direktori saat ini** | `Read(*.env)` | `<cwd>/*.env` |

199 

200<Warning>

201 Pola seperti `/Users/alice/file` BUKAN jalur absolut. Ini relatif terhadap akar proyek. Gunakan `//Users/alice/file` untuk jalur absolut.

202</Warning>

203 

204Di Windows, jalur dinormalisasi ke bentuk POSIX sebelum pencocokan. `C:\Users\alice` menjadi `/c/Users/alice`, jadi gunakan `//c/**/.env` untuk mencocokkan file `.env` di mana pun di drive itu. Untuk mencocokkan di semua drive, gunakan `//**/.env`.

205 

206Contoh:

207 

208* `Edit(/docs/**)`: edit di `<project>/docs/` (BUKAN `/docs/` dan BUKAN `<project>/.claude/docs/`)

209* `Read(~/.zshrc)`: membaca `.zshrc` direktori home Anda

210* `Edit(//tmp/scratch.txt)`: edit jalur absolut `/tmp/scratch.txt`

211* `Read(src/**)`: membaca dari `<current-directory>/src/`

212 

213<Note>

214 Dalam pola gitignore, `*` mencocokkan file dalam satu direktori sementara `**` mencocokkan secara rekursif di seluruh direktori. Untuk memungkinkan semua akses file, gunakan hanya nama alat tanpa tanda kurung: `Read`, `Edit`, atau `Write`.

215</Note>

216 

217Ketika Claude mengakses symlink, aturan izin memeriksa dua jalur: symlink itu sendiri dan file yang diselesaikannya. Aturan allow dan deny memperlakukan pasangan itu secara berbeda: aturan allow kembali ke meminta Anda, sementara aturan deny memblokir sepenuhnya.

218 

219* **Aturan allow**: berlaku hanya ketika jalur symlink dan targetnya cocok. Symlink di dalam direktori yang diizinkan yang menunjuk ke luar masih meminta Anda.

220* **Aturan deny**: berlaku ketika jalur symlink atau targetnya cocok. Symlink yang menunjuk ke file yang ditolak itu sendiri ditolak.

221 

222Misalnya, dengan `Read(./project/**)` diizinkan dan `Read(~/.ssh/**)` ditolak, symlink di `./project/key` menunjuk ke `~/.ssh/id_rsa` diblokir: target gagal aturan allow dan cocok dengan aturan deny.

223 

224### WebFetch

225 

226* `WebFetch(domain:example.com)` mencocokkan permintaan pengambilan ke example.com

227 

228### MCP

229 

230* `mcp__puppeteer` mencocokkan alat apa pun yang disediakan oleh server `puppeteer` (nama dikonfigurasi di Claude Code)

231* `mcp__puppeteer__*` sintaks wildcard yang juga mencocokkan semua alat dari server `puppeteer`

232* `mcp__puppeteer__puppeteer_navigate` mencocokkan alat `puppeteer_navigate` yang disediakan oleh server `puppeteer`

233 

234### Agent (subagents)

235 

236Gunakan aturan `Agent(AgentName)` untuk mengontrol [subagents](/id/sub-agents) mana yang dapat digunakan Claude:

237 

238* `Agent(Explore)` mencocokkan subagent Explore

239* `Agent(Plan)` mencocokkan subagent Plan

240* `Agent(my-custom-agent)` mencocokkan subagent kustom bernama `my-custom-agent`

241 

242Tambahkan aturan ini ke array `deny` dalam pengaturan Anda atau gunakan flag CLI `--disallowedTools` untuk menonaktifkan agen tertentu. Untuk menonaktifkan agen Explore:

243 

244```json theme={null}

245{

246 "permissions": {

247 "deny": ["Agent(Explore)"]

248 }

249}

250```

251 

252## Perluas izin dengan hook

253 

254[Hook Claude Code](/id/hooks-guide) menyediakan cara untuk mendaftarkan perintah shell kustom guna melakukan evaluasi izin saat runtime. Ketika Claude Code membuat panggilan alat, hook PreToolUse berjalan sebelum prompt izin. Output hook dapat menolak panggilan alat, memaksa prompt, atau melewati prompt untuk membiarkan panggilan berlanjut.

255 

256Keputusan hook tidak melewati aturan izin. Aturan deny dan ask dievaluasi terlepas dari apa yang dikembalikan hook PreToolUse, jadi 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.

257 

258Hook pemblokiran juga memiliki prioritas atas aturan allow. Hook yang keluar dengan kode 2 menghentikan panggilan alat sebelum aturan izin dievaluasi, jadi blokir berlaku bahkan ketika aturan allow akan membiarkan panggilan berlanjut. Untuk menjalankan semua perintah Bash tanpa prompt kecuali untuk beberapa yang ingin Anda blokir, tambahkan `"Bash"` ke daftar allow Anda dan daftarkan hook PreToolUse yang menolak perintah tertentu itu. Lihat [Block edits to protected files](/id/hooks-guide#block-edits-to-protected-files) untuk skrip hook yang dapat Anda sesuaikan.

259 

260## Direktori kerja

261 

262Secara default, Claude memiliki akses ke file di direktori tempat diluncurkan. Anda dapat memperluas akses ini:

263 

264* **Saat startup**: gunakan argumen CLI `--add-dir <path>`

265* **Selama sesi**: gunakan perintah `/add-dir`

266* **Konfigurasi persisten**: tambahkan ke `additionalDirectories` dalam [file pengaturan](/id/settings#settings-files)

267 

268File di direktori tambahan mengikuti aturan izin yang sama dengan direktori kerja asli: mereka menjadi dapat dibaca tanpa prompt, dan izin edit file mengikuti mode izin saat ini.

269 

270### Direktori tambahan memberikan akses file, bukan konfigurasi

271 

272Menambahkan direktori memperluas tempat Claude dapat membaca dan mengedit file. Ini tidak membuat direktori itu akar konfigurasi penuh: sebagian besar konfigurasi `.claude/` tidak ditemukan dari direktori tambahan, meskipun beberapa jenis dimuat sebagai pengecualian.

273 

274Jenis konfigurasi berikut dimuat dari direktori `--add-dir`:

275 

276| Konfigurasi | Dimuat dari `--add-dir` |

277| :-------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------- |

278| [Skills](/id/skills) di `.claude/skills/` | Ya, dengan live reload |

279| Pengaturan plugin di `.claude/settings.json` | `enabledPlugins` dan `extraKnownMarketplaces` saja |

280| File [CLAUDE.md](/id/memory), `.claude/rules/`, dan `CLAUDE.local.md` | Hanya ketika `CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1` diatur. `CLAUDE.local.md` juga memerlukan sumber pengaturan `local`, yang diaktifkan secara default |

281 

282Segalanya yang lain, termasuk subagents, commands, output styles, hooks, dan pengaturan lainnya, ditemukan hanya dari direktori kerja saat ini dan induknya, direktori pengguna Anda di `~/.claude/`, dan pengaturan terkelola. Untuk berbagi konfigurasi itu di seluruh proyek, gunakan salah satu pendekatan ini:

283 

284* **Konfigurasi tingkat pengguna**: tempatkan file di `~/.claude/agents/`, `~/.claude/output-styles/`, atau `~/.claude/settings.json` untuk membuatnya tersedia di setiap proyek

285* **Plugins**: paket dan distribusikan konfigurasi sebagai [plugin](/id/plugins) yang dapat diinstal tim

286* **Luncurkan dari direktori konfigurasi**: jalankan Claude Code dari direktori yang berisi konfigurasi `.claude/` yang ingin Anda gunakan

287 

288## Bagaimana izin berinteraksi dengan sandboxing

289 

290Izin dan [sandboxing](/id/sandboxing) adalah lapisan keamanan pelengkap:

291 

292* **Izin** mengontrol alat mana yang dapat digunakan Claude Code dan file atau domain mana yang dapat diaksesnya. Mereka berlaku untuk semua alat (Bash, Read, Edit, WebFetch, MCP, dan lainnya).

293* **Sandboxing** menyediakan penegakan tingkat OS yang membatasi akses sistem file dan jaringan alat Bash. Ini hanya berlaku untuk perintah Bash dan proses anak mereka.

294 

295Gunakan keduanya untuk pertahanan berlapis:

296 

297* Aturan deny izin memblokir Claude dari bahkan mencoba mengakses sumber daya terbatas

298* Pembatasan sandbox mencegah perintah Bash menjangkau sumber daya di luar batas yang ditentukan, bahkan jika injeksi prompt melewati pengambilan keputusan Claude

299* Pembatasan sistem file di sandbox menggunakan aturan deny Read dan Edit, bukan konfigurasi sandbox terpisah

300* Pembatasan jaringan menggabungkan aturan izin WebFetch dengan daftar `allowedDomains` dan `deniedDomains` sandbox

301 

302Ketika sandboxing diaktifkan dengan `autoAllowBashIfSandboxed: true`, yang merupakan default, perintah Bash yang di-sandbox berjalan tanpa meminta bahkan jika izin Anda mencakup `ask: Bash(*)`. Batas sandbox menggantikan prompt per-perintah. Aturan deny eksplisit masih berlaku, dan perintah `rm` atau `rmdir` yang menargetkan `/`, direktori home Anda, atau jalur sistem kritis lainnya masih memicu prompt. Lihat [sandbox modes](/id/sandboxing#sandbox-modes) untuk mengubah perilaku ini.

303 

304## Pengaturan terkelola

305 

306Untuk organisasi yang memerlukan kontrol terpusat atas konfigurasi Claude Code, administrator dapat menerapkan pengaturan terkelola yang tidak dapat ditimpa oleh pengaturan pengguna atau proyek. Pengaturan kebijakan ini mengikuti format yang sama dengan file pengaturan reguler dan dapat dikirimkan melalui kebijakan MDM/tingkat OS, file pengaturan terkelola, atau [pengaturan yang dikelola server](/id/server-managed-settings). Lihat [file pengaturan](/id/settings#settings-files) untuk mekanisme pengiriman dan lokasi file.

307 

308### Pengaturan khusus terkelola

309 

310Pengaturan berikut hanya dibaca dari pengaturan terkelola. Menempatkan mereka dalam file pengaturan pengguna atau proyek tidak memiliki efek.

311 

312| Pengaturan | Deskripsi |

313| :--------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

314| `allowedChannelPlugins` | Daftar izin plugin saluran yang dapat mendorong pesan. Menggantikan daftar izin Anthropic default saat diatur. Memerlukan `channelsEnabled: true`. Lihat [Restrict which channel plugins can run](/id/channels#restrict-which-channel-plugins-can-run) |

315| `allowManagedHooksOnly` | Ketika `true`, hanya hook terkelola, hook SDK, dan hook dari plugin yang dipaksa-aktifkan dalam pengaturan terkelola `enabledPlugins` yang dimuat. Hook pengguna, proyek, dan semua plugin lainnya diblokir |

316| `allowManagedMcpServersOnly` | Ketika `true`, hanya `allowedMcpServers` dari pengaturan terkelola yang dihormati. `deniedMcpServers` masih digabung dari semua sumber. Lihat [Managed MCP configuration](/id/mcp#managed-mcp-configuration) |

317| `allowManagedPermissionRulesOnly` | Ketika `true`, mencegah pengaturan pengguna dan proyek dari mendefinisikan aturan izin `allow`, `ask`, atau `deny`. Hanya aturan dalam pengaturan terkelola yang berlaku |

318| `blockedMarketplaces` | Daftar blokir sumber marketplace. Sumber yang diblokir diperiksa sebelum mengunduh, jadi mereka tidak pernah menyentuh sistem file. Lihat [managed marketplace restrictions](/id/plugin-marketplaces#managed-marketplace-restrictions) |

319| `channelsEnabled` | Izinkan [channels](/id/channels) untuk pengguna Team dan Enterprise. Tidak diatur atau `false` memblokir pengiriman pesan saluran terlepas dari apa yang dilewatkan pengguna ke `--channels` |

320| `forceRemoteSettingsRefresh` | Ketika `true`, memblokir startup CLI hingga pengaturan terkelola jarak jauh segar diambil dan keluar jika pengambilan gagal. Lihat [fail-closed enforcement](/id/server-managed-settings#enforce-fail-closed-startup) |

321| `pluginTrustMessage` | Pesan kustom ditambahkan ke peringatan kepercayaan plugin yang ditampilkan sebelum instalasi |

322| `sandbox.filesystem.allowManagedReadPathsOnly` | Ketika `true`, hanya jalur `filesystem.allowRead` dari pengaturan terkelola yang dihormati. `denyRead` masih digabung dari semua sumber |

323| `sandbox.network.allowManagedDomainsOnly` | Ketika `true`, hanya `allowedDomains` dan aturan allow `WebFetch(domain:...)` dari pengaturan terkelola yang dihormati. Domain yang tidak diizinkan diblokir secara otomatis tanpa meminta pengguna. Domain yang ditolak masih digabung dari semua sumber |

324| `strictKnownMarketplaces` | Mengontrol sumber marketplace plugin mana yang dapat ditambahkan dan diinstal pengguna. Lihat [managed marketplace restrictions](/id/plugin-marketplaces#managed-marketplace-restrictions) |

325| `wslInheritsWindowsSettings` | Ketika `true` dalam kunci registri Windows HKLM atau `C:\Program Files\ClaudeCode\managed-settings.json`, WSL membaca pengaturan terkelola dari rantai kebijakan Windows selain `/etc/claude-code`. Lihat [Settings files](/id/settings#settings-files) |

326 

327`disableBypassPermissionsMode` biasanya ditempatkan dalam pengaturan terkelola untuk memberlakukan kebijakan organisasi, tetapi berfungsi dari cakupan apa pun. Pengguna dapat mengaturnya dalam pengaturan mereka sendiri untuk mengunci diri mereka sendiri dari mode bypass.

328 

329<Note>

330 Akses ke [Remote Control](/id/remote-control) dan [sesi web](/id/claude-code-on-the-web) tidak dikendalikan oleh kunci pengaturan terkelola. Pada paket Team dan Enterprise, admin mengaktifkan atau menonaktifkan fitur ini dalam [pengaturan admin Claude Code](https://claude.ai/admin-settings/claude-code).

331</Note>

332 

333## Prioritas pengaturan

334 

335Aturan izin mengikuti [prioritas pengaturan](/id/settings#settings-precedence) yang sama dengan semua pengaturan Claude Code lainnya:

336 

3371. **Pengaturan terkelola**: tidak dapat ditimpa oleh tingkat lain apa pun, termasuk argumen baris perintah

3382. **Argumen baris perintah**: penggantian sesi sementara

3393. **Pengaturan proyek lokal** (`.claude/settings.local.json`)

3404. **Pengaturan proyek bersama** (`.claude/settings.json`)

3415. **Pengaturan pengguna** (`~/.claude/settings.json`)

342 

343Jika alat ditolak di tingkat mana pun, tidak ada tingkat lain yang dapat mengizinkannya. Misalnya, deny pengaturan terkelola tidak dapat ditimpa oleh `--allowedTools`, dan `--disallowedTools` dapat menambahkan pembatasan di luar apa yang ditentukan pengaturan terkelola.

344 

345Jika izin diizinkan dalam pengaturan pengguna tetapi ditolak dalam pengaturan proyek, pengaturan proyek memiliki prioritas dan izin diblokir.

346 

347## Contoh konfigurasi

348 

349[Repositori](https://github.com/anthropics/claude-code/tree/main/examples/settings) ini mencakup konfigurasi pengaturan pemula untuk skenario penerapan umum. Gunakan ini sebagai titik awal dan sesuaikan dengan kebutuhan Anda.

350 

351## Lihat juga

352 

353* [Settings](/id/settings): referensi konfigurasi lengkap termasuk tabel pengaturan izin

354* [Configure auto mode](/id/auto-mode-config): beri tahu pengklasifikasi mode auto infrastruktur mana yang dipercaya organisasi Anda

355* [Sandboxing](/id/sandboxing): isolasi sistem file dan jaringan tingkat OS untuk perintah Bash

356* [Authentication](/id/authentication): atur akses pengguna ke Claude Code

357* [Security](/id/security): perlindungan keamanan dan praktik terbaik

358* [Hooks](/id/hooks-guide): otomatisasi alur kerja dan perluas evaluasi izin

platforms.md +78 −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# Platform dan integrasi

6 

7> Pilih di mana menjalankan Claude Code dan apa yang akan dihubungkan. Bandingkan CLI, Desktop, VS Code, JetBrains, web, dan integrasi seperti Chrome, Slack, dan CI/CD.

8 

9Claude Code menjalankan mesin yang sama di mana pun, tetapi setiap permukaan disesuaikan untuk cara kerja yang berbeda. Halaman ini membantu Anda memilih platform yang tepat untuk alur kerja Anda dan menghubungkan alat yang sudah Anda gunakan.

10 

11## Di mana menjalankan Claude Code

12 

13Pilih platform berdasarkan cara Anda suka bekerja dan di mana proyek Anda berada.

14 

15| Platform | Terbaik untuk | Yang Anda dapatkan |

16| :-------------------------------- | :------------------------------------------------------------------------------------------------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

17| [CLI](/id/quickstart) | Alur kerja terminal, scripting, server jarak jauh | Set fitur lengkap, [Agent SDK](/id/headless), penyedia pihak ketiga |

18| [Desktop](/id/desktop) | Tinjauan visual, sesi paralel, pengaturan terkelola | Penampil diff, pratinjau aplikasi, [penggunaan komputer](/id/desktop#let-claude-use-your-computer) dan [Dispatch](/id/desktop#sessions-from-dispatch) pada Pro dan Max |

19| [VS Code](/id/vs-code) | Bekerja di dalam VS Code tanpa beralih ke terminal | Diff inline, terminal terintegrasi, konteks file |

20| [JetBrains](/id/jetbrains) | Bekerja di dalam IntelliJ, PyCharm, WebStorm, atau IDE JetBrains lainnya | Penampil diff, berbagi seleksi, sesi terminal |

21| [Web](/id/claude-code-on-the-web) | Tugas yang berjalan lama yang tidak memerlukan banyak pengarahan, atau pekerjaan yang harus dilanjutkan saat Anda offline | Cloud yang dikelola Anthropic, berlanjut setelah Anda terputus |

22 

23CLI adalah permukaan paling lengkap untuk pekerjaan asli terminal: scripting, penyedia pihak ketiga, dan Agent SDK hanya tersedia di CLI. Desktop dan ekstensi IDE menukar beberapa fitur khusus CLI untuk tinjauan visual dan integrasi editor yang lebih ketat. Web berjalan di cloud Anthropic, jadi tugas terus berlanjut setelah Anda terputus.

24 

25Anda dapat mencampur permukaan pada proyek yang sama. Konfigurasi, memori proyek, dan server MCP dibagikan di seluruh permukaan lokal.

26 

27## Hubungkan alat Anda

28 

29Integrasi memungkinkan Claude bekerja dengan layanan di luar basis kode Anda.

30 

31| Integrasi | Apa yang dilakukannya | Gunakan untuk |

32| :----------------------------------- | :--------------------------------------------- | :---------------------------------------------------------------------- |

33| [Chrome](/id/chrome) | Mengontrol browser Anda dengan sesi login Anda | Menguji aplikasi web, mengisi formulir, mengotomatisasi situs tanpa API |

34| [GitHub Actions](/id/github-actions) | Menjalankan Claude dalam pipeline CI Anda | Tinjauan PR otomatis, triase masalah, pemeliharaan terjadwal |

35| [GitLab CI/CD](/id/gitlab-ci-cd) | Sama seperti GitHub Actions untuk GitLab | Otomasi berbasis CI di GitLab |

36| [Code Review](/id/code-review) | Meninjau setiap PR secara otomatis | Menangkap bug sebelum tinjauan manusia |

37| [Slack](/id/slack) | Merespons penyebutan `@Claude` di saluran Anda | Mengubah laporan bug menjadi permintaan tarik dari obrolan tim |

38 

39Untuk integrasi yang tidak tercantum di sini, [server MCP](/id/mcp) dan [konektor](/id/desktop#connect-external-tools) memungkinkan Anda menghubungkan hampir apa pun: Linear, Notion, Google Drive, atau API internal Anda sendiri.

40 

41## Bekerja saat Anda jauh dari terminal Anda

42 

43Claude Code offers several ways to work when you're not at your terminal. They differ in what triggers the work, where Claude runs, and how much you need to set up.

44 

45| | Trigger | Claude runs on | Setup | Best for |

46| :--------------------------------------------- | :--------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------ |

47| [Dispatch](/en/desktop#sessions-from-dispatch) | Message a task from the Claude mobile app | Your machine (Desktop) | [Pair the mobile app with Desktop](https://support.claude.com/en/articles/13947068) | Delegating work while you're away, minimal setup |

48| [Remote Control](/en/remote-control) | Drive a running session from [claude.ai/code](https://claude.ai/code) or the Claude mobile app | Your machine (CLI or VS Code) | Run `claude remote-control` | Steering in-progress work from another device |

49| [Channels](/en/channels) | Push events from a chat app like Telegram or Discord, or your own server | Your machine (CLI) | [Install a channel plugin](/en/channels#quickstart) or [build your own](/en/channels-reference) | Reacting to external events like CI failures or chat messages |

50| [Slack](/en/slack) | Mention `@Claude` in a team channel | Anthropic cloud | [Install the Slack app](/en/slack#setting-up-claude-code-in-slack) with [Claude Code on the web](/en/claude-code-on-the-web) enabled | PRs and reviews from team chat |

51| [Scheduled tasks](/en/scheduled-tasks) | Set a schedule | [CLI](/en/scheduled-tasks), [Desktop](/en/desktop-scheduled-tasks), or [cloud](/en/routines) | Pick a frequency | Recurring automation like daily reviews |

52 

53Jika Anda tidak yakin di mana harus memulai, [instal CLI](/id/quickstart) dan jalankan di direktori proyek. Jika Anda lebih suka tidak menggunakan terminal, [Desktop](/id/desktop-quickstart) memberi Anda mesin yang sama dengan antarmuka grafis.

54 

55## Sumber daya terkait

56 

57### Platform

58 

59* [Panduan cepat CLI](/id/quickstart): instal dan jalankan perintah pertama Anda di terminal

60* [Desktop](/id/desktop): tinjauan diff visual, sesi paralel, penggunaan komputer, dan Dispatch

61* [VS Code](/id/vs-code): ekstensi Claude Code di dalam editor Anda

62* [JetBrains](/id/jetbrains): ekstensi untuk IntelliJ, PyCharm, dan IDE JetBrains lainnya

63* [Claude Code di web](/id/claude-code-on-the-web): sesi cloud yang terus berjalan saat Anda terputus

64 

65### Integrasi

66 

67* [Chrome](/id/chrome): otomatisasi tugas browser dengan sesi login Anda

68* [GitHub Actions](/id/github-actions): jalankan Claude dalam pipeline CI Anda

69* [GitLab CI/CD](/id/gitlab-ci-cd): yang sama untuk GitLab

70* [Code Review](/id/code-review): tinjauan otomatis pada setiap permintaan tarik

71* [Slack](/id/slack): kirim tugas dari obrolan tim, dapatkan PR kembali

72 

73### Akses jarak jauh

74 

75* [Dispatch](/id/desktop#sessions-from-dispatch): kirim pesan tugas dari ponsel Anda dan dapat menampilkan sesi Desktop

76* [Remote Control](/id/remote-control): jalankan sesi yang sedang berjalan dari ponsel atau browser Anda

77* [Channels](/id/channels): dorong acara dari aplikasi obrolan atau server Anda sendiri ke dalam sesi

78* [Tugas terjadwal](/id/scheduled-tasks): jalankan prompt pada jadwal berulang

plugin-dependencies.md +153 −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# Batasi versi dependensi plugin

6 

7> Deklarasikan batasan versi pada dependensi plugin sehingga plugin Anda terus berfungsi ketika plugin upstream mengirimkan perubahan yang merusak.

8 

9Sebuah plugin dapat bergantung pada plugin lain dengan mencantumkannya di `plugin.json` atau di entri marketplacenya. Secara default, dependensi melacak versi terbaru yang tersedia, sehingga rilis upstream dapat mengubah dependensi di bawah plugin Anda tanpa peringatan. Batasan versi memungkinkan Anda menahan dependensi pada rentang versi yang telah diuji sampai Anda memilih untuk pindah.

10 

11Ketika Anda menginstal plugin yang mendeklarasikan dependensi, Claude Code menyelesaikan dan menginstal dependensi tersebut secara otomatis dan mencantumkan dependensi mana yang ditambahkan di akhir output instalasi. Jika dependensi kemudian hilang, `/reload-plugins` dan pembaruan plugin otomatis latar belakang akan menginstal ulangnya, asalkan marketplacenya sudah ada di marketplace yang Anda konfigurasi. Menjalankan kembali `claude plugin install` pada plugin yang bergantung, atau menambahkan marketplace dengan `claude plugin marketplace add`, juga menyelesaikan dependensi yang belum terselesaikan. Dependensi dari marketplace yang belum Anda tambahkan dibiarkan tidak terselesaikan.

12 

13Panduan ini ditujukan untuk penulis plugin yang mendeklarasikan dependensi di `plugin.json` dan untuk pengelola marketplace yang menandai rilis. Untuk menginstal plugin yang memiliki dependensi, lihat [Temukan dan instal plugin](/id/discover-plugins). Untuk skema manifes lengkap, lihat [Referensi Plugin](/id/plugins-reference).

14 

15<Note>

16 Batasan versi dependensi memerlukan Claude Code v2.1.110 atau lebih baru.

17</Note>

18 

19## Mengapa membatasi versi dependensi

20 

21Pertimbangkan marketplace internal di mana dua tim menerbitkan plugin. Tim platform memelihara `secrets-vault`, server MCP yang membungkus backend rahasia. Tim deploy memelihara `deploy-kit`, yang memanggil `secrets-vault` untuk mengambil kredensial selama deploy.

22 

23`deploy-kit` diuji terhadap `secrets-vault` v2.1.0. Tanpa batasan versi, saat tim platform menandai rilis berikutnya yang mengganti nama alat MCP, auto-update memindahkan `secrets-vault` setiap insinyur ke versi baru dan `deploy-kit` rusak.

24 

25Dengan batasan versi, `deploy-kit` mendeklarasikan bahwa ia memerlukan `secrets-vault` dalam rentang `~2.1.0`. Insinyur dengan `deploy-kit` yang diinstal tetap berada di patch `2.1.x` tertinggi yang cocok. Tim deploy meningkatkan sesuai jadwal mereka sendiri dengan menerbitkan versi `deploy-kit` baru dengan batasan yang lebih luas.

26 

27## Deklarasikan dependensi dengan batasan versi

28 

29Cantumkan dependensi dalam array `dependencies` dari `plugin.json` plugin Anda. Setiap entri adalah nama plugin atau objek dengan batasan versi.

30 

31Manifes berikut mendeklarasikan satu dependensi tanpa versi dan satu dependensi terbatas:

32 

33```json .claude-plugin/plugin.json theme={null}

34{

35 "name": "deploy-kit",

36 "version": "3.1.0",

37 "dependencies": [

38 "audit-logger",

39 { "name": "secrets-vault", "version": "~2.1.0" }

40 ]

41}

42```

43 

44Entri dapat berupa string kosong dengan hanya nama plugin, seperti `"audit-logger"` dalam contoh di atas, yang bergantung pada versi apa pun yang disediakan marketplace plugin tersebut. Untuk kontrol lebih, gunakan objek dengan bidang-bidang ini:

45 

46| Bidang | Tipe | Deskripsi |

47| :------------ | :----- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

48| `name` | string | Nama plugin. Diselesaikan dalam marketplace yang sama dengan plugin yang mendeklarasikan. Diperlukan. |

49| `version` | string | Rentang [semver](https://github.com/npm/node-semver#ranges) seperti `~2.1.0`, `^2.0`, `>=1.4`, atau `=2.1.0`. Dependensi diambil pada versi tertinggi yang ditandai yang memenuhi rentang ini. |

50| `marketplace` | string | Marketplace berbeda untuk menyelesaikan `name` di dalamnya. Dependensi lintas-marketplace diblokir kecuali marketplace target tercantum dalam [`allowCrossMarketplaceDependenciesOn`](#depend-on-a-plugin-from-another-marketplace) di `marketplace.json` marketplace root. |

51 

52Bidang `version` menerima ekspresi apa pun yang didukung oleh paket `semver` Node, termasuk rentang caret, tilde, hyphen, dan comparator. Versi pra-rilis seperti `2.0.0-beta.1` dikecualikan kecuali rentang Anda memilih dengan sufiks pra-rilis seperti `^2.0.0-0`.

53 

54## Bergantung pada plugin dari marketplace lain

55 

56Secara default, Claude Code menolak untuk auto-install dependensi yang berada di marketplace berbeda dari plugin yang mendeklarasikannya. Ini mencegah satu marketplace secara diam-diam menarik plugin dari sumber yang belum Anda tinjau.

57 

58Untuk mengizinkannya, pengelola marketplace root menambahkan nama marketplace target ke `allowCrossMarketplaceDependenciesOn` di `marketplace.json`. Marketplace root adalah yang menghosting plugin yang diinstal pengguna; hanya daftar putihnya yang dikonsultasikan, sehingga kepercayaan tidak berantai melalui marketplace perantara.

59 

60`marketplace.json` berikut memungkinkan `deploy-kit` bergantung pada plugin dari `acme-shared`:

61 

62```json .claude-plugin/marketplace.json theme={null}

63{

64 "name": "acme-tools",

65 "owner": { "name": "Acme" },

66 "allowCrossMarketplaceDependenciesOn": ["acme-shared"],

67 "plugins": [

68 {

69 "name": "deploy-kit",

70 "source": "./deploy-kit",

71 "dependencies": [

72 { "name": "audit-logger", "marketplace": "acme-shared" }

73 ]

74 }

75 ]

76}

77```

78 

79Jika bidang hilang atau tidak menyertakan marketplace target, instalasi gagal dengan kesalahan `cross-marketplace` yang menamai bidang yang akan diatur. Pengguna masih dapat menginstal dependensi secara manual terlebih dahulu, yang memenuhi batasan tanpa mengubah daftar putih.

80 

81## Tandai rilis plugin untuk resolusi versi

82 

83Batasan versi diselesaikan terhadap tag git di repositori marketplace. Agar Claude Code menemukan versi yang tersedia dari dependensi, rilis plugin upstream harus ditandai menggunakan konvensi penamaan tertentu.

84 

85Tandai setiap rilis sebagai `{plugin-name}--v{version}`, di mana `{version}` cocok dengan bidang `version` di `plugin.json` commit tersebut. Dari direktori plugin, jalankan:

86 

87```bash theme={null}

88claude plugin tag --push

89```

90 

91Perintah `claude plugin tag` menurunkan nama tag dari manifes plugin dan entri marketplace yang melingkupinya. Sebelum membuat tag, perintah ini memvalidasi konten plugin, memeriksa bahwa `plugin.json` dan entri marketplace setuju tentang versi, memerlukan pohon kerja yang bersih di bawah direktori plugin, dan menolak jika tag sudah ada. Tambahkan `--dry-run` untuk melihat apa yang akan ditandai tanpa membuatnya. Menjalankan `git tag secrets-vault--v2.1.0` secara langsung setara jika Anda menjaga `plugin.json` dan entri marketplace tetap sinkron sendiri.

92 

93Awalan nama plugin memungkinkan satu repositori marketplace menghosting beberapa plugin dengan lini versi independen. Pemisah `--v` diuraikan sebagai pencocokan awalan pada nama plugin lengkap, sehingga nama plugin yang berisi tanda hubung ditangani dengan benar.

94 

95Ketika Anda menginstal plugin yang mendeklarasikan `{ "name": "secrets-vault", "version": "~2.1.0" }`, Claude Code mencantumkan tag marketplace, memfilter ke yang dimulai dengan `secrets-vault--v`, dan mengambil versi tertinggi yang memenuhi `~2.1.0`. Jika tidak ada tag yang cocok, plugin dependen dinonaktifkan dengan kesalahan yang mencantumkan versi yang tersedia.

96 

97Semver tag yang diselesaikan dicatat secara terpisah dari `version` milik `plugin.json`, sehingga pemeriksaan batasan menggunakan tag yang benar-benar diambil bahkan jika `plugin.json` pada commit tersebut memiliki nilai yang ketinggalan zaman. Nama direktori cache untuk instalasi yang diselesaikan tag mencakup akhiran SHA commit 12 karakter, sehingga jika pengelola memaksa memindahkan tag ke commit yang berbeda, instalasi berikutnya mendapatkan direktori cache segar alih-alih menggunakan kembali konten yang ketinggalan zaman.

98 

99<Note>

100 Untuk sumber marketplace `npm`, batasan tidak mengontrol versi mana yang diambil, karena resolusi berbasis tag hanya berlaku untuk sumber yang didukung git. Batasan masih diperiksa pada waktu muat, dan plugin dependen dinonaktifkan dengan `dependency-version-unsatisfied` jika versi yang diinstal tidak memenuhinya.

101</Note>

102 

103## Bagaimana batasan berinteraksi

104 

105Ketika beberapa plugin yang diinstal membatasi dependensi yang sama, Claude Code memotong rentang mereka dan menyelesaikan dependensi ke versi tertinggi yang memenuhi semuanya. Tabel di bawah menunjukkan bagaimana kombinasi umum diselesaikan.

106 

107| Plugin A memerlukan | Plugin B memerlukan | Hasil |

108| :------------------ | :------------------ | :-------------------------------------------------------------------------------------------------- |

109| `^2.0` | `>=2.1` | Satu instalasi pada tag `2.x` tertinggi pada atau di atas `2.1.0`. Kedua plugin dimuat. |

110| `~2.1` | `~3.0` | Instalasi plugin B gagal dengan `range-conflict`. Plugin A dan dependensi tetap seperti sebelumnya. |

111| `=2.1.0` | tidak ada | Dependensi tetap di `2.1.0`. Auto-update melewati versi yang lebih baru saat plugin A diinstal. |

112 

113Auto-update mengambil dependensi terbatas pada tag git tertinggi yang memenuhi rentang setiap plugin yang diinstal, bukan pada versi terbaru marketplace, sehingga dependensi terus menerima pembaruan dalam rentang yang diizinkan. Jika tidak ada tag yang memenuhi semua rentang, pembaruan dilewati dan pesan lewat muncul di `/doctor` dan tab Errors `/plugin`, menamai plugin yang membatasi.

114 

115Ketika Anda mencopot plugin terakhir yang membatasi dependensi, dependensi tidak lagi ditahan dan melanjutkan pelacakan entri marketplacenya pada pembaruan berikutnya.

116 

117## Hapus dependensi auto-install yang yatim piatu

118 

119Dependensi auto-install tetap di disk setelah plugin yang menginstalnya dicopot, untuk berjaga-jaga jika Anda menginstal ulang plugin dependen atau ingin terus menggunakan dependensi secara langsung. Untuk membersihkannya, jalankan `claude plugin prune` untuk mencantumkan dependensi auto-install yang tidak lagi memiliki plugin yang diinstal yang memerlukan mereka dan menghapusnya setelah prompt konfirmasi. Ini memerlukan Claude Code v2.1.121 atau lebih baru.

120 

121```bash theme={null}

122claude plugin prune

123```

124 

125Secara default, prune beroperasi pada cakupan pengguna. Gunakan `--scope project` atau `--scope local` untuk menargetkan cakupan berbeda. Lewatkan `--dry-run` untuk mencantumkan apa yang akan dihapus tanpa mengubah apa pun. Lewatkan `-y` untuk melewati prompt konfirmasi. Ketika stdin atau stdout bukan terminal, prune mencantumkan yatim piatu dan keluar tanpa menghapusnya kecuali `-y` dilewatkan.

126 

127Untuk prune sebagai bagian dari uninstall, lewatkan `--prune` ke `claude plugin uninstall`. Setelah menghapus plugin bernama, Claude Code memindai dan menghapus dependensi auto-install apa pun yang sekarang yatim piatu. Plugin yang Anda instal sendiri tidak pernah dipangkas, hanya yang diinstal secara otomatis melalui array `dependencies` plugin lain.

128 

129Misalnya, untuk mencopot `deploy-kit` dan membersihkan dependensi yang ditinggalkannya:

130 

131```bash theme={null}

132claude plugin uninstall deploy-kit --prune

133```

134 

135## Selesaikan kesalahan dependensi

136 

137Masalah dependensi muncul di `claude plugin list`, di antarmuka `/plugin`, dan di `/doctor`. Plugin yang terpengaruh dinonaktifkan sampai Anda menyelesaikan kesalahan. Kesalahan paling umum dan perbaikannya tercantum di bawah.

138 

139| Kesalahan | Arti | Cara menyelesaikan |

140| :------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

141| `dependency-unsatisfied` | Dependensi yang dideklarasikan tidak diinstal, atau diinstal tetapi dinonaktifkan. | Jalankan perintah `claude plugin install` yang ditampilkan dalam pesan kesalahan. Jika marketplace dependensi belum dikonfigurasi, tambahkan dengan `claude plugin marketplace add` dan Claude Code menyelesaikan dependensi secara otomatis. Jika dependensi dinonaktifkan, aktifkan. |

142| `range-conflict` | Persyaratan versi untuk dependensi tidak dapat digabungkan. Pesan kesalahan menamai penyebabnya: tidak ada versi yang memenuhi semua rentang, rentang bukan sintaks semver yang valid, atau rentang gabungan terlalu kompleks untuk dipotongan. | Copot atau perbarui salah satu plugin yang bertentangan, perbaiki string `version` yang tidak valid, sederhanakan rantai `\|\|` panjang, atau minta penulis upstream untuk memperluas batasannya. |

143| `dependency-version-unsatisfied` | Versi dependensi yang diinstal berada di luar rentang yang dideklarasikan plugin ini. | Jalankan `claude plugin install <dependency>@<marketplace>` untuk menyelesaikan kembali dependensi terhadap semua batasan saat ini. |

144| `no-matching-tag` | Repositori dependensi tidak memiliki tag `{name}--v*` yang memenuhi rentang. | Periksa bahwa upstream telah menandai rilis menggunakan konvensi di atas, atau relakskan rentang Anda. |

145 

146Untuk memeriksa kesalahan ini secara terprogram, jalankan `claude plugin list --json` dan baca bidang `errors` pada setiap plugin.

147 

148## Lihat juga

149 

150* [Buat plugin](/id/plugins): bangun plugin dengan skills, agents, dan hooks

151* [Buat dan distribusikan marketplace plugin](/id/plugin-marketplaces): hosting plugin untuk tim Anda

152* [Referensi Plugin](/id/plugins-reference#plugin-manifest-schema): skema `plugin.json` lengkap

153* [Manajemen versi](/id/plugins-reference#version-management): bagaimana versi plugin itu sendiri diselesaikan dan digunakan sebagai kunci cache

plugin-marketplaces.md +1054 −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 dan distribusikan marketplace plugin

6 

7> Bangun dan host marketplace plugin untuk mendistribusikan ekstensi Claude Code di seluruh tim dan komunitas.

8 

9Sebuah **marketplace plugin** adalah katalog yang memungkinkan Anda mendistribusikan plugin kepada orang lain. Marketplace menyediakan penemuan terpusat, pelacakan versi, pembaruan otomatis, dan dukungan untuk berbagai jenis sumber (repositori git, jalur lokal, dan lainnya). Panduan ini menunjukkan cara membuat marketplace Anda sendiri untuk berbagi plugin dengan tim atau komunitas Anda.

10 

11Mencari cara memasang plugin dari marketplace yang sudah ada? Lihat [Temukan dan pasang plugin yang sudah dibuat](/id/discover-plugins).

12 

13## Ikhtisar

14 

15Membuat dan mendistribusikan marketplace melibatkan:

16 

171. **Membuat plugin**: bangun satu atau lebih plugin dengan skills, agents, hooks, MCP servers, atau LSP servers. Panduan ini mengasumsikan Anda sudah memiliki plugin untuk didistribusikan; lihat [Buat plugin](/id/plugins) untuk detail tentang cara membuat plugin.

182. **Membuat file marketplace**: tentukan `marketplace.json` yang mencantumkan plugin Anda dan di mana menemukannya (lihat [Buat file marketplace](#create-the-marketplace-file)).

193. **Host marketplace**: dorong ke GitHub, GitLab, atau host git lainnya (lihat [Host dan distribusikan marketplace](#host-and-distribute-marketplaces)).

204. **Bagikan dengan pengguna**: pengguna menambahkan marketplace Anda dengan `/plugin marketplace add` dan memasang plugin individual (lihat [Temukan dan pasang plugin](/id/discover-plugins)).

21 

22Setelah marketplace Anda aktif, Anda dapat memperbaruinya dengan mendorong perubahan ke repositori Anda. Pengguna menyegarkan salinan lokal mereka dengan `/plugin marketplace update`.

23 

24## Panduan: buat marketplace lokal

25 

26Contoh ini membuat marketplace dengan satu plugin: skill `/quality-review` untuk ulasan kode. Anda akan membuat struktur direktori, menambahkan skill, membuat manifest plugin dan katalog marketplace, kemudian memasang dan mengujinya.

27 

28<Steps>

29 <Step title="Buat struktur direktori">

30 ```bash theme={null}

31 mkdir -p my-marketplace/.claude-plugin

32 mkdir -p my-marketplace/plugins/quality-review-plugin/.claude-plugin

33 mkdir -p my-marketplace/plugins/quality-review-plugin/skills/quality-review

34 ```

35 </Step>

36 

37 <Step title="Buat skill">

38 Buat file `SKILL.md` yang mendefinisikan apa yang dilakukan skill `/quality-review`.

39 

40 ```markdown my-marketplace/plugins/quality-review-plugin/skills/quality-review/SKILL.md theme={null}

41 ---

42 description: Review code for bugs, security, and performance

43 disable-model-invocation: true

44 ---

45 

46 Review the code I've selected or the recent changes for:

47 - Potential bugs or edge cases

48 - Security concerns

49 - Performance issues

50 - Readability improvements

51 

52 Be concise and actionable.

53 ```

54 </Step>

55 

56 <Step title="Buat manifest plugin">

57 Buat file `plugin.json` yang mendeskripsikan plugin. Manifest berada di direktori `.claude-plugin/`.

58 

59 ```json my-marketplace/plugins/quality-review-plugin/.claude-plugin/plugin.json theme={null}

60 {

61 "name": "quality-review-plugin",

62 "description": "Adds a /quality-review skill for quick code reviews",

63 "version": "1.0.0"

64 }

65 ```

66 

67 <Note>

68 Menetapkan `version` berarti pengguna hanya menerima pembaruan ketika Anda mengubah bidang ini, jadi tingkatkan pada setiap rilis. Jika Anda menghilangkan `version` dan menghosting marketplace ini di git, setiap commit secara otomatis dihitung sebagai versi baru. Lihat [Version resolution](#version-resolution-and-release-channels) untuk memilih pendekatan yang tepat.

69 </Note>

70 </Step>

71 

72 <Step title="Buat file marketplace">

73 Buat katalog marketplace yang mencantumkan plugin Anda.

74 

75 ```json my-marketplace/.claude-plugin/marketplace.json theme={null}

76 {

77 "name": "my-plugins",

78 "owner": {

79 "name": "Your Name"

80 },

81 "plugins": [

82 {

83 "name": "quality-review-plugin",

84 "source": "./plugins/quality-review-plugin",

85 "description": "Adds a /quality-review skill for quick code reviews"

86 }

87 ]

88 }

89 ```

90 </Step>

91 

92 <Step title="Tambahkan dan pasang">

93 Tambahkan marketplace dan pasang plugin.

94 

95 ```shell theme={null}

96 /plugin marketplace add ./my-marketplace

97 /plugin install quality-review-plugin@my-plugins

98 ```

99 </Step>

100 

101 <Step title="Coba">

102 Pilih beberapa kode di editor Anda dan jalankan skill baru Anda.

103 

104 ```shell theme={null}

105 /quality-review

106 ```

107 </Step>

108</Steps>

109 

110Untuk mempelajari lebih lanjut tentang apa yang dapat dilakukan plugin, termasuk hooks, agents, MCP servers, dan LSP servers, lihat [Plugins](/id/plugins).

111 

112<Note>

113 **Cara plugin dipasang**: Ketika pengguna memasang plugin, Claude Code menyalin direktori plugin ke lokasi cache. Ini berarti plugin tidak dapat mereferensikan file di luar direktorinya menggunakan jalur seperti `../shared-utils`, karena file tersebut tidak akan disalin.

114 

115 Jika Anda perlu berbagi file di seluruh plugin, gunakan symlink. Lihat [Plugin caching and file resolution](/id/plugins-reference#plugin-caching-and-file-resolution) untuk detail.

116</Note>

117 

118## Buat file marketplace

119 

120Buat `.claude-plugin/marketplace.json` di root repositori Anda. File ini mendefinisikan nama marketplace Anda, informasi pemilik, dan daftar plugin dengan sumbernya.

121 

122Setiap entri plugin memerlukan minimal `name` dan `source` (di mana mengambilnya). Lihat [skema lengkap](#marketplace-schema) di bawah untuk semua field yang tersedia.

123 

124```json theme={null}

125{

126 "name": "company-tools",

127 "owner": {

128 "name": "DevTools Team",

129 "email": "devtools@example.com"

130 },

131 "plugins": [

132 {

133 "name": "code-formatter",

134 "source": "./plugins/formatter",

135 "description": "Automatic code formatting on save",

136 "version": "2.1.0",

137 "author": {

138 "name": "DevTools Team"

139 }

140 },

141 {

142 "name": "deployment-tools",

143 "source": {

144 "source": "github",

145 "repo": "company/deploy-plugin"

146 },

147 "description": "Deployment automation tools"

148 }

149 ]

150}

151```

152 

153## Skema marketplace

154 

155### Field yang diperlukan

156 

157| Field | Type | Deskripsi | Contoh |

158| :-------- | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------- |

159| `name` | string | Identifier marketplace (kebab-case, tanpa spasi). Ini menghadap publik: pengguna melihatnya saat memasang plugin (misalnya, `/plugin install my-tool@your-marketplace`). | `"acme-tools"` |

160| `owner` | object | Informasi pengelola marketplace ([lihat field di bawah](#owner-fields)) | |

161| `plugins` | array | Daftar plugin yang tersedia | Lihat di bawah |

162 

163<Note>

164 **Nama yang dicadangkan**: Nama marketplace berikut dicadangkan untuk penggunaan resmi Anthropic dan tidak dapat digunakan oleh marketplace pihak ketiga: `claude-code-marketplace`, `claude-code-plugins`, `claude-plugins-official`, `anthropic-marketplace`, `anthropic-plugins`, `agent-skills`, `knowledge-work-plugins`, `life-sciences`. Nama yang meniru marketplace resmi (seperti `official-claude-plugins` atau `anthropic-tools-v2`) juga diblokir.

165</Note>

166 

167### Field pemilik

168 

169| Field | Type | Diperlukan | Deskripsi |

170| :------ | :----- | :--------- | :--------------------------- |

171| `name` | string | Ya | Nama pengelola atau tim |

172| `email` | string | Tidak | Email kontak untuk pengelola |

173 

174### Field opsional

175 

176| Field | Type | Deskripsi |

177| :------------------------------------ | :----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

178| `$schema` | string | URL JSON Schema untuk autocomplete dan validasi editor. Claude Code mengabaikan field ini saat waktu muat. |

179| `description` | string | Deskripsi marketplace singkat |

180| `version` | string | Versi manifest marketplace |

181| `metadata.pluginRoot` | string | Direktori dasar yang ditambahkan ke jalur sumber plugin relatif (misalnya, `"./plugins"` memungkinkan Anda menulis `"source": "formatter"` alih-alih `"source": "./plugins/formatter"`) |

182| `allowCrossMarketplaceDependenciesOn` | array | Marketplace lain yang plugin di marketplace ini dapat bergantung padanya. Dependensi dari marketplace yang tidak tercantum di sini diblokir saat instalasi. Lihat [Bergantung pada plugin dari marketplace lain](/id/plugin-dependencies#depend-on-a-plugin-from-another-marketplace). |

183 

184`description` dan `version` juga diterima di bawah `metadata` untuk kompatibilitas mundur.

185 

186## Entri plugin

187 

188Setiap entri plugin dalam array `plugins` mendeskripsikan plugin dan di mana menemukannya. Anda dapat menyertakan field apa pun dari [skema manifest plugin](/id/plugins-reference#plugin-manifest-schema) (seperti `description`, `version`, `author`, `commands`, `hooks`, dll.), ditambah field khusus marketplace ini: `source`, `category`, `tags`, dan `strict`.

189 

190### Field yang diperlukan

191 

192| Field | Type | Deskripsi |

193| :------- | :------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------- |

194| `name` | string | Identifier plugin (kebab-case, tanpa spasi). Ini menghadap publik: pengguna melihatnya saat memasang (misalnya, `/plugin install my-plugin@marketplace`). |

195| `source` | string\|object | Di mana mengambil plugin (lihat [Plugin sources](#plugin-sources) di bawah) |

196 

197### Field plugin opsional

198 

199**Field metadata standar:**

200 

201| Field | Type | Deskripsi |

202| :------------ | :------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

203| `description` | string | Deskripsi plugin singkat |

204| `version` | string | Versi plugin. Jika diatur (di sini atau di `plugin.json`), plugin disematkan ke string ini dan pengguna hanya menerima pembaruan saat berubah. Hilangkan untuk kembali ke SHA commit git. Lihat [Version resolution](#version-resolution-and-release-channels). |

205| `author` | object | Informasi penulis plugin (`name` diperlukan, `email` opsional) |

206| `homepage` | string | URL homepage atau dokumentasi plugin |

207| `repository` | string | URL repositori kode sumber |

208| `license` | string | Identifier lisensi SPDX (misalnya, MIT, Apache-2.0) |

209| `keywords` | array | Tag untuk penemuan dan kategorisasi plugin |

210| `category` | string | Kategori plugin untuk organisasi |

211| `tags` | array | Tag untuk kemudahan pencarian |

212| `strict` | boolean | Mengontrol apakah `plugin.json` adalah otoritas untuk definisi komponen (default: true). Lihat [Strict mode](#strict-mode) di bawah. |

213 

214**Field konfigurasi komponen:**

215 

216| Field | Type | Deskripsi |

217| :----------- | :------------- | :------------------------------------------------------------ |

218| `skills` | string\|array | Jalur kustom ke direktori skill yang berisi `<name>/SKILL.md` |

219| `commands` | string\|array | Jalur kustom ke file skill `.md` datar atau direktori |

220| `agents` | string\|array | Jalur kustom ke file agent |

221| `hooks` | string\|object | Konfigurasi hooks kustom atau jalur ke file hooks |

222| `mcpServers` | string\|object | Konfigurasi MCP server atau jalur ke config MCP |

223| `lspServers` | string\|object | Konfigurasi LSP server atau jalur ke config LSP |

224 

225## Plugin sources

226 

227Plugin sources memberitahu Claude Code di mana mengambil setiap plugin individual yang tercantum di marketplace Anda. Ini diatur dalam field `source` dari setiap entri plugin di `marketplace.json`.

228 

229Setelah plugin diklon atau disalin ke mesin lokal, plugin disalin ke cache plugin lokal yang diversi di `~/.claude/plugins/cache`.

230 

231| Source | Type | Fields | Catatan |

232| ------------- | ----------------------------------- | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |

233| Relative path | `string` (misalnya `"./my-plugin"`) | none | Direktori lokal dalam repo marketplace. Harus dimulai dengan `./`. Diselesaikan relatif terhadap root marketplace, bukan direktori `.claude-plugin/` |

234| `github` | object | `repo`, `ref?`, `sha?` | |

235| `url` | object | `url`, `ref?`, `sha?` | Sumber URL Git |

236| `git-subdir` | object | `url`, `path`, `ref?`, `sha?` | Subdirektori dalam repo git. Mengklon secara sparse untuk meminimalkan bandwidth untuk monorepo |

237| `npm` | object | `package`, `version?`, `registry?` | Dipasang via `npm install` |

238 

239<Note>

240 **Marketplace sources vs plugin sources**: Ini adalah konsep berbeda yang mengontrol hal berbeda.

241 

242 * **Marketplace source** — di mana mengambil katalog `marketplace.json` itu sendiri. Diatur ketika pengguna menjalankan `/plugin marketplace add` atau dalam pengaturan `extraKnownMarketplaces`. Mendukung `ref` (branch/tag) tetapi bukan `sha`.

243 * **Plugin source** — di mana mengambil plugin individual yang tercantum di marketplace. Diatur dalam field `source` dari setiap entri plugin di dalam `marketplace.json`. Mendukung baik `ref` (branch/tag) maupun `sha` (commit yang tepat).

244 

245 Misalnya, marketplace yang dihosting di `acme-corp/plugin-catalog` (marketplace source) dapat mencantumkan plugin yang diambil dari `acme-corp/code-formatter` (plugin source). Marketplace source dan plugin source menunjuk ke repositori berbeda dan disematkan secara independen.

246</Note>

247 

248### Jalur relatif

249 

250Untuk plugin di repositori yang sama, gunakan jalur yang dimulai dengan `./`:

251 

252```json theme={null}

253{

254 "name": "my-plugin",

255 "source": "./plugins/my-plugin"

256}

257```

258 

259Jalur diselesaikan relatif terhadap root marketplace, yang merupakan direktori yang berisi `.claude-plugin/`. Dalam contoh di atas, `./plugins/my-plugin` menunjuk ke `<repo>/plugins/my-plugin`, meskipun `marketplace.json` berada di `<repo>/.claude-plugin/marketplace.json`. Jangan gunakan `../` untuk mereferensikan jalur di luar root marketplace.

260 

261<Note>

262 Jalur relatif hanya berfungsi ketika pengguna menambahkan marketplace Anda melalui Git (GitHub, GitLab, atau URL git). Jika pengguna menambahkan marketplace Anda melalui URL langsung ke file `marketplace.json`, jalur relatif tidak akan terselesaikan dengan benar. Untuk distribusi berbasis URL, gunakan sumber GitHub, npm, atau URL git sebagai gantinya. Lihat [Troubleshooting](#plugins-with-relative-paths-fail-in-url-based-marketplaces) untuk detail.

263</Note>

264 

265### Repositori GitHub

266 

267```json theme={null}

268{

269 "name": "github-plugin",

270 "source": {

271 "source": "github",

272 "repo": "owner/plugin-repo"

273 }

274}

275```

276 

277Anda dapat menyematkan ke branch, tag, atau commit tertentu:

278 

279```json theme={null}

280{

281 "name": "github-plugin",

282 "source": {

283 "source": "github",

284 "repo": "owner/plugin-repo",

285 "ref": "v2.0.0",

286 "sha": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"

287 }

288}

289```

290 

291| Field | Type | Deskripsi |

292| :----- | :----- | :------------------------------------------------------------------------------- |

293| `repo` | string | Diperlukan. Repositori GitHub dalam format `owner/repo` |

294| `ref` | string | Opsional. Branch atau tag Git (default ke branch default repositori) |

295| `sha` | string | Opsional. SHA commit git 40-karakter penuh untuk menyematkan ke versi yang tepat |

296 

297### Repositori Git

298 

299```json theme={null}

300{

301 "name": "git-plugin",

302 "source": {

303 "source": "url",

304 "url": "https://gitlab.com/team/plugin.git"

305 }

306}

307```

308 

309Anda dapat menyematkan ke branch, tag, atau commit tertentu:

310 

311```json theme={null}

312{

313 "name": "git-plugin",

314 "source": {

315 "source": "url",

316 "url": "https://gitlab.com/team/plugin.git",

317 "ref": "main",

318 "sha": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"

319 }

320}

321```

322 

323| Field | Type | Deskripsi |

324| :---- | :----- | :--------------------------------------------------------------------------------------------------------------------------------------------------------- |

325| `url` | string | Diperlukan. URL repositori git lengkap (`https://` atau `git@`). Akhiran `.git` opsional, jadi URL Azure DevOps dan AWS CodeCommit tanpa akhiran berfungsi |

326| `ref` | string | Opsional. Branch atau tag Git (default ke branch default repositori) |

327| `sha` | string | Opsional. SHA commit git 40-karakter penuh untuk menyematkan ke versi yang tepat |

328 

329### Subdirektori Git

330 

331Gunakan `git-subdir` untuk menunjuk ke plugin yang berada di dalam subdirektori repositori git. Claude Code menggunakan klon parsial dan sparse untuk mengambil hanya subdirektori, meminimalkan bandwidth untuk monorepo besar.

332 

333```json theme={null}

334{

335 "name": "my-plugin",

336 "source": {

337 "source": "git-subdir",

338 "url": "https://github.com/acme-corp/monorepo.git",

339 "path": "tools/claude-plugin"

340 }

341}

342```

343 

344Anda dapat menyematkan ke branch, tag, atau commit tertentu:

345 

346```json theme={null}

347{

348 "name": "my-plugin",

349 "source": {

350 "source": "git-subdir",

351 "url": "https://github.com/acme-corp/monorepo.git",

352 "path": "tools/claude-plugin",

353 "ref": "v2.0.0",

354 "sha": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0"

355 }

356}

357```

358 

359Field `url` juga menerima shorthand GitHub (`owner/repo`) atau URL SSH (`git@github.com:owner/repo.git`).

360 

361| Field | Type | Deskripsi |

362| :----- | :----- | :----------------------------------------------------------------------------------------------- |

363| `url` | string | Diperlukan. URL repositori Git, shorthand GitHub `owner/repo`, atau URL SSH |

364| `path` | string | Diperlukan. Jalur subdirektori dalam repo yang berisi plugin (misalnya, `"tools/claude-plugin"`) |

365| `ref` | string | Opsional. Branch atau tag Git (default ke branch default repositori) |

366| `sha` | string | Opsional. SHA commit git 40-karakter penuh untuk menyematkan ke versi yang tepat |

367 

368### Paket npm

369 

370Plugin yang didistribusikan sebagai paket npm dipasang menggunakan `npm install`. Ini berfungsi dengan paket apa pun di registry npm publik atau registry pribadi yang dihosting tim Anda.

371 

372```json theme={null}

373{

374 "name": "my-npm-plugin",

375 "source": {

376 "source": "npm",

377 "package": "@acme/claude-plugin"

378 }

379}

380```

381 

382Untuk menyematkan ke versi tertentu, tambahkan field `version`:

383 

384```json theme={null}

385{

386 "name": "my-npm-plugin",

387 "source": {

388 "source": "npm",

389 "package": "@acme/claude-plugin",

390 "version": "2.1.0"

391 }

392}

393```

394 

395Untuk memasang dari registry pribadi atau internal, tambahkan field `registry`:

396 

397```json theme={null}

398{

399 "name": "my-npm-plugin",

400 "source": {

401 "source": "npm",

402 "package": "@acme/claude-plugin",

403 "version": "^2.0.0",

404 "registry": "https://npm.example.com"

405 }

406}

407```

408 

409| Field | Type | Deskripsi |

410| :--------- | :----- | :------------------------------------------------------------------------------------- |

411| `package` | string | Diperlukan. Nama paket atau paket scoped (misalnya, `@org/plugin`) |

412| `version` | string | Opsional. Versi atau rentang versi (misalnya, `2.1.0`, `^2.0.0`, `~1.5.0`) |

413| `registry` | string | Opsional. URL registry npm kustom. Default ke registry npm sistem (biasanya npmjs.org) |

414 

415### Entri plugin lanjutan

416 

417Contoh ini menunjukkan entri plugin menggunakan banyak field opsional, termasuk jalur kustom untuk commands, agents, hooks, dan MCP servers:

418 

419```json theme={null}

420{

421 "name": "enterprise-tools",

422 "source": {

423 "source": "github",

424 "repo": "company/enterprise-plugin"

425 },

426 "description": "Enterprise workflow automation tools",

427 "version": "2.1.0",

428 "author": {

429 "name": "Enterprise Team",

430 "email": "enterprise@example.com"

431 },

432 "homepage": "https://docs.example.com/plugins/enterprise-tools",

433 "repository": "https://github.com/company/enterprise-plugin",

434 "license": "MIT",

435 "keywords": ["enterprise", "workflow", "automation"],

436 "category": "productivity",

437 "commands": [

438 "./commands/core/",

439 "./commands/enterprise/",

440 "./commands/experimental/preview.md"

441 ],

442 "agents": ["./agents/security-reviewer.md", "./agents/compliance-checker.md"],

443 "hooks": {

444 "PostToolUse": [

445 {

446 "matcher": "Write|Edit",

447 "hooks": [

448 {

449 "type": "command",

450 "command": "${CLAUDE_PLUGIN_ROOT}/scripts/validate.sh"

451 }

452 ]

453 }

454 ]

455 },

456 "mcpServers": {

457 "enterprise-db": {

458 "command": "${CLAUDE_PLUGIN_ROOT}/servers/db-server",

459 "args": ["--config", "${CLAUDE_PLUGIN_ROOT}/config.json"]

460 }

461 },

462 "strict": false

463}

464```

465 

466Hal-hal penting untuk diperhatikan:

467 

468* **`commands` dan `agents`**: Anda dapat menentukan beberapa direktori atau file individual. Jalur relatif terhadap root plugin.

469* **`${CLAUDE_PLUGIN_ROOT}`**: Gunakan variabel ini dalam hooks dan config MCP server untuk mereferensikan file dalam direktori instalasi plugin. Ini diperlukan karena plugin disalin ke lokasi cache saat dipasang. Untuk dependensi atau state yang harus bertahan pembaruan plugin, gunakan [`${CLAUDE_PLUGIN_DATA}`](/id/plugins-reference#persistent-data-directory) sebagai gantinya.

470* **`strict: false`**: Karena ini diatur ke false, plugin tidak memerlukan `plugin.json` sendiri. Entri marketplace mendefinisikan semuanya. Lihat [Strict mode](#strict-mode) di bawah.

471 

472### Strict mode

473 

474Field `strict` mengontrol apakah `plugin.json` adalah otoritas untuk definisi komponen (skills, agents, hooks, MCP servers, output styles).

475 

476| Value | Perilaku |

477| :--------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------ |

478| `true` (default) | `plugin.json` adalah otoritas. Entri marketplace dapat melengkapinya dengan komponen tambahan, dan kedua sumber digabungkan. |

479| `false` | Entri marketplace adalah definisi lengkap. Jika plugin juga memiliki `plugin.json` yang mendeklarasikan komponen, itu adalah konflik dan plugin gagal dimuat. |

480 

481**Kapan menggunakan setiap mode:**

482 

483* **`strict: true`**: plugin memiliki `plugin.json` sendiri dan mengelola komponennya sendiri. Entri marketplace dapat menambahkan skills atau hooks tambahan di atas. Ini adalah default dan berfungsi untuk sebagian besar plugin.

484* **`strict: false`**: operator marketplace menginginkan kontrol penuh. Repo plugin menyediakan file mentah, dan entri marketplace mendefinisikan file mana yang diekspos sebagai skills, agents, hooks, dll. Berguna ketika marketplace merestruktur atau mengkurasi komponen plugin secara berbeda dari yang dimaksudkan penulis plugin.

485 

486## Host dan distribusikan marketplace

487 

488### Host di GitHub (direkomendasikan)

489 

490GitHub menyediakan metode distribusi paling mudah:

491 

4921. **Buat repositori**: Siapkan repositori baru untuk marketplace Anda

4932. **Tambahkan file marketplace**: Buat `.claude-plugin/marketplace.json` dengan definisi plugin Anda

4943. **Bagikan dengan tim**: Pengguna menambahkan marketplace Anda dengan `/plugin marketplace add owner/repo`

495 

496**Manfaat**: Kontrol versi bawaan, pelacakan masalah, dan fitur kolaborasi tim.

497 

498### Host di layanan git lainnya

499 

500Layanan hosting git apa pun berfungsi, seperti GitLab, Bitbucket, dan server yang dihosting sendiri. Pengguna menambahkan dengan URL repositori lengkap:

501 

502```shell theme={null}

503/plugin marketplace add https://gitlab.com/company/plugins.git

504```

505 

506### Repositori pribadi

507 

508Claude Code mendukung pemasangan plugin dari repositori pribadi. Untuk instalasi manual dan pembaruan, Claude Code menggunakan helper kredensial git yang ada, jadi akses HTTPS melalui `gh auth login`, Keychain macOS, atau `git-credential-store` berfungsi sama seperti di terminal Anda. Akses SSH berfungsi selama host sudah ada di file `known_hosts` Anda dan kunci dimuat di `ssh-agent`, karena Claude Code menekan prompt SSH interaktif untuk sidik jari host dan passphrase kunci.

509 

510Pembaruan otomatis latar belakang berjalan saat startup tanpa helper kredensial, karena prompt interaktif akan memblokir Claude Code dari startup. Untuk mengaktifkan pembaruan otomatis untuk marketplace pribadi, atur token autentikasi yang sesuai di lingkungan Anda:

511 

512| Provider | Variabel lingkungan | Catatan |

513| :-------- | :----------------------------- | :----------------------------------------- |

514| GitHub | `GITHUB_TOKEN` atau `GH_TOKEN` | Token akses pribadi atau token GitHub App |

515| GitLab | `GITLAB_TOKEN` atau `GL_TOKEN` | Token akses pribadi atau token proyek |

516| Bitbucket | `BITBUCKET_TOKEN` | Sandi aplikasi atau token akses repositori |

517 

518Atur token dalam konfigurasi shell Anda (misalnya, `.bashrc`, `.zshrc`) atau teruskan saat menjalankan Claude Code:

519 

520```bash theme={null}

521export GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx

522```

523 

524<Note>

525 Untuk lingkungan CI/CD, konfigurasikan token sebagai variabel lingkungan rahasia. GitHub Actions secara otomatis menyediakan `GITHUB_TOKEN` untuk repositori dalam organisasi yang sama.

526</Note>

527 

528### Uji secara lokal sebelum distribusi

529 

530Uji marketplace Anda secara lokal sebelum berbagi:

531 

532```shell theme={null}

533/plugin marketplace add ./my-local-marketplace

534/plugin install test-plugin@my-local-marketplace

535```

536 

537Untuk rangkaian lengkap perintah add (GitHub, URL Git, jalur lokal, URL jarak jauh), lihat [Tambahkan marketplace](/id/discover-plugins#add-marketplaces).

538 

539### Wajibkan marketplace untuk tim Anda

540 

541Anda dapat mengonfigurasi repositori Anda sehingga anggota tim secara otomatis diminta untuk memasang marketplace Anda ketika mereka mempercayai folder proyek. Tambahkan marketplace Anda ke `.claude/settings.json`:

542 

543```json theme={null}

544{

545 "extraKnownMarketplaces": {

546 "company-tools": {

547 "source": {

548 "source": "github",

549 "repo": "your-org/claude-plugins"

550 }

551 }

552 }

553}

554```

555 

556Anda juga dapat menentukan plugin mana yang harus diaktifkan secara default:

557 

558```json theme={null}

559{

560 "enabledPlugins": {

561 "code-formatter@company-tools": true,

562 "deployment-tools@company-tools": true

563 }

564}

565```

566 

567Untuk opsi konfigurasi lengkap, lihat [Plugin settings](/id/settings#plugin-settings).

568 

569<Note>

570 Jika Anda menggunakan sumber `directory` atau `file` lokal dengan jalur relatif, jalur diselesaikan terhadap checkout utama repositori Anda. Ketika Anda menjalankan Claude Code dari git worktree, jalur masih menunjuk ke checkout utama, jadi semua worktrees berbagi lokasi marketplace yang sama. Status marketplace disimpan sekali per pengguna di `~/.claude/plugins/known_marketplaces.json`, bukan per proyek.

571</Note>

572 

573### Pra-isi plugin untuk container

574 

575Untuk image container dan lingkungan CI, Anda dapat pra-isi direktori plugin saat waktu build sehingga Claude Code dimulai dengan marketplace dan plugin yang sudah tersedia, tanpa mengklon apa pun saat runtime. Atur variabel lingkungan `CLAUDE_CODE_PLUGIN_SEED_DIR` untuk menunjuk ke direktori ini.

576 

577Untuk melapisi beberapa direktori seed, pisahkan jalur dengan `:` di Unix atau `;` di Windows. Claude Code mencari setiap direktori secara berurutan, dan seed pertama yang berisi marketplace atau cache plugin yang diberikan menang.

578 

579Direktori seed mencerminkan struktur `~/.claude/plugins`:

580 

581```

582$CLAUDE_CODE_PLUGIN_SEED_DIR/

583 known_marketplaces.json

584 marketplaces/<name>/...

585 cache/<marketplace>/<plugin>/<version>/...

586```

587 

588Untuk membangun direktori seed, jalankan Claude Code sekali selama image build, pasang plugin yang Anda butuhkan, kemudian salin direktori `~/.claude/plugins` yang dihasilkan ke image Anda dan tunjukkan `CLAUDE_CODE_PLUGIN_SEED_DIR` ke sana.

589 

590Untuk melewati langkah copy, atur `CLAUDE_CODE_PLUGIN_CACHE_DIR` ke jalur target seed Anda selama build sehingga plugin dipasang langsung ke sana:

591 

592```bash theme={null}

593CLAUDE_CODE_PLUGIN_CACHE_DIR=/opt/claude-seed claude plugin marketplace add your-org/plugins

594CLAUDE_CODE_PLUGIN_CACHE_DIR=/opt/claude-seed claude plugin install my-tool@your-plugins

595```

596 

597Kemudian atur `CLAUDE_CODE_PLUGIN_SEED_DIR=/opt/claude-seed` di lingkungan runtime container Anda sehingga Claude Code membaca dari seed saat startup.

598 

599Saat startup, Claude Code mendaftarkan marketplace yang ditemukan di `known_marketplaces.json` seed ke dalam konfigurasi utama, dan menggunakan cache plugin yang ditemukan di bawah `cache/` di tempat tanpa mengklon ulang. Ini berfungsi dalam mode interaktif dan mode non-interaktif dengan flag `-p`.

600 

601Detail perilaku:

602 

603* **Read-only**: direktori seed tidak pernah ditulis. Pembaruan otomatis dinonaktifkan untuk marketplace seed karena git pull akan gagal di filesystem read-only.

604* **Entri seed mengambil prioritas**: marketplace yang dideklarasikan dalam seed menimpa entri yang cocok apa pun dalam konfigurasi pengguna di setiap startup. Untuk opt out dari plugin seed, gunakan `/plugin disable` daripada menghapus marketplace.

605* **Resolusi jalur**: Claude Code menemukan konten marketplace dengan menyelidiki `$CLAUDE_CODE_PLUGIN_SEED_DIR/marketplaces/<name>/` saat runtime, bukan dengan mempercayai jalur yang disimpan di dalam JSON seed. Ini berarti seed berfungsi dengan benar bahkan ketika dipasang di jalur berbeda dari tempat dibangun.

606* **Mutasi diblokir**: menjalankan `/plugin marketplace remove` atau `/plugin marketplace update` terhadap marketplace yang dikelola seed gagal dengan panduan untuk meminta administrator Anda memperbarui image seed.

607* **Komposisi dengan pengaturan**: jika `extraKnownMarketplaces` atau `enabledPlugins` mendeklarasikan marketplace yang sudah ada di seed, Claude Code menggunakan salinan seed alih-alih mengklon.

608 

609### Pembatasan marketplace yang dikelola

610 

611Untuk organisasi yang memerlukan kontrol ketat atas sumber plugin, administrator dapat membatasi marketplace plugin mana yang diizinkan pengguna untuk tambahkan menggunakan pengaturan [`strictKnownMarketplaces`](/id/settings#strictknownmarketplaces) dalam pengaturan yang dikelola.

612 

613Ketika `strictKnownMarketplaces` dikonfigurasi dalam pengaturan yang dikelola, perilaku pembatasan tergantung pada nilainya:

614 

615| Value | Perilaku |

616| --------------------------- | --------------------------------------------------------------------------------------- |

617| Tidak terdefinisi (default) | Tidak ada pembatasan. Pengguna dapat menambahkan marketplace apa pun |

618| Array kosong `[]` | Lockdown lengkap. Pengguna tidak dapat menambahkan marketplace baru apa pun |

619| Daftar sumber | Pengguna hanya dapat menambahkan marketplace yang cocok dengan daftar izin secara tepat |

620 

621#### Konfigurasi umum

622 

623Nonaktifkan semua penambahan marketplace:

624 

625```json theme={null}

626{

627 "strictKnownMarketplaces": []

628}

629```

630 

631Izinkan marketplace tertentu saja:

632 

633```json theme={null}

634{

635 "strictKnownMarketplaces": [

636 {

637 "source": "github",

638 "repo": "acme-corp/approved-plugins"

639 },

640 {

641 "source": "github",

642 "repo": "acme-corp/security-tools",

643 "ref": "v2.0"

644 },

645 {

646 "source": "url",

647 "url": "https://plugins.example.com/marketplace.json"

648 }

649 ]

650}

651```

652 

653Izinkan semua marketplace dari server git internal menggunakan pencocokan pola regex pada host. Ini adalah pendekatan yang direkomendasikan untuk [GitHub Enterprise Server](/id/github-enterprise-server#plugin-marketplaces-on-ghes) atau instance GitLab yang dihosting sendiri:

654 

655```json theme={null}

656{

657 "strictKnownMarketplaces": [

658 {

659 "source": "hostPattern",

660 "hostPattern": "^github\\.example\\.com$"

661 }

662 ]

663}

664```

665 

666Izinkan marketplace berbasis filesystem dari direktori tertentu menggunakan pencocokan pola regex pada jalur:

667 

668```json theme={null}

669{

670 "strictKnownMarketplaces": [

671 {

672 "source": "pathPattern",

673 "pathPattern": "^/opt/approved/"

674 }

675 ]

676}

677```

678 

679Gunakan `".*"` sebagai `pathPattern` untuk mengizinkan jalur filesystem apa pun sambil tetap mengontrol sumber jaringan dengan `hostPattern`.

680 

681<Note>

682 `strictKnownMarketplaces` membatasi apa yang dapat ditambahkan pengguna, tetapi tidak mendaftarkan marketplace dengan sendirinya. Untuk membuat marketplace yang diizinkan tersedia secara otomatis tanpa pengguna menjalankan `/plugin marketplace add`, pasangkan dengan [`extraKnownMarketplaces`](/id/settings#extraknownmarketplaces) dalam `managed-settings.json` yang sama. Lihat [Menggunakan keduanya bersama-sama](/id/settings#strictknownmarketplaces).

683</Note>

684 

685#### Cara pembatasan bekerja

686 

687Pembatasan diperiksa sebelum operasi jaringan atau filesystem apa pun. Pemeriksaan berjalan pada marketplace add dan pada plugin install, update, refresh, dan auto-update. Jika marketplace ditambahkan sebelum kebijakan dikonfigurasi dan sumbernya tidak lagi cocok dengan daftar izin, Claude Code menolak untuk memasang atau memperbarui plugin darinya. Penegakan yang sama berlaku untuk `blockedMarketplaces`.

688 

689Daftar izin menggunakan pencocokan tepat untuk sebagian besar jenis sumber. Agar marketplace diizinkan, semua field yang ditentukan harus cocok secara tepat:

690 

691* Untuk sumber GitHub: `repo` diperlukan, dan `ref` atau `path` juga harus cocok jika ditentukan dalam daftar izin

692* Untuk sumber URL: URL lengkap harus cocok secara tepat

693* Untuk sumber `hostPattern`: host marketplace dicocokkan dengan pola regex

694* Untuk sumber `pathPattern`: jalur filesystem marketplace dicocokkan dengan pola regex

695 

696Karena `strictKnownMarketplaces` diatur dalam [pengaturan yang dikelola](/id/settings#settings-files), konfigurasi pengguna individual dan proyek tidak dapat mengganti pembatasan ini.

697 

698Untuk detail konfigurasi lengkap termasuk semua jenis sumber yang didukung dan perbandingan dengan `extraKnownMarketplaces`, lihat [referensi strictKnownMarketplaces](/id/settings#strictknownmarketplaces).

699 

700### Resolusi versi dan saluran rilis

701 

702Versi plugin menentukan jalur cache dan deteksi pembaruan: jika versi yang diselesaikan cocok dengan apa yang sudah dimiliki pengguna, `/plugin update` dan auto-update melewati plugin.

703 

704Claude Code menyelesaikan versi plugin dari yang pertama dari ini yang diatur:

705 

7061. `version` dalam `plugin.json` plugin

7072. `version` dalam entri marketplace plugin

7083. SHA commit git dari sumber plugin

709 

710Untuk jenis sumber berbasis git `github`, `url`, `git-subdir`, dan jalur relatif di dalam marketplace yang dihosting git, Anda dapat menghilangkan `version` sepenuhnya dan setiap commit baru diperlakukan sebagai versi baru. Ini adalah setup paling sederhana untuk plugin internal atau yang sedang dikembangkan secara aktif.

711 

712<Warning>

713 Menetapkan `version` menyematkan plugin. Jika `plugin.json` mendeklarasikan `"version": "1.0.0"`, mendorong commit baru tanpa mengubah string itu tidak melakukan apa pun untuk pengguna yang ada, karena Claude Code melihat versi yang sama dan menyimpan salinan cache. Bump field pada setiap rilis, atau hilangkan untuk menggunakan SHA commit.

714 

715 Hindari menetapkan `version` di kedua `plugin.json` dan entri marketplace. Nilai `plugin.json` selalu menang secara diam-diam, jadi versi manifest yang basi dapat menyembunyikan versi yang Anda atur di `marketplace.json`.

716</Warning>

717 

718#### Siapkan saluran rilis

719 

720Untuk mendukung saluran rilis "stable" dan "latest" untuk plugin Anda, Anda dapat menyiapkan dua marketplace yang menunjuk ke refs atau SHA berbeda dari repo yang sama. Anda kemudian dapat menetapkan dua marketplace ke grup pengguna berbeda melalui [pengaturan yang dikelola](/id/settings#settings-files).

721 

722<Warning>

723 Setiap saluran harus diselesaikan ke versi yang berbeda. Jika Anda menggunakan versi eksplisit, `plugin.json` harus mendeklarasikan `version` berbeda di setiap ref yang disematkan. Jika Anda menghilangkan `version`, SHA commit yang berbeda sudah membedakan saluran. Jika dua refs diselesaikan ke string versi yang sama, Claude Code memperlakukannya sebagai identik dan melewati pembaruan.

724</Warning>

725 

726##### Contoh

727 

728```json theme={null}

729{

730 "name": "stable-tools",

731 "plugins": [

732 {

733 "name": "code-formatter",

734 "source": {

735 "source": "github",

736 "repo": "acme-corp/code-formatter",

737 "ref": "stable"

738 }

739 }

740 ]

741}

742```

743 

744```json theme={null}

745{

746 "name": "latest-tools",

747 "plugins": [

748 {

749 "name": "code-formatter",

750 "source": {

751 "source": "github",

752 "repo": "acme-corp/code-formatter",

753 "ref": "latest"

754 }

755 }

756 ]

757}

758```

759 

760##### Tetapkan saluran ke grup pengguna

761 

762Tetapkan setiap marketplace ke grup pengguna yang sesuai melalui pengaturan yang dikelola. Misalnya, grup stabil menerima:

763 

764```json theme={null}

765{

766 "extraKnownMarketplaces": {

767 "stable-tools": {

768 "source": {

769 "source": "github",

770 "repo": "acme-corp/stable-tools"

771 }

772 }

773 }

774}

775```

776 

777Grup early-access menerima `latest-tools` sebagai gantinya:

778 

779```json theme={null}

780{

781 "extraKnownMarketplaces": {

782 "latest-tools": {

783 "source": {

784 "source": "github",

785 "repo": "acme-corp/latest-tools"

786 }

787 }

788 }

789}

790```

791 

792#### Sematkan versi dependensi

793 

794Plugin dapat membatasi dependensinya ke rentang semver sehingga pembaruan dependensi tidak merusak plugin yang bergantung. Lihat [Batasi versi dependensi plugin](/id/plugin-dependencies) untuk konvensi git-tag `{plugin-name}--v{version}`, sintaks rentang, dan bagaimana beberapa batasan pada dependensi yang sama digabungkan.

795 

796## Validasi dan pengujian

797 

798Uji marketplace Anda sebelum berbagi.

799 

800Validasi sintaks JSON marketplace Anda:

801 

802```bash theme={null}

803claude plugin validate .

804```

805 

806Atau dari dalam Claude Code:

807 

808```shell theme={null}

809/plugin validate .

810```

811 

812Tambahkan marketplace untuk pengujian:

813 

814```shell theme={null}

815/plugin marketplace add ./path/to/marketplace

816```

817 

818Pasang plugin uji untuk memverifikasi semuanya berfungsi:

819 

820```shell theme={null}

821/plugin install test-plugin@marketplace-name

822```

823 

824Untuk alur kerja pengujian plugin lengkap, lihat [Uji plugin Anda secara lokal](/id/plugins#test-your-plugins-locally). Untuk troubleshooting teknis, lihat [Plugins reference](/id/plugins-reference).

825 

826## Kelola marketplace dari CLI

827 

828Claude Code menyediakan subperintah `claude plugin marketplace` non-interaktif untuk scripting dan otomasi. Ini setara dengan perintah `/plugin marketplace` yang tersedia dalam sesi interaktif.

829 

830### Plugin marketplace add

831 

832Tambahkan marketplace dari repositori GitHub, URL git, URL jarak jauh, atau jalur lokal.

833 

834```bash theme={null}

835claude plugin marketplace add <source> [options]

836```

837 

838**Argumen:**

839 

840* `<source>`: Shorthand GitHub `owner/repo`, URL git, URL jarak jauh ke file `marketplace.json`, atau jalur direktori lokal. Untuk menyematkan ke branch atau tag, tambahkan `@ref` ke shorthand GitHub atau `#ref` ke URL git

841 

842**Opsi:**

843 

844| Opsi | Deskripsi | Default |

845| :-------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------- | :------ |

846| `--scope <scope>` | Di mana mendeklarasikan marketplace: `user`, `project`, atau `local`. Lihat [Plugin installation scopes](/id/plugins-reference#plugin-installation-scopes) | `user` |

847| `--sparse <paths...>` | Batasi checkout ke direktori tertentu melalui git sparse-checkout. Berguna untuk monorepo | |

848 

849Tambahkan marketplace dari GitHub menggunakan shorthand `owner/repo`:

850 

851```bash theme={null}

852claude plugin marketplace add acme-corp/claude-plugins

853```

854 

855Sematkan ke branch atau tag tertentu dengan `@ref`:

856 

857```bash theme={null}

858claude plugin marketplace add acme-corp/claude-plugins@v2.0

859```

860 

861Tambahkan dari URL git di host non-GitHub:

862 

863```bash theme={null}

864claude plugin marketplace add https://gitlab.example.com/team/plugins.git

865```

866 

867Tambahkan dari URL jarak jauh yang melayani file `marketplace.json` secara langsung:

868 

869```bash theme={null}

870claude plugin marketplace add https://example.com/marketplace.json

871```

872 

873Tambahkan dari direktori lokal untuk pengujian:

874 

875```bash theme={null}

876claude plugin marketplace add ./my-marketplace

877```

878 

879Deklarasikan marketplace di scope proyek sehingga dibagikan dengan tim Anda melalui `.claude/settings.json`:

880 

881```bash theme={null}

882claude plugin marketplace add acme-corp/claude-plugins --scope project

883```

884 

885Untuk monorepo, batasi checkout ke direktori yang berisi konten plugin:

886 

887```bash theme={null}

888claude plugin marketplace add acme-corp/monorepo --sparse .claude-plugin plugins

889```

890 

891### Plugin marketplace list

892 

893Daftar semua marketplace yang dikonfigurasi.

894 

895```bash theme={null}

896claude plugin marketplace list [options]

897```

898 

899**Opsi:**

900 

901| Opsi | Deskripsi |

902| :------- | :------------------ |

903| `--json` | Output sebagai JSON |

904 

905### Plugin marketplace remove

906 

907Hapus marketplace yang dikonfigurasi. Alias `rm` juga diterima.

908 

909```bash theme={null}

910claude plugin marketplace remove <name>

911```

912 

913**Argumen:**

914 

915* `<name>`: nama marketplace untuk dihapus, seperti yang ditunjukkan oleh `claude plugin marketplace list`. Ini adalah `name` dari `marketplace.json`, bukan sumber yang Anda teruskan ke `add`

916 

917<Warning>

918 Menghapus marketplace juga mencopot plugin apa pun yang Anda pasang darinya. Untuk menyegarkan marketplace tanpa kehilangan plugin yang dipasang, gunakan `claude plugin marketplace update` sebagai gantinya.

919</Warning>

920 

921### Plugin marketplace update

922 

923Segarkan marketplace dari sumbernya untuk mengambil plugin baru dan perubahan versi.

924 

925```bash theme={null}

926claude plugin marketplace update [name]

927```

928 

929**Argumen:**

930 

931* `[name]`: nama marketplace untuk diperbarui, seperti yang ditunjukkan oleh `claude plugin marketplace list`. Memperbarui semua marketplace jika dihilangkan

932 

933Baik `remove` maupun `update` gagal ketika dijalankan terhadap marketplace yang dikelola seed, yang bersifat read-only. Saat memperbarui semua marketplace, entri yang dikelola seed dilewati dan marketplace lainnya masih diperbarui. Untuk mengubah plugin yang disediakan seed, minta administrator Anda memperbarui image seed. Lihat [Pra-isi plugin untuk container](#pre-populate-plugins-for-containers).

934 

935## Troubleshooting

936 

937### Marketplace tidak memuat

938 

939**Gejala**: Tidak dapat menambahkan marketplace atau melihat plugin darinya

940 

941**Solusi**:

942 

943* Verifikasi URL marketplace dapat diakses

944* Periksa bahwa `.claude-plugin/marketplace.json` ada di jalur yang ditentukan

945* Pastikan sintaks JSON valid dan frontmatter terbentuk dengan baik menggunakan `claude plugin validate` atau `/plugin validate`

946* Untuk repositori pribadi, konfirmasi Anda memiliki izin akses

947 

948### Kesalahan validasi marketplace

949 

950Jalankan `claude plugin validate .` atau `/plugin validate .` dari direktori marketplace Anda untuk memeriksa masalah. Validator memeriksa `plugin.json`, frontmatter skill/agent/command, dan `hooks/hooks.json` untuk kesalahan sintaks dan skema. Kesalahan umum:

951 

952| Kesalahan | Penyebab | Solusi |

953| :------------------------------------------------ | :----------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------- |

954| `File not found: .claude-plugin/marketplace.json` | Manifest hilang | Buat `.claude-plugin/marketplace.json` dengan field yang diperlukan |

955| `Invalid JSON syntax: Unexpected token...` | Kesalahan sintaks JSON dalam marketplace.json | Periksa koma yang hilang, koma ekstra, atau string yang tidak dikutip |

956| `Duplicate plugin name "x" found in marketplace` | Dua plugin berbagi nama yang sama | Berikan setiap plugin nilai `name` yang unik |

957| `plugins[0].source: Path contains ".."` | Jalur sumber berisi `..` | Gunakan jalur relatif terhadap root marketplace tanpa `..`. Lihat [Jalur relatif](#relative-paths) |

958| `YAML frontmatter failed to parse: ...` | YAML tidak valid dalam file skill, agent, atau command | Perbaiki sintaks YAML dalam blok frontmatter. Saat runtime file ini dimuat tanpa metadata. |

959| `Invalid JSON syntax: ...` (hooks.json) | `hooks/hooks.json` yang tidak terbentuk dengan baik | Perbaiki sintaks JSON. `hooks/hooks.json` yang tidak terbentuk dengan baik mencegah seluruh plugin dari dimuat. |

960 

961**Peringatan** (non-blocking):

962 

963* `Marketplace has no plugins defined`: tambahkan setidaknya satu plugin ke array `plugins`

964* `No marketplace description provided`: tambahkan `description` tingkat atas untuk membantu pengguna memahami marketplace Anda

965* `Plugin name "x" is not kebab-case`: nama plugin berisi huruf besar, spasi, atau karakter khusus. Ubah nama menjadi huruf kecil, digit, dan tanda hubung saja (misalnya, `my-plugin`). Claude Code menerima bentuk lain, tetapi sinkronisasi marketplace Claude.ai menolaknya.

966 

967### Kegagalan instalasi plugin

968 

969**Gejala**: Marketplace muncul tetapi instalasi plugin gagal

970 

971**Solusi**:

972 

973* Verifikasi URL sumber plugin dapat diakses

974* Periksa bahwa direktori plugin berisi file yang diperlukan

975* Untuk sumber GitHub, pastikan repositori publik atau Anda memiliki akses

976* Uji sumber plugin secara manual dengan mengklon/mengunduh

977 

978### Autentikasi repositori pribadi gagal

979 

980**Gejala**: Kesalahan autentikasi saat memasang plugin dari repositori pribadi

981 

982**Solusi**:

983 

984Untuk instalasi manual dan pembaruan:

985 

986* Verifikasi Anda diautentikasi dengan penyedia git Anda (misalnya, jalankan `gh auth status` untuk GitHub)

987* Periksa bahwa helper kredensial Anda dikonfigurasi dengan benar: `git config --global credential.helper`

988* Coba klon repositori secara manual untuk memverifikasi kredensial Anda berfungsi

989 

990Untuk pembaruan otomatis latar belakang:

991 

992* Atur token yang sesuai di lingkungan Anda: `echo $GITHUB_TOKEN`

993* Periksa bahwa token memiliki izin yang diperlukan (akses baca ke repositori)

994* Untuk GitHub, pastikan token memiliki scope `repo` untuk repositori pribadi

995* Untuk GitLab, pastikan token memiliki setidaknya scope `read_repository`

996* Verifikasi token belum kedaluwarsa

997 

998### Pembaruan marketplace gagal di lingkungan offline

999 

1000**Gejala**: Marketplace `git pull` gagal dan Claude Code menghapus cache yang ada, menyebabkan plugin menjadi tidak tersedia.

1001 

1002**Penyebab**: Secara default, ketika `git pull` gagal, Claude Code menghapus klon yang sudah usang dan mencoba mengklon ulang. Di lingkungan offline atau airgapped, mengklon ulang gagal dengan cara yang sama, meninggalkan direktori marketplace kosong.

1003 

1004**Solusi**: Atur `CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1` untuk menyimpan cache yang ada ketika pull gagal alih-alih menghapusnya:

1005 

1006```bash theme={null}

1007export CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1

1008```

1009 

1010Dengan variabel ini diatur, Claude Code mempertahankan klon marketplace yang sudah usang pada kegagalan `git pull` dan terus menggunakan status terakhir yang diketahui baik. Untuk deployment yang sepenuhnya offline di mana repositori tidak akan pernah dapat dijangkau, gunakan [`CLAUDE_CODE_PLUGIN_SEED_DIR`](#pre-populate-plugins-for-containers) untuk pra-isi direktori plugin saat waktu build sebagai gantinya.

1011 

1012### Operasi Git time out

1013 

1014**Gejala**: Instalasi plugin atau pembaruan marketplace gagal dengan kesalahan timeout seperti "Git clone timed out after 120s" atau "Git pull timed out after 120s".

1015 

1016**Penyebab**: Claude Code menggunakan timeout 120 detik untuk semua operasi git, termasuk mengklon repositori plugin dan menarik pembaruan marketplace. Repositori besar atau koneksi jaringan lambat mungkin melebihi batas ini.

1017 

1018**Solusi**: Tingkatkan timeout menggunakan variabel lingkungan `CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS`. Nilainya dalam milidetik:

1019 

1020```bash theme={null}

1021export CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS=300000 # 5 minutes

1022```

1023 

1024### Plugin dengan jalur relatif gagal di marketplace berbasis URL

1025 

1026**Gejala**: Menambahkan marketplace melalui URL (seperti `https://example.com/marketplace.json`), tetapi plugin dengan sumber jalur relatif seperti `"./plugins/my-plugin"` gagal dipasang dengan kesalahan "path not found".

1027 

1028**Penyebab**: Marketplace berbasis URL hanya mengunduh file `marketplace.json` itu sendiri. Mereka tidak mengunduh file plugin dari server. Jalur relatif dalam entri marketplace mereferensikan file di server jarak jauh yang tidak diunduh.

1029 

1030**Solusi**:

1031 

1032* **Gunakan sumber eksternal**: Ubah entri plugin untuk menggunakan sumber GitHub, npm, atau URL git alih-alih jalur relatif:

1033 ```json theme={null}

1034 { "name": "my-plugin", "source": { "source": "github", "repo": "owner/repo" } }

1035 ```

1036* **Gunakan marketplace berbasis Git**: Host marketplace Anda di repositori Git dan tambahkan dengan URL git. Marketplace berbasis Git mengklon seluruh repositori, membuat jalur relatif berfungsi dengan benar.

1037 

1038### File tidak ditemukan setelah instalasi

1039 

1040**Gejala**: Plugin dipasang tetapi referensi ke file gagal, terutama file di luar direktori plugin

1041 

1042**Penyebab**: Plugin disalin ke direktori cache daripada digunakan di tempat. Jalur yang mereferensikan file di luar direktori plugin (seperti `../shared-utils`) tidak akan berfungsi karena file tersebut tidak disalin.

1043 

1044**Solusi**: Lihat [Plugin caching and file resolution](/id/plugins-reference#plugin-caching-and-file-resolution) untuk solusi termasuk symlink dan restruktur direktori.

1045 

1046Untuk alat debugging tambahan dan masalah umum, lihat [Debugging and development tools](/id/plugins-reference#debugging-and-development-tools).

1047 

1048## Lihat juga

1049 

1050* [Temukan dan pasang plugin yang sudah dibuat](/id/discover-plugins) - Memasang plugin dari marketplace yang ada

1051* [Plugins](/id/plugins) - Membuat plugin Anda sendiri

1052* [Plugins reference](/id/plugins-reference) - Spesifikasi teknis lengkap dan skema

1053* [Plugin settings](/id/settings#plugin-settings) - Opsi konfigurasi plugin

1054* [strictKnownMarketplaces reference](/id/settings#strictknownmarketplaces) - Pembatasan marketplace yang dikelola

plugins.md +454 −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 plugins

6 

7> Buat plugins kustom untuk memperluas Claude Code dengan skills, agents, hooks, dan MCP servers.

8 

9Plugins memungkinkan Anda memperluas Claude Code dengan fungsionalitas kustom yang dapat dibagikan di seluruh proyek dan tim. Panduan ini mencakup pembuatan plugins Anda sendiri dengan skills, agents, hooks, dan MCP servers.

10 

11Mencari untuk memasang plugins yang sudah ada? Lihat [Temukan dan pasang plugins](/id/discover-plugins). Untuk spesifikasi teknis lengkap, lihat [Referensi plugins](/id/plugins-reference).

12 

13## Kapan menggunakan plugins vs konfigurasi standalone

14 

15Claude Code mendukung dua cara untuk menambahkan skills, agents, dan hooks kustom:

16 

17| Pendekatan | Nama skill | Terbaik untuk |

18| :---------------------------------------------------------- | :------------------- | :----------------------------------------------------------------------------------------------------------------- |

19| **Standalone** (direktori `.claude/`) | `/hello` | Alur kerja pribadi, kustomisasi khusus proyek, eksperimen cepat |

20| **Plugins** (direktori dengan `.claude-plugin/plugin.json`) | `/plugin-name:hello` | Berbagi dengan rekan kerja, distribusi ke komunitas, rilis dengan versi, dapat digunakan kembali di seluruh proyek |

21 

22**Gunakan konfigurasi standalone ketika**:

23 

24* Anda menyesuaikan Claude Code untuk satu proyek

25* Konfigurasi bersifat pribadi dan tidak perlu dibagikan

26* Anda bereksperimen dengan skills atau hooks sebelum mengemas mereka

27* Anda menginginkan nama skill pendek seperti `/hello` atau `/deploy`

28 

29**Gunakan plugins ketika**:

30 

31* Anda ingin berbagi fungsionalitas dengan tim atau komunitas Anda

32* Anda memerlukan skills/agents yang sama di seluruh beberapa proyek

33* Anda menginginkan kontrol versi dan pembaruan mudah untuk ekstensi Anda

34* Anda mendistribusikan melalui marketplace

35* Anda tidak keberatan dengan skills yang diberi namespace seperti `/my-plugin:hello` (namespace mencegah konflik antara plugins)

36 

37<Tip>

38 Mulai dengan konfigurasi standalone di `.claude/` untuk iterasi cepat, kemudian [konversi ke plugin](#convert-existing-configurations-to-plugins) ketika Anda siap untuk berbagi.

39</Tip>

40 

41## Quickstart

42 

43Quickstart ini memandu Anda melalui pembuatan plugin dengan skill kustom. Anda akan membuat manifest (file konfigurasi yang mendefinisikan plugin Anda), menambahkan skill, dan mengujinya secara lokal menggunakan flag `--plugin-dir`.

44 

45### Prasyarat

46 

47* Claude Code [diinstal dan diautentikasi](/id/quickstart#step-1-install-claude-code)

48 

49<Note>

50 Jika Anda tidak melihat perintah `/plugin`, perbarui Claude Code ke versi terbaru. Lihat [Troubleshooting](/id/troubleshooting) untuk instruksi upgrade.

51</Note>

52 

53### Buat plugin pertama Anda

54 

55<Steps>

56 <Step title="Buat direktori plugin">

57 Setiap plugin berada di direktorinya sendiri yang berisi manifest dan skills, agents, atau hooks Anda. Buat satu sekarang:

58 

59 ```bash theme={null}

60 mkdir my-first-plugin

61 ```

62 </Step>

63 

64 <Step title="Buat manifest plugin">

65 File manifest di `.claude-plugin/plugin.json` mendefinisikan identitas plugin Anda: nama, deskripsi, dan versinya. Claude Code menggunakan metadata ini untuk menampilkan plugin Anda di plugin manager.

66 

67 Buat direktori `.claude-plugin` di dalam folder plugin Anda:

68 

69 ```bash theme={null}

70 mkdir my-first-plugin/.claude-plugin

71 ```

72 

73 Kemudian buat `my-first-plugin/.claude-plugin/plugin.json` dengan konten ini:

74 

75 ```json my-first-plugin/.claude-plugin/plugin.json theme={null}

76 {

77 "name": "my-first-plugin",

78 "description": "A greeting plugin to learn the basics",

79 "version": "1.0.0",

80 "author": {

81 "name": "Your Name"

82 }

83 }

84 ```

85 

86 | Field | Tujuan |

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

88 | `name` | Pengidentifikasi unik dan namespace skill. Skills diawali dengan ini (misalnya, `/my-first-plugin:hello`). |

89 | `description` | Ditampilkan di plugin manager saat menjelajahi atau memasang plugins. |

90 | `version` | Opsional. Jika diatur, pengguna hanya menerima pembaruan ketika Anda menaikkan field ini. Jika dihilangkan dan plugin Anda didistribusikan melalui git, SHA commit digunakan dan setiap commit dihitung sebagai versi baru. Lihat [manajemen versi](/id/plugins-reference#version-management). |

91 | `author` | Opsional. Membantu untuk atribusi. |

92 

93 Untuk field tambahan seperti `homepage`, `repository`, dan `license`, lihat [skema manifest lengkap](/id/plugins-reference#plugin-manifest-schema).

94 </Step>

95 

96 <Step title="Tambahkan skill">

97 Skills berada di direktori `skills/`. Setiap skill adalah folder yang berisi file `SKILL.md`. Nama folder menjadi nama skill, diawali dengan namespace plugin (`hello/` dalam plugin bernama `my-first-plugin` membuat `/my-first-plugin:hello`).

98 

99 Buat direktori skill di folder plugin Anda:

100 

101 ```bash theme={null}

102 mkdir -p my-first-plugin/skills/hello

103 ```

104 

105 Kemudian buat `my-first-plugin/skills/hello/SKILL.md` dengan konten ini:

106 

107 ```markdown my-first-plugin/skills/hello/SKILL.md theme={null}

108 ---

109 description: Greet the user with a friendly message

110 disable-model-invocation: true

111 ---

112 

113 Greet the user warmly and ask how you can help them today.

114 ```

115 </Step>

116 

117 <Step title="Uji plugin Anda">

118 Jalankan Claude Code dengan flag `--plugin-dir` untuk memuat plugin Anda:

119 

120 ```bash theme={null}

121 claude --plugin-dir ./my-first-plugin

122 ```

123 

124 Setelah Claude Code dimulai, coba skill baru Anda:

125 

126 ```shell theme={null}

127 /my-first-plugin:hello

128 ```

129 

130 Anda akan melihat Claude merespons dengan salam. Jalankan `/help` untuk melihat skill Anda terdaftar di bawah namespace plugin.

131 

132 <Note>

133 **Mengapa namespace?** Plugin skills selalu diberi namespace (seperti `/my-first-plugin:hello`) untuk mencegah konflik ketika beberapa plugins memiliki skills dengan nama yang sama.

134 

135 Untuk mengubah awalan namespace, perbarui field `name` di `plugin.json`.

136 </Note>

137 </Step>

138 

139 <Step title="Tambahkan argumen skill">

140 Buat skill Anda dinamis dengan menerima input pengguna. Placeholder `$ARGUMENTS` menangkap teks apa pun yang disediakan pengguna setelah nama skill.

141 

142 Perbarui file `SKILL.md` Anda:

143 

144 ```markdown my-first-plugin/skills/hello/SKILL.md theme={null}

145 ---

146 description: Greet the user with a personalized message

147 ---

148 

149 # Hello Skill

150 

151 Greet the user named "$ARGUMENTS" warmly and ask how you can help them today. Make the greeting personal and encouraging.

152 ```

153 

154 Jalankan `/reload-plugins` untuk mengambil perubahan, kemudian coba skill dengan nama Anda:

155 

156 ```shell theme={null}

157 /my-first-plugin:hello Alex

158 ```

159 

160 Claude akan menyapa Anda dengan nama. Untuk lebih lanjut tentang meneruskan argumen ke skills, lihat [Skills](/id/skills#pass-arguments-to-skills).

161 </Step>

162</Steps>

163 

164Anda telah berhasil membuat dan menguji plugin dengan komponen kunci ini:

165 

166* **Plugin manifest** (`.claude-plugin/plugin.json`): menjelaskan metadata plugin Anda

167* **Direktori skills** (`skills/`): berisi skills kustom Anda

168* **Argumen skill** (`$ARGUMENTS`): menangkap input pengguna untuk perilaku dinamis

169 

170<Tip>

171 Flag `--plugin-dir` berguna untuk pengembangan dan pengujian. Ketika Anda siap untuk berbagi plugin Anda dengan orang lain, lihat [Buat dan distribusikan marketplace plugin](/id/plugin-marketplaces).

172</Tip>

173 

174## Ikhtisar struktur plugin

175 

176Anda telah membuat plugin dengan skill, tetapi plugins dapat mencakup banyak hal lagi: agents kustom, hooks, MCP servers, LSP servers, dan background monitors.

177 

178<Warning>

179 **Kesalahan umum**: Jangan letakkan `commands/`, `agents/`, `skills/`, atau `hooks/` di dalam direktori `.claude-plugin/`. Hanya `plugin.json` yang masuk ke dalam `.claude-plugin/`. Semua direktori lainnya harus berada di tingkat root plugin.

180</Warning>

181 

182| Direktori | Lokasi | Tujuan |

183| :---------------- | :---------- | :-------------------------------------------------------------------------------- |

184| `.claude-plugin/` | Root plugin | Berisi manifest `plugin.json` (opsional jika komponen menggunakan lokasi default) |

185| `skills/` | Root plugin | Skills sebagai direktori `<name>/SKILL.md` |

186| `commands/` | Root plugin | Skills sebagai file Markdown datar. Gunakan `skills/` untuk plugins baru |

187| `agents/` | Root plugin | Definisi agent kustom |

188| `hooks/` | Root plugin | Event handlers di `hooks.json` |

189| `.mcp.json` | Root plugin | Konfigurasi MCP server |

190| `.lsp.json` | Root plugin | Konfigurasi LSP server untuk code intelligence |

191| `monitors/` | Root plugin | Konfigurasi background monitor di `monitors.json` |

192| `bin/` | Root plugin | Executable yang ditambahkan ke `PATH` tool Bash saat plugin diaktifkan |

193| `settings.json` | Root plugin | [Settings](/id/settings) default yang diterapkan ketika plugin diaktifkan |

194 

195<Note>

196 **Langkah berikutnya**: Siap menambahkan lebih banyak fitur? Lompat ke [Kembangkan plugins yang lebih kompleks](#develop-more-complex-plugins) untuk menambahkan agents, hooks, MCP servers, dan LSP servers. Untuk spesifikasi teknis lengkap dari semua komponen plugin, lihat [Referensi plugins](/id/plugins-reference).

197</Note>

198 

199## Kembangkan plugins yang lebih kompleks

200 

201Setelah Anda nyaman dengan plugins dasar, Anda dapat membuat ekstensi yang lebih canggih.

202 

203### Tambahkan Skills ke plugin Anda

204 

205Plugins dapat mencakup [Agent Skills](/id/skills) untuk memperluas kemampuan Claude. Skills diinvokasi oleh model: Claude secara otomatis menggunakannya berdasarkan konteks tugas.

206 

207Tambahkan direktori `skills/` di root plugin Anda dengan folder Skill yang berisi file `SKILL.md`:

208 

209```text theme={null}

210my-plugin/

211├── .claude-plugin/

212│ └── plugin.json

213└── skills/

214 └── code-review/

215 └── SKILL.md

216```

217 

218Setiap `SKILL.md` berisi frontmatter YAML dan instruksi. Sertakan `description` sehingga Claude tahu kapan menggunakan skill:

219 

220```yaml theme={null}

221---

222description: Reviews code for best practices and potential issues. Use when reviewing code, checking PRs, or analyzing code quality.

223---

224 

225When reviewing code, check for:

2261. Code organization and structure

2272. Error handling

2283. Security concerns

2294. Test coverage

230```

231 

232Setelah memasang plugin, jalankan `/reload-plugins` untuk memuat Skills. Untuk panduan authoring Skill lengkap termasuk progressive disclosure dan pembatasan tool, lihat [Agent Skills](/id/skills).

233 

234### Tambahkan LSP servers ke plugin Anda

235 

236<Tip>

237 Untuk bahasa umum seperti TypeScript, Python, dan Rust, pasang plugin LSP yang sudah dibangun sebelumnya dari marketplace resmi. Buat plugin LSP kustom hanya ketika Anda memerlukan dukungan untuk bahasa yang belum tercakup.

238</Tip>

239 

240Plugin LSP (Language Server Protocol) memberikan Claude code intelligence real-time. Jika Anda perlu mendukung bahasa yang tidak memiliki plugin LSP resmi, Anda dapat membuat plugin Anda sendiri dengan menambahkan file `.lsp.json` ke plugin Anda:

241 

242```json .lsp.json theme={null}

243{

244 "go": {

245 "command": "gopls",

246 "args": ["serve"],

247 "extensionToLanguage": {

248 ".go": "go"

249 }

250 }

251}

252```

253 

254Pengguna yang memasang plugin Anda harus memiliki binary language server yang diinstal di mesin mereka.

255 

256Untuk opsi konfigurasi LSP lengkap, lihat [LSP servers](/id/plugins-reference#lsp-servers).

257 

258### Tambahkan background monitors ke plugin Anda

259 

260Background monitors memungkinkan plugin Anda untuk menonton logs, file, atau status eksternal di latar belakang dan memberi tahu Claude saat event tiba. Claude Code memulai setiap monitor secara otomatis ketika plugin aktif, jadi Anda tidak perlu menginstruksikan Claude untuk memulai watch.

261 

262Tambahkan file `monitors/monitors.json` di root plugin dengan array entri monitor:

263 

264```json monitors/monitors.json theme={null}

265[

266 {

267 "name": "error-log",

268 "command": "tail -F ./logs/error.log",

269 "description": "Application error log"

270 }

271]

272```

273 

274Setiap baris stdout dari `command` dikirimkan ke Claude sebagai notifikasi selama sesi. Untuk skema lengkap, termasuk trigger `when` dan substitusi variabel, lihat [Monitors](/id/plugins-reference#monitors).

275 

276### Kirim default settings dengan plugin Anda

277 

278Plugins dapat menyertakan file `settings.json` di root plugin untuk menerapkan konfigurasi default ketika plugin diaktifkan. Saat ini, hanya key `agent` dan `subagentStatusLine` yang didukung.

279 

280Mengatur `agent` mengaktifkan salah satu [custom agents](/id/sub-agents) plugin sebagai thread utama, menerapkan system prompt, pembatasan tool, dan modelnya. Ini memungkinkan plugin untuk mengubah perilaku Claude Code secara default ketika diaktifkan.

281 

282```json settings.json theme={null}

283{

284 "agent": "security-reviewer"

285}

286```

287 

288Contoh ini mengaktifkan agent `security-reviewer` yang didefinisikan di direktori `agents/` plugin. Settings dari `settings.json` mengambil prioritas atas `settings` yang dideklarasikan di `plugin.json`. Key yang tidak dikenal diabaikan secara diam-diam.

289 

290### Organisir plugins kompleks

291 

292Untuk plugins dengan banyak komponen, organisir struktur direktori Anda berdasarkan fungsionalitas. Untuk layout direktori lengkap dan pola organisasi, lihat [Struktur direktori plugin](/id/plugins-reference#plugin-directory-structure).

293 

294### Uji plugins Anda secara lokal

295 

296Gunakan flag `--plugin-dir` untuk menguji plugins selama pengembangan. Ini memuat plugin Anda secara langsung tanpa memerlukan instalasi.

297 

298```bash theme={null}

299claude --plugin-dir ./my-plugin

300```

301 

302Ketika plugin `--plugin-dir` memiliki nama yang sama dengan plugin marketplace yang diinstal, salinan lokal mengambil prioritas untuk sesi itu. Ini memungkinkan Anda menguji perubahan pada plugin yang sudah Anda instal tanpa mencopot pemasangannya terlebih dahulu. Plugin marketplace yang dipaksa diaktifkan oleh managed settings adalah satu-satunya pengecualian dan tidak dapat ditimpa.

303 

304Saat Anda membuat perubahan pada plugin Anda, jalankan `/reload-plugins` untuk mengambil pembaruan tanpa memulai ulang. Ini memuat ulang plugins, skills, agents, hooks, plugin MCP servers, dan plugin LSP servers. Uji komponen plugin Anda:

305 

306* Coba skills Anda dengan `/plugin-name:skill-name`

307* Periksa bahwa agents muncul di `/agents`

308* Verifikasi hooks bekerja seperti yang diharapkan

309 

310<Tip>

311 Anda dapat memuat beberapa plugins sekaligus dengan menentukan flag berkali-kali:

312 

313 ```bash theme={null}

314 claude --plugin-dir ./plugin-one --plugin-dir ./plugin-two

315 ```

316</Tip>

317 

318### Debug masalah plugin

319 

320Jika plugin Anda tidak bekerja seperti yang diharapkan:

321 

3221. **Periksa struktur**: Pastikan direktori Anda berada di root plugin, bukan di dalam `.claude-plugin/`

3232. **Uji komponen secara individual**: Periksa setiap skill, agent, dan hook secara terpisah

3243. **Gunakan alat validasi dan debugging**: Lihat [Alat debugging dan pengembangan](/id/plugins-reference#debugging-and-development-tools) untuk perintah CLI dan teknik troubleshooting

325 

326### Bagikan plugins Anda

327 

328Ketika plugin Anda siap untuk dibagikan:

329 

3301. **Tambahkan dokumentasi**: Sertakan `README.md` dengan instruksi instalasi dan penggunaan

3312. **Pilih strategi versioning**: Tentukan apakah akan menetapkan `version` eksplisit atau mengandalkan SHA commit git. Lihat [manajemen versi](/id/plugins-reference#version-management)

3323. **Buat atau gunakan marketplace**: Distribusikan melalui [plugin marketplaces](/id/plugin-marketplaces) untuk instalasi

3334. **Uji dengan orang lain**: Minta anggota tim menguji plugin sebelum distribusi yang lebih luas

334 

335Setelah plugin Anda berada di marketplace, orang lain dapat memasangnya menggunakan instruksi di [Temukan dan pasang plugins](/id/discover-plugins). Untuk menjaga plugin tetap internal bagi tim Anda, hosting marketplace di [private repository](/id/plugin-marketplaces#private-repositories).

336 

337### Kirimkan plugin Anda ke marketplace resmi

338 

339Untuk mengirimkan plugin ke marketplace Anthropic resmi, gunakan salah satu formulir pengajuan in-app:

340 

341* **Claude.ai**: [claude.ai/settings/plugins/submit](https://claude.ai/settings/plugins/submit)

342* **Console**: [platform.claude.com/plugins/submit](https://platform.claude.com/plugins/submit)

343 

344Setelah plugin Anda terdaftar, Anda dapat memiliki CLI Anda sendiri yang meminta pengguna Claude Code untuk memasangnya. Lihat [Rekomendasikan plugin Anda dari CLI Anda](/id/plugin-hints).

345 

346<Note>

347 Untuk spesifikasi teknis lengkap, teknik debugging, dan strategi distribusi, lihat [Referensi plugins](/id/plugins-reference).

348</Note>

349 

350## Konversi konfigurasi yang ada ke plugins

351 

352Jika Anda sudah memiliki skills atau hooks di direktori `.claude/` Anda, Anda dapat mengonversinya menjadi plugin untuk berbagi dan distribusi yang lebih mudah.

353 

354### Langkah migrasi

355 

356<Steps>

357 <Step title="Buat struktur plugin">

358 Buat direktori plugin baru:

359 

360 ```bash theme={null}

361 mkdir -p my-plugin/.claude-plugin

362 ```

363 

364 Buat file manifest di `my-plugin/.claude-plugin/plugin.json`:

365 

366 ```json my-plugin/.claude-plugin/plugin.json theme={null}

367 {

368 "name": "my-plugin",

369 "description": "Migrated from standalone configuration",

370 "version": "1.0.0"

371 }

372 ```

373 </Step>

374 

375 <Step title="Salin file yang ada">

376 Salin konfigurasi yang ada ke direktori plugin:

377 

378 ```bash theme={null}

379 # Copy commands

380 cp -r .claude/commands my-plugin/

381 

382 # Copy agents (if any)

383 cp -r .claude/agents my-plugin/

384 

385 # Copy skills (if any)

386 cp -r .claude/skills my-plugin/

387 ```

388 </Step>

389 

390 <Step title="Migrasi hooks">

391 Jika Anda memiliki hooks di settings Anda, buat direktori hooks:

392 

393 ```bash theme={null}

394 mkdir my-plugin/hooks

395 ```

396 

397 Buat `my-plugin/hooks/hooks.json` dengan konfigurasi hooks Anda. Salin objek `hooks` dari `.claude/settings.json` atau `settings.local.json` Anda, karena formatnya sama. Perintah menerima input hook sebagai JSON di stdin, jadi gunakan `jq` untuk mengekstrak path file:

398 

399 ```json my-plugin/hooks/hooks.json theme={null}

400 {

401 "hooks": {

402 "PostToolUse": [

403 {

404 "matcher": "Write|Edit",

405 "hooks": [{ "type": "command", "command": "jq -r '.tool_input.file_path' | xargs npm run lint:fix" }]

406 }

407 ]

408 }

409 }

410 ```

411 </Step>

412 

413 <Step title="Uji plugin yang dimigrasikan">

414 Muat plugin Anda untuk memverifikasi semuanya berfungsi:

415 

416 ```bash theme={null}

417 claude --plugin-dir ./my-plugin

418 ```

419 

420 Uji setiap komponen: jalankan commands Anda, periksa agents muncul di `/agents`, dan verifikasi hooks dipicu dengan benar.

421 </Step>

422</Steps>

423 

424### Apa yang berubah saat migrasi

425 

426| Standalone (`.claude/`) | Plugin |

427| :----------------------------------------- | :----------------------------------- |

428| Hanya tersedia di satu proyek | Dapat dibagikan melalui marketplaces |

429| File di `.claude/commands/` | File di `plugin-name/commands/` |

430| Hooks di `settings.json` | Hooks di `hooks/hooks.json` |

431| Harus menyalin secara manual untuk berbagi | Pasang dengan `/plugin install` |

432 

433<Note>

434 Setelah migrasi, Anda dapat menghapus file asli dari `.claude/` untuk menghindari duplikat. Versi plugin akan mengambil prioritas saat dimuat.

435</Note>

436 

437## Langkah berikutnya

438 

439Sekarang bahwa Anda memahami sistem plugin Claude Code, berikut adalah jalur yang disarankan untuk tujuan yang berbeda:

440 

441### Untuk pengguna plugin

442 

443* [Temukan dan pasang plugins](/id/discover-plugins): jelajahi marketplaces dan pasang plugins

444* [Konfigurasi marketplaces tim](/id/discover-plugins#configure-team-marketplaces): atur plugins tingkat repository untuk tim Anda

445 

446### Untuk pengembang plugin

447 

448* [Buat dan distribusikan marketplace](/id/plugin-marketplaces): paket dan bagikan plugins Anda

449* [Referensi plugins](/id/plugins-reference): spesifikasi teknis lengkap

450* Selami lebih dalam komponen plugin spesifik:

451 * [Skills](/id/skills): detail pengembangan skill

452 * [Subagents](/id/sub-agents): konfigurasi dan kemampuan agent

453 * [Hooks](/id/hooks): penanganan event dan otomasi

454 * [MCP](/id/mcp): integrasi tool eksternal

plugins-reference.md +1011 −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# Referensi Plugins

6 

7> Referensi teknis lengkap untuk sistem plugin Claude Code, termasuk skema, perintah CLI, dan spesifikasi komponen.

8 

9<Tip>

10 Mencari cara memasang plugins? Lihat [Temukan dan pasang plugins](/id/discover-plugins). Untuk membuat plugins, lihat [Plugins](/id/plugins). Untuk mendistribusikan plugins, lihat [Plugin marketplaces](/id/plugin-marketplaces).

11</Tip>

12 

13Referensi ini menyediakan spesifikasi teknis lengkap untuk sistem plugin Claude Code, termasuk skema komponen, perintah CLI, dan alat pengembangan.

14 

15Sebuah **plugin** adalah direktori yang mandiri berisi komponen yang memperluas Claude Code dengan fungsionalitas khusus. Komponen plugin mencakup skills, agents, hooks, MCP servers, LSP servers, dan monitors.

16 

17## Referensi komponen plugin

18 

19### Skills

20 

21Plugins menambahkan skills ke Claude Code, membuat pintasan `/name` yang dapat Anda atau Claude panggil.

22 

23**Lokasi**: Direktori `skills/` atau `commands/` di root plugin

24 

25**Format file**: Skills adalah direktori dengan `SKILL.md`; commands adalah file markdown sederhana

26 

27**Struktur skill**:

28 

29```text theme={null}

30skills/

31├── pdf-processor/

32│ ├── SKILL.md

33│ ├── reference.md (opsional)

34│ └── scripts/ (opsional)

35└── code-reviewer/

36 └── SKILL.md

37```

38 

39**Perilaku integrasi**:

40 

41* Skills dan commands secara otomatis ditemukan saat plugin dipasang

42* Claude dapat memanggilnya secara otomatis berdasarkan konteks tugas

43* Skills dapat menyertakan file pendukung di samping SKILL.md

44 

45Untuk detail lengkap, lihat [Skills](/id/skills).

46 

47### Agents

48 

49Plugins dapat menyediakan subagents khusus untuk tugas-tugas tertentu yang dapat Claude panggil secara otomatis jika sesuai.

50 

51**Lokasi**: Direktori `agents/` di root plugin

52 

53**Format file**: File markdown yang menjelaskan kemampuan agent

54 

55**Struktur agent**:

56 

57```markdown theme={null}

58---

59name: agent-name

60description: Apa yang agent ini spesialisasikan dan kapan Claude harus memanggilnya

61model: sonnet

62effort: medium

63maxTurns: 20

64disallowedTools: Write, Edit

65---

66 

67Prompt sistem terperinci untuk agent yang menjelaskan peran, keahlian, dan perilakunya.

68```

69 

70Plugin agents mendukung field frontmatter `name`, `description`, `model`, `effort`, `maxTurns`, `tools`, `disallowedTools`, `skills`, `memory`, `background`, dan `isolation`. Satu-satunya nilai `isolation` yang valid adalah `"worktree"`. Untuk alasan keamanan, `hooks`, `mcpServers`, dan `permissionMode` tidak didukung untuk agents yang dikirim plugin.

71 

72**Titik integrasi**:

73 

74* Agents muncul di antarmuka `/agents`

75* Claude dapat memanggil agents secara otomatis berdasarkan konteks tugas

76* Agents dapat dipanggil secara manual oleh pengguna

77* Plugin agents bekerja bersama agents Claude bawaan

78 

79Untuk detail lengkap, lihat [Subagents](/id/sub-agents).

80 

81### Hooks

82 

83Plugins dapat menyediakan event handlers yang merespons peristiwa Claude Code secara otomatis.

84 

85**Lokasi**: `hooks/hooks.json` di root plugin, atau inline di plugin.json

86 

87**Format**: Konfigurasi JSON dengan event matchers dan actions

88 

89**Konfigurasi hook**:

90 

91```json theme={null}

92{

93 "hooks": {

94 "PostToolUse": [

95 {

96 "matcher": "Write|Edit",

97 "hooks": [

98 {

99 "type": "command",

100 "command": "${CLAUDE_PLUGIN_ROOT}/scripts/format-code.sh"

101 }

102 ]

103 }

104 ]

105 }

106}

107```

108 

109Plugin hooks merespons peristiwa lifecycle yang sama seperti [hooks yang ditentukan pengguna](/id/hooks):

110 

111| Event | When it fires |

112| :-------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------- |

113| `SessionStart` | When a session begins or resumes |

114| `Setup` | When you start Claude Code with `--init-only`, or with `--init` or `--maintenance` in `-p` mode. For one-time preparation in CI or scripts |

115| `UserPromptSubmit` | When you submit a prompt, before Claude processes it |

116| `UserPromptExpansion` | When a user-typed command expands into a prompt, before it reaches Claude. Can block the expansion |

117| `PreToolUse` | Before a tool call executes. Can block it |

118| `PermissionRequest` | When a permission dialog appears |

119| `PermissionDenied` | When a tool call is denied by the auto mode classifier. Return `{retry: true}` to tell the model it may retry the denied tool call |

120| `PostToolUse` | After a tool call succeeds |

121| `PostToolUseFailure` | After a tool call fails |

122| `PostToolBatch` | After a full batch of parallel tool calls resolves, before the next model call |

123| `Notification` | When Claude Code sends a notification |

124| `SubagentStart` | When a subagent is spawned |

125| `SubagentStop` | When a subagent finishes |

126| `TaskCreated` | When a task is being created via `TaskCreate` |

127| `TaskCompleted` | When a task is being marked as completed |

128| `Stop` | When Claude finishes responding |

129| `StopFailure` | When the turn ends due to an API error. Output and exit code are ignored |

130| `TeammateIdle` | When an [agent team](/en/agent-teams) teammate is about to go idle |

131| `InstructionsLoaded` | When a CLAUDE.md or `.claude/rules/*.md` file is loaded into context. Fires at session start and when files are lazily loaded during a session |

132| `ConfigChange` | When a configuration file changes during a session |

133| `CwdChanged` | When the working directory changes, for example when Claude executes a `cd` command. Useful for reactive environment management with tools like direnv |

134| `FileChanged` | When a watched file changes on disk. The `matcher` field specifies which filenames to watch |

135| `WorktreeCreate` | When a worktree is being created via `--worktree` or `isolation: "worktree"`. Replaces default git behavior |

136| `WorktreeRemove` | When a worktree is being removed, either at session exit or when a subagent finishes |

137| `PreCompact` | Before context compaction |

138| `PostCompact` | After context compaction completes |

139| `Elicitation` | When an MCP server requests user input during a tool call |

140| `ElicitationResult` | After a user responds to an MCP elicitation, before the response is sent back to the server |

141| `SessionEnd` | When a session terminates |

142 

143**Tipe hook**:

144 

145* `command`: jalankan perintah shell atau scripts

146* `http`: kirim JSON event sebagai POST request ke URL

147* `mcp_tool`: panggil tool pada [MCP server](/id/mcp) yang dikonfigurasi

148* `prompt`: evaluasi prompt dengan LLM (menggunakan placeholder `$ARGUMENTS` untuk konteks)

149* `agent`: jalankan verifier agentic dengan tools untuk tugas verifikasi kompleks

150 

151### MCP servers

152 

153Plugins dapat menggabungkan Model Context Protocol (MCP) servers untuk menghubungkan Claude Code dengan alat dan layanan eksternal.

154 

155**Lokasi**: `.mcp.json` di root plugin, atau inline di plugin.json

156 

157**Format**: Konfigurasi MCP server standar

158 

159**Konfigurasi MCP server**:

160 

161```json theme={null}

162{

163 "mcpServers": {

164 "plugin-database": {

165 "command": "${CLAUDE_PLUGIN_ROOT}/servers/db-server",

166 "args": ["--config", "${CLAUDE_PLUGIN_ROOT}/config.json"],

167 "env": {

168 "DB_PATH": "${CLAUDE_PLUGIN_ROOT}/data"

169 }

170 },

171 "plugin-api-client": {

172 "command": "npx",

173 "args": ["@company/mcp-server", "--plugin-mode"],

174 "cwd": "${CLAUDE_PLUGIN_ROOT}"

175 }

176 }

177}

178```

179 

180**Perilaku integrasi**:

181 

182* Plugin MCP servers dimulai secara otomatis saat plugin diaktifkan

183* Servers muncul sebagai alat MCP standar di toolkit Claude

184* Kemampuan server terintegrasi dengan mulus dengan alat Claude yang ada

185* Plugin servers dapat dikonfigurasi secara independen dari MCP servers pengguna

186 

187### LSP servers

188 

189<Tip>

190 Mencari cara menggunakan LSP plugins? Pasang dari marketplace resmi: cari "lsp" di tab Discover `/plugin`. Bagian ini mendokumentasikan cara membuat LSP plugins untuk bahasa yang tidak tercakup oleh marketplace resmi.

191</Tip>

192 

193Plugins dapat menyediakan server [Language Server Protocol](https://microsoft.github.io/language-server-protocol/) (LSP) untuk memberikan Claude intelijen kode real-time saat bekerja pada codebase Anda.

194 

195Integrasi LSP menyediakan:

196 

197* **Diagnostik instan**: Claude melihat kesalahan dan peringatan segera setelah setiap edit

198* **Navigasi kode**: buka definisi, temukan referensi, dan informasi hover

199* **Kesadaran bahasa**: informasi tipe dan dokumentasi untuk simbol kode

200 

201**Lokasi**: `.lsp.json` di root plugin, atau inline di `plugin.json`

202 

203**Format**: Konfigurasi JSON yang memetakan nama language server ke konfigurasinya

204 

205**Format file `.lsp.json`**:

206 

207```json theme={null}

208{

209 "go": {

210 "command": "gopls",

211 "args": ["serve"],

212 "extensionToLanguage": {

213 ".go": "go"

214 }

215 }

216}

217```

218 

219**Inline di `plugin.json`**:

220 

221```json theme={null}

222{

223 "name": "my-plugin",

224 "lspServers": {

225 "go": {

226 "command": "gopls",

227 "args": ["serve"],

228 "extensionToLanguage": {

229 ".go": "go"

230 }

231 }

232 }

233}

234```

235 

236**Field yang diperlukan:**

237 

238| Field | Deskripsi |

239| :-------------------- | :------------------------------------------------- |

240| `command` | Biner LSP yang akan dijalankan (harus ada di PATH) |

241| `extensionToLanguage` | Memetakan ekstensi file ke pengenal bahasa |

242 

243**Field opsional:**

244 

245| Field | Deskripsi |

246| :---------------------- | :-------------------------------------------------------------------- |

247| `args` | Argumen baris perintah untuk LSP server |

248| `transport` | Transport komunikasi: `stdio` (default) atau `socket` |

249| `env` | Variabel lingkungan yang diatur saat memulai server |

250| `initializationOptions` | Opsi yang diteruskan ke server selama inisialisasi |

251| `settings` | Pengaturan yang diteruskan melalui `workspace/didChangeConfiguration` |

252| `workspaceFolder` | Jalur folder workspace untuk server |

253| `startupTimeout` | Waktu maksimal untuk menunggu startup server (milidetik) |

254| `shutdownTimeout` | Waktu maksimal untuk menunggu shutdown yang elegan (milidetik) |

255| `restartOnCrash` | Apakah secara otomatis memulai ulang server jika crash |

256| `maxRestarts` | Jumlah maksimal upaya restart sebelum menyerah |

257 

258<Warning>

259 **Anda harus memasang biner language server secara terpisah.** LSP plugins mengonfigurasi cara Claude Code terhubung ke language server, tetapi mereka tidak menyertakan server itu sendiri. Jika Anda melihat `Executable not found in $PATH` di tab Errors `/plugin`, pasang biner yang diperlukan untuk bahasa Anda.

260</Warning>

261 

262**LSP plugins yang tersedia:**

263 

264| Plugin | Language server | Perintah instalasi |

265| :--------------- | :------------------------- | :---------------------------------------------------------------------------------------- |

266| `pyright-lsp` | Pyright (Python) | `pip install pyright` atau `npm install -g pyright` |

267| `typescript-lsp` | TypeScript Language Server | `npm install -g typescript-language-server typescript` |

268| `rust-lsp` | rust-analyzer | [Lihat instalasi rust-analyzer](https://rust-analyzer.github.io/manual.html#installation) |

269 

270Pasang language server terlebih dahulu, kemudian pasang plugin dari marketplace.

271 

272### Monitors

273 

274Plugins dapat mendeklarasikan monitors latar belakang yang Claude Code mulai secara otomatis saat plugin aktif. Setiap monitor menjalankan perintah shell untuk seumur hidup sesi dan mengirimkan setiap baris stdout ke Claude sebagai notifikasi, sehingga Claude dapat bereaksi terhadap entri log, perubahan status, atau peristiwa yang dipolling tanpa diminta untuk memulai watch itu sendiri.

275 

276Plugin monitors menggunakan mekanisme yang sama seperti [Monitor tool](/id/tools-reference#monitor-tool) dan berbagi batasan ketersediaannya. Mereka hanya berjalan dalam sesi CLI interaktif, berjalan tanpa sandbox pada tingkat kepercayaan yang sama seperti [hooks](#hooks), dan dilewati pada host di mana Monitor tool tidak tersedia.

277 

278<Note>

279 Plugin monitors memerlukan Claude Code v2.1.105 atau lebih baru.

280</Note>

281 

282**Lokasi**: `monitors/monitors.json` di root plugin, atau inline di `plugin.json`

283 

284**Format**: Array JSON dari entri monitor

285 

286`monitors/monitors.json` berikut memantau endpoint status deployment dan log error lokal:

287 

288```json theme={null}

289[

290 {

291 "name": "deploy-status",

292 "command": "${CLAUDE_PLUGIN_ROOT}/scripts/poll-deploy.sh ${user_config.api_endpoint}",

293 "description": "Deployment status changes"

294 },

295 {

296 "name": "error-log",

297 "command": "tail -F ./logs/error.log",

298 "description": "Application error log",

299 "when": "on-skill-invoke:debug"

300 }

301]

302```

303 

304Untuk mendeklarasikan monitors inline, atur kunci `monitors` di `plugin.json` ke array yang sama. Untuk memuat dari jalur non-default, atur `monitors` ke string jalur relatif seperti `"./config/monitors.json"`.

305 

306**Field yang diperlukan:**

307 

308| Field | Deskripsi |

309| :------------ | :------------------------------------------------------------------------------------------------------------ |

310| `name` | Pengenal unik dalam plugin. Mencegah proses duplikat saat plugin dimuat ulang atau skill dipanggil lagi |

311| `command` | Perintah shell yang dijalankan sebagai proses latar belakang persisten dalam direktori kerja sesi |

312| `description` | Ringkasan singkat tentang apa yang sedang dipantau. Ditampilkan di panel tugas dan dalam ringkasan notifikasi |

313 

314**Field opsional:**

315 

316| Field | Deskripsi |

317| :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

318| `when` | Mengontrol kapan monitor dimulai. `"always"` memulainya saat startup sesi dan pada reload plugin, dan merupakan default. `"on-skill-invoke:<skill-name>"` memulainya pertama kali skill bernama dalam plugin ini dikirim |

319 

320Nilai `command` mendukung [substitusi variabel](#environment-variables) yang sama seperti konfigurasi MCP dan LSP server: `${CLAUDE_PLUGIN_ROOT}`, `${CLAUDE_PLUGIN_DATA}`, `${user_config.*}`, dan `${ENV_VAR}` apa pun dari lingkungan. Awali perintah dengan `cd "${CLAUDE_PLUGIN_ROOT}" && ` jika script perlu berjalan dari direktori plugin itu sendiri.

321 

322Menonaktifkan plugin di tengah sesi tidak menghentikan monitors yang sudah berjalan. Mereka berhenti saat sesi berakhir.

323 

324### Themes

325 

326Plugins dapat mengirimkan color themes yang muncul di `/theme` bersama preset bawaan dan themes lokal pengguna. Sebuah theme adalah file JSON di `themes/` dengan preset `base` dan peta `overrides` yang sparse dari color tokens.

327 

328```json theme={null}

329{

330 "name": "Dracula",

331 "base": "dark",

332 "overrides": {

333 "claude": "#bd93f9",

334 "error": "#ff5555",

335 "success": "#50fa7b"

336 }

337}

338```

339 

340Memilih plugin theme menyimpan `custom:<plugin-name>:<slug>` di config pengguna. Plugin themes bersifat read-only; menekan `Ctrl+E` pada salah satu di `/theme` menyalinnya ke `~/.claude/themes/` sehingga pengguna dapat mengedit salinannya.

341 

342***

343 

344## Cakupan instalasi plugin

345 

346Saat Anda memasang plugin, Anda memilih **cakupan** yang menentukan di mana plugin tersedia dan siapa lagi yang dapat menggunakannya:

347 

348| Cakupan | File pengaturan | Kasus penggunaan |

349| :-------- | :-------------------------------------------------- | :------------------------------------------------ |

350| `user` | `~/.claude/settings.json` | Plugin pribadi tersedia di semua proyek (default) |

351| `project` | `.claude/settings.json` | Plugin tim yang dibagikan melalui version control |

352| `local` | `.claude/settings.local.json` | Plugin khusus proyek, gitignored |

353| `managed` | [Pengaturan terkelola](/id/settings#settings-files) | Plugin terkelola (read-only, hanya update) |

354 

355Plugins menggunakan sistem cakupan yang sama dengan konfigurasi Claude Code lainnya. Untuk instruksi instalasi dan flag cakupan, lihat [Pasang plugins](/id/discover-plugins#install-plugins). Untuk penjelasan lengkap tentang cakupan, lihat [Configuration scopes](/id/settings#configuration-scopes).

356 

357***

358 

359## Skema manifest plugin

360 

361File `.claude-plugin/plugin.json` mendefinisikan metadata dan konfigurasi plugin Anda. Bagian ini mendokumentasikan semua field dan opsi yang didukung.

362 

363Manifest bersifat opsional. Jika dihilangkan, Claude Code secara otomatis menemukan komponen di [lokasi default](#file-locations-reference) dan menurunkan nama plugin dari nama direktori. Gunakan manifest saat Anda perlu memberikan metadata atau jalur komponen khusus.

364 

365### Skema lengkap

366 

367```json theme={null}

368{

369 "name": "plugin-name",

370 "version": "1.2.0",

371 "description": "Brief plugin description",

372 "author": {

373 "name": "Author Name",

374 "email": "author@example.com",

375 "url": "https://github.com/author"

376 },

377 "homepage": "https://docs.example.com/plugin",

378 "repository": "https://github.com/author/plugin",

379 "license": "MIT",

380 "keywords": ["keyword1", "keyword2"],

381 "skills": "./custom/skills/",

382 "commands": ["./custom/commands/special.md"],

383 "agents": ["./custom/agents/reviewer.md"],

384 "hooks": "./config/hooks.json",

385 "mcpServers": "./mcp-config.json",

386 "outputStyles": "./styles/",

387 "themes": "./themes/",

388 "lspServers": "./.lsp.json",

389 "monitors": "./monitors.json",

390 "dependencies": [

391 "helper-lib",

392 { "name": "secrets-vault", "version": "~2.1.0" }

393 ]

394}

395```

396 

397### Field yang diperlukan

398 

399Jika Anda menyertakan manifest, `name` adalah satu-satunya field yang diperlukan.

400 

401| Field | Tipe | Deskripsi | Contoh |

402| :----- | :----- | :-------------------------------------- | :------------------- |

403| `name` | string | Pengenal unik (kebab-case, tanpa spasi) | `"deployment-tools"` |

404 

405Nama ini digunakan untuk namespacing komponen. Misalnya, di UI, agent `agent-creator` untuk plugin dengan nama `plugin-dev` akan muncul sebagai `plugin-dev:agent-creator`.

406 

407### Field metadata

408 

409| Field | Tipe | Deskripsi | Contoh |

410| :------------ | :----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :---------------------------------------------------------------- |

411| `$schema` | string | URL JSON Schema untuk autocomplete dan validasi editor. Claude Code mengabaikan field ini saat waktu load. | `"https://json.schemastore.org/claude-code-plugin-manifest.json"` |

412| `version` | string | Opsional. Versi semantik. Mengatur ini mengikat plugin ke string versi tersebut, sehingga pengguna hanya menerima update saat Anda menaikkannya. Jika dihilangkan, Claude Code kembali ke SHA commit git, sehingga setiap commit diperlakukan sebagai versi baru. Jika juga diatur di entri marketplace, `plugin.json` menang. Lihat [Version management](#version-management). | `"2.1.0"` |

413| `description` | string | Penjelasan singkat tentang tujuan plugin | `"Deployment automation tools"` |

414| `author` | object | Informasi penulis | `{"name": "Dev Team", "email": "dev@company.com"}` |

415| `homepage` | string | URL dokumentasi | `"https://docs.example.com"` |

416| `repository` | string | URL kode sumber | `"https://github.com/user/plugin"` |

417| `license` | string | Pengenal lisensi | `"MIT"`, `"Apache-2.0"` |

418| `keywords` | array | Tag penemuan | `["deployment", "ci-cd"]` |

419 

420### Field jalur komponen

421 

422| Field | Tipe | Deskripsi | Contoh |

423| :------------- | :-------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------- |

424| `skills` | string\|array | Direktori skill khusus yang berisi `<name>/SKILL.md` (menggantikan default `skills/`) | `"./custom/skills/"` |

425| `commands` | string\|array | File skill `.md` datar atau direktori khusus (menggantikan default `commands/`) | `"./custom/cmd.md"` atau `["./cmd1.md"]` |

426| `agents` | string\|array | File agent khusus (menggantikan default `agents/`) | `"./custom/agents/reviewer.md"` |

427| `hooks` | string\|array\|object | Jalur konfigurasi hook atau konfigurasi inline | `"./my-extra-hooks.json"` |

428| `mcpServers` | string\|array\|object | Jalur konfigurasi MCP atau konfigurasi inline | `"./my-extra-mcp-config.json"` |

429| `outputStyles` | string\|array | File/direktori gaya output khusus (menggantikan default `output-styles/`) | `"./styles/"` |

430| `themes` | string\|array | File/direktori tema warna (menggantikan default `themes/`). Lihat [Themes](#themes) | `"./themes/"` |

431| `lspServers` | string\|array\|object | Konfigurasi [Language Server Protocol](https://microsoft.github.io/language-server-protocol/) untuk intelijen kode (buka definisi, temukan referensi, dll.) | `"./.lsp.json"` |

432| `monitors` | string\|array | Konfigurasi [Monitor](/id/tools-reference#monitor-tool) latar belakang yang dimulai secara otomatis saat plugin aktif. Lihat [Monitors](#monitors) | `"./monitors.json"` |

433| `userConfig` | object | Nilai yang dapat dikonfigurasi pengguna yang diminta saat enable. Lihat [User configuration](#user-configuration) | Lihat di bawah |

434| `channels` | array | Deklarasi channel untuk message injection (Telegram, Slack, Discord style). Lihat [Channels](#channels) | Lihat di bawah |

435| `dependencies` | array | Plugin lain yang diperlukan plugin ini, secara opsional dengan batasan versi semver. Lihat [Constrain plugin dependency versions](/id/plugin-dependencies) | `[{ "name": "secrets-vault", "version": "~2.1.0" }]` |

436 

437### User configuration

438 

439Field `userConfig` mendeklarasikan nilai yang Claude Code minta dari pengguna saat plugin diaktifkan. Gunakan ini daripada memerlukan pengguna untuk mengedit `settings.json` secara manual.

440 

441```json theme={null}

442{

443 "userConfig": {

444 "api_endpoint": {

445 "type": "string",

446 "title": "API endpoint",

447 "description": "Endpoint API tim Anda"

448 },

449 "api_token": {

450 "type": "string",

451 "title": "API token",

452 "description": "Token autentikasi API",

453 "sensitive": true

454 }

455 }

456}

457```

458 

459Kunci harus berupa pengenal yang valid. Setiap opsi mendukung field berikut:

460 

461| Field | Diperlukan | Deskripsi |

462| :------------ | :--------- | :---------------------------------------------------------------------------------------------------- |

463| `type` | Ya | Salah satu dari `string`, `number`, `boolean`, `directory`, atau `file` |

464| `title` | Ya | Label yang ditampilkan dalam dialog konfigurasi |

465| `description` | Ya | Teks bantuan yang ditampilkan di bawah field |

466| `sensitive` | Tidak | Jika `true`, menyembunyikan input dan menyimpan nilai dalam penyimpanan aman daripada `settings.json` |

467| `required` | Tidak | Jika `true`, validasi gagal saat field kosong |

468| `default` | Tidak | Nilai yang digunakan saat pengguna tidak memberikan apa pun |

469| `multiple` | Tidak | Untuk tipe `string`, izinkan array string |

470| `min` / `max` | Tidak | Batas untuk tipe `number` |

471 

472Setiap nilai tersedia untuk substitusi sebagai `${user_config.KEY}` di konfigurasi MCP dan LSP server, perintah hook, dan perintah monitor. Nilai non-sensitif juga dapat disubstitusi dalam konten skill dan agent. Semua nilai diekspor ke subprocess plugin sebagai variabel lingkungan `CLAUDE_PLUGIN_OPTION_<KEY>`.

473 

474Nilai non-sensitif disimpan di `settings.json` di bawah `pluginConfigs[<plugin-id>].options`. Nilai sensitif masuk ke keychain sistem (atau `~/.claude/.credentials.json` di mana keychain tidak tersedia). Penyimpanan keychain dibagikan dengan token OAuth dan memiliki batas total sekitar 2 KB, jadi jaga nilai sensitif tetap kecil.

475 

476### Channels

477 

478Field `channels` memungkinkan plugin mendeklarasikan satu atau lebih message channels yang menyuntikkan konten ke dalam percakapan. Setiap channel mengikat ke MCP server yang disediakan plugin.

479 

480```json theme={null}

481{

482 "channels": [

483 {

484 "server": "telegram",

485 "userConfig": {

486 "bot_token": {

487 "type": "string",

488 "title": "Bot token",

489 "description": "Token bot Telegram",

490 "sensitive": true

491 },

492 "owner_id": {

493 "type": "string",

494 "title": "Owner ID",

495 "description": "ID pengguna Telegram Anda"

496 }

497 }

498 }

499 ]

500}

501```

502 

503Field `server` diperlukan dan harus cocok dengan kunci di `mcpServers` plugin. Field `userConfig` per-channel opsional menggunakan skema yang sama dengan field tingkat atas, memungkinkan plugin meminta token bot atau ID pemilik saat plugin diaktifkan.

504 

505### Aturan perilaku jalur

506 

507Untuk `skills`, `commands`, `agents`, `outputStyles`, `themes`, dan `monitors`, jalur khusus menggantikan default. Jika manifest menentukan `skills`, direktori default `skills/` tidak dipindai; jika menentukan `monitors`, default `monitors/monitors.json` tidak dimuat. [Hooks](#hooks), [MCP servers](#mcp-servers), dan [LSP servers](#lsp-servers) memiliki semantik berbeda untuk menangani beberapa sumber.

508 

509* Semua jalur harus relatif terhadap root plugin dan dimulai dengan `./`

510* Komponen dari jalur khusus menggunakan aturan penamaan dan namespacing yang sama

511* Beberapa jalur dapat ditentukan sebagai array

512* Untuk menyimpan direktori default dan menambahkan lebih banyak jalur untuk skills, commands, agents, atau output styles, sertakan default dalam array Anda: `"skills": ["./skills/", "./extras/"]`

513* Ketika jalur skill menunjuk ke direktori yang berisi `SKILL.md` secara langsung, misalnya `"skills": ["./"]` menunjuk ke root plugin, field frontmatter `name` di `SKILL.md` menentukan nama invokasi skill. Ini memberikan nama stabil terlepas dari direktori instalasi. Jika `name` tidak diatur di frontmatter, basename direktori digunakan sebagai fallback.

514 

515**Contoh jalur**:

516 

517```json theme={null}

518{

519 "commands": [

520 "./specialized/deploy.md",

521 "./utilities/batch-process.md"

522 ],

523 "agents": [

524 "./custom-agents/reviewer.md",

525 "./custom-agents/tester.md"

526 ]

527}

528```

529 

530### Variabel lingkungan

531 

532Claude Code menyediakan dua variabel untuk mereferensikan jalur plugin. Keduanya disubstitusi inline di mana pun mereka muncul dalam konten skill, konten agent, perintah hook, perintah monitor, dan konfigurasi MCP atau LSP server. Keduanya juga diekspor sebagai variabel lingkungan ke proses hook dan subprocess MCP atau LSP server.

533 

534**`${CLAUDE_PLUGIN_ROOT}`**: jalur absolut ke direktori instalasi plugin Anda. Gunakan ini untuk mereferensikan scripts, binaries, dan file konfigurasi yang disertakan dengan plugin. Jalur ini berubah saat plugin diperbarui, jadi file yang Anda tulis di sini tidak bertahan setelah update.

535 

536**`${CLAUDE_PLUGIN_DATA}`**: direktori persisten untuk state plugin yang bertahan setelah updates. Gunakan ini untuk dependensi yang dipasang seperti `node_modules` atau Python virtual environments, kode yang dihasilkan, caches, dan file lainnya yang harus bertahan di seluruh versi plugin. Direktori dibuat secara otomatis pertama kali variabel ini direferensikan.

537 

538```json theme={null}

539{

540 "hooks": {

541 "PostToolUse": [

542 {

543 "hooks": [

544 {

545 "type": "command",

546 "command": "${CLAUDE_PLUGIN_ROOT}/scripts/process.sh"

547 }

548 ]

549 }

550 ]

551 }

552}

553```

554 

555#### Direktori data persisten

556 

557Direktori `${CLAUDE_PLUGIN_DATA}` diselesaikan ke `~/.claude/plugins/data/{id}/`, di mana `{id}` adalah pengenal plugin dengan karakter di luar `a-z`, `A-Z`, `0-9`, `_`, dan `-` diganti dengan `-`. Untuk plugin yang dipasang sebagai `formatter@my-marketplace`, direktorinya adalah `~/.claude/plugins/data/formatter-my-marketplace/`.

558 

559Penggunaan umum adalah memasang dependensi bahasa sekali dan menggunakannya kembali di seluruh sesi dan update plugin. Karena direktori data bertahan lebih lama dari versi plugin tunggal, pemeriksaan keberadaan direktori saja tidak dapat mendeteksi saat update mengubah manifest dependensi plugin. Pola yang direkomendasikan membandingkan manifest yang disertakan terhadap salinan di direktori data dan memasang ulang saat mereka berbeda.

560 

561Hook `SessionStart` ini memasang `node_modules` pada run pertama dan lagi kapan pun update plugin menyertakan `package.json` yang berubah:

562 

563```json theme={null}

564{

565 "hooks": {

566 "SessionStart": [

567 {

568 "hooks": [

569 {

570 "type": "command",

571 "command": "diff -q \"${CLAUDE_PLUGIN_ROOT}/package.json\" \"${CLAUDE_PLUGIN_DATA}/package.json\" >/dev/null 2>&1 || (cd \"${CLAUDE_PLUGIN_DATA}\" && cp \"${CLAUDE_PLUGIN_ROOT}/package.json\" . && npm install) || rm -f \"${CLAUDE_PLUGIN_DATA}/package.json\""

572 }

573 ]

574 }

575 ]

576 }

577}

578```

579 

580`diff` keluar nonzero saat salinan yang disimpan hilang atau berbeda dari yang disertakan, mencakup run pertama dan updates yang mengubah dependensi. Jika `npm install` gagal, trailing `rm` menghapus manifest yang disalin sehingga sesi berikutnya mencoba lagi.

581 

582Scripts yang disertakan di `${CLAUDE_PLUGIN_ROOT}` kemudian dapat berjalan terhadap `node_modules` yang persisten:

583 

584```json theme={null}

585{

586 "mcpServers": {

587 "routines": {

588 "command": "node",

589 "args": ["${CLAUDE_PLUGIN_ROOT}/server.js"],

590 "env": {

591 "NODE_PATH": "${CLAUDE_PLUGIN_DATA}/node_modules"

592 }

593 }

594 }

595}

596```

597 

598Direktori data dihapus secara otomatis saat Anda menghapus plugin dari cakupan terakhir di mana itu dipasang. Antarmuka `/plugin` menunjukkan ukuran direktori dan meminta sebelum menghapus. CLI menghapus secara default; teruskan [`--keep-data`](#plugin-uninstall) untuk mempertahankannya.

599 

600***

601 

602## Caching plugin dan resolusi file

603 

604Plugins ditentukan dalam salah satu dari dua cara:

605 

606* Melalui `claude --plugin-dir`, untuk durasi sesi.

607* Melalui marketplace, dipasang untuk sesi mendatang.

608 

609Untuk tujuan keamanan dan verifikasi, Claude Code menyalin plugin *marketplace* ke **plugin cache** lokal pengguna (`~/.claude/plugins/cache`) daripada menggunakannya di tempat. Memahami perilaku ini penting saat mengembangkan plugins yang mereferensikan file eksternal.

610 

611Setiap versi yang dipasang adalah direktori terpisah dalam cache. Saat Anda memperbarui atau menghapus plugin, direktori versi sebelumnya ditandai sebagai orphaned dan dihapus secara otomatis 7 hari kemudian. Periode grace memungkinkan sesi Claude Code bersamaan yang sudah memuat versi lama untuk terus berjalan tanpa kesalahan.

612 

613Tools Glob dan Grep Claude melewati direktori versi orphaned selama pencarian, jadi hasil file tidak menyertakan kode plugin yang ketinggalan zaman.

614 

615### Batasan path traversal

616 

617Plugin yang dipasang tidak dapat mereferensikan file di luar direktorinya. Jalur yang melintasi di luar root plugin (seperti `../shared-utils`) tidak akan berfungsi setelah instalasi karena file eksternal tersebut tidak disalin ke cache.

618 

619### Bekerja dengan dependensi eksternal

620 

621Jika plugin Anda perlu mengakses file di luar direktorinya, Anda dapat membuat symbolic links ke file eksternal dalam direktori plugin Anda. Symlinks dipertahankan dalam cache daripada didereferensikan, dan mereka diselesaikan ke target mereka saat runtime. Perintah berikut membuat link dari dalam direktori plugin Anda ke lokasi utilitas bersama:

622 

623```bash theme={null}

624ln -s /path/to/shared-utils ./shared-utils

625```

626 

627Ini memberikan fleksibilitas sambil mempertahankan manfaat keamanan dari sistem caching.

628 

629***

630 

631## Struktur direktori plugin

632 

633### Tata letak plugin standar

634 

635Plugin lengkap mengikuti struktur ini:

636 

637```text theme={null}

638enterprise-plugin/

639├── .claude-plugin/ # Direktori metadata (opsional)

640│ └── plugin.json # plugin manifest

641├── skills/ # Skills

642│ ├── code-reviewer/

643│ │ └── SKILL.md

644│ └── pdf-processor/

645│ ├── SKILL.md

646│ └── scripts/

647├── commands/ # Skills sebagai file .md datar

648│ ├── status.md

649│ └── logs.md

650├── agents/ # Definisi subagent

651│ ├── security-reviewer.md

652│ ├── performance-tester.md

653│ └── compliance-checker.md

654├── output-styles/ # Definisi gaya output

655│ └── terse.md

656├── themes/ # Definisi tema warna

657│ └── dracula.json

658├── monitors/ # Konfigurasi monitor latar belakang

659│ └── monitors.json

660├── hooks/ # Konfigurasi hooks

661│ ├── hooks.json # Konfigurasi hook utama

662│ └── security-hooks.json # Hook tambahan

663├── bin/ # Plugin executables ditambahkan ke PATH

664│ └── my-tool # Dapat dipanggil sebagai perintah bare di Bash tool

665├── settings.json # Pengaturan default untuk plugin

666├── .mcp.json # Definisi MCP server

667├── .lsp.json # Konfigurasi LSP server

668├── scripts/ # Hook dan utility scripts

669│ ├── security-scan.sh

670│ ├── format-code.py

671│ └── deploy.js

672├── LICENSE # File lisensi

673└── CHANGELOG.md # Riwayat versi

674```

675 

676<Warning>

677 Direktori `.claude-plugin/` berisi file `plugin.json`. Semua direktori lainnya (commands/, agents/, skills/, output-styles/, themes/, monitors/, hooks/) harus berada di root plugin, bukan di dalam `.claude-plugin/`.

678</Warning>

679 

680### Referensi lokasi file

681 

682| Komponen | Lokasi Default | Tujuan |

683| :---------------- | :--------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

684| **Manifest** | `.claude-plugin/plugin.json` | Metadata dan konfigurasi plugin (opsional) |

685| **Skills** | `skills/` | Skills dengan struktur `<name>/SKILL.md` |

686| **Commands** | `commands/` | Skills sebagai file Markdown datar. Gunakan `skills/` untuk plugin baru |

687| **Agents** | `agents/` | File Markdown Subagent |

688| **Output styles** | `output-styles/` | Definisi gaya output |

689| **Themes** | `themes/` | Definisi tema warna |

690| **Hooks** | `hooks/hooks.json` | Konfigurasi hook |

691| **MCP servers** | `.mcp.json` | Definisi MCP server |

692| **LSP servers** | `.lsp.json` | Konfigurasi language server |

693| **Monitors** | `monitors/monitors.json` | Konfigurasi monitor latar belakang |

694| **Executables** | `bin/` | Executables ditambahkan ke `PATH` Bash tool. File di sini dapat dipanggil sebagai perintah bare di panggilan Bash tool apa pun saat plugin diaktifkan |

695| **Settings** | `settings.json` | Konfigurasi default yang diterapkan saat plugin diaktifkan. Saat ini hanya kunci [`agent`](/id/sub-agents) dan [`subagentStatusLine`](/id/statusline#subagent-status-lines) yang didukung |

696 

697***

698 

699## Referensi perintah CLI

700 

701Claude Code menyediakan perintah CLI untuk manajemen plugin non-interaktif, berguna untuk scripting dan otomasi.

702 

703### plugin install

704 

705Pasang plugin dari marketplace yang tersedia.

706 

707```bash theme={null}

708claude plugin install <plugin> [options]

709```

710 

711**Argumen:**

712 

713* `<plugin>`: Nama plugin atau `plugin-name@marketplace-name` untuk marketplace tertentu

714 

715**Opsi:**

716 

717| Opsi | Deskripsi | Default |

718| :-------------------- | :------------------------------------------------- | :------ |

719| `-s, --scope <scope>` | Cakupan instalasi: `user`, `project`, atau `local` | `user` |

720| `-h, --help` | Tampilkan bantuan untuk perintah | |

721 

722Cakupan menentukan file pengaturan mana yang ditambahkan plugin yang dipasang. Misalnya, `--scope project` menulis ke `enabledPlugins` di .claude/settings.json, membuat plugin tersedia untuk semua orang yang mengkloning repositori proyek.

723 

724**Contoh:**

725 

726```bash theme={null}

727# Pasang ke cakupan user (default)

728claude plugin install formatter@my-marketplace

729 

730# Pasang ke cakupan project (dibagikan dengan tim)

731claude plugin install formatter@my-marketplace --scope project

732 

733# Pasang ke cakupan local (gitignored)

734claude plugin install formatter@my-marketplace --scope local

735```

736 

737### plugin uninstall

738 

739Hapus plugin yang dipasang.

740 

741```bash theme={null}

742claude plugin uninstall <plugin> [options]

743```

744 

745**Argumen:**

746 

747* `<plugin>`: Nama plugin atau `plugin-name@marketplace-name`

748 

749**Opsi:**

750 

751| Opsi | Deskripsi | Default |

752| :-------------------- | :------------------------------------------------------------------------------------------------------------------ | :------ |

753| `-s, --scope <scope>` | Hapus dari cakupan: `user`, `project`, atau `local` | `user` |

754| `--keep-data` | Pertahankan [direktori data persisten](#persistent-data-directory) plugin | |

755| `--prune` | Juga hapus dependensi yang dipasang otomatis yang tidak diperlukan plugin lain. Lihat [plugin prune](#plugin-prune) | |

756| `-y, --yes` | Lewati prompt konfirmasi `--prune`. Diperlukan ketika stdin bukan TTY | |

757| `-h, --help` | Tampilkan bantuan untuk perintah | |

758 

759**Alias:** `remove`, `rm`

760 

761Secara default, menghapus dari cakupan terakhir yang tersisa juga menghapus direktori `${CLAUDE_PLUGIN_DATA}` plugin. Gunakan `--keep-data` untuk mempertahankannya, misalnya saat memasang ulang setelah menguji versi baru.

762 

763### plugin prune

764 

765Hapus dependensi plugin yang dipasang otomatis yang tidak lagi diperlukan oleh plugin yang dipasang. Dependensi yang Claude Code tarik untuk memenuhi bidang [`dependencies`](/id/plugin-dependencies) plugin lain dihapus; plugin yang Anda pasang secara langsung tidak pernah disentuh.

766 

767```bash theme={null}

768claude plugin prune [options]

769```

770 

771**Opsi:**

772 

773| Opsi | Deskripsi | Default |

774| :-------------------- | :---------------------------------------------------------- | :------ |

775| `-s, --scope <scope>` | Prune pada cakupan: `user`, `project`, atau `local` | `user` |

776| `--dry-run` | Daftar apa yang akan dihapus tanpa menghapus apa pun | |

777| `-y, --yes` | Lewati prompt konfirmasi. Diperlukan ketika stdin bukan TTY | |

778| `-h, --help` | Tampilkan bantuan untuk perintah | |

779 

780**Alias:** `autoremove`

781 

782Perintah ini mencantumkan dependensi yatim piatu dan meminta konfirmasi sebelum menghapusnya. Untuk menghapus plugin dan membersihkan dependensinya dalam satu langkah, jalankan `claude plugin uninstall <plugin> --prune`.

783 

784<Note>

785 `claude plugin prune` memerlukan Claude Code v2.1.121 atau lebih baru.

786</Note>

787 

788### plugin enable

789 

790Aktifkan plugin yang dinonaktifkan.

791 

792```bash theme={null}

793claude plugin enable <plugin> [options]

794```

795 

796**Argumen:**

797 

798* `<plugin>`: Nama plugin atau `plugin-name@marketplace-name`

799 

800**Opsi:**

801 

802| Opsi | Deskripsi | Default |

803| :-------------------- | :-------------------------------------------------------- | :------ |

804| `-s, --scope <scope>` | Cakupan untuk diaktifkan: `user`, `project`, atau `local` | `user` |

805| `-h, --help` | Tampilkan bantuan untuk perintah | |

806 

807### plugin disable

808 

809Nonaktifkan plugin tanpa menghapusnya.

810 

811```bash theme={null}

812claude plugin disable <plugin> [options]

813```

814 

815**Argumen:**

816 

817* `<plugin>`: Nama plugin atau `plugin-name@marketplace-name`

818 

819**Opsi:**

820 

821| Opsi | Deskripsi | Default |

822| :-------------------- | :----------------------------------------------------------- | :------ |

823| `-s, --scope <scope>` | Cakupan untuk dinonaktifkan: `user`, `project`, atau `local` | `user` |

824| `-h, --help` | Tampilkan bantuan untuk perintah | |

825 

826### plugin update

827 

828Perbarui plugin ke versi terbaru.

829 

830```bash theme={null}

831claude plugin update <plugin> [options]

832```

833 

834**Argumen:**

835 

836* `<plugin>`: Nama plugin atau `plugin-name@marketplace-name`

837 

838**Opsi:**

839 

840| Opsi | Deskripsi | Default |

841| :-------------------- | :------------------------------------------------------------------- | :------ |

842| `-s, --scope <scope>` | Cakupan untuk diperbarui: `user`, `project`, `local`, atau `managed` | `user` |

843| `-h, --help` | Tampilkan bantuan untuk perintah | |

844 

845***

846 

847### plugin list

848 

849Daftar plugin yang dipasang dengan versi, marketplace sumber, dan status enable mereka.

850 

851```bash theme={null}

852claude plugin list [options]

853```

854 

855**Opsi:**

856 

857| Opsi | Deskripsi | Default |

858| :------------ | :------------------------------------------------------------------ | :------ |

859| `--json` | Output sebagai JSON | |

860| `--available` | Sertakan plugin yang tersedia dari marketplace. Memerlukan `--json` | |

861| `-h, --help` | Tampilkan bantuan untuk perintah | |

862 

863### plugin tag

864 

865Buat tag rilis git untuk plugin di direktori saat ini. Jalankan dari dalam folder plugin. Lihat [Tag plugin releases](/id/plugin-dependencies#tag-plugin-releases-for-version-resolution).

866 

867```bash theme={null}

868claude plugin tag [options]

869```

870 

871**Opsi:**

872 

873| Opsi | Deskripsi | Default |

874| :------------ | :-------------------------------------------------------- | :------ |

875| `--push` | Dorong tag ke remote setelah membuatnya | |

876| `--dry-run` | Cetak apa yang akan diberi tag tanpa membuat tag | |

877| `-f, --force` | Buat tag bahkan jika pohon kerja kotor atau tag sudah ada | |

878| `-h, --help` | Tampilkan bantuan untuk perintah | |

879 

880***

881 

882## Alat debugging dan pengembangan

883 

884### Perintah debugging

885 

886Gunakan `claude --debug` untuk melihat detail loading plugin:

887 

888Ini menunjukkan:

889 

890* Plugin mana yang sedang dimuat

891* Kesalahan apa pun dalam manifest plugin

892* Registrasi skill, agent, dan hook

893* Inisialisasi MCP server

894 

895### Masalah umum

896 

897| Masalah | Penyebab | Solusi |

898| :---------------------------------- | :----------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

899| Plugin tidak dimuat | `plugin.json` tidak valid | Jalankan `claude plugin validate` atau `/plugin validate` untuk memeriksa `plugin.json`, frontmatter skill/agent/command, dan `hooks/hooks.json` untuk kesalahan sintaks dan skema |

900| Skills tidak muncul | Struktur direktori salah | Pastikan `skills/` atau `commands/` di root plugin, bukan di `.claude-plugin/` |

901| Hooks tidak aktif | Script tidak dapat dieksekusi | Jalankan `chmod +x script.sh` |

902| MCP server gagal | `${CLAUDE_PLUGIN_ROOT}` hilang | Gunakan variabel untuk semua jalur plugin |

903| Kesalahan jalur | Jalur absolut digunakan | Semua jalur harus relatif dan dimulai dengan `./` |

904| LSP `Executable not found in $PATH` | Language server tidak dipasang | Pasang biner (misalnya, `npm install -g typescript-language-server typescript`) |

905 

906### Contoh pesan kesalahan

907 

908**Kesalahan validasi manifest**:

909 

910* `Invalid JSON syntax: Unexpected token } in JSON at position 142`: periksa koma yang hilang, koma ekstra, atau string yang tidak dikutip

911* `Plugin has an invalid manifest file at .claude-plugin/plugin.json. Validation errors: name: Required`: field yang diperlukan hilang

912* `Plugin has a corrupt manifest file at .claude-plugin/plugin.json. JSON parse error: ...`: kesalahan sintaks JSON

913 

914**Kesalahan loading plugin**:

915 

916* `Warning: No commands found in plugin my-plugin custom directory: ./cmds. Expected .md files or SKILL.md in subdirectories.`: jalur command ada tetapi tidak berisi file command yang valid

917* `Plugin directory not found at path: ./plugins/my-plugin. Check that the marketplace entry has the correct path.`: jalur `source` di marketplace.json menunjuk ke direktori yang tidak ada

918* `Plugin my-plugin has conflicting manifests: both plugin.json and marketplace entry specify components.`: hapus definisi komponen duplikat atau hapus `strict: false` di entri marketplace

919 

920### Troubleshooting hook

921 

922**Hook script tidak dieksekusi**:

923 

9241. Periksa script dapat dieksekusi: `chmod +x ./scripts/your-script.sh`

9252. Verifikasi baris shebang: Baris pertama harus `#!/bin/bash` atau `#!/usr/bin/env bash`

9263. Periksa jalur menggunakan `${CLAUDE_PLUGIN_ROOT}`: `"command": "${CLAUDE_PLUGIN_ROOT}/scripts/your-script.sh"`

9274. Uji script secara manual: `./scripts/your-script.sh`

928 

929**Hook tidak dipicu pada event yang diharapkan**:

930 

9311. Verifikasi nama event benar (case-sensitive): `PostToolUse`, bukan `postToolUse`

9322. Periksa pola matcher cocok dengan alat Anda: `"matcher": "Write|Edit"` untuk operasi file

9333. Konfirmkan tipe hook valid: `command`, `http`, `mcp_tool`, `prompt`, atau `agent`

934 

935### Troubleshooting MCP server

936 

937**Server tidak dimulai**:

938 

9391. Periksa command ada dan dapat dieksekusi

9402. Verifikasi semua jalur menggunakan variabel `${CLAUDE_PLUGIN_ROOT}`

9413. Periksa log MCP server: `claude --debug` menunjukkan kesalahan inisialisasi

9424. Uji server secara manual di luar Claude Code

943 

944**Alat server tidak muncul**:

945 

9461. Pastikan server dikonfigurasi dengan benar di `.mcp.json` atau `plugin.json`

9472. Verifikasi server mengimplementasikan protokol MCP dengan benar

9483. Periksa timeout koneksi di output debug

949 

950### Kesalahan struktur direktori

951 

952**Gejala**: Plugin dimuat tetapi komponen (skills, agents, hooks) hilang.

953 

954**Struktur yang benar**: Komponen harus berada di root plugin, bukan di dalam `.claude-plugin/`. Hanya `plugin.json` yang termasuk di `.claude-plugin/`.

955 

956```text theme={null}

957my-plugin/

958├── .claude-plugin/

959│ └── plugin.json ← Hanya manifest di sini

960├── commands/ ← Di level root

961├── agents/ ← Di level root

962└── hooks/ ← Di level root

963```

964 

965Jika komponen Anda berada di dalam `.claude-plugin/`, pindahkan ke root plugin.

966 

967**Daftar periksa debug**:

968 

9691. Jalankan `claude --debug` dan cari pesan "loading plugin"

9702. Periksa bahwa setiap direktori komponen terdaftar di output debug

9713. Verifikasi izin file memungkinkan membaca file plugin

972 

973***

974 

975## Referensi distribusi dan versioning

976 

977### Manajemen versi

978 

979Claude Code menggunakan versi plugin sebagai cache key yang menentukan apakah pembaruan tersedia. Ketika Anda menjalankan `/plugin update` atau auto-update dipicu, Claude Code menghitung versi saat ini dan melewati pembaruan jika cocok dengan apa yang sudah terpasang.

980 

981Versi diselesaikan dari yang pertama dari ini yang diatur:

982 

9831. Field `version` dalam `plugin.json` plugin

9842. Field `version` dalam entri marketplace plugin dalam `marketplace.json`

9853. Git commit SHA dari sumber plugin, untuk sumber `github`, `url`, `git-subdir`, dan relative-path dalam marketplace yang dihosting git

9864. `unknown`, untuk sumber `npm` atau direktori lokal yang tidak berada dalam repositori git

987 

988Ini memberi Anda dua cara untuk memberi versi pada plugin:

989 

990| Pendekatan | Cara | Perilaku pembaruan | Terbaik untuk |

991| :------------------- | :----------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------- |

992| **Versi eksplisit** | Atur `"version": "2.1.0"` dalam `plugin.json` | Pengguna mendapatkan pembaruan hanya ketika Anda menaikkan field ini. Mendorong commit baru tanpa menaikkannya tidak berpengaruh, dan `/plugin update` melaporkan "already at the latest version". | Plugin yang dipublikasikan dengan siklus rilis stabil |

993| **Versi commit-SHA** | Hilangkan `version` dari `plugin.json` dan entri marketplace | Pengguna mendapatkan pembaruan pada setiap commit baru ke sumber git plugin | Plugin internal atau tim di bawah pengembangan aktif |

994 

995<Warning>

996 Jika Anda mengatur `version` dalam `plugin.json`, Anda harus menaikkannya setiap kali Anda ingin pengguna menerima perubahan. Mendorong commit baru saja tidak cukup, karena Claude Code melihat string versi yang sama dan menyimpan salinan yang di-cache. Jika Anda melakukan iterasi dengan cepat, biarkan `version` tidak diatur sehingga git commit SHA digunakan sebagai gantinya.

997</Warning>

998 

999Jika Anda menggunakan versi eksplisit, ikuti [semantic versioning](https://semver.org) (`MAJOR.MINOR.PATCH`): naikkan MAJOR untuk perubahan breaking, MINOR untuk fitur baru, PATCH untuk perbaikan bug. Dokumentasikan perubahan dalam `CHANGELOG.md`.

1000 

1001***

1002 

1003## Lihat juga

1004 

1005* [Plugins](/id/plugins) - Tutorial dan penggunaan praktis

1006* [Plugin marketplaces](/id/plugin-marketplaces) - Membuat dan mengelola marketplace

1007* [Skills](/id/skills) - Detail pengembangan skill

1008* [Subagents](/id/sub-agents) - Konfigurasi dan kemampuan agent

1009* [Hooks](/id/hooks) - Penanganan event dan otomasi

1010* [MCP](/id/mcp) - Integrasi alat eksternal

1011* [Settings](/id/settings) - Opsi konfigurasi untuk plugins

quickstart.md +976 −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# Panduan Cepat

6 

7> Selamat datang di Claude Code!

8 

9export const InstallConfigurator = ({defaultSurface = 'terminal'}) => {

10 const TERM = {

11 mac: {

12 label: 'macOS / Linux',

13 cmd: 'curl -fsSL https://claude.ai/install.sh | bash'

14 },

15 win: {

16 label: 'Windows'

17 },

18 brew: {

19 label: 'Homebrew',

20 cmd: 'brew install --cask claude-code'

21 },

22 winget: {

23 label: 'WinGet',

24 cmd: 'winget install Anthropic.ClaudeCode'

25 }

26 };

27 const WIN_VARIANTS = {

28 ps: 'irm https://claude.ai/install.ps1 | iex',

29 cmd: 'curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd'

30 };

31 const TABS = [{

32 key: 'terminal',

33 label: 'Terminal'

34 }, {

35 key: 'desktop',

36 label: 'Desktop'

37 }, {

38 key: 'vscode',

39 label: 'VS Code'

40 }, {

41 key: 'jetbrains',

42 label: 'JetBrains'

43 }];

44 const ALT_TARGETS = {

45 desktop: {

46 name: 'Desktop',

47 tagline: 'The full agent in a native app for macOS and Windows.',

48 installLabel: 'Download the app',

49 installHref: 'https://claude.com/download?utm_source=claude_code&utm_medium=docs&utm_content=configurator_desktop_download',

50 guideHref: '/en/desktop-quickstart'

51 },

52 vscode: {

53 name: 'VS Code',

54 tagline: 'Review diffs, manage context, and chat without leaving your editor.',

55 installLabel: 'Install from Marketplace',

56 installHref: 'https://marketplace.visualstudio.com/items?itemName=anthropic.claude-code',

57 altCmd: 'code --install-extension anthropic.claude-code',

58 guideHref: '/en/vs-code'

59 },

60 jetbrains: {

61 name: 'JetBrains',

62 tagline: 'Native plugin for IntelliJ, PyCharm, WebStorm, and other JetBrains IDEs.',

63 installLabel: 'Install from Marketplace',

64 installHref: 'https://plugins.jetbrains.com/plugin/27310-claude-code-beta-',

65 guideHref: '/en/jetbrains'

66 }

67 };

68 const PROVIDERS = [{

69 key: 'anthropic',

70 label: 'Anthropic'

71 }, {

72 key: 'bedrock',

73 label: 'Amazon Bedrock'

74 }, {

75 key: 'foundry',

76 label: 'Microsoft Foundry'

77 }, {

78 key: 'vertex',

79 label: 'Google Vertex AI'

80 }];

81 const PROVIDER_NOTICE = {

82 bedrock: <>

83 <strong>Configure your AWS account first.</strong> Running on Bedrock

84 requires model access enabled in the AWS console and IAM credentials.{' '}

85 <a href="/en/amazon-bedrock">Bedrock setup guide →</a>

86 </>,

87 vertex: <>

88 <strong>Configure your GCP project first.</strong> Running on Vertex AI

89 requires the Vertex API enabled and a service account with the right

90 permissions.{' '}

91 <a href="/en/google-vertex-ai">Vertex setup guide →</a>

92 </>,

93 foundry: <>

94 <strong>Configure your Azure resources first.</strong> Running on

95 Microsoft Foundry requires an Azure subscription with a Foundry resource

96 and model deployments provisioned.{' '}

97 <a href="/en/microsoft-foundry">Foundry setup guide →</a>

98 </>

99 };

100 const iconCheck = (size = 14) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="3" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

101 <polyline points="20 6 9 17 4 12" />

102 </svg>;

103 const iconCopy = (size = 14) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

104 <rect x="9" y="9" width="13" height="13" rx="2" />

105 <path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" />

106 </svg>;

107 const iconArrowRight = (size = 13) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

108 <line x1="5" y1="12" x2="19" y2="12" />

109 <polyline points="12 5 19 12 12 19" />

110 </svg>;

111 const iconArrowUpRight = (size = 14) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

112 <line x1="7" y1="17" x2="17" y2="7" />

113 <polyline points="7 7 17 7 17 17" />

114 </svg>;

115 const iconInfo = (size = 16) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

116 <circle cx="12" cy="12" r="10" />

117 <line x1="12" y1="16" x2="12" y2="12" />

118 <line x1="12" y1="8" x2="12.01" y2="8" />

119 </svg>;

120 const [target, setTarget] = useState(defaultSurface);

121 const [team, setTeam] = useState(false);

122 const [provider, setProvider] = useState('anthropic');

123 const [pkg, setPkg] = useState(() => (/Win/).test(navigator.userAgent) ? 'win' : 'mac');

124 const [winCmd, setWinCmd] = useState(false);

125 const [copied, setCopied] = useState(null);

126 const copyTimer = useRef(null);

127 const handleCopy = async (text, key) => {

128 try {

129 await navigator.clipboard.writeText(text);

130 } catch {

131 const ta = document.createElement('textarea');

132 ta.value = text;

133 document.body.appendChild(ta);

134 ta.select();

135 document.execCommand('copy');

136 document.body.removeChild(ta);

137 }

138 clearTimeout(copyTimer.current);

139 setCopied(key);

140 copyTimer.current = setTimeout(() => setCopied(null), 1800);

141 };

142 const cardBodyCmd = (cmd, prompt) => {

143 const on = copied === 'term';

144 return <div className="cc-ic-card-body">

145 <span className="cc-ic-prompt">{prompt || '$'}</span>

146 <div className="cc-ic-cmd">{cmd}</div>

147 <button type="button" className={'cc-ic-copy' + (on ? ' cc-ic-copied' : '')} onClick={() => handleCopy(cmd, 'term')}>

148 {on ? iconCheck(13) : iconCopy(13)}

149 <span>{on ? 'Copied' : 'Copy'}</span>

150 </button>

151 </div>;

152 };

153 const isWinInstaller = pkg === 'win';

154 const isWinPrompt = pkg === 'win' || pkg === 'winget';

155 const terminalCmd = isWinInstaller ? WIN_VARIANTS[winCmd ? 'cmd' : 'ps'] : TERM[pkg].cmd;

156 const alt = ALT_TARGETS[target];

157 const showNotice = team && provider !== 'anthropic';

158 const STYLES = `

159.cc-ic {

160 --ic-slate: #141413;

161 --ic-clay: #d97757;

162 --ic-clay-deep: #c6613f;

163 --ic-gray-000: #ffffff;

164 --ic-gray-150: #f0eee6;

165 --ic-gray-550: #73726c;

166 --ic-gray-700: #3d3d3a;

167 --ic-border-subtle: rgba(31, 30, 29, 0.08);

168 --ic-border-default: rgba(31, 30, 29, 0.15);

169 --ic-border-strong: rgba(31, 30, 29, 0.3);

170 --ic-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Courier New', monospace;

171 font-family: 'Anthropic Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;

172 font-size: 14px; line-height: 1.5; color: var(--ic-slate);

173 margin: 8px 0 32px;

174}

175.dark .cc-ic {

176 --ic-slate: #f0eee6;

177 --ic-gray-000: #262624;

178 --ic-gray-150: #1f1e1d;

179 --ic-gray-550: #91908a;

180 --ic-gray-700: #bfbdb4;

181 --ic-border-subtle: rgba(240, 238, 230, 0.08);

182 --ic-border-default: rgba(240, 238, 230, 0.14);

183 --ic-border-strong: rgba(240, 238, 230, 0.28);

184}

185.dark .cc-ic-check { background: transparent; }

186.dark .cc-ic-card { border: 0.5px solid var(--ic-border-subtle); }

187.dark .cc-ic-p-pill.cc-ic-active { box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); }

188.cc-ic *, .cc-ic *::before, .cc-ic *::after { box-sizing: border-box; }

189.cc-ic a { text-decoration: none; }

190.cc-ic a:not([class]) { color: inherit; }

191.cc-ic button { font-family: inherit; cursor: pointer; }

192 

193.cc-ic-tab-strip {

194 display: inline-flex; gap: 2px;

195 padding: 4px; background: var(--ic-gray-150);

196 border-radius: 10px; overflow-x: auto;

197 max-width: 100%;

198}

199.cc-ic-tab {

200 appearance: none; background: none; border: none;

201 padding: 10px 18px; font-size: 15px; font-weight: 430;

202 color: var(--ic-gray-550); border-radius: 7px;

203 white-space: nowrap;

204 transition: color 0.12s, background-color 0.12s;

205}

206.cc-ic-tab:hover { color: var(--ic-gray-700); }

207.cc-ic-tab.cc-ic-active {

208 color: var(--ic-slate); font-weight: 500;

209 background: var(--ic-gray-000);

210 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);

211}

212.dark .cc-ic-tab.cc-ic-active { box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4); }

213 

214.cc-ic-team-wrap { padding: 16px 0 20px; }

215.cc-ic-team-toggle {

216 display: flex; align-items: center; gap: 12px; font-family: inherit;

217 padding: 12px 16px; font-size: 14px; font-weight: 430;

218 color: var(--ic-gray-700); cursor: pointer; user-select: none;

219 width: fit-content; background: var(--ic-gray-150);

220 border: 0.5px solid var(--ic-border-subtle); border-radius: 8px;

221 transition: border-color 0.15s;

222}

223.cc-ic-team-toggle:hover { border-color: var(--ic-border-default); }

224.cc-ic-team-toggle.cc-ic-checked {

225 background: rgba(217, 119, 87, 0.08);

226 border-color: rgba(217, 119, 87, 0.25);

227}

228.cc-ic-check {

229 width: 16px; height: 16px;

230 border: 1px solid var(--ic-border-strong); border-radius: 4px;

231 background: var(--ic-gray-000);

232 display: flex; align-items: center; justify-content: center;

233 flex-shrink: 0;

234}

235.cc-ic-check svg { color: #fff; display: none; }

236.cc-ic-team-toggle.cc-ic-checked .cc-ic-check { background: var(--ic-clay-deep); border-color: var(--ic-clay-deep); }

237.cc-ic-team-toggle.cc-ic-checked .cc-ic-check svg { display: block; }

238 

239.cc-ic-team-reveal { display: flex; flex-direction: column; gap: 12px; margin-bottom: 16px; }

240.cc-ic-sales {

241 display: flex; align-items: center; justify-content: space-between;

242 gap: 16px; padding: 14px 16px;

243 background: var(--ic-gray-000); border: 0.5px solid var(--ic-border-default);

244 border-radius: 8px; flex-wrap: wrap;

245}

246.cc-ic-sales-text { font-size: 13px; color: var(--ic-gray-700); line-height: 1.5; flex: 1; min-width: 200px; }

247.cc-ic-sales-text strong { font-weight: 550; color: var(--ic-slate); }

248.cc-ic-sales-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }

249.cc-ic-btn-clay {

250 display: inline-flex; align-items: center; gap: 8px;

251 background: var(--ic-clay-deep); color: #fff; border: none;

252 border-radius: 8px; padding: 8px 14px;

253 font-size: 13px; font-weight: 500;

254 transition: background-color 0.15s; white-space: nowrap;

255}

256.cc-ic-btn-clay:hover { background: var(--ic-clay); }

257.cc-ic-btn-ghost {

258 display: inline-flex; align-items: center; gap: 8px;

259 background: transparent; color: var(--ic-gray-700);

260 border: 0.5px solid var(--ic-border-default);

261 border-radius: 8px; padding: 8px 14px;

262 font-size: 13px; font-weight: 500;

263}

264.cc-ic-btn-ghost:hover { background: rgba(0, 0, 0, 0.04); }

265 

266.cc-ic-provider-bar {

267 display: flex; align-items: center; gap: 12px;

268 padding: 14px 16px; background: var(--ic-gray-150);

269 border-radius: 8px; font-size: 13px; flex-wrap: wrap;

270}

271.cc-ic-provider-bar .cc-ic-label { color: var(--ic-gray-550); flex-shrink: 0; }

272.cc-ic-provider-pills { display: flex; gap: 4px; flex-wrap: wrap; }

273.cc-ic-p-pill {

274 appearance: none; border: none; background: transparent;

275 padding: 6px 12px; border-radius: 6px;

276 font-size: 13px; font-weight: 430; color: var(--ic-gray-700);

277 white-space: nowrap;

278}

279.cc-ic-p-pill:hover { background: rgba(0, 0, 0, 0.04); }

280.cc-ic-p-pill.cc-ic-active {

281 background: var(--ic-gray-000); color: var(--ic-slate);

282 font-weight: 500; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);

283}

284.cc-ic-provider-notice {

285 display: flex; padding: 16px 18px;

286 background: var(--ic-gray-000); border: 0.5px solid var(--ic-border-default);

287 border-radius: 8px; gap: 14px; align-items: flex-start;

288}

289.cc-ic-provider-notice > svg { color: var(--ic-gray-550); margin-top: 2px; flex-shrink: 0; }

290.cc-ic-provider-notice-body { font-size: 14px; line-height: 1.55; color: var(--ic-gray-700); }

291.cc-ic-provider-notice-body strong { font-weight: 550; color: var(--ic-slate); }

292.cc-ic-provider-notice-body a { color: var(--ic-clay-deep); font-weight: 500; }

293.cc-ic-provider-notice-body a:hover { text-decoration: underline; }

294 

295.cc-ic-card { background: #141413; border-radius: 12px; overflow: hidden; }

296.cc-ic-subtabs {

297 display: flex; align-items: center;

298 background: #1a1918;

299 border-bottom: 0.5px solid rgba(255, 255, 255, 0.08);

300 padding: 0 8px; overflow-x: auto;

301}

302.cc-ic-subtab {

303 appearance: none; background: none; border: none;

304 padding: 12px 16px; font-size: 12px;

305 color: rgba(255, 255, 255, 0.5);

306 position: relative; white-space: nowrap;

307}

308.cc-ic-subtab:hover { color: rgba(255, 255, 255, 0.75); }

309.cc-ic-subtab.cc-ic-active { color: #fff; }

310.cc-ic-subtab.cc-ic-active::after {

311 content: ''; position: absolute;

312 left: 12px; right: 12px; bottom: -0.5px;

313 height: 2px; background: var(--ic-clay);

314}

315.cc-ic-shell-switch {

316 display: inline-flex; gap: 2px;

317 margin: 14px 26px 0; padding: 3px;

318 background: rgba(255, 255, 255, 0.06);

319 border: 0.5px solid rgba(255, 255, 255, 0.08);

320 border-radius: 8px;

321 font-family: inherit;

322}

323.cc-ic-shell-option {

324 font: inherit; font-size: 12px; font-weight: 500;

325 padding: 5px 12px; border-radius: 6px;

326 background: transparent; border: none;

327 color: rgba(255, 255, 255, 0.55);

328 cursor: pointer; user-select: none; white-space: nowrap;

329 transition: color 120ms ease, background-color 120ms ease;

330}

331.cc-ic-shell-option:hover { color: rgba(255, 255, 255, 0.85); }

332.cc-ic-shell-option.cc-ic-active {

333 background: rgba(255, 255, 255, 0.12);

334 color: #fff;

335 box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25);

336}

337 

338.cc-ic-card-body { padding: 24px 26px; display: flex; align-items: flex-start; gap: 14px; }

339.cc-ic-prompt {

340 color: var(--ic-clay); font-family: var(--ic-font-mono);

341 font-size: 17px; user-select: none; padding-top: 2px;

342}

343.cc-ic-cmd {

344 flex: 1; font-family: var(--ic-font-mono);

345 font-size: 17px; color: #f0eee6;

346 line-height: 1.55; white-space: pre-wrap; word-break: break-word;

347}

348.cc-ic-copy {

349 display: inline-flex; align-items: center; gap: 6px;

350 background: rgba(255, 255, 255, 0.08);

351 border: 0.5px solid rgba(255, 255, 255, 0.12);

352 color: rgba(255, 255, 255, 0.85);

353 padding: 7px 13px; border-radius: 8px;

354 font-size: 13px; font-weight: 500; flex-shrink: 0;

355}

356.cc-ic-copy:hover { background: rgba(255, 255, 255, 0.14); }

357.cc-ic-copy.cc-ic-copied { background: var(--ic-clay-deep); border-color: var(--ic-clay-deep); color: #fff; }

358 

359.cc-ic-below {

360 margin-top: 12px; font-size: 13px; color: var(--ic-gray-550);

361 display: flex; gap: 16px; flex-wrap: wrap; align-items: baseline;

362}

363.cc-ic-below a { color: var(--ic-gray-700); border-bottom: 0.5px solid var(--ic-border-default); }

364.cc-ic-below a:hover { color: var(--ic-clay-deep); border-bottom-color: var(--ic-clay-deep); }

365.cc-ic-handoff {

366 padding: 22px 24px;

367 background: linear-gradient(180deg, #faf9f4 0%, #f3f1e9 100%);

368 border: 0.5px solid var(--ic-border-default);

369 border-radius: 12px;

370 box-shadow: 0 1px 2px rgba(31, 30, 29, 0.04), 0 6px 16px -4px rgba(31, 30, 29, 0.06);

371}

372.dark .cc-ic-handoff {

373 background: linear-gradient(180deg, #262624 0%, #1f1e1d 100%);

374 box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3), 0 6px 16px -4px rgba(0, 0, 0, 0.4);

375}

376.cc-ic-handoff-title {

377 font-size: 16px; font-weight: 550; color: var(--ic-slate);

378 letter-spacing: -0.01em; margin-bottom: 4px;

379}

380.cc-ic-handoff-sub {

381 font-size: 14px; line-height: 1.5; color: var(--ic-gray-700);

382 margin-bottom: 18px;

383}

384.cc-ic-handoff-actions { display: flex; gap: 10px; flex-wrap: wrap; }

385.cc-ic-handoff-alt {

386 margin-top: 12px; font-size: 12px; color: var(--ic-gray-550);

387}

388.cc-ic-handoff-alt code {

389 font-family: var(--ic-font-mono); font-size: 11px;

390 background: var(--ic-gray-150); padding: 2px 6px;

391 border-radius: 4px; color: var(--ic-gray-700);

392}

393.cc-ic-copy-sm {

394 appearance: none; border: none;

395 display: inline-flex; align-items: center; justify-content: center;

396 width: 22px; height: 22px;

397 margin-left: 4px; vertical-align: middle;

398 background: var(--ic-gray-150); color: var(--ic-gray-550);

399 border-radius: 4px;

400 transition: color 0.1s, background-color 0.1s;

401}

402.cc-ic-copy-sm:hover { color: var(--ic-gray-700); background: var(--ic-border-default); }

403.cc-ic-copy-sm.cc-ic-copied { background: var(--ic-clay-deep); color: #fff; }

404 

405@media (max-width: 720px) {

406 .cc-ic-tab { padding: 12px 14px; font-size: 14px; }

407 .cc-ic-sales-actions { width: 100%; }

408 .cc-ic-card-body { padding: 20px; }

409 .cc-ic-cmd { font-size: 15px; }

410}

411`;

412 return <div className="cc-ic not-prose">

413 <style>{STYLES}</style>

414 

415 {}

416 <div className="cc-ic-tab-strip" role="tablist">

417 {TABS.map(t => <button key={t.key} type="button" role="tab" aria-selected={target === t.key} className={'cc-ic-tab' + (target === t.key ? ' cc-ic-active' : '')} onClick={() => setTarget(t.key)}>

418 {t.label}

419 </button>)}

420 </div>

421 

422 {}

423 <div className="cc-ic-team-wrap">

424 <button type="button" role="switch" aria-checked={team} className={'cc-ic-team-toggle' + (team ? ' cc-ic-checked' : '')} onClick={() => setTeam(!team)}>

425 <span className="cc-ic-check">{iconCheck(11)}</span>

426 <span>

427 I’m buying for a team or company (SSO, AWS/Azure/GCP, central billing)

428 </span>

429 </button>

430 </div>

431 

432 {}

433 {team && <div className="cc-ic-team-reveal">

434 <div className="cc-ic-sales">

435 <div className="cc-ic-sales-text">

436 <strong>Set up your team:</strong> self-serve or talk to sales.

437 </div>

438 <div className="cc-ic-sales-actions">

439 <a href="https://claude.ai/upgrade?initialPlanType=team&amp;utm_source=claude_code&amp;utm_medium=docs&amp;utm_content=configurator_team_get_started" className="cc-ic-btn-ghost">

440 Get started

441 </a>

442 <a href="https://www.anthropic.com/contact-sales?utm_source=claude_code&amp;utm_medium=docs&amp;utm_content=configurator_team_contact_sales" className="cc-ic-btn-clay">

443 Contact sales {iconArrowRight()}

444 </a>

445 </div>

446 </div>

447 

448 <div className="cc-ic-provider-bar">

449 <span className="cc-ic-label">Run on</span>

450 <div className="cc-ic-provider-pills" role="radiogroup" aria-label="Provider">

451 {PROVIDERS.map(p => <button key={p.key} type="button" role="radio" aria-checked={provider === p.key} className={'cc-ic-p-pill' + (provider === p.key ? ' cc-ic-active' : '')} onClick={() => setProvider(p.key)}>

452 {p.label}

453 </button>)}

454 </div>

455 </div>

456 

457 {showNotice && <div className="cc-ic-provider-notice">

458 {iconInfo()}

459 <div className="cc-ic-provider-notice-body">

460 {PROVIDER_NOTICE[provider]}

461 </div>

462 </div>}

463 </div>}

464 

465 {}

466 {target === 'terminal' && <div className="cc-ic-card">

467 <div className="cc-ic-subtabs" role="tablist" aria-label="Install method">

468 {Object.keys(TERM).map(k => <button key={k} type="button" role="tab" aria-selected={pkg === k} className={'cc-ic-subtab' + (pkg === k ? ' cc-ic-active' : '')} onClick={() => setPkg(k)}>

469 {TERM[k].label}

470 </button>)}

471 </div>

472 {isWinInstaller && <div className="cc-ic-shell-switch" role="tablist" aria-label="Shell">

473 {[{

474 k: 'ps',

475 label: 'PowerShell'

476 }, {

477 k: 'cmd',

478 label: 'CMD'

479 }].map(({k, label}) => {

480 const active = k === 'cmd' === winCmd;

481 return <button key={k} type="button" role="tab" aria-selected={active} className={'cc-ic-shell-option' + (active ? ' cc-ic-active' : '')} onClick={() => setWinCmd(k === 'cmd')}>

482 {label}

483 </button>;

484 })}

485 </div>}

486 {cardBodyCmd(terminalCmd, isWinPrompt ? '>' : '$')}

487 </div>}

488 

489 {}

490 {target === 'terminal' && <div className="cc-ic-below">

491 {isWinInstaller && <span>

492 <a href="https://git-scm.com/downloads/win" target="_blank" rel="noopener">

493 Git for Windows

494 </a>{' '}

495 recommended. PowerShell is used if Git Bash is absent.

496 </span>}

497 {(pkg === 'brew' || pkg === 'winget') && <span>

498 Does not auto-update. Run{' '}

499 <code>{pkg === 'brew' ? 'brew upgrade claude-code' : 'winget upgrade Anthropic.ClaudeCode'}</code>{' '}

500 periodically.

501 </span>}

502 <a href="/en/troubleshoot-install">Installation troubleshooting</a>

503 </div>}

504 

505 {alt && <div className="cc-ic-handoff">

506 <div className="cc-ic-handoff-title">Claude Code for {alt.name}</div>

507 <div className="cc-ic-handoff-sub">{alt.tagline}</div>

508 <div className="cc-ic-handoff-actions">

509 <a href={alt.installHref} className="cc-ic-btn-clay" {...alt.installHref.startsWith('http') ? {

510 target: '_blank',

511 rel: 'noopener'

512 } : {}}>

513 {alt.installLabel} {iconArrowUpRight(13)}

514 </a>

515 <a href={alt.guideHref} className="cc-ic-btn-ghost">

516 {alt.name} guide {iconArrowRight(12)}

517 </a>

518 </div>

519 {alt.altCmd && <div className="cc-ic-handoff-alt">

520 or run <code>{alt.altCmd}</code>

521 <button type="button" className={'cc-ic-copy-sm' + (copied === 'alt' ? ' cc-ic-copied' : '')} onClick={() => handleCopy(alt.altCmd, 'alt')} aria-label="Copy command">

522 {copied === 'alt' ? iconCheck(11) : iconCopy(11)}

523 </button>

524 </div>}

525 </div>}

526 </div>;

527};

528 

529export const Experiment = ({flag, treatment, children}) => {

530 const VID_KEY = 'exp_vid';

531 const CONSENT_COUNTRIES = new Set(['AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'RE', 'GP', 'MQ', 'GF', 'YT', 'BL', 'MF', 'PM', 'WF', 'PF', 'NC', 'AW', 'CW', 'SX', 'FO', 'GL', 'AX', 'GB', 'UK', 'AI', 'BM', 'IO', 'VG', 'KY', 'FK', 'GI', 'MS', 'PN', 'SH', 'TC', 'GG', 'JE', 'IM', 'CA', 'BR', 'IN']);

532 const fnv1a = s => {

533 let h = 0x811c9dc5;

534 for (let i = 0; i < s.length; i++) {

535 h ^= s.charCodeAt(i);

536 h += (h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24);

537 }

538 return h >>> 0;

539 };

540 const bucket = (seed, vid) => fnv1a(fnv1a(seed + vid) + '') % 10000 < 5000 ? 'control' : 'treatment';

541 const [decision] = useState(() => {

542 const params = new URLSearchParams(location.search);

543 const preBucketed = document.documentElement.dataset['gb_' + flag.replace(/-/g, '_')];

544 const force = params.get('gb-force');

545 if (force) {

546 for (const p of force.split(',')) {

547 const [k, v] = p.split(':');

548 if (k === flag) return {

549 variant: v || 'treatment',

550 track: false

551 };

552 }

553 }

554 if (navigator.globalPrivacyControl) {

555 return {

556 variant: 'control',

557 track: false

558 };

559 }

560 const prefsMatch = document.cookie.match(/(?:^|; )anthropic-consent-preferences=([^;]+)/);

561 if (prefsMatch) {

562 try {

563 if (JSON.parse(decodeURIComponent(prefsMatch[1])).analytics !== true) {

564 return {

565 variant: 'control',

566 track: false

567 };

568 }

569 } catch {

570 return {

571 variant: 'control',

572 track: false

573 };

574 }

575 } else {

576 const country = params.get('country')?.toUpperCase() || (document.cookie.match(/(?:^|; )cf_geo=([A-Z]{2})/) || [])[1];

577 if (!country || CONSENT_COUNTRIES.has(country)) {

578 return {

579 variant: 'control',

580 track: false

581 };

582 }

583 }

584 let vid;

585 try {

586 const ajsMatch = document.cookie.match(/(?:^|; )ajs_anonymous_id=([^;]+)/);

587 if (ajsMatch) {

588 vid = decodeURIComponent(ajsMatch[1]).replace(/^"|"$/g, '');

589 } else {

590 vid = localStorage.getItem(VID_KEY);

591 if (!vid) {

592 vid = crypto.randomUUID();

593 }

594 document.cookie = `ajs_anonymous_id=${vid}; domain=.claude.com; path=/; Secure; SameSite=Lax; max-age=31536000`;

595 }

596 try {

597 localStorage.setItem(VID_KEY, vid);

598 } catch {}

599 } catch {

600 return {

601 variant: 'control',

602 track: false

603 };

604 }

605 const variant = preBucketed === '1' ? 'treatment' : preBucketed === '0' ? 'control' : bucket(flag, vid);

606 return {

607 variant,

608 track: true,

609 vid

610 };

611 });

612 useEffect(() => {

613 if (!decision.track) return;

614 fetch('https://api.anthropic.com/api/event_logging/v2/batch', {

615 method: 'POST',

616 headers: {

617 'Content-Type': 'application/json',

618 'x-service-name': 'claude_code_docs'

619 },

620 body: JSON.stringify({

621 events: [{

622 event_type: 'GrowthbookExperimentEvent',

623 event_data: {

624 device_id: decision.vid,

625 anonymous_id: decision.vid,

626 timestamp: new Date().toISOString(),

627 experiment_id: flag,

628 variation_id: decision.variant === 'treatment' ? 1 : 0,

629 environment: 'production'

630 }

631 }]

632 }),

633 keepalive: true

634 }).catch(() => {});

635 }, []);

636 return decision.variant === 'treatment' ? treatment : children;

637};

638 

639Panduan cepat ini akan membuat Anda menggunakan bantuan pengkodean bertenaga AI dalam beberapa menit. Di akhir panduan, Anda akan memahami cara menggunakan Claude Code untuk tugas-tugas pengembangan umum.

640 

641<Experiment flag="quickstart-install-configurator" treatment={<InstallConfigurator />} />

642 

643## Sebelum Anda memulai

644 

645Pastikan Anda memiliki:

646 

647* Terminal atau command prompt yang terbuka

648 * Jika Anda belum pernah menggunakan terminal sebelumnya, lihat [panduan terminal](/id/terminal-guide)

649* Proyek kode untuk dikerjakan

650* [Langganan Claude](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=quickstart_prereq) (Pro, Max, Teams, atau Enterprise), akun [Claude Console](https://console.anthropic.com/), atau akses melalui [penyedia cloud yang didukung](/id/third-party-integrations)

651 

652<Note>

653 Panduan ini mencakup CLI terminal. Claude Code juga tersedia di [web](https://claude.ai/code), sebagai [aplikasi desktop](/id/desktop), di [VS Code](/id/vs-code) dan [IDE JetBrains](/id/jetbrains), di [Slack](/id/slack), dan di CI/CD dengan [GitHub Actions](/id/github-actions) dan [GitLab](/id/gitlab-ci-cd). Lihat [semua antarmuka](/id/overview#use-claude-code-everywhere).

654</Note>

655 

656## Langkah 1: Instal Claude Code

657 

658To install Claude Code, use one of the following methods:

659 

660<Tabs>

661 <Tab title="Native Install (Recommended)">

662 **macOS, Linux, WSL:**

663 

664 ```bash theme={null}

665 curl -fsSL https://claude.ai/install.sh | bash

666 ```

667 

668 **Windows PowerShell:**

669 

670 ```powershell theme={null}

671 irm https://claude.ai/install.ps1 | iex

672 ```

673 

674 **Windows CMD:**

675 

676 ```batch theme={null}

677 curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd

678 ```

679 

680 If you see `The token '&&' is not a valid statement separator`, you're in PowerShell, not CMD. If you see `'irm' is not recognized as an internal or external command`, you're in CMD, not PowerShell. Your prompt shows `PS C:\` when you're in PowerShell and `C:\` without the `PS` when you're in CMD.

681 

682 [Git for Windows](https://git-scm.com/downloads/win) is recommended on native Windows so Claude Code can use the Bash tool. If Git for Windows is not installed, Claude Code uses PowerShell as the shell tool instead. WSL setups do not need Git for Windows.

683 

684 <Info>

685 Native installations automatically update in the background to keep you on the latest version.

686 </Info>

687 </Tab>

688 

689 <Tab title="Homebrew">

690 ```bash theme={null}

691 brew install --cask claude-code

692 ```

693 

694 Homebrew offers two casks. `claude-code` tracks the stable release channel, which is typically about a week behind and skips releases with major regressions. `claude-code@latest` tracks the latest channel and receives new versions as soon as they ship.

695 

696 <Info>

697 Homebrew installations do not auto-update. Run `brew upgrade claude-code` or `brew upgrade claude-code@latest`, depending on which cask you installed, to get the latest features and security fixes.

698 </Info>

699 </Tab>

700 

701 <Tab title="WinGet">

702 ```powershell theme={null}

703 winget install Anthropic.ClaudeCode

704 ```

705 

706 <Info>

707 WinGet installations do not auto-update. Run `winget upgrade Anthropic.ClaudeCode` periodically to get the latest features and security fixes.

708 </Info>

709 </Tab>

710</Tabs>

711 

712You can also install with [apt, dnf, or apk](/en/setup#install-with-linux-package-managers) on Debian, Fedora, RHEL, and Alpine.

713 

714## Langkah 2: Masuk ke akun Anda

715 

716Claude Code memerlukan akun untuk digunakan. Ketika Anda memulai sesi interaktif dengan perintah `claude`, Anda perlu masuk:

717 

718```bash theme={null}

719claude

720# Anda akan diminta untuk masuk pada penggunaan pertama

721```

722 

723```bash theme={null}

724/login

725# Ikuti petunjuk untuk masuk dengan akun Anda

726```

727 

728Anda dapat masuk menggunakan salah satu jenis akun ini:

729 

730* [Claude Pro, Max, Teams, atau Enterprise](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=quickstart_login) (direkomendasikan)

731* [Claude Console](https://console.anthropic.com/) (akses API dengan kredit prabayar). Pada login pertama, ruang kerja "Claude Code" secara otomatis dibuat di Console untuk pelacakan biaya terpusat.

732* [Amazon Bedrock, Google Vertex AI, atau Microsoft Foundry](/id/third-party-integrations) (penyedia cloud enterprise)

733 

734Setelah masuk, kredensial Anda disimpan dan Anda tidak perlu masuk lagi. Untuk beralih akun nanti, gunakan perintah `/login`.

735 

736## Langkah 3: Mulai sesi pertama Anda

737 

738Buka terminal Anda di direktori proyek mana pun dan mulai Claude Code:

739 

740```bash theme={null}

741cd /path/to/your/project

742claude

743```

744 

745Anda akan melihat layar sambutan Claude Code dengan informasi sesi Anda, percakapan terbaru, dan pembaruan terbaru. Ketik `/help` untuk perintah yang tersedia atau `/resume` untuk melanjutkan percakapan sebelumnya.

746 

747<Tip>

748 Setelah masuk (Langkah 2), kredensial Anda disimpan di sistem Anda. Pelajari lebih lanjut di [Manajemen Kredensial](/id/authentication#credential-management).

749</Tip>

750 

751## Langkah 4: Ajukan pertanyaan pertama Anda

752 

753Mari kita mulai dengan memahami basis kode Anda. Coba salah satu perintah ini:

754 

755```text theme={null}

756apa yang dilakukan proyek ini?

757```

758 

759Claude akan menganalisis file Anda dan memberikan ringkasan. Anda juga dapat mengajukan pertanyaan yang lebih spesifik:

760 

761```text theme={null}

762teknologi apa yang digunakan proyek ini?

763```

764 

765```text theme={null}

766di mana titik masuk utama?

767```

768 

769```text theme={null}

770jelaskan struktur folder

771```

772 

773Anda juga dapat menanyakan Claude tentang kemampuannya sendiri:

774 

775```text theme={null}

776apa yang dapat dilakukan Claude Code?

777```

778 

779```text theme={null}

780bagaimana cara membuat skills kustom di Claude Code?

781```

782 

783```text theme={null}

784bisakah Claude Code bekerja dengan Docker?

785```

786 

787<Note>

788 Claude Code membaca file proyek Anda sesuai kebutuhan. Anda tidak perlu menambahkan konteks secara manual.

789</Note>

790 

791## Langkah 5: Buat perubahan kode pertama Anda

792 

793Sekarang mari buat Claude Code melakukan beberapa pengkodean aktual. Coba tugas sederhana:

794 

795```text theme={null}

796tambahkan fungsi hello world ke file utama

797```

798 

799Claude Code akan:

800 

8011. Menemukan file yang sesuai

8022. Menampilkan perubahan yang diusulkan

8033. Meminta persetujuan Anda

8044. Membuat edit

805 

806<Note>

807 Claude Code selalu meminta izin sebelum memodifikasi file. Anda dapat menyetujui perubahan individual atau mengaktifkan mode "Terima semua" untuk sesi.

808</Note>

809 

810## Langkah 6: Gunakan Git dengan Claude Code

811 

812Claude Code membuat operasi Git menjadi percakapan:

813 

814```text theme={null}

815file apa yang telah saya ubah?

816```

817 

818```text theme={null}

819komit perubahan saya dengan pesan deskriptif

820```

821 

822Anda juga dapat meminta operasi Git yang lebih kompleks:

823 

824```text theme={null}

825buat cabang baru bernama feature/quickstart

826```

827 

828```text theme={null}

829tunjukkan 5 komit terakhir saya

830```

831 

832```text theme={null}

833bantu saya menyelesaikan konflik penggabungan

834```

835 

836## Langkah 7: Perbaiki bug atau tambahkan fitur

837 

838Claude mahir dalam debugging dan implementasi fitur.

839 

840Jelaskan apa yang Anda inginkan dalam bahasa alami:

841 

842```text theme={null}

843tambahkan validasi input ke formulir pendaftaran pengguna

844```

845 

846Atau perbaiki masalah yang ada:

847 

848```text theme={null}

849ada bug di mana pengguna dapat mengirimkan formulir kosong - perbaiki

850```

851 

852Claude Code akan:

853 

854* Menemukan kode yang relevan

855* Memahami konteksnya

856* Menerapkan solusi

857* Menjalankan tes jika tersedia

858 

859## Langkah 8: Coba alur kerja umum lainnya

860 

861Ada beberapa cara untuk bekerja dengan Claude:

862 

863**Refaktor kode**

864 

865```text theme={null}

866refaktor modul autentikasi untuk menggunakan async/await alih-alih callback

867```

868 

869**Tulis tes**

870 

871```text theme={null}

872tulis unit test untuk fungsi kalkulator

873```

874 

875**Perbarui dokumentasi**

876 

877```text theme={null}

878perbarui README dengan instruksi instalasi

879```

880 

881**Tinjauan kode**

882 

883```text theme={null}

884tinjau perubahan saya dan sarankan perbaikan

885```

886 

887<Tip>

888 Berbicara dengan Claude seperti Anda berbicara dengan rekan kerja yang membantu. Jelaskan apa yang ingin Anda capai, dan Claude akan membantu Anda mencapainya.

889</Tip>

890 

891## Perintah penting

892 

893Berikut adalah perintah paling penting untuk penggunaan sehari-hari:

894 

895| Perintah | Apa yang dilakukannya | Contoh |

896| ------------------- | -------------------------------------------------- | ----------------------------------- |

897| `claude` | Mulai mode interaktif | `claude` |

898| `claude "task"` | Jalankan tugas satu kali | `claude "perbaiki kesalahan build"` |

899| `claude -p "query"` | Jalankan kueri sekali, lalu keluar | `claude -p "jelaskan fungsi ini"` |

900| `claude -c` | Lanjutkan percakapan terbaru di direktori saat ini | `claude -c` |

901| `claude -r` | Lanjutkan percakapan sebelumnya | `claude -r` |

902| `claude commit` | Buat komit Git | `claude commit` |

903| `/clear` | Hapus riwayat percakapan | `/clear` |

904| `/help` | Tampilkan perintah yang tersedia | `/help` |

905| `exit` atau Ctrl+C | Keluar dari Claude Code | `exit` |

906 

907Lihat [referensi CLI](/id/cli-reference) untuk daftar lengkap perintah.

908 

909## Tips pro untuk pemula

910 

911Untuk informasi lebih lanjut, lihat [praktik terbaik](/id/best-practices) dan [alur kerja umum](/id/common-workflows).

912 

913<AccordionGroup>

914 <Accordion title="Jadilah spesifik dengan permintaan Anda">

915 Alih-alih: "perbaiki bug"

916 

917 Coba: "perbaiki bug login di mana pengguna melihat layar kosong setelah memasukkan kredensial yang salah"

918 </Accordion>

919 

920 <Accordion title="Gunakan instruksi langkah demi langkah">

921 Pecah tugas kompleks menjadi langkah-langkah:

922 

923 ```text theme={null}

924 1. buat tabel database baru untuk profil pengguna

925 2. buat endpoint API untuk mendapatkan dan memperbarui profil pengguna

926 3. bangun halaman web yang memungkinkan pengguna melihat dan mengedit informasi mereka

927 ```

928 </Accordion>

929 

930 <Accordion title="Biarkan Claude menjelajahi terlebih dahulu">

931 Sebelum membuat perubahan, biarkan Claude memahami kode Anda:

932 

933 ```text theme={null}

934 analisis skema database

935 ```

936 

937 ```text theme={null}

938 bangun dasbor yang menampilkan produk yang paling sering dikembalikan oleh pelanggan Inggris kami

939 ```

940 </Accordion>

941 

942 <Accordion title="Hemat waktu dengan pintasan keyboard">

943 * Tekan `?` untuk melihat semua pintasan keyboard yang tersedia

944 * Gunakan Tab untuk penyelesaian perintah

945 * Tekan ↑ untuk riwayat perintah

946 * Ketik `/` untuk melihat semua perintah dan skills

947 </Accordion>

948</AccordionGroup>

949 

950## Apa selanjutnya?

951 

952Sekarang yang Anda telah mempelajari dasar-dasarnya, jelajahi fitur-fitur yang lebih canggih:

953 

954<CardGroup cols={2}>

955 <Card title="Cara kerja Claude Code" icon="microchip" href="/id/how-claude-code-works">

956 Pahami loop agentic, alat bawaan, dan cara Claude Code berinteraksi dengan proyek Anda

957 </Card>

958 

959 <Card title="Praktik terbaik" icon="star" href="/id/best-practices">

960 Dapatkan hasil yang lebih baik dengan prompting yang efektif dan pengaturan proyek

961 </Card>

962 

963 <Card title="Alur kerja umum" icon="graduation-cap" href="/id/common-workflows">

964 Panduan langkah demi langkah untuk tugas-tugas umum

965 </Card>

966 

967 <Card title="Perluas Claude Code" icon="puzzle-piece" href="/id/features-overview">

968 Sesuaikan dengan CLAUDE.md, skills, hooks, MCP, dan lainnya

969 </Card>

970</CardGroup>

971 

972## Mendapatkan bantuan

973 

974* **Di Claude Code**: Ketik `/help` atau tanya "bagaimana cara saya..."

975* **Dokumentasi**: Anda di sini! Jelajahi panduan lainnya

976* **Komunitas**: Bergabunglah dengan [Discord](https://www.anthropic.com/discord) kami untuk tips dan dukungan

remote-control.md +259 −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# Lanjutkan sesi lokal dari perangkat apa pun dengan Remote Control

6 

7> Lanjutkan sesi Claude Code lokal dari ponsel, tablet, atau browser apa pun menggunakan Remote Control. Bekerja dengan claude.ai/code dan aplikasi Claude mobile.

8 

9<Note>

10 Remote Control sedang dalam pratinjau penelitian dan tersedia di semua paket. Di Tim dan Enterprise, Remote Control dimatikan secara default sampai admin mengaktifkan toggle Remote Control di [pengaturan admin Claude Code](https://claude.ai/admin-settings/claude-code).

11</Note>

12 

13Remote Control menghubungkan [claude.ai/code](https://claude.ai/code) atau aplikasi Claude untuk [iOS](https://apps.apple.com/us/app/claude-by-anthropic/id6473753684) dan [Android](https://play.google.com/store/apps/details?id=com.anthropic.claude) ke sesi Claude Code yang berjalan di mesin Anda. Mulai tugas di meja Anda, kemudian lanjutkan dari ponsel Anda di sofa atau browser di komputer lain.

14 

15Ketika Anda memulai sesi Remote Control di mesin Anda, Claude terus berjalan secara lokal sepanjang waktu, jadi tidak ada yang pindah ke cloud. Dengan Remote Control Anda dapat:

16 

17* **Gunakan lingkungan lokal penuh Anda dari jarak jauh**: sistem file, [MCP servers](/id/mcp), alat, dan konfigurasi proyek Anda tetap tersedia, dan mengetik `@` melengkapi otomatis jalur file dari proyek lokal Anda

18* **Bekerja dari kedua permukaan sekaligus**: percakapan tetap tersinkronisasi di semua perangkat yang terhubung, sehingga Anda dapat mengirim pesan dari terminal, browser, dan ponsel Anda secara bergantian

19* **Bertahan dari gangguan**: jika laptop Anda tidur atau jaringan Anda terputus, sesi akan terhubung kembali secara otomatis ketika mesin Anda kembali online

20 

21Tidak seperti [Claude Code di web](/id/claude-code-on-the-web), yang berjalan di infrastruktur cloud, sesi Remote Control berjalan langsung di mesin Anda dan berinteraksi dengan sistem file lokal Anda. Antarmuka web dan mobile hanyalah jendela ke sesi lokal tersebut.

22 

23<Note>

24 Remote Control memerlukan Claude Code v2.1.51 atau lebih baru. Periksa versi Anda dengan `claude --version`.

25</Note>

26 

27Halaman ini mencakup pengaturan, cara memulai dan terhubung ke sesi, dan bagaimana Remote Control dibandingkan dengan Claude Code di web.

28 

29## Persyaratan

30 

31Sebelum menggunakan Remote Control, konfirmasi bahwa lingkungan Anda memenuhi kondisi berikut:

32 

33* **Langganan**: tersedia di paket Pro, Max, Tim, dan Enterprise. Kunci API tidak didukung. Di Tim dan Enterprise, admin harus terlebih dahulu mengaktifkan toggle Remote Control di [pengaturan admin Claude Code](https://claude.ai/admin-settings/claude-code).

34* **Autentikasi**: jalankan `claude` dan gunakan `/login` untuk masuk melalui claude.ai jika Anda belum melakukannya.

35* **Kepercayaan ruang kerja**: jalankan `claude` di direktori proyek Anda setidaknya sekali untuk menerima dialog kepercayaan ruang kerja.

36 

37## Mulai sesi Remote Control

38 

39Anda dapat memulai sesi Remote Control dari CLI atau ekstensi VS Code. CLI menawarkan tiga mode invokasi; VS Code menggunakan perintah `/remote-control`.

40 

41<Tabs>

42 <Tab title="Mode server">

43 Navigasikan ke direktori proyek Anda dan jalankan:

44 

45 ```bash theme={null}

46 claude remote-control

47 ```

48 

49 Proses tetap berjalan di terminal Anda dalam mode server, menunggu koneksi jarak jauh. Ini menampilkan URL sesi yang dapat Anda gunakan untuk [terhubung dari perangkat lain](#connect-from-another-device), dan Anda dapat menekan spacebar untuk menampilkan kode QR untuk akses cepat dari ponsel Anda. Saat sesi jarak jauh aktif, terminal menampilkan status koneksi dan aktivitas alat.

50 

51 Bendera yang tersedia:

52 

53 | Bendera | Deskripsi |

54 | ----------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

55 | `--name "My Project"` | Tetapkan judul sesi khusus yang terlihat dalam daftar sesi di claude.ai/code. |

56 | `--remote-control-session-name-prefix <prefix>` | Awalan untuk nama sesi yang dibuat secara otomatis ketika tidak ada nama eksplisit yang ditetapkan. Default adalah nama mesin Anda, menghasilkan nama seperti `myhost-graceful-unicorn`. Atur `CLAUDE_REMOTE_CONTROL_SESSION_NAME_PREFIX` untuk efek yang sama. |

57 | `--spawn <mode>` | Bagaimana server membuat sesi.<br />• `same-dir` (default): semua sesi berbagi direktori kerja saat ini, sehingga dapat bertentangan jika mengedit file yang sama.<br />• `worktree`: setiap sesi sesuai permintaan mendapatkan [git worktree](/id/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees) miliknya sendiri. Memerlukan repositori git.<br />• `session`: mode sesi tunggal. Melayani tepat satu sesi dan menolak koneksi tambahan. Atur saat startup saja.<br />Tekan `w` saat runtime untuk beralih antara `same-dir` dan `worktree`. |

58 | `--capacity <N>` | Jumlah maksimum sesi bersamaan. Default adalah 32. Tidak dapat digunakan dengan `--spawn=session`. |

59 | `--verbose` | Tampilkan log koneksi dan sesi terperinci. |

60 | `--sandbox` / `--no-sandbox` | Aktifkan atau nonaktifkan [sandboxing](/id/sandboxing) untuk isolasi sistem file dan jaringan. Dimatikan secara default. |

61 </Tab>

62 

63 <Tab title="Sesi interaktif">

64 Untuk memulai sesi Claude Code interaktif normal dengan Remote Control diaktifkan, gunakan bendera `--remote-control` (atau `--rc`):

65 

66 ```bash theme={null}

67 claude --remote-control

68 ```

69 

70 Secara opsional berikan nama untuk sesi:

71 

72 ```bash theme={null}

73 claude --remote-control "My Project"

74 ```

75 

76 Ini memberi Anda sesi interaktif penuh di terminal Anda yang juga dapat Anda kontrol dari claude.ai atau aplikasi Claude. Tidak seperti `claude remote-control` (mode server), Anda dapat mengetik pesan secara lokal sementara sesi juga tersedia dari jarak jauh.

77 </Tab>

78 

79 <Tab title="Dari sesi yang ada">

80 Jika Anda sudah dalam sesi Claude Code dan ingin melanjutkannya dari jarak jauh, gunakan perintah `/remote-control` (atau `/rc`):

81 

82 ```text theme={null}

83 /remote-control

84 ```

85 

86 Berikan nama sebagai argumen untuk menetapkan judul sesi khusus:

87 

88 ```text theme={null}

89 /remote-control My Project

90 ```

91 

92 Ini memulai sesi Remote Control yang membawa riwayat percakapan saat ini dan menampilkan URL sesi dan kode QR yang dapat Anda gunakan untuk [terhubung dari perangkat lain](#connect-from-another-device). Bendera `--verbose`, `--sandbox`, dan `--no-sandbox` tidak tersedia dengan perintah ini.

93 </Tab>

94 

95 <Tab title="VS Code">

96 Di [ekstensi VS Code Claude Code](/id/vs-code), ketik `/remote-control` atau `/rc` di kotak prompt, atau buka menu perintah dengan `/` dan pilihnya. Memerlukan Claude Code v2.1.79 atau lebih baru.

97 

98 ```text theme={null}

99 /remote-control

100 ```

101 

102 Spanduk muncul di atas kotak prompt yang menunjukkan status koneksi. Setelah terhubung, klik **Open in browser** di spanduk untuk langsung ke sesi, atau temukan di daftar sesi di [claude.ai/code](https://claude.ai/code). URL sesi juga diposting dalam percakapan.

103 

104 Untuk memutuskan sambungan, klik ikon tutup di spanduk atau jalankan `/remote-control` lagi.

105 

106 Tidak seperti CLI, perintah VS Code tidak menerima argumen nama atau menampilkan kode QR. Judul sesi berasal dari riwayat percakapan Anda atau prompt pertama.

107 </Tab>

108</Tabs>

109 

110### Terhubung dari perangkat lain

111 

112Setelah sesi Remote Control aktif, Anda memiliki beberapa cara untuk terhubung dari perangkat lain:

113 

114* **Buka URL sesi** di browser apa pun untuk langsung ke sesi di [claude.ai/code](https://claude.ai/code).

115* **Pindai kode QR** yang ditampilkan bersama URL sesi untuk membukanya langsung di aplikasi Claude. Dengan `claude remote-control`, tekan spacebar untuk beralih tampilan kode QR.

116* **Buka [claude.ai/code](https://claude.ai/code) atau aplikasi Claude** dan temukan sesi berdasarkan nama dalam daftar sesi. Sesi Remote Control menampilkan ikon komputer dengan titik status hijau saat online.

117 

118Judul sesi jarak jauh dipilih dalam urutan ini:

119 

1201. Nama yang Anda berikan ke `--name`, `--remote-control`, atau `/remote-control`

1212. Judul yang Anda tetapkan dengan `/rename`

1223. Pesan bermakna terakhir dalam riwayat percakapan yang ada

1234. Nama yang dibuat secara otomatis seperti `myhost-graceful-unicorn`, di mana `myhost` adalah nama mesin Anda atau awalan yang Anda tetapkan dengan `--remote-control-session-name-prefix`

124 

125Jika Anda tidak menetapkan nama eksplisit, judul akan diperbarui untuk mencerminkan prompt Anda setelah Anda mengirimnya.

126 

127Jika lingkungan sudah memiliki sesi aktif, Anda akan ditanya apakah akan melanjutkannya atau memulai yang baru.

128 

129Jika Anda belum memiliki aplikasi Claude, gunakan perintah `/mobile` di dalam Claude Code untuk menampilkan kode QR unduhan untuk [iOS](https://apps.apple.com/us/app/claude-by-anthropic/id6473753684) atau [Android](https://play.google.com/store/apps/details?id=com.anthropic.claude).

130 

131### Aktifkan Remote Control untuk semua sesi

132 

133Secara default, Remote Control hanya diaktifkan ketika Anda secara eksplisit menjalankan `claude remote-control`, `claude --remote-control`, atau `/remote-control`. Untuk mengaktifkannya secara otomatis untuk setiap sesi interaktif, jalankan `/config` di dalam Claude Code dan atur **Enable Remote Control for all sessions** ke `true`. Atur kembali ke `false` untuk menonaktifkan.

134 

135Dengan pengaturan ini aktif, setiap proses Claude Code interaktif mendaftarkan satu sesi jarak jauh. Jika Anda menjalankan beberapa instance, masing-masing mendapatkan lingkungan dan sesi sendiri. Untuk menjalankan beberapa sesi bersamaan dari satu proses, gunakan [mode server](#start-a-remote-control-session) sebagai gantinya.

136 

137## Koneksi dan keamanan

138 

139Sesi Claude Code lokal Anda membuat permintaan HTTPS keluar saja dan tidak pernah membuka port masuk di mesin Anda. Ketika Anda memulai Remote Control, sesi tersebut mendaftarkan dengan API Anthropic dan polling untuk pekerjaan. Ketika Anda terhubung dari perangkat lain, server merutekan pesan antara klien web atau mobile dan sesi lokal Anda melalui koneksi streaming.

140 

141Semua lalu lintas berjalan melalui API Anthropic melalui TLS, keamanan transportasi yang sama seperti sesi Claude Code apa pun. Koneksi menggunakan beberapa kredensial berumur pendek, masing-masing dibatasi untuk satu tujuan dan kedaluwarsa secara independen.

142 

143## Remote Control vs Claude Code di web

144 

145Remote Control dan [Claude Code di web](/id/claude-code-on-the-web) keduanya menggunakan antarmuka claude.ai/code. Perbedaan utamanya adalah di mana sesi berjalan: Remote Control dieksekusi di mesin Anda, sehingga MCP servers lokal, alat, dan konfigurasi proyek Anda tetap tersedia. Claude Code di web dieksekusi di infrastruktur cloud yang dikelola Anthropic.

146 

147Gunakan Remote Control ketika Anda sedang dalam pekerjaan lokal dan ingin terus melanjutkan dari perangkat lain. Gunakan Claude Code di web ketika Anda ingin memulai tugas tanpa pengaturan lokal apa pun, bekerja pada repo yang tidak Anda miliki klonnya, atau menjalankan beberapa tugas secara paralel.

148 

149## Notifikasi push mobile

150 

151Ketika Remote Control aktif, Claude dapat mengirim notifikasi push ke ponsel Anda.

152 

153Claude memutuskan kapan harus push. Biasanya mengirim satu ketika tugas yang berjalan lama selesai atau ketika memerlukan keputusan dari Anda untuk melanjutkan. Anda juga dapat meminta push dalam prompt Anda, misalnya `notify me when the tests finish`. Selain toggle on/off di bawah, tidak ada konfigurasi per-event.

154 

155<Note>

156 Notifikasi push mobile memerlukan Claude Code v2.1.110 atau lebih baru.

157</Note>

158 

159Untuk menyiapkan notifikasi push mobile:

160 

161<Steps>

162 <Step title="Instal aplikasi Claude mobile">

163 Unduh aplikasi Claude untuk [iOS](https://apps.apple.com/us/app/claude-by-anthropic/id6473753684) atau [Android](https://play.google.com/store/apps/details?id=com.anthropic.claude).

164 </Step>

165 

166 <Step title="Masuk dengan akun Claude Code Anda">

167 Gunakan akun dan organisasi yang sama yang Anda gunakan untuk Claude Code di terminal.

168 </Step>

169 

170 <Step title="Izinkan notifikasi">

171 Terima prompt izin notifikasi dari sistem operasi.

172 </Step>

173 

174 <Step title="Aktifkan push di Claude Code">

175 Di terminal Anda, jalankan `/config` dan aktifkan **Push when Claude decides**.

176 </Step>

177</Steps>

178 

179Jika notifikasi tidak tiba:

180 

181* Jika `/config` menunjukkan **No mobile registered**, buka aplikasi Claude di ponsel Anda sehingga dapat menyegarkan token push-nya. Peringatan hilang saat Remote Control terhubung berikutnya.

182* Di iOS, Focus modes dan notification summaries dapat menekan atau menunda push. Periksa Settings → Notifications → Claude.

183* Di Android, optimasi baterai yang agresif dapat menunda pengiriman. Kecualikan aplikasi Claude dari optimasi baterai di pengaturan sistem.

184 

185## Keterbatasan

186 

187* **Satu sesi jarak jauh per proses interaktif**: di luar mode server, setiap instance Claude Code mendukung satu sesi jarak jauh pada satu waktu. Gunakan [mode server](#start-a-remote-control-session) untuk menjalankan beberapa sesi bersamaan dari satu proses.

188* **Proses lokal harus tetap berjalan**: Remote Control berjalan sebagai proses lokal. Jika Anda menutup terminal, keluar dari VS Code, atau menghentikan proses `claude`, sesi berakhir.

189* **Pemadaman jaringan yang diperpanjang**: jika mesin Anda aktif tetapi tidak dapat menjangkau jaringan selama lebih dari kira-kira 10 menit, sesi habis waktu dan proses keluar. Jalankan `claude remote-control` lagi untuk memulai sesi baru.

190* **Ultraplan memutuskan Remote Control**: memulai sesi [ultraplan](/id/ultraplan) memutuskan sesi Remote Control aktif apa pun karena kedua fitur menempati antarmuka claude.ai/code dan hanya satu yang dapat terhubung pada satu waktu.

191* **Beberapa perintah hanya lokal**: perintah yang membuka pemilih interaktif di terminal, seperti `/mcp`, `/plugin`, atau `/resume`, hanya bekerja dari CLI lokal. Perintah yang menghasilkan output teks, termasuk `/compact`, `/clear`, `/context`, `/usage`, `/exit`, `/extra-usage`, `/recap`, dan `/reload-plugins`, bekerja dari mobile dan web.

192 

193## Pemecahan masalah

194 

195### "Remote Control memerlukan langganan claude.ai"

196 

197Anda tidak diautentikasi dengan akun claude.ai. Jalankan `claude auth login` dan pilih opsi claude.ai. Jika `ANTHROPIC_API_KEY` diatur di lingkungan Anda, batalkan pengaturannya terlebih dahulu.

198 

199### "Remote Control memerlukan token login dengan cakupan penuh"

200 

201Anda diautentikasi dengan token berumur panjang dari `claude setup-token` atau variabel lingkungan `CLAUDE_CODE_OAUTH_TOKEN`. Token ini terbatas pada inference-only dan tidak dapat membuat sesi Remote Control. Jalankan `claude auth login` untuk autentikasi dengan token sesi cakupan penuh sebagai gantinya.

202 

203### "Tidak dapat menentukan organisasi Anda untuk kelayakan Remote Control"

204 

205Informasi akun cache Anda sudah usang atau tidak lengkap. Jalankan `claude auth login` untuk menyegarkannya.

206 

207### "Remote Control belum diaktifkan untuk akun Anda"

208 

209Pemeriksaan kelayakan dapat gagal dengan variabel lingkungan tertentu yang ada:

210 

211* `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` atau `DISABLE_TELEMETRY`: batalkan pengaturannya dan coba lagi.

212* `CLAUDE_CODE_USE_BEDROCK`, `CLAUDE_CODE_USE_VERTEX`, atau `CLAUDE_CODE_USE_FOUNDRY`: Remote Control memerlukan autentikasi claude.ai dan tidak bekerja dengan penyedia pihak ketiga.

213 

214Jika tidak ada yang diatur, jalankan `/logout` kemudian `/login` untuk menyegarkan.

215 

216### "Remote Control dinonaktifkan oleh kebijakan organisasi Anda"

217 

218Kesalahan ini memiliki tiga penyebab yang berbeda. Jalankan `/status` terlebih dahulu untuk melihat metode login dan langganan mana yang Anda gunakan.

219 

220* **Anda diautentikasi dengan kunci API atau akun Console**: Remote Control memerlukan OAuth claude.ai. Jalankan `/login` dan pilih opsi claude.ai. Jika `ANTHROPIC_API_KEY` diatur di lingkungan Anda, batalkan pengaturannya.

221* **Admin Tim atau Enterprise Anda belum mengaktifkannya**: Remote Control dimatikan secara default di paket ini. Admin dapat mengaktifkannya di [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code) dengan mengaktifkan toggle **Remote Control**. Ini adalah pengaturan organisasi sisi server, bukan kunci [pengaturan yang dikelola](/id/permissions#managed-only-settings).

222* **Toggle admin berwarna abu-abu**: organisasi Anda memiliki konfigurasi retensi data atau kepatuhan yang tidak kompatibel dengan Remote Control. Ini tidak dapat diubah dari panel admin. Hubungi dukungan Anthropic untuk membahas opsi.

223 

224### "Remote credentials fetch failed"

225 

226Claude Code tidak dapat memperoleh kredensial berumur pendek dari API Anthropic untuk membuat koneksi. Jalankan kembali dengan `--verbose` untuk melihat kesalahan lengkapnya:

227 

228```bash theme={null}

229claude remote-control --verbose

230```

231 

232Penyebab umum:

233 

234* Tidak masuk: jalankan `claude` dan gunakan `/login` untuk autentikasi dengan akun claude.ai Anda. Autentikasi kunci API tidak didukung untuk Remote Control.

235* Masalah jaringan atau proxy: firewall atau proxy dapat memblokir permintaan HTTPS keluar. Remote Control memerlukan akses ke API Anthropic di port 443.

236* Pembuatan sesi gagal: jika Anda juga melihat `Session creation failed — see debug log`, kegagalan terjadi lebih awal dalam pengaturan. Periksa bahwa langganan Anda aktif.

237 

238## Pilih pendekatan yang tepat

239 

240Claude Code offers several ways to work when you're not at your terminal. They differ in what triggers the work, where Claude runs, and how much you need to set up.

241 

242| | Trigger | Claude runs on | Setup | Best for |

243| :--------------------------------------------- | :--------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------ |

244| [Dispatch](/en/desktop#sessions-from-dispatch) | Message a task from the Claude mobile app | Your machine (Desktop) | [Pair the mobile app with Desktop](https://support.claude.com/en/articles/13947068) | Delegating work while you're away, minimal setup |

245| [Remote Control](/en/remote-control) | Drive a running session from [claude.ai/code](https://claude.ai/code) or the Claude mobile app | Your machine (CLI or VS Code) | Run `claude remote-control` | Steering in-progress work from another device |

246| [Channels](/en/channels) | Push events from a chat app like Telegram or Discord, or your own server | Your machine (CLI) | [Install a channel plugin](/en/channels#quickstart) or [build your own](/en/channels-reference) | Reacting to external events like CI failures or chat messages |

247| [Slack](/en/slack) | Mention `@Claude` in a team channel | Anthropic cloud | [Install the Slack app](/en/slack#setting-up-claude-code-in-slack) with [Claude Code on the web](/en/claude-code-on-the-web) enabled | PRs and reviews from team chat |

248| [Scheduled tasks](/en/scheduled-tasks) | Set a schedule | [CLI](/en/scheduled-tasks), [Desktop](/en/desktop-scheduled-tasks), or [cloud](/en/routines) | Pick a frequency | Recurring automation like daily reviews |

249 

250## Sumber daya terkait

251 

252* [Claude Code di web](/id/claude-code-on-the-web): jalankan sesi di lingkungan cloud yang dikelola Anthropic alih-alih di mesin Anda

253* [Ultraplan](/id/ultraplan): luncurkan sesi perencanaan cloud dari terminal Anda dan tinjau rencana di browser Anda

254* [Channels](/id/channels): teruskan Telegram, Discord, atau iMessage ke sesi sehingga Claude bereaksi terhadap pesan saat Anda pergi

255* [Dispatch](/id/desktop#sessions-from-dispatch): kirim pesan tugas dari ponsel Anda dan dapat menjalankan sesi Desktop untuk menanganinya

256* [Autentikasi](/id/authentication): atur `/login` dan kelola kredensial untuk claude.ai

257* [Referensi CLI](/id/cli-reference): daftar lengkap bendera dan perintah termasuk `claude remote-control`

258* [Keamanan](/id/security): bagaimana sesi Remote Control sesuai dengan model keamanan Claude Code

259* [Penggunaan data](/id/data-usage): data apa yang mengalir melalui API Anthropic selama sesi lokal dan jarak jauh

routines.md +319 −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# Otomatisasi pekerjaan dengan rutinitas

6 

7> Letakkan Claude Code pada autopilot. Tentukan rutinitas yang berjalan sesuai jadwal, dipicu oleh panggilan API, atau bereaksi terhadap peristiwa GitHub dari infrastruktur cloud yang dikelola Anthropic.

8 

9<Note>

10 Rutinitas berada dalam pratinjau penelitian. Perilaku, batas, dan permukaan API mungkin berubah.

11</Note>

12 

13Rutinitas adalah konfigurasi Claude Code yang disimpan: prompt, satu atau lebih repositori, dan serangkaian [konektor](/id/mcp), dikemas sekali dan dijalankan secara otomatis. Rutinitas dijalankan pada infrastruktur cloud yang dikelola Anthropic, sehingga terus bekerja ketika laptop Anda ditutup.

14 

15Setiap rutinitas dapat memiliki satu atau lebih pemicu yang terpasang padanya:

16 

17* **Terjadwal**: berjalan dengan frekuensi berulang seperti per jam, malam hari, atau mingguan

18* **API**: dipicu sesuai permintaan dengan mengirim POST HTTP ke titik akhir per-rutinitas dengan token pembawa

19* **GitHub**: berjalan secara otomatis sebagai respons terhadap peristiwa repositori seperti permintaan tarik atau rilis

20 

21Satu rutinitas dapat menggabungkan pemicu. Misalnya, rutinitas tinjauan PR dapat berjalan malam hari, dipicu dari skrip penyebaran, dan juga bereaksi terhadap setiap PR baru.

22 

23Rutinitas tersedia pada paket Pro, Max, Team, dan Enterprise dengan [Claude Code di web](/id/claude-code-on-the-web) diaktifkan. Buat dan kelola di [claude.ai/code/routines](https://claude.ai/code/routines), atau dari CLI dengan `/schedule`.

24 

25Halaman ini mencakup pembuatan rutinitas, mengonfigurasi setiap jenis pemicu, mengelola jalankan, dan bagaimana batas penggunaan berlaku.

26 

27## Contoh kasus penggunaan

28 

29Setiap contoh memasangkan jenis pemicu dengan jenis pekerjaan yang cocok untuk rutinitas: tanpa pengawasan, dapat diulang, dan terikat pada hasil yang jelas.

30 

31**Pemeliharaan backlog.** Pemicu jadwal berjalan setiap malam kerja terhadap pelacak masalah Anda melalui konektor. Rutinitas membaca masalah yang dibuka sejak jalankan terakhir, menerapkan label, menetapkan pemilik berdasarkan area kode yang direferensikan, dan memposting ringkasan ke Slack sehingga tim memulai hari dengan antrian yang terawat.

32 

33**Triase peringatan.** Alat pemantauan Anda memanggil titik akhir API rutinitas ketika ambang batas kesalahan terlampaui, meneruskan badan peringatan sebagai `text`. Rutinitas menarik jejak tumpukan, menghubungkannya dengan komit terbaru di repositori, dan membuka permintaan tarik draf dengan perbaikan yang diusulkan dan tautan kembali ke peringatan. On-call meninjau PR alih-alih memulai dari terminal kosong.

34 

35**Tinjauan kode khusus.** Pemicu GitHub berjalan pada `pull_request.opened`. Rutinitas menerapkan daftar periksa tinjauan tim Anda sendiri, meninggalkan komentar sebaris untuk masalah keamanan, kinerja, dan gaya, dan menambahkan komentar ringkasan sehingga peninjau manusia dapat fokus pada desain alih-alih pemeriksaan mekanis.

36 

37**Verifikasi penyebaran.** Saluran pipa CD Anda memanggil titik akhir API rutinitas setelah setiap penyebaran produksi. Rutinitas menjalankan pemeriksaan asap terhadap build baru, memindai log kesalahan untuk regresi, dan memposting go atau no-go ke saluran rilis sebelum jendela penyebaran ditutup.

38 

39**Hanyut dokumentasi.** Pemicu jadwal berjalan mingguan. Rutinitas memindai PR yang digabungkan sejak jalankan terakhir, menandai dokumentasi yang mereferensikan API yang berubah, dan membuka PR pembaruan terhadap repositori dokumen untuk editor ditinjau.

40 

41**Port perpustakaan.** Pemicu GitHub berjalan pada `pull_request.closed` disaring ke PR yang digabungkan di satu repositori SDK. Rutinitas memindahkan perubahan ke SDK paralel dalam bahasa lain dan membuka PR yang cocok, menjaga kedua perpustakaan tetap sinkron tanpa manusia mengimplementasikan ulang setiap perubahan.

42 

43Bagian di bawah ini menjelaskan cara membuat rutinitas dan mengonfigurasi setiap jenis pemicu ini.

44 

45## Buat rutinitas

46 

47Buat rutinitas dari web, aplikasi Desktop, atau CLI. Ketiga permukaan menulis ke akun cloud yang sama, sehingga rutinitas yang Anda buat di CLI muncul di claude.ai/code/routines segera. Di aplikasi Desktop, klik **New task** dan pilih **New remote task**; memilih **New local task** malah membuat [tugas terjadwal Desktop lokal](/id/desktop-scheduled-tasks), yang berjalan di mesin Anda dan bukan rutinitas.

48 

49Formulir pembuatan menyiapkan prompt rutinitas, repositori, lingkungan, konektor, dan pemicu.

50 

51Rutinitas berjalan secara otonom sebagai sesi cloud Claude Code penuh: tidak ada pemilih mode izin dan tidak ada prompt persetujuan selama jalankan. Sesi dapat menjalankan perintah shell, menggunakan [skills](/id/skills) yang berkomitmen pada repositori yang diklon, dan memanggil konektor apa pun yang Anda sertakan. Apa yang dapat dijangkau rutinitas ditentukan oleh repositori yang Anda pilih dan pengaturan push cabang mereka, [lingkungan](/id/claude-code-on-the-web#the-cloud-environment) akses jaringan dan variabel, dan konektor yang Anda sertakan. Cakupan masing-masing ke apa yang benar-benar dibutuhkan rutinitas.

52 

53Rutinitas milik akun claude.ai individual Anda. Mereka tidak dibagikan dengan rekan kerja, dan mereka dihitung terhadap tunjangan jalankan harian akun Anda. Apa pun yang dilakukan rutinitas melalui identitas GitHub yang terhubung atau konektor muncul sebagai Anda: komit dan permintaan tarik membawa pengguna GitHub Anda, dan pesan Slack, tiket Linear, atau tindakan konektor lainnya menggunakan akun tertaut Anda untuk layanan tersebut.

54 

55### Buat dari web

56 

57<Steps>

58 <Step title="Buka formulir pembuatan">

59 Kunjungi [claude.ai/code/routines](https://claude.ai/code/routines) dan klik **New routine**.

60 </Step>

61 

62 <Step title="Beri nama rutinitas dan tulis prompt">

63 Berikan rutinitas nama deskriptif dan tulis prompt yang Claude jalankan setiap kali. Prompt adalah bagian paling penting: rutinitas berjalan secara otonom, jadi prompt harus mandiri dan eksplisit tentang apa yang harus dilakukan dan seperti apa kesuksesan itu.

64 

65 Input prompt mencakup pemilih model. Claude menggunakan model yang dipilih pada setiap jalankan.

66 </Step>

67 

68 <Step title="Pilih repositori">

69 Tambahkan satu atau lebih repositori GitHub untuk Claude kerjakan. Setiap repositori diklon di awal jalankan, dimulai dari cabang default. Claude membuat cabang dengan awalan `claude/` untuk perubahannya. Untuk memungkinkan push ke cabang apa pun, aktifkan **Allow unrestricted branch pushes** untuk repositori tersebut.

70 </Step>

71 

72 <Step title="Pilih lingkungan">

73 Pilih [lingkungan cloud](/id/claude-code-on-the-web#the-cloud-environment) untuk rutinitas. Lingkungan mengontrol apa yang dapat diakses sesi cloud:

74 

75 * **Network access**: atur tingkat akses internet yang tersedia selama setiap jalankan

76 * **Environment variables**: sediakan kunci API, token, atau rahasia lainnya yang dapat digunakan Claude

77 * **Setup script**: instal dependensi dan alat yang dibutuhkan rutinitas. Hasilnya [di-cache](/id/claude-code-on-the-web#environment-caching), jadi skrip tidak berjalan ulang pada setiap sesi

78 

79 Lingkungan **Default** disediakan. Untuk menggunakan lingkungan khusus, [buat satu](/id/claude-code-on-the-web#the-cloud-environment) sebelum membuat rutinitas.

80 </Step>

81 

82 <Step title="Pilih pemicu">

83 Di bawah **Select a trigger**, pilih bagaimana rutinitas dimulai. Anda dapat memilih satu jenis pemicu atau menggabungkan beberapa.

84 

85 <Tabs>

86 <Tab title="Schedule">

87 Pilih frekuensi preset: per jam, harian, hari kerja, atau mingguan. Lihat [Add a schedule trigger](#add-a-schedule-trigger) untuk penanganan zona waktu, stagger, dan interval cron khusus.

88 </Tab>

89 

90 <Tab title="GitHub event">

91 Pilih repositori, peristiwa untuk bereaksi, dan filter opsional. Lihat [Add a GitHub trigger](#add-a-github-trigger) untuk daftar lengkap peristiwa yang didukung dan bidang filter.

92 </Tab>

93 

94 <Tab title="API">

95 Pilih **API** di sini, lalu simpan rutinitas. URL dan token dihasilkan setelah rutinitas disimpan, karena bergantung pada ID rutinitas. Lihat [Add an API trigger](#add-an-api-trigger) untuk menyalin URL dan menghasilkan token.

96 </Tab>

97 </Tabs>

98 </Step>

99 

100 <Step title="Tinjau konektor">

101 Semua [konektor MCP](/id/mcp) yang terhubung disertakan secara default. Hapus yang tidak dibutuhkan rutinitas. Konektor memberi Claude akses ke layanan eksternal seperti Slack, Linear, atau Google Drive selama setiap jalankan.

102 </Step>

103 

104 <Step title="Buat rutinitas">

105 Klik **Create**. Rutinitas muncul dalam daftar dan berjalan saat salah satu pemicunya cocok. Untuk memulai jalankan segera, klik **Run now** di halaman detail rutinitas.

106 

107 Setiap jalankan membuat sesi baru bersama sesi lainnya, di mana Anda dapat melihat apa yang dilakukan Claude, meninjau perubahan, dan membuat permintaan tarik.

108 </Step>

109</Steps>

110 

111### Buat dari CLI

112 

113Jalankan `/schedule` dalam sesi apa pun untuk membuat rutinitas terjadwal secara percakapan. Anda juga dapat meneruskan deskripsi langsung, seperti `/schedule daily PR review at 9am`. Claude menjalani informasi yang sama yang dikumpulkan formulir web, lalu menyimpan rutinitas ke akun Anda.

114 

115`/schedule` di CLI hanya membuat rutinitas terjadwal. Untuk menambahkan pemicu API atau GitHub, edit rutinitas di web di [claude.ai/code/routines](https://claude.ai/code/routines).

116 

117CLI juga mendukung pengelolaan rutinitas yang ada. Jalankan `/schedule list` untuk melihat semua rutinitas, `/schedule update` untuk mengubah satu, atau `/schedule run` untuk memicunya segera.

118 

119### Buat dari aplikasi Desktop

120 

121Buka halaman **Schedule** di aplikasi Desktop, klik **New task**, dan pilih **New remote task**. Aplikasi Desktop menampilkan tugas terjadwal lokal dan rutinitas dalam grid yang sama. Lihat [Desktop scheduled tasks](/id/desktop-scheduled-tasks) untuk detail tentang opsi lokal.

122 

123## Konfigurasi pemicu

124 

125Rutinitas dimulai ketika salah satu pemicunya cocok. Anda dapat melampirkan kombinasi apa pun dari pemicu jadwal, API, dan GitHub ke rutinitas yang sama, dan menambah atau menghapusnya kapan saja dari bagian **Select a trigger** formulir edit rutinitas.

126 

127### Tambahkan pemicu jadwal

128 

129Pemicu jadwal menjalankan rutinitas dengan frekuensi berulang. Pilih frekuensi preset di bagian **Select a trigger**: per jam, harian, hari kerja, atau mingguan. Waktu dimasukkan dalam zona lokal Anda dan dikonversi secara otomatis, sehingga rutinitas berjalan pada waktu dinding jam itu terlepas dari di mana infrastruktur cloud berada.

130 

131Jalankan mungkin dimulai beberapa menit setelah waktu terjadwal karena stagger. Offset konsisten untuk setiap rutinitas.

132 

133Untuk interval khusus seperti setiap dua jam atau tanggal pertama setiap bulan, pilih preset terdekat dalam formulir, lalu jalankan `/schedule update` di CLI untuk menetapkan ekspresi cron spesifik. Interval minimum adalah satu jam; ekspresi yang berjalan lebih sering ditolak.

134 

135### Tambahkan pemicu API

136 

137Pemicu API memberikan rutinitas titik akhir HTTP khusus. POSTing ke titik akhir dengan token pembawa rutinitas memulai sesi baru dan mengembalikan URL sesi. Gunakan ini untuk menghubungkan Claude Code ke sistem peringatan, saluran pipa penyebaran, alat internal, atau di mana pun Anda dapat membuat permintaan HTTP yang diautentikasi.

138 

139Pemicu API ditambahkan ke rutinitas yang ada dari web. CLI saat ini tidak dapat membuat atau mencabut token.

140 

141<Steps>

142 <Step title="Buka rutinitas untuk diedit">

143 Buka [claude.ai/code/routines](https://claude.ai/code/routines), klik rutinitas yang ingin Anda picu melalui API, lalu klik ikon pensil untuk membuka **Edit routine**.

144 </Step>

145 

146 <Step title="Tambahkan pemicu API">

147 Gulir ke bagian **Select a trigger** di bawah prompt, klik **Add another trigger**, dan pilih **API**.

148 </Step>

149 

150 <Step title="Salin URL dan hasilkan token">

151 Modal menampilkan URL untuk rutinitas ini bersama dengan contoh perintah curl. Salin URL, lalu klik **Generate token** dan salin token segera. Token ditampilkan sekali dan tidak dapat diambil nanti, jadi simpan di tempat yang aman seperti penyimpanan rahasia alat peringatan Anda.

152 </Step>

153 

154 <Step title="Panggil titik akhir">

155 Kirim token di header `Authorization: Bearer` ketika Anda POST ke URL. Bagian [Trigger a routine](#trigger-a-routine) di bawah menunjukkan contoh lengkap.

156 </Step>

157</Steps>

158 

159Setiap rutinitas memiliki token sendiri, dibatasi untuk memicu rutinitas itu saja. Untuk memutar atau mencabut, kembali ke modal yang sama dan klik **Regenerate** atau **Revoke**.

160 

161#### Picu rutinitas

162 

163Kirim permintaan POST ke titik akhir `/fire` dengan token pembawa di header `Authorization`. Badan permintaan menerima bidang `text` opsional untuk konteks spesifik jalankan seperti badan peringatan atau log yang gagal, diteruskan ke rutinitas bersama prompt yang disimpannya. Nilainya adalah teks freeform dan tidak diuraikan: jika Anda mengirim JSON atau muatan terstruktur lainnya, rutinitas menerimanya sebagai string literal.

164 

165Contoh di bawah memicu rutinitas dari shell:

166 

167```bash theme={null}

168curl -X POST https://api.anthropic.com/v1/claude_code/routines/trig_01ABCDEFGHJKLMNOPQRSTUVW/fire \

169 -H "Authorization: Bearer sk-ant-oat01-xxxxx" \

170 -H "anthropic-beta: experimental-cc-routine-2026-04-01" \

171 -H "anthropic-version: 2023-06-01" \

172 -H "Content-Type: application/json" \

173 -d '{"text": "Sentry alert SEN-4521 fired in prod. Stack trace attached."}'

174```

175 

176Permintaan yang berhasil mengembalikan badan JSON dengan ID sesi baru dan URL:

177 

178```json theme={null}

179{

180 "type": "routine_fire",

181 "claude_code_session_id": "session_01HJKLMNOPQRSTUVWXYZ",

182 "claude_code_session_url": "https://claude.ai/code/session_01HJKLMNOPQRSTUVWXYZ"

183}

184```

185 

186Buka URL sesi di browser untuk menonton jalankan secara real-time, meninjau perubahan, atau melanjutkan percakapan secara manual.

187 

188<Warning>

189 Titik akhir `/fire` dikirim di bawah header beta `experimental-cc-routine-2026-04-01`. Bentuk permintaan dan respons, batas laju, dan semantik token mungkin berubah saat fitur berada dalam pratinjau penelitian. Perubahan yang merusak dikirim di balik versi header beta bertanggal baru, dan dua versi header sebelumnya paling baru terus bekerja sehingga pemanggil memiliki waktu untuk bermigrasi.

190</Warning>

191 

192#### Referensi API

193 

194Untuk referensi API lengkap, termasuk semua respons kesalahan, aturan validasi, dan batas bidang, lihat [Trigger a routine via API](https://platform.claude.com/docs/id/api/claude-code/routines-fire) dalam dokumentasi Platform Claude.

195 

196Titik akhir `/fire` tersedia untuk pengguna claude.ai saja dan bukan bagian dari permukaan API Platform Claude.

197 

198### Tambahkan pemicu GitHub

199 

200Pemicu GitHub memulai sesi baru secara otomatis ketika peristiwa yang cocok terjadi pada repositori yang terhubung. Setiap peristiwa yang cocok memulai sesinya sendiri.

201 

202<Note>

203 Selama pratinjau penelitian, peristiwa webhook GitHub tunduk pada batas per jam per-rutinitas dan per-akun. Peristiwa di luar batas dijatuhkan sampai jendela direset. Lihat batas saat ini Anda di [claude.ai/code/routines](https://claude.ai/code/routines).

204</Note>

205 

206Pemicu GitHub dikonfigurasi dari UI web saja.

207 

208<Steps>

209 <Step title="Buka rutinitas untuk diedit">

210 Buka [claude.ai/code/routines](https://claude.ai/code/routines), klik rutinitas, lalu klik ikon pensil untuk membuka **Edit routine**.

211 </Step>

212 

213 <Step title="Tambahkan pemicu peristiwa GitHub">

214 Gulir ke bagian **Select a trigger**, klik **Add another trigger**, dan pilih **GitHub event**.

215 </Step>

216 

217 <Step title="Instal Aplikasi GitHub Claude">

218 Aplikasi GitHub Claude harus diinstal pada repositori yang ingin Anda berlangganan. Penyiapan pemicu meminta Anda untuk menginstalnya jika belum.

219 

220 <Note>

221 Menjalankan `/web-setup` di CLI memberikan akses repositori untuk kloning, tetapi tidak menginstal Aplikasi GitHub Claude dan tidak mengaktifkan pengiriman webhook. Pemicu GitHub memerlukan penginstalan Aplikasi GitHub Claude, yang diminta penyiapan pemicu untuk dilakukan.

222 </Note>

223 </Step>

224 

225 <Step title="Konfigurasi pemicu">

226 Pilih repositori, pilih peristiwa dari daftar [peristiwa yang didukung](#supported-events), dan secara opsional tambahkan filter. Simpan pemicu.

227 </Step>

228</Steps>

229 

230#### Peristiwa yang didukung

231 

232Pemicu GitHub dapat berlangganan salah satu dari kategori peristiwa berikut. Dalam setiap kategori Anda dapat memilih tindakan spesifik, seperti `pull_request.opened`, atau bereaksi terhadap semua tindakan dalam kategori.

233 

234| Peristiwa | Dipicu ketika |

235| :----------- | :------------------------------------------------------------------------------------- |

236| Pull request | PR dibuka, ditutup, ditugaskan, diberi label, disinkronkan, atau diperbarui sebaliknya |

237| Release | Rilis dibuat, dipublikasikan, diedit, atau dihapus |

238 

239#### Filter permintaan tarik

240 

241Gunakan filter untuk mempersempit permintaan tarik mana yang memulai sesi baru. Semua kondisi filter harus cocok agar rutinitas dipicu. Bidang filter yang tersedia adalah:

242 

243| Filter | Cocok |

244| :---------- | :------------------------------ |

245| Author | Nama pengguna GitHub penulis PR |

246| Title | Teks judul PR |

247| Body | Teks deskripsi PR |

248| Base branch | Cabang yang ditargetkan PR |

249| Head branch | Cabang yang berasal dari PR |

250| Labels | Label yang diterapkan pada PR |

251| Is draft | Apakah PR dalam status draf |

252| Is merged | Apakah PR telah digabungkan |

253| From fork | Apakah PR berasal dari fork |

254 

255Setiap filter memasangkan bidang dengan operator: sama dengan, berisi, dimulai dengan, adalah salah satu, bukan salah satu, atau cocok regex.

256 

257Operator `matches regex` menguji seluruh nilai bidang, bukan substring di dalamnya. Untuk mencocokkan judul apa pun yang berisi `hotfix`, tulis `.*hotfix.*`. Tanpa `.*` di sekitarnya, filter hanya cocok dengan judul yang tepat `hotfix` tanpa apa pun sebelum atau sesudah. Untuk pencocokan substring literal tanpa sintaks regex, gunakan operator `contains` sebagai gantinya.

258 

259Beberapa contoh kombinasi filter:

260 

261* **Auth module review**: base branch `main`, head branch berisi `auth-provider`. Mengirim PR apa pun yang menyentuh autentikasi ke peninjau yang fokus.

262* **External contributor triage**: from fork adalah `true`. Merutekan setiap PR berbasis fork melalui tinjauan keamanan dan gaya ekstra sebelum manusia melihatnya.

263* **Ready-for-review only**: is draft adalah `false`. Melewati draf sehingga rutinitas hanya berjalan ketika PR siap untuk ditinjau.

264* **Label-gated backport**: labels termasuk `needs-backport`. Memicu rutinitas port-ke-cabang-lain hanya ketika pengelola memberi tag PR.

265 

266#### Bagaimana sesi memetakan ke peristiwa

267 

268Setiap peristiwa GitHub yang cocok memulai sesi baru. Penggunaan ulang sesi di seluruh peristiwa tidak tersedia untuk rutinitas yang dipicu GitHub, jadi dua pembaruan PR menghasilkan dua sesi independen.

269 

270## Kelola rutinitas

271 

272Klik rutinitas dalam daftar untuk membuka halaman detailnya. Halaman detail menampilkan repositori rutinitas, konektor, prompt, jadwal, token API, pemicu GitHub, dan daftar jalankan masa lalu.

273 

274### Lihat dan berinteraksi dengan jalankan

275 

276Klik jalankan apa pun untuk membukanya sebagai sesi penuh. Dari sana Anda dapat melihat apa yang dilakukan Claude, meninjau perubahan, membuat permintaan tarik, atau melanjutkan percakapan. Setiap sesi jalankan bekerja seperti sesi lainnya: gunakan menu dropdown di sebelah judul sesi untuk mengganti nama, mengarsipkan, atau menghapusnya.

277 

278### Edit dan kontrol rutinitas

279 

280Dari halaman detail rutinitas Anda dapat:

281 

282* Klik **Run now** untuk memulai jalankan segera tanpa menunggu waktu terjadwal berikutnya.

283* Gunakan toggle di bagian **Repeats** untuk menjeda atau melanjutkan jadwal. Rutinitas yang dijeda menyimpan konfigurasi mereka tetapi tidak berjalan sampai Anda mengaktifkan kembali.

284* Klik ikon pensil untuk membuka **Edit routine** dan ubah nama, prompt, repositori, lingkungan, konektor, atau pemicu rutinitas apa pun. Bagian **Select a trigger** adalah tempat Anda menambah atau menghapus jadwal, token API, dan pemicu peristiwa GitHub.

285* Klik ikon hapus untuk menghapus rutinitas. Sesi masa lalu yang dibuat oleh rutinitas tetap dalam daftar sesi Anda.

286 

287### Repositori dan izin cabang

288 

289Rutinitas memerlukan akses GitHub untuk mengklon repositori. Ketika Anda membuat rutinitas dari CLI dengan `/schedule`, Claude memeriksa apakah akun Anda memiliki GitHub yang terhubung dan meminta Anda menjalankan `/web-setup` jika tidak. Lihat [GitHub authentication options](/id/claude-code-on-the-web#github-authentication-options) untuk dua cara memberikan akses.

290 

291Setiap repositori yang Anda tambahkan diklon pada setiap jalankan. Claude dimulai dari cabang default repositori kecuali prompt Anda menentukan sebaliknya.

292 

293Secara default, Claude hanya dapat push ke cabang dengan awalan `claude/`. Ini mencegah rutinitas secara tidak sengaja memodifikasi cabang yang dilindungi atau jangka panjang. Untuk menghapus pembatasan ini untuk repositori spesifik, aktifkan **Allow unrestricted branch pushes** untuk repositori tersebut saat membuat atau mengedit rutinitas.

294 

295### Konektor

296 

297Rutinitas dapat menggunakan konektor MCP yang terhubung untuk membaca dari dan menulis ke layanan eksternal selama setiap jalankan. Misalnya, rutinitas yang melakukan triase permintaan dukungan mungkin membaca dari saluran Slack dan membuat masalah di Linear.

298 

299Ketika Anda membuat rutinitas, semua konektor yang saat ini terhubung disertakan secara default. Hapus yang tidak diperlukan untuk membatasi alat mana yang dapat diakses Claude selama jalankan. Anda juga dapat menambahkan konektor langsung dari formulir rutinitas.

300 

301Untuk mengelola atau menambahkan konektor di luar formulir rutinitas, kunjungi **Settings > Connectors** di claude.ai atau gunakan `/schedule update` di CLI.

302 

303### Lingkungan

304 

305Setiap rutinitas berjalan dalam [lingkungan cloud](/id/claude-code-on-the-web#the-cloud-environment) yang mengontrol akses jaringan, variabel lingkungan, dan skrip penyiapan. Konfigurasi lingkungan sebelum membuat rutinitas untuk memberi Claude akses ke API, menginstal dependensi, atau membatasi cakupan jaringan. Lihat [cloud environment](/id/claude-code-on-the-web#the-cloud-environment) untuk panduan penyiapan lengkap.

306 

307## Penggunaan dan batas

308 

309Rutinitas mengurangi penggunaan langganan dengan cara yang sama seperti sesi interaktif. Selain batas langganan standar, rutinitas memiliki batas harian tentang berapa banyak jalankan yang dapat dimulai per akun. Lihat konsumsi saat ini dan jalankan rutinitas harian yang tersisa di [claude.ai/code/routines](https://claude.ai/code/routines) atau [claude.ai/settings/usage](https://claude.ai/settings/usage).

310 

311Ketika rutinitas mencapai batas harian atau batas penggunaan langganan Anda, organisasi dengan penggunaan ekstra yang diaktifkan dapat terus menjalankan rutinitas pada overage terukur. Tanpa penggunaan ekstra, jalankan tambahan ditolak sampai jendela direset. Aktifkan penggunaan ekstra dari **Settings > Billing** di claude.ai.

312 

313## Sumber daya terkait

314 

315* [`/loop` and in-session scheduling](/id/scheduled-tasks): jadwalkan tugas lokal dalam sesi CLI terbuka

316* [Desktop scheduled tasks](/id/desktop-scheduled-tasks): tugas terjadwal lokal yang berjalan di mesin Anda dengan akses ke file lokal

317* [Cloud environment](/id/claude-code-on-the-web#the-cloud-environment): konfigurasi lingkungan runtime untuk sesi cloud

318* [MCP connectors](/id/mcp): hubungkan layanan eksternal seperti Slack, Linear, dan Google Drive

319* [GitHub Actions](/id/github-actions): jalankan Claude dalam saluran pipa CI pada peristiwa repositori

sandboxing.md +329 −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# Sandboxing

6 

7> Pelajari bagaimana alat bash sandboxed Claude Code menyediakan isolasi filesystem dan jaringan untuk eksekusi agen yang lebih aman dan mandiri.

8 

9## Ikhtisar

10 

11Claude Code menampilkan sandboxing asli untuk menyediakan lingkungan yang lebih aman untuk eksekusi agen sambil mengurangi kebutuhan akan prompt izin yang konstan. Alih-alih meminta izin untuk setiap perintah bash, sandboxing menciptakan batas yang ditentukan di awal di mana Claude Code dapat bekerja lebih bebas dengan risiko yang berkurang.

12 

13Alat bash sandboxed menggunakan primitif tingkat OS untuk memberlakukan isolasi filesystem dan jaringan.

14 

15## Mengapa sandboxing penting

16 

17Keamanan berbasis izin tradisional memerlukan persetujuan pengguna yang konstan untuk perintah bash. Meskipun ini memberikan kontrol, hal ini dapat menyebabkan:

18 

19* **Kelelahan persetujuan**: Berulang kali mengklik "setujui" dapat menyebabkan pengguna kurang memperhatikan apa yang mereka setujui

20* **Produktivitas berkurang**: Gangguan konstan memperlambat alur kerja pengembangan

21* **Otonomi terbatas**: Claude Code tidak dapat bekerja seefisien mungkin saat menunggu persetujuan

22 

23Sandboxing mengatasi tantangan ini dengan:

24 

251. **Mendefinisikan batas yang jelas**: Tentukan dengan tepat direktori dan host jaringan mana yang dapat diakses Claude Code

262. **Mengurangi prompt izin**: Perintah aman dalam sandbox tidak memerlukan persetujuan

273. **Mempertahankan keamanan**: Upaya untuk mengakses sumber daya di luar sandbox memicu notifikasi segera

284. **Memungkinkan otonomi**: Claude Code dapat berjalan lebih independen dalam batas yang ditentukan

29 

30<Warning>

31 Sandboxing yang efektif memerlukan **baik** isolasi filesystem maupun jaringan. Tanpa isolasi jaringan, agen yang dikompromikan dapat mengeksfiltrasikan file sensitif seperti kunci SSH. Tanpa isolasi filesystem, agen yang dikompromikan dapat memasang pintu belakang pada sumber daya sistem untuk mendapatkan akses jaringan. Saat mengonfigurasi sandboxing, penting untuk memastikan bahwa pengaturan yang dikonfigurasi tidak menciptakan bypass dalam sistem ini.

32</Warning>

33 

34## Cara kerjanya

35 

36### Isolasi filesystem

37 

38Alat bash sandboxed membatasi akses sistem file ke direktori tertentu:

39 

40* **Perilaku penulisan default**: Akses baca dan tulis ke direktori kerja saat ini dan subdirektorinya

41* **Perilaku pembacaan default**: Akses baca ke seluruh komputer, kecuali direktori tertentu yang ditolak

42* **Akses terblokir**: Tidak dapat memodifikasi file di luar direktori kerja saat ini tanpa izin eksplisit

43* **Dapat dikonfigurasi**: Tentukan jalur yang diizinkan dan ditolak khusus melalui pengaturan

44 

45Anda dapat memberikan akses tulis ke jalur tambahan menggunakan `sandbox.filesystem.allowWrite` dalam pengaturan Anda. Pembatasan ini diberlakukan pada tingkat OS (Seatbelt di macOS, bubblewrap di Linux), sehingga berlaku untuk semua perintah subprocess, termasuk alat seperti `kubectl`, `terraform`, dan `npm`, bukan hanya alat file Claude.

46 

47### Isolasi jaringan

48 

49Akses jaringan dikendalikan melalui server proxy yang berjalan di luar sandbox:

50 

51* **Pembatasan domain**: Hanya domain yang disetujui yang dapat diakses

52* **Konfirmasi pengguna**: Permintaan domain baru memicu prompt izin (kecuali [`allowManagedDomainsOnly`](/id/settings#sandbox-settings) diaktifkan, yang secara otomatis memblokir domain yang tidak diizinkan)

53* **Dukungan proxy khusus**: Pengguna tingkat lanjut dapat menerapkan aturan khusus pada lalu lintas keluar

54* **Cakupan komprehensif**: Pembatasan berlaku untuk semua skrip, program, dan subprocess yang dihasilkan oleh perintah

55 

56### Penegakan tingkat OS

57 

58Alat bash sandboxed memanfaatkan primitif keamanan sistem operasi:

59 

60* **macOS**: Menggunakan Seatbelt untuk penegakan sandbox

61* **Linux**: Menggunakan [bubblewrap](https://github.com/containers/bubblewrap) untuk isolasi

62* **WSL2**: Menggunakan bubblewrap, sama seperti Linux

63 

64WSL1 tidak didukung karena bubblewrap memerlukan fitur kernel yang hanya tersedia di WSL2.

65 

66Pembatasan tingkat OS ini memastikan bahwa semua proses anak yang dihasilkan oleh perintah Claude Code mewarisi batas keamanan yang sama.

67 

68## Memulai

69 

70### Prasyarat

71 

72Di **macOS**, sandboxing bekerja langsung menggunakan kerangka Seatbelt bawaan.

73 

74Di **Linux dan WSL2**, instal paket yang diperlukan terlebih dahulu:

75 

76<Tabs>

77 <Tab title="Ubuntu/Debian">

78 ```bash theme={null}

79 sudo apt-get install bubblewrap socat

80 ```

81 </Tab>

82 

83 <Tab title="Fedora">

84 ```bash theme={null}

85 sudo dnf install bubblewrap socat

86 ```

87 </Tab>

88</Tabs>

89 

90WSL1 tidak mendukung sandboxing karena kurangnya primitif namespace Linux yang diperlukan. Jika Anda melihat `Sandboxing requires WSL2`, tingkatkan distribusi Anda ke WSL2 atau jalankan Claude Code tanpa sandboxing.

91 

92Di WSL2, perintah sandboxed tidak dapat meluncurkan binari Windows seperti `cmd.exe`, `powershell.exe`, atau apa pun di bawah `/mnt/c/`. WSL menyerahkan ini ke host Windows melalui soket Unix, yang sandbox blokir. Jika perintah perlu memanggil binari Windows, tambahkan ke [`excludedCommands`](/id/settings#sandbox-settings) sehingga berjalan di luar sandbox.

93 

94### Aktifkan sandboxing

95 

96Anda dapat mengaktifkan sandboxing dengan menjalankan perintah `/sandbox`:

97 

98```text theme={null}

99/sandbox

100```

101 

102Ini membuka menu di mana Anda dapat memilih antara mode sandbox. Jika dependensi yang diperlukan hilang (seperti `bubblewrap` atau `socat` di Linux), menu menampilkan instruksi instalasi untuk platform Anda.

103 

104Secara default, jika sandbox tidak dapat dimulai (dependensi yang hilang atau platform yang tidak didukung), Claude Code menampilkan peringatan dan menjalankan perintah tanpa sandboxing. Untuk menjadikan ini kegagalan keras sebagai gantinya, atur [`sandbox.failIfUnavailable`](/id/settings#sandbox-settings) ke `true`. Ini dimaksudkan untuk penyebaran terkelola yang memerlukan sandboxing sebagai gerbang keamanan.

105 

106### Mode sandbox

107 

108Claude Code menawarkan dua mode sandbox:

109 

110**Mode izin otomatis**: Perintah Bash akan mencoba berjalan di dalam sandbox dan secara otomatis diizinkan tanpa memerlukan izin. Perintah yang tidak dapat di-sandbox (seperti yang memerlukan akses jaringan ke host yang tidak diizinkan) kembali ke alur izin reguler. Aturan penolakan eksplisit selalu dihormati, dan perintah `rm` atau `rmdir` yang menargetkan `/`, direktori home Anda, atau jalur sistem kritis lainnya masih memicu permintaan izin. Aturan Ask hanya berlaku untuk perintah yang kembali ke alur izin reguler.

111 

112**Mode izin reguler**: Semua perintah bash melalui alur izin standar, bahkan saat di-sandbox. Ini memberikan lebih banyak kontrol tetapi memerlukan lebih banyak persetujuan.

113 

114Di kedua mode, sandbox memberlakukan pembatasan filesystem dan jaringan yang sama. Perbedaannya hanya dalam apakah perintah sandboxed disetujui secara otomatis atau memerlukan izin eksplisit.

115 

116<Info>

117 Mode izin otomatis bekerja secara independen dari pengaturan mode izin Anda. Bahkan jika Anda tidak dalam mode "terima edit", perintah bash sandboxed akan berjalan secara otomatis saat izin otomatis diaktifkan. Ini berarti perintah bash yang memodifikasi file dalam batas sandbox akan dieksekusi tanpa meminta, bahkan ketika alat edit file biasanya memerlukan persetujuan.

118</Info>

119 

120### Konfigurasi sandboxing

121 

122Sesuaikan perilaku sandbox melalui file `settings.json` Anda. Lihat [Settings](/id/settings#sandbox-settings) untuk referensi konfigurasi lengkap.

123 

124#### Memberikan akses tulis subprocess ke jalur tertentu

125 

126Secara default, perintah sandboxed hanya dapat menulis ke direktori kerja saat ini. Jika perintah subprocess seperti `kubectl`, `terraform`, atau `npm` perlu menulis di luar direktori proyek, gunakan `sandbox.filesystem.allowWrite` untuk memberikan akses ke jalur tertentu:

127 

128```json theme={null}

129{

130 "sandbox": {

131 "enabled": true,

132 "filesystem": {

133 "allowWrite": ["~/.kube", "/tmp/build"]

134 }

135 }

136}

137```

138 

139Jalur ini diberlakukan pada tingkat OS, sehingga semua perintah yang berjalan di dalam sandbox, termasuk proses anak mereka, menghormatinya. Ini adalah pendekatan yang direkomendasikan ketika alat memerlukan akses tulis ke lokasi tertentu, daripada mengecualikan alat dari sandbox sepenuhnya dengan `excludedCommands`.

140 

141Ketika `allowWrite` (atau `denyWrite`/`denyRead`/`allowRead`) didefinisikan dalam beberapa [cakupan pengaturan](/id/settings#settings-precedence), array **digabungkan**, artinya jalur dari setiap cakupan digabungkan, bukan diganti. Misalnya, jika pengaturan terkelola memungkinkan penulisan ke `/opt/company-tools` dan pengguna menambahkan `~/.kube` dalam pengaturan pribadi mereka, kedua jalur disertakan dalam konfigurasi sandbox akhir. Ini berarti pengguna dan proyek dapat memperluas daftar tanpa menduplikasi atau menimpa jalur yang ditetapkan oleh cakupan prioritas lebih tinggi.

142 

143Awalan jalur mengontrol bagaimana jalur diselesaikan:

144 

145| Awalan | Arti | Contoh |

146| :--------------------- | :-------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------- |

147| `/` | Jalur absolut dari akar filesystem | `/tmp/build` tetap `/tmp/build` |

148| `~/` | Relatif terhadap direktori home | `~/.kube` menjadi `$HOME/.kube` |

149| `./` atau tanpa awalan | Relatif terhadap akar proyek untuk pengaturan proyek, atau ke `~/.claude` untuk pengaturan pengguna | `./output` dalam `.claude/settings.json` diselesaikan ke `<project-root>/output` |

150 

151Awalan `//path` yang lebih lama untuk jalur absolut masih berfungsi. Jika Anda sebelumnya menggunakan `/path` tunggal mengharapkan resolusi relatif proyek, beralih ke `./path`. Sintaks ini berbeda dari [aturan izin Read dan Edit](/id/permissions#read-and-edit), yang menggunakan `//path` untuk absolut dan `/path` untuk relatif proyek. Jalur filesystem sandbox menggunakan konvensi standar: `/tmp/build` adalah jalur absolut.

152 

153Anda juga dapat menolak akses tulis atau baca menggunakan `sandbox.filesystem.denyWrite` dan `sandbox.filesystem.denyRead`. Ini digabungkan dengan jalur apa pun dari aturan izin `Edit(...)` dan `Read(...)`. Untuk mengizinkan kembali pembacaan jalur tertentu dalam wilayah yang ditolak, gunakan `sandbox.filesystem.allowRead`, yang mengambil alih `denyRead`. Ketika `allowManagedReadPathsOnly` diaktifkan dalam pengaturan terkelola, hanya entri `allowRead` terkelola yang dihormati; entri `allowRead` pengguna, proyek, dan lokal diabaikan. `denyRead` masih digabungkan dari semua sumber.

154 

155Misalnya, untuk memblokir pembacaan dari seluruh direktori home sambil tetap memungkinkan pembacaan dari proyek saat ini, tambahkan ini ke `.claude/settings.json` proyek Anda:

156 

157```json theme={null}

158{

159 "sandbox": {

160 "enabled": true,

161 "filesystem": {

162 "denyRead": ["~/"],

163 "allowRead": ["."]

164 }

165 }

166}

167```

168 

169`.` dalam `allowRead` diselesaikan ke akar proyek karena konfigurasi ini berada dalam pengaturan proyek. Jika Anda menempatkan konfigurasi yang sama dalam `~/.claude/settings.json`, `.` akan diselesaikan ke `~/.claude` sebagai gantinya, dan file proyek akan tetap diblokir oleh aturan `denyRead`.

170 

171<Tip>

172 Tidak semua perintah kompatibel dengan sandboxing langsung. Beberapa catatan yang mungkin membantu Anda memanfaatkan sandbox sebaik-baiknya:

173 

174 * Banyak alat CLI memerlukan akses ke host tertentu. Saat Anda menggunakan alat ini, mereka akan meminta izin untuk mengakses host tertentu. Memberikan izin akan memungkinkan mereka mengakses host ini sekarang dan di masa depan, memungkinkan mereka untuk dieksekusi dengan aman di dalam sandbox.

175 * `watchman` tidak kompatibel dengan berjalan di sandbox. Jika Anda menjalankan `jest`, pertimbangkan menggunakan `jest --no-watchman`

176 * `docker` tidak kompatibel dengan berjalan di sandbox. Pertimbangkan untuk menentukan `docker *` dalam `excludedCommands` untuk memaksanya berjalan di luar sandbox.

177</Tip>

178 

179<Note>

180 Claude Code mencakup mekanisme pintu keluar yang disengaja yang memungkinkan perintah berjalan di luar sandbox saat diperlukan. Ketika perintah gagal karena pembatasan sandbox (seperti masalah konektivitas jaringan atau alat yang tidak kompatibel), Claude diminta untuk menganalisis kegagalan dan dapat mencoba kembali perintah dengan parameter `dangerouslyDisableSandbox`. Perintah yang menggunakan parameter ini melalui alur izin Claude Code normal yang memerlukan izin pengguna untuk dieksekusi. Ini memungkinkan Claude Code menangani kasus tepi di mana alat tertentu atau operasi jaringan tidak dapat berfungsi dalam batasan sandbox.

181 

182 Anda dapat menonaktifkan pintu keluar ini dengan mengatur `"allowUnsandboxedCommands": false` dalam [pengaturan sandbox](/id/settings#sandbox-settings) Anda. Saat dinonaktifkan, parameter `dangerouslyDisableSandbox` sepenuhnya diabaikan dan semua perintah harus berjalan sandboxed atau secara eksplisit terdaftar dalam `excludedCommands`.

183</Note>

184 

185## Manfaat keamanan

186 

187### Perlindungan terhadap prompt injection

188 

189Bahkan jika penyerang berhasil memanipulasi perilaku Claude Code melalui prompt injection, sandbox memastikan sistem Anda tetap aman:

190 

191**Perlindungan filesystem:**

192 

193* Tidak dapat memodifikasi file konfigurasi kritis seperti `~/.bashrc`

194* Tidak dapat memodifikasi file tingkat sistem di `/bin/`

195* Tidak dapat membaca file yang ditolak dalam [pengaturan izin Claude](/id/permissions#manage-permissions) Anda

196 

197**Perlindungan jaringan:**

198 

199* Tidak dapat mengeksfiltrasikan data ke server yang dikendalikan penyerang

200* Tidak dapat mengunduh skrip berbahaya dari domain yang tidak sah

201* Tidak dapat melakukan panggilan API yang tidak terduga ke layanan yang tidak disetujui

202* Tidak dapat menghubungi domain apa pun yang tidak secara eksplisit diizinkan

203 

204**Pemantauan dan kontrol:**

205 

206* Semua upaya akses di luar sandbox diblokir pada tingkat OS

207* Anda menerima notifikasi segera ketika batas diuji

208* Anda dapat memilih untuk menolak, mengizinkan sekali, atau secara permanen memperbarui konfigurasi Anda

209 

210### Permukaan serangan berkurang

211 

212Sandboxing membatasi potensi kerusakan dari:

213 

214* **Dependensi berbahaya**: Paket NPM atau dependensi lain dengan kode berbahaya

215* **Skrip yang dikompromikan**: Skrip build atau alat dengan kerentanan keamanan

216* **Rekayasa sosial**: Serangan yang menipu pengguna untuk menjalankan perintah berbahaya

217* **Prompt injection**: Serangan yang menipu Claude untuk menjalankan perintah berbahaya

218 

219### Operasi transparan

220 

221Ketika Claude Code mencoba mengakses sumber daya jaringan di luar sandbox:

222 

2231. Operasi diblokir pada tingkat OS

2242. Anda menerima notifikasi segera

2253. Anda dapat memilih untuk:

226 * Menolak permintaan

227 * Mengizinkan sekali

228 * Memperbarui konfigurasi sandbox Anda untuk secara permanen mengizinkannya

229 

230## Keterbatasan Keamanan

231 

232* Keterbatasan Sandboxing Jaringan: Sistem penyaringan jaringan beroperasi dengan membatasi domain yang diizinkan untuk terhubung oleh proses. Ini tidak sebaliknya memeriksa lalu lintas yang melewati proxy dan pengguna bertanggung jawab untuk memastikan mereka hanya mengizinkan domain tepercaya dalam kebijakan mereka.

233 

234<Warning>

235 Pengguna harus menyadari potensi risiko yang datang dari mengizinkan domain luas seperti `github.com` yang mungkin memungkinkan eksfiltrasi data. Juga, dalam beberapa kasus mungkin dapat membypass penyaringan jaringan melalui [domain fronting](https://en.wikipedia.org/wiki/Domain_fronting).

236</Warning>

237 

238* Eskalasi Privilege melalui Unix Sockets: Konfigurasi `allowUnixSockets` dapat secara tidak sengaja memberikan akses ke layanan sistem yang kuat yang dapat menyebabkan bypass sandbox. Misalnya, jika digunakan untuk memungkinkan akses ke `/var/run/docker.sock` ini akan secara efektif memberikan akses ke sistem host melalui eksploitasi soket docker. Pengguna didorong untuk mempertimbangkan dengan hati-hati soket unix apa pun yang mereka izinkan melalui sandbox.

239* Eskalasi Izin Filesystem: Izin penulisan filesystem yang terlalu luas dapat memungkinkan serangan eskalasi privilege. Mengizinkan penulisan ke direktori yang berisi executable dalam `$PATH`, direktori konfigurasi sistem, atau file konfigurasi shell pengguna (`.bashrc`, `.zshrc`) dapat menyebabkan eksekusi kode dalam konteks keamanan yang berbeda ketika pengguna lain atau proses sistem mengakses file ini.

240* Kekuatan Sandbox Linux: Implementasi Linux menyediakan isolasi filesystem dan jaringan yang kuat tetapi mencakup mode `enableWeakerNestedSandbox` yang memungkinkannya bekerja di dalam lingkungan Docker tanpa namespace istimewa. Opsi ini secara konsiderabel melemahkan keamanan dan hanya boleh digunakan dalam kasus di mana isolasi tambahan sebaliknya diberlakukan.

241 

242## Bagaimana sandboxing berhubungan dengan izin

243 

244Sandboxing dan [izin](/id/permissions) adalah lapisan keamanan komplementer yang bekerja bersama:

245 

246* **Izin** mengontrol alat mana yang dapat digunakan Claude Code dan dievaluasi sebelum alat apa pun berjalan. Mereka berlaku untuk semua alat: Bash, Read, Edit, WebFetch, MCP, dan lainnya.

247* **Sandboxing** menyediakan penegakan tingkat OS yang membatasi apa yang dapat diakses perintah Bash pada tingkat filesystem dan jaringan. Ini hanya berlaku untuk perintah Bash dan proses anak mereka.

248 

249Pembatasan filesystem dan jaringan dikonfigurasi melalui pengaturan sandbox dan aturan izin:

250 

251* Gunakan `sandbox.filesystem.allowWrite` untuk memberikan akses tulis subprocess ke jalur di luar direktori kerja

252* Gunakan `sandbox.filesystem.denyWrite` dan `sandbox.filesystem.denyRead` untuk memblokir akses subprocess ke jalur tertentu

253* Gunakan `sandbox.filesystem.allowRead` untuk mengizinkan kembali pembacaan jalur tertentu dalam wilayah yang ditolak

254* Gunakan aturan tolak `Read` dan `Edit` untuk memblokir akses ke file atau direktori tertentu

255* Gunakan aturan izin/tolak `WebFetch` untuk mengontrol akses domain

256* Gunakan `allowedDomains` sandbox untuk mengontrol domain mana yang dapat dijangkau perintah Bash

257* Gunakan `deniedDomains` sandbox untuk memblokir domain tertentu bahkan ketika wildcard `allowedDomains` yang lebih luas akan sebaliknya mengizinkannya

258 

259Jalur dari pengaturan `sandbox.filesystem` dan aturan izin digabungkan bersama ke dalam konfigurasi sandbox akhir.

260 

261[Repositori](https://github.com/anthropics/claude-code/tree/main/examples/settings) ini mencakup konfigurasi pengaturan pemula untuk skenario penyebaran umum, termasuk contoh khusus sandbox. Gunakan ini sebagai titik awal dan sesuaikan dengan kebutuhan Anda.

262 

263## Penggunaan lanjutan

264 

265### Konfigurasi proxy khusus

266 

267Untuk organisasi yang memerlukan keamanan jaringan lanjutan, Anda dapat menerapkan proxy khusus untuk:

268 

269* Mendekripsi dan memeriksa lalu lintas HTTPS

270* Menerapkan aturan penyaringan khusus

271* Mencatat semua permintaan jaringan

272* Mengintegrasikan dengan infrastruktur keamanan yang ada

273 

274```json theme={null}

275{

276 "sandbox": {

277 "network": {

278 "httpProxyPort": 8080,

279 "socksProxyPort": 8081

280 }

281 }

282}

283```

284 

285### Integrasi dengan alat keamanan yang ada

286 

287Alat bash sandboxed bekerja bersama dengan:

288 

289* **Aturan izin**: Gabungkan dengan [pengaturan izin](/id/permissions) untuk pertahanan berlapis

290* **Kontainer pengembangan**: Gunakan dengan [devcontainers](/id/devcontainer) untuk isolasi tambahan

291* **Kebijakan perusahaan**: Terapkan konfigurasi sandbox melalui [pengaturan terkelola](/id/settings#settings-precedence)

292 

293## Praktik terbaik

294 

2951. **Mulai ketat**: Mulai dengan izin minimal dan perluas sesuai kebutuhan

2962. **Pantau log**: Tinjau upaya pelanggaran sandbox untuk memahami kebutuhan Claude Code

2973. **Gunakan konfigurasi khusus lingkungan**: Aturan sandbox berbeda untuk konteks pengembangan vs. produksi

2984. **Gabungkan dengan izin**: Gunakan sandboxing bersama dengan kebijakan IAM untuk keamanan komprehensif

2995. **Konfigurasi uji**: Verifikasi pengaturan sandbox Anda tidak memblokir alur kerja yang sah

300 

301## Sumber terbuka

302 

303Runtime sandbox tersedia sebagai paket npm sumber terbuka untuk digunakan dalam proyek agen Anda sendiri. Ini memungkinkan komunitas agen AI yang lebih luas untuk membangun sistem otonom yang lebih aman dan lebih aman. Ini juga dapat digunakan untuk sandbox program lain yang mungkin ingin Anda jalankan. Misalnya, untuk sandbox server MCP Anda dapat menjalankan:

304 

305```bash theme={null}

306npx @anthropic-ai/sandbox-runtime <command-to-sandbox>

307```

308 

309Untuk detail implementasi dan kode sumber, kunjungi [repositori GitHub](https://github.com/anthropic-experimental/sandbox-runtime).

310 

311## Keterbatasan

312 

313* **Overhead kinerja**: Minimal, tetapi beberapa operasi filesystem mungkin sedikit lebih lambat

314* **Kompatibilitas**: Beberapa alat yang memerlukan pola akses sistem tertentu mungkin memerlukan penyesuaian konfigurasi, atau bahkan mungkin perlu dijalankan di luar sandbox

315* **Dukungan platform**: Mendukung macOS, Linux, dan WSL2. WSL1 tidak didukung. Dukungan Windows asli sedang direncanakan.

316 

317## Apa yang sandboxing tidak mencakup

318 

319Sandbox mengisolasi subprocess Bash. Alat lain beroperasi di bawah batas yang berbeda:

320 

321* **Alat file bawaan**: Read, Edit, dan Write menggunakan sistem izin secara langsung daripada berjalan melalui sandbox. Lihat [izin](/id/permissions).

322* **Penggunaan komputer di Desktop**: ketika Claude membuka aplikasi dan mengontrol layar Anda di macOS, itu berjalan di desktop aktual Anda daripada di lingkungan terisolasi. Prompt izin per-aplikasi membatasi setiap aplikasi. Lihat [penggunaan komputer](/id/desktop#let-claude-use-your-computer).

323 

324## Lihat juga

325 

326* [Security](/id/security) - Fitur keamanan komprehensif dan praktik terbaik

327* [Permissions](/id/permissions) - Konfigurasi izin dan kontrol akses

328* [Settings](/id/settings) - Referensi konfigurasi lengkap

329* [CLI reference](/id/cli-reference) - Opsi baris perintah

scheduled-tasks.md +213 −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# Jalankan prompt sesuai jadwal

6 

7> Gunakan /loop dan alat penjadwalan cron untuk menjalankan prompt berulang kali, polling status, atau mengatur pengingat sekali jalan dalam sesi Claude Code.

8 

9<Note>

10 Tugas terjadwal memerlukan Claude Code v2.1.72 atau lebih baru. Periksa versi Anda dengan `claude --version`.

11</Note>

12 

13Tugas terjadwal memungkinkan Claude menjalankan kembali prompt secara otomatis pada interval tertentu. Gunakan untuk polling deployment, mengawasi PR, memeriksa build yang berjalan lama, atau mengingatkan diri sendiri untuk melakukan sesuatu nanti dalam sesi. Untuk bereaksi terhadap peristiwa saat terjadi daripada polling, lihat [Channels](/id/channels): CI Anda dapat mendorong kegagalan ke dalam sesi secara langsung.

14 

15Tugas bersifat session-scoped: mereka hidup dalam percakapan saat ini dan berhenti saat Anda memulai yang baru. Melanjutkan dengan `--resume` atau `--continue` membawa kembali tugas apa pun yang belum [kedaluwarsa](#seven-day-expiry): tugas berulang yang dibuat dalam 7 hari terakhir, atau tugas sekali jalan yang waktu terjadwalnya belum berlalu. Untuk penjadwalan yang bertahan secara independen dari sesi apa pun, gunakan [Routines](/id/routines), [Desktop scheduled tasks](/id/desktop-scheduled-tasks), atau [GitHub Actions](/id/github-actions).

16 

17## Bandingkan opsi penjadwalan

18 

19Claude Code offers three ways to schedule recurring or one-off work:

20 

21| | [Cloud](/en/routines) | [Desktop](/en/desktop-scheduled-tasks) | [`/loop`](/en/scheduled-tasks) |

22| :------------------------- | :----------------------------- | :------------------------------------- | :---------------------------------- |

23| Runs on | Anthropic cloud | Your machine | Your machine |

24| Requires machine on | No | Yes | Yes |

25| Requires open session | No | No | Yes |

26| Persistent across restarts | Yes | Yes | Restored on `--resume` if unexpired |

27| Access to local files | No (fresh clone) | Yes | Yes |

28| MCP servers | Connectors configured per task | [Config files](/en/mcp) and connectors | Inherits from session |

29| Permission prompts | No (runs autonomously) | Configurable per task | Inherits from session |

30| Customizable schedule | Via `/schedule` in the CLI | Yes | Yes |

31| Minimum interval | 1 hour | 1 minute | 1 minute |

32 

33<Tip>

34 Use **cloud tasks** for work that should run reliably without your machine. Use **Desktop tasks** when you need access to local files and tools. Use **`/loop`** for quick polling during a session.

35</Tip>

36 

37## Jalankan prompt berulang dengan /loop

38 

39Skill `/loop` [bundled skill](/id/commands) adalah cara tercepat untuk menjalankan prompt berulang sementara sesi tetap terbuka. Baik interval maupun prompt bersifat opsional, dan apa yang Anda berikan menentukan bagaimana loop berperilaku.

40 

41| Apa yang Anda berikan | Contoh | Apa yang terjadi |

42| :------------------------------------- | :-------------------------- | :-------------------------------------------------------------------------------------------------------- |

43| Interval dan prompt | `/loop 5m check the deploy` | Prompt Anda berjalan pada [jadwal tetap](#run-on-a-fixed-interval) |

44| Hanya prompt | `/loop check the deploy` | Prompt Anda berjalan pada [interval yang dipilih Claude](#let-claude-choose-the-interval) setiap iterasi |

45| Hanya interval, atau tidak ada apa-apa | `/loop` | [Prompt pemeliharaan bawaan](#run-the-built-in-maintenance-prompt) berjalan, atau `loop.md` Anda jika ada |

46 

47Anda juga dapat melewatkan perintah lain sebagai prompt, misalnya `/loop 20m /review-pr 1234`, untuk menjalankan kembali workflow yang sudah dikemas setiap iterasi.

48 

49### Jalankan pada interval tetap

50 

51Ketika Anda memberikan interval, Claude mengonversinya ke ekspresi cron, menjadwalkan job, dan mengonfirmasi cadence dan ID job.

52 

53```text theme={null}

54/loop 5m check if the deployment finished and tell me what happened

55```

56 

57Interval dapat memimpin prompt sebagai token bare seperti `30m`, atau mengikutinya sebagai klausa seperti `every 2 hours`. Unit yang didukung adalah `s` untuk detik, `m` untuk menit, `h` untuk jam, dan `d` untuk hari.

58 

59Detik dibulatkan ke menit terdekat karena cron memiliki granularitas satu menit. Interval yang tidak memetakan ke langkah cron yang bersih, seperti `7m` atau `90m`, dibulatkan ke interval terdekat yang bersih dan Claude memberi tahu Anda apa yang dipilihnya.

60 

61### Biarkan Claude memilih interval

62 

63Ketika Anda menghilangkan interval, Claude memilih satu secara dinamis daripada berjalan pada jadwal cron tetap. Setelah setiap iterasi, Claude memilih penundaan antara satu menit dan satu jam berdasarkan apa yang diamatinya: menunggu pendek saat build selesai atau PR aktif, menunggu lebih lama ketika tidak ada yang tertunda. Penundaan yang dipilih dan alasan untuk itu dicetak di akhir setiap iterasi.

64 

65Contoh di bawah memeriksa CI dan komentar review, dengan Claude menunggu lebih lama di antara iterasi setelah PR menjadi tenang:

66 

67```text theme={null}

68/loop check whether CI passed and address any review comments

69```

70 

71Ketika Anda meminta jadwal `/loop` dinamis, Claude dapat menggunakan [Monitor tool](/id/tools-reference#monitor-tool) secara langsung. Monitor menjalankan skrip latar belakang dan mengalirkan setiap baris output kembali, yang menghindari polling sama sekali dan sering lebih efisien token dan responsif daripada menjalankan kembali prompt pada interval.

72 

73Loop yang dijadwalkan secara dinamis muncul dalam [daftar tugas terjadwal](#manage-scheduled-tasks) Anda seperti tugas lainnya, jadi Anda dapat membuat daftar atau membatalkannya dengan cara yang sama. Aturan [jitter](#jitter) tidak berlaku untuk itu, tetapi [kedaluwarsa tujuh hari](#seven-day-expiry) berlaku: loop berakhir secara otomatis tujuh hari setelah Anda memulainya.

74 

75<Note>

76 Di Bedrock, Vertex AI, dan Microsoft Foundry, prompt tanpa interval berjalan pada jadwal tetap 10 menit sebagai gantinya.

77</Note>

78 

79### Jalankan prompt pemeliharaan bawaan

80 

81Ketika Anda menghilangkan prompt, Claude menggunakan prompt pemeliharaan bawaan daripada yang Anda berikan. Pada setiap iterasi, Claude bekerja melalui hal-hal berikut, secara berurutan:

82 

83* lanjutkan pekerjaan yang belum selesai dari percakapan

84* urus pull request cabang saat ini: komentar review, CI runs yang gagal, merge conflicts

85* jalankan pass pembersihan seperti bug hunts atau simplification ketika tidak ada yang tertunda

86 

87Claude tidak memulai inisiatif baru di luar cakupan itu, dan tindakan yang tidak dapat diubah seperti pushing atau deleting hanya dilanjutkan ketika mereka melanjutkan sesuatu yang sudah diotorisasi transkrip.

88 

89```text theme={null}

90/loop

91```

92 

93Bare `/loop` menjalankan prompt ini pada [interval yang dipilih secara dinamis](#let-claude-choose-the-interval). Tambahkan interval, misalnya `/loop 15m`, untuk menjalankannya pada jadwal tetap sebagai gantinya. Untuk mengganti prompt bawaan dengan prompt default Anda sendiri, lihat [Customize the default prompt with loop.md](#customize-the-default-prompt-with-loop-md).

94 

95<Note>

96 Di Bedrock, Vertex AI, dan Microsoft Foundry, `/loop` tanpa prompt mencetak pesan penggunaan daripada memulai loop pemeliharaan.

97</Note>

98 

99### Sesuaikan prompt default dengan loop.md

100 

101File `loop.md` mengganti prompt pemeliharaan bawaan dengan instruksi Anda sendiri. File ini mendefinisikan satu prompt default tunggal untuk bare `/loop`, bukan daftar tugas terjadwal terpisah, dan diabaikan setiap kali Anda memberikan prompt pada baris perintah. Untuk menjadwalkan prompt tambahan bersama dengannya, gunakan `/loop <prompt>` atau [minta Claude secara langsung](#manage-scheduled-tasks).

102 

103Claude mencari file di dua lokasi dan menggunakan yang pertama ditemukannya.

104 

105| Path | Scope |

106| :------------------ | :-------------------------------------------------------------------------------- |

107| `.claude/loop.md` | Project-level. Mengambil prioritas ketika kedua file ada. |

108| `~/.claude/loop.md` | User-level. Berlaku di proyek apa pun yang tidak mendefinisikan miliknya sendiri. |

109 

110File adalah Markdown biasa tanpa struktur yang diperlukan. Tulislah seolah-olah Anda mengetik prompt `/loop` secara langsung. Contoh berikut menjaga cabang rilis tetap sehat:

111 

112```markdown title=".claude/loop.md" theme={null}

113Check the `release/next` PR. If CI is red, pull the failing job log,

114diagnose, and push a minimal fix. If new review comments have arrived,

115address each one and resolve the thread. If everything is green and

116quiet, say so in one line.

117```

118 

119Edit ke `loop.md` berlaku pada iterasi berikutnya, jadi Anda dapat menyempurnakan instruksi saat loop berjalan. Ketika tidak ada `loop.md` yang ada di lokasi mana pun, loop kembali ke prompt pemeliharaan bawaan. Jaga file tetap ringkas: konten di luar 25.000 byte dipotong.

120 

121### Hentikan loop

122 

123Untuk menghentikan `/loop` saat menunggu iterasi berikutnya, tekan `Esc`. Ini menghapus wakeup yang tertunda sehingga loop tidak berjalan lagi. Tugas yang Anda jadwalkan dengan [meminta Claude secara langsung](#manage-scheduled-tasks) tidak terpengaruh oleh `Esc` dan tetap ada sampai Anda menghapusnya.

124 

125## Atur pengingat sekali jalan

126 

127Untuk pengingat sekali jalan, jelaskan apa yang Anda inginkan dalam bahasa alami daripada menggunakan `/loop`. Claude menjadwalkan tugas single-fire yang menghapus dirinya sendiri setelah berjalan.

128 

129```text theme={null}

130remind me at 3pm to push the release branch

131```

132 

133```text theme={null}

134in 45 minutes, check whether the integration tests passed

135```

136 

137Claude menyematkan waktu berjalan ke menit dan jam tertentu menggunakan ekspresi cron dan mengonfirmasi kapan akan berjalan.

138 

139## Kelola tugas terjadwal

140 

141Minta Claude dalam bahasa alami untuk membuat daftar atau membatalkan tugas, atau referensikan alat yang mendasarinya secara langsung.

142 

143```text theme={null}

144what scheduled tasks do I have?

145```

146 

147```text theme={null}

148cancel the deploy check job

149```

150 

151Di balik layar, Claude menggunakan alat-alat ini:

152 

153| Alat | Tujuan |

154| :----------- | :--------------------------------------------------------------------------------------------------------------------------- |

155| `CronCreate` | Jadwalkan tugas baru. Menerima ekspresi cron 5-field, prompt untuk dijalankan, dan apakah itu berulang atau berjalan sekali. |

156| `CronList` | Buat daftar semua tugas terjadwal dengan ID, jadwal, dan prompt mereka. |

157| `CronDelete` | Batalkan tugas berdasarkan ID. |

158 

159Setiap tugas terjadwal memiliki ID 8-karakter yang dapat Anda berikan ke `CronDelete`. Sesi dapat menampung hingga 50 tugas terjadwal sekaligus.

160 

161## Bagaimana tugas terjadwal berjalan

162 

163Penjadwal memeriksa setiap detik untuk tugas yang jatuh tempo dan memasukkannya ke antrian dengan prioritas rendah. Prompt terjadwal berjalan di antara giliran Anda, bukan saat Claude sedang merespons. Jika Claude sibuk saat tugas jatuh tempo, prompt menunggu sampai giliran saat ini berakhir.

164 

165Semua waktu ditafsirkan dalam zona waktu lokal Anda. Ekspresi cron seperti `0 9 * * *` berarti 9am di mana pun Anda menjalankan Claude Code, bukan UTC.

166 

167### Jitter

168 

169Untuk menghindari setiap sesi mengenai API pada momen dinding jam yang sama, penjadwal menambahkan offset deterministik kecil untuk waktu berjalan:

170 

171* Tugas berulang berjalan hingga 10% dari periode mereka terlambat, dibatasi pada 15 menit. Job per jam mungkin berjalan di mana saja dari `:00` hingga `:06`.

172* Tugas sekali jalan yang dijadwalkan untuk bagian atas atau bawah jam berjalan hingga 90 detik lebih awal.

173 

174Offset berasal dari ID tugas, jadi tugas yang sama selalu mendapatkan offset yang sama. Jika waktu yang tepat penting, pilih menit yang bukan `:00` atau `:30`, misalnya `3 9 * * *` daripada `0 9 * * *`, dan jitter sekali jalan tidak akan berlaku.

175 

176### Kedaluwarsa tujuh hari

177 

178Tugas berulang secara otomatis kedaluwarsa 7 hari setelah pembuatan. Tugas berjalan satu kali terakhir, kemudian menghapus dirinya sendiri. Ini membatasi berapa lama loop yang terlupakan dapat berjalan. Jika Anda memerlukan tugas berulang untuk bertahan lebih lama, batalkan dan buat ulang sebelum kedaluwarsa, atau gunakan [Routines](/id/routines) atau [Desktop scheduled tasks](/id/desktop-scheduled-tasks) untuk penjadwalan yang tahan lama.

179 

180## Referensi ekspresi cron

181 

182`CronCreate` menerima ekspresi cron standar 5-field: `minute hour day-of-month month day-of-week`. Semua field mendukung wildcard (`*`), nilai tunggal (`5`), langkah (`*/15`), rentang (`1-5`), dan daftar yang dipisahkan koma (`1,15,30`).

183 

184| Contoh | Arti |

185| :------------- | :-------------------------------- |

186| `*/5 * * * *` | Setiap 5 menit |

187| `0 * * * *` | Setiap jam pada jam |

188| `7 * * * *` | Setiap jam pada 7 menit lewat |

189| `0 9 * * *` | Setiap hari pada jam 9 pagi lokal |

190| `0 9 * * 1-5` | Hari kerja pada jam 9 pagi lokal |

191| `30 14 15 3 *` | 15 Maret pada jam 2:30 sore lokal |

192 

193Day-of-week menggunakan `0` atau `7` untuk Minggu hingga `6` untuk Sabtu. Sintaks yang diperluas seperti `L`, `W`, `?`, dan alias nama seperti `MON` atau `JAN` tidak didukung.

194 

195Ketika day-of-month dan day-of-week keduanya dibatasi, tanggal cocok jika salah satu field cocok. Ini mengikuti semantik vixie-cron standar.

196 

197## Nonaktifkan tugas terjadwal

198 

199Atur `CLAUDE_CODE_DISABLE_CRON=1` di lingkungan Anda untuk menonaktifkan penjadwal sepenuhnya. Alat cron dan `/loop` menjadi tidak tersedia, dan tugas yang sudah terjadwal berhenti berjalan. Lihat [Environment variables](/id/env-vars) untuk daftar lengkap flag disable.

200 

201## Keterbatasan

202 

203Penjadwalan session-scoped memiliki batasan yang melekat:

204 

205* Tugas hanya berjalan saat Claude Code berjalan dan idle. Menutup terminal atau membiarkan sesi keluar menghentikan semuanya.

206* Tidak ada catch-up untuk fire yang terlewat. Jika waktu terjadwal tugas berlalu saat Claude sibuk dengan permintaan yang berjalan lama, itu berjalan sekali saat Claude menjadi idle, bukan sekali per interval yang terlewat.

207* Memulai percakapan baru menghapus semua tugas session-scoped. Melanjutkan dengan `claude --resume` atau `claude --continue` memulihkan tugas yang belum kedaluwarsa: tugas berulang dalam tujuh hari pembuatan, dan tugas sekali jalan yang waktu terjadwalnya belum berlalu. Tugas Bash latar belakang dan monitor tidak pernah dipulihkan pada resume.

208 

209Untuk otomasi yang didorong cron yang perlu berjalan tanpa pengawasan:

210 

211* [Routines](/id/routines): berjalan pada infrastruktur yang dikelola Anthropic pada jadwal, melalui panggilan API, atau pada peristiwa GitHub

212* [GitHub Actions](/id/github-actions): gunakan trigger `schedule` dalam CI

213* [Desktop scheduled tasks](/id/desktop-scheduled-tasks): berjalan secara lokal di mesin Anda

security.md +143 −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# Keamanan

6 

7> Pelajari tentang perlindungan keamanan Claude Code dan praktik terbaik untuk penggunaan yang aman.

8 

9## Bagaimana kami mendekati keamanan

10 

11### Fondasi keamanan

12 

13Keamanan kode Anda adalah prioritas utama. Claude Code dibangun dengan keamanan sebagai inti, dikembangkan sesuai dengan program keamanan komprehensif Anthropic. Pelajari lebih lanjut dan akses sumber daya (laporan SOC 2 Type 2, sertifikat ISO 27001, dll.) di [Anthropic Trust Center](https://trust.anthropic.com).

14 

15### Arsitektur berbasis izin

16 

17Claude Code menggunakan izin baca-saja yang ketat secara default. Ketika tindakan tambahan diperlukan (mengedit file, menjalankan tes, mengeksekusi perintah), Claude Code meminta izin eksplisit. Pengguna mengontrol apakah akan menyetujui tindakan sekali atau mengizinkannya secara otomatis.

18 

19Kami merancang Claude Code agar transparan dan aman. Misalnya, kami memerlukan persetujuan untuk perintah bash sebelum mengeksekusinya, memberikan Anda kontrol langsung. Pendekatan ini memungkinkan pengguna dan organisasi untuk mengonfigurasi izin secara langsung.

20 

21Untuk konfigurasi izin terperinci, lihat [Permissions](/id/permissions).

22 

23### Perlindungan bawaan

24 

25Untuk mengurangi risiko dalam sistem agentic:

26 

27* **Alat bash bersandbox**: [Sandbox](/id/sandboxing) perintah bash dengan isolasi filesystem dan jaringan, mengurangi permintaan izin sambil mempertahankan keamanan. Aktifkan dengan `/sandbox` untuk menentukan batas tempat Claude Code dapat bekerja secara otonom

28* **Pembatasan akses tulis**: Claude Code hanya dapat menulis ke folder tempat dimulai dan subfolder-nya—tidak dapat memodifikasi file di direktori induk tanpa izin eksplisit. Meskipun Claude Code dapat membaca file di luar direktori kerja (berguna untuk mengakses perpustakaan sistem dan dependensi), operasi tulis dibatasi ketat pada cakupan proyek, menciptakan batas keamanan yang jelas

29* **Mitigasi kelelahan permintaan**: Dukungan untuk allowlisting perintah aman yang sering digunakan per-pengguna, per-codebase, atau per-organisasi

30* **Mode Accept Edits**: Batch menerima beberapa edit sambil mempertahankan permintaan izin untuk perintah dengan efek samping

31 

32### Tanggung jawab pengguna

33 

34Claude Code hanya memiliki izin yang Anda berikan. Anda bertanggung jawab untuk meninjau kode dan perintah yang diusulkan untuk keamanan sebelum persetujuan.

35 

36## Lindungi dari prompt injection

37 

38Prompt injection adalah teknik di mana penyerang mencoba mengganti atau memanipulasi instruksi asisten AI dengan menyisipkan teks berbahaya. Claude Code mencakup beberapa perlindungan terhadap serangan ini:

39 

40### Perlindungan inti

41 

42* **Sistem izin**: Operasi sensitif memerlukan persetujuan eksplisit

43* **Analisis yang menyadari konteks**: Mendeteksi instruksi yang berpotensi berbahaya dengan menganalisis permintaan lengkap

44* **Sanitasi input**: Mencegah command injection dengan memproses input pengguna

45* **Daftar blokir perintah**: Memblokir perintah berisiko yang mengambil konten arbitrer dari web seperti `curl` dan `wget` secara default. Ketika secara eksplisit diizinkan, waspadai [batasan pola izin](/id/permissions#tool-specific-permission-rules)

46 

47### Perlindungan privasi

48 

49Kami telah menerapkan beberapa perlindungan untuk melindungi data Anda, termasuk:

50 

51* Periode retensi terbatas untuk informasi sensitif (lihat [Privacy Center](https://privacy.anthropic.com/en/articles/10023548-how-long-do-you-store-my-data) untuk mempelajari lebih lanjut)

52* Akses terbatas ke data sesi pengguna

53* Kontrol pengguna atas preferensi pelatihan data. Pengguna konsumen dapat mengubah [pengaturan privasi](https://claude.ai/settings/privacy) mereka kapan saja.

54 

55Untuk detail lengkap, silakan tinjau [Commercial Terms of Service](https://www.anthropic.com/legal/commercial-terms) kami (untuk pengguna Team, Enterprise, dan API) atau [Consumer Terms](https://www.anthropic.com/legal/consumer-terms) (untuk pengguna Free, Pro, dan Max) dan [Privacy Policy](https://www.anthropic.com/legal/privacy).

56 

57### Perlindungan tambahan

58 

59* **Persetujuan permintaan jaringan**: Alat yang membuat permintaan jaringan memerlukan persetujuan pengguna secara default

60* **Jendela konteks terisolasi**: Web fetch menggunakan jendela konteks terpisah untuk menghindari injeksi prompt yang berpotensi berbahaya

61* **Verifikasi kepercayaan**: Jalankan codebase pertama kali dan server MCP baru memerlukan verifikasi kepercayaan

62 * Catatan: Verifikasi kepercayaan dinonaktifkan saat menjalankan secara non-interaktif dengan flag `-p`

63* **Deteksi command injection**: Perintah bash yang mencurigakan memerlukan persetujuan manual bahkan jika sebelumnya allowlisted

64* **Pencocokan fail-closed**: Perintah yang tidak cocok secara default memerlukan persetujuan manual

65* **Deskripsi bahasa alami**: Perintah bash kompleks menyertakan penjelasan untuk pemahaman pengguna

66* **Penyimpanan kredensial aman**: Kunci API dan token dienkripsi. Lihat [Credential Management](/id/authentication#credential-management)

67 

68<Warning>

69 **Risiko keamanan Windows WebDAV**: Saat menjalankan Claude Code di Windows, kami merekomendasikan untuk tidak mengaktifkan WebDAV atau mengizinkan Claude Code mengakses path seperti `\\*` yang mungkin berisi subdirektori WebDAV. [WebDAV telah dihentikan oleh Microsoft](https://learn.microsoft.com/en-us/windows/whats-new/deprecated-features#:~:text=The%20Webclient%20\(WebDAV\)%20service%20is%20deprecated) karena risiko keamanan. Mengaktifkan WebDAV dapat memungkinkan Claude Code memicu permintaan jaringan ke host jarak jauh, melewati sistem izin.

70</Warning>

71 

72**Praktik terbaik untuk bekerja dengan konten yang tidak dipercaya**:

73 

741. Tinjau perintah yang disarankan sebelum persetujuan

752. Hindari piping konten yang tidak dipercaya langsung ke Claude

763. Verifikasi perubahan yang diusulkan pada file kritis

774. Gunakan mesin virtual (VM) untuk menjalankan skrip dan membuat panggilan alat, terutama saat berinteraksi dengan layanan web eksternal

785. Laporkan perilaku mencurigakan dengan `/feedback`

79 

80<Warning>

81 Meskipun perlindungan ini secara signifikan mengurangi risiko, tidak ada sistem yang

82 sepenuhnya kebal terhadap semua serangan. Selalu pertahankan praktik keamanan yang baik saat bekerja

83 dengan alat AI apa pun.

84</Warning>

85 

86## Keamanan MCP

87 

88Claude Code memungkinkan pengguna untuk mengonfigurasi server Model Context Protocol (MCP). Daftar server MCP yang diizinkan dikonfigurasi dalam kode sumber Anda, sebagai bagian dari pengaturan Claude Code yang diperiksa insinyur ke dalam kontrol sumber.

89 

90Kami mendorong untuk menulis server MCP Anda sendiri atau menggunakan server MCP dari penyedia yang Anda percayai. Anda dapat mengonfigurasi izin Claude Code untuk server MCP. Anthropic tidak mengelola atau mengaudit server MCP apa pun.

91 

92## Keamanan IDE

93 

94Lihat [VS Code security and privacy](/id/vs-code#security-and-privacy) untuk informasi lebih lanjut tentang menjalankan Claude Code di IDE.

95 

96## Keamanan eksekusi cloud

97 

98Saat menggunakan [Claude Code di web](/id/claude-code-on-the-web), kontrol keamanan tambahan tersedia:

99 

100* **Mesin virtual terisolasi**: Setiap sesi cloud berjalan di VM yang terisolasi dan dikelola Anthropic

101* **Kontrol akses jaringan**: Akses jaringan dibatasi secara default dan dapat dikonfigurasi untuk dinonaktifkan atau hanya mengizinkan domain tertentu

102* **Perlindungan kredensial**: Autentikasi ditangani melalui proxy aman yang menggunakan kredensial bersisir di dalam sandbox, yang kemudian diterjemahkan ke token autentikasi GitHub aktual Anda

103* **Pembatasan cabang**: Operasi git push dibatasi pada cabang kerja saat ini

104* **Pencatatan audit**: Semua operasi di lingkungan cloud dicatat untuk kepatuhan dan tujuan audit

105* **Pembersihan otomatis**: Lingkungan cloud secara otomatis dihentikan setelah penyelesaian sesi

106 

107Untuk detail lebih lanjut tentang eksekusi cloud, lihat [Claude Code di web](/id/claude-code-on-the-web).

108 

109Sesi [Remote Control](/id/remote-control) bekerja berbeda: antarmuka web terhubung ke proses Claude Code yang berjalan di mesin lokal Anda. Semua eksekusi kode dan akses file tetap lokal, dan data yang sama yang mengalir selama sesi Claude Code lokal apa pun berjalan melalui Anthropic API melalui TLS. Tidak ada VM cloud atau sandboxing yang terlibat. Koneksi menggunakan beberapa kredensial berumur pendek dengan cakupan sempit, masing-masing dibatasi untuk tujuan tertentu dan kedaluwarsa secara independen, untuk membatasi radius ledakan dari kredensial tunggal yang dikompromikan.

110 

111## Praktik terbaik keamanan

112 

113### Bekerja dengan kode sensitif

114 

115* Tinjau semua perubahan yang disarankan sebelum persetujuan

116* Gunakan pengaturan izin khusus proyek untuk repositori sensitif

117* Pertimbangkan menggunakan [dev containers](/id/devcontainer) untuk isolasi tambahan

118* Audit secara teratur pengaturan izin Anda dengan `/permissions`

119 

120### Keamanan tim

121 

122* Gunakan [managed settings](/id/settings#settings-files) untuk menegakkan standar organisasi

123* Bagikan konfigurasi izin yang disetujui melalui kontrol versi

124* Latih anggota tim tentang praktik terbaik keamanan

125* Pantau penggunaan Claude Code melalui [OpenTelemetry metrics](/id/monitoring-usage)

126* Audit atau blokir perubahan pengaturan selama sesi dengan [`ConfigChange` hooks](/id/hooks#configchange)

127 

128### Melaporkan masalah keamanan

129 

130Jika Anda menemukan kerentanan keamanan di Claude Code:

131 

1321. Jangan ungkapkan secara publik

1332. Laporkan melalui [program HackerOne](https://hackerone.com/4f1f16ba-10d3-4d09-9ecc-c721aad90f24/embedded_submissions/new) kami

1343. Sertakan langkah reproduksi terperinci

1354. Berikan waktu bagi kami untuk mengatasi masalah sebelum pengungkapan publik

136 

137## Sumber daya terkait

138 

139* [Sandboxing](/id/sandboxing) - Isolasi filesystem dan jaringan untuk perintah bash

140* [Permissions](/id/permissions) - Konfigurasi izin dan kontrol akses

141* [Monitoring usage](/id/monitoring-usage) - Lacak dan audit aktivitas Claude Code

142* [Development containers](/id/devcontainer) - Lingkungan yang aman dan terisolasi

143* [Anthropic Trust Center](https://trust.anthropic.com) - Sertifikasi keamanan dan kepatuhan

server-managed-settings.md +224 −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# Konfigurasi pengaturan yang dikelola server

6 

7> Konfigurasi Claude Code secara terpusat untuk organisasi Anda melalui pengaturan yang dikirimkan server, tanpa memerlukan infrastruktur manajemen perangkat.

8 

9Pengaturan yang dikelola server memungkinkan administrator untuk mengonfigurasi Claude Code secara terpusat melalui antarmuka berbasis web di Claude.ai. Klien Claude Code secara otomatis menerima pengaturan ini ketika pengguna melakukan autentikasi dengan kredensial organisasi mereka.

10 

11Pendekatan ini dirancang untuk organisasi yang tidak memiliki infrastruktur manajemen perangkat, atau perlu mengelola pengaturan untuk pengguna pada perangkat yang tidak dikelola.

12 

13<Note>

14 Pengaturan yang dikelola server tersedia untuk pelanggan [Claude for Teams](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=server_settings_teams#team-&-enterprise) dan [Claude for Enterprise](https://anthropic.com/contact-sales?utm_source=claude_code\&utm_medium=docs\&utm_content=server_settings_enterprise).

15</Note>

16 

17## Persyaratan

18 

19Untuk menggunakan pengaturan yang dikelola server, Anda memerlukan:

20 

21* Paket Claude for Teams atau Claude for Enterprise

22* Claude Code versi 2.1.38 atau lebih baru untuk Claude for Teams, atau versi 2.1.30 atau lebih baru untuk Claude for Enterprise

23* Akses jaringan ke `api.anthropic.com`

24 

25## Pilih antara pengaturan yang dikelola server dan endpoint

26 

27Claude Code mendukung dua pendekatan untuk konfigurasi terpusat. Pengaturan yang dikelola server mengirimkan konfigurasi dari server Anthropic. [Pengaturan yang dikelola endpoint](/id/settings#settings-files) digunakan langsung ke perangkat melalui kebijakan OS asli (preferensi terkelola macOS, registri Windows) atau file pengaturan terkelola.

28 

29| Pendekatan | Terbaik untuk | Model keamanan |

30| :------------------------------------------------------------------- | :--------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------- |

31| **Pengaturan yang dikelola server** | Organisasi tanpa MDM, atau pengguna pada perangkat yang tidak dikelola | Pengaturan dikirimkan dari server Anthropic pada waktu autentikasi |

32| **[Pengaturan yang dikelola endpoint](/id/settings#settings-files)** | Organisasi dengan MDM atau manajemen endpoint | Pengaturan digunakan ke perangkat melalui profil konfigurasi MDM, kebijakan registri, atau file pengaturan terkelola |

33 

34Jika perangkat Anda terdaftar dalam solusi MDM atau manajemen endpoint, pengaturan yang dikelola endpoint memberikan jaminan keamanan yang lebih kuat karena file pengaturan dapat dilindungi dari modifikasi pengguna di tingkat OS.

35 

36## Konfigurasi pengaturan yang dikelola server

37 

38<Steps>

39 <Step title="Buka konsol admin">

40 Di [Claude.ai](https://claude.ai), navigasikan ke **Admin Settings > Claude Code > Managed settings**.

41 </Step>

42 

43 <Step title="Tentukan pengaturan Anda">

44 Tambahkan konfigurasi Anda sebagai JSON. Semua [pengaturan yang tersedia di `settings.json`](/id/settings#available-settings) didukung, termasuk [hooks](/id/hooks), [variabel lingkungan](/id/env-vars), dan [pengaturan yang hanya dikelola](/id/permissions#managed-only-settings) seperti `allowManagedPermissionRulesOnly`.

45 

46 Contoh ini memberlakukan daftar penolakan izin, mencegah pengguna dari melewati izin, dan membatasi aturan izin hanya pada yang ditentukan dalam pengaturan terkelola:

47 

48 ```json theme={null}

49 {

50 "permissions": {

51 "deny": [

52 "Bash(curl *)",

53 "Read(./.env)",

54 "Read(./.env.*)",

55 "Read(./secrets/**)"

56 ],

57 "disableBypassPermissionsMode": "disable"

58 },

59 "allowManagedPermissionRulesOnly": true

60 }

61 ```

62 

63 Hooks menggunakan format yang sama seperti di `settings.json`.

64 

65 Contoh ini menjalankan skrip audit setelah setiap pengeditan file di seluruh organisasi:

66 

67 ```json theme={null}

68 {

69 "hooks": {

70 "PostToolUse": [

71 {

72 "matcher": "Edit|Write",

73 "hooks": [

74 { "type": "command", "command": "/usr/local/bin/audit-edit.sh" }

75 ]

76 }

77 ]

78 }

79 }

80 ```

81 

82 Untuk mengonfigurasi pengklasifikasi [mode otomatis](/id/permission-modes#eliminate-prompts-with-auto-mode) sehingga mengetahui repositori, bucket, dan domain mana yang dipercaya organisasi Anda:

83 

84 ```json theme={null}

85 {

86 "autoMode": {

87 "environment": [

88 "Source control: github.example.com/acme-corp and all repos under it",

89 "Trusted cloud buckets: s3://acme-build-artifacts, gs://acme-ml-datasets",

90 "Trusted internal domains: *.corp.example.com"

91 ]

92 }

93 }

94 ```

95 

96 Karena hooks menjalankan perintah shell, pengguna melihat [dialog persetujuan keamanan](#security-approval-dialogs) sebelum diterapkan. Lihat [Konfigurasi mode otomatis](/id/auto-mode-config) untuk cara entri `autoMode` mempengaruhi apa yang diblokir pengklasifikasi dan peringatan penting tentang bidang `allow` dan `soft_deny`.

97 </Step>

98 

99 <Step title="Simpan dan terapkan">

100 Simpan perubahan Anda. Klien Claude Code menerima pengaturan yang diperbarui pada startup berikutnya atau siklus polling per jam.

101 </Step>

102</Steps>

103 

104### Verifikasi pengiriman pengaturan

105 

106Untuk mengonfirmasi bahwa pengaturan sedang diterapkan, minta pengguna untuk memulai ulang Claude Code. Jika konfigurasi mencakup pengaturan yang memicu [dialog persetujuan keamanan](#security-approval-dialogs), pengguna melihat prompt yang menjelaskan pengaturan yang dikelola pada startup. Anda juga dapat memverifikasi bahwa aturan izin terkelola aktif dengan meminta pengguna menjalankan `/permissions` untuk melihat aturan izin efektif mereka.

107 

108### Kontrol akses

109 

110Peran berikut dapat mengelola pengaturan yang dikelola server:

111 

112* **Primary Owner**

113* **Owner**

114 

115Batasi akses ke personel terpercaya, karena perubahan pengaturan berlaku untuk semua pengguna dalam organisasi.

116 

117### Pengaturan yang hanya dikelola

118 

119Sebagian besar [kunci pengaturan](/id/settings#available-settings) bekerja dalam cakupan apa pun. Segelintir kunci hanya dibaca dari pengaturan terkelola dan tidak berpengaruh ketika ditempatkan dalam file pengaturan pengguna atau proyek. Lihat [pengaturan yang hanya dikelola](/id/permissions#managed-only-settings) untuk daftar lengkap. Pengaturan apa pun yang tidak ada dalam daftar itu masih dapat ditempatkan dalam pengaturan terkelola dan memiliki prioritas tertinggi.

120 

121### Batasan saat ini

122 

123Pengaturan yang dikelola server memiliki batasan berikut:

124 

125* Pengaturan berlaku secara seragam untuk semua pengguna dalam organisasi. Konfigurasi per-grup belum didukung.

126* [Konfigurasi server MCP](/id/mcp#managed-mcp-configuration) tidak dapat didistribusikan melalui pengaturan yang dikelola server.

127 

128## Pengiriman pengaturan

129 

130### Prioritas pengaturan

131 

132Pengaturan yang dikelola server dan [pengaturan yang dikelola endpoint](/id/settings#settings-files) keduanya menempati tingkat tertinggi dalam [hierarki pengaturan](/id/settings#settings-precedence) Claude Code. Tidak ada tingkat pengaturan lain yang dapat menggantinya, termasuk argumen baris perintah.

133 

134Dalam tingkat terkelola, sumber pertama yang mengirimkan konfigurasi non-kosong menang. Pengaturan yang dikelola server diperiksa terlebih dahulu, kemudian pengaturan yang dikelola endpoint. Sumber tidak digabungkan: jika pengaturan yang dikelola server mengirimkan kunci apa pun, pengaturan yang dikelola endpoint sepenuhnya diabaikan. Jika pengaturan yang dikelola server tidak mengirimkan apa pun, pengaturan yang dikelola endpoint berlaku.

135 

136Jika Anda menghapus konfigurasi pengaturan yang dikelola server di konsol admin dengan tujuan untuk kembali ke plist yang dikelola endpoint atau kebijakan registri, perhatikan bahwa [pengaturan yang di-cache](#fetch-and-caching-behavior) bertahan pada mesin klien hingga pengambilan berikutnya yang berhasil. Jalankan `/status` untuk melihat sumber terkelola mana yang aktif.

137 

138### Perilaku pengambilan dan caching

139 

140Claude Code mengambil pengaturan dari server Anthropic pada startup dan melakukan polling untuk pembaruan setiap jam selama sesi aktif.

141 

142**Peluncuran pertama tanpa pengaturan yang di-cache:**

143 

144* Claude Code mengambil pengaturan secara asinkron

145* Jika pengambilan gagal, Claude Code melanjutkan tanpa pengaturan terkelola

146* Ada jendela singkat sebelum pengaturan dimuat di mana pembatasan belum diterapkan

147 

148**Peluncuran berikutnya dengan pengaturan yang di-cache:**

149 

150* Pengaturan yang di-cache berlaku segera pada startup

151* Claude Code mengambil pengaturan segar di latar belakang

152* Pengaturan yang di-cache bertahan melalui kegagalan jaringan

153 

154Claude Code menerapkan pembaruan pengaturan secara otomatis tanpa restart, kecuali untuk pengaturan lanjutan seperti konfigurasi OpenTelemetry, yang memerlukan restart penuh untuk berlaku.

155 

156### Paksakan startup yang tertutup gagal

157 

158Secara default, jika pengambilan pengaturan jarak jauh gagal pada startup, CLI melanjutkan tanpa pengaturan terkelola. Untuk lingkungan di mana jendela yang tidak diterapkan singkat ini tidak dapat diterima, atur `forceRemoteSettingsRefresh: true` dalam pengaturan terkelola Anda.

159 

160Ketika pengaturan ini aktif, CLI memblokir pada startup hingga pengaturan jarak jauh diambil segar. Jika pengambilan gagal, CLI keluar daripada melanjutkan tanpa kebijakan. Pengaturan ini memperpanjang dirinya sendiri: setelah dikirimkan dari server, pengaturan ini juga di-cache secara lokal sehingga startup berikutnya memberlakukan perilaku yang sama bahkan sebelum pengambilan pertama yang berhasil dari sesi baru.

161 

162Untuk mengaktifkan ini, tambahkan kunci ke konfigurasi pengaturan terkelola Anda:

163 

164```json theme={null}

165{

166 "forceRemoteSettingsRefresh": true

167}

168```

169 

170Sebelum mengaktifkan pengaturan ini, pastikan kebijakan jaringan Anda memungkinkan konektivitas ke `api.anthropic.com`. Jika endpoint tersebut tidak dapat dijangkau, CLI keluar pada startup dan pengguna tidak dapat memulai Claude Code.

171 

172### Dialog persetujuan keamanan

173 

174Pengaturan tertentu yang dapat menimbulkan risiko keamanan memerlukan persetujuan pengguna eksplisit sebelum diterapkan:

175 

176* **Pengaturan perintah shell**: pengaturan yang menjalankan perintah shell

177* **Variabel lingkungan kustom**: variabel yang tidak ada dalam daftar aman yang diketahui

178* **Konfigurasi hook**: definisi hook apa pun

179 

180Ketika pengaturan ini ada, pengguna melihat dialog keamanan yang menjelaskan apa yang sedang dikonfigurasi. Pengguna harus menyetujui untuk melanjutkan. Jika pengguna menolak pengaturan, Claude Code keluar.

181 

182<Note>

183 Dalam mode non-interaktif dengan flag `-p`, Claude Code melewati dialog keamanan dan menerapkan pengaturan tanpa persetujuan pengguna.

184</Note>

185 

186## Ketersediaan platform

187 

188Pengaturan yang dikelola server memerlukan koneksi langsung ke `api.anthropic.com` dan tidak tersedia saat menggunakan penyedia model pihak ketiga:

189 

190* Amazon Bedrock

191* Google Vertex AI

192* Microsoft Foundry

193* Endpoint API kustom melalui `ANTHROPIC_BASE_URL` atau [gateway LLM](/id/llm-gateway)

194 

195## Audit logging

196 

197Acara log audit untuk perubahan pengaturan tersedia melalui API kepatuhan atau ekspor log audit. Hubungi tim akun Anthropic Anda untuk akses.

198 

199Acara audit mencakup jenis tindakan yang dilakukan, akun dan perangkat yang melakukan tindakan, dan referensi ke nilai sebelumnya dan baru.

200 

201## Pertimbangan keamanan

202 

203Pengaturan yang dikelola server menyediakan penegakan kebijakan terpusat, tetapi mereka beroperasi sebagai kontrol sisi klien. Pada perangkat yang tidak dikelola, pengguna dengan akses admin atau sudo dapat memodifikasi biner Claude Code, sistem file, atau konfigurasi jaringan.

204 

205| Skenario | Perilaku |

206| :---------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

207| Pengguna mengedit file pengaturan yang di-cache | File yang dirusak berlaku pada startup, tetapi pengaturan yang benar dipulihkan pada pengambilan server berikutnya |

208| Pengguna menghapus file pengaturan yang di-cache | Perilaku peluncuran pertama terjadi: pengaturan mengambil secara asinkron dengan jendela yang tidak diterapkan singkat |

209| API tidak tersedia | Pengaturan yang di-cache berlaku jika tersedia, jika tidak pengaturan terkelola tidak diterapkan sampai pengambilan yang berhasil berikutnya. Dengan `forceRemoteSettingsRefresh: true`, CLI keluar sebagai gantinya melanjutkan |

210| Pengguna melakukan autentikasi dengan organisasi yang berbeda | Pengaturan tidak dikirimkan untuk akun di luar organisasi yang dikelola |

211| Pengguna mengonfigurasi [penyedia model pihak ketiga](#platform-availability) | Pengaturan yang dikelola server dilewati. Ini termasuk pengaturan `CLAUDE_CODE_USE_BEDROCK`, `CLAUDE_CODE_USE_MANTLE`, `CLAUDE_CODE_USE_VERTEX`, `CLAUDE_CODE_USE_FOUNDRY`, atau `ANTHROPIC_BASE_URL` non-default |

212 

213Untuk mendeteksi perubahan konfigurasi runtime, gunakan [hook `ConfigChange`](/id/hooks#configchange) untuk mencatat modifikasi atau memblokir perubahan yang tidak sah sebelum berlaku.

214 

215Untuk jaminan penegakan yang lebih kuat, gunakan [pengaturan yang dikelola endpoint](/id/settings#settings-files) pada perangkat yang terdaftar dalam solusi MDM.

216 

217## Lihat juga

218 

219Halaman terkait untuk mengelola konfigurasi Claude Code:

220 

221* [Settings](/id/settings): referensi konfigurasi lengkap termasuk semua pengaturan yang tersedia

222* [Pengaturan yang dikelola endpoint](/id/settings#settings-files): pengaturan terkelola yang digunakan ke perangkat oleh IT

223* [Authentication](/id/authentication): atur akses pengguna ke Claude Code

224* [Security](/id/security): perlindungan keamanan dan praktik terbaik

settings.md +914 −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# Pengaturan Claude Code

6 

7> Konfigurasikan Claude Code dengan pengaturan global dan tingkat proyek, serta variabel lingkungan.

8 

9Claude Code menawarkan berbagai pengaturan untuk mengonfigurasi perilakunya sesuai kebutuhan Anda. Anda dapat mengonfigurasi Claude Code dengan menjalankan perintah `/config` saat menggunakan REPL interaktif, yang membuka antarmuka Pengaturan bertab di mana Anda dapat melihat informasi status dan memodifikasi opsi konfigurasi.

10 

11## Cakupan konfigurasi

12 

13Claude Code menggunakan **sistem cakupan** untuk menentukan di mana konfigurasi berlaku dan siapa yang membagikannya. Memahami cakupan membantu Anda memutuskan cara mengonfigurasi Claude Code untuk penggunaan pribadi, kolaborasi tim, atau penyebaran perusahaan.

14 

15### Cakupan yang tersedia

16 

17| Cakupan | Lokasi | Siapa yang terpengaruh | Dibagikan dengan tim? |

18| :---------- | :--------------------------------------------------------------------------------------------- | :---------------------------------- | :--------------------- |

19| **Managed** | Pengaturan yang dikelola server, plist / registry, atau `managed-settings.json` tingkat sistem | Semua pengguna di mesin | Ya (digunakan oleh IT) |

20| **User** | Direktori `~/.claude/` | Anda, di semua proyek | Tidak |

21| **Project** | `.claude/` di repositori | Semua kolaborator di repositori ini | Ya (dikomit ke git) |

22| **Local** | `.claude/settings.local.json` | Anda, hanya di repositori ini | Tidak (diabaikan git) |

23 

24### Kapan menggunakan setiap cakupan

25 

26**Cakupan Managed** adalah untuk:

27 

28* Kebijakan keamanan yang harus diterapkan di seluruh organisasi

29* Persyaratan kepatuhan yang tidak dapat ditimpa

30* Konfigurasi standar yang digunakan oleh IT/DevOps

31 

32**Cakupan User** paling baik untuk:

33 

34* Preferensi pribadi yang Anda inginkan di mana-mana (tema, pengaturan editor)

35* Tools dan plugins yang Anda gunakan di semua proyek

36* Kunci API dan autentikasi (disimpan dengan aman)

37 

38**Cakupan Project** paling baik untuk:

39 

40* Pengaturan bersama tim (izin, hooks, MCP servers)

41* Plugins yang harus dimiliki seluruh tim

42* Standardisasi tooling di seluruh kolaborator

43 

44**Cakupan Local** paling baik untuk:

45 

46* Penggantian pribadi untuk proyek tertentu

47* Pengaturan pengujian sebelum dibagikan dengan tim

48* Pengaturan spesifik mesin yang tidak akan berfungsi untuk orang lain

49 

50### Bagaimana cakupan berinteraksi

51 

52Ketika pengaturan yang sama dikonfigurasi dalam beberapa cakupan, cakupan yang lebih spesifik memiliki prioritas:

53 

541. **Managed** (tertinggi) - tidak dapat ditimpa oleh apa pun

552. **Argumen baris perintah** - penggantian sesi sementara

563. **Local** - menimpa pengaturan proyek dan pengguna

574. **Project** - menimpa pengaturan pengguna

585. **User** (terendah) - berlaku ketika tidak ada yang menentukan pengaturan

59 

60Misalnya, jika izin diizinkan dalam pengaturan pengguna tetapi ditolak dalam pengaturan proyek, pengaturan proyek memiliki prioritas dan izin diblokir.

61 

62### Apa yang menggunakan cakupan

63 

64Cakupan berlaku untuk banyak fitur Claude Code:

65 

66| Fitur | Lokasi pengguna | Lokasi proyek | Lokasi lokal |

67| :-------------- | :------------------------ | :----------------------------------- | :---------------------------- |

68| **Settings** | `~/.claude/settings.json` | `.claude/settings.json` | `.claude/settings.local.json` |

69| **Subagents** | `~/.claude/agents/` | `.claude/agents/` | Tidak ada |

70| **MCP servers** | `~/.claude.json` | `.mcp.json` | `~/.claude.json` (per-proyek) |

71| **Plugins** | `~/.claude/settings.json` | `.claude/settings.json` | `.claude/settings.local.json` |

72| **CLAUDE.md** | `~/.claude/CLAUDE.md` | `CLAUDE.md` atau `.claude/CLAUDE.md` | `CLAUDE.local.md` |

73 

74***

75 

76## File pengaturan

77 

78File `settings.json` adalah mekanisme resmi untuk mengonfigurasi Claude Code melalui pengaturan hierarki:

79 

80* **Pengaturan pengguna** didefinisikan dalam `~/.claude/settings.json` dan berlaku untuk semua proyek.

81* **Pengaturan proyek** disimpan di direktori proyek Anda:

82 * `.claude/settings.json` untuk pengaturan yang diperiksa ke dalam kontrol sumber dan dibagikan dengan tim Anda

83 * `.claude/settings.local.json` untuk pengaturan yang tidak diperiksa, berguna untuk preferensi pribadi dan eksperimen. Claude Code akan mengonfigurasi git untuk mengabaikan `.claude/settings.local.json` saat dibuat.

84* **Pengaturan Managed**: Untuk organisasi yang memerlukan kontrol terpusat, Claude Code mendukung beberapa mekanisme pengiriman untuk pengaturan yang dikelola. Semua menggunakan format JSON yang sama dan tidak dapat ditimpa oleh pengaturan pengguna atau proyek:

85 

86 * **Pengaturan yang dikelola server**: dikirimkan dari server Anthropic melalui konsol admin Claude.ai. Lihat [pengaturan yang dikelola server](/id/server-managed-settings).

87 * **Kebijakan tingkat MDM/OS**: dikirimkan melalui manajemen perangkat asli di macOS dan Windows:

88 * macOS: domain preferensi terkelola `com.anthropic.claudecode`. Kunci tingkat atas plist mencerminkan `managed-settings.json`, dengan pengaturan bersarang sebagai kamus dan array sebagai array plist. Terapkan melalui profil konfigurasi di Jamf, Iru (Kandji), atau alat MDM serupa.

89 * Windows: kunci registry `HKLM\SOFTWARE\Policies\ClaudeCode` dengan nilai `Settings` (REG\_SZ atau REG\_EXPAND\_SZ) berisi JSON (digunakan melalui Group Policy atau Intune)

90 * Windows (tingkat pengguna): `HKCU\SOFTWARE\Policies\ClaudeCode` (prioritas kebijakan terendah, hanya digunakan ketika tidak ada sumber tingkat admin)

91 * **Berbasis file**: `managed-settings.json` dan `managed-mcp.json` digunakan ke direktori sistem:

92 

93 * macOS: `/Library/Application Support/ClaudeCode/`

94 * Linux dan WSL: `/etc/claude-code/`

95 * Windows: `C:\Program Files\ClaudeCode\`

96 

97 <Warning>

98 Jalur Windows warisan `C:\ProgramData\ClaudeCode\managed-settings.json` tidak lagi didukung sejak v2.1.75. Administrator yang menggunakan pengaturan ke lokasi tersebut harus memigrasikan file ke `C:\Program Files\ClaudeCode\managed-settings.json`.

99 </Warning>

100 

101 Pengaturan yang dikelola berbasis file juga mendukung direktori drop-in di `managed-settings.d/` dalam direktori sistem yang sama bersama `managed-settings.json`. Ini memungkinkan tim terpisah untuk menggunakan fragmen kebijakan independen tanpa mengoordinasikan pengeditan ke file tunggal.

102 

103 Mengikuti konvensi systemd, `managed-settings.json` digabungkan terlebih dahulu sebagai dasar, kemudian semua file `*.json` dalam direktori drop-in diurutkan secara alfabetis dan digabungkan di atas. File yang lebih baru menimpa yang lebih awal untuk nilai skalar; array digabungkan dan dihilangkan duplikatnya; objek digabungkan secara mendalam. File tersembunyi yang dimulai dengan `.` diabaikan.

104 

105 Gunakan prefiks numerik untuk mengontrol urutan penggabungan, misalnya `10-telemetry.json` dan `20-security.json`.

106 

107 Lihat [pengaturan yang dikelola](/id/permissions#managed-only-settings) dan [Konfigurasi MCP yang Dikelola](/id/mcp#managed-mcp-configuration) untuk detail.

108 

109 Repositori [ini](https://github.com/anthropics/claude-code/tree/main/examples/mdm) mencakup template penyebaran pemula untuk Jamf, Iru (Kandji), Intune, dan Group Policy. Gunakan ini sebagai titik awal dan sesuaikan dengan kebutuhan Anda.

110 

111 <Note>

112 Penyebaran yang dikelola juga dapat membatasi **penambahan marketplace plugin** menggunakan `strictKnownMarketplaces`. Untuk informasi lebih lanjut, lihat [Pembatasan marketplace yang dikelola](/id/plugin-marketplaces#managed-marketplace-restrictions).

113 </Note>

114* **Konfigurasi lainnya** disimpan dalam `~/.claude.json`. File ini berisi sesi OAuth, konfigurasi [MCP server](/id/mcp) untuk cakupan pengguna dan lokal, status per-proyek (tools yang diizinkan, pengaturan kepercayaan), dan berbagai cache. MCP servers dengan cakupan proyek disimpan secara terpisah dalam `.mcp.json`.

115 

116<Note>

117 Claude Code secara otomatis membuat cadangan file konfigurasi dengan stempel waktu dan menyimpan lima cadangan terbaru untuk mencegah kehilangan data.

118</Note>

119 

120```JSON Contoh settings.json theme={null}

121{

122 "$schema": "https://json.schemastore.org/claude-code-settings.json",

123 "permissions": {

124 "allow": [

125 "Bash(npm run lint)",

126 "Bash(npm run test *)",

127 "Read(~/.zshrc)"

128 ],

129 "deny": [

130 "Bash(curl *)",

131 "Read(./.env)",

132 "Read(./.env.*)",

133 "Read(./secrets/**)"

134 ]

135 },

136 "env": {

137 "CLAUDE_CODE_ENABLE_TELEMETRY": "1",

138 "OTEL_METRICS_EXPORTER": "otlp"

139 },

140 "companyAnnouncements": [

141 "Welcome to Acme Corp! Review our code guidelines at docs.acme.com",

142 "Reminder: Code reviews required for all PRs",

143 "New security policy in effect"

144 ]

145}

146```

147 

148Baris `$schema` dalam contoh di atas menunjuk ke [skema JSON resmi](https://json.schemastore.org/claude-code-settings.json) untuk pengaturan Claude Code. Menambahkannya ke `settings.json` Anda memungkinkan pelengkapan otomatis dan validasi inline di VS Code, Cursor, dan editor lain yang mendukung validasi skema JSON.

149 

150Skema yang dipublikasikan diperbarui secara berkala dan mungkin tidak menyertakan pengaturan yang ditambahkan dalam rilis CLI terbaru, jadi peringatan validasi pada bidang yang baru didokumentasikan tidak harus berarti konfigurasi Anda tidak valid.

151 

152### Pengaturan yang tersedia

153 

154`settings.json` mendukung sejumlah opsi:

155 

156| Kunci | Deskripsi | Contoh |

157| :-------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------- |

158| `agent` | Jalankan thread utama sebagai subagent bernama. Menerapkan prompt sistem subagent, pembatasan tool, dan model. Lihat [Panggil subagents secara eksplisit](/id/sub-agents#invoke-subagents-explicitly) | `"code-reviewer"` |

159| `allowedChannelPlugins` | (Pengaturan yang dikelola saja) Daftar putih plugin channel yang dapat mendorong pesan. Menggantikan daftar putih Anthropic default saat diatur. Tidak terdefinisi = kembali ke default, array kosong = blokir semua plugin channel. Memerlukan `channelsEnabled: true`. Lihat [Batasi plugin channel mana yang dapat dijalankan](/id/channels#restrict-which-channel-plugins-can-run) | `[{ "marketplace": "claude-plugins-official", "plugin": "telegram" }]` |

160| `allowedHttpHookUrls` | Daftar putih pola URL yang dapat ditargetkan oleh HTTP hooks. Mendukung `*` sebagai wildcard. Saat diatur, hooks dengan URL yang tidak cocok diblokir. Tidak terdefinisi = tidak ada pembatasan, array kosong = blokir semua HTTP hooks. Array digabungkan di seluruh sumber pengaturan. Lihat [Konfigurasi Hook](#hook-configuration) | `["https://hooks.example.com/*"]` |

161| `allowedMcpServers` | Saat diatur dalam managed-settings.json, daftar putih MCP servers yang dapat dikonfigurasi pengguna. Tidak terdefinisi = tidak ada pembatasan, array kosong = lockdown. Berlaku untuk semua cakupan. Daftar hitam memiliki prioritas. Lihat [Konfigurasi MCP yang Dikelola](/id/mcp#managed-mcp-configuration) | `[{ "serverName": "github" }]` |

162| `allowManagedHooksOnly` | (Pengaturan yang dikelola saja) Hanya hooks yang dikelola, SDK hooks, dan hooks dari plugins yang dipaksa diaktifkan dalam pengaturan yang dikelola `enabledPlugins` yang dimuat. Hooks pengguna, proyek, dan semua plugin hooks lainnya diblokir. Lihat [Konfigurasi Hook](#hook-configuration) | `true` |

163| `allowManagedMcpServersOnly` | (Pengaturan yang dikelola saja) Hanya `allowedMcpServers` dari pengaturan yang dikelola yang dihormati. `deniedMcpServers` masih digabungkan dari semua sumber. Pengguna masih dapat menambahkan MCP servers, tetapi hanya daftar putih yang ditentukan admin yang berlaku. Lihat [Konfigurasi MCP yang Dikelola](/id/mcp#managed-mcp-configuration) | `true` |

164| `allowManagedPermissionRulesOnly` | (Pengaturan yang dikelola saja) Cegah pengaturan pengguna dan proyek dari mendefinisikan aturan izin `allow`, `ask`, atau `deny`. Hanya aturan dalam pengaturan yang dikelola yang berlaku. Lihat [Pengaturan khusus yang dikelola](/id/permissions#managed-only-settings) | `true` |

165| `alwaysThinkingEnabled` | Aktifkan [pemikiran yang diperluas](/id/model-config#extended-thinking) secara default untuk semua sesi. Biasanya dikonfigurasi melalui perintah `/config` daripada mengedit langsung | `true` |

166| `apiKeyHelper` | Skrip khusus, yang akan dieksekusi dalam `/bin/sh`, untuk menghasilkan nilai auth. Nilai ini akan dikirim sebagai header `X-Api-Key` dan `Authorization: Bearer` untuk permintaan model | `/bin/generate_temp_api_key.sh` |

167| `attribution` | Sesuaikan atribusi untuk komit git dan pull request. Lihat [Pengaturan atribusi](#attribution-settings) | `{"commit": "🤖 Generated with Claude Code", "pr": ""}` |

168| `autoMemoryDirectory` | Direktori khusus untuk penyimpanan [memori otomatis](/id/memory#storage-location). Menerima jalur absolut atau jalur dengan awalan `~/`. Diterima dari kebijakan dan pengaturan pengguna, dan dari flag `--settings`. Tidak diterima dari pengaturan proyek atau lokal, karena repositori yang diklon dapat menyediakan file apa pun untuk mengalihkan penulisan memori ke lokasi sensitif | `"~/my-memory-dir"` |

169| `autoMode` | Sesuaikan apa yang diblokir dan diizinkan oleh pengklasifikasi [mode otomatis](/id/permission-modes#eliminate-prompts-with-auto-mode). Berisi array aturan prosa `environment`, `allow`, dan `soft_deny`. Sertakan string literal `"$defaults"` dalam array untuk mewarisi aturan bawaan pada posisi tersebut. Lihat [Konfigurasikan mode otomatis](/id/auto-mode-config). Tidak dibaca dari pengaturan proyek bersama | `{"soft_deny": ["$defaults", "Never run terraform apply"]}` |

170| `autoScrollEnabled` | Dalam [rendering fullscreen](/id/fullscreen), ikuti output baru ke bagian bawah percakapan. Default: `true`. Muncul di `/config` sebagai **Auto-scroll**. Prompt izin masih bergulir ke tampilan saat ini dimatikan | `false` |

171| `autoUpdatesChannel` | Saluran rilis untuk diikuti untuk pembaruan. Gunakan `"stable"` untuk versi yang biasanya sekitar satu minggu lama dan melewati versi dengan regresi besar, atau `"latest"` (default) untuk rilis terbaru | `"stable"` |

172| `availableModels` | Batasi model mana yang dapat dipilih pengguna melalui `/model`, `--model`, atau `ANTHROPIC_MODEL`. Tidak mempengaruhi opsi Default. Lihat [Batasi pemilihan model](/id/model-config#restrict-model-selection) | `["sonnet", "haiku"]` |

173| `awaySummaryEnabled` | Tampilkan ringkasan sesi satu baris saat Anda kembali ke terminal setelah beberapa menit pergi. Atur ke `false` atau matikan Session recap di `/config` untuk menonaktifkan. Sama dengan [`CLAUDE_CODE_ENABLE_AWAY_SUMMARY`](/id/env-vars) | `true` |

174| `awsAuthRefresh` | Skrip khusus yang memodifikasi direktori `.aws` (lihat [konfigurasi kredensial lanjutan](/id/amazon-bedrock#advanced-credential-configuration)) | `aws sso login --profile myprofile` |

175| `awsCredentialExport` | Skrip khusus yang menampilkan JSON dengan kredensial AWS (lihat [konfigurasi kredensial lanjutan](/id/amazon-bedrock#advanced-credential-configuration)) | `/bin/generate_aws_grant.sh` |

176| `blockedMarketplaces` | (Pengaturan yang dikelola saja) Daftar hitam sumber marketplace. Diterapkan pada penambahan marketplace dan instalasi plugin, pembaruan, penyegaran, dan auto-update, jadi marketplace yang ditambahkan sebelum kebijakan ditetapkan tidak dapat digunakan untuk mengambil plugin. Sumber yang diblokir diperiksa sebelum mengunduh, jadi mereka tidak pernah menyentuh sistem file. Lihat [Pembatasan marketplace yang dikelola](/id/plugin-marketplaces#managed-marketplace-restrictions) | `[{ "source": "github", "repo": "untrusted/plugins" }]` |

177| `channelsEnabled` | (Pengaturan yang dikelola saja) Izinkan [channels](/id/channels) untuk pengguna Team dan Enterprise. Tidak diatur atau `false` memblokir pengiriman pesan channel terlepas dari apa yang dilewatkan pengguna ke `--channels` | `true` |

178| `cleanupPeriodDays` | Sesi file yang lebih lama dari periode ini dihapus saat startup (default: 30 hari, minimum 1). Pengaturan ke `0` ditolak dengan kesalahan validasi. Juga mengontrol cutoff usia untuk penghapusan otomatis [worktrees subagent yatim piatu](/id/worktrees#clean-up-worktrees) saat startup. Untuk menonaktifkan penulisan transkrip sepenuhnya, atur variabel lingkungan [`CLAUDE_CODE_SKIP_PROMPT_HISTORY`](/id/env-vars), atau dalam mode non-interaktif (`-p`) gunakan flag `--no-session-persistence` atau opsi SDK `persistSession: false`. | `20` |

179| `companyAnnouncements` | Pengumuman untuk ditampilkan kepada pengguna saat startup. Jika beberapa pengumuman disediakan, mereka akan diputar secara acak. | `["Welcome to Acme Corp! Review our code guidelines at docs.acme.com"]` |

180| `defaultShell` | Shell default untuk perintah `!` input-box. Menerima `"bash"` (default) atau `"powershell"`. Pengaturan `"powershell"` merutekan perintah `!` interaktif melalui PowerShell di Windows. Memerlukan `CLAUDE_CODE_USE_POWERSHELL_TOOL=1`. Lihat [PowerShell tool](/id/tools-reference#powershell-tool) | `"powershell"` |

181| `deniedMcpServers` | Saat diatur dalam managed-settings.json, daftar hitam MCP servers yang secara eksplisit diblokir. Berlaku untuk semua cakupan termasuk servers yang dikelola. Daftar hitam memiliki prioritas atas daftar putih. Lihat [Konfigurasi MCP yang Dikelola](/id/mcp#managed-mcp-configuration) | `[{ "serverName": "filesystem" }]` |

182| `disableAllHooks` | Nonaktifkan semua [hooks](/id/hooks) dan [status line](/id/statusline) khusus apa pun | `true` |

183| `disableAutoMode` | Atur ke `"disable"` untuk mencegah [mode otomatis](/id/permission-modes#eliminate-prompts-with-auto-mode) diaktifkan. Menghapus `auto` dari siklus `Shift+Tab` dan menolak `--permission-mode auto` saat startup. Paling berguna dalam [pengaturan yang dikelola](/id/permissions#managed-settings) di mana pengguna tidak dapat menimpanya | `"disable"` |

184| `disableDeepLinkRegistration` | Atur ke `"disable"` untuk mencegah Claude Code mendaftarkan penanganan protokol `claude-cli://` dengan sistem operasi saat startup. Deep links memungkinkan tools eksternal membuka sesi Claude Code dengan prompt yang sudah diisi sebelumnya. Berguna di lingkungan di mana pendaftaran penanganan protokol dibatasi atau dikelola secara terpisah | `"disable"` |

185| `disabledMcpjsonServers` | Daftar MCP servers spesifik dari file `.mcp.json` untuk menolak | `["filesystem"]` |

186| `disableSkillShellExecution` | Nonaktifkan eksekusi shell inline untuk blok `` !`...` `` dan ` ```! ` dalam [skills](/id/skills) dan perintah khusus dari sumber pengguna, proyek, plugin, atau direktori tambahan. Perintah diganti dengan `[shell command execution disabled by policy]` daripada dijalankan. Skills bundel dan yang dikelola tidak terpengaruh. Paling berguna dalam [pengaturan yang dikelola](/id/permissions#managed-settings) di mana pengguna tidak dapat menimpanya | `true` |

187| `editorMode` | Mode binding kunci untuk prompt input: `"normal"` atau `"vim"`. Default: `"normal"`. Muncul di `/config` sebagai **Editor mode** | `"vim"` |

188| `effortLevel` | Pertahankan [tingkat usaha](/id/model-config#adjust-effort-level) di seluruh sesi. Menerima `"low"`, `"medium"`, `"high"`, atau `"xhigh"`. Ditulis secara otomatis saat Anda menjalankan `/effort` dengan salah satu nilai tersebut. Lihat [Sesuaikan tingkat usaha](/id/model-config#adjust-effort-level) untuk model yang didukung | `"xhigh"` |

189| `enableAllProjectMcpServers` | Secara otomatis menyetujui semua MCP servers yang ditentukan dalam file `.mcp.json` proyek | `true` |

190| `enabledMcpjsonServers` | Daftar MCP servers spesifik dari file `.mcp.json` untuk menyetujui | `["memory", "github"]` |

191| `env` | Variabel lingkungan yang akan diterapkan ke setiap sesi | `{"FOO": "bar"}` |

192| `fastModePerSessionOptIn` | Saat `true`, mode cepat tidak bertahan di seluruh sesi. Setiap sesi dimulai dengan mode cepat mati, memerlukan pengguna untuk mengaktifkannya dengan `/fast`. Preferensi mode cepat pengguna masih disimpan. Lihat [Memerlukan opt-in per sesi](/id/fast-mode#require-per-session-opt-in) | `true` |

193| `feedbackSurveyRate` | Probabilitas (0–1) bahwa [survei kualitas sesi](/id/data-usage#session-quality-surveys) muncul saat memenuhi syarat. Atur ke `0` untuk menekan sepenuhnya. Berguna saat menggunakan Bedrock, Vertex, atau Foundry di mana tingkat sampel default tidak berlaku | `0.05` |

194| `fileSuggestion` | Konfigurasikan skrip khusus untuk pelengkapan otomatis file `@`. Lihat [Pengaturan saran file](#file-suggestion-settings) | `{"type": "command", "command": "~/.claude/file-suggestion.sh"}` |

195| `forceLoginMethod` | Gunakan `claudeai` untuk membatasi login ke akun Claude.ai, `console` untuk membatasi login ke akun Claude Console (penagihan penggunaan API) | `claudeai` |

196| `forceLoginOrgUUID` | Memerlukan login untuk milik organisasi tertentu. Menerima string UUID tunggal, yang juga pra-memilih organisasi tersebut selama login, atau array UUID di mana organisasi yang terdaftar apa pun diterima tanpa pra-pemilihan. Saat diatur dalam pengaturan yang dikelola, login gagal jika akun yang diautentikasi tidak milik organisasi yang terdaftar; array kosong gagal tertutup dan memblokir login dengan pesan salah konfigurasi | `"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"` atau `["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy"]` |

197| `forceRemoteSettingsRefresh` | (Pengaturan yang dikelola saja) Blokir startup CLI sampai pengaturan yang dikelola jarak jauh segar diambil dari server. Jika pengambilan gagal, CLI keluar daripada melanjutkan dengan pengaturan yang di-cache atau tidak ada. Saat tidak diatur, startup berlanjut tanpa menunggu pengaturan jarak jauh. Lihat [penegakan fail-closed](/id/server-managed-settings#enforce-fail-closed-startup) | `true` |

198| `hooks` | Konfigurasikan perintah khusus untuk dijalankan pada acara siklus hidup. Lihat [dokumentasi hooks](/id/hooks) untuk format | Lihat [hooks](/id/hooks) |

199| `httpHookAllowedEnvVars` | Daftar putih nama variabel lingkungan yang dapat diinterpolasi oleh HTTP hooks ke dalam header. Saat diatur, `allowedEnvVars` efektif setiap hook adalah persimpangan dengan daftar ini. Tidak terdefinisi = tidak ada pembatasan. Array digabungkan di seluruh sumber pengaturan. Lihat [Konfigurasi Hook](#hook-configuration) | `["MY_TOKEN", "HOOK_SECRET"]` |

200| `includeCoAuthoredBy` | **Usang**: Gunakan `attribution` sebagai gantinya. Apakah akan menyertakan baris `co-authored-by Claude` dalam komit git dan pull request (default: `true`) | `false` |

201| `includeGitInstructions` | Sertakan instruksi alur kerja komit dan PR bawaan dan snapshot status git dalam prompt sistem Claude (default: `true`). Atur ke `false` untuk menghapus keduanya, misalnya saat menggunakan skills alur kerja git Anda sendiri. Variabel lingkungan `CLAUDE_CODE_DISABLE_GIT_INSTRUCTIONS` memiliki prioritas atas pengaturan ini saat diatur | `false` |

202| `language` | Konfigurasikan bahasa respons pilihan Claude (misalnya, `"japanese"`, `"spanish"`, `"french"`). Claude akan merespons dalam bahasa ini secara default. Juga menetapkan bahasa [voice dictation](/id/voice-dictation#change-the-dictation-language) | `"japanese"` |

203| `minimumVersion` | Lantai yang mencegah auto-updates latar belakang dan `claude update` dari menginstal versi di bawah ini. Beralih dari saluran `"latest"` ke `"stable"` melalui `/config` meminta Anda untuk tetap pada versi saat ini atau memungkinkan downgrade. Memilih untuk tetap menetapkan nilai ini. Juga berguna dalam [pengaturan yang dikelola](/id/permissions#managed-settings) untuk menyematkan minimum di seluruh organisasi | `"2.1.100"` |

204| `model` | Timpa model default untuk digunakan untuk Claude Code | `"claude-sonnet-4-6"` |

205| `modelOverrides` | Peta ID model Anthropic ke ID model spesifik penyedia seperti ARN profil inferensi Bedrock. Setiap entri pemilih model menggunakan nilai yang dipetakan saat memanggil API penyedia. Lihat [Timpa ID model per versi](/id/model-config#override-model-ids-per-version) | `{"claude-opus-4-6": "arn:aws:bedrock:..."}` |

206| `otelHeadersHelper` | Skrip untuk menghasilkan header OpenTelemetry dinamis. Berjalan saat startup dan secara berkala (lihat [Header dinamis](/id/monitoring-usage#dynamic-headers)) | `/bin/generate_otel_headers.sh` |

207| `outputStyle` | Konfigurasikan gaya output untuk menyesuaikan prompt sistem. Lihat [dokumentasi gaya output](/id/output-styles) | `"Explanatory"` |

208| `permissions` | Lihat tabel di bawah untuk struktur izin. | |

209| `plansDirectory` | Sesuaikan di mana file rencana disimpan. Jalur relatif terhadap akar proyek. Default: `~/.claude/plans` | `"./plans"` |

210| `pluginTrustMessage` | (Pengaturan yang dikelola saja) Pesan khusus ditambahkan ke peringatan kepercayaan plugin yang ditampilkan sebelum instalasi. Gunakan ini untuk menambahkan konteks spesifik organisasi, misalnya untuk mengonfirmasi bahwa plugin dari marketplace internal Anda telah disaring. | `"All plugins from our marketplace are approved by IT"` |

211| `preferredNotifChannel` | Metode untuk notifikasi task-complete dan permission-prompt: `"auto"`, `"terminal_bell"`, `"iterm2"`, `"iterm2_with_bell"`, `"kitty"`, `"ghostty"`, atau `"notifications_disabled"`. Default: `"auto"`, yang mengirim notifikasi desktop di iTerm2, Ghostty, dan Kitty dan tidak melakukan apa pun di terminal lain. Atur `"terminal_bell"` untuk membunyikan karakter bell di terminal apa pun. Muncul di `/config` sebagai **Notifications**. Lihat [Dapatkan terminal bell atau notifikasi](/id/terminal-config#get-a-terminal-bell-or-notification) | `"terminal_bell"` |

212| `prefersReducedMotion` | Kurangi atau nonaktifkan animasi UI (spinners, shimmer, efek flash) untuk aksesibilitas | `true` |

213| `prUrlTemplate` | Template URL untuk lencana PR yang ditampilkan di footer dan dalam ringkasan hasil tool. Mengganti `{host}`, `{owner}`, `{repo}`, `{number}`, dan `{url}` dari URL PR yang dilaporkan `gh`. Gunakan untuk mengarahkan tautan PR ke alat review kode internal daripada `github.com`. Tidak mempengaruhi autolinks `#123` dalam prosa Claude | `"https://reviews.example.com/{owner}/{repo}/pull/{number}"` |

214| `respectGitignore` | Kontrol apakah pemilih file `@` menghormati pola `.gitignore`. Saat `true` (default), file yang cocok dengan pola `.gitignore` dikecualikan dari saran | `false` |

215| `showClearContextOnPlanAccept` | Tampilkan opsi "clear context" pada layar penerimaan rencana. Default ke `false`. Atur ke `true` untuk mengembalikan opsi | `true` |

216| `showThinkingSummaries` | Tampilkan ringkasan [pemikiran yang diperluas](/id/model-config#extended-thinking) dalam sesi interaktif. Saat tidak diatur atau `false` (default dalam mode interaktif), blok pemikiran diredaksi oleh API dan ditampilkan sebagai stub yang runtuh. Redaksi hanya mengubah apa yang Anda lihat, bukan apa yang dihasilkan model: untuk mengurangi pengeluaran pemikiran, [turunkan anggaran atau nonaktifkan pemikiran](/id/model-config#extended-thinking) sebagai gantinya. Mode non-interaktif (`-p`) dan pemanggil SDK selalu menerima ringkasan terlepas dari pengaturan ini | `true` |

217| `showTurnDuration` | Tampilkan pesan durasi giliran setelah respons, misalnya "Cooked for 1m 6s". Default: `true`. Muncul di `/config` sebagai **Show turn duration** | `false` |

218| `skipWebFetchPreflight` | Lewati [pemeriksaan keamanan domain WebFetch](/id/data-usage#webfetch-domain-safety-check) yang mengirim setiap nama host yang diminta ke `api.anthropic.com` sebelum mengambil. Atur ke `true` di lingkungan yang memblokir lalu lintas ke Anthropic, seperti penyebaran Bedrock, Vertex AI, atau Foundry dengan egress yang ketat. Saat dilewati, WebFetch mencoba URL apa pun tanpa berkonsultasi dengan daftar blokir | `true` |

219| `spinnerTipsEnabled` | Tampilkan tips dalam spinner saat Claude bekerja. Atur ke `false` untuk menonaktifkan tips (default: `true`) | `false` |

220| `spinnerTipsOverride` | Timpa tips spinner dengan string khusus. `tips`: array string tip. `excludeDefault`: jika `true`, hanya tampilkan tips khusus; jika `false` atau tidak ada, tips khusus digabungkan dengan tips bawaan | `{ "excludeDefault": true, "tips": ["Use our internal tool X"] }` |

221| `spinnerVerbs` | Sesuaikan kata kerja aksi yang ditampilkan dalam spinner dan pesan durasi giliran. Atur `mode` ke `"replace"` untuk menggunakan hanya kata kerja Anda, atau `"append"` untuk menambahkannya ke default | `{"mode": "append", "verbs": ["Pondering", "Crafting"]}` |

222| `sshConfigs` | Koneksi SSH untuk ditampilkan dalam dropdown lingkungan [Desktop](/id/desktop#pre-configure-ssh-connections-for-your-team). Setiap entri memerlukan `id`, `name`, dan `sshHost`; `sshPort`, `sshIdentityFile`, dan `startDirectory` bersifat opsional. Saat diatur dalam pengaturan yang dikelola, koneksi bersifat read-only untuk pengguna. Dibaca dari pengaturan yang dikelola dan pengguna saja | `[{"id": "dev-vm", "name": "Dev VM", "sshHost": "user@dev.example.com"}]` |

223| `statusLine` | Konfigurasikan status line khusus untuk menampilkan konteks. Lihat [dokumentasi `statusLine`](/id/statusline) | `{"type": "command", "command": "~/.claude/statusline.sh"}` |

224| `strictKnownMarketplaces` | (Pengaturan yang dikelola saja) Daftar putih sumber marketplace plugin. Tidak terdefinisi = tidak ada pembatasan, array kosong = lockdown. Diterapkan pada penambahan marketplace dan instalasi plugin, pembaruan, penyegaran, dan auto-update, jadi marketplace yang ditambahkan sebelum kebijakan ditetapkan tidak dapat digunakan untuk mengambil plugin. Lihat [Pembatasan marketplace yang dikelola](/id/plugin-marketplaces#managed-marketplace-restrictions) | `[{ "source": "github", "repo": "acme-corp/plugins" }]` |

225| `teammateMode` | Bagaimana [rekan tim agent](/id/agent-teams) ditampilkan: `auto` (memilih panel terpisah di tmux atau iTerm2, dalam proses sebaliknya), `in-process`, atau `tmux`. Lihat [pilih mode tampilan](/id/agent-teams#choose-a-display-mode) | `"in-process"` |

226| `terminalProgressBarEnabled` | Tampilkan bilah kemajuan terminal di terminal yang didukung: ConEmu, Ghostty 1.2.0+, dan iTerm2 3.6.6+. Default: `true`. Muncul di `/config` sebagai **Terminal progress bar** | `false` |

227| `tui` | Renderer UI terminal. Gunakan `"fullscreen"` untuk renderer alt-screen bebas flicker dengan scrollback virtual. Gunakan `"default"` untuk renderer main-screen klasik. Atur melalui `/tui` | `"fullscreen"` |

228| `useAutoModeDuringPlan` | Apakah plan mode menggunakan semantik mode otomatis saat mode otomatis tersedia. Default: `true`. Tidak dibaca dari pengaturan proyek bersama. Muncul di `/config` sebagai "Use auto mode during plan" | `false` |

229| `viewMode` | Mode tampilan transkrip default saat startup: `"default"`, `"verbose"`, atau `"focus"`. Menimpa pemilihan `/focus` yang lengket saat diatur | `"verbose"` |

230| `voice` | Pengaturan [voice dictation](/id/voice-dictation): `enabled` mengaktifkan dictation, `mode` memilih `"hold"` atau `"tap"`, dan `autoSubmit` mengirim prompt pada pelepasan kunci dalam mode hold. Ditulis secara otomatis saat Anda menjalankan `/voice`. Memerlukan akun Claude.ai | `{ "enabled": true, "mode": "tap" }` |

231| `voiceEnabled` | Alias warisan untuk `voice.enabled`. Lebih suka objek `voice` | `true` |

232| `wslInheritsWindowsSettings` | (Pengaturan yang dikelola Windows saja) Saat `true`, Claude Code di WSL membaca pengaturan yang dikelola dari rantai kebijakan Windows selain `/etc/claude-code`, dengan sumber Windows memiliki prioritas. Hanya dihormati saat diatur dalam kunci registry HKLM atau `C:\Program Files\ClaudeCode\managed-settings.json`, keduanya memerlukan admin Windows untuk menulis. Untuk kebijakan HKCU juga berlaku di WSL, flag harus juga diatur di HKCU itu sendiri. Tidak berpengaruh pada Windows asli | `true` |

233 

234### Pengaturan konfigurasi global

235 

236Pengaturan ini disimpan dalam `~/.claude.json` daripada `settings.json`. Menambahkannya ke `settings.json` akan memicu kesalahan validasi skema.

237 

238<Note>

239 Versi sebelum v2.1.119 juga menyimpan `autoScrollEnabled`, `editorMode`, `showTurnDuration`, `teammateMode`, dan `terminalProgressBarEnabled` di sini daripada dalam `settings.json`.

240</Note>

241 

242| Kunci | Deskripsi | Contoh |

243| :------------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------ |

244| `autoConnectIde` | Secara otomatis terhubung ke IDE yang sedang berjalan saat Claude Code dimulai dari terminal eksternal. Default: `false`. Muncul di `/config` sebagai **Auto-connect to IDE (external terminal)** saat berjalan di luar terminal VS Code atau JetBrains | `true` |

245| `autoInstallIdeExtension` | Secara otomatis instal ekstensi IDE Claude Code saat berjalan dari terminal VS Code. Default: `true`. Muncul di `/config` sebagai **Auto-install IDE extension** saat berjalan di dalam terminal VS Code atau JetBrains. Anda juga dapat menetapkan variabel lingkungan [`CLAUDE_CODE_IDE_SKIP_AUTO_INSTALL`](/id/env-vars) | `false` |

246| `externalEditorContext` | Tambahkan respons sebelumnya Claude sebagai konteks berkomentar `#` saat Anda membuka editor eksternal dengan `Ctrl+G`. Default: `false`. Muncul di `/config` sebagai **Show last response in external editor** | `true` |

247 

248### Pengaturan worktree

249 

250Konfigurasikan bagaimana `--worktree` membuat dan mengelola git worktrees. Gunakan pengaturan ini untuk mengurangi penggunaan disk dan waktu startup di monorepo besar.

251 

252| Kunci | Deskripsi | Contoh |

253| :---------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :------------------------------------ |

254| `worktree.symlinkDirectories` | Direktori untuk symlink dari repositori utama ke setiap worktree untuk menghindari duplikasi direktori besar di disk. Tidak ada direktori yang disymlink secara default | `["node_modules", ".cache"]` |

255| `worktree.sparsePaths` | Direktori untuk diperiksa di setiap worktree melalui git sparse-checkout (mode cone). Hanya jalur yang terdaftar yang ditulis ke disk, yang lebih cepat di monorepo besar | `["packages/my-app", "shared/utils"]` |

256 

257Untuk menyalin file yang diabaikan git seperti `.env` ke worktrees baru, gunakan file [`.worktreeinclude`](/id/worktrees#copy-gitignored-files-into-worktrees) di akar proyek Anda daripada pengaturan.

258 

259### Pengaturan izin

260 

261| Kunci | Deskripsi | Contoh |

262| :---------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- |

263| `allow` | Array aturan izin untuk memungkinkan penggunaan tool. Lihat [Sintaks aturan izin](#permission-rule-syntax) di bawah untuk detail pencocokan pola | `[ "Bash(git diff *)" ]` |

264| `ask` | Array aturan izin untuk meminta konfirmasi saat penggunaan tool. Lihat [Sintaks aturan izin](#permission-rule-syntax) di bawah | `[ "Bash(git push *)" ]` |

265| `deny` | Array aturan izin untuk menolak penggunaan tool. Gunakan ini untuk mengecualikan file sensitif dari akses Claude Code. Lihat [Sintaks aturan izin](#permission-rule-syntax) dan [Batasan izin Bash](/id/permissions#tool-specific-permission-rules) | `[ "WebFetch", "Bash(curl *)", "Read(./.env)", "Read(./secrets/**)" ]` |

266| `additionalDirectories` | [Direktori kerja](/id/permissions#working-directories) tambahan untuk akses file. Sebagian besar konfigurasi `.claude/` [tidak ditemukan](/id/permissions#additional-directories-grant-file-access-not-configuration) dari direktori ini | `[ "../docs/" ]` |

267| `defaultMode` | Mode [izin](/id/permission-modes) default saat membuka Claude Code. Nilai yang valid: `default`, `acceptEdits`, `plan`, `auto`, `dontAsk`, `bypassPermissions`. Flag CLI `--permission-mode` menimpa pengaturan ini untuk sesi tunggal | `"acceptEdits"` |

268| `disableBypassPermissionsMode` | Atur ke `"disable"` untuk mencegah mode `bypassPermissions` diaktifkan. Ini menonaktifkan flag baris perintah `--dangerously-skip-permissions`. Paling berguna dalam [pengaturan yang dikelola](/id/permissions#managed-settings) di mana pengguna tidak dapat menimpanya | `"disable"` |

269| `skipDangerousModePermissionPrompt` | Lewati prompt konfirmasi yang ditampilkan sebelum memasuki mode bypass permissions melalui `--dangerously-skip-permissions` atau `defaultMode: "bypassPermissions"`. Diabaikan saat diatur dalam pengaturan proyek (`.claude/settings.json`) untuk mencegah repositori yang tidak terpercaya dari auto-bypass prompt | `true` |

270 

271### Sintaks aturan izin

272 

273Aturan izin mengikuti format `Tool` atau `Tool(specifier)`. Aturan dievaluasi secara berurutan: aturan deny terlebih dahulu, kemudian ask, kemudian allow. Aturan pertama yang cocok menang.

274 

275Contoh cepat:

276 

277| Aturan | Efek |

278| :----------------------------- | :-------------------------------------------------- |

279| `Bash` | Cocok dengan semua perintah Bash |

280| `Bash(npm run *)` | Cocok dengan perintah yang dimulai dengan `npm run` |

281| `Read(./.env)` | Cocok dengan membaca file `.env` |

282| `WebFetch(domain:example.com)` | Cocok dengan permintaan fetch ke example.com |

283 

284Untuk referensi sintaks aturan lengkap, termasuk perilaku wildcard, pola spesifik tool untuk Read, Edit, WebFetch, MCP, dan aturan Agent, dan batasan keamanan pola Bash, lihat [Sintaks aturan izin](/id/permissions#permission-rule-syntax).

285 

286### Pengaturan sandbox

287 

288Konfigurasikan perilaku sandboxing lanjutan. Sandboxing mengisolasi perintah bash dari sistem file dan jaringan Anda. Lihat [Sandboxing](/id/sandboxing) untuk detail.

289 

290| Kunci | Deskripsi | Contoh |

291| :------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------- |

292| `enabled` | Aktifkan bash sandboxing (macOS, Linux, dan WSL2). Default: false | `true` |

293| `failIfUnavailable` | Keluar dengan kesalahan saat startup jika `sandbox.enabled` adalah true tetapi sandbox tidak dapat dimulai (dependensi yang hilang atau platform yang tidak didukung). Saat false (default), peringatan ditampilkan dan perintah berjalan tanpa sandbox. Dimaksudkan untuk penyebaran pengaturan yang dikelola yang memerlukan sandboxing sebagai gerbang keras | `true` |

294| `autoAllowBashIfSandboxed` | Secara otomatis menyetujui perintah bash saat sandboxed. Default: true | `true` |

295| `excludedCommands` | Perintah yang harus dijalankan di luar sandbox | `["docker *"]` |

296| `allowUnsandboxedCommands` | Izinkan perintah dijalankan di luar sandbox melalui parameter `dangerouslyDisableSandbox`. Saat diatur ke `false`, pintu keluar `dangerouslyDisableSandbox` sepenuhnya dinonaktifkan dan semua perintah harus dijalankan sandboxed (atau berada dalam `excludedCommands`). Berguna untuk kebijakan perusahaan yang memerlukan sandboxing ketat. Default: true | `false` |

297| `filesystem.allowWrite` | Jalur tambahan di mana perintah sandboxed dapat menulis. Array digabungkan di seluruh semua cakupan pengaturan: jalur pengguna, proyek, dan yang dikelola digabungkan, bukan diganti. Juga digabungkan dengan jalur dari aturan izin `Edit(...)` allow. Lihat [prefiks jalur sandbox](#sandbox-path-prefixes) di bawah. | `["/tmp/build", "~/.kube"]` |

298| `filesystem.denyWrite` | Jalur di mana perintah sandboxed tidak dapat menulis. Array digabungkan di seluruh semua cakupan pengaturan. Juga digabungkan dengan jalur dari aturan izin `Edit(...)` deny. | `["/etc", "/usr/local/bin"]` |

299| `filesystem.denyRead` | Jalur di mana perintah sandboxed tidak dapat membaca. Array digabungkan di seluruh semua cakupan pengaturan. Juga digabungkan dengan jalur dari aturan izin `Read(...)` deny. | `["~/.aws/credentials"]` |

300| `filesystem.allowRead` | Jalur untuk mengizinkan kembali pembacaan dalam region `denyRead`. Memiliki prioritas atas `denyRead`. Array digabungkan di seluruh semua cakupan pengaturan. Gunakan ini untuk membuat pola akses baca khusus workspace. | `["."]` |

301| `filesystem.allowManagedReadPathsOnly` | (Pengaturan yang dikelola saja) Hanya jalur `filesystem.allowRead` dari pengaturan yang dikelola yang dihormati. `denyRead` masih digabungkan dari semua sumber. Default: false | `true` |

302| `network.allowUnixSockets` | (macOS saja) Jalur soket Unix yang dapat diakses dalam sandbox. Diabaikan di Linux dan WSL2, di mana filter seccomp tidak dapat memeriksa jalur soket; gunakan `allowAllUnixSockets` sebagai gantinya. | `["~/.ssh/agent-socket"]` |

303| `network.allowAllUnixSockets` | Izinkan semua koneksi soket Unix dalam sandbox. Di Linux dan WSL2 ini adalah satu-satunya cara untuk mengizinkan soket Unix, karena melewati filter seccomp yang sebaliknya memblokir panggilan `socket(AF_UNIX, ...)`. Default: false | `true` |

304| `network.allowLocalBinding` | Izinkan pengikatan ke port localhost (macOS saja). Default: false | `true` |

305| `network.allowMachLookup` | Nama layanan XPC/Mach tambahan yang dapat dicari sandbox (macOS saja). Mendukung `*` tunggal di akhir untuk pencocokan prefiks. Diperlukan untuk tools yang berkomunikasi melalui XPC seperti iOS Simulator atau Playwright. | `["com.apple.coresimulator.*"]` |

306| `network.allowedDomains` | Array domain untuk memungkinkan lalu lintas jaringan keluar. Mendukung wildcard (misalnya, `*.example.com`). | `["github.com", "*.npmjs.org"]` |

307| `network.deniedDomains` | Array domain untuk memblokir lalu lintas jaringan keluar. Mendukung sintaks wildcard yang sama seperti `allowedDomains`. Memiliki prioritas atas `allowedDomains` saat keduanya cocok. Digabungkan dari semua sumber pengaturan terlepas dari `allowManagedDomainsOnly`. | `["sensitive.cloud.example.com"]` |

308| `network.allowManagedDomainsOnly` | (Pengaturan yang dikelola saja) Hanya `allowedDomains` dan aturan allow `WebFetch(domain:...)` dari pengaturan yang dikelola yang dihormati. Domain dari pengaturan pengguna, proyek, dan lokal diabaikan. Domain yang tidak diizinkan diblokir secara otomatis tanpa meminta pengguna. Domain yang ditolak masih dihormati dari semua sumber. Default: false | `true` |

309| `network.httpProxyPort` | Port proxy HTTP yang digunakan jika Anda ingin membawa proxy Anda sendiri. Jika tidak ditentukan, Claude akan menjalankan proxy-nya sendiri. | `8080` |

310| `network.socksProxyPort` | Port proxy SOCKS5 yang digunakan jika Anda ingin membawa proxy Anda sendiri. Jika tidak ditentukan, Claude akan menjalankan proxy-nya sendiri. | `8081` |

311| `enableWeakerNestedSandbox` | Aktifkan sandbox yang lebih lemah untuk lingkungan Docker tanpa hak istimewa (Linux dan WSL2 saja). **Mengurangi keamanan.** Default: false | `true` |

312| `enableWeakerNetworkIsolation` | (macOS saja) Izinkan akses ke layanan kepercayaan TLS sistem (`com.apple.trustd.agent`) dalam sandbox. Diperlukan untuk tools berbasis Go seperti `gh`, `gcloud`, dan `terraform` untuk memverifikasi sertifikat TLS saat menggunakan `httpProxyPort` dengan proxy MITM dan CA khusus. **Mengurangi keamanan** dengan membuka jalur eksfiltrasi data potensial. Default: false | `true` |

313 

314#### Prefiks jalur sandbox

315 

316Jalur dalam `filesystem.allowWrite`, `filesystem.denyWrite`, `filesystem.denyRead`, dan `filesystem.allowRead` mendukung prefiks ini:

317 

318| Prefiks | Arti | Contoh |

319| :-------------------------- | :-------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------- |

320| `/` | Jalur absolut dari akar sistem file | `/tmp/build` tetap `/tmp/build` |

321| `~/` | Relatif terhadap direktori home | `~/.kube` menjadi `$HOME/.kube` |

322| `./` atau tidak ada prefiks | Relatif terhadap akar proyek untuk pengaturan proyek, atau ke `~/.claude` untuk pengaturan pengguna | `./output` dalam `.claude/settings.json` diselesaikan ke `<project-root>/output` |

323 

324Prefiks `//path` yang lebih lama untuk jalur absolut masih berfungsi. Jika Anda sebelumnya menggunakan `/path` tunggal mengharapkan resolusi relatif proyek, beralih ke `./path`. Sintaks ini berbeda dari [aturan izin Read dan Edit](/id/permissions#read-and-edit), yang menggunakan `//path` untuk absolut dan `/path` untuk relatif proyek. Jalur sistem file sandbox menggunakan konvensi standar: `/tmp/build` adalah jalur absolut.

325 

326**Contoh konfigurasi:**

327 

328```json theme={null}

329{

330 "sandbox": {

331 "enabled": true,

332 "autoAllowBashIfSandboxed": true,

333 "excludedCommands": ["docker *"],

334 "filesystem": {

335 "allowWrite": ["/tmp/build", "~/.kube"],

336 "denyRead": ["~/.aws/credentials"]

337 },

338 "network": {

339 "allowedDomains": ["github.com", "*.npmjs.org", "registry.yarnpkg.com"],

340 "deniedDomains": ["uploads.github.com"],

341 "allowUnixSockets": [

342 "/var/run/docker.sock"

343 ],

344 "allowLocalBinding": true

345 }

346 }

347}

348```

349 

350**Pembatasan sistem file dan jaringan** dapat dikonfigurasi dalam dua cara yang digabungkan bersama:

351 

352* **Pengaturan `sandbox.filesystem`** (ditampilkan di atas): Kontrol jalur pada batas sandbox tingkat OS. Pembatasan ini berlaku untuk semua perintah subprocess (misalnya, `kubectl`, `terraform`, `npm`), bukan hanya tools file Claude.

353* **Aturan izin**: Gunakan aturan allow/deny `Edit` untuk mengontrol akses tools file Claude, aturan deny `Read` untuk memblokir pembacaan, dan aturan allow/deny `WebFetch` untuk mengontrol domain jaringan. Jalur dari aturan ini juga digabungkan ke dalam konfigurasi sandbox.

354 

355### Pengaturan atribusi

356 

357Claude Code menambahkan atribusi ke komit git dan pull request. Ini dikonfigurasi secara terpisah:

358 

359* Komit menggunakan [git trailers](https://git-scm.com/docs/git-interpret-trailers) (seperti `Co-Authored-By`) secara default, yang dapat disesuaikan atau dinonaktifkan

360* Deskripsi pull request adalah teks biasa

361 

362| Kunci | Deskripsi |

363| :------- | :---------------------------------------------------------------------------------------------- |

364| `commit` | Atribusi untuk komit git, termasuk trailer apa pun. String kosong menyembunyikan atribusi komit |

365| `pr` | Atribusi untuk deskripsi pull request. String kosong menyembunyikan atribusi pull request |

366 

367**Atribusi komit default:**

368 

369```text theme={null}

370🤖 Generated with [Claude Code](https://claude.com/claude-code)

371 

372 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

373```

374 

375**Atribusi pull request default:**

376 

377```text theme={null}

378🤖 Generated with [Claude Code](https://claude.com/claude-code)

379```

380 

381**Contoh:**

382 

383```json theme={null}

384{

385 "attribution": {

386 "commit": "Generated with AI\n\nCo-Authored-By: AI <ai@example.com>",

387 "pr": ""

388 }

389}

390```

391 

392<Note>

393 Pengaturan `attribution` memiliki prioritas atas pengaturan `includeCoAuthoredBy` yang usang. Untuk menyembunyikan semua atribusi, atur `commit` dan `pr` ke string kosong.

394</Note>

395 

396### Pengaturan saran file

397 

398Konfigurasikan perintah khusus untuk pelengkapan otomatis jalur file `@`. Saran file bawaan menggunakan traversal sistem file cepat, tetapi monorepo besar mungkin mendapat manfaat dari pengindeksan spesifik proyek seperti indeks file yang telah dibangun sebelumnya atau tooling khusus.

399 

400```json theme={null}

401{

402 "fileSuggestion": {

403 "type": "command",

404 "command": "~/.claude/file-suggestion.sh"

405 }

406}

407```

408 

409Perintah berjalan dengan variabel lingkungan yang sama seperti [hooks](/id/hooks), termasuk `CLAUDE_PROJECT_DIR`. Ini menerima JSON melalui stdin dengan bidang `query`:

410 

411```json theme={null}

412{"query": "src/comp"}

413```

414 

415Keluarkan jalur file yang dipisahkan baris baru ke stdout (saat ini dibatasi hingga 15):

416 

417```text theme={null}

418src/components/Button.tsx

419src/components/Modal.tsx

420src/components/Form.tsx

421```

422 

423**Contoh:**

424 

425```bash theme={null}

426#!/bin/bash

427query=$(cat | jq -r '.query')

428your-repo-file-index --query "$query" | head -20

429```

430 

431### Konfigurasi hook

432 

433Pengaturan ini mengontrol hook mana yang diizinkan untuk dijalankan dan apa yang dapat diakses oleh HTTP hooks. Pengaturan `allowManagedHooksOnly` hanya dapat dikonfigurasi dalam [pengaturan yang dikelola](#settings-files). Daftar putih URL dan env var dapat diatur di tingkat pengaturan apa pun dan digabungkan di seluruh sumber.

434 

435**Perilaku saat `allowManagedHooksOnly` adalah `true`:**

436 

437* Hooks yang dikelola dan hooks SDK dimuat

438* Hooks dari plugins yang dipaksa diaktifkan dalam pengaturan yang dikelola `enabledPlugins` dimuat. Ini memungkinkan administrator mendistribusikan hooks yang disaring melalui marketplace organisasi sambil memblokir segalanya. Kepercayaan diberikan oleh ID `plugin@marketplace` penuh, jadi plugin dengan nama yang sama dari marketplace berbeda tetap diblokir

439* Hooks pengguna, hooks proyek, dan semua plugin hooks lainnya diblokir

440 

441**Batasi URL HTTP hook:**

442 

443Batasi URL mana yang dapat ditargetkan oleh HTTP hooks. Mendukung `*` sebagai wildcard untuk pencocokan. Saat array didefinisikan, HTTP hooks yang menargetkan URL yang tidak cocok diblokir secara diam-diam.

444 

445```json theme={null}

446{

447 "allowedHttpHookUrls": ["https://hooks.example.com/*", "http://localhost:*"]

448}

449```

450 

451**Batasi variabel lingkungan HTTP hook:**

452 

453Batasi nama variabel lingkungan mana yang dapat diinterpolasi oleh HTTP hooks ke dalam nilai header. `allowedEnvVars` efektif setiap hook adalah persimpangan dari daftar sendiri dan pengaturan ini.

454 

455```json theme={null}

456{

457 "httpHookAllowedEnvVars": ["MY_TOKEN", "HOOK_SECRET"]

458}

459```

460 

461### Prioritas pengaturan

462 

463Pengaturan berlaku dalam urutan prioritas. Dari tertinggi ke terendah:

464 

4651. **Pengaturan yang dikelola** ([yang dikelola server](/id/server-managed-settings), [kebijakan tingkat MDM/OS](#configuration-scopes), atau [pengaturan yang dikelola](/id/settings#settings-files))

466 * Kebijakan yang digunakan oleh IT melalui pengiriman server, profil konfigurasi MDM, kebijakan registry, atau file pengaturan yang dikelola

467 * Tidak dapat ditimpa oleh tingkat apa pun, termasuk argumen baris perintah

468 * Dalam tingkat yang dikelola, prioritas adalah: yang dikelola server > kebijakan tingkat MDM/OS > file-based (`managed-settings.d/*.json` + `managed-settings.json`) > registry HKCU (Windows saja). Hanya satu sumber yang dikelola yang digunakan; sumber tidak digabungkan di seluruh tingkat. Dalam tingkat berbasis file, file drop-in dan file dasar digabungkan bersama.

469 

4702. **Argumen baris perintah**

471 * Penggantian sementara untuk sesi tertentu

472 

4733. **Pengaturan proyek lokal** (`.claude/settings.local.json`)

474 * Pengaturan proyek pribadi

475 

4764. **Pengaturan proyek bersama** (`.claude/settings.json`)

477 * Pengaturan proyek bersama tim dalam kontrol sumber

478 

4795. **Pengaturan pengguna** (`~/.claude/settings.json`)

480 * Pengaturan global pribadi

481 

482Hierarki ini memastikan bahwa kebijakan organisasi selalu diterapkan sambil tetap memungkinkan tim dan individu untuk menyesuaikan pengalaman mereka. Prioritas yang sama berlaku apakah Anda menjalankan Claude Code dari CLI, [ekstensi VS Code](/id/vs-code), atau [IDE JetBrains](/id/jetbrains).

483 

484Misalnya, jika pengaturan pengguna Anda memungkinkan `Bash(npm run *)` tetapi pengaturan bersama proyek menolaknya, pengaturan proyek memiliki prioritas dan perintah diblokir.

485 

486<Note>

487 **Pengaturan array digabungkan di seluruh cakupan.** Ketika pengaturan yang bernilai array yang sama (seperti `sandbox.filesystem.allowWrite` atau `permissions.allow`) muncul dalam beberapa cakupan, array **digabungkan dan dihilangkan duplikatnya**, bukan diganti. Ini berarti cakupan prioritas lebih rendah dapat menambahkan entri tanpa menimpa yang ditetapkan oleh cakupan prioritas lebih tinggi, dan sebaliknya. Misalnya, jika pengaturan yang dikelola menetapkan `allowWrite` ke `["/opt/company-tools"]` dan pengguna menambahkan `["~/.kube"]`, kedua jalur disertakan dalam konfigurasi akhir.

488</Note>

489 

490### Verifikasi pengaturan aktif

491 

492Jalankan `/status` di dalam Claude Code untuk melihat sumber pengaturan mana yang aktif dan dari mana asalnya. Output menunjukkan setiap lapisan konfigurasi (yang dikelola, pengguna, proyek) bersama dengan asalnya, seperti `Enterprise managed settings (remote)`, `Enterprise managed settings (plist)`, `Enterprise managed settings (HKLM)`, `Enterprise managed settings (HKCU)`, atau `Enterprise managed settings (file)`. Jika file pengaturan berisi kesalahan, `/status` melaporkan masalah sehingga Anda dapat memperbaikinya.

493 

494### Poin kunci tentang sistem konfigurasi

495 

496* **File memori (`CLAUDE.md`)**: Berisi instruksi dan konteks yang dimuat Claude saat startup

497* **File pengaturan (JSON)**: Konfigurasikan izin, variabel lingkungan, dan perilaku tool

498* **Skills**: Prompt khusus yang dapat dipanggil dengan `/skill-name` atau dimuat oleh Claude secara otomatis

499* **MCP servers**: Perluas Claude Code dengan tools dan integrasi tambahan

500* **Prioritas**: Konfigurasi tingkat lebih tinggi (Managed) menimpa yang tingkat lebih rendah (User/Project)

501* **Warisan**: Pengaturan digabungkan, dengan pengaturan yang lebih spesifik menambah atau menimpa yang lebih luas

502 

503### Prompt sistem

504 

505Prompt sistem internal Claude Code tidak dipublikasikan. Untuk menambahkan instruksi khusus, gunakan file `CLAUDE.md` atau flag `--append-system-prompt`.

506 

507### Mengecualikan file sensitif

508 

509Untuk mencegah Claude Code mengakses file yang berisi informasi sensitif seperti kunci API, rahasia, dan file lingkungan, gunakan pengaturan `permissions.deny` dalam file `.claude/settings.json` Anda:

510 

511```json theme={null}

512{

513 "permissions": {

514 "deny": [

515 "Read(./.env)",

516 "Read(./.env.*)",

517 "Read(./secrets/**)",

518 "Read(./config/credentials.json)",

519 "Read(./build)"

520 ]

521 }

522}

523```

524 

525Ini menggantikan konfigurasi `ignorePatterns` yang usang. File yang cocok dengan pola ini dikecualikan dari penemuan file dan hasil pencarian, dan operasi baca pada file ini ditolak.

526 

527## Konfigurasi subagent

528 

529Claude Code mendukung subagents AI khusus yang dapat dikonfigurasi di tingkat pengguna dan proyek. Subagents ini disimpan sebagai file Markdown dengan frontmatter YAML:

530 

531* **Subagents pengguna**: `~/.claude/agents/` - Tersedia di semua proyek Anda

532* **Subagents proyek**: `.claude/agents/` - Spesifik untuk proyek Anda dan dapat dibagikan dengan tim Anda

533 

534File subagent mendefinisikan asisten AI khusus dengan prompt khusus dan izin tool. Pelajari lebih lanjut tentang membuat dan menggunakan subagents dalam [dokumentasi subagents](/id/sub-agents).

535 

536## Konfigurasi plugin

537 

538Claude Code mendukung sistem plugin yang memungkinkan Anda memperluas fungsionalitas dengan skills, agents, hooks, dan MCP servers. Plugin didistribusikan melalui marketplace dan dapat dikonfigurasi di tingkat pengguna dan repositori.

539 

540### Pengaturan plugin

541 

542Pengaturan terkait plugin dalam `settings.json`:

543 

544```json theme={null}

545{

546 "enabledPlugins": {

547 "formatter@acme-tools": true,

548 "deployer@acme-tools": true,

549 "analyzer@security-plugins": false

550 },

551 "extraKnownMarketplaces": {

552 "acme-tools": {

553 "source": "github",

554 "repo": "acme-corp/claude-plugins"

555 }

556 }

557}

558```

559 

560#### `enabledPlugins`

561 

562Mengontrol plugin mana yang diaktifkan. Format: `"plugin-name@marketplace-name": true/false`

563 

564**Cakupan**:

565 

566* **Pengaturan pengguna** (`~/.claude/settings.json`): Preferensi plugin pribadi

567* **Pengaturan proyek** (`.claude/settings.json`): Plugin spesifik proyek yang dibagikan dengan tim

568* **Pengaturan lokal** (`.claude/settings.local.json`): Penggantian per-mesin (tidak dikomit)

569* **Pengaturan yang dikelola** (`managed-settings.json`): Penggantian kebijakan organisasi yang memblokir instalasi di semua cakupan dan menyembunyikan plugin dari marketplace

570 

571**Contoh**:

572 

573```json theme={null}

574{

575 "enabledPlugins": {

576 "code-formatter@team-tools": true,

577 "deployment-tools@team-tools": true,

578 "experimental-features@personal": false

579 }

580}

581```

582 

583#### `extraKnownMarketplaces`

584 

585Mendefinisikan marketplace tambahan yang harus tersedia untuk repositori. Biasanya digunakan dalam pengaturan tingkat repositori untuk memastikan anggota tim memiliki akses ke sumber plugin yang diperlukan.

586 

587**Ketika repositori menyertakan `extraKnownMarketplaces`**:

588 

5891. Anggota tim diminta untuk menginstal marketplace saat mereka mempercayai folder

5902. Anggota tim kemudian diminta untuk menginstal plugin dari marketplace tersebut

5913. Pengguna dapat melewati marketplace atau plugin yang tidak diinginkan (disimpan dalam pengaturan pengguna)

5924. Instalasi menghormati batas kepercayaan dan memerlukan persetujuan eksplisit

593 

594**Contoh**:

595 

596```json theme={null}

597{

598 "extraKnownMarketplaces": {

599 "acme-tools": {

600 "source": {

601 "source": "github",

602 "repo": "acme-corp/claude-plugins"

603 }

604 },

605 "security-plugins": {

606 "source": {

607 "source": "git",

608 "url": "https://git.example.com/security/plugins.git"

609 }

610 }

611 }

612}

613```

614 

615**Jenis sumber marketplace**:

616 

617* `github`: Repositori GitHub (menggunakan `repo`)

618* `git`: URL git apa pun (menggunakan `url`)

619* `directory`: Jalur sistem file lokal (menggunakan `path`, hanya untuk pengembangan)

620* `hostPattern`: Pola regex untuk mencocokkan host marketplace (menggunakan `hostPattern`)

621* `settings`: marketplace inline yang dideklarasikan langsung dalam settings.json tanpa repositori yang dihosting terpisah (menggunakan `name` dan `plugins`)

622 

623Gunakan `source: 'settings'` untuk mendeklarasikan serangkaian plugin kecil inline tanpa menyiapkan repositori marketplace yang dihosting. Plugin yang terdaftar di sini harus mereferensikan sumber eksternal seperti GitHub atau npm. Anda masih perlu mengaktifkan setiap plugin secara terpisah dalam `enabledPlugins`.

624 

625```json theme={null}

626{

627 "extraKnownMarketplaces": {

628 "team-tools": {

629 "source": {

630 "source": "settings",

631 "name": "team-tools",

632 "plugins": [

633 {

634 "name": "code-formatter",

635 "source": {

636 "source": "github",

637 "repo": "acme-corp/code-formatter"

638 }

639 }

640 ]

641 }

642 }

643 }

644}

645```

646 

647#### `strictKnownMarketplaces`

648 

649**Pengaturan yang dikelola saja**: Mengontrol marketplace plugin mana yang diizinkan pengguna untuk ditambahkan dan menginstal plugin darinya. Pengaturan ini hanya dapat dikonfigurasi dalam [pengaturan yang dikelola](/id/settings#settings-files) dan memberikan administrator kontrol ketat atas sumber marketplace.

650 

651**Lokasi file pengaturan yang dikelola**:

652 

653* **macOS**: `/Library/Application Support/ClaudeCode/managed-settings.json`

654* **Linux dan WSL**: `/etc/claude-code/managed-settings.json`

655* **Windows**: `C:\Program Files\ClaudeCode\managed-settings.json`

656 

657**Karakteristik kunci**:

658 

659* Hanya tersedia dalam pengaturan yang dikelola (`managed-settings.json`)

660* Tidak dapat ditimpa oleh pengaturan pengguna atau proyek (prioritas tertinggi)

661* Diterapkan SEBELUM operasi jaringan/sistem file (sumber yang diblokir tidak pernah dieksekusi)

662* Menggunakan pencocokan tepat untuk spesifikasi sumber (termasuk `ref`, `path` untuk sumber git), kecuali `hostPattern`, yang menggunakan pencocokan regex

663 

664**Perilaku daftar putih**:

665 

666* `undefined` (default): Tidak ada pembatasan - pengguna dapat menambahkan marketplace apa pun

667* Array kosong `[]`: Lockdown lengkap - pengguna tidak dapat menambahkan marketplace baru apa pun

668* Daftar sumber: Pengguna hanya dapat menambahkan marketplace yang cocok dengan tepat

669 

670**Semua jenis sumber yang didukung**:

671 

672Daftar putih mendukung beberapa jenis sumber marketplace. Sebagian besar sumber menggunakan pencocokan tepat, sementara `hostPattern` menggunakan pencocokan regex terhadap host marketplace.

673 

6741. **Repositori GitHub**:

675 

676```json theme={null}

677{ "source": "github", "repo": "acme-corp/approved-plugins" }

678{ "source": "github", "repo": "acme-corp/security-tools", "ref": "v2.0" }

679{ "source": "github", "repo": "acme-corp/plugins", "ref": "main", "path": "marketplace" }

680```

681 

682Bidang: `repo` (diperlukan), `ref` (opsional: cabang/tag/SHA), `path` (opsional: subdirektori)

683 

6842. **Repositori Git**:

685 

686```json theme={null}

687{ "source": "git", "url": "https://gitlab.example.com/tools/plugins.git" }

688{ "source": "git", "url": "https://bitbucket.org/acme-corp/plugins.git", "ref": "production" }

689{ "source": "git", "url": "ssh://git@git.example.com/plugins.git", "ref": "v3.1", "path": "approved" }

690```

691 

692Bidang: `url` (diperlukan), `ref` (opsional: cabang/tag/SHA), `path` (opsional: subdirektori)

693 

6943. **Marketplace berbasis URL**:

695 

696```json theme={null}

697{ "source": "url", "url": "https://plugins.example.com/marketplace.json" }

698{ "source": "url", "url": "https://cdn.example.com/marketplace.json", "headers": { "Authorization": "Bearer ${TOKEN}" } }

699```

700 

701Bidang: `url` (diperlukan), `headers` (opsional: header HTTP untuk akses terautentikasi)

702 

703<Note>

704 Marketplace berbasis URL hanya mengunduh file `marketplace.json`. Mereka tidak mengunduh file plugin dari server. Plugin dalam marketplace berbasis URL harus menggunakan sumber eksternal (GitHub, npm, atau URL git) daripada jalur relatif. Untuk plugin dengan jalur relatif, gunakan marketplace berbasis Git sebagai gantinya. Lihat [Troubleshooting](/id/plugin-marketplaces#plugins-with-relative-paths-fail-in-url-based-marketplaces) untuk detail.

705</Note>

706 

7074. **Paket NPM**:

708 

709```json theme={null}

710{ "source": "npm", "package": "@acme-corp/claude-plugins" }

711{ "source": "npm", "package": "@acme-corp/approved-marketplace" }

712```

713 

714Bidang: `package` (diperlukan, mendukung paket berscopus)

715 

7165. **Jalur file**:

717 

718```json theme={null}

719{ "source": "file", "path": "/usr/local/share/claude/acme-marketplace.json" }

720{ "source": "file", "path": "/opt/acme-corp/plugins/marketplace.json" }

721```

722 

723Bidang: `path` (diperlukan: jalur absolut ke file marketplace.json)

724 

7256. **Jalur direktori**:

726 

727```json theme={null}

728{ "source": "directory", "path": "/usr/local/share/claude/acme-plugins" }

729{ "source": "directory", "path": "/opt/acme-corp/approved-marketplaces" }

730```

731 

732Bidang: `path` (diperlukan: jalur absolut ke direktori yang berisi `.claude-plugin/marketplace.json`)

733 

7347. **Pencocokan pola host**:

735 

736```json theme={null}

737{ "source": "hostPattern", "hostPattern": "^github\\.example\\.com$" }

738{ "source": "hostPattern", "hostPattern": "^gitlab\\.internal\\.example\\.com$" }

739```

740 

741Bidang: `hostPattern` (diperlukan: pola regex untuk mencocokkan terhadap host marketplace)

742 

743Gunakan pencocokan pola host saat Anda ingin memungkinkan semua marketplace dari host tertentu tanpa menghitung setiap repositori secara individual. Ini berguna untuk organisasi dengan server GitHub Enterprise atau GitLab internal di mana pengembang membuat marketplace mereka sendiri.

744 

745Ekstraksi host berdasarkan jenis sumber:

746 

747* `github`: selalu cocok dengan `github.com`

748* `git`: mengekstrak nama host dari URL (mendukung format HTTPS dan SSH)

749* `url`: mengekstrak nama host dari URL

750* `npm`, `file`, `directory`: tidak didukung untuk pencocokan pola host

751 

752**Contoh konfigurasi**:

753 

754Contoh: izinkan marketplace spesifik saja:

755 

756```json theme={null}

757{

758 "strictKnownMarketplaces": [

759 {

760 "source": "github",

761 "repo": "acme-corp/approved-plugins"

762 },

763 {

764 "source": "github",

765 "repo": "acme-corp/security-tools",

766 "ref": "v2.0"

767 },

768 {

769 "source": "url",

770 "url": "https://plugins.example.com/marketplace.json"

771 },

772 {

773 "source": "npm",

774 "package": "@acme-corp/compliance-plugins"

775 }

776 ]

777}

778```

779 

780Contoh - Nonaktifkan semua penambahan marketplace:

781 

782```json theme={null}

783{

784 "strictKnownMarketplaces": []

785}

786```

787 

788Contoh: izinkan semua marketplace dari server git internal:

789 

790```json theme={null}

791{

792 "strictKnownMarketplaces": [

793 {

794 "source": "hostPattern",

795 "hostPattern": "^github\\.example\\.com$"

796 }

797 ]

798}

799```

800 

801**Persyaratan pencocokan tepat**:

802 

803Sumber marketplace harus cocok **dengan tepat** agar penambahan pengguna diizinkan. Untuk sumber berbasis git (`github` dan `git`), ini termasuk semua bidang opsional:

804 

805* `repo` atau `url` harus cocok dengan tepat

806* Bidang `ref` harus cocok dengan tepat (atau keduanya tidak terdefinisi)

807* Bidang `path` harus cocok dengan tepat (atau keduanya tidak terdefinisi)

808 

809Contoh sumber yang **TIDAK cocok**:

810 

811```json theme={null}

812// Ini adalah sumber BERBEDA:

813{ "source": "github", "repo": "acme-corp/plugins" }

814{ "source": "github", "repo": "acme-corp/plugins", "ref": "main" }

815 

816// Ini juga BERBEDA:

817{ "source": "github", "repo": "acme-corp/plugins", "path": "marketplace" }

818{ "source": "github", "repo": "acme-corp/plugins" }

819```

820 

821**Perbandingan dengan `extraKnownMarketplaces`**:

822 

823| Aspek | `strictKnownMarketplaces` | `extraKnownMarketplaces` |

824| -------------------- | --------------------------------------------------- | ------------------------------------------- |

825| **Tujuan** | Penegakan kebijakan organisasi | Kenyamanan tim |

826| **File pengaturan** | `managed-settings.json` saja | File pengaturan apa pun |

827| **Perilaku** | Blokir penambahan yang tidak ada dalam daftar putih | Instal otomatis marketplace yang hilang |

828| **Saat diterapkan** | Sebelum operasi jaringan/sistem file | Setelah prompt kepercayaan pengguna |

829| **Dapat ditimpa** | Tidak (prioritas tertinggi) | Ya (oleh pengaturan prioritas lebih tinggi) |

830| **Format sumber** | Objek sumber langsung | Marketplace bernama dengan sumber bersarang |

831| **Kasus penggunaan** | Pembatasan kepatuhan, keamanan | Onboarding, standardisasi |

832 

833**Perbedaan format**:

834 

835`strictKnownMarketplaces` menggunakan objek sumber langsung:

836 

837```json theme={null}

838{

839 "strictKnownMarketplaces": [

840 { "source": "github", "repo": "acme-corp/plugins" }

841 ]

842}

843```

844 

845`extraKnownMarketplaces` memerlukan marketplace bernama:

846 

847```json theme={null}

848{

849 "extraKnownMarketplaces": {

850 "acme-tools": {

851 "source": { "source": "github", "repo": "acme-corp/plugins" }

852 }

853 }

854}

855```

856 

857**Menggunakan keduanya bersama**:

858 

859`strictKnownMarketplaces` adalah gerbang kebijakan: mengontrol apa yang dapat ditambahkan pengguna tetapi tidak mendaftarkan marketplace apa pun. Untuk membatasi dan pra-mendaftarkan marketplace untuk semua pengguna, atur keduanya dalam `managed-settings.json`:

860 

861```json theme={null}

862{

863 "strictKnownMarketplaces": [

864 { "source": "github", "repo": "acme-corp/plugins" }

865 ],

866 "extraKnownMarketplaces": {

867 "acme-tools": {

868 "source": { "source": "github", "repo": "acme-corp/plugins" }

869 }

870 }

871}

872```

873 

874Dengan hanya `strictKnownMarketplaces` yang diatur, pengguna masih dapat menambahkan marketplace yang diizinkan secara manual melalui `/plugin marketplace add`, tetapi tidak tersedia secara otomatis.

875 

876**Catatan penting**:

877 

878* Pembatasan diperiksa SEBELUM permintaan jaringan atau operasi sistem file apa pun

879* Saat diblokir, pengguna melihat pesan kesalahan yang jelas menunjukkan sumber diblokir oleh kebijakan yang dikelola

880* Pembatasan diterapkan pada penambahan marketplace dan pada instalasi plugin, pembaruan, penyegaran, dan pembaruan otomatis. Marketplace yang ditambahkan sebelum kebijakan ditetapkan tidak dapat digunakan untuk menginstal atau memperbarui plugin setelah sumbernya tidak lagi cocok dengan daftar putih

881* Pengaturan yang dikelola memiliki prioritas tertinggi dan tidak dapat ditimpa

882 

883Lihat [Pembatasan marketplace yang dikelola](/id/plugin-marketplaces#managed-marketplace-restrictions) untuk dokumentasi yang menghadap pengguna.

884 

885### Mengelola plugin

886 

887Gunakan perintah `/plugin` untuk mengelola plugin secara interaktif:

888 

889* Jelajahi plugin yang tersedia dari marketplace

890* Instal/copot plugin

891* Aktifkan/nonaktifkan plugin

892* Lihat detail plugin (skills, agents, hooks yang disediakan)

893* Tambah/hapus marketplace

894 

895Pelajari lebih lanjut tentang sistem plugin dalam [dokumentasi plugins](/id/plugins).

896 

897## Variabel lingkungan

898 

899Variabel lingkungan memungkinkan Anda mengontrol perilaku Claude Code tanpa mengedit file pengaturan. Variabel apa pun juga dapat dikonfigurasi dalam [`settings.json`](#available-settings) di bawah kunci `env` untuk menerapkannya ke setiap sesi atau mengulanginya ke tim Anda.

900 

901Lihat [referensi variabel lingkungan](/id/env-vars) untuk daftar lengkap.

902 

903## Tools yang tersedia untuk Claude

904 

905Claude Code memiliki akses ke serangkaian tools untuk membaca, mengedit, mencari, menjalankan perintah, dan mengorkestrasi subagents. Nama tool adalah string tepat yang Anda gunakan dalam aturan izin dan pencocokan hook.

906 

907Lihat [referensi tools](/id/tools-reference) untuk daftar lengkap dan detail perilaku tool Bash.

908 

909## Lihat juga

910 

911* [Permissions](/id/permissions): sistem izin, sintaks aturan, pola spesifik tool, dan kebijakan yang dikelola

912* [Authentication](/id/authentication): atur akses pengguna ke Claude Code

913* [Debug your configuration](/id/debug-your-config): diagnosis mengapa pengaturan, hook, atau server MCP tidak berlaku

914* [Troubleshoot installation and login](/id/troubleshoot-install): instalasi, autentikasi, dan masalah platform

setup.md +606 −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# Pengaturan lanjutan

6 

7> Persyaratan sistem, instalasi khusus platform, manajemen versi, dan penghapusan instalasi untuk Claude Code.

8 

9Halaman ini mencakup persyaratan sistem, detail instalasi khusus platform, pembaruan, dan penghapusan instalasi. Untuk panduan langkah demi langkah sesi pertama Anda, lihat [quickstart](/id/quickstart). Jika Anda belum pernah menggunakan terminal sebelumnya, lihat [panduan terminal](/id/terminal-guide).

10 

11## Persyaratan sistem

12 

13Claude Code berjalan pada platform dan konfigurasi berikut:

14 

15* **Sistem operasi**:

16 * macOS 13.0+

17 * Windows 10 1809+ atau Windows Server 2019+

18 * Ubuntu 20.04+

19 * Debian 10+

20 * Alpine Linux 3.19+

21* **Perangkat keras**: RAM 4 GB+, prosesor x64 atau ARM64

22* **Jaringan**: koneksi internet diperlukan. Lihat [konfigurasi jaringan](/id/network-config#network-access-requirements).

23* **Shell**: Bash, Zsh, PowerShell, atau CMD. Pada Windows asli, [Git for Windows](https://git-scm.com/downloads/win) direkomendasikan; Claude Code kembali ke PowerShell ketika Git Bash tidak ada. Pengaturan WSL tidak memerlukan Git for Windows.

24* **Lokasi**: [negara yang didukung Anthropic](https://www.anthropic.com/supported-countries)

25 

26### Dependensi tambahan

27 

28* **ripgrep**: biasanya disertakan dengan Claude Code. Jika pencarian gagal, lihat [troubleshooting pencarian](/id/troubleshooting#search-and-discovery-issues).

29 

30## Instal Claude Code

31 

32<Tip>

33 Lebih suka antarmuka grafis? [Aplikasi Desktop](/id/desktop-quickstart) memungkinkan Anda menggunakan Claude Code tanpa terminal. Unduh untuk [macOS](https://claude.ai/api/desktop/darwin/universal/dmg/latest/redirect?utm_source=claude_code\&utm_medium=docs) atau [Windows](https://claude.com/download?utm_source=claude_code\&utm_medium=docs).

34 

35 Baru mengenal terminal? Lihat [panduan terminal](/id/terminal-guide) untuk instruksi langkah demi langkah.

36</Tip>

37 

38To install Claude Code, use one of the following methods:

39 

40<Tabs>

41 <Tab title="Native Install (Recommended)">

42 **macOS, Linux, WSL:**

43 

44 ```bash theme={null}

45 curl -fsSL https://claude.ai/install.sh | bash

46 ```

47 

48 **Windows PowerShell:**

49 

50 ```powershell theme={null}

51 irm https://claude.ai/install.ps1 | iex

52 ```

53 

54 **Windows CMD:**

55 

56 ```batch theme={null}

57 curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd

58 ```

59 

60 If you see `The token '&&' is not a valid statement separator`, you're in PowerShell, not CMD. If you see `'irm' is not recognized as an internal or external command`, you're in CMD, not PowerShell. Your prompt shows `PS C:\` when you're in PowerShell and `C:\` without the `PS` when you're in CMD.

61 

62 [Git for Windows](https://git-scm.com/downloads/win) is recommended on native Windows so Claude Code can use the Bash tool. If Git for Windows is not installed, Claude Code uses PowerShell as the shell tool instead. WSL setups do not need Git for Windows.

63 

64 <Info>

65 Native installations automatically update in the background to keep you on the latest version.

66 </Info>

67 </Tab>

68 

69 <Tab title="Homebrew">

70 ```bash theme={null}

71 brew install --cask claude-code

72 ```

73 

74 Homebrew offers two casks. `claude-code` tracks the stable release channel, which is typically about a week behind and skips releases with major regressions. `claude-code@latest` tracks the latest channel and receives new versions as soon as they ship.

75 

76 <Info>

77 Homebrew installations do not auto-update. Run `brew upgrade claude-code` or `brew upgrade claude-code@latest`, depending on which cask you installed, to get the latest features and security fixes.

78 </Info>

79 </Tab>

80 

81 <Tab title="WinGet">

82 ```powershell theme={null}

83 winget install Anthropic.ClaudeCode

84 ```

85 

86 <Info>

87 WinGet installations do not auto-update. Run `winget upgrade Anthropic.ClaudeCode` periodically to get the latest features and security fixes.

88 </Info>

89 </Tab>

90</Tabs>

91 

92You can also install with [apt, dnf, or apk](/en/setup#install-with-linux-package-managers) on Debian, Fedora, RHEL, and Alpine.

93 

94Setelah instalasi selesai, buka terminal di proyek yang ingin Anda kerjakan dan mulai Claude Code:

95 

96```bash theme={null}

97claude

98```

99 

100Jika Anda mengalami masalah apa pun selama instalasi, lihat [Troubleshoot installation and login](/id/troubleshoot-install).

101 

102### Pengaturan di Windows

103 

104Anda dapat menjalankan Claude Code secara asli di Windows atau di dalam WSL. Pilih berdasarkan di mana proyek Anda berada dan fitur apa yang Anda butuhkan:

105 

106| Opsi | Memerlukan | [Sandboxing](/id/sandboxing) | Kapan digunakan |

107| ------------ | ---------------------------------------------------------------------------------------------------------- | ---------------------------- | ------------------------------------------------- |

108| Windows Asli | [Git for Windows](https://git-scm.com/downloads/win) direkomendasikan; PowerShell digunakan jika tidak ada | Tidak didukung | Proyek dan alat Windows asli |

109| WSL 2 | WSL 2 diaktifkan | Didukung | Toolchain Linux atau eksekusi perintah bersandbox |

110| WSL 1 | WSL 1 diaktifkan | Tidak didukung | Jika WSL 2 tidak tersedia |

111 

112**Opsi 1: Windows Asli dengan Git Bash**

113 

114Instal [Git for Windows](https://git-scm.com/downloads/win), kemudian jalankan perintah instalasi dari PowerShell atau CMD. Anda tidak perlu menjalankan sebagai Administrator.

115 

116Apakah Anda menginstal dari PowerShell atau CMD hanya mempengaruhi perintah instalasi mana yang Anda jalankan. Prompt Anda menampilkan `PS C:\Users\YourName>` di PowerShell dan `C:\Users\YourName>` tanpa `PS` di CMD. Jika Anda baru mengenal terminal, [panduan terminal](/id/terminal-guide#windows) memandu setiap langkah.

117 

118Setelah instalasi, luncurkan `claude` dari PowerShell, CMD, atau Git Bash. Ketika Git Bash diinstal, Claude Code menggunakannya secara internal untuk menjalankan perintah terlepas dari tempat Anda meluncurkannya. Jika Claude Code tidak dapat menemukan instalasi Git Bash Anda, atur jalur di [file settings.json](/id/settings) Anda:

119 

120```json theme={null}

121{

122 "env": {

123 "CLAUDE_CODE_GIT_BASH_PATH": "C:\\Program Files\\Git\\bin\\bash.exe"

124 }

125}

126```

127 

128Claude Code juga dapat menjalankan PowerShell secara asli di Windows. Ketika Git Bash diinstal, alat PowerShell sedang diluncurkan secara progresif sebagai opsi tambahan: atur `CLAUDE_CODE_USE_POWERSHELL_TOOL=1` untuk memilih masuk atau `0` untuk memilih keluar. Lihat [PowerShell tool](/id/tools-reference#powershell-tool) untuk pengaturan dan batasan.

129 

130**Opsi 2: WSL**

131 

132Buka distribusi WSL Anda dan jalankan penginstal Linux dari [instruksi instalasi](#install-claude-code) di atas. Anda menginstal dan meluncurkan `claude` di dalam terminal WSL, bukan dari PowerShell atau CMD.

133 

134### Alpine Linux dan distribusi berbasis musl

135 

136Penginstal asli di Alpine dan distribusi berbasis musl/uClibc lainnya memerlukan `libgcc`, `libstdc++`, dan `ripgrep`. Instal ini menggunakan manajer paket distribusi Anda, kemudian atur `USE_BUILTIN_RIPGREP=0`.

137 

138Contoh ini menginstal paket yang diperlukan di Alpine:

139 

140```bash theme={null}

141apk add libgcc libstdc++ ripgrep

142```

143 

144Kemudian atur `USE_BUILTIN_RIPGREP` ke `0` di file [`settings.json`](/id/settings#available-settings) Anda:

145 

146```json theme={null}

147{

148 "env": {

149 "USE_BUILTIN_RIPGREP": "0"

150 }

151}

152```

153 

154## Verifikasi instalasi Anda

155 

156Setelah menginstal, konfirmkan Claude Code berfungsi:

157 

158```bash theme={null}

159claude --version

160```

161 

162Jika ini gagal dengan `command not found` atau kesalahan lainnya, lihat [Troubleshoot installation and login](/id/troubleshoot-install).

163 

164Untuk pemeriksaan yang lebih terperinci tentang instalasi dan konfigurasi Anda, jalankan [`claude doctor`](/id/troubleshooting#get-more-help):

165 

166```bash theme={null}

167claude doctor

168```

169 

170## Autentikasi

171 

172Claude Code memerlukan akun Pro, Max, Team, Enterprise, atau Console. Paket Claude.ai gratis tidak termasuk akses Claude Code. Anda juga dapat menggunakan Claude Code dengan penyedia API pihak ketiga seperti [Amazon Bedrock](/id/amazon-bedrock), [Google Vertex AI](/id/google-vertex-ai), atau [Microsoft Foundry](/id/microsoft-foundry).

173 

174Setelah menginstal, masuk dengan menjalankan `claude` dan mengikuti petunjuk browser. Lihat [Autentikasi](/id/authentication) untuk semua jenis akun dan opsi pengaturan tim.

175 

176## Perbarui Claude Code

177 

178Instalasi asli secara otomatis diperbarui di latar belakang. Anda dapat [mengonfigurasi saluran rilis](#configure-release-channel) untuk mengontrol apakah Anda menerima pembaruan segera atau sesuai jadwal stabil yang tertunda, atau [menonaktifkan pembaruan otomatis](#disable-auto-updates) sepenuhnya. Instalasi Homebrew, WinGet, dan [manajer paket Linux](#install-with-linux-package-managers) memerlukan pembaruan manual.

179 

180### Pembaruan otomatis

181 

182Claude Code memeriksa pembaruan saat startup dan secara berkala saat berjalan. Pembaruan diunduh dan diinstal di latar belakang, kemudian berlaku saat Anda memulai Claude Code berikutnya.

183 

184<Note>

185 Instalasi Homebrew, WinGet, apt, dnf, dan apk tidak auto-update. Untuk Homebrew, jalankan `brew upgrade claude-code` atau `brew upgrade claude-code@latest`, tergantung cask mana yang Anda instal. Untuk WinGet, jalankan `winget upgrade Anthropic.ClaudeCode`. Untuk manajer paket Linux, lihat perintah upgrade di [Install with Linux package managers](#install-with-linux-package-managers).

186 

187 **Masalah yang diketahui:** Claude Code dapat memberi tahu Anda tentang pembaruan sebelum versi baru tersedia di manajer paket ini. Jika upgrade gagal, tunggu dan coba lagi nanti.

188 

189 Homebrew menyimpan versi lama di disk setelah upgrade. Jalankan `brew cleanup` secara berkala untuk membebaskan ruang disk.

190</Note>

191 

192### Konfigurasi saluran rilis

193 

194Kontrol saluran rilis mana yang diikuti Claude Code untuk pembaruan otomatis dan `claude update` dengan pengaturan `autoUpdatesChannel`:

195 

196* `"latest"`, default: terima fitur baru segera setelah dirilis

197* `"stable"`: gunakan versi yang biasanya sekitar satu minggu lama, lewati rilis dengan regresi besar

198 

199Konfigurasi ini melalui `/config` → **Auto-update channel**, atau tambahkan ke [file settings.json](/id/settings) Anda:

200 

201```json theme={null}

202{

203 "autoUpdatesChannel": "stable"

204}

205```

206 

207Untuk penerapan enterprise, Anda dapat memberlakukan saluran rilis yang konsisten di seluruh organisasi Anda menggunakan [managed settings](/id/permissions#managed-settings).

208 

209Instalasi Homebrew memilih saluran berdasarkan nama cask sebagai gantinya: `claude-code` melacak stable dan `claude-code@latest` melacak latest.

210 

211### Tetapkan versi minimum

212 

213Pengaturan `minimumVersion` menetapkan batas bawah. Pembaruan otomatis latar belakang dan `claude update` menolak untuk menginstal versi apa pun di bawah nilai ini, jadi beralih ke saluran `"stable"` tidak menurunkan Anda jika Anda sudah di build `"latest"` yang lebih baru.

214 

215Beralih dari `"latest"` ke `"stable"` melalui `/config` meminta Anda untuk tetap di versi saat ini atau memungkinkan downgrade. Memilih untuk tetap menetapkan `minimumVersion` ke versi itu. Beralih kembali ke `"latest"` menghapusnya.

216 

217Tambahkan ke [file settings.json](/id/settings) Anda untuk menetapkan batas secara eksplisit:

218 

219```json theme={null}

220{

221 "autoUpdatesChannel": "stable",

222 "minimumVersion": "2.1.100"

223}

224```

225 

226Dalam [managed settings](/id/permissions#managed-settings), ini memberlakukan minimum di seluruh organisasi yang tidak dapat ditimpa oleh pengaturan pengguna dan proyek.

227 

228### Nonaktifkan pembaruan otomatis

229 

230Atur `DISABLE_AUTOUPDATER` ke `"1"` di kunci `env` dari file [`settings.json`](/id/settings#available-settings) Anda:

231 

232```json theme={null}

233{

234 "env": {

235 "DISABLE_AUTOUPDATER": "1"

236 }

237}

238```

239 

240`DISABLE_AUTOUPDATER` hanya menghentikan pemeriksaan latar belakang; `claude update` dan `claude install` masih berfungsi. Untuk memblokir semua jalur pembaruan, termasuk pembaruan manual, atur [`DISABLE_UPDATES`](/id/env-vars) sebagai gantinya. Gunakan ini ketika Anda mendistribusikan Claude Code melalui saluran Anda sendiri dan perlu pengguna tetap di versi yang Anda sediakan.

241 

242### Perbarui secara manual

243 

244Untuk menerapkan pembaruan segera tanpa menunggu pemeriksaan latar belakang berikutnya, jalankan:

245 

246```bash theme={null}

247claude update

248```

249 

250## Opsi instalasi lanjutan

251 

252Opsi ini untuk version pinning, manajer paket Linux, npm, dan verifikasi integritas biner.

253 

254### Instal versi tertentu

255 

256Penginstal asli menerima nomor versi tertentu atau saluran rilis (`latest` atau `stable`). Saluran yang Anda pilih saat instalasi menjadi default Anda untuk pembaruan otomatis. Lihat [konfigurasi saluran rilis](#configure-release-channel) untuk informasi lebih lanjut.

257 

258Untuk menginstal versi terbaru (default):

259 

260<Tabs>

261 <Tab title="macOS, Linux, WSL">

262 ```bash theme={null}

263 curl -fsSL https://claude.ai/install.sh | bash

264 ```

265 </Tab>

266 

267 <Tab title="Windows PowerShell">

268 ```powershell theme={null}

269 irm https://claude.ai/install.ps1 | iex

270 ```

271 </Tab>

272 

273 <Tab title="Windows CMD">

274 ```batch theme={null}

275 curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd

276 ```

277 </Tab>

278</Tabs>

279 

280Untuk menginstal versi stabil:

281 

282<Tabs>

283 <Tab title="macOS, Linux, WSL">

284 ```bash theme={null}

285 curl -fsSL https://claude.ai/install.sh | bash -s stable

286 ```

287 </Tab>

288 

289 <Tab title="Windows PowerShell">

290 ```powershell theme={null}

291 & ([scriptblock]::Create((irm https://claude.ai/install.ps1))) stable

292 ```

293 </Tab>

294 

295 <Tab title="Windows CMD">

296 ```batch theme={null}

297 curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd stable && del install.cmd

298 ```

299 </Tab>

300</Tabs>

301 

302Untuk menginstal nomor versi tertentu:

303 

304<Tabs>

305 <Tab title="macOS, Linux, WSL">

306 ```bash theme={null}

307 curl -fsSL https://claude.ai/install.sh | bash -s 2.1.89

308 ```

309 </Tab>

310 

311 <Tab title="Windows PowerShell">

312 ```powershell theme={null}

313 & ([scriptblock]::Create((irm https://claude.ai/install.ps1))) 2.1.89

314 ```

315 </Tab>

316 

317 <Tab title="Windows CMD">

318 ```batch theme={null}

319 curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd 2.1.89 && del install.cmd

320 ```

321 </Tab>

322</Tabs>

323 

324### Instal dengan manajer paket Linux

325 

326Claude Code menerbitkan repositori apt, dnf, dan apk yang ditandatangani. Ganti `stable` dengan `latest` untuk saluran rolling. Instalasi manajer paket tidak auto-update melalui Claude Code; pembaruan tiba melalui alur upgrade sistem normal Anda.

327 

328Semua repositori ditandatangani dengan [kunci penandatanganan rilis Claude Code](#binary-integrity-and-code-signing). Sebelum mempercayai kunci, verifikasi seperti yang dijelaskan di setiap tab.

329 

330<Tabs>

331 <Tab title="apt">

332 Untuk Debian dan Ubuntu. Untuk menggunakan saluran rolling, ubah kedua kemunculan `stable` di baris `deb`: jalur URL dan nama suite.

333 

334 ```bash theme={null}

335 sudo install -d -m 0755 /etc/apt/keyrings

336 sudo curl -fsSL https://downloads.claude.ai/keys/claude-code.asc \

337 -o /etc/apt/keyrings/claude-code.asc

338 echo "deb [signed-by=/etc/apt/keyrings/claude-code.asc] https://downloads.claude.ai/claude-code/apt/stable stable main" \

339 | sudo tee /etc/apt/sources.list.d/claude-code.list

340 sudo apt update

341 sudo apt install claude-code

342 ```

343 

344 Verifikasi sidik jari kunci GPG sebelum mempercayainya: `gpg --show-keys /etc/apt/keyrings/claude-code.asc` harus melaporkan `31DD DE24 DDFA B679 F42D 7BD2 BAA9 29FF 1A7E CACE`.

345 

346 Untuk upgrade nanti, jalankan `sudo apt update && sudo apt upgrade claude-code`.

347 </Tab>

348 

349 <Tab title="dnf">

350 Untuk Fedora dan RHEL:

351 

352 ```bash theme={null}

353 sudo tee /etc/yum.repos.d/claude-code.repo <<'EOF'

354 [claude-code]

355 name=Claude Code

356 baseurl=https://downloads.claude.ai/claude-code/rpm/stable

357 enabled=1

358 gpgcheck=1

359 gpgkey=https://downloads.claude.ai/keys/claude-code.asc

360 EOF

361 sudo dnf install claude-code

362 ```

363 

364 dnf mengunduh kunci pada instalasi pertama dan meminta Anda untuk mengkonfirmasi sidik jari. Verifikasi itu cocok dengan `31DD DE24 DDFA B679 F42D 7BD2 BAA9 29FF 1A7E CACE` sebelum menerima.

365 

366 Untuk upgrade nanti, jalankan `sudo dnf upgrade claude-code`.

367 </Tab>

368 

369 <Tab title="apk">

370 Untuk Alpine Linux:

371 

372 ```sh theme={null}

373 wget -O /etc/apk/keys/claude-code.rsa.pub \

374 https://downloads.claude.ai/keys/claude-code.rsa.pub

375 echo "https://downloads.claude.ai/claude-code/apk/stable" >> /etc/apk/repositories

376 apk add claude-code

377 ```

378 

379 Verifikasi kunci yang diunduh dengan `sha256sum /etc/apk/keys/claude-code.rsa.pub`, yang harus melaporkan `395759c1f7449ef4cdef305a42e820f3c766d6090d142634ebdb049f113168b6`.

380 

381 Untuk upgrade nanti, jalankan `apk update && apk upgrade claude-code`.

382 </Tab>

383</Tabs>

384 

385### Instal dengan npm

386 

387Anda juga dapat menginstal Claude Code sebagai paket npm global. Paket memerlukan [Node.js 18 atau lebih baru](https://nodejs.org/en/download).

388 

389```bash theme={null}

390npm install -g @anthropic-ai/claude-code

391```

392 

393Paket npm menginstal biner asli yang sama dengan penginstal standalone. npm menarik biner melalui dependensi opsional per-platform seperti `@anthropic-ai/claude-code-darwin-arm64`, dan langkah postinstall menautkannya ke tempat. Biner `claude` yang terinstal tidak sendiri memanggil Node.

394 

395Platform instalasi npm yang didukung adalah `darwin-arm64`, `darwin-x64`, `linux-x64`, `linux-arm64`, `linux-x64-musl`, `linux-arm64-musl`, `win32-x64`, dan `win32-arm64`. Manajer paket Anda harus memungkinkan dependensi opsional. Lihat [troubleshooting](/id/troubleshoot-install#native-binary-not-found-after-npm-install) jika biner hilang setelah instalasi.

396 

397<Warning>

398 JANGAN gunakan `sudo npm install -g` karena ini dapat menyebabkan masalah izin dan risiko keamanan. Jika Anda mengalami kesalahan izin, lihat [troubleshooting kesalahan izin](/id/troubleshoot-install#permission-errors-during-installation).

399</Warning>

400 

401### Integritas biner dan penandatanganan kode

402 

403Setiap rilis menerbitkan `manifest.json` yang berisi checksum SHA256 untuk setiap biner platform. Manifes ditandatangani dengan kunci GPG Anthropic, jadi memverifikasi tanda tangan pada manifes secara transitif memverifikasi setiap biner yang tercantum.

404 

405#### Verifikasi tanda tangan manifes

406 

407Langkah-langkah 1-3 memerlukan shell POSIX dengan `gpg` dan `curl`. Di Windows, jalankan di Git Bash atau WSL. Langkah 4 mencakup opsi PowerShell.

408 

409<Steps>

410 <Step title="Unduh dan impor kunci publik">

411 Kunci penandatanganan rilis dipublikasikan di URL tetap.

412 

413 ```bash theme={null}

414 curl -fsSL https://downloads.claude.ai/keys/claude-code.asc | gpg --import

415 ```

416 

417 Tampilkan sidik jari kunci yang diimpor.

418 

419 ```bash theme={null}

420 gpg --fingerprint security@anthropic.com

421 ```

422 

423 Konfirmasi output mencakup sidik jari ini:

424 

425 ```text theme={null}

426 31DD DE24 DDFA B679 F42D 7BD2 BAA9 29FF 1A7E CACE

427 ```

428 </Step>

429 

430 <Step title="Unduh manifes dan tanda tangan">

431 Atur `VERSION` ke rilis yang ingin Anda verifikasi.

432 

433 ```bash theme={null}

434 REPO=https://downloads.claude.ai/claude-code-releases

435 VERSION=2.1.89

436 curl -fsSLO "$REPO/$VERSION/manifest.json"

437 curl -fsSLO "$REPO/$VERSION/manifest.json.sig"

438 ```

439 </Step>

440 

441 <Step title="Verifikasi tanda tangan">

442 Verifikasi tanda tangan terpisah terhadap manifes.

443 

444 ```bash theme={null}

445 gpg --verify manifest.json.sig manifest.json

446 ```

447 

448 Hasil yang valid melaporkan `Good signature from "Anthropic Claude Code Release Signing <security@anthropic.com>"`.

449 

450 `gpg` juga mencetak `WARNING: This key is not certified with a trusted signature!` untuk kunci yang baru diimpor. Ini diharapkan. Baris `Good signature` mengkonfirmasi pemeriksaan kriptografi lulus. Perbandingan sidik jari di Langkah 1 mengkonfirmasi kunci itu sendiri asli.

451 </Step>

452 

453 <Step title="Periksa biner terhadap manifes">

454 Bandingkan checksum SHA256 biner yang diunduh dengan nilai yang tercantum di bawah `platforms.<platform>.checksum` di `manifest.json`.

455 

456 <Tabs>

457 <Tab title="Linux">

458 ```bash theme={null}

459 sha256sum claude

460 ```

461 </Tab>

462 

463 <Tab title="macOS">

464 ```bash theme={null}

465 shasum -a 256 claude

466 ```

467 </Tab>

468 

469 <Tab title="Windows PowerShell">

470 ```powershell theme={null}

471 (Get-FileHash claude.exe -Algorithm SHA256).Hash.ToLower()

472 ```

473 </Tab>

474 </Tabs>

475 </Step>

476</Steps>

477 

478<Note>

479 Tanda tangan manifes tersedia untuk rilis dari `2.1.89` ke depan. Rilis sebelumnya menerbitkan checksum di `manifest.json` tanpa tanda tangan terpisah.

480</Note>

481 

482#### Tanda tangan kode platform

483 

484Selain manifes yang ditandatangani, biner individual membawa tanda tangan kode native platform di mana didukung.

485 

486* **macOS**: ditandatangani oleh "Anthropic PBC" dan dinotarisi oleh Apple. Verifikasi dengan `codesign --verify --verbose ./claude`.

487* **Windows**: ditandatangani oleh "Anthropic, PBC". Verifikasi dengan `Get-AuthenticodeSignature .\claude.exe`.

488* **Linux**: biner tidak ditandatangani kode secara individual. Jika Anda mengunduh langsung dari bucket `claude-code-releases` atau menggunakan penginstal asli, verifikasi integritas dengan tanda tangan manifes di atas. Jika Anda menginstal dengan [apt, dnf, atau apk](#install-with-linux-package-managers), manajer paket Anda memverifikasi tanda tangan secara otomatis menggunakan kunci penandatanganan repositori.

489 

490## Hapus instalasi Claude Code

491 

492Untuk menghapus Claude Code, ikuti instruksi untuk metode instalasi Anda.

493 

494### Instalasi asli

495 

496Hapus biner Claude Code dan file versi:

497 

498<Tabs>

499 <Tab title="macOS, Linux, WSL">

500 ```bash theme={null}

501 rm -f ~/.local/bin/claude

502 rm -rf ~/.local/share/claude

503 ```

504 </Tab>

505 

506 <Tab title="Windows PowerShell">

507 ```powershell theme={null}

508 Remove-Item -Path "$env:USERPROFILE\.local\bin\claude.exe" -Force

509 Remove-Item -Path "$env:USERPROFILE\.local\share\claude" -Recurse -Force

510 ```

511 </Tab>

512</Tabs>

513 

514### Instalasi Homebrew

515 

516Hapus cask Homebrew yang Anda instal. Jika Anda menginstal cask stabil:

517 

518```bash theme={null}

519brew uninstall --cask claude-code

520```

521 

522Jika Anda menginstal cask latest:

523 

524```bash theme={null}

525brew uninstall --cask claude-code@latest

526```

527 

528### Instalasi WinGet

529 

530Hapus paket WinGet:

531 

532```powershell theme={null}

533winget uninstall Anthropic.ClaudeCode

534```

535 

536### apt / dnf / apk

537 

538Hapus paket dan konfigurasi repositori:

539 

540<Tabs>

541 <Tab title="apt">

542 ```bash theme={null}

543 sudo apt remove claude-code

544 sudo rm /etc/apt/sources.list.d/claude-code.list /etc/apt/keyrings/claude-code.asc

545 ```

546 </Tab>

547 

548 <Tab title="dnf">

549 ```bash theme={null}

550 sudo dnf remove claude-code

551 sudo rm /etc/yum.repos.d/claude-code.repo

552 ```

553 </Tab>

554 

555 <Tab title="apk">

556 ```sh theme={null}

557 apk del claude-code

558 sed -i '\|downloads.claude.ai/claude-code/apk|d' /etc/apk/repositories

559 rm /etc/apk/keys/claude-code.rsa.pub

560 ```

561 </Tab>

562</Tabs>

563 

564### npm

565 

566Hapus paket npm global:

567 

568```bash theme={null}

569npm uninstall -g @anthropic-ai/claude-code

570```

571 

572### Hapus file konfigurasi

573 

574<Warning>

575 Menghapus file konfigurasi akan menghapus semua pengaturan, alat yang diizinkan, konfigurasi server MCP, dan riwayat sesi Anda.

576</Warning>

577 

578Ekstensi VS Code, plugin JetBrains, dan Aplikasi Desktop juga menulis ke `~/.claude/`. Jika salah satunya masih terinstal, direktori akan dibuat ulang saat berikutnya dijalankan. Untuk menghapus Claude Code sepenuhnya, copot [ekstensi VS Code](/id/vs-code#uninstall-the-extension), plugin JetBrains, dan Aplikasi Desktop sebelum menghapus file ini.

579 

580Untuk menghapus pengaturan Claude Code dan data cache:

581 

582<Tabs>

583 <Tab title="macOS, Linux, WSL">

584 ```bash theme={null}

585 # Hapus pengaturan pengguna dan status

586 rm -rf ~/.claude

587 rm ~/.claude.json

588 

589 # Hapus pengaturan khusus proyek (jalankan dari direktori proyek Anda)

590 rm -rf .claude

591 rm -f .mcp.json

592 ```

593 </Tab>

594 

595 <Tab title="Windows PowerShell">

596 ```powershell theme={null}

597 # Hapus pengaturan pengguna dan status

598 Remove-Item -Path "$env:USERPROFILE\.claude" -Recurse -Force

599 Remove-Item -Path "$env:USERPROFILE\.claude.json" -Force

600 

601 # Hapus pengaturan khusus proyek (jalankan dari direktori proyek Anda)

602 Remove-Item -Path ".claude" -Recurse -Force

603 Remove-Item -Path ".mcp.json" -Force

604 ```

605 </Tab>

606</Tabs>

skills.md +728 −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# Perluas Claude dengan skills

6 

7> Buat, kelola, dan bagikan skills untuk memperluas kemampuan Claude di Claude Code. Termasuk perintah kustom dan skills bundel.

8 

9Skills memperluas apa yang dapat dilakukan Claude. Buat file `SKILL.md` dengan instruksi, dan Claude menambahkannya ke toolkit-nya. Claude menggunakan skills saat relevan, atau Anda dapat menginvokasinya secara langsung dengan `/skill-name`.

10 

11Buat skill ketika Anda terus menempel playbook yang sama, checklist, atau prosedur multi-langkah ke dalam chat, atau ketika bagian dari CLAUDE.md telah berkembang menjadi prosedur daripada fakta. Tidak seperti konten CLAUDE.md, badan skill hanya dimuat saat digunakan, jadi materi referensi yang panjang hampir tidak ada biayanya sampai Anda membutuhkannya.

12 

13<Note>

14 Untuk perintah bawaan seperti `/help` dan `/compact`, dan skills bundel seperti `/debug` dan `/simplify`, lihat [referensi perintah](/id/commands).

15 

16 **Perintah kustom telah digabungkan ke dalam skills.** File di `.claude/commands/deploy.md` dan skill di `.claude/skills/deploy/SKILL.md` keduanya membuat `/deploy` dan bekerja dengan cara yang sama. File `.claude/commands/` yang ada tetap berfungsi. Skills menambahkan fitur opsional: direktori untuk file pendukung, frontmatter untuk [mengontrol apakah Anda atau Claude menginvokasinya](#control-who-invokes-a-skill), dan kemampuan bagi Claude untuk memuatnya secara otomatis saat relevan.

17</Note>

18 

19Skills Claude Code mengikuti standar terbuka [Agent Skills](https://agentskills.io), yang bekerja di berbagai alat AI. Claude Code memperluas standar dengan fitur tambahan seperti [kontrol invokasi](#control-who-invokes-a-skill), [eksekusi subagent](#run-skills-in-a-subagent), dan [injeksi konteks dinamis](#inject-dynamic-context).

20 

21## Skills bundel

22 

23Claude Code menyertakan serangkaian skills bundel yang tersedia di setiap sesi, termasuk `/simplify`, `/batch`, `/debug`, `/loop`, dan `/claude-api`. Tidak seperti sebagian besar perintah bawaan, yang menjalankan logika tetap secara langsung, skills bundel berbasis prompt: mereka memberikan Claude playbook terperinci dan membiarkannya mengorkestrasi pekerjaan menggunakan tools-nya. Anda menginvokasinya dengan cara yang sama seperti skill lainnya, dengan mengetik `/` diikuti dengan nama skill.

24 

25Skills bundel terdaftar bersama perintah bawaan dalam [referensi perintah](/id/commands), ditandai **Skill** di kolom Tujuan.

26 

27## Memulai

28 

29### Buat skill pertama Anda

30 

31Contoh ini membuat skill yang mengajarkan Claude menjelaskan kode menggunakan diagram visual dan analogi. Karena menggunakan frontmatter default, Claude dapat memuatnya secara otomatis saat Anda bertanya bagaimana sesuatu bekerja, atau Anda dapat menginvokasinya secara langsung dengan `/explain-code`.

32 

33<Steps>

34 <Step title="Buat direktori skill">

35 Buat direktori untuk skill di folder skills pribadi Anda. Skills pribadi tersedia di semua proyek Anda.

36 

37 ```bash theme={null}

38 mkdir -p ~/.claude/skills/explain-code

39 ```

40 </Step>

41 

42 <Step title="Tulis SKILL.md">

43 Setiap skill memerlukan file `SKILL.md` dengan dua bagian: frontmatter YAML (antara penanda `---`) yang memberi tahu Claude kapan menggunakan skill, dan konten markdown dengan instruksi yang diikuti Claude saat skill diinvokasinya. Nama direktori menjadi `/slash-command`, dan `description` membantu Claude memutuskan kapan memuatnya secara otomatis.

44 

45 Buat `~/.claude/skills/explain-code/SKILL.md`:

46 

47 ```yaml theme={null}

48 ---

49 description: Explains code with visual diagrams and analogies. Use when explaining how code works, teaching about a codebase, or when the user asks "how does this work?"

50 ---

51 

52 When explaining code, always include:

53 

54 1. **Start with an analogy**: Compare the code to something from everyday life

55 2. **Draw a diagram**: Use ASCII art to show the flow, structure, or relationships

56 3. **Walk through the code**: Explain step-by-step what happens

57 4. **Highlight a gotcha**: What's a common mistake or misconception?

58 

59 Keep explanations conversational. For complex concepts, use multiple analogies.

60 ```

61 </Step>

62 

63 <Step title="Uji skill">

64 Anda dapat mengujinya dengan dua cara:

65 

66 **Biarkan Claude menginvokasinya secara otomatis** dengan menanyakan sesuatu yang cocok dengan deskripsi:

67 

68 ```text theme={null}

69 How does this code work?

70 ```

71 

72 **Atau invokasinya secara langsung** dengan nama skill:

73 

74 ```text theme={null}

75 /explain-code src/auth/login.ts

76 ```

77 

78 Baik cara apa pun, Claude harus menyertakan analogi dan diagram ASCII dalam penjelasannya.

79 </Step>

80</Steps>

81 

82### Tempat skills berada

83 

84Tempat Anda menyimpan skill menentukan siapa yang dapat menggunakannya:

85 

86| Lokasi | Path | Berlaku untuk |

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

88| Enterprise | Lihat [pengaturan terkelola](/id/settings#settings-files) | Semua pengguna di organisasi Anda |

89| Pribadi | `~/.claude/skills/<skill-name>/SKILL.md` | Semua proyek Anda |

90| Proyek | `.claude/skills/<skill-name>/SKILL.md` | Proyek ini saja |

91| Plugin | `<plugin>/skills/<skill-name>/SKILL.md` | Tempat plugin diaktifkan |

92 

93Ketika skills berbagi nama yang sama di berbagai level, enterprise menggantikan pribadi, dan pribadi menggantikan proyek. Skills plugin menggunakan namespace `plugin-name:skill-name`, jadi mereka tidak dapat bertentangan dengan level lain. Jika Anda memiliki file di `.claude/commands/`, file tersebut bekerja dengan cara yang sama, tetapi jika skill dan perintah berbagi nama yang sama, skill mengambil alih.

94 

95#### Deteksi perubahan langsung

96 

97Claude Code memantau direktori skill untuk perubahan file. Menambahkan, mengedit, atau menghapus skill di bawah `~/.claude/skills/`, proyek `.claude/skills/`, atau `.claude/skills/` di dalam direktori `--add-dir` berlaku dalam sesi saat ini tanpa memulai ulang. Membuat direktori skills tingkat atas yang tidak ada saat sesi dimulai memerlukan memulai ulang Claude Code sehingga direktori baru dapat dipantau.

98 

99#### Penemuan otomatis dari direktori bersarang

100 

101Saat Anda bekerja dengan file di subdirektori, Claude Code secara otomatis menemukan skills dari direktori `.claude/skills/` bersarang. Misalnya, jika Anda mengedit file di `packages/frontend/`, Claude Code juga mencari skills di `packages/frontend/.claude/skills/`. Ini mendukung pengaturan monorepo di mana paket memiliki skills mereka sendiri.

102 

103Setiap skill adalah direktori dengan `SKILL.md` sebagai titik masuk:

104 

105```text theme={null}

106my-skill/

107├── SKILL.md # Main instructions (required)

108├── template.md # Template for Claude to fill in

109├── examples/

110│ └── sample.md # Example output showing expected format

111└── scripts/

112 └── validate.sh # Script Claude can execute

113```

114 

115`SKILL.md` berisi instruksi utama dan diperlukan. File lainnya opsional dan memungkinkan Anda membangun skills yang lebih kuat: template untuk diisi Claude, contoh output yang menunjukkan format yang diharapkan, script yang dapat dijalankan Claude, atau dokumentasi referensi terperinci. Referensikan file pendukung dari `SKILL.md` Anda sehingga Claude tahu apa yang mereka berisi dan kapan memuatnya. Lihat [Tambahkan file pendukung](#add-supporting-files) untuk detail lebih lanjut.

116 

117<Note>

118 File di `.claude/commands/` masih berfungsi dan mendukung [frontmatter](#frontmatter-reference) yang sama. Skills direkomendasikan karena mendukung fitur tambahan seperti file pendukung.

119</Note>

120 

121#### Skills dari direktori tambahan

122 

123Bendera `--add-dir` [memberikan akses file](/id/permissions#additional-directories-grant-file-access-not-configuration) daripada penemuan konfigurasi, tetapi skills adalah pengecualian: `.claude/skills/` dalam direktori yang ditambahkan dimuat secara otomatis. Lihat [Deteksi perubahan langsung](#live-change-detection) untuk bagaimana edit diambil selama sesi.

124 

125Konfigurasi `.claude/` lainnya seperti subagents, perintah, dan gaya output tidak dimuat dari direktori tambahan. Lihat [tabel pengecualian](/id/permissions#additional-directories-grant-file-access-not-configuration) untuk daftar lengkap apa yang dimuat dan tidak dimuat, serta cara yang direkomendasikan untuk berbagi konfigurasi di seluruh proyek.

126 

127<Note>

128 File CLAUDE.md dari direktori `--add-dir` tidak dimuat secara default. Untuk memuatnya, atur `CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1`. Lihat [Muat dari direktori tambahan](/id/memory#load-from-additional-directories).

129</Note>

130 

131## Konfigurasi skills

132 

133Skills dikonfigurasi melalui frontmatter YAML di bagian atas `SKILL.md` dan konten markdown yang mengikutinya.

134 

135### Jenis konten skill

136 

137File skill dapat berisi instruksi apa pun, tetapi memikirkan bagaimana Anda ingin menginvokasinya membantu memandu apa yang harus disertakan:

138 

139**Konten referensi** menambahkan pengetahuan yang diterapkan Claude pada pekerjaan Anda saat ini. Konvensi, pola, panduan gaya, pengetahuan domain. Konten ini berjalan inline sehingga Claude dapat menggunakannya bersama konteks percakapan Anda.

140 

141```yaml theme={null}

142---

143name: api-conventions

144description: API design patterns for this codebase

145---

146 

147When writing API endpoints:

148- Use RESTful naming conventions

149- Return consistent error formats

150- Include request validation

151```

152 

153**Konten tugas** memberikan Claude instruksi langkah demi langkah untuk tindakan spesifik, seperti deployment, commit, atau pembuatan kode. Ini sering kali tindakan yang ingin Anda invokasinya secara langsung dengan `/skill-name` daripada membiarkan Claude memutuskan kapan menjalankannya. Tambahkan `disable-model-invocation: true` untuk mencegah Claude memicunya secara otomatis.

154 

155```yaml theme={null}

156---

157name: deploy

158description: Deploy the application to production

159context: fork

160disable-model-invocation: true

161---

162 

163Deploy the application:

1641. Run the test suite

1652. Build the application

1663. Push to the deployment target

167```

168 

169`SKILL.md` Anda dapat berisi apa pun, tetapi memikirkan bagaimana Anda ingin skill diinvokasinya (oleh Anda, oleh Claude, atau keduanya) dan di mana Anda ingin menjalankannya (inline atau di subagent) membantu memandu apa yang harus disertakan. Untuk skills kompleks, Anda juga dapat [menambahkan file pendukung](#add-supporting-files) untuk menjaga skill utama tetap fokus.

170 

171### Referensi frontmatter

172 

173Selain konten markdown, Anda dapat mengonfigurasi perilaku skill menggunakan bidang frontmatter YAML antara penanda `---` di bagian atas file `SKILL.md` Anda:

174 

175```yaml theme={null}

176---

177name: my-skill

178description: What this skill does

179disable-model-invocation: true

180allowed-tools: Read Grep

181---

182 

183Your skill instructions here...

184```

185 

186Semua bidang opsional. Hanya `description` yang direkomendasikan sehingga Claude tahu kapan menggunakan skill.

187 

188| Bidang | Diperlukan | Deskripsi |

189| :------------------------- | :--------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

190| `name` | Tidak | Nama tampilan untuk skill. Jika dihilangkan, menggunakan nama direktori. Huruf kecil, angka, dan tanda hubung saja (maks 64 karakter). |

191| `description` | Direkomendasikan | Apa yang dilakukan skill dan kapan menggunakannya. Claude menggunakan ini untuk memutuskan kapan menerapkan skill. Jika dihilangkan, menggunakan paragraf pertama konten markdown. Depankan kasus penggunaan utama: teks gabungan `description` dan `when_to_use` dipotong pada 1.536 karakter dalam daftar skill untuk mengurangi penggunaan konteks. |

192| `when_to_use` | Tidak | Konteks tambahan untuk kapan Claude harus menginvokasinya skill, seperti frasa pemicu atau permintaan contoh. Ditambahkan ke `description` dalam daftar skill dan dihitung terhadap batas 1.536 karakter. |

193| `argument-hint` | Tidak | Petunjuk yang ditampilkan selama autocomplete untuk menunjukkan argumen yang diharapkan. Contoh: `[issue-number]` atau `[filename] [format]`. |

194| `arguments` | Tidak | Argumen posisional bernama untuk [substitusi `$name`](#available-string-substitutions) dalam konten skill. Menerima string yang dipisahkan spasi atau daftar YAML. Nama memetakan ke posisi argumen secara berurutan. |

195| `disable-model-invocation` | Tidak | Atur ke `true` untuk mencegah Claude memuat skill ini secara otomatis. Gunakan untuk workflow yang ingin Anda picu secara manual dengan `/name`. Juga mencegah skill dari [dimuat sebelumnya ke dalam subagents](/id/sub-agents#preload-skills-into-subagents). Default: `false`. |

196| `user-invocable` | Tidak | Atur ke `false` untuk menyembunyikan dari menu `/`. Gunakan untuk pengetahuan latar belakang yang tidak boleh diinvokasinya pengguna secara langsung. Default: `true`. |

197| `allowed-tools` | Tidak | Tools yang dapat digunakan Claude tanpa meminta izin saat skill ini aktif. Menerima string yang dipisahkan spasi atau daftar YAML. |

198| `model` | Tidak | Model yang digunakan saat skill ini aktif. Penggantian berlaku untuk sisa giliran saat ini dan tidak disimpan ke pengaturan; model sesi dilanjutkan pada prompt Anda berikutnya. Menerima nilai yang sama seperti [`/model`](/id/model-config), atau `inherit` untuk menjaga model aktif. |

199| `effort` | Tidak | [Effort level](/id/model-config#adjust-effort-level) saat skill ini aktif. Mengganti effort level sesi. Default: mewarisi dari sesi. Opsi: `low`, `medium`, `high`, `xhigh`, `max`; level yang tersedia tergantung pada model. |

200| `context` | Tidak | Atur ke `fork` untuk menjalankan dalam konteks subagent yang di-fork. |

201| `agent` | Tidak | Jenis subagent mana yang digunakan saat `context: fork` diatur. |

202| `hooks` | Tidak | Hooks yang dibatasi pada lifecycle skill ini. Lihat [Hooks dalam skills dan agents](/id/hooks#hooks-in-skills-and-agents) untuk format konfigurasi. |

203| `paths` | Tidak | Pola glob yang membatasi kapan skill ini diaktifkan. Menerima string yang dipisahkan koma atau daftar YAML. Ketika diatur, Claude memuat skill secara otomatis hanya saat bekerja dengan file yang cocok dengan pola. Menggunakan format yang sama seperti [aturan khusus path](/id/memory#path-specific-rules). |

204| `shell` | Tidak | Shell yang digunakan untuk `` !`command` `` dan ` ```! ` blocks dalam skill ini. Menerima `bash` (default) atau `powershell`. Mengatur `powershell` menjalankan perintah shell inline melalui PowerShell di Windows. Memerlukan `CLAUDE_CODE_USE_POWERSHELL_TOOL=1`. |

205 

206#### Substitusi string yang tersedia

207 

208Skills mendukung substitusi string untuk nilai dinamis dalam konten skill:

209 

210| Variabel | Deskripsi |

211| :--------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

212| `$ARGUMENTS` | Semua argumen yang dilewatkan saat menginvokasinya skill. Jika `$ARGUMENTS` tidak ada dalam konten, argumen ditambahkan sebagai `ARGUMENTS: <value>`. |

213| `$ARGUMENTS[N]` | Akses argumen spesifik berdasarkan indeks berbasis 0, seperti `$ARGUMENTS[0]` untuk argumen pertama. |

214| `$N` | Singkat untuk `$ARGUMENTS[N]`, seperti `$0` untuk argumen pertama atau `$1` untuk argumen kedua. |

215| `$name` | Argumen bernama yang dideklarasikan dalam daftar frontmatter [`arguments`](#frontmatter-reference). Nama memetakan ke posisi secara berurutan, jadi dengan `arguments: [issue, branch]` placeholder `$issue` berkembang menjadi argumen pertama dan `$branch` menjadi argumen kedua. |

216| `${CLAUDE_SESSION_ID}` | ID sesi saat ini. Berguna untuk logging, membuat file khusus sesi, atau mengkorelasikan output skill dengan sesi. |

217| `${CLAUDE_EFFORT}` | Effort level saat ini: `low`, `medium`, `high`, `xhigh`, atau `max`. Gunakan ini untuk menyesuaikan instruksi skill dengan pengaturan effort aktif. |

218| `${CLAUDE_SKILL_DIR}` | Direktori yang berisi file `SKILL.md` skill. Untuk skills plugin, ini adalah subdirektori skill dalam plugin, bukan root plugin. Gunakan ini dalam perintah injeksi bash untuk mereferensikan script atau file yang dikemas dengan skill, terlepas dari direktori kerja saat ini. |

219 

220Argumen yang diindeks menggunakan quoting gaya shell, jadi bungkus nilai multi-kata dalam tanda kutip untuk meneruskannya sebagai argumen tunggal. Misalnya, `/my-skill "hello world" second` membuat `$0` berkembang menjadi `hello world` dan `$1` menjadi `second`. Placeholder `$ARGUMENTS` selalu berkembang menjadi string argumen lengkap seperti yang diketik.

221 

222**Contoh menggunakan substitusi:**

223 

224```yaml theme={null}

225---

226name: session-logger

227description: Log activity for this session

228---

229 

230Log the following to logs/${CLAUDE_SESSION_ID}.log:

231 

232$ARGUMENTS

233```

234 

235### Tambahkan file pendukung

236 

237Skills dapat menyertakan beberapa file di direktorinya. Ini menjaga `SKILL.md` tetap fokus pada hal-hal penting sambil membiarkan Claude mengakses materi referensi terperinci hanya saat diperlukan. Dokumen referensi besar, spesifikasi API, atau koleksi contoh tidak perlu dimuat ke dalam konteks setiap kali skill berjalan.

238 

239```text theme={null}

240my-skill/

241├── SKILL.md (required - overview and navigation)

242├── reference.md (detailed API docs - loaded when needed)

243├── examples.md (usage examples - loaded when needed)

244└── scripts/

245 └── helper.py (utility script - executed, not loaded)

246```

247 

248Referensikan file pendukung dari `SKILL.md` Anda sehingga Claude tahu apa yang berisi setiap file dan kapan memuatnya:

249 

250```markdown theme={null}

251## Additional resources

252 

253- For complete API details, see [reference.md](reference.md)

254- For usage examples, see [examples.md](examples.md)

255```

256 

257<Tip>Jaga `SKILL.md` di bawah 500 baris. Pindahkan materi referensi terperinci ke file terpisah.</Tip>

258 

259### Kontrol siapa yang menginvokasinya skill

260 

261Secara default, baik Anda maupun Claude dapat menginvokasinya skill apa pun. Anda dapat mengetik `/skill-name` untuk menginvokasinya secara langsung, dan Claude dapat memuatnya secara otomatis saat relevan dengan percakapan Anda. Dua bidang frontmatter memungkinkan Anda membatasi ini:

262 

263* **`disable-model-invocation: true`**: Hanya Anda yang dapat menginvokasinya skill. Gunakan ini untuk workflow dengan efek samping atau yang ingin Anda kontrol waktu, seperti `/commit`, `/deploy`, atau `/send-slack-message`. Anda tidak ingin Claude memutuskan untuk deploy karena kode Anda terlihat siap.

264 

265* **`user-invocable: false`**: Hanya Claude yang dapat menginvokasinya skill. Gunakan ini untuk pengetahuan latar belakang yang tidak dapat ditindaklanjuti sebagai perintah. Skill `legacy-system-context` menjelaskan bagaimana sistem lama bekerja. Claude harus tahu ini saat relevan, tetapi `/legacy-system-context` bukan tindakan yang bermakna bagi pengguna untuk diambil.

266 

267Contoh ini membuat skill deploy yang hanya dapat Anda picu. Bidang `disable-model-invocation: true` mencegah Claude menjalankannya secara otomatis:

268 

269```yaml theme={null}

270---

271name: deploy

272description: Deploy the application to production

273disable-model-invocation: true

274---

275 

276Deploy $ARGUMENTS to production:

277 

2781. Run the test suite

2792. Build the application

2803. Push to the deployment target

2814. Verify the deployment succeeded

282```

283 

284Berikut adalah bagaimana dua bidang mempengaruhi invokasi dan pemuatan konteks:

285 

286| Frontmatter | Anda dapat menginvokasinya | Claude dapat menginvokasinya | Saat dimuat ke dalam konteks |

287| :------------------------------- | :------------------------- | :--------------------------- | :-------------------------------------------------------------------------- |

288| (default) | Ya | Ya | Deskripsi selalu dalam konteks, skill penuh dimuat saat diinvokasinya |

289| `disable-model-invocation: true` | Ya | Tidak | Deskripsi tidak dalam konteks, skill penuh dimuat saat Anda menginvokasinya |

290| `user-invocable: false` | Tidak | Ya | Deskripsi selalu dalam konteks, skill penuh dimuat saat diinvokasinya |

291 

292<Note>

293 Dalam sesi reguler, deskripsi skill dimuat ke dalam konteks sehingga Claude tahu apa yang tersedia, tetapi konten skill penuh hanya dimuat saat diinvokasinya. [Subagents dengan skills yang dimuat sebelumnya](/id/sub-agents#preload-skills-into-subagents) bekerja berbeda: konten skill penuh disuntikkan saat startup.

294</Note>

295 

296### Lifecycle konten skill

297 

298Saat Anda atau Claude menginvokasinya skill, konten `SKILL.md` yang dirender memasuki percakapan sebagai pesan tunggal dan tetap di sana untuk sisa sesi. Claude Code tidak membaca ulang file skill pada giliran berikutnya, jadi tulis panduan yang harus berlaku sepanjang tugas sebagai instruksi berdiri daripada langkah satu kali.

299 

300[Auto-compaction](/id/how-claude-code-works#when-context-fills-up) membawa skills yang diinvokasinya maju dalam anggaran token. Ketika percakapan dirangkum untuk membebaskan konteks, Claude Code melampirkan kembali invokasi skill terbaru setelah ringkasan, menjaga 5.000 token pertama dari masing-masing. Skills yang dilampirkan kembali berbagi anggaran gabungan 25.000 token. Claude Code mengisi anggaran ini mulai dari skill yang paling baru diinvokasinya, jadi skills yang lebih lama dapat dijatuhkan sepenuhnya setelah compaction jika Anda telah menginvokasinya banyak dalam satu sesi.

301 

302Jika skill tampaknya berhenti mempengaruhi perilaku setelah respons pertama, konten biasanya masih ada dan model memilih tools atau pendekatan lain. Perkuat deskripsi skill dan instruksi sehingga model terus menyukainya, atau gunakan [hooks](/id/hooks) untuk menerapkan perilaku secara deterministik. Jika skill besar atau Anda menginvokasinya beberapa yang lain setelahnya, invokasinya kembali setelah compaction untuk mengembalikan konten penuh.

303 

304### Pra-setujui tools untuk skill

305 

306Bidang `allowed-tools` memberikan izin untuk tools yang terdaftar saat skill aktif, sehingga Claude dapat menggunakannya tanpa meminta persetujuan Anda. Ini tidak membatasi tools mana yang tersedia: setiap tool tetap dapat dipanggil, dan [pengaturan izin](/id/permissions) Anda masih mengatur tools yang tidak terdaftar.

307 

308Skill ini memungkinkan Claude menjalankan perintah git tanpa persetujuan per-penggunaan kapan pun Anda menginvokasinya:

309 

310```yaml theme={null}

311---

312name: commit

313description: Stage and commit the current changes

314disable-model-invocation: true

315allowed-tools: Bash(git add *) Bash(git commit *) Bash(git status *)

316---

317```

318 

319Untuk memblokir skill dari menggunakan tools tertentu, tambahkan aturan deny dalam [pengaturan izin](/id/permissions) Anda sebagai gantinya.

320 

321### Lewatkan argumen ke skills

322 

323Baik Anda maupun Claude dapat melewatkan argumen saat menginvokasinya skill. Argumen tersedia melalui placeholder `$ARGUMENTS`.

324 

325Skill ini memperbaiki masalah GitHub berdasarkan nomor. Placeholder `$ARGUMENTS` diganti dengan apa pun yang mengikuti nama skill:

326 

327```yaml theme={null}

328---

329name: fix-issue

330description: Fix a GitHub issue

331disable-model-invocation: true

332---

333 

334Fix GitHub issue $ARGUMENTS following our coding standards.

335 

3361. Read the issue description

3372. Understand the requirements

3383. Implement the fix

3394. Write tests

3405. Create a commit

341```

342 

343Saat Anda menjalankan `/fix-issue 123`, Claude menerima "Fix GitHub issue 123 following our coding standards..."

344 

345Jika Anda menginvokasinya skill dengan argumen tetapi skill tidak menyertakan `$ARGUMENTS`, Claude Code menambahkan `ARGUMENTS: <your input>` ke akhir konten skill sehingga Claude masih melihat apa yang Anda ketik.

346 

347Untuk mengakses argumen individual berdasarkan posisi, gunakan `$ARGUMENTS[N]` atau yang lebih pendek `$N`:

348 

349```yaml theme={null}

350---

351name: migrate-component

352description: Migrate a component from one framework to another

353---

354 

355Migrate the $ARGUMENTS[0] component from $ARGUMENTS[1] to $ARGUMENTS[2].

356Preserve all existing behavior and tests.

357```

358 

359Menjalankan `/migrate-component SearchBar React Vue` mengganti `$ARGUMENTS[0]` dengan `SearchBar`, `$ARGUMENTS[1]` dengan `React`, dan `$ARGUMENTS[2]` dengan `Vue`. Skill yang sama menggunakan shorthand `$N`:

360 

361```yaml theme={null}

362---

363name: migrate-component

364description: Migrate a component from one framework to another

365---

366 

367Migrate the $0 component from $1 to $2.

368Preserve all existing behavior and tests.

369```

370 

371## Pola lanjutan

372 

373### Injeksi konteks dinamis

374 

375Sintaks `` !`<command>` `` menjalankan perintah shell sebelum konten skill dikirim ke Claude. Output perintah mengganti placeholder, sehingga Claude menerima data aktual, bukan perintah itu sendiri.

376 

377Skill ini merangkum pull request dengan mengambil data PR langsung dengan GitHub CLI. Perintah `` !`gh pr diff` `` dan lainnya berjalan terlebih dahulu, dan output mereka dimasukkan ke dalam prompt:

378 

379```yaml theme={null}

380---

381name: pr-summary

382description: Summarize changes in a pull request

383context: fork

384agent: Explore

385allowed-tools: Bash(gh *)

386---

387 

388## Pull request context

389- PR diff: !`gh pr diff`

390- PR comments: !`gh pr view --comments`

391- Changed files: !`gh pr diff --name-only`

392 

393## Your task

394Summarize this pull request...

395```

396 

397Saat skill ini berjalan:

398 

3991. Setiap `` !`<command>` `` dijalankan segera (sebelum Claude melihat apa pun)

4002. Output mengganti placeholder dalam konten skill

4013. Claude menerima prompt yang sepenuhnya dirender dengan data PR aktual

402 

403Ini adalah preprocessing, bukan sesuatu yang dijalankan Claude. Claude hanya melihat hasil akhir.

404 

405Untuk perintah multi-baris, gunakan blok kode yang dibuka dengan ` ```! ` sebagai gantinya dari bentuk inline:

406 

407````markdown theme={null}

408## Environment

409```!

410node --version

411npm --version

412git status --short

413```

414````

415 

416Untuk menonaktifkan perilaku ini untuk skills dan perintah kustom dari sumber pengguna, proyek, plugin, atau [direktori tambahan](#skills-from-additional-directories), atur `"disableSkillShellExecution": true` dalam [pengaturan](/id/settings). Setiap perintah diganti dengan `[shell command execution disabled by policy]` sebagai gantinya dijalankan. Skills bundel dan terkelola tidak terpengaruh. Pengaturan ini paling berguna dalam [pengaturan terkelola](/id/permissions#managed-settings), di mana pengguna tidak dapat menimpanya.

417 

418<Tip>

419 Untuk mengaktifkan [extended thinking](/id/common-workflows#use-extended-thinking-thinking-mode) dalam skill, sertakan kata "ultrathink" di mana pun dalam konten skill Anda.

420</Tip>

421 

422### Jalankan skills dalam subagent

423 

424Tambahkan `context: fork` ke frontmatter Anda saat Anda ingin skill berjalan dalam isolasi. Konten skill menjadi prompt yang mendorong subagent. Ini tidak akan memiliki akses ke riwayat percakapan Anda.

425 

426<Warning>

427 `context: fork` hanya masuk akal untuk skills dengan instruksi eksplisit. Jika skill Anda berisi panduan seperti "gunakan konvensi API ini" tanpa tugas, subagent menerima panduan tetapi tidak ada prompt yang dapat ditindaklanjuti, dan kembali tanpa output yang bermakna.

428</Warning>

429 

430Skills dan [subagents](/id/sub-agents) bekerja bersama dalam dua arah:

431 

432| Pendekatan | System prompt | Tugas | Juga memuat |

433| :------------------------------ | :--------------------------------------- | :-------------------- | :---------------------------------------- |

434| Skill dengan `context: fork` | Dari jenis agen (`Explore`, `Plan`, dll) | Konten SKILL.md | CLAUDE.md |

435| Subagent dengan bidang `skills` | Badan markdown subagent | Pesan delegasi Claude | Skills yang dimuat sebelumnya + CLAUDE.md |

436 

437Dengan `context: fork`, Anda menulis tugas dalam skill Anda dan memilih jenis agen untuk menjalankannya. Untuk kebalikannya (mendefinisikan subagent kustom yang menggunakan skills sebagai materi referensi), lihat [Subagents](/id/sub-agents#preload-skills-into-subagents).

438 

439#### Contoh: Skill penelitian menggunakan agen Explore

440 

441Skill ini menjalankan penelitian dalam agen Explore yang di-fork. Konten skill menjadi tugas, dan agen menyediakan tools baca-saja yang dioptimalkan untuk eksplorasi codebase:

442 

443```yaml theme={null}

444---

445name: deep-research

446description: Research a topic thoroughly

447context: fork

448agent: Explore

449---

450 

451Research $ARGUMENTS thoroughly:

452 

4531. Find relevant files using Glob and Grep

4542. Read and analyze the code

4553. Summarize findings with specific file references

456```

457 

458Saat skill ini berjalan:

459 

4601. Konteks terisolasi baru dibuat

4612. Subagent menerima konten skill sebagai promptnya ("Research \$ARGUMENTS thoroughly...")

4623. Bidang `agent` menentukan lingkungan eksekusi (model, tools, dan izin)

4634. Hasil dirangkum dan dikembalikan ke percakapan utama Anda

464 

465Bidang `agent` menentukan konfigurasi subagent mana yang digunakan. Opsi termasuk agen bawaan (`Explore`, `Plan`, `general-purpose`) atau subagent kustom apa pun dari `.claude/agents/`. Jika dihilangkan, menggunakan `general-purpose`.

466 

467### Batasi akses skill Claude

468 

469Secara default, Claude dapat menginvokasinya skill apa pun yang tidak memiliki `disable-model-invocation: true` diatur. Skills yang mendefinisikan `allowed-tools` memberikan Claude akses ke tools tersebut tanpa persetujuan per-penggunaan saat skill aktif. Pengaturan [izin](/id/permissions) Anda masih mengatur perilaku persetujuan baseline untuk semua tools lainnya. Beberapa perintah bawaan juga tersedia melalui tool Skill, termasuk `/init`, `/review`, dan `/security-review`. Perintah bawaan lainnya seperti `/compact` tidak.

470 

471Tiga cara untuk mengontrol skills mana yang dapat diinvokasinya Claude:

472 

473**Nonaktifkan semua skills** dengan menolak tool Skill di `/permissions`:

474 

475```text theme={null}

476# Add to deny rules:

477Skill

478```

479 

480**Izinkan atau tolak skills spesifik** menggunakan [aturan izin](/id/permissions):

481 

482```text theme={null}

483# Allow only specific skills

484Skill(commit)

485Skill(review-pr *)

486 

487# Deny specific skills

488Skill(deploy *)

489```

490 

491Sintaks izin: `Skill(name)` untuk kecocokan tepat, `Skill(name *)` untuk kecocokan awalan dengan argumen apa pun.

492 

493**Sembunyikan skills individual** dengan menambahkan `disable-model-invocation: true` ke frontmatter mereka. Ini menghapus skill dari konteks Claude sepenuhnya.

494 

495<Note>

496 Bidang `user-invocable` hanya mengontrol visibilitas menu, bukan akses tool Skill. Gunakan `disable-model-invocation: true` untuk memblokir invokasi programatik.

497</Note>

498 

499## Bagikan skills

500 

501Skills dapat didistribusikan pada cakupan berbeda tergantung pada audiens Anda:

502 

503* **Skills proyek**: Commit `.claude/skills/` ke version control

504* **Plugins**: Buat direktori `skills/` dalam [plugin](/id/plugins) Anda

505* **Terkelola**: Terapkan di seluruh organisasi melalui [pengaturan terkelola](/id/settings#settings-files)

506 

507### Hasilkan output visual

508 

509Skills dapat membundel dan menjalankan script dalam bahasa apa pun, memberikan Claude kemampuan di luar apa yang mungkin dalam prompt tunggal. Satu pola yang kuat adalah menghasilkan output visual: file HTML interaktif yang terbuka di browser Anda untuk menjelajahi data, debugging, atau membuat laporan.

510 

511Contoh ini membuat penjelajah codebase: tampilan pohon interaktif di mana Anda dapat memperluas dan menciutkan direktori, melihat ukuran file sekilas, dan mengidentifikasi jenis file berdasarkan warna.

512 

513Buat direktori Skill:

514 

515```bash theme={null}

516mkdir -p ~/.claude/skills/codebase-visualizer/scripts

517```

518 

519Buat `~/.claude/skills/codebase-visualizer/SKILL.md`. Deskripsi memberi tahu Claude kapan mengaktifkan Skill ini, dan instruksi memberi tahu Claude untuk menjalankan script yang dikemas:

520 

521````yaml theme={null}

522---

523name: codebase-visualizer

524description: Generate an interactive collapsible tree visualization of your codebase. Use when exploring a new repo, understanding project structure, or identifying large files.

525allowed-tools: Bash(python *)

526---

527 

528# Codebase Visualizer

529 

530Generate an interactive HTML tree view that shows your project's file structure with collapsible directories.

531 

532## Usage

533 

534Run the visualization script from your project root:

535 

536```bash

537python ~/.claude/skills/codebase-visualizer/scripts/visualize.py .

538```

539 

540This creates `codebase-map.html` in the current directory and opens it in your default browser.

541 

542## What the visualization shows

543 

544- **Collapsible directories**: Click folders to expand/collapse

545- **File sizes**: Displayed next to each file

546- **Colors**: Different colors for different file types

547- **Directory totals**: Shows aggregate size of each folder

548````

549 

550Buat `~/.claude/skills/codebase-visualizer/scripts/visualize.py`. Script ini memindai pohon direktori dan menghasilkan file HTML yang mandiri dengan:

551 

552* **Sidebar ringkasan** yang menunjukkan jumlah file, jumlah direktori, ukuran total, dan jumlah jenis file

553* **Bagan batang** yang memecah codebase berdasarkan jenis file (8 teratas berdasarkan ukuran)

554* **Pohon yang dapat diciutkan** di mana Anda dapat memperluas dan menciutkan direktori, dengan indikator jenis file berkode warna

555 

556Script memerlukan Python tetapi hanya menggunakan library bawaan, jadi tidak ada paket yang perlu diinstal:

557 

558```python expandable theme={null}

559#!/usr/bin/env python3

560"""Generate an interactive collapsible tree visualization of a codebase."""

561 

562import json

563import sys

564import webbrowser

565from pathlib import Path

566from collections import Counter

567 

568IGNORE = {'.git', 'node_modules', '__pycache__', '.venv', 'venv', 'dist', 'build'}

569 

570def scan(path: Path, stats: dict) -> dict:

571 result = {"name": path.name, "children": [], "size": 0}

572 try:

573 for item in sorted(path.iterdir()):

574 if item.name in IGNORE or item.name.startswith('.'):

575 continue

576 if item.is_file():

577 size = item.stat().st_size

578 ext = item.suffix.lower() or '(no ext)'

579 result["children"].append({"name": item.name, "size": size, "ext": ext})

580 result["size"] += size

581 stats["files"] += 1

582 stats["extensions"][ext] += 1

583 stats["ext_sizes"][ext] += size

584 elif item.is_dir():

585 stats["dirs"] += 1

586 child = scan(item, stats)

587 if child["children"]:

588 result["children"].append(child)

589 result["size"] += child["size"]

590 except PermissionError:

591 pass

592 return result

593 

594def generate_html(data: dict, stats: dict, output: Path) -> None:

595 ext_sizes = stats["ext_sizes"]

596 total_size = sum(ext_sizes.values()) or 1

597 sorted_exts = sorted(ext_sizes.items(), key=lambda x: -x[1])[:8]

598 colors = {

599 '.js': '#f7df1e', '.ts': '#3178c6', '.py': '#3776ab', '.go': '#00add8',

600 '.rs': '#dea584', '.rb': '#cc342d', '.css': '#264de4', '.html': '#e34c26',

601 '.json': '#6b7280', '.md': '#083fa1', '.yaml': '#cb171e', '.yml': '#cb171e',

602 '.mdx': '#083fa1', '.tsx': '#3178c6', '.jsx': '#61dafb', '.sh': '#4eaa25',

603 }

604 lang_bars = "".join(

605 f'<div class="bar-row"><span class="bar-label">{ext}</span>'

606 f'<div class="bar" style="width:{(size/total_size)*100}%;background:{colors.get(ext,"#6b7280")}"></div>'

607 f'<span class="bar-pct">{(size/total_size)*100:.1f}%</span></div>'

608 for ext, size in sorted_exts

609 )

610 def fmt(b):

611 if b < 1024: return f"{b} B"

612 if b < 1048576: return f"{b/1024:.1f} KB"

613 return f"{b/1048576:.1f} MB"

614 

615 html = f'''<!DOCTYPE html>

616<html><head>

617 <meta charset="utf-8"><title>Codebase Explorer</title>

618 <style>

619 body {{ font: 14px/1.5 system-ui, sans-serif; margin: 0; background: #1a1a2e; color: #eee; }}

620 .container {{ display: flex; height: 100vh; }}

621 .sidebar {{ width: 280px; background: #252542; padding: 20px; border-right: 1px solid #3d3d5c; overflow-y: auto; flex-shrink: 0; }}

622 .main {{ flex: 1; padding: 20px; overflow-y: auto; }}

623 h1 {{ margin: 0 0 10px 0; font-size: 18px; }}

624 h2 {{ margin: 20px 0 10px 0; font-size: 14px; color: #888; text-transform: uppercase; }}

625 .stat {{ display: flex; justify-content: space-between; padding: 8px 0; border-bottom: 1px solid #3d3d5c; }}

626 .stat-value {{ font-weight: bold; }}

627 .bar-row {{ display: flex; align-items: center; margin: 6px 0; }}

628 .bar-label {{ width: 55px; font-size: 12px; color: #aaa; }}

629 .bar {{ height: 18px; border-radius: 3px; }}

630 .bar-pct {{ margin-left: 8px; font-size: 12px; color: #666; }}

631 .tree {{ list-style: none; padding-left: 20px; }}

632 details {{ cursor: pointer; }}

633 summary {{ padding: 4px 8px; border-radius: 4px; }}

634 summary:hover {{ background: #2d2d44; }}

635 .folder {{ color: #ffd700; }}

636 .file {{ display: flex; align-items: center; padding: 4px 8px; border-radius: 4px; }}

637 .file:hover {{ background: #2d2d44; }}

638 .size {{ color: #888; margin-left: auto; font-size: 12px; }}

639 .dot {{ width: 8px; height: 8px; border-radius: 50%; margin-right: 8px; }}

640 </style>

641</head><body>

642 <div class="container">

643 <div class="sidebar">

644 <h1>📊 Summary</h1>

645 <div class="stat"><span>Files</span><span class="stat-value">{stats["files"]:,}</span></div>

646 <div class="stat"><span>Directories</span><span class="stat-value">{stats["dirs"]:,}</span></div>

647 <div class="stat"><span>Total size</span><span class="stat-value">{fmt(data["size"])}</span></div>

648 <div class="stat"><span>File types</span><span class="stat-value">{len(stats["extensions"])}</span></div>

649 <h2>By file type</h2>

650 {lang_bars}

651 </div>

652 <div class="main">

653 <h1>📁 {data["name"]}</h1>

654 <ul class="tree" id="root"></ul>

655 </div>

656 </div>

657 <script>

658 const data = {json.dumps(data)};

659 const colors = {json.dumps(colors)};

660 function fmt(b) {{ if (b < 1024) return b + ' B'; if (b < 1048576) return (b/1024).toFixed(1) + ' KB'; return (b/1048576).toFixed(1) + ' MB'; }}

661 function render(node, parent) {{

662 if (node.children) {{

663 const det = document.createElement('details');

664 det.open = parent === document.getElementById('root');

665 det.innerHTML = `<summary><span class="folder">📁 ${{node.name}}</span><span class="size">${{fmt(node.size)}}</span></summary>`;

666 const ul = document.createElement('ul'); ul.className = 'tree';

667 node.children.sort((a,b) => (b.children?1:0)-(a.children?1:0) || a.name.localeCompare(b.name));

668 node.children.forEach(c => render(c, ul));

669 det.appendChild(ul);

670 const li = document.createElement('li'); li.appendChild(det); parent.appendChild(li);

671 }} else {{

672 const li = document.createElement('li'); li.className = 'file';

673 li.innerHTML = `<span class="dot" style="background:${{colors[node.ext]||'#6b7280'}}"></span>${{node.name}}<span class="size">${{fmt(node.size)}}</span>`;

674 parent.appendChild(li);

675 }}

676 }}

677 data.children.forEach(c => render(c, document.getElementById('root')));

678 </script>

679</body></html>'''

680 output.write_text(html)

681 

682if __name__ == '__main__':

683 target = Path(sys.argv[1] if len(sys.argv) > 1 else '.').resolve()

684 stats = {"files": 0, "dirs": 0, "extensions": Counter(), "ext_sizes": Counter()}

685 data = scan(target, stats)

686 out = Path('codebase-map.html')

687 generate_html(data, stats, out)

688 print(f'Generated {out.absolute()}')

689 webbrowser.open(f'file://{out.absolute()}')

690```

691 

692Untuk menguji, buka Claude Code di proyek apa pun dan tanyakan "Visualize this codebase." Claude menjalankan script, menghasilkan `codebase-map.html`, dan membukanya di browser Anda.

693 

694Pola ini bekerja untuk output visual apa pun: grafik ketergantungan, laporan cakupan tes, dokumentasi API, atau visualisasi skema database. Script yang dikemas melakukan pekerjaan berat sementara Claude menangani orkestrasi.

695 

696## Troubleshooting

697 

698### Skill tidak terpicu

699 

700Jika Claude tidak menggunakan skill Anda saat diharapkan:

701 

7021. Periksa deskripsi mencakup kata kunci yang akan dikatakan pengguna secara alami

7032. Verifikasi skill muncul di `What skills are available?`

7043. Coba rephrase permintaan Anda agar lebih cocok dengan deskripsi

7054. Invokasinya secara langsung dengan `/skill-name` jika skill dapat diinvokasinya pengguna

706 

707### Skill terpicu terlalu sering

708 

709Jika Claude menggunakan skill Anda saat Anda tidak menginginkannya:

710 

7111. Buat deskripsi lebih spesifik

7122. Tambahkan `disable-model-invocation: true` jika Anda hanya menginginkan invokasi manual

713 

714### Deskripsi skill dipotong pendek

715 

716Deskripsi skill dimuat ke dalam konteks sehingga Claude tahu apa yang tersedia. Semua nama skill selalu disertakan, tetapi jika Anda memiliki banyak skills, deskripsi diperpendek agar sesuai dengan anggaran karakter, yang dapat menghilangkan kata kunci yang dibutuhkan Claude untuk mencocokkan permintaan Anda. Anggaran diskalakan secara dinamis pada 1% dari jendela konteks, dengan fallback 8.000 karakter.

717 

718Untuk menaikkan batas, atur variabel lingkungan `SLASH_COMMAND_TOOL_CHAR_BUDGET`. Atau potong teks `description` dan `when_to_use` di sumbernya: depankan kasus penggunaan utama, karena teks gabungan setiap entri dibatasi pada 1.536 karakter terlepas dari anggaran.

719 

720## Sumber daya terkait

721 

722* **[Debug konfigurasi Anda](/id/debug-your-config)**: diagnosis mengapa skill tidak muncul atau tidak terpicu

723* **[Subagents](/id/sub-agents)**: delegasikan tugas ke agen khusus

724* **[Plugins](/id/plugins)**: paket dan distribusikan skills dengan ekstensi lainnya

725* **[Hooks](/id/hooks)**: otomatisasi workflow di sekitar peristiwa tool

726* **[Memory](/id/memory)**: kelola file CLAUDE.md untuk konteks persisten

727* **[Commands](/id/commands)**: referensi untuk perintah bawaan dan skills bundel

728* **[Permissions](/id/permissions)**: kontrol akses tool dan skill

slack.md +210 −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# Claude Code di Slack

6 

7> Delegasikan tugas coding langsung dari workspace Slack Anda

8 

9Claude Code di Slack membawa kekuatan Claude Code langsung ke workspace Slack Anda. Ketika Anda menyebutkan `@Claude` dengan tugas coding, Claude secara otomatis mendeteksi niat dan membuat sesi Claude Code di web, memungkinkan Anda untuk mendelegasikan pekerjaan pengembangan tanpa meninggalkan percakapan tim Anda.

10 

11Integrasi ini dibangun di atas aplikasi Claude untuk Slack yang sudah ada tetapi menambahkan perutean cerdas ke Claude Code di web untuk permintaan yang terkait dengan coding.

12 

13## Kasus penggunaan

14 

15* **Investigasi dan perbaikan bug**: Minta Claude untuk menyelidiki dan memperbaiki bug segera setelah dilaporkan di saluran Slack.

16* **Review kode cepat dan modifikasi**: Biarkan Claude mengimplementasikan fitur kecil atau refactor kode berdasarkan umpan balik tim.

17* **Debugging kolaboratif**: Ketika diskusi tim memberikan konteks penting (misalnya, reproduksi error atau laporan pengguna), Claude dapat menggunakan informasi tersebut untuk menginformasikan pendekatan debugging-nya.

18* **Eksekusi tugas paralel**: Mulai tugas coding di Slack sambil melanjutkan pekerjaan lain, menerima notifikasi saat selesai.

19 

20## Prasyarat

21 

22Sebelum menggunakan Claude Code di Slack, pastikan Anda memiliki hal berikut:

23 

24| Persyaratan | Detail |

25| :----------------- | :------------------------------------------------------------------------------------- |

26| Claude Plan | Pro, Max, Team, atau Enterprise dengan akses Claude Code (kursi premium) |

27| Claude Code di web | Akses ke [Claude Code di web](/id/claude-code-on-the-web) harus diaktifkan |

28| Akun GitHub | Terhubung ke Claude Code di web dengan setidaknya satu repositori yang terauthentikasi |

29| Autentikasi Slack | Akun Slack Anda tertaut ke akun Claude Anda melalui aplikasi Claude |

30 

31## Menyiapkan Claude Code di Slack

32 

33<Steps>

34 <Step title="Instal Aplikasi Claude di Slack">

35 Administrator workspace harus menginstal aplikasi Claude dari Slack App Marketplace. Kunjungi [Slack App Marketplace](https://slack.com/marketplace/A08SF47R6P4) dan klik "Add to Slack" untuk memulai proses instalasi.

36 </Step>

37 

38 <Step title="Hubungkan akun Claude Anda">

39 Setelah aplikasi diinstal, autentikasi akun Claude individual Anda:

40 

41 1. Buka aplikasi Claude di Slack dengan mengklik "Claude" di bagian Apps Anda

42 2. Navigasi ke tab App Home

43 3. Klik "Connect" untuk menghubungkan akun Slack Anda dengan akun Claude Anda

44 4. Selesaikan alur autentikasi di browser Anda

45 </Step>

46 

47 <Step title="Konfigurasi Claude Code di web">

48 Pastikan Claude Code di web Anda dikonfigurasi dengan benar:

49 

50 * Kunjungi [claude.ai/code](https://claude.ai/code) dan masuk dengan akun yang sama yang Anda hubungkan ke Slack

51 * Hubungkan akun GitHub Anda jika belum terhubung

52 * Autentikasi setidaknya satu repositori yang ingin Anda gunakan Claude untuk bekerja

53 </Step>

54 

55 <Step title="Pilih mode perutean Anda">

56 Setelah menghubungkan akun Anda, konfigurasi bagaimana Claude menangani pesan Anda di Slack. Navigasi ke Claude App Home di Slack untuk menemukan pengaturan **Routing Mode**.

57 

58 | Mode | Perilaku |

59 | :-------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

60 | **Code only** | Claude merutkan semua @mentions ke sesi Claude Code. Terbaik untuk tim yang menggunakan Claude di Slack secara eksklusif untuk tugas pengembangan. |

61 | **Code + Chat** | Claude menganalisis setiap pesan dan secara cerdas merutkan antara Claude Code (untuk tugas coding) dan Claude Chat (untuk penulisan, analisis, dan pertanyaan umum). Terbaik untuk tim yang menginginkan satu titik masuk @Claude untuk semua jenis pekerjaan. |

62 

63 <Note>

64 Dalam mode Code + Chat, jika Claude merutkan pesan ke Chat tetapi Anda menginginkan sesi coding, Anda dapat mengklik "Retry as Code" untuk membuat sesi Claude Code sebagai gantinya. Demikian pula, jika itu dirutkan ke Code tetapi Anda menginginkan sesi Chat, Anda dapat memilih opsi itu di thread tersebut.

65 </Note>

66 </Step>

67</Steps>

68 

69## Cara kerjanya

70 

71### Deteksi otomatis

72 

73Ketika Anda menyebutkan @Claude di saluran atau thread Slack, Claude secara otomatis menganalisis pesan Anda untuk menentukan apakah itu tugas coding. Jika Claude mendeteksi niat coding, itu akan merutkan permintaan Anda ke Claude Code di web alih-alih merespons sebagai asisten chat biasa.

74 

75Anda juga dapat secara eksplisit memberi tahu Claude untuk menangani permintaan sebagai tugas coding, bahkan jika itu tidak secara otomatis mendeteksinya.

76 

77<Note>

78 Claude Code di Slack hanya berfungsi di saluran (publik atau pribadi). Itu tidak berfungsi di pesan langsung (DM).

79</Note>

80 

81### Pengumpulan konteks

82 

83**Dari thread**: Ketika Anda @mention Claude di thread, itu mengumpulkan konteks dari semua pesan di thread tersebut untuk memahami percakapan lengkap.

84 

85**Dari saluran**: Ketika disebutkan langsung di saluran, Claude melihat pesan saluran terbaru untuk konteks yang relevan.

86 

87Konteks ini membantu Claude memahami masalah, memilih repositori yang sesuai, dan menginformasikan pendekatan terhadap tugas.

88 

89<Warning>

90 Ketika @Claude dipanggil di Slack, Claude diberi akses ke konteks percakapan untuk lebih memahami permintaan Anda. Claude dapat mengikuti arahan dari pesan lain dalam konteks, jadi pengguna harus memastikan untuk hanya menggunakan Claude dalam percakapan Slack yang terpercaya.

91</Warning>

92 

93### Alur sesi

94 

951. **Inisiasi**: Anda @mention Claude dengan permintaan coding

962. **Deteksi**: Claude menganalisis pesan Anda dan mendeteksi niat coding

973. **Pembuatan sesi**: Sesi Claude Code baru dibuat di claude.ai/code

984. **Pembaruan kemajuan**: Claude memposting pembaruan status ke thread Slack Anda saat pekerjaan berlangsung

995. **Penyelesaian**: Saat selesai, Claude @mention Anda dengan ringkasan dan tombol tindakan

1006. **Tinjauan**: Klik "View Session" untuk melihat transkrip lengkap, atau "Create PR" untuk membuka pull request

101 

102## Elemen antarmuka pengguna

103 

104### App Home

105 

106Tab App Home menampilkan status koneksi Anda dan memungkinkan Anda untuk menghubungkan atau memutuskan akun Claude Anda dari Slack.

107 

108### Tindakan pesan

109 

110* **View Session**: Membuka sesi Claude Code lengkap di browser Anda di mana Anda dapat melihat semua pekerjaan yang dilakukan, melanjutkan sesi, atau membuat permintaan tambahan.

111* **Create PR**: Membuat pull request langsung dari perubahan sesi.

112* **Retry as Code**: Jika Claude awalnya merespons sebagai asisten chat tetapi Anda menginginkan sesi coding, klik tombol ini untuk mencoba ulang permintaan sebagai tugas Claude Code.

113* **Change Repo**: Memungkinkan Anda untuk memilih repositori yang berbeda jika Claude memilih dengan tidak benar.

114 

115### Pemilihan repositori

116 

117Claude secara otomatis memilih repositori berdasarkan konteks dari percakapan Slack Anda. Jika beberapa repositori dapat berlaku, Claude dapat menampilkan dropdown yang memungkinkan Anda memilih yang benar.

118 

119## Akses dan izin

120 

121### Akses tingkat pengguna

122 

123| Jenis Akses | Persyaratan |

124| :---------------------- | :----------------------------------------------------------------------------------- |

125| Sesi Claude Code | Setiap pengguna menjalankan sesi di bawah akun Claude mereka sendiri |

126| Penggunaan & Batas Laju | Sesi dihitung terhadap batas rencana pengguna individual |

127| Akses Repositori | Pengguna hanya dapat mengakses repositori yang telah mereka hubungkan secara pribadi |

128| Riwayat Sesi | Sesi muncul di riwayat Claude Code Anda di claude.ai/code |

129 

130### Izin admin workspace

131 

132Administrator workspace Slack mengontrol apakah aplikasi Claude dapat diinstal di workspace. Pengguna individual kemudian mengautentikasi dengan akun Claude mereka sendiri untuk menggunakan integrasi.

133 

134## Apa yang dapat diakses di mana

135 

136**Di Slack**: Anda akan melihat pembaruan status, ringkasan penyelesaian, dan tombol tindakan. Transkrip lengkap disimpan dan selalu dapat diakses.

137 

138**Di web**: Sesi Claude Code lengkap dengan riwayat percakapan lengkap, semua perubahan kode, operasi file, dan kemampuan untuk melanjutkan sesi atau membuat pull request.

139 

140## Praktik terbaik

141 

142### Menulis permintaan yang efektif

143 

144* **Jadilah spesifik**: Sertakan nama file, nama fungsi, atau pesan error ketika relevan.

145* **Berikan konteks**: Sebutkan repositori atau proyek jika tidak jelas dari percakapan.

146* **Tentukan kesuksesan**: Jelaskan seperti apa "selesai"—haruskah Claude menulis tes? Memperbarui dokumentasi? Membuat PR?

147* **Gunakan thread**: Balas di thread saat membahas bug atau fitur sehingga Claude dapat mengumpulkan konteks lengkap.

148 

149### Kapan menggunakan Slack vs. web

150 

151**Gunakan Slack ketika**: Konteks sudah ada dalam diskusi Slack, Anda ingin memulai tugas secara asinkron, atau Anda berkolaborasi dengan rekan tim yang membutuhkan visibilitas.

152 

153**Gunakan web secara langsung ketika**: Anda perlu mengunggah file, menginginkan interaksi real-time selama pengembangan, atau bekerja pada tugas yang lebih panjang dan kompleks.

154 

155## Pemecahan masalah

156 

157### Sesi tidak dimulai

158 

1591. Verifikasi akun Claude Anda terhubung di Claude App Home

1602. Periksa bahwa Anda memiliki akses Claude Code di web yang diaktifkan

1613. Pastikan Anda memiliki setidaknya satu repositori GitHub yang terhubung ke Claude Code

162 

163### Repositori tidak ditampilkan

164 

1651. Hubungkan repositori di Claude Code di web di [claude.ai/code](https://claude.ai/code)

1662. Verifikasi izin GitHub Anda untuk repositori tersebut

1673. Coba putuskan dan hubungkan kembali akun GitHub Anda

168 

169### Repositori yang salah dipilih

170 

1711. Klik tombol "Change Repo" untuk memilih repositori yang berbeda

1722. Sertakan nama repositori dalam permintaan Anda untuk pemilihan yang lebih akurat

173 

174### Kesalahan autentikasi

175 

1761. Putuskan dan hubungkan kembali akun Claude Anda di App Home

1772. Pastikan Anda masuk ke akun Claude yang benar di browser Anda

1783. Periksa bahwa rencana Claude Anda mencakup akses Claude Code

179 

180### Kedaluwarsa sesi

181 

1821. Sesi tetap dapat diakses di riwayat Claude Code Anda di web

1832. Anda dapat melanjutkan atau mereferensikan sesi masa lalu dari [claude.ai/code](https://claude.ai/code)

184 

185## Keterbatasan saat ini

186 

187* **GitHub saja**: Saat ini mendukung repositori di GitHub.

188* **Satu PR sekaligus**: Setiap sesi dapat membuat satu pull request.

189* **Batas laju berlaku**: Sesi menggunakan batas laju rencana Claude individual Anda.

190* **Akses web diperlukan**: Pengguna harus memiliki akses Claude Code di web; mereka yang tidak memilikinya hanya akan mendapatkan respons chat Claude standar.

191 

192## Sumber daya terkait

193 

194<CardGroup>

195 <Card title="Claude Code di web" icon="globe" href="/id/claude-code-on-the-web">

196 Pelajari lebih lanjut tentang Claude Code di web

197 </Card>

198 

199 <Card title="Claude untuk Slack" icon="slack" href="https://claude.com/claude-and-slack">

200 Dokumentasi Claude untuk Slack umum

201 </Card>

202 

203 <Card title="Slack App Marketplace" icon="store" href="https://slack.com/marketplace/A08SF47R6P4">

204 Instal aplikasi Claude dari Slack Marketplace

205 </Card>

206 

207 <Card title="Claude Help Center" icon="circle-question" href="https://support.claude.com">

208 Dapatkan dukungan tambahan

209 </Card>

210</CardGroup>

statusline.md +1062 −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# Sesuaikan baris status Anda

6 

7> Konfigurasikan bilah status khusus untuk memantau penggunaan jendela konteks, biaya, dan status git di Claude Code

8 

9Baris status adalah bilah yang dapat disesuaikan di bagian bawah Claude Code yang menjalankan skrip shell apa pun yang Anda konfigurasikan. Skrip menerima data sesi JSON di stdin dan menampilkan apa pun yang dicetak skrip Anda, memberikan Anda tampilan yang persisten dan sekilas dari penggunaan konteks, biaya, status git, atau apa pun yang ingin Anda lacak.

10 

11Baris status berguna ketika Anda:

12 

13* Ingin memantau penggunaan jendela konteks saat bekerja

14* Perlu melacak biaya sesi

15* Bekerja di berbagai sesi dan perlu membedakannya

16* Ingin cabang git dan status selalu terlihat

17 

18Berikut adalah contoh [baris status multi-baris](#display-multiple-lines) yang menampilkan informasi git di baris pertama dan bilah konteks berkode warna di baris kedua.

19 

20<Frame>

21 <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" />

22</Frame>

23 

24Halaman 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.

25 

26## Atur baris status

27 

28Gunakan [perintah `/statusline`](#use-the-statusline-command) untuk membuat Claude Code menghasilkan skrip untuk Anda, atau [buat skrip secara manual](#manually-configure-a-status-line) dan tambahkan ke pengaturan Anda.

29 

30### Gunakan perintah /statusline

31 

32Perintah `/statusline` menerima instruksi bahasa alami yang menjelaskan apa yang ingin Anda tampilkan. Claude Code menghasilkan file skrip di `~/.claude/` dan memperbarui pengaturan Anda secara otomatis:

33 

34```text theme={null}

35/statusline show model name and context percentage with a progress bar

36```

37 

38### Konfigurasikan baris status secara manual

39 

40Tambahkan bidang `statusLine` ke pengaturan pengguna Anda (`~/.claude/settings.json`, di mana `~` adalah direktori home Anda) atau [pengaturan proyek](/id/settings#settings-files). Atur `type` ke `"command"` dan arahkan `command` ke jalur skrip atau perintah shell inline. Untuk panduan lengkap membuat skrip, lihat [Bangun baris status langkah demi langkah](#build-a-status-line-step-by-step).

41 

42```json theme={null}

43{

44 "statusLine": {

45 "type": "command",

46 "command": "~/.claude/statusline.sh",

47 "padding": 2

48 }

49}

50```

51 

52Bidang `command` berjalan di shell, jadi Anda juga dapat menggunakan perintah inline alih-alih file skrip. Contoh ini menggunakan `jq` untuk mengurai input JSON dan menampilkan nama model dan persentase konteks:

53 

54```json theme={null}

55{

56 "statusLine": {

57 "type": "command",

58 "command": "jq -r '\"[\\(.model.display_name)] \\(.context_window.used_percentage // 0)% context\"'"

59 }

60}

61```

62 

63Bidang `padding` opsional menambahkan spasi horizontal ekstra (dalam karakter) ke konten baris status. Default ke `0`. Padding ini selain spasi bawaan antarmuka, jadi mengontrol indentasi relatif daripada jarak absolut dari tepi terminal.

64 

65Bidang `refreshInterval` opsional menjalankan kembali perintah Anda setiap N detik selain [pembaruan berbasis peristiwa](#how-status-lines-work). Minimum adalah `1`. Atur ini ketika baris status Anda menampilkan data berbasis waktu seperti jam, atau ketika subagen latar belakang mengubah keadaan git sementara sesi utama menganggur. Biarkan tidak diatur untuk hanya berjalan pada peristiwa.

66 

67Bidang `hideVimModeIndicator` opsional menekan teks `-- INSERT --` bawaan di bawah prompt. Atur ini ke `true` ketika skrip Anda merender [`vim.mode`](#available-data) itu sendiri, sehingga mode tidak ditampilkan dua kali.

68 

69### Nonaktifkan baris status

70 

71Jalankan `/statusline` dan minta untuk menghapus atau menghapus baris status Anda (misalnya, `/statusline delete`, `/statusline clear`, `/statusline remove it`). Anda juga dapat secara manual menghapus bidang `statusLine` dari settings.json Anda.

72 

73## Bangun baris status langkah demi langkah

74 

75Panduan ini menunjukkan apa yang terjadi di balik layar dengan membuat baris status secara manual yang menampilkan model saat ini, direktori kerja, dan persentase penggunaan jendela konteks.

76 

77<Note>Menjalankan [`/statusline`](#use-the-statusline-command) dengan deskripsi apa yang Anda inginkan mengonfigurasi semua ini untuk Anda secara otomatis.</Note>

78 

79Contoh-contoh ini menggunakan skrip Bash, yang berfungsi di macOS dan Linux. Di Windows, lihat [Konfigurasi Windows](#windows-configuration) untuk contoh PowerShell dan Git Bash.

80 

81<Frame>

82 <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" />

83</Frame>

84 

85<Steps>

86 <Step title="Buat skrip yang membaca JSON dan mencetak output">

87 Claude Code mengirim data JSON ke skrip Anda melalui stdin. Skrip ini menggunakan [`jq`](https://jqlang.github.io/jq/), pengurai JSON baris perintah yang mungkin perlu Anda instal, untuk mengekstrak nama model, direktori, dan persentase konteks, kemudian mencetak baris yang diformat.

88 

89 Simpan ini ke `~/.claude/statusline.sh` (di mana `~` adalah direktori home Anda, seperti `/Users/username` di macOS atau `/home/username` di Linux):

90 

91 ```bash theme={null}

92 #!/bin/bash

93 # Read JSON data that Claude Code sends to stdin

94 input=$(cat)

95 

96 # Extract fields using jq

97 MODEL=$(echo "$input" | jq -r '.model.display_name')

98 DIR=$(echo "$input" | jq -r '.workspace.current_dir')

99 # The "// 0" provides a fallback if the field is null

100 PCT=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1)

101 

102 # Output the status line - ${DIR##*/} extracts just the folder name

103 echo "[$MODEL] 📁 ${DIR##*/} | ${PCT}% context"

104 ```

105 </Step>

106 

107 <Step title="Buat dapat dieksekusi">

108 Tandai skrip sebagai dapat dieksekusi sehingga shell Anda dapat menjalankannya:

109 

110 ```bash theme={null}

111 chmod +x ~/.claude/statusline.sh

112 ```

113 </Step>

114 

115 <Step title="Tambahkan ke pengaturan">

116 Beri tahu Claude Code untuk menjalankan skrip Anda sebagai baris status. Tambahkan konfigurasi ini ke `~/.claude/settings.json`, yang menetapkan `type` ke `"command"` (berarti "jalankan perintah shell ini") dan menunjuk `command` ke skrip Anda:

117 

118 ```json theme={null}

119 {

120 "statusLine": {

121 "type": "command",

122 "command": "~/.claude/statusline.sh"

123 }

124 }

125 ```

126 

127 Baris status Anda muncul di bagian bawah antarmuka. Pengaturan dimuat ulang secara otomatis, tetapi perubahan tidak akan muncul sampai interaksi berikutnya Anda dengan Claude Code.

128 </Step>

129</Steps>

130 

131## Bagaimana baris status bekerja

132 

133Claude Code menjalankan skrip Anda dan menyalurkan [data sesi JSON](#available-data) ke dalamnya melalui stdin. Skrip Anda membaca JSON, mengekstrak apa yang dibutuhkan, dan mencetak teks ke stdout. Claude Code menampilkan apa pun yang dicetak skrip Anda.

134 

135**Kapan itu diperbarui**

136 

137Skrip Anda berjalan setelah setiap pesan asisten baru, ketika mode izin berubah, atau ketika vim mode beralih. Pembaruan dibatasi pada 300ms, berarti perubahan cepat dikumpulkan bersama dan skrip Anda berjalan sekali semuanya stabil. Jika pembaruan baru dipicu saat skrip Anda masih berjalan, eksekusi yang sedang berlangsung dibatalkan. Jika Anda mengedit skrip Anda, perubahan tidak akan muncul sampai interaksi berikutnya Anda dengan Claude Code memicu pembaruan.

138 

139Pemicu ini dapat menjadi senyap ketika sesi utama menganggur, misalnya saat koordinator menunggu subagen latar belakang. Untuk menjaga segmen berbasis waktu atau bersumber eksternal tetap terkini selama periode menganggur, atur [`refreshInterval`](#manually-configure-a-status-line) untuk juga menjalankan kembali perintah pada timer tetap.

140 

141**Apa yang dapat dicetak skrip Anda**

142 

143* **Beberapa baris**: setiap pernyataan `echo` atau `print` ditampilkan sebagai baris terpisah. Lihat [contoh multi-baris](#display-multiple-lines).

144* **Warna**: gunakan [kode escape ANSI](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors) seperti `\033[32m` untuk hijau (terminal harus mendukungnya). Lihat [contoh status git](#git-status-with-colors).

145* **Tautan**: gunakan [urutan escape OSC 8](https://en.wikipedia.org/wiki/ANSI_escape_code#OSC) untuk membuat teks dapat diklik (Cmd+klik di macOS, Ctrl+klik di Windows/Linux). Memerlukan terminal yang mendukung hyperlink seperti iTerm2, Kitty, atau WezTerm. Lihat [contoh tautan yang dapat diklik](#clickable-links).

146 

147<Note>Baris status berjalan secara lokal dan tidak menggunakan token API. Itu sementara bersembunyi selama interaksi UI tertentu, termasuk saran pelengkapan otomatis, menu bantuan, dan prompt izin.</Note>

148 

149## Data yang tersedia

150 

151Claude Code mengirim bidang JSON berikut ke skrip Anda melalui stdin:

152 

153| Bidang | Deskripsi |

154| -------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

155| `model.id`, `model.display_name` | Pengidentifikasi model saat ini dan nama tampilan |

156| `cwd`, `workspace.current_dir` | Direktori kerja saat ini. Kedua bidang berisi nilai yang sama; `workspace.current_dir` lebih disukai untuk konsistensi dengan `workspace.project_dir`. |

157| `workspace.project_dir` | Direktori tempat Claude Code diluncurkan, yang mungkin berbeda dari `cwd` jika direktori kerja berubah selama sesi |

158| `workspace.added_dirs` | Direktori tambahan yang ditambahkan melalui `/add-dir` atau `--add-dir`. Array kosong jika tidak ada yang telah ditambahkan |

159| `workspace.git_worktree` | Nama git worktree ketika direktori saat ini berada di dalam linked worktree yang dibuat dengan `git worktree add`. Tidak ada di main working tree. Diisi untuk git worktree apa pun, tidak seperti `worktree.*` yang hanya berlaku untuk sesi `--worktree` |

160| `cost.total_cost_usd` | Perkiraan biaya sesi dalam USD, dihitung sisi klien. Mungkin berbeda dari tagihan aktual Anda |

161| `cost.total_duration_ms` | Total waktu dinding jam sejak sesi dimulai, dalam milidetik |

162| `cost.total_api_duration_ms` | Total waktu yang dihabiskan menunggu respons API dalam milidetik |

163| `cost.total_lines_added`, `cost.total_lines_removed` | Baris kode yang diubah |

164| `context_window.total_input_tokens`, `context_window.total_output_tokens` | Jumlah token kumulatif di seluruh sesi |

165| `context_window.context_window_size` | Ukuran jendela konteks maksimum dalam token. 200000 secara default, atau 1000000 untuk model dengan konteks diperpanjang. |

166| `context_window.used_percentage` | Persentase jendela konteks yang digunakan yang telah dihitung sebelumnya |

167| `context_window.remaining_percentage` | Persentase jendela konteks yang tersisa yang telah dihitung sebelumnya |

168| `context_window.current_usage` | Jumlah token dari panggilan API terakhir, dijelaskan dalam [bidang jendela konteks](#context-window-fields) |

169| `exceeds_200k_tokens` | Apakah jumlah token total (input, cache, dan output token digabungkan) dari respons API terbaru melebihi 200k. Ini adalah ambang batas tetap terlepas dari ukuran jendela konteks aktual. |

170| `effort.level` | Tingkat upaya penalaran saat ini (`low`, `medium`, `high`, `xhigh`, atau `max`). Mencerminkan nilai sesi langsung, termasuk perubahan `/effort` pertengahan sesi. Tidak ada ketika model saat ini tidak mendukung parameter upaya |

171| `thinking.enabled` | Apakah pemikiran diperpanjang diaktifkan untuk sesi |

172| `rate_limits.five_hour.used_percentage`, `rate_limits.seven_day.used_percentage` | Persentase batas laju 5 jam atau 7 hari yang dikonsumsi, dari 0 hingga 100 |

173| `rate_limits.five_hour.resets_at`, `rate_limits.seven_day.resets_at` | Detik epoch Unix ketika jendela batas laju 5 jam atau 7 hari direset |

174| `session_id` | Pengidentifikasi sesi unik |

175| `session_name` | Nama sesi khusus yang ditetapkan dengan bendera `--name` atau `/rename`. Tidak ada jika tidak ada nama khusus yang telah ditetapkan |

176| `transcript_path` | Jalur ke file transkrip percakapan |

177| `version` | Versi Claude Code |

178| `output_style.name` | Nama gaya output saat ini |

179| `vim.mode` | Mode vim saat ini (`NORMAL`, `INSERT`, `VISUAL`, atau `VISUAL LINE`) ketika [vim mode](/id/interactive-mode#vim-editor-mode) diaktifkan |

180| `agent.name` | Nama agen saat menjalankan dengan bendera `--agent` atau pengaturan agen dikonfigurasi |

181| `worktree.name` | Nama worktree aktif. Hadir hanya selama sesi `--worktree` |

182| `worktree.path` | Jalur absolut ke direktori worktree |

183| `worktree.branch` | Nama cabang Git untuk worktree (misalnya, `"worktree-my-feature"`). Tidak ada untuk worktree berbasis hook |

184| `worktree.original_cwd` | Direktori tempat Claude berada sebelum memasuki worktree |

185| `worktree.original_branch` | Cabang Git yang diperiksa sebelum memasuki worktree. Tidak ada untuk worktree berbasis hook |

186 

187<Accordion title="Skema JSON lengkap">

188 Perintah baris status Anda menerima struktur JSON ini melalui stdin:

189 

190 ```json theme={null}

191 {

192 "cwd": "/current/working/directory",

193 "session_id": "abc123...",

194 "session_name": "my-session",

195 "transcript_path": "/path/to/transcript.jsonl",

196 "model": {

197 "id": "claude-opus-4-7",

198 "display_name": "Opus"

199 },

200 "workspace": {

201 "current_dir": "/current/working/directory",

202 "project_dir": "/original/project/directory",

203 "added_dirs": [],

204 "git_worktree": "feature-xyz"

205 },

206 "version": "2.1.90",

207 "output_style": {

208 "name": "default"

209 },

210 "cost": {

211 "total_cost_usd": 0.01234,

212 "total_duration_ms": 45000,

213 "total_api_duration_ms": 2300,

214 "total_lines_added": 156,

215 "total_lines_removed": 23

216 },

217 "context_window": {

218 "total_input_tokens": 15234,

219 "total_output_tokens": 4521,

220 "context_window_size": 200000,

221 "used_percentage": 8,

222 "remaining_percentage": 92,

223 "current_usage": {

224 "input_tokens": 8500,

225 "output_tokens": 1200,

226 "cache_creation_input_tokens": 5000,

227 "cache_read_input_tokens": 2000

228 }

229 },

230 "exceeds_200k_tokens": false,

231 "effort": {

232 "level": "high"

233 },

234 "thinking": {

235 "enabled": true

236 },

237 "rate_limits": {

238 "five_hour": {

239 "used_percentage": 23.5,

240 "resets_at": 1738425600

241 },

242 "seven_day": {

243 "used_percentage": 41.2,

244 "resets_at": 1738857600

245 }

246 },

247 "vim": {

248 "mode": "NORMAL"

249 },

250 "agent": {

251 "name": "security-reviewer"

252 },

253 "worktree": {

254 "name": "my-feature",

255 "path": "/path/to/.claude/worktrees/my-feature",

256 "branch": "worktree-my-feature",

257 "original_cwd": "/path/to/project",

258 "original_branch": "main"

259 }

260 }

261 ```

262 

263 **Bidang yang mungkin tidak ada** (tidak ada dalam JSON):

264 

265 * `session_name`: muncul hanya ketika nama khusus telah ditetapkan dengan `--name` atau `/rename`

266 * `workspace.git_worktree`: muncul hanya ketika direktori saat ini berada di dalam linked git worktree

267 * `effort`: muncul hanya ketika model saat ini mendukung parameter upaya penalaran

268 * `vim`: muncul hanya ketika vim mode diaktifkan

269 * `agent`: muncul hanya saat menjalankan dengan bendera `--agent` atau pengaturan agen dikonfigurasi

270 * `worktree`: muncul hanya selama sesi `--worktree`. Ketika ada, `branch` dan `original_branch` juga mungkin tidak ada untuk worktree berbasis hook

271 * `rate_limits`: muncul hanya untuk pelanggan Claude.ai (Pro/Max) setelah respons API pertama dalam sesi. Setiap jendela (`five_hour`, `seven_day`) mungkin secara independen tidak ada. Gunakan `jq -r '.rate_limits.five_hour.used_percentage // empty'` untuk menangani ketiadaan dengan anggun.

272 

273 **Bidang yang mungkin `null`**:

274 

275 * `context_window.current_usage`: `null` sebelum panggilan API pertama dalam sesi

276 * `context_window.used_percentage`, `context_window.remaining_percentage`: mungkin `null` awal dalam sesi

277 

278 Tangani bidang yang hilang dengan akses bersyarat dan nilai null dengan default fallback dalam skrip Anda.

279</Accordion>

280 

281### Bidang jendela konteks

282 

283Objek `context_window` menyediakan dua cara untuk melacak penggunaan konteks:

284 

285* **Total kumulatif** (`total_input_tokens`, `total_output_tokens`): jumlah semua token di seluruh sesi, berguna untuk melacak konsumsi total

286* **Penggunaan saat ini** (`current_usage`): jumlah token dari panggilan API terbaru, gunakan ini untuk persentase konteks yang akurat karena mencerminkan keadaan konteks aktual

287 

288Objek `current_usage` berisi:

289 

290* `input_tokens`: token input dalam konteks saat ini

291* `output_tokens`: token output yang dihasilkan

292* `cache_creation_input_tokens`: token yang ditulis ke cache

293* `cache_read_input_tokens`: token yang dibaca dari cache

294 

295Bidang `used_percentage` dihitung dari token input saja: `input_tokens + cache_creation_input_tokens + cache_read_input_tokens`. Itu tidak termasuk `output_tokens`.

296 

297Jika Anda menghitung persentase konteks secara manual dari `current_usage`, gunakan formula input-only yang sama untuk mencocokkan `used_percentage`.

298 

299Objek `current_usage` adalah `null` sebelum panggilan API pertama dalam sesi.

300 

301## Contoh

302 

303Contoh-contoh ini menunjukkan pola baris status umum. Untuk menggunakan contoh apa pun:

304 

3051. Simpan skrip ke file seperti `~/.claude/statusline.sh` (atau `.py`/`.js`)

3062. Buat dapat dieksekusi: `chmod +x ~/.claude/statusline.sh`

3073. Tambahkan jalur ke [pengaturan](#manually-configure-a-status-line) Anda

308 

309Contoh Bash menggunakan [`jq`](https://jqlang.github.io/jq/) untuk mengurai JSON. Python dan Node.js memiliki penguraian JSON bawaan.

310 

311### Penggunaan jendela konteks

312 

313Tampilkan 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:

314 

315<Frame>

316 <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" />

317</Frame>

318 

319<CodeGroup>

320 ```bash Bash theme={null}

321 #!/bin/bash

322 # Read all of stdin into a variable

323 input=$(cat)

324 

325 # Extract fields with jq, "// 0" provides fallback for null

326 MODEL=$(echo "$input" | jq -r '.model.display_name')

327 PCT=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1)

328 

329 # Build progress bar: printf -v creates a run of spaces, then

330 # ${var// /▓} replaces each space with a block character

331 BAR_WIDTH=10

332 FILLED=$((PCT * BAR_WIDTH / 100))

333 EMPTY=$((BAR_WIDTH - FILLED))

334 BAR=""

335 [ "$FILLED" -gt 0 ] && printf -v FILL "%${FILLED}s" && BAR="${FILL// /▓}"

336 [ "$EMPTY" -gt 0 ] && printf -v PAD "%${EMPTY}s" && BAR="${BAR}${PAD// /░}"

337 

338 echo "[$MODEL] $BAR $PCT%"

339 ```

340 

341 ```python Python theme={null}

342 #!/usr/bin/env python3

343 import json, sys

344 

345 # json.load reads and parses stdin in one step

346 data = json.load(sys.stdin)

347 model = data['model']['display_name']

348 # "or 0" handles null values

349 pct = int(data.get('context_window', {}).get('used_percentage', 0) or 0)

350 

351 # String multiplication builds the bar

352 filled = pct * 10 // 100

353 bar = '▓' * filled + '░' * (10 - filled)

354 

355 print(f"[{model}] {bar} {pct}%")

356 ```

357 

358 ```javascript Node.js theme={null}

359 #!/usr/bin/env node

360 // Node.js reads stdin asynchronously with events

361 let input = '';

362 process.stdin.on('data', chunk => input += chunk);

363 process.stdin.on('end', () => {

364 const data = JSON.parse(input);

365 const model = data.model.display_name;

366 // Optional chaining (?.) safely handles null fields

367 const pct = Math.floor(data.context_window?.used_percentage || 0);

368 

369 // String.repeat() builds the bar

370 const filled = Math.floor(pct * 10 / 100);

371 const bar = '▓'.repeat(filled) + '░'.repeat(10 - filled);

372 

373 console.log(`[${model}] ${bar} ${pct}%`);

374 });

375 ```

376</CodeGroup>

377 

378### Status git dengan warna

379 

380Tampilkan 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.

381 

382<Frame>

383 <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" />

384</Frame>

385 

386Setiap skrip memeriksa apakah direktori saat ini adalah repositori git, menghitung file yang dipentingkan dan dimodifikasi, dan menampilkan indikator berkode warna:

387 

388<CodeGroup>

389 ```bash Bash theme={null}

390 #!/bin/bash

391 input=$(cat)

392 

393 MODEL=$(echo "$input" | jq -r '.model.display_name')

394 DIR=$(echo "$input" | jq -r '.workspace.current_dir')

395 

396 GREEN='\033[32m'

397 YELLOW='\033[33m'

398 RESET='\033[0m'

399 

400 if git rev-parse --git-dir > /dev/null 2>&1; then

401 BRANCH=$(git branch --show-current 2>/dev/null)

402 STAGED=$(git diff --cached --numstat 2>/dev/null | wc -l | tr -d ' ')

403 MODIFIED=$(git diff --numstat 2>/dev/null | wc -l | tr -d ' ')

404 

405 GIT_STATUS=""

406 [ "$STAGED" -gt 0 ] && GIT_STATUS="${GREEN}+${STAGED}${RESET}"

407 [ "$MODIFIED" -gt 0 ] && GIT_STATUS="${GIT_STATUS}${YELLOW}~${MODIFIED}${RESET}"

408 

409 echo -e "[$MODEL] 📁 ${DIR##*/} | 🌿 $BRANCH $GIT_STATUS"

410 else

411 echo "[$MODEL] 📁 ${DIR##*/}"

412 fi

413 ```

414 

415 ```python Python theme={null}

416 #!/usr/bin/env python3

417 import json, sys, subprocess, os

418 

419 data = json.load(sys.stdin)

420 model = data['model']['display_name']

421 directory = os.path.basename(data['workspace']['current_dir'])

422 

423 GREEN, YELLOW, RESET = '\033[32m', '\033[33m', '\033[0m'

424 

425 try:

426 subprocess.check_output(['git', 'rev-parse', '--git-dir'], stderr=subprocess.DEVNULL)

427 branch = subprocess.check_output(['git', 'branch', '--show-current'], text=True).strip()

428 staged_output = subprocess.check_output(['git', 'diff', '--cached', '--numstat'], text=True).strip()

429 modified_output = subprocess.check_output(['git', 'diff', '--numstat'], text=True).strip()

430 staged = len(staged_output.split('\n')) if staged_output else 0

431 modified = len(modified_output.split('\n')) if modified_output else 0

432 

433 git_status = f"{GREEN}+{staged}{RESET}" if staged else ""

434 git_status += f"{YELLOW}~{modified}{RESET}" if modified else ""

435 

436 print(f"[{model}] 📁 {directory} | 🌿 {branch} {git_status}")

437 except:

438 print(f"[{model}] 📁 {directory}")

439 ```

440 

441 ```javascript Node.js theme={null}

442 #!/usr/bin/env node

443 const { execSync } = require('child_process');

444 const path = require('path');

445 

446 let input = '';

447 process.stdin.on('data', chunk => input += chunk);

448 process.stdin.on('end', () => {

449 const data = JSON.parse(input);

450 const model = data.model.display_name;

451 const dir = path.basename(data.workspace.current_dir);

452 

453 const GREEN = '\x1b[32m', YELLOW = '\x1b[33m', RESET = '\x1b[0m';

454 

455 try {

456 execSync('git rev-parse --git-dir', { stdio: 'ignore' });

457 const branch = execSync('git branch --show-current', { encoding: 'utf8' }).trim();

458 const staged = execSync('git diff --cached --numstat', { encoding: 'utf8' }).trim().split('\n').filter(Boolean).length;

459 const modified = execSync('git diff --numstat', { encoding: 'utf8' }).trim().split('\n').filter(Boolean).length;

460 

461 let gitStatus = staged ? `${GREEN}+${staged}${RESET}` : '';

462 gitStatus += modified ? `${YELLOW}~${modified}${RESET}` : '';

463 

464 console.log(`[${model}] 📁 ${dir} | 🌿 ${branch} ${gitStatus}`);

465 } catch {

466 console.log(`[${model}] 📁 ${dir}`);

467 }

468 });

469 ```

470</CodeGroup>

471 

472### Pelacakan biaya dan durasi

473 

474Lacak biaya API sesi dan waktu yang telah berlalu. Bidang `cost.total_cost_usd` mengakumulasi biaya semua panggilan API dalam sesi saat ini. Bidang `cost.total_duration_ms` mengukur total waktu yang telah berlalu sejak sesi dimulai, sementara `cost.total_api_duration_ms` melacak hanya waktu yang dihabiskan menunggu respons API.

475 

476Setiap skrip memformat biaya sebagai mata uang dan mengonversi milidetik ke menit dan detik:

477 

478<Frame>

479 <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" />

480</Frame>

481 

482<CodeGroup>

483 ```bash Bash theme={null}

484 #!/bin/bash

485 input=$(cat)

486 

487 MODEL=$(echo "$input" | jq -r '.model.display_name')

488 COST=$(echo "$input" | jq -r '.cost.total_cost_usd // 0')

489 DURATION_MS=$(echo "$input" | jq -r '.cost.total_duration_ms // 0')

490 

491 COST_FMT=$(printf '$%.2f' "$COST")

492 DURATION_SEC=$((DURATION_MS / 1000))

493 MINS=$((DURATION_SEC / 60))

494 SECS=$((DURATION_SEC % 60))

495 

496 echo "[$MODEL] 💰 $COST_FMT | ⏱️ ${MINS}m ${SECS}s"

497 ```

498 

499 ```python Python theme={null}

500 #!/usr/bin/env python3

501 import json, sys

502 

503 data = json.load(sys.stdin)

504 model = data['model']['display_name']

505 cost = data.get('cost', {}).get('total_cost_usd', 0) or 0

506 duration_ms = data.get('cost', {}).get('total_duration_ms', 0) or 0

507 

508 duration_sec = duration_ms // 1000

509 mins, secs = duration_sec // 60, duration_sec % 60

510 

511 print(f"[{model}] 💰 ${cost:.2f} | ⏱️ {mins}m {secs}s")

512 ```

513 

514 ```javascript Node.js theme={null}

515 #!/usr/bin/env node

516 let input = '';

517 process.stdin.on('data', chunk => input += chunk);

518 process.stdin.on('end', () => {

519 const data = JSON.parse(input);

520 const model = data.model.display_name;

521 const cost = data.cost?.total_cost_usd || 0;

522 const durationMs = data.cost?.total_duration_ms || 0;

523 

524 const durationSec = Math.floor(durationMs / 1000);

525 const mins = Math.floor(durationSec / 60);

526 const secs = durationSec % 60;

527 

528 console.log(`[${model}] 💰 $${cost.toFixed(2)} | ⏱️ ${mins}m ${secs}s`);

529 });

530 ```

531</CodeGroup>

532 

533### Tampilkan beberapa baris

534 

535Skrip Anda dapat menampilkan beberapa baris untuk membuat tampilan yang lebih kaya. Setiap pernyataan `echo` menghasilkan baris terpisah di area status.

536 

537<Frame>

538 <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" />

539</Frame>

540 

541Contoh 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:

542 

543<CodeGroup>

544 ```bash Bash theme={null}

545 #!/bin/bash

546 input=$(cat)

547 

548 MODEL=$(echo "$input" | jq -r '.model.display_name')

549 DIR=$(echo "$input" | jq -r '.workspace.current_dir')

550 COST=$(echo "$input" | jq -r '.cost.total_cost_usd // 0')

551 PCT=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1)

552 DURATION_MS=$(echo "$input" | jq -r '.cost.total_duration_ms // 0')

553 

554 CYAN='\033[36m'; GREEN='\033[32m'; YELLOW='\033[33m'; RED='\033[31m'; RESET='\033[0m'

555 

556 # Pick bar color based on context usage

557 if [ "$PCT" -ge 90 ]; then BAR_COLOR="$RED"

558 elif [ "$PCT" -ge 70 ]; then BAR_COLOR="$YELLOW"

559 else BAR_COLOR="$GREEN"; fi

560 

561 FILLED=$((PCT / 10)); EMPTY=$((10 - FILLED))

562 printf -v FILL "%${FILLED}s"; printf -v PAD "%${EMPTY}s"

563 BAR="${FILL// /█}${PAD// /░}"

564 

565 MINS=$((DURATION_MS / 60000)); SECS=$(((DURATION_MS % 60000) / 1000))

566 

567 BRANCH=""

568 git rev-parse --git-dir > /dev/null 2>&1 && BRANCH=" | 🌿 $(git branch --show-current 2>/dev/null)"

569 

570 echo -e "${CYAN}[$MODEL]${RESET} 📁 ${DIR##*/}$BRANCH"

571 COST_FMT=$(printf '$%.2f' "$COST")

572 echo -e "${BAR_COLOR}${BAR}${RESET} ${PCT}% | ${YELLOW}${COST_FMT}${RESET} | ⏱️ ${MINS}m ${SECS}s"

573 ```

574 

575 ```python Python theme={null}

576 #!/usr/bin/env python3

577 import json, sys, subprocess, os

578 

579 data = json.load(sys.stdin)

580 model = data['model']['display_name']

581 directory = os.path.basename(data['workspace']['current_dir'])

582 cost = data.get('cost', {}).get('total_cost_usd', 0) or 0

583 pct = int(data.get('context_window', {}).get('used_percentage', 0) or 0)

584 duration_ms = data.get('cost', {}).get('total_duration_ms', 0) or 0

585 

586 CYAN, GREEN, YELLOW, RED, RESET = '\033[36m', '\033[32m', '\033[33m', '\033[31m', '\033[0m'

587 

588 bar_color = RED if pct >= 90 else YELLOW if pct >= 70 else GREEN

589 filled = pct // 10

590 bar = '█' * filled + '░' * (10 - filled)

591 

592 mins, secs = duration_ms // 60000, (duration_ms % 60000) // 1000

593 

594 try:

595 branch = subprocess.check_output(['git', 'branch', '--show-current'], text=True, stderr=subprocess.DEVNULL).strip()

596 branch = f" | 🌿 {branch}" if branch else ""

597 except:

598 branch = ""

599 

600 print(f"{CYAN}[{model}]{RESET} 📁 {directory}{branch}")

601 print(f"{bar_color}{bar}{RESET} {pct}% | {YELLOW}${cost:.2f}{RESET} | ⏱️ {mins}m {secs}s")

602 ```

603 

604 ```javascript Node.js theme={null}

605 #!/usr/bin/env node

606 const { execSync } = require('child_process');

607 const path = require('path');

608 

609 let input = '';

610 process.stdin.on('data', chunk => input += chunk);

611 process.stdin.on('end', () => {

612 const data = JSON.parse(input);

613 const model = data.model.display_name;

614 const dir = path.basename(data.workspace.current_dir);

615 const cost = data.cost?.total_cost_usd || 0;

616 const pct = Math.floor(data.context_window?.used_percentage || 0);

617 const durationMs = data.cost?.total_duration_ms || 0;

618 

619 const CYAN = '\x1b[36m', GREEN = '\x1b[32m', YELLOW = '\x1b[33m', RED = '\x1b[31m', RESET = '\x1b[0m';

620 

621 const barColor = pct >= 90 ? RED : pct >= 70 ? YELLOW : GREEN;

622 const filled = Math.floor(pct / 10);

623 const bar = '█'.repeat(filled) + '░'.repeat(10 - filled);

624 

625 const mins = Math.floor(durationMs / 60000);

626 const secs = Math.floor((durationMs % 60000) / 1000);

627 

628 let branch = '';

629 try {

630 branch = execSync('git branch --show-current', { encoding: 'utf8', stdio: ['pipe', 'pipe', 'ignore'] }).trim();

631 branch = branch ? ` | 🌿 ${branch}` : '';

632 } catch {}

633 

634 console.log(`${CYAN}[${model}]${RESET} 📁 ${dir}${branch}`);

635 console.log(`${barColor}${bar}${RESET} ${pct}% | ${YELLOW}$${cost.toFixed(2)}${RESET} | ⏱️ ${mins}m ${secs}s`);

636 });

637 ```

638</CodeGroup>

639 

640### Tautan yang dapat diklik

641 

642Contoh ini membuat tautan yang dapat diklik ke repositori GitHub Anda. Itu membaca URL remote git, mengonversi format SSH ke HTTPS dengan `sed`, dan membungkus nama repo dalam kode escape OSC 8. Tahan Cmd (macOS) atau Ctrl (Windows/Linux) dan klik untuk membuka tautan di browser Anda.

643 

644<Frame>

645 <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" />

646</Frame>

647 

648Setiap 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:

649 

650<CodeGroup>

651 ```bash Bash theme={null}

652 #!/bin/bash

653 input=$(cat)

654 

655 MODEL=$(echo "$input" | jq -r '.model.display_name')

656 

657 # Convert git SSH URL to HTTPS

658 REMOTE=$(git remote get-url origin 2>/dev/null | sed 's/git@github.com:/https:\/\/github.com\//' | sed 's/\.git$//')

659 

660 if [ -n "$REMOTE" ]; then

661 REPO_NAME=$(basename "$REMOTE")

662 # OSC 8 format: \e]8;;URL\a then TEXT then \e]8;;\a

663 # printf %b interprets escape sequences reliably across shells

664 printf '%b' "[$MODEL] 🔗 \e]8;;${REMOTE}\a${REPO_NAME}\e]8;;\a\n"

665 else

666 echo "[$MODEL]"

667 fi

668 ```

669 

670 ```python Python theme={null}

671 #!/usr/bin/env python3

672 import json, sys, subprocess, re, os

673 

674 data = json.load(sys.stdin)

675 model = data['model']['display_name']

676 

677 # Get git remote URL

678 try:

679 remote = subprocess.check_output(

680 ['git', 'remote', 'get-url', 'origin'],

681 stderr=subprocess.DEVNULL, text=True

682 ).strip()

683 # Convert SSH to HTTPS format

684 remote = re.sub(r'^git@github\.com:', 'https://github.com/', remote)

685 remote = re.sub(r'\.git$', '', remote)

686 repo_name = os.path.basename(remote)

687 # OSC 8 escape sequences

688 link = f"\033]8;;{remote}\a{repo_name}\033]8;;\a"

689 print(f"[{model}] 🔗 {link}")

690 except:

691 print(f"[{model}]")

692 ```

693 

694 ```javascript Node.js theme={null}

695 #!/usr/bin/env node

696 const { execSync } = require('child_process');

697 const path = require('path');

698 

699 let input = '';

700 process.stdin.on('data', chunk => input += chunk);

701 process.stdin.on('end', () => {

702 const data = JSON.parse(input);

703 const model = data.model.display_name;

704 

705 try {

706 let remote = execSync('git remote get-url origin', { encoding: 'utf8', stdio: ['pipe', 'pipe', 'ignore'] }).trim();

707 // Convert SSH to HTTPS format

708 remote = remote.replace(/^git@github\.com:/, 'https://github.com/').replace(/\.git$/, '');

709 const repoName = path.basename(remote);

710 // OSC 8 escape sequences

711 const link = `\x1b]8;;${remote}\x07${repoName}\x1b]8;;\x07`;

712 console.log(`[${model}] 🔗 ${link}`);

713 } catch {

714 console.log(`[${model}]`);

715 }

716 });

717 ```

718</CodeGroup>

719 

720### Penggunaan batas laju

721 

722Tampilkan penggunaan batas laju langganan Claude.ai dalam baris status. Objek `rate_limits` berisi `five_hour` (jendela bergulir 5 jam) dan `seven_day` (jendela mingguan). Setiap jendela menyediakan `used_percentage` (0-100) dan `resets_at` (detik epoch Unix ketika jendela direset).

723 

724Bidang ini hanya ada untuk pelanggan Claude.ai (Pro/Max) setelah respons API pertama. Setiap skrip menangani bidang yang tidak ada dengan anggun:

725 

726<CodeGroup>

727 ```bash Bash theme={null}

728 #!/bin/bash

729 input=$(cat)

730 

731 MODEL=$(echo "$input" | jq -r '.model.display_name')

732 # "// empty" produces no output when rate_limits is absent

733 FIVE_H=$(echo "$input" | jq -r '.rate_limits.five_hour.used_percentage // empty')

734 WEEK=$(echo "$input" | jq -r '.rate_limits.seven_day.used_percentage // empty')

735 

736 LIMITS=""

737 [ -n "$FIVE_H" ] && LIMITS="5h: $(printf '%.0f' "$FIVE_H")%"

738 [ -n "$WEEK" ] && LIMITS="${LIMITS:+$LIMITS }7d: $(printf '%.0f' "$WEEK")%"

739 

740 [ -n "$LIMITS" ] && echo "[$MODEL] | $LIMITS" || echo "[$MODEL]"

741 ```

742 

743 ```python Python theme={null}

744 #!/usr/bin/env python3

745 import json, sys

746 

747 data = json.load(sys.stdin)

748 model = data['model']['display_name']

749 

750 parts = []

751 rate = data.get('rate_limits', {})

752 five_h = rate.get('five_hour', {}).get('used_percentage')

753 week = rate.get('seven_day', {}).get('used_percentage')

754 

755 if five_h is not None:

756 parts.append(f"5h: {five_h:.0f}%")

757 if week is not None:

758 parts.append(f"7d: {week:.0f}%")

759 

760 if parts:

761 print(f"[{model}] | {' '.join(parts)}")

762 else:

763 print(f"[{model}]")

764 ```

765 

766 ```javascript Node.js theme={null}

767 #!/usr/bin/env node

768 let input = '';

769 process.stdin.on('data', chunk => input += chunk);

770 process.stdin.on('end', () => {

771 const data = JSON.parse(input);

772 const model = data.model.display_name;

773 

774 const parts = [];

775 const fiveH = data.rate_limits?.five_hour?.used_percentage;

776 const week = data.rate_limits?.seven_day?.used_percentage;

777 

778 if (fiveH != null) parts.push(`5h: ${Math.round(fiveH)}%`);

779 if (week != null) parts.push(`7d: ${Math.round(week)}%`);

780 

781 console.log(parts.length ? `[${model}] | ${parts.join(' ')}` : `[${model}]`);

782 });

783 ```

784</CodeGroup>

785 

786### Cache operasi yang mahal

787 

788Skrip baris status Anda berjalan sering selama sesi aktif. Perintah seperti `git status` atau `git diff` dapat lambat, terutama di repositori besar. Contoh ini menyimpan informasi git ke file temp dan hanya menyegarkannya setiap 5 detik.

789 

790Nama file cache perlu stabil di seluruh invokasi baris status dalam sesi, tetapi unik di seluruh sesi sehingga sesi bersamaan di repositori berbeda tidak membaca keadaan git cache satu sama lain. Pengidentifikasi berbasis proses seperti `$$`, `os.getpid()`, atau `process.pid` berubah pada setiap invokasi dan mengalahkan cache. Gunakan `session_id` dari input JSON sebagai gantinya: itu stabil untuk seumur hidup sesi dan unik per sesi.

791 

792Setiap skrip memeriksa apakah file cache hilang atau lebih lama dari 5 detik sebelum menjalankan perintah git:

793 

794<CodeGroup>

795 ```bash Bash theme={null}

796 #!/bin/bash

797 input=$(cat)

798 

799 MODEL=$(echo "$input" | jq -r '.model.display_name')

800 DIR=$(echo "$input" | jq -r '.workspace.current_dir')

801 SESSION_ID=$(echo "$input" | jq -r '.session_id')

802 

803 CACHE_FILE="/tmp/statusline-git-cache-$SESSION_ID"

804 CACHE_MAX_AGE=5 # seconds

805 

806 cache_is_stale() {

807 [ ! -f "$CACHE_FILE" ] || \

808 # stat -f %m is macOS, stat -c %Y is Linux

809 [ $(($(date +%s) - $(stat -f %m "$CACHE_FILE" 2>/dev/null || stat -c %Y "$CACHE_FILE" 2>/dev/null || echo 0))) -gt $CACHE_MAX_AGE ]

810 }

811 

812 if cache_is_stale; then

813 if git rev-parse --git-dir > /dev/null 2>&1; then

814 BRANCH=$(git branch --show-current 2>/dev/null)

815 STAGED=$(git diff --cached --numstat 2>/dev/null | wc -l | tr -d ' ')

816 MODIFIED=$(git diff --numstat 2>/dev/null | wc -l | tr -d ' ')

817 echo "$BRANCH|$STAGED|$MODIFIED" > "$CACHE_FILE"

818 else

819 echo "||" > "$CACHE_FILE"

820 fi

821 fi

822 

823 IFS='|' read -r BRANCH STAGED MODIFIED < "$CACHE_FILE"

824 

825 if [ -n "$BRANCH" ]; then

826 echo "[$MODEL] 📁 ${DIR##*/} | 🌿 $BRANCH +$STAGED ~$MODIFIED"

827 else

828 echo "[$MODEL] 📁 ${DIR##*/}"

829 fi

830 ```

831 

832 ```python Python theme={null}

833 #!/usr/bin/env python3

834 import json, sys, subprocess, os, time

835 

836 data = json.load(sys.stdin)

837 model = data['model']['display_name']

838 directory = os.path.basename(data['workspace']['current_dir'])

839 session_id = data['session_id']

840 

841 CACHE_FILE = f"/tmp/statusline-git-cache-{session_id}"

842 CACHE_MAX_AGE = 5 # seconds

843 

844 def cache_is_stale():

845 if not os.path.exists(CACHE_FILE):

846 return True

847 return time.time() - os.path.getmtime(CACHE_FILE) > CACHE_MAX_AGE

848 

849 if cache_is_stale():

850 try:

851 subprocess.check_output(['git', 'rev-parse', '--git-dir'], stderr=subprocess.DEVNULL)

852 branch = subprocess.check_output(['git', 'branch', '--show-current'], text=True).strip()

853 staged = subprocess.check_output(['git', 'diff', '--cached', '--numstat'], text=True).strip()

854 modified = subprocess.check_output(['git', 'diff', '--numstat'], text=True).strip()

855 staged_count = len(staged.split('\n')) if staged else 0

856 modified_count = len(modified.split('\n')) if modified else 0

857 with open(CACHE_FILE, 'w') as f:

858 f.write(f"{branch}|{staged_count}|{modified_count}")

859 except:

860 with open(CACHE_FILE, 'w') as f:

861 f.write("||")

862 

863 with open(CACHE_FILE) as f:

864 branch, staged, modified = f.read().strip().split('|')

865 

866 if branch:

867 print(f"[{model}] 📁 {directory} | 🌿 {branch} +{staged} ~{modified}")

868 else:

869 print(f"[{model}] 📁 {directory}")

870 ```

871 

872 ```javascript Node.js theme={null}

873 #!/usr/bin/env node

874 const { execSync } = require('child_process');

875 const fs = require('fs');

876 const path = require('path');

877 

878 let input = '';

879 process.stdin.on('data', chunk => input += chunk);

880 process.stdin.on('end', () => {

881 const data = JSON.parse(input);

882 const model = data.model.display_name;

883 const dir = path.basename(data.workspace.current_dir);

884 const sessionId = data.session_id;

885 

886 const CACHE_FILE = `/tmp/statusline-git-cache-${sessionId}`;

887 const CACHE_MAX_AGE = 5; // seconds

888 

889 const cacheIsStale = () => {

890 if (!fs.existsSync(CACHE_FILE)) return true;

891 return (Date.now() / 1000) - fs.statSync(CACHE_FILE).mtimeMs / 1000 > CACHE_MAX_AGE;

892 };

893 

894 if (cacheIsStale()) {

895 try {

896 execSync('git rev-parse --git-dir', { stdio: 'ignore' });

897 const branch = execSync('git branch --show-current', { encoding: 'utf8' }).trim();

898 const staged = execSync('git diff --cached --numstat', { encoding: 'utf8' }).trim().split('\n').filter(Boolean).length;

899 const modified = execSync('git diff --numstat', { encoding: 'utf8' }).trim().split('\n').filter(Boolean).length;

900 fs.writeFileSync(CACHE_FILE, `${branch}|${staged}|${modified}`);

901 } catch {

902 fs.writeFileSync(CACHE_FILE, '||');

903 }

904 }

905 

906 const [branch, staged, modified] = fs.readFileSync(CACHE_FILE, 'utf8').trim().split('|');

907 

908 if (branch) {

909 console.log(`[${model}] 📁 ${dir} | 🌿 ${branch} +${staged} ~${modified}`);

910 } else {

911 console.log(`[${model}] 📁 ${dir}`);

912 }

913 });

914 ```

915</CodeGroup>

916 

917### Konfigurasi Windows

918 

919Di Windows, Claude Code menjalankan perintah baris status melalui Git Bash ketika Git Bash diinstal, atau melalui PowerShell ketika Git Bash tidak ada. Untuk menjalankan skrip PowerShell sebagai baris status Anda, panggil melalui `powershell`; ini berfungsi dari shell mana pun:

920 

921<CodeGroup>

922 ```json settings.json theme={null}

923 {

924 "statusLine": {

925 "type": "command",

926 "command": "powershell -NoProfile -File C:/Users/username/.claude/statusline.ps1"

927 }

928 }

929 ```

930 

931 ```powershell statusline.ps1 theme={null}

932 $input_json = $input | Out-String | ConvertFrom-Json

933 $cwd = $input_json.cwd

934 $model = $input_json.model.display_name

935 $used = $input_json.context_window.used_percentage

936 $dirname = Split-Path $cwd -Leaf

937 

938 if ($used) {

939 Write-Host "$dirname [$model] ctx: $used%"

940 } else {

941 Write-Host "$dirname [$model]"

942 }

943 ```

944</CodeGroup>

945 

946Atau, ketika Git Bash diinstal, jalankan skrip Bash secara langsung:

947 

948<CodeGroup>

949 ```json settings.json theme={null}

950 {

951 "statusLine": {

952 "type": "command",

953 "command": "~/.claude/statusline.sh"

954 }

955 }

956 ```

957 

958 ```bash statusline.sh theme={null}

959 #!/usr/bin/env bash

960 input=$(cat)

961 cwd=$(echo "$input" | grep -o '"cwd":"[^"]*"' | cut -d'"' -f4)

962 model=$(echo "$input" | grep -o '"display_name":"[^"]*"' | cut -d'"' -f4)

963 dirname="${cwd##*[/\\]}"

964 echo "$dirname [$model]"

965 ```

966</CodeGroup>

967 

968## Baris status subagen

969 

970Pengaturan `subagentStatusLine` merender badan baris khusus untuk setiap [subagen](/id/sub-agents) yang ditampilkan di panel agen di bawah prompt. Gunakan untuk mengganti baris default `name · description · token count` dengan pemformatan Anda sendiri.

971 

972```json theme={null}

973{

974 "subagentStatusLine": {

975 "type": "command",

976 "command": "~/.claude/subagent-statusline.sh"

977 }

978}

979```

980 

981Perintah berjalan sekali per tick refresh dengan semua baris subagen yang terlihat diteruskan sebagai objek JSON tunggal di stdin. Input mencakup [bidang hook umum](/id/hooks#common-input-fields) ditambah `columns` (lebar baris yang dapat digunakan) dan array `tasks`, di mana setiap tugas memiliki `id`, `name`, `type`, `status`, `description`, `label`, `startTime`, `tokenCount`, `tokenSamples`, dan `cwd`.

982 

983Tulis satu baris JSON ke stdout per baris yang ingin Anda ganti, dalam bentuk `{"id": "<task id>", "content": "<row body>"}`. String `content` dirender apa adanya, termasuk warna ANSI dan hyperlink OSC 8. Hilangkan `id` tugas untuk menjaga rendering default untuk baris itu; keluarkan string `content` kosong untuk menyembunyikannya.

984 

985Gerbang kepercayaan dan `disableAllHooks` yang sama yang berlaku untuk `statusLine` berlaku di sini. Plugin dapat mengirimkan `subagentStatusLine` default dalam [`settings.json`](/id/plugins-reference#standard-plugin-layout) mereka.

986 

987## Tips

988 

989* **Uji dengan input mock**: `echo '{"model":{"display_name":"Opus"},"workspace":{"current_dir":"/home/user/project"},"context_window":{"used_percentage":25},"session_id":"test-session-abc"}' | ./statusline.sh`

990* **Jaga output tetap pendek**: bilah status memiliki lebar terbatas, jadi output panjang mungkin dipotong atau membungkus dengan canggung

991* **Cache operasi lambat**: skrip Anda berjalan sering selama sesi aktif, jadi perintah seperti `git status` dapat menyebabkan lag. Lihat [contoh caching](#cache-expensive-operations) untuk cara menangani ini.

992 

993Proyek komunitas seperti [ccstatusline](https://github.com/sirmalloc/ccstatusline) dan [starship-claude](https://github.com/martinemde/starship-claude) menyediakan konfigurasi pra-bangun dengan tema dan fitur tambahan.

994 

995## Troubleshooting

996 

997**Baris status tidak muncul**

998 

999* Verifikasi skrip Anda dapat dieksekusi: `chmod +x ~/.claude/statusline.sh`

1000* Periksa bahwa skrip Anda menampilkan ke stdout, bukan stderr

1001* Jalankan skrip Anda secara manual untuk memverifikasi itu menghasilkan output

1002* Jika `disableAllHooks` diatur ke `true` dalam pengaturan Anda, baris status juga dinonaktifkan. Hapus pengaturan ini atau atur ke `false` untuk mengaktifkan kembali.

1003* Jalankan `claude --debug` untuk mencatat kode keluar dan stderr dari invokasi baris status pertama dalam sesi

1004* Minta Claude untuk membaca file pengaturan Anda dan jalankan perintah `statusLine` secara langsung untuk mengungkap kesalahan

1005 

1006**Baris status menampilkan `--` atau nilai kosong**

1007 

1008* Bidang mungkin `null` sebelum respons API pertama selesai

1009* Tangani nilai null dalam skrip Anda dengan fallback seperti `// 0` dalam jq

1010* Mulai ulang Claude Code jika nilai tetap kosong setelah beberapa pesan

1011 

1012**Persentase konteks menampilkan nilai yang tidak terduga**

1013 

1014* Gunakan `used_percentage` untuk keadaan konteks yang akurat daripada total kumulatif

1015* `total_input_tokens` dan `total_output_tokens` adalah kumulatif di seluruh sesi dan mungkin melebihi ukuran jendela konteks

1016* Persentase konteks mungkin berbeda dari output `/context` karena kapan masing-masing dihitung

1017 

1018**Tautan OSC 8 tidak dapat diklik**

1019 

1020* Verifikasi terminal Anda mendukung hyperlink OSC 8 (iTerm2, Kitty, WezTerm)

1021 

1022* Terminal.app tidak mendukung tautan yang dapat diklik

1023 

1024* Jika teks tautan muncul tetapi tidak dapat diklik, Claude Code mungkin tidak mendeteksi dukungan hyperlink di terminal Anda. Ini biasanya mempengaruhi Windows Terminal dan emulator lain yang tidak ada dalam daftar deteksi otomatis. Atur variabel lingkungan `FORCE_HYPERLINK` untuk mengganti deteksi sebelum meluncurkan Claude Code:

1025 

1026 ```bash theme={null}

1027 FORCE_HYPERLINK=1 claude

1028 ```

1029 

1030 Di PowerShell, atur variabel dalam sesi saat ini terlebih dahulu:

1031 

1032 ```powershell theme={null}

1033 $env:FORCE_HYPERLINK = "1"; claude

1034 ```

1035 

1036* Sesi SSH dan tmux mungkin menghapus urutan OSC tergantung pada konfigurasi

1037 

1038* Jika urutan escape muncul sebagai teks literal seperti `\e]8;;`, gunakan `printf '%b'` alih-alih `echo -e` untuk penanganan escape yang lebih andal

1039 

1040**Glitch tampilan dengan urutan escape**

1041 

1042* Urutan escape kompleks (warna ANSI, tautan OSC 8) dapat sesekali menyebabkan output berantakan jika tumpang tindih dengan pembaruan UI lainnya

1043* Jika Anda melihat teks yang rusak, coba sederhanakan skrip Anda ke output teks biasa

1044* Baris status multi-baris dengan kode escape lebih rentan terhadap masalah rendering daripada teks biasa satu baris

1045 

1046**Kesalahan skrip atau hang**

1047 

1048* Skrip yang keluar dengan kode non-nol atau tidak menghasilkan output menyebabkan baris status menjadi kosong

1049* Skrip lambat memblokir baris status dari pembaruan sampai selesai. Jaga skrip tetap cepat untuk menghindari output basi.

1050* Jika pembaruan baru dipicu saat skrip lambat berjalan, skrip yang sedang berlangsung dibatalkan

1051* Uji skrip Anda secara independen dengan input mock sebelum mengonfigurasinya

1052 

1053**Notifikasi berbagi baris status**

1054 

1055* Notifikasi sistem seperti kesalahan server MCP dan pembaruan otomatis ditampilkan di sisi kanan baris yang sama dengan baris status Anda. Notifikasi sementara seperti peringatan konteks-rendah juga bersiklus melalui area ini.

1056* Mengaktifkan mode verbose menambahkan penghitung token ke area ini

1057* Di terminal sempit, notifikasi ini mungkin memotong output baris status Anda

1058 

1059**Kepercayaan ruang kerja diperlukan**

1060 

1061* Perintah baris status hanya berjalan jika Anda telah menerima dialog kepercayaan ruang kerja untuk direktori saat ini. Karena `statusLine` mengeksekusi perintah shell, itu memerlukan penerimaan kepercayaan yang sama seperti hooks dan pengaturan lain yang mengeksekusi shell.

1062* Jika kepercayaan tidak diterima, Anda akan melihat notifikasi `statusline skipped · restart to fix` alih-alih output baris status Anda. Mulai ulang Claude Code dan terima prompt kepercayaan untuk mengaktifkannya.

sub-agents.md +1009 −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 subagent khusus

6 

7> Buat dan gunakan subagent AI khusus di Claude Code untuk alur kerja khusus tugas dan manajemen konteks yang lebih baik.

8 

9Subagent adalah asisten AI khusus yang menangani jenis tugas tertentu. Gunakan satu ketika tugas sampingan akan membanjiri percakapan utama Anda dengan hasil pencarian, log, atau konten file yang tidak akan Anda referensikan lagi: subagent melakukan pekerjaan itu dalam konteksnya sendiri dan hanya mengembalikan ringkasan. Tentukan subagent khusus ketika Anda terus menelurkan jenis pekerja yang sama dengan instruksi yang sama.

10 

11Setiap subagent berjalan di jendela konteksnya sendiri dengan prompt sistem khusus, akses alat tertentu, dan izin independen. Ketika Claude menemukan tugas yang sesuai dengan deskripsi subagent, Claude mendelegasikan ke subagent tersebut, yang bekerja secara independen dan mengembalikan hasil. Untuk melihat penghematan konteks dalam praktik, [visualisasi jendela konteks](/id/context-window) menjelaskan sesi di mana subagent menangani penelitian di jendela terpisahnya sendiri.

12 

13<Note>

14 Jika Anda memerlukan beberapa agen yang bekerja secara paralel dan berkomunikasi satu sama lain, lihat [tim agen](/id/agent-teams) sebagai gantinya. Subagent bekerja dalam satu sesi; tim agen mengoordinasikan di seluruh sesi terpisah.

15</Note>

16 

17Subagent membantu Anda:

18 

19* **Mempertahankan konteks** dengan menjaga eksplorasi dan implementasi di luar percakapan utama Anda

20* **Menerapkan batasan** dengan membatasi alat mana yang dapat digunakan subagent

21* **Menggunakan kembali konfigurasi** di seluruh proyek dengan subagent tingkat pengguna

22* **Mengkhususkan perilaku** dengan prompt sistem yang terfokus untuk domain tertentu

23* **Mengontrol biaya** dengan merutekan tugas ke model yang lebih cepat dan lebih murah seperti Haiku

24 

25Claude menggunakan deskripsi setiap subagent untuk memutuskan kapan mendelegasikan tugas. Ketika Anda membuat subagent, tulis deskripsi yang jelas sehingga Claude tahu kapan menggunakannya.

26 

27Claude Code mencakup beberapa subagent bawaan seperti **Explore**, **Plan**, dan **general-purpose**. Anda juga dapat membuat subagent khusus untuk menangani tugas tertentu. Halaman ini mencakup:

28 

29* [Subagent bawaan](#built-in-subagents)

30* [Cara membuat subagent Anda sendiri](#quickstart-create-your-first-subagent)

31* [Opsi konfigurasi lengkap](#configure-subagents)

32* [Pola untuk bekerja dengan subagent](#work-with-subagents)

33* [Subagent yang di-fork](#fork-the-current-conversation)

34* [Contoh subagent](#example-subagents)

35 

36## Subagent bawaan

37 

38Claude Code mencakup subagent bawaan yang Claude gunakan secara otomatis jika sesuai. Masing-masing mewarisi izin percakapan induk dengan pembatasan alat tambahan.

39 

40<Tabs>

41 <Tab title="Explore">

42 Agen cepat yang dioptimalkan hanya-baca untuk mencari dan menganalisis basis kode.

43 

44 * **Model**: Haiku (cepat, latensi rendah)

45 * **Alat**: Alat hanya-baca (akses ditolak ke alat Write dan Edit)

46 * **Tujuan**: Penemuan file, pencarian kode, eksplorasi basis kode

47 

48 Claude mendelegasikan ke Explore ketika perlu mencari atau memahami basis kode tanpa membuat perubahan. Ini menjaga hasil eksplorasi di luar konteks percakapan utama Anda.

49 

50 Saat memanggil Explore, Claude menentukan tingkat ketelitian: **quick** untuk pencarian yang ditargetkan, **medium** untuk eksplorasi seimbang, atau **very thorough** untuk analisis komprehensif.

51 </Tab>

52 

53 <Tab title="Plan">

54 Agen penelitian yang digunakan selama [plan mode](/id/common-workflows#use-plan-mode-for-safe-code-analysis) untuk mengumpulkan konteks sebelum menyajikan rencana.

55 

56 * **Model**: Mewarisi dari percakapan utama

57 * **Alat**: Alat hanya-baca (akses ditolak ke alat Write dan Edit)

58 * **Tujuan**: Penelitian basis kode untuk perencanaan

59 

60 Ketika Anda dalam plan mode dan Claude perlu memahami basis kode Anda, Claude mendelegasikan penelitian ke subagent Plan. Ini mencegah nesting tak terbatas (subagent tidak dapat menelurkan subagent lain) sambil tetap mengumpulkan konteks yang diperlukan.

61 </Tab>

62 

63 <Tab title="General-purpose">

64 Agen yang mampu untuk tugas kompleks multi-langkah yang memerlukan eksplorasi dan tindakan.

65 

66 * **Model**: Mewarisi dari percakapan utama

67 * **Alat**: Semua alat

68 * **Tujuan**: Penelitian kompleks, operasi multi-langkah, modifikasi kode

69 

70 Claude mendelegasikan ke general-purpose ketika tugas memerlukan eksplorasi dan modifikasi, penalaran kompleks untuk menafsirkan hasil, atau beberapa langkah yang saling bergantung.

71 </Tab>

72 

73 <Tab title="Other">

74 Claude Code mencakup agen pembantu tambahan untuk tugas tertentu. Ini biasanya dipanggil secara otomatis, jadi Anda tidak perlu menggunakannya secara langsung.

75 

76 | Agen | Model | Kapan Claude menggunakannya |

77 | :---------------- | :----- | :--------------------------------------------------------------------------- |

78 | statusline-setup | Sonnet | Ketika Anda menjalankan `/statusline` untuk mengonfigurasi baris status Anda |

79 | Claude Code Guide | Haiku | Ketika Anda mengajukan pertanyaan tentang fitur Claude Code |

80 </Tab>

81</Tabs>

82 

83Selain subagent bawaan ini, Anda dapat membuat subagent Anda sendiri dengan prompt khusus, pembatasan alat, mode izin, hooks, dan skills. Bagian berikut menunjukkan cara memulai dan menyesuaikan subagent.

84 

85## Quickstart: buat subagent pertama Anda

86 

87Subagent didefinisikan dalam file Markdown dengan frontmatter YAML. Anda dapat [membuatnya secara manual](#write-subagent-files) atau menggunakan perintah `/agents`.

88 

89Panduan ini memandu Anda melalui pembuatan subagent tingkat pengguna dengan perintah `/agents`. Subagent meninjau kode dan menyarankan perbaikan untuk basis kode.

90 

91<Steps>

92 <Step title="Buka antarmuka subagent">

93 Di Claude Code, jalankan:

94 

95 ```text theme={null}

96 /agents

97 ```

98 </Step>

99 

100 <Step title="Pilih lokasi">

101 Beralih ke tab **Library**, pilih **Create new agent**, kemudian pilih **Personal**. Ini menyimpan subagent ke `~/.claude/agents/` sehingga tersedia di semua proyek Anda.

102 </Step>

103 

104 <Step title="Hasilkan dengan Claude">

105 Pilih **Generate with Claude**. Ketika diminta, jelaskan subagent:

106 

107 ```text theme={null}

108 A code improvement agent that scans files and suggests improvements

109 for readability, performance, and best practices. It should explain

110 each issue, show the current code, and provide an improved version.

111 ```

112 

113 Claude menghasilkan pengenal, deskripsi, dan prompt sistem untuk Anda.

114 </Step>

115 

116 <Step title="Pilih alat">

117 Untuk reviewer hanya-baca, batalkan pilihan semuanya kecuali **Read-only tools**. Jika Anda membiarkan semua alat dipilih, subagent mewarisi semua alat yang tersedia untuk percakapan utama.

118 </Step>

119 

120 <Step title="Pilih model">

121 Pilih model mana yang digunakan subagent. Untuk agen contoh ini, pilih **Sonnet**, yang menyeimbangkan kemampuan dan kecepatan untuk menganalisis pola kode.

122 </Step>

123 

124 <Step title="Pilih warna">

125 Pilih warna latar belakang untuk subagent. Ini membantu Anda mengidentifikasi subagent mana yang berjalan di UI.

126 </Step>

127 

128 <Step title="Konfigurasi memori">

129 Pilih **User scope** untuk memberikan subagent [direktori memori persisten](#enable-persistent-memory) di `~/.claude/agent-memory/`. Subagent menggunakan ini untuk mengumpulkan wawasan di seluruh percakapan, seperti pola basis kode dan masalah berulang. Pilih **None** jika Anda tidak ingin subagent mempertahankan pembelajaran.

130 </Step>

131 

132 <Step title="Simpan dan coba">

133 Tinjau ringkasan konfigurasi. Tekan `s` atau `Enter` untuk menyimpan, atau tekan `e` untuk menyimpan dan mengedit file di editor Anda. Subagent tersedia segera. Coba:

134 

135 ```text theme={null}

136 Use the code-improver agent to suggest improvements in this project

137 ```

138 

139 Claude mendelegasikan ke subagent baru Anda, yang memindai basis kode dan mengembalikan saran perbaikan.

140 </Step>

141</Steps>

142 

143Anda sekarang memiliki subagent yang dapat Anda gunakan di proyek apa pun di mesin Anda untuk menganalisis basis kode dan menyarankan perbaikan.

144 

145Anda juga dapat membuat subagent secara manual sebagai file Markdown, mendefinisikannya melalui flag CLI, atau mendistribusikannya melalui plugins. Bagian berikut mencakup semua opsi konfigurasi.

146 

147## Konfigurasi subagent

148 

149### Gunakan perintah /agents

150 

151Perintah `/agents` membuka antarmuka bertab untuk mengelola subagent. Tab **Running** menunjukkan subagent langsung dan memungkinkan Anda membuka atau menghentikannya. Tab **Library** memungkinkan Anda:

152 

153* Melihat semua subagent yang tersedia (bawaan, pengguna, proyek, dan plugin)

154* Membuat subagent baru dengan setup terpandu atau generasi Claude

155* Mengedit konfigurasi subagent yang ada dan akses alat

156* Menghapus subagent khusus

157* Melihat subagent mana yang aktif ketika duplikat ada

158 

159Ini adalah cara yang direkomendasikan untuk membuat dan mengelola subagent. Untuk pembuatan manual atau otomasi, Anda juga dapat menambahkan file subagent secara langsung.

160 

161Untuk membuat daftar semua subagent yang dikonfigurasi dari baris perintah tanpa memulai sesi interaktif, jalankan `claude agents`. Ini menunjukkan agen yang dikelompokkan berdasarkan sumber dan menunjukkan mana yang ditimpa oleh definisi prioritas lebih tinggi.

162 

163### Pilih cakupan subagent

164 

165Subagent adalah file Markdown dengan frontmatter YAML. Simpan mereka di lokasi berbeda tergantung cakupan. Ketika beberapa subagent berbagi nama yang sama, lokasi prioritas lebih tinggi menang.

166 

167| Lokasi | Cakupan | Prioritas | Cara membuat |

168| :------------------------- | :----------------------- | :------------ | :----------------------------------------------------- |

169| Pengaturan terkelola | Seluruh organisasi | 1 (tertinggi) | Digunakan melalui [pengaturan terkelola](/id/settings) |

170| Flag CLI `--agents` | Sesi saat ini | 2 | Lewatkan JSON saat meluncurkan Claude Code |

171| `.claude/agents/` | Proyek saat ini | 3 | Interaktif atau manual |

172| `~/.claude/agents/` | Semua proyek Anda | 4 | Interaktif atau manual |

173| Direktori `agents/` plugin | Tempat plugin diaktifkan | 5 (terendah) | Diinstal dengan [plugins](/id/plugins) |

174 

175**Subagent proyek** (`.claude/agents/`) ideal untuk subagent khusus untuk basis kode. Periksa mereka ke kontrol versi sehingga tim Anda dapat menggunakannya dan meningkatkannya secara kolaboratif.

176 

177Subagent proyek ditemukan dengan berjalan naik dari direktori kerja saat ini. Direktori yang ditambahkan dengan `--add-dir` [memberikan akses file saja](/id/permissions#additional-directories-grant-file-access-not-configuration) dan tidak dipindai untuk subagent. Untuk berbagi subagent di seluruh proyek, gunakan `~/.claude/agents/` atau [plugin](/id/plugins).

178 

179**Subagent pengguna** (`~/.claude/agents/`) adalah subagent pribadi yang tersedia di semua proyek Anda.

180 

181**Subagent yang ditentukan CLI** dilewatkan sebagai JSON saat meluncurkan Claude Code. Mereka hanya ada untuk sesi itu dan tidak disimpan ke disk, menjadikannya berguna untuk pengujian cepat atau skrip otomasi. Anda dapat mendefinisikan beberapa subagent dalam satu panggilan `--agents`:

182 

183```bash theme={null}

184claude --agents '{

185 "code-reviewer": {

186 "description": "Expert code reviewer. Use proactively after code changes.",

187 "prompt": "You are a senior code reviewer. Focus on code quality, security, and best practices.",

188 "tools": ["Read", "Grep", "Glob", "Bash"],

189 "model": "sonnet"

190 },

191 "debugger": {

192 "description": "Debugging specialist for errors and test failures.",

193 "prompt": "You are an expert debugger. Analyze errors, identify root causes, and provide fixes."

194 }

195}'

196```

197 

198Flag `--agents` menerima JSON dengan [frontmatter](#supported-frontmatter-fields) yang sama bidang file-based subagent: `description`, `prompt`, `tools`, `disallowedTools`, `model`, `permissionMode`, `mcpServers`, `hooks`, `maxTurns`, `skills`, `initialPrompt`, `memory`, `effort`, `background`, `isolation`, dan `color`. Gunakan `prompt` untuk prompt sistem, setara dengan badan markdown dalam subagent berbasis file.

199 

200**Subagent terkelola** digunakan oleh administrator organisasi. Tempatkan file markdown dalam `.claude/agents/` di dalam [direktori pengaturan terkelola](/id/settings#settings-files), menggunakan format frontmatter yang sama dengan subagent proyek dan pengguna. Definisi terkelola mengambil alih subagent proyek dan pengguna dengan nama yang sama.

201 

202**Subagent plugin** berasal dari [plugins](/id/plugins) yang telah Anda instal. Mereka muncul di `/agents` bersama subagent khusus Anda. Lihat [referensi komponen plugin](/id/plugins-reference#agents) untuk detail tentang membuat subagent plugin.

203 

204<Note>

205 Untuk alasan keamanan, subagent plugin tidak mendukung bidang frontmatter `hooks`, `mcpServers`, atau `permissionMode`. Bidang-bidang ini diabaikan saat memuat agen dari plugin. Jika Anda membutuhkannya, salin file agen ke dalam `.claude/agents/` atau `~/.claude/agents/`. Anda juga dapat menambahkan aturan ke [`permissions.allow`](/id/settings#permission-settings) dalam `settings.json` atau `settings.local.json`, tetapi aturan-aturan ini berlaku untuk seluruh sesi, bukan hanya subagent plugin.

206</Note>

207 

208Definisi subagent dari salah satu cakupan ini juga tersedia untuk [tim agen](/id/agent-teams#use-subagent-definitions-for-teammates): saat menelurkan rekan kerja, Anda dapat mereferensikan jenis subagent dan rekan kerja menggunakan `tools` dan `model`-nya, dengan badan definisi ditambahkan ke prompt sistem rekan kerja sebagai instruksi tambahan. Lihat [tim agen](/id/agent-teams#use-subagent-definitions-for-teammates) untuk bidang frontmatter mana yang berlaku pada jalur itu.

209 

210### Tulis file subagent

211 

212File subagent menggunakan frontmatter YAML untuk konfigurasi, diikuti oleh prompt sistem dalam Markdown:

213 

214<Note>

215 Subagent dimuat saat awal sesi. Jika Anda membuat subagent dengan menambahkan file secara manual, restart sesi Anda atau gunakan `/agents` untuk memuatnya segera.

216</Note>

217 

218```markdown theme={null}

219---

220name: code-reviewer

221description: Reviews code for quality and best practices

222tools: Read, Glob, Grep

223model: sonnet

224---

225 

226You are a code reviewer. When invoked, analyze the code and provide

227specific, actionable feedback on quality, security, and best practices.

228```

229 

230Frontmatter mendefinisikan metadata dan konfigurasi subagent. Badan menjadi prompt sistem yang memandu perilaku subagent. Subagent menerima hanya prompt sistem ini (ditambah detail lingkungan dasar seperti direktori kerja), bukan prompt sistem Claude Code lengkap.

231 

232Subagent dimulai di direktori kerja saat ini percakapan utama. Dalam subagent, perintah `cd` tidak bertahan antara panggilan alat Bash atau PowerShell dan tidak mempengaruhi direktori kerja percakapan utama. Untuk memberikan subagent salinan repositori yang terisolasi sebagai gantinya, atur [`isolation: worktree`](#supported-frontmatter-fields).

233 

234#### Bidang frontmatter yang didukung

235 

236Bidang berikut dapat digunakan dalam frontmatter YAML. Hanya `name` dan `description` yang diperlukan.

237 

238| Bidang | Diperlukan | Deskripsi |

239| :---------------- | :--------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

240| `name` | Ya | Pengenal unik menggunakan huruf kecil dan tanda hubung |

241| `description` | Ya | Kapan Claude harus mendelegasikan ke subagent ini |

242| `tools` | Tidak | [Alat](#available-tools) yang dapat digunakan subagent. Mewarisi semua alat jika dihilangkan |

243| `disallowedTools` | Tidak | Alat untuk ditolak, dihapus dari daftar yang diwarisi atau ditentukan |

244| `model` | Tidak | [Model](#choose-a-model) untuk digunakan: `sonnet`, `opus`, `haiku`, ID model lengkap (misalnya, `claude-opus-4-7`), atau `inherit`. Default ke `inherit` |

245| `permissionMode` | Tidak | [Mode izin](#permission-modes): `default`, `acceptEdits`, `auto`, `dontAsk`, `bypassPermissions`, atau `plan`. Diabaikan untuk [subagent plugin](#choose-the-subagent-scope) |

246| `maxTurns` | Tidak | Jumlah maksimum putaran agentic sebelum subagent berhenti |

247| `skills` | Tidak | [Skills](/id/skills) untuk dimuat ke dalam konteks subagent saat startup. Konten skill lengkap disuntikkan, bukan hanya tersedia untuk invokasi. Subagent tidak mewarisi skills dari percakapan induk |

248| `mcpServers` | Tidak | [MCP servers](/id/mcp) tersedia untuk subagent ini. Setiap entri adalah nama server yang mereferensikan server yang sudah dikonfigurasi (misalnya, `"slack"`) atau definisi inline dengan nama server sebagai kunci dan [konfigurasi MCP server](/id/mcp#installing-mcp-servers) lengkap sebagai nilai. Diabaikan untuk [subagent plugin](#choose-the-subagent-scope) |

249| `hooks` | Tidak | [Lifecycle hooks](#define-hooks-for-subagents) yang dibatasi pada subagent ini. Diabaikan untuk [subagent plugin](#choose-the-subagent-scope) |

250| `memory` | Tidak | [Cakupan memori persisten](#enable-persistent-memory): `user`, `project`, atau `local`. Memungkinkan pembelajaran lintas sesi |

251| `background` | Tidak | Atur ke `true` untuk selalu menjalankan subagent ini sebagai [background task](#run-subagents-in-foreground-or-background). Default: `false` |

252| `effort` | Tidak | Tingkat usaha ketika subagent ini aktif. Menimpa tingkat usaha sesi. Default: mewarisi dari sesi. Opsi: `low`, `medium`, `high`, `xhigh`, `max`; tingkat yang tersedia tergantung pada model |

253| `isolation` | Tidak | Atur ke `worktree` untuk menjalankan subagent dalam [git worktree](/id/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees) sementara, memberikannya salinan repositori yang terisolasi. Worktree secara otomatis dibersihkan jika subagent tidak membuat perubahan |

254| `color` | Tidak | Warna tampilan untuk subagent dalam daftar tugas dan transkrip. Menerima `red`, `blue`, `green`, `yellow`, `purple`, `orange`, `pink`, atau `cyan` |

255| `initialPrompt` | Tidak | Auto-submitted sebagai putaran pengguna pertama ketika agen ini berjalan sebagai agen sesi utama (melalui `--agent` atau pengaturan `agent`). [Commands](/id/commands) dan [skills](/id/skills) diproses. Ditambahkan di depan prompt yang disediakan pengguna apa pun |

256 

257### Pilih model

258 

259Bidang `model` mengontrol [model AI](/id/model-config) mana yang digunakan subagent:

260 

261* **Alias model**: Gunakan salah satu alias yang tersedia: `sonnet`, `opus`, atau `haiku`

262* **ID model lengkap**: Gunakan ID model lengkap seperti `claude-opus-4-7` atau `claude-sonnet-4-6`. Menerima nilai yang sama dengan flag `--model`

263* **inherit**: Gunakan model yang sama dengan percakapan utama

264* **Dihilangkan**: Jika tidak ditentukan, default ke `inherit` (menggunakan model yang sama dengan percakapan utama)

265 

266Ketika Claude memanggil subagent, Claude juga dapat melewatkan parameter `model` untuk invokasi spesifik itu. Claude Code menyelesaikan model subagent dalam urutan ini:

267 

2681. Variabel lingkungan [`CLAUDE_CODE_SUBAGENT_MODEL`](/id/model-config#environment-variables), jika diatur

2692. Parameter `model` per-invokasi

2703. Frontmatter `model` definisi subagent

2714. Model percakapan utama

272 

273### Kontrol kemampuan subagent

274 

275Anda dapat mengontrol apa yang dapat dilakukan subagent melalui akses alat, mode izin, dan aturan bersyarat.

276 

277#### Alat yang tersedia

278 

279Subagent dapat menggunakan salah satu [alat internal](/id/tools-reference) Claude Code. Secara default, subagent mewarisi semua alat dari percakapan utama, termasuk alat MCP.

280 

281Untuk membatasi alat, gunakan bidang `tools` (allowlist) atau bidang `disallowedTools` (denylist). Contoh ini menggunakan `tools` untuk secara eksklusif mengizinkan Read, Grep, Glob, dan Bash. Subagent tidak dapat mengedit file, menulis file, atau menggunakan alat MCP apa pun:

282 

283```yaml theme={null}

284---

285name: safe-researcher

286description: Research agent with restricted capabilities

287tools: Read, Grep, Glob, Bash

288---

289```

290 

291Contoh ini menggunakan `disallowedTools` untuk mewarisi setiap alat dari percakapan utama kecuali Write dan Edit. Subagent menyimpan Bash, alat MCP, dan semuanya yang lain:

292 

293```yaml theme={null}

294---

295name: no-writes

296description: Inherits every tool except file writes

297disallowedTools: Write, Edit

298---

299```

300 

301Jika keduanya diatur, `disallowedTools` diterapkan terlebih dahulu, kemudian `tools` diselesaikan terhadap kumpulan yang tersisa. Alat yang tercantum di keduanya dihapus.

302 

303#### Batasi subagent mana yang dapat dihasilkan

304 

305Ketika agen berjalan sebagai thread utama dengan `claude --agent`, agen dapat menelurkan subagent menggunakan alat Agent. Untuk membatasi jenis subagent mana yang dapat dihasilkan, gunakan sintaks `Agent(agent_type)` dalam bidang `tools`.

306 

307<Note>Dalam versi 2.1.63, alat Task diganti nama menjadi Agent. Referensi `Task(...)` yang ada dalam pengaturan dan definisi agen masih berfungsi sebagai alias.</Note>

308 

309```yaml theme={null}

310---

311name: coordinator

312description: Coordinates work across specialized agents

313tools: Agent(worker, researcher), Read, Bash

314---

315```

316 

317Ini adalah allowlist: hanya subagent `worker` dan `researcher` yang dapat dihasilkan. Jika agen mencoba menelurkan jenis lain, permintaan gagal dan agen hanya melihat jenis yang diizinkan dalam promptnya. Untuk memblokir agen tertentu sambil mengizinkan semua yang lain, gunakan [`permissions.deny`](#disable-specific-subagents) sebagai gantinya.

318 

319Untuk mengizinkan penelur subagent apa pun tanpa pembatasan, gunakan `Agent` tanpa tanda kurung:

320 

321```yaml theme={null}

322tools: Agent, Read, Bash

323```

324 

325Jika `Agent` dihilangkan dari daftar `tools` sepenuhnya, agen tidak dapat menelurkan subagent apa pun. Pembatasan ini hanya berlaku untuk agen yang berjalan sebagai thread utama dengan `claude --agent`. Subagent tidak dapat menelurkan subagent lain, jadi `Agent(agent_type)` tidak berpengaruh dalam definisi subagent.

326 

327#### Cakupan MCP servers ke subagent

328 

329Gunakan bidang `mcpServers` untuk memberikan subagent akses ke [MCP](/id/mcp) servers yang tidak tersedia dalam percakapan utama. Server inline yang ditentukan di sini terhubung saat subagent dimulai dan terputus saat selesai. Referensi string berbagi koneksi sesi induk.

330 

331<Note>

332 Bidang `mcpServers` berlaku dalam kedua konteks di mana file agen dapat berjalan:

333 

334 * Sebagai subagent, dihasilkan melalui alat Agent atau @-mention

335 * Sebagai sesi utama, diluncurkan dengan [`--agent`](#invoke-subagents-explicitly) atau pengaturan `agent`

336 

337 Ketika agen adalah sesi utama, definisi server inline terhubung saat startup bersama server dari [`.mcp.json`](/id/mcp) dan file pengaturan.

338</Note>

339 

340Setiap entri dalam daftar adalah definisi server inline atau string yang mereferensikan MCP server yang sudah dikonfigurasi dalam sesi Anda:

341 

342```yaml theme={null}

343---

344name: browser-tester

345description: Tests features in a real browser using Playwright

346mcpServers:

347 # Inline definition: scoped to this subagent only

348 - playwright:

349 type: stdio

350 command: npx

351 args: ["-y", "@playwright/mcp@latest"]

352 # Reference by name: reuses an already-configured server

353 - github

354---

355 

356Use the Playwright tools to navigate, screenshot, and interact with pages.

357```

358 

359Definisi inline menggunakan skema yang sama dengan entri server `.mcp.json` (`stdio`, `http`, `sse`, `ws`), dikunci dengan nama server.

360 

361Untuk menjaga MCP server di luar percakapan utama sepenuhnya dan menghindari deskripsi alatnya mengonsumsi konteks di sana, tentukan secara inline di sini daripada di `.mcp.json`. Subagent mendapatkan alat; percakapan induk tidak.

362 

363#### Mode izin

364 

365Bidang `permissionMode` mengontrol bagaimana subagent menangani prompt izin. Subagent mewarisi konteks izin dari percakapan utama dan dapat menimpa mode, kecuali ketika mode induk mengambil alih seperti yang dijelaskan di bawah.

366 

367| Mode | Perilaku |

368| :------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------- |

369| `default` | Pemeriksaan izin standar dengan prompt |

370| `acceptEdits` | Auto-terima edit file dan perintah sistem file umum untuk jalur di direktori kerja atau `additionalDirectories` |

371| `auto` | [Auto mode](/id/permission-modes#eliminate-prompts-with-auto-mode): pengklasifikasi latar belakang meninjau perintah dan penulisan direktori yang dilindungi |

372| `dontAsk` | Auto-tolak prompt izin (alat yang secara eksplisit diizinkan masih berfungsi) |

373| `bypassPermissions` | Lewati prompt izin |

374| `plan` | Plan mode (eksplorasi hanya-baca) |

375 

376<Warning>

377 Gunakan `bypassPermissions` dengan hati-hati. Ini melewati prompt izin, memungkinkan subagent untuk menjalankan operasi tanpa persetujuan, termasuk penulisan ke `.git`, `.claude`, `.vscode`, `.idea`, dan `.husky`. Penghapusan direktori root dan home seperti `rm -rf /` masih meminta sebagai circuit breaker. Lihat [permission modes](/id/permission-modes#skip-all-checks-with-bypasspermissions-mode) untuk detail.

378</Warning>

379 

380Jika induk menggunakan `bypassPermissions` atau `acceptEdits`, ini mengambil alih dan tidak dapat ditimpa. Jika induk menggunakan [auto mode](/id/permission-modes#eliminate-prompts-with-auto-mode), subagent mewarisi auto mode dan `permissionMode` apa pun dalam frontmatternya diabaikan: pengklasifikasi mengevaluasi panggilan alat subagent dengan aturan blok dan izin yang sama dengan sesi induk.

381 

382#### Preload skills ke dalam subagent

383 

384Gunakan bidang `skills` untuk menyuntikkan konten skill ke dalam konteks subagent saat startup. Ini memberikan subagent pengetahuan domain tanpa memerlukan penemuan dan pemuatan skills selama eksekusi.

385 

386```yaml theme={null}

387---

388name: api-developer

389description: Implement API endpoints following team conventions

390skills:

391 - api-conventions

392 - error-handling-patterns

393---

394 

395Implement API endpoints. Follow the conventions and patterns from the preloaded skills.

396```

397 

398Konten lengkap setiap skill disuntikkan ke dalam konteks subagent, bukan hanya tersedia untuk invokasi. Subagent tidak mewarisi skills dari percakapan induk; Anda harus mencantumkannya secara eksplisit.

399 

400Anda tidak dapat preload skills yang menetapkan [`disable-model-invocation: true`](/id/skills#control-who-invokes-a-skill), karena preloading menarik dari set skills yang sama yang dapat diinvokasi Claude. Jika skill yang tercantum hilang atau dinonaktifkan, Claude Code melewatinya dan mencatat peringatan ke debug log.

401 

402<Note>

403 Ini adalah kebalikan dari [menjalankan skill dalam subagent](/id/skills#run-skills-in-a-subagent). Dengan `skills` dalam subagent, subagent mengontrol prompt sistem dan memuat konten skill. Dengan `context: fork` dalam skill, konten skill disuntikkan ke dalam agen yang Anda tentukan. Keduanya menggunakan sistem yang mendasar yang sama.

404</Note>

405 

406#### Aktifkan memori persisten

407 

408Bidang `memory` memberikan subagent direktori persisten yang bertahan di seluruh percakapan. Subagent menggunakan direktori ini untuk membangun pengetahuan seiring waktu, seperti pola basis kode, wawasan debugging, dan keputusan arsitektur.

409 

410```yaml theme={null}

411---

412name: code-reviewer

413description: Reviews code for quality and best practices

414memory: user

415---

416 

417You are a code reviewer. As you review code, update your agent memory with

418patterns, conventions, and recurring issues you discover.

419```

420 

421Pilih cakupan berdasarkan seberapa luas memori harus diterapkan:

422 

423| Cakupan | Lokasi | Gunakan ketika |

424| :-------- | :-------------------------------------------- | :--------------------------------------------------------------------------------------- |

425| `user` | `~/.claude/agent-memory/<name-of-agent>/` | subagent harus mengingat pembelajaran di seluruh semua proyek |

426| `project` | `.claude/agent-memory/<name-of-agent>/` | pengetahuan subagent spesifik proyek dan dapat dibagikan melalui kontrol versi |

427| `local` | `.claude/agent-memory-local/<name-of-agent>/` | pengetahuan subagent spesifik proyek tetapi tidak boleh diperiksa ke dalam kontrol versi |

428 

429Ketika memori diaktifkan:

430 

431* Prompt sistem subagent mencakup instruksi untuk membaca dan menulis ke direktori memori.

432* Prompt sistem subagent juga mencakup 200 baris pertama atau 25KB dari `MEMORY.md` dalam direktori memori, mana pun yang lebih kecil, dengan instruksi untuk mengkurasi `MEMORY.md` jika melebihi batas itu.

433* Alat Read, Write, dan Edit secara otomatis diaktifkan sehingga subagent dapat mengelola file memorinya.

434 

435##### Tips memori persisten

436 

437* `project` adalah cakupan default yang direkomendasikan. Ini membuat pengetahuan subagent dapat dibagikan melalui kontrol versi. Gunakan `user` ketika pengetahuan subagent berlaku secara luas di seluruh proyek, atau `local` ketika pengetahuan tidak boleh diperiksa ke dalam kontrol versi.

438* Minta subagent untuk berkonsultasi dengan memorinya sebelum memulai pekerjaan: "Review PR ini, dan periksa memori Anda untuk pola yang telah Anda lihat sebelumnya."

439* Minta subagent untuk memperbarui memorinya setelah menyelesaikan tugas: "Sekarang setelah Anda selesai, simpan apa yang Anda pelajari ke memori Anda." Seiring waktu, ini membangun basis pengetahuan yang membuat subagent lebih efektif.

440* Sertakan instruksi memori langsung dalam file markdown subagent sehingga secara proaktif mempertahankan basis pengetahuannya sendiri:

441 

442 ```markdown theme={null}

443 Update your agent memory as you discover codepaths, patterns, library

444 locations, and key architectural decisions. This builds up institutional

445 knowledge across conversations. Write concise notes about what you found

446 and where.

447 ```

448 

449#### Aturan bersyarat dengan hooks

450 

451Untuk kontrol yang lebih dinamis atas penggunaan alat, gunakan hooks `PreToolUse` untuk memvalidasi operasi sebelum dijalankan. Ini berguna ketika Anda perlu mengizinkan beberapa operasi alat sambil memblokir yang lain.

452 

453Contoh ini membuat subagent yang hanya mengizinkan kueri database hanya-baca. Hook `PreToolUse` menjalankan skrip yang ditentukan dalam `command` sebelum setiap perintah Bash dijalankan:

454 

455```yaml theme={null}

456---

457name: db-reader

458description: Execute read-only database queries

459tools: Bash

460hooks:

461 PreToolUse:

462 - matcher: "Bash"

463 hooks:

464 - type: command

465 command: "./scripts/validate-readonly-query.sh"

466---

467```

468 

469Claude Code [melewatkan input hook sebagai JSON](/id/hooks#pretooluse-input) melalui stdin ke perintah hook. Skrip validasi membaca JSON ini, mengekstrak perintah Bash, dan [keluar dengan kode 2](/id/hooks#exit-code-2-behavior-per-event) untuk memblokir operasi penulisan:

470 

471```bash theme={null}

472#!/bin/bash

473# ./scripts/validate-readonly-query.sh

474 

475INPUT=$(cat)

476COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command // empty')

477 

478# Block SQL write operations (case-insensitive)

479if echo "$COMMAND" | grep -iE '\b(INSERT|UPDATE|DELETE|DROP|CREATE|ALTER|TRUNCATE)\b' > /dev/null; then

480 echo "Blocked: Only SELECT queries are allowed" >&2

481 exit 2

482fi

483 

484exit 0

485```

486 

487Lihat [Hook input](/id/hooks#pretooluse-input) untuk skema input lengkap dan [exit codes](/id/hooks#exit-code-output) untuk bagaimana kode keluar mempengaruhi perilaku.

488 

489#### Nonaktifkan subagent tertentu

490 

491Anda dapat mencegah Claude menggunakan subagent tertentu dengan menambahkannya ke array `deny` dalam [pengaturan](/id/settings#permission-settings) Anda. Gunakan format `Agent(subagent-name)` di mana `subagent-name` cocok dengan bidang nama subagent.

492 

493```json theme={null}

494{

495 "permissions": {

496 "deny": ["Agent(Explore)", "Agent(my-custom-agent)"]

497 }

498}

499```

500 

501Ini berfungsi untuk subagent bawaan dan khusus. Anda juga dapat menggunakan flag CLI `--disallowedTools`:

502 

503```bash theme={null}

504claude --disallowedTools "Agent(Explore)"

505```

506 

507Lihat [dokumentasi Permissions](/id/permissions#tool-specific-permission-rules) untuk detail lebih lanjut tentang aturan izin.

508 

509### Tentukan hooks untuk subagent

510 

511Subagent dapat mendefinisikan [hooks](/id/hooks) yang berjalan selama siklus hidup subagent. Ada dua cara untuk mengonfigurasi hooks:

512 

5131. **Dalam frontmatter subagent**: Tentukan hooks yang hanya berjalan saat subagent tertentu itu aktif

5142. **Dalam `settings.json`**: Tentukan hooks yang berjalan dalam sesi utama ketika subagent dimulai atau berhenti

515 

516#### Hooks dalam frontmatter subagent

517 

518Tentukan hooks langsung dalam file markdown subagent. Hooks ini hanya berjalan saat subagent spesifik itu aktif dan dibersihkan saat selesai.

519 

520<Note>

521 Frontmatter hooks terjadi ketika agen dihasilkan sebagai subagent melalui alat Agent atau @-mention, dan ketika agen berjalan sebagai sesi utama melalui [`--agent`](#invoke-subagents-explicitly) atau pengaturan `agent`. Dalam kasus sesi-utama mereka berjalan bersama hook apa pun yang ditentukan dalam [`settings.json`](/id/hooks).

522</Note>

523 

524Semua [hook events](/id/hooks#hook-events) didukung. Peristiwa paling umum untuk subagent adalah:

525 

526| Peristiwa | Input Matcher | Kapan itu terjadi |

527| :------------ | :------------ | :------------------------------------------------------------------ |

528| `PreToolUse` | Nama alat | Sebelum subagent menggunakan alat |

529| `PostToolUse` | Nama alat | Setelah subagent menggunakan alat |

530| `Stop` | (tidak ada) | Ketika subagent selesai (dikonversi ke `SubagentStop` saat runtime) |

531 

532Contoh ini memvalidasi perintah Bash dengan hook `PreToolUse` dan menjalankan linter setelah edit file dengan `PostToolUse`:

533 

534```yaml theme={null}

535---

536name: code-reviewer

537description: Review code changes with automatic linting

538hooks:

539 PreToolUse:

540 - matcher: "Bash"

541 hooks:

542 - type: command

543 command: "./scripts/validate-command.sh $TOOL_INPUT"

544 PostToolUse:

545 - matcher: "Edit|Write"

546 hooks:

547 - type: command

548 command: "./scripts/run-linter.sh"

549---

550```

551 

552Hooks `Stop` dalam frontmatter secara otomatis dikonversi ke peristiwa `SubagentStop`.

553 

554#### Hooks tingkat proyek untuk peristiwa subagent

555 

556Konfigurasi hooks dalam `settings.json` yang merespons peristiwa siklus hidup subagent dalam sesi utama.

557 

558| Peristiwa | Input Matcher | Kapan itu terjadi |

559| :-------------- | :-------------- | :------------------------------- |

560| `SubagentStart` | Nama jenis agen | Ketika subagent mulai dijalankan |

561| `SubagentStop` | Nama jenis agen | Ketika subagent selesai |

562 

563Kedua peristiwa mendukung matcher untuk menargetkan jenis agen tertentu berdasarkan nama. Contoh ini menjalankan skrip setup hanya ketika subagent `db-agent` dimulai, dan skrip cleanup ketika subagent apa pun berhenti:

564 

565```json theme={null}

566{

567 "hooks": {

568 "SubagentStart": [

569 {

570 "matcher": "db-agent",

571 "hooks": [

572 { "type": "command", "command": "./scripts/setup-db-connection.sh" }

573 ]

574 }

575 ],

576 "SubagentStop": [

577 {

578 "hooks": [

579 { "type": "command", "command": "./scripts/cleanup-db-connection.sh" }

580 ]

581 }

582 ]

583 }

584}

585```

586 

587Lihat [Hooks](/id/hooks) untuk format konfigurasi hook lengkap.

588 

589## Bekerja dengan subagent

590 

591### Pahami delegasi otomatis

592 

593Claude secara otomatis mendelegasikan tugas berdasarkan deskripsi tugas dalam permintaan Anda, bidang `description` dalam konfigurasi subagent, dan konteks saat ini. Untuk mendorong delegasi proaktif, sertakan frasa seperti "use proactively" dalam bidang deskripsi subagent Anda.

594 

595### Panggil subagent secara eksplisit

596 

597Ketika delegasi otomatis tidak cukup, Anda dapat meminta subagent sendiri. Tiga pola meningkat dari saran satu kali ke default sesi-lebar:

598 

599* **Bahasa alami**: sebutkan subagent dalam prompt Anda; Claude memutuskan apakah akan mendelegasikan

600* **@-mention**: menjamin subagent berjalan untuk satu tugas

601* **Sesi-lebar**: seluruh sesi menggunakan prompt sistem subagent, pembatasan alat, dan model melalui flag `--agent` atau pengaturan `agent`

602 

603Untuk bahasa alami, tidak ada sintaks khusus. Sebutkan subagent dan Claude biasanya mendelegasikan:

604 

605```text theme={null}

606Use the test-runner subagent to fix failing tests

607Have the code-reviewer subagent look at my recent changes

608```

609 

610**@-mention subagent.** Ketik `@` dan pilih subagent dari typeahead, dengan cara yang sama Anda @-mention file. Ini memastikan subagent tertentu berjalan daripada meninggalkan pilihan kepada Claude:

611 

612```text theme={null}

613@"code-reviewer (agent)" look at the auth changes

614```

615 

616Pesan lengkap Anda masih pergi ke Claude, yang menulis prompt tugas subagent berdasarkan apa yang Anda minta. @-mention mengontrol subagent mana yang Claude panggil, bukan prompt apa yang diterima.

617 

618Subagent yang disediakan oleh [plugin](/id/plugins) yang diaktifkan muncul di typeahead sebagai `<plugin-name>:<agent-name>`. Subagent background bernama yang saat ini berjalan dalam sesi juga muncul di typeahead, menunjukkan status mereka di samping nama. Anda juga dapat mengetik mention secara manual tanpa menggunakan picker: `@agent-<name>` untuk subagent lokal, atau `@agent-<plugin-name>:<agent-name>` untuk subagent plugin.

619 

620**Jalankan seluruh sesi sebagai subagent.** Lewatkan [`--agent <name>`](/id/cli-reference) untuk memulai sesi di mana thread utama itu sendiri mengambil prompt sistem subagent, pembatasan alat, dan model:

621 

622```bash theme={null}

623claude --agent code-reviewer

624```

625 

626Prompt sistem subagent menggantikan prompt sistem Claude Code default sepenuhnya, dengan cara yang sama [`--system-prompt`](/id/cli-reference) melakukannya. File `CLAUDE.md` dan memori proyek masih dimuat melalui aliran pesan normal. Nama agen muncul sebagai `@<name>` di header startup sehingga Anda dapat mengonfirmasi itu aktif.

627 

628Ini berfungsi dengan subagent bawaan dan khusus, dan pilihan bertahan ketika Anda melanjutkan sesi.

629 

630Untuk subagent yang disediakan plugin, lewatkan nama yang dibatasi: `claude --agent <plugin-name>:<agent-name>`.

631 

632Untuk menjadikannya default untuk setiap sesi dalam proyek, atur `agent` dalam `.claude/settings.json`:

633 

634```json theme={null}

635{

636 "agent": "code-reviewer"

637}

638```

639 

640Flag CLI menimpa pengaturan jika keduanya ada.

641 

642### Jalankan subagent di foreground atau background

643 

644Subagent dapat berjalan di foreground (blocking) atau background (concurrent):

645 

646* **Subagent foreground** memblokir percakapan utama sampai selesai. Prompt izin dan pertanyaan klarifikasi (seperti [`AskUserQuestion`](/id/tools-reference)) dilewatkan kepada Anda.

647* **Subagent background** berjalan secara bersamaan sementara Anda terus bekerja. Sebelum diluncurkan, Claude Code meminta izin alat apa pun yang akan dibutuhkan subagent, memastikan ia memiliki persetujuan yang diperlukan di muka. Setelah berjalan, subagent mewarisi izin ini dan auto-menolak apa pun yang tidak pra-disetujui. Jika subagent background perlu mengajukan pertanyaan klarifikasi, panggilan alat itu gagal tetapi subagent terus.

648 

649Jika subagent background gagal karena izin yang hilang, Anda dapat memulai subagent foreground baru dengan tugas yang sama untuk mencoba lagi dengan prompt interaktif.

650 

651Claude memutuskan apakah akan menjalankan subagent di foreground atau background berdasarkan tugas. Anda juga dapat:

652 

653* Minta Claude untuk "run this in the background"

654* Tekan **Ctrl+B** untuk menempatkan tugas yang sedang berjalan di background

655 

656Untuk menonaktifkan semua fungsionalitas background task, atur variabel lingkungan `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` ke `1`. Lihat [Environment variables](/id/env-vars).

657 

658Ketika [fork mode](#fork-the-current-conversation) diaktifkan, setiap spawn subagent berjalan di background terlepas dari bidang `background`. Fork masih menampilkan prompt izin di terminal Anda saat terjadi daripada pra-persetujuan; subagent bernama mengikuti alur pra-persetujuan di atas.

659 

660### Pola umum

661 

662#### Isolasi operasi volume tinggi

663 

664Salah satu penggunaan paling efektif untuk subagent adalah mengisolasi operasi yang menghasilkan jumlah output besar. Menjalankan tes, mengambil dokumentasi, atau memproses file log dapat mengonsumsi konteks yang signifikan. Dengan mendelegasikan ini ke subagent, output verbose tetap dalam konteks subagent sementara hanya ringkasan relevan yang kembali ke percakapan utama Anda.

665 

666```text theme={null}

667Use a subagent to run the test suite and report only the failing tests with their error messages

668```

669 

670#### Jalankan penelitian paralel

671 

672Untuk investigasi independen, hasilkan beberapa subagent untuk bekerja secara bersamaan:

673 

674```text theme={null}

675Research the authentication, database, and API modules in parallel using separate subagents

676```

677 

678Setiap subagent mengeksplorasi areanya secara independen, kemudian Claude mensintesis temuan. Ini berfungsi terbaik ketika jalur penelitian tidak saling bergantung.

679 

680<Warning>

681 Ketika subagent selesai, hasil mereka kembali ke percakapan utama Anda. Menjalankan banyak subagent yang masing-masing mengembalikan hasil terperinci dapat mengonsumsi konteks yang signifikan.

682</Warning>

683 

684Untuk tugas yang memerlukan paralelisme berkelanjutan atau melebihi jendela konteks Anda, [tim agen](/id/agent-teams) memberikan setiap pekerja konteksnya sendiri yang independen.

685 

686#### Rantai subagent

687 

688Untuk alur kerja multi-langkah, minta Claude untuk menggunakan subagent secara berurutan. Setiap subagent menyelesaikan tugasnya dan mengembalikan hasil ke Claude, yang kemudian melewatkan konteks relevan ke subagent berikutnya.

689 

690```text theme={null}

691Use the code-reviewer subagent to find performance issues, then use the optimizer subagent to fix them

692```

693 

694### Pilih antara subagent dan percakapan utama

695 

696Gunakan **percakapan utama** ketika:

697 

698* Tugas memerlukan bolak-balik yang sering atau penyempurnaan iteratif

699* Beberapa fase berbagi konteks yang signifikan (perencanaan → implementasi → pengujian)

700* Anda membuat perubahan cepat dan tertarget

701* Latensi penting. Subagent dimulai segar dan mungkin memerlukan waktu untuk mengumpulkan konteks

702 

703Gunakan **subagent** ketika:

704 

705* Tugas menghasilkan output verbose yang Anda tidak butuhkan dalam konteks utama Anda

706* Anda ingin menerapkan pembatasan alat atau izin tertentu

707* Pekerjaan mandiri dan dapat mengembalikan ringkasan

708 

709Pertimbangkan [Skills](/id/skills) sebagai gantinya ketika Anda menginginkan prompt atau alur kerja yang dapat digunakan kembali yang berjalan dalam konteks percakapan utama daripada konteks subagent yang terisolasi.

710 

711Untuk pertanyaan cepat tentang sesuatu yang sudah ada dalam percakapan Anda, gunakan [`/btw`](/id/interactive-mode#side-questions-with-%2Fbtw) sebagai gantinya dari subagent. Ini melihat konteks penuh Anda tetapi tidak memiliki akses alat, dan jawabannya dibuang daripada ditambahkan ke riwayat.

712 

713<Note>

714 Subagent tidak dapat menelurkan subagent lain. Jika alur kerja Anda memerlukan delegasi bersarang, gunakan [Skills](/id/skills) atau [rantai subagent](#chain-subagents) dari percakapan utama.

715</Note>

716 

717### Kelola konteks subagent

718 

719#### Lanjutkan subagent

720 

721Setiap invokasi subagent membuat instance baru dengan konteks segar. Untuk melanjutkan pekerjaan subagent yang ada daripada memulai dari awal, minta Claude untuk melanjutkannya.

722 

723Subagent yang dilanjutkan mempertahankan riwayat percakapan lengkap mereka, termasuk semua panggilan alat sebelumnya, hasil, dan penalaran. Subagent melanjutkan tepat di mana ia berhenti daripada memulai segar.

724 

725Ketika subagent selesai, Claude menerima ID agennya. Claude menggunakan alat `SendMessage` dengan ID agen sebagai bidang `to` untuk melanjutkannya. Alat `SendMessage` hanya tersedia ketika [tim agen](/id/agent-teams) diaktifkan melalui `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1`.

726 

727Untuk melanjutkan subagent, minta Claude untuk melanjutkan pekerjaan sebelumnya:

728 

729```text theme={null}

730Use the code-reviewer subagent to review the authentication module

731[Agent completes]

732 

733Continue that code review and now analyze the authorization logic

734[Claude resumes the subagent with full context from previous conversation]

735```

736 

737Anda juga dapat meminta Claude untuk ID agen jika Anda ingin mereferensikannya secara eksplisit, atau temukan ID dalam file transkrip di `~/.claude/projects/{project}/{sessionId}/subagents/`. Setiap transkrip disimpan sebagai `agent-{agentId}.jsonl`.

738 

739Transkrip subagent bertahan secara independen dari percakapan utama:

740 

741* **Pemadatan percakapan utama**: Ketika percakapan utama dipadatkan, transkrip subagent tidak terpengaruh. Mereka disimpan dalam file terpisah.

742* **Persistensi sesi**: Transkrip subagent bertahan dalam sesi mereka. Anda dapat [melanjutkan subagent](#resume-subagents) setelah memulai ulang Claude Code dengan melanjutkan sesi yang sama.

743* **Pembersihan otomatis**: Transkrip dibersihkan berdasarkan pengaturan `cleanupPeriodDays` (default: 30 hari).

744 

745#### Auto-compaction

746 

747Subagent mendukung pemadatan otomatis menggunakan logika yang sama dengan percakapan utama. Secara default, auto-compaction dipicu pada kapasitas sekitar 95%. Untuk memicu pemadatan lebih awal, atur `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` ke persentase yang lebih rendah (misalnya, `50`). Lihat [environment variables](/id/env-vars) untuk detail.

748 

749Peristiwa pemadatan dicatat dalam file transkrip subagent:

750 

751```json theme={null}

752{

753 "type": "system",

754 "subtype": "compact_boundary",

755 "compactMetadata": {

756 "trigger": "auto",

757 "preTokens": 167189

758 }

759}

760```

761 

762Nilai `preTokens` menunjukkan berapa banyak token yang digunakan sebelum pemadatan terjadi.

763 

764## Fork percakapan saat ini

765 

766<Note>

767 Subagent yang di-fork bersifat eksperimental dan memerlukan Claude Code v2.1.117 atau lebih baru. Perilaku dan konfigurasi mungkin berubah di rilis mendatang. Aktifkan mereka dengan menetapkan variabel lingkungan [`CLAUDE_CODE_FORK_SUBAGENT`](/id/env-vars) ke `1`. Variabel ini dihormati dalam mode interaktif dan melalui SDK atau `claude -p`.

768</Note>

769 

770Fork adalah subagent yang mewarisi seluruh percakapan sejauh ini daripada memulai segar. Ini menghilangkan isolasi input yang sebaliknya disediakan subagent: fork melihat prompt sistem yang sama, alat, model, dan riwayat pesan sebagai sesi utama, sehingga Anda dapat menyerahkan tugas sampingan tanpa menjelaskan situasinya lagi. Panggilan alat fork sendiri masih tetap keluar dari percakapan Anda dan hanya hasil akhirnya yang kembali, sehingga jendela konteks utama Anda tetap bersih. Gunakan fork ketika subagent bernama memerlukan terlalu banyak latar belakang untuk berguna, atau ketika Anda ingin mencoba beberapa pendekatan secara paralel dari titik awal yang sama.

771 

772Mengaktifkan fork mode mengubah Claude Code dalam tiga cara:

773 

774* Claude menelurkan fork setiap kali Claude akan menggunakan subagent [general-purpose](#built-in-subagents). Subagent bernama seperti Explore masih menelurkan seperti sebelumnya.

775* Setiap spawn subagent berjalan di [background](#run-subagents-in-foreground-or-background), apakah itu fork atau subagent bernama. Atur `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` ke `1` untuk menjaga spawn tetap sinkron.

776* Perintah `/fork` menelurkan fork daripada bertindak sebagai alias untuk [`/branch`](/id/commands).

777 

778Anda dapat memulai fork sendiri dengan `/fork` diikuti oleh direktif. Claude Code memberi nama fork dari kata-kata pertama direktif. Contoh berikut mem-fork percakapan untuk draft kasus uji sementara Anda melanjutkan dengan implementasi dalam sesi utama:

779 

780```text theme={null}

781/fork draft unit tests for the parser changes so far

782```

783 

784Fork muncul di panel di bawah prompt Anda dan berjalan di background sementara Anda terus bekerja. Ketika selesai, hasilnya tiba sebagai pesan dalam percakapan utama Anda. Bagian berikutnya mencakup kontrol panel untuk menonton dan mengarahkan fork saat berjalan.

785 

786### Amati dan arahkan fork yang sedang berjalan

787 

788Fork yang sedang berjalan muncul di panel di bawah input prompt, dengan satu baris untuk sesi utama dan satu untuk setiap fork. Gunakan kunci ini untuk berinteraksi dengan panel:

789 

790| Kunci | Tindakan |

791| :-------- | :---------------------------------------------------------------- |

792| `↑` / `↓` | Pindah antar baris |

793| `Enter` | Buka transkrip fork yang dipilih dan kirimkan pesan tindak lanjut |

794| `x` | Tutup fork yang selesai atau hentikan yang sedang berjalan |

795| `Esc` | Kembalikan fokus ke input prompt |

796 

797### Bagaimana fork berbeda dari subagent bernama

798 

799Fork mewarisi segalanya yang dimiliki sesi utama pada saat spawn. Subagent bernama dimulai dari definisinya sendiri.

800 

801| | Fork | Subagent bernama |

802| :--------------------- | :----------------------------- | :---------------------------------------------------------------------------------------------------- |

803| Konteks | Riwayat percakapan lengkap | Konteks segar dengan prompt yang Anda lewatkan |

804| Prompt sistem dan alat | Sama dengan sesi utama | Dari [file definisi](#write-subagent-files) subagent |

805| Model | Sama dengan sesi utama | Dari bidang `model` subagent |

806| Izin | Prompt muncul di terminal Anda | [Pra-disetujui](#run-subagents-in-foreground-or-background) sebelum peluncuran, kemudian auto-ditolak |

807| Prompt cache | Dibagikan dengan sesi utama | Cache terpisah |

808 

809Karena prompt sistem fork dan definisi alat identik dengan induk, permintaan pertamanya menggunakan kembali cache prompt induk. Ini membuat forking lebih murah daripada menelurkan subagent segar untuk tugas yang memerlukan konteks yang sama.

810 

811Ketika Claude menelurkan fork melalui alat Agent, Claude dapat melewatkan `isolation: "worktree"` sehingga edit file fork ditulis ke git worktree terpisah daripada checkout Anda.

812 

813### Keterbatasan

814 

815Menetapkan `CLAUDE_CODE_FORK_SUBAGENT=1` mengaktifkan fork mode dalam sesi interaktif, [non-interactive mode](/id/headless), dan Agent SDK. Fork tidak dapat menelurkan fork lebih lanjut.

816 

817## Contoh subagent

818 

819Contoh-contoh ini mendemonstrasikan pola efektif untuk membangun subagent. Gunakan mereka sebagai titik awal, atau hasilkan versi yang disesuaikan dengan Claude.

820 

821<Tip>

822 **Best practices:**

823 

824 * **Desain subagent yang terfokus:** setiap subagent harus unggul dalam satu tugas spesifik

825 * **Tulis deskripsi terperinci:** Claude menggunakan deskripsi untuk memutuskan kapan mendelegasikan

826 * **Batasi akses alat:** berikan hanya izin yang diperlukan untuk keamanan dan fokus

827 * **Periksa ke dalam kontrol versi:** bagikan subagent proyek dengan tim Anda

828</Tip>

829 

830### Peninjau kode

831 

832Subagent hanya-baca yang meninjau kode tanpa memodifikasinya. Contoh ini menunjukkan cara merancang subagent yang terfokus dengan akses alat terbatas (tidak ada Edit atau Write) dan prompt terperinci yang menentukan dengan tepat apa yang harus dicari dan cara memformat output.

833 

834```markdown theme={null}

835---

836name: code-reviewer

837description: Expert code review specialist. Proactively reviews code for quality, security, and maintainability. Use immediately after writing or modifying code.

838tools: Read, Grep, Glob, Bash

839model: inherit

840---

841 

842You are a senior code reviewer ensuring high standards of code quality and security.

843 

844When invoked:

8451. Run git diff to see recent changes

8462. Focus on modified files

8473. Begin review immediately

848 

849Review checklist:

850- Code is clear and readable

851- Functions and variables are well-named

852- No duplicated code

853- Proper error handling

854- No exposed secrets or API keys

855- Input validation implemented

856- Good test coverage

857- Performance considerations addressed

858 

859Provide feedback organized by priority:

860- Critical issues (must fix)

861- Warnings (should fix)

862- Suggestions (consider improving)

863 

864Include specific examples of how to fix issues.

865```

866 

867### Debugger

868 

869Subagent yang dapat menganalisis dan memperbaiki masalah. Tidak seperti peninjau kode, yang ini mencakup Edit karena memperbaiki bug memerlukan memodifikasi kode. Prompt menyediakan alur kerja yang jelas dari diagnosis ke verifikasi.

870 

871```markdown theme={null}

872---

873name: debugger

874description: Debugging specialist for errors, test failures, and unexpected behavior. Use proactively when encountering any issues.

875tools: Read, Edit, Bash, Grep, Glob

876---

877 

878You are an expert debugger specializing in root cause analysis.

879 

880When invoked:

8811. Capture error message and stack trace

8822. Identify reproduction steps

8833. Isolate the failure location

8844. Implement minimal fix

8855. Verify solution works

886 

887Debugging process:

888- Analyze error messages and logs

889- Check recent code changes

890- Form and test hypotheses

891- Add strategic debug logging

892- Inspect variable states

893 

894For each issue, provide:

895- Root cause explanation

896- Evidence supporting the diagnosis

897- Specific code fix

898- Testing approach

899- Prevention recommendations

900 

901Focus on fixing the underlying issue, not the symptoms.

902```

903 

904### Data scientist

905 

906Subagent khusus domain untuk pekerjaan analisis data. Contoh ini menunjukkan cara membuat subagent untuk alur kerja khusus di luar tugas pengkodean khas. Ini secara eksplisit menetapkan `model: sonnet` untuk analisis yang lebih mampu.

907 

908```markdown theme={null}

909---

910name: data-scientist

911description: Data analysis expert for SQL queries, BigQuery operations, and data insights. Use proactively for data analysis tasks and queries.

912tools: Bash, Read, Write

913model: sonnet

914---

915 

916You are a data scientist specializing in SQL and BigQuery analysis.

917 

918When invoked:

9191. Understand the data analysis requirement

9202. Write efficient SQL queries

9213. Use BigQuery command line tools (bq) when appropriate

9224. Analyze and summarize results

9235. Present findings clearly

924 

925Key practices:

926- Write optimized SQL queries with proper filters

927- Use appropriate aggregations and joins

928- Include comments explaining complex logic

929- Format results for readability

930- Provide data-driven recommendations

931 

932For each analysis:

933- Explain the query approach

934- Document any assumptions

935- Highlight key findings

936- Suggest next steps based on data

937 

938Always ensure queries are efficient and cost-effective.

939```

940 

941### Validator kueri database

942 

943Subagent yang memungkinkan akses Bash tetapi memvalidasi perintah untuk mengizinkan hanya kueri SQL hanya-baca. Contoh ini menunjukkan cara menggunakan hooks `PreToolUse` untuk validasi bersyarat ketika Anda memerlukan kontrol lebih halus daripada bidang `tools`.

944 

945```markdown theme={null}

946---

947name: db-reader

948description: Execute read-only database queries. Use when analyzing data or generating reports.

949tools: Bash

950hooks:

951 PreToolUse:

952 - matcher: "Bash"

953 hooks:

954 - type: command

955 command: "./scripts/validate-readonly-query.sh"

956---

957 

958You are a database analyst with read-only access. Execute SELECT queries to answer questions about the data.

959 

960When asked to analyze data:

9611. Identify which tables contain the relevant data

9622. Write efficient SELECT queries with appropriate filters

9633. Present results clearly with context

964 

965You cannot modify data. If asked to INSERT, UPDATE, DELETE, or modify schema, explain that you only have read access.

966```

967 

968Claude Code [melewatkan input hook sebagai JSON](/id/hooks#pretooluse-input) melalui stdin ke perintah hook. Skrip validasi membaca JSON ini, mengekstrak perintah yang sedang dijalankan, dan memeriksanya terhadap daftar operasi penulisan SQL. Jika operasi penulisan terdeteksi, skrip [keluar dengan kode 2](/id/hooks#exit-code-2-behavior-per-event) untuk memblokir eksekusi dan mengembalikan pesan kesalahan ke Claude melalui stderr.

969 

970Buat skrip validasi di mana saja dalam proyek Anda. Jalur harus cocok dengan bidang `command` dalam konfigurasi hook Anda:

971 

972```bash theme={null}

973#!/bin/bash

974# Blocks SQL write operations, allows SELECT queries

975 

976# Read JSON input from stdin

977INPUT=$(cat)

978 

979# Extract the command field from tool_input using jq

980COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command // empty')

981 

982if [ -z "$COMMAND" ]; then

983 exit 0

984fi

985 

986# Block write operations (case-insensitive)

987if echo "$COMMAND" | grep -iE '\b(INSERT|UPDATE|DELETE|DROP|CREATE|ALTER|TRUNCATE|REPLACE|MERGE)\b' > /dev/null; then

988 echo "Blocked: Write operations not allowed. Use SELECT queries only." >&2

989 exit 2

990fi

991 

992exit 0

993```

994 

995Buat skrip dapat dieksekusi:

996 

997```bash theme={null}

998chmod +x ./scripts/validate-readonly-query.sh

999```

1000 

1001Hook menerima JSON melalui stdin dengan perintah Bash dalam `tool_input.command`. Kode keluar 2 memblokir operasi dan mengirimkan pesan kesalahan kembali ke Claude. Lihat [Hooks](/id/hooks#exit-code-output) untuk detail tentang kode keluar dan [Hook input](/id/hooks#pretooluse-input) untuk skema input lengkap.

1002 

1003## Langkah berikutnya

1004 

1005Sekarang setelah Anda memahami subagent, jelajahi fitur terkait ini:

1006 

1007* [Distribusikan subagent dengan plugins](/id/plugins) untuk berbagi subagent di seluruh tim atau proyek

1008* [Jalankan Claude Code secara terprogram](/id/headless) dengan Agent SDK untuk CI/CD dan otomasi

1009* [Gunakan MCP servers](/id/mcp) untuk memberikan subagent akses ke alat dan data eksternal

terminal-config.md +307 −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# Konfigurasi terminal Anda untuk Claude Code

6 

7> Perbaiki Shift+Enter untuk baris baru, dapatkan bel terminal ketika Claude selesai, konfigurasi tmux, cocokkan tema warna, dan aktifkan mode Vim di CLI Claude Code.

8 

9Claude Code bekerja di terminal apa pun tanpa konfigurasi. Halaman ini untuk ketika sesuatu yang spesifik tidak berperilaku seperti yang Anda harapkan. Temukan gejala Anda di bawah. Jika semuanya sudah terasa benar, Anda tidak memerlukan halaman ini.

10 

11* [Shift+Enter mengirim alih-alih menyisipkan baris baru](#enter-multiline-prompts)

12* [Pintasan tombol Option tidak melakukan apa pun di macOS](#enable-option-key-shortcuts-on-macos)

13* [Tidak ada suara atau peringatan ketika Claude selesai](#get-a-terminal-bell-or-notification)

14* [Anda menjalankan Claude Code di dalam tmux](#configure-tmux)

15* [Tampilan berkedip atau scrollback melompat](#switch-to-fullscreen-rendering)

16* [Anda ingin kunci Vim di prompt](#edit-prompts-with-vim-keybindings)

17 

18Halaman ini tentang membuat terminal Anda mengirimkan sinyal yang tepat ke Claude Code. Untuk mengubah kunci mana yang Claude Code sendiri merespons, lihat [keybindings](/id/keybindings) sebagai gantinya.

19 

20## Masukkan prompt multiline

21 

22Menekan Enter mengirimkan pesan Anda. Untuk menambahkan jeda baris tanpa mengirimkan, tekan Ctrl+J, atau ketik `\` dan kemudian tekan Enter. Keduanya bekerja di setiap terminal tanpa setup.

23 

24Di sebagian besar terminal Anda juga dapat menekan Shift+Enter, tetapi dukungan bervariasi menurut emulator terminal:

25 

26| Terminal | Shift+Enter untuk baris baru |

27| :---------------------------------------------------------------------------------- | :----------------------------------------------------- |

28| Ghostty, Kitty, iTerm2, WezTerm, Warp, Apple Terminal | Bekerja tanpa setup |

29| VS Code, Cursor, Windsurf, Alacritty, Zed | Jalankan `/terminal-setup` sekali |

30| Windows Terminal, gnome-terminal, JetBrains IDEs seperti PyCharm dan Android Studio | Tidak tersedia; gunakan Ctrl+J atau `\` kemudian Enter |

31 

32Untuk VS Code, Cursor, Windsurf, Alacritty, dan Zed, `/terminal-setup` menulis Shift+Enter dan pintasan keyboard lainnya ke dalam file konfigurasi terminal. Di VS Code, Cursor, dan Windsurf, ini juga menetapkan `terminal.integrated.mouseWheelScrollSensitivity` dalam pengaturan editor untuk scrolling yang lebih halus dalam [mode fullscreen](/id/fullscreen). Binding dan pengaturan yang ada dibiarkan tetap ada; jika Anda melihat pesan seperti `VSCode terminal Shift+Enter key binding already configured`, tidak ada perubahan yang dilakukan. Jalankan `/terminal-setup` langsung di terminal host daripada di dalam tmux atau screen, karena perlu menulis ke konfigurasi terminal host.

33 

34Jika Anda menjalankan di dalam tmux, Shift+Enter juga memerlukan [konfigurasi tmux di bawah](#configure-tmux) bahkan ketika terminal luar mendukungnya.

35 

36Untuk mengikat baris baru ke kunci yang berbeda, atau untuk menukar perilaku sehingga Enter menyisipkan baris baru dan Shift+Enter mengirim, petakan tindakan `chat:newline` dan `chat:submit` di [file pintasan keyboard](/id/keybindings) Anda.

37 

38## Aktifkan pintasan tombol Option di macOS

39 

40Beberapa pintasan Claude Code menggunakan tombol Option, seperti Option+Enter untuk baris baru atau Option+P untuk beralih model. Di macOS, sebagian besar terminal tidak mengirimkan Option sebagai pengubah secara default, jadi pintasan ini tidak melakukan apa pun sampai Anda mengaktifkannya. Pengaturan terminal untuk ini biasanya berlabel "Use Option as Meta Key"; Meta adalah nama Unix historis untuk kunci yang sekarang berlabel Option atau Alt.

41 

42<Tabs>

43 <Tab title="Apple Terminal">

44 Buka Settings → Profiles → Keyboard dan centang "Use Option as Meta Key".

45 

46 Jika Anda menerima prompt first-run Claude Code yang menawarkan "Option+Enter untuk baris baru dan visual bell", ini sudah dilakukan. Prompt itu menjalankan `/terminal-setup` untuk Anda, yang mengaktifkan Option sebagai Meta dan mengalihkan audio bell ke flash layar visual di profil Apple Terminal Anda.

47 </Tab>

48 

49 <Tab title="iTerm2">

50 Buka Settings → Profiles → Keys → General dan atur Left Option key dan Right Option key ke "Esc+".

51 

52 Menjalankan `/terminal-setup` di iTerm2 mengaktifkan "Applications in terminal may access clipboard" di bawah Settings → General → Selection sehingga perintah `/copy` dapat menulis ke clipboard sistem Anda. Perintah mendeteksi iTerm2 bahkan ketika dijalankan dari dalam tmux. Mulai ulang iTerm2 agar perubahan berlaku.

53 </Tab>

54 

55 <Tab title="VS Code">

56 Tambahkan `"terminal.integrated.macOptionIsMeta": true` ke pengaturan VS Code Anda.

57 </Tab>

58</Tabs>

59 

60Untuk Ghostty, Kitty, dan terminal lainnya, cari pengaturan Option-as-Alt atau Option-as-Meta di file konfigurasi terminal.

61 

62## Dapatkan bel terminal atau notifikasi

63 

64Ketika Claude menyelesaikan tugas atau berhenti untuk prompt izin, ia mengirimkan acara notifikasi. Menampilkan ini sebagai bel terminal atau notifikasi desktop memungkinkan Anda beralih ke pekerjaan lain saat tugas panjang berjalan.

65 

66Secara default Claude Code mengirimkan notifikasi desktop hanya di Ghostty, Kitty, dan iTerm2. Di terminal lain, atur [`preferredNotifChannel`](/id/settings#available-settings) ke `"terminal_bell"` untuk membunyikan bel terminal sebagai gantinya, atau konfigurasikan [hook Notification](#play-a-sound-with-a-notification-hook) untuk suara khusus atau perintah.

67 

68Notifikasi desktop mencapai mesin lokal Anda melalui SSH, jadi sesi jarak jauh masih dapat memperingatkan Anda. Ghostty dan Kitty meneruskannya ke pusat notifikasi OS Anda tanpa setup lebih lanjut. iTerm2 memerlukan Anda untuk mengaktifkan penerusan:

69 

70<Steps>

71 <Step title="Buka pengaturan notifikasi iTerm2">

72 Buka Settings → Profiles → Terminal.

73 </Step>

74 

75 <Step title="Aktifkan peringatan">

76 Centang "Notification Center Alerts", kemudian klik "Filter Alerts" dan aktifkan "Send escape sequence-generated alerts".

77 </Step>

78</Steps>

79 

80Jika notifikasi masih tidak muncul, konfirmasi bahwa aplikasi terminal Anda memiliki izin notifikasi di pengaturan OS Anda, dan jika Anda menjalankan di dalam tmux, [aktifkan passthrough](#configure-tmux).

81 

82### Putar suara dengan hook Notification

83 

84Di terminal apa pun Anda dapat mengonfigurasi [hook Notification](/id/hooks-guide#get-notified-when-claude-needs-input) untuk memutar suara atau menjalankan perintah khusus ketika Claude memerlukan perhatian Anda. Hook berjalan bersama notifikasi desktop daripada menggantinya, jadi terminal yang tidak menerima notifikasi desktop, seperti Warp atau terminal terintegrasi VS Code, dapat menggunakan hook atau mengatur `preferredNotifChannel` ke `"terminal_bell"` sebagai gantinya.

85 

86Contoh di bawah memutar suara sistem di macOS. Panduan tertaut memiliki perintah notifikasi desktop untuk macOS, Linux, dan Windows.

87 

88```json ~/.claude/settings.json theme={null}

89{

90 "hooks": {

91 "Notification": [

92 {

93 "hooks": [{ "type": "command", "command": "afplay /System/Library/Sounds/Glass.aiff" }]

94 }

95 ]

96 }

97}

98```

99 

100## Konfigurasi tmux

101 

102Ketika Claude Code berjalan di dalam tmux, dua hal rusak secara default: Shift+Enter mengirim alih-alih menyisipkan baris baru, dan notifikasi desktop dan [progress bar](/id/settings#available-settings) tidak pernah mencapai terminal luar. Tambahkan baris-baris ini ke `~/.tmux.conf`, kemudian jalankan `tmux source-file ~/.tmux.conf` untuk menerapkannya ke server yang berjalan:

103 

104```bash ~/.tmux.conf theme={null}

105set -g allow-passthrough on

106set -s extended-keys on

107set -as terminal-features 'xterm*:extkeys'

108```

109 

110Baris `allow-passthrough` memungkinkan notifikasi dan pembaruan kemajuan mencapai iTerm2, Ghostty, atau Kitty alih-alih ditelan oleh tmux. Baris `extended-keys` memungkinkan tmux membedakan Shift+Enter dari Enter biasa sehingga pintasan baris baru bekerja.

111 

112## Cocokkan tema warna

113 

114Gunakan perintah `/theme`, atau pemilih tema di `/config`, untuk memilih tema Claude Code yang cocok dengan terminal Anda. Memilih opsi auto mendeteksi latar belakang terminal Anda yang terang atau gelap, jadi tema mengikuti perubahan penampilan OS kapan pun terminal Anda melakukannya. Claude Code tidak mengontrol skema warna terminal itu sendiri, yang diatur oleh aplikasi terminal.

115 

116Untuk menyesuaikan apa yang muncul di bagian bawah antarmuka, konfigurasikan [baris status khusus](/id/statusline) yang menampilkan model saat ini, direktori kerja, cabang git, atau konteks lainnya.

117 

118### Buat tema khusus

119 

120<Note>

121 Tema khusus memerlukan Claude Code v2.1.118 atau lebih baru.

122</Note>

123 

124Selain preset bawaan, `/theme` mencantumkan tema khusus apa pun yang telah Anda tentukan dan tema apa pun yang disumbangkan oleh [plugins](/id/plugins-reference#themes) yang terinstal. Pilih **Tema khusus baru…** di akhir daftar untuk membuat satu secara interaktif: Anda memberi nama tema, kemudian memilih token warna individual untuk ditimpa. Tekan `Ctrl+E` saat tema khusus disorot untuk mengeditnya.

125 

126Setiap tema khusus adalah file JSON di `~/.claude/themes/`. Nama file tanpa ekstensi `.json` adalah slug tema, dan memilih tema menyimpan `custom:<slug>` sebagai preferensi tema Anda. File memiliki tiga bidang opsional:

127 

128| Bidang | Tipe | Deskripsi |

129| :---------- | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------- |

130| `name` | string | Label tampilan yang ditampilkan di `/theme`. Defaultnya adalah slug nama file |

131| `base` | string | Preset bawaan yang dimulai dari tema: `dark`, `light`, `dark-daltonized`, `light-daltonized`, `dark-ansi`, atau `light-ansi`. Defaultnya adalah `dark` |

132| `overrides` | object | Peta nama token warna ke nilai warna. Token yang tidak tercantum di sini jatuh kembali ke preset dasar |

133 

134Nilai warna menerima `#rrggbb`, `#rgb`, `rgb(r,g,b)`, `ansi256(n)`, atau `ansi:<name>` di mana `<name>` adalah salah satu dari 16 nama warna ANSI standar seperti `red` atau `cyanBright`. Token yang tidak dikenal dan nilai warna yang tidak valid diabaikan, jadi kesalahan ketik tidak dapat merusak rendering.

135 

136Contoh berikut mendefinisikan tema yang mempertahankan preset gelap tetapi mengubah warna aksen prompt, teks kesalahan, dan teks kesuksesan:

137 

138```json ~/.claude/themes/dracula.json theme={null}

139{

140 "name": "Dracula",

141 "base": "dark",

142 "overrides": {

143 "claude": "#bd93f9",

144 "error": "#ff5555",

145 "success": "#50fa7b"

146 }

147}

148```

149 

150Claude Code memantau `~/.claude/themes/` dan memuat ulang saat file berubah, jadi edit yang dibuat di editor Anda berlaku untuk sesi yang sedang berjalan tanpa restart.

151 

152Referensi di bawah mencakup token yang dapat Anda atur di `overrides`. Editor interaktif di `/theme` menampilkan token yang sama dengan pratinjau langsung, ditambah beberapa aksen tujuan tunggal seperti warna layar onboarding yang dihilangkan di sini.

153 

154<Accordion title="Referensi token warna">

155 Contoh berikut menggabungkan token dari beberapa grup di bawah: aksen merek, batas mode rencana, latar belakang diff, dan latar belakang pesan layar penuh.

156 

157 ```json ~/.claude/themes/midnight.json theme={null}

158 {

159 "name": "Midnight",

160 "base": "dark",

161 "overrides": {

162 "claude": "#a78bfa",

163 "planMode": "#38bdf8",

164 "diffAdded": "#14532d",

165 "diffRemoved": "#7f1d1d",

166 "userMessageBackground": "#1e1b4b"

167 }

168 }

169 ```

170 

171 #### Warna teks dan aksen

172 

173 Kontrol aksen merek utama dan nuansa teks latar depan yang digunakan di seluruh antarmuka.

174 

175 | Token | Kontrol |

176 | :------------ | :------------------------------------------------------------------------- |

177 | `claude` | Aksen merek utama, digunakan untuk spinner dan label asisten |

178 | `text` | Teks latar depan default |

179 | `inverseText` | Teks yang digambar di atas latar belakang berwarna, seperti lencana status |

180 | `inactive` | Teks sekunder seperti petunjuk, stempel waktu, dan item yang dinonaktifkan |

181 | `subtle` | Batas samar dan teks sekunder yang dikurangi penekanannya |

182 | `suggestion` | Saran pelengkapan otomatis dan sorotan pilihan dalam pemilih |

183 | `permission` | Batas dialog, termasuk prompt izin dan pemilih |

184 | `remember` | Indikator memori dan `CLAUDE.md` |

185 

186 #### Warna status

187 

188 Sinyal keberhasilan, kegagalan, dan status peringatan di seluruh pesan dan indikator.

189 

190 | Token | Kontrol |

191 | :-------- | :--------------------------------------------------- |

192 | `success` | Pesan kesuksesan dan pemeriksaan yang lulus |

193 | `error` | Pesan kesalahan dan kegagalan |

194 | `warning` | Peringatan, pesan hati-hati, dan batas mode otomatis |

195 | `merged` | Status permintaan tarik yang digabungkan |

196 

197 #### Kotak input dan indikator mode

198 

199 Atur warna batas kotak input dan aksen yang ditampilkan saat mode izin atau indikator aktif.

200 

201 | Token | Kontrol |

202 | :------------- | :--------------------------------------------------- |

203 | `promptBorder` | Batas kotak input dalam mode izin default |

204 | `planMode` | Aksen dan batas mode rencana |

205 | `autoAccept` | Aksen dan batas mode terima-edit |

206 | `bashBorder` | Batas kotak input saat memasukkan perintah shell `!` |

207 | `ide` | Indikator koneksi IDE |

208 | `fastMode` | Indikator mode cepat |

209 

210 #### Rendering diff

211 

212 Warna kode yang ditambahkan dan dihapus dalam edit dan ulasan file.

213 

214 | Token | Kontrol |

215 | :------------------ | :------------------------------------------------------------------------ |

216 | `diffAdded` | Latar belakang baris yang ditambahkan |

217 | `diffRemoved` | Latar belakang baris yang dihapus |

218 | `diffAddedDimmed` | Latar belakang konteks yang tidak berubah di dekat baris yang ditambahkan |

219 | `diffRemovedDimmed` | Latar belakang konteks yang tidak berubah di dekat baris yang dihapus |

220 | `diffAddedWord` | Sorotan tingkat kata dalam baris yang ditambahkan |

221 | `diffRemovedWord` | Sorotan tingkat kata dalam baris yang dihapus |

222 

223 #### Mode layar penuh

224 

225 Terapkan hanya dalam [mode rendering layar penuh](/id/fullscreen), di mana pesan memiliki isian latar belakang.

226 

227 | Token | Kontrol |

228 | :--------------------------- | :--------------------------------------------------------------------- |

229 | `userMessageBackground` | Latar belakang di balik pesan Anda dalam transkrip |

230 | `userMessageBackgroundHover` | Latar belakang di balik pesan saat diarahkan atau diperluas |

231 | `messageActionsBackground` | Latar belakang di balik pesan yang dipilih saat bilah tindakan terbuka |

232 | `bashMessageBackgroundColor` | Latar belakang di balik entri perintah shell `!` dalam transkrip |

233 | `memoryBackgroundColor` | Latar belakang di balik entri memori `#` dalam transkrip |

234 | `selectionBg` | Latar belakang teks yang dipilih dengan mouse |

235 

236 #### Meter penggunaan dan label pembicara

237 

238 Sesuaikan bilah yang ditampilkan dalam tampilan `/usage` dan label yang membedakan pesan Anda dari Claude.

239 

240 | Token | Kontrol |

241 | :----------------- | :-------------------------------------------- |

242 | `rate_limit_fill` | Bagian yang diisi dari meter penggunaan |

243 | `rate_limit_empty` | Bagian yang tidak diisi dari meter penggunaan |

244 | `briefLabelYou` | Warna label `You` pada pesan Anda |

245 | `briefLabelClaude` | Warna label `Claude` pada pesan asisten |

246 

247 #### Varian shimmer dan warna subagen

248 

249 Beberapa token memiliki varian shimmer berpasangan yang menyediakan warna yang lebih ringan yang digunakan dalam gradien animasi spinner. Timpa shimmer bersama token dasarnya jika animasi terlihat tidak cocok.

250 

251 * `claude` dan `claudeShimmer`

252 * `warning` dan `warningShimmer`

253 * `permission` dan `permissionShimmer`

254 * `promptBorder` dan `promptBorderShimmer`

255 * `inactive` dan `inactiveShimmer`

256 * `fastMode` dan `fastModeShimmer`

257 

258 Setiap [subagen](/id/sub-agents) dan tugas paralel ditampilkan dalam salah satu dari delapan warna bernama sehingga Anda dapat membedakannya dalam transkrip. Nama token mengikuti pola `<color>_FOR_SUBAGENTS_ONLY`, di mana `<color>` adalah `red`, `blue`, `green`, `yellow`, `purple`, `orange`, `pink`, atau `cyan`. Timpa ini untuk mengubah tampilan setiap warna bernama. Misalnya, subagen dengan `color: blue` dalam definisinya digambar menggunakan nilai `blue_FOR_SUBAGENTS_ONLY`.

259 

260 Kata kunci [`ultrathink`](/id/model-config#use-ultrathink-for-one-off-deep-reasoning) dan [`ultraplan`](/id/ultraplan) dalam input prompt dirender dengan gradien pelangi tujuh warna. Nama token mengikuti pola `rainbow_<color>` dan `rainbow_<color>_shimmer`, di mana `<color>` adalah `red`, `orange`, `yellow`, `green`, `blue`, `indigo`, atau `violet`.

261</Accordion>

262 

263## Beralih ke rendering fullscreen

264 

265Jika tampilan berkedip atau posisi scroll melompat saat Claude sedang bekerja, beralih ke [mode rendering fullscreen](/id/fullscreen). Ini menggambar ke layar terpisah yang terminal cadangkan untuk aplikasi full-screen alih-alih menambahkan ke scrollback normal Anda, yang menjaga penggunaan memori tetap datar dan menambahkan dukungan mouse untuk scrolling dan seleksi. Dalam mode ini Anda scroll dengan mouse atau PageUp di dalam Claude Code daripada dengan scrollback native terminal Anda; lihat [halaman fullscreen](/id/fullscreen#search-and-review-the-conversation) untuk cara mencari dan menyalin.

266 

267Jalankan `/tui fullscreen` untuk beralih dalam sesi saat ini dengan percakapan Anda tetap utuh. Untuk menjadikannya default, atur variabel lingkungan `CLAUDE_CODE_NO_FLICKER` sebelum memulai Claude Code:

268 

269<CodeGroup>

270 ```bash Bash and Zsh theme={null}

271 CLAUDE_CODE_NO_FLICKER=1 claude

272 ```

273 

274 ```powershell PowerShell theme={null}

275 $env:CLAUDE_CODE_NO_FLICKER = "1"; claude

276 ```

277 

278 ```json ~/.claude/settings.json theme={null}

279 {

280 "env": {

281 "CLAUDE_CODE_NO_FLICKER": "1"

282 }

283 }

284 ```

285</CodeGroup>

286 

287## Tempel konten besar

288 

289Ketika Anda menempel lebih dari 10.000 karakter ke dalam prompt, Claude Code menciutkan input ke placeholder `[Pasted text]` sehingga kotak input tetap dapat digunakan. Konten lengkap masih dikirim ke Claude ketika Anda mengirimkan.

290 

291Terminal terintegrasi VS Code dapat menjatuhkan karakter dari penempelan sangat besar sebelum mereka mencapai Claude Code, jadi lebih suka alur kerja berbasis file di sana. Untuk input sangat besar seperti seluruh file atau log panjang, tulis konten ke file dan minta Claude untuk membacanya alih-alih menempel. Ini menjaga transkrip percakapan tetap dapat dibaca dan memungkinkan Claude mereferensikan file berdasarkan path di giliran kemudian.

292 

293## Edit prompt dengan pintasan keyboard Vim

294 

295Claude Code mencakup mode pengeditan gaya Vim untuk input prompt. Aktifkan melalui `/config` → Editor mode, atau dengan mengatur [`editorMode`](/id/settings#available-settings) ke `"vim"` di `~/.claude/settings.json`. Atur Editor mode kembali ke `normal` untuk mematikannya.

296 

297Mode Vim mendukung subset gerakan dan operator mode NORMAL dan VISUAL, seperti navigasi `hjkl`, seleksi `v`/`V`, dan `d`/`c`/`y` dengan objek teks. Lihat [referensi mode editor Vim](/id/interactive-mode#vim-editor-mode) untuk tabel kunci lengkap. Gerakan Vim tidak dapat dipetakan ulang melalui file pintasan keyboard.

298 

299Menekan Enter masih mengirimkan prompt Anda dalam mode INSERT, tidak seperti Vim standar. Gunakan `o` atau `O` dalam mode NORMAL, atau Ctrl+J, untuk menyisipkan baris baru sebagai gantinya.

300 

301## Sumber daya terkait

302 

303* [Mode interaktif](/id/interactive-mode): referensi pintasan keyboard lengkap dan tabel kunci Vim

304* [Keybindings](/id/keybindings): petakan ulang pintasan Claude Code apa pun, termasuk Enter dan Shift+Enter

305* [Rendering fullscreen](/id/fullscreen): detail tentang scrolling, pencarian, dan copy dalam mode fullscreen

306* [Panduan hooks](/id/hooks-guide): lebih banyak contoh hook Notification untuk Linux dan Windows

307* [Troubleshooting](/id/troubleshooting): perbaikan untuk masalah di luar konfigurasi terminal

third-party-integrations.md +262 −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 penyebaran enterprise

6 

7> Pelajari bagaimana Claude Code dapat terintegrasi dengan berbagai layanan pihak ketiga dan infrastruktur untuk memenuhi persyaratan penyebaran enterprise.

8 

9Organisasi dapat menyebarkan Claude Code melalui Anthropic secara langsung atau melalui penyedia cloud. Halaman ini membantu Anda memilih konfigurasi yang tepat.

10 

11## Bandingkan opsi penyebaran

12 

13Untuk sebagian besar organisasi, Claude for Teams atau Claude for Enterprise memberikan pengalaman terbaik. Anggota tim mendapatkan akses ke Claude Code dan Claude di web dengan satu langganan, penagihan terpusat, dan tidak ada setup infrastruktur yang diperlukan.

14 

15**Claude for Teams** adalah self-service dan mencakup fitur kolaborasi, alat admin, dan manajemen penagihan. Terbaik untuk tim yang lebih kecil yang perlu memulai dengan cepat.

16 

17**Claude for Enterprise** menambahkan SSO dan domain capture, izin berbasis peran, akses API kepatuhan, dan pengaturan kebijakan terkelola untuk menyebarkan konfigurasi Claude Code di seluruh organisasi. Terbaik untuk organisasi yang lebih besar dengan persyaratan keamanan dan kepatuhan.

18 

19Pelajari lebih lanjut tentang [rencana Tim](https://support.claude.com/en/articles/9266767-what-is-the-team-plan) dan [rencana Enterprise](https://support.claude.com/en/articles/9797531-what-is-the-enterprise-plan).

20 

21Jika organisasi Anda memiliki persyaratan infrastruktur khusus, bandingkan opsi di bawah ini:

22 

23<table>

24 <thead>

25 <tr>

26 <th>Fitur</th>

27 <th>Claude for Teams/Enterprise</th>

28 <th>Anthropic Console</th>

29 <th>Amazon Bedrock</th>

30 <th>Google Vertex AI</th>

31 <th>Microsoft Foundry</th>

32 </tr>

33 </thead>

34 

35 <tbody>

36 <tr>

37 <td>Terbaik untuk</td>

38 <td>Sebagian besar organisasi (direkomendasikan)</td>

39 <td>Pengembang individual</td>

40 <td>Penyebaran native AWS</td>

41 <td>Penyebaran native GCP</td>

42 <td>Penyebaran native Azure</td>

43 </tr>

44 

45 <tr>

46 <td>Penagihan</td>

47 <td><strong>Teams:</strong> \$150/seat (Premium) dengan PAYG tersedia<br /><strong>Enterprise:</strong> <a href="https://claude.com/contact-sales?utm_source=claude_code&utm_medium=docs&utm_content=third_party_enterprise">Hubungi Penjualan</a></td>

48 <td>PAYG</td>

49 <td>PAYG melalui AWS</td>

50 <td>PAYG melalui GCP</td>

51 <td>PAYG melalui Azure</td>

52 </tr>

53 

54 <tr>

55 <td>Wilayah</td>

56 <td>[Negara](https://www.anthropic.com/supported-countries) yang didukung</td>

57 <td>[Negara](https://www.anthropic.com/supported-countries) yang didukung</td>

58 <td>[Wilayah](https://docs.aws.amazon.com/bedrock/latest/userguide/models-regions.html) AWS yang beragam</td>

59 <td>[Wilayah](https://cloud.google.com/vertex-ai/generative-ai/docs/learn/locations) GCP yang beragam</td>

60 <td>[Wilayah](https://azure.microsoft.com/en-us/explore/global-infrastructure/products-by-region/) Azure yang beragam</td>

61 </tr>

62 

63 <tr>

64 <td>Prompt caching</td>

65 <td>Diaktifkan secara default</td>

66 <td>Diaktifkan secara default</td>

67 <td>Diaktifkan secara default</td>

68 <td>Diaktifkan secara default</td>

69 <td>Diaktifkan secara default</td>

70 </tr>

71 

72 <tr>

73 <td>Autentikasi</td>

74 <td>Claude.ai SSO atau email</td>

75 <td>Kunci API</td>

76 <td>Kunci API atau kredensial AWS</td>

77 <td>Kredensial GCP</td>

78 <td>Kunci API atau Microsoft Entra ID</td>

79 </tr>

80 

81 <tr>

82 <td>Pelacakan biaya</td>

83 <td>Dashboard penggunaan</td>

84 <td>Dashboard penggunaan</td>

85 <td>AWS Cost Explorer</td>

86 <td>GCP Billing</td>

87 <td>Azure Cost Management</td>

88 </tr>

89 

90 <tr>

91 <td>Termasuk Claude di web</td>

92 <td>Ya</td>

93 <td>Tidak</td>

94 <td>Tidak</td>

95 <td>Tidak</td>

96 <td>Tidak</td>

97 </tr>

98 

99 <tr>

100 <td>Fitur enterprise</td>

101 <td>Manajemen tim, SSO, pemantauan penggunaan</td>

102 <td>Tidak ada</td>

103 <td>Kebijakan IAM, CloudTrail</td>

104 <td>Peran IAM, Cloud Audit Logs</td>

105 <td>Kebijakan RBAC, Azure Monitor</td>

106 </tr>

107 </tbody>

108</table>

109 

110Pilih opsi penyebaran untuk melihat instruksi setup:

111 

112* [Claude for Teams atau Enterprise](/id/authentication#claude-for-teams-or-enterprise)

113* [Anthropic Console](/id/authentication#claude-console-authentication)

114* [Amazon Bedrock](/id/amazon-bedrock)

115* [Google Vertex AI](/id/google-vertex-ai)

116* [Microsoft Foundry](/id/microsoft-foundry)

117 

118## Konfigurasi proxy dan gateway

119 

120Sebagian besar organisasi dapat menggunakan penyedia cloud secara langsung tanpa konfigurasi tambahan. Namun, Anda mungkin perlu mengonfigurasi proxy perusahaan atau gateway LLM jika organisasi Anda memiliki persyaratan jaringan atau manajemen khusus. Ini adalah konfigurasi berbeda yang dapat digunakan bersama:

121 

122* **Corporate proxy**: Merutekan lalu lintas melalui proxy HTTP/HTTPS. Gunakan ini jika organisasi Anda memerlukan semua lalu lintas keluar untuk melewati server proxy untuk pemantauan keamanan, kepatuhan, atau penegakan kebijakan jaringan. Konfigurasi dengan variabel lingkungan `HTTPS_PROXY` atau `HTTP_PROXY`. Pelajari lebih lanjut di [Konfigurasi jaringan enterprise](/id/network-config).

123* **LLM Gateway**: Layanan yang berada di antara Claude Code dan penyedia cloud untuk menangani autentikasi dan perutean. Gunakan ini jika Anda memerlukan pelacakan penggunaan terpusat di seluruh tim, pembatasan laju kustom atau anggaran, atau manajemen autentikasi terpusat. Konfigurasi dengan variabel lingkungan `ANTHROPIC_BASE_URL`, `ANTHROPIC_BEDROCK_BASE_URL`, atau `ANTHROPIC_VERTEX_BASE_URL`. Pelajari lebih lanjut di [Konfigurasi gateway LLM](/id/llm-gateway).

124 

125Contoh berikut menunjukkan variabel lingkungan yang harus diatur di shell atau profil shell Anda (`.bashrc`, `.zshrc`). Lihat [Pengaturan](/id/settings) untuk metode konfigurasi lainnya.

126 

127### Amazon Bedrock

128 

129<Tabs>

130 <Tab title="Corporate proxy">

131 Rutekan lalu lintas Bedrock melalui proxy perusahaan Anda dengan mengatur [variabel lingkungan](/id/env-vars) berikut:

132 

133 ```bash theme={null}

134 # Enable Bedrock

135 export CLAUDE_CODE_USE_BEDROCK=1

136 export AWS_REGION=us-east-1

137 

138 # Configure corporate proxy

139 export HTTPS_PROXY='https://proxy.example.com:8080'

140 ```

141 </Tab>

142 

143 <Tab title="LLM Gateway">

144 Rutekan lalu lintas Bedrock melalui gateway LLM Anda dengan mengatur [variabel lingkungan](/id/env-vars) berikut:

145 

146 ```bash theme={null}

147 # Enable Bedrock

148 export CLAUDE_CODE_USE_BEDROCK=1

149 

150 # Configure LLM gateway

151 export ANTHROPIC_BEDROCK_BASE_URL='https://your-llm-gateway.com/bedrock'

152 export CLAUDE_CODE_SKIP_BEDROCK_AUTH=1 # If gateway handles AWS auth

153 ```

154 </Tab>

155</Tabs>

156 

157### Microsoft Foundry

158 

159<Tabs>

160 <Tab title="Corporate proxy">

161 Rutekan lalu lintas Foundry melalui proxy perusahaan Anda dengan mengatur [variabel lingkungan](/id/env-vars) berikut:

162 

163 ```bash theme={null}

164 # Enable Microsoft Foundry

165 export CLAUDE_CODE_USE_FOUNDRY=1

166 export ANTHROPIC_FOUNDRY_RESOURCE=your-resource

167 export ANTHROPIC_FOUNDRY_API_KEY=your-api-key # Or omit for Entra ID auth

168 

169 # Configure corporate proxy

170 export HTTPS_PROXY='https://proxy.example.com:8080'

171 ```

172 </Tab>

173 

174 <Tab title="LLM Gateway">

175 Rutekan lalu lintas Foundry melalui gateway LLM Anda dengan mengatur [variabel lingkungan](/id/env-vars) berikut:

176 

177 ```bash theme={null}

178 # Enable Microsoft Foundry

179 export CLAUDE_CODE_USE_FOUNDRY=1

180 

181 # Configure LLM gateway

182 export ANTHROPIC_FOUNDRY_BASE_URL='https://your-llm-gateway.com'

183 export CLAUDE_CODE_SKIP_FOUNDRY_AUTH=1 # If gateway handles Azure auth

184 ```

185 </Tab>

186</Tabs>

187 

188### Google Vertex AI

189 

190<Tabs>

191 <Tab title="Corporate proxy">

192 Rutekan lalu lintas Vertex AI melalui proxy perusahaan Anda dengan mengatur [variabel lingkungan](/id/env-vars) berikut:

193 

194 ```bash theme={null}

195 # Enable Vertex

196 export CLAUDE_CODE_USE_VERTEX=1

197 export CLOUD_ML_REGION=us-east5

198 export ANTHROPIC_VERTEX_PROJECT_ID=your-project-id

199 

200 # Configure corporate proxy

201 export HTTPS_PROXY='https://proxy.example.com:8080'

202 ```

203 </Tab>

204 

205 <Tab title="LLM Gateway">

206 Rutekan lalu lintas Vertex AI melalui gateway LLM Anda dengan mengatur [variabel lingkungan](/id/env-vars) berikut:

207 

208 ```bash theme={null}

209 # Enable Vertex

210 export CLAUDE_CODE_USE_VERTEX=1

211 

212 # Configure LLM gateway

213 export ANTHROPIC_VERTEX_BASE_URL='https://your-llm-gateway.com/vertex'

214 export CLAUDE_CODE_SKIP_VERTEX_AUTH=1 # If gateway handles GCP auth

215 ```

216 </Tab>

217</Tabs>

218 

219<Tip>

220 Gunakan `/status` di Claude Code untuk memverifikasi bahwa konfigurasi proxy dan gateway Anda diterapkan dengan benar.

221</Tip>

222 

223## Praktik terbaik untuk organisasi

224 

225### Investasi dalam dokumentasi dan memori

226 

227Kami sangat merekomendasikan investasi dalam dokumentasi sehingga Claude Code memahami basis kode Anda. Organisasi dapat menyebarkan file CLAUDE.md di berbagai tingkat:

228 

229* **Seluruh organisasi**: Sebarkan ke direktori sistem seperti `/Library/Application Support/ClaudeCode/CLAUDE.md` (macOS) untuk standar perusahaan

230* **Tingkat repositori**: Buat file `CLAUDE.md` di akar repositori yang berisi arsitektur proyek, perintah build, dan panduan kontribusi. Periksa ini ke dalam kontrol sumber sehingga semua pengguna mendapat manfaat

231 

232Pelajari lebih lanjut di [Memori dan file CLAUDE.md](/id/memory).

233 

234### Sederhanakan penyebaran

235 

236Jika Anda memiliki lingkungan pengembangan kustom, kami menemukan bahwa membuat cara "satu klik" untuk menginstal Claude Code adalah kunci untuk meningkatkan adopsi di seluruh organisasi.

237 

238### Mulai dengan penggunaan terpandu

239 

240Dorong pengguna baru untuk mencoba Claude Code untuk Q\&A basis kode, atau pada perbaikan bug yang lebih kecil atau permintaan fitur. Minta Claude Code untuk membuat rencana. Periksa saran Claude dan berikan umpan balik jika tidak sesuai. Seiring waktu, ketika pengguna memahami paradigma baru ini dengan lebih baik, mereka akan lebih efektif dalam membiarkan Claude Code berjalan lebih agentik.

241 

242### Versi model pin untuk penyedia cloud

243 

244Jika Anda menyebarkan melalui [Bedrock](/id/amazon-bedrock), [Vertex AI](/id/google-vertex-ai), atau [Foundry](/id/microsoft-foundry), pin versi model tertentu menggunakan `ANTHROPIC_DEFAULT_OPUS_MODEL`, `ANTHROPIC_DEFAULT_SONNET_MODEL`, dan `ANTHROPIC_DEFAULT_HAIKU_MODEL`. Tanpa pinning, alias Claude Code menyelesaikan versi terbaru, yang dapat merusak pengguna ketika Anthropic merilis model baru yang belum diaktifkan di akun Anda. Lihat [Konfigurasi model](/id/model-config#pin-models-for-third-party-deployments) untuk detail.

245 

246### Konfigurasi kebijakan keamanan

247 

248Tim 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](/id/security).

249 

250### Manfaatkan MCP untuk integrasi

251 

252MCP adalah cara yang bagus untuk memberikan Claude Code lebih banyak informasi, seperti menghubungkan ke sistem manajemen tiket atau log kesalahan. Kami merekomendasikan bahwa satu tim pusat mengonfigurasi server MCP dan memeriksa konfigurasi `.mcp.json` ke dalam basis kode sehingga semua pengguna mendapat manfaat. [Pelajari lebih lanjut](/id/mcp).

253 

254Di Anthropic, kami mempercayai Claude Code untuk mendorong pengembangan di seluruh setiap basis kode Anthropic. Kami harap Anda menikmati menggunakan Claude Code sebanyak yang kami lakukan.

255 

256## Langkah berikutnya

257 

258Setelah Anda memilih opsi penyebaran dan mengonfigurasi akses untuk tim Anda:

259 

2601. **Luncurkan ke tim Anda**: Bagikan instruksi instalasi dan minta anggota tim [menginstal Claude Code](/id/setup) dan autentikasi dengan kredensial mereka.

2612. **Atur konfigurasi bersama**: Buat [file CLAUDE.md](/id/memory) di repositori Anda untuk membantu Claude Code memahami basis kode dan standar pengkodean Anda.

2623. **Konfigurasi izin**: Tinjau [pengaturan keamanan](/id/security) untuk menentukan apa yang dapat dan tidak dapat dilakukan Claude Code di lingkungan Anda.

tools-reference.md +148 −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# Referensi Tools

6 

7> Referensi lengkap untuk tools yang dapat digunakan Claude Code, termasuk persyaratan izin.

8 

9Claude Code memiliki akses ke serangkaian tools bawaan yang membantu memahami dan memodifikasi codebase Anda. Nama tools adalah string yang tepat yang Anda gunakan dalam [aturan izin](/id/permissions#tool-specific-permission-rules), [daftar tools subagent](/id/sub-agents), dan [pencocokan hook](/id/hooks). Untuk menonaktifkan tool sepenuhnya, tambahkan namanya ke array `deny` dalam [pengaturan izin](/id/permissions#tool-specific-permission-rules) Anda.

10 

11Untuk menambahkan tools kustom, hubungkan [server MCP](/id/mcp). Untuk memperluas Claude dengan alur kerja berbasis prompt yang dapat digunakan kembali, tulis [skill](/id/skills), yang berjalan melalui tool `Skill` yang ada daripada menambahkan entri tool baru.

12 

13| Tool | Deskripsi | Izin Diperlukan |

14| :--------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------- |

15| `Agent` | Menjalankan [subagent](/id/sub-agents) dengan jendela konteks sendiri untuk menangani tugas | Tidak |

16| `AskUserQuestion` | Mengajukan pertanyaan pilihan ganda untuk mengumpulkan persyaratan atau memperjelas ambiguitas | Tidak |

17| `Bash` | Menjalankan perintah shell di lingkungan Anda. Lihat [perilaku Bash tool](#bash-tool-behavior) | Ya |

18| `CronCreate` | Menjadwalkan prompt berulang atau satu kali dalam sesi saat ini. Tugas bersifat session-scoped dan dipulihkan pada `--resume` atau `--continue` jika belum kadaluarsa. Lihat [tugas terjadwal](/id/scheduled-tasks) | Tidak |

19| `CronDelete` | Membatalkan tugas terjadwal berdasarkan ID | Tidak |

20| `CronList` | Mencantumkan semua tugas terjadwal dalam sesi | Tidak |

21| `Edit` | Membuat pengeditan tertarget ke file tertentu | Ya |

22| `EnterPlanMode` | Beralih ke plan mode untuk merancang pendekatan sebelum coding | Tidak |

23| `EnterWorktree` | Membuat [git worktree](/id/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees) terisolasi dan beralih ke dalamnya. Lewatkan `path` untuk beralih ke worktree yang ada dari repositori saat ini daripada membuat yang baru. Tidak tersedia untuk subagent | Tidak |

24| `ExitPlanMode` | Menyajikan rencana untuk persetujuan dan keluar dari plan mode | Ya |

25| `ExitWorktree` | Keluar dari sesi worktree dan kembali ke direktori asli. Tidak tersedia untuk subagent | Tidak |

26| `Glob` | Menemukan file berdasarkan pencocokan pola | Tidak |

27| `Grep` | Mencari pola dalam konten file | Tidak |

28| `ListMcpResourcesTool` | Mencantumkan resources yang diekspos oleh [server MCP](/id/mcp) yang terhubung | Tidak |

29| `LSP` | Intelijen kode melalui language servers: lompat ke definisi, temukan referensi, laporkan kesalahan tipe dan peringatan. Lihat [perilaku LSP tool](#lsp-tool-behavior) | Tidak |

30| `Monitor` | Menjalankan perintah di latar belakang dan mengirimkan setiap baris output kembali ke Claude, sehingga dapat bereaksi terhadap entri log, perubahan file, atau status yang dipolling di tengah percakapan. Lihat [Monitor tool](#monitor-tool) | Ya |

31| `NotebookEdit` | Memodifikasi sel notebook Jupyter | Ya |

32| `PowerShell` | Menjalankan perintah PowerShell secara native. Lihat [PowerShell tool](#powershell-tool) untuk ketersediaan | Ya |

33| `Read` | Membaca konten file | Tidak |

34| `ReadMcpResourceTool` | Membaca resource MCP tertentu berdasarkan URI | Tidak |

35| `SendMessage` | Mengirim pesan ke anggota [agent team](/id/agent-teams), atau [melanjutkan subagent](/id/sub-agents#resume-subagents) berdasarkan ID agennya. Subagent yang dihentikan secara otomatis melanjutkan di latar belakang. Hanya tersedia saat `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` diatur | Tidak |

36| `Skill` | Menjalankan [skill](/id/skills#control-who-invokes-a-skill) dalam percakapan utama | Ya |

37| `TaskCreate` | Membuat tugas baru dalam daftar tugas | Tidak |

38| `TaskGet` | Mengambil detail lengkap untuk tugas tertentu | Tidak |

39| `TaskList` | Mencantumkan semua tugas dengan status saat ini mereka | Tidak |

40| `TaskOutput` | (Tidak digunakan lagi) Mengambil output dari tugas latar belakang. Lebih suka `Read` pada jalur file output tugas | Tidak |

41| `TaskStop` | Membunuh tugas latar belakang yang sedang berjalan berdasarkan ID | Tidak |

42| `TaskUpdate` | Memperbarui status tugas, dependensi, detail, atau menghapus tugas | Tidak |

43| `TeamCreate` | Membuat [agent team](/id/agent-teams) dengan beberapa anggota tim. Hanya tersedia saat `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` diatur | Tidak |

44| `TeamDelete` | Membubarkan agent team dan membersihkan proses anggota tim. Hanya tersedia saat `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` diatur | Tidak |

45| `TodoWrite` | Mengelola daftar periksa tugas sesi. Tersedia dalam mode non-interaktif dan [Agent SDK](/id/headless); sesi interaktif menggunakan TaskCreate, TaskGet, TaskList, dan TaskUpdate sebagai gantinya | Tidak |

46| `ToolSearch` | Mencari dan memuat tools tertunda saat [pencarian tool](/id/mcp#scale-with-mcp-tool-search) diaktifkan | Tidak |

47| `WebFetch` | Mengambil konten dari URL yang ditentukan | Ya |

48| `WebSearch` | Melakukan pencarian web | Ya |

49| `Write` | Membuat atau menimpa file | Ya |

50 

51Aturan izin dapat dikonfigurasi menggunakan `/permissions` atau dalam [pengaturan izin](/id/settings#available-settings). Lihat juga [Aturan izin khusus tool](/id/permissions#tool-specific-permission-rules).

52 

53## Perilaku Bash tool

54 

55Bash tool menjalankan setiap perintah dalam proses terpisah dengan perilaku persistensi berikut:

56 

57* Ketika Claude menjalankan `cd` dalam sesi utama, direktori kerja baru berlanjut ke perintah Bash yang lebih baru selama tetap berada di dalam direktori proyek atau [direktori kerja tambahan](/id/permissions#working-directories) yang Anda tambahkan dengan `--add-dir`, `/add-dir`, atau `additionalDirectories` dalam pengaturan. Sesi subagent tidak pernah membawa perubahan direktori kerja.

58 * Jika `cd` mendarat di luar direktori tersebut, Claude Code mengatur ulang ke direktori proyek dan menambahkan `Shell cwd was reset to <dir>` ke hasil tool.

59 * Untuk menonaktifkan carry-over ini sehingga setiap perintah Bash dimulai di direktori proyek, atur `CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR=1`.

60* Variabel lingkungan tidak persisten. `export` dalam satu perintah tidak akan tersedia di perintah berikutnya.

61 

62Aktifkan virtualenv atau conda environment Anda sebelum meluncurkan Claude Code. Untuk membuat variabel lingkungan persisten di seluruh perintah Bash, atur [`CLAUDE_ENV_FILE`](/id/env-vars) ke skrip shell sebelum meluncurkan Claude Code, atau gunakan [hook SessionStart](/id/hooks#persist-environment-variables) untuk mengisinya secara dinamis.

63 

64## Perilaku LSP tool

65 

66LSP tool memberikan Claude intelijen kode dari language server yang sedang berjalan. Setelah setiap pengeditan file, secara otomatis melaporkan kesalahan tipe dan peringatan sehingga Claude dapat memperbaiki masalah tanpa langkah build terpisah. Claude juga dapat memanggilnya secara langsung untuk menavigasi kode:

67 

68* Lompat ke definisi simbol

69* Temukan semua referensi ke simbol

70* Dapatkan informasi tipe pada posisi

71* Daftar simbol dalam file atau workspace

72* Temukan implementasi antarmuka

73* Lacak hierarki panggilan

74 

75Tool ini tidak aktif sampai Anda menginstal [plugin intelijen kode](/id/discover-plugins#code-intelligence) untuk bahasa Anda. Plugin menggabungkan konfigurasi language server, dan Anda menginstal binary server secara terpisah.

76 

77## Monitor tool

78 

79<Note>

80 Monitor tool memerlukan Claude Code v2.1.98 atau lebih baru.

81</Note>

82 

83Monitor tool memungkinkan Claude mengawasi sesuatu di latar belakang dan bereaksi ketika berubah, tanpa menghentikan percakapan. Minta Claude untuk:

84 

85* Tail file log dan tandai kesalahan saat muncul

86* Poll PR atau CI job dan laporkan ketika statusnya berubah

87* Pantau direktori untuk perubahan file

88* Lacak output dari skrip yang sedang berjalan lama yang Anda tunjukkan

89 

90Claude menulis skrip kecil untuk watch, menjalankannya di latar belakang, dan menerima setiap baris output saat tiba. Anda terus bekerja dalam sesi yang sama dan Claude menyela ketika peristiwa tiba. Hentikan monitor dengan meminta Claude untuk membatalkannya atau dengan mengakhiri sesi.

91 

92Monitor menggunakan [aturan izin yang sama seperti Bash](/id/permissions#tool-specific-permission-rules), jadi pola `allow` dan `deny` yang Anda tetapkan untuk Bash berlaku di sini juga. Ini tidak tersedia di Amazon Bedrock, Google Vertex AI, atau Microsoft Foundry. Ini juga tidak tersedia ketika `DISABLE_TELEMETRY` atau `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` diatur.

93 

94Plugin dapat mendeklarasikan monitors yang dimulai secara otomatis ketika plugin aktif, daripada meminta Claude untuk memulainya. Lihat [plugin monitors](/id/plugins-reference#monitors).

95 

96## PowerShell tool

97 

98PowerShell tool memungkinkan Claude menjalankan perintah PowerShell secara native. Di Windows, ini berarti perintah berjalan di PowerShell daripada merutekan melalui Git Bash. Di Windows tanpa Git Bash, tool diaktifkan secara otomatis. Di Windows dengan Git Bash terinstal, tool sedang diluncurkan secara progresif. Di Linux, macOS, dan WSL, tool bersifat opt-in.

99 

100### Aktifkan PowerShell tool

101 

102Atur `CLAUDE_CODE_USE_POWERSHELL_TOOL=1` di lingkungan Anda atau dalam `settings.json`:

103 

104```json theme={null}

105{

106 "env": {

107 "CLAUDE_CODE_USE_POWERSHELL_TOOL": "1"

108 }

109}

110```

111 

112Di Windows, atur variabel ke `0` untuk opt out dari peluncuran. Di Linux, macOS, dan WSL, tool memerlukan PowerShell 7 atau lebih baru: instal `pwsh` dan pastikan itu ada di `PATH` Anda.

113 

114Di Windows, Claude Code secara otomatis mendeteksi `pwsh.exe` untuk PowerShell 7+ dengan fallback ke `powershell.exe` untuk PowerShell 5.1. Ketika tool diaktifkan, Claude memperlakukan PowerShell sebagai shell utama. Bash tool tetap tersedia untuk skrip POSIX ketika Git Bash terinstal.

115 

116### Pemilihan shell dalam pengaturan, hooks, dan skills

117 

118Tiga pengaturan tambahan mengontrol di mana PowerShell digunakan:

119 

120* `"defaultShell": "powershell"` dalam [`settings.json`](/id/settings#available-settings): merutekan perintah `!` interaktif melalui PowerShell. Memerlukan PowerShell tool untuk diaktifkan.

121* `"shell": "powershell"` pada [command hooks](/id/hooks#command-hook-fields) individual: menjalankan hook tersebut dalam PowerShell. Hooks menjalankan PowerShell secara langsung, jadi ini berfungsi terlepas dari `CLAUDE_CODE_USE_POWERSHELL_TOOL`.

122* `shell: powershell` dalam [skill frontmatter](/id/skills#frontmatter-reference): menjalankan blok `` !`command` `` dalam PowerShell. Memerlukan PowerShell tool untuk diaktifkan.

123 

124Perilaku reset direktori kerja sesi utama yang sama yang dijelaskan di bagian Bash tool berlaku untuk perintah PowerShell, termasuk variabel lingkungan `CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR`.

125 

126### Batasan pratinjau

127 

128PowerShell tool memiliki batasan yang diketahui berikut selama pratinjau:

129 

130* Profil PowerShell tidak dimuat

131* Di Windows, sandboxing tidak didukung

132 

133## Periksa tools mana yang tersedia

134 

135Set tools yang tepat bergantung pada penyedia, platform, dan pengaturan Anda. Untuk memeriksa apa yang dimuat dalam sesi yang sedang berjalan, tanyakan Claude secara langsung:

136 

137```text theme={null}

138What tools do you have access to?

139```

140 

141Claude memberikan ringkasan percakapan. Untuk nama tool MCP yang tepat, jalankan `/mcp`.

142 

143## Lihat juga

144 

145* [MCP servers](/id/mcp): tambahkan tools kustom dengan menghubungkan server eksternal

146* [Permissions](/id/permissions): sistem izin, sintaks aturan, dan pola khusus tool

147* [Subagents](/id/sub-agents): konfigurasi akses tool untuk subagent

148* [Hooks](/id/hooks-guide): jalankan perintah kustom sebelum atau sesudah eksekusi tool

troubleshoot-install.md +803 −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 installation and login

6 

7> Perbaiki command not found, PATH, permission, network, dan authentication errors saat menginstal atau masuk ke Claude Code.

8 

9Jika instalasi gagal atau Anda tidak dapat masuk, temukan kesalahan Anda di bawah. Untuk masalah runtime setelah Claude Code berfungsi, lihat [Troubleshooting](/id/troubleshooting). Untuk masalah konfigurasi seperti pengaturan tidak diterapkan atau hooks tidak berfungsi, lihat [Debug your configuration](/id/debug-your-config).

10 

11## Temukan kesalahan Anda

12 

13Cocokkan pesan kesalahan atau gejala yang Anda lihat dengan perbaikan:

14 

15| Apa yang Anda lihat | Solusi |

16| :------------------------------------------------------------------------------------------------------ | :---------------------------------------------------------------------------------------------------------------------- |

17| `command not found: claude` atau `'claude' is not recognized` | [Perbaiki PATH Anda](#command-not-found-claude-after-installation) |

18| `syntax error near unexpected token '<'` | [Install script mengembalikan HTML](#install-script-returns-html-instead-of-a-shell-script) |

19| `curl: (56) Failure writing output to destination` | [Periksa konektivitas atau gunakan installer alternatif](#curl-56-failure-writing-output-to-destination) |

20| `Killed` selama instalasi di Linux | [Tambahkan swap space untuk server dengan memori rendah](#install-killed-on-low-memory-linux-servers) |

21| `TLS connect error` atau `SSL/TLS secure channel` | [Perbarui sertifikat CA](#tls-or-ssl-connection-errors) |

22| `Failed to fetch version` atau tidak dapat menjangkau server download | [Periksa pengaturan jaringan dan proxy](#check-network-connectivity) |

23| `irm is not recognized` atau `&& is not valid` | [Gunakan perintah yang tepat untuk shell Anda](#wrong-install-command-on-windows) |

24| `'bash' is not recognized as the name of a cmdlet` | [Gunakan perintah installer Windows](#wrong-install-command-on-windows) |

25| `Claude Code on Windows requires either Git for Windows (for bash) or PowerShell` | [Instal shell](#claude-code-on-windows-requires-either-git-for-windows-for-bash-or-powershell) |

26| `Claude Code does not support 32-bit Windows` | [Buka Windows PowerShell, bukan entri x86](#claude-code-does-not-support-32-bit-windows) |

27| `The process cannot access the file ... because it is being used by another process` | [Kosongkan folder downloads dan coba lagi](#the-process-cannot-access-the-file-during-windows-install) |

28| `Error loading shared library` | [Binary variant yang salah untuk sistem Anda](#linux-musl-or-glibc-binary-mismatch) |

29| `Illegal instruction` | [Ketidakcocokan arsitektur atau instruction set CPU](#illegal-instruction) |

30| `cannot execute binary file: Exec format error` di WSL | [WSL1 native-binary regression](#exec-format-error-on-wsl1) |

31| PowerShell installer selesai tetapi `claude` tidak ditemukan atau menunjukkan versi lama | [Restart terminal Anda dan verifikasi PATH](#verify-your-path) |

32| `dyld: cannot load`, `dyld: Symbol not found`, atau `Abort trap` di macOS | [Binary incompatibility](#dyld-cannot-load-on-macos) |

33| `Invoke-Expression: Missing argument in parameter list` | [Install script mengembalikan HTML](#install-script-returns-html-instead-of-a-shell-script) |

34| `App unavailable in region` | Claude Code tidak tersedia di negara Anda. Lihat [negara yang didukung](https://www.anthropic.com/supported-countries). |

35| `unable to get local issuer certificate` | [Konfigurasi sertifikat CA perusahaan](#tls-or-ssl-connection-errors) |

36| `OAuth error` atau `403 Forbidden` | [Perbaiki authentication](#login-and-authentication) |

37| `Could not load the default credentials` atau `Could not load credentials from any providers` | [Bedrock, Vertex, atau Foundry credentials](#bedrock-vertex-or-foundry-credentials-not-loading) |

38| `ChainedTokenCredential authentication failed` atau `CredentialUnavailableError` | [Bedrock, Vertex, atau Foundry credentials](#bedrock-vertex-or-foundry-credentials-not-loading) |

39| `API Error: 500`, `529 Overloaded`, `429`, atau 4xx dan 5xx errors lainnya yang tidak tercantum di atas | Lihat [Error reference](/id/errors) |

40 

41Jika masalah Anda tidak tercantum, lakukan pemeriksaan diagnostik di bawah untuk mempersempit penyebabnya.

42 

43<Tip>

44 Jika Anda lebih suka melewati terminal sepenuhnya, [Claude Code Desktop app](/id/desktop-quickstart) memungkinkan Anda menginstal dan menggunakan Claude Code melalui antarmuka grafis. Unduh untuk [macOS](https://claude.ai/api/desktop/darwin/universal/dmg/latest/redirect?utm_source=claude_code\&utm_medium=docs) atau [Windows](https://claude.com/download?utm_source=claude_code\&utm_medium=docs) dan mulai coding tanpa setup command-line apa pun.

45</Tip>

46 

47## Jalankan pemeriksaan diagnostik

48 

49### Periksa konektivitas jaringan

50 

51Installer mengunduh dari `downloads.claude.ai`. Verifikasi Anda dapat menjangkaunya:

52 

53```bash theme={null}

54curl -sI https://downloads.claude.ai/claude-code-releases/latest

55```

56 

57Baris `HTTP/2 200` berarti Anda menjangkau server. Jika Anda tidak melihat output, `Could not resolve host`, atau connection timeout, jaringan Anda memblokir koneksi. Penyebab umum:

58 

59* Corporate firewalls atau proxies memblokir `downloads.claude.ai`

60* Pembatasan jaringan regional: coba VPN atau jaringan alternatif

61* Masalah TLS/SSL: perbarui sertifikat CA sistem Anda, atau periksa apakah `HTTPS_PROXY` dikonfigurasi

62 

63Jika Anda berada di belakang corporate proxy, atur `HTTPS_PROXY` dan `HTTP_PROXY` ke alamat proxy Anda sebelum menginstal. Tanyakan tim IT Anda untuk URL proxy jika Anda tidak mengetahuinya, atau periksa pengaturan proxy browser Anda.

64 

65Contoh ini mengatur kedua variabel proxy, kemudian menjalankan installer melalui proxy Anda:

66 

67<Tabs>

68 <Tab title="macOS/Linux">

69 ```bash theme={null}

70 export HTTP_PROXY=http://proxy.example.com:8080

71 export HTTPS_PROXY=http://proxy.example.com:8080

72 curl -fsSL https://claude.ai/install.sh | bash

73 ```

74 </Tab>

75 

76 <Tab title="Windows PowerShell">

77 ```powershell theme={null}

78 $env:HTTP_PROXY = 'http://proxy.example.com:8080'

79 $env:HTTPS_PROXY = 'http://proxy.example.com:8080'

80 irm https://claude.ai/install.ps1 | iex

81 ```

82 </Tab>

83</Tabs>

84 

85### Verifikasi PATH Anda

86 

87Jika instalasi berhasil tetapi Anda mendapatkan error `command not found` atau `not recognized` saat menjalankan `claude`, direktori instalasi tidak ada di PATH Anda. Shell Anda mencari program di direktori yang tercantum di PATH, dan installer menempatkan `claude` di `~/.local/bin/claude` di macOS/Linux atau `%USERPROFILE%\.local\bin\claude.exe` di Windows.

88 

89Periksa apakah direktori instalasi ada di PATH Anda dengan membuat daftar entri PATH dan memfilter untuk `local/bin`:

90 

91<Tabs>

92 <Tab title="macOS/Linux">

93 ```bash theme={null}

94 echo $PATH | tr ':' '\n' | grep -Fx "$HOME/.local/bin"

95 ```

96 

97 Jika ini mencetak `/Users/you/.local/bin` atau `/home/you/.local/bin`, direktori ada di PATH Anda dan Anda dapat melompat ke [Periksa instalasi yang bertentangan](#check-for-conflicting-installations). Jika tidak ada output, tambahkan ke konfigurasi shell Anda.

98 

99 Untuk Zsh, default di macOS:

100 

101 ```bash theme={null}

102 echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc

103 source ~/.zshrc

104 ```

105 

106 Untuk Bash, default di sebagian besar distribusi Linux:

107 

108 ```bash theme={null}

109 echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc

110 source ~/.bashrc

111 ```

112 

113 Atau, tutup dan buka kembali terminal Anda.

114 

115 Untuk shell lain seperti fish atau Nushell, tambahkan `~/.local/bin` ke PATH Anda menggunakan sintaks konfigurasi shell Anda sendiri, kemudian restart terminal Anda.

116 

117 Verifikasi perbaikan berhasil:

118 

119 ```bash theme={null}

120 claude --version

121 ```

122 </Tab>

123 

124 <Tab title="Windows PowerShell">

125 ```powershell theme={null}

126 $env:PATH -split ';' | Select-String '\.local\\bin'

127 ```

128 

129 Jika tidak ada output, tambahkan direktori instalasi ke User PATH Anda:

130 

131 ```powershell theme={null}

132 $currentPath = [Environment]::GetEnvironmentVariable('PATH', 'User')

133 [Environment]::SetEnvironmentVariable('PATH', "$currentPath;$env:USERPROFILE\.local\bin", 'User')

134 ```

135 

136 Restart terminal Anda agar perubahan berlaku.

137 

138 Verifikasi perbaikan berhasil:

139 

140 ```powershell theme={null}

141 claude --version

142 ```

143 </Tab>

144 

145 <Tab title="Windows CMD">

146 ```batch theme={null}

147 echo %PATH% | findstr /i "local\bin"

148 ```

149 

150 Jika tidak ada output, buka System Settings, buka Environment Variables, dan tambahkan `%USERPROFILE%\.local\bin` ke variabel User PATH Anda. Restart terminal Anda.

151 

152 Verifikasi perbaikan berhasil:

153 

154 ```batch theme={null}

155 claude --version

156 ```

157 </Tab>

158</Tabs>

159 

160### Periksa instalasi yang bertentangan

161 

162Beberapa instalasi Claude Code dapat menyebabkan ketidakcocokan versi atau perilaku yang tidak terduga. Periksa apa yang terinstal:

163 

164<Tabs>

165 <Tab title="macOS/Linux">

166 Buat daftar semua binary `claude` yang ditemukan di PATH Anda:

167 

168 ```bash theme={null}

169 which -a claude

170 ```

171 

172 Jika ini tidak mencetak apa pun, tidak ada `claude` di PATH Anda. Kembali ke [Verifikasi PATH Anda](#verify-your-path).

173 

174 Periksa tiga lokasi tempat binary `claude` dapat berasal. `~/.local/bin/claude` adalah native installer, `~/.claude/local/` adalah legacy local npm install yang dibuat oleh versi Claude Code yang lebih lama, dan npm global list menunjukkan instalasi `-g`:

175 

176 ```bash theme={null}

177 ls -la ~/.local/bin/claude

178 ```

179 

180 ```bash theme={null}

181 ls -la ~/.claude/local/

182 ```

183 

184 ```bash theme={null}

185 npm -g ls @anthropic-ai/claude-code 2>/dev/null

186 ```

187 </Tab>

188 

189 <Tab title="Windows PowerShell">

190 Buat daftar semua binary `claude` yang ditemukan di PATH Anda:

191 

192 ```powershell theme={null}

193 where.exe claude

194 ```

195 

196 Periksa apakah native installer menempatkan binary:

197 

198 ```powershell theme={null}

199 Test-Path "$env:USERPROFILE\.local\bin\claude.exe"

200 ```

201 </Tab>

202</Tabs>

203 

204Jika Anda menemukan beberapa instalasi, pertahankan hanya satu. Native install di `~/.local/bin/claude` di macOS/Linux atau `%USERPROFILE%\.local\bin\claude.exe` di Windows direkomendasikan. Hapus yang lainnya:

205 

206Uninstall npm global install:

207 

208```bash theme={null}

209npm uninstall -g @anthropic-ai/claude-code

210```

211 

212Hapus legacy local npm install:

213 

214```bash theme={null}

215rm -rf ~/.claude/local

216```

217 

218Di Windows, gunakan PowerShell:

219 

220```powershell theme={null}

221Remove-Item -Recurse -Force "$env:USERPROFILE\.claude\local"

222```

223 

224Hapus instalasi Homebrew di macOS. Jika Anda menginstal cask `claude-code@latest`, ganti nama itu:

225 

226```bash theme={null}

227brew uninstall --cask claude-code

228```

229 

230Hapus instalasi WinGet di Windows:

231 

232```powershell theme={null}

233winget uninstall Anthropic.ClaudeCode

234```

235 

236### Periksa izin direktori

237 

238Installer memerlukan akses tulis ke `~/.local/bin/` dan `~/.claude/` di macOS dan Linux. Di Windows lokasi instalasi berada di bawah `%USERPROFILE%`, yang dapat ditulis oleh pengguna Anda secara default, jadi bagian ini jarang berlaku di sana.

239 

240Periksa apakah direktori dapat ditulis:

241 

242```bash theme={null}

243test -w ~/.local/bin && echo "writable" || echo "not writable"

244test -w ~/.claude && echo "writable" || echo "not writable"

245```

246 

247Jika direktori mana pun tidak dapat ditulis, buat direktori instalasi dan atur pengguna Anda sebagai pemilik:

248 

249```bash theme={null}

250sudo mkdir -p ~/.local/bin

251sudo chown -R $(whoami) ~/.local

252```

253 

254### Verifikasi binary berfungsi

255 

256Jika `claude --version` mencetak versi tetapi `claude` crash atau hang pada startup, jalankan pemeriksaan ini untuk mempersempit penyebabnya. Jika `claude --version` mengatakan command not found, buka [Verifikasi PATH Anda](#verify-your-path) terlebih dahulu; perintah di bawah mengasumsikan `claude` ada di PATH Anda.

257 

258Konfirmasi binary ada dan dapat dieksekusi:

259 

260```bash theme={null}

261ls -la "$(command -v claude)"

262```

263 

264Di Windows, gunakan PowerShell:

265 

266```powershell theme={null}

267Get-Command claude | Select-Object Source

268```

269 

270Di Linux, periksa shared libraries yang hilang. Jika `ldd` menunjukkan library yang hilang, Anda mungkin perlu menginstal paket sistem. Di Alpine Linux dan distribusi berbasis musl lainnya, lihat [Alpine Linux setup](/id/setup#alpine-linux-and-musl-based-distributions).

271 

272```bash theme={null}

273ldd "$(command -v claude)" | grep "not found"

274```

275 

276Konfirmasi binary dapat dieksekusi:

277 

278```bash theme={null}

279claude --version

280```

281 

282## Masalah instalasi umum

283 

284Ini adalah masalah instalasi yang paling sering dihadapi dan solusinya.

285 

286### Install script returns HTML instead of a shell script

287 

288Saat menjalankan perintah install, Anda mungkin melihat salah satu error ini:

289 

290```text theme={null}

291bash: line 1: syntax error near unexpected token `<'

292bash: line 1: `<!DOCTYPE html>'

293```

294 

295Di PowerShell, masalah yang sama muncul sebagai:

296 

297```text theme={null}

298Invoke-Expression: Missing argument in parameter list.

299```

300 

301Ini berarti URL instalasi mengembalikan halaman HTML alih-alih script instalasi. Jika halaman HTML mengatakan "App unavailable in region," Claude Code tidak tersedia di negara Anda. Lihat [supported countries](https://www.anthropic.com/supported-countries).

302 

303Sebaliknya, ini dapat terjadi karena masalah jaringan, routing regional, atau gangguan layanan sementara.

304 

305**Solusi:**

306 

3071. **Gunakan metode instalasi alternatif**:

308 

309 Di macOS, instal melalui Homebrew:

310 

311 ```bash theme={null}

312 brew install --cask claude-code

313 ```

314 

315 Di Windows, instal melalui WinGet:

316 

317 ```powershell theme={null}

318 winget install Anthropic.ClaudeCode

319 ```

320 

3212. **Coba lagi setelah beberapa menit**: masalahnya sering bersifat sementara. Tunggu dan coba perintah asli lagi.

322 

323### `command not found: claude` after installation

324 

325Instalasi selesai tetapi `claude` tidak berfungsi. Error yang tepat bervariasi menurut platform:

326 

327| Platform | Pesan error |

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

329| macOS | `zsh: command not found: claude` |

330| Linux | `bash: claude: command not found` |

331| Windows CMD | `'claude' is not recognized as an internal or external command` |

332| PowerShell | `claude : The term 'claude' is not recognized as the name of a cmdlet` |

333 

334Ini berarti direktori instalasi tidak ada di path pencarian shell Anda. Lihat [Verify your PATH](#verify-your-path) untuk perbaikan di setiap platform.

335 

336### `curl: (56) Failure writing output to destination`

337 

338Perintah `curl ... | bash` mengunduh script dan menyalurkannya ke Bash untuk dieksekusi. Error ini berarti koneksi putus sebelum script selesai diunduh. Penyebab umum termasuk gangguan jaringan, download diblokir di tengah aliran, atau batas sumber daya sistem.

339 

340**Solusi:**

341 

3421. **Periksa stabilitas jaringan**: Binary Claude Code dihosting di `downloads.claude.ai`. Uji bahwa Anda dapat menjangkaunya:

343 ```bash theme={null}

344 curl -sI https://downloads.claude.ai/claude-code-releases/latest

345 ```

346 Baris `HTTP/2 200` berarti Anda menjangkau server dan kegagalan asli mungkin bersifat intermiten; coba ulang perintah install. Jika Anda melihat `Could not resolve host` atau connection timeout, jaringan Anda memblokir download.

347 

3482. **Coba metode instalasi alternatif**:

349 

350 Di macOS:

351 

352 ```bash theme={null}

353 brew install --cask claude-code

354 ```

355 

356 Di Windows:

357 

358 ```powershell theme={null}

359 winget install Anthropic.ClaudeCode

360 ```

361 

362### TLS or SSL connection errors

363 

364Error seperti `curl: (35) TLS connect error`, `schannel: next InitializeSecurityContext failed`, atau PowerShell's `Could not establish trust relationship for the SSL/TLS secure channel` menunjukkan kegagalan TLS handshake.

365 

366**Solusi:**

367 

3681. **Perbarui sertifikat CA sistem Anda**:

369 

370 Di Ubuntu/Debian:

371 

372 ```bash theme={null}

373 sudo apt-get update && sudo apt-get install ca-certificates

374 ```

375 

376 Di macOS, curl sistem menggunakan Keychain trust store; memperbarui macOS itu sendiri memperbarui root certificates.

377 

3782. **Di Windows, aktifkan TLS 1.2** di PowerShell sebelum menjalankan installer:

379 ```powershell theme={null}

380 [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

381 irm https://claude.ai/install.ps1 | iex

382 ```

383 

3843. **Periksa gangguan proxy atau firewall**: corporate proxies yang melakukan TLS inspection dapat menyebabkan error ini, termasuk `unable to get local issuer certificate` dan `SELF_SIGNED_CERT_IN_CHAIN`. Untuk langkah instalasi, arahkan curl ke bundle CA perusahaan Anda dengan `--cacert`:

385 ```bash theme={null}

386 curl --cacert /path/to/corporate-ca.pem -fsSL https://claude.ai/install.sh | bash

387 ```

388 Untuk Claude Code itu sendiri setelah diinstal, atur `NODE_EXTRA_CA_CERTS` sehingga permintaan API mempercayai bundle yang sama:

389 ```bash theme={null}

390 export NODE_EXTRA_CA_CERTS=/path/to/corporate-ca.pem

391 ```

392 Tanyakan tim IT Anda untuk file sertifikat jika Anda tidak memilikinya. Anda juga dapat mencoba koneksi langsung untuk mengkonfirmasi proxy adalah penyebabnya.

393 

3944. **Di Windows, lewati pemeriksaan revokasi sertifikat** jika Anda melihat `CRYPT_E_NO_REVOCATION_CHECK (0x80092012)` atau `CRYPT_E_REVOCATION_OFFLINE (0x80092013)`. Ini berarti curl menjangkau server tetapi jaringan Anda memblokir pencarian revokasi sertifikat, yang umum di belakang firewall perusahaan. Tambahkan `--ssl-revoke-best-effort` ke perintah install:

395 ```batch theme={null}

396 curl --ssl-revoke-best-effort -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd

397 ```

398 Atau, instal dengan `winget install Anthropic.ClaudeCode`, yang menghindari curl sepenuhnya.

399 

400### `Failed to fetch version from downloads.claude.ai`

401 

402Installer tidak dapat menjangkau server download. Ini biasanya berarti `downloads.claude.ai` diblokir di jaringan Anda.

403 

404**Solusi:**

405 

4061. **Uji konektivitas secara langsung**:

407 ```bash theme={null}

408 curl -sI https://downloads.claude.ai/claude-code-releases/latest

409 ```

410 

4112. **Jika di belakang proxy**, atur `HTTPS_PROXY` sehingga installer dapat merutekan melaluinya. Lihat [proxy configuration](/id/network-config#proxy-configuration) untuk detail.

412 ```bash theme={null}

413 export HTTPS_PROXY=http://proxy.example.com:8080

414 curl -fsSL https://claude.ai/install.sh | bash

415 ```

416 

4173. **Jika di jaringan terbatas**, coba jaringan berbeda atau VPN, atau gunakan metode instalasi alternatif:

418 

419 Di macOS:

420 

421 ```bash theme={null}

422 brew install --cask claude-code

423 ```

424 

425 Di Windows:

426 

427 ```powershell theme={null}

428 winget install Anthropic.ClaudeCode

429 ```

430 

431### Wrong install command on Windows

432 

433Jika Anda melihat `'irm' is not recognized`, `The token '&&' is not valid`, atau `'bash' is not recognized as the name of a cmdlet`, Anda menyalin perintah install untuk shell atau sistem operasi yang berbeda.

434 

435* **`irm` not recognized**: Anda berada di CMD, bukan PowerShell. Anda memiliki dua opsi:

436 

437 Buka PowerShell dengan mencari "PowerShell" di Start menu, kemudian jalankan perintah install asli:

438 

439 ```powershell theme={null}

440 irm https://claude.ai/install.ps1 | iex

441 ```

442 

443 Atau tetap di CMD dan gunakan CMD installer sebagai gantinya:

444 

445 ```batch theme={null}

446 curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd

447 ```

448 

449* **`&&` not valid**: Anda berada di PowerShell tetapi menjalankan perintah CMD installer. Gunakan PowerShell installer:

450 ```powershell theme={null}

451 irm https://claude.ai/install.ps1 | iex

452 ```

453 

454* **`bash` not recognized**: Anda menjalankan installer macOS/Linux di Windows. Gunakan PowerShell installer sebagai gantinya:

455 ```powershell theme={null}

456 irm https://claude.ai/install.ps1 | iex

457 ```

458 

459### `The process cannot access the file` during Windows install

460 

461Jika PowerShell installer gagal dengan `Failed to download binary: The process cannot access the file ... because it is being used by another process`, installer tidak dapat menulis ke `%USERPROFILE%\.claude\downloads`. Ini biasanya berarti upaya install sebelumnya masih berjalan, atau software antivirus memindai binary yang sebagian diunduh di folder itu.

462 

463Tutup jendela PowerShell lain yang menjalankan installer dan tunggu pemindaian antivirus melepaskan file. Kemudian hapus folder downloads dan jalankan installer lagi:

464 

465```powershell theme={null}

466Remove-Item -Recurse -Force "$env:USERPROFILE\.claude\downloads"

467irm https://claude.ai/install.ps1 | iex

468```

469 

470### Install killed on low-memory Linux servers

471 

472Jika Anda melihat `Killed` selama instalasi di VPS atau cloud instance:

473 

474```text theme={null}

475Setting up Claude Code...

476Installing Claude Code native build latest...

477bash: line 142: 34803 Killed "$binary_path" install ${TARGET:+"$TARGET"}

478```

479 

480Linux OOM killer menghentikan proses karena sistem kehabisan memori. Claude Code memerlukan setidaknya 4 GB RAM yang tersedia.

481 

482**Solusi:**

483 

4841. **Tambahkan swap space** jika server Anda memiliki RAM terbatas. Swap menggunakan ruang disk sebagai memori overflow, memungkinkan instalasi selesai bahkan dengan RAM fisik rendah.

485 

486 Buat file swap 2 GB dan aktifkan:

487 

488 ```bash theme={null}

489 sudo fallocate -l 2G /swapfile

490 sudo chmod 600 /swapfile

491 sudo mkswap /swapfile

492 sudo swapon /swapfile

493 ```

494 

495 Kemudian coba ulang instalasi:

496 

497 ```bash theme={null}

498 curl -fsSL https://claude.ai/install.sh | bash

499 ```

500 

5012. **Tutup proses lain** untuk membebaskan memori sebelum menginstal.

502 

5033. **Gunakan instance yang lebih besar** jika memungkinkan. Claude Code memerlukan setidaknya 4 GB RAM.

504 

505### Install hangs in Docker

506 

507Saat menginstal Claude Code di Docker container, menginstal sebagai root ke `/` dapat menyebabkan hang.

508 

509**Solusi:**

510 

5111. **Atur working directory** sebelum menjalankan installer. Saat dijalankan dari `/`, installer memindai seluruh filesystem, yang menyebabkan penggunaan memori berlebihan. Mengatur `WORKDIR` membatasi pemindaian ke direktori kecil:

512 ```dockerfile theme={null}

513 WORKDIR /tmp

514 RUN curl -fsSL https://claude.ai/install.sh | bash

515 ```

516 

5172. **Tingkatkan batas memori Docker** jika menggunakan Docker Desktop:

518 ```bash theme={null}

519 docker build --memory=4g .

520 ```

521 

522### Claude Desktop overrides the `claude` command on Windows

523 

524Jika Anda menginstal versi Claude Desktop yang lebih lama, mungkin mendaftarkan `Claude.exe` di direktori `WindowsApps` yang mengambil prioritas PATH di atas Claude Code CLI. Menjalankan `claude` membuka Desktop app alih-alih CLI.

525 

526Perbarui Claude Desktop ke versi terbaru untuk memperbaiki masalah ini.

527 

528### Claude Code on Windows requires either Git for Windows (for bash) or PowerShell

529 

530Claude Code di Windows native memerlukan setidaknya satu shell: baik [Git for Windows](https://git-scm.com/downloads/win) untuk Bash, atau PowerShell. Saat tidak ada yang ditemukan, error ini muncul saat startup. Jika hanya PowerShell yang ditemukan, Claude Code menggunakan PowerShell tool alih-alih Bash.

531 

532**Jika tidak ada yang terinstal**, instal salah satu:

533 

534* Git for Windows: unduh dari [git-scm.com/downloads/win](https://git-scm.com/downloads/win). Selama setup, pilih "Add to PATH." Restart terminal Anda setelah menginstal.

535* PowerShell 7: unduh dari [aka.ms/powershell](https://aka.ms/powershell).

536 

537**Jika Git sudah terinstal** tetapi Claude Code tidak dapat menemukannya, atur path di [settings.json file](/id/settings) Anda:

538 

539```json theme={null}

540{

541 "env": {

542 "CLAUDE_CODE_GIT_BASH_PATH": "C:\\Program Files\\Git\\bin\\bash.exe"

543 }

544}

545```

546 

547Jika Git Anda diinstal di tempat lain, temukan path dengan menjalankan `where.exe git` di PowerShell dan gunakan path `bin\bash.exe` dari direktori itu.

548 

549### Claude Code does not support 32-bit Windows

550 

551Windows menyertakan dua entri PowerShell di Start menu: `Windows PowerShell` dan `Windows PowerShell (x86)`. Entri x86 berjalan sebagai proses 32-bit dan memicu error ini bahkan di mesin 64-bit. Untuk memeriksa kasus mana yang Anda alami, jalankan ini di jendela yang sama yang menghasilkan error:

552 

553```powershell theme={null}

554[Environment]::Is64BitOperatingSystem

555```

556 

557Jika ini mencetak `True`, sistem operasi Anda baik-baik saja. Tutup jendela, buka `Windows PowerShell` tanpa suffix x86, dan jalankan perintah install lagi.

558 

559Jika ini mencetak `False`, Anda berada di edisi Windows 32-bit. Claude Code memerlukan sistem operasi 64-bit. Lihat [system requirements](/id/setup#system-requirements).

560 

561### Linux musl or glibc binary mismatch

562 

563Jika Anda melihat error tentang shared libraries yang hilang seperti `libstdc++.so.6` atau `libgcc_s.so.1` setelah instalasi, installer mungkin telah mengunduh binary variant yang salah untuk sistem Anda.

564 

565```text theme={null}

566Error loading shared library libstdc++.so.6: No such file or directory

567```

568 

569Ini dapat terjadi pada sistem berbasis glibc yang memiliki paket cross-compilation musl terinstal, menyebabkan installer salah mendeteksi sistem sebagai musl.

570 

571**Solusi:**

572 

5731. **Periksa libc mana yang digunakan sistem Anda**:

574 ```bash theme={null}

575 ldd --version 2>&1 | head -1

576 ```

577 Output yang menyebutkan `GNU libc` atau `GLIBC` berarti glibc. Output yang menyebutkan `musl` berarti musl.

578 

5792. **Jika Anda berada di glibc tetapi mendapat binary musl**, hapus instalasi dan instal ulang. Anda juga dapat secara manual mengunduh binary yang benar menggunakan manifest di `https://downloads.claude.ai/claude-code-releases/{VERSION}/manifest.json`. File [GitHub issue](https://github.com/anthropics/claude-code/issues) dengan output `ldd --version` dan `ls /lib/libc.musl*`.

580 

5813. **Jika Anda benar-benar di musl**, seperti Alpine Linux, instal paket yang diperlukan:

582 ```bash theme={null}

583 apk add libgcc libstdc++ ripgrep

584 ```

585 

586### `Illegal instruction`

587 

588Jika menjalankan `claude` atau installer mencetak `Illegal instruction`, binary native menggunakan CPU instructions yang processor Anda tidak dukung. Ada dua penyebab yang berbeda.

589 

590**Architecture mismatch.** Installer mengunduh binary yang salah, misalnya x86 di server ARM. Periksa dengan `uname -m` di macOS atau Linux, atau `$env:PROCESSOR_ARCHITECTURE` di PowerShell. Jika hasilnya tidak cocok dengan binary yang Anda terima, [file GitHub issue](https://github.com/anthropics/claude-code/issues) dengan output.

591 

592**Missing AVX instruction set.** Jika arsitektur Anda benar tetapi Anda masih melihat `Illegal instruction`, CPU Anda mungkin tidak memiliki AVX atau instruction lain yang binary perlukan. Ini mempengaruhi kira-kira processor Intel dan AMD pre-2013, dan virtual machines di mana hypervisor tidak melewatkan AVX ke guest.

593 

594Di VPS atau VM, jalankan `grep -m1 -ow avx /proc/cpuinfo`; hasil kosong berarti AVX tidak tersedia untuk guest.

595 

596Tidak ada native-binary workaround; track [issue #50384](https://github.com/anthropics/claude-code/issues/50384) untuk status, dan sertakan model CPU Anda dari `grep -m1 "model name" /proc/cpuinfo` di Linux atau `sysctl -n machdep.cpu.brand_string` di macOS saat melaporkan.

597 

598Metode instalasi alternatif mengunduh binary native yang sama dan tidak akan menyelesaikan penyebab apa pun.

599 

600### `dyld: cannot load` on macOS

601 

602Jika Anda melihat `dyld: cannot load`, `dyld: Symbol not found`, atau `Abort trap: 6` selama instalasi, binary tidak kompatibel dengan versi macOS atau hardware Anda.

603 

604```text theme={null}

605dyld: cannot load 'claude-2.1.42-darwin-x64' (load command 0x80000034 is unknown)

606Abort trap: 6

607```

608 

609Error `Symbol not found` yang mereferensikan `libicucore` juga menunjukkan versi macOS Anda lebih lama dari yang binary dukung:

610 

611```text theme={null}

612dyld: Symbol not found: _ubrk_clone

613 Referenced from: claude-darwin-x64 (which was built for Mac OS X 13.0)

614 Expected in: /usr/lib/libicucore.A.dylib

615```

616 

617**Solusi:**

618 

6191. **Periksa versi macOS Anda**: Claude Code memerlukan macOS 13.0 atau lebih baru. Buka menu Apple dan pilih About This Mac untuk memeriksa versi Anda.

620 

6212. **Perbarui macOS** jika Anda berada di versi yang lebih lama. Binary menggunakan load commands dan system libraries yang versi macOS yang lebih lama tidak dukung. Metode instalasi alternatif seperti Homebrew mengunduh binary yang sama dan tidak akan menyelesaikan error ini.

622 

623### `Exec format error` on WSL1

624 

625Jika menjalankan `claude` di WSL mencetak `cannot execute binary file: Exec format error`, Anda berada di WSL1 dan mengalami native-binary regression yang dikenal yang dilacak di [issue #38788](https://github.com/anthropics/claude-code/issues/38788). Program headers binary berubah dengan cara yang WSL1's loader tidak dapat menangani.

626 

627Perbaikan paling bersih adalah mengonversi distribusi Anda ke WSL2 dari PowerShell:

628 

629```powershell theme={null}

630wsl --set-version <DistroName> 2

631```

632 

633Jika Anda perlu tetap di WSL1, panggil binary melalui dynamic linker. Tambahkan fungsi ini ke `~/.bashrc` di dalam WSL, ganti path jika direktori home Anda berbeda:

634 

635```bash theme={null}

636claude() {

637 /lib64/ld-linux-x86-64.so.2 "$(readlink -f "$HOME/.local/bin/claude")" "$@"

638}

639```

640 

641Kemudian jalankan `source ~/.bashrc` dan coba ulang `claude`.

642 

643### npm install errors in WSL

644 

645Masalah ini berlaku jika Anda menginstal Claude Code dengan `npm install -g` di dalam WSL. Jika Anda menggunakan [native installer](/id/setup), lewati bagian ini.

646 

647**OS atau platform detection issues.** Jika npm melaporkan ketidakcocokan platform selama instalasi, WSL mungkin mengambil Windows `npm`. Jalankan `npm config set os linux` terlebih dahulu, kemudian instal dengan `npm install -g @anthropic-ai/claude-code --force`. Jangan gunakan `sudo`.

648 

649**`exec: node: not found` saat menjalankan `claude`.** Lingkungan WSL Anda mungkin menggunakan instalasi Windows Node.js. Konfirmasi dengan `which npm` dan `which node`: path yang dimulai dengan `/mnt/c/` adalah binary Windows, sementara path Linux dimulai dengan `/usr/`. Untuk memperbaiki ini, instal Node melalui package manager distribusi Linux Anda atau melalui [`nvm`](https://github.com/nvm-sh/nvm).

650 

651**nvm version conflicts.** Jika Anda memiliki nvm terinstal di WSL dan Windows, beralih versi Node di WSL mungkin rusak karena WSL mengimpor Windows PATH secara default dan Windows nvm mengambil prioritas. Penyebab paling umum adalah nvm tidak dimuat di shell Anda. Tambahkan nvm loader ke `~/.bashrc` atau `~/.zshrc`:

652 

653```bash theme={null}

654export NVM_DIR="$HOME/.nvm"

655[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

656[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"

657```

658 

659Atau muat di sesi saat ini:

660 

661```bash theme={null}

662source ~/.nvm/nvm.sh

663```

664 

665Jika nvm dimuat tetapi path Windows masih mengambil prioritas, tambahkan path Node Linux Anda secara eksplisit:

666 

667```bash theme={null}

668export PATH="$HOME/.nvm/versions/node/$(node -v)/bin:$PATH"

669```

670 

671<Warning>

672 Hindari menonaktifkan Windows PATH importing melalui `appendWindowsPath = false` karena ini merusak kemampuan untuk memanggil Windows executables dari WSL. Demikian pula, hindari menguninstall Node.js dari Windows jika Anda menggunakannya untuk pengembangan Windows.

673</Warning>

674 

675### Permission errors during installation

676 

677Jika native installer gagal dengan permission errors, direktori target mungkin tidak dapat ditulis. Lihat [Check directory permissions](#check-directory-permissions).

678 

679Jika Anda sebelumnya menginstal dengan npm dan mengalami npm-specific permission errors, beralih ke native installer:

680 

681```bash theme={null}

682curl -fsSL https://claude.ai/install.sh | bash

683```

684 

685### Native binary not found after npm install

686 

687Paket npm `@anthropic-ai/claude-code` menarik binary native melalui per-platform optional dependency seperti `@anthropic-ai/claude-code-darwin-arm64`. Jika menjalankan `claude` setelah install mencetak `Could not find native binary package "@anthropic-ai/claude-code-<platform>"`, periksa penyebab berikut:

688 

689* **Optional dependencies dinonaktifkan.** Hapus `--omit=optional` dari perintah npm install Anda, `--no-optional` dari pnpm, atau `--ignore-optional` dari yarn, dan periksa bahwa `.npmrc` tidak mengatur `optional=false`. Kemudian instal ulang. Binary native disampaikan hanya sebagai optional dependency, jadi tidak ada JavaScript fallback jika dilewati.

690* **Platform tidak didukung.** Binary prebuilt dipublikasikan untuk `darwin-arm64`, `darwin-x64`, `linux-x64`, `linux-arm64`, `linux-x64-musl`, `linux-arm64-musl`, `win32-x64`, dan `win32-arm64`. Claude Code tidak mengirimkan binary untuk platform lain; lihat [system requirements](/id/setup#system-requirements).

691* **Corporate npm mirror kehilangan paket platform.** Pastikan registry Anda mencerminkan semua delapan paket `@anthropic-ai/claude-code-*` platform selain paket meta.

692 

693Menginstal dengan `--ignore-scripts` tidak memicu error ini. Langkah postinstall yang menghubungkan binary ke tempat dilewati, jadi Claude Code kembali ke wrapper yang menemukan dan menjalankan binary platform di setiap peluncuran. Ini berfungsi tetapi dimulai lebih lambat; instal ulang dengan scripts diaktifkan untuk eksekusi langsung.

694 

695## Login and authentication

696 

697Bagian ini mengatasi kegagalan login, OAuth errors, dan masalah token.

698 

699### Reset your login

700 

701Saat login gagal dan penyebabnya tidak jelas, re-authentication yang bersih menyelesaikan sebagian besar kasus:

702 

7031. Jalankan `/logout` untuk sign out sepenuhnya

7042. Tutup Claude Code

7053. Restart dengan `claude` dan selesaikan proses authentication lagi

706 

707Jika browser tidak terbuka secara otomatis selama login, tekan `c` untuk menyalin OAuth URL ke clipboard Anda, kemudian tempel ke browser secara manual. Ini juga berfungsi saat URL membungkus di seluruh baris di terminal sempit atau SSH dan tidak dapat diklik langsung.

708 

709### OAuth error: Invalid code

710 

711Jika Anda melihat `OAuth error: Invalid code. Please make sure the full code was copied`, kode login kedaluwarsa atau terpotong selama copy-paste.

712 

713**Solusi:**

714 

715* Tekan Enter untuk coba ulang dan selesaikan login dengan cepat setelah browser terbuka

716* Ketik `c` untuk menyalin URL lengkap jika browser tidak terbuka secara otomatis

717* Jika menggunakan sesi remote/SSH, browser mungkin terbuka di mesin yang salah. Salin URL yang ditampilkan di terminal dan buka di browser lokal Anda sebagai gantinya.

718 

719### 403 Forbidden after login

720 

721Jika Anda melihat `API Error: 403 {"error":{"type":"forbidden","message":"Request not allowed"}}` setelah login:

722 

723* **Claude Pro/Max users**: verifikasi subscription Anda aktif di [claude.ai/settings](https://claude.ai/settings)

724* **Anthropic Console users**: konfirmasi akun Anda memiliki role "Claude Code" atau "Developer". Admins menetapkan ini di Anthropic Console di bawah Settings → Members.

725* **Di belakang proxy**: corporate proxies dapat mengganggu permintaan API. Lihat [network configuration](/id/network-config) untuk setup proxy.

726 

727### This organization has been disabled with an active subscription

728 

729Jika Anda melihat `API Error: 400 ... "This organization has been disabled"` meskipun memiliki subscription Claude aktif, variabel environment `ANTHROPIC_API_KEY` menimpa subscription Anda. Ini biasanya terjadi saat API key lama dari employer atau project sebelumnya masih diatur di shell profile Anda.

730 

731Saat `ANTHROPIC_API_KEY` ada dan Anda telah menyetujuinya, Claude Code menggunakan key itu alih-alih OAuth credentials subscription Anda. Dalam mode non-interactive dengan flag `-p`, key selalu digunakan saat ada. Lihat [authentication precedence](/id/authentication#authentication-precedence) untuk urutan resolusi lengkap.

732 

733Untuk menggunakan subscription Anda sebagai gantinya, unset variabel environment dan hapus dari shell profile Anda:

734 

735```bash theme={null}

736unset ANTHROPIC_API_KEY

737claude

738```

739 

740Periksa `~/.zshrc`, `~/.bashrc`, atau `~/.profile` untuk baris `export ANTHROPIC_API_KEY=...` dan hapus untuk membuat perubahan permanen. Di Windows, periksa PowerShell profile Anda di `$PROFILE` dan User environment variables Anda untuk `ANTHROPIC_API_KEY`. Jalankan `/status` di dalam Claude Code untuk mengkonfirmasi metode authentication mana yang aktif.

741 

742### OAuth login fails in WSL2, SSH, or containers

743 

744Saat Claude Code berjalan di WSL2, pada mesin remote melalui SSH, atau di dalam container, browser biasanya terbuka di host yang berbeda dan redirectnya tidak dapat menjangkau server callback lokal Claude Code. Setelah Anda sign in, browser menampilkan kode login alih-alih redirect kembali secara otomatis. Tempel kode itu ke terminal di prompt `Paste code here if prompted` untuk menyelesaikan login.

745 

746Jika browser tidak terbuka sama sekali dari WSL2, atur variabel environment `BROWSER` ke path Windows browser Anda:

747 

748```bash theme={null}

749export BROWSER="/mnt/c/Program Files/Google/Chrome/Application/chrome.exe"

750claude

751```

752 

753Atau, tekan `c` di interactive login prompt untuk menyalin OAuth URL, atau salin URL yang `claude auth login` cetak, dan buka di browser di mesin lokal Anda.

754 

755Jika menempel kode ke interactive prompt tidak melakukan apa pun, binding paste terminal Anda mungkin tidak menjangkau input field. Coba shortcut paste alternatif terminal Anda, sering kali right-click atau Shift+Insert di Windows Terminal, atau gunakan `claude auth login` sebagai gantinya, yang membaca kode yang ditempel dari standard input:

756 

757```bash theme={null}

758claude auth login

759```

760 

761Fallback ini juga berlaku di Windows native atau terminal apa pun di mana menempel ke interactive prompt gagal.

762 

763### Not logged in or token expired

764 

765Jika Claude Code meminta Anda untuk login lagi setelah sesi, OAuth token Anda mungkin telah kedaluwarsa.

766 

767Jalankan `/login` untuk re-authenticate. Jika ini terjadi sering, periksa bahwa jam sistem Anda akurat, karena validasi token bergantung pada timestamp yang benar.

768 

769Di macOS, login juga dapat gagal saat Keychain terkunci atau passwordnya tidak sinkron dengan password akun Anda, yang mencegah Claude Code menyimpan credentials. Jalankan `claude doctor` untuk memeriksa akses Keychain. Untuk membuka Keychain secara manual, jalankan `security unlock-keychain ~/Library/Keychains/login.keychain-db`. Jika membuka tidak membantu, buka Keychain Access, pilih keychain `login`, dan pilih Edit > Change Password for Keychain "login" untuk menyinkronkannya kembali dengan password akun Anda.

770 

771### Bedrock, Vertex, or Foundry credentials not loading

772 

773Jika Anda mengkonfigurasi Claude Code untuk menggunakan cloud provider dan melihat `Could not load credentials from any providers` di Bedrock, `Could not load the default credentials` di Vertex, atau `ChainedTokenCredential authentication failed` di Foundry, cloud provider CLI Anda mungkin tidak authenticated di shell saat ini.

774 

775Untuk Bedrock, konfirmasi AWS credentials Anda valid:

776 

777```bash theme={null}

778aws sts get-caller-identity

779```

780 

781Untuk Vertex AI, konfirmasi `ANTHROPIC_VERTEX_PROJECT_ID` dan `CLOUD_ML_REGION` diatur di shell Anda, kemudian atur application default credentials:

782 

783```bash theme={null}

784gcloud auth application-default login

785```

786 

787Untuk Microsoft Foundry, konfirmasi `ANTHROPIC_FOUNDRY_API_KEY` diatur, atau sign in dengan Azure CLI sehingga default credential chain dapat menemukan akun Anda:

788 

789```bash theme={null}

790az login

791```

792 

793Jika credentials berfungsi di terminal Anda tetapi tidak di VS Code atau JetBrains extension, proses IDE mungkin tidak mewarisi environment shell Anda. Atur variabel environment provider di pengaturan IDE itu sendiri, atau luncurkan IDE dari terminal di mana mereka sudah diekspor.

794 

795Lihat [Amazon Bedrock](/id/amazon-bedrock), [Google Vertex AI](/id/google-vertex-ai), atau [Microsoft Foundry](/id/microsoft-foundry) untuk setup provider lengkap.

796 

797## Still stuck

798 

799Jika tidak ada di atas yang menyelesaikan masalah Anda:

800 

8011. Periksa [GitHub repository](https://github.com/anthropics/claude-code/issues) untuk known issues, atau buka yang baru dengan sistem operasi Anda, perintah install yang Anda jalankan, dan output error lengkap

8022. Jika `claude --version` berfungsi tetapi sesuatu yang lain salah, jalankan `claude doctor` untuk laporan diagnostik otomatis

8033. Jika Anda dapat memulai sesi, gunakan `/feedback` di dalam Claude Code untuk melaporkan masalah

troubleshooting.md +121 −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# Troubleshooting

6 

7> Perbaiki penggunaan CPU atau memori yang tinggi, hang, thrashing auto-compact, dan masalah pencarian di Claude Code, dan temukan halaman yang tepat untuk masalah lainnya.

8 

9Halaman ini mencakup masalah kinerja, stabilitas, dan pencarian setelah Claude Code berjalan. Untuk masalah lainnya, mulai dengan halaman yang sesuai dengan tempat Anda terjebak:

10 

11| Gejala | Buka |

12| :------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------- |

13| `command not found`, instalasi gagal, masalah PATH, `EACCES`, kesalahan TLS | [Troubleshoot installation and login](/id/troubleshoot-install) |

14| Loop login, kesalahan OAuth, `403 Forbidden`, "organization disabled", kredensial Bedrock/Vertex/Foundry | [Troubleshoot installation and login](/id/troubleshoot-install#login-and-authentication) |

15| Pengaturan tidak diterapkan, hooks tidak berfungsi, server MCP tidak dimuat | [Debug your configuration](/id/debug-your-config) |

16| `API Error: 5xx`, `529 Overloaded`, `429`, kesalahan validasi permintaan | [Error reference](/id/errors) |

17| `model not found` atau `you may not have access to it` | [Error reference](/id/errors#theres-an-issue-with-the-selected-model) |

18| Ekstensi VS Code tidak terhubung atau tidak mendeteksi Claude | [VS Code integration](/id/vs-code#fix-common-issues) |

19| Plugin JetBrains atau IDE tidak terdeteksi | [JetBrains integration](/id/jetbrains#troubleshooting) |

20| CPU atau memori tinggi, respons lambat, hang, pencarian tidak menemukan file | [Performance and stability](#performance-and-stability) di bawah |

21 

22Jika Anda tidak yakin mana yang berlaku, jalankan `/doctor` di dalam Claude Code untuk pemeriksaan otomatis instalasi, pengaturan, server MCP, dan penggunaan konteks Anda. Jika `claude` tidak akan memulai sama sekali, jalankan `claude doctor` dari shell Anda sebagai gantinya.

23 

24## Performance and stability

25 

26Bagian-bagian ini mencakup masalah yang terkait dengan penggunaan sumber daya, responsivitas, dan perilaku pencarian.

27 

28### High CPU or memory usage

29 

30Claude Code dirancang untuk bekerja dengan sebagian besar lingkungan pengembangan, tetapi dapat mengonsumsi sumber daya signifikan saat memproses codebase besar. Jika Anda mengalami masalah kinerja:

31 

321. Gunakan `/compact` secara teratur untuk mengurangi ukuran konteks

332. Tutup dan mulai ulang Claude Code di antara tugas-tugas besar

343. Pertimbangkan menambahkan direktori build besar ke file `.gitignore` Anda

35 

36Jika penggunaan memori tetap tinggi setelah langkah-langkah ini, jalankan `/heapdump` untuk menulis snapshot heap JavaScript dan rincian memori ke `~/Desktop`. Di Linux tanpa folder Desktop, file ditulis ke direktori home Anda.

37 

38Rincian menunjukkan resident set size, JS heap, array buffers, dan memori native yang tidak terhitung, yang membantu mengidentifikasi apakah pertumbuhan ada di objek JavaScript atau di kode native. Untuk memeriksa retainers, buka file `.heapsnapshot` di Chrome DevTools di bawah Memory → Load. Lampirkan kedua file saat melaporkan masalah memori di [GitHub](https://github.com/anthropics/claude-code/issues).

39 

40### Auto-compaction stops with a thrashing error

41 

42Jika Anda melihat `Autocompact is thrashing: the context refilled to the limit...`, automatic compaction berhasil tetapi file atau output alat segera mengisi ulang jendela konteks beberapa kali berturut-turut. Claude Code berhenti mencoba ulang untuk menghindari pemborosan panggilan API pada loop yang tidak membuat kemajuan.

43 

44Untuk pulih:

45 

461. Minta Claude membaca file yang terlalu besar dalam potongan yang lebih kecil, seperti rentang baris tertentu atau fungsi, alih-alih seluruh file

472. Jalankan `/compact` dengan fokus yang menjatuhkan output besar, misalnya `/compact keep only the plan and the diff`

483. Pindahkan pekerjaan file besar ke [subagent](/id/sub-agents) sehingga berjalan di jendela konteks terpisah

494. Jalankan `/clear` jika percakapan sebelumnya tidak lagi diperlukan

50 

51### Command hangs or freezes

52 

53Jika Claude Code tampak tidak responsif:

54 

551. Tekan Ctrl+C untuk mencoba membatalkan operasi saat ini

562. Jika tidak responsif, Anda mungkin perlu menutup terminal dan memulai ulang

57 

58Memulai ulang tidak kehilangan percakapan Anda. Jalankan `claude --resume` di direktori yang sama untuk melanjutkan sesi.

59 

60### Search and discovery issues

61 

62Jika Search tool, `@file` mentions, custom agents, atau custom skills tidak menemukan file, binary `ripgrep` bundel mungkin tidak berjalan di sistem Anda. Instal paket `ripgrep` platform Anda dan beri tahu Claude Code untuk menggunakannya sebagai gantinya:

63 

64<Tabs>

65 <Tab title="macOS">

66 ```bash theme={null}

67 brew install ripgrep

68 ```

69 </Tab>

70 

71 <Tab title="Ubuntu/Debian">

72 ```bash theme={null}

73 sudo apt install ripgrep

74 ```

75 </Tab>

76 

77 <Tab title="Alpine">

78 ```bash theme={null}

79 apk add ripgrep

80 ```

81 </Tab>

82 

83 <Tab title="Arch">

84 ```bash theme={null}

85 pacman -S ripgrep

86 ```

87 </Tab>

88 

89 <Tab title="Windows">

90 ```powershell theme={null}

91 winget install BurntSushi.ripgrep.MSVC

92 ```

93 </Tab>

94</Tabs>

95 

96Kemudian atur `USE_BUILTIN_RIPGREP=0` di [environment](/id/env-vars) Anda.

97 

98### Slow or incomplete search results on WSL

99 

100Penalti kinerja pembacaan disk saat [bekerja lintas filesystem di WSL](https://learn.microsoft.com/en-us/windows/wsl/filesystems) dapat menghasilkan kecocokan yang lebih sedikit dari yang diharapkan saat menggunakan Claude Code di WSL. Pencarian masih berfungsi, tetapi mengembalikan hasil lebih sedikit daripada di filesystem native.

101 

102<Note>

103 `/doctor` akan menunjukkan Search sebagai OK dalam kasus ini.

104</Note>

105 

106**Solusi:**

107 

1081. **Kirimkan pencarian yang lebih spesifik**: kurangi jumlah file yang dicari dengan menentukan direktori atau jenis file: "Search for JWT validation logic in the auth-service package" atau "Find use of md5 hash in JS files".

109 

1102. **Pindahkan proyek ke filesystem Linux**: jika memungkinkan, pastikan proyek Anda berada di filesystem Linux (`/home/`) daripada filesystem Windows (`/mnt/c/`).

111 

1123. **Gunakan Windows native sebagai gantinya**: pertimbangkan menjalankan Claude Code secara native di Windows alih-alih melalui WSL, untuk kinerja filesystem yang lebih baik.

113 

114## Get more help

115 

116Jika Anda mengalami masalah yang tidak tercakup di sini:

117 

1181. Jalankan `/doctor` untuk memeriksa kesehatan instalasi, validitas pengaturan, konfigurasi MCP, dan penggunaan konteks dalam satu kali jalan

1192. Gunakan perintah `/feedback` dalam Claude Code untuk melaporkan masalah langsung ke Anthropic

1203. Periksa [GitHub repository](https://github.com/anthropics/claude-code) untuk masalah yang diketahui

1214. Tanyakan Claude secara langsung tentang kemampuan dan fiturnya. Claude memiliki akses bawaan ke dokumentasinya.

ultraplan.md +84 −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# Rencanakan di cloud dengan ultraplan

6 

7> Mulai rencana dari CLI Anda, buat draftnya di Claude Code di web, kemudian jalankan secara jarak jauh atau kembali di terminal Anda

8 

9<Note>

10 Ultraplan sedang dalam penelitian preview dan memerlukan Claude Code v2.1.91 atau lebih baru. Perilaku dan kemampuan dapat berubah berdasarkan umpan balik.

11</Note>

12 

13Ultraplan menyerahkan tugas perencanaan dari CLI lokal Anda ke sesi [Claude Code di web](/id/claude-code-on-the-web) yang berjalan dalam [plan mode](/id/permission-modes#analyze-before-you-edit-with-plan-mode). Claude membuat draft rencana di cloud sementara Anda terus bekerja di terminal Anda. Ketika rencana siap, Anda membukanya di browser untuk memberikan komentar pada bagian tertentu, meminta revisi, dan memilih di mana akan menjalankannya.

14 

15Ini berguna ketika Anda menginginkan permukaan review yang lebih kaya daripada yang ditawarkan terminal:

16 

17* **Umpan balik yang ditargetkan**: berikan komentar pada bagian individual rencana alih-alih membalas semuanya

18* **Drafting tanpa tangan**: rencana dihasilkan dari jarak jauh, sehingga terminal Anda tetap bebas untuk pekerjaan lain

19* **Eksekusi yang fleksibel**: setujui rencana untuk dijalankan di web dan buka pull request, atau kirimkan kembali ke terminal Anda

20 

21Ultraplan memerlukan akun [Claude Code di web](/id/claude-code-on-the-web) dan repositori GitHub. Karena berjalan pada infrastruktur cloud Anthropic, tidak tersedia saat menggunakan Amazon Bedrock, Google Cloud Vertex AI, atau Microsoft Foundry. Sesi cloud berjalan di [cloud environment](/id/claude-code-on-the-web#the-cloud-environment) default akun Anda. Jika Anda belum memiliki cloud environment, ultraplan membuat satu secara otomatis saat pertama kali diluncurkan.

22 

23## Luncurkan ultraplan dari CLI

24 

25Dari sesi CLI lokal Anda, Anda dapat meluncurkan ultraplan dengan tiga cara:

26 

27* **Perintah**: jalankan `/ultraplan` diikuti dengan prompt Anda

28* **Kata kunci**: sertakan kata `ultraplan` di mana saja dalam prompt normal

29* **Dari rencana lokal**: ketika Claude menyelesaikan rencana lokal dan menampilkan dialog persetujuan, pilih **No, refine with Ultraplan on Claude Code on the web** untuk mengirim draft ke cloud untuk iterasi lebih lanjut

30 

31Misalnya, untuk merencanakan migrasi layanan dengan perintah:

32 

33```

34/ultraplan migrate the auth service from sessions to JWTs

35```

36 

37Jalur perintah dan kata kunci membuka dialog konfirmasi sebelum meluncurkan. Jalur rencana lokal melewati dialog ini karena pilihan itu sudah berfungsi sebagai konfirmasi. Jika [Remote Control](/id/remote-control) aktif, itu akan terputus saat ultraplan dimulai karena kedua fitur menempati antarmuka claude.ai/code dan hanya satu yang dapat terhubung pada satu waktu.

38 

39Setelah sesi cloud diluncurkan, input prompt CLI Anda menampilkan indikator status sementara sesi jarak jauh bekerja:

40 

41| Status | Arti |

42| :----------------------------- | :----------------------------------------------------------------------- |

43| `◇ ultraplan` | Claude sedang meneliti codebase Anda dan membuat draft rencana |

44| `◇ ultraplan needs your input` | Claude memiliki pertanyaan klarifikasi; buka tautan sesi untuk merespons |

45| `◆ ultraplan ready` | Rencana siap untuk ditinjau di browser Anda |

46 

47Jalankan `/tasks` dan pilih entri ultraplan untuk membuka tampilan detail dengan tautan sesi, aktivitas agen, dan tindakan **Stop ultraplan**. Menghentikan mengarsipkan sesi cloud dan menghapus indikator; tidak ada yang disimpan ke terminal Anda.

48 

49## Tinjau dan revisi rencana di browser Anda

50 

51Ketika status berubah menjadi `◆ ultraplan ready`, buka tautan sesi untuk melihat rencana di claude.ai. Rencana muncul dalam tampilan review khusus:

52 

53* **Komentar inline**: sorot bagian apa pun dan tinggalkan komentar untuk Claude untuk ditangani

54* **Reaksi emoji**: bereaksi terhadap bagian untuk menandakan persetujuan atau kekhawatiran tanpa menulis komentar lengkap

55* **Bilah outline**: lompat antar bagian rencana

56 

57Ketika Anda meminta Claude untuk mengatasi komentar Anda, itu merevisi rencana dan menyajikan draft yang diperbarui. Anda dapat melakukan iterasi sebanyak yang diperlukan sebelum memilih di mana akan menjalankannya.

58 

59## Pilih di mana akan menjalankan

60 

61Ketika rencana terlihat benar, Anda memilih dari browser apakah Claude mengimplementasikannya dalam sesi cloud yang sama atau mengirimkannya kembali ke terminal yang menunggu.

62 

63### Jalankan di web

64 

65Pilih **Approve Claude's plan and start coding** di browser Anda untuk membuat Claude mengimplementasikannya dalam sesi Claude Code di web yang sama. Terminal Anda menampilkan konfirmasi, indikator status dihapus, dan pekerjaan berlanjut di cloud. Ketika implementasi selesai, [tinjau diff](/id/claude-code-on-the-web#review-changes) dan buat pull request dari antarmuka web.

66 

67### Kirim rencana kembali ke terminal Anda

68 

69Pilih **Approve plan and teleport back to terminal** di browser Anda untuk mengimplementasikan rencana secara lokal dengan akses penuh ke lingkungan Anda. Opsi ini muncul ketika sesi diluncurkan dari CLI Anda dan terminal masih melakukan polling. Sesi web diarsipkan sehingga tidak terus bekerja secara paralel.

70 

71Terminal Anda menampilkan rencana dalam dialog berjudul **Ultraplan approved** dengan tiga opsi:

72 

73* **Implement here**: injeksi rencana ke dalam percakapan saat ini dan lanjutkan dari mana Anda berhenti

74* **Start new session**: hapus percakapan saat ini dan mulai segar dengan hanya rencana sebagai konteks

75* **Cancel**: simpan rencana ke file tanpa menjalankannya; Claude mencetak jalur file sehingga Anda dapat kembali ke sana nanti

76 

77Jika Anda memulai sesi baru, Claude mencetak perintah `claude --resume` di bagian atas sehingga Anda dapat kembali ke percakapan sebelumnya nanti.

78 

79## Sumber daya terkait

80 

81* [Claude Code di web](/id/claude-code-on-the-web): infrastruktur cloud tempat ultraplan berjalan

82* [Plan mode](/id/permission-modes#analyze-before-you-edit-with-plan-mode): cara perencanaan bekerja dalam sesi lokal

83* [Temukan bug dengan ultrareview](/id/ultrareview): rekan review kode untuk ultraplan untuk menangkap masalah sebelum merge

84* [Remote Control](/id/remote-control): gunakan antarmuka claude.ai/code dengan sesi yang berjalan di mesin Anda sendiri

ultrareview.md +108 −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# Temukan bug dengan ultrareview

6 

7> Jalankan tinjauan kode multi-agen yang mendalam di cloud dengan /ultrareview untuk menemukan dan memverifikasi bug sebelum Anda merge.

8 

9<Note>

10 Ultrareview adalah fitur pratinjau penelitian yang tersedia di Claude Code v2.1.86 dan yang lebih baru. Fitur, harga, dan ketersediaan dapat berubah berdasarkan umpan balik.

11</Note>

12 

13Ultrareview adalah tinjauan kode yang mendalam yang berjalan di Claude Code pada infrastruktur web. Ketika Anda menjalankan `/ultrareview`, Claude Code meluncurkan armada agen peninjau dalam sandbox jarak jauh untuk menemukan bug di cabang atau pull request Anda.

14 

15Dibandingkan dengan `/review` lokal, ultrareview menawarkan:

16 

17* **Sinyal yang lebih tinggi**: setiap temuan yang dilaporkan secara independen direproduksi dan diverifikasi, sehingga hasil fokus pada bug nyata daripada saran gaya

18* **Cakupan yang lebih luas**: banyak agen peninjau menjelajahi perubahan secara paralel, yang mengungkap masalah yang mungkin terlewatkan oleh tinjauan satu kali

19* **Tidak ada penggunaan sumber daya lokal**: tinjauan berjalan sepenuhnya dalam sandbox jarak jauh, sehingga terminal Anda tetap bebas untuk pekerjaan lain saat berjalan

20 

21Ultrareview memerlukan autentikasi dengan akun Claude.ai karena berjalan di Claude Code pada infrastruktur web. Jika Anda masuk hanya dengan kunci API, jalankan `/login` dan autentikasi dengan Claude.ai terlebih dahulu. Ultrareview tidak tersedia saat menggunakan Claude Code dengan Amazon Bedrock, Google Cloud Vertex AI, atau Microsoft Foundry, dan tidak tersedia untuk organisasi yang telah mengaktifkan Zero Data Retention.

22 

23## Jalankan ultrareview dari CLI

24 

25Mulai tinjauan dari repositori git apa pun di Claude Code CLI.

26 

27```text theme={null}

28/ultrareview

29```

30 

31Tanpa argumen, ultrareview meninjau perbedaan antara cabang saat ini Anda dan cabang default, termasuk perubahan yang tidak berkomitmen dan staged di pohon kerja Anda. Claude Code membundel status repositori dan mengunggahnya ke sandbox jarak jauh untuk tinjauan.

32 

33Untuk meninjau pull request GitHub sebagai gantinya, teruskan nomor PR.

34 

35```text theme={null}

36/ultrareview 1234

37```

38 

39Dalam mode PR, sandbox jarak jauh mengkloning pull request langsung dari GitHub daripada membundel pohon kerja lokal Anda. Mode PR memerlukan remote `github.com` pada repositori.

40 

41<Tip>

42 Jika repositori Anda terlalu besar untuk dibundel, Claude Code akan meminta Anda menggunakan mode PR sebagai gantinya. Dorong cabang Anda dan buka PR draft, kemudian jalankan `/ultrareview <PR-number>`.

43</Tip>

44 

45Sebelum meluncurkan, Claude Code menampilkan dialog konfirmasi dengan cakupan tinjauan (termasuk jumlah file dan baris saat meninjau cabang), sisa run gratis Anda, dan perkiraan biaya. Setelah Anda mengonfirmasi, tinjauan berlanjut di latar belakang dan Anda dapat terus menggunakan sesi Anda. Perintah hanya berjalan ketika Anda memanggilnya dengan `/ultrareview`; Claude tidak memulai ultrareview dengan sendirinya.

46 

47## Harga dan run gratis

48 

49Ultrareview adalah fitur premium yang ditagih terhadap penggunaan ekstra daripada penggunaan yang disertakan dalam paket Anda.

50 

51| Paket | Run gratis yang disertakan | Setelah run gratis |

52| ------------------- | ------------------------------ | ---------------------------------------------------------------------------------------------------------------------- |

53| Pro | 3 run gratis hingga 5 Mei 2026 | ditagih sebagai [penggunaan ekstra](https://support.claude.com/id/articles/12429409-extra-usage-for-paid-claude-plans) |

54| Max | 3 run gratis hingga 5 Mei 2026 | ditagih sebagai [penggunaan ekstra](https://support.claude.com/id/articles/12429409-extra-usage-for-paid-claude-plans) |

55| Team dan Enterprise | tidak ada | ditagih sebagai [penggunaan ekstra](https://support.claude.com/id/articles/12429409-extra-usage-for-paid-claude-plans) |

56 

57Pelanggan Pro dan Max menerima tiga run ultrareview gratis untuk mencoba fitur. Ketiga run ini adalah alokasi satu kali per akun, tidak diperbarui, dan berakhir pada 5 Mei 2026. Setelah Anda menggunakan ketiga run tersebut, atau setelah periode run gratis berakhir, setiap tinjauan ditagih ke penggunaan ekstra dan biasanya biaya berkisar \$5 hingga \$20 tergantung pada ukuran perubahan. Satu run dihitung setelah sesi jarak jauh dimulai, jadi tinjauan yang Anda hentikan lebih awal atau yang gagal diselesaikan masih menggunakan satu run gratis. Untuk tinjauan berbayar, penggunaan ekstra hanya ditagih untuk bagian yang berjalan.

58 

59Karena ultrareview selalu ditagih sebagai penggunaan ekstra di luar run gratis, akun atau organisasi Anda harus memiliki penggunaan ekstra diaktifkan sebelum Anda dapat meluncurkan tinjauan berbayar. Jika penggunaan ekstra tidak diaktifkan, Claude Code memblokir peluncuran dan menautkan Anda ke pengaturan penagihan tempat Anda dapat mengaktifkannya. Anda juga dapat menjalankan `/extra-usage` untuk memeriksa atau mengubah pengaturan saat ini Anda.

60 

61## Lacak tinjauan yang sedang berjalan

62 

63Tinjauan biasanya memakan waktu 5 hingga 10 menit. Tinjauan berjalan sebagai tugas latar belakang, sehingga Anda dapat terus bekerja di sesi Anda, memulai perintah lain, atau menutup terminal sepenuhnya.

64 

65Gunakan `/tasks` untuk melihat tinjauan yang sedang berjalan dan selesai, buka tampilan detail untuk tinjauan, atau hentikan tinjauan yang sedang berlangsung. Menghentikan tinjauan mengarsipkan sesi cloud, dan temuan parsial tidak dikembalikan. Ketika tinjauan selesai, temuan yang diverifikasi muncul sebagai notifikasi di sesi Anda. Setiap temuan mencakup lokasi file dan penjelasan masalah sehingga Anda dapat meminta Claude untuk memperbaikinya secara langsung.

66 

67## Jalankan ultrareview secara non-interaktif

68 

69Gunakan subperintah `claude ultrareview` untuk memulai ultrareview dari CI atau skrip tanpa sesi interaktif. Subperintah meluncurkan tinjauan yang sama seperti `/ultrareview`, memblokir hingga tinjauan jarak jauh selesai, mencetak temuan ke stdout, dan keluar dengan kode 0 pada kesuksesan atau 1 pada kegagalan.

70 

71```bash theme={null}

72claude ultrareview

73claude ultrareview 1234

74claude ultrareview origin/main

75```

76 

77Tanpa argumen, subperintah meninjau perbedaan antara cabang saat ini Anda dan cabang default. Teruskan nomor PR untuk meninjau pull request, atau teruskan cabang dasar untuk meninjau perbedaan terhadap cabang itu sebagai gantinya. Memanggil subperintah dihitung sebagai persetujuan untuk penagihan dan prompt syarat yang ditampilkan perintah interaktif.

78 

79Pesan kemajuan dan URL sesi langsung pergi ke stderr sehingga stdout tetap dapat diurai. Gunakan bendera ini untuk mengontrol output dan timeout:

80 

81| Bendera | Deskripsi |

82| --------------------- | -------------------------------------------------------------- |

83| `--json` | Cetak payload `bugs.json` mentah daripada temuan yang diformat |

84| `--timeout <minutes>` | Menit maksimal untuk menunggu tinjauan selesai. Default ke 30 |

85 

86Menjalankan `claude ultrareview` memerlukan autentikasi yang sama dan konfigurasi penggunaan ekstra seperti `/ultrareview`. Subperintah keluar dengan kode 0 ketika tinjauan selesai dengan atau tanpa temuan, kode 1 ketika tinjauan gagal diluncurkan, sesi jarak jauh mengalami kesalahan, atau timeout berlalu, dan kode 130 ketika diinterupsi dengan Ctrl-C. Tinjauan jarak jauh terus berjalan jika Anda mengganggu subperintah; ikuti URL sesi yang dicetak ke stderr untuk menontonnya di browser.

87 

88Untuk tinjauan otomatis pada pull request GitHub, [Code Review](/id/code-review) terintegrasi dengan repositori Anda secara langsung dan memposting temuan sebagai komentar PR inline tanpa langkah CLI.

89 

90## Bagaimana ultrareview dibandingkan dengan /review

91 

92Kedua perintah meninjau kode, tetapi menargetkan tahap alur kerja yang berbeda.

93 

94| | `/review` | `/ultrareview` |

95| ------------- | ------------------------------------ | ------------------------------------------------------------------------------------- |

96| Berjalan | secara lokal di sesi Anda | secara jarak jauh di sandbox cloud |

97| Kedalaman | tinjauan satu kali | armada multi-agen dengan verifikasi independen |

98| Durasi | beberapa detik hingga beberapa menit | kira-kira 5 hingga 10 menit |

99| Biaya | dihitung terhadap penggunaan normal | run gratis, kemudian kira-kira \$5 hingga \$20 per tinjauan sebagai penggunaan ekstra |

100| Terbaik untuk | umpan balik cepat saat iterasi | kepercayaan pra-merge pada perubahan substansial |

101 

102Gunakan `/review` untuk umpan balik cepat saat Anda bekerja. Gunakan `/ultrareview` sebelum merge perubahan substansial ketika Anda menginginkan lintasan yang lebih dalam yang menangkap masalah yang mungkin terlewatkan oleh tinjauan tunggal.

103 

104## Sumber daya terkait

105 

106* [Claude Code di web](/id/claude-code-on-the-web): pelajari cara kerja sesi jarak jauh dan sandbox cloud

107* [Rencanakan perubahan kompleks dengan ultraplan](/id/ultraplan): rekan perencanaan untuk ultrareview untuk pekerjaan desain di muka

108* [Kelola biaya secara efektif](/id/costs): lacak penggunaan dan tetapkan batas pengeluaran

voice-dictation.md +191 −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# Dikte suara

6 

7> Ucapkan prompt Anda di Claude Code CLI dengan dikte suara tahan-untuk-merekam atau ketuk-untuk-merekam.

8 

9Ucapkan prompt Anda alih-alih mengetiknya di Claude Code CLI. Ucapan Anda ditranskripsikan secara langsung ke dalam input prompt, sehingga Anda dapat mencampur suara dan pengetikan dalam pesan yang sama. Aktifkan dikte dengan `/voice`, kemudian tahan kunci sambil Anda berbicara atau ketuk sekali untuk memulai dan lagi untuk mengirim.

10 

11<Note>

12 Dikte suara memerlukan Claude Code v2.1.69 atau lebih baru. Mode ketuk memerlukan v2.1.116 atau lebih baru. Periksa versi Anda dengan `claude --version`.

13</Note>

14 

15## Persyaratan

16 

17Dikte suara mengalirkan audio yang direkam ke server Anthropic untuk transkripsi. Audio tidak diproses secara lokal. Layanan ucapan-ke-teks hanya tersedia saat Anda melakukan autentikasi dengan akun Claude.ai, dan tidak tersedia saat Claude Code dikonfigurasi untuk menggunakan kunci API Anthropic secara langsung, Amazon Bedrock, Google Vertex AI, atau Microsoft Foundry. Transkripsi tidak menggunakan pesan Claude atau token dan tidak dihitung terhadap batas yang ditampilkan di `/usage`. Lihat [penggunaan data](/id/data-usage) untuk mengetahui bagaimana Anthropic menangani data Anda.

18 

19Dikte suara juga memerlukan akses mikrofon lokal, sehingga tidak berfungsi di lingkungan jarak jauh seperti [Claude Code di web](/id/claude-code-on-the-web) atau sesi SSH. Di WSL, dikte suara memerlukan WSLg untuk akses audio, yang disertakan dengan WSL2 di Windows 11. Di Windows 10 atau WSL1, jalankan Claude Code di Windows asli sebagai gantinya.

20 

21Perekaman audio menggunakan modul asli bawaan di macOS, Linux, dan Windows. Di Linux, jika modul asli tidak dapat dimuat, Claude Code kembali ke `arecord` dari ALSA utils atau `rec` dari SoX. Jika tidak ada yang tersedia, `/voice` mencetak perintah instalasi untuk manajer paket Anda.

22 

23[Ekstensi VS Code](/id/vs-code) Claude Code juga mendukung dikte suara dengan persyaratan akun Claude.ai yang sama. Ini tidak tersedia di sesi VS Code Remote, termasuk SSH, Dev Containers, dan Codespaces, karena mikrofon berada di mesin lokal Anda dan ekstensi berjalan di host jarak jauh.

24 

25## Aktifkan dikte suara

26 

27Jalankan `/voice` untuk mengaktifkan dikte. Pertama kali Anda mengaktifkannya, Claude Code menjalankan pemeriksaan mikrofon. Di macOS, ini memicu prompt izin mikrofon sistem untuk terminal Anda jika belum pernah diberikan.

28 

29```

30/voice

31Voice mode enabled (hold). Hold Space to record. Dictation language: en (/config to change).

32```

33 

34`/voice` menerima argumen mode opsional:

35 

36| Perintah | Efek |

37| :------------ | :--------------------------------------------------- |

38| `/voice` | Alihkan aktif atau mati, pertahankan mode saat ini |

39| `/voice hold` | Aktifkan dalam [mode tahan](#hold-to-record) |

40| `/voice tap` | Aktifkan dalam [mode ketuk](#tap-to-record-and-send) |

41| `/voice off` | Nonaktifkan |

42 

43Dikte suara bertahan di seluruh sesi. Atur langsung di [file pengaturan pengguna](/id/settings) Anda alih-alih menjalankan `/voice`:

44 

45```json theme={null}

46{

47 "voice": {

48 "enabled": true,

49 "mode": "tap"

50 }

51}

52```

53 

54Saat dikte suara diaktifkan, footer input menampilkan petunjuk `hold Space to speak` saat prompt kosong. Teks petunjuk sama di kedua mode, dan tidak muncul jika Anda memiliki [baris status kustom](/id/statusline) yang dikonfigurasi.

55 

56Transkripsi disesuaikan untuk kosakata pengkodean di kedua mode. Istilah pengembangan umum seperti `regex`, `OAuth`, `JSON`, dan `localhost` dikenali dengan benar, dan nama proyek saat ini dan nama cabang git Anda ditambahkan sebagai petunjuk pengenalan secara otomatis.

57 

58## Tahan untuk merekam

59 

60Mode tahan adalah push-to-talk: perekaman berjalan saat Anda menahan kunci dan berhenti saat Anda melepasnya. Ini adalah mode default.

61 

62Tahan `Space` untuk mulai merekam. Claude Code mendeteksi kunci yang ditahan dengan memantau peristiwa pengulangan kunci cepat dari terminal Anda, jadi ada pemanasan singkat sebelum perekaman dimulai. Footer menampilkan `keep holding…` selama pemanasan, kemudian beralih ke bentuk gelombang langsung setelah perekaman aktif.

63 

64Beberapa karakter pengulangan kunci pertama mengetik ke dalam input selama pemanasan dan dihapus secara otomatis saat perekaman diaktifkan. Ketukan `Space` tunggal masih mengetik spasi, karena deteksi tahan hanya dipicu pada pengulangan cepat.

65 

66<Tip>

67 Untuk melewati pemanasan, beralih ke [mode ketuk](#tap-to-record-and-send) dengan `/voice tap`, atau [ikat ulang ke kombinasi pengubah](#rebind-the-dictation-key) seperti `meta+k`. Kombinasi pengubah mulai merekam pada penekanan tombol pertama.

68</Tip>

69 

70Ucapan Anda muncul dalam prompt saat Anda berbicara, redup sampai transkrip diselesaikan. Lepaskan `Space` untuk berhenti merekam dan menyelesaikan teks. Transkrip dimasukkan pada posisi kursor Anda dan kursor tetap di akhir teks yang dimasukkan, sehingga Anda dapat mencampur pengetikan dan dikte dalam urutan apa pun. Tahan `Space` lagi untuk menambahkan perekaman lain, atau pindahkan kursor terlebih dahulu untuk menyisipkan ucapan di tempat lain dalam prompt:

71 

72```

73> refactor the auth middleware to ▮

74 # hold Space, speak "use the new token validation helper"

75> refactor the auth middleware to use the new token validation helper▮

76```

77 

78Secara default, melepaskan kunci menyisipkan transkrip dan menunggu Anda menekan `Enter`. Atur `"autoSubmit": true` dalam objek pengaturan `voice` untuk mengirim prompt secara otomatis saat Anda melepaskan kunci, asalkan transkrip setidaknya tiga kata panjang.

79 

80## Ketuk untuk merekam dan mengirim

81 

82Mode ketuk mengalihkan perekaman dengan penekanan tombol tunggal: ketuk sekali untuk memulai, berbicara, kemudian ketuk lagi untuk mengirim prompt. Tidak ada pemanasan, dan Anda tidak perlu menahan kunci.

83 

84Aktifkan mode ketuk dengan `/voice tap`. Dengan input prompt kosong, ketuk `Space` untuk mulai merekam. Footer menampilkan bentuk gelombang langsung saat merekam. Ketuk `Space` lagi untuk berhenti. Claude Code menyisipkan transkrip dan mengirimkan prompt secara otomatis saat transkrip setidaknya tiga kata panjang. Transkrip yang lebih pendek dimasukkan tetapi tidak dikirim, sehingga ketukan yang tidak disengaja tidak mengirim kata yang tersesat.

85 

86Ketukan pertama hanya mulai merekam saat input prompt kosong, sehingga Anda masih dapat mengetik spasi secara normal saat menyusun pesan. Ketukan kedua menghentikan perekaman terlepas dari isi input. Perekaman juga berhenti secara otomatis setelah 15 detik keheningan atau dua menit total.

87 

88## Ubah bahasa dikte

89 

90Dikte suara menggunakan pengaturan [`language`](/id/settings) yang sama yang mengontrol bahasa respons Claude. Jika pengaturan itu kosong, dikte default ke Bahasa Inggris. Di ekstensi VS Code, jika `language` kosong, dikte menggunakan pengaturan `accessibility.voice.speechLanguage` VS Code sebelum default ke Bahasa Inggris.

91 

92<Accordion title="Bahasa dikte yang didukung">

93 | Bahasa | Kode |

94 | :-------- | :--- |

95 | Ceko | `cs` |

96 | Denmark | `da` |

97 | Belanda | `nl` |

98 | Inggris | `en` |

99 | Prancis | `fr` |

100 | Jerman | `de` |

101 | Yunani | `el` |

102 | Hindi | `hi` |

103 | Indonesia | `id` |

104 | Italia | `it` |

105 | Jepang | `ja` |

106 | Korea | `ko` |

107 | Norwegia | `no` |

108 | Polandia | `pl` |

109 | Portugis | `pt` |

110 | Rusia | `ru` |

111 | Spanyol | `es` |

112 | Swedia | `sv` |

113 | Turki | `tr` |

114 | Ukraina | `uk` |

115</Accordion>

116 

117Atur bahasa di `/config` atau langsung di pengaturan. Anda dapat menggunakan [kode bahasa BCP 47](https://en.wikipedia.org/wiki/IETF_language_tag) atau nama bahasa:

118 

119```json theme={null}

120{

121 "language": "japanese"

122}

123```

124 

125Jika pengaturan `language` Anda tidak ada dalam daftar yang didukung, `/voice` memperingatkan Anda saat diaktifkan dan kembali ke Bahasa Inggris untuk dikte. Respons teks Claude tidak terpengaruh oleh fallback ini.

126 

127## Ikat ulang kunci dikte

128 

129Kunci dikte terikat pada `voice:pushToTalk` dalam konteks `Chat` dan default ke `Space`. Pengikatan yang sama mengontrol mode tahan dan ketuk. Ikat ulang di [`~/.claude/keybindings.json`](/id/keybindings):

130 

131```json theme={null}

132{

133 "bindings": [

134 {

135 "context": "Chat",

136 "bindings": {

137 "meta+k": "voice:pushToTalk",

138 "space": null

139 }

140 }

141 ]

142}

143```

144 

145Mengatur `"space": null` menghapus pengikatan default. Abaikan jika Anda ingin kedua kunci aktif.

146 

147Dalam mode tahan, hindari mengikat kunci huruf telanjang seperti `v` karena deteksi tahan bergantung pada pengulangan kunci dan huruf mengetik ke dalam prompt selama pemanasan. Gunakan `Space`, atau gunakan kombinasi pengubah seperti `meta+k` untuk mulai merekam pada penekanan tombol pertama tanpa pemanasan. Mode ketuk tidak memiliki pemanasan, jadi kunci apa pun berfungsi.

148 

149Beberapa kunci tidak dikirimkan ke aplikasi terminal dan tidak dapat diikat sama sekali. Misalnya, `Caps Lock` menampilkan kesalahan jika Anda mencoba mengikatnya. Lihat [sesuaikan pintasan keyboard](/id/keybindings) untuk sintaks keybinding lengkap dan daftar pintasan yang dicadangkan.

150 

151## Pemecahan masalah

152 

153Masalah umum saat dikte suara tidak diaktifkan atau merekam:

154 

155* **`Voice mode requires a Claude.ai account`**: Anda diautentikasi dengan kunci API atau penyedia pihak ketiga. Jalankan `/login` untuk masuk dengan akun Claude.ai.

156* **`Microphone access is denied`**: berikan izin mikrofon ke terminal Anda di pengaturan sistem. Di macOS, buka System Settings → Privacy & Security → Microphone dan aktifkan aplikasi terminal Anda, kemudian jalankan `/voice` lagi. Di Windows, buka Settings → Privacy & security → Microphone dan aktifkan akses mikrofon untuk aplikasi desktop, kemudian jalankan `/voice` lagi. Jika terminal Anda tidak terdaftar dalam pengaturan macOS, lihat [Terminal tidak terdaftar dalam pengaturan Mikrofon macOS](#terminal-not-listed-in-macos-microphone-settings).

157* **`No audio recording tool found` di Linux**: modul audio asli tidak dapat dimuat dan tidak ada fallback yang diinstal. Instal SoX dengan perintah yang ditampilkan dalam pesan kesalahan, misalnya `sudo apt-get install sox`.

158* **Tidak ada yang terjadi saat menahan `Space` dalam mode tahan**: perhatikan input prompt saat Anda menahan. Jika spasi terus menumpuk, dikte suara kemungkinan mati; jalankan `/voice hold` untuk mengaktifkannya. Jika hanya satu atau dua spasi muncul dan kemudian tidak ada, dikte suara aktif tetapi deteksi tahan tidak dipicu. Deteksi tahan memerlukan terminal Anda untuk mengirim peristiwa pengulangan kunci, sehingga tidak dapat mendeteksi kunci yang ditahan jika pengulangan kunci dinonaktifkan di tingkat OS. Beralih ke mode ketuk dengan `/voice tap` untuk menghindari persyaratan pengulangan kunci.

159* **Mengetuk `Space` mengetik spasi alih-alih merekam dalam mode ketuk**: ketukan pertama hanya mulai merekam saat input prompt kosong. Hapus input terlebih dahulu, atau periksa bahwa Anda dalam mode ketuk dengan menjalankan `/voice tap`.

160* **`No audio detected from microphone`**: perekaman dimulai tetapi menangkap keheningan. Konfirmasi perangkat input yang benar diatur sebagai default sistem dan tingkat inputnya tidak dibisukan atau mendekati nol. Di Windows, buka Settings → System → Sound → Input dan pilih mikrofon Anda. Di macOS, buka System Settings → Sound → Input.

161* **`No speech detected`**: audio mencapai layanan transkripsi tetapi tidak ada kata yang dikenali. Berbicara lebih dekat ke mikrofon, kurangi kebisingan latar belakang, dan konfirmasi [bahasa dikte](#change-the-dictation-language) Anda cocok dengan bahasa yang Anda gunakan.

162* **Transkripsi berantakan atau dalam bahasa yang salah**: dikte default ke Bahasa Inggris. Jika Anda mendikte dalam bahasa lain, atur di `/config` terlebih dahulu. Lihat [Ubah bahasa dikte](#change-the-dictation-language).

163 

164### Terminal tidak terdaftar dalam pengaturan Mikrofon macOS

165 

166Jika aplikasi terminal Anda tidak muncul di bawah System Settings → Privacy & Security → Microphone, tidak ada toggle yang dapat Anda aktifkan. Atur ulang status izin untuk terminal Anda sehingga `/voice` berikutnya menjalankan prompt izin macOS yang segar.

167 

168<Steps>

169 <Step title="Atur ulang izin mikrofon untuk terminal Anda">

170 Jalankan `tccutil reset Microphone <bundle-id>`, mengganti `<bundle-id>` dengan pengenal terminal Anda: `com.apple.Terminal` untuk Terminal bawaan, atau `com.googlecode.iterm2` untuk iTerm2. Untuk terminal lain, cari pengenal dengan `osascript -e 'id of app "AppName"'`.

171 

172 <Warning>

173 Anda dapat menjalankan `tccutil reset Microphone` tanpa ID bundle, tetapi ini mencabut akses mikrofon dari setiap aplikasi di Mac Anda, termasuk aplikasi seperti Zoom atau Slack. Setiap aplikasi perlu meminta akses lagi pada penggunaan berikutnya, jadi jangan jalankan selama panggilan aktif.

174 </Warning>

175 </Step>

176 

177 <Step title="Keluar dan luncurkan ulang terminal Anda">

178 macOS tidak akan meminta ulang proses yang sudah berjalan. Keluar dari aplikasi terminal dengan Cmd+Q, bukan hanya tutup jendelanya, kemudian buka lagi.

179 </Step>

180 

181 <Step title="Picu prompt segar">

182 Mulai Claude Code dan jalankan `/voice`. macOS meminta akses mikrofon; izinkan.

183 </Step>

184</Steps>

185 

186## Lihat juga

187 

188* [Sesuaikan pintasan keyboard](/id/keybindings): ikat ulang `voice:pushToTalk` dan tindakan keyboard CLI lainnya

189* [Konfigurasi pengaturan](/id/settings): referensi lengkap untuk kunci pengaturan `voice`, `language`, dan lainnya

190* [Mode interaktif](/id/interactive-mode): pintasan keyboard, mode input, dan kontrol sesi

191* [Perintah](/id/commands): referensi untuk `/voice`, `/config`, dan semua perintah lainnya

vs-code.md +511 −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 Claude Code di VS Code

6 

7> Instal dan konfigurasi ekstensi Claude Code untuk VS Code. Dapatkan bantuan pengkodean AI dengan diff inline, @-mentions, review rencana, dan pintasan keyboard.

8 

9<img src="https://mintcdn.com/claude-code/-YhHHmtSxwr7W8gy/images/vs-code-extension-interface.jpg?fit=max&auto=format&n=-YhHHmtSxwr7W8gy&q=85&s=300652d5678c63905e6b0ea9e50835f8" alt="Editor VS Code dengan panel ekstensi Claude Code terbuka di sisi kanan, menampilkan percakapan dengan Claude" width="2500" height="1155" data-path="images/vs-code-extension-interface.jpg" />

10 

11Ekstensi VS Code menyediakan antarmuka grafis asli untuk Claude Code, terintegrasi langsung ke dalam IDE Anda. Ini adalah cara yang direkomendasikan untuk menggunakan Claude Code di VS Code.

12 

13Dengan ekstensi, Anda dapat meninjau dan mengedit rencana Claude sebelum menerimanya, auto-accept edits saat dibuat, @-mention file dengan rentang baris tertentu dari pilihan Anda, mengakses riwayat percakapan, dan membuka beberapa percakapan di tab atau jendela terpisah.

14 

15## Prasyarat

16 

17Sebelum menginstal, pastikan Anda memiliki:

18 

19* VS Code 1.98.0 atau lebih tinggi

20* Akun Anthropic (Anda akan masuk saat pertama kali membuka ekstensi). Jika Anda menggunakan penyedia pihak ketiga seperti Amazon Bedrock atau Google Vertex AI, lihat [Gunakan penyedia pihak ketiga](#use-third-party-providers) sebagai gantinya.

21 

22<Tip>

23 Ekstensi mencakup CLI (command-line interface), yang dapat Anda akses dari terminal terintegrasi VS Code untuk fitur lanjutan. Lihat [Ekstensi VS Code vs. Claude Code CLI](#vs-code-extension-vs-claude-code-cli) untuk detail.

24</Tip>

25 

26## Instal ekstensi

27 

28Klik tautan untuk IDE Anda untuk menginstal secara langsung:

29 

30* [Instal untuk VS Code](vscode:extension/anthropic.claude-code)

31* [Instal untuk Cursor](cursor:extension/anthropic.claude-code)

32 

33Atau di VS Code, tekan `Cmd+Shift+X` (Mac) atau `Ctrl+Shift+X` (Windows/Linux) untuk membuka tampilan Extensions, cari "Claude Code", dan klik **Install**.

34 

35<Note>Jika ekstensi tidak muncul setelah instalasi, restart VS Code atau jalankan "Developer: Reload Window" dari Command Palette.</Note>

36 

37## Memulai

38 

39Setelah diinstal, Anda dapat mulai menggunakan Claude Code melalui antarmuka VS Code:

40 

41<Steps>

42 <Step title="Buka panel Claude Code">

43 Di seluruh VS Code, ikon Spark menunjukkan Claude Code: <img src="https://mintcdn.com/claude-code/c5r9_6tjPMzFdDDT/images/vs-code-spark-icon.svg?fit=max&auto=format&n=c5r9_6tjPMzFdDDT&q=85&s=3ca45e00deadec8c8f4b4f807da94505" alt="Spark icon" style={{display: "inline", height: "0.85em", verticalAlign: "middle"}} width="16" height="16" data-path="images/vs-code-spark-icon.svg" />

44 

45 Cara tercepat untuk membuka Claude adalah dengan mengklik ikon Spark di **Editor Toolbar** (sudut kanan atas editor). Ikon hanya muncul saat Anda memiliki file terbuka.

46 

47 <img src="https://mintcdn.com/claude-code/mfM-EyoZGnQv8JTc/images/vs-code-editor-icon.png?fit=max&auto=format&n=mfM-EyoZGnQv8JTc&q=85&s=eb4540325d94664c51776dbbfec4cf02" alt="Editor VS Code menampilkan ikon Spark di Editor Toolbar" width="2796" height="734" data-path="images/vs-code-editor-icon.png" />

48 

49 Cara lain untuk membuka Claude Code:

50 

51 * **Activity Bar**: klik ikon Spark di sidebar kiri untuk membuka daftar sesi. Klik sesi apa pun untuk membukanya sebagai tab editor penuh, atau mulai yang baru. Ikon ini selalu terlihat di Activity Bar.

52 * **Command Palette**: `Cmd+Shift+P` (Mac) atau `Ctrl+Shift+P` (Windows/Linux), ketik "Claude Code", dan pilih opsi seperti "Open in New Tab"

53 * **Status Bar**: klik **✱ Claude Code** di sudut kanan bawah jendela. Ini berfungsi bahkan saat tidak ada file yang terbuka.

54 

55 Anda dapat menyeret panel Claude untuk memposisikan ulang di mana saja di VS Code. Lihat [Sesuaikan alur kerja Anda](#customize-your-workflow) untuk detail.

56 </Step>

57 

58 <Step title="Masuk">

59 Saat pertama kali Anda membuka panel, layar masuk muncul. Klik **Sign in** dan selesaikan otorisasi di browser Anda.

60 

61 Jika Anda melihat **Not logged in · Please run /login** nanti, ekstensi membuka kembali layar masuk secara otomatis. Jika tidak muncul, muat ulang jendela dari Command Palette dengan **Developer: Reload Window**.

62 

63 Jika Anda memiliki `ANTHROPIC_API_KEY` yang diatur di shell Anda tetapi masih melihat prompt masuk, VS Code mungkin tidak mewarisi lingkungan shell Anda. Luncurkan VS Code dari terminal dengan `code .` sehingga mewarisi variabel lingkungan Anda, atau masuk dengan akun Claude Anda sebagai gantinya.

64 

65 Setelah Anda masuk, daftar periksa **Learn Claude Code** muncul. Kerjakan setiap item dengan mengklik **Show me**, atau tutup dengan X. Untuk membukanya kembali nanti, hapus centang **Hide Onboarding** di pengaturan VS Code di bawah Extensions → Claude Code.

66 </Step>

67 

68 <Step title="Kirim prompt">

69 Minta Claude untuk membantu dengan kode atau file Anda, baik itu menjelaskan cara kerja sesuatu, men-debug masalah, atau membuat perubahan.

70 

71 <Tip>Claude secara otomatis melihat teks pilihan Anda. Tekan `Option+K` (Mac) / `Alt+K` (Windows/Linux) untuk juga menyisipkan referensi @-mention (seperti `@file.ts#5-10`) ke dalam prompt Anda.</Tip>

72 

73 Berikut adalah contoh menanyakan tentang baris tertentu dalam file:

74 

75 <img src="https://mintcdn.com/claude-code/FVYz38sRY-VuoGHA/images/vs-code-send-prompt.png?fit=max&auto=format&n=FVYz38sRY-VuoGHA&q=85&s=ede3ed8d8d5f940e01c5de636d009cfd" alt="Editor VS Code dengan baris 2-3 dipilih dalam file Python, dan panel Claude Code menampilkan pertanyaan tentang baris tersebut dengan referensi @-mention" width="3288" height="1876" data-path="images/vs-code-send-prompt.png" />

76 </Step>

77 

78 <Step title="Tinjau perubahan">

79 Saat Claude ingin mengedit file, ia menampilkan perbandingan berdampingan dari perubahan asli dan yang diusulkan, kemudian meminta izin. Anda dapat menerima, menolak, atau memberi tahu Claude apa yang harus dilakukan sebagai gantinya. Jika Anda mengedit konten yang diusulkan secara langsung di tampilan diff sebelum menerima, Claude diberitahu bahwa Anda memodifikasinya sehingga tidak menganggap file cocok dengan proposal aslinya.

80 

81 <img src="https://mintcdn.com/claude-code/FVYz38sRY-VuoGHA/images/vs-code-edits.png?fit=max&auto=format&n=FVYz38sRY-VuoGHA&q=85&s=e005f9b41c541c5c7c59c082f7c4841c" alt="VS Code menampilkan diff dari perubahan yang diusulkan Claude dengan prompt izin menanyakan apakah akan membuat edit" width="3292" height="1876" data-path="images/vs-code-edits.png" />

82 </Step>

83</Steps>

84 

85Untuk lebih banyak ide tentang apa yang dapat Anda lakukan dengan Claude Code, lihat [Alur kerja umum](/id/common-workflows).

86 

87<Tip>

88 Jalankan "Claude Code: Open Walkthrough" dari Command Palette untuk tur terpandu tentang dasar-dasarnya.

89</Tip>

90 

91## Gunakan kotak prompt

92 

93Kotak prompt mendukung beberapa fitur:

94 

95* **Mode izin**: klik indikator mode di bagian bawah kotak prompt untuk beralih mode. Dalam mode normal, Claude meminta izin sebelum setiap tindakan. Dalam Plan mode, Claude menjelaskan apa yang akan dilakukan dan menunggu persetujuan sebelum membuat perubahan. VS Code secara otomatis membuka rencana sebagai dokumen markdown penuh di mana Anda dapat menambahkan komentar inline untuk memberikan umpan balik sebelum Claude mulai. Dalam mode auto-accept, Claude membuat edit tanpa bertanya. Atur default di pengaturan VS Code di bawah `claudeCode.initialPermissionMode`.

96* **Menu perintah**: klik `/` atau ketik `/` untuk membuka menu perintah. Opsi termasuk melampirkan file, beralih model, mengalihkan extended thinking, melihat penggunaan rencana (`/usage`), dan memulai sesi [Remote Control](/id/remote-control) (`/remote-control`). Bagian Customize menyediakan akses ke MCP servers, hooks, memory, permissions, dan plugins. Item dengan ikon terminal terbuka di terminal terintegrasi.

97* **Indikator konteks**: kotak prompt menunjukkan berapa banyak context window Claude yang Anda gunakan. Claude secara otomatis melakukan compact saat diperlukan, atau Anda dapat menjalankan `/compact` secara manual.

98* **Extended thinking**: memungkinkan Claude menghabiskan lebih banyak waktu untuk bernalar melalui masalah kompleks. Alihkan melalui menu perintah (`/`). Penalaran Claude muncul dalam percakapan sebagai blok yang dilipat: klik blok untuk membacanya, atau tekan `Ctrl+O` untuk memperluas atau melipat setiap blok thinking dalam sesi. Lihat [Extended thinking](/id/common-workflows#use-extended-thinking-thinking-mode) untuk detail.

99* **Input multi-baris**: tekan `Shift+Enter` untuk menambahkan baris baru tanpa mengirim. Ini juga berfungsi di input teks bebas "Other" dari dialog pertanyaan.

100 

101### Referensikan file dan folder

102 

103Gunakan @-mentions untuk memberikan Claude konteks tentang file atau folder tertentu. Saat Anda mengetik `@` diikuti dengan nama file atau folder, Claude membaca konten tersebut dan dapat menjawab pertanyaan tentangnya atau membuat perubahan padanya. Claude Code mendukung fuzzy matching, jadi Anda dapat mengetik nama parsial untuk menemukan apa yang Anda butuhkan:

104 

105```text theme={null}

106> Explain the logic in @auth (fuzzy matches auth.js, AuthService.ts, etc.)

107> What's in @src/components/ (include a trailing slash for folders)

108```

109 

110Untuk PDF besar, Anda dapat meminta Claude membaca halaman tertentu alih-alih seluruh file: satu halaman, rentang seperti halaman 1-10, atau rentang terbuka seperti halaman 3 ke depan.

111 

112Saat Anda memilih teks di editor, Claude dapat melihat kode yang disorot secara otomatis. Footer kotak prompt menunjukkan berapa banyak baris yang dipilih. Tekan `Option+K` (Mac) / `Alt+K` (Windows/Linux) untuk menyisipkan @-mention dengan jalur file dan nomor baris (misalnya, `@app.ts#5-10`). Klik indikator pilihan untuk mengalihkan apakah Claude dapat melihat teks yang disorot Anda - ikon eye-slash berarti pilihan tersembunyi dari Claude.

113 

114Anda juga dapat menahan `Shift` sambil menyeret file ke kotak prompt untuk menambahkannya sebagai lampiran. Klik X pada lampiran apa pun untuk menghapusnya dari konteks.

115 

116### Lanjutkan percakapan masa lalu

117 

118Klik tombol **Session history** di bagian atas panel Claude Code untuk mengakses riwayat percakapan Anda. Anda dapat mencari berdasarkan kata kunci atau menelusuri berdasarkan waktu (Today, Yesterday, Last 7 days, dll.). Klik percakapan apa pun untuk melanjutkannya dengan riwayat pesan lengkap. Sesi baru menerima judul yang dihasilkan AI berdasarkan pesan pertama Anda. Arahkan kursor ke sesi untuk mengungkapkan tindakan rename dan remove: rename untuk memberikan judul deskriptif, atau remove untuk menghapusnya dari daftar. Untuk lebih lanjut tentang melanjutkan sesi, lihat [Alur kerja umum](/id/common-workflows#resume-previous-conversations).

119 

120### Lanjutkan sesi jarak jauh dari Claude.ai

121 

122Jika Anda menggunakan [Claude Code di web](/id/claude-code-on-the-web), Anda dapat melanjutkan sesi jarak jauh tersebut langsung di VS Code. Ini memerlukan masuk dengan **Claude.ai Subscription**, bukan Anthropic Console.

123 

124<Steps>

125 <Step title="Buka riwayat sesi">

126 Klik tombol **Session history** di bagian atas panel Claude Code.

127 </Step>

128 

129 <Step title="Pilih tab Remote">

130 Dialog menampilkan dua tab: Local dan Remote. Klik **Remote** untuk melihat sesi dari claude.ai.

131 </Step>

132 

133 <Step title="Pilih sesi untuk dilanjutkan">

134 Telusuri atau cari sesi jarak jauh Anda. Klik sesi apa pun untuk mengunduhnya dan melanjutkan percakapan secara lokal.

135 </Step>

136</Steps>

137 

138<Note>

139 Hanya sesi web yang dimulai dengan repositori GitHub yang muncul di tab Remote. Melanjutkan memuat riwayat percakapan secara lokal; perubahan tidak disinkronkan kembali ke claude.ai.

140</Note>

141 

142## Sesuaikan alur kerja Anda

143 

144Setelah Anda siap dan berjalan, Anda dapat memposisikan ulang panel Claude, menjalankan beberapa sesi, atau beralih ke mode terminal.

145 

146### Pilih di mana Claude berada

147 

148Anda dapat menyeret panel Claude untuk memposisikan ulang di mana saja di VS Code. Ambil tab atau title bar panel dan seret ke:

149 

150* **Secondary sidebar**: sisi kanan jendela. Membuat Claude tetap terlihat saat Anda coding.

151* **Primary sidebar**: sidebar kiri dengan ikon untuk Explorer, Search, dll.

152* **Editor area**: membuka Claude sebagai tab bersama file Anda. Berguna untuk tugas sampingan.

153 

154<Tip>

155 Gunakan sidebar untuk sesi Claude utama Anda dan buka tab tambahan untuk tugas sampingan. Claude mengingat lokasi pilihan Anda. Ikon daftar sesi Activity Bar terpisah dari panel Claude: daftar sesi selalu terlihat di Activity Bar, sementara ikon panel Claude hanya muncul di sana saat panel ditambatkan ke sidebar kiri.

156</Tip>

157 

158### Jalankan beberapa percakapan

159 

160Gunakan **Open in New Tab** atau **Open in New Window** dari Command Palette untuk memulai percakapan tambahan. Setiap percakapan mempertahankan riwayat dan konteksnya sendiri, memungkinkan Anda bekerja pada tugas berbeda secara paralel.

161 

162Saat menggunakan tab, titik berwarna kecil pada ikon spark menunjukkan status: biru berarti permintaan izin tertunda, oranye berarti Claude selesai saat tab tersembunyi.

163 

164### Beralih ke mode terminal

165 

166Secara default, ekstensi membuka panel chat grafis. Jika Anda lebih suka antarmuka gaya CLI, buka [pengaturan Use Terminal](vscode://settings/claudeCode.useTerminal) dan centang kotak.

167 

168Anda juga dapat membuka pengaturan VS Code (`Cmd+,` di Mac atau `Ctrl+,` di Windows/Linux), buka Extensions → Claude Code, dan centang **Use Terminal**.

169 

170## Kelola plugins

171 

172Ekstensi VS Code mencakup antarmuka grafis untuk menginstal dan mengelola [plugins](/id/plugins). Ketik `/plugins` di kotak prompt untuk membuka antarmuka **Manage plugins**.

173 

174### Instal plugins

175 

176Dialog plugin menampilkan dua tab: **Plugins** dan **Marketplaces**.

177 

178Di tab Plugins:

179 

180* **Installed plugins** muncul di bagian atas dengan switch toggle untuk mengaktifkan atau menonaktifkannya

181* **Available plugins** dari marketplace yang dikonfigurasi muncul di bawah

182* Cari untuk memfilter plugins berdasarkan nama atau deskripsi

183* Klik **Install** pada plugin yang tersedia apa pun

184 

185Saat Anda menginstal plugin, pilih cakupan instalasi:

186 

187* **Install for you**: tersedia di semua proyek Anda (user scope)

188* **Install for this project**: dibagikan dengan kolaborator proyek (project scope)

189* **Install locally**: hanya untuk Anda, hanya di repositori ini (local scope)

190 

191### Kelola marketplaces

192 

193Beralih ke tab **Marketplaces** untuk menambah atau menghapus sumber plugin:

194 

195* Masukkan repo GitHub, URL, atau jalur lokal untuk menambahkan marketplace baru

196* Klik ikon refresh untuk memperbarui daftar plugin marketplace

197* Klik ikon trash untuk menghapus marketplace

198 

199Setelah membuat perubahan, banner meminta Anda untuk restart Claude Code untuk menerapkan pembaruan.

200 

201<Note>

202 Manajemen plugin di VS Code menggunakan perintah CLI yang sama di balik layar. Plugins dan marketplaces yang Anda konfigurasi di ekstensi juga tersedia di CLI, dan sebaliknya.

203</Note>

204 

205Untuk lebih lanjut tentang sistem plugin, lihat [Plugins](/id/plugins) dan [Plugin marketplaces](/id/plugin-marketplaces).

206 

207## Otomatisasi tugas browser dengan Chrome

208 

209Hubungkan Claude ke browser Chrome Anda untuk menguji aplikasi web, debug dengan console logs, dan otomatisasi alur kerja browser tanpa meninggalkan VS Code. Ini memerlukan ekstensi [Claude in Chrome](https://chromewebstore.google.com/detail/claude/fcoeoabgfenejglbffodgkkbkcdhcgfn) versi 1.0.36 atau lebih tinggi.

210 

211Ketik `@browser` di kotak prompt diikuti dengan apa yang ingin Anda lakukan Claude:

212 

213```text theme={null}

214@browser go to localhost:3000 and check the console for errors

215```

216 

217Anda juga dapat membuka menu lampiran untuk memilih alat browser tertentu seperti membuka tab baru atau membaca konten halaman.

218 

219Claude membuka tab baru untuk tugas browser dan berbagi status login browser Anda, sehingga dapat mengakses situs apa pun yang sudah Anda masuki.

220 

221Untuk instruksi setup, daftar lengkap kemampuan, dan troubleshooting, lihat [Gunakan Claude Code dengan Chrome](/id/chrome).

222 

223## Perintah dan pintasan VS Code

224 

225Buka Command Palette (`Cmd+Shift+P` di Mac atau `Ctrl+Shift+P` di Windows/Linux) dan ketik "Claude Code" untuk melihat semua perintah VS Code yang tersedia untuk ekstensi Claude Code.

226 

227Beberapa pintasan tergantung pada panel mana yang "focused" (menerima input keyboard). Saat kursor Anda berada di file kode, editor difokuskan. Saat kursor Anda berada di kotak prompt Claude, Claude difokuskan. Gunakan `Cmd+Esc` / `Ctrl+Esc` untuk beralih di antara keduanya.

228 

229<Note>

230 Ini adalah perintah VS Code untuk mengontrol ekstensi. Tidak semua perintah Claude Code bawaan tersedia di ekstensi. Lihat [Ekstensi VS Code vs. Claude Code CLI](#vs-code-extension-vs-claude-code-cli) untuk detail.

231</Note>

232 

233| Perintah | Pintasan | Deskripsi |

234| -------------------------- | -------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |

235| Focus Input | `Cmd+Esc` (Mac) / `Ctrl+Esc` (Windows/Linux) | Alihkan fokus antara editor dan Claude |

236| Open in Side Bar | - | Buka Claude di sidebar kiri |

237| Open in Terminal | - | Buka Claude dalam mode terminal |

238| Open in New Tab | `Cmd+Shift+Esc` (Mac) / `Ctrl+Shift+Esc` (Windows/Linux) | Buka percakapan baru sebagai tab editor |

239| Open in New Window | - | Buka percakapan baru di jendela terpisah |

240| New Conversation | `Cmd+N` (Mac) / `Ctrl+N` (Windows/Linux) | Mulai percakapan baru. Memerlukan Claude difokuskan dan `enableNewConversationShortcut` diatur ke `true` |

241| Insert @-Mention Reference | `Option+K` (Mac) / `Alt+K` (Windows/Linux) | Sisipkan referensi ke file saat ini dan pilihan (memerlukan editor difokuskan) |

242| Show Logs | - | Lihat log debug ekstensi |

243| Logout | - | Keluar dari akun Anthropic Anda |

244 

245### Luncurkan tab VS Code dari alat lain

246 

247Ekstensi mendaftarkan URI handler di `vscode://anthropic.claude-code/open`. Gunakan untuk membuka tab Claude Code baru dari tooling Anda sendiri: alias shell, bookmarklet browser, atau script apa pun yang dapat membuka URL. Jika VS Code belum berjalan, membuka URL meluncurkannya terlebih dahulu. Jika VS Code sudah berjalan, URL terbuka di jendela mana pun yang saat ini difokuskan.

248 

249Panggil handler dengan pembuka URL sistem operasi Anda.

250 

251<Tabs>

252 <Tab title="macOS">

253 ```bash theme={null}

254 open "vscode://anthropic.claude-code/open"

255 ```

256 </Tab>

257 

258 <Tab title="Linux">

259 ```bash theme={null}

260 xdg-open "vscode://anthropic.claude-code/open"

261 ```

262 </Tab>

263 

264 <Tab title="Windows">

265 Di PowerShell:

266 

267 ```powershell theme={null}

268 Start-Process "vscode://anthropic.claude-code/open"

269 ```

270 

271 Di `cmd.exe`, `start` memperlakukan argumen pertama yang dikutip sebagai judul jendela, jadi berikan judul kosong sebelum URL:

272 

273 ```cmd theme={null}

274 start "" "vscode://anthropic.claude-code/open"

275 ```

276 </Tab>

277</Tabs>

278 

279Handler menerima dua parameter query opsional:

280 

281| Parameter | Deskripsi |

282| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

283| `prompt` | Teks untuk pre-fill di kotak prompt. Harus URL-encoded. Prompt di-pre-fill tetapi tidak dikirim secara otomatis. |

284| `session` | ID sesi untuk dilanjutkan alih-alih memulai percakapan baru. Sesi harus milik workspace yang saat ini terbuka di VS Code. Jika sesi tidak ditemukan, percakapan segar dimulai sebagai gantinya. Jika sesi sudah terbuka di tab, tab tersebut difokuskan. Untuk menangkap ID sesi secara terprogram, lihat [Continue conversations](/id/headless#continue-conversations). |

285 

286Misalnya, untuk membuka tab yang di-pre-fill dengan "review my changes":

287 

288```text theme={null}

289vscode://anthropic.claude-code/open?prompt=review%20my%20changes

290```

291 

292Untuk meluncurkan sesi terminal alih-alih tab VS Code, gunakan handler `claude-cli://` CLI. Lihat [Launch sessions from links](/id/deep-links).

293 

294## Konfigurasi pengaturan

295 

296Ekstensi memiliki dua jenis pengaturan:

297 

298* **Extension settings** di VS Code: mengontrol perilaku ekstensi dalam VS Code. Buka dengan `Cmd+,` (Mac) atau `Ctrl+,` (Windows/Linux), kemudian buka Extensions → Claude Code. Anda juga dapat mengetik `/` dan memilih **General Config** untuk membuka pengaturan.

299* **Claude Code settings** di `~/.claude/settings.json`: dibagikan antara ekstensi dan CLI. Gunakan untuk perintah yang diizinkan, variabel lingkungan, hooks, dan MCP servers. Lihat [Settings](/id/settings) untuk detail.

300 

301<Tip>

302 Tambahkan `"$schema": "https://json.schemastore.org/claude-code-settings.json"` ke `settings.json` Anda untuk mendapatkan autocomplete dan validasi inline untuk semua pengaturan yang tersedia langsung di VS Code.

303</Tip>

304 

305### Pengaturan ekstensi

306 

307| Pengaturan | Default | Deskripsi |

308| --------------------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

309| `useTerminal` | `false` | Luncurkan Claude dalam mode terminal alih-alih panel grafis |

310| `initialPermissionMode` | `default` | Mengontrol prompt persetujuan untuk percakapan baru: `default`, `plan`, `acceptEdits`, atau `bypassPermissions`. Lihat [permission modes](/id/permission-modes). |

311| `preferredLocation` | `panel` | Di mana Claude terbuka: `sidebar` (kanan) atau `panel` (tab baru) |

312| `autosave` | `true` | Auto-save file sebelum Claude membaca atau menulisnya |

313| `useCtrlEnterToSend` | `false` | Gunakan Ctrl/Cmd+Enter alih-alih Enter untuk mengirim prompt |

314| `enableNewConversationShortcut` | `false` | Aktifkan Cmd/Ctrl+N untuk memulai percakapan baru |

315| `hideOnboarding` | `false` | Sembunyikan daftar periksa onboarding (ikon graduation cap) |

316| `respectGitIgnore` | `true` | Kecualikan pola .gitignore dari pencarian file |

317| `usePythonEnvironment` | `true` | Aktifkan lingkungan Python workspace saat menjalankan Claude. Memerlukan ekstensi Python. |

318| `environmentVariables` | `[]` | Atur variabel lingkungan untuk proses Claude. Gunakan pengaturan Claude Code sebagai gantinya untuk konfigurasi bersama. |

319| `disableLoginPrompt` | `false` | Lewati prompt autentikasi (untuk setup penyedia pihak ketiga) |

320| `allowDangerouslySkipPermissions` | `false` | Menambahkan [Auto mode](/id/permission-modes#eliminate-prompts-with-auto-mode) dan Bypass permissions ke pemilih mode. Auto mode memiliki [persyaratan plan, admin, model, dan provider](/id/permission-modes#eliminate-prompts-with-auto-mode), jadi mungkin tetap tidak tersedia bahkan dengan toggle ini aktif. Gunakan Bypass permissions hanya di sandbox tanpa akses internet. |

321| `claudeProcessWrapper` | - | Jalur executable yang digunakan untuk meluncurkan proses Claude |

322 

323## Ekstensi VS Code vs. Claude Code CLI

324 

325Claude Code tersedia sebagai ekstensi VS Code (panel grafis) dan CLI (command-line interface di terminal). Beberapa fitur hanya tersedia di CLI. Jika Anda memerlukan fitur khusus CLI, jalankan `claude` di terminal terintegrasi VS Code.

326 

327| Fitur | CLI | Ekstensi VS Code |

328| ---------------------- | --------------------- | ------------------------------------------------------------------------------------------ |

329| Perintah dan skills | [Semua](/id/commands) | Subset (ketik `/` untuk melihat yang tersedia) |

330| Konfigurasi MCP server | Ya | Parsial (tambahkan server melalui CLI; kelola server yang ada dengan `/mcp` di panel chat) |

331| Checkpoints | Ya | Ya |

332| Pintasan bash `!` | Ya | Tidak |

333| Tab completion | Ya | Tidak |

334 

335### Rewind dengan checkpoints

336 

337Ekstensi VS Code mendukung checkpoints, yang melacak edit file Claude dan memungkinkan Anda untuk rewind ke status sebelumnya. Arahkan kursor ke pesan apa pun untuk mengungkapkan tombol rewind, kemudian pilih dari tiga opsi:

338 

339* **Fork conversation from here**: mulai cabang percakapan baru dari pesan ini sambil menjaga semua perubahan kode tetap utuh

340* **Rewind code to here**: kembalikan perubahan file ke titik ini dalam percakapan sambil menjaga riwayat percakapan lengkap

341* **Fork conversation and rewind code**: mulai cabang percakapan baru dan kembalikan perubahan file ke titik ini

342 

343Untuk detail lengkap tentang cara kerja checkpoints dan keterbatasannya, lihat [Checkpointing](/id/checkpointing).

344 

345### Jalankan CLI di VS Code

346 

347Untuk menggunakan CLI sambil tetap berada di VS Code, buka terminal terintegrasi (`` Ctrl+` `` di Windows/Linux atau `` Cmd+` `` di Mac) dan jalankan `claude`. CLI secara otomatis terintegrasi dengan IDE Anda untuk fitur seperti tampilan diff dan berbagi diagnostik.

348 

349Jika menggunakan terminal eksternal, jalankan `/ide` di dalam Claude Code untuk menghubungkannya ke VS Code.

350 

351### Beralih antara ekstensi dan CLI

352 

353Ekstensi dan CLI berbagi riwayat percakapan yang sama. Untuk melanjutkan percakapan ekstensi di CLI, jalankan `claude --resume` di terminal. Ini membuka picker interaktif di mana Anda dapat mencari dan memilih percakapan Anda.

354 

355### Sertakan output terminal dalam prompt

356 

357Referensikan output terminal dalam prompt Anda menggunakan `@terminal:name` di mana `name` adalah judul terminal. Ini memungkinkan Claude melihat output perintah, pesan kesalahan, atau log tanpa copy-paste.

358 

359### Pantau proses latar belakang

360 

361Saat Claude menjalankan perintah yang berjalan lama, ekstensi menampilkan kemajuan di status bar. Namun, visibilitas untuk tugas latar belakang terbatas dibandingkan dengan CLI. Untuk visibilitas yang lebih baik, minta Claude menampilkan perintah sehingga Anda dapat menjalankannya di terminal terintegrasi VS Code.

362 

363### Hubungkan ke alat eksternal dengan MCP

364 

365MCP (Model Context Protocol) servers memberikan Claude akses ke alat eksternal, database, dan API.

366 

367Untuk menambahkan MCP server, buka terminal terintegrasi (`` Ctrl+` `` atau `` Cmd+` ``) dan jalankan `claude mcp add`. Contoh di bawah ini menambahkan MCP server jarak jauh GitHub, yang melakukan autentikasi dengan [personal access token](https://github.com/settings/personal-access-tokens) yang diteruskan sebagai header:

368 

369```bash theme={null}

370claude mcp add --transport http github https://api.githubcopilot.com/mcp/ \

371 --header "Authorization: Bearer YOUR_GITHUB_PAT"

372```

373 

374Setelah dikonfigurasi, minta Claude untuk menggunakan alat (misalnya, "Review PR #456").

375 

376Untuk mengelola MCP servers tanpa meninggalkan VS Code, ketik `/mcp` di panel chat. Dialog manajemen MCP memungkinkan Anda mengaktifkan atau menonaktifkan server, reconnect ke server, dan mengelola autentikasi OAuth. Lihat [dokumentasi MCP](/id/mcp) untuk server yang tersedia.

377 

378## Bekerja dengan git

379 

380Claude Code terintegrasi dengan git untuk membantu dengan alur kerja kontrol versi langsung di VS Code. Minta Claude untuk commit perubahan, membuat pull request, atau bekerja di seluruh branch.

381 

382### Buat commit dan pull request

383 

384Claude dapat stage perubahan, menulis pesan commit, dan membuat pull request berdasarkan pekerjaan Anda:

385 

386```text theme={null}

387> commit my changes with a descriptive message

388> create a pr for this feature

389> summarize the changes I've made to the auth module

390```

391 

392Saat membuat pull request, Claude menghasilkan deskripsi berdasarkan perubahan kode aktual dan dapat menambahkan konteks tentang pengujian atau keputusan implementasi.

393 

394### Gunakan git worktrees untuk tugas paralel

395 

396Gunakan flag `--worktree` (`-w`) untuk memulai Claude di worktree terisolasi dengan file dan branch-nya sendiri:

397 

398```bash theme={null}

399claude --worktree feature-auth

400```

401 

402Setiap worktree mempertahankan status file independen sambil berbagi riwayat git. Ini mencegah instance Claude saling mengganggu saat bekerja pada tugas berbeda. Untuk detail lebih lanjut, lihat [Jalankan sesi Claude paralel dengan Git worktrees](/id/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees).

403 

404## Gunakan penyedia pihak ketiga

405 

406Secara default, Claude Code terhubung langsung ke API Anthropic. Jika organisasi Anda menggunakan Amazon Bedrock, Google Vertex AI, atau Microsoft Foundry untuk mengakses Claude, konfigurasi ekstensi untuk menggunakan penyedia Anda sebagai gantinya:

407 

408<Steps>

409 <Step title="Nonaktifkan prompt login">

410 Buka pengaturan [Disable Login Prompt](vscode://settings/claudeCode.disableLoginPrompt) dan centang kotak.

411 

412 Anda juga dapat membuka pengaturan VS Code (`Cmd+,` di Mac atau `Ctrl+,` di Windows/Linux), cari "Claude Code login", dan centang **Disable Login Prompt**.

413 </Step>

414 

415 <Step title="Konfigurasi penyedia Anda">

416 Ikuti panduan setup untuk penyedia Anda:

417 

418 * [Claude Code di Amazon Bedrock](/id/amazon-bedrock)

419 * [Claude Code di Google Vertex AI](/id/google-vertex-ai)

420 * [Claude Code di Microsoft Foundry](/id/microsoft-foundry)

421 

422 Panduan ini mencakup konfigurasi penyedia Anda di `~/.claude/settings.json`, yang memastikan pengaturan Anda dibagikan antara ekstensi VS Code dan CLI.

423 </Step>

424</Steps>

425 

426## Keamanan dan privasi

427 

428Kode Anda tetap pribadi. Claude Code memproses kode Anda untuk memberikan bantuan tetapi tidak menggunakannya untuk melatih model. Untuk detail tentang penanganan data dan cara opt out dari logging, lihat [Data and privacy](/id/data-usage).

429 

430Dengan izin auto-edit diaktifkan, Claude Code dapat memodifikasi file konfigurasi VS Code (seperti `settings.json` atau `tasks.json`) yang mungkin dijalankan VS Code secara otomatis. Untuk mengurangi risiko saat bekerja dengan kode yang tidak dipercaya:

431 

432* Aktifkan [VS Code Restricted Mode](https://code.visualstudio.com/docs/editor/workspace-trust#_restricted-mode) untuk workspace yang tidak dipercaya

433* Gunakan mode persetujuan manual alih-alih auto-accept untuk edit

434* Tinjau perubahan dengan hati-hati sebelum menerimanya

435 

436### Server MCP IDE bawaan

437 

438Saat ekstensi aktif, ia menjalankan server MCP lokal yang terhubung oleh CLI secara otomatis. Ini adalah cara CLI membuka diff di viewer diff asli VS Code, membaca pilihan saat ini Anda untuk `@`-mentions, dan — saat Anda bekerja di notebook Jupyter — meminta VS Code untuk menjalankan sel.

439 

440Server bernama `ide` dan tersembunyi dari `/mcp` karena tidak ada yang perlu dikonfigurasi. Namun, jika organisasi Anda menggunakan hook `PreToolUse` untuk allowlist alat MCP, Anda perlu mengetahui bahwa itu ada.

441 

442**Transport dan autentikasi.** Server mengikat ke `127.0.0.1` pada port tinggi acak dan tidak dapat dijangkau dari mesin lain. Setiap aktivasi ekstensi menghasilkan token auth acak segar yang harus disajikan CLI untuk terhubung. Token ditulis ke file kunci di bawah `~/.claude/ide/` dengan izin `0600` di direktori `0700`, jadi hanya pengguna yang menjalankan VS Code yang dapat membacanya.

443 

444**Alat yang diekspos ke model.** Server menampilkan selusin alat, tetapi hanya dua yang terlihat oleh model. Sisanya adalah RPC internal yang digunakan CLI untuk UI-nya sendiri — membuka diff, membaca pilihan, menyimpan file — dan disaring sebelum daftar alat mencapai Claude.

445 

446| Nama alat (seperti yang terlihat oleh hooks) | Apa yang dilakukannya | Menulis? |

447| -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | -------- |

448| `mcp__ide__getDiagnostics` | Mengembalikan diagnostik language-server — kesalahan dan peringatan di panel Problems VS Code. Secara opsional dibatasi ke satu file. | Tidak |

449| `mcp__ide__executeCode` | Menjalankan kode Python di kernel notebook Jupyter yang aktif. Lihat alur konfirmasi di bawah. | Ya |

450 

451**Eksekusi Jupyter selalu bertanya terlebih dahulu.** `mcp__ide__executeCode` tidak dapat menjalankan apa pun secara diam-diam. Pada setiap panggilan, kode dimasukkan sebagai sel baru di akhir notebook aktif, VS Code menggulirnya ke tampilan, dan Quick Pick asli meminta Anda untuk **Execute** atau **Cancel**. Membatalkan — atau menutup picker dengan `Esc` — mengembalikan kesalahan ke Claude dan tidak ada yang berjalan. Alat juga menolak dengan tegas saat tidak ada notebook aktif, saat ekstensi Jupyter (`ms-toolsai.jupyter`) tidak diinstal, atau saat kernel bukan Python.

452 

453<Note>

454 Konfirmasi Quick Pick terpisah dari hook `PreToolUse`. Entri allowlist untuk `mcp__ide__executeCode` memungkinkan Claude *mengusulkan* menjalankan sel; Quick Pick di dalam VS Code adalah apa yang memungkinkannya *benar-benar* berjalan.

455</Note>

456 

457<a id="troubleshooting" />

458 

459## Perbaiki masalah umum

460 

461### Ekstensi tidak akan diinstal

462 

463* Pastikan Anda memiliki versi VS Code yang kompatibel (1.98.0 atau lebih baru)

464* Periksa bahwa VS Code memiliki izin untuk menginstal ekstensi

465* Coba instal langsung dari [VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=anthropic.claude-code)

466 

467### Ikon Spark tidak terlihat

468 

469Ikon Spark muncul di **Editor Toolbar** (kanan atas editor) saat Anda memiliki file terbuka. Jika Anda tidak melihatnya:

470 

4711. **Buka file**: Ikon memerlukan file untuk dibuka. Hanya membuka folder tidak cukup.

4722. **Periksa versi VS Code**: Memerlukan 1.98.0 atau lebih tinggi (Help → About)

4733. **Restart VS Code**: Jalankan "Developer: Reload Window" dari Command Palette

4744. **Nonaktifkan ekstensi yang bertentangan**: Sementara nonaktifkan ekstensi AI lainnya (Cline, Continue, dll.)

4755. **Periksa kepercayaan workspace**: Ekstensi tidak berfungsi dalam Restricted Mode

476 

477Alternatifnya, klik "✱ Claude Code" di **Status Bar** (sudut kanan bawah). Ini berfungsi bahkan tanpa file terbuka. Anda juga dapat menggunakan **Command Palette** (`Cmd+Shift+P` / `Ctrl+Shift+P`) dan ketik "Claude Code".

478 

479### Claude Code tidak pernah merespons

480 

481Jika Claude Code tidak merespons prompt Anda:

482 

4831. **Periksa koneksi internet Anda**: Pastikan Anda memiliki koneksi internet yang stabil

4842. **Mulai percakapan baru**: Coba mulai percakapan segar untuk melihat apakah masalah berlanjut

4853. **Coba CLI**: Jalankan `claude` dari terminal untuk melihat apakah Anda mendapatkan pesan kesalahan yang lebih detail

486 

487Jika masalah berlanjut, [file an issue on GitHub](https://github.com/anthropics/claude-code/issues) dengan detail tentang kesalahan.

488 

489## Uninstal ekstensi

490 

491Untuk menguninstal ekstensi Claude Code:

492 

4931. Buka tampilan Extensions (`Cmd+Shift+X` di Mac atau `Ctrl+Shift+X` di Windows/Linux)

4942. Cari "Claude Code"

4953. Klik **Uninstall**

496 

497Untuk juga menghapus data ekstensi dan reset semua pengaturan:

498 

499```bash theme={null}

500rm -rf ~/.vscode/globalStorage/anthropic.claude-code

501```

502 

503Untuk bantuan tambahan, lihat [panduan troubleshooting](/id/troubleshooting).

504 

505## Langkah berikutnya

506 

507Sekarang Anda telah menyiapkan Claude Code di VS Code:

508 

509* [Jelajahi alur kerja umum](/id/common-workflows) untuk mendapatkan hasil maksimal dari Claude Code

510* [Siapkan MCP servers](/id/mcp) untuk memperluas kemampuan Claude dengan alat eksternal. Tambahkan server menggunakan CLI, kemudian kelola dengan `/mcp` di panel chat.

511* [Konfigurasi pengaturan Claude Code](/id/settings) untuk menyesuaikan perintah yang diizinkan, hooks, dan lainnya. Pengaturan ini dibagikan antara ekstensi dan CLI.

web-quickstart.md +220 −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# Mulai dengan Claude Code di web

6 

7> Jalankan Claude Code di cloud dari browser atau ponsel Anda. Hubungkan repositori GitHub, kirimkan tugas, dan tinjau PR tanpa setup lokal.

8 

9<Note>

10 Claude Code di web sedang dalam pratinjau penelitian untuk pengguna Pro, Max, dan Team, serta untuk pengguna Enterprise dengan kursi premium atau kursi Chat + Claude Code.

11</Note>

12 

13Claude Code di web berjalan pada infrastruktur cloud yang dikelola Anthropic alih-alih mesin Anda. Kirimkan tugas dari [claude.ai/code](https://claude.ai/code) di browser Anda atau aplikasi mobile Claude.

14 

15Anda memerlukan repositori GitHub untuk [memulai](#connect-github-and-create-an-environment). Claude mengklonnya ke mesin virtual yang terisolasi, membuat perubahan, dan mendorong cabang untuk Anda tinjau. Sesi bertahan di seluruh perangkat, jadi tugas yang Anda mulai di laptop siap ditinjau dari ponsel Anda nanti.

16 

17Claude Code di web bekerja dengan baik untuk:

18 

19* **Tugas paralel**: jalankan beberapa tugas independen sekaligus, masing-masing dalam sesi dan cabangnya sendiri, tanpa mengelola beberapa worktrees

20* **Repo yang tidak Anda miliki secara lokal**: Claude mengklonkan repo segar setiap sesi, jadi Anda tidak perlu memeriksanya

21* **Tugas yang tidak memerlukan pengarahan sering**: kirimkan tugas yang terdefinisi dengan baik, lakukan sesuatu yang lain, dan tinjau hasilnya ketika Claude selesai

22* **Pertanyaan kode dan eksplorasi**: pahami basis kode atau lacak bagaimana fitur diimplementasikan tanpa checkout lokal

23 

24Untuk pekerjaan yang memerlukan konfigurasi lokal, alat, atau lingkungan Anda, menjalankan Claude Code secara lokal atau menggunakan [Remote Control](/id/remote-control) adalah pilihan yang lebih baik.

25 

26## Bagaimana sesi berjalan

27 

28Ketika Anda mengirimkan tugas:

29 

301. **Klonkan dan persiapkan**: repositori Anda diklonkan ke VM yang dikelola Anthropic, dan [skrip setup](/id/claude-code-on-the-web#setup-scripts) Anda berjalan jika dikonfigurasi.

312. **Konfigurasi jaringan**: akses internet diatur berdasarkan [tingkat akses](/id/claude-code-on-the-web#access-levels) lingkungan Anda.

323. **Bekerja**: Claude menganalisis kode, membuat perubahan, menjalankan tes, dan memeriksa pekerjaannya. Anda dapat menonton dan mengarahkan sepanjang waktu, atau pergi dan kembali ketika selesai.

334. **Dorong cabang**: ketika Claude mencapai titik pemberhentian, ia mendorong cabangnya ke GitHub. Anda meninjau diff, meninggalkan komentar inline, membuat PR, atau mengirim pesan lain untuk melanjutkan.

34 

35Sesi tidak ditutup ketika cabang didorong. Pembuatan PR dan pengeditan lebih lanjut semuanya terjadi dalam percakapan yang sama.

36 

37## Bandingkan cara menjalankan Claude Code

38 

39Claude Code berperilaku sama di mana pun. Yang berubah adalah tempat kode dieksekusi dan apakah konfigurasi lokal Anda tersedia. Aplikasi Desktop menawarkan sesi lokal dan cloud, jadi jawaban di bawah ini tergantung pada yang Anda pilih:

40 

41| | Di web | Remote Control | Terminal CLI | Aplikasi Desktop |

42| :------------------------------------- | :----------------------------------------------------------------------------------------------------------------- | :---------------------------------- | :------------------ | :-------------------------------- |

43| **Kode berjalan di** | VM cloud Anthropic | Mesin Anda | Mesin Anda | Mesin Anda atau VM cloud |

44| **Anda chat dari** | claude.ai atau aplikasi mobile | claude.ai atau aplikasi mobile | Terminal Anda | UI Desktop |

45| **Menggunakan konfigurasi lokal Anda** | Tidak, hanya repo | Ya | Ya | Ya untuk lokal, tidak untuk cloud |

46| **Memerlukan GitHub** | Ya, atau [bundel repo lokal](/id/claude-code-on-the-web#send-local-repositories-without-github) melalui `--remote` | Tidak | Tidak | Hanya untuk sesi cloud |

47| **Terus berjalan jika Anda terputus** | Ya | Selama terminal tetap terbuka | Tidak | Tergantung jenis sesi |

48| **[Mode izin](/id/permission-modes)** | Terima otomatis editan, Plan | Tanya, Terima otomatis editan, Plan | Semua mode | Tergantung jenis sesi |

49| **Akses jaringan** | Dapat dikonfigurasi per lingkungan | Jaringan mesin Anda | Jaringan mesin Anda | Tergantung jenis sesi |

50 

51Lihat dokumentasi [terminal quickstart](/id/quickstart), [Aplikasi Desktop](/id/desktop), atau [Remote Control](/id/remote-control) untuk mengaturnya.

52 

53## Hubungkan GitHub dan buat lingkungan

54 

55Setup adalah proses satu kali. Jika Anda sudah menggunakan GitHub CLI, Anda dapat [melakukan ini dari terminal Anda](#connect-from-your-terminal) alih-alih browser.

56 

57<Steps>

58 <Step title="Kunjungi claude.ai/code">

59 Buka [claude.ai/code](https://claude.ai/code) dan masuk dengan akun Anthropic Anda.

60 </Step>

61 

62 <Step title="Instal Aplikasi Claude GitHub">

63 Setelah masuk, claude.ai/code meminta Anda untuk menghubungkan GitHub. Ikuti prompt untuk menginstal Aplikasi Claude GitHub dan memberikan akses ke repositori Anda. Sesi cloud bekerja dengan repositori GitHub yang ada, jadi untuk memulai proyek baru, [buat repositori kosong di GitHub](https://github.com/new) terlebih dahulu.

64 </Step>

65 

66 <Step title="Buat lingkungan Anda">

67 Setelah menghubungkan GitHub, Anda akan diminta untuk membuat lingkungan cloud. Lingkungan mengontrol akses jaringan apa yang dimiliki Claude selama sesi dan apa yang berjalan ketika sesi baru dibuat. Lihat [Alat yang Diinstal](/id/claude-code-on-the-web#installed-tools) untuk apa yang tersedia tanpa konfigurasi apa pun.

68 

69 Formulir memiliki bidang-bidang ini:

70 

71 * **Nama**: label tampilan. Berguna ketika Anda memiliki beberapa lingkungan untuk proyek atau tingkat akses yang berbeda.

72 * **Akses jaringan**: mengontrol apa yang dapat dijangkau sesi di internet. Default, `Trusted`, memungkinkan koneksi ke [registri paket umum](/id/claude-code-on-the-web#default-allowed-domains) seperti npm, PyPI, dan RubyGems sambil memblokir akses internet umum.

73 * **Variabel lingkungan**: variabel opsional yang tersedia di setiap sesi, dalam format `.env`. Jangan bungkus nilai dalam tanda kutip, karena tanda kutip disimpan sebagai bagian dari nilai. Ini terlihat oleh siapa pun yang dapat mengedit lingkungan ini.

74 * **Skrip setup**: skrip Bash opsional yang berjalan sebelum Claude Code diluncurkan. Gunakan untuk menginstal alat sistem yang tidak disertakan VM cloud, seperti `apt install -y gh`. Hasilnya [di-cache](/id/claude-code-on-the-web#environment-caching), jadi skrip tidak berjalan ulang di setiap sesi. Lihat [Skrip setup](/id/claude-code-on-the-web#setup-scripts) untuk contoh dan tips debugging.

75 

76 Untuk proyek pertama, biarkan default dan klik **Buat lingkungan**. Anda dapat [mengeditnya nanti atau membuat lingkungan tambahan](/id/claude-code-on-the-web#configure-your-environment) untuk proyek yang berbeda.

77 </Step>

78</Steps>

79 

80### Hubungkan dari terminal Anda

81 

82Jika Anda sudah menggunakan GitHub CLI (`gh`), Anda dapat mengatur Claude Code di web tanpa membuka browser. Ini memerlukan [Claude Code CLI](/id/quickstart). `/web-setup` membaca token `gh` lokal Anda, menautkannya ke akun Claude Anda, dan membuat lingkungan cloud default jika Anda tidak memilikinya.

83 

84<Note>

85 Organisasi dengan [Zero Data Retention](/id/zero-data-retention) yang diaktifkan tidak dapat menggunakan `/web-setup` atau fitur sesi cloud lainnya. Jika GitHub CLI tidak diinstal atau diautentikasi, `/web-setup` membuka alur onboarding browser sebagai gantinya.

86</Note>

87 

88<Steps>

89 <Step title="Autentikasi dengan GitHub CLI">

90 Di shell Anda, autentikasi GitHub CLI jika Anda belum melakukannya:

91 

92 ```bash theme={null}

93 gh auth login

94 ```

95 </Step>

96 

97 <Step title="Masuk ke Claude">

98 Di Claude Code CLI, jalankan `/login` untuk masuk dengan akun claude.ai Anda. Lewati langkah ini jika Anda sudah masuk.

99 </Step>

100 

101 <Step title="Jalankan /web-setup">

102 Di Claude Code CLI, jalankan:

103 

104 ```text theme={null}

105 /web-setup

106 ```

107 

108 Ini menyinkronkan token `gh` Anda ke akun Claude Anda. Jika Anda belum memiliki lingkungan cloud, `/web-setup` membuat satu dengan akses jaringan Trusted dan tanpa skrip setup. Anda dapat [mengedit lingkungan atau menambahkan variabel](/id/claude-code-on-the-web#configure-your-environment) setelahnya. Setelah `/web-setup` selesai, Anda dapat memulai sesi cloud dari terminal Anda dengan [`--remote`](/id/claude-code-on-the-web#from-terminal-to-web) atau mengatur tugas berulang dengan [`/schedule`](/id/routines).

109 </Step>

110</Steps>

111 

112## Mulai tugas

113 

114Dengan GitHub terhubung dan lingkungan dibuat, Anda siap mengirimkan tugas.

115 

116<Steps>

117 <Step title="Pilih repositori dan cabang">

118 Dari [claude.ai/code](https://claude.ai/code) atau tab Code di aplikasi mobile Claude, klik pemilih repositori di bawah kotak input dan pilih repositori untuk Claude bekerja. Setiap repositori menampilkan pemilih cabang. Ubahnya untuk memulai Claude dari cabang fitur alih-alih default. Anda dapat menambahkan beberapa repositori untuk bekerja di seluruhnya dalam satu sesi.

119 </Step>

120 

121 <Step title="Pilih mode izin">

122 Dropdown mode di sebelah input default ke **Terima otomatis editan**, di mana Claude membuat perubahan dan mendorong cabang tanpa berhenti untuk persetujuan. Beralih ke **Plan mode** jika Anda ingin Claude mengusulkan pendekatan dan menunggu persetujuan Anda sebelum mengedit file. Sesi cloud tidak menawarkan izin Ask, mode Auto, atau izin Bypass. Lihat [Mode izin](/id/permission-modes) untuk daftar lengkap.

123 </Step>

124 

125 <Step title="Jelaskan tugas dan kirimkan">

126 Ketik deskripsi apa yang Anda inginkan dan tekan Enter. Jadilah spesifik:

127 

128 * Beri nama file atau fungsi: "Tambahkan README dengan instruksi setup" atau "Perbaiki tes auth yang gagal di `tests/test_auth.py`" lebih baik daripada "perbaiki tes"

129 * Tempel output kesalahan jika Anda memilikinya

130 * Jelaskan perilaku yang diharapkan, bukan hanya gejala

131 

132 Claude mengklonkan repositori, menjalankan skrip setup Anda jika dikonfigurasi, dan mulai bekerja. Setiap tugas mendapatkan sesi sendiri dan cabangnya sendiri, jadi Anda tidak perlu menunggu satu selesai sebelum memulai yang lain.

133 </Step>

134</Steps>

135 

136## Isi sebelumnya sesi

137 

138Anda dapat mengisi sebelumnya prompt, repositori, dan lingkungan untuk sesi baru dengan menambahkan parameter query ke URL [claude.ai/code](https://claude.ai/code). Gunakan ini untuk membangun integrasi seperti tombol di pelacak masalah Anda yang membuka Claude Code dengan deskripsi masalah sebagai prompt.

139 

140| Parameter | Deskripsi |

141| :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

142| `prompt` | Teks prompt untuk diisi sebelumnya di kotak input. Alias `q` juga diterima. |

143| `prompt_url` | URL untuk mengambil teks prompt dari, untuk prompt yang terlalu panjang untuk disematkan dalam string query. URL harus memungkinkan permintaan lintas asal. Diabaikan ketika `prompt` juga diatur. |

144| `repositories` | Daftar slug `owner/repo` yang dipisahkan koma untuk dipilih sebelumnya. Alias `repo` juga diterima. |

145| `environment` | Nama atau ID [lingkungan](#connect-github-and-create-an-environment) untuk dipilih sebelumnya. |

146 

147URL-encode setiap nilai. Contoh di bawah membuka formulir dengan prompt dan repositori yang sudah dipilih:

148 

149```text theme={null}

150https://claude.ai/code?prompt=Fix%20the%20login%20bug&repositories=acme/webapp

151```

152 

153## Tinjau dan ulangi

154 

155Ketika Claude selesai, tinjau perubahan, tinggalkan umpan balik pada baris tertentu, dan terus sampai diff terlihat benar.

156 

157<Steps>

158 <Step title="Buka tampilan diff">

159 Indikator diff menunjukkan baris yang ditambahkan dan dihapus di seluruh sesi, misalnya `+42 -18`. Pilihnya untuk membuka tampilan diff, dengan daftar file di sebelah kiri dan perubahan di sebelah kanan.

160 </Step>

161 

162 <Step title="Tinggalkan komentar inline">

163 Pilih baris apa pun di diff, ketik umpan balik Anda, dan tekan Enter. Komentar antri sampai Anda mengirim pesan berikutnya, kemudian digabungkan dengannya. Claude melihat "di `src/auth.ts:47`, jangan tangkap kesalahan di sini" bersama instruksi utama Anda, jadi Anda tidak harus menjelaskan di mana masalahnya.

164 </Step>

165 

166 <Step title="Buat permintaan tarik">

167 Ketika diff terlihat benar, pilih **Buat PR** di bagian atas tampilan diff. Anda dapat membukanya sebagai PR penuh, draft, atau melompat ke halaman compose GitHub dengan judul dan deskripsi yang dihasilkan.

168 </Step>

169 

170 <Step title="Terus ulangi setelah PR">

171 Sesi tetap aktif setelah PR dibuat. Tempel output kegagalan CI atau komentar pengulas ke chat dan minta Claude untuk mengatasinya. Untuk membuat Claude memantau PR secara otomatis, lihat [Auto-fix pull requests](/id/claude-code-on-the-web#auto-fix-pull-requests).

172 </Step>

173</Steps>

174 

175## Troubleshoot setup

176 

177### Tidak ada repositori yang muncul setelah menghubungkan GitHub

178 

179Aplikasi Claude GitHub memerlukan akses eksplisit ke setiap repositori yang ingin Anda gunakan. Di github.com, buka **Settings → Applications → Claude → Configure** dan verifikasi repo Anda terdaftar di bawah **Repository access**. Repositori pribadi memerlukan otorisasi yang sama dengan yang publik.

180 

181### Halaman hanya menampilkan tombol login GitHub

182 

183Sesi cloud memerlukan akun GitHub yang terhubung. Hubungkan melalui alur browser di atas, atau jalankan `/web-setup` dari terminal Anda jika Anda menggunakan GitHub CLI. Jika Anda lebih suka tidak menghubungkan GitHub sama sekali, lihat [Remote Control](/id/remote-control) untuk menjalankan Claude Code di mesin Anda sendiri dan memantaunya dari web.

184 

185### "Tidak tersedia untuk organisasi yang dipilih"

186 

187Organisasi Enterprise mungkin memerlukan admin untuk mengaktifkan Claude Code di web. Hubungi tim akun Anthropic Anda.

188 

189### `/web-setup` mengembalikan "Perintah Tidak Dikenal"

190 

191`/web-setup` berjalan di dalam Claude Code CLI, bukan shell Anda. Luncurkan `claude` terlebih dahulu, kemudian ketik `/web-setup` di prompt.

192 

193Jika Anda mengetiknya di dalam Claude Code dan masih melihat kesalahan, CLI Anda lebih lama dari v2.1.80 atau Anda diautentikasi dengan kunci API atau penyedia pihak ketiga alih-alih langganan claude.ai. Jalankan `claude update`, kemudian `/login` untuk masuk dengan akun claude.ai Anda.

194 

195### "Tidak dapat membuat lingkungan cloud" atau "Tidak ada lingkungan cloud yang tersedia" saat menggunakan `--remote` atau ultraplan

196 

197Fitur sesi jarak jauh membuat lingkungan cloud default secara otomatis jika Anda tidak memilikinya. Jika Anda melihat "Tidak dapat membuat lingkungan cloud", pembuatan otomatis gagal. {/* max-version: 2.1.100 */}Jika Anda melihat "Tidak ada lingkungan cloud yang tersedia", CLI Anda mendahului pembuatan otomatis. Dalam kedua kasus, jalankan `/web-setup` di Claude Code CLI untuk membuat satu secara manual, atau kunjungi [claude.ai/code](https://claude.ai/code) dan ikuti langkah **Buat lingkungan Anda** di atas.

198 

199### Skrip setup gagal

200 

201Skrip setup keluar dengan status bukan nol, yang memblokir sesi dari dimulai. Penyebab umum:

202 

203* Instalasi paket gagal karena registri tidak ada di [tingkat akses jaringan](/id/claude-code-on-the-web#access-levels) Anda. `Trusted` mencakup sebagian besar manajer paket; `None` memblokir semuanya.

204* Skrip mereferensikan file atau jalur yang tidak ada dalam klon segar.

205* Perintah yang bekerja secara lokal memerlukan invokasi berbeda di Ubuntu.

206 

207Untuk debug, tambahkan `set -x` di bagian atas skrip untuk melihat perintah mana yang gagal. Untuk perintah non-kritis, tambahkan `|| true` sehingga mereka tidak memblokir awal sesi.

208 

209### Sesi terus berjalan setelah menutup tab

210 

211Ini dirancang demikian. Menutup tab atau menavigasi pergi tidak menghentikan sesi. Ini terus berjalan di latar belakang sampai Claude menyelesaikan tugas saat ini, kemudian menganggur. Dari sidebar, Anda dapat [mengarsipkan sesi](/id/claude-code-on-the-web#archive-sessions) untuk menyembunyikannya dari daftar Anda, atau [menghapusnya](/id/claude-code-on-the-web#delete-sessions) untuk menghapusnya secara permanen.

212 

213## Langkah berikutnya

214 

215Sekarang bahwa Anda dapat mengirimkan dan meninjau tugas, halaman-halaman ini mencakup apa yang akan datang: memulai sesi cloud dari terminal Anda, menjadwalkan pekerjaan berulang, dan memberikan Claude instruksi berdiri.

216 

217* [Gunakan Claude Code di web](/id/claude-code-on-the-web): referensi lengkap, termasuk teleportasi sesi ke terminal Anda, skrip setup, variabel lingkungan, dan konfigurasi jaringan

218* [Routines](/id/routines): otomatiskan pekerjaan sesuai jadwal, melalui panggilan API, atau sebagai respons terhadap peristiwa GitHub

219* [CLAUDE.md](/id/memory): berikan Claude instruksi dan konteks persisten yang dimuat di awal setiap sesi

220* Instal aplikasi mobile Claude untuk [iOS](https://apps.apple.com/us/app/claude-by-anthropic/id6473753684) atau [Android](https://play.google.com/store/apps/details?id=com.anthropic.claude) untuk memantau sesi dari ponsel Anda. Dari Claude Code CLI, `/mobile` menampilkan kode QR.

whats-new.md +49 −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# Apa yang baru

6 

7> Ringkasan mingguan fitur Claude Code yang penting, dengan cuplikan kode, demo, dan konteks tentang mengapa hal-hal ini penting.

8 

9Ringkasan dev mingguan menyoroti fitur yang paling mungkin mengubah cara Anda bekerja. Setiap entri mencakup kode yang dapat dijalankan, demo singkat, dan tautan ke dokumentasi lengkap. Untuk setiap perbaikan bug dan peningkatan kecil, lihat [changelog](/id/changelog).

10 

11<Update label="Week 17" description="April 20–24, 2026" tags={["v2.1.114–v2.1.119"]}>

12 **`/ultrareview`** dibuka sebagai pratinjau penelitian publik: armada agen pemburu bug berjalan di cloud dan temuan kembali ke CLI atau Desktop Anda secara otomatis.

13 

14 Juga minggu ini: **session recap** menunjukkan kepada Anda apa yang terjadi saat terminal tidak fokus; **custom themes** memungkinkan Anda membangun dan mengirimkan palet warna dari `/theme` atau plugin; dan **Claude Code di web** mendapat desain ulang dengan sidebar sesi baru dan tata letak drag-and-drop.

15 

16 [Baca ringkasan Week 17 →](/id/whats-new/2026-w17)

17</Update>

18 

19<Update label="Week 16" description="April 13–17, 2026" tags={["v2.1.105–v2.1.113"]}>

20 **Claude Opus 4.7** hadir sebagai default baru di Max dan Team Premium, dengan tingkat upaya `xhigh` baru yang merupakan pengaturan yang direkomendasikan untuk sebagian besar pekerjaan coding dan slider `/effort` interaktif untuk menyesuaikannya.

21 

22 Juga minggu ini: **Routines** di Claude Code di web menjalankan agen cloud templated dari jadwal, acara GitHub, atau panggilan API; `/ultrareview` menjalankan tinjauan kode multi-agen paralel di cloud; `/usage` menunjukkan apa yang mendorong batas Anda; dan CLI bergerak ke biner asli.

23 

24 [Baca ringkasan Week 16 →](/id/whats-new/2026-w16)

25</Update>

26 

27<Update label="Week 15" description="April 6–10, 2026" tags={["v2.1.92–v2.1.101"]}>

28 **Ultraplan** memasuki pratinjau awal: buat rencana di cloud dari CLI Anda, tinjau dan beri komentar di editor web, kemudian jalankan secara jarak jauh atau tarik kembali secara lokal. Jalankan pertama kali sekarang secara otomatis membuat lingkungan cloud untuk Anda.

29 

30 Juga minggu ini: alat **Monitor** mengalirkan acara latar belakang ke dalam percakapan sehingga Claude dapat mengikuti log dan bereaksi secara langsung, `/loop` menyesuaikan diri sendiri saat Anda menghilangkan interval, `/team-onboarding` mengemas pengaturan Anda menjadi panduan yang dapat diputar ulang, dan `/autofix-pr` mengaktifkan perbaikan otomatis PR dari terminal Anda.

31 

32 [Baca ringkasan Week 15 →](/id/whats-new/2026-w15)

33</Update>

34 

35<Update label="Week 14" description="March 30 – April 3, 2026" tags={["v2.1.86–v2.1.91"]}>

36 **Computer use** hadir ke CLI dalam pratinjau penelitian: Claude dapat membuka aplikasi asli, mengklik melalui UI, dan memverifikasi perubahan dari terminal Anda. Terbaik untuk menutup loop pada hal-hal yang hanya GUI yang dapat verifikasi.

37 

38 Juga minggu ini: pelajaran interaktif `/powerup`, rendering alt-screen bebas flicker, override ukuran hasil MCP per-tool hingga 500K, dan executable plugin di `PATH` alat Bash.

39 

40 [Baca ringkasan Week 14 →](/id/whats-new/2026-w14)

41</Update>

42 

43<Update label="Week 13" description="March 23–27, 2026" tags={["v2.1.83–v2.1.85"]}>

44 **Auto mode** hadir dalam pratinjau penelitian: pengklasifikasi menangani prompt izin Anda sehingga tindakan aman berjalan tanpa gangguan dan yang berisiko diblokir. Jalan tengah antara menyetujui semuanya dan `--dangerously-skip-permissions`.

45 

46 Juga minggu ini: computer use di aplikasi Desktop, perbaikan otomatis PR di Web, pencarian transkrip dengan `/`, alat PowerShell asli untuk Windows, dan hook `if` bersyarat.

47 

48 [Baca ringkasan Week 13 →](/id/whats-new/2026-w13)

49</Update>

whats-new/2026-w16.md +135 −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# Minggu 16 · 13–17 April 2026

6 

7> Claude Opus 4.7 dengan tingkat upaya xhigh baru, Routines di Claude Code di web, /ultrareview tinjauan kode cloud, /usage breakdown yang menunjukkan apa yang mendorong batas Anda, dan binari asli menggantikan JavaScript yang dibundel.

8 

9<div className="digest-meta">

10 <span>Rilis <a href="/docs/id/changelog#2-1-105">v2.1.105 → v2.1.113</a></span>

11 <span>5 fitur · 13–17 April</span>

12</div>

13 

14<div className="digest-feature">

15 <div className="digest-feature-header">

16 <span className="digest-feature-title">Claude Opus 4.7</span>

17 <span className="digest-feature-pill">model baru</span>

18 </div>

19 

20 <p className="digest-feature-lede">Model pengkodean terkuat Anthropic sekarang adalah default di Max dan Team Premium, dan tersedia di mana saja dari <code>/model</code>. Ini menambahkan tingkat upaya <code>xhigh</code> baru yang berada di antara <code>high</code> dan <code>max</code>: hasil terbaik untuk sebagian besar tugas pengkodean dan agentic, diterapkan sebagai default pertama kali Anda beralih ke 4.7. <code>/effort</code> sekarang membuka slider panah interaktif ketika Anda memanggilnya tanpa argumen, sehingga Anda dapat menyeimbangkan kecerdasan terhadap kecepatan tanpa mengingat nama tingkat.</p>

21 

22 <p className="digest-feature-try">Ubah model dan upaya dalam satu langkah:</p>

23 

24 ```text Claude Code theme={null}

25 > /model opus

26 > /effort xhigh

27 ```

28 

29 <a className="digest-feature-link" href="/docs/id/model-config#adjust-effort-level">Konfigurasi model: tingkat upaya</a>

30</div>

31 

32<div className="digest-feature">

33 <div className="digest-feature-header">

34 <span className="digest-feature-title">Routines</span>

35 <span className="digest-feature-pill">web</span>

36 </div>

37 

38 <p className="digest-feature-lede">Agen cloud bertemplate yang berjalan sesuai jadwal, acara GitHub, atau panggilan API. Tentukan routine sekali di Claude Code di web dengan prompt, repo yang dapat disentuhnya, dan konektor yang dibutuhkannya, kemudian biarkan PR-opened, release-published, atau webhook Anda sendiri memicunya tanpa mesin Anda berjalan. Pemilih pemicu sekarang mencakup acara GitHub dengan filter opsional dan memberikan setiap routine endpoint <code>/fire</code> yang ditokenkan untuk sistem eksternal.</p>

39 

40 <Frame>

41 <img className="w-full" src="https://mintcdn.com/claude-code/FTi4SBJ9YRs7d-5X/images/whats-new/routines.png?fit=max&auto=format&n=FTi4SBJ9YRs7d-5X&q=85&s=2ba818ea9280c549511cb48b9b4d1dc5" alt="Membuat routine di Claude Code di web dengan pemicu jadwal, acara GitHub, dan API" width="1440" height="810" data-path="images/whats-new/routines.png" />

42 </Frame>

43 

44 <p className="digest-feature-try">Buat satu dari UI web, atau scaffold dari terminal Anda:</p>

45 

46 ```text Claude Code theme={null}

47 > /schedule daily PR review at 9am

48 ```

49 

50 <a className="digest-feature-link" href="/docs/id/routines">Panduan Routines</a>

51</div>

52 

53<div className="digest-feature">

54 <div className="digest-feature-header">

55 <span className="digest-feature-title">/usage breakdown</span>

56 <span className="digest-feature-pill">CLI</span>

57 </div>

58 

59 <p className="digest-feature-lede">Visibilitas lebih besar ke mana penggunaan Claude Code Anda pergi. <code>/usage</code> sekarang menunjukkan apa yang mendorong batas Anda: sesi paralel, subagent, cache miss, dan konteks panjang, masing-masing dengan persentase 24 jam terakhir Anda dan tip untuk mengoptimalkannya. Tekan <code>d</code> atau <code>w</code> untuk beralih antara tampilan hari dan minggu.</p>

60 

61 <Frame>

62 <img className="w-full" src="https://mintcdn.com/claude-code/FTi4SBJ9YRs7d-5X/images/whats-new/usage.png?fit=max&auto=format&n=FTi4SBJ9YRs7d-5X&q=85&s=792a4b43cbef4e2931974831f076bca6" alt="Perintah /usage menunjukkan rincian apa yang berkontribusi pada penggunaan batas" width="1204" height="1182" data-path="images/whats-new/usage.png" />

63 </Frame>

64 

65 <p className="digest-feature-try">Jalankan kapan saja:</p>

66 

67 ```text Claude Code theme={null}

68 > /usage

69 ```

70 

71 <a className="digest-feature-link" href="/docs/id/commands">Referensi Perintah</a>

72</div>

73 

74<div className="digest-feature">

75 <div className="digest-feature-header">

76 <span className="digest-feature-title">/ultrareview</span>

77 <span className="digest-feature-pill">v2.1.111</span>

78 </div>

79 

80 <p className="digest-feature-lede">Tinjauan kode komprehensif di cloud. Ultrareview menggandakan cabang Anda di seluruh peninjau paralel di Claude Code di web, menjalankan lintasan kritik adversarial atas setiap temuan, dan mengembalikan laporan temuan yang diverifikasi sementara terminal Anda tetap bebas. Panggilnya tanpa argumen untuk meninjau cabang saat ini Anda, atau teruskan nomor PR untuk mengambil dan meninjau PR itu. Dialog peluncuran sekarang menunjukkan diffstat sehingga Anda tahu apa yang akan naik sebelum Anda mengonfirmasi.</p>

81 

82 <p className="digest-feature-try">Tinjau cabang yang Anda gunakan:</p>

83 

84 ```text Claude Code theme={null}

85 > /ultrareview

86 ```

87 

88 <p className="digest-feature-try">Atau arahkan ke PR:</p>

89 

90 ```text Claude Code theme={null}

91 > /ultrareview 1234

92 ```

93 

94 <a className="digest-feature-link" href="/docs/id/ultrareview">Panduan Ultrareview</a>

95</div>

96 

97<div className="digest-feature">

98 <div className="digest-feature-header">

99 <span className="digest-feature-title">Binari asli</span>

100 <span className="digest-feature-pill">v2.1.113</span>

101 </div>

102 

103 <p className="digest-feature-lede">CLI <code>claude</code> sekarang menjalankan binari asli per-platform alih-alih JavaScript yang dibundel, sehingga perintah <code>claude</code> yang diinstal tidak lagi memanggil Node. Paket npm menarik binari yang tepat melalui dependensi opsional seperti <code>@anthropic-ai/claude-code-darwin-arm64</code>, sehingga perintah instalasi Anda tidak berubah. Installer standalone sudah mengirimkan binari ini; npm sekarang cocok dengannya.</p>

104 

105 <p className="digest-feature-try">Upgrade dan periksa apa yang Anda jalankan:</p>

106 

107 ```bash theme={null}

108 claude update

109 claude --version

110 ```

111 

112 <a className="digest-feature-link" href="/docs/id/setup">Panduan Setup</a>

113</div>

114 

115<div className="digest-wins">

116 <p className="digest-wins-title">Kemenangan lainnya</p>

117 

118 <div className="digest-wins-grid">

119 <div><a href="/docs/id/permission-modes#eliminate-prompts-with-auto-mode">Mode Auto</a> sekarang tersedia untuk pelanggan Max di Opus 4.7, dan flag <code>--enable-auto-mode</code> tidak lagi diperlukan</div>

120 <div><a href="/docs/id/interactive-mode#session-recap">Ringkasan sesi</a> menunjukkan ringkasan satu baris tentang apa yang terjadi saat Anda pergi; jalankan <code>/recap</code> sesuai permintaan atau matikan dari <code>/config</code></div>

121 <div>Perintah <code>/tui</code> baru dan pengaturan <code>tui</code> beralih antara rendering klasik dan bebas flicker di tengah percakapan; tampilan fokus dipindahkan dari <code>Ctrl+O</code> ke perintah <code>/focus</code> tersendiri</div>

122 <div>Alat notifikasi push: dengan <a href="/docs/id/remote-control">Remote Control</a> terhubung dan "Push when Claude decides" diaktifkan, Claude dapat mengirim ping ke ponsel Anda ketika membutuhkan Anda</div>

123 <div>Plugin dapat mengirimkan pengamat latar belakang melalui kunci manifes tingkat atas <code>monitors</code> yang auto-arms saat memulai sesi atau saat invoke skill</div>

124 <div>Opsi "Auto (match terminal)" di <code>/theme</code> mengikuti mode gelap/terang terminal Anda</div>

125 <div><code>/fewer-permission-prompts</code> memindai transkrip Anda untuk panggilan Bash dan MCP read-only umum dan mengusulkan allowlist untuk <code>.claude/settings.json</code></div>

126 <div>Claude sekarang dapat menemukan dan menjalankan perintah bawaan seperti <code>/init</code>, <code>/review</code>, dan <code>/security-review</code> melalui alat Skill</div>

127 <div>Hook <code>PreCompact</code> dapat memblokir pemadatan dengan keluar dengan kode 2 atau mengembalikan <code>{"{"}"decision":"block"{"}"}</code></div>

128 <div><code>ENABLE\_PROMPT\_CACHING\_1H</code> memilih kunci API, Bedrock, Vertex, dan pengguna Foundry ke dalam TTL cache prompt 1 jam</div>

129 <div>Pengaturan <code>sandbox.network.deniedDomains</code> mengukir domain spesifik dari wildcard <code>allowedDomains</code> yang lebih luas</div>

130 <div><code>/undo</code> sekarang adalah alias untuk <code>/rewind</code>, dan <code>/proactive</code> adalah alias untuk <code>/loop</code></div>

131 <div>Izin Bash yang diperkuat: aturan deny sekarang cocok melalui pembungkus <code>env</code>/<code>sudo</code>/<code>watch</code>, dan aturan allow <code>Bash(find:\*)</code> tidak lagi auto-approve <code>-exec</code> atau <code>-delete</code></div>

132 </div>

133</div>

134 

135[Changelog lengkap untuk v2.1.105–v2.1.113 →](/id/changelog#2-1-105)

whats-new/2026-w17.md +113 −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# Minggu 17 · 20–24 April 2026

6 

7> /ultrareview dibuka sebagai pratinjau penelitian, ringkasan sesi otomatis saat Anda kembali ke terminal, tema warna khusus yang dapat Anda buat dan kirim dalam plugin, dan Claude Code yang dirancang ulang di web.

8 

9<div className="digest-meta">

10 <span>Rilis <a href="/docs/id/changelog#2-1-114">v2.1.114 → v2.1.119</a></span>

11 <span>4 fitur · 20–24 April</span>

12</div>

13 

14<div className="digest-feature">

15 <div className="digest-feature-header">

16 <span className="digest-feature-title">/ultrareview</span>

17 <span className="digest-feature-pill">pratinjau penelitian</span>

18 </div>

19 

20 <p className="digest-feature-lede">Sekarang dalam pratinjau penelitian publik. Ultrareview menjalankan armada agen pemburu bug di cloud terhadap cabang atau PR Anda, dan temuan kembali ke CLI atau Desktop secara otomatis. Jalankan sebelum menggabungkan perubahan kritis seperti autentikasi atau migrasi data.</p>

21 

22 <Frame>

23 <video autoPlay muted loop playsInline className="w-full" src="https://mintcdn.com/claude-code/FTi4SBJ9YRs7d-5X/images/whats-new/ultrareview.mp4?fit=max&auto=format&n=FTi4SBJ9YRs7d-5X&q=85&s=0fb1271365d38f414ad155aeb8edb08e" data-path="images/whats-new/ultrareview.mp4" />

24 </Frame>

25 

26 <p className="digest-feature-try">Tinjau cabang yang sedang Anda gunakan:</p>

27 

28 ```text Claude Code theme={null}

29 > /ultrareview

30 ```

31 

32 <p className="digest-feature-try">Atau arahkan ke PR:</p>

33 

34 ```text Claude Code theme={null}

35 > /ultrareview 1234

36 ```

37 

38 <a className="digest-feature-link" href="/docs/id/ultrareview">Panduan Ultrareview</a>

39</div>

40 

41<div className="digest-feature">

42 <div className="digest-feature-header">

43 <span className="digest-feature-title">Ringkasan sesi</span>

44 <span className="digest-feature-pill">CLI</span>

45 </div>

46 

47 <p className="digest-feature-lede">Alihkan fokus dari sesi dan kembali ke ringkasan satu baris tentang apa yang terjadi saat Anda pergi. Membantu untuk tetap dalam alur sambil menjalankan beberapa sesi Claude sekaligus.</p>

48 

49 <Frame>

50 <video autoPlay muted loop playsInline className="w-full" src="https://mintcdn.com/claude-code/FTi4SBJ9YRs7d-5X/images/whats-new/session-recap.mp4?fit=max&auto=format&n=FTi4SBJ9YRs7d-5X&q=85&s=0a8db1470bd0161a47efeb2f322af76f" data-path="images/whats-new/session-recap.mp4" />

51 </Frame>

52 

53 <p className="digest-feature-try">Buat ringkasan sesuai permintaan, atau matikan yang otomatis dari <code>/config</code>:</p>

54 

55 ```text Claude Code theme={null}

56 > /recap

57 ```

58 

59 <a className="digest-feature-link" href="/docs/id/interactive-mode#session-recap">Mode interaktif: ringkasan sesi</a>

60</div>

61 

62<div className="digest-feature">

63 <div className="digest-feature-header">

64 <span className="digest-feature-title">Tema khusus</span>

65 <span className="digest-feature-pill">v2.1.118</span>

66 </div>

67 

68 <p className="digest-feature-lede">Buat dan beralih antara tema warna bernama dari <code>/theme</code>, atau edit file JSON secara manual di <code>\~/.claude/themes/</code>. Setiap tema memilih preset dasar dan hanya mengganti token yang Anda pedulikan. Plugin juga dapat mengirim tema.</p>

69 

70 <p className="digest-feature-try">Buka pemilih tema dan buat yang baru:</p>

71 

72 ```text Claude Code theme={null}

73 > /theme

74 ```

75 

76 <a className="digest-feature-link" href="/docs/id/terminal-config#create-a-custom-theme">Konfigurasi terminal: buat tema khusus</a>

77</div>

78 

79<div className="digest-feature">

80 <div className="digest-feature-header">

81 <span className="digest-feature-title">Claude Code di web</span>

82 <span className="digest-feature-pill">web</span>

83 </div>

84 

85 <p className="digest-feature-lede">Tampilan baru untuk <a href="https://claude.ai/code">claude.ai/code</a> yang sesuai dengan aplikasi desktop yang dirancang ulang: bilah sisi sesi, tata letak seret-dan-lepas, dan tampilan rutinitas yang disegarkan. Bagian-bagian kunci dibangun kembali untuk respons yang lebih cepat dan pengalaman yang lebih andal.</p>

86 

87 <Frame>

88 <img className="w-full" src="https://mintcdn.com/claude-code/FTi4SBJ9YRs7d-5X/images/whats-new/web-redesign.jpeg?fit=max&auto=format&n=FTi4SBJ9YRs7d-5X&q=85&s=a2aca1b49e295b7337f5779038db8e2c" alt="Ikhtisar desain ulang Claude Code di web: UI baru, kecepatan dan keandalan, bekerja di web, seluler, dan CLI" width="1602" height="1610" data-path="images/whats-new/web-redesign.jpeg" />

89 </Frame>

90 

91 <a className="digest-feature-link" href="/docs/id/claude-code-on-the-web">Claude Code di web</a>

92</div>

93 

94<div className="digest-wins">

95 <p className="digest-wins-title">Kemenangan lainnya</p>

96 

97 <div className="digest-wins-grid">

98 <div><a href="/docs/id/interactive-mode#vim-editor-mode">Mode visual Vim</a>: tekan <code>v</code> untuk pemilihan karakter atau <code>V</code> untuk pemilihan baris dalam input prompt, dengan operator dan umpan balik visual</div>

99 <div>Hook sekarang dapat memanggil alat MCP secara langsung melalui <a href="/docs/id/hooks#mcp-tool-hook-fields"><code>type: "mcp\_tool"</code></a>, sehingga hook dapat mencapai server yang sudah terhubung tanpa menjalankan proses</div>

100 <div><code>/cost</code> dan <code>/stats</code> digabungkan menjadi <a href="/docs/id/commands"><code>/usage</code></a>; nama lama masih berfungsi sebagai pintasan pengetikan yang membuka tab yang relevan</div>

101 <div>Perubahan <code>/config</code> (tema, mode editor, verbose, dan sejenisnya) sekarang bertahan ke <code>\~/.claude/settings.json</code> dan mengikuti preseden proyek/lokal/kebijakan yang sama seperti <a href="/docs/id/settings">pengaturan</a> lainnya</div>

102 <div><a href="/docs/id/sub-agents#fork-the-current-conversation">Subagen yang di-fork</a> dapat diaktifkan pada build eksternal dengan <code>CLAUDE\_CODE\_FORK\_SUBAGENT=1</code>: fork mewarisi konteks percakapan lengkap Anda alih-alih memulai dari awal</div>

103 <div>Level <a href="/docs/id/model-config#adjust-effort-level">upaya</a> default untuk pelanggan Pro dan Max di Opus 4.6 dan Sonnet 4.6 sekarang <code>high</code> (sebelumnya <code>medium</code>)</div>

104 <div>Build macOS dan Linux asli mengganti alat <code>Glob</code> dan <code>Grep</code> dengan <code>bfs</code> dan <code>ugrep</code> tertanam yang tersedia melalui Bash, untuk pencarian yang lebih cepat tanpa putaran alat terpisah</div>

105 <div><code>--from-pr</code> sekarang menerima URL permintaan penggabungan GitLab, permintaan tarik Bitbucket, dan URL PR GitHub Enterprise selain github.com</div>

106 <div>Mode otomatis: sertakan <code>"\$defaults"</code> dalam <a href="/docs/id/auto-mode-config"><code>autoMode.allow</code>, <code>soft\_deny</code>, atau <code>environment</code></a> untuk menambahkan aturan khusus bersama daftar bawaan alih-alih menggantinya</div>

107 <div>Perintah <a href="/docs/id/plugin-dependencies#tag-plugin-releases-for-version-resolution"><code>claude plugin tag</code></a> baru membuat tag git rilis untuk plugin dengan validasi versi</div>

108 <div>Sesi Opus 4.7 sekarang menghitung terhadap jendela konteks asli 1M model, memperbaiki persentase <code>/context</code> yang membengkak dan autocompaction prematur</div>

109 <div><code>/resume</code> pada sesi besar hingga 67% lebih cepat dan sekarang menawarkan untuk merangkum sesi besar yang sudah usang sebelum membacanya kembali</div>

110 </div>

111</div>

112 

113[Changelog lengkap untuk v2.1.114–v2.1.119 →](/id/changelog#2-1-114)

zero-data-retention.md +66 −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# Retensi data nol

6 

7> Pelajari tentang Zero Data Retention (ZDR) untuk Claude Code di Claude for Enterprise, termasuk cakupan, fitur yang dinonaktifkan, dan cara meminta pengaktifan.

8 

9Zero Data Retention (ZDR) tersedia untuk Claude Code ketika digunakan melalui Claude for Enterprise. Ketika ZDR diaktifkan, prompt dan respons model yang dihasilkan selama sesi Claude Code diproses secara real-time dan tidak disimpan oleh Anthropic setelah respons dikembalikan, kecuali jika diperlukan untuk mematuhi hukum atau memerangi penyalahgunaan.

10 

11ZDR di Claude for Enterprise memberikan pelanggan enterprise kemampuan untuk menggunakan Claude Code dengan retensi data nol dan mengakses kemampuan administratif:

12 

13* Kontrol biaya per pengguna

14* Dashboard [Analytics](/id/analytics)

15* [Server-managed settings](/id/server-managed-settings)

16* Audit logs

17 

18ZDR untuk Claude Code di Claude for Enterprise hanya berlaku untuk platform langsung Anthropic. Untuk penerapan Claude di Amazon Bedrock, Google Vertex AI, atau Microsoft Foundry, lihat kebijakan retensi data platform tersebut.

19 

20## Cakupan ZDR

21 

22ZDR mencakup inferensi Claude Code di Claude for Enterprise.

23 

24<Warning>

25 ZDR diaktifkan berdasarkan per-organisasi. Setiap organisasi baru memerlukan ZDR untuk diaktifkan secara terpisah oleh tim akun Anthropic Anda. ZDR tidak secara otomatis berlaku untuk organisasi baru yang dibuat di bawah akun yang sama. Hubungi tim akun Anda untuk mengaktifkan ZDR untuk organisasi baru apa pun.

26</Warning>

27 

28### Apa yang dicakup ZDR

29 

30ZDR mencakup panggilan inferensi model yang dilakukan melalui Claude Code di Claude for Enterprise. Ketika Anda menggunakan Claude Code di terminal Anda, prompt yang Anda kirim dan respons yang dihasilkan Claude tidak disimpan oleh Anthropic. Ini berlaku terlepas dari model Claude mana yang digunakan.

31 

32### Apa yang tidak dicakup ZDR

33 

34ZDR tidak berlaku untuk hal-hal berikut, bahkan untuk organisasi dengan ZDR diaktifkan. Fitur-fitur ini mengikuti [kebijakan retensi data standar](/id/data-usage#data-retention):

35 

36| Fitur | Detail |

37| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

38| Chat di claude.ai | Percakapan chat melalui antarmuka web Claude for Enterprise tidak dicakup oleh ZDR. |

39| Cowork | Sesi Cowork tidak dicakup oleh ZDR. |

40| Claude Code Analytics | Tidak menyimpan prompt atau respons model, tetapi mengumpulkan metadata produktivitas seperti email akun dan statistik penggunaan. Metrik kontribusi tidak tersedia untuk organisasi ZDR; [dashboard analytics](/id/analytics) menampilkan metrik penggunaan saja. |

41| Manajemen pengguna dan kursi | Data administratif seperti email akun dan penugasan kursi disimpan di bawah kebijakan standar. |

42| Integrasi pihak ketiga | Data yang diproses oleh alat pihak ketiga, MCP servers, atau integrasi eksternal lainnya tidak dicakup oleh ZDR. Tinjau praktik penanganan data layanan tersebut secara independen. |

43 

44## Fitur yang dinonaktifkan di bawah ZDR

45 

46Ketika ZDR diaktifkan untuk organisasi Claude Code di Claude for Enterprise, fitur-fitur tertentu yang memerlukan penyimpanan prompt atau completion secara otomatis dinonaktifkan di tingkat backend:

47 

48| Fitur | Alasan |

49| -------------------------------------------------------------------- | ------------------------------------------------------------------- |

50| [Claude Code di Web](/id/claude-code-on-the-web) | Memerlukan penyimpanan percakapan di sisi server. |

51| [Remote sessions](/id/desktop#remote-sessions) dari aplikasi Desktop | Memerlukan data sesi persisten yang mencakup prompt dan completion. |

52| Pengiriman umpan balik (`/feedback`) | Mengirimkan umpan balik mengirimkan data percakapan ke Anthropic. |

53 

54Fitur-fitur ini diblokir di backend terlepas dari tampilan sisi klien. Jika Anda melihat fitur yang dinonaktifkan di terminal Claude Code selama startup, mencoba menggunakannya mengembalikan kesalahan yang menunjukkan kebijakan organisasi tidak memungkinkan tindakan tersebut.

55 

56Fitur-fitur di masa depan juga dapat dinonaktifkan jika memerlukan penyimpanan prompt atau completion.

57 

58## Retensi data untuk pelanggaran kebijakan

59 

60Bahkan dengan ZDR diaktifkan, Anthropic dapat menyimpan data jika diperlukan oleh hukum atau untuk mengatasi pelanggaran Usage Policy. Jika sesi ditandai untuk pelanggaran kebijakan, Anthropic dapat menyimpan input dan output terkait selama hingga 2 tahun, konsisten dengan kebijakan ZDR standar Anthropic.

61 

62## Minta ZDR

63 

64Untuk meminta ZDR untuk Claude Code di Claude for Enterprise, [hubungi penjualan](https://www.anthropic.com/contact-sales?utm_source=claude_code\&utm_medium=docs\&utm_content=zero_data_retention_request) atau tim akun Anthropic Anda. Tim akun Anda akan mengirimkan permintaan secara internal, dan Anthropic akan meninjau dan mengaktifkan ZDR di organisasi Anda setelah mengkonfirmasi kelayakan. Semua tindakan pengaktifan dicatat dalam audit log.

65 

66Jika Anda saat ini menggunakan ZDR untuk Claude Code melalui kunci API pay-as-you-go, Anda dapat beralih ke Claude for Enterprise untuk mendapatkan akses ke fitur administratif sambil mempertahankan ZDR untuk Claude Code. Hubungi tim akun Anda untuk mengoordinasikan migrasi.