
Satu capture layar seharusnya membantu agent menemukan tombol, kolom input, dan posisi elemen. Pada computer_use Hermes Agent, payload capture justru bisa membengkak karena label accessibility memuat isi percakapan lengkap. Data itu kemudian ikut dikirim sebagai hasil tool ke konteks model.
Kasus yang dicatat upstream terjadi saat Hermes mengendalikan Discord di Chrome pada Windows 11 dengan layar 4K. Satu capture Set-of-Mark (SOM) mencapai 179.399 karakter. Payload terpotong sebelum model melihat message composer yang dicari, sementara teks chat privat sudah telanjur masuk ke konteks.
Perbaikannya sudah di-merge ke branch main lewat PR #85037 pada 13 Agustus 2026, commit 6c9d6d9. Namun release publik terbaru masih Hermes Agent 0.20.0 / v2026.8.3 dari 3 Agustus. Patch ini belum masuk tag resmi baru.
Artinya, temuan tersebut pasti relevan untuk build main sebelum commit perbaikan. Kita belum punya bukti dari sumber primer bahwa semua instalasi stable 0.20.0 membawa implementasi yang sama. Jangan menyimpulkan pengguna stable pasti terdampak hanya berdasarkan nomor versinya.
Apa yang sebenarnya ikut terkirim
Mode SOM menggabungkan screenshot dengan daftar elemen dari accessibility tree. Daftar ini berguna karena model dapat melihat role, label, bounds, dan aplikasi asal sebuah elemen tanpa menebak semuanya dari piksel.
Masalahnya, aplikasi berbasis web dan Electron dapat memakai isi dokumen sebagai accessible label. Pada Discord, UI Automation di Windows bisa mengekspos seluruh badan pesan sebagai label sebuah node.
Hermes sebelumnya sudah memotong label pada ringkasan yang dibaca manusia menjadi 60 karakter. Namun fungsi yang membentuk array JSON elements masih mengirim label penuh. Jadi tampilan ringkas terlihat wajar, sedangkan payload mentah di belakangnya dapat membawa ribuan karakter per elemen.
Reproducer PR menghitung skenario 100 elemen dengan label sekitar 3 KB. Ukurannya bisa mencapai 308 KB sebelum patch. Masalahnya lebih serius dari pemborosan token: isi percakapan yang tidak diperlukan untuk menemukan kontrol UI ikut masuk ke trust envelope model, provider inference, transcript, atau log yang menyimpan tool result.
Jalur auxiliary vision juga melewati batas elemen
Hermes memiliki parameter max_elements untuk membatasi jumlah elemen yang dimasukkan ke hasil capture. Batas ini penting pada UI padat seperti Discord, Slack, Obsidian, atau IDE yang dapat menghasilkan ratusan node accessibility.
PR #85037 menemukan jalur khusus ketika main model tidak mendukung vision dan capture diteruskan ke auxiliary vision. Jalur itu men-serialize seluruh cap.elements, bukan daftar visible_elements yang sudah dipotong.
Akibatnya, konfigurasi non-vision main model dapat diam-diam melewati cap yang berlaku pada cabang capture lain. Payload membesar tepat pada jalur yang seharusnya meringkas screenshot untuk model utama.
Patch sekarang meneruskan visible_elements dan jumlah elemen yang dipotong ke auxiliary vision. Respons juga menyertakan total_elements serta truncated_elements, sehingga model tahu bahwa daftar tersebut dibatasi tanpa harus menerima seluruh accessibility tree.
Bug kedua: screenshot dan koordinat klik bisa memakai skala berbeda
Reproducer yang sama menunjukkan screenshot berukuran 1455 x 791 piksel, tetapi bounds elemen mencapai x=3771 pada desktop 4K. Screenshot berada pada grid yang sudah diperkecil, sedangkan bounds accessibility memakai koordinat desktop native.
Tanpa keterangan tentang dua coordinate space tersebut, model dapat membaca posisi dari screenshot lalu mengirim coordinate= dalam skala yang salah. Pada kasus ini selisihnya sekitar 2,6 kali. Klik meleset bukan karena model gagal mengenali target, tetapi karena angka yang terlihat dan angka yang diharapkan driver tidak berada pada ruang yang sama.
Patch menambahkan catatan otomatis ketika bounds melampaui dimensi screenshot lebih dari 5%. Catatan itu menjelaskan bahwa klik koordinat mengharapkan native desktop space dan menyarankan titik klik diambil dari bounds elemen. Saat kedua skala cocok, catatan tidak ditambahkan.
Ini fix yang terlihat kecil, tetapi dampak operasionalnya jelas. Agent yang terus salah klik dapat membuka menu yang keliru, mengirim aksi ke percakapan lain, atau jatuh ke rangkaian retry yang tidak perlu.
Input browser kini mendapat jalur tanpa mengambil fokus
PR yang sama memperbaiki hint saat background text input ditolak pada Chrome atau Firefox. Sebelumnya driver hanya menyarankan eskalasi ke foreground. Pada desktop pengguna, itu dapat membuat jendela browser muncul ke depan saat agent mengetik teks lalu menekan Enter.
Hermes sebenarnya memiliki typed page route melalui keluarga cua_browser_*. Jalur ini dapat mengirim input ke page content tanpa mencuri fokus, asalkan binding ke PID dan window benar.
Patch tidak menghapus rekomendasi foreground. Ia menambahkan alternatif page untuk event text_input atau key_press pada window class browser yang dikenal. Foreground tetap dipakai untuk browser chrome, dialog native, atau kondisi saat typed binding tidak tersedia.
Apa yang diubah oleh patch
Perubahan utama pada tools/computer_use/tool.py adalah:
- label accessibility pada JSON
elementsdibatasi maksimal 120 karakter; - elemen yang labelnya dipotong mendapat flag
label_truncated: true; - auxiliary vision memakai daftar elemen yang sudah tunduk pada
max_elements; - payload melaporkan jumlah total dan jumlah elemen yang dipotong;
- capture memberi peringatan saat bounds dan screenshot memakai coordinate space berbeda;
- refusal background input pada browser mendapat hint untuk mencoba typed page route lebih dulu.
Upstream menambahkan 139 baris test regresi. Deskripsi PR melaporkan 11 targeted tests lolos untuk payload budget, coordinate-space note, dan escalation enrichment. Patch sudah merged, bukan lagi kandidat fix yang masih menunggu review.
Tetap ada batas penting: pemotongan label mengurangi data yang ikut terbawa, tetapi tidak menjadikan capture bebas data sensitif. Seratus label dengan masing-masing 120 karakter masih dapat memuat potongan nama, judul, atau isi pesan. Screenshot juga tetap bisa menampilkan percakapan yang sedang terbuka.
Siapa yang perlu memeriksa deployment
Prioritas audit tinggi bila Hermes Anda:
- mengikuti branch
mainatau memakai build development; - mengaktifkan
computer_usepada desktop kerja utama; - mengendalikan Discord, Slack, email, CRM, atau aplikasi dengan data client;
- memakai main model non-vision dengan auxiliary vision;
- berjalan pada Windows HiDPI, macOS Retina, atau display scaling lain;
- menyimpan transcript dan tool result untuk waktu lama;
- mengirim inference ke provider eksternal dengan kebijakan retensi yang belum diperiksa.
Cek commit build yang dipakai, bukan hanya output nama versi. Untuk build dari source, pastikan commit 6c9d6d9 atau perubahan setara sudah ada. Untuk pengguna tag stable, pilihan paling aman adalah menunggu patch release resmi atau menerapkan backport yang sudah diuji internal.
Mitigasi sebelum patch release resmi
1. Hindari capture pada layar yang memuat percakapan sensitif
Tutup DM, email, dashboard client, atau dokumen rahasia sebelum menyerahkan kontrol desktop. Gunakan workspace atau virtual desktop terpisah untuk otomasi.
2. Batasi area kerja computer_use
Jalankan aplikasi otomasi pada VM, sandbox desktop, atau user account khusus yang hanya berisi data yang diperlukan. Jangan jadikan laptop kerja utama sebagai satu-satunya boundary.
3. Kurangi retensi tool result
Periksa apakah transcript, debug log, tracing, memory, atau observability pipeline menyimpan hasil capture. Bila iya, atur retensi minimum dan batasi siapa yang dapat mengaksesnya.
4. Audit provider inference
Ketahui ke mana hasil tool dikirim, berapa lama data disimpan, dan apakah data dipakai untuk training. Pemotongan label bukan pengganti data-processing policy yang jelas.
5. Uji display scaling
Pada canary, bandingkan dimensi screenshot dengan bounds elemen. Pastikan build menampilkan coordinate-space note ketika skalanya berbeda dan klik memakai titik dari bounds native.
6. Verifikasi seluruh cabang capture
Jangan hanya mengetes main model yang mendukung vision. Uji juga main model non-vision dengan auxiliary vision, fallback saat vision tidak tersedia, serta nilai max_elements kecil agar pelanggaran cap mudah terlihat.
Checklist verifikasi patch
Setelah mengambil commit perbaikan atau release yang memuatnya, jalankan skenario terkontrol:
- Buat elemen dummy dengan label lebih dari 120 karakter.
- Pastikan label hasil capture terpotong dan memiliki
label_truncated: true. - Buat accessibility tree yang jumlahnya melebihi
max_elements. - Pastikan jalur auxiliary vision tidak mengembalikan seluruh tree.
- Pastikan
total_elementsdantruncated_elementssesuai. - Jalankan pada display scaling dan cek coordinate-space note muncul.
- Klik target berdasarkan bounds, lalu pastikan pointer tidak meleset.
- Uji input ke page content dan pastikan typed page route dicoba sebelum foreground bila tersedia.
- Periksa transcript serta log untuk memastikan badan chat lengkap tidak lagi muncul dari label accessibility.
Gunakan data dummy. Tidak ada manfaatnya membuktikan fix dengan membuka percakapan client sungguhan.
Keputusan operasional
PR #85037 layak diperlakukan sebagai privacy dan reliability hardening yang material untuk computer_use. Satu capture dapat gagal membantu model sekaligus membawa teks privat jauh lebih banyak daripada yang dibutuhkan. Pada display scaling, payload yang sama juga bisa mengarahkan klik ke posisi yang salah.
Rekomendasi Rama Digital: pengguna main perlu memastikan build sudah berada di commit 6c9d6d9 atau lebih baru. Pengguna stable sebaiknya tetap pin ke tag resmi, hindari backport sembarangan, dan menunggu release yang menyatakan patch ini sudah termasuk. Untuk workflow yang menyentuh chat, email, atau data client, isolasi desktop dan kebijakan retensi tetap wajib meskipun label sudah dipotong.


