
Cara Menambahkan Flag ke Slash Command Claude Code: 4 Pola yang Benar-Benar Berfungsi
Claude Code sebenarnya tidak mem-parse --flags seperti yang Anda harapkan untuk slash command kustom, tetapi empat pola memberikan UX yang sama, dan tiga di antaranya lebih bersih daripada parsing CLI pada umumnya. Berikut cara menambahkan flag ke slash command Claude Code dengan benar, lengkap dengan file .md yang berfungsi dan bisa Anda salin hari ini.
Jawaban Singkat:
- Claude Code tidak mem-parse flag CLI (
--json,--verbose) untuk command kustom, penggunaannya tidak memiliki parser flag. - Untuk UX bergaya CLI, tulis flag ke dalam
$ARGUMENTSdan biarkan LLM menginterpretasikannya sebagai bahasa alami. - Untuk argumen bertipe, gunakan argumen posisional
$1/$2atau argumen bernama yang dideklarasikan di field frontmatterarguments:. - Dokumentasikan flag yang diharapkan di
argument-hint:agar autocomplete/menampilkannya kepada pengguna.
Bagaimana Argumen Slash Command Claude Code Sebenarnya Bekerja?
Sistem slash command Claude Code mengganti tiga jenis token sebelum mengirim perintah Anda ke LLM: $ARGUMENTS (seluruh string setelah nama perintah), $0/$1/$2 posisional (segmen yang di-quote dengan gaya shell), dan $variableName bernama yang dideklarasikan di frontmatter. Tidak ada parser flag CLI bawaan, --dry-run masuk ke $ARGUMENTS sebagai teks literal.
Inilah bagian yang membuat semua orang bingung. Ketika Anda mengetik /deploy --staging --dry-run, Claude Code tidak menjalankan argparse terhadap --staging --dry-run. Sistem ini menempelkan seluruh string tersebut ke mana pun file .md Anda mereferensikan $ARGUMENTS, lalu mengirimkan prompt yang sudah di-render ke model. LLM melihat --staging --dry-run sebagai bahasa Inggris biasa dan memutuskan apa yang harus dilakukan.
Itu bukan bug, itu memang desainnya. Sistem ini adalah lapisan substitusi, bukan parser. Perintah bawaan seperti /clear dan /help (lihat referensi CLI resmi) memang memiliki flag, tetapi perintah kustom yang Anda buat mengikuti aturan yang berbeda.
Sistem slash command Claude Code mengganti token, lalu menyerahkan prompt yang sudah di-render ke LLM. Tidak ada parser flag.
Dalam pekerjaan Claude Code kami sendiri, kebingungan yang paling umum adalah persis hal ini, developer menghabiskan satu jam mencoba mencari tahu mengapa --verbose "tidak terdeteksi" sebelum menyadari bahwa LLM-lah yang menjadi parser-nya. Per Claude Code v2.1.126 (Mei 2026), perilaku ini didokumentasikan di dokumentasi slash command resmi dan tidak akan berubah dalam waktu dekat. Slash command adalah primitif saudara dari hook Claude Code, keduanya memperluas sistem ini, tetapi command dipicu oleh input pengguna sementara hook dipicu oleh event tool.
Berikut adalah perintah kustom terkecil yang membuktikan model substitusi:
---
description: Echo whatever the user types after the command
argument-hint: [anything]
---
The user passed these arguments: $ARGUMENTS
Repeat them back verbatim, then describe what the user probably meant.Simpan sebagai .claude/commands/echo-args.md, ketik /echo-args hello world --foo, dan LLM akan melihat string literal hello world --foo yang disubstitusikan ke dalam prompt. Itulah seluruh model mentalnya. Untuk panduan lebih mendalam tentang bagaimana file perintah berhubungan dengan sistem skills yang lebih luas, lihat Panduan Skills kami.
Buat Slash Command Parametrik Pertama Anda dalam 5 Menit
Buat .claude/commands/greet.md dengan tiga baris frontmatter dan satu baris prompt yang merujuk $ARGUMENTS. Restart Claude Code, ketik /greet World, dan lihat World tersubstitusi ke dalam prompt sebelum LLM melihatnya. Itulah seluruh prosesnya, lima langkah, tanpa build tools.
Berikut resepnya dari awal hingga akhir:
- Buat direktorinya. Dari root proyek Anda, jalankan
mkdir -p .claude/commands. Folder.claude/berada berdampingan dengan kode Anda; command di dalamnya akan terdeteksi secara otomatis saat Claude Code memulai sesi. - Tulis file command. Simpan cuplikan di bawah ini sebagai
.claude/commands/greet.md. - Muat ulang sesi Anda. Keluar dan luncurkan ulang Claude Code (atau jalankan
/reloadjika versi Anda mendukungnya). Command dibaca sekali saat sesi dimulai. - Panggil. Ketik
/greet Worlddi chat. - Verifikasi substitusi. Buka transkrip dan pastikan LLM melihat
Worldterinterpolasi ke dalam isi prompt, bukan token literal$ARGUMENTS.
Berikut file lengkapnya:
---
description: Greet someone enthusiastically
argument-hint: <name>
---
You are a friendly assistant. Greet the person named "$ARGUMENTS" with one short, warm sentence. Then ask them what they're working on today.Dan interaksi terminalnya:
> /greet World
Hey World, great to see you! What are you working on today?Selesai. Anda kini memiliki slash command parametrik. Field argument-hint adalah yang membuat menu autocomplete / menampilkan <name> di samping command Anda, sentuhan UX kecil, dampak besar.
Jika
$ARGUMENTStidak tersubstitusi, 9 dari 10 kali penyebabnya adalah Anda mengetik$argsatau$ARGS, token ini bersifat literal huruf besar.
Token ini case-sensitive dan harus persis. $ARGUMENTS berfungsi. $arguments, $args, $ARGS, ${ARGUMENTS} semuanya gagal secara diam-diam, terkirim ke LLM sebagai teks literal dan model hanya melihat sampah. Periksa ejaan tiga kali sebelum mengasumsikan bug yang lebih dalam.
Field Frontmatter Apa yang Mengontrol Penanganan Argumen?
Lima field frontmatter menentukan bagaimana sebuah slash command menangani argumen: argument-hint (apa yang ditampilkan autocomplete), allowed-tools (apa yang boleh dipanggil oleh command), arguments (deklarasi named-argument), model (varian Claude mana yang menjalankannya), dan disable-model-invocation (mengunci command agar hanya bisa dipanggil oleh pengguna). Secara bersama-sama, kelimanya mencakup hampir semua pola parametrik yang akan Anda butuhkan.
Berikut referensi lengkap frontmatter untuk custom command Claude Code v2.1.x:
| Field | Fungsi | Contoh | Wajib? |
|---|---|---|---|
description: | Ringkasan satu baris di menu / | Run staging deploy | Direkomendasikan |
argument-hint: | Hint autocomplete yang ditampilkan setelah nama command | [--dry-run] [--region us] | Direkomendasikan |
allowed-tools: | Whitelist tool yang boleh dipanggil oleh command | Bash(git:*) Read Edit | Opsional |
arguments: | Deklarasi named-argument | [issue, branch] | Opsional |
model: | Meng-override model untuk command ini | claude-opus-4-7 | Opsional |
disable-model-invocation: | Mencegah agent memanggil command ini | true | Opsional |
context: fork | Berjalan dalam context yang terisolasi | fork | Opsional |
Dua jebakan yang layak ditempel di monitor Anda. Pertama, allowed-tools dipisahkan dengan spasi, bukan koma. Menulis Bash(git:*), Read, Edit akan gagal melakukan whitelist apa pun secara diam-diam, parser memperlakukan seluruh string sebagai satu entri yang cacat. Gunakan Bash(git:*) Read Edit. Kami mempelajarinya dengan cara yang sulit; untuk pola lainnya, lihat praktik terbaik CLAUDE.md kami tentang konvensi file konfigurasi.
Kedua, field model: meng-override model apa pun yang sedang dipilih pengguna untuk sesi tersebut. Berguna ketika sebuah command ringan secara komputasi dan Anda ingin memaksanya berjalan pada varian yang lebih kecil, lihat panduan kami tentang pemilihan model untuk memilih antara Opus 4.7 dan Sonnet untuk berbagai tipe command.
Field disable-model-invocation: true adalah jaring pengaman Anda untuk command yang bersifat destruktif. Setel pada /deploy-prod atau /drop-database dan agent lain tidak akan dapat memanggil command tersebut secara programatik, hanya manusia yang mengetik di chat yang dapat memicunya.
Apa Saja 4 Pola Argumen yang Akan Benar-Benar Anda Gunakan?
Empat pola mencakup sekitar 95% perintah slash Claude Code di dunia nyata: (1) flag boolean seperti /deploy --dry-run yang diurai LLM dari $ARGUMENTS, (2) flag bernilai seperti /test --filter auth yang diekstrak dari $ARGUMENTS, (3) argumen posisional wajib + flag opsional seperti /fix-issue 123 --priority high yang menggabungkan $1 dan $ARGUMENTS, dan (4) argumen posisional bertipe ketat seperti /migrate-component SearchBar React Vue menggunakan $0/$1/$2.
Pilih yang sesuai dengan bentuk perintah Anda. Berikut file .md yang berfungsi untuk masing-masing pola.

Pola 1: Flag Boolean (--dry-run)
Saat Anda menginginkan UX flag CLI dan flag tersebut hanya berupa on/off, andalkan LLM untuk mendeteksinya di dalam $ARGUMENTS. Tanpa logika parsing, tanpa mengotak-atik argumen posisional, cukup deskripsikan aturannya di dalam prompt.
---
description: Deploy to staging or production
argument-hint: [--dry-run]
allowed-tools: Bash(git:*) Bash(npm:*) Read
---
Deploy the current branch to staging.
Arguments passed: $ARGUMENTS
If "$ARGUMENTS" contains "--dry-run", DO NOT actually deploy. Instead, print the deployment plan: which files would change, which env vars would be set, and which commands would run. Stop after printing the plan.
Otherwise, proceed with the real deployment using `git push staging main` and `npm run deploy:staging`.Ketik /deploy --dry-run dan LLM akan melihat flag tersebut, mencetak rencananya, lalu berhenti. Ketik /deploy dan ia akan langsung merilisnya. Pengguna tidak melakukan parsing sama sekali, LLM yang mengerjakan semuanya, yang memang persis seperti keahlian LLM.
Pola 2: Flag Bernilai (--filter <pattern>)
Ide yang sama, tetapi kali ini flag membawa sebuah nilai. LLM membaca --filter auth dari $ARGUMENTS dan menggunakan substring setelahnya.
---
description: Run the test suite, optionally filtered
argument-hint: [--filter <pattern>]
allowed-tools: Bash(npm:*) Read
---
Run the project's test suite.
Arguments: $ARGUMENTS
If "$ARGUMENTS" contains "--filter <pattern>", run only tests matching <pattern>. Use `npm test -- --grep <pattern>` for the actual command.
If no `--filter` is present, run the full suite with `npm test`.
Report pass/fail counts at the end./test --filter auth hanya menjalankan pengujian auth. /test menjalankan semuanya. LLM mengekstrak pola setelah --filter secara andal karena Claude memang benar-benar mahir dalam ekstraksi teks terstruktur semacam ini, jauh lebih andal dari yang orang kira.
Pola 3: Argumen Posisional Wajib + Flag Opsional
Ini adalah pola hibrida yang paling sering kami gunakan di pustaka perintah kami sendiri. $1 membawa argumen wajib, $ARGUMENTS membawa semuanya (sehingga LLM tetap bisa mengenali flag opsional). Ini adalah kombinasi paling bersih ketika satu argumen bersifat mutlak dan sisanya adalah konteks bebas.
---
description: Fix a GitHub issue
argument-hint: <issue-number> [--priority high|medium|low] [context...]
allowed-tools: Bash(gh:*) Bash(git:*) Read Edit
---
Fix GitHub issue #$1.
Full arguments: $ARGUMENTS
Steps:
1. Run `gh issue view $1` to load the issue body.
2. Read the codebase to locate the relevant file(s).
3. If "$ARGUMENTS" contains "--priority high", create a hotfix branch off main. Otherwise branch off develop.
4. Apply the fix, run tests, and open a PR linked to the issue.
Anything else in $ARGUMENTS after the issue number is freeform context — fold it into your understanding of the bug.Panggil sebagai /fix-issue 1234 --priority high the login form blanks the email field after a failed attempt. $1 akan menghasilkan 1234. $ARGUMENTS akan menghasilkan seluruh string di belakangnya, yang dengan mudah diurai oleh LLM untuk menemukan flag prioritas sekaligus deskripsi bebasnya.
Kami menggunakan kombinasi $1 + $ARGUMENTS persis seperti ini di perintah /fix-issue kami, $1 untuk nomor issue, sisanya untuk konteks bebas yang diurai oleh LLM. Ini menjadi pola dengan ROI tertinggi selama setahun penggunaan Claude Code setiap hari.
Pola 4: Positional Ketat (Bertipe)
Jika setiap argumen wajib diisi dan urutannya penting, hilangkan $ARGUMENTS sepenuhnya. Gunakan $0/$1/$2 (atau argumen bernama melalui field frontmatter arguments:) untuk slot bertipe yang tidak ambigu.
---
description: Migrate a component between frameworks
argument-hint: <component> <from-framework> <to-framework>
arguments: [component, fromFramework, toFramework]
allowed-tools: Read Edit Write
---
Migrate the component named "$component" from $fromFramework to $toFramework.
1. Read the existing component file (search for `$component.{jsx,tsx,vue,svelte}`).
2. Translate the component idioms from $fromFramework to $toFramework: lifecycle methods, state handling, prop syntax, event binding.
3. Write the new file in the matching extension for $toFramework.
4. Print a diff summary at the end.
If $fromFramework or $toFramework is unsupported, abort and tell the user which frameworks ARE supported (React, Vue, Svelte, Solid).Panggil dengan /migrate-component SearchBar React Vue. Deklarasi argumen bernama membuat autocomplete dan isi prompt terdokumentasi dengan sendirinya, siapa pun yang membaca migrate-component.md dapat langsung mengenali slot mana yang mana. Pola ini sangat cocok untuk perintah dengan tiga atau lebih argumen wajib. Anda juga dapat menemukan gaya ini di berbagai pustaka komunitas seperti wshobson/commands di GitHub.
Flag boolean dan nilai berfungsi karena LLM adalah parser yang fleksibel. Positional ketat berfungsi karena tidak memerlukan kecerdasan LLM. Mencampurkan keduanya adalah rahasianya.
Kapan Sebaiknya Anda Menggunakan $ARGUMENTS vs Positional vs Named?
Gunakan $ARGUMENTS ketika argumen bergaya flag CLI dan Anda menginginkan parsing yang fleksibel oleh LLM. Gunakan positional $1/$2 ketika argumen memiliki tipe, berurutan, dan Anda menginginkan nol ambiguitas dari LLM. Gunakan named arguments: ketika terdapat 3+ argumen dan kejelasan di autocomplete lebih penting daripada keringkasan. Berikut matriks keputusannya:
| Kasus penggunaan | Pilihan terbaik | Sintaks | Kelebihan | Kekurangan | Contoh |
|---|---|---|---|---|---|
| UX flag CLI dengan argumen opsional | $ARGUMENTS | $ARGUMENTS di body | Fleksibel, meniru UX Unix | Parsing di sisi LLM, tanpa validasi | /deploy --staging --dry-run |
| Argumen wajib yang bertipe dan berurutan | Positional $0/$1 | $0 $1 $2 di body | Nol ambiguitas, cepat | Rapuh terhadap urutan argumen | /migrate Button React Vue |
| 3+ argumen yang mengutamakan kejelasan | Named via arguments: | arguments: [a, b, c] lalu $a $b $c | Mendokumentasikan diri sendiri | Frontmatter yang bertele-tele | /issue 123 main high |
| Campuran wajib + opsional | Hybrid ($1 + $ARGUMENTS) | $1 then $ARGUMENTS | Terbaik dari keduanya | Dua model mental dalam satu file | /fix-issue 123 --priority high |

Insting yang dimiliki kebanyakan developer adalah meraih $ARGUMENTS terlebih dahulu karena terasa paling dekat dengan dunia bash yang mereka kenal. Itu sah-sah saja untuk prototipe, tetapi positional yang bertipe benar-benar lebih baik ketika kontraknya sudah stabil. LLM tidak perlu mem-parsing $1, karena itu sudah menjadi string yang bersih.
Aturan praktis yang kasar: jika Anda dapat mendeskripsikan signature perintah dalam satu kalimat bahasa Inggris tanpa menggunakan kata "or" dan "optionally," gunakan positional. Jika Anda membutuhkan kata-kata tersebut, gunakan $ARGUMENTS.
Apakah Slash Command Sekarang Sama dengan Skills?
Pada musim semi 2026, Anthropic telah menggabungkan custom command ke dalam sistem skills yang lebih luas, tetapi file .claude/commands/*.md masih berfungsi dan menggunakan frontmatter yang sama. Skill adalah sebuah direktori (.claude/skills/foo/SKILL.md beserta file-file pendukung) dengan kontrol pemanggilan tambahan seperti disable-model-invocation. Command adalah satu file .md tunggal. Aturan substitusinya sama, hanya kemasannya yang berbeda.
Berikut perbedaan praktisnya:
| Aspek | .claude/commands/foo.md | .claude/skills/foo/ |
|---|---|---|
| Bentuk file | Satu file .md tunggal | Direktori berisi SKILL.md + file-file pendukung |
| Paling cocok untuk | Command sekali pakai yang cepat, otomatisasi lokal proyek | Bundle yang dapat digunakan ulang dengan template, referensi, sub-file |
| Kontrol pemanggilan | Hanya frontmatter | Frontmatter + disable-model-invocation per file |
| Penanganan argumen | Identik ($ARGUMENTS, $1, bernama) | Identik ($ARGUMENTS, $1, bernama) |

Jadi tidak, .claude/commands/ tidak usang. Anthropic secara eksplisit tetap mempertahankan bentuk file ini agar berfungsi ketika mereka menggabungkan kedua sistem tersebut, karena terlalu banyak proyek yang memiliki pustaka command yang terkunci dalam version control. Jika Anda menginginkan file-file pendukung (seperti referensi CONTRIBUTING.md yang dimuat oleh skill Anda, atau template.json yang disalinnya), gunakan skills. Jika tidak, tetap gunakan commands.
Penggabungan ini merupakan bagian dari dorongan yang lebih luas menuju standar terbuka agentskills.io, dan ini adalah salah satu dari beberapa perubahan v2.1.x yang layak diketahui, lihat ringkasan kami tentang fitur-fitur Claude Code v2.1 untuk gambaran lengkap fitur-fiturnya dan tutorial skills kami untuk panduan skills yang lebih mendalam.
Mengapa $ARGUMENTS Saya Tidak Tersubstitusi? Bug Umum yang Diperbaiki
Lima alasan umum mengapa $ARGUMENTS gagal tersubstitusi: (1) token huruf kecil atau singkatan ($args, $ARGS, $arguments, harus persis $ARGUMENTS), (2) argumen multi-kata tidak diberi tanda kutip (/cmd hello world akan terpisah; /cmd "hello world" menjaganya tetap utuh), (3) allowed-tools dipisahkan koma, bukan spasi, (4) file perintah tidak berada di .claude/commands/ atau .claude/skills/, (5) sesi Claude Code perlu dimuat ulang setelah mengedit file tersebut.
$ARGUMENTS Muncul Secara Harfiah di Prompt LLM
Gejala: Prompt Anda menampilkan $ARGUMENTS sebagai teks biasa dalam respons model, seolah-olah pengguna mengabaikannya. Penyebab: Huruf besar/kecil atau ejaan salah. Token-nya secara harfiah adalah $ARGUMENTS, delapan karakter, semua huruf kapital. Perbaikan: Buka file .md, cari dengan grep $args, $ARGS, $arguments, ${ARGUMENTS}, lalu ganti dengan $ARGUMENTS. Bug salah ketik $args ini pernah menimpa setiap developer di tim kami setidaknya sekali; ini adalah bug dengan volume tertinggi dalam keluarga bug "perintah slash tidak dikenal".
Argumen Multi-Kata Terpisah Secara Tak Terduga
Gejala: Anda menjalankan /migrate-component Search Bar React Vue dan $1 adalah Search, $2 adalah Bar. Penyebab: Ruang kosong memisahkan argumen posisional. Solusi: Beri tanda kutip pada argumen multi-kata: /migrate-component "Search Bar" React Vue. Sekarang $1 adalah Search Bar. Ini sesuai dengan perilaku shell, yang merupakan model mental yang memang sengaja ditiru oleh penggunaan ini.
allowed-tools Tidak Diterapkan
Gejala: Perintah berjalan, tetapi Claude menolak memanggil tool yang Anda kira sudah masuk daftar putih, atau justru memanggil tool yang tidak Anda cantumkan. Penyebab: Dipisahkan dengan koma, bukan spasi. Solusi: Ubah allowed-tools: Bash, Read, Edit menjadi allowed-tools: Bash Read Edit. Untuk sub-pola tool, gunakan format Bash(git:*) Bash(npm:*) Read.
Perintah Tidak Muncul di Autocomplete /
Gejala: Anda mengetik / dan perintah Anda tidak ada dalam daftar. Penyebab: Lokasi file, frontmatter yang hilang, atau disable-model-invocation yang disetel tidak tepat. Solusi: Pastikan file berada di .claude/commands/yourcmd.md (atau .claude/skills/yourcmd/SKILL.md) relatif terhadap root proyek Anda. Pastikan frontmatter memiliki setidaknya field description:. Jika Anda menyetel disable-model-invocation: true, perintah tidak akan ditampilkan ke agen lain, tetapi tetap muncul di menu / yang diketik oleh manusia.
Anda Sudah Mengedit File .md tetapi Tidak Ada yang Berubah
Gejala: Anda sudah memperbaiki bug, menyimpan file, menjalankan perintah lagi, tetapi perilaku rusak yang sama tetap muncul. Penyebab: Claude Code menyimpan cache file perintah saat sesi dimulai. Solusi: Keluar dan luncurkan ulang Claude Code, atau jalankan /reload jika versi Anda mendukungnya.
Claude Code membaca file
.mdsaat sesi dimulai. Jika Anda mengedit sebuah perintah dan 'tidak ada perubahan', mulai ulang sesi Anda sebelum mengasumsikan adanya bug yang lebih dalam.
Untuk kasus-kasus khusus di luar lima hal ini, issue di repo Claude Code adalah tempat terbaik untuk mencari. Sebagian besar bug substitusi aneh yang pernah kami temui merupakan salah satu variasi dari hal-hal di atas.
FAQ: Argumen Slash Command Claude Code
Bagaimana cara meneruskan argumen ke perintah slash Claude Code?
Ketik string argumen setelah nama perintah: /greet World. Di dalam file .md perintah Anda, rujuk nilai tersebut sebagai $ARGUMENTS (seluruh string), $1 (argumen posisional pertama), atau $variableName (jika Anda mendeklarasikan arguments: [variableName] di frontmatter). Sistem akan menggantikan token tersebut sebelum mengirim prompt ke LLM.
Apa itu $ARGUMENTS di Claude Code?
$ARGUMENTS adalah token substitusi dalam file perintah slash kustom yang akan diganti oleh Claude Code dengan seluruh string argumen yang diketik pengguna setelah nama perintah. Jika pengguna menjalankan /deploy --staging --dry-run, maka $ARGUMENTS akan menjadi string literal --staging --dry-run di dalam prompt yang telah dirender, bahkan sebelum LLM melihatnya.
Bisakah slash command Claude Code menerima flag bergaya CLI seperti --json?
Secara bawaan tidak, penggunaannya tidak memiliki parser flag untuk perintah kustom. Anda cukup menulis --json ke dalam $ARGUMENTS, lalu prompt Anda menginstruksikan LLM untuk mendeteksinya dan bertindak sesuai. Cara ini berhasil karena Claude adalah parser yang fleksibel untuk teks terstruktur. Perintah bawaan seperti /clear dan /help memang memiliki flag sungguhan, tetapi perintah kustom yang Anda buat tetap mengikuti aturan substitusi saja.
Apa perbedaan antara $1, $ARGUMENTS, dan $name di Claude Code?
$1 adalah argumen posisional pertama yang dipisahkan spasi ($2 adalah yang kedua, dan seterusnya). $ARGUMENTS adalah seluruh string argumen apa adanya, termasuk semua bagian posisional dan flag apa pun. $name adalah argumen bernama yang dideklarasikan di bidang frontmatter arguments: [name], berguna saat Anda menginginkan slot posisional yang mendokumentasikan dirinya sendiri tanpa pengindeksan numerik.
Bagaimana cara kerja argument-hint di Claude Code?
argument-hint adalah field frontmatter yang mengontrol apa yang ditampilkan menu autocomplete / di samping nama perintah Anda. Mengatur argument-hint: <issue-number> [--priority high] akan menampilkan template tersebut persis seperti adanya setelah pengguna mengetik /. Ini hanya soal UX—tidak memvalidasi atau mem-parse argumen. Tetap layak diatur karena ini adalah dokumentasi termurah yang pernah Anda tulis.
Bagaimana cara membuat slash command kustom dengan beberapa argumen?
Ada dua opsi yang rapi. Untuk posisional: rujuk $1, $2, $3 di dalam body prompt Anda. Untuk named: deklarasikan arguments: [first, second, third] di frontmatter lalu rujuk $first, $second, $third. Named lebih mudah dibaca untuk tiga argumen atau lebih. Gunakan $ARGUMENTS hanya jika Anda ingin LLM mem-parse string bebas di akhir setelah slot posisional yang wajib diisi.
Apakah .claude/commands/ sudah tidak digunakan lagi dan digantikan oleh .claude/skills/?
Tidak. Anthropic telah menggabungkan kedua sistem ini pada musim semi 2026, tetapi secara tegas tetap mempertahankan agar .claude/commands/*.md berfungsi dengan aturan substitusi yang identik. Gunakan commands untuk otomasi satu file dan skills untuk bundel multi-file (SKILL.md beserta template atau referensinya). Frontmatter-nya sama, perilaku $ARGUMENTS-nya sama, hanya kemasannya yang berbeda. Keduanya berstatus kelas satu sejak v2.1.126.
Mengapa $ARGUMENTS tidak tersubstitusi di perintah saya?
Tiga penyebab teratas, diurutkan berdasarkan frekuensi: kesalahan huruf besar-kecil (harus huruf kapital $ARGUMENTS, bukan $args atau $arguments), lokasi file salah (harus berada di .claude/commands/ atau .claude/skills/), atau sesi yang sudah usang (Claude Code membaca file perintah saat sesi dimulai, jadi mulai ulang setelah mengedit). Jika ketiganya sudah benar, jalankan /echo-args foo dengan contoh minimal dari H2 #1 untuk mengisolasi masalahnya.
Bisakah saya mewajibkan argumen tertentu?
Tidak di tingkat penggunaan, tidak ada validasi argumen wajib yang bersifat native. Polanya adalah dengan menginstruksikan LLM di dalam prompt Anda: "Jika $1 kosong, berhentilah dan beri tahu pengguna untuk memberikan nomor issue." Model yang akan menegakkan kontrak tersebut. Cara ini memang tidak sepenuhnya kebal, tetapi dalam praktiknya cukup andal untuk penggunaan sehari-hari, terutama jika dipadukan dengan argument-hint yang jelas.
Apakah model: di frontmatter mengesampingkan flag CLI?
Ya, frontmatter yang menang. Jika file perintah Anda mendeklarasikan model: claude-haiku-4, perintah tersebut akan berjalan di Haiku, apa pun model yang dipilih pengguna untuk sesi tersebut. Ini berguna untuk perintah murah yang sering dipanggil yang ingin Anda jauhkan dari Opus. Lihat panduan kami tentang mengganti model Claude untuk memilih varian yang tepat untuk setiap jenis perintah.
Kesimpulan
Empat pola. Pilih yang sesuai dengan bentuk perintah Anda:
- Flag boolean (
--dry-run), tulis ke$ARGUMENTS, biarkan LLM yang mendeteksinya. - Flag bernilai (
--filter <pattern>), pendekatan yang sama, LLM mengekstrak nilainya. - Argumen posisional wajib + flag opsional,
$1untuk yang wajib ada,$ARGUMENTSuntuk sisanya. - Posisional ketat,
$0/$1/$2(atau diberi nama melaluiarguments:) ketika setiap slot wajib dan berurutan.
Sekarang perintah Anda sudah parametrik, langkah selanjutnya adalah menghubungkannya ke alur kerja agen—mulailah dengan tutorial Claude Skills untuk peningkatan pengemasan multi-file, atau jelajahi alat coding AI alternatif jika Anda sedang membandingkan harness. Bagaimanapun juga, folder .claude/commands/ Anda baru saja menjadi jauh lebih berguna.