C# C# Indonesia
← Semua catatan

Agentic Coding

Log agen bukan dokumentasi — itu mekanisme pemulihan saat sesi mati

Sesi agent bisa kehabisan konteks atau berhenti di tengah kerja, dan seluruh alasan di balik keputusannya ikut hilang. Log append-only yang ditulis sebelum tiap tahap membuat sesi berikutnya melanjutkan, bukan mengulang.

Ini kejadian yang mungkin sudah Anda alami. Agent bekerja dua jam pada satu fitur, sudah menyentuh delapan file, lalu sesi berakhir — konteks penuh, koneksi putus, atau Anda sendiri yang menutup terminal. Anda buka sesi baru. Kodenya masih ada di working tree, tapi alasannya tidak. Kenapa handler ini dipindah? Kenapa pendekatan pertama dibuang? Agent baru tidak tahu, jadi dia menebak — dan sering menebak arah yang sudah dicoba dan gagal satu jam lalu.

Yang hilang bukan kode. Yang hilang jejak keputusan.

Aturan yang saya pakai

Satu bagian di CLAUDE.md, dan ini termasuk sedikit aturan yang saya tandai wajib:

## Agent logging (MANDATORY)

Every agent writes an append-only markdown log to:
docs/agent-logs/{branch-name}-{YYYY-MM-DD}.md

Write a log entry BEFORE starting each new section of work:

  ## [HH:MM UTC] — What I'm doing
  **What I did:** completed action
  **What I found:** findings or "nothing notable"
  **What's next:** planned next action
  **Blockers:** None / description

This is the crash recovery mechanism. If an agent dies, the next agent
reads this log.

Dua detail kecil di situ yang menentukan semuanya berfungsi atau tidak.

Pertama: ditulis sebelum, bukan sesudah. Log yang ditulis setelah pekerjaan selesai adalah laporan, dan laporan tidak pernah ada saat Anda paling membutuhkannya — yaitu ketika pekerjaannya justru tidak selesai. Menuliskan “yang akan saya kerjakan” sebelum mulai berarti kalau sesi mati di tengah, kalimat terakhir di log persis menjelaskan apa yang sedang berlangsung.

Kedua: append-only. Kalau agent boleh menyunting entri lama, dia akan merapikannya — dan yang pertama hilang justru pendekatan yang gagal. Padahal itu bagian paling berharga isinya. Log yang rapi berbohong tentang bentuk pekerjaan yang sebenarnya.

Sub-agent menulis ke file, bukan kembali ke konteks induk

Aturan pendamping yang dampaknya sama besar:

## Context management (agent teams)

- Sub-agents write their findings to a file under `docs/` — the report path
  named in the mission brief, or `docs/agent-logs/` — never back into the
  parent's context.
- Context is summarized automatically as it fills. Don't stop to ask about
  it, and don't wrap up work early on account of it.

Kalau Anda menyuruh sub-agent memetakan seluruh repository layer lalu melapor balik, ringkasan itu masuk ke konteks induk dan mendorong keluar hal lain. Kalau dia menulis ke docs/agent-logs/repo-scan.md, induknya cukup membaca bagian yang dia butuhkan, saat dia membutuhkannya. Sub-agent jadi cara menghemat konteks, bukan cara menghabiskannya.

”Bukannya sekarang sudah ada auto memory?”

Pertanyaan yang wajar, dan jawabannya tidak sepenuhnya “ya”. Claude Code sekarang punya auto memory: agent menulis sendiri apa yang layak diingat ke ~/.claude/projects/<project>/memory/, dengan MEMORY.md sebagai indeks yang dimuat di awal tiap sesi. Anthropic bahkan menyebutnya sebagai salah satu pergeseran dalam aturan baru context engineering untuk model Claude 5: dari memory yang Anda tulis manual, ke memory yang ditulis sendiri.

Tapi dua hal itu menjawab pertanyaan yang berbeda:

Auto memoryLog agen
Isinyaapa yang layak diingat lain kaliapa yang sedang terjadi sekarang
Ditulis saatagent menilai sesuatu berguna ke depansebelum tiap tahap kerja, tanpa kecuali
Hidup dimesin Anda, di luar repodalam repo, ikut branch dan PR
Dibaca siapaagentagent dan rekan tim Anda

Auto memory dirancang untuk pengetahuan yang bertahan — perintah build, preferensi, jebakan yang berulang. Dia tidak dirancang untuk merekam pekerjaan yang belum selesai, dan justru itu yang Anda butuhkan ketika sesi mati di tengah jalan. Agent yang berhenti mendadak belum sempat menilai apa pun “layak diingat”; yang menyelamatkan Anda adalah kalimat yang sudah dia tulis sebelum mulai. Auto memory juga bersifat lokal per mesin — jadi kalau yang Anda inginkan adalah rekan tim bisa melanjutkan, atau reviewer bisa membaca alasan di balik sebuah PR, memory tidak sampai ke sana. Pakai keduanya; keduanya tidak saling menggantikan.

Satu koreksi yang saya lakukan pada aturan saya sendiri karena artikel itu. Prinsip pertama mereka adalah rules → judgment: aturan kaku yang ditulis untuk mengekang model lemah sekarang cenderung jadi kebisingan. Menandai sesuatu MANDATORY artinya Anda mengklaim ini termasuk pengecualian — dan klaim itu kehilangan daya kalau Anda menandai lima hal sekaligus. Di CLAUDE.md saya, logging adalah salah satu dari dua aturan yang berstatus wajib. Kalau daftar itu tumbuh, yang rusak bukan cuma konteks, tapi arti kata “wajib” itu sendiri.

Kenapa ini terasa berlebihan sampai satu kali menyelamatkan Anda

Saya paham keberatannya: ini terasa seperti birokrasi untuk mesin. Tiga hal yang mengubah pandangan saya.

Log itu ternyata bahan review yang bagus. Membaca “coba pakai IAsyncEnumerable, dibatalkan karena EF Core mematerialisasi seluruh hasil di provider ini” lebih menjelaskan sebuah PR daripada diff-nya sendiri.

Log itu juga jujur soal jalan buntu, dan itu satu-satunya tempat di repo yang jujur soal itu. Commit menyimpan yang berhasil. Log menyimpan yang dicoba.

Dan karena log itu file biasa, dia bisa diabaikan oleh hal-hal yang memang seharusnya mengabaikannya. Di repo saya, docs/agent-logs/ masuk daftar path yang tidak pernah direview — reviewer otomatis melewatinya, jadi log tidak pernah mengotori PR.

Satu tes untuk menilai apakah log Anda benar-benar berfungsi: buka log dari sesi yang mati di tengah jalan, baca entri terakhirnya, dan tanya apakah orang lain bisa melanjutkan dari situ tanpa bertanya kepada Anda. Kalau tidak bisa, yang Anda punya adalah catatan kegiatan, bukan mekanisme pemulihan.

Referensi: https://claude.com/blog/the-new-rules-of-context-engineering-for-claude-5-generation-models