
Jak dodać flagi do poleceń ukośnikowych w Claude Code: 4 wzorce, które naprawdę działają
Claude Code w rzeczywistości nie parsuje --flag tak, jak można by się spodziewać w przypadku niestandardowych poleceń ukośnikowych, ale cztery wzorce zapewniają dokładnie taki sam UX, a trzy z nich są czystsze niż kiedykolwiek było parsowanie CLI. Oto jak prawidłowo dodać flagi do poleceń ukośnikowych w Claude Code — wraz z działającymi plikami .md, które możesz skopiować już dziś.
Szybka odpowiedź:
- Claude Code nie parsuje flag CLI (
--json,--verbose) dla niestandardowych poleceń — to narzędzie nie ma parsera flag. - Aby uzyskać UX w stylu CLI, zapisuj flagi w
$ARGUMENTSi pozwól, by LLM interpretował je jako język naturalny. - Dla argumentów typowanych użyj pozycyjnych
$1/$2lub argumentów nazwanych zadeklarowanych w polu frontmatterarguments:. - Dokumentuj oczekiwane flagi w
argument-hint:, aby autouzupełnianie/wyświetlało je użytkownikowi.
Jak właściwie działają argumenty poleceń slash w Claude Code?
Claude Code przed wysłaniem polecenia do LLM podstawia trzy rodzaje tokenów: $ARGUMENTS (cały ciąg po nazwie polecenia), pozycyjne $0/$1/$2 (segmenty w cudzysłowach w stylu shella) oraz nazwane $variableName zadeklarowane w frontmatterze. Nie ma wbudowanego parsera flag CLI — --dry-run trafia do $ARGUMENTS jako dosłowny tekst.
I tu właśnie wszyscy się potykają. Kiedy wpisujesz /deploy --staging --dry-run, Claude Code nie uruchamia argparse na --staging --dry-run. Mechanizm wkleja cały ten ciąg w każde miejsce, w którym Twój plik .md odwołuje się do $ARGUMENTS, a następnie wysyła wyrenderowany prompt do modelu. LLM widzi --staging --dry-run jako zwykły tekst i sam decyduje, co z tym zrobić.
To nie bug — tak to zaprojektowano. Mechanizm jest warstwą podstawiania, nie parserem. Wbudowane polecenia, takie jak /clear i /help (zob. oficjalna dokumentacja CLI), mają flagi, ale polecenia niestandardowe, które tworzysz, rządzą się innymi prawami.
Mechanizm Claude Code podstawia tokeny, a następnie przekazuje wyrenderowany prompt do LLM. Nie ma żadnego parsera flag.
W naszej własnej pracy z Claude Code najczęstsze nieporozumienie dotyczy właśnie tego — programiści spędzają godzinę, próbując zrozumieć, dlaczego --verbose „nie jest wykrywane", zanim zdadzą sobie sprawę, że to LLM jest parserem. Od wersji Claude Code v2.1.126 (maj 2026) zachowanie to jest udokumentowane w oficjalnej dokumentacji poleceń slash i nie zmieni się w najbliższym czasie. Polecenia slash są bliźniaczym prymitywem wobec hooków Claude Code — oba rozszerzają mechanizm, ale polecenia wyzwalają się na dane wejściowe użytkownika, podczas gdy hooki wyzwalają się na zdarzenia narzędzi.
Oto najmniejsze możliwe polecenie niestandardowe, które dowodzi modelu podstawiania:
---
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.Zapisz to jako .claude/commands/echo-args.md, wpisz /echo-args hello world --foo, a LLM zobaczy dosłowny ciąg hello world --foo podstawiony do promptu. To cały model mentalny. Aby dokładniej zrozumieć, jak pliki poleceń odnoszą się do szerszego systemu umiejętności, zobacz nasz Wprowadzenie do Skills.
Zbuduj swoją pierwszą parametryczną komendę ukośnikową w 5 minut
Utwórz plik .claude/commands/greet.md z trzema liniami frontmatteru i jedną linią promptu odwołującą się do $ARGUMENTS. Uruchom ponownie Claude Code, wpisz /greet World i zobacz, jak World zostaje podstawione do promptu, zanim zobaczy go LLM. To cała ceremonia — pięć kroków, bez żadnych narzędzi do budowania.
Oto kompletny przepis, krok po kroku:
- Utwórz katalog. Z katalogu głównego projektu wykonaj
mkdir -p .claude/commands. Folder.claude/znajduje się obok Twojego kodu; komendy w nim umieszczone są automatycznie wykrywane, gdy Claude Code rozpoczyna sesję. - Napisz plik komendy. Zapisz poniższy fragment jako
.claude/commands/greet.md. - Przeładuj sesję. Zamknij i uruchom ponownie Claude Code (lub wykonaj
/reload, jeśli Twoja wersja to obsługuje). Komendy są odczytywane jednokrotnie przy starcie sesji. - Wywołaj ją. Wpisz
/greet Worldna czacie. - Zweryfikuj podstawienie. Otwórz transkrypcję i upewnij się, że LLM zobaczył
Worldwstawione w treść promptu, a nie dosłowny token$ARGUMENTS.
Oto kompletny plik:
---
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.Oraz interakcja w terminalu:
> /greet World
Hey World, great to see you! What are you working on today?To wszystko. Masz teraz parametryczną komendę ukośnikową. Pole argument-hint sprawia, że w menu autouzupełniania / obok Twojej komendy wyświetla się <name> — drobny akcent UX, duża korzyść.
Jeśli
$ARGUMENTSnie zostaje podstawione, w 9 na 10 przypadków wynika to z tego, że wpisano$argslub$ARGS— token to dosłownie wielkie litery.
W tokenie liczy się wielkość liter i dokładna pisownia. $ARGUMENTS działa. $arguments, $args, $ARGS i ${ARGUMENTS} po cichu zawodzą — trafiają do LLM jako dosłowny tekst i model widzi po prostu śmieci. Zanim założysz głębszy błąd, trzykrotnie sprawdź pisownię.
Jakie pola frontmatter kontrolują obsługę argumentów?
Pięć pól frontmatter określa sposób, w jaki polecenie ukośnikowe obsługuje argumenty: argument-hint (to, co wyświetla autouzupełnianie), allowed-tools (co polecenie może wywoływać), arguments (deklaracja nazwanych argumentów), model (który wariant Claude je uruchamia) oraz disable-model-invocation (blokuje polecenie wyłącznie do wywoływania przez użytkownika). Razem pokrywają one praktycznie każdy wzorzec parametryczny, jakiego będziesz potrzebować.
Oto kompletny opis frontmatter dla niestandardowych poleceń Claude Code v2.1.x:
| Pole | Przeznaczenie | Przykład | Wymagane? |
|---|---|---|---|
description: | Jednowierszowe podsumowanie w menu / | Run staging deploy | Zalecane |
argument-hint: | Podpowiedź autouzupełniania wyświetlana po nazwie polecenia | [--dry-run] [--region us] | Zalecane |
allowed-tools: | Biała lista narzędzi, które polecenie może wywoływać | Bash(git:*) Read Edit | Opcjonalne |
arguments: | Deklaracja nazwanych argumentów | [issue, branch] | Opcjonalne |
model: | Nadpisanie modelu dla tego polecenia | claude-opus-4-7 | Opcjonalne |
disable-model-invocation: | Blokuje agentowi możliwość wywoływania tego polecenia | true | Opcjonalne |
context: fork | Uruchomienie w izolowanym kontekście | fork | Opcjonalne |
Dwa haczyki, które warto przypiąć do monitora. Po pierwsze, allowed-tools jest rozdzielane spacjami, a nie przecinkami. Zapisanie Bash(git:*), Read, Edit po cichu nie doda niczego do białej listy — parser traktuje cały ciąg jako jeden nieprawidłowo sformułowany wpis. Użyj Bash(git:*) Read Edit. Przekonaliśmy się o tym na własnej skórze; więcej podobnych wzorców znajdziesz w naszym artykule o najlepszych praktykach CLAUDE.md dotyczących konwencji plików konfiguracyjnych.
Po drugie, pole model: nadpisuje model aktualnie wybrany przez użytkownika dla danej sesji. Przydatne, gdy polecenie jest tanie obliczeniowo i chcesz wymusić jego uruchomienie na mniejszym wariancie — zobacz nasz przewodnik po wyborze modelu, aby dowiedzieć się, jak wybierać między Opus 4.7 a Sonnet dla różnych typów poleceń.
Pole disable-model-invocation: true to Twoja siatka bezpieczeństwa dla destrukcyjnych poleceń. Ustaw je dla /deploy-prod lub /drop-database, a inne agenty nie będą w stanie wywoływać tych poleceń programowo — jedynie człowiek piszący na czacie może je uruchomić.
Jakie są 4 wzorce argumentów, których faktycznie będziesz używać?
Cztery wzorce obejmują mniej więcej 95% rzeczywistych poleceń ukośnikowych Claude Code: (1) flaga logiczna w stylu /deploy --dry-run parsowana przez LLM z $ARGUMENTS, (2) flaga z wartością w stylu /test --filter auth wyodrębniana z $ARGUMENTS, (3) wymagany argument pozycyjny + opcjonalna flaga w stylu /fix-issue 123 --priority high łączący $1 i $ARGUMENTS oraz (4) ściśle typowany argument pozycyjny w stylu /migrate-component SearchBar React Vue wykorzystujący $0/$1/$2.
Wybierz ten, który pasuje do kształtu Twojego polecenia. Oto działający plik .md dla każdego z nich.

Wzorzec 1: Flaga logiczna (--dry-run)
Gdy zależy Ci na ergonomii flag CLI, a flaga ma tylko dwa stany — włączony lub wyłączony — pozwól, aby LLM wykrył ją wewnątrz $ARGUMENTS. Żadnej logiki parsowania, żadnego żonglowania pozycjami argumentów — po prostu opisz regułę w prompcie.
---
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`.Wpisz /deploy --dry-run, a LLM zobaczy flagę, wyświetli plan i zatrzyma się. Wpisz /deploy, a wdroży zmiany. Użytkownik nie napisał ani linijki parsowania — całą pracę wykonał LLM, czyli dokładnie to, w czym jest dobry.
Wzorzec 2: Flaga z wartością (--filter <pattern>)
Ten sam pomysł, ale teraz flaga niesie wartość. LLM odczytuje --filter auth z $ARGUMENTS i używa podciągu następującego po niej.
---
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 uruchamia tylko testy auth. /test uruchamia wszystko. LLM niezawodnie wyodrębnia wzorzec po --filter, ponieważ Claude jest naprawdę dobry w tego typu ekstrakcji tekstu strukturalnego — znacznie bardziej niezawodny, niż można by się spodziewać.
Wzorzec 3: Wymagany argument pozycyjny + opcjonalna flaga
To hybryda, której najczęściej używamy w naszej własnej bibliotece komend. $1 przenosi wymagany argument, a $ARGUMENTS zawiera wszystko (dzięki czemu LLM wciąż może wyłapać opcjonalne flagi). To najczystsze połączenie, gdy jeden argument jest niepodważalny, a reszta to swobodny kontekst.
---
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.Wywołaj jako /fix-issue 1234 --priority high the login form blanks the email field after a failed attempt. $1 przyjmuje wartość 1234. $ARGUMENTS przyjmuje cały końcowy ciąg, który LLM chętnie parsuje, wyodrębniając zarówno flagę priorytetu, jak i swobodny opis.
Tego właśnie połączenia $1 + $ARGUMENTS używamy w naszej komendzie /fix-issue — $1 dla numeru zgłoszenia, a reszta dla swobodnego kontekstu parsowanego przez LLM. To wzorzec o najwyższym zwrocie z inwestycji w ciągu roku codziennego korzystania z Claude Code.
Wzorzec 4: Ścisły pozycyjny (typowany)
Gdy każdy argument jest wymagany, a kolejność ma znaczenie, całkowicie pomiń $ARGUMENTS. Użyj $0/$1/$2 (lub nazwanych argumentów za pomocą pola arguments: w frontmatterze), aby uzyskać jednoznaczne, typowane sloty.
---
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).Wywołaj jako /migrate-component SearchBar React Vue. Deklaracja nazwanych argumentów sprawia, że autouzupełnianie i treść promptu są samodokumentujące się — każdy, kto czyta migrate-component.md, od razu widzi, który slot jest który. Ten wzorzec sprawdza się doskonale w przypadku poleceń z trzema lub więcej wymaganymi argumentami. Możesz również zobaczyć ten styl w bibliotekach społeczności, takich jak wshobson/commands na GitHubie.
Flagi logiczne i flagi wartości działają, ponieważ LLM jest elastycznym parserem. Ścisły wzorzec pozycyjny działa, ponieważ nie wymaga żadnej inteligencji LLM. Mieszanie obu podejść to cały sekret.
Kiedy używać $ARGUMENTS, a kiedy argumentów pozycyjnych lub nazwanych?
Używaj $ARGUMENTS, gdy argumenty mają postać flag CLI i zależy Ci na elastycznym parsowaniu przez LLM. Używaj argumentów pozycyjnych $1/$2, gdy argumenty są typowane, uporządkowane i chcesz całkowicie wyeliminować niejednoznaczność po stronie LLM. Używaj argumentów nazwanych arguments:, gdy masz 3 lub więcej argumentów, a czytelność w autouzupełnianiu jest ważniejsza niż zwięzłość. Oto macierz decyzyjna:
| Przypadek użycia | Najlepszy wybór | Składnia | Zalety | Wady | Przykład |
|---|---|---|---|---|---|
| UX w stylu flag CLI z opcjonalnymi argumentami | $ARGUMENTS | $ARGUMENTS w treści | Elastyczne, odzwierciedla UX Uniksa | Parsowanie po stronie LLM, brak walidacji | /deploy --staging --dry-run |
| Typowane, uporządkowane argumenty wymagane | Pozycyjne $0/$1 | $0 $1 $2 w treści | Zero niejednoznaczności, szybko | Wrażliwe na kolejność argumentów | /migrate Button React Vue |
| 3+ argumentów, gdzie liczy się czytelność | Nazwane przez arguments: | arguments: [a, b, c], następnie $a $b $c | Samodokumentujące się | Rozwlekły frontmatter | /issue 123 main high |
| Mieszane: wymagane + opcjonalne | Hybryda ($1 + $ARGUMENTS) | $1 then $ARGUMENTS | Najlepsze z obu światów | Dwa modele mentalne w jednym pliku | /fix-issue 123 --priority high |

Instynkt większości programistów podpowiada, by najpierw sięgnąć po $ARGUMENTS, ponieważ wydaje się ono najbliższe znanemu im światu basha. W przypadku prototypów to w porządku, ale typowane argumenty pozycyjne są naprawdę lepsze, gdy kontrakt jest stabilny. LLM nie musi parsować $1 — to już czysty ciąg znaków.
Orientacyjna zasada: jeśli potrafisz opisać sygnaturę polecenia w jednym zdaniu po angielsku bez użycia słów „lub" i „opcjonalnie", wybierz argumenty pozycyjne. Jeśli potrzebujesz tych słów, wybierz $ARGUMENTS.
Czy polecenia ukośnikowe to teraz to samo co umiejętności?
Firma Anthropic wiosną 2026 roku włączyła polecenia niestandardowe do szerszego systemu umiejętności, ale pliki .claude/commands/*.md nadal działają i korzystają z tego samego frontmatteru. Umiejętność to katalog (.claude/skills/foo/SKILL.md oraz pliki pomocnicze) z dodatkową kontrolą wywoływania, taką jak disable-model-invocation. Polecenie to pojedynczy plik .md. Te same zasady podstawiania, inne opakowanie.
Oto praktyczna różnica:
| Aspekt | .claude/commands/foo.md | .claude/skills/foo/ |
|---|---|---|
| Postać pliku | Pojedynczy plik .md | Katalog z plikiem SKILL.md + pliki pomocnicze |
| Najlepsze do | Szybkie, jednorazowe polecenia, automatyzacje lokalne dla projektu | Wielokrotnego użytku pakiety z szablonami, odniesieniami, podplikami |
| Kontrola wywoływania | Tylko frontmatter | Frontmatter + disable-model-invocation dla każdego pliku |
| Obsługa argumentów | Identyczna ($ARGUMENTS, $1, nazwane) | Identyczna ($ARGUMENTS, $1, nazwane) |

Więc nie, .claude/commands/ nie jest przestarzałe. Anthropic celowo utrzymał działanie postaci plikowej przy łączeniu systemów — zbyt wiele projektów ma biblioteki poleceń przypięte w kontroli wersji. Jeśli potrzebujesz plików pomocniczych (jak odniesienie CONTRIBUTING.md, które wczytuje twoja umiejętność, albo template.json, który kopiuje), sięgnij po umiejętności. W przeciwnym razie zostań przy poleceniach.
To połączenie jest częścią szerszego dążenia do otwartego standardu agentskills.io i stanowi jedną z kilku zmian w wersji 2.1.x, które warto znać — zobacz nasze podsumowanie funkcji Claude Code v2.1, aby poznać pełny krajobraz funkcji, oraz nasz poradnik o umiejętnościach, aby uzyskać głębsze wprowadzenie do umiejętności.
Dlaczego $ARGUMENTS się nie podstawia? Najczęstsze błędy i ich rozwiązania
Pięć najczęstszych powodów, dla których $ARGUMENTS nie zostaje podstawione: (1) token zapisany małymi literami lub w skróconej formie ($args, $ARGS, $arguments — musi być dokładnie $ARGUMENTS), (2) wielowyrazowe argumenty bez cudzysłowu (/cmd hello world zostaje podzielone; /cmd \"hello world\" zachowuje całość), (3) allowed-tools rozdzielone przecinkami zamiast spacjami, (4) plik polecenia nie znajduje się w .claude/commands/ ani .claude/skills/, (5) sesja Claude Code wymaga ponownego załadowania po edycji pliku.
$ARGUMENTS pojawia się dosłownie w prompcie LLM
Objaw: Twój prompt wyświetla $ARGUMENTS jako zwykły tekst w odpowiedzi modelu, tak jakby użytkownik go zignorował. Przyczyna: Błędna wielkość liter lub błędna pisownia. Token to dosłownie $ARGUMENTS, osiem znaków, same wielkie litery. Rozwiązanie: Otwórz plik .md, wyszukaj przez grep $args, $ARGS, $arguments, ${ARGUMENTS} i zamień na $ARGUMENTS. Błąd literówki $args dotknął przynajmniej raz każdego programistę w naszym zespole; to najczęściej występujący błąd w rodzinie „nieznane polecenie slash”.
Argument wielowyrazowy jest nieoczekiwanie dzielony
Objaw: Uruchomiono polecenie /migrate-component Search Bar React Vue, a $1 ma wartość Search, zaś $2 ma wartość Bar. Przyczyna: Białe znaki rozdzielają argumenty pozycyjne. Rozwiązanie: Ujmij argument wielowyrazowy w cudzysłów: /migrate-component \"Search Bar\" React Vue. Teraz $1 ma wartość Search Bar. Jest to zgodne z zachowaniem powłoki, które stanowi model mentalny celowo tu odwzorowywany.
allowed-tools nie jest przestrzegane
Objaw: Polecenie się wykonuje, ale Claude odmawia wywołania narzędzi, które Twoim zdaniem trafiły na listę dozwolonych, albo wywołuje narzędzia, których na niej nie ma. Przyczyna: Elementy są oddzielone przecinkami zamiast spacjami. Rozwiązanie: Zamień allowed-tools: Bash, Read, Edit na allowed-tools: Bash Read Edit. W przypadku wzorców podrzędnych narzędzi użyj formatu Bash(git:*) Bash(npm:*) Read.
Polecenie nie pojawia się w autouzupełnianiu /
Objaw: Wpisujesz /, a Twojego polecenia nie ma na liście. Przyczyna: Lokalizacja pliku, brak frontmatteru lub nieprawidłowo ustawione disable-model-invocation. Rozwiązanie: Upewnij się, że plik znajduje się w .claude/commands/yourcmd.md (lub .claude/skills/yourcmd/SKILL.md) względem katalogu głównego projektu. Sprawdź, czy frontmatter zawiera co najmniej pole description:. Jeśli ustawisz disable-model-invocation: true, polecenie nie będzie widoczne dla innych agentów, ale nadal będzie pojawiać się w menu / wpisywanym ręcznie przez człowieka.
Edytujesz plik .md, ale nic się nie zmienia
Objaw: Naprawiasz błąd, zapisujesz plik, uruchamiasz polecenie ponownie, a zepsute zachowanie pozostaje. Przyczyna: Claude Code buforuje pliki poleceń przy starcie sesji. Rozwiązanie: Zamknij i uruchom ponownie Claude Code albo wykonaj /reload, jeśli Twoja wersja to obsługuje.
Claude Code odczytuje pliki
.mdprzy starcie sesji. Jeśli edytujesz polecenie, a ono „się nie zmienia”, zrestartuj sesję, zanim założysz istnienie poważniejszego błędu.
W przypadku przypadków brzegowych wykraczających poza te pięć, najlepszym miejscem do szukania są zgłoszenia w repozytorium Claude Code. Większość dziwnych błędów podstawiania, jakie widzieliśmy, to jakaś odmiana jednego z powyższych.
FAQ: Argumenty poleceń ukośnikowych Claude Code
Jak przekazać argumenty do polecenia ukośnikowego Claude Code?
Wpisz ciąg argumentów po nazwie polecenia: /greet World. W pliku .md swojego polecenia odwołuj się do wartości jako $ARGUMENTS (cały ciąg), $1 (pierwszy argument pozycyjny) lub $variableName (jeśli w sekcji frontmatter zadeklarowano arguments: [variableName]). Narzędzie podstawia token przed wysłaniem promptu do modelu LLM.
Czym jest $ARGUMENTS w Claude Code?
$ARGUMENTS to token podstawienia w plikach niestandardowych poleceń ukośnikowych, który Claude Code zastępuje całym ciągiem argumentów wpisanym przez użytkownika po nazwie polecenia. Jeśli użytkownik uruchomi /deploy --staging --dry-run, $ARGUMENTS przyjmuje postać dosłownego ciągu --staging --dry-run w wyrenderowanym prompcie, jeszcze zanim zobaczy go model LLM.
Czy polecenia slash w Claude Code mogą przyjmować flagi w stylu CLI, np. --json?
Nie natywnie — nie ma parsera flag dla poleceń niestandardowych. Wpisujesz --json w $ARGUMENTS, a Twój prompt instruuje LLM, by wykrył tę flagę i odpowiednio się zachował. Działa to, ponieważ Claude jest elastycznym parserem tekstu strukturalnego. Wbudowane polecenia, takie jak /clear i /help, mają prawdziwe flagi, ale polecenia niestandardowe, które tworzysz, podlegają wyłącznie regułom podstawiania.
Jaka jest różnica między $1, $ARGUMENTS i $name w Claude Code?
$1 to pierwszy argument pozycyjny rozdzielany białymi znakami ($2 to drugi i tak dalej). $ARGUMENTS to cały ciąg argumentów w niezmienionej postaci, zawierający wszystkie części pozycyjne i wszelkie flagi. $name to argument nazwany zadeklarowany w polu arguments: [name] w sekcji frontmatter, przydatny, gdy chcesz mieć samodziokumentujące się miejsca pozycyjne bez indeksowania numerycznego.
Jak działa argument-hint w Claude Code?
argument-hint to pole frontmatter, które określa, co menu autouzupełniania / wyświetla obok nazwy Twojego polecenia. Ustawienie argument-hint: <issue-number> [--priority high] powoduje wyświetlenie dokładnie tego szablonu, gdy użytkownik wpisze /. To wyłącznie kwestia UX — nie waliduje ani nie parsuje argumentów. Mimo to warto je ustawić, bo to najtańsza dokumentacja, jaką kiedykolwiek napiszesz.
Jak utworzyć niestandardowe polecenie ukośnikowe z wieloma argumentami?
Dwa przejrzyste rozwiązania. Dla argumentów pozycyjnych: odwołuj się do $1, $2, $3 w treści promptu. Dla argumentów nazwanych: zadeklaruj arguments: [first, second, third] w sekcji frontmatter i odwołuj się do $first, $second, $third. Wariant nazwany jest bardziej czytelny przy trzech lub więcej argumentach. Używaj $ARGUMENTS tylko wtedy, gdy chcesz, aby LLM parsował dowolny ciąg znaków na końcu, po wymaganych slotach pozycyjnych.
Czy .claude/commands/ jest przestarzałe na rzecz .claude/skills/?
Nie. Anthropic połączył oba systemy wiosną 2026 roku, ale wyraźnie utrzymał działanie .claude/commands/*.md z identycznymi zasadami podstawiania. Używaj commands do automatyzacji w pojedynczym pliku, a skills do pakietów wieloplikowych (SKILL.md oraz szablony lub materiały referencyjne). Ten sam frontmatter, to samo zachowanie $ARGUMENTS, inne opakowanie. Oba rozwiązania są pełnoprawne od wersji v2.1.126.
Dlaczego $ARGUMENTS nie jest podstawiane w moim poleceniu?
Trzy najczęstsze przyczyny, w kolejności występowania: błąd wielkości liter (musi być wielkimi literami $ARGUMENTS, a nie $args ani $arguments), niewłaściwa lokalizacja pliku (musi znajdować się w .claude/commands/ lub .claude/skills/) albo nieaktualna sesja (Claude Code wczytuje pliki poleceń przy starcie sesji, więc po edycji uruchom go ponownie). Jeśli wszystkie trzy punkty się zgadzają, uruchom /echo-args foo z minimalnym przykładem z H2 #1, aby wyizolować problem.
Czy mogę wymagać podania określonych argumentów?
Nie na poziomie użycia — nie istnieje natywna walidacja wymaganych argumentów. Wzorzec polega na poinstruowaniu modelu LLM w prompcie: „Jeśli $1 jest pusty, zatrzymaj się i poproś użytkownika o podanie numeru zgłoszenia.” Model egzekwuje tę umowę. Nie jest to rozwiązanie kuloodporne, ale w praktyce wystarczająco niezawodne do codziennego użytku, zwłaszcza w połączeniu z czytelną wskazówką argument-hint.
Czy model: w frontmatterze nadpisuje flagi CLI?
Tak, frontmatter ma pierwszeństwo. Jeśli plik komendy deklaruje model: claude-haiku-4, komenda ta będzie wykonywana na modelu Haiku niezależnie od tego, który model użytkownik wybrał dla danej sesji. Jest to przydatne w przypadku tanich, często wywoływanych komend, które chcesz trzymać z dala od Opusa. Więcej informacji o wyborze właściwego wariantu dla danego typu komendy znajdziesz w naszym przewodniku Przełączanie modeli Claude.
Podsumowanie
Cztery wzorce. Wybierz ten, który pasuje do kształtu Twojego polecenia:
- Flaga logiczna (
--dry-run) — zapisz ją w$ARGUMENTSi pozwól, aby LLM ją wykrył. - Flaga z wartością (
--filter <pattern>) — to samo podejście, LLM sam wyodrębnia wartość. - Wymagany argument pozycyjny + opcjonalna flaga —
$1dla obowiązkowego,$ARGUMENTSdla reszty. - Ścisłe argumenty pozycyjne —
$0/$1/$2(lub nazwane za pomocąarguments:), gdy każde miejsce jest wymagane i uporządkowane.
Teraz, gdy Twoje polecenia są sparametryzowane, kolejnym krokiem jest wpięcie ich w przepływy pracy agentów — zacznij od naszego samouczka Claude Skills, aby poznać ulepszenie w postaci pakietowania wieloplikowego, lub przejrzyj alternatywne narzędzia AI do kodowania, jeśli porównujesz harnessy. Tak czy inaczej, Twój folder .claude/commands/ właśnie stał się znacznie bardziej użyteczny.