Claude Code di VS Code: Ekstensinya, Bukan CLI-nya

Tidak. Ekstensinya membundel salinan privat CLI untuk panel chat-nya sendiri, tetapi mengetik claude di terminal membutuhkan instalasi standalone yang terpisah. Jalankan itu sekali dan setiap perintah CLI berfungsi di terminal mana pun, termasuk claude mcp add dan claude --resume, yang akan Anda butuhkan untuk celah khusus CLI pada panel.
Ada dua tool yang terlihat olehnya. getDiagnostics bersifat read-only dan mengembalikan error serta peringatan dari panel Problems. executeCode menjalankan Python di kernel notebook Jupyter yang aktif dan bukan read-only. Server-nya menampung sekitar selusin tool; sisanya panggilan internal yang disaring sebelum daftar tool-nya sampai ke Claude.
Tidak. Pada setiap panggilan, kodenya disisipkan sebagai sel baru di akhir notebook yang aktif, VS Code menggulirkannya ke tampilan, dan sebuah Quick Pick bawaan menanyakan Execute atau Cancel. Konfirmasi itu terpisah dari PreToolUse hook: entri allowlist membiarkan Claude mengusulkan menjalankan sel, dan Quick Pick-lah yang membiarkannya benar-benar berjalan.
Ada empat hal. CLI punya semua command dan skill sementara ekstensinya hanya sebagian, konfigurasi MCP server penuh sementara ekstensinya hanya bisa mengelola server yang sudah ada, shortcut shell dengan tanda seru, dan tab completion. Karena keduanya berbagi riwayat percakapan, Anda bisa melanjutkan percakapan panel di terminal ketika membutuhkan salah satunya.
Klik indikator seleksi di footer kotak prompt untuk mengubahnya — ikon mata tercoret berarti seleksinya disembunyikan dari Claude. Untuk file yang seharusnya tidak pernah dibagikan lewat jalur ini, tambahkan Read deny rule untuk path-nya, yang memblokir baik teks terseleksi maupun pemberitahuan file terbuka.

Ringkasan Utama
Ekstensi Claude Code untuk VS Code adalah klien grafis dengan salinan CLI-nya sendiri. Memasangnya tidak menaruh perintah claude di PATH shell Anda — itu butuh instalasi standalone terpisah. Ekstensi dan CLI berbagi riwayat percakapan, jadi sesi yang dimulai di salah satunya bisa dilanjutkan di yang lain.
Saya memasang ekstensinya, memakainya dengan senang selama sepekan, lalu membuka terminal bawaan untuk menjalankan satu perintah khusus CLI dan mendapat command not found. Ekstensinya memang menjalankan Claude Code sepanjang waktu itu, dari salinan privat yang disimpannya untuk panelnya sendiri. Berbagi binary itu dengan shell saya tidak pernah menjadi bagian dari kesepakatan, dan tidak ada yang memberi tahu sebaliknya.
Hal kecil itu menjelaskan hal yang lebih besar: ekstensinya adalah klien, bukan pembungkus. Ia punya fitur yang tidak dimiliki terminal, tidak punya fitur yang dimiliki terminal, dan berbagi riwayat percakapan sehingga Anda bisa berpindah di antara keduanya. Tulisan ini membahas apa yang benar-benar dikerjakannya lebih baik, cara memasukkan sesuatu ke dalam prompt, MCP server lokalnya beserta satu tool non-read-only yang diekspos, selisih fiturnya, dan catatan keamanan soal file konfigurasi yang mengeksekusi dirinya sendiri.
Ekstensinya membundel salinan privat CLI untuk panel chat-nya. Mengetik perintahnya di terminal butuh instalasi standalone, dan menjalankan instalasi itu sekali membuat setiap perintah di situs dokumentasinya berfungsi di terminal mana pun — termasuk yang akan Anda butuhkan untuk konfigurasi MCP, yang di panel hanya tersedia sebagian.
Keduanya berbagi riwayat percakapan, dan bagian itulah yang layak dimanfaatkan. Percakapan yang dimulai di panel bisa dilanjutkan di terminal dengan melakukan resume, yang membuka picker untuk mencari lalu memilihnya. Itu membuat selisih fiturnya jauh kurang menyakitkan daripada kedengarannya: ketika Anda menabrak sesuatu yang tidak bisa dilakukan panel, Anda memindahkan satu percakapan itu alih-alih memulai dari awal.
Dengan izin auto-edit menyala, Claude Code bisa mengubah file konfigurasi VS Code yang mungkin dieksekusi VS Code secara otomatis. Mitigasinya spesifik alih-alih umum: aktifkan Restricted Mode untuk workspace yang tak tepercaya, pilih Manual mode ketimbang auto maupun edit-otomatis, dan tinjau perubahan sebelum menerimanya. Perhatikan bahwa pada paket Pro, Max, dan Team, Auto adalah permission mode awal bawaan ekstensinya — jadi ini keadaan default, bukan sesuatu yang Anda pilih.
Empat hal di sini jauh lebih baik daripada di terminal, dan salah satunya mengubah cara saya memakai plan mode:
Perujukan adalah tempat lain klien grafis ini menang, karena ia bisa melihat apa yang sedang dilakukan editor Anda. Mention keluaran terminal adalah yang paling sering saya pakai dan yang paling mengejutkan orang karena ternyata ada.
# @-mentions fuzzy match, so partial names work.
Explain the logic in @auth # matches auth.js, AuthService.ts
What is in @src/components/ # trailing slash for a folder
# Terminal output, by the terminal's title — no copy-pasting
# a stack trace ever again.
Why did this fail? @terminal:dev-server
# Large PDFs: ask for pages rather than the whole file.
Read pages 1-10 of @spec.pdf
Read @spec.pdf from page 3 onward
# Option+K / Alt+K inserts a reference to the current file AND
# selection, as @app.ts#5-10.
#
# The footer shows how many lines are selected, and clicking the
# indicator TOGGLES whether Claude can see them — the eye-slash
# icon means the selection is hidden.
#
# Shift-drag files into the box to add them as attachments.Indikator seleksi di footer adalah sakelar, bukan sekadar penunjuk. Mengkliknya menentukan apakah Claude bisa melihat teks yang Anda sorot, dan ikon mata tercoret berarti seleksinya disembunyikan. Itu perbaikan untuk momen canggung ketika Anda menyorot sesuatu yang sensitif lalu ingin menanyakan hal lain tanpa menutup filenya dulu.
Seperti plugin JetBrains, ekstensinya menjalankan MCP server lokal yang disambungi CLI. Ia disembunyikan dari daftar MCP karena tidak ada yang perlu dikonfigurasi, dan itu berarti orang yang perlu tahu keberadaannya — siapa pun yang mengizinkan tool MCP lewat sebuah hook — paling kecil kemungkinannya menemukannya secara kebetulan.
# The extension runs a local MCP server named "ide". It hosts
# about a dozen tools; exactly TWO are visible to the model.
mcp__ide__getDiagnostics read-only. The errors and warnings in
the Problems panel, optionally scoped
to one file.
mcp__ide__executeCode NOT read-only. Runs Python in the
active Jupyter notebook's kernel.
# The rest are internal RPC the CLI uses to drive its own UI —
# opening diffs, reading selections, saving files — and are
# filtered out before the tool list reaches Claude.
# Transport: 127.0.0.1 on a random port in 10000-65535, not
# configurable. Unencrypted ws://. A fresh token per activation
# at ~/.claude/ide/<port>.lock with 0600 permissions inside a
# 0700 directory, presented as
# X-Claude-Code-Ide-AuthorizationInilah satu-satunya tool non-read-only yang bisa dilihat model di VS Code, dan cara ia dipagari layak dipelajari sebagai pola desain alih-alih sekadar fitur. Sistem permission bisa membiarkan Claude mengusulkan menjalankan kode; seorang manusia di dalam VS Code-lah yang membiarkannya benar-benar berjalan.
# The Jupyter tool cannot run anything silently. On every call:
#
# 1. the code is inserted as a new cell at the END of the
# active notebook
# 2. VS Code scrolls it into view
# 3. a native Quick Pick asks Execute or Cancel
#
# Cancel — or Esc — returns an error to Claude and nothing runs.
#
# It refuses outright when:
# - there is no active notebook
# - the Jupyter extension is not installed
# - the kernel is not Python
#
# The Quick Pick is SEPARATE from PreToolUse hooks. An allowlist
# entry for the tool lets Claude PROPOSE running a cell; the
# Quick Pick is what lets it actually run. Two independent gates,
# and the second one is a human every single time.Desain dua gerbang itu adalah jawaban untuk pertanyaan yang sering diajukan orang tentang perkakas agentic secara umum: bagaimana mengizinkan sebuah kemampuan tanpa mengizinkannya berjalan tanpa pengawasan. Allowlist memberi izin untuk mengusulkan, picker bawaan memberi izin untuk mengeksekusi, dan keduanya hidup di sistem berbeda sehingga tidak satu pun bisa dikonfigurasi untuk memberikan keduanya. Layak ditiru kalau Anda sedang membangun sesuatu yang serupa.
Selisihnya kecil tetapi spesifik, dan mengetahuinya menghemat waktu Anda mencari sesuatu yang memang tidak ada.
Di mana keduanya berbeda:
| Fitur | CLI | Ekstensi VS Code |
|---|---|---|
| Command dan skill | Semuanya | Sebagian — ketik garis miring untuk melihat yang tersedia |
| Konfigurasi MCP server | Penuh | Sebagian — tambah server lewat CLI, kelola yang ada di panel |
| Shortcut shell dengan tanda seru | Ada | Tidak ada |
| Tab completion | Ada | Tidak ada |
Checkpoint bekerja di ekstensinya dan lebih mudah ditemukan di sana daripada di terminal: arahkan kursor ke pesan mana pun dan Anda mendapat tiga opsi berbeda, dan itu model yang sungguh lebih baik daripada satu tombol rewind. Anda bisa mencabangkan percakapan dari titik itu sambil mempertahankan semua perubahan kode, memundurkan kodenya sambil mempertahankan seluruh percakapan, atau melakukan keduanya sekaligus. Itu tiga niat berbeda dan ketiganya pantas mendapat tiga tombol berbeda.
Ekstensinya juga mendaftarkan sebuah URI handler, dan itulah bagian plumbing yang kurang dihargai di sini. Membuka URL tersebut dari alias shell, bookmarklet, atau script apa pun memulai tab Claude Code baru — meluncurkan VS Code lebih dulu kalau belum berjalan, atau memakai jendela yang sedang fokus kalau sudah. Begitulah cara Anda menyambungkan Claude Code ke perkakas yang sama sekali tidak berhubungan dengan VS Code.
Pakai panelnya untuk pekerjaan yang menuntut melihat — meninjau rencana yang bisa Anda anotasi, memindai diff, menjaga empat percakapan di dalam tab — dan turun ke terminal untuk segelintir hal yang hanya bisa dilakukan di sana. Satu langkah setup yang layak dikerjakan di hari pertama adalah instalasi CLI standalone, karena tanpanya jalan keluar berupa terminal itu tidak ada ketika Anda membutuhkannya, dan error yang muncul sama sekali tidak menjelaskan sebabnya.
Sumber & bacaan lanjutan