Agen pengkodean CLI terasa murah sampai tagihan token datang. Anda menjalankan Claude Code atau Codex di sebuah repo, meminta refactor satu modul, lalu agen membaca puluhan file, menjalankan test suite beberapa kali, dan mengirim jutaan token konteks yang sebenarnya tidak diperlukan. Jika delapan engineer menjalankan pola yang sama sepanjang hari, biaya token cepat berubah dari βnoiseβ menjadi item anggaran. Kabar baiknya: sebagian besar pemborosan ini bisa dikurangi dari CLI tanpa mengganti model atau menurunkan kualitas output.
TL;DR
Kurangi biaya token agen dengan mengontrol konteks sebelum masuk ke model:
- Batasi file dan direktori yang boleh disentuh agen.
- Ringkas file memori seperti
CLAUDE.md. - Gunakan
/compactatau/clearuntuk sesi panjang. - Aktifkan prompt caching untuk prefiks stabil.
- Routing tugas murah ke model kecil.
- Batasi output tool seperti test runner, install log, dan diff.
- Ukur biaya per eksekusi agar optimasi bisa diverifikasi.
Pendahuluan
Masalah biaya biasanya muncul dalam dua bentuk:
- Sesi berhenti karena batas mingguan atau batas penggunaan tercapai.
- Tagihan API bulanan naik tajam karena βAI assistantβ digunakan seperti pekerja background tanpa kontrol.
Akar masalahnya sama: agen CLI secara default boros token. Mereka sering membaca seluruh file padahal hanya butuh satu fungsi, memutar ulang seluruh riwayat percakapan di setiap giliran, memasukkan output command mentah ke konteks, dan mengirim ulang prompt sistem serta peta repo yang sama berkali-kali.
Refactor yang sebenarnya hanya butuh 2.000 token konteks tidak perlu 180.000 token. Selisihnya adalah ruang optimasi Anda.
Panduan ini membahas cara memangkas biaya token pada agen CLI dengan pendekatan praktis:
- Menjaga kebersihan konteks.
- Mengelola file memori.
- Menggunakan prompt caching.
- Routing model berdasarkan kompleksitas tugas.
- Memangkas output tool.
- Mengukur biaya per run.
Contoh menggunakan Claude Code dan Codex, tetapi prinsipnya berlaku untuk agen CLI lain yang memakai API berbiaya token.
Satu sumber biaya yang sering luput: debugging API. Jika agen berinteraksi dengan API internal yang tidak stabil, ia akan retry, membaca error, membaca ulang dokumentasi, lalu mengulang siklus yang sama. Setiap iterasi membayar token.
π‘ Jika agen Anda menyentuh API, desain, mock, dan uji kontrak API terlebih dahulu di Apidog. Dengan kontrak yang stabil, agen tidak perlu menebak perilaku endpoint langsung yang berubah-ubah.
Ke mana token pergi dalam eksekusi agen CLI
Satu giliran agen biasanya terdiri dari:
- Input payload: semua konteks yang dikirim ke model.
- Output payload: jawaban model, rencana, kode, patch, dan penjelasan.
Anda membayar keduanya. Pada banyak penyedia, token output lebih mahal daripada token input. Angka harga berubah, jadi selalu cek halaman pricing resmi. Namun struktur biayanya tetap sama: output mahal, dan input sering membengkak tanpa disadari.
Input payload biasanya berisi:
Prompt sistem dan definisi tool
Instruksi agen dan skema JSON untuk tool. Ini sering berukuran 5.000β15.000 token dan dikirim ulang di setiap giliran.File memori proyek
Contoh:CLAUDE.md, aturan repo, command build/test, dan instruksi persisten. File ini masuk konteks walaupun hanya sebagian kecil yang relevan.Riwayat percakapan
Semua pesan user, respons model, panggilan tool, dan hasil tool sebelumnya. Pada sesi panjang, ini biasanya komponen terbesar.Konten file yang dibaca agen
Satu file 1.200 baris bisa menjadi 12.000β18.000 token. Agen sering membaca file penuh jika tidak diarahkan.Output tool
Log test runner, outputnpm install,git diff, stack trace, dan log verbose lain. Semua teks ini masuk kembali ke konteks.
Fakta penting: riwayat percakapan diputar ulang di setiap giliran. Sesi 30 giliran bukan sekadar 30 kali biaya satu giliran; setiap giliran membawa akumulasi konteks sebelumnya.
Jika ingin memahami lebih detail bagaimana batas dan akuntansi sesi bekerja, baca cara jendela token Claude Code diatur ulang.
1. Batasi konteks sebelum agen mulai bekerja
Token termurah adalah token yang tidak pernah dikirim. Mulai dari pembatasan ruang kerja.
Jangan beri prompt terlalu luas
Hindari prompt seperti ini:
claude "refactor the billing logic"
Prompt tersebut mengundang agen untuk menjelajahi banyak file.
Gunakan prompt yang eksplisit:
claude "refactor the retry logic so it uses exponential backoff,
only in src/payments/retry.ts and src/payments/retry.test.ts"
Jika agen perlu eksplorasi, batasi ke direktori tertentu:
claude "find the retry implementation under src/payments only,
then update the retry behavior to use exponential backoff"
Gunakan checklist sebelum menjalankan agen
Sebelum mengetik prompt, jawab tiga pertanyaan ini:
- File mana yang kemungkinan besar perlu diedit?
- Test file mana yang relevan?
- Direktori mana yang boleh diabaikan?
Lalu masukkan jawaban tersebut ke prompt.
Contoh:
claude "
Task: update payment retry backoff.
Scope:
- Read/edit only:
- src/payments/retry.ts
- src/payments/retry.test.ts
- Do not inspect:
- node_modules
- dist
- generated files
Run only the relevant payment retry tests.
"
Ini mengurangi eksplorasi otomatis yang mahal.
2. Ringkas file memori seperti CLAUDE.md
File seperti CLAUDE.md dimuat ke konteks pada setiap giliran. Jika file ini berubah menjadi mini-wiki, Anda membayar ulang isinya terus-menerus.
Cek ukuran kasarnya:
wc -c CLAUDE.md | awk '{print "β", int($1/4), "tokens per turn"}'
Targetkan file memori yang pendek dan operasional.
Isi yang cocok untuk CLAUDE.md:
# Project instructions
## Commands
- Build: `npm run build`
- Unit tests: `npm test -- --runInBand`
- Lint: `npm run lint`
## Conventions
- Use TypeScript strict mode.
- Prefer existing service patterns in `src/services`.
- Do not edit generated files under `src/generated`.
## Docs
- API contract docs: `docs/api.md`
- Payment flow notes: `docs/payments.md`
Isi yang sebaiknya tidak ada di CLAUDE.md:
- Penjelasan panjang arsitektur.
- Riwayat keputusan teknis.
- Dokumentasi API lengkap.
- Tutorial internal yang jarang dipakai.
- Salinan error troubleshooting lama.
Pindahkan detail panjang ke file terpisah dan minta agen membacanya hanya saat perlu.
3. Kompres atau reset sesi panjang
Jika satu tugas selesai dan Anda mulai tugas baru, jangan lanjut di sesi yang sama. Konteks lama akan tetap dibawa.
Di Claude Code:
/compact
Gunakan saat percakapan sudah panjang tetapi masih ingin mempertahankan ringkasan konteks.
Untuk tugas baru yang tidak terkait:
/clear
Praktik yang disarankan:
- Satu tugas logis per sesi.
- Gunakan
/compactsetelah eksplorasi besar. - Gunakan
/clearsebelum berpindah task. - Jangan menggabungkan refactor, debugging, dan review PR dalam satu sesi panjang.
Pola seperti ini juga dibahas dalam alur kerja Claude Code.
4. Gunakan file ignore proyek
Pastikan agen tidak membaca artefak yang tidak relevan.
Contoh file ignore:
node_modules/
dist/
build/
coverage/
.next/
out/
*.lock
package-lock.json
pnpm-lock.yaml
yarn.lock
src/generated/
Sesuaikan dengan kebutuhan repo. File lock kadang perlu dibaca, tetapi untuk banyak tugas refactor, diff file lock hanya menambah noise.
Jika agen mendukung ignore file khusus, gunakan juga di sana. Tujuannya sama: cegah agen membaca file besar yang tidak berguna.
5. Aktifkan prompt caching untuk prefiks stabil
Prompt caching memungkinkan penyedia menyimpan bagian awal request yang stabil, seperti:
- Prompt sistem.
- Definisi tool.
- Konvensi repo.
- Instruksi proyek yang jarang berubah.
Saat request berikutnya memakai prefiks yang sama, bagian tersebut bisa dibaca dari cache dengan diskon besar.
Menurut dokumentasi prompt caching Anthropic:
- Cache write lebih mahal sedikit daripada input biasa.
- Cache read jauh lebih murah, sekitar 10% dari biaya input normal.
- Cache paling berguna untuk prefiks stabil berukuran besar.
- Cache bisa invalid jika konten sebelum breakpoint berubah.
Prinsipnya:
konten stabil dulu β konten dinamis terakhir
Urutan ideal:
tools β system prompt β repo conventions β user task β file content dinamis
Jika Anda membuat wrapper sendiri, contoh pola implementasinya:
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=2048,
system=[
{
"type": "text",
"text": SYSTEM_PROMPT + REPO_CONVENTIONS,
"cache_control": {"type": "ephemeral"},
}
],
messages=[
{
"role": "user",
"content": user_task,
}
],
)
u = response.usage
print("cache write:", u.cache_creation_input_tokens)
print("cache read :", u.cache_read_input_tokens)
print("fresh input:", u.input_tokens)
Hal yang perlu dijaga:
- Jangan menyisipkan timestamp ke prompt sistem.
- Jangan mengubah urutan instruksi stabil.
- Jangan memasukkan data task dinamis sebelum cache breakpoint.
- Batch pekerjaan serupa agar cache tetap hangat.
Jika prompt sistem + konvensi repo berukuran 8.000 token dan dipakai 60 kali sehari, caching bisa memangkas biaya input prefiks tersebut secara signifikan.
Untuk strategi tambahan terkait Codex dan model routing, lihat menjalankan GPT-5.5 secara gratis melalui Codex.
6. Routing model berdasarkan jenis tugas
Tidak semua tugas membutuhkan model paling mahal.
Gunakan model kuat untuk:
- Perubahan arsitektur.
- Debugging kompleks.
- Refactor lintas modul.
- Desain API atau kontrak data.
- Analisis bug yang belum jelas akar masalahnya.
Gunakan model lebih murah untuk:
- Commit message.
- Changelog.
- Ringkasan diff.
- Boilerplate test.
- Rename sederhana.
- Penjelasan lint error.
- Draft dokumentasi singkat.
Contoh CLI:
# Tugas ringan
claude --model haiku "write a conventional-commit message for the staged diff"
# Tugas berat
claude --model sonnet "redesign the caching layer for the payments service"
Pola yang lebih hemat:
# Default ke model murah
export CLAUDE_MODEL=haiku
# Naikkan hanya saat perlu
claude --model sonnet "investigate this production payment race condition"
Kesalahan umum tim adalah memakai model frontier untuk semua task βagar amanβ. Akibatnya, commit message dan ringkasan changelog ikut memakai biaya premium.
Jika framework agen mendukung sub-agent, gunakan model kecil untuk pekerjaan sempit:
Parent agent:
- model kuat
- konteks kecil
- fokus pada keputusan
Child agent:
- model murah
- tugas: cari file, ringkas diff, buat draft test
- output ringkas ke parent
Pola delegasi seperti ini relevan dengan perintah tujuan di Codex dan Claude Code.
Jika Anda memakai paket berbasis limit, routing model juga membantu agar kuota model premium tidak habis terlalu cepat. Kenaikan limit seperti pada peningkatan batas mingguan Claude Code membantu, tetapi routing tetap penting.
7. Pangkas output tool
Output command masuk kembali ke konteks. Karena itu, command verbose sangat mahal.
Buat command lebih senyap
Kurang ideal:
npm test
Lebih hemat:
npm test --silent -- --reporter=dot
Kurang ideal:
npm install
Lebih hemat:
npm install --silent --no-audit --no-fund
Filter output sebelum dibaca agen
Untuk pytest:
pytest -q 2>&1 | tail -n 30
Untuk diff:
git diff --stat
Untuk test log:
npm test 2>&1 | grep -E "(FAIL|β|Error)" | head -n 20
Untuk TypeScript:
npm run typecheck 2>&1 | tail -n 50
Untuk ESLint:
npm run lint 2>&1 | grep -E "(error|warning)" | head -n 50
Agen biasanya tidak butuh 3.000 baris log. Ia butuh:
- Status gagal atau sukses.
- Nama file yang gagal.
- Pesan error utama.
- Stack trace pendek.
- Ringkasan perubahan.
Hindari diff besar yang tidak relevan
Sebelum meminta agen review diff:
git diff --stat
Jika ada file generated atau lock file besar, exclude:
git diff -- . ':(exclude)package-lock.json' ':(exclude)src/generated'
Atau tampilkan hanya file tertentu:
git diff src/payments/retry.ts src/payments/retry.test.ts
8. Pakai pembacaan file yang ditargetkan
Membaca file 1.500 baris untuk mengubah satu fungsi adalah pemborosan.
Instruksikan agen untuk mencari simbol dulu:
claude "
Update retry delay calculation.
Do not read entire large files.
First locate the retry function with grep/ripgrep.
Then read only the surrounding function body and related tests.
"
Contoh manual:
rg "function retry|retryPayment|calculateBackoff" src/payments
Lalu baca window yang relevan:
sed -n '80,160p' src/payments/retry.ts
Perbedaan biayanya besar:
Baca file penuh 1.500 baris β bisa belasan ribu token
Baca 80 baris relevan β ratusan token
9. Batasi retrieval dan RAG
Jika agen Anda memakai pencarian dokumen atau RAG, batasi hasilnya.
Lebih baik:
Ambil 10 chunk Γ 200 token
Daripada:
Ambil 50 chunk Γ 800 token
Aturan praktis:
- Ambil sedikit dulu.
- Tambah retrieval hanya jika jawaban belum cukup.
- Prioritaskan dokumen spesifik daripada seluruh knowledge base.
- Jangan memasukkan seluruh dokumentasi API jika hanya perlu satu endpoint.
Untuk API, kontrak yang jelas jauh lebih murah daripada agen menebak dari log dan error runtime. Mock dan dokumentasi API yang stabil membantu menghindari loop debugging mahal.
10. Ukur biaya per eksekusi
Optimasi tanpa metrik hanya tebakan. Ukur biaya per run.
Jika Anda memakai API langsung, tangkap usage:
u = response.usage
INPUT_RATE = 3.00 / 1_000_000
OUTPUT_RATE = 15.00 / 1_000_000
CACHE_READ = 0.30 / 1_000_000
CACHE_WRITE = 3.75 / 1_000_000
cost = (
u.input_tokens * INPUT_RATE +
u.output_tokens * OUTPUT_RATE +
u.cache_read_input_tokens * CACHE_READ +
u.cache_creation_input_tokens * CACHE_WRITE
)
print(
f"run cost β ${cost:.4f} "
f"(in={u.input_tokens} "
f"out={u.output_tokens} "
f"cache_read={u.cache_read_input_tokens})"
)
Ganti rate dengan harga aktual model yang Anda pakai.
Jika memakai CLI, gunakan pendekatan berikut:
# 1. Cek biaya sesi jika CLI mendukungnya
claude /cost
Gunakan API key terpisah per proyek atau per agen:
API key A β repo payments
API key B β repo platform
API key C β eksperimen lokal
Bungkus CLI dengan script logging:
#!/usr/bin/env bash
TASK_LABEL="$1"
shift
START=$(date -Iseconds)
claude "$@"
END=$(date -Iseconds)
echo "$START,$END,$TASK_LABEL" >> agent-runs.csv
Minimal, catat:
- Timestamp.
- Nama task.
- Model.
- Estimasi token input.
- Estimasi token output.
- Biaya.
- Apakah cache hit terjadi.
Lacak metrik seperti:
biaya per refactor kecil
biaya per review PR
biaya per debugging API
biaya per pembuatan test
Setelah mengaktifkan prompt caching, routing model, atau filtering log, angka tersebut harus turun. Jika tidak, optimasi Anda belum menyentuh sumber biaya utama.
Perbandingan taktik
| Taktik | Penghematan token tipikal | Upaya |
|---|---|---|
| Batasi set kerja: sebut file dan direktori spesifik | 30β60% pada input per eksekusi | Rendah |
Ringkas file memori seperti CLAUDE.md
|
5β15% per giliran | Rendah |
Gunakan /compact atau /clear
|
40β80% pada sesi panjang | Rendah |
| Prompt caching untuk prefiks stabil | ~90% pada prefiks yang di-cache | Sedang |
| Routing model untuk tugas ringan | 50β80% pada sub-tugas yang dirutekan | Sedang |
| Output tool yang senyap dan difilter | 20β50% pada eksekusi berat tool | Rendah |
| Pembacaan file yang ditargetkan | 70β95% pada file besar | Rendah |
| Batasi retrieval/RAG | 30β60% pada agen berbasis dokumen | Sedang |
| Ukur biaya per eksekusi | Tidak langsung, tetapi membuka semua optimasi lain | Rendah |
Angka di atas bersifat ilustratif. Penghematan aktual bergantung pada pola penggunaan awal Anda.
Checklist implementasi cepat
Gunakan checklist ini untuk repo Anda minggu ini:
[ ] Audit ukuran CLAUDE.md atau file memori agen.
[ ] Pindahkan dokumentasi panjang keluar dari file memori.
[ ] Tambahkan ignore untuk dist, build, coverage, generated, dan dependency.
[ ] Update prompt agar selalu menyebut file/direktori target.
[ ] Gunakan /compact setelah sesi eksplorasi panjang.
[ ] Gunakan /clear sebelum task baru.
[ ] Jadikan command test lebih senyap.
[ ] Filter output log dengan tail, grep, atau reporter ringkas.
[ ] Pakai model murah untuk commit message, changelog, dan ringkasan diff.
[ ] Aktifkan prompt caching jika memakai wrapper API.
[ ] Catat biaya per task representatif.
Kesimpulan
Biaya token agen CLI sering berasal dari konteks yang terlalu besar, output tool yang terlalu verbose, dan pemilihan model yang terlalu mahal untuk tugas sederhana.
Mulai dari perubahan paling murah:
- Batasi scope file.
- Ringkas file memori.
- Gunakan
/compactdan/clear. - Senyapkan output command.
- Baca file secara targeted.
Setelah itu, tambahkan prompt caching dan routing model. Dengan kombinasi ini, biaya token bisa turun signifikan tanpa mengorbankan kualitas hasil kerja agen.
Top comments (0)