> ## Documentation Index
> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Menjalankan panggilan tool dari kode dengan Code Mode

> Cobalah Code Mode, fitur eksperimental di mana Claude menulis JavaScript yang melakukan beberapa panggilan tool dalam satu langkah.

Code Mode mengubah cara Claude menggunakan [tool](https://code.claude.com/docs/id/tools-reference.md) miliknya. Tanpa Code Mode, Claude meminta panggilan tool seperti Bash, Read, atau Edit secara langsung dan membaca setiap hasilnya sebelum memutuskan apa yang harus dilakukan selanjutnya. Dengan Code Mode, Claude menulis sepotong JavaScript yang melakukan panggilan tool tersebut, dan Claude Code menjalankan kode itu di sesi Anda.

> [!NOTE]
>
> Code Mode bersifat eksperimental dan nonaktif secara default. Fitur ini dapat berubah atau dihapus di rilis mana pun. Untuk memberikan masukan, jalankan `/feedback`.

## Cara kerja Code Mode

Dalam sesi Code Mode, Anda tetap mendeskripsikan tugas Anda dalam sebuah prompt, dan Claude menulis JavaScript untuk melaksanakannya. Satu potong kode dapat menjalankan perintah secara paralel, menggunakan satu hasil dalam panggilan berikutnya, dan mengembalikan bagian output yang perlu dibaca oleh Claude.

Misalnya, jika Anda meminta Claude untuk menaikkan batas retry, Claude mungkin menulis kode ini untuk menemukan file, mengeditnya, dan menjalankan pengujian. Baris terakhir mengembalikan path file dan output pengujian kepada Claude:

```javascript theme={null}
const files = await $`rg -l "function retryPolicy" src`.text();
const target = files.trim().split("\n")[0];
await edit(target, "maxAttempts: 3", "maxAttempts: 5");
({ edited: target, tests: $`npm test -- retryPolicy`.nothrow() });
```

Dalam percakapan, Anda melihat panggilan tool, seperti diff dari edit tersebut, dan bukan kodenya. Untuk membaca kode, tekan `Ctrl+O` untuk membuka [penampil transkrip](https://code.claude.com/docs/id/interactive-mode.md#transcript-viewer). Setiap potong kode muncul di sana sebagai baris **Code** yang diciutkan, dengan petunjuk cara memperluasnya.

### Kapan menggunakan Code Mode

Cobalah Code Mode pada tugas yang memerlukan banyak panggilan tool yang saling terkait, seperti:

* Perubahan yang berulang di banyak file
* Pencarian yang hasilnya perlu difilter sebelum Claude membacanya
* Beberapa perintah independen yang dapat berjalan bersamaan

### Keterbatasan Code Mode

Sebelum Anda mengaktifkan Code Mode, pastikan Anda dapat menerima batasan berikut:

* **Melanjutkan sesi**: Anda dapat melanjutkan sesi Code Mode hanya di terminal, dengan Code Mode aktif
* **Auto mode**: pengklasifikasi auto mode [meninjau kode, bukan setiap panggilan tool](#permission-checks)
* **Kode yang berjalan lama**: kecuali jika [kode dapat berjalan di latar belakang](#long-running-code), Anda menunggu hingga kode selesai, dan kode berhenti setelah sepuluh menit
* **Hook**: Anda dapat melihat [panggilan tool ditolak](#tool-call-refused-by-a-hook) ketika hook `PreToolUse` tidak dapat berjalan atau mengalami timeout, dan [output kode diblokir](#code-output-withheld-by-a-hook) oleh hook `UserPromptSubmit`
* **Fitur yang tidak tersedia**: Anda tidak dapat menggunakan [Remote Control](https://code.claude.com/docs/id/remote-control.md), [Claude in Chrome](https://code.claude.com/docs/id/chrome.md), atau [computer use](https://code.claude.com/docs/id/computer-use.md)
* **Memindahkan sesi**: Anda tidak dapat memindahkan sesi ke aplikasi Desktop atau mengubahnya menjadi [sesi latar belakang](https://code.claude.com/docs/id/agent-view.md), dan `/fork` tidak dapat memulai salinan latar belakang

## Persyaratan

* **Versi**: Claude Code v2.1.323 atau yang lebih baru, di salah satu [saluran rilis](https://code.claude.com/docs/id/setup.md#configure-release-channel). Versi yang lebih lama dimulai tanpa Code Mode, dengan atau tanpa alasan `it isn't open to your account yet`
* **Akun**: langganan Claude atau akun Console. Anda tidak dapat menggunakan Code Mode melalui gateway, Amazon Bedrock, Claude Platform on AWS, Agent Platform dari Google Cloud, atau Microsoft Foundry
* **Organisasi**: organisasi Anda tidak menggunakan [konfigurasi HIPAA](https://code.claude.com/docs/id/hipaa-setup.md) maupun [zero data retention](https://code.claude.com/docs/id/zero-data-retention.md)
* **Model**: Claude Opus 5.5, Sonnet 5.5, Haiku 5.5, atau Fable 5.2
* **Surface**: sesi `claude` interaktif di terminal. Code Mode tidak berfungsi dengan `-p`, Agent SDK, panel VS Code, aplikasi Desktop, atau sesi cloud
* **Instalasi**: [build native](https://code.claude.com/docs/id/setup.md) dari Claude Code
* **Windows**: [Git for Windows](https://git-scm.com/downloads/win) sudah terinstal

Anda juga tidak dapat memulai Code Mode dengan beberapa pengaturan tertentu aktif, seperti API key helper, tim agent, ekspor OpenTelemetry, atau `DISABLE_TELEMETRY`. Untuk perbaikan masing-masing, lihat [Code Mode tidak dimulai](#code-mode-doesnt-start).

## Mencoba Code Mode

Aktifkan Code Mode, berikan tugas kepada Claude, dan lihat kode yang ditulis Claude.

**1. Periksa versi Anda**

Jalankan `claude --version`. Jika versinya lebih lama dari v2.1.323, jalankan `claude update`. Jika Anda berada di saluran `stable` dan pembaruan tidak mencapai v2.1.323, tunggu hingga `stable` menyusul atau [beralih ke `latest`](https://code.claude.com/docs/id/setup#configure-release-channel).

**2. Mulai Claude Code dengan Code Mode aktif**

Atur environment variable [`CLAUDE_CODE_EXPERIMENTAL_CODE_MODE`](https://code.claude.com/docs/id/env-vars#variables) ke `1`. Untuk mencoba Code Mode, atur di shell Anda. Untuk mengaktifkan Code Mode di setiap sesi baru, atur di pengaturan pengguna Anda.

> [tab] macOS, Linux, WSL
>
> ```bash theme={null}
> CLAUDE_CODE_EXPERIMENTAL_CODE_MODE=1 claude
> ```

> [tab] Windows PowerShell
>
> ```powershell theme={null}
> $env:CLAUDE_CODE_EXPERIMENTAL_CODE_MODE = "1"
> claude
> ```

> [tab] settings.json
>
> Simpan blok `env` ini di `~/.claude/settings.json` dan mulai `claude`:
>
> ```json theme={null}
> {
>   "env": {
>     "CLAUDE_CODE_EXPERIMENTAL_CODE_MODE": "1"
>   }
> }
> ```
>
> Claude Code [mengabaikan variabel ini di file pengaturan proyek](https://code.claude.com/docs/id/settings-reference.md#variables-claude-code-ignores-in-env), sehingga repositori yang Anda clone tidak dapat mengaktifkan Code Mode untuk Anda.

**3. Konfirmasi bahwa Anda menginginkan Code Mode**

Claude Code meminta Anda untuk mengonfirmasi sebelum sesi Code Mode pertama Anda. Pilih **Yes, turn on Code Mode**. Claude Code dimulai ulang dan menampilkan baris ini di dekat bagian atas sesi:

```text theme={null}
Code Mode (experimental) is on · this session can be resumed only with Code Mode on
```

Jika Anda melihat baris yang berbeda atau tidak ada baris sama sekali, lihat [Code Mode tidak dimulai](#code-mode-doesnt-start).

**4. Berikan Claude tugas dengan banyak panggilan tool**

Di proyek yang Anda kenal, kirim prompt seperti ini:

```text theme={null}
Read every Markdown file in this project and list the links that point to local files that don't exist.
```

**5. Baca kode yang ditulis Claude**

Tekan `Ctrl+O` dan perluas baris **Code** untuk melihat JavaScript di balik panggilan tool. Tekan `Ctrl+O` lagi untuk kembali ke percakapan.

> [!WARNING]
>
> Untuk melanjutkan sesi Code Mode nanti, biarkan `CLAUDE_CODE_EXPERIMENTAL_CODE_MODE` tetap diatur ke `1` saat Anda menjalankan `claude --continue` atau `claude --resume`. Dengan Code Mode nonaktif, Claude Code menolak melanjutkan sesi tersebut. Sesi yang Anda mulai tanpa Code Mode dilanjutkan tanpa Code Mode, bahkan jika variabel tersebut diatur.

### Menonaktifkan Code Mode

Hapus `CLAUDE_CODE_EXPERIMENTAL_CODE_MODE` dari shell Anda dan dari `~/.claude/settings.json`, lalu mulai sesi baru. Anda juga dapat mempertahankan variabel tersebut dan mengubah nilainya menjadi `0` di salah satu tempat. Dengan `0` di satu tempat, Code Mode tetap nonaktif meskipun Anda mengatur `1` di tempat lainnya.

### Memblokir Code Mode untuk organisasi Anda

Tambahkan `CLAUDE_CODE_EXPERIMENTAL_CODE_MODE` dengan nilai `0` ke [pengaturan terkelola](https://code.claude.com/docs/id/managed-settings.md) Anda agar tidak ada seorang pun di organisasi Anda yang dapat menggunakan Code Mode:

```json theme={null}
{
  "env": {
    "CLAUDE_CODE_EXPERIMENTAL_CODE_MODE": "0"
  }
}
```

Pengguna yang sedang berada dalam sesi Code Mode tetap berada di dalamnya hingga mereka keluar atau memulai ulang Claude Code. Setelah itu, pengguna Anda memulai tanpa Code Mode dan tidak dapat melanjutkan sesi Code Mode mereka selama `0` tersebut berlaku. Anda tidak dapat mengaktifkan Code Mode untuk pengguna Anda dari pengaturan terkelola.

## Izin dan kode yang berjalan lama

Mode izin Anda menentukan bagaimana kode Claude diperiksa dan apakah Anda dapat berbicara dengan Claude saat kode berjalan.

### Pemeriksaan izin

Setiap panggilan tool yang dilakukan kode Claude melewati [aturan izin](https://code.claude.com/docs/id/permissions.md) `deny` dan `ask` Anda serta [hook `PreToolUse`](https://code.claude.com/docs/id/hooks#pretooluse) Anda. Anda tidak perlu mengubah aturan atau matcher untuk tool seperti `Bash`. Selain aturan dan hook, sebuah pengklasifikasi meninjau kode dalam auto mode, dan Anda menjawab permintaan izin dalam mode yang meminta persetujuan:

* **[Auto mode](https://code.claude.com/docs/id/permission-modes.md#eliminate-prompts-with-auto-mode)**: pengklasifikasi meninjau setiap potong kode sebelum dijalankan, bukan setiap panggilan tool. Pengklasifikasi tidak melihat nilai yang dihitung saat runtime, seperti path yang diambil dari output pencarian, jadi pertahankan aturan atau hook untuk panggilan yang harus Anda kendalikan. Anda tetap dapat [diminta izin ketika kode baru dimulai saat kode sebelumnya masih berjalan](#permission-prompt-with-a-countdown)
* **[Mode izin](https://code.claude.com/docs/id/permission-modes.md) lainnya**: kode dimulai tanpa tinjauan, dan Anda diminta izin untuk setiap panggilan tool yang akan meminta izin Anda dalam mode tersebut

Untuk memeriksa kode itu sendiri, tulis hook `PreToolUse` yang mencocokkan `REPL`, yaitu tool yang menjalankan kode Claude, dan baca JavaScript dari `tool_input.code`.

> [!WARNING]
>
> Aturan Bash mencocokkan teks perintah, sehingga Claude dapat menjalankan perintah yang ditolak [dalam bentuk yang tidak cocok dengan aturan tersebut](https://code.claude.com/docs/id/permissions.md#bash-rule-limits), dengan atau tanpa Code Mode. Untuk batasan yang tidak bergantung pada teks perintah, lihat [sandboxing](https://code.claude.com/docs/id/sandboxing.md).

### Kode yang berjalan lama

Saat kode menjalankan build atau pengujian yang lama, Claude menunggunya atau membiarkannya berlanjut di latar belakang:

* **Menunggu**: Claude menjawab setelah kode selesai, dan kode berhenti setelah sepuluh menit, termasuk waktu yang Anda habiskan di permintaan izin
* **Latar belakang**: Anda dapat terus berbicara dengan Claude, dan kode dapat berjalan hingga dua jam

Untuk kode latar belakang, mulai sesi Anda dalam auto mode atau mode `bypassPermissions`. Jika Claude masih menunggu, periksa mode Anda saat ini dan cara Anda memulai sesi:

* **Anda beralih ke mode lain**: tekan `Shift+Tab` hingga Anda kembali ke mode awal Anda
* **Anda memulai dalam mode lain, atau memilih sesi dari daftar `claude --resume`**: jika [auto mode tersedia](https://code.claude.com/docs/id/permission-modes.md#eliminate-prompts-with-auto-mode) bagi Anda, keluar, lalu jalankan `claude --continue --permission-mode auto` dengan Code Mode aktif
* **Anda meneruskan nama tool ke `--tools`**: mulai lagi dalam auto mode tanpa flag tersebut

## Pemecahan masalah

### Code Mode tidak dimulai

`Code Mode (experimental) isn't available` di dekat bagian atas sesi berarti Claude Code dimulai tanpa Code Mode. Alasannya mengikuti di baris yang sama, dan `/status` juga menampilkannya. Temukan alasannya di tabel ini, lakukan perubahan, dan mulai sesi baru. Untuk alasan yang tidak tercantum, periksa [persyaratan](#requirements).

| Alasan mengandung | Yang harus dilakukan |
| :- | :- |
| `it isn't open to your account yet` | Jika versi Anda lebih lama dari v2.1.323, [perbarui](#try-code-mode). Jika tidak, periksa koneksi jaringan Anda dan mulai lagi. Jika alasan tersebut tetap muncul, coba lagi di hari lain |
| `it only works with the Anthropic API` | Hapus pengaturan yang merutekan permintaan melalui penyedia cloud, gateway, atau `ANTHROPIC_BASE_URL` kustom |
| `it doesn't work with an API key helper` | Hapus `apiKeyHelper`, `ANTHROPIC_AUTH_TOKEN`, dan header `Authorization` atau `X-Api-Key` apa pun di `ANTHROPIC_CUSTOM_HEADERS`. Lalu masuk atau atur `ANTHROPIC_API_KEY` |
| `it only works with Opus 5.5, Sonnet 5.5 and later models` | Mulai dengan [model yang didukung](#requirements), misalnya dengan `--model opus`. Haiku 5.5 dan Fable 5.2 juga berfungsi |
| `it doesn't work in background jobs` | Mulai di latar depan, tanpa `--remote-control` |
| `it needs settings that Claude Code downloads from Anthropic` | Hapus pengaturan variabel yang [menonaktifkan pengambilan feature flag](https://code.claude.com/docs/id/env-vars.md#features-that-need-feature-flag-fetching), seperti `DISABLE_TELEMETRY` |
| `OpenTelemetry is on` | Hapus pengaturan `CLAUDE_CODE_ENABLE_TELEMETRY` dan `ENABLE_BETA_TRACING_DETAILED` jika Anda dapat bekerja tanpa [ekspor OpenTelemetry](https://code.claude.com/docs/id/monitoring-usage.md) |
| `it doesn't yet work with an installed mod` | Nonaktifkan [mod](https://code.claude.com/docs/id/plugins/mods/overview.md) yang memeriksa panggilan tool |
| `it can't be used together with agent teams yet` | Hapus pengaturan `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` |
| `this launch's tool options` | Mulai tanpa `--restricted`, tambahkan `REPL` ke `--tools`, dan hapus `REPL` dari `--disallowedTools` dan aturan `deny` Anda |
| `couldn't save your answer` | Jadikan `~/.claude.json` dapat ditulis |
| `your organization's settings don't allow it` | Tanyakan kepada administrator Anda tentang [pengaturan terkelola](#block-code-mode-for-your-organization) |

Jika Anda tidak melihat baris apa pun tentang Code Mode, jalankan `claude --version`. Jika versi Anda lebih lama dari v2.1.323, lakukan pembaruan. Lalu pastikan `CLAUDE_CODE_EXPERIMENTAL_CODE_MODE` bernilai `1` di shell atau pengaturan pengguna Anda, dan hapus `0` apa pun dari tempat-tempat tersebut dan dari file `--settings` mana pun.

### Permintaan izin dengan hitung mundur

Ketika Claude memulai kode tambahan dalam auto mode saat kode sebelumnya masih berjalan, kode sebelumnya kehilangan tinjauan pengklasifikasinya. Claude Code kemudian menanyakan kepada Anda tentang sisa panggilan kode sebelumnya yang memerlukan tinjauan. Tanpa IDE yang terhubung, permintaan izin tersebut menampilkan hitung mundur:

```text theme={null}
Claude Code will automatically block this request in 1:59, to avoid holding up an unattended session
```

Jawab sebelum hitung mundur berakhir. Jika tidak, panggilan tersebut ditolak, dan panggilan berikutnya yang akan menampilkan hitung mundur ditolak tanpa permintaan izin. Untuk melihat permintaan izin lagi, kirim pesan kepada Claude.

### Panggilan tool ditolak oleh hook

Jika Claude melaporkan panggilan tool yang ditolak, mintalah teks errornya. Error berikut berarti hook `PreToolUse` tidak memberikan keputusan, yang menolak panggilan tersebut bahkan ketika [`onFailure`](https://code.claude.com/docs/id/hooks#block-the-action-when-a-hook-fails) tidak diatur:

* **`the hook failed`**: pada panggilan dari kode Claude, hook Anda tidak dapat dimulai, dihentikan paksa, keluar dengan kode 126, 127, atau kode di atas 128, atau mengembalikan error HTTP atau output yang tidak valid. Perbaiki hook tersebut
* **`the hook did not finish`**: hook Anda mengalami timeout pada panggilan dari kode Claude, atau pada panggilan tool lainnya setelah Claude menjalankan kode dalam sesi tersebut. Naikkan [`timeout`](https://code.claude.com/docs/id/hooks#common-fields) hook tersebut

Untuk membiarkan panggilan tetap berjalan ketika hook `command` atau `http` gagal atau mengalami timeout, atur `"onFailure": "continue"` pada hook tersebut. Jika hook `command` keluar dengan kode biasa seperti 1, panggilan tetap berjalan kecuali jika Anda mengatur `"onFailure": "block"`.

### Output kode ditahan oleh hook

Jika Claude melaporkan alasan pemblokiran dari hook di tempat yang seharusnya berisi output dari kode Claude, periksa hook [`UserPromptSubmit`](https://code.claude.com/docs/id/hooks#userpromptsubmit) Anda. Ketika [kode dapat berjalan di latar belakang](#long-running-code), hook `command`, `http`, dan `mcp_tool` pada event tersebut juga berjalan pada output kode. Untuk membiarkan output lolos, ubah hook tersebut agar tidak memblokir ketika `source` dalam inputnya adalah `poll_event`.

## Sumber daya terkait

* [Mode izin](https://code.claude.com/docs/id/permission-modes.md): bandingkan auto mode dengan mode yang meminta izin Anda
* [Referensi hooks](https://code.claude.com/docs/id/hooks.md): tulis hook `PreToolUse` dan `UserPromptSubmit`
* [Pengaturan terkelola](https://code.claude.com/docs/id/managed-settings.md): terapkan satu konfigurasi di seluruh organisasi
