Jawaban singkat untuk pertanyaan yang paling sering diajukan pembaca tentang topik ini.
01Apakah environment variable menimpa file settings Claude Code?
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.
02Environment variable Claude Code mana yang sebaiknya disetel di CI?
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.
03Apa sebenarnya yang dimatikan oleh sakelar lalu lintas non-esensial?
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.
04Bagaimana menjaga plugin tetap diperbarui tapi menghentikan Claude Code memperbarui dirinya?
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.
05Bisakah sebuah skrip tahu ia berjalan di dalam Claude Code?
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.
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.
Di mana environment variable duduk
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.
Timeout dan batas, untuk apa pun yang diotomasi
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=600000
Batas 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.
Autentikasi dan penguncian model
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
Sakelar yang mematikan berbagai hal
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=1
Sakelar 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.
Penyimpanan, dan meng-host lebih dari satu tenant
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 servers
Variabel yang bisa dibaca skrip Anda sendiri
Dua di antaranya disetel oleh Claude Code ketimbang dibaca olehnya, dan keduanya cara andal bagi sebuah hook atau pembungkus untuk tahu ia berjalan di mana:
Satu disetel di tiap subproses yang dilahirkan Claude Code — Bash, PowerShell, tmux, hook, MCP server — jadi sebuah skrip bisa mendeteksi bahwa ia dipanggil dari sesi ketimbang oleh seorang manusia.
Satunya disetel hanya di kelahiran tool langsung dan tidak di stdio MCP server, dan itulah pembeda yang Anda butuhkan ketika sebuah skrip harus berperilaku berbeda di dalam server berumur panjang.
Bersama-sama Anda bisa membuat satu skrip bersama aman dijalankan di kedua konteks, ketimbang menulis dua skrip atau menebak dari jenis terminalnya.
Yang punya efek samping
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.