W poprzednim wpisie opisałem całe środowisko: 120 plików, 18 agentów, 22 reguły, 11 hooków. Jeden element potraktowałem po macoszemu: 51 własnych slash komend. To najbardziej widoczna część tego setupu, to co faktycznie wpisuję na co dzień. Ten wpis opisuje jak to działa. Kolejne wpisy przejdą przez każdą kategorię.
Czym jest plik komendy
Komenda to plik markdown w .claude/commands/. Kiedy wpiszę /deploy w Claude Code, program znajduje commands/deploy.md, czyta go i traktuje jako moje instrukcje na tę sesję. Nazwa pliku staje się nazwą komendy. To cały mechanizm.
Nie ma kroku rejestracji, żadnego pliku konfiguracyjnego do aktualizowania, żadnego restartu. Wrzucam plik markdown do katalogu i komenda istnieje.
Najprostsza możliwa komenda to po prostu instrukcje:
| |
$ARGUMENTS to jedyna specjalna zmienna. Zostaje zastąpiona tym, co wpiszę po nazwie komendy. Uruchamiam /summarize https://example.com/article i Claude czyta plik z podstawionym URL-em.
Jeśli komenda nie wymaga żadnego wejścia, $ARGUMENTS w ogóle nie jest potrzebne. /morning odpala pełny poranny briefing bez żadnych argumentów.
Frontmatter
Komendy obsługują opcjonalny frontmatter YAML z trzema polami:
| |
allowed-tools ogranicza, jakich narzędzi komenda może używać. Komendy Toggl potrzebują tylko curl, więc są zablokowane do Bash(curl:*). To zabezpieczenie i jednocześnie sygnał dla Claude, co jest w zakresie tej komendy.
description pojawia się w pickerze komend, gdy wpisuję /. To jednolinijkowa etykieta obok nazwy komendy.
argument-hint pokazuje podpowiedź w pickerze za nazwą komendy, coś jak sygnatura funkcji. /toggl:start [opis] mówi mi co podać, bez otwierania pliku.
Żadne z tych pól nie jest wymagane. Większość moich komend pomija frontmatter i polega tylko na instrukcjach.
Struktura katalogów i przestrzenie nazw
Podkatalogi tworzą komendy z przestrzeniami nazw. Plik w commands/toggl/start.md staje się /toggl:start, nie /start. Plik w commands/devops/deploy.md staje się /devops:deploy.
Moja struktura:
| |
Przy 51 komendach przestrzenie nazw sprawiają, że picker pozostaje czytelny. /toggl:start, /toggl:stop, /toggl:current i /toggl:summary są wyraźnie powiązane. /deploy i /devops:deploy byłyby niejednoznaczne. Dwukropek pokazuje grupowanie w miejscu wywołania.
Można też umieścić README.md w podkatalogu. Nie stanie się komendą, to zwykła dokumentacja mieszkająca obok plików, które opisuje. Katalog toggl/ ma taki plik, wyjaśniający konfigurację tokenu API.
Wzorzec wewnątrz komendy
Pliki komend, które faktycznie oszczędzają czas, mają wspólną strukturę. Kroki, nie proza. Konkretne wywołania narzędzi, nie ogólne prośby. Potwierdzenie przed czymkolwiek destruktywnym.
Szkielet wygląda tak:
| |
- Zweryfikuj wynik.
| |
Usage: /deploy [–strategy
| |
Claude czyta ten plik jako część wykonywania komendy. Jeśli zaktualizuję reguły, każda komenda, która się do nich odwołuje, automatycznie je pobiera. Pliki komend zostają krótkie, a reguły są w jednym miejscu.
To samo działa z definicjami agentów. /review-pr mówi Claude, żeby uruchamiał równoległe agenty Explore dla dużych pull requestów. Agenty są zdefiniowane osobno w .claude/agents/. Komenda tylko wywołuje je po nazwie.
Co dalej
To tyle z mechaniki. Plik trafia do katalogu, nazwa staje się komendą, $ARGUMENTS niesie wejście użytkownika, frontmatter dodaje opcjonalne ograniczenia, a treść pliku to po prostu instrukcje.
Ciekawa część to to, co umieszczasz w plikach. Następny wpis: 11 komend devops, które zastąpiły moje runbooki.
