Perluas Claude dengan skills
Buat, kelola, dan bagikan skills untuk memperluas kemampuan Claude di Claude Code. Mencakup perintah kustom dan skills bundel.
Skills memperluas apa yang dapat dilakukan Claude. Buat file SKILL.md dengan instruksi, dan Claude menambahkannya ke toolkit-nya. Claude menggunakan skills ketika relevan, atau Anda dapat menginvokasinya secara langsung dengan /skill-name.
Buat skill ketika Anda terus menempel instruksi yang sama, checklist, atau prosedur multi-langkah ke dalam chat, atau ketika bagian dari CLAUDE.md telah berkembang menjadi prosedur daripada fakta. Tidak seperti konten CLAUDE.md, body skill hanya dimuat ketika digunakan, sehingga materi referensi yang panjang hampir tidak ada biayanya sampai Anda membutuhkannya.
Untuk perintah bawaan seperti /help dan /compact, dan skills bundel seperti /debug dan /code-review, lihat referensi perintah.
Perintah kustom telah digabungkan ke dalam skills. File di .claude/commands/deploy.md dan skill di .claude/skills/deploy/SKILL.md keduanya membuat /deploy dan bekerja dengan cara yang sama. File .claude/commands/ yang ada tetap berfungsi. Skills menambahkan fitur opsional: direktori untuk file pendukung, frontmatter untuk mengontrol apakah Anda atau Claude menginvokasinya, dan kemampuan bagi Claude untuk memuatnya secara otomatis ketika relevan.
Claude Code skills mengikuti standar terbuka Agent Skills, yang bekerja di berbagai alat AI. Claude Code memperluas standar dengan fitur tambahan seperti kontrol invokasi, eksekusi subagent, dan injeksi konteks dinamis. Lihat Menggunakan frontmatter skill di luar Claude Code untuk mengetahui bidang frontmatter mana yang merupakan bagian dari standar dan mana yang merupakan ekstensi Claude Code.
Bundled skills
Claude Code mencakup serangkaian bundled skills, seperti /doctor, /code-review, /batch, /debug, /loop, dan /claude-api. Bundled skills berbasis prompt: mereka memberikan Claude instruksi terperinci dan membiarkannya mengorkestrasi pekerjaan menggunakan toolsnya. Sebagian besar perintah bawaan malah mengeksekusi logika tetap secara langsung.
Anda menjalankan bundled skill dengan cara yang sama seperti skill lainnya, dengan mengetik / diikuti nama skill. Claude menjalankan beberapa bundled skills secara otomatis ketika relevan; yang lain, termasuk /verify, hanya berjalan ketika Anda menjalankannya, yang membuat Anda tetap mengendalikan kapan pemeriksaan yang berjalan lebih lama ini menghabiskan waktu dan token.
Sebagian besar bundled skills tersedia di setiap sesi. Beberapa bergantung pada fitur tertentu: /workflow-authoring, misalnya, hanya tersedia ketika dynamic workflows diaktifkan.
Untuk mematikan bundled skills, gunakan pengaturan disableBundledSkills, yang menonaktifkan setiap bundled skill kecuali /doctor.
Pemeriksaan setup /doctor tetap dapat diketik ketika disableBundledSkills aktif, di Claude Code v2.1.205 dan yang lebih baru. Untuk menyembunyikannya, atur variabel lingkungan DISABLE_DOCTOR_COMMAND atau entri skillOverrides dari "doctor": "off". Sebelum v2.1.205, /doctor adalah perintah bawaan daripada bundled skill.
Bundled skills terdaftar bersama perintah bawaan dalam referensi perintah, ditandai Skill di kolom Purpose.
Jalankan dan verifikasi aplikasi Anda
Tiga bundled skills bekerja bersama untuk meluncurkan aplikasi Anda dan mengonfirmasi perubahan terhadap aplikasi yang berjalan daripada hanya tes:
| Skill | Purpose |
|---|---|
/run |
Luncurkan dan jalankan aplikasi Anda untuk melihat perubahan bekerja |
/verify |
Bangun dan jalankan aplikasi Anda untuk mengonfirmasi perubahan kode melakukan apa yang seharusnya, tanpa kembali ke tes atau pemeriksaan tipe |
/run-skill-generator |
Ajarkan /run dan /verify cara membangun dan meluncurkan proyek Anda |
/run dan /verify bekerja tanpa setup. Mereka menyimpulkan peluncuran dari jenis proyek Anda (CLI, server, TUI, browser-driven) dan dari apa yang ada di README, package.json, atau Makefile Anda. Inferensi itu menjadi tidak dapat diandalkan untuk proyek yang membutuhkan apa pun di luar peluncuran standar: database, file env, sesi grafis, build multi-langkah.
/run-skill-generator merekam resep sebagai gantinya. Ini membuat aplikasi Anda berjalan dari lingkungan yang bersih, menangkap apa yang berhasil (perintah install, variabel env, skrip peluncuran), dan melakukannya sebagai skill per-proyek di .claude/skills/run-<name>/. Setelah itu, /run, /verify, dan agen lainnya di repo mengikuti resep yang direkam daripada menemukannya kembali. Jalankan /run-skill-generator sekali per proyek, dan lagi jika proses build atau peluncuran berubah.
/verify juga dapat merekam resepnya sendiri. Ketika harus membangun dan menjalankan aplikasi Anda tanpa resep yang direkam, itu menulis apa yang berhasil ke .claude/skills/verify/SKILL.md di akar repo, atau di direktori paket yang disentuh dalam monorepo, sehingga run dan agen lain kemudian mengikuti langkah yang sama. Di akar repo, skill yang direkam menggantikan /verify bundled. Ini memerlukan Claude Code v2.1.200 atau yang lebih baru.
Claude mengedit file yang direkam hanya ketika itu mengarahkan run dengan salah, seperti perintah yang gagal atau langkah yang hilang, sehingga Anda dapat melakukan commit file tanpa per-session diffs. Sebelum v2.1.205, bundled skill memberi tahu Claude untuk melipat apa pun yang dipelajari run, yang menyebabkan konflik merge yang sering.
Memulai
Buat skill pertama Anda
Contoh ini membuat skill yang merangkum perubahan yang belum di-commit dalam repositori git Anda dan menandai apa pun yang berisiko. Ini menarik diff langsung ke dalam prompt sebelum Claude membacanya, sehingga respons didasarkan pada pohon kerja aktual Anda daripada apa yang dapat Claude tebak dari file terbuka. Claude memuat skill secara otomatis ketika Anda bertanya tentang perubahan Anda, atau Anda dapat memanggilnya langsung dengan /summarize-changes.
Buat direktori skill
Buat direktori untuk skill di folder skills pribadi Anda. Skills pribadi tersedia di semua proyek Anda.
mkdir -p ~/.claude/skills/summarize-changes
Tulis SKILL.md
Setiap skill memerlukan file SKILL.md dengan dua bagian: frontmatter YAML antara penanda --- yang memberi tahu Claude kapan menggunakan skill, dan konten markdown dengan instruksi yang diikuti Claude ketika skill berjalan. Nama direktori menjadi perintah yang Anda ketik, dan description membantu Claude memutuskan kapan memuat skill secara otomatis.
Simpan ini ke ~/.claude/skills/summarize-changes/SKILL.md:
---
description: Summarizes uncommitted changes and flags anything risky. Use when the user asks what changed, wants a commit message, or asks to review their diff.
---
## Current changes
!`git diff HEAD`
## Instructions
Summarize the changes above in two or three bullet points, then list any risks you notice such as missing error handling, hardcoded values, or tests that need updating. If the diff is empty, say there are no uncommitted changes.
Baris !`git diff HEAD` menggunakan dynamic context injection: Claude Code menjalankan perintah dan mengganti baris dengan outputnya sebelum Claude melihat konten skill, sehingga instruksi tiba dengan diff saat ini sudah inline.
Uji skill
Buka proyek git, buat edit kecil ke file apa pun, dan mulai Claude Code dengan menjalankan claude. Anda dapat menguji skill dengan dua cara.
Biarkan Claude memanggilnya secara otomatis dengan menanyakan sesuatu yang cocok dengan deskripsi:
What did I change?
Atau panggilnya langsung dengan nama skill:
/summarize-changes
Bagaimanapun, Claude harus merespons dengan ringkasan singkat edit Anda dan daftar risiko.
Pilih tempat skills dimuat
Tempat Anda menyimpan skill menentukan sesi mana yang memuatnya. Simpan di bawah direktori home Anda untuk mendapatkannya di setiap proyek, komitkan ke repositori untuk membagikannya dengan semua orang yang bekerja di sana, atau distribusikan melalui plugin atau pengaturan terkelola untuk menjangkau seluruh tim.
| Lokasi | Path | Dimuat di |
|---|---|---|
| Enterprise | .claude/skills/<skill-name>/SKILL.md di direktori pengaturan terkelola |
Semua pengguna di mesin tempat organisasi Anda menerapkannya |
| Personal | ~/.claude/skills/<skill-name>/SKILL.md |
Semua proyek Anda di mesin ini, tetapi bukan sesi Cowork atau cloud |
| Project | .claude/skills/<skill-name>/SKILL.md |
Sesi di repositori ini. Komitkan sehingga tim Anda juga mendapatkannya |
| Nested | <subdir>/.claude/skills/<skill-name>/SKILL.md |
Sesi dimulai di atau di bawah <subdir>. Sesi yang dimulai di atasnya memuat skill sekali Claude bekerja pada file di sana. Lihat monorepos dan subdirektori |
| Additional directory | .claude/skills/<skill-name>/SKILL.md di direktori yang Anda lewatkan dengan --add-dir |
Sesi itu. Lihat direktori di luar proyek |
| Plugin | <plugin>/skills/<skill-name>/SKILL.md |
Di mana pun plugin diaktifkan, sebagai /plugin-name:skill-name |
| claude.ai account | Skills yang Anda aktifkan di pengaturan claude.ai Anda | Sesi Cowork dan cloud. Lihat Skills yang disinkronkan dari claude.ai untuk sesi lokal |
Folder skill juga mengikuti aturan ini:
- Folder yang di-symlink: entri
<skill-name>di lokasi enterprise, personal, atau project dapat berupa symlink ke direktori lain di disk. Claude Code membacaSKILL.mddari target dan memuat skill sekali bahkan jika beberapa lokasi menunjuk ke target yang sama. Plugin skills menangani symlinks secara berbeda. - Nama yang dicadangkan: jangan beri nama folder skill
synced, dalam kapitalisasi apa pun. Claude Code menggunakan~/.claude/skills/synced/untuk skills yang diunduh dari claude.ai dan melewati skill yang Anda buat dengan nama itu di lokasi enterprise, personal, dan project. - File perintah: file Markdown di
.claude/commands/adalah format yang lebih lama dan masih berfungsi. Ini mendukung frontmatter yang sama kecualinamedanpaths, dan Anda memanggilnya dengan nama file. Lebih suka skill untuk pekerjaan baru, karena skills juga mendukung file pendukung. - Folder skill sebagai plugin: tambahkan
.claude-plugin/plugin.jsonke folder skill dan itu dimuat sebagai plugin bernama<name>@skills-dir, sehingga dapat menggabungkan agents, hooks, dan MCP servers. Di.claude/skills/proyek, ini memerlukan penerimaan dialog kepercayaan workspace terlebih dahulu.
Muat skills di monorepos dan subdirektori
Claude Code memuat project skills dari .claude/skills/ di direktori tempat Anda memulainya dan di setiap direktori induk hingga akar repositori, jadi memulai di packages/frontend/ masih mengambil skills yang ditentukan di root. Ketika Anda memindahkan sesi dengan /cd di v2.1.246 atau lebih baru, Claude Code menambahkan project skills direktori baru.
Skills di direktori .claude/skills/ di bawah tempat Anda memulai tidak dimuat saat startup. Mereka dimuat pertama kali Claude membaca atau mengedit file di subdirektori itu dan tetap tersedia untuk sisa sesi. Sampai saat itu mereka tidak muncul di menu / dan Anda tidak dapat memanggilnya dengan nama. Untuk memuatnya lebih cepat, jalankan /add-dir dengan path subdirektori, yang memerlukan Claude Code v2.1.257 atau lebih baru.
Ketika nested skill berbagi nama dengan skill lain, keduanya tetap tersedia. Dengan skill deploy di root repositori dan skill lain di apps/web/.claude/skills/:
/deploymenjalankan skill root. Claude Code juga mencantumkan varian yang memenuhi direktori untuk Claude, dengan instruksi untuk memanggil yang direktorinya menyimpan file yang sedang dikerjakan, sehingga nested skill masih berlaku untuk pekerjaan diapps/web/./apps/web:deploymenjalankan nested skill sendiri. Deskripsinya menamai direktori yang berlaku.
Muat skills dari direktori di luar proyek
Ketika Anda menambahkan direktori dengan --add-dir atau /add-dir, Claude Code memuat skills di .claude/skills/ direktori itu, bersama dengan .claude/commands/ dan .claude/agents/ nya. Direktori yang Agent SDK tambahkan melalui additionalDirectories di TypeScript atau add_dirs di Python memuat dengan cara yang sama, karena SDK meneruskannya sebagai --add-dir. Pengaturan permissions.additionalDirectories di settings.json memberikan akses file saja dan tidak memuat salah satu dari ini.
Claude Code mengawasi .claude/skills/ di direktori yang Anda lewatkan dengan --add-dir saat peluncuran, seperti yang dijelaskan Edit a skill during a session. Itu tidak mengawasi .claude/commands/ atau .claude/agents/ direktori yang ditambahkan, jadi restart sesi setelah mengubah file di sana.
Beban ini bergantung pada sumber pengaturan project setting source, yang aktif secara default. Kebijakan strictPluginOnlyCustomization, bare mode, dan --safe-mode masing-masing membatasinya lebih lanjut, seperti yang dijelaskan halaman-halaman itu. Lihat Additional directories grant file access, not configuration untuk tabel lengkap apa yang dimuat direktori yang ditambahkan, termasuk CLAUDE.md dan pengaturan plugin.
Selesaikan skills yang berbagi nama
Ketika dua skills berbagi nama, tempat asal masing-masing menentukan yang mana /name jalankan. Tabel mencakup lokasi enterprise, personal, project, nested, plugin, dan claude.ai, skills bundel, dan file perintah:
| Nama yang sama di | Yang mana yang berjalan |
|---|---|
| Dua dari enterprise, personal, dan project | Enterprise di atas personal, dan personal di atas project. Dengan deploy di ~/.claude/skills/ dan .claude/skills/ proyek, /deploy menjalankan yang personal |
| Salah satu dari lokasi itu dan bundled skill | Skill Anda menggantikan perintah bundel, tetapi bukan aliasnya. Skill code-review proyek menggantikan /code-review, dan alias bundel /review tidak pernah menjalankan skill Anda |
Skill dan file di .claude/commands/ |
Skill itu |
| Skill root-proyek dan nested skill | Keduanya dimuat. Lihat monorepos dan subdirektori |
| Plugin skill dan skill di salah satu lokasi di atas | Keduanya dimuat, karena plugin skills diberi namespace sebagai /plugin-name:skill-name |
| Salah satu dari di atas dan skill yang disinkronkan dari claude.ai | Skill atau perintah lain. Lihat When a synced skill name matches another command |
Gunakan skills di sesi Cowork dan cloud
Sesi Cowork dan sesi cloud, termasuk routines, tidak membaca ~/.claude/skills/ di mesin Anda. Sesi Cowork interaktif dan terjadwal memuat skills yang diaktifkan untuk akun claude.ai Anda, disinkronkan saat startup sesi; kelola dari Customize di sidebar Desktop app atau dari pengaturan skills di claude.ai. Sesi cloud juga memuat project skills yang dikomitkan ke .claude/skills/ repositori yang dikloning.
Jika skill hanya ada di ~/.claude/skills/ di mesin Anda, Claude Code melaporkan bahwa skill tidak ditemukan ketika routine memanggilnya, karena setiap routine run dimulai sebagai sesi remote yang segar. Untuk membuat skill personal tersedia di sesi ini:
- Untuk sesi Cowork dan cloud, aktifkan skill untuk akun claude.ai Anda.
- Untuk sesi cloud, Anda dapat sebagai gantinya mengkomitkan skill ke
.claude/skills/repositori, atau mengirimnya dalam plugin yang dideklarasikan di.claude/settings.jsonrepositori. Plugin yang dideklarasikan Repo install saat startup sesi; plugin yang hanya diaktifkan di pengaturan pengguna Anda tidak ditransfer.
Desktop scheduled tasks berjalan secara lokal di mesin Anda, jadi mereka memuat ~/.claude/skills/.
Skills yang disinkronkan dari claude.ai
Bagian ini berlaku untuk Anda jika Anda mengaktifkan skills untuk akun claude.ai Anda. Di sesi Cowork dan cloud, Claude Code memuat skills itu tanpa setup apa pun di mesin Anda. Di sesi lain apa pun di mesin Anda, Claude Code memuat mereka hanya setelah Anda menyalakan sinkronisasi dengan CLAUDE_CODE_SYNC_SKILLS dalam run non-interaktif, seperti yang dijelaskan Where synced skills load.
Claude Code mengunduh synced skill dari akun Anda daripada membaca file yang Anda tulis di mesin tempat sesi berjalan, jadi itu menerapkan aturan ke synced skills yang tidak berlaku untuk skills yang Anda simpan di lokasi skills.
Tempat synced skills dimuat
Di sesi Cowork atau cloud, Claude Code memuat skills yang diaktifkan untuk akun claude.ai Anda, dan Skills in Cowork and cloud sessions mengatakan bagaimana memilih skills mana yang sesi itu dapatkan.
Di sesi lain apa pun di mesin Anda, Claude Code memuat mereka hanya setelah Anda mengunduhnya sekali dalam run non-interaktif:
Aktifkan skills untuk akun claude.ai Anda
Aktifkan setiap skill yang Anda inginkan untuk akun claude.ai Anda, seperti yang dijelaskan Skills in Cowork and cloud sessions. Claude Code mengunduh hanya skills yang Anda aktifkan, dan itu memerlukan sign-in claude.ai Anda untuk mengunduhnya.
Jalankan Claude Code dalam mode non-interaktif dengan sinkronisasi dihidupkan
Claude Code mengunduh synced skills hanya ketika Anda menjalankannya dalam mode non-interaktif dengan flag -p dan atur CLAUDE_CODE_SYNC_SKILLS ke 1. Prompt yang Anda lewatkan tidak mempengaruhi unduhan.
CLAUDE_CODE_SYNC_SKILLS=1 claude -p "List the skills you have available"
Claude Code mengunduh skills ke ~/.claude/skills/synced/, menjawab prompt, dan keluar seperti run non-interaktif lainnya. Skills yang diunduh tetap di disk setelah keluar, jadi Anda tidak perlu menjaga run tetap terbuka. Claude Code mengunduh skills hanya selama run dengan CLAUDE_CODE_SYNC_SKILLS diatur, jadi setelah Anda mengaktifkan atau mengubah skill di claude.ai, jalankan perintah lagi. Untuk mengubah berapa lama run menunggu sinkronisasi sebelum menjawab prompt, atur CLAUDE_CODE_SYNC_SKILLS_WAIT_TIMEOUT_MS.
Konfirmasi skills dimuat dalam sesi lokal
Mulai sesi interaktif, tanpa CLAUDE_CODE_SYNC_SKILLS diatur, dan jalankan /skills. Menu mencantumkan skills yang diunduh di bawah claude.ai sync. Setiap sesi lokal yang Anda mulai setelahnya dengan sign-in claude.ai yang sama memuat mereka dari ~/.claude/skills/synced/ juga.
Ketika nama synced skill cocok dengan perintah lain
Claude Code melewati synced skill yang namanya cocok dengan perintah lain apa pun, dan perintah lain itu berjalan. Perintah lain dapat berupa perintah built-in, bundled skill, skill di level lokal apa pun, plugin skill, file di .claude/commands/, atau MCP prompt. Claude Code juga mencadangkan nama perintah built-in dan bundled skills miliknya sendiri bahkan ketika mereka tidak tersedia di sesi Anda, misalnya setelah Anda mematikan bundled skills, jadi itu melewati synced skill dengan salah satu nama itu juga.
Claude Code memberi label synced skills sehingga Anda dapat mengetahui dari mana mereka berasal. Menu /skills dan /context mengelompokkan synced skills di bawah claude.ai sync, dan menu perintah / menandainya sebagai berasal dari claude.ai.
Ketika membandingkan nama, Claude Code mengabaikan kasus, spasi, dan karakter tak terlihat, dan memperlakukan bentuk kompatibilitas seperti huruf fullwidth dan varian dash sebagai setara biasa mereka, jadi synced Commit tidak dapat dimuat di samping commit lokal. Nama yang berbeda hanya dengan huruf look-alike dari alfabet lain dihitung sebagai nama yang berbeda, dan label claude.ai sync adalah cara Anda membedakan keduanya.
Bagaimana Claude Code menangani frontmatter dari synced skill
Claude Code menerapkan dua aturan ke frontmatter synced skill:
- Claude Code menghormati frontmatter di setiap jenis sesi, jadi grant
allowed-toolsmelalui permission flow normal. - Claude Code membersihkan teks tampilan yang disediakan skill, seperti deskripsinya. Itu menghapus karakter kontrol, dan dalam teks yang mencapai Claude, seperti deskripsi, itu juga menghindari kurung sudut sehingga teks tidak dapat meniru pemformatan internal Claude Code.
Bagaimana Claude Code menangani body dari synced skill
Apa yang Claude Code lakukan dengan body synced skill bergantung pada tempat sesi berjalan:
- Di sesi cloud, body mempertahankan perilaku yang dimiliki skill lokal, karena sesi berjalan dalam kontainer terisolasi.
- Di sesi Cowork di desktop Anda, body mempertahankan perilaku yang dimiliki skill lokal, kecuali Claude Code menggantikan setiap baris perintah
!dengan placeholderdisableSkillShellExecution, seperti yang dilakukannya untuk setiap skill yang Anda sediakan di sana. - Di sesi lain apa pun di mesin Anda, Claude Code tidak menjalankan perintah
!, tidak melampirkan file yang referensi@beri nama cara yang dilakukannya untuk skill lokal, dan tidak mengganti placeholder${CLAUDE_PROJECT_DIR}dan${CLAUDE_SESSION_ID}, jadi referensi@dan kedua placeholder mencapai Claude sebagai teks literal. Baris perintah!juga mencapai Claude sebagai teks literal, atau sebagai placeholder itu ketikadisableSkillShellExecutionaktif.
Edit skill selama sesi
Claude Code mengawasi direktori skill untuk perubahan file, kecuali dalam bare mode. Ketika Anda menambah, mengedit, atau menghapus skill di bawah ~/.claude/skills/, project .claude/skills/, atau .claude/skills/ di dalam direktori --add-dir, Claude Code mengambil perubahan dalam sesi saat ini, tanpa restart. Jika Anda membuat direktori skills tingkat atas yang tidak ada ketika sesi dimulai, restart Claude Code sehingga dapat mengawasi direktori baru.
Live change detection mencakup teks SKILL.md saja. Untuk folder skill yang juga merupakan plugin, perubahan ke hooks/, .mcp.json, agents/, dan output-styles/ memerlukan /reload-plugins untuk berlaku.
Hapus skill
Bagaimana Anda menghapus skill bergantung pada dari mana asalnya:
- Personal atau project skill: hapus direktori skill,
~/.claude/skills/<skill-name>/atau.claude/skills/<skill-name>/. Claude Code menjatuhkannya dari/skillsdalam sesi saat ini; konten yang sudah dimuat Claude Code darinya mengikuti skill content lifecycle. - Enterprise skill: administrator menghapus direktori skill dari
.claude/skills/di dalam direktori pengaturan terkelola, misalnya/etc/claude-code/.claude/skills/<skill-name>/di Linux. - Plugin skill: nonaktifkan atau uninstall plugin yang menyediakannya, dari menu
/pluginatau dengan/plugin uninstall <plugin-name>@<marketplace-name>. Claude Code membongkar skills plugin setelah Anda menjalankan/reload-pluginsatau restart; lihat Apply plugin changes without restarting. - Skill yang disinkronkan dari claude.ai: matikan skill untuk akun claude.ai Anda, di tempat yang sama Anda mengaktifkannya. Claude Code menghapusnya dari
~/.claude/skills/synced/lain kali itu menyinkronkan skills Anda. Jika Anda menghapus direktori dengan tangan sebagai gantinya, sinkronisasi berikutnya mengunduhnya lagi sementara skill tetap diaktifkan di claude.ai. - Bundled skill: atur
disableBundledSkillsketrueuntuk mematikan setiap bundled skill kecuali/doctor, atau atur satu skill ke"off"diskillOverridesuntuk menyembunyikannya.
Untuk menyimpan personal atau project skill tetapi menghentikan Claude dari memanggilnya sendiri, atur disable-model-invocation: true di frontmatter-nya, atau "user-invocable-only" di skillOverrides ketika Anda tidak ingin mengedit file.
Konfigurasi skills
Skills dikonfigurasi melalui frontmatter YAML di bagian atas SKILL.md dan konten markdown yang mengikutinya.
Jenis konten skill
File skill dapat berisi instruksi apa pun, tetapi memikirkan tentang cara Anda ingin menginvokasinya membantu memandu apa yang harus disertakan:
Konten referensi menambahkan pengetahuan yang Claude terapkan pada pekerjaan Anda saat ini. Konvensi, pola, panduan gaya, pengetahuan domain. Konten ini berjalan inline sehingga Claude dapat menggunakannya bersama konteks percakapan Anda.
---
name: api-conventions
description: API design patterns for this codebase
---
When writing API endpoints:
- Use RESTful naming conventions
- Return consistent error formats
- Include request validation
Konten tugas memberikan Claude instruksi langkah demi langkah untuk tindakan tertentu, seperti deployment, commit, atau pembuatan kode. Ini sering kali merupakan tindakan yang ingin Anda panggil langsung dengan /skill-name daripada membiarkan Claude memutuskan kapan menjalankannya. Tambahkan disable-model-invocation: true untuk mencegah Claude memicunya secara otomatis. Contoh di bawah menambahkan context: fork, yang menjalankan skill dalam konteks subagent-nya sendiri; lihat Jalankan skills dalam subagent.
---
name: deploy
description: Deploy the application to production
context: fork
disable-model-invocation: true
---
Deploy the application:
1. Run the test suite
2. Build the application
3. Push to the deployment target
Jaga isi tubuh tetap ringkas. Setelah skill dimuat, kontennya tetap dalam konteks di seluruh giliran, jadi setiap baris adalah biaya token berulang. Nyatakan apa yang harus dilakukan daripada menceritakan bagaimana atau mengapa, dan terapkan tes keringkasan yang sama yang akan Anda lakukan untuk konten CLAUDE.md.
Referensi frontmatter
Selain konten markdown, Anda dapat mengonfigurasi perilaku skill menggunakan bidang frontmatter YAML antara penanda --- di bagian atas file SKILL.md Anda:
---
name: my-skill
description: What this skill does
disable-model-invocation: true
allowed-tools: Read Grep
---
Your skill instructions here...
Semua bidang bersifat opsional. Hanya description yang direkomendasikan sehingga Claude tahu kapan harus menggunakan skill.
Claude Code membaca frontmatter hanya ketika pembukaan --- adalah baris pertama file. Jika tidak, itu memperlakukan seluruh file, penanda --- disertakan, sebagai konten skill.
Bidang Boolean menerima yes, no, on, off, 1, dan 0 dalam huruf apa pun, selain true dan false. Sebelum v2.1.218, Claude Code hanya mengenali true dan false.
| Field | Required | Description |
|---|---|---|
name |
No | Display name shown in skill listings. Defaults to the directory name. See How a skill gets its command name for how the field interacts with the name you type to invoke the skill. |
description |
Recommended | What the skill does and when to use it. Claude uses this to decide when to apply the skill. If omitted, uses the first paragraph of markdown content. Put the key use case first: the combined description and when_to_use text is truncated at 1,536 characters in the skill listing to reduce context usage. |
when_to_use |
No | Additional context for when Claude should invoke the skill, such as trigger phrases or example requests. Appended to description in the skill listing and counts toward the 1,536-character cap. |
argument-hint |
No | Hint shown during autocomplete to indicate expected arguments. Example: [issue-number] or [filename] [format]. |
arguments |
No | Named positional arguments for $name substitution in the skill content. Accepts a space-separated string or a YAML list. Names map to argument positions in order. |
disable-model-invocation |
No | Set to true to prevent Claude from automatically loading this skill. Use for workflows you want to trigger manually with /name. Also prevents the skill from being preloaded into subagents. As of v2.1.196, also prevents the skill from running when a scheduled task fires with the skill as its prompt. Default: false. |
user-invocable |
No | Set to false when only Claude should invoke the skill: Claude Code hides it from the / menu and doesn't run it when you type /name. Use for background knowledge users shouldn't invoke directly. Default: true. |
allowed-tools |
No | Tools Claude can use without asking permission during the turn that invokes this skill. The grant clears when you send your next message. Accepts a space- or comma-separated string, or a YAML list. See Pre-approve tools for a skill. |
disallowed-tools |
No | Tools removed from Claude's available pool while this skill is active. Use for autonomous skills that should never call certain tools, such as AskUserQuestion for a background loop. Accepts a space- or comma-separated string, or a YAML list. The restriction clears when you send your next message. Like deny rules, the field can't remove EndConversation while any other tool remains. |
model |
No | Model to use when this skill is active. The override applies for the rest of the current turn and is not saved to settings; the session model resumes on your next prompt. Accepts the same values as /model, or inherit to keep the active model. A value excluded by your organization's availableModels allowlist is not used and the session keeps its current model. With context: fork, the value sets the forked subagent's model instead, and an excluded value follows the same rules as a subagent model override. |
effort |
No | Effort level when this skill is active. Overrides the session effort level. Default: inherits from session. Options: low, medium, high, xhigh, max; available levels depend on the model. |
context |
No | Set to fork to run in a forked subagent context. See Run skills in a subagent. |
agent |
No | Which subagent type to use when context: fork is set. |
background |
No | Only applies with context: fork. Set to false to wait for the forked subagent's result in the turn that invoked the skill, instead of running it in the background. Default: true. Requires Claude Code v2.1.218 or later. |
hooks |
No | Hooks that Claude Code registers when the skill is invoked and keeps running for the rest of the session. See Hooks in skills and agents for the configuration format and the once option. |
paths |
No | Glob patterns that limit when this skill is activated. Accepts a comma-separated string or a YAML list. When set, Claude loads the skill automatically only when working with files matching the patterns. Uses the same format as path-specific rules. |
shell |
No | Shell to use for !`command` and ```! blocks in this skill. Accepts bash (default) or powershell. Setting powershell runs inline shell commands via PowerShell when the PowerShell tool is enabled: it's on by default on Windows without Git Bash, on by default with Git Bash for claude.ai and Console accounts, and needs CLAUDE_CODE_USE_POWERSHELL_TOOL=1 in Amazon Bedrock, Google Cloud's Agent Platform, and Microsoft Foundry sessions and on macOS, Linux, and WSL. Set it to 0 to turn the tool off. |
metadata |
No | Free-form YAML map for your own key-value data, such as entitlement or catalog fields, read by your own tooling from SKILL.md. Claude Code doesn't act on its contents, and drops a value that isn't a map. Don't reuse frontmatter field names such as paths as keys. |
license |
No | License covering the skill. Part of the Agent Skills spec; see Using skill frontmatter outside Claude Code. Claude Code accepts the field but doesn't act on it. |
compatibility |
No | Environment requirements for the skill, such as intended products or system prerequisites, as defined by the Agent Skills spec; see Using skill frontmatter outside Claude Code. Accepts a string of up to 500 characters. Claude Code accepts the field but doesn't act on it. |
Menggunakan skill frontmatter di luar Claude Code
Claude Code menerima setiap bidang dalam tabel di atas. Di luar Claude Code, Anda hanya dapat menggunakan bidang dalam spesifikasi Agent Skills:
| Distribution path | Frontmatter fields you can use |
|---|---|
| Claude Code skills at any level, including plugin skills | Every field in the table above |
claude.ai skill uploads, the Skills API, and packaging with package_skill.py from anthropics/skills |
name, description, license, compatibility, metadata, allowed-tools |
Ketika Anda mengaktifkan skill pribadi untuk sesi Cowork dan cloud, termasuk rutinitas, Anda mengunggahnya ke claude.ai, jadi aturan yang sama berlaku.
Jika Anda menyertakan bidang apa pun yang tidak diizinkan oleh spesifikasi, pengemasan atau unggahan gagal dengan kesalahan keras daripada mengabaikan bidang:
Unexpected key(s) in SKILL.md frontmatter: argument-hint. Allowed properties are: allowed-tools, compatibility, description, license, metadata, name
Membatasi frontmatter ke enam bidang spesifikasi menghindari kesalahan kunci yang tidak terduga di atas. Spesifikasi Agent Skills dan persyaratan Skills API mendefinisikan segalanya yang divalidasi oleh jalur tersebut. Fitur isi Claude Code-only, seperti injeksi konteks dinamis, tidak berfungsi dalam obrolan claude.ai atau melalui API. Claude Code menerima keenam bidang, jadi frontmatter yang mengikuti spesifikasi dimuat di Claude Code tanpa perubahan.
Bagaimana skill mendapatkan nama perintahnya
Perintah yang Anda ketik untuk menginvokasi skill berasal dari tempat file skill berada dan, untuk skill plugin, juga dari bidang frontmatter name. Dalam skill pribadi atau proyek, name hanya menetapkan label tampilan yang ditampilkan dalam daftar skill, dan perintah masih berasal dari nama direktori. Dalam skill plugin, name menetapkan segmen terakhir dari perintah dan awalan plugin tetap ada.
Tabel di bawah menunjukkan dari mana nama perintah berasal untuk setiap tata letak:
| Skill location | Command name source | Example |
|---|---|---|
Skill directory under ~/.claude/skills/ or .claude/skills/ |
Directory name | .claude/skills/deploy-staging/SKILL.md → /deploy-staging |
Nested .claude/skills/ directory, when the name clashes with another skill |
Subdirectory path relative to the working directory, then the skill directory name | apps/web/.claude/skills/deploy/SKILL.md → /apps/web:deploy |
File under .claude/commands/ |
File name without extension | .claude/commands/deploy.md → /deploy |
Plugin skills/ subdirectory |
Frontmatter name or the directory name, namespaced by plugin |
my-plugin/skills/review/SKILL.md → /my-plugin:review, or /my-plugin:fancy with name: fancy |
Plugin root SKILL.md |
Frontmatter name, with the plugin directory name as a fallback |
my-plugin/SKILL.md with name: review → /my-plugin:review. See Path behavior rules |
Dalam skill plugin, frontmatter name menggantikan nama direktori dalam segmen terakhir perintah, jadi my-plugin/skills/review/SKILL.md dengan name: fancy menjadi /my-plugin:fancy. Perintah bare /fancy juga menginvokasi skill kecuali perintah lain sudah menggunakan nama itu. Jika name yang Anda tulis sudah dimulai dengan awalan plugin itu sendiri, Claude Code tidak menambahkan awalan lagi pada v2.1.246 atau lebih baru. Misalnya, name: my-plugin:fancy masih menjadi /my-plugin:fancy. Dari v2.1.216 hingga v2.1.245, Claude Code menggandakan awalan ketika name sudah membawanya.
Dalam sesi non-interaktif, nama help dan feedback tidak dicadangkan untuk perintah bawaan khusus terminal mereka, jadi skill plugin dengan salah satu nama tersebut menyimpan perintah bare-nya di sana. Setiap terminal-only built-in lainnya, seperti /login, tetap dicadangkan meskipun perintah tidak dapat dijalankan dalam sesi tersebut. Skill yang disinkronkan bernama help atau feedback masih dilewati di sana, karena Claude Code melewati skill yang disinkronkan yang namanya cocok dengan perintah bawaan apa pun apakah perintah itu dapat dijalankan atau tidak.
Untuk SKILL.md akar plugin, tidak ada direktori skill untuk mengambil nama darinya, jadi name menyediakan seluruh segmen terakhir. Tanpa bidang name, Claude Code kembali ke nama direktori plugin.
Substitusi string yang tersedia
Skills mendukung substitusi string untuk nilai dinamis dalam konten skill:
| Variable | Description |
|---|---|
$ARGUMENTS |
All arguments passed when invoking the skill. When no placeholder receives an argument, Claude Code appends them as ARGUMENTS: <value>. See Pass arguments to skills. |
$ARGUMENTS[N] |
Access a specific argument by 0-based index, such as $ARGUMENTS[0] for the first argument. |
$N |
Shorthand for $ARGUMENTS[N], such as $0 for the first argument or $1 for the second. |
$name |
Named argument declared in the arguments frontmatter list. Names map to positions in order, so with arguments: [issue, branch] the placeholder $issue expands to the first argument and $branch to the second. |
${CLAUDE_SESSION_ID} |
The current session ID. Useful for logging, creating session-specific files, or correlating skill output with sessions. |
${CLAUDE_EFFORT} |
The current effort level: low, medium, high, xhigh, or max. Ultracode is not a distinct level and reports as xhigh. Use this to adapt skill instructions to the active effort setting. |
${CLAUDE_SKILL_DIR} |
The directory containing the skill's SKILL.md file. For plugin skills, this is the skill's subdirectory within the plugin, not the plugin root. Use this in bash injection commands to reference scripts or files bundled with the skill, regardless of the current working directory. |
${CLAUDE_PROJECT_DIR} |
The project root directory. This is the same path hooks and MCP servers receive as CLAUDE_PROJECT_DIR. Use this to reference project-local scripts or files, such as ${CLAUDE_PROJECT_DIR}/.claude/hooks/helper.sh, independent of where the skill is installed. |
${CLAUDE_PLUGIN_ROOT} |
The plugin's installation directory. Substituted only in plugin skills. Use this to reference scripts or files bundled anywhere in the plugin, including resources shared between the plugin's skills. See plugin environment variables. |
${CLAUDE_PLUGIN_DATA} |
The plugin's persistent data directory, which survives plugin updates. Substituted only in plugin skills. Use this to reference installed dependencies, generated files, or caches that must outlive an update. |
Claude Code menggantikan ${CLAUDE_SKILL_DIR} dan ${CLAUDE_PROJECT_DIR} di dua tempat: konten markdown skill, dan aturan Bash dalam frontmatter allowed-tools. Dalam skill plugin, Claude Code menggantikan ${CLAUDE_PLUGIN_ROOT} dan ${CLAUDE_PLUGIN_DATA} di tempat yang sama. Menggunakan variabel yang sama di kedua tempat memungkinkan skill menjalankan skrip bundel tanpa prompt izin. Skill berikut menunjukkan polanya:
---
name: render-chart
description: Render a chart from a CSV file
allowed-tools: Bash(${CLAUDE_SKILL_DIR}/scripts/render.sh *)
---
Run `${CLAUDE_SKILL_DIR}/scripts/render.sh <csv-file>` to render the chart.
Jika skill ini diinstal di ~/.claude/skills/render-chart/, kedua kemunculan ${CLAUDE_SKILL_DIR} berkembang ke direktori itu. Aturan allowed-tools kemudian cocok dengan perintah yang tepat yang diberitahu skill body kepada Claude untuk dijalankan, jadi skrip berjalan tanpa meminta.
Substitusi ${CLAUDE_PROJECT_DIR} memerlukan Claude Code v2.1.196 atau lebih baru.
Argumen yang diindeks menggunakan kutipan gaya shell, jadi bungkus nilai multi-kata dalam tanda kutip untuk meneruskannya sebagai argumen tunggal. Misalnya, /my-skill "hello world" second membuat $0 berkembang menjadi hello world dan $1 menjadi second. Placeholder $ARGUMENTS selalu berkembang ke string argumen lengkap seperti yang diketik.
Placeholder yang diindeks tanpa argumen yang sesuai, seperti $2 ketika hanya satu argumen yang diteruskan, tetap dalam konten tidak berubah. Placeholder bernama dari frontmatter arguments tanpa argumen yang cocok berkembang menjadi string kosong.
Jika Anda meneruskan nilai argumen yang sendiri berisi teks seperti $1 atau $ARGUMENTS, Claude Code menyisipkannya sebagai teks literal dan tidak memperluasnya. Misalnya, jika isi skill berisi Summarize $0 dan Anda menjalankan /summarize "$ARGUMENTS from yesterday", Claude menerima Summarize $ARGUMENTS from yesterday. Claude Code masih menggantikan variabel ${CLAUDE_*} seperti ${CLAUDE_SKILL_DIR} setelah menyisipkan argumen.
Untuk menyertakan literal $ sebelum digit, ARGUMENTS, atau nama argumen yang dideklarasikan, seperti $1.00 dalam prosa, lepaskan dengan garis miring terbalik: \$1.00. Garis miring terbalik sebelum $ lainnya dibiarkan tidak berubah. Hanya satu garis miring terbalik langsung sebelum token yang melepaskan. Garis miring terbalik ganda seperti \\$1 meninggalkan kedua garis miring terbalik di tempat, dan $1 masih berkembang ke nilai argumen. Pelarian garis miring terbalik hanya mencakup placeholder argumen ini. Garis miring terbalik tidak mencegah substitusi variabel ${CLAUDE_*} di mana variabel berlaku.
Contoh menggunakan substitusi:
---
name: session-logger
description: Log activity for this session
---
Log the following to logs/${CLAUDE_SESSION_ID}.log:
$ARGUMENTS
Tambahkan file pendukung
Skills dapat mencakup beberapa file dalam direktorinya. Ini membuat SKILL.md fokus pada hal-hal penting sambil membiarkan Claude mengakses materi referensi terperinci hanya saat diperlukan. Dokumen referensi besar, spesifikasi API, atau koleksi contoh tidak perlu dimuat ke dalam konteks setiap kali skill berjalan.
my-skill/
├── SKILL.md (required - overview and navigation)
├── reference.md (detailed API docs - loaded when needed)
├── examples.md (usage examples - loaded when needed)
└── scripts/
└── helper.py (utility script - executed, not loaded)
Referensikan file pendukung dari SKILL.md sehingga Claude tahu apa yang berisi setiap file dan kapan memuatnya:
## Additional resources
- For complete API details, see [reference.md](/anthropic/claude-code/history/docs/id/2026-09-08-2000..2026-09-09-2258/reference/)
- For usage examples, see [examples.md](/anthropic/claude-code/history/docs/id/2026-09-08-2000..2026-09-09-2258/examples/)
Jaga SKILL.md di bawah 500 baris. Pindahkan materi referensi terperinci ke file terpisah.
Kontrol siapa yang menginvokasi skill
Secara default, baik Anda maupun Claude dapat menginvokasi skill apa pun. Anda dapat mengetik /skill-name untuk menginvokasinya secara langsung, dan Claude dapat memuatnya secara otomatis ketika relevan dengan percakapan Anda. Dua bidang frontmatter memungkinkan Anda membatasi ini:
-
disable-model-invocation: true: Hanya Anda yang dapat menginvokasi skill. Gunakan ini untuk alur kerja dengan efek samping atau yang ingin Anda kontrol waktunya, seperti/commit,/deploy, atau/send-slack-message. Anda tidak ingin Claude memutuskan untuk deploy karena kode Anda terlihat siap. -
user-invocable: false: Hanya Claude yang dapat menginvokasi skill. Gunakan ini untuk pengetahuan latar belakang yang tidak dapat ditindaklanjuti sebagai perintah. Skilllegacy-system-contextmenjelaskan cara kerja sistem lama. Claude harus tahu ini ketika relevan, tetapi/legacy-system-contextbukan tindakan yang bermakna bagi pengguna untuk diambil.
Contoh ini membuat skill deploy yang hanya dapat Anda picu. Jika Anda menetapkan disable-model-invocation: true, Claude tidak dapat menjalankan skill secara otomatis:
---
name: deploy
description: Deploy the application to production
disable-model-invocation: true
---
Deploy $ARGUMENTS to production:
1. Run the test suite
2. Build the application
3. Push to the deployment target
4. Verify the deployment succeeded
Jika Claude mencoba bagaimanapun, Claude Code memblokir panggilan dan menginstruksikan untuk tidak mereproduksi langkah deploy dengan cara lain, jadi harapkan Claude menyarankan menjalankan /deploy sendiri.
Berikut adalah bagaimana dua bidang mempengaruhi invokasi dan pemuatan konteks:
| Frontmatter | You can invoke | Claude can invoke | When loaded into context |
|---|---|---|---|
| (default) | Yes | Yes | Description always in context, full skill loads when invoked |
disable-model-invocation: true |
Yes | No | Description not in context, full skill loads when you invoke |
user-invocable: false |
No | Yes | Description always in context, full skill loads when invoked |
Dalam sesi reguler, deskripsi skill dimuat ke dalam konteks sehingga Claude tahu apa yang tersedia, tetapi konten skill penuh hanya dimuat saat diinvokasi. Subagents dengan skill yang dimuat sebelumnya bekerja berbeda: konten skill penuh disuntikkan saat startup.
Siklus hidup konten skill
Ketika Anda atau Claude menginvokasi skill, konten SKILL.md yang dirender memasuki percakapan sebagai pesan tunggal dan tetap ada di seluruh giliran kemudian. Persistensi ini berlaku untuk instruksi skill, bukan izinnya: hibah allowed-tools dihapus ketika Anda mengirim pesan berikutnya. Claude Code tidak membaca ulang file skill pada giliran kemudian, jadi tulis panduan yang harus berlaku sepanjang tugas sebagai instruksi berdiri daripada langkah sekali jalan.
Ketika Claude menginvokasi ulang skill yang konten yang dirender identik dengan salinan yang sudah ada dalam konteks, Claude Code menambahkan catatan singkat bahwa skill sudah dimuat daripada salinan kedua konten. Ketika konten yang dirender berbeda, karena argumen berubah atau perintah konteks dinamis menghasilkan output baru, Claude Code menambahkan konten penuh lagi.
Auto-compaction membawa skill yang diinvokasi maju dalam anggaran token. Ketika percakapan diringkas untuk membebaskan konteks, Claude Code melampirkan kembali invokasi paling baru dari setiap skill setelah ringkasan, menyimpan 5.000 token pertama dari masing-masing. Skill yang dilampirkan kembali berbagi anggaran gabungan 25.000 token. Claude Code mengisi anggaran ini mulai dari skill yang paling baru diinvokasi, jadi skill yang lebih lama dapat dijatuhkan sepenuhnya setelah compaction jika Anda telah menginvokasi banyak dalam satu sesi.
Jika skill tampak berhenti mempengaruhi perilaku setelah respons pertama, konten biasanya masih ada dan model memilih alat atau pendekatan lain. Perkuat deskripsi skill dan instruksi sehingga model terus menyukainya, atau gunakan hooks untuk menegakkan perilaku secara deterministik. Jika skill besar atau Anda menginvokasi beberapa skill lain setelahnya, reinvokasi setelah compaction untuk mengembalikan konten penuh.
Pra-setujui tools untuk skill
Bidang allowed-tools memberikan izin untuk tools yang terdaftar selama giliran yang menginvokasi skill, sehingga Claude dapat menggunakannya tanpa meminta persetujuan Anda. Hibah dihapus ketika Anda mengirim pesan berikutnya, meskipun konten skill tetap dalam konteks; menginvokasi skill lagi menerapkannya kembali untuk giliran itu. Ini tidak membatasi tools mana yang tersedia: setiap tool tetap dapat dipanggil, dan pengaturan izin Anda masih mengatur tools yang tidak terdaftar. Untuk pra-setujui tools untuk seluruh sesi daripada satu giliran, tambahkan aturan izin ke pengaturan izin tersebut.
Kepercayaan workspace tidak membatasi bidang ini. Claude Code menerapkan allowed-tools skill proyek kapan pun Anda atau Claude menginvokasi skill, termasuk dalam jalankan -p dalam folder yang belum pernah Anda percayai. Skill dapat memberikan dirinya akses tool yang luas, jadi tinjau allowed-tools skill yang diperiksa ke dalam repositori sebelum Anda menjalankan Claude Code di sana.
Skill ini memungkinkan Claude menjalankan perintah git tanpa persetujuan per-penggunaan kapan pun Anda menginvokasinya:
---
name: commit
description: Stage and commit the current changes
disable-model-invocation: true
allowed-tools: Bash(git add *) Bash(git commit *) Bash(git status *)
---
Untuk menghapus tools dari pool tools yang tersedia Claude saat skill aktif, daftarkan dalam disallowed-tools dalam frontmatter skill. Pembatasan dihapus ketika Anda mengirim pesan berikutnya. Seperti aturan deny, bidang tidak dapat menghapus EndConversation saat tool lain tetap ada. Untuk memblokir tools di semua skills dan prompts, tambahkan aturan deny dalam pengaturan izin Anda.
Teruskan argumen ke skills
Baik Anda maupun Claude dapat meneruskan argumen saat menginvokasi skill. Argumen tersedia melalui placeholder $ARGUMENTS.
Skill ini memperbaiki masalah GitHub berdasarkan nomor. Placeholder $ARGUMENTS diganti dengan apa pun yang mengikuti nama skill:
---
name: fix-issue
description: Fix a GitHub issue
disable-model-invocation: true
---
Fix GitHub issue $ARGUMENTS following our coding standards.
1. Read the issue description
2. Understand the requirements
3. Implement the fix
4. Write tests
5. Create a commit
Ketika Anda menjalankan /fix-issue 123, Claude menerima "Fix GitHub issue 123 following our coding standards..."
Jika Anda menginvokasi skill dengan argumen tetapi tidak ada placeholder dalam konten skill yang menerima satu, Claude Code menambahkan ARGUMENTS: <your input> ke akhir konten skill sehingga Claude masih melihat apa yang Anda ketik. Placeholder adalah $ARGUMENTS, bentuk yang diindeks seperti $1, atau argumen bernama. Placeholder yang diindeks tanpa argumen pada posisinya tetap sebagai teks literal dan tidak dihitung sebagai menerima satu. Placeholder bernama dihitung bahkan ketika posisinya tidak memiliki argumen, karena berkembang menjadi string kosong.
Anda juga dapat menumpuk beberapa skills di awal satu pesan. Mengetik /write-tests /fix-issue 123 memuat kedua skills dan meneruskan teks trailing 123 sebagai $ARGUMENTS ke masing-masing. Sebelum v2.1.199, hanya skill pertama yang dimuat dan menerima /fix-issue 123 sebagai teks argumen literal.
Claude Code memperluas skill pertama ditambah hingga lima lagi yang ditumpuk setelahnya. Ekspansi berhenti pada token pertama yang bukan skill yang dapat diinvokasi pengguna inline, jadi skill yang berjalan sebagai subagent yang bercabang, seperti /code-review, atau yang argumennya sendiri mungkin dimulai dengan perintah slash, seperti /loop, juga berakhir di sana. Token itu dan segalanya setelahnya menjadi teks argumen untuk setiap skill yang diperluas. /code-review berjalan sebagai subagent yang bercabang dari v2.1.218; pada versi sebelumnya itu berjalan inline dan ditumpuk.
Untuk mengakses argumen individual berdasarkan posisi, gunakan $ARGUMENTS[N] atau yang lebih pendek $N:
---
name: migrate-component
description: Migrate a component from one language to another
---
Migrate the $ARGUMENTS[0] component from $ARGUMENTS[1] to $ARGUMENTS[2].
Preserve all existing behavior and tests.
Menjalankan /migrate-component SearchBar JavaScript TypeScript menggantikan $ARGUMENTS[0] dengan SearchBar, $ARGUMENTS[1] dengan JavaScript, dan $ARGUMENTS[2] dengan TypeScript. Skill yang sama menggunakan shorthand $N:
---
name: migrate-component
description: Migrate a component from one language to another
---
Migrate the $0 component from $1 to $2.
Preserve all existing behavior and tests.
Pola lanjutan
Injeksi konteks dinamis
Sintaks !`<command>` menjalankan perintah shell sebelum konten skill dikirim ke Claude. Output perintah menggantikan placeholder, sehingga Claude menerima data aktual, bukan perintah itu sendiri. Claude Code tidak menjalankan perintah ini di mesin Anda ketika skill disinkronkan dari akun claude.ai Anda.
Skill ini merangkum pull request dengan mengambil data PR langsung menggunakan GitHub CLI. Perintah !`gh pr diff` dan perintah lainnya berjalan terlebih dahulu, dan outputnya dimasukkan ke dalam prompt:
---
name: pr-summary
description: Summarize changes in a pull request
context: fork
agent: Explore
allowed-tools: Bash(gh *)
---
## Pull request context
- PR diff: !`gh pr diff`
- PR comments: !`gh pr view --comments`
- Changed files: !`gh pr diff --name-only`
## Your task
Summarize this pull request...
Substitusi berjalan sekali di atas file asli. Output perintah dimasukkan sebagai teks biasa dan tidak dipindai ulang untuk placeholder !`<command>` lebih lanjut, sehingga perintah tidak dapat mengeluarkan placeholder untuk pass berikutnya untuk diperluas.
Bentuk inline hanya dikenali ketika ! muncul di awal baris atau segera setelah whitespace. Jika ! mengikuti karakter lain, seperti dalam KEY=!`cmd`, placeholder dibiarkan sebagai teks literal dan perintah tidak berjalan.
Untuk perintah multi-baris, gunakan blok kode yang dibuka dengan ```! bukan bentuk inline:
## Environment
```!
node --version
git status --short
```
Untuk menonaktifkan perilaku ini untuk skills dan perintah kustom dari pengguna, proyek, plugin, atau sumber additional-directory, atur "disableSkillShellExecution": true dalam settings. Setiap perintah diganti dengan [shell command execution disabled by policy] alih-alih dijalankan. Skills bundel dan terkelola tidak terpengaruh. Pengaturan ini paling berguna dalam managed settings, di mana pengguna tidak dapat menggantinya.
Claude Code tidak pernah menjalankan perintah ini di mesin Anda ketika perintah muncul dalam skills disinkronkan dari akun claude.ai Anda, terlepas dari pengaturan ini. Bagaimana Claude Code menangani isi skill yang disinkronkan mengatakan apa yang Claude terima sebagai pengganti perintah dalam setiap jenis sesi.
Untuk meminta penalaran yang lebih dalam ketika skill berjalan, sertakan ultrathink di mana saja dalam konten skill. Lihat Gunakan ultrathink untuk penalaran mendalam sekali jalan.
Bagaimana perintah yang diinjeksi berjalan
Claude Code memilih alat yang menjalankan perintah yang diinjeksi skill dari kunci shell dalam frontmatter skill dan lingkungan Anda. Setiap kombinasi menjalankan perintah melalui alat Bash atau alat PowerShell, kecuali satu yang gagal dalam invokasi:
shell: powershell, dengan alat PowerShell diaktifkan: perintah berjalan melalui alat PowerShell.shell: bashketika bash tidak tersedia: invokasi gagal sebelum perintah apa pun berjalan. Ini terjadi di Windows tanpa Git Bash. Claude Code menampilkanSkill <name> requires bash (`shell: bash` in frontmatter) but Git Bash was not found.- Kombinasi lainnya: perintah berjalan melalui alat Bash ketika bash tersedia. Ketika tidak, mereka berjalan melalui alat PowerShell.
Kedua alat menjalankan perintah dengan cara yang sama seperti menjalankan perintah shell Claude sendiri. Mereka berbagi direktori kerja, timeout, dan penanganan output:
- Direktori kerja: Claude Code menjalankan setiap perintah di direktori kerja shell sesi saat ini. Direktori itu bergerak ketika Claude menjalankan
cd. Gunakan${CLAUDE_SKILL_DIR}atau${CLAUDE_PROJECT_DIR}dalam path yang harus diselesaikan dengan cara yang sama setiap kali. - stderr: dengan shell
bashdefault, Claude Code menggabungkan stderr ke stdout. Apa pun yang ditulis perintah ke stderr muncul dalam teks yang diinjeksi. - Timeout: setiap perintah berjalan di bawah timeout default 2 menit alat Bash. Ketika alat Bash memindahkan perintah yang kedaluwarsa ke latar belakang, skill masih dirender. Teks yang diinjeksi melaporkan perpindahan dan menamai tugas latar belakang dan file yang mengumpulkan output perintah. Ketika perintah adalah salah satu yang tidak pernah dilatarbelakangkan oleh alat Bash, Claude Code membunuhnya pada timeout. Kegagalan itu membatalkan invokasi.
- Ukuran output: output melampaui batas inline alat Bash tiba sebagai jalur file plus pratinjau singkat, bukan teks terpotong. Output limits mencakup batas dan cara menyesuaikan setiap batas.
Alat PowerShell menerapkan perilaku timeout, backgrounding, dan output-ceiling yang sama pada perintah yang dijalankannya. Lihat bagian alat PowerShell untuk spesifikasinya.
Ketika perintah yang diinjeksi gagal
Perintah yang gagal membatalkan seluruh invokasi skill, bukan hanya placeholder-nya sendiri. Claude tidak pernah melihat konten skill untuk invokasi itu. Pembatalan menampilkan Shell command failed for pattern "...". Pesan kesalahan mencakup output perintah di bawah [stderr].
Dengan shell bash default, kode keluar non-nol apa pun dihitung sebagai kegagalan. Satu pengecualian berlaku: Claude Code memperlakukan kode keluar 1 dari perintah pencarian dan perbandingan sebagai hasil normal dan menyuntikkan outputnya. Kode keluar 2 atau lebih tinggi gagal bahkan untuk perintah tersebut.
Perintah mana yang mendapatkan pengecualian tergantung pada shell:
- Shell
bashdefault: perintah yang tercantum di bawah Output limits shell: powershell, ketika alat PowerShell diaktifkan: set berbeda yang mencakupgrepdangit difftetapi bukanfindataudiff
Dengan shell bash default, tambahkan || true ke perintah lain apa pun yang Anda harapkan keluar non-nol. Skrip pemeriksaan yang keluar 1 ketika menemukan masalah adalah satu contoh.
Perintah yang diinjeksi tidak pernah meminta izin. Ketika pemeriksaan izin perintah mengembalikan apa pun selain izin, Claude Code membatalkan invokasi. Ini termasuk aturan yang biasanya akan menanyakan Anda. Pembatalan menampilkan Shell command permission check failed for pattern "...".
Untuk menjaga perintah yang tidak cocok agar tidak membatalkan di sini, pra-setujui dengan allowed-tools. Aturan ask atau deny yang cocok masih membatalkan invokasi terlepas dari allowed-tools. Lihat Kelola izin.
Jalankan skills dalam subagent
Tambahkan context: fork ke frontmatter Anda ketika Anda ingin skill berjalan dalam isolasi. Konten skill menjadi prompt yang mendorong subagent. Ini tidak akan memiliki akses ke riwayat percakapan Anda.
Subagent yang di-fork berjalan di latar belakang: Anda terus bekerja sementara itu berjalan, dan hasilnya tiba dalam percakapan Anda ketika selesai. Atur background: false dalam frontmatter untuk menunggu hasil dalam giliran yang menginvokasi skill. Sebelum v2.1.218, skill yang di-fork selalu memblokir giliran sampai selesai.
Claude Code juga menunggu hasil, bahkan ketika skill tidak menetapkan background: false, dalam kasus seperti ini:
- Dalam mode non-interaktif, dengan flag
-patau Agent SDK - Ketika Anda menetapkan
CLAUDE_CODE_DISABLE_BACKGROUND_TASKSke1, yang juga mematikan semua fitur tugas latar belakang lainnya - Ketika Anda menginvokasi skill yang di-fork sementara invokasi sebelumnya dari skill yang sama masih berjalan
- Ketika tugas terjadwal diaktifkan dengan skill sebagai promptnya
Fork yang di-background juga berjalan dengan set alat yang lebih sempit yang berlaku untuk subagent latar belakang: subagent skill adalah tipe agen reguler, jadi pengecualian untuk subagent yang mem-fork percakapan tidak mencakupnya. Jika langkah skill Anda bergantung pada alat di luar set itu, atur background: false untuk menjaga set alat penuh.
Skill yang di-fork yang berjalan di latar belakang menerapkan editnya di luar checkpoints sesi Anda, jadi /rewind tidak membatalkannya; gunakan git untuk mengembalikannya.
context: fork hanya masuk akal untuk skills dengan instruksi eksplisit. Jika skill Anda berisi pedoman seperti "gunakan konvensi API ini" tanpa tugas, subagent menerima pedoman tetapi tidak ada prompt yang dapat ditindaklanjuti, dan kembali tanpa output yang bermakna.
Skills dan subagents bekerja bersama dalam dua arah:
| Pendekatan | System prompt | Tugas | Juga memuat |
|---|---|---|---|
Skill dengan context: fork |
Dari tipe agen | Konten SKILL.md | CLAUDE.md, kecuali ketika agen adalah Explore atau Plan |
Subagent dengan field skills |
Isi markdown subagent | Pesan delegasi Claude | Skills yang dimuat sebelumnya + CLAUDE.md |
Dengan context: fork, Anda menulis tugas dalam skill Anda dan memilih tipe agen untuk menjalankannya. Agen Explore dan Plan bawaan melewati CLAUDE.md dan status git untuk menjaga konteks mereka tetap kecil, jadi skill yang di-fork menggunakan agent: Explore hanya melihat konten SKILL.md dan prompt sistem agen sendiri. Untuk kebalikannya, di mana Anda mendefinisikan subagent kustom yang menggunakan skills sebagai materi referensi, lihat Subagents.
Contoh: Skill penelitian menggunakan agen Explore
Skill ini menjalankan penelitian dalam agen Explore yang di-fork. Konten skill menjadi tugas, dan agen menyediakan alat read-only yang dioptimalkan untuk eksplorasi codebase:
---
name: deep-research
description: Research a topic thoroughly
context: fork
agent: Explore
---
Research $ARGUMENTS thoroughly:
1. Find relevant files using Glob and Grep
2. Read and analyze the code
3. Summarize findings with specific file references
Ketika skill ini berjalan:
- Konteks terisolasi baru dibuat
- Subagent menerima konten skill sebagai promptnya ("Research $ARGUMENTS thoroughly...")
- Field
agentmenentukan lingkungan eksekusi (model, alat, dan izin) - Subagent merangkum hasilnya dan mengembalikannya ke percakapan utama Anda ketika selesai
Field agent menentukan konfigurasi subagent mana yang akan digunakan. Opsi mencakup agen bawaan (Explore, Plan, general-purpose) atau subagent kustom apa pun dari .claude/agents/. Jika dihilangkan, menggunakan general-purpose.
Batasi akses skill Claude
Secara default, Claude dapat menginvokasi skill apa pun yang tidak memiliki disable-model-invocation: true yang ditetapkan. Skills yang mendefinisikan allowed-tools memberikan Claude akses ke alat tersebut tanpa persetujuan per-penggunaan selama giliran yang menginvokasi skill; hibah dihapus ketika Anda mengirim pesan berikutnya. Pengaturan izin Anda masih mengatur perilaku persetujuan dasar untuk semua alat lainnya. Beberapa perintah bawaan juga tersedia melalui alat Skill, termasuk /init dan /security-review. Perintah bawaan lainnya seperti /compact tidak.
Tiga cara untuk mengontrol skill mana yang dapat diinvokasi Claude:
Nonaktifkan semua skills dengan menolak alat Skill dalam /permissions:
# Add to deny rules:
Skill
Izinkan atau tolak skills spesifik menggunakan aturan izin:
# Allow only specific skills
Skill(commit)
Skill(review-pr *)
# Deny specific skills
Skill(deploy *)
Sintaks izin: Skill(name) untuk kecocokan tepat, Skill(name *) untuk kecocokan awalan dengan argumen apa pun.
Sembunyikan skills individual dengan menambahkan disable-model-invocation: true ke frontmatter mereka. Ini menghapus skill dari konteks Claude sepenuhnya.
Dengan user-invocable: false, Anda tidak dapat menginvokasi skill, tetapi Claude masih bisa. Untuk menjaga Claude agar tidak menginvokasinya melalui alat Skill, atur disable-model-invocation: true.
Ganti visibilitas skill dari pengaturan
Pengaturan skillOverrides mengontrol visibilitas skill dari settings Anda alih-alih frontmatter skill itu sendiri. Gunakan untuk skills yang SKILL.md-nya tidak ingin Anda edit, seperti yang diperiksa ke dalam repo proyek bersama. Menu /skills menulisnya untuk Anda: sorot skill dan tekan Space untuk mengubah status, lalu Esc untuk menyimpan ke .claude/settings.local.json.
Setiap kunci adalah nama skill dan setiap nilai adalah salah satu dari empat status:
| Nilai | Terdaftar ke Claude | Dalam menu / |
|---|---|---|
"on" |
Nama dan deskripsi | Ya |
"name-only" |
Nama saja | Ya |
"user-invocable-only" |
Tersembunyi | Ya |
"off" |
Tersembunyi | Tersembunyi |
Menu /skills memberi label status "user-invocable-only" user-only.
Sejak v2.1.199, "off" juga menyembunyikan skill dari daftar perintah yang diiklankan ke klien Remote Control dan ke pemanggil Agent SDK, selain menu / terminal. Menginvokasi skill tersembunyi dengan nama lengkapnya masih mengembalikan kesalahan skillOverrides alih-alih menjalankannya.
Skill yang tidak ada dalam skillOverrides diperlakukan sebagai "on". Contoh di bawah ini menciutkan satu skill menjadi namanya dan mematikan yang lain sepenuhnya:
{
"skillOverrides": {
"legacy-context": "name-only",
"deploy": "off"
}
}
Plugin skills tidak terpengaruh oleh skillOverrides. Kelola mereka melalui /plugin sebagai gantinya.
Temukan skills yang tidak digunakan
Setiap skill dalam daftar skill menambah konteks Anda pada setiap giliran, terlepas dari apakah Claude pernah menggunakannya. Jalankan /skill-doctor untuk melihat apa yang setiap skill Anda biayai dan seberapa sering digunakan, sehingga Anda dapat memutuskan skill mana yang akan dimatikan. Dalam sesi interaktif, laporan dibuka di tab Stats manajer /plugin. Dalam mode non-interaktif dengan -p, Claude Code mencetaknya sebagai teks.
Laporan mencakup skills dalam sesi Anda selain skills bundel dan skills enterprise. Ini menandai skills dalam daftar yang tidak pernah diinvokasi dan mengatakan di mana untuk mematikannya. Dari skills yang diberitahu untuk dimatikan, mulai dengan yang memiliki biaya konteks tertinggi. Laporan juga mencantumkan plugin yang belum Anda gunakan baru-baru ini.
/skill-doctor memerlukan Claude Code v2.1.252 atau lebih baru dan tidak tersedia dalam sesi yang melewati pengambilan flag fitur. Jika Anda menjalankan /skill-doctor melalui Remote Control dari ponsel atau browser Anda, Claude Code menjawab Skill usage reports are not available on this connection. sebagai gantinya. Jalankan /skill-doctor di terminal pada mesin tempat sesi berjalan.
Evaluasi dan iterasi pada sebuah skill
Melihat skill terpicu memberitahu Anda bahwa Claude menemukannya, bukan bahwa itu melakukan apa yang Anda maksudkan. Untuk mengetahui skill berfungsi, ukur dua hal secara terpisah: apakah Claude menginvokasinya pada prompt yang seharusnya, dan apakah output cocok dengan apa yang Anda harapkan saat itu terjadi.
Pemeriksaan untuk keduanya adalah perbandingan baseline. Kumpulkan beberapa prompt yang realistis, jalankan masing-masing dalam sesi baru dengan skill tersedia dan lagi dengan itu dinonaktifkan, dan bandingkan hasilnya. Sesi baru penting karena konteks sisa dari pembuatan skill akan menyembunyikan celah dalam instruksi tertulis.
Jalankan evals dengan skill-creator
Plugin skill-creator mengotomatisasi loop perbandingan di dalam Claude Code. Instal dari marketplace resmi:
/plugin install skill-creator@claude-plugins-official
Jika instalasi gagal, cocokkan pesan yang dilaporkan Claude Code:
Marketplace "claude-plugins-official" not found: tambahkan marketplace dengan/plugin marketplace add anthropics/claude-plugins-official, kemudian coba ulang instalasi.- Plugin tidak ditemukan di marketplace: periksa nama plugin.
Jika ringkasan instalasi melaporkan Run /reload-plugins to activate., jalankan perintah itu untuk membuat skill plugin tersedia dalam sesi saat ini. Kemudian minta Claude untuk mengevaluasi skill yang ada, misalnya evaluate my summarize-changes skill with skill-creator. Plugin memandu Anda melalui penulisan test case dan menjalankan loop:
- Test cases: menyimpan prompt, file input, dan perilaku yang diharapkan dalam
evals/evals.jsondi dalam direktori skill - Isolated runs: menjalankan subagent per test case sehingga setiap run dimulai dengan konteks bersih, dan mencatat jumlah token dan durasi
- Grading: memeriksa setiap assertion terhadap output dan menulis pass atau fail dengan bukti ke
grading.json - Benchmark: mengagregasi pass rate, waktu, dan token untuk with-skill versus without-skill ke dalam
benchmark.jsonsehingga Anda dapat membandingkan peningkatan pass-rate terhadap overhead token dan waktu - Version comparison: menjalankan blind A/B antara dua versi skill sehingga Anda dapat mengkonfirmasi edit adalah peningkatan sebelum melakukan commit
- Description tuning: menghasilkan prompt should-trigger dan should-not-trigger, mengukur hit rate, dan mengusulkan edit deskripsi saat skill diaktifkan pada permintaan yang salah
- Review viewer: membuka laporan HTML di mana Anda memeriksa setiap output dan mencatat umpan balik kualitatif yang dibaca iterasi berikutnya
Untuk format file eval dan alur kerja iterasi lengkap, lihat Evaluating skill output quality di agentskills.io. Untuk latar belakang pada mode benchmark dan perbandingan, lihat skill-creator announcement.
Bagikan skills
Skills dapat didistribusikan pada berbagai cakupan tergantung pada audiens Anda:
- Project skills: Commit
.claude/skills/ke version control - Plugins: Buat direktori
skills/di plugin Anda - Managed: Terapkan di seluruh organisasi melalui managed settings
Hasilkan output visual
Skills dapat membundel dan menjalankan skrip dalam bahasa apa pun, memberikan Claude kemampuan di luar apa yang mungkin dalam satu prompt. Satu pola adalah menghasilkan output visual: file HTML interaktif yang terbuka di browser Anda untuk menjelajahi data, debugging, atau membuat laporan.
Contoh ini membuat penjelajah codebase: tampilan pohon interaktif di mana Anda dapat memperluas dan menciutkan direktori, melihat ukuran file sekilas, dan mengidentifikasi jenis file berdasarkan warna.
Buat direktori Skill:
mkdir -p ~/.claude/skills/codebase-visualizer/scripts
Simpan ini ke ~/.claude/skills/codebase-visualizer/SKILL.md. Deskripsi memberi tahu Claude kapan harus mengaktifkan Skill ini, dan instruksi memberi tahu Claude untuk menjalankan skrip yang dibundel. Jalur skrip menggunakan ${CLAUDE_SKILL_DIR} sehingga dapat diselesaikan dengan benar apakah skill dipasang di tingkat personal, project, atau plugin:
---
name: codebase-visualizer
description: Generate an interactive collapsible tree visualization of your codebase. Use when exploring a new repo, understanding project structure, or identifying large files.
allowed-tools: Bash(python3 *)
---
# Codebase Visualizer
Hasilkan tampilan pohon HTML interaktif yang menunjukkan struktur file proyek Anda dengan direktori yang dapat diciutkan.
## Penggunaan
Jalankan skrip visualisasi dari root proyek Anda:
```bash
python3 ${CLAUDE_SKILL_DIR}/scripts/visualize.py .
```
Ini membuat `codebase-map.html` di direktori saat ini dan membukanya di browser default Anda.
## Apa yang ditampilkan visualisasi
- **Direktori yang dapat diciutkan**: Klik folder untuk memperluas/menciutkan
- **Ukuran file**: Ditampilkan di sebelah setiap file
- **Warna**: Warna berbeda untuk jenis file berbeda
- **Total direktori**: Menunjukkan ukuran agregat setiap folder
Simpan ini ke ~/.claude/skills/codebase-visualizer/scripts/visualize.py. Skrip ini memindai pohon direktori dan menghasilkan file HTML yang mandiri dengan:
- Sidebar ringkasan yang menampilkan jumlah file, jumlah direktori, ukuran total, dan jumlah jenis file
- Bagan batang yang memecah codebase berdasarkan jenis file (8 teratas berdasarkan ukuran)
- Pohon yang dapat diciutkan di mana Anda dapat memperluas dan menciutkan direktori, dengan indikator jenis file berkode warna
Skrip memerlukan Python 3 tetapi hanya menggunakan perpustakaan bawaan, jadi tidak ada paket yang perlu dipasang:
#!/usr/bin/env python3
"""Generate an interactive collapsible tree visualization of a codebase."""
import json
import sys
import webbrowser
from html import escape
from pathlib import Path
from collections import Counter
IGNORE = {'.git', 'node_modules', '__pycache__', '.venv', 'venv', 'dist', 'build'}
def scan(path: Path, stats: dict) -> dict:
result = {"name": path.name, "children": [], "size": 0}
try:
for item in sorted(path.iterdir()):
if item.name in IGNORE or item.name.startswith('.'):
continue
if item.is_file():
size = item.stat().st_size
ext = item.suffix.lower() or '(no ext)'
result["children"].append({"name": item.name, "size": size, "ext": ext})
result["size"] += size
stats["files"] += 1
stats["extensions"][ext] += 1
stats["ext_sizes"][ext] += size
elif item.is_dir():
stats["dirs"] += 1
child = scan(item, stats)
if child["children"]:
result["children"].append(child)
result["size"] += child["size"]
except PermissionError:
pass
return result
def generate_html(data: dict, stats: dict, output: Path) -> None:
ext_sizes = stats["ext_sizes"]
total_size = sum(ext_sizes.values()) or 1
sorted_exts = sorted(ext_sizes.items(), key=lambda x: -x[1])[:8]
colors = {
'.js': '#f7df1e', '.ts': '#3178c6', '.py': '#3776ab', '.go': '#00add8',
'.rs': '#dea584', '.rb': '#cc342d', '.css': '#264de4', '.html': '#e34c26',
'.json': '#6b7280', '.md': '#083fa1', '.yaml': '#cb171e', '.yml': '#cb171e',
'.mdx': '#083fa1', '.tsx': '#3178c6', '.jsx': '#61dafb', '.sh': '#4eaa25',
}
lang_bars = "".join(
f'<div class="bar-row"><span class="bar-label">{ext}</span>'
f'<div class="bar" style="width:{(size/total_size)*100}%;background:{colors.get(ext,"#6b7280")}"></div>'
f'<span class="bar-pct">{(size/total_size)*100:.1f}%</span></div>'
for ext, size in sorted_exts
)
def fmt(b):
if b < 1024: return f"{b} B"
if b < 1048576: return f"{b/1024:.1f} KB"
return f"{b/1048576:.1f} MB"
html = f'''<!DOCTYPE html>
<html><head>
<meta charset="utf-8"><title>Codebase Explorer</title>
<style>
body {{ font: 14px/1.5 system-ui, sans-serif; margin: 0; background: #1a1a2e; color: #eee; }}
.container {{ display: flex; height: 100vh; }}
.sidebar {{ width: 280px; background: #252542; padding: 20px; border-right: 1px solid #3d3d5c; overflow-y: auto; flex-shrink: 0; }}
.main {{ flex: 1; padding: 20px; overflow-y: auto; }}
h1 {{ margin: 0 0 10px 0; font-size: 18px; }}
h2 {{ margin: 20px 0 10px 0; font-size: 14px; color: #888; text-transform: uppercase; }}
.stat {{ display: flex; justify-content: space-between; padding: 8px 0; border-bottom: 1px solid #3d3d5c; }}
.stat-value {{ font-weight: bold; }}
.bar-row {{ display: flex; align-items: center; margin: 6px 0; }}
.bar-label {{ width: 55px; font-size: 12px; color: #aaa; }}
.bar {{ height: 18px; border-radius: 3px; }}
.bar-pct {{ margin-left: 8px; font-size: 12px; color: #666; }}
.tree {{ list-style: none; padding-left: 20px; }}
details {{ cursor: pointer; }}
summary {{ padding: 4px 8px; border-radius: 4px; }}
summary:hover {{ background: #2d2d44; }}
.folder {{ color: #ffd700; }}
.file {{ display: flex; align-items: center; padding: 4px 8px; border-radius: 4px; }}
.file:hover {{ background: #2d2d44; }}
.size {{ color: #888; margin-left: auto; font-size: 12px; }}
.dot {{ width: 8px; height: 8px; border-radius: 50%; margin-right: 8px; }}
</style>
</head><body>
<div class="container">
<div class="sidebar">
<h1>📊 Summary</h1>
<div class="stat"><span>Files</span><span class="stat-value">{stats["files"]:,}</span></div>
<div class="stat"><span>Directories</span><span class="stat-value">{stats["dirs"]:,}</span></div>
<div class="stat"><span>Total size</span><span class="stat-value">{fmt(data["size"])}</span></div>
<div class="stat"><span>File types</span><span class="stat-value">{len(stats["extensions"])}</span></div>
<h2>By file type</h2>
{lang_bars}
</div>
<div class="main">
<h1>📁 {escape(data["name"])}</h1>
<ul class="tree" id="root"></ul>
</div>
</div>
</body></html>'''
output.write_text(html)
if __name__ == '__main__':
target = Path(sys.argv[1] if len(sys.argv) > 1 else '.').resolve()
stats = {"files": 0, "dirs": 0, "extensions": Counter(), "ext_sizes": Counter()}
data = scan(target, stats)
out = Path('codebase-map.html')
generate_html(data, stats, out)
print(f'Generated {out.absolute()}')
webbrowser.open(f'file://{out.absolute()}')
Untuk menguji, buka Claude Code di proyek apa pun dan minta "Visualize this codebase." Claude menjalankan skrip, yang mencetak jalur file yang dihasilkan, seperti Generated /path/to/codebase-map.html, dan membukanya di browser Anda. Jika Anda bekerja di lingkungan headless di mana tidak ada browser yang terbuka, jalur yang dicetak mengkonfirmasi bahwa skrip berhasil.
Pola ini berfungsi untuk output visual apa pun: grafik dependensi, laporan cakupan pengujian, dokumentasi API, atau visualisasi skema database. Skrip yang dibundel melakukan pekerjaan sementara Claude menangani orkestrasi.
Troubleshooting
Skill tidak terpicu
Jika Claude tidak menggunakan skill Anda saat diharapkan:
- Periksa deskripsi mencakup kata kunci yang akan secara alami diucapkan pengguna
- Verifikasi skill muncul di
What skills are available? - Coba rephrase permintaan Anda untuk lebih cocok dengan deskripsi
- Panggil secara langsung dengan
/skill-namejika skill dapat diinvokasi oleh pengguna
Jika YAML frontmatter tidak valid, Claude Code memuat badan skill dengan metadata kosong, jadi /skill-name tetap berfungsi tetapi Claude tidak memiliki description untuk dicocokkan. Jalankan dengan --debug untuk melihat error parse.
Untuk menemukan file SKILL.md yang frontmatter-nya tidak parse, jalankan claude plugin validate pada direktori skills, misalnya claude plugin validate .claude/skills untuk project skills atau claude plugin validate ~/.claude/skills untuk personal skills. Memerlukan Claude Code v2.1.233 atau lebih baru.
Skill terpicu terlalu sering
Jika Claude menggunakan skill Anda saat Anda tidak menginginkannya:
- Buat deskripsi lebih spesifik
- Tambahkan
disable-model-invocation: truejika Anda hanya menginginkan invokasi manual
Deskripsi skill terpotong
Claude Code memuat daftar nama skill dan deskripsi ke dalam konteks sehingga Claude tahu apa yang tersedia. Daftar selalu berisi setiap nama skill, tetapi jika Anda memiliki banyak skill, Claude Code mempersingkat deskripsi agar sesuai dengan anggaran karakter daftar, yang dapat menghilangkan kata kunci yang Claude butuhkan untuk mencocokkan permintaan Anda. Anggaran diskalakan pada 1% dari jendela konteks model. Ketika daftar melampaui batas, Claude Code menghapus deskripsi dimulai dengan skill yang Anda panggil paling sedikit, sehingga skill yang Anda gunakan paling banyak mempertahankan teks lengkap mereka.
Jalankan /doctor untuk estimasi biaya konteks daftar dan kontributor terbesarnya. Untuk menemukan skill yang layak dimatikan, jalankan /skill-doctor. Ketika daftar melebihi anggarannya, Claude Code juga menulis peringatan ke debug log, terlihat dengan --debug.
Baris Skills di /context melaporkan ukuran daftar setelah anggaran diterapkan, sehingga cocok dengan apa yang diterima model. Sebelum v2.1.196, baris menghitung teks lengkap setiap deskripsi dan dapat menunjukkan nilai beberapa kali lebih besar dari anggaran yang dikonfigurasi.
Untuk menaikkan anggaran, atur pengaturan skillListingBudgetFraction (misalnya 0.02 = 2%) atau variabel lingkungan SLASH_COMMAND_TOOL_CHAR_BUDGET ke jumlah karakter tetap. Untuk membebaskan anggaran untuk skill lain, atur entri prioritas rendah ke "name-only" di skillOverrides sehingga mereka terdaftar tanpa deskripsi. Anda juga dapat memangkas teks description dan when_to_use di sumber: letakkan kasus penggunaan utama terlebih dahulu, karena teks gabungan setiap entri dibatasi pada 1.536 karakter terlepas dari anggaran. Batas dapat dikonfigurasi dengan skillListingMaxDescChars.
Sumber daya terkait
- Debug konfigurasi Anda: diagnosis mengapa skill tidak muncul atau tidak terpicu
- Mengevaluasi kualitas output skill: format file eval dan alur kerja iterasi di agentskills.io
- Praktik terbaik penulisan skill: panduan penulisan yang berlaku di seluruh produk Claude
- Subagents: delegasikan tugas ke agen khusus
- Plugins: paket dan distribusikan skills dengan ekstensi lainnya
- Hooks: otomatisasi workflow di sekitar peristiwa tool
- Memory: kelola file CLAUDE.md untuk konteks persisten
- Commands: referensi untuk perintah bawaan dan skills bundel
- Permissions: kontrol akses tool dan skill
- Claude Tag skills: project skills yang di-commit ke repo juga dimuat ketika repo tersebut digunakan di saluran Claude Tag