SSD Nodes Learn 🎉 VPS mulai $5.50/bln
Panduan Matt ConnorOleh Matt Connor · Diperbarui 2026-08-13

Telemetry Coding Agent: Data yang Dikirim

Kenali empat alur data coding agent: inferensi model tidak dapat dimatikan, sedangkan analitik, crash report, dan integrasi dapat diaudit serta dikendalikan.

Cakupan telemetry coding agent yang sebenarnya

Telemetry coding agent terdiri dari empat alur pertukaran data yang menggunakan istilah yang sama, dan setiap alur memiliki kontrolnya sendiri. Inferensi model membawa prompt dan kode Anda ke pihak yang menyediakan model, dan tidak ada pengaturan yang dapat menonaktifkan hal tersebut. Analitik produk dan laporan crash dikirim ke vendor, dan sering kali juga ke perusahaan logging yang dibayar oleh vendor. Retensi untuk pelatihan merupakan persoalan kontrak, bukan persoalan jaringan. Alur keempat sering terlewat: setiap integrasi yang Anda tambahkan dapat membuka koneksi ke host yang tidak pernah Anda pilih.

Daftar default vendor saat ini adalah bagian dari topik ini yang paling cepat usang. Sebuah rilis dapat mengubah default, dan fitur baru dapat menambahkan tujuan yang tidak tercakup oleh switch yang sudah ada. Jadi, keterampilan yang dapat diterapkan secara berkelanjutan adalah melakukan audit yang dapat Anda ulangi pada agent apa pun: baca dokumentasi vendor, periksa konfigurasi yang benar-benar diterapkan pada mesin ini, monitor proses dari mesin itu sendiri, lalu pilih kontrol yang bersedia Anda biayai. Setiap perintah di bawah ini dijalankan pada mesin Anda sendiri untuk memeriksa trafik Anda sendiri.

Empat kategori tersebut dan alasan masing-masing memerlukan kontrol yang berbeda

Trafik inferensi model tidak dapat dihindari. Agent mengirim prompt Anda, file yang dibacanya, output perintah yang dijalankannya, dan teks yang dihasilkannya sendiri ke endpoint model. Itulah cara produk tersebut bekerja. Satu-satunya keputusan yang sebenarnya adalah siapa yang menerimanya: API yang dijalankan pihak lain atau model yang Anda jalankan sendiri. Akun cloud perusahaan (Bedrock, Vertex, Foundry) hanya memindahkan pihak penerima; aliran tersebut tidak dihilangkan. Tidak ada bagian lain dalam artikel ini yang mengurangi trafik inferensi, jadi bedakan aliran ini dari tiga aliran lainnya.

Analitik produk dan pelaporan crash adalah aliran yang berbeda ke host yang berbeda. Penghitung penggunaan, angka latensi, pencarian feature flag, dan stack trace biasanya dikirim ke hostname yang tidak berkaitan dengan API model, dan sering kali ke pelacak error pihak ketiga. Vendor biasanya mendokumentasikan hal ini sebagai "metrics" dan "error reports", serta biasanya menyediakan satu variabel lingkungan untuk setiap kategori. Volumenya sangat kecil, sehingga jumlah byte tidak akan pernah menemukannya. Yang perlu Anda cari adalah hostname, bukan bandwidth.

Retensi dan pelatihan merupakan kebijakan, bukan paket. Apakah vendor menyimpan prompt Anda, berapa lama penyimpanannya, dan apakah prompt tersebut digunakan untuk melatih model mendatang, ditentukan dalam persyaratan yang terkait dengan paket Anda. Paket konsumen dan paket komersial biasanya berbeda, sedangkan pengaturan zero-retention biasanya memerlukan perjanjian terpisah. Anda tidak dapat memverifikasi hal ini dengan tcpdump, karena paketnya terlihat sama dalam kedua kondisi tersebut. Baca persyaratannya. Jika hal ini penting bagi perusahaan Anda, dapatkan konfirmasi tertulis.

Integrasi dapat menambahkan satu hop secara diam-diam. Server MCP (model context protocol), marketplace plugin, pemeriksaan auto-update, tool pencarian web, atau pemeriksaan keamanan yang me-resolve URL sebelum mengambilnya, masing-masing merupakan request ke host yang bukan endpoint model. Di sinilah kejutan sering terjadi, karena harness dapat merutekan pekerjaan yang Anda kira berjalan secara lokal melalui servicenya sendiri. Sebuah release juga dapat mulai melakukan hal tersebut tanpa mengubah satu baris pun dalam konfigurasi Anda. Perlakukan setiap tool yang Anda tambahkan sebagai destinasi baru sampai Anda mengamatinya langsung di jaringan.

Langkah 1: apa yang didokumentasikan vendor?

Buka referensi pengaturan dan halaman penggunaan data untuk agent Anda. Baca keduanya dengan daftar kata berikut: metrics, analytics, error reporting, crash, feedback, survey, update check, safety check, marketplace. Setiap kata tersebut biasanya merupakan switch terpisah. Catat nama variabel secara persis karena langkah 2 akan melakukan grep terhadap nama-nama tersebut.

Ada satu kata yang dapat menyesatkan Anda. Pada beberapa agent, istilah "telemetry" dalam dokumentasi berarti ekspor OpenTelemetry yang Anda konfigurasi untuk mengirim metrics ke collector yang Anda jalankan sendiri. Ini berlawanan dengan pengiriman data ke vendor. Claude Code adalah salah satunya: pengaturan CLAUDE_CODE_ENABLE_TELEMETRY=1 memulai ekspor ke endpoint yang Anda tentukan dalam OTEL_EXPORTER_OTLP_ENDPOINT. Pengaturan tersebut tidak terkait dengan analytics milik vendor, yang memiliki opt-out terpisah. Pastikan arah aliran data sebelum mengubah pengaturan apa pun.

Perkirakan adanya master switch, tetapi jangan berasumsi bahwa switch tersebut mencakup semuanya. Per Agustus 2026, CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC milik Claude Code menonaktifkan metrics, error reports, perintah feedback, dan session surveys secara bersamaan. Dokumentasi yang sama menyatakan bahwa pengaturan tersebut tidak mencakup pemeriksaan keamanan domain WebFetch. Pemeriksaan ini mengirimkan hostname yang akan Anda fetch ke API vendor dan memiliki pengaturan terpisah. Ini bukan masalah pada satu produk tertentu. Di mana pun, bentuk masalahnya sama: master switch hanya mencakup kategori yang sudah ada saat dokumentasi tersebut ditulis.

Opt-out juga dapat menonaktifkan fungsi tertentu. Dokumentasi yang sama menyebutkan bahwa menonaktifkan telemetry juga menonaktifkan evaluasi feature flag yang menjadi dependensi beberapa fitur. Jadi, switch yang diubah untuk privasi dapat menonaktifkan fitur yang Anda gunakan, tanpa pesan error yang mengaitkan kedua hal tersebut. Baca kalimat di sebelah flag, bukan hanya nama flag.

Langkah 2: konfigurasi mana yang sebenarnya diterapkan?

Pengaturan yang Anda tulis belum tentu merupakan pengaturan yang diterapkan. Agen menggabungkan konfigurasi dari beberapa file. Salah satunya berada di dalam repositori yang baru saja Anda kloning dari pihak lain. Mulailah dengan lingkungan shell Anda sendiri.

env | grep -Ei 'telemetry|otel|analytics|error_report|do_not_track|proxy'

Kemudian tampilkan setiap file pengaturan yang dibaca alat tersebut, sesuai urutan dalam dokumentasi. Untuk Claude Code, per Agustus 2026, file tersebut adalah file pengguna, dua file proyek, dan direktori kebijakan terkelola di Linux.

for f in ~/.claude/settings.json .claude/settings.json .claude/settings.local.json; do
  echo "== $f"; [ -f "$f" ] && cat "$f"
done
ls -l /etc/claude-code/ 2>/dev/null

File proyek yang disertakan bersama git clone adalah konfigurasi yang ditulis pihak lain. File tersebut dapat mengaktifkan kembali pengaturan yang dinonaktifkan dalam file pengguna Anda. Jika agen memiliki perintah status yang mencantumkan sumber yang dimuat, itulah pemeriksaan paling cepat untuk mendapatkan kondisi sebenarnya. Claude Code menampilkan sumber pengaturan yang dimuat dalam /status.

Pemeriksaan paling kuat membaca proses yang sedang berjalan, bukan file apa pun. Berikan agen tersebut akun pengguna Linux khusus terlebih dahulu. Dengan begitu, setiap perintah dalam postingan ini menjadi lebih singkat. Kemudian baca lingkungan saat proses dimulai.

pgrep -u agent -a node
sudo tr '\0' '\n' < /proc/$(pgrep -u agent -n node)/environ | grep -Ei 'telemetry|proxy|otel'

/proc/<pid>/environ menampilkan variabel yang dimiliki proses saat exec. Dengan demikian, perintah ini dapat mendeteksi kondisi ketika ekspor .bashrc Anda tidak pernah diteruskan ke service yang dimulai oleh systemd. Jika variabel yang Anda tetapkan tidak ada di sini, variabel tersebut tidak pernah diterapkan, terlepas dari isi dotfiles Anda.

Langkah 3: host mana yang dihubungi?

Mulai dengan socket yang terbuka, lalu filter berdasarkan akun yang digunakan agent.

sudo ss -tnpe state established

-e menambahkan field uid: ke setiap baris. Dengan demikian, Anda dapat membedakan koneksi agent dari koneksi browser tanpa membaca nama proses. Catat alamat remote, lalu cari nama di balik alamat tersebut. Sumber nama yang paling akurat adalah handshake TLS (transport layer security), karena setiap koneksi baru dimulai dengan ClientHello yang membawa field SNI (server name indication), yaitu hostname yang diminta client.

sudo apt install -y tshark
sudo tshark -i any -f 'tcp port 443' -Y 'tls.handshake.type == 1' \
  -T fields -e ip.dst -e tls.handshake.extensions_server_name

Anda mendapatkan satu baris untuk setiap koneksi baru. Inilah inventaris yang Anda perlukan: API model, server pembaruan, host analytics, pelacak error, dan apa pun yang ditambahkan oleh suatu integrasi. Kolom nama yang kosong berarti client tersebut menggunakan ECH (encrypted client hello). Dengan demikian, hostname tidak terlihat di jaringan, sehingga Anda harus menggunakan alamat IP tujuan, reverse lookup, atau proxy pada langkah 4.

Tampilan DNS (domain name system) berguna sebagai pemeriksaan silang, karena menampilkan nama yang dicari agent, termasuk untuk koneksi yang tidak berhasil diselesaikan.

sudo tcpdump -ni any -l 'udp port 53'

Setiap baris query diakhiri dengan tipe record dan nama, dalam format A? host.example.net. (39). Lakukan capture pada any, bukan pada interface eksternal, karena dengan systemd-resolved aplikasi berkomunikasi dengan listener stub lokal pada 127.0.0.53 dan hanya stub yang berkomunikasi ke luar. Jika tidak ada trafik DNS sama sekali saat agent jelas sedang bekerja, runtime tersebut melakukan DNS melalui HTTPS secara mandiri. Dalam kasus ini, hanya langkah 4 yang dapat memberikan nama.

Lakukan capture saat agent menjalankan pekerjaan nyata. Mulai sebuah sesi, minta agent membaca file, minta agent menjalankan command, dan buat agent mengalami kegagalan. Trafik yang hanya muncul sekali saat startup atau hanya saat exception terjadi tidak akan terlihat dalam capture saat idle. Capture saat idle adalah cara paling umum audit menghasilkan jawaban yang salah tetapi tampak meyakinkan.

Langkah 4: apa yang ada di dalam request?

Hostname menunjukkan tujuan koneksi. Untuk melihat isinya, tempatkan proxy yang Anda kendalikan di depan agent dan percayakan certificate authority (CA) proxy tersebut hanya untuk runtime itu. mitmproxy adalah alat yang umum digunakan. Proyek tersebut merekomendasikan binary mandiri dari mitmproxy.org dan mendokumentasikan uv tool install mitmproxy sebagai metode melalui package Python.

mitmdump -w /tmp/agent-flows.mitm

Pada proses pertama, CA ditulis ke ~/.mitmproxy/. mitmproxy-ca-cert.pem adalah sertifikatnya secara terpisah. Pada shell yang akan digunakan untuk menjalankan agent, arahkan client ke proxy dan sertifikat tersebut.

export HTTP_PROXY=http://127.0.0.1:8080
export HTTPS_PROXY=http://127.0.0.1:8080
export NODE_EXTRA_CA_CERTS="$HOME/.mitmproxy/mitmproxy-ca-cert.pem"
export REQUESTS_CA_BUNDLE="$HOME/.mitmproxy/mitmproxy-ca-cert.pem"
export SSL_CERT_FILE="$HOME/.mitmproxy/mitmproxy-ca-cert.pem"

Banyak CLI agent adalah program Node. Node membaca NODE_EXTRA_CA_CERTS saat proses dimulai. Karena itu, lakukan export sebelum menjalankan agent, bukan setelahnya di terminal lain. Client Python membaca REQUESTS_CA_BUNDLE atau SSL_CERT_FILE. Binary Go yang menggunakan standard library membaca SSL_CERT_FILE di Linux. Pastikan path tersebut berfungsi dengan curl sebelum menyalahkan agent.

curl -sS -o /dev/null -w '%{http_code}\n' https://example.com

Proxy yang berfungsi menampilkan 200, dan request muncul dalam output mitmdump. CA yang tidak dipercaya menghasilkan curl: (60) SSL certificate problem: self-signed certificate in certificate chain. Pada agent Node, kondisi yang setara menghasilkan error dengan kode SELF_SIGNED_CERT_IN_CHAIN. Setelah itu, baca flow yang tersimpan menggunakan console viewer. Anda dapat membuka satu request untuk membaca header dan body-nya.

mitmproxy -r /tmp/agent-flows.mitm

Ada empat hasil yang perlu dibedakan. Anda melihat request. Dalam hal ini, baca request tersebut dan tentukan tindakan berikutnya. Agent menolak start dengan certificate error. Ini adalah masalah trust pada runtime tersebut, bukan temuan tentang vendor. Anda hanya melihat model API. Ini berarti kategori lain tidak aktif atau dipicu oleh event yang belum Anda jalankan. Atau, Anda tidak melihat apa pun meskipun agent jelas berfungsi. Ini berarti client mengabaikan proxy environment variable atau melakukan certificate pinning. Dalam kondisi itu, tidak ada pengaturan aplikasi yang dapat dipercaya untuk menunjukkan keadaan sebenarnya. Hasil terakhir ini paling penting. Anda harus kembali ke langkah 3 karena packet capture tetap dapat melihat koneksi tersebut.

Kontrol, dari yang paling lemah hingga yang paling kuat

Pengaturan opt-out. Biayanya paling rendah dan kekuatannya paling lemah karena pengaturan ini bergantung pada vendor yang menghormatinya serta hanya mencakup kategori yang sudah ada. Tetapkan pengaturan ini di lokasi yang tetap berlaku setelah reboot dan saat membuka terminal baru, yaitu pada file pengaturan pengguna atau profil shell Anda. Tambahkan DO_NOT_TRACK=1 selagi berada di sana. Banyak alat command line, termasuk beberapa agent, menghormati konvensi ini dan penerapannya tidak memerlukan biaya. Jalankan kembali langkah 3 setelah update berikutnya karena pada saat itulah cakupan perlindungannya berubah.

Pembatasan egress. Pada tahap ini, Anda berhenti meminta dan mulai menerapkan aturan. Jalankan agent sebagai user tersendiri, lalu izinkan user tersebut mengakses loopback dan DNS, serta blokir akses lainnya. Aturan ini menggunakan tabelnya sendiri sehingga tidak mengubah aturan firewall yang sudah ada.

table inet agentegress {
  chain output {
    type filter hook output priority filter; policy accept;
    meta skuid "agent" ip daddr 127.0.0.0/8 accept
    meta skuid "agent" udp dport 53 accept
    meta skuid "agent" counter log prefix "agent-egress-drop " drop
  }
}

Terapkan dengan sudo nft -f /etc/nftables.d/agent.nft, pantau penghitungnya dengan sudo nft list table inet agentegress, dan baca paket yang diblokir dengan sudo journalctl -k -g agent-egress-drop. Penghitung paket terblokir yang terus naik bersama hostname yang tidak Anda kenali menunjukkan bahwa kontrol ini berfungsi. Ada dua batasan yang perlu diperhatikan. meta skuid mencocokkan user yang memiliki socket, sehingga aturan ini hanya berlaku selama account tersebut tidak dapat beralih menjadi user lain. Akses sudo tanpa password untuk agent akan mengubah aturan ini menjadi sekadar saran. Selain itu, membiarkan UDP 53 terbuka ke server mana pun menyediakan saluran untuk mengeluarkan data melalui nama query. Tutup akses tersebut jika model ancaman Anda mengharuskannya, dengan mengarahkan resolver agent ke host yang Anda kelola. Allowlist hostname sebaiknya diterapkan pada proxy, bukan pada nftables, karena endpoint API berada di balik content delivery network yang alamat IP-nya dapat berubah sewaktu-waktu. Biaya kontrol ini adalah gangguan layanan dan pemeliharaan. Instalasi paket, git melalui SSH, dan pemeriksaan update milik agent akan gagal sampai Anda mengizinkannya. Daftar pengecualian tersebut menjadi tanggung jawab Anda untuk dipelihara. Jika Anda menyiapkannya pada server, bukan laptop, susunan account dan firewall yang sama menjadi dasar menjalankan Claude Code dengan aman pada VPS.

Mesin sekali pakai. Berikan agent sebuah virtual machine (VM) yang tidak menyimpan kredensial penting dan dihancurkan setelah tugas selesai. Cara ini tidak mengurangi data yang dikirim agent. Cara ini mengurangi data yang dapat diakses agent untuk dikirim, yang biasanya merupakan risiko utama. Gabungkan dengan aturan egress di atas karena VM baru dengan akses Internet tanpa pembatasan tetap dapat menjangkau setiap host yang ada dalam capture Anda. Metode ini dan state yang harus Anda buat ulang setiap kali dibahas dalam menjalankan coding agent dalam VM sekali pakai, sedangkan pertanyaan tentang sizing dibahas dalam menjalankan coding agent pada VPS.

Self-hosting model. Ini satu-satunya kontrol yang menghapus aliran inferensi karena prompt tidak pernah meninggalkan hardware Anda. Biayanya nyata. Anda tidak dapat melakukan self-hosting terhadap model tertutup. Artinya, Anda harus memilih open weights, menerima kesenjangan kemampuan pada tugas yang sulit, dan menyediakan hardware untuk menjalankannya. Trade-off ini dibahas dalam apakah Anda dapat melakukan self-hosting Claude, sedangkan perbedaan kemampuan antara agent utama dibahas dalam perbedaan Claude Code, Cursor, Codex, dan Copilot.

Tidak satu pun dari keempat kontrol ini mengubah data yang boleh dibaca agent dari disk, dan trafik inferensi membawa apa pun yang dibacanya. Jika file .env berada di working directory, file tersebut dikirim ke model saat agent melakukan grep terhadap nama variabel. Menjauhkan materi tersebut dari jangkauan agent adalah tugas terpisah, yang dibahas dalam menjauhkan secret dari context AI agent.

Hal yang perlu diperiksa setelah setiap pembaruan

  1. Bandingkan halaman pengaturan dan penggunaan data dari vendor dengan catatan Anda sebelumnya. Cari opsi baru dan nama service baru.
  2. Baca ulang environment proses dari /proc/<pid>/environ untuk memastikan pilihan opt-out Anda masih diterapkan pada proses yang berjalan.
  3. Cetak ulang file pengaturan proyek, karena git pull dapat membawa file konfigurasi yang telah diubah oleh rekan kerja.
  4. Jalankan perekaman SNI selama satu sesi penuh pekerjaan nyata, lalu bandingkan daftar hostname dengan daftar sebelumnya.
  5. Periksa penghitung paket yang ditolak firewall, karena tujuan baru biasanya muncul di sana sebelum Anda menyadarinya di tempat lain.

Proses ini memerlukan waktu sekitar sepuluh menit. Ini adalah satu-satunya bagian proses yang tidak menjadi usang. Default yang Anda verifikasi pada Agustus 2026 merupakan fakta tentang Agustus 2026. Hasil perekaman merupakan fakta tentang hari ini.

FAQ

Dapatkah saya mencegah coding agent mengirim kode saya ke model?

Tidak, dan pengaturan apa pun yang mengklaim dapat melakukannya sebenarnya menjelaskan hal lain. Mengirim prompt Anda, file yang dibaca agent, dan output perintah yang dijalankannya ke endpoint model adalah cara kerja inferensi. Jadi, satu-satunya variabel adalah pihak yang menerimanya. Anda dapat mengubah penerima dengan mengarahkan agent ke akun cloud perusahaan atau ke model yang Anda host sendiri. Anda juga dapat mengurangi data yang dikirim dengan membatasi data yang boleh dibaca agent. Menonaktifkan analitik dan pelaporan error sama sekali tidak memengaruhi alur ini.

Bagaimana cara melihat host yang terhubung dengan coding agent saya?

Jalankan agent sebagai pengguna Linux tersendiri, lalu tangkap TLS ClientHello dari setiap koneksi baru saat Anda menggunakannya: sudo tshark -i any -f 'tcp port 443' -Y 'tls.handshake.type == 1' -T fields -e ip.dst -e tls.handshake.extensions_server_name. Satu baris muncul untuk setiap koneksi, beserta alamat tujuan dan hostname yang diminta. Cocokkan nama tersebut dengan sudo tcpdump -ni any 'udp port 53', dengan melakukan capture pada any karena resolver stub lokal pada 127.0.0.53 menangani kueri terlebih dahulu. Lakukan capture saat agent menjalankan pekerjaan nyata. Ping saat startup dan laporan crash tidak akan muncul dalam capture saat agent menganggur.

Proxy saya tidak menampilkan trafik saat agent bekerja. Apa yang terjadi?

Client mengabaikan HTTP_PROXY dan HTTPS_PROXY, atau client melakukan pinning sertifikat lalu menolak CA Anda. Uji jalurnya terlebih dahulu dengan curl. Jika curl dapat mencapai Internet melalui proxy, tetapi agent tidak muncul dalam daftar aliran, berarti agent tidak menggunakan variabel lingkungan proxy. Beberapa runtime memerlukan CA dengan cara tertentu. Node khususnya hanya membaca NODE_EXTRA_CA_CERTS saat proses dimulai, sehingga mengekspornya setelah agent dijalankan tidak akan berpengaruh. Jika proxy tidak dapat melihat trafik, gunakan packet capture sebagai langkah berikutnya. Tidak ada pengaturan aplikasi yang dapat melewatinya.

Apakah menonaktifkan telemetri menghentikan penggunaan kode saya untuk pelatihan?

Tidak. Analitik dan pelaporan crash merupakan alur yang berbeda dari inferensi. Menonaktifkannya hanya menghapus penghitung penggunaan dan stack trace, sementara setiap prompt tetap dikirim ke model seperti sebelumnya. Ketentuan paket Anda menentukan apakah prompt tersebut disimpan dan apakah prompt tersebut digunakan untuk melatih model pada masa mendatang. Paket konsumen dan paket komersial biasanya memiliki ketentuan yang berbeda. Hal ini merupakan persoalan kontrak, bukan paket jaringan yang dapat ditangkap. Periksa halaman penggunaan data untuk paket Anda. Jika diperlukan, buat perjanjian komersial atau zero-retention sebelum sesi pertama.

#telemetry#privacy#coding-agents#secrets#auditing