Jawaban singkat untuk pertanyaan yang paling sering diajukan pembaca tentang topik ini.
01Kenapa agen otonom kadang menghasilkan nol commit?
Karena brief yang terbuka tidak punya kriteria selesai yang bisa diperiksa agen, tidak punya anggaran giliran, dan justru menghadiahi pemilihan item tersulit. Agen menjelajah sampai batasnya tercapai, dan menjelajah terasa produktif. Perbaikannya adalah prosedur bernomor dengan anggaran giliran eksplisit plus aturan bahwa run tanpa commit adalah kegagalan.
02Permukaan instruksi mana yang sesungguhnya mengendalikan perilaku agen?
Berkas instruksi persisten, bukan prompt run sekali pakai. Di proyek saya, brief harian yang meminta fitur tertentu justru ditimpa prioritas berkas persistennya — agen memperbaiki pipeline yang merah, dan itu keputusan yang lebih baik. Kemudikan lewat permukaan yang tahan lama dan backlog yang dikurasi, bukan lewat pesan hari ini.
03Apa itu tenggat pendaratan dan kenapa penting?
Nomor giliran setelah mana agen berhenti menambah commit dan membelanjakan sisa anggarannya untuk push, membuka pull request, dan merge. Tanpa itu, sebuah run bisa menghasilkan sebelas commit bagus, memakai seluruh giliran untuk itu, lalu menelantarkannya di branch yang tak seorang pun merge. Merge yang dijamin atas enam commit mengalahkan sebelas commit yang tak terjangkau.
04Tugas seperti apa yang muat dalam satu run tanpa pengawasan?
Satu tes untuk satu cabang yang belum tercakup, satu tipe diperketat atau pemeriksaan ekshaustif ditambahkan, satu perbaikan bug kecil terdokumentasi beserta tes regresinya, atau satu koreksi dokumentasi. Yang tidak muat: fitur baru, apa pun yang butuh dependensi baru, dan apa pun yang menyentuh lebih dari segelintir berkas.
05Bagaimana memverifikasi bahwa merge agen benar-benar terjadi?
Lewat API platform, bukan lewat skrip pemantau buatan sendiri. Punya saya melaporkan merge yang tidak pernah terjadi karena ia membandingkan origin dengan commit dasar yang di-hardcode, dan laporan sukses palsu lebih merusak daripada tidak ada laporan. Baca juga satu log run penuh dari ujung ke ujung — jumlah giliran dan percobaan ulang hanya terlihat di sana.
Desain Prompt Agen Otonom: Commit Kecil yang Mendarat
Kenapa brief harian yang terbuka menghasilkan nol commit, dan prosedur bernomor — commit pertama di giliran keenam, mendarat di giliran ketiga puluh — yang berhasil.
Agen tanpa pengawasan yang diberi tugas terbuka akan menjelajah sampai kehabisan giliran dan tidak menghasilkan commit apa pun. Mengganti brief-nya dengan prosedur bernomor — satu item kecil, commit pertama dalam enam giliran, push lebih awal, berhenti commit di giliran ketiga puluh, tidak pernah berakhir dengan nol commit — mengubah run yang mengambang menjadi pull request yang ter-merge.
Agen coding harian saya melakukan hal ini dua malam berturut-turut: membuat branch, membaca berkas selama tiga puluh lima giliran, lalu berhenti. Tanpa commit, tanpa pull request, tanpa error. Modelnya bekerja persis seperti yang diinstruksikan, dan instruksinyalah masalahnya.
Berikut ini adalah perbedaan antara brief yang terdengar masuk akal bagi manusia dan prosedur yang benar-benar bisa dieksekusi model yang lebih lemah tanpa pengawasan. Ini satu hal dengan daya ungkit tertinggi yang saya ubah di sepanjang proyek.
Kenapa brief terbuka gagal tanpa pengawasan
Ambil item teratas dari backlog dan kerjakan adalah instruksi yang sangat baik untuk manusia. Untuk agen tanpa pengawasan dengan anggaran terbatas, ia punya tiga sifat fatal.
Tidak ada kriteria selesai yang bisa diperiksa agen. Kerjakan bisa dipenuhi oleh jumlah membaca yang sembarang, dan membaca terasa produktif.
Tidak ada anggaran giliran. Setiap run adalah lomba melawan batas yang tidak pernah disebut brief, jadi agen menemukan batasnya dengan cara menabraknya.
Ia menghadiahi ambisi. Item teratas biasanya item tersulit, dan itu pilihan paling buruk untuk run yang harus selesai sekali duduk.
Versi termahal yang saya lihat adalah run yang menghabiskan delapan puluh giliran dan beberapa juta token menggilas satu tugas yang memang sulit — tes integrasi basis data — dan menghasilkan satu commit yang bahkan tidak ter-push. Tidak ada yang crash. Ia sekadar memilih tugas yang tak bisa ia selesaikan lalu mengerjakannya sampai anggarannya habis.
Satu-satunya hasil yang dihitung. Commit di branch yang tak seorang pun merge bukanlah throughput, dan agen yang dioptimalkan untuk jumlah commit akan dengan senang hati memproduksinya sepanjang hari. Diagram: Bunyk / Wikimedia Commons, CC BY-SA 4.0
Prosedur yang menggantikannya
Penulisan ulangnya mengubah sebuah tujuan menjadi urutan bernomor dengan anggaran eksplisit dan sebuah pintu darurat. Setiap klausanya ada karena ketiadaannya pernah menyebabkan kegagalan tertentu.
# The prompt that produced zero commits, twice:
"Pick the top item from BACKLOG.md and implement it."
# The prompt that produced a merged pull request:
"1. Check main is green before starting.
2. Create a branch named chore/refine-<date>.
3. Choose ONE small, self-contained improvement: a single test, one
type tightened, one doc fix. NO new dependencies. NO refactors.
4. Land your FIRST commit within 6 turns. Stop reading and start editing.
5. Push after the first commit and every ~3 commits after that.
6. By turn 30 STOP committing and open the pull request.
ESCAPE HATCH: a run that ends with zero commits is a failure. If you
are stuck, commit whatever compiles, push, and open the PR anyway."
Dua klausa mengerjakan sebagian besar pekerjaannya. Daratkan commit pertama dalam enam giliran mematikan spiral eksplorasi, karena ia mengubah membaca dari aktivitas bawaan menjadi sesuatu yang harus dianggarkan agen. Dan pintu daruratnya — run yang berakhir dengan nol commit adalah kegagalan — menghapus opsi yang terus dipilih model setiap kali ia merasa ragu.
Tulis anggarannya dalam giliran, bukan dalam kata seperti cepat atau singkat. Giliran adalah sesuatu yang bisa dihitung agen; cepat adalah sesuatu yang bisa ia rasionalisasi. Setiap instruksi lunak di prompt saya pada akhirnya diganti dengan sebuah angka.
Di mana instruksinya harus tinggal
Isi prompt baru separuh pertanyaannya. Separuh lainnya adalah permukaan mana yang membawanya, dan dalam praktik otoritas mereka tidak setara.
Permukaan
Bagus untuk apa
Apa yang saya pelajari dengan susah payah
Prompt run sekali pakai
Tugas spesifik hari ini beserta batasannya
Ia tidak andal menimpa berkas instruksi persisten; agen akan mengikuti berkas itu dan penilaiannya sendiri
Berkas instruksi persisten
Standar, disiplin, definisi selesai
Inilah permukaan kendali yang sesungguhnya. Kebiasaan mutu tinggal di sini, bukan di prompt harian
Berkas backlog yang dikurasi
Memilih apa yang dikerjakan berikutnya
Mengurasi item teratas adalah cara Anda mengemudi, karena berkas instruksinya menunjuk ke sana
Skill atau runbook
Prosedur berulangnya itu sendiri
Menjaga urutan yang sama di setiap run tanpa mengulanginya di tiap prompt
Saya menemukan ini dengan mem-brief sebuah fitur spesifik dan mendapat sesuatu yang sama sekali lain: agen melihat pipeline-nya merah dan memperbaiki itu. Itu keputusan yang tepat, dan terjadi karena berkas persistennya menyuruh memeriksa pipeline lebih dulu. Pelajarannya, mengemudi terjadi lewat permukaan yang tahan lama, bukan lewat pesan hari ini.
Kontradiksi antar permukaan lebih buruk daripada salah satu instruksinya sendirian. Prompt harian yang berbunyi kerjakan satu hal kecil lalu berhenti, berhadapan dengan berkas instruksi yang berbunyi kerjakan backlog-nya, menghasilkan keluaran terendah dari semua konfigurasi yang pernah saya jalankan — agennya mengambil jalan tengah dan nyaris tidak melakukan apa pun.
Mendarat adalah anggaran terpisah dari bekerja
Kegagalan yang menggantikan keadaan mengambang lebih halus dan lebih menjengkelkan: satu run menghasilkan sebelas commit bagus, memakai seluruh giliran yang tersedia untuk itu, dan tidak pernah membuka pull request-nya. Pekerjaannya ada dan tak terjangkau.
Dua aturan memperbaikinya. Push setelah commit pertama dan setiap beberapa commit sesudahnya, agar pekerjaannya sampai ke remote meski run-nya mati di tengah jalan. Dan tetapkan tenggat pendaratan eksplisit beberapa giliran sebelum batas keras, saat mana agen berhenti menambah commit terlepas dari berapa banyak sisa daftarnya. Merge yang dijamin atas enam commit mengalahkan sebelas commit yang telantar, dan pertukaran itu layak dinyatakan di prompt dengan kata-kata persis seperti itu.
Alasan pendaratan diberi anggaran sendiri. Commit, push, membuka pull request, dan menunggu required check tetap memakan turn baik pekerjaannya lancar atau tidak, jadi tugas yang menghabiskan seluruh turn untuk perubahannya sendiri berakhir dengan commit yang tidak pernah di-merge.
Memilih pekerjaan yang bisa diselesaikan agen
Struktur prompt hanya membantu kalau ukuran tugasnya tepat. Empat kategori berikut andal muat dalam satu run tanpa pengawasan.
Satu tes untuk satu cabang yang belum tercakup. Kecil, bisa diverifikasi, dan ia memperbaiki jaring pengaman untuk setiap run berikutnya.
Satu tipe diperketat atau satu pemeriksaan ekshaustif ditambahkan. Mekanis, berisiko rendah, dan kompilator yang memverifikasinya.
Satu perbaikan bug kecil yang terdokumentasi beserta tes regresinya. Di sinilah nilai sesungguhnya muncul, dan laporan cakupan adalah cara yang baik untuk menunjuk kandidatnya.
Satu koreksi dokumentasi atau changelog. Tidak glamor, tetapi menjaga sebuah run tetap produktif di hari ketika kodenya sudah bersih.
Yang tidak muat: fitur baru, apa pun yang butuh dependensi baru, dan apa pun yang menyentuh lebih dari segelintir berkas. Itu semua untuk sesi terawasi tempat manusia bisa mengoreksi arah saat itu juga.
Empat pemeriksaan sebelum memercayai lingkarnya
Sebelum membiarkan sebuah jadwal berjalan tanpa pengawasan, verifikasi hal-hal ini — saya pernah terbakar oleh masing-masing.
Periksa merge-nya lewat API platform, bukan lewat skrip pemantau buatan Anda sendiri. Punya saya melaporkan merge yang tidak pernah terjadi karena ia membandingkan dengan commit dasar yang di-hardcode.
Baca satu log run penuh dari ujung ke ujung. Jumlah giliran, percobaan ulang, dan ke mana waktunya pergi semuanya terlihat di sana dan tidak di tempat lain.
Pastikan run-nya bekerja dari container yang benar-benar dingin, bukan hanya dari yang selama ini Anda utak-atik. Sisa volume menyembunyikan build image yang rusak.
Verifikasi nama branch dan kepengarangan commit sesuai maksud Anda. Apa pun yang di-push agen membawa nama Anda di riwayatnya.
Poin pertama layak diulang: pemantauan yang Anda tulis sendiri, terburu-buru, untuk mengawasi sebuah agen adalah persis kode yang paling tidak mungkin diuji, dan laporan sukses palsu lebih merusak daripada tidak ada laporan sama sekali.
Jarak antara agen yang mengambang dan agen yang merilis bukan mutu model, melainkan prosedur. Beri ia satu item kecil, nomor giliran saat commit pertama harus sudah ada, kebiasaan push, tenggat pendaratan, dan aturan eksplisit bahwa nol commit adalah kegagalan — maka model yang sederhana pun menjadi kontributor harian yang andal.