Outil
Composez un paquet pour Claude Code, OpenCode, Codex, pi ou oh-my-pi : les fichiers s'écrivent sous vos yeux.
Chargement de la démonstration…
En bref
Composez un plugin pour Claude Code, OpenCode, Codex, pi ou oh-my-pi : nom, description, briques et outils MCP. L'arborescence et chaque fichier s'écrivent sous vos yeux, prêts à être copiés. Une erreur de nom ou de description bloque la copie au lieu de produire un paquet douteux.
Ce qu'on y voit
Composez un paquet pour Claude Code, OpenCode, Codex, pi ou oh-my-pi : les fichiers s'écrivent sous vos yeux.
L'idée
Un plugin est un petit paquet lisible : un manifeste ou une extension, des skills, des hooks, des commandes, des sous-agents. Le rendre visible, c'est déjà le rendre relisible.
La fabrication
Générateur pur et testé pour cinq harness : arborescence cliquable, aperçu du fichier, copie, validation en direct du kebab-case, de la description et des hooks sans validation humaine.
Sous le capot
5 points d'implémentationPile
- TypeScript strict
- React
- lucide-react
- Générateur pur
Fichiers
lib/sim/plugin.tslib/sim/plugin.check.tscomponents/demos/Plugins.tsxcomponents/demos/Plugins.module.css
Implémentation
- generatePlugin est une fonction pure : elle déduit les fichiers des briques cochées et du harness cible, puis les sérialise en JSON, Markdown, TOML ou TypeScript. Aucune écriture disque, aucun réseau.
- Le nom doit suivre le kebab-case (^[a-z0-9]+(?:-[a-z0-9]+)*$), faire 64 caractères au plus, et éviter les préfixes réservés de Claude Code ; une description vide ou de plus de 1 024 caractères bloque la génération.
- Les outils MCP saisis sont normalisés en snake_case, dédupliqués et plafonnés à 12 ; les hooks sans validation humaine et les briques vides produisent des avertissements, pas des erreurs.
- Les cibles sont propres à chaque harness : .claude-plugin/plugin.json, opencode.jsonc, AGENTS.md + .codex/config.toml, extensions .pi/.omp ; Codex est marqué « indicatif » car ce n'est pas un paquet plugin unique.
- L'arborescence est reconstruite à partir des chemins générés ; la copie passe par navigator.clipboard, avec un repli textarea et execCommand si l'API est refusée.