Cara melihat apa yang dijalankan agen coding AI-mu di servermu

Agenmu sedang bekerja di server produksi dan terminalnya hanya bilang ia sedang memanggil sebuah alat. Perintah apa yang ia jalankan, dan apa jawaban mesinnya? Transkrip memberitahumu setelah semuanya terjadi. Begini cara kami membuatnya terlihat saat sedang berlangsung, apa yang kami coba lebih dulu, dan cara mendapatkan hal yang sama tanpa aplikasi kami.

Kamu bertanya ke agen DevOps kenapa API produksi lambat. Ia mulai bekerja. Di terminalnya kamu melihat satu baris yang bilang ia sedang memanggil sebuah alat, lalu satu lagi, lalu satu lagi. Enam panggilan kemudian, ia memberitahumu bahwa disk sudah penuh 97 % dan menawarkan untuk membersihkan folder log.

Apa yang sebenarnya ia jalankan di mesin itu? du yang mana, find yang mana, apakah ia sudah menghapus sesuatu? Jawabannya ada, tetapi ada di transkrip sesi, ditulis dalam JSON, dan kamu membacanya setelah semuanya terjadi. Di laptop, itu tidak masalah. Di server produksi, setelah semuanya terjadi sudah terlambat untuk bilang "tunggu, jangan folder itu".

Kami membuat AgentsRoom, aplikasi desktop yang menjalankan agen coding dan memberi mereka alat untuk menjangkau server, database, dan cluster-mu. Ini cerita tentang bagaimana kami membuat panggilan-panggilan itu terlihat saat sedang berlangsung, versi yang gagal, angka di balik versi yang berhasil, dan cara mendapatkan hal yang sama kalau kamu tidak memakai aplikasi kami.

Jawaban singkatnya

  • CLI menunjukkan bahwa sebuah alat sudah berjalan, bukan sesi di sisi seberang. Perintah lengkap dan output-nya masuk ke transkrip di disk-mu.
  • Untuk memantaunya secara langsung, sesuatu harus mencatat setiap panggilan saat panggilan itu dimulai, bukan saat sesi berakhir.
  • Satu jurnal per koneksi berhasil. Satu tab terminal per perintah tidak. Kami menghitung 166 perintah jarak jauh dalam satu sesi.
  • Simpan jurnal itu di mesinmu sendiri. Satu baris perintah di host produksi membawa rahasia dan data pelanggan.
  • Tanpa aplikasi kami: hook Claude Code yang menambahkan setiap perintah shell ke sebuah file sudah membawamu hampir sampai, dan transkrip melengkapi sisanya.

Kenapa transkrip tidak cukup di server

Claude Code, Codex, dan CLI lainnya memang mencatat semuanya. Claude Code menulis satu file JSONL per sesi di bawah ~/.claude/projects/, Codex di bawah ~/.codex/sessions/. Setiap panggilan alat ada di sana beserta input dan hasilnya.

Masalahnya bukan kelengkapan, melainkan waktu dan bentuk. Transkrip ditulis untuk CLI, agar ia bisa melanjutkan sesi. Kamu membacanya setelah agen berhenti, dengan menggali baris-baris JSON. Kalau tiga agen bekerja bersamaan, kamu membaca tiga file. Dan terminal agen, tempat yang sebenarnya sedang kamu lihat, hanya menampilkan ringkasan terlipat dari setiap panggilan.

Untuk kode di laptop, membaca belakangan adalah siklus review yang normal: kamu melihat diff sebelum commit. Server tidak punya diff. Sebuah systemctl restart atau DELETE langsung berlaku begitu dijalankan.

Yang kami coba lebih dulu, dan 166 perintah itu

Alat jarak jauh pertama kami untuk agen membuka koneksi di sebuah tab terminal. Kelihatannya benar: pengguna bisa melihat sesinya. Ternyata alat itu gagal dengan cara yang tidak kami duga.

Alat itu tidak memberi agen cara untuk membaca apa yang terjadi di tab yang baru saja ia buka. Jadi di proyek salah satu pengguna, agen berhenti memakainya. Hitungan di sesi itu: 16 panggilan ke alat koneksi kami, dan 166 perintah sshpass yang dijalankan lewat alat shell milik agen sendiri, dengan agen meminta kata sandi ke pengguna dan pengguna menempelkannya ke chat. Kredensial produksi akhirnya tersimpan sebagai teks biasa di transkrip, di ps aux selama setiap perintah berjalan, dan di sebuah file di bawah /tmp.

Pelajarannya bukan "agen itu ceroboh". Agen melakukan satu-satunya hal yang berhasil. Alat yang aman tetapi tidak membiarkan agen menyelesaikan tugasnya akan diakali, dan cara mengakalinya lebih buruk daripada tidak punya alat sama sekali.

Jadi kami menulis ssh_exec: agen mengirim satu perintah, AgentsRoom menjalankannya di koneksi yang tersimpan dengan kata sandi yang disimpan di aplikasi, lalu mengembalikan output dan kode keluarnya. Agen tidak pernah melihat kredensialnya dan tidak punya alasan untuk menyusun baris sshpass.

Itu menyelesaikan masalah keamanan dan memunculkan masalah visibilitas. Kalau setiap ssh_exec membuka tab, sesi itu akan menghasilkan 166 tab. Jadi ssh_exec tidak membuka tab sama sekali, dan selama dua bulan satu-satunya tempat untuk melihat perintah-perintah itu, lagi-lagi, adalah percakapan agen.

Satu jurnal per koneksi

Versi yang kami rilis pada 29 Oktober 2026 (AgentsRoom 1.242.0) memegang satu aturan: tidak ada tab per perintah. Sebagai gantinya, setiap panggilan masuk ke sebuah jurnal, satu per koneksi.

  • Tab "Aktivitas" di panel kanan, di samping "File", "Perubahan", dan "Tes", menampilkan koneksi yang disentuh agen sebagai kartu (perintah terakhir, agen, waktu, status) dan 40 panggilan terbaru di sebuah linimasa. Tab ini bisa memfilter per agen dan mencari di perintah, nama koneksi, dan output.
  • Jurnal sebuah koneksi terbaca seperti terminal: agen · waktu, lalu $ perintah, lalu output-nya, lalu Selesai · exit 0 · 1,2 dtk. Output SSH bergulir masuk secara langsung dan tampilannya mengikuti bagian bawah sampai kamu menggulir ke atas. Sebuah tombol menyalin seluruh jurnal sebagai teks.
  • Label kecil di header agen, satu untuk setiap server, database, atau cluster yang disentuh agen itu, dengan titik hijau selama ada panggilan. Satu klik membuka jurnal tersebut.
  • Lencana "Agen sedang bekerja" di baris koneksi pada jendela "Server", "Database", dan Kubernetes, hanya selama ada panggilan yang berjalan.

Jurnalnya hanya-baca. Untuk mengetik sendiri di mesin, tab SSH di jendela "Server" tetap jadi pintu masuknya. Halaman fitur lengkapnya adalah koneksi SSH untuk agen AI, dan sisi database-nya ada di koneksi database.

Apa yang dicatat, dan apa yang tidak

PanggilanDi jurnalAlasan
ssh_exec (SSH, AWS SSM, WinRM)YaKasus utamanya: satu perintah di mesin jarak jauh, tanpa tab sendiri
ssh_transferYaFile yang disalin ke atau dari server adalah tindakan pada server itu
db_query, db_schemaYaSQL persis seperti yang ditulis agen, dan baris-baris pertama hasilnya
kube_kubectlYaDitampilkan sebagai baris kubectl beserta argumennya
commands_run, ssh_connectTidakKeduanya sudah membuka tab terminal yang bisa kamu pantau
Alat shell milik agen sendiri (ssh, psql, kubectl yang diketik langsung)TidakTidak lewat AgentsRoom: ada di terminal dan transkrip agen

Baris terakhir adalah batas yang kami akui terus terang. Jurnal hanya melihat apa yang lewat alat kami. Kalau kamu ingin setiap tindakan jarak jauh muncul di sana, alat itu harus jadi jalan yang lebih mudah bagi agen, dan itulah pelajaran dari 166 perintah tadi.

Satu detail lagi: hanya SSH yang mengalirkan output selagi perintah berjalan, karena ia lewat terminal sungguhan di mesinmu. Hasil WinRM, SQL, dan kubectl muncul saat panggilan selesai.

Berapa ongkos menyimpan jurnal

Pengguna kami menjalankan banyak agen sekaligus: 45 agen di 18 proyek pada satu mesin, 48 konsol di mesin lain. Apa pun yang dihitung per agen atau per potongan output akan dikalikan dengan angka itu, jadi jurnal punya batas tegas:

  • 120 panggilan per proyek, yang terlama dibuang lebih dulu.
  • 32.000 karakter output per panggilan, dengan menyimpan bagian akhirnya, tempat error dan kode keluar berada.
  • 2.000 karakter perintah atau SQL per panggilan.
  • Satu pesan pembaruan per panggilan setiap 120 ms untuk output langsung, tidak pernah satu pesan per potongan output terminal.
  • Tanpa timer saat diam. Selama tidak ada agen yang memanggil alat jarak jauh, jurnal tidak memakan biaya apa pun.

Pencatatan terjadi di satu titik: jembatan yang dilewati semua panggilan alat dari setiap CLI. Karena itulah ia bekerja sama persis untuk Claude Code, Codex, Antigravity CLI, atau CLI lain mana pun yang dijalankan aplikasi, tanpa kode khusus per penyedia.

Batas yang kami pilih: tidak ada yang keluar dari mesin

Jurnal disimpan di memori aplikasi desktop dan hilang saat kamu keluar. Jurnal tidak disinkronkan ke server kami, dan itu tidak biasa bagi kami: hampir semua hal lain di AgentsRoom mengikuti akunmu di berbagai komputer.

Yang satu ini tidak, dan memang disengaja. Output env di server berisi rahasia. Sebuah SELECT di tabel pelanggan berisi data pelanggan. Alat yang dibuat untuk membuat hal-hal itu terlihat seharusnya tidak sekaligus menyalinnya ke tempat baru.

Ponsel bisa mengikuti jurnal yang sama dari profil agen (aplikasi mobile 2.47 ke atas). Alirannya berjalan dari komputermu ke ponselmu lewat tautan terenkripsi end-to-end, rahasia disamarkan sebelum keluar (API key, pasangan KEY=value, kata sandi di URL, token), dan tidak ada yang disimpan di server. Panggilan yang sama juga tetap bisa dibaca di percakapan agen, seperti sebelumnya.

Audit log Claude Code adalah hal yang berbeda

Kalau kamu mencari "Claude Code audit log", kemungkinan kamu menemukan Compliance API dari Anthropic untuk Claude Enterprise: umpan aktivitas, event audit log dan, untuk sesi lokal yang login ke akun Enterprise, transkrip sesinya. Itu dibuat untuk administrator dan tim compliance, mencakup seluruh organisasi, dan kamu membacanya setelah semuanya terjadi.

Itu menjawab "siapa di perusahaan melakukan apa dengan Claude". Itu tidak menjawab "perintah apa yang sedang dijalankan agenku di server database sekarang juga". Keduanya bisa berdampingan, dan kalau kamu bekerja di perusahaan dengan kewajiban compliance, kemungkinan kamu tetap butuh yang pertama, apa pun yang kamu pakai untuk yang kedua.

Kalau kamu tidak memakai AgentsRoom

Kamu bisa mendapatkan sebagian besar dari ini dengan apa yang sudah disediakan CLI.

Catat setiap perintah shell saat perintah itu dimulai. Hook Claude Code bisa menjalankan perintah sebelum setiap panggilan alat. Panduan hook menunjukkan polanya: hook PreToolUse pada alat Bash yang mengalirkan jq -r .tool_input.command ke file log. Jalankan tail -f pada file itu di terminal kedua dan kamu melihat setiap perintah begitu agen mengirimnya, termasuk baris ssh.

Baca transkrip saat kamu butuh output-nya. Hook memberimu perintahnya, bukan jawaban server. Untuk itu, file sesi di bawah ~/.claude/projects/ (atau ~/.codex/sessions/ untuk Codex) berisi hasil lengkap setiap panggilan.

Beri agen akunnya sendiri di server. User khusus membuat setiap koneksi bisa dilacak di log autentikasi server, dan kalau server-mu menjalankan auditd, sebuah aturan pada execve untuk user itu mencatat setiap proses yang ia jalankan, di sisi server, tempat agen tidak bisa melewatinya.

Jauhkan kredensial dari jangkauan agen. Kalau satu-satunya cara untuk terhubung adalah kata sandi yang harus diminta agen darimu, kamu akan melihat baris sshpass di chat. Pakai kunci yang tidak pernah dibaca agen, atau alat yang memegang rahasia itu untuknya. Kami menulis panduan terpisah tentang memberi agen sebuah rahasia tanpa menaruhnya di prompt.

Yang tidak diberikan pengaturan ini adalah hubungan antara ketiganya: agen yang mana, di koneksi yang mana, dengan output langsung yang mana, di satu tempat. Itulah bagian yang kami bangun.

Pertanyaan yang benar-benar ditanyakan orang

Bisakah aku melihat apa yang dikerjakan Claude Code di server jarak jauh selagi ia bekerja?

Di terminal kamu melihat panggilan alatnya dan, setelah selesai, hasil singkatnya. Perintah lengkap dan output-nya ditulis ke transkrip sesi di disk-mu, yang kamu baca belakangan. Untuk memantaunya saat berlangsung, kamu butuh sesuatu yang mencatat setiap panggilan saat panggilan itu dimulai: hook di Claude Code yang menulis setiap perintah Bash ke file log, atau aplikasi yang menjalankan panggilan jarak jauh untuk agen dan menampilkannya secara langsung, dan itulah yang dilakukan tab Aktivitas di AgentsRoom.

Di mana Claude Code menyimpan catatan perintah yang sudah ia jalankan?

Di transkrip sesi, sebuah file JSONL di bawah ~/.claude/projects/, satu folder per proyek dan satu file per sesi. Setiap panggilan alat adalah satu baris berisi input dan hasilnya. Codex menyimpan file serupa per sesi di bawah ~/.codex/sessions/. Keduanya lengkap, dan keduanya ditulis agar CLI bisa melanjutkan sesi, bukan agar manusia bisa membacanya sekilas.

Apakah ini sama dengan audit log Claude Code?

Bukan. Audit log yang dicari orang dengan nama itu adalah catatan tingkat organisasi yang ditawarkan Anthropic di paket Enterprise lewat Compliance API: umpan aktivitas, event audit dan, untuk sesi yang sudah login, transkrip, yang dibaca belakangan oleh administrator. Semua itu menjawab siapa melakukan apa di organisasi. Tampilan langsung perintah di satu server adalah alat lain, untuk orang lain.

Kenapa tidak membuka satu tab terminal untuk setiap perintah yang dijalankan agen?

Kami sudah mencoba jalan itu dan mengukurnya: agen yang menangani masalah produksi menembakkan 166 perintah jarak jauh dalam satu sesi. Satu tab per perintah membuat bilah tab tak berguna setelah sepuluh menit. Yang berhasil adalah satu jurnal per koneksi, di mana setiap panggilan adalah satu entri dengan perintahnya, output langsungnya, kode keluarnya, dan durasinya.

Apakah AgentsRoom mengirim perintah dan output-nya ke sebuah server?

Tidak. Jurnal itu hidup di memori aplikasi desktop, dibatasi 120 panggilan per proyek, dan hilang saat kamu keluar dari aplikasi. Ponsel bisa mengikutinya dari profil agen (aplikasi mobile 2.47 ke atas): alirannya berjalan dari komputermu ke ponselmu lewat tautan terenkripsi end-to-end, dengan rahasia disamarkan, dan tidak ada yang disimpan di server.

Perintah agen mana yang tidak ditampilkan tab Aktivitas?

Hanya panggilan yang lewat alat AgentsRoom yang dicatat: ssh_exec, ssh_transfer, db_query, db_schema, dan kube_kubectl. Perintah yang dijalankan agen dengan alat shell miliknya sendiri, misalnya baris ssh atau psql mentah, ada di terminal dan transkripnya tetapi tidak ada di jurnal. commands_run dan ssh_connect sengaja dikecualikan, karena keduanya sudah membuka tab terminal yang bisa kamu pantau.

Versi singkatnya

Agen di server butuh dua hal darimu: cara bekerja yang tidak melibatkan kata sandimu, dan cara bagimu untuk melihat apa yang ia lakukan selagi ia melakukannya. Yang pertama tanpa yang kedua membuatmu membaca JSON setelah semuanya terjadi. Yang kedua tanpa yang pertama akan diakali oleh agen yang menempelkan baris sshpass.

Akhirnya kami punya satu jurnal per koneksi, dengan batas tegas, disimpan di mesinmu. Kalau ingin mencobanya, AgentsRoom gratis diunduh, dan halaman koneksi SSH menunjukkan pengaturannya langkah demi langkah. Kalau kamu lebih suka bertahan dengan CLI saja, mulailah dengan hook PreToolUse dan tail -f: butuh lima menit, dan kamu tidak akan pernah lagi bertanya-tanya apa saja enam panggilan alat terakhir tadi.

Unduh AgentsRoom

Jalankan semua agen AI Anda, di semua proyek Anda, dari satu jendela.

GratisUnduh AgentsRoom

Aplikasi pendamping: pantau agen Anda saat bepergian

Gunakan Claude, Codex, Antigravity CLI, atau penyedia AI lainnya.

Dapatkan ekstensi
Chrome Web Store

Kirim bug dan permintaan langsung ke backlog publik Anda.

Beberapa proyek
Multi-penyedia
Beberapa agen
Status langsung
File diff & commit
Pendamping mobile
Pratinjau langsung
Tim agen
Otomatisasi browser
Dev berbasis backlog
Pustaka prompt
Pustaka skill
Lihat semua fitur

Lanjutkan membaca