Pagar pengaman di level prompt hanyalah saran. Kalau satu-satunya yang berdiri antara agent dan file proyek pengguna adalah instruksi di system prompt, maka model yang cukup bingung cepat atau lambat akan menulis sesuatu yang tidak pernah disetujui siapa pun. Untuk tool builder yang agent-nya menyunting workspace sungguhan, itu bukan mode kegagalan yang bisa diterima.
Solusinya bukan prompt yang lebih baik. Solusinya memindahkan gerbang itu ke luar jangkauan model.
Dua fase, satu transkrip
Setiap giliran chat membangun ulang agent dari transkrip tersimpan, yang menjaga runtime tetap stateless antar giliran dan membuat sebuah run bisa direproduksi. Giliran itu lalu berjalan dalam dua fase.
Di fase perencanaan agent boleh membaca apa saja dan menulis apa pun. Penulisan file ditahan di memori sebagai usulan perubahan, tidak diterapkan ke disk. Saat agent selesai merencanakan, buffer itu disajikan ke pengguna sebagai rencana.
Di fase eksekusi, yang hanya dimulai setelah persetujuan, buffer ditulis dan penulisan baru diizinkan lewat. Rencana yang ditolak membuang buffer, dan proyek tetap persis seperti sebelumnya.
if (!approved) {
buffer.discard();
return { status: "rejected" };
}
buffer.flush(); // satu entri riwayat, bukan satu per file
Flush-nya menjadi satu entri di riwayat proyek. Itu lebih penting daripada kelihatannya: kalau setiap penulisan file menjadi langkah undo sendiri, membatalkan run yang ditolak tapi sudah setengah diterapkan berarti mengklik undo belasan kali dan berharap tidak ada yang terlewat.
Metering yang bisa dijumlahkan
Tempat kedua di mana desain yang terlalu permisif menggigit adalah biaya. Kredit berupa bilangan bulat, pemakaian token tidak, dan mengonversi di antara keduanya pada momen yang salah menghasilkan entah drift pembulatan atau kredit pecahan yang tidak pernah benar-benar mencapai nol.
Pendekatannya di sini adalah ledger penggunaan aditif. Setiap run menambahkan pemakaian terukurnya, dan meter menghitung kredit dari jumlahnya alih-alih memutasi saldo di tempat. Drift berhenti menjadi kebocoran pelan dan menjadi sesuatu yang bisa dihitung ulang dari ledger kapan saja.
Pelajaran yang sama dengan gerbang persetujuan, sebenarnya. Saat sebuah angka atau sebuah file penting, turunkan dari catatan tentang apa yang benar-benar terjadi, bukan dari nilai yang disesuaikan di tempat dan tidak lagi bisa diaudit.
Portabilitas adalah kendala, bukan fitur
Satu keputusan lagi membentuk skemanya: basis kode yang sama berjalan di PostgreSQL dan SQLite. Itu menyingkirkan sebagian besar kemudahan yang biasa diambil pada satu database: tidak ada partial index dengan sintaks berbeda, tidak ada operator JSON khas dialek di jalur panas.
Menulis di irisan keduanya lebih lambat didesain dan jauh lebih cepat di-deploy, karena yang Anda uji secara lokal adalah yang berjalan di deployment kecil, dan yang berjalan di deployment kecil adalah yang bisa Anda serahkan ke pengguna yang ingin self-host.



