Erweiterung 1

Skills im Detail

Vertiefung zu Modul 8 · Konfiguration, Lebenszyklus, Muster

Inhalt

Eine Zeile Frontmatter entscheidet das Verhalten

Vier Skills aus dem Begleitprojekt, jeder mit einer anderen Zeile im Frontmatter.
Links steht, was man hinschreibt — rechts, was man beobachten kann.

# laeuft in EIGENEM Kontext, Ergebnis
# kommt zurueck, Suchmuell bleibt drin
context: fork
agent: Explore

# nur der MENSCH darf starten
disable-model-invocation: true

# EINE Datei, zwei Zeilen: nur das MODELL
# darf, und nur bei passenden Dateien
user-invocable: false
paths: ["src/**/*.java"]

# SCRIPT runs without a permission prompt
allowed-tools: Bash(${CLAUDE_SKILL_DIR}
  /scripts/count-endpoints.py *)
  1. Forkfinding-validations. /context vor und nach dem Lauf: die durchsuchten Dateien fehlen im Hauptkontext.
  2. Nur Menschdrafting-release-notes. Für alles mit Seiteneffekt.
  3. Nur Modell und pfadgebundenjava-conventions, eine Datei mit beiden Zeilen. Hintergrundwissen, das als Kommando keinen Sinn ergibt und erst beim Anfassen einer Java-Datei lädt.
  4. Skriptcounting-endpoints. Läuft ohne Rückfrage; Zeile entfernen und es wird gefragt.
checked am 2026-07-29 gegen docs/en/skills

Konfiguration

Parameter nach Aufgabengebiet

Parameter nach Aufgabengebiet

17 Felder, keines Pflicht.
Sortiert nach dem, was man erreichen will — nicht alphabetisch.

Aufgabengebiet Felder
Gefunden werdendescription · when_to_use · name
Auslösung steuerndisable-model-invocation · user-invocable · paths
Anderswo laufen lassencontext: fork · agent · background
Werkzeuge freigebenallowed-tools · disallowed-tools
Verhalten erzwingenhooks
Argumente annehmenargument-hint · arguments
Ausstattung wählenmodel · effort · shell
Empfohlen ist genau ein Feld: description.
Daran entscheidet sich, ob der Skill überhaupt gefunden wird — alles andere regelt nur, was danach passiert.
checked am 2026-07-29 gegen docs/en/skills

Wer darf auslösen

Zwei Felder, drei Zustände.
Die rechte Spalte überrascht: die Auslösung entscheidet mit, was überhaupt im Kontext liegt.

(nichts gesetzt)
Mensch   Modell
Beschreibung immer
voller Inhalt beim Auslösen
disable-model-invocation
Mensch   Modell
gar nichts,
bis ein Mensch ihn ruft
user-invocable: false
Mensch   Modell
Beschreibung immer
voller Inhalt beim Auslösen
Frontmatterwas im Kontext liegt
Ein Skill mit disable-model-invocation kostet im Ruhezustand nichts — nicht einmal seine Beschreibung liegt im Kontext.
Genau das ist das Argument für /deploy, /commit, /release.
checked am 2026-07-29 gegen docs/en/skills

allowed-tools ist eine Freigabe

Es macht keinen Skill sicherer — es nimmt die Rückfrage weg.
Und es gilt nur für den auslösenden Zug.

# counting-endpoints/SKILL.md
---
allowed-tools: Bash(${CLAUDE_SKILL_DIR}
  /scripts/count-endpoints.py *)
---
Fuehre ${CLAUDE_SKILL_DIR}/scripts
/count-endpoints.py aus.

# DIESELBE Variable an BEIDEN Stellen:
# die Regel passt auf den Befehl,
# so: no permission prompt.
  1. Mit der nächsten Nachricht ist die Freigabe weg — der Skill-Inhalt bleibt.
  2. Alle anderen Werkzeuge bleiben aufrufbar, für sie gelten die normalen Permissions.
  3. Einschränken geht mit disallowed-tools, ebenfalls nur bis zur nächsten Nachricht.
  4. Braucht Version 2.1.129 oder neuer — davor bleibt die Regel eine wörtliche Zeichenkette und passt nie.
Bei eingecheckten Projekt-Skills greift allowed-tools erst nach dem Workspace-Trust-Dialog.
Ein Skill kann sich selbst breite Werkzeugrechte einräumen — deshalb Projekt-Skills lesen, bevor man einem Repository vertraut.
checked am 2026-07-29 gegen docs/permissions

Lebenszyklus im Kontext

Was bleibt, was verfällt, was /compact übrig lässt

Ein Skill bleibt in der Sitzung

Der ausgelöste Inhalt tritt als eine Nachricht in die Unterhaltung und bleibt die ganze Sitzung.
Die Datei wird nie wieder gelesen.

  1. Schreibt Dauer-Anweisungen, keine Schrittfolgen. Ein „zuerst …, dann …" verpufft nach dem ersten Zug.
  2. Der Inhalt bleibt, die Rechte nicht. allowed-tools verfällt mit eurer nächsten Nachricht.
  3. Gleicher Inhalt, kein zweites Mal. Nur bei anderen Argumenten oder neuer Skript-Ausgabe wird er voll neu angehängt.
  4. Nach /compact zurückgeholt — aber gekürzt, siehe rechts.
die Unterhaltung, von oben nach unten
1System · CLAUDE.md
2eure Nachricht
3Skill-Inhalt — tritt einmal ein
4Antwort, Tool-Calls, …
der Skill-Inhalt bleibt oben stehen
nnach /compact: erste 5.000 Token je Skill, 25.000 gesamt, jüngster zuerst
Systemder SkillVerlauf
checked am 2026-07-29 gegen docs/en/skills

Eingebettete Kommandos

Ein Skill kann Shell-Kommandos ausführen, bevor das Modell etwas sieht.
Die Ausgabe ersetzt den Platzhalter — das Modell bekommt Daten, nicht den Befehl.

# einzeilig, inline
- PR-Diff: !`gh pr diff`

# mehrzeilig: Code Fence mit !
```!
git status --short
git log --oneline -5
```

KEY=!`cmd` # laeuft NICHT --
# das ! muss am Zeilenanfang oder
# nach einem Leerzeichen stehen
  1. Ein Durchlauf. Ausgaben werden nicht erneut nach Platzhaltern durchsucht.
  2. Das ist Vorverarbeitung, nicht etwas, das das Modell ausführt und freigeben müsste.
  3. Abschaltbar per Richtlinie mit disableSkillShellExecution — gebündelte Skills sind ausgenommen.
checked am 2026-07-29 gegen docs/en/skills

Aufbau und Freiheitsgrade

Wie groß, wie tief, wie viel Vorschrift

Aufteilen, aber nur eine Ebene tief

Große Referenzdateien kosten nichts, solange sie nicht gelesen werden.
Verschachtelte Verweise kosten Verlässlichkeit.

eine Ebene
SKILL.md
finance.md
sales.md
examples.md
drei Ebenen
SKILL.md
overview.md
details.md
actual.md
hier steht es wirklich
der RumpfReferenzdatei
  1. Rumpf unter 500 Zeilen, darüber aufteilen.
  2. Alle Verweise direkt aus der SKILL.md. Bei tieferer Verschachtelung liest das Modell Zieldateien womöglich nur an und arbeitet mit Lücken.
  3. Referenzdateien über 100 Zeilen bekommen ein Inhaltsverzeichnis.
  4. Nach Domäne aufteilen, nicht nach doc1, doc2.

Freiheitsgrade

Wie genau ein Skill vorschreibt, richtet sich nach der Zerbrechlichkeit der Aufgabe — nicht nach Geschmack.

# HOCH -- viele Wege sind richtig
1. Struktur des Codes ansehen
2. Auf Randfaelle pruefen
3. Lesbarkeit vorschlagen

# MITTEL -- Muster mit Parametern
def report(data, format="markdown",
          charts=True):

# NIEDRIG -- genau dieser Befehl
python scripts/migrate.py \
  --verify --backup
Keine zusaetzlichen Flags.
  1. Hoch: Entscheidung hängt vom Kontext ab. Beispiel Code-Review.
  2. Mittel: ein bevorzugtes Muster gibt es, Abweichung ist erlaubt.
  3. Niedrig: zerbrechlich, feste Reihenfolge. Beispiel Datenbank-Migration.
Das Bild: schmale Brücke mit Abgründen braucht ein Geländer, offenes Feld braucht eine Richtung.

Muster, die tragen

Checkliste, Feedback-Loop, bedingter Ablauf, Template

Workflow mit Checkliste

Bei mehrschrittigen Abläufen wird die Checkliste in die Antwort kopiert und abgehakt.
Das verhindert, dass Prüfschritte übersprungen werden.

## checking-conventions/SKILL.md

Uebertrage diese Checkliste und
hake sie ab:

```
Fortschritt:
- [ ] 1: Pruefer laufen lassen
- [ ] 2: Verstoesse beheben
- [ ] 3: Pruefer erneut
- [ ] 4: weiter, wenn gruen
```
  1. Der Zweck ist nicht die Optik, sondern dass kein Schritt entfällt.
  2. Funktioniert auch ohne Code — das Doku-Beispiel ist eine Recherche-Synthese in fünf Schritten.
  3. Ihr seht den Fortschritt und könnt eingreifen, bevor der letzte Schritt läuft.

Der Feedback-Loop

Das Muster der Doku in drei Worten: prüfen, beheben, wiederholen.
Es steht im Rumpf des Skills — als nummerierte Schritte mit einer eigenen Abbruchbedingung.

bis 0 Verstöße
Prüfer laufen lassen
Datei, Zeile,
erwartete Form
EINEN beheben
zurück — Prüfer erneut
Exit 0 — erst jetzt weiter
mvn -o test
Schrittdie Schleife
  1. Schritt 3 ist der Loop. Ohne ihn ist das eine Liste, die einmal durchläuft — der häufigste Fehler beim Nachbauen.
  2. Der Prüfer ist die Wahrheit, nicht die Einschätzung des Modells. Ein Skript, ein Exit-Code.
  3. Er muss kein Skript sein. Auch eine Stilrichtlinie taugt als Prüfer — dann liest und vergleicht das Modell. Das Muster bleibt dasselbe.
  4. Meldungen ausführlich halten — Datei, Zeile, erwartete Form. Wer nur „ungültig" meldet, erzwingt Raten.
Im Begleitprojekt belegt: erster Lauf 2 Verstöße, Exit 1 — nach zwei Änderungen 0 Verstöße, Exit 0.
Der Skill meldet am Ende, wie viele Durchläufe er gebraucht hat.
checked am 2026-07-30 gegen best-practices

Bedingter Ablauf

Zwei Wege, ein Entscheidungspunkt am Anfang — und die Zweige in eigenen Dateien.
Nur der zutreffende wird gelesen.

# changing-endpoints/SKILL.md

Schritt 1: Art der Aenderung
bestimmen.

- Neuer Endpunkt: lies create.md
- Bestehender: lies edit.md

Unsicher? Pruefe mit Grep, ob der
Pfad schon vorkommt.

Schritt 2: dem Ablauf der
gelesenen Datei folgen.
  1. Der Gewinn ist Kontext, nicht Ordnung: wer beide Zweige in die SKILL.md schreibt, lädt immer beide.
  2. Der Entscheidungspunkt braucht ein Kriterium, nicht nur eine Frage — hier der Grep.
  3. Im Transkript ist sichtbar, welche Datei gelesen wurde. Das ist der Beobachtungsweg im Begleitprojekt.

Vorlage und Ergebnis

Wenn die Form zählt, gibt man sie vor.
Links die Vorlage im Skill, rechts was dabei herauskommt.

# reviewing-with-template/SKILL.md
Benutze genau diese Vorlage.
Keine zusaetzlichen Abschnitte.

```markdown
# Review: <Dateiname>
## Einschaetzung
<ein Satz>
## Befunde
| Zeile | Schwere | Befund |
## Was gut ist
- <ein bis drei Punkte>
```
Schwere: kritisch | warnung | hinweis
Nichts anderes.
# und so sieht die Antwort aus
# Review: Booking.java

## Einschaetzung
Fachlich klar, aber der Geldbetrag
ist als Gleitkommazahl abgelegt.

## Befunde
| 18 | kritisch | double fuer Geld |
| 30 | hinweis | Setter ohne Pruefung |

## Was gut ist
- Namen sagen, was gemeint ist
- keine Fachlogik in der Resource
Streng formulieren, wenn die Form weiterverarbeitet wird („benutze genau diese Vorlage").
Weich formulieren, wenn Anpassung hilft („das ist ein sinnvoller Standard, urteile nach Lage").

Code und Anti-Patterns

Mitgelieferte Skripte — und warum ein Skill nicht zieht

Mitgelieferte Skripte

Eine Ausnahme, die das Skript nach oben durchlässt, wird zum Rätsel für das Modell.
Behandelt sie da, wo ihr wisst, was sie bedeutet.

# schlecht: reicht die Ausnahme weiter
def pruefe(pfad):
  # let the agent figure it out
  return open(pfad).read()

# Das Modell sieht dann nur:
PermissionError: [Errno 13] ...
# und muss raten, ob das ein Befund,
# ein Aufruffehler oder ein Bug ist.

# gut: die Ausnahme WIRD ein Befund
try:
    zeilen = pfad.read_text().splitlines()
except OSError as e:
    return [{"regel": "unlesbar",
        "datei": str(pfad),
        "erwartet": str(e)}]
  1. Eine unlesbare Datei ist ein Befund, kein Absturz. Sie landet in derselben Struktur wie jeder andere Befund — der Aufrufer braucht keinen Sonderfall.
  2. Keine unbegründeten Konstanten. TIMEOUT = 47 — wenn ihr den Wert nicht kennt, kennt das Modell ihn auch nicht.
  3. Sagt, ob ausführen oder lesen. „Führe x.py aus" gegen „siehe x.py für den Algorithmus".
  4. Plan, prüfen, ausführen bei Stapel- und riskanten Änderungen: erst eine prüfbare Zwischendatei.
checked am 2026-07-30 gegen best-practices

Rückgabe-Vertrag und Aufrufer

Ein Skript, das ein Skill aufruft, braucht eine zugesagte Rückgabe.
Sonst muss der Aufrufer Text lesen und rät bei jeder Änderung neu.

# tools/check-conventions.py --json
{
  "gate": "conventions",
  "exit": 1, # 0 sauber 1 Verstoss 2 Aufruf
  "geprueft": 26,
  "verstoesse": [{
    "regel": "mandant",
    "datei": "...SeminarRepository.java",
    "zeile": 19,
    "gefunden": "list(\"startDate > ?1\"...)",
    "erwartet": "der Mandant gehoert in
      JEDE Abfrage"
  }]
}

# auch bei exit 2 gueltiges JSON,
# dann mit Feld "fehler"
# checking-conventions/SKILL.md
allowed-tools: Bash(python3 tools
  /check-conventions.py *)
---
1. `python3 tools/check-conventions.py
   --json`

2. Bei "exit": 2 ist es ein Aufruf-
   fehler: melde `fehler`, halte an.

3. Arbeite `verstoesse[]` ab. Je Eintrag:
   - oeffne `datei` an `zeile`
   - vergleiche mit `gefunden`
   - setze `erwartet` um
   - nach `regel` unterscheiden:
     mandant | geld | logging

4. Erst weiter, wenn "exit": 0.
Der Vertrag steht im Kopfkommentar des Skripts — dort sucht ihn, wer ihn braucht.
Beides liegt echt im Übungsprojekt cgsit-claude-training-ext; alle drei Exit-Codes sind dort durchgespielt.
checked am 2026-07-30 gegen ext-Uebungsprojekt

Anti-Patterns

Sieben Fehler mit Namen.
Alle sieben stecken absichtlich im Skill helper des Begleitprojekts — er ist das Material der Übung.

Fehler Warum er schadet
Vage Beschreibungder Skill wird nicht gefunden. Der einzige, der ihn unsichtbar macht.
Verschachtelte VerweiseZieldateien werden nur angelesen, Information fehlt
Windows-Pfade mit Backslashfunktioniert auf keinem Unix-System
Viele Optionen ohne Vorgabedas Modell wählt beliebig statt richtig
Zeitabhängige Angabenveraltet zwangsläufig. Altes in einen eigenen Abschnitt
Unbegründete Konstantenniemand kann den Wert anpassen, auch das Modell nicht
Wechselnde Begriffe„Feld", „Box", „Element" für dasselbe — erschwert das Befolgen

Warum der Skill nicht zieht

Fast immer liegt es an description und name — nicht am Inhalt.
Die Auswahl trifft das Modell allein anhand dieser zwei Zeilen.

# zieht nicht
description: Helps with code.

# zieht unzuverlaessig -- sagt WAS,
# aber nicht WANN
description: Prueft die Java-
  Konventionen dieses Repositories.

# zieht
description: Prueft die Java-
  Konventionen und behebt Verstoesse
  gegen die Regeln zu Geldbetraegen
  und Logging. Zu benutzen bei
  Aufraeumarbeiten, vor einem Commit,
  oder wenn nach Konventionen gefragt
  wird.
  1. Was er tut UND wann er anzuwenden ist. Der zweite Satz entscheidet.
  2. Dritte Person. Die Beschreibung landet im System-Prompt; „ich kann dir helfen" stört die Auswahl.
  3. Die Wörter nennen, die eure Leute tippen — nicht nur die Fachsprache des Skills.
  4. Namen in Verlaufsform: processing-pdfs, nicht helper, utils, tools.
checked am 2026-07-29 gegen ext-01-Uebung

Vor dem Teilen

Die Checkliste der Doku, in prüfbarer Form — und der Grund, ein verify.sh zu schreiben statt eine Liste abzuhaken.

$ bash examples/agent-scaffolding/verify.sh
OK nur dokumentierte Frontmatter-Felder
OK Verweise eine Ebene tief
OK keine Windows-Pfade
OK Skripte ausfuehrbar
OK Pruefer meldet Verstoesse

Was verify.sh NICHT kann:
ob der Skill im Gespraech zieht.
Das entscheidet das Modell an der
Beschreibung — und das kann nur
ein Mensch beobachten.
  1. Maschinell prüfbar: Feldnamen, Verweistiefe, Pfadform, Ausführbarkeit, Rumpflänge.
  2. Nur beobachtbar: ob die Beschreibung greift. Dafür eine Aufgabe in Alltagssprache, ohne den Namen zu nennen.
  3. Erst Evaluationen, dann Dokumentation — drei Fälle, an denen messbar ist, ob der Skill etwas verbessert.
  4. Eine Instanz baut, eine andere benutzt. Beobachtet wird die zweite.

Erweiterung 1 in fünf Sätzen

Was von diesem Deck hängenbleiben soll.

  1. Eine Zeile Frontmatter ändert das Verhalten. Wer auslöst, wo es läuft, was erlaubt ist — alles einzeln einstellbar.
  2. Ein ausgelöster Skill bleibt die ganze Sitzung im Kontext und wird nie neu gelesen. Dauer-Anweisungen schreiben, keine Schrittfolgen.
  3. Die Rechte verfallen, der Inhalt nicht. allowed-tools gilt für einen Zug — und ist eine Freigabe, keine Einschränkung.
  4. Der Feedback-Loop bringt den größten Qualitätsgewinn, wenn der Prüfer ein Exit-Code ist und die Abbruchbedingung dasteht.
  5. Zieht ein Skill nicht, liegt es an der Beschreibung. Nicht am Inhalt, nicht an den Pfaden, nicht am Modell.

Glossar Glossar

Frontmatter Der Kopfteil einer Datei zwischen zwei Zeilen aus drei Bindestrichen, in YAML geschrieben. Trägt die Einstellungen eines Skills, Subagenten oder einer Regel — nicht seinen Inhalt.
YAML (YAML Ain't Markup Language) Textformat für Konfiguration, das Einrückung statt Klammern benutzt. Format des Frontmatter in Skills und Subagenten.
Progressive Disclosure Aufbauprinzip für Skills: die SKILL.md ist ein Inhaltsverzeichnis, die Einzelheiten stehen in Begleitdateien und werden erst gelesen, wenn sie gebraucht werden. Ungelesene Dateien kosten keinen Kontext.
Feedback-Loop Ablaufmuster: prüfen, Fehler beheben, erneut prüfen, und erst bei bestandener Prüfung weitermachen. Der Prüfer ist ein Skript mit Exit-Code, nicht die Einschätzung des Modells.
Exit-Code Die Zahl, mit der ein Programm endet: 0 heißt in Ordnung, alles andere heißt Fehler. Sie ist das Signal, an dem ein Skill erkennt, ob er noch einen Durchlauf braucht.

© 2026 CGS IT Solutions GmbH

Alle Rechte vorbehalten

Diese Schulungsunterlagen sind urheberrechtlich geschützt. Vervielfältigung, Weitergabe oder kommerzielle Nutzung — auch in Auszügen — nur mit ausdrücklicher schriftlicher Genehmigung der CGS IT Solutions GmbH.

cgsit-claude-training · Erweiterung 1 · Skills · v0.11.5