Jawaban singkat untuk pertanyaan yang paling sering diajukan pembaca tentang topik ini.
01Apa itu headless mode Claude Code?
Headless mode, disebut juga print mode, adalah Claude Code yang dipanggil dengan flag -p dan sebuah prompt alih-alih chat interaktif. Ia memproses prompt, mencetak keluarannya ke standard out, lalu keluar dengan sebuah status code. Itu menjadikannya program baris perintah biasa yang bisa Anda panggil dari skrip, pre-commit hook, dan pipeline CI/CD.
02Bagaimana cara menjalankan Claude Code di pipeline CI/CD?
Panggil claude -p dengan prompt Anda sebagai langkah pipeline, sediakan API key lewat sebuah secret yang diekspos sebagai variabel lingkungan, dan tambahkan format keluaran seperti JSON agar hasilnya mudah diurai. Batasi tool yang boleh dipakainya dan bercabang berdasarkan exit code untuk meluluskan atau menggagalkan tahap. Jaga run tetap di dalam lingkungan terisolasi.
03Mengapa saya harus memakai keluaran JSON di headless mode?
Mengurai teks bebas itu rapuh dan rusak setiap kali kalimatnya berubah. Meminta JSON memberi Anda objek terstruktur berisi hasil dan metadata seperti penggunaan token, yang bisa Anda catat, jadikan asersi, atau umpankan ke langkah lain. Itu menjadikan agen sebuah tahap yang andal dan dapat dibaca mesin ketimbang sumber prosa yang longgar.
04Apakah aman menjalankan Claude Code headless dengan izin dilewati?
Hanya di dalam sandbox. Melewati persetujuan dalam lingkungan tanpa sandbox memberi satu prompt yang dimanipulasi jangkauan yang sama dengan kredensial dalam job, sehingga instruksi prompt injection yang tersembunyi dalam kode yang dibacanya bisa bertindak bebas. Jika Anda harus melewati prompt untuk otomasi, lakukan di container atau virtual machine tanpa akses tetap ke produksi.
05Tugas apa yang cocok untuk headless Claude Code di CI?
Yang paling cocok adalah job berulang yang tercakup baik, mudah dijelaskan, dan murah diverifikasi. Contohnya mencakup pemeriksaan pull request yang menandai tes yang hilang atau kode debug yang tertinggal, pre-commit hook yang menangkap masalah sebelum CI, dan job terjadwal seperti menyusun changelog atau meringkas kegagalan tes semalam.
Cara headless mode Claude Code menjalankan agen secara non-interaktif dengan claude -p, agar bisa dirangkai ke CI/CD, dibatasi tool-nya, dan dibaca keluarannya.
Headless mode Claude Code menjalankan agen secara non-interaktif dengan perintah claude -p, mencetak hasil lalu keluar alih-alih membuka chat. Inilah cara merangkai Claude ke pipeline CI/CD, pre-commit hook, dan skrip: berikan sebuah prompt, batasi tool dan izinnya, baca keluaran JSON yang terstruktur, lalu bertindak berdasarkan exit code.
Kebanyakan orang mengenal Claude Code sebagai chat terminal interaktif: Anda mengetik, ia bekerja, Anda menyetujui. Loop itu bagus untuk coding eksploratif dan tak berguna untuk otomasi, karena sebuah CI runner tidak punya siapa pun untuk menjawab promptnya. Untuk menaruh agen di dalam pipeline, Anda butuh ia berjalan sekali, mengerjakan tugas, lalu menyingkir.
Headless mode adalah jalur non-interaktif itu. Anda memanggil Claude Code dengan sebuah prompt dan sekumpulan flag, ia berjalan sampai selesai tanpa percakapan, lalu melapor kembali dalam bentuk yang bisa diurai skrip. Panduan ini membahas perintah intinya, cara mengontrol apa yang boleh dilakukannya, dan cara menjalankannya dengan aman di CI tanpa membuka pintu lebar-lebar.
Apa itu headless mode
Headless mode, disebut juga print mode, adalah Claude Code yang dipanggil dengan flag -p dan sebuah prompt. Alih-alih memulai sesi interaktif, ia memproses prompt, memancarkan keluarannya ke standard out, lalu keluar dengan sebuah status code. Itu menjadikannya program baris perintah biasa yang bisa Anda pipe, redirect, dan panggil dari skrip atau job mana pun.
Beberapa sifat membuatnya cocok untuk otomasi ketimbang chat sehari-hari:
Ia stateless secara default: tiap run dimulai dari awal, sehingga sebuah langkah pipeline bisa direproduksi dan tidak bergantung pada percakapan sebelumnya.
Ia bisa diskripkan: Anda bisa memberikan prompt secara inline atau lewat standard input dan menangkap semua yang dicetaknya.
Ia bisa dikomposisikan: exit code memberi tahu job di sekitarnya apakah langkah itu lulus, sehingga Anda bisa menggerbang sebuah build padanya.
Perintah inti dan format keluaran
Pemanggilan paling sederhana memberikan sebuah string prompt setelah -p. Untuk otomasi Anda hampir selalu menambahkan format keluaran, karena mengurai teks bebas itu rapuh. Minta JSON dan Anda mendapatkan objek terstruktur berisi hasil dan metadata seperti penggunaan token yang bisa Anda catat atau jadikan asersi.
Sebuah pemanggilan CI minimal yang membatasi tool dan mengembalikan JSON terlihat seperti ini:
claude -p "Review the staged diff and fail if any TODO is left" \
--output-format json \
--allowedTools "Read,Grep,Glob" \
--permission-mode plan \
--max-turns 12
Selalu pasang allowlist tool yang eksplisit di run headless. Dalam sebuah skrip tidak ada siapa pun untuk menyetujui tindakan berisiko, sehingga agen tanpa batasan akan mandek menunggu input atau, lebih buruk, bebas melakukan apa pun yang diarahkan promptnya. Menyebutkan tool persis yang boleh dipakainya mengubah run menjadi langkah yang dapat diprediksi dan terbatas.
Rangkai ke dalam CI/CD
Di dalam pipeline, headless Claude Code hanyalah satu langkah lagi yang entah berhasil atau gagal. Polanya sama di semua sistem CI: autentikasi, jalankan perintah dengan izin ketat, lalu bercabang berdasarkan hasilnya.
Sediakan kredensial lewat sebuah secret, biasanya sebuah API key yang diekspos ke job sebagai variabel lingkungan, jangan pernah ditulis langsung di workflow.
Beri langkah itu tugas sempit yang terdefinisi baik seperti mereview sebuah diff, menyusun catatan rilis, atau memilah tes yang gagal, alih-alih tujuan yang terbuka.
Tangkap keluaran JSON dan gunakan exit code untuk meluluskan atau menggagalkan tahap itu, sehingga agen menjadi gerbang sungguhan dan bukan sekadar bising yang bersifat saran.
Pasang batas seperti jumlah maksimum giliran, sehingga run yang bingung berhenti alih-alih berputar dan menghabiskan anggaran.
Jaga radius ledakannya
Agen non-interaktif persis seberbahaya izin yang Anda berikan kepadanya, karena tidak ada manusia dalam loop untuk menangkap langkah yang buruk. Seluruh model keamanan bertumpu pada mempersempit run ke minimum yang dibutuhkannya dan menjalankannya di tempat yang tidak bisa menimbulkan kerusakan permanen.
Dalam praktik itu berarti menggabungkan allowlist tool yang ketat dengan lingkungan yang terisolasi. Sebuah CI runner sudah bersifat sementara, yang membantu, tetapi sebuah job yang meng-clone repo Anda dan memegang API key sungguhan tetap layak di-sandbox, sehingga instruksi hasil prompt injection yang tersembunyi dalam kode yang dibacanya tidak bisa menjangkau lebih jauh dari runner.
Jangan pernah menjalankan headless mode dengan pemeriksaan izin sepenuhnya dilewati terhadap apa pun yang Anda pedulikan. Melewati persetujuan dalam lingkungan tanpa sandbox memberi satu prompt yang dimanipulasi jangkauan yang sama dengan kredensial dalam job itu. Jika Anda harus melewati prompt untuk otomasi, lakukan di dalam container atau virtual machine tanpa akses tetap ke produksi.
Ide otomasi yang praktis
Begitu Claude Code menjadi sebuah perintah, job yang berguna adalah yang berulang, mudah dijelaskan, dan murah diverifikasi.
Pemeriksaan pull request yang membaca sebuah diff dan menandai tes yang hilang, kode debug yang tertinggal, atau API publik yang tak berdokumentasi.
Pre-commit hook yang menjalankan agen secara lokal dalam print mode untuk menangkap masalah yang jelas sebelum sampai ke CI.
Job pemeliharaan terjadwal, seperti menyusun changelog dari commit yang telah di-merge atau meringkas kegagalan tes semalam.
Headless mode adalah sambungan antara Claude Code dan sisa toolchain Anda. Gunakan claude -p setiap kali Anda ingin agen berjalan sekali lalu melapor kembali, pasang tool dan izinnya secara ketat, baca JSON alih-alih mengorek teks, dan jaga tiap run tanpa pengawasan tetap di dalam sandbox. Lakukan itu dan agen menjadi sekadar satu langkah andal lagi dalam pipeline.