Lekcja 10 · Domykamy otwarty wątek z Lekcji 3

Warsztat: napisz swój pierwszy własny skill

W Lekcji 3 zaproponowałem skill new-lesson, ale zatrzymaliśmy się na "daj znać, czy pasuje Ci zakres". Ta lekcja domyka ten wątek — piszesz i realnie używasz swojego pierwszego skilla, dokładnie tak, jak zakłada Twoja misja.

Polecane źródło Extend Claude with skills — Claude Code Docs (ta sama strona co w Lekcji 3, tym razem pod kątem struktury katalogu i plików pomocniczych).

Żywy przykład: skill, który właśnie Cię uczy

Zamiast wymyślonego przykładu — spójrzmy na frontmatter skilla teach, który obsługuje tę właśnie rozmowę (.claude/skills/teach/SKILL.md):

---
name: teach
description: Teach the user a new skill or concept, within this workspace.
disable-model-invocation: true
argument-hint: "What would you like to learn about?"
---

disable-model-invocation: true oznacza, że tylko Ty wpisujesz /teach — Claude nigdy nie zdecyduje samo, że "czas na lekcję". argument-hint to podpowiedź widoczna przy wpisywaniu komendy, zanim jeszcze naciśniesz Enter.

Kluczowy wniosek: skill to nie zawsze jeden plik. Treść SKILL.md może linkować dodatkowe pliki markdown (jak MISSION-FORMAT.md czy LEARNING-RECORD-FORMAT.md w tym właśnie skillu) — Claude doczytuje je dopiero, gdy faktycznie ich potrzebuje przy wykonywaniu konkretnego kroku, a nie wszystkie naraz przy wywołaniu. To ta sama zasada "na żądanie", którą znasz z reguł w Lekcji 7.

Zadanie praktyczne — dokończ new-lesson

Ten workspace ma powtarzalną procedurę, którą do tej pory wykonywałem ręcznie za każdym razem: liczenie kolejnego numeru lekcji i wklejanie tego samego szkieletu HTML. Utwórz plik .claude/skills/new-lesson/SKILL.md z taką zawartością:

---
name: new-lesson
description: Scaffold a new numbered lesson HTML file in lessons/ with the standard skeleton and shared assets already linked.
disable-model-invocation: true
argument-hint: "Temat lekcji (krotko, po polsku)"
---

Instrukcje:

1. Znajdz najwyzszy numer pliku w `lessons/` (wzorzec `NNNN-*.html`)
   i wylicz kolejny, czterocyfrowy z zerami wiodacymi.
2. Zamien podany temat na dash-case (male litery, myslniki, bez
   polskich znakow diakrytycznych) i uzyj w nazwie pliku:
   `lessons/NNNN-temat-w-dash-case.html`.
3. Utworz plik z tym szkieletem, podmieniajac NNNN i TYTUL:

   <!DOCTYPE html>
   <html lang="pl">
   <head>
   <meta charset="UTF-8">
   <title>Lekcja NNNN — TYTUL</title>
   <link rel="stylesheet" href="../assets/style.css">
   </head>
   <body>
   <div class="page">
     <p class="eyebrow">Lekcja NNNN · </p>
     <h1>TYTUL</h1>
     <p class="lede"></p>
     <div class="source-rec">
       <span class="label">Polecane zrodlo</span>
     </div>
     <h2></h2>
     <div class="callout win"><strong>Kluczowy wniosek:</strong> </div>
     <div class="task"><h3>Zadanie praktyczne</h3></div>
     <h2>Sprawdz sie</h2>
     <div class="quiz"></div>
     <div class="ask-teacher">Cos niejasne? Zapytaj mnie wprost.</div>
     <div class="lesson-nav">
       <span><a href="POPRZEDNIA.html">← Lekcja N-1</a></span>
       <span>Nastepna lekcja: ... →</span>
     </div>
   </div>
   <script src="../assets/quiz.js"></script>
   </body>
   </html>

4. Podmien w poprzedniej lekcji link "Nastepna lekcja" na realny
   href do nowego pliku.
5. NIE wypelniaj tresci merytorycznej automatycznie — to wymaga
   sprawdzenia RESOURCES.md i researchu. Zatrzymaj sie po szkielecie
   i zapytaj, jaki ma byc zakres wiedzy tej lekcji.
  1. Zapisz plik dokładnie w tej ścieżce: .claude/skills/new-lesson/SKILL.md.
  2. Wpisz /new-lesson — powinieneś zobaczyć podpowiedź argumentu z argument-hint.
  3. Podaj dowolny temat testowy i sprawdź, czy powstał poprawny szkielet, zanim poprosisz o realną treść.

Sprawdź się

1. Skill new-lesson ma disable-model-invocation: true. Kto może go wywołać?

disable-model-invocation: true usuwa skill z listy tego, co Claude może wywołać samo — zostaje dostępny wyłącznie przez ręczne wpisanie komendy.

2. Skill teach linkuje w swojej treści plik MISSION-FORMAT.md. Kiedy ten plik trafia do kontekstu?

Pliki linkowane z treści skilla ładują się na żądanie, dopiero gdy Claude ich potrzebuje wykonując konkretny krok — nie wszystkie naraz przy samym wywołaniu skilla.

3. Dlaczego SKILL.md new-lesson celowo NIE generuje automatycznie treści merytorycznej lekcji?

Zasada tego workspace (CLAUDE.md) mówi, że nowe lekcje muszą opierać się na RESOURCES.md, nigdy na wiedzy parametrycznej — dlatego skill zatrzymuje się na szkielecie i pyta o zakres.

4. Gdzie musi fizycznie leżeć plik, żeby /new-lesson działał w tym konkretnym projekcie?

Skille projektowe wymagają dokładnie tej struktury: katalog o nazwie skilla wewnątrz .claude/skills/, a w nim plik SKILL.md. ~/.claude/skills/ dałoby dostęp ze wszystkich projektów, nie tylko tego.

5. Co odróżnia argument-hint od zwykłego opisu w polu description?

description to jedyne obowiązkowe pole, używane przez Claude do samodzielnej decyzji o wywołaniu (Lekcja 3). argument-hint to czysto interfejsowa podpowiedź, widoczna Tobie podczas pisania komendy.
Coś niejasne? Zapytaj mnie wprost — mogę pomóc rozszerzyć ten skill (np. o automatyczne wypełnianie source-rec z RESOURCES.md) albo zaprojektować kolejny, dla innego powtarzalnego zadania w Twojej pracy.
← Lekcja 9: /clear, /compact, /context Następna lekcja: Warsztat — napisz swój pierwszy własny subagent →