Environment Variable Claude Code yang Benar-Benar Penting

Umumnya ya, dan itulah yang membuatnya tepat untuk CI dan kontainer serta salah untuk preferensi pribadi. Itu juga berarti variabel yang Anda export untuk proyek lain berbulan-bulan lalu masih menang hari ini. Kalau file settings tampak diabaikan, cek lingkungannya dulu — perintah status dan diagnostik menunjukkan apa yang sebenarnya diselesaikan sesinya.
Turunkan jumlah percobaan ulang supaya pipeline gagal cepat ketimbang duduk melewati back-off panjang, dan naikkan timeout permintaan hanya kalau jaringan Anda lambat. Batasi perintah Bash dengan variabel timeout bawaan dan maksimumnya, dan pertimbangkan menaikkan batas keluaran Bash untuk run yang memang butuh log lengkap.
Pengambilan feature flag, pengumpulan telemetri dan pelaporan error, notifikasi push mobile untuk Remote Control, serta permintaan latar yang tidak esensial bagi fungsi inti. Karena sebagian fitur bergantung pada pengambilan flag, fitur-fitur itu ikut berhenti bekerja, tanpa error yang menyebut namanya. Setel demi alasan kebijakan, bukan untuk mengurangi derau.
Setel variabel penonaktif auto-updater dan override pembaruan plugin bersamaan. Yang pertama mengunci versi CLI Anda di apa pun yang disetujui organisasi Anda; yang kedua menjaga plugin marketplace tetap mutakhir. Tanpa yang kedua, mematikan updater-nya juga menghentikan pembaruan plugin.
Bisa. Satu environment variable disetel di tiap subproses yang dilahirkan Claude Code, termasuk Bash, PowerShell, tmux, hook, dan MCP server. Yang kedua disetel hanya di kelahiran tool langsung dan tidak di stdio MCP server, jadi sebuah skrip juga bisa membedakan kedua konteks itu lalu berperilaku sesuai.

Ringkasan Utama
Claude Code membaca puluhan environment variable, dan sekitar lima belas layak diketahui. Kelompok paling berguna menyetel timeout dan batas untuk otomasi, tempat bawaan interaktifnya salah. Kelompok paling berbahaya adalah tiga sakelar yang efeknya menjangkau lebih jauh dari yang disiratkan namanya.
Saya pernah menghabiskan satu pagi mencari tahu kenapa sebuah pipeline duduk sebelas menit sebelum gagal. Jawabannya adalah jumlah percobaan ulang: bawaannya sepuluh, yang murah hati dan benar ketika ada orang menonton dan lebih memilih menunggu ketimbang mengulang, dan sepenuhnya salah untuk build agent yang seharusnya gagal dalam tiga puluh detik lalu memberi tahu seseorang.
Itulah tema tulisan ini. Bawaannya dipilih untuk sesi interaktif di laptop, dan build agent, image kontainer, atau host multi-tenant menginginkan yang berbeda. Ini posisi environment variable di urutan presedensinya, kelompok yang layak disetel dengan sengaja, sakelar yang mematikan lebih banyak dari yang Anda kira, dan dua variabel yang bisa dibaca skrip Anda sendiri.
Environment variable umumnya mengalahkan file settings, dan itulah yang membuatnya tepat untuk CI dan salah untuk preferensi pribadi yang nanti ingin Anda ubah. Kalau Anda mendapati diri meng-export variabel yang sama di tiap shell, ia mungkin sebaiknya tinggal di file settings — dan kalau Anda mendapati file settings diabaikan, environment variable adalah hal pertama yang harus dicek.
Satu konsekuensinya menjebak orang: variabel yang disetel untuk satu proyek berbulan-bulan lalu masih tersetel, dan masih menang. Autentikasi adalah korban biasanya, tapi hal yang sama berlaku untuk penguncian model atau timeout yang Anda setel sekali untuk jaringan lambat lalu lupa. Periksa apa yang sebenarnya diselesaikan sesi yang sedang jalan ketimbang apa yang Anda yakini dikatakan konfigurasi Anda.
Ini kelompok dengan imbal hasil perhatian terbaik. Timeout API bawaannya sepuluh menit, yang tepat untuk giliran berpikir panjang di sambungan lambat dan jauh terlalu sabar untuk sebuah pipeline. Jumlah percobaan ulang bawaannya sepuluh, dan itulah variabel di balik sebagian besar keterlambatan misterius bermenit-menit sebelum sebuah kegagalan. Dan bawaan Bash membatasi berapa lama sebuah perintah boleh jalan serta berapa banyak keluarannya yang kembali.
# Timeouts and retries — the defaults are tuned for a person
# sitting in front of a terminal, not for a build agent.
API_TIMEOUT_MS=600000 # default 10 minutes
CLAUDE_CODE_MAX_RETRIES=10 # default; LOWER it to fail fast
BASH_DEFAULT_TIMEOUT_MS=120000 # default 2 minutes
BASH_MAX_TIMEOUT_MS=600000 # ceiling the model may request
BASH_MAX_OUTPUT_LENGTH=30000 # default; hard maximum 150000
# Context and compaction
CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=80 # 1-100, default around 80
CLAUDE_CODE_DISABLE_1M_CONTEXT=1
# Background work
CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1
CLAUDE_AUTO_BACKGROUND_TASKS=1 # auto-background after ~2 min
CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS=600000Batas keluarannya layak dinaikkan sebelum Anda berburu bug. Secara bawaan Claude membaca balik 30.000 karakter keluaran Bash, dan log tes yang terpotong tampak persis seperti test suite yang berhenti lebih awal. Maksimum kerasnya 150.000 — menaikkannya memakan token pada perintah yang berisik, jadi naikkan untuk run yang memang butuh seluruh log-nya ketimbang membiarkannya tinggi di mana-mana.
Dua kelompok yang lebih bertumpang tindih dari kelihatannya. Variabel autentikasi memilih dan menyediakan kredensial; variabel model menentukan sebuah alias diselesaikan ke apa. Di penyedia cloud keduanya penting, karena aliasnya diselesaikan ke bawaan bawaan yang bisa tertinggal dari rilis terbaru. Tabel di bawah adalah bentuknya, bukan daftar lengkapnya.
Empat yang benar-benar akan Anda setel:
| Kelompok variabel | Yang perlu diketahui |
|---|---|
| Variabel API key | Menimpa langganan Anda sepenuhnya dan senyap. Ini penyebab tunggal paling umum dari perilaku autentikasi yang membingungkan |
| Sakelar penyedia | Satu variabel per penyedia cloud memilih di mana inferensi berjalan. Kredensial dan setelan region milik penyedia itu lalu berlaku |
| Penguncian model bawaan | Satu per alias. Di deployment pihak ketiga, penguncian adalah cara Anda mengendalikan kapan tim Anda pindah ke model baru |
| Variabel base URL | Mengarahkan Claude Code ke sebuah gateway. Catat bahwa mengarahkan yang utama ke host non-pihak-pertama mematikan MCP tool search secara bawaan |
Empat di antaranya terus muncul di lingkungan terkunci, dan salah satunya jauh lebih luas dari namanya. Pembaruan otomatis, telemetri, dan pelaporan error masing-masing punya variabelnya sendiri dan melakukan apa yang dikatakannya. Sakelar lalu lintas non-esensial adalah alat tumpulnya.
# Updates
DISABLE_AUTOUPDATER=1
FORCE_AUTOUPDATE_PLUGINS=1 # keep PLUGIN updates while the
# CLI updater stays off
# Telemetry and reporting
DISABLE_TELEMETRY=1
DISABLE_ERROR_REPORTING=1
# The blunt instrument. Turns off feature-flag fetching, telemetry
# and error reporting, mobile push for Remote Control, and any
# background request that is not essential — which silently
# disables features that DEPEND on flag fetching.
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1Sakelar terakhir itu mematikan pengambilan feature flag bersama telemetri dan notifikasi push, artinya ia juga mematikan fitur yang bergantung pada pengambilan flag — diam-diam, tanpa error yang memberi tahu yang mana. Setel karena postur keamanan Anda memerlukannya, bukan untuk mengurangi derau, dan harapkan segelintir kemampuan absen sesudahnya. Logika yang sama berlaku untuk keluarga do-not-track.
Tiga variabel mengendalikan di mana state tinggal, dan yang kedua ada khusus untuk host yang menanamkan Claude Code. Secara bawaan folder proyeknya diturunkan dari seluruh path direktori kerja, yang wajar di laptop dan salah ketika sebuah host mau tiap sesi di tempatnya sendiri. Menamainya sendiri mensyaratkan menyetel direktori konfigurasinya juga, dan nilainya dibaca sekali saat startup — jadi file settings tidak bisa menyediakannya.
# Where state lives
CLAUDE_CONFIG_DIR=/srv/tenant-a
CLAUDE_CODE_PROJECT_DIR_NAME=work # name the <project> folder
# yourself; IGNORED unless
# CLAUDE_CONFIG_DIR is set,
# 1-64 [A-Za-z0-9_-], read
# once at startup so an env
# block in settings cannot
# set it
CLAUDE_CODE_SKIP_PROMPT_HISTORY=1 # write no transcripts at all
# Detection, for hooks and scripts that need to know:
# CLAUDECODE=1 set in every spawned subprocess
# CLAUDE_CODE_CHILD_SESSION=1 set in direct tool spawns only,
# not in stdio MCP serversDua di antaranya disetel oleh Claude Code ketimbang dibaca olehnya, dan keduanya cara andal bagi sebuah hook atau pembungkus untuk tahu ia berjalan di mana:
Beberapa variabel menjangkau lebih jauh dari yang disiratkan namanya, dan masing-masing sudah menghasilkan setidaknya satu sore yang membingungkan. Variabel model Haiku bawaan adalah contoh paling jelas: ia dibaca di mana pun model kecil nan cepat dipakai, jadi mengubahnya juga mengubah perangkuman percakapan dan pekerjaan latar lain, bukan cuma apa yang Anda tuju.
Satu pasangan sungguh berguna dan tidak jelas. Mematikan auto-updater menghentikan Claude Code memperbarui dirinya, yang disyaratkan banyak organisasi — tapi ia juga menghentikan pembaruan plugin. Menyetel override pembaruan plugin di sampingnya menjaga plugin marketplace Anda tetap mutakhir sementara versi CLI-nya terkunci di apa pun yang disetujui organisasi Anda.
Setel variabel timeout dan percobaan ulang di build agent mana pun, karena kalau tidak bawaan interaktifnya mengubah kegagalan cepat jadi lambat. Simpan sakelar lalu lintas yang tumpul untuk lingkungan yang memang memerlukannya, dan baca dulu daftar apa yang dimatikannya. Dan setiap kali perilaku berbeda di antara dua mesin yang seharusnya identik, lihat lingkungannya sebelum konfigurasinya — ia menang, dan ia bagian yang tak seorang pun tuliskan.
Sumber & bacaan lanjutan