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 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:
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. 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
- Kode yang berjalan lama: kecuali jika kode dapat berjalan di latar belakang, Anda menunggu hingga kode selesai, dan kode berhenti setelah sepuluh menit
- Hook: Anda dapat melihat panggilan tool ditolak ketika hook
PreToolUsetidak dapat berjalan atau mengalami timeout, dan output kode diblokir oleh hookUserPromptSubmit - Fitur yang tidak tersedia: Anda tidak dapat menggunakan Remote Control, Claude in Chrome, atau computer use
- Memindahkan sesi: Anda tidak dapat memindahkan sesi ke aplikasi Desktop atau mengubahnya menjadi sesi latar belakang, dan
/forktidak dapat memulai salinan latar belakang
Persyaratan
- Versi: Claude Code v2.1.323 atau yang lebih baru, di salah satu saluran rilis. 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 maupun zero data retention
- Model: Claude Opus 5.5, Sonnet 5.5, Haiku 5.5, atau Fable 5.2
- Surface: sesi
claudeinteraktif di terminal. Code Mode tidak berfungsi dengan-p, Agent SDK, panel VS Code, aplikasi Desktop, atau sesi cloud - Instalasi: build native dari Claude Code
- Windows: Git for Windows 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.
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.
2. Mulai Claude Code dengan Code Mode aktif
Atur environment variable CLAUDE_CODE_EXPERIMENTAL_CODE_MODE 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
CLAUDE_CODE_EXPERIMENTAL_CODE_MODE=1 claude
[tab] Windows PowerShell
$env:CLAUDE_CODE_EXPERIMENTAL_CODE_MODE = "1" claude
[tab] settings.json
Simpan blok
envini di~/.claude/settings.jsondan mulaiclaude:{ "env": { "CLAUDE_CODE_EXPERIMENTAL_CODE_MODE": "1" } }Claude Code mengabaikan variabel ini di file pengaturan proyek, 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:
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.
4. Berikan Claude tugas dengan banyak panggilan tool
Di proyek yang Anda kenal, kirim prompt seperti ini:
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_MODEtetap diatur ke1saat Anda menjalankanclaude --continueatauclaude --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 Anda agar tidak ada seorang pun di organisasi Anda yang dapat menggunakan Code Mode:
{
"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 deny dan ask Anda serta hook 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: 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
- Mode izin 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, dengan atau tanpa Code Mode. Untuk batasan yang tidak bergantung pada teks perintah, lihat sandboxing.
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+Tabhingga Anda kembali ke mode awal Anda - Anda memulai dalam mode lain, atau memilih sesi dari daftar
claude --resume: jika auto mode tersedia bagi Anda, keluar, lalu jalankanclaude --continue --permission-mode autodengan 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.
| Alasan mengandung | Yang harus dilakukan |
|---|---|
it isn't open to your account yet |
Jika versi Anda lebih lama dari v2.1.323, perbarui. 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, 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, seperti DISABLE_TELEMETRY |
OpenTelemetry is on |
Hapus pengaturan CLAUDE_CODE_ENABLE_TELEMETRY dan ENABLE_BETA_TRACING_DETAILED jika Anda dapat bekerja tanpa ekspor OpenTelemetry |
it doesn't yet work with an installed mod |
Nonaktifkan mod 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 |
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:
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 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 tersebutthe 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. Naikkantimeouthook 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 Anda. Ketika kode dapat berjalan di latar belakang, 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: bandingkan auto mode dengan mode yang meminta izin Anda
- Referensi hooks: tulis hook
PreToolUsedanUserPromptSubmit - Pengaturan terkelola: terapkan satu konfigurasi di seluruh organisasi