Cheat sheet harness agen: komponen, file, masalah, dan daftar periksa peluncuran
Harness agen terdiri dari lima subsistem: instruksi, alat, lingkungan, status, dan umpan balik. Kumpulan file minimal adalah AGENTS.md sebagai router singkat, skrip pemeriksaan (make check, verify.sh), file progres, dan daftar fitur dengan status; status selesai ditetapkan oleh skrip, bukan oleh agen.
Lima subsistem harness
| Subsistem | Apa itu | Artefak | Gejala kerusakan |
|---|---|---|---|
| Instruksi | Apa yang harus diketahui agen tentang proyek | AGENTS.md / CLAUDE.md, skills, docs/, ADR | Melanggar konvensi yang sudah diketahui |
| Alat | Apa yang bisa dilakukan agen | shell, tes, linter, browser, server MCP | «Ingin tetapi tidak bisa» |
| Lingkungan | Di mana agen bekerja | file lock, Docker/devcontainer, git worktree, sandbox, init.sh | Sesi dimulai dengan memperbaiki lingkungan |
| Status | Apa yang bertahan setelah dimulai ulang | PROGRESS.md, DECISIONS.md, feature_list.json, commit | Sesi baru tidak tahu di mana pekerjaan berhenti |
| Umpan balik | Bagaimana agen mengetahui kesalahannya | make check, E2E, hook, arch-check, penilai | «Selesai», tetapi tidak berfungsi |
Urutan penerapan dari nol: umpan balik → instruksi → status → lingkungan → alat.
File harness
| File | Fungsi | Aturan |
|---|---|---|
| AGENTS.md / CLAUDE.md | Pintu masuk: apa proyeknya, cara menjalankannya, cara memeriksanya | Router singkat (sekitar 80 baris), tautan ke dokumen dengan kondisi «kapan dibaca» |
| docs/*.md | Rincian per topik | Dibaca sesuai kebutuhan, tidak seluruhnya |
| .claude/skills/*/SKILL.md | Prosedur yang berulang (deploy, review) | Dimuat ketika tugas cocok dengan deskripsinya |
| PROGRESS.md | Status, yang sudah selesai, hambatan, langkah berikutnya | Diperbarui di akhir setiap sesi |
| DECISIONS.md | Keputusan, alasan, opsi yang ditolak | Catat jalurnya, bukan hanya kesimpulannya |
| feature_list.json | Fitur: behavior, verification, state | Tepat satu fitur active (WIP=1) |
| scripts/verify.sh | Memeriksa fitur dan memindahkannya ke passing | Satu-satunya yang menetapkan passing, dengan SHA commit |
| scripts/arch-check.sh | Batas arsitektur | Kode keluar 1 + WHY dan FIX dalam keluaran |
| scripts/init.sh | Pemeriksaan lingkungan sebelum bekerja | Lingkungan, git bersih, make check hijau, fitur aktif |
| sprint contract | Kontrak per fitur sebelum kode | Dalam lingkup / di luar lingkup / pertanyaan terbuka |
| .claude/settings.json | Izin dan hook Claude Code | Pemeriksaan pada peristiwa, bukan dalam ingatan agen |
Kerangka AGENTS.md
# Proyek: backend pembayaran (FastAPI, PostgreSQL)
## Menjalankan
docker compose up -d && ./scripts/init.sh
## Pemeriksaan
make check # lint, tipe, unit, arch-check
make e2e # skenario end-to-end
## Definition of Done
- make check dan make e2e — kode 0
- fitur dipindahkan ke passing oleh skrip scripts/verify.sh
- PROGRESS.md diperbarui
## MUST
- kueri ke basis data hanya lewat repository
- rahasia hanya dari variabel lingkungan
## Dokumen
- docs/payments.md — ketika tugas menyentuh pembayaran dan pengembalian dana
- docs/migrations.md — ketika skema basis data berubah
Status fitur
| Status | Arti | Siapa yang memindahkan |
|---|---|---|
| pending | Dalam antrean | Perencana |
| active | Sedang dikerjakan (hanya satu) | Agen saat memulai |
| passing | Pemeriksaan lulus | Hanya verify.sh |
| blocked | Membutuhkan keputusan manusia | Agen, dengan alasan |
Tingkat verifikasi
| Tingkat | Apa | Kapan |
|---|---|---|
| 1 | Lint, tipe | Selalu |
| 2 | Tes unit dan integrasi | Selalu |
| 3 | E2E | Perubahan lebih dari satu lapisan; sebelum «selesai» |
| 4 | arch-check | Impor antarlapisan yang baru |
Hak untuk menyatakan «selesai» hanya setelah tingkat teratas. Tes unit yang hijau bukan kesiapan.
Mekanisasi aturan
| Tingkat | Alat | Biaya |
|---|---|---|
| Guard grep | Skrip pencarian pola dengan pesan WHY/FIX | Menit |
| Aturan linter | import-linter (Python), dependency-cruiser, eslint-plugin-boundaries (JS/TS) | Satu jam |
| Tes arsitektur | Tes di CI yang gagal saat lapisan dilanggar | Lebih banyak, tetapi terlihat di make check |
#!/usr/bin/env bash
fail=0
if grep -rn "from app.db" app/services/; then
echo "WHY: service tidak mengakses basis data secara langsung"
echo "FIX: gunakan repository dari app/repositories/"
fail=1
fi
exit $fail
Masalah umum dan solusinya
| Masalah | Subsistem | Solusi |
|---|---|---|
| Aturan di CLAUDE.md tidak dipatuhi | Instruksi | Pangkas file, ubah aturan menjadi pemeriksaan atau hook |
| Agen tidak bisa menjalankan tes | Alat | Izinkan perintahnya, pasang dependensi di image |
| Perilaku berbeda di tiap mesin | Lingkungan | File lock, Docker/devcontainer, versi runtime yang tetap |
| Amnesia antarsesi | Status | PROGRESS.md, serah terima sesi, membaca di awal sesi |
| Tiga fitur dimulai, tidak ada yang selesai | Status | WIP=1 di feature_list.json |
| «Selesai», tetapi tidak berfungsi | Umpan balik | DoD, E2E, verify.sh, penilai independen |
| Tes hijau, fitur rusak | Umpan balik | E2E dengan basis data dan konfigurasi sungguhan |
| Agen menyalin pola yang buruk | Umpan balik | arch-check sejak hari pertama |
| Tidak jelas apa yang dikerjakan agen | Status | Commit kecil, laporan di PROGRESS.md, DECISIONS.md |
| Agen merusak lingkungan semalam | Lingkungan | Sandbox, git worktree, titik simpan, rollback lewat init.sh |
| Komentar yang sama dari review dua kali | Harness secara umum | Ubah menjadi pemeriksaan di make check, hapus teksnya dari instruksi |
Peran untuk tugas panjang
| Peran | Melakukan | Tidak melakukan |
|---|---|---|
| Perencana | Fitur dengan kriteria penerimaan | Tidak menulis kode |
| Generator | Mengimplementasikan satu fitur, menjalankan tes | Tidak memutuskan apakah sudah selesai |
| Penilai | Vonis berdasarkan rubrik dengan rujukan ke file, baris, log | Tidak melihat penalaran generator |
| Merge | Commit ketika review == pass | Ini kode, bukan agen |
Anggaran kerja otonom
- Tujuan — satu kalimat (misalnya membawa semua fitur ke passing).
- WIP=1, batas waktu dan percobaan per fitur.
- Metrik naik secara monoton; regresi berarti rollback segera.
- Migrasi, infrastruktur, uang — eskalasi ke manusia.
- Setelah beberapa review yang gagal, mulai fitur dengan konteks bersih.
Daftar periksa peluncuran agen
- Ada AGENTS.md: stack, cara menjalankan, perintah pemeriksaan, DoD.
- make check lulus pada klon yang bersih.
- Lingkungan dapat direproduksi: file lock, Docker, atau devcontainer.
- Perintah yang diperlukan tersedia untuk agen; yang berbahaya dilarang atau dijalankan di sandbox.
- Ada E2E minimal untuk skenario utama.
- Ada PROGRESS.md dan aturan membacanya di awal sesi.
- Fitur ada dalam daftar dengan status, hanya satu yang aktif.
- Status passing ditetapkan oleh skrip.
- Pesan pemeriksaan memuat WHY dan FIX.
- Tugas dirumuskan dengan kriteria penerimaan dan batas lingkup.
- Sudah ditetapkan apa saja yang membutuhkan keputusan manusia.
- Verification gap sudah dihitung sebelum perubahan, sebagai pembanding.
Metrik harness
| Metrik | Cara menghitung |
|---|---|
| Verification gap | Proporsi «selesai» tanpa konfirmasi pemeriksaan pada 10 tugas |
| MTTR | Waktu dari kerusakan sampai kembali ke kondisi kerja |
| Cold start | Apakah sesi baru bisa menjawab «di mana kita, apa berikutnya» tanpa menebak |
| Ablasi | Penurunan saat satu subsistem dimatikan pada kumpulan tugas yang tetap |
Kesimpulan
Harness adalah lingkaran, bukan satu file: instruksi, alat, lingkungan, status, dan umpan balik. Mulailah dari pemeriksaan, jaga AGENTS.md tetap singkat, serahkan status selesai kepada skrip, dan tinjau harness secara berkala. Semua ini dirangkai menjadi satu kesatuan pada proyek contoh di kursus harness engineering.
Pertanyaan umum
Apa bedanya AGENTS.md dengan CLAUDE.md?
Fungsinya sama, yaitu file instruksi untuk agen. CLAUDE.md dibaca oleh Claude Code, AGENTS.md adalah format umum untuk berbagai agen; di CLAUDE.md cukup merujuk ke AGENTS.md.
Berapa baris yang sebaiknya ada di AGENTS.md?
Tidak ada batas baku, tetapi file masukan sebaiknya tetap singkat, sekitar seratus baris seperti daftar isi. Rincian dipindahkan ke dokumen terpisah.
Apakah feature_list.json diperlukan untuk proyek kecil?
Untuk perubahan sekali jalan tidak perlu. Ia terbayar ketika agen mengerjakan beberapa fitur berurutan atau dalam beberapa sesi.
Di mana menyimpan rahasia yang perlu diakses agen?
Di variabel lingkungan atau pengelola rahasia, bukan di file instruksi maupun di kode. Agen diberi akses ke lingkungan, bukan ke nilai rahasia yang tertulis di teks.
Topik ini dibahas mendalam dengan praktik di kursus “Harness Engineering: инженерия надёжности AI-агентов”.
- Из чего состоит harness AI-агента: инструкции, инструменты, среда, состояние, обратная связь
- Харнес AI-агента с нуля: AGENTS.md, feature_list.json, verify.sh и автономный цикл