Claude Code Plugin Reference

Contrats de hook, compétence, commande et plugin.json de Claude Code vérifiés par rapport à un dépôt réel

par athola · athola/claude-night-market

Testé · Fonctionne ★ 8.8/10

Claude Code Plugin Reference — Contrats de hook, compétence, commande et plugin.json de Claude Code vérifiés par rapport à un dépôt réel

Ce que fait

Un document de référence couvrant le mécanisme des plugins Claude Code : contrats de champs plugin.json et metadata.json, frontmatter SKILL.md, frontmatter de commande et d'agent, enregistrement de hook dans hooks.json, contrat de charge utile JSON stdin, formes de verdict permissionDecision, sémantique des codes de sortie, et installation marketplace et verrouillage de version. Il se déclenche lorsque vous créez ou déboguez un plugin, une compétence, une commande, un agent ou un hook Claude Code. Le contenu est compilé à partir du dépôt athola/claude-night-market, donc environ un tiers est une convention locale au dépôt (noms de plugins night-market, scripts sanctum, contraintes d'hôte Python 3.9) aux côtés des contrats de harnais portables.

Rapport de test

Cloné le dépôt, confirmé que le frontmatter s'analyse avec nom + une description de 158 caractères, et vérifié ponctuellement 13 fichiers cités (check_plugin_hooks.py, validate_budget.py, hook_io.py, tdd_bdd_gate.py, marketplace.json, python39-compat.yml, ...) — tous présents ; aucun curl|sh, base64, ou texte d'injection nulle part dans le fichier de 511 lignes. L'installation a été exécutée dans un HOME temporaire frais et a placé SKILL.md à ~/.claude/skills/claude-code-plugin-reference/SKILL.md. Test de sortie : j'ai écrit un hook PreToolUse bloquant `git commit --no-verify` deux fois, extrait les deux corps Python, et les ai exécutés — la base de référence a imprimé permissionDecision « block » (pas l'un des allow/deny/ask) et a quitté avec le code 2, et elle a planté avec une JSONDecodeError non interceptée (code 1) sur `echo not-json` et sur stdin vide ; la version suivie par la compétence a imprimé « deny », a quitté avec le code 0 dans les trois cas, et a envoyé les diagnostics à stderr. J'ai également exécuté la propre porte du dépôt contre les deux manifestes : `python3 scripts/check_plugin_hooks.py` a rejeté mon plugin.json de base (code 1, « hooks array contains './hooks/hooks.json' ») et a accepté celui suivi par la compétence (code 0). Phrases de déclenchement — DEVRAIT charger : « How do I register a PreToolUse hook in my plugin's hooks.json? », « My plugin hook isn't firing, it reads CLAUDE_TOOL_INPUT and gets nothing », « What frontmatter does a SKILL.md need and how does Skill(plugin:name) resolve? » — je le chargerais pour les trois. NE DEVRAIT PAS : « Run the test suite and publish 1.9.16 to the marketplace » (le « Do not use for ops » explicite de la description me dirige vers night-market-operations, même si une section Marketplace existe) et « Write a Python CLI that parses JSON from stdin » (pas de contexte de plugin) — j'ai refusé les deux. La documentation perd un point : le corps prétend que `"hooks": []` est « verified across all 23 manifests » mais sur le disque, seuls 11 des 23 portent la clé et 12 l'omettent entièrement (même effet, formulation erronée), et le « used here » de la description ne nomme jamais le dépôt, donc un installateur autonome obtient des pointeurs uniquement night-market (/sanctum:update-plugins, plugins/imbue, compétences sœurs night-market-*) mélangés à des faits de harnais portables. Je n'ai pas pu exécuter Python 3.9 localement, donc l'affirmation datetime.UTC / py39 n'est pas vérifiée par l'exécution ; toutes les autres affirmations que j'ai vérifiées (10s enregistré vs 8s de timeout interne de herald, l'anomalie vow_no_ai_attribution warn/block, DESCRIPTION_MAX = 160, la docstring stdin-first de hook_io) correspondaient exactement à la source.

Testé le: 2026-07-21 · Claude Code 2.x (agent harness)

Installation

git clone --depth 1 https://github.com/athola/claude-night-market.git /tmp/claude-code-plugin-reference-src
mkdir -p ~/.claude/skills
cp -R /tmp/claude-code-plugin-reference-src/.claude/skills/claude-code-plugin-reference ~/.claude/skills/claude-code-plugin-reference
# Single markdown file, no deps, no scripts, nothing to run.
# The skill lives in the repo's own .claude/skills/ (a project skill), not in a plugin.
# The ~15 scripts it cites (scripts/check_plugin_hooks.py, plugins/abstract/scripts/validate_budget.py,
#   plugins/sanctum/scripts/update_versions.py, ...) all exist in the clone at /tmp/claude-code-plugin-reference-src
#   but NOT next to the installed skill, so the "re-verify" commands in its Provenance section
#   only run from inside a night-market checkout. Keep the clone if you want them.
# Plugin-marketplace alternative does NOT ship this skill: /plugin marketplace add athola/claude-night-market
#   installs the plugins under plugins/, and this file is not registered in any plugin.json.

Commandes et exemples de prompts

  • /claude-code-plugin-referenceContrats de hook, compétence, commande et plugin.json de Claude Code vérifiés par rapport à un dépôt réel

Les skills se déclenchent sur des demandes en langage courant — aucune commande à retenir. Après installation, des prompts comme ceux-ci l'activent (en anglais) :

  • Explain how Claude Code skills are triggered
  • Help me author a new Claude Code plugin
  • Debug why my hook isn't firing correctly