- Startseite
- Documentation
- Erweiterungen
- Skills
Skills
Skills sind dateibasierte Fähigkeitspakete, die beim Start erkannt und dem Modell bereitgestellt werden als:
- kompakte Metadaten im System-Prompt (Name + Beschreibung)
- On-Demand-Inhalte über
read skill://... - optionale interaktive
/skill:<name>-Befehle
Dieses Dokument beschreibt das aktuelle Laufzeitverhalten in src/extensibility/skills.ts, src/discovery/builtin.ts, src/internal-urls/skill-protocol.ts und src/discovery/agents-md.ts.
Was ein Skill in dieser Codebasis ist
Abschnitt betitelt „Was ein Skill in dieser Codebasis ist“Ein erkannter Skill wird wie folgt dargestellt:
namedescriptionfilePath(derSKILL.md-Pfad)baseDir(Skill-Verzeichnis)- Quell-Metadaten (
provider,level, Pfad)
Die Laufzeitumgebung erfordert für die Gültigkeit nur name und path. In der Praxis hängt die Übereinstimmungsqualität davon ab, dass description aussagekräftig ist.
Erforderliche Struktur und Erwartungen an SKILL.md
Abschnitt betitelt „Erforderliche Struktur und Erwartungen an SKILL.md“Verzeichnisstruktur
Abschnitt betitelt „Verzeichnisstruktur“Für die providerbasierte Erkennung (native/Claude/Codex/Agents/Plugin-Provider) werden Skills als eine Ebene unterhalb von skills/ erkannt:
<skills-root>/<skill-name>/SKILL.md
Verschachtelte Muster wie <skills-root>/group/<skill>/SKILL.md werden von Provider-Loadern nicht erkannt.
Bei skills.customDirectories verwendet die Suche dieselbe nicht-rekursive Struktur (*/SKILL.md).
Provider-erkannte Struktur (nicht-rekursiv unter skills/):
<root>/skills/ ├─ postgres/ │ └─ SKILL.md ✅ erkannt ├─ pdf/ │ └─ SKILL.md ✅ erkannt └─ team/ └─ internal/ └─ SKILL.md ❌ von Provider-Loadern nicht erkannt
Die Suche in benutzerdefinierten Verzeichnissen ist ebenfalls nicht-rekursiv, daher werden verschachtelte Pfade ignoriert, sofern Sie `customDirectories` nicht auf das übergeordnete verschachtelte Verzeichnis verweisen.SKILL.md-Frontmatter
Abschnitt betitelt „SKILL.md-Frontmatter“Unterstützte Frontmatter-Felder des Skill-Typs:
name?: stringdescription?: stringglobs?: string[]alwaysApply?: boolean- zusätzliche Schlüssel werden als unbekannte Metadaten gespeichert
Aktuelles Laufzeitverhalten:
nameverwendet standardmäßig den Namen des Skill-Verzeichnissesdescriptionist erforderlich für:- native
.xcsh-Provider-Skill-Erkennung (requireDescription: true) skills.customDirectories-Scans überscanSkillsFromDirinsrc/discovery/helpers.ts(nicht-rekursiv)
- native
- Nicht-native Provider können Skills ohne Beschreibung laden
Erkennungs-Pipeline
Abschnitt betitelt „Erkennungs-Pipeline“discoverSkills() in src/extensibility/skills.ts führt zwei Durchläufe durch:
- Fähigkeits-Provider über
loadCapability("skills") - Benutzerdefinierte Verzeichnisse über
scanSkillsFromDir(..., { requireDescription: true })(einstufige Verzeichnisaufzählung)
Wenn skills.enabled den Wert false hat, gibt die Erkennung keine Skills zurück.
Integrierte Skill-Provider und Prioritäten
Abschnitt betitelt „Integrierte Skill-Provider und Prioritäten“Die Provider-Reihenfolge ist prioritätsbasiert (höher gewinnt), bei Gleichstand gilt die Registrierungsreihenfolge.
Aktuell registrierte Skill-Provider:
native(Priorität 100) —.xcsh-Benutzer-/Projekt-Skills übersrc/discovery/builtin.tsclaude(Priorität 80)- Priorität-70-Gruppe (in Registrierungsreihenfolge):
claude-pluginsagentscodex
Der Deduplizierungsschlüssel ist der Skill-Name. Das erste Element mit einem bestimmten Namen gewinnt.
Quell-Schalter und Filterung
Abschnitt betitelt „Quell-Schalter und Filterung“discoverSkills() wendet folgende Steuerungen an:
- Quell-Schalter:
enableCodexUser,enableClaudeUser,enableClaudeProject,enablePiUser,enablePiProject - Glob-Filter auf Skill-Name:
ignoredSkills(ausschließen)includeSkills(Zulassungsliste; leer bedeutet alle einschließen)
Filterreihenfolge:
- Quelle aktiviert
- nicht ignoriert
- eingeschlossen (wenn Einschlussliste vorhanden)
Für andere Provider als codex/claude/native (zum Beispiel agents, claude-plugins) fällt die Aktivierung derzeit auf folgenden Standardwert zurück: aktiviert, wenn irgendein integrierter Quell-Schalter aktiviert ist.
Kollisions- und Duplikatbehandlung
Abschnitt betitelt „Kollisions- und Duplikatbehandlung“- Fähigkeits-Deduplizierung behält bereits den ersten Skill pro Name (Provider mit höchster Priorität)
extensibility/skills.tsführt zusätzlich folgendes durch:- Deduplizierung identischer Dateien über
realpath(symlink-sicher) - Ausgabe von Kollisionswarnungen, wenn ein späterer Skill-Name in Konflikt gerät
- Bereitstellung der komfortablen
discoverSkillsFromDir({ dir, source })-API als schlanker Adapter überscanSkillsFromDir
- Deduplizierung identischer Dateien über
- Skills aus benutzerdefinierten Verzeichnissen werden nach Provider-Skills zusammengeführt und folgen demselben Kollisionsverhalten
Laufzeitnutzungsverhalten
Abschnitt betitelt „Laufzeitnutzungsverhalten“System-Prompt-Bereitstellung
Abschnitt betitelt „System-Prompt-Bereitstellung“Die System-Prompt-Konstruktion (src/system-prompt.ts) verwendet erkannte Skills wie folgt:
- wenn das
read-Werkzeug verfügbar ist:- erkannte Skills-Liste in Prompt einschließen
- andernfalls:
- erkannte Liste weglassen
Task-Tool-Subagenten erhalten die erkannte/bereitgestellte Skills-Liste der Sitzung über die normale Sitzungserstellung; es gibt keine aufgabenspezifische Skill-Pinning-Überschreibung.
Interaktive /skill:<name>-Befehle
Abschnitt betitelt „Interaktive /skill:<name>-Befehle“Wenn skills.enableSkillCommands den Wert true hat, registriert der interaktive Modus einen Slash-Befehl pro erkanntem Skill.
Verhalten von /skill:<name> [args]:
- liest die Skill-Datei direkt aus
filePath - entfernt Frontmatter
- fügt den Skill-Inhalt als benutzerdefinierte Folgemeldung ein
- hängt Metadaten an (
Skill: <path>, optionalUser: <args>)
Verhalten der skill://-URL
Abschnitt betitelt „Verhalten der skill://-URL“src/internal-urls/skill-protocol.ts unterstützt:
skill://<name>→ wird zurSKILL.mddes jeweiligen Skills aufgelöstskill://<name>/<relative-path>→ wird innerhalb des Skill-Verzeichnisses aufgelöst
skill://-URL-Auflösung
skill://pdf -> <pdf-base>/SKILL.md
skill://pdf/references/tables.md -> <pdf-base>/references/tables.md
Schutzmaßnahmen:- absolute Pfade ablehnen- `..`-Traversierung ablehnen- jeden aufgelösten Pfad ablehnen, der <pdf-base> verlässtAuflösungsdetails:
- Skill-Name muss exakt übereinstimmen
- relative Pfade werden URL-dekodiert
- absolute Pfade werden abgelehnt
- Pfad-Traversierung (
..) wird abgelehnt - aufgelöster Pfad muss innerhalb von
baseDirverbleiben - fehlende Dateien geben einen expliziten
File not found-Fehler zurück
Inhaltstyp:
.md=>text/markdown- alles andere =>
text/plain
Für fehlende Ressourcen wird keine Fallback-Suche durchgeführt.
Skills vs. XCSH.md, Befehle, Werkzeuge, Hooks
Abschnitt betitelt „Skills vs. XCSH.md, Befehle, Werkzeuge, Hooks“Skills vs. XCSH.md
Abschnitt betitelt „Skills vs. XCSH.md“- Skills: benannte, optionale Fähigkeitspakete, die nach Aufgabenkontext ausgewählt oder explizit angefordert werden
- XCSH.md/Kontextdateien: persistente Anweisungsdateien, die als Kontext-Datei-Fähigkeit geladen und nach Ebenen-/Tiefenregeln zusammengeführt werden
src/discovery/agents-md.ts durchläuft explizit übergeordnete Verzeichnisse ausgehend von cwd, um eigenständige XCSH.md-Dateien zu erkennen (bis zu Tiefe 20), wobei Segmente versteckter Verzeichnisse ausgeschlossen werden.
Skills vs. Slash-Befehle
Abschnitt betitelt „Skills vs. Slash-Befehle“- Skills: modelllesbare Wissens-/Workflow-Inhalte
- Slash-Befehle: benutzerseitig aufgerufene Befehls-Einstiegspunkte
/skill:<name>ist ein komfortabler Wrapper, der Skill-Text einfügt; er ändert nicht die Skill-Erkennungssemantik
Skills vs. benutzerdefinierte Werkzeuge
Abschnitt betitelt „Skills vs. benutzerdefinierte Werkzeuge“- Skills: Dokumentations-/Workflow-Inhalte, die über Prompt-Kontext und
readgeladen werden - Benutzerdefinierte Werkzeuge: ausführbare Werkzeug-APIs, die vom Modell mit Schemata und Laufzeit-Seiteneffekten aufgerufen werden können
Skills vs. Hooks
Abschnitt betitelt „Skills vs. Hooks“- Skills: passive Inhalte
- Hooks: ereignisgesteuerte Laufzeit-Interceptoren, die Verhalten während der Ausführung blockieren/ändern können
Praktische Anleitungen zur Erstellung im Zusammenhang mit der Erkennungslogik
Abschnitt betitelt „Praktische Anleitungen zur Erstellung im Zusammenhang mit der Erkennungslogik“- Legen Sie jeden Skill in seinem eigenen Verzeichnis ab:
<skills-root>/<skill-name>/SKILL.md - Fügen Sie immer explizite Frontmatter-Felder
nameunddescriptionhinzu - Halten Sie referenzierte Ressourcen im selben Skill-Verzeichnis und greifen Sie darauf mit
skill://<name>/...zu - Für verschachtelte Taxonomien (
team/domain/skill) verweisen Sieskills.customDirectoriesauf das übergeordnete verschachtelte Verzeichnis; die Suche selbst bleibt nicht-rekursiv - Vermeiden Sie doppelte Skill-Namen über Quellen hinweg; der erste Treffer gewinnt nach Provider-Priorität