DEV Community

Cover image for Cara Mengurangi Biaya Token Agen dari CLI (Panduan 2026)
Walse
Walse

Posted on • Originally published at apidog.com

Cara Mengurangi Biaya Token Agen dari CLI (Panduan 2026)

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.

Coba Apidog hari ini

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 /compact atau /clear untuk 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:

  1. Sesi berhenti karena batas mingguan atau batas penggunaan tercapai.
  2. 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, output npm 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"
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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.
"
Enter fullscreen mode Exit fullscreen mode

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"}'
Enter fullscreen mode Exit fullscreen mode

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`
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Gunakan saat percakapan sudah panjang tetapi masih ingin mempertahankan ringkasan konteks.

Untuk tugas baru yang tidak terkait:

/clear
Enter fullscreen mode Exit fullscreen mode

Praktik yang disarankan:

  • Satu tugas logis per sesi.
  • Gunakan /compact setelah eksplorasi besar.
  • Gunakan /clear sebelum 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/
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Urutan ideal:

tools β†’ system prompt β†’ repo conventions β†’ user task β†’ file content dinamis
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Lebih hemat:

npm test --silent -- --reporter=dot
Enter fullscreen mode Exit fullscreen mode

Kurang ideal:

npm install
Enter fullscreen mode Exit fullscreen mode

Lebih hemat:

npm install --silent --no-audit --no-fund
Enter fullscreen mode Exit fullscreen mode

Filter output sebelum dibaca agen

Untuk pytest:

pytest -q 2>&1 | tail -n 30
Enter fullscreen mode Exit fullscreen mode

Untuk diff:

git diff --stat
Enter fullscreen mode Exit fullscreen mode

Untuk test log:

npm test 2>&1 | grep -E "(FAIL|βœ—|Error)" | head -n 20
Enter fullscreen mode Exit fullscreen mode

Untuk TypeScript:

npm run typecheck 2>&1 | tail -n 50
Enter fullscreen mode Exit fullscreen mode

Untuk ESLint:

npm run lint 2>&1 | grep -E "(error|warning)" | head -n 50
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Jika ada file generated atau lock file besar, exclude:

git diff -- . ':(exclude)package-lock.json' ':(exclude)src/generated'
Enter fullscreen mode Exit fullscreen mode

Atau tampilkan hanya file tertentu:

git diff src/payments/retry.ts src/payments/retry.test.ts
Enter fullscreen mode Exit fullscreen mode

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.
"
Enter fullscreen mode Exit fullscreen mode

Contoh manual:

rg "function retry|retryPayment|calculateBackoff" src/payments
Enter fullscreen mode Exit fullscreen mode

Lalu baca window yang relevan:

sed -n '80,160p' src/payments/retry.ts
Enter fullscreen mode Exit fullscreen mode

Perbedaan biayanya besar:

Baca file penuh 1.500 baris  β†’ bisa belasan ribu token
Baca 80 baris relevan        β†’ ratusan token
Enter fullscreen mode Exit fullscreen mode

9. Batasi retrieval dan RAG

Jika agen Anda memakai pencarian dokumen atau RAG, batasi hasilnya.

Lebih baik:

Ambil 10 chunk Γ— 200 token
Enter fullscreen mode Exit fullscreen mode

Daripada:

Ambil 50 chunk Γ— 800 token
Enter fullscreen mode Exit fullscreen mode

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})"
)
Enter fullscreen mode Exit fullscreen mode

Ganti rate dengan harga aktual model yang Anda pakai.

Jika memakai CLI, gunakan pendekatan berikut:

# 1. Cek biaya sesi jika CLI mendukungnya
claude /cost
Enter fullscreen mode Exit fullscreen mode

Gunakan API key terpisah per proyek atau per agen:

API key A β†’ repo payments
API key B β†’ repo platform
API key C β†’ eksperimen lokal
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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.
Enter fullscreen mode Exit fullscreen mode

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:

  1. Batasi scope file.
  2. Ringkas file memori.
  3. Gunakan /compact dan /clear.
  4. Senyapkan output command.
  5. 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)