Die vollständige Referenz sind die TypeScript-Deklarationen für Mods von Claude Code, die jedes Event, jede Methode und jedes Element mit Beispielen beschreiben. Die Kopie auf GitHub kann älter sein als die installierte Version von Claude Code. Wenn die beiden voneinander abweichen, verlassen Sie sich auf die Kopie, die Claude Code für Ihre Version schreibt.
Dateien
Ein Mod ist ein Plugin-Verzeichnis mit diesen Dateien:register erhält on und options. options enthält die Werte der userConfig-Felder, die das Manifest deklariert, wobei Standardwerte ergänzt werden.
Die Hook-Funktion
Ein Mod registriert jeden seiner Hooks, also Event-Handler, indem eron innerhalb von register aufruft. on nimmt den Namen des Events, einen optionalen Matcher, also einen Filter auf die Felder des Events, und den Hook entgegen, wie in on('tool.call', { tool: 'Bash' }, async ($, e, next) => next(e)). on gibt eine Registrierung mit einer Methode zurück, .catch(handler), die den Fehler-Handler des Hooks festlegt.
Events
Events sind danach gruppiert, was sie betreffen, jeweils mit der Angabe, wann sie ausgelöst werden und was ein Hook darauf zurückgeben kann. Hooks aufturn.step und process.spawn sind asynchrone Generatoren, andere Hooks sind asynchrone Funktionen.
Die letzte Spalte jeder Tabelle verwendet eine Kurzschreibweise. next(e) gibt das Event unverändert weiter. next({ ...e, text }) gibt eine Kopie mit dem genannten geänderten Feld weiter, wie in next({ ...e, text: e.text.trim() }). Ein Objekt beantwortet das Event, ohne next aufzurufen, und ein Wort wie reason steht für einen String, den Sie schreiben, wie in { deny: 'Use the file tools.' }.
Tools
Tool-Events werden rund um jeden Tool-Aufruf ausgelöst, den Claude durchführt, von der Beschreibung, die Claude liest, bis zur Entscheidung, ob der Aufruf ausgeführt wird:Agenten- und Organisationsfelder in tool.check
Lesen Sie in einem tool.check-Hook diese Felder, um den Aufruf eines Subagenten von dem der Hauptkonversation zu unterscheiden und um zu sehen, ob Ihre Organisation für ein Konnektor-Tool eine Genehmigung verlangt:
e.agentId: gesetzt, wenn ein Subagent oder ein prozessinternes Teammitglied den Aufruf durchführt, und nicht vorhanden, wenn die Hauptkonversation ihn durchführte.ceiling:askfür ein Konnektor-Tool, das Ihre Organisation aufaskgesetzt hat, in Sitzungen, in denen diese Einstellung Claude Code erreicht
tool.check erfordern e.agentId und e.ceiling Claude Code v2.1.290 oder höher.
Das Feld e.isReadOnly in tool.check
In einem tool.check-Hook ist e.isReadOnly gleich true, wenn das Tool diesen Aufruf als nur lesend meldet. Andernfalls ist das Feld nicht vorhanden, statt false zu sein. Der Wert ist die eigene Angabe des Tools. Lesen Sie daher Prüfen, ob ein Tool-Aufruf nur lesend ist, bevor Sie einen Aufruf allein anhand dieses Felds genehmigen.
Bei tool.check erfordert e.isReadOnly Claude Code v2.1.304 oder höher.
Prompts und was Claude liest
Prompt-Events betreffen den Text, den der Benutzer eingibt, und den Text, den Claude Code von sich aus an Claude sendet, etwa den System-Prompt und Erinnerungen:Quell- und Frontmatter-Felder in skill.prompt
In einem skill.prompt-Hook können Sie diese Felder zusammen mit dem Namen des Skills in e.skill und dem Text, den Claude liest, in e.text lesen:
Ein Hook kann einen geänderten
text oder ein geändertes frontmatter an next übergeben: Die Hooks danach lesen beides, und Claude liest den endgültigen text. Ein Hook, der ein anderes Feld ändert, schlägt fehl.
Bei skill.prompt erfordern e.source, e.pluginName, e.path, e.frontmatter und e.frontmatterProblem Claude Code v2.1.299 oder höher.
Befehle und Konfiguration
e.layers und e.source in settings.read
e.layers: ein{ source, settings }-Objekt für jede verwendete Quelle, die Einstellungen enthält, mit dem niedrigsten Vorrang zuerst. Siehe Was einsettings.read-Hook erhält.e.source: die eine Quelle, die ein Mod angefordert hat, wie in$.settings.read({ source: 'policy' }). Nicht vorhanden beim eigenen Lesevorgang von Claude Code und bei einem Lesevorgang der zusammengeführten Einstellungen
Turns
Turn-Events verfolgen eine Antwort von Anfang bis Ende, einschließlich jeder Anfrage an das Modell darin:Sitzung
Sitzungs-Events markieren, dass die Sitzung startet, endet, komprimiert wird und Nachrichten mit anderen Sitzungen austauscht:Subagenten
Subagenten-Events werden ausgelöst, wenn Claude ein Subagenten-Typ angeboten wird und wenn ein Subagent oder ein Teammitglied eines Agent-Teams gleich startet:
Wenn Claude einen Subagenten mit dem Tool
SendMessage fortsetzt, wird Ihr agent.spawn-Hook nicht erneut ausgeführt. Um die SendMessage-Aufrufe abzulehnen, die einen Subagenten fortsetzen, gleichen Sie dieses Tool in einem tool.call-Hook ab.
Oberfläche
Oberflächen-Events werden ausgelöst, wenn Claude Code eine Render-Stelle zeichnet und wenn der Benutzer ein Steuerelement verwendet, das ein Mod gezeichnet hat. In der Oberfläche zeichnen zeigt, was einui.render-Hook zurückgibt:
Andere Mods
Mit diesen Events kann ein Mod auf andere Mods einwirken, während sie geladen werden, um einen abzulehnen oder die Mods-API zu ändern, die er erhält:
Wenn der Hook eines anderen Mods eine Methode in einem Namespace aufruft, den Sie in
engine.create hinzugefügt haben, laufen die $-Aufrufe Ihrer Methode im Kontext dieses Hooks, bis jeder Hook auf diesem Event zurückgekehrt ist. Beispielsweise wird ein relativer Pfad relativ zum Arbeitsverzeichnis dieses Hooks aufgelöst, und $.prompt.submit wird abgelehnt, solange der Turn auf diesen Hook wartet. Aufrufe, die Ihre Methode danach durchführt, laufen im eigenen Kontext Ihres Mods.
Telemetrie
Telemetrie-Events werden für die Nutzungsdatensätze ausgelöst, die Claude Code protokolliert:Events von Einstellungs-Hooks
Jedes Event eines Einstellungs-Hooks ist ein Event mit dem Namenclassic.<Event>, etwa classic.Stop oder classic.PostToolUse. e ist das stdin-JSON des Hooks.
Mods-API-Aufrufe
Jede Mods-API-Methode ist auch ein Event, benannt nach ihrem Namespace und ihrer Methode, etwafs.read, model.complete oder ui.open. Ein Hook darauf fängt Aufrufe der Mods ab, die nach ihm ausgeführt werden, und kann next(e), { deny: reason } oder { value } zurückgeben.
Methoden der Mods-API
Die Mods-API ist das Argument$, das jeder Hook erhält. Ihre Methoden sind in Namespaces gruppiert, etwa $.ui. Diese Tabelle listet die Methoden jedes Namespace nach Namen auf, sodass open in der Zeile $.ui dem Aufruf $.ui.open(...) entspricht. Die Leitfäden zeigen die gängigen Methoden im Einsatz, und die Typen für Ihren Build dokumentieren jede Methode mit einem Beispiel.
Render-Stellen
Eine Render-Stelle ist ein Erweiterungspunkt in der Oberfläche von Claude Code. Jede Zeile ist ein Wert vone.component in einem ui.render-Hook, mit den Feldern von e.props und den Apps, die sie rendern. e.surface benennt die App, die zeichnet, etwa terminal, desktop oder vscode. Ändern, was Claude Code bereits zeichnet zeigt, was ein Hook an einer Stelle tun kann, mit einem Beispiel für jede Möglichkeit.
Das Rendern in der VS Code-Erweiterung erfordert die Erweiterungsversion 2.1.299 oder höher. Eine Sitzung, die keine Feature-Flags abruft, benötigt 2.1.304 oder höher. In der VS Code-Erweiterung zeichnen listet auf, was die Erweiterung anders zeichnet.
e.viewport enthält columns, rows und isFullscreen. Im Terminal und in der Desktop-App fehlt es, bis die App ihr Fenster gemessen hat. Dort ist sein Wert rows die Höhe des gesamten Fensters, nicht die Ihres Bereichs. In der VS Code-Erweiterung ist es immer vorhanden.
Um einen Baum an seine Stelle anzupassen, lesen Sie im Hook die folgenden Props:
- Breite eines
Paneoder des Bands: Zeichnen Sie aufe.props.bodyColumns - Höhe eines
Paneneben dem Transkript: Wenne.props.placementden Wert'dock'hat, iste.props.scroll.bodyRowsdie Anzahl der Zeilen, die der Bereich für Ihren Baum hat - Höhe eines
Paneüber dem Prompt: Wenne.props.placementden Wert'inline'hat, wächst der Bereich mit Ihrem Baum bis zu einer Grenze, undbodyRowsist diese Grenze. Über das Feldrowsvon$.ui.openlässt sich eine andere Grenze anfordern.
Elemente
Elemente sind die Bausteine eines Baums, den einui.render-Hook zurückgibt, und Sie erhalten sie über $.ui.resolve(e). Einen Baum aus Elementen erstellen zeigt die gängigen Elemente und wie das Terminal sie darstellt, und die Interface-Galerie enthält Screenshots der meisten. Ein Häkchen bedeutet, dass die App das Element darstellen kann.
Weitere Regeln für
Button:
action: benennt eine der eigenen Tastenkombinations-Aktionen von Claude Code, und die Tastenkombination des Benutzers dafür drückt die Schaltfläche, wenn diese Tastenkombination ein Akkord oder eine Taste mit Modifikator ist- Ziffern-Hotkeys im Band: Ein Ziffern-
hotkeyauf einer Schaltfläche im Band wird auch ausgelöst, wenn der Benutzer nur diese Ziffer in einen leeren Prompt eingibt und innehält - Ein eingeklapptes Band: Solange das Band eingeklappt ist, drückt weder eine
action-Tastenkombination noch ein Hotkey eine Schaltfläche darin - Zwei Schaltflächen mit demselben Hotkey: Wenn zwei Schaltflächen in einer Zeichnung denselben
hotkeyangeben, erhält ihn die spätere variant:primaryodersecondary; jeder andere Wert löst einen Fehler aus. Im Terminal wird eineprimary-Schaltfläche in der Akzentfarbe gezeichnet, sofern sie nichtplainist.role:dismisskennzeichnet eine Schließen-Schaltfläche; jeder andere Wert löst einen Fehler aus. Führen Sie das Schließen in IhremonPressaus. In einem Band mit Text und einer Reihe von Schaltflächen kann die Desktop-App die erstedismiss-Schaltfläche der Reihe als eigenes Schließen-Steuerelement zeichnen. Das Terminal zeichnet die Schaltfläche so, wie es sie ohnerolezeichnen würde.
Button kann anstelle eines label auch children enthalten:
- Was Children sein können: Strings und
Text-Elemente, etwa ein Name gefolgt von einem abgeblendeten Detail oder ein farbiger Chip. Claude Code lehnt jedes andere Element innerhalb einesButtonab. - Benennung der Schaltfläche: Das
labelbenennt die Schaltfläche und entspricht standardmäßig dem Text ihrer Children. Geben Sie einer Schaltfläche, deren Children nicht aus einem einzelnen String bestehen, einenkeyoder einlabel. - Im Terminal: Die Children werden dort gezeichnet, wo das Label stehen würde, und ein Drücken an beliebiger Stelle darauf zählt als ein Drücken, sodass Sie jede Zeile einer Liste zu einer einzelnen Schaltfläche machen können
- In der Desktop-App und der VS Code-Erweiterung: Die Schaltfläche zeichnet ihr
label
Ein
Button mit Children, die nicht aus einem einzelnen String bestehen, erfordert Claude Code v2.1.295 oder höher.autoFocus akzeptiert bei jedem Steuerelement nur true; lassen Sie die Prop also weg, um es deaktiviert zu lassen.
Die VS Code-Erweiterung ignoriert einige Element-Props und zeichnet das Element so, als hätten Sie sie weggelassen:
Box:positionmit seinentop,left,rightundbottom,alignSelf,borderDimColorundhoverText:size,mono,tabularundhoverButton:hotkey,plain,autoFocus,actionundhover, sodass der Benutzer eine Schaltfläche dort per Klick drückt oder mit der Eingabetaste, sobald sie den Fokus hat. Die Erweiterung ignoriert außerdemvariantundrole.Code:language,path,startLine,formatundwrap, sodass Code ohne Farben oder Zeilennummern gezeichnet wird und ein Block mitformat: 'diff'den Rohtext des Diffs anzeigtInputundSelect:autoFocussowierowsbei einemInputSvg:isInteractive
Rahmenstile für Box
Um einen Rahmen um eine Box zu zeichnen, setzen Sie deren borderStyle auf einen dieser Namen, etwa borderStyle: 'round'. Jede Zeile gibt an, was das Terminal für diesen Namen zeichnet, und zeigt die Oberkante des Rahmens.
Eine
Box, deren borderStyle einen anderen Namen angibt, etwa 'rounded', wird ohne Rahmen gezeichnet.
Abstandsstufen für Box
Die Abstands-Props von Box sind gap, columnGap, rowGap, padding, margin sowie die Formen von padding und margin für eine Seite oder eine Achse, etwa paddingX und marginTop. Jede nimmt eine Anzahl von Terminal-Zellen wie gap: 1 oder einen Stufennamen wie gap: 'md' an. Im Terminal und in der VS Code-Erweiterung entspricht jede Stufe dieser Anzahl von Zellen:
Wenn Sie
gap, padding oder margin auf eine Stufe setzen, gilt die Stufe gleichzeitig horizontal und vertikal. Im Terminal und in der VS Code-Erweiterung bedeutet padding: 'md' beispielsweise zwei Zellen auf jeder Seite und eine Zeile darüber und darunter.
Stufennamen erfordern Claude Code v2.1.299 oder höher. In einer früheren Version wird ein Baum, der einen Stufennamen verwendet, nicht gezeichnet.
Typografie-Props für Text
Setzen Sie size, weight, mono oder tabular auf einem Text, um die App, die Ihren Baum zeichnet, um eine Textgröße, eine Schriftstärke, eine Festbreitenschrift oder Ziffern gleicher Breite zu bitten. Bevor Sie sich auf eine Prop verlassen, prüfen Sie, was das Terminal und die VS Code-Erweiterung damit tun. Wenn eine App eine von Ihnen gesetzte Prop ignoriert, wird Ihr Baum dort trotzdem gezeichnet, mit dem Text so, als hätten Sie diese Prop weggelassen.
Diese vier Props erfordern Claude Code v2.1.299 oder höher. In einer früheren Version wird ein Baum, der
size, weight, mono oder tabular setzt, nicht gezeichnet.
bold durch weight ersetzen
bold auf einem Text ist zugunsten von weight veraltet, funktioniert aber weiterhin. Um es auf einem Text ohne weight zu ersetzen, ändern Sie bold: true in weight: 'semibold', um unter Claude Code v2.1.299 oder höher dasselbe Ergebnis zu erhalten.
In einer Version vor v2.1.299 wird ein Baum, der weight setzt, nicht gezeichnet. Wenn Sie auf einem Text sowohl bold als auch weight setzen, hat bold keine Wirkung.
Limits
Hooks und Aufrufe der Mods-API unterliegen Zeit- und Größenlimits. Claude Code überspringt einen Hook, der ein Zeitlimit überschreitet. Ein Baum, der das Limit für Verschachtelung, Elemente,Raster-Zellen oder Image-Bytes überschreitet, wird nicht gezeichnet.
Einstellungen und Umgebungsvariablen
Dies sind die Einstellungen und Umgebungsvariablen, die sich auf Mods auswirken. Die Spalte „Ort“ gibt an, aus welcher Einstellungsdatei oder Umgebung die jeweilige Einstellung gelesen wird:sec-default@builtin ist ein in Claude Code integrierter Wächter, der in /plugin und im Debug-Log als cc-plugin-sec-default aufgeführt wird. Er wird vor jedem Mod geladen, den eine Person auf einem Rechner mit verwalteten Einstellungen installiert, oder in einer Sitzung, deren Anmeldedaten aus einem Team- oder Enterprise-/login stammen. Wenn das verwaltete prependPlugins gesetzt ist, wird der Wächter nur geladen, wenn diese Liste ihn aufführt, und zwar an der aufgeführten Position.
Sein Quellcode befindet sich im Verzeichnis mods/sec-default des Claude Code-Repositorys.
Befehle
Mit diesen Befehlen und Flags laden, prüfen und testen Sie einen Mod. Dieclaude-Befehle werden in Ihrer Shell ausgeführt, die /-Befehle im Prompt von Claude Code. In der Tabelle steht <directory> für einen Pfad, den Sie eingeben, wie in claude plugin validate ./first-mod. Eckige Klammern kennzeichnen ein optionales Argument.