- Hasil eksperimen selama 2 hari menunjukkan bahwa Claude Fable 5 tepat digambarkan sebagai "relentlessly proactive"
- Hanya dengan screenshot dan satu baris prompt, ia menjalankan server pengembangan lokal, memanipulasi browser sungguhan, dan menyisipkan kode pengukuran untuk melacak penyebab bug CSS
- Fable mencoba mereproduksi bug sambil berpindah antara Playwright, Firefox, WebKit, dan Safari, lalu setelah gagal, ia menemukan jendela browser sungguhan dan langsung menyusun otomatisasi screenshot sendiri
- Untuk menguji modal dialog yang terbuka dengan tombol
/, ia menyisipkan JavaScript ke template Datasette dan memicu event keyboard setelah jendela dimuat untuk menciptakan status yang diperlukan
- Untuk memperoleh nilai pengukuran di dalam halaman, ia membuat server pengumpul CORS berbasis Python
http.server dan menyimpan informasi <textarea> di dalam shadow DOM Web Component sebagai JSON
- Agen coding yang kuat dapat melakukan hal-hal yang bisa dilakukan pengguna di terminal, sehingga menjalankannya di luar sandbox meningkatkan risiko prompt injection dan kebocoran data
Proses debugging Claude Fable 5
- Mulai menyelidiki scrollbar horizontal yang tidak perlu pada prompt chat menu lompat milik Datasette Agent
- Claude Fable 5 secara aktif mengerahkan berbagai teknik untuk mencapai tujuannya
- Inputnya adalah screenshot dan prompt satu baris
Look at dependencies to help figure out why there is a horizontal scrollbar here
- Karena diduga penyebab masalah bisa berada pada dependensi Datasette Agent, khususnya Datasette itu sendiri, ia diminta mulai dengan memeriksa kode dependensi
- Claude Code, tanpa instruksi otomatisasi browser yang eksplisit, membuka jendela Firefox biasa dan berpindah ke dialog tersebut, lalu juga membuka jendela Safari untuk melanjutkan penyelidikan
Otomatisasi screenshot browser
- Fable menyusun caranya sendiri untuk mengambil screenshot jendela browser menggunakan
uv run --with pyobjc-framework-Quartz
- Dengan Python, ia menelusuri semua jendela di mesin dan memfilter jendela Safari yang nama jendelanya berisi string yang diperkirakan seperti
"textarea"
- Setelah menemukan pengenal bilangan bulat seperti
153551 yang mewakili nomor jendela, ia menyimpan PNG dengan CLI screencapture
- Ia menulis halaman HTML sementara seperti
/tmp/textarea-scrollbar-test.html, membukanya di Safari, lalu mengambil screenshot
- Contoh perintahnya adalah
screencapture -x -o -l 153551 /tmp/safari-cases.png
Menjalankan modal dialog secara otomatis
- Modal yang diuji hanya bisa dibuka lewat klik atau shortcut keyboard, dan tidak tampak ada mekanisme yang jelas untuk menggerakkan mouse atau menjalankan shortcut keyboard di dalam Safari
- Claude berjalan di folder yang berisi source code aplikasi dan cukup memahami strukturnya untuk menjalankan server pengembangan lokal Datasette
- Ia menambahkan JavaScript ke template Datasette agar mensimulasikan input tombol
/ setelah jendela terbuka
- Kode ini memicu event
keydown untuk tombol / 1,2 detik setelah jendela dimuat, sehingga menjalankan shortcut pembuka modal dialog
<script>
window.addEventListener("load", function () {
setTimeout(function () {
document.dispatchEvent(new KeyboardEvent("keydown", {key: "/", bubbles: true}));
}, 1200);
});
</script>
Mengumpulkan nilai pengukuran dari dalam halaman
- Claude perlu menjalankan JavaScript di halaman untuk memperoleh nilai pengukuran secara langsung, dan untuk itu ia menulis aplikasi web sendiri yang menerima informasi via CORS
- Menggunakan pustaka standar Python
http.server, ia menjalankan server lokal di 127.0.0.1:9999
- Server tersebut menerima permintaan POST berisi JSON, menuliskannya ke
/tmp/diag.json, dan mengirim header Access-Control-Allow-Origin: * agar kode dari domain lain juga bisa berkomunikasi
- Claude menyisipkan JavaScript ke template yang dimuat di browser untuk menemukan
<textarea> di dalam Web Component <navigation-search>
- Kode yang disisipkan mengukur
devicePixelRatio, scrollWidth, clientWidth, whiteSpace, dan width, lalu mengirimkannya ke server lokal
const host = document.querySelector("navigation-search");
const ta = host.shadowRoot.querySelector("textarea");
const cs = getComputedStyle(ta);
fetch("http://127.0.0.1:9999/diag", {
method: "POST",
body: JSON.stringify({
dpr: window.devicePixelRatio,
scrollWidth: ta.scrollWidth, clientWidth: ta.clientWidth,
whiteSpace: cs.whiteSpace, width: cs.width,
}),
});
Beralih ke Opus dan memverifikasi perbaikan
- Setelah menemukan berbagai teknik, Fable terkena guardrail tak terlihat dan diturunkan ke Opus
- Opus dapat mengakses seluruh riwayat percakapan dan melanjutkan penggunaan teknik yang dirintis Fable
- Setelah itu, Opus menemukan masalahnya, menguji dan memverifikasinya, lalu menyelesaikan commit perbaikan
- Opus merangkum teknik otomatisasi dan contoh kode yang dapat dijalankan untuk browser sungguhan yang dipakai selama sesi ke dalam
/tmp/automation-report.md
- Laporan tersebut dibagikan sebagai gist terpisah, dan seluruh log terminal Claude Code juga dipublikasikan
Tinjauan penuh atas pekerjaan yang dilakukan
- Claude Fable 5 dan Claude Code menemukan cara menjalankan server pengembangan lokal dan juga menyusun variabel lingkungan palsu yang diperlukan untuk menjalankannya
- Ia menjalankan sesi Playwright Chrome, menyalakan pengaturan scrollbar terlihat di Chrome dengan
defaults write com.google.chrome.for.testing AppleShowScrollBars Always, lalu mematikannya lagi nanti
- Ia juga mencoba Firefox dan WebKit milik Playwright, tetapi gagal mereproduksi bug
- Ia mengetahui bahwa browser default adalah Safari, lalu membuat dokumen HTML
textarea-scrollbar-test.html
- Ia membuka dokumen uji itu di Firefox sungguhan, tetapi akses
osascript diblokir karena “osascript is not allowed assistive access”
- Ia menemukan jalan memutar
pyobjc-framework-Quartz dan menyusun alur screenshot berbasis nomor jendela
- Ia menambahkan JavaScript ke template situs untuk memicu tombol
/, lalu menerima data JSON lewat server CORS Python
- Ia menelusuri shadow DOM Web Component untuk menemukan informasi yang diperlukan, lalu mengonfirmasi penyebab bug di Safari
- Setelah menerapkan kemungkinan perbaikan pada template kustom dan memverifikasi perilakunya, ia melaporkan cara menyelesaikan masalah
Perkiraan biaya
- Paket yang digunakan adalah Claude Max seharga $100 per bulan, dan Anthropic mengatakan akan memberi kuota longgar untuk Fable hingga 22 Juni lalu setelah itu menagihkan harga API penuh
- AgentsView digunakan untuk melacak pengeluaran, dan jika membayar harga penuh, biaya sesi tersebut dihitung sekitar $12.11
- Output sesi adalah
68606, konteks maksimum 113178, dan model yang digunakan adalah claude-fable-5 dan claude-opus-4-8
- Jika tidak mengawasi biaya dengan saksama, Fable dapat dengan mudah menghabiskan sekitar $12 biaya token untuk debugging CSS sambil menciptakan metode baru
Perlunya sandbox
- Fakta bahwa Fable pada akhirnya menggunakan metode ekstrem untuk mendapatkan informasi yang diperlukan bagi perbaikan CSS dua baris terasa mengesankan
- Agen coding dapat melakukan hal-hal yang bisa dilakukan pengguna dengan mengetik perintah di terminal, dan frontier model mengetahui sangat banyak teknik
- Jika ada instruksi berbahaya, prompt injection di dalam kode atau thread issue, atau sesuatu yang ditempel sembarangan ke terminal, hal itu bisa menyebabkan kebocoran data atau kerusakan lain
- Menjalankan agen coding di luar sandbox selalu merupakan ide buruk, dan dianggap sebagai kandidat utama insiden keamanan agen coding
- Fable mungkin lebih cerdas dan lebih curiga terhadap instruksi berbahaya, tetapi sekali ia termakan instruksi, sifat proaktifnya yang tanpa henti dapat memperbesar skala dampak
1 komentar
Komentar Hacker News
Ini terbaca seperti contoh yang mengesankan tentang hilangnya agensi manusia yang fatal, dan commit aktualnya juga mengungkap cukup banyak hal [0]
Penulis ingin menyembunyikan scrollbar horizontal. Developer frontend junior yang layak pasti pertama-tama akan bertanya, “
overflow-x: hidden;harus diletakkan di mana?” Solusi yang benar-benar lengkap cukup dengan menekan “Inspect element” di browser untuk menemukan kelas CSS, lalu mencari lokasinya di kode dengan (rip)grep dan menambahkan satu barisProgrammer yang lebih proaktif mungkin akan bertanya hal-hal seperti konten apa di kotak teks kosong yang menyebabkan overflow, mengapa harus menaruh solusi tambal sulam yang hanya menutupi gejala di dua tempat alih-alih memperbaiki akar masalah, dan apakah lebih baik menata
textareahanya sekali[0] https://github.com/datasette/datasette-agent/commit/a75a8b72...
__init__.py[0]Berdasarkan pengalamanku memakai Claude, hasilnya biasanya cukup terstruktur, jadi ini sebenarnya agak mengejutkan. Meski begitu, cara pakainya bagiku lebih dekat ke berdebat secara sokratis dengan engineer lain yang kebetulan robot, daripada benar-benar vibe coding
[0] https://github.com/datasette/datasette-agent/blob/main/datas...
Itulah tepatnya yang kuharapkan dari developer junior. Memastikan bug itu benar-benar ada, mencari cara memperbaikinya, lalu memverifikasi bahwa bug tersebut sudah diperbaiki
Masalahnya, seperti yang juga ditunjukkan dengan tepat di tulisan blog itu, adalah bahwa alih-alih berhenti dan bertanya ketika membutuhkan izin tingkat lebih tinggi, ia terus tanpa henti mencari jalan memutar yang sifatnya seperti hacking. Jika dianalogikan ke developer manusia, ini mirip situasi ketika dia butuh hak akses ke sandbox pihak ketiga, tetapi alih-alih meminta kredensial ke senior, dia malah mencoba membangun sandbox versinya sendiri dari nol
Ini mengingatkanku pada masa ketika akses ke dunia online ditagih per menit. Saat itu ada banyak insentif untuk terus membuat meterannya berjalan, dan rasanya ini juga jenis yang sama
Saya tetap bingung dan terkejut karena, meski sudah diakui dengan jelas bahwa “menjalankan coding agent di luar sandbox selalu merupakan ide buruk”, masih banyak orang yang terus melakukannya
Rasanya seperti mengunggah video duduk di kursi penumpang dengan kaki di atas dashboard lalu berkata, “Ingat ya, kalau terjadi kecelakaan airbag bisa mematahkan kaki saya atau bahkan lebih parah! Untung sekali itu tidak terjadi pada saya!”
Masalahnya adalah cara tiap orang memberi prompt sangat berbeda
Misalnya saya bisa meminta, “Uji beberapa variasi annotation ini pada pod k8s untuk service ini di cluster X. Itu akan membuktikan teori Y.” Sementara rekan saya hanya bilang, “Uji teori Y.” Kalau Anda menanyakan itu ke dua engineer junior, yang satu mungkin akan coba-coba acak di lingkungan produksi, sementara yang lain mungkin menjalankan tes lokal. Itu adalah permintaan tanpa arahan semacam “lakukan apa pun yang perlu untuk cari tahu”, dan agent membacanya seperti junior yang tidak diberi batasan tetapi sangat ditekan untuk “cari tahu”
claudeIa punya dotfile yang mirip dengan milik saya tetapi tanpa rahasia. Home directory saya 0700,
claudepunya SSH key terpisah, sudah saya tambahkan ke profil GitHub saya tetapi dilindungi kata sandi, dan push/pull saya lakukan sendiri. Ada juga user dan database Postgres dev/test terpisah, dan itu bukan superuserIntinya saya memperlakukannya seperti developer lain di proyek. Kalau perlu menjalankan sesuatu lewat sudo, dia bertanya kepada saya. Kadang kami bahkan mengerjakan hal yang sama secara paralel. Memang dari awal Unix seharusnya adalah sistem multi-pengguna
Trik yang sering saya pakai adalah menambahkan remote tambahan seperti ini di repo git miliknya:
paul ssh://paul@localhost/~/src/example (fetch)paul ssh://paul@localhost/~/src/example (push)Ini memudahkan kolaborasi atas hal-hal yang belum siap dibagikan
Pengaturan ini terasa cukup nyaman. Hanya saja saya khawatir soal bug eskalasi hak akses di Linux. Saya tidak percaya AI benar-benar paham bahwa eksploitasi kerentanan tidak diperbolehkan. Ini mengingatkan saya pada pekerjaan pertama saya, ketika sedang terburu-buru saya pernah salah memakai fitur
:!di vim untuk memperluas izin sudo yang secara resmi dibatasi lewat pengeditanhttpd.conf. Sekarang, meski ada pembaruan keamanan otomatis, saya jadi lebih sering memperbarui paket secara manual. Saya rasa Opus tidak akan repot-repot mencari celah keamanan, tetapi Fable mungkin iya, dan belakangan memang banyak celah seperti itu. Model masa depan mungkin akan menemukan celah baru sendiri atau memasang keylogger untuk mempelajari kata sandi SSH keyUser terpisah ini, selain memakai mesin terpisah, adalah pengaturan paling paranoid yang pernah saya dengar. Jadi saya juga bertanya-tanya apakah saya terlalu banyak mengorbankan kecepatan dan kenyamanan. Meski begitu, dalam praktiknya ini tetap sangat nyaman, dan menurut saya ini cara yang efisien sekaligus bertanggung jawab. Kalau ada yang melihat celah, saya ingin mendengarnya
Fable terasa seperti “Opus yang berjalan di atas harness yang membuatnya tidak bisa berhenti sampai yakin masalahnya sudah diperbaiki”. Jika Anda menginginkan model yang lebih baik di benchmark, ini arah yang masuk akal
Model ini sangat bagus, tetapi premiumnya besar. Bukan cuma tokennya sendiri lebih mahal, modelnya juga ingin menghabiskan semua token itu. Misalnya pada pekerjaan React Native, Fable tidak akan bilang, “Oke, sudah selesai.” Ia akan membangun ulang seluruh aplikasi dari awal, menjalankan seluruh rangkaian tes, dan memantau semua log serta peringatan
Untuk pertama kalinya sejak memakai LLM, saya merasa upgrade model tidak sepadan walaupun perusahaan mengizinkannya. Soalnya build dan tes terlalu menguras mesin dan baterai saya sampai saya tidak bisa mengerjakan hal lain
Saat ini rasanya lebih baik memakai ultracode pada Opus. Pencemaran konteks utama lebih sedikit, dan investigasinya juga lebih terparalelkan
Fable pernah mencoba memverifikasi perubahan UI pada game saya. Saat itu saya sedang bekerja di jendela lain, lalu melihat program terbuka di taskbar. Fable membuka game dari CLI dengan alat movie maker, merekam outputnya, lalu menangkap frame terakhir untuk memverifikasi UI. Karena layar sambutan game menutupi bagian yang ingin dilihat, ia membuat worktree sementara, menghapus layar sambutan, lalu menjalankan movie maker lagi
Saat melihat proses itu, saya berpikir dia seharusnya cukup meminta saya mengirim screenshot agar hemat token. Meski begitu, saya tetap tidak bisa tidak terkesan. Opus tidak akan pernah melakukan itu
Tulisan seperti ini terasa seolah datang dari semesta paralel. Dari pengalaman anekdotal saya, dan benchmark buatan saya sendiri yang meski tetap subjektif (https://pshirshov.github.io/llm-bench-pi-oneshot/), Fable tidak seimpresif itu
Di level gpt-5.5 dan opus 4.8, kadang lebih baik dan kadang lebih buruk, jelas lebih mahal, dan untuk pertanyaan React kadang malah menolak dengan alasan chemistry tidak bisa membantu
Saya tidak tahu apakah kegaduhan ini benar-benar beralasan, atau cuma hype AGI sebelum IPO
Saya membiarkan Fable mengoordinasikan implementasi yang kompleks. Saya memberinya tiket tingkat atas di Linear dan berkata, “lihat sub-issue dari tiket ini, tentukan mana yang bisa kamu implementasikan sendiri, urutan pengerjaannya, dan bagaimana berkoordinasi dengan apa yang sedang dikerjakan anggota tim lain.” Tiket-tiket ini bukan hal remeh; banyak bagian bergerak dan dependensi, dan terhubung ke dalam maupun luar proyek yang sama, misalnya juga ke backend
Lalu Fable memilih tiket dan mendelegasikan tiap tiket ke sub-agent, yang juga Fable. Sub-agent melihat desain Figma untuk tiket tersebut, mengikuti guideline dan konvensi repository dengan sangat ketat, mengimplementasikannya dengan sempurna, mengambil screenshot tiap bagiannya, menulis commit message dan deskripsi PR yang detail, lalu melampirkan screenshot sebagai bukti. Di akhir, ia memberi ringkasan seperti, “PR #1283 harus di-merge lebih dulu. Sebagai catatan, layar ini dan itu tidak punya desain Figma, jadi saya melihat layar serupa yang sudah diimplementasikan dan menerapkan polanya”
Ini mungkin baru sekitar 20% dari apa yang bisa dilakukan Fable. Model ini benar-benar kuat
Opus 4.8 juga bisa melakukan banyak dari ini, tetapi perlu jauh lebih banyak dituntun, dan ketika menemui titik buntu, besar kemungkinan ia berhenti dengan berkata, “saya bisa sampai di sini, tapi tidak bisa melanjutkan lebih jauh”
Fable memang sedikit lebih pintar, tetapi justru karena itu secara keseluruhan terasa seperti alat yang lebih buruk
Patch 50 baris yang mestinya selesai dengan satu prompt terus berubah menjadi eksplorasi 30 menit, dan sering kali sama sekali tidak sepadan. Bahkan sering salah juga
Saya mengujinya dengan tugas yang cukup sederhana. Saat fungsi hash berubah, kami perlu melakukan backfill pada cache deduplikasi Redis. Cukup jalankan fungsi hash baru pada semua nilai DB dan perluas cache, tetapi Fable malah mengimplementasikan pembaruan cache yang terlalu rumit dengan mencoba menebak versi fungsi hash dari tiap nilai cache dan hanya menghitung ulang hash lama. Dalam konteks tertentu itu mungkin masuk akal, tetapi hasil dari membakar token selama 30 menit adalah kode yang saya ganti dengan for loop 10 baris
Ini terasa seperti kabar buruk untuk pemrograman secara umum. Jelas sekali teknologi LLM menabrak tembok diminishing returns dalam hal kecerdasan, dan kalau responsnya cuma membuatnya lebih gigih, itu solusi yang buruk untuk semua pihak yang terlibat. Kecuali para penjual token dan orang-orang yang mampu membayar token untuk memindai 0-day, tentu saja
Pertama, tidak ada model kausal. Yang bisa dilakukan hanya pencarian coba-coba, dan itu bekerja cukup baik untuk banyak masalah, tetapi banyak masalah lain memang membutuhkan model kausal
Kedua, prompt tidak presisi. Bahasa pemrograman dan model mesin justru diciptakan untuk menyelesaikan masalah ini. Bahasa Inggris itu hebat, tetapi bukan bahasa pemrograman
Menjelang IPO mereka banyak melakukan adopsi strategis dan manipulasi, dan dalam hal itu memang berhasil
tsc, ia malah menulis skrip lain untuk menjalankantscdi tiap sub-agent dan menggabungkan hasilnyaBenar-benar bikin marah. Pekerjaan yang mestinya selesai dalam 1~2 menit jadi makan sekitar 10 menit karena menempuh jalur itu
Nanti saya akan coba tugas yang jauh lebih kompleks, tetapi untuk hal sederhana rasanya seperti mengendarai Corvette ke kotak surat
Saya merasa keengganan saya untuk tidak memakai LLM berbasis terminal di mesin lokal saya terus terbukti benar
Bahkan tanpa perilaku jahat, ada terlalu banyak hal yang bisa membuat saya kehilangan banyak pekerjaan atau merusak mesin dan kemampuan kerja saya sendiri
Untuk perusahaan bernilai 1 triliun dolar, bukankah seharusnya itu cukup mudah disediakan? Dibanding keseluruhan harness, rasanya seperti hal sepele
Keamanan jelas isu yang lebih besar, tetapi sepanjang membaca ini yang saya pikirkan cuma berapa banyak token yang dibakar untuk memperbaiki 2 baris CSS
Yang perlu diperkirakan adalah berapa lama waktu yang dibutuhkan manusia
Sekarang orang-orang hanya jadi bisa tampak produktif sambil tetap malas, dan itu tetap kemalasan
Kini ada orang yang butuh akses ke hardware bernilai ratusan ribu dolar hanya untuk menulis satu email. Saya tidak mau seperti itu. Saya tidak ingin membakar otak saya hanya agar bergantung pada mesin berpikir milik para miliarder
Saya juga tidak akan membakar otak saya untuk “mesin yang berpikir menggantikan saya” di lokal. Saya ingin menjadi orang yang lebih berharga daripada hardware yang bisa saya akses
Pengalaman pribadi saya saat Fable 5 bertindak dengan caranya sendiri sangat positif
Ia mencoba mencari akar penyebab crash modul Python yang tidak meninggalkan error di log atau konsol. Fable menulis test harness yang mensimulasikan klik UI, lalu melakukan pencarian biner pada kode saya untuk menemukan titik awal crash. Setelah membesar-besarkan penyebab crash menjadi sebuah hipotesis, ia menjalankan serangkaian perintah bash satu baris untuk membuat virtual environment bagi setiap versi modul Python tersebut di bawah
/tmp, lalu menemukan versi yang tidak mengalami crashIa menelusuri akar masalah jauh lebih dalam dibanding jika saya melakukannya sendiri, dan penyebabnya adalah regresi modul yang memicu overflow alokasi heap. Ia memberikan informasi yang cukup dan contoh yang disederhanakan hingga layak untuk membuat bug report, dan juga menulis solusi sementara agar hal itu tidak terjadi di aplikasi saya
Saya tidak membiarkannya sepenuhnya lepas. Saya meninjau setiap perintah CLI yang hendak dijalankan, dan menambahkan balasan agar penggunaan token berlebihan bisa dicegah saat melanjutkan dengan “yes”
Menetapkan batasan dalam prompt atau markdown tampaknya membantu. Misalnya, jika diminta untuk tidak memakai otomatisasi browser web, saya melihat Fable mematuhi baik aturan maupun maksudnya. Ia juga tidak melakukan hack aneh
Hanya saja, tampaknya ia memperlakukan sebagian tugas debugging sederhana seolah lebih rumit daripada kenyataannya. Mungkin postingan asli adalah contoh yang bagus
git bisectdemi mencari penyebab modul Python crash tanpa meninggalkan error di log atau konsolSaya bisa memahami pembuatan test case dan loop
git bisect, tetapi saya tidak mengerti kenapa itu harus dijalankan lewat internet dan GPU, dan sebagainya. Rasanya itu pekerjaan yang bahkan bisa dijalankan di Celeron single-core