Metaprogramowanie, czyli pisanie kodu, który tworzy inny kod, to jedna z bardziej satysfakcjonujących dziedzin programowania. Niedawno miałem okazję podziałać w tym obszarze, tworząc własne komendy dla asystenta AI Claude Code przy użyciu… jego samego.
Wyzwanie: jak nie tracić cennych pomysłów w trakcie kodowania?#
Każdy zna ten stan: pełne skupienie, złożony problem, a w głowie nagle pojawia się genialne w swej prostocie rozwiązanie lub kluczowe spostrzeżenie. Zapisanie go przerywa pracę i wybija z rytmu. Zignorowanie go grozi utratą cennej myśli.
Podczas pracy nad moim blogiem w Hugo ten problem stał się szczególnie dotkliwy. Ciągłe zmiany gałęzi w Git i modyfikacje plików sprawiały, że gubiłem nie tylko same pomysły, ale przede wszystkim ich kontekst. Na której gałęzi byłem? Jakie pliki edytowałem? Bez tych informacji sama notatka często jest bezużyteczna.
Prostota przede wszystkim: dwie wyspecjalizowane komendy#
Początkowo myślałem o jednej, potężnej komendzie, która robiłaby wszystko. Szybko jednak uznałem, że proste, wyspecjalizowane narzędzia sprawdzają się lepiej. Zgodnie z zasadą KISS (Keep It Simple, Stupid) powstały na początek dwie osobne komendy:
- /note: do błyskawicznego zapisywania notatek wraz z całym kontekstem (gałąź Git, czas, modyfikowane pliki).
- /blogdraft: do przekształcania zebranych notatek w gotowy szkic wpisu na bloga.
Obie świetnie ze sobą współpracują, a każda z nich robi jedną rzecz, ale robi ją dobrze.
Kod źródłowy komendy /note#
To prosty prompt, który prosi AI o zapisanie notatki w odpowiednim formacie i miejscu, wzbogacając ją o dynamicznie pobrany kontekst.
Plik komendy /note:
---
description: Capture quick development notes with context
allowed-tools: Bash
---
# Development Note Capture
Your note: "$ARGUMENTS"
Current context:
- Time: !(date '+%H:%M')
- Branch: !(git branch --show-current)
- Modified files: !(git diff --name-only HEAD | head -3)
Please help me save this note to the development session file by
writing it with the current context to .devnotes/sessions/$(date '+%Y-%m-%d')-session.md
in this format:
```
## [TIME] - DEV NOTE
**Branch**: [BRANCH]
**Files**: [FILES]
**Note**: $ARGUMENTS (fixed typos) and any other relevant context information
```
!(mkdir -p .devnotes/sessions)
Jak działa komenda /note?#
Ten kod jest bardzo ciekawy, ponieważ pokazuje dwie ciekawe funkcje komend Claude Code:
- Wykonywanie poleceń Basha: Każda linia zaczynająca się od
!jest traktowana jako polecenie powłoki. Wartość, którą polecenie zwróci na standardowe wyjście, jest wstawiana w jego miejsce. W ten sposób dynamicznie pobiera aktualny czas (date), nazwę gałęzi (git branch) i listę zmodyfikowanych plików (git diff). - Przechwytywanie danych wejściowych: Zmienna
$ARGUMENTSto specjalny placeholder, który przechowuje całą treść wpisaną przez użytkownika po nazwie komendy. Jeśli wpiszę/note To jest moja ważna notatka, to dokładnie ten tekst zostanie wstawiony w miejsce$ARGUMENTS.
Połączenie tych dwóch mechanizmów pozwala tworzyć niezwykle użyteczne, kontekstowe skrypty.
Zmienne i mechanizm cache#
Podczas pracy nad skryptami na własnej skórze przekonałem się o pewnych osobliwościach Claude Code. Okazało się, że przekazywanie argumentów do skryptów nie zawsze działało tak, jak się spodziewałem. Metodą prób i błędów odkryłem, że Claude Code bardzo agresywnie cachuje definicje komend.
To nie błąd, a raczej zabezpieczenie, które zapobiega problemom z niestabilnymi, częściowo zmodyfikowanymi skryptami.
Rekurencja w praktyce#
Praca nad komendami z pomocą samego AI tworzy skuteczną pętlę zwrotną. Prosiłem asystenta o pomoc w budowaniu narzędzi, które usprawniają interakcję z nim samym. To tak, jakby uczyć kogoś, jak może sam siebie efektywniej uczyć.
W ten sposób powstał samo-dokumentujący się cykl, w którym narzędzia pomagają dokumentować proces własnego tworzenia.
graph LR;
A["Sesja deweloperska"]-->B["Użycie komendy /note"];
B-->C["Zapisane notatki"];
C-->D["Użycie komendy /blogdraft"];
D-->E["Szkic wpisu na bloga"];
E-->F["Dokumentacja procesu"];
F-->A
Wnioski#
Podsumowując, własne komendy (slash commands) w Claude Code to niezwykle potężne narzędzie. W praktyce są to reużywalne, parametryzowane prompty, które pozwalają zautomatyzować powtarzalne zadania i lepiej kontrolować przepływ pracy z asystentem AI. Zamiast za każdym razem tworzyć rozbudowane polecenia, możemy zamknąć całą logikę w prostym, wywoływanym jedną nazwą skrypcie. To skuteczny sposób na zwiększenie swojej produktywności i dostosowanie narzędzia do własnych, unikalnych potrzeb.

