Synthèse automatique
Automatise l'ajout d'un nouveau plugin de compétences au marketplace à partir d'un dépôt Git, en clonant le dépôt puis en générant l'arborescence du plugin et le contenu du SKILL.md.
Points forts
- Processus découpé en étapes explicites avec une arborescence de fichiers imposée (manifeste, SKILL.md, références, .gitignore)
- Délègue l'analyse du dépôt et la rédaction du contenu à un sous-agent afin de préserver le contexte principal
- Extrait automatiquement le dernier tag stable pour assurer la reproductibilité de la version référencée
- Impose le respect des standards de qualité via la compétence skill-creator avant toute rédaction
Limites
- Fortement couplé à l'écosystème Claude Code (outil Task, script init_skill.py, répertoire .claude-plugin)
- Les étapes 6 à 11 sont annoncées mais leur contenu n'est pas détaillé dans le document fourni
- Aucune validation du dépôt source ni gestion explicite des erreurs de clone ou de tag inexistant
À utiliser lorsque vous voulez référencer une bibliothèque ou un projet externe dans le marketplace sous forme de nouveau plugin.
À éviter lorsque vous rédigez une compétence originale sans dépôt amont, ou lorsque vous travaillez en dehors de Claude Code.
Analyse de sécurité
PrudenceThe workflow is a legitimate, local repository-maintenance runbook: directory creation, a git clone, writing markdown/JSON in the plugin tree, and packaging. It uses bash and network access, and has a couple of scoped `rm -rf` cleanup commands, which warrants caution rather than safe, but it contains no exfiltration, privilege escalation, obfuscated payloads, or destructive system-wide operations.
- •Clones an arbitrary user-supplied git repository over the network (`git clone <repo-url>`) into the marketplace tree; contents are never executed, but the clone becomes untrusted input for subsequent steps.
- •Uses `rm -rf` on placeholder paths (`scripts/`, `assets/`, `references/api_reference.md`). Targets are scoped to the new plugin directory, not global, but the commands are path-interpolated and could delete more than intended if `$SKILL_NAME` is malformed.
- •Writes to shared repo state without confirmation: marketplace.json, legacy marketplace.json, README.md, plugin.json, .gitignore, and package.sh output. No destructive git operations (no reset/clean/push) and no credential or secret handling.
- •Dispatches a general-purpose subagent with filesystem write access and instructs it to read large volumes of cloned source; no exfiltration, obfuscation, or base64 payloads present.
- •No prompt-injection or role-manipulation attempts detected in the skill body.
- •No allowed-tools declared, but the workflow instructs the agent to run shell commands (git clone, mkdir, rm, python3, ./package.sh) and to dispatch Task subagents — broad capability surface with no explicit declaration.
- •Clones an arbitrary user-supplied git repository and then references repo-local execution paths (init_skill.py, ./package.sh, .claude/commands/*.md); running maintainer scripts against an untrusted clone is a mild supply-chain exposure that relies on the user trusting the source URLs.
- •Contains scoped rm -rf commands (rm -rf plugins/<skill-name>/skills/<skill-name>/scripts and .../assets) — deletion is limited to generated placeholder directories, but destructive shell operations are present.
- •Step 11 instructs reading and mirroring existing command files (update-llamacpp.md) and re-dispatching subagents, propagating whatever patterns those files contain without validation.
Exemples
Add the requests library to the marketplace as a skill named requests from https://github.com/psf/requestsCreate a new plugin called fastapi from https://github.com/tiangolo/fastapi, checking out tag 0.110.0Scaffold a marketplace skill for our internal SDK at https://github.com/acme/sdk, and use the hyphen-case name acme-sdkAdd New Skill to Marketplace
This command adds a new skill plugin to the marketplace from a git repository.
Start by asking the user for the two required inputs below, then execute all steps.
Required Inputs
Ask the user for both before starting:
- Git repository URL - the upstream library/project repo (e.g.,
https://github.com/org/my-lib) - Skill name - hyphen-case identifier matching the directory name (e.g.,
my-lib)
Optionally ask for a specific tag/version to checkout (default: latest tag, or main/master if no tags exist).
Plugin Structure to Create
plugins/<skill-name>/
├── .claude-plugin/
│ └── plugin.json # Plugin manifest
├── skills/<skill-name>/
│ ├── SKILL.md # Main skill entry point
│ └── references/ # Detailed docs loaded on-demand
│ ├── api-*.md # API sections (split by domain)
│ └── workflows.md # Working examples
├── <repo-dir>/ # Standalone git clone (gitignored)
│ └── .git/
└── .gitignore # Ignores *.skill and <repo-dir>/
Process
Subagent strategy: Steps 4 and 5 (repository analysis + skill content generation) are context-heavy and must be dispatched to subagents using the
Tasktool. Run steps 1–3 in the main context, then hand off to subagents for the exploration and writing work, then return to main context for steps 6–11.
1. Create Plugin Directory Structure
SKILL_NAME="<skill-name>"
PLUGIN_DIR="plugins/$SKILL_NAME"
mkdir -p "$PLUGIN_DIR/.claude-plugin"
mkdir -p "$PLUGIN_DIR/skills/$SKILL_NAME/references"
2. Clone the Git Repository
cd "plugins/$SKILL_NAME"
# Clone the upstream repo
git clone <repo-url> <repo-dir>
cd <repo-dir>
# Checkout latest stable tag if available
LATEST_TAG=$(git tag --sort=-version:refname | head -n 1)
if [ -n "$LATEST_TAG" ]; then
echo "Checking out latest tag: $LATEST_TAG"
git checkout "$LATEST_TAG"
else
echo "No tags found, staying on default branch: $(git branch --show-current)"
fi
# Record the version for documentation
CURRENT_VERSION=$(git describe --tags --abbrev=0 2>/dev/null || git rev-parse --short HEAD)
echo "Version: $CURRENT_VERSION"
cd ../../..
If the user provided a specific tag/version, check that out instead.
3. Initialize Skill with init_skill.py
python3 .claude/skills/skill-creator/scripts/init_skill.py "$SKILL_NAME" \
--path "plugins/$SKILL_NAME/skills"
This generates a template SKILL.md and placeholder directories. The placeholder files
in scripts/, references/, and assets/ will be replaced or deleted in Step 5.
4 + 5. Analyze Repository & Generate Skill Content (subagent)
Dispatch a single general-purpose subagent via the Task tool for both the exploration
and file-writing phases. This keeps the large volume of source code out of the main context.
Provide the subagent with:
- The absolute path to the cloned repo (
plugins/<skill-name>/<repo-dir>/) - The absolute path to the skill output directory (
plugins/<skill-name>/skills/<skill-name>/) - The skill name and version/tag checked out in Step 2
Important: The subagent must invoke the
skill-creatorskill (via theSkilltool) before writing any skill content. That skill defines the quality standards, frontmatter rules, progressive-disclosure structure, and file-size limits that all skills must follow.
The subagent prompt should instruct it to:
Phase A — Analyze the Repository:
- Read
README.mdand anydocs/directory for overview and usage - Identify the primary language (C/C++, Python, Rust, TypeScript, etc.)
- C/C++: Read all public headers (
include/*.h,*.h) — these are the source of truth - Python: Read
__init__.pyexports, docstrings, type stubs (.pyi), ordocs/ - TypeScript/JavaScript: Read
index.d.ts,types.d.ts, or JSDoc comments - Rust: Read
src/lib.rs,pubdeclarations, and anydocs.rs-style docs - Other: Read the primary module/package entry points and their public interface
- Look for
examples/orsamples/directories for usage patterns - Identify logical API domains to split into separate reference files (e.g., initialization, core operations, utilities, advanced features)
- Note the total number of public API functions/methods for the plugin description
Phase B — Generate Skill Content:
5a. Write references/ files
Create one markdown file per logical API domain. Use api-<domain>.md naming.
Always create a workflows.md with complete working examples.
Structure for each references/api-<domain>.md:
# <Domain Name>
## Table of Contents
1. [Group 1](#group-1)
2. [Group 2](#group-2)
## Group 1
### `function_signature(param: type) -> return_type`
**Description:** What it does.
**Parameters:** param descriptions.
**Returns:** Return value description.
**Example:**
\`\`\`<language>
// working example
\`\`\`
Structure for references/workflows.md:
# Workflows
## Table of Contents
1. [Quick Start](#quick-start)
2. [Common Use Case 1](#use-case-1)
...
## Quick Start
\`\`\`<language>
// minimal working example showing the most common scenario
\`\`\`
## Common Use Case 1
\`\`\`<language>
// complete working example
\`\`\`
5b. Write SKILL.md
Replace the generated template with a complete SKILL.md. Rules:
- Concise and dense — SKILL.md is always loaded into context; every line must earn
its place; do not pad it with API details that belong in
references/ - Under 500 lines total; if approaching the limit, move content to
references/ name:in frontmatter must match the directory name exactly- Quote descriptions containing colons:
description: "Use when: ..."
---
name: <skill-name>
description: "<1-2 sentences: what the lib does and when to use this skill>"
---
# <Skill Title>
## Overview
<2-3 sentences: what the library is, primary use cases, language/platform>
**Version:** <version from Step 2>
**Language:** <primary language>
**License:** <license from repo>
## Quick Start
\`\`\`<language>
// minimal working example
\`\`\`
## Core Concepts
<3-5 bullet points covering the main concepts users need to know>
## API Reference
| Domain | File | Description |
|--------|------|-------------|
| <Domain 1> | [api-domain1.md](references/api-domain1.md) | <brief desc> |
| <Domain 2> | [api-domain2.md](references/api-domain2.md) | <brief desc> |
| Workflows | [workflows.md](references/workflows.md) | Working examples |
## Common Workflows
See [references/workflows.md](references/workflows.md) for complete examples.
Quick reference:
- **<task 1>**: see workflows.md#...
- **<task 2>**: see workflows.md#...
## Key Considerations
<3-5 bullet points on gotchas, performance notes, or important constraints>
5c. Clean up init_skill.py artifacts
The subagent should also delete the unused placeholder files created by init_skill.py:
rm -rf "plugins/$SKILL_NAME/skills/$SKILL_NAME/scripts"
rm -rf "plugins/$SKILL_NAME/skills/$SKILL_NAME/assets"
rm -f "plugins/$SKILL_NAME/skills/$SKILL_NAME/references/api_reference.md"
The subagent should return a summary of: the license found, the API domains created, the reference files written, the version documented, and the plugin description text — so the main context can use these values in Steps 6–11 without re-reading the files.
6. Create plugin.json
Create plugins/<skill-name>/.claude-plugin/plugin.json:
{
"name": "<skill-name>",
"version": "1.0.0",
"description": "<one sentence: lib name, version, function count or key capability>",
"author": {
"name": "Datathings",
"email": "contact@datathings.com"
},
"license": "<license from upstream repo, e.g. MIT, Apache-2.0>",
"repository": "https://github.com/datathings/marketplace",
"keywords": ["<primary-language>", "<lib-name>", "<key-use-case-1>", "<key-use-case-2>"],
"skills": "./skills/"
}
7. Create .gitignore
Create plugins/<skill-name>/.gitignore to exclude the standalone git clone:
*.skill
<repo-dir>/
__pycache__/
*.pyc
Where <repo-dir> is the directory name used when cloning in Step 2.
8. Update Marketplace Registry Files
Two JSON registries need a new entry.
.claude-plugin/marketplace.json — add to the plugins array:
{
"name": "<skill-name>",
"source": "./plugins/<skill-name>",
"description": "<lib name> <language> skill - <key capability summary>",
"version": "1.0.0"
}
marketplace.json (legacy format) — add to the skills array:
{
"name": "<skill-name>",
"path": "./plugins/<skill-name>/skills/<skill-name>",
"version": "1.0.0",
"description": "<lib name> <language> skill - <key capability summary>"
}
Also update the top-level description field in marketplace.json to mention the new library.
9. Update README.md
Add the new skill in five places:
1. Overview Plugins table (## Plugins) — include the correct Category:
| **<skill-name>** | <Category> | Skill | 1.0.0 | <short description of the library and skill coverage> |
Categories: GreyCat Technology, Agentic AI, High Performance Math & GPU, Power Grid Management
2. Category section install command — add to the install block in the appropriate category section (## GreyCat Technology, ## Agentic AI, ## High Performance Math & GPU Computing, or ## Power Grid Management):
/plugin install <skill-name>@datathings
3. Plugin Details section — add an #### <skill-name> entry under the matching ### <Category> subsection:
#### <skill-name>
<1-2 sentences describing what the library does and what the skill provides>
- Key capability 1
- Key capability 2
4. Standalone Skill Files list (## Standalone Skill Files):
├── <skill-name>.skill # <short description>
5. Links section (## Links) — add the upstream GitHub repository:
- **<Library Name>**: https://github.com/<org>/<repo>
Insert it near other libraries in the same category for consistency.
10. Package the Skill
# From repo root — package.sh auto-discovers all skills in plugins/*/skills/*/
./package.sh "$SKILL_NAME"
This creates skills/<skill-name>.skill. Fix any validation errors reported.
Note:
package.shandbump-version.shboth auto-discover plugins via directory globs — no manual edits to those scripts are needed.
11. Create Update Command
Create .claude/commands/update_<skill_name>.md following the same pattern as
update-llamacpp.md and update-blas-lapack.md. Tailor it to the specific library
based on what was learned in Step 4 (which headers/files are the source of truth,
tag naming conventions, which reference files were created).
Reference example: Read
.claude/commands/update-llamacpp.mdas the concrete model to follow — structure, section names, subagent dispatch pattern, and success criteria checklist. Fill in all<placeholders>with the actual values for this library. The generated command must also instruct Claude to dispatch the heavy analysis + documentation work to a subagent, exactly asupdate-llamacpp.mddoes.
Template:
# Update <Skill Title> Skill to Latest Version
This command updates the <lib name> library to the latest version and synchronizes
all skill files with the updated API.
**Working directory:** `plugins/<skill-name>/`
## Repository Structure
\`\`\`
plugins/<skill-name>/
├── skills/<skill-name>/ # Skill content (SKILL.md and references/)
├── <repo-dir>/ # Upstream repo clone (NOT a submodule)
└── .claude-plugin/plugin.json # Plugin manifest
\`\`\`
The `<repo-dir>/` directory is a **standalone git clone** from <repo-url> - updated
independently via `git fetch` and `git checkout <tag>`.
## Process
### 1. Update Library to Latest Tag
\`\`\`bash
cd plugins/<skill-name>/<repo-dir>
git fetch --tags
CURRENT_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "unknown")
echo "Current tag: $CURRENT_TAG"
# Adapt tag pattern to match this repo's convention (e.g., v#.#.#, b####)
LATEST_TAG=$(git tag --sort=-version:refname | grep "^<tag-prefix>" | head -n 1)
echo "Latest tag: $LATEST_TAG"
if [ "$CURRENT_TAG" != "unknown" ] && [ "$CURRENT_TAG" != "$LATEST_TAG" ]; then
echo "Commits between $CURRENT_TAG and $LATEST_TAG:"
git log --oneline "$CURRENT_TAG..$LATEST_TAG" | head -n 50
fi
git checkout "$LATEST_TAG"
echo "Now on: $(git describe --tags)"
cd ../../..
\`\`\`
### 2. Analyze API Changes
Scan the source-of-truth files:
<list the specific files that define the public API for this library>
Look for:
- New functions/methods added since last update
- Deprecated or removed functions
- Modified signatures (parameter changes, return types)
- New types, enums, or constants
### 3. Update Skill Documentation Files
Update the following files in `skills/<skill-name>/references/`:
<list each reference file and what it covers>
### 4. Update Main SKILL.md
- Update the library version/tag in the documentation
- Update function/method counts in the overview
- Add notes about newly supported features
- Update the API reference table if files were added/removed
### 5. Remove Deprecated Content
- Search documentation files for functions removed from the source-of-truth files
- Remove or replace deprecated references
- Note breaking changes
### 6. Validate Changes
- Cross-reference all documented functions against the source-of-truth files
- Ensure signatures match exactly
- Verify all new public API functions are documented
### 7. Package Updated Skill
\`\`\`bash
./package.sh <skill-name>
\`\`\`
This creates `skills/<skill-name>.skill`.
## Key Considerations
- **Source of truth**: Always derive signatures from <source files>, not secondary docs
- **Deprecation handling**: Remove deprecated functions completely; don't just mark them
- **New features**: Major new features should get workflow examples
- **Backward compatibility**: Note any breaking changes in SKILL.md
## Success Criteria
- ✅ Library updated to latest stable tag
- ✅ SKILL.md documents which version it corresponds to
- ✅ All new API functions from source-of-truth files are documented
- ✅ All removed functions are deleted from documentation
- ✅ All signatures match source-of-truth exactly
- ✅ Code examples in workflows.md are valid
- ✅ Package builds successfully with `./package.sh <skill-name>`
Fill in all <placeholders> with the actual values for the specific library.
Key Considerations
- Skill name = directory name:
skills/<name>/SKILL.mdmust havename: <name>in frontmatter - Quote colons in descriptions: Unquoted colons break YAML parsing
- References one level deep: All reference files link directly from SKILL.md, no subdirectories
- Gitignore the clone: The
<repo-dir>/must be in.gitignore(it's a nested git repo) - Version in SKILL.md: Always document which upstream version/tag the skill covers
- Signatures must be exact: Copy directly from headers/type defs, do not paraphrase
- Keep SKILL.md under 500 lines: Move API details to
references/files
Success Criteria
- [ ]
plugins/<skill-name>/directory exists with correct structure - [ ] Git repo is cloned and checked out at correct version
- [ ]
skills/<skill-name>/SKILL.mdhas valid YAML frontmatter withnameanddescription - [ ]
references/contains at minimum one API file andworkflows.md - [ ]
plugin.jsonis valid JSON with all required fields - [ ]
.gitignoreexcludes the cloned repo directory and*.skill - [ ]
.claude-plugin/marketplace.jsonincludes the new plugin entry - [ ]
marketplace.json(legacy) includes the new skill entry - [ ]
README.mdupdated in all five locations (plugins table, category install command, plugin details, standalone skill files list, links section) - [ ]
./package.sh <skill-name>runs successfully and producesskills/<skill-name>.skill - [ ]
.claude/commands/update_<skill_name>.mdcreated with library-specific update instructions
Du fichier au premier essai
Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.
Consulter la source et ses fichiers annexesCe téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.
1. Télécharger le fichier
Télécharger SKILL.mdDepuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/add-skill-to-marketplace-ms5lrgzu/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.
Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.
mkdir -p '.skill-downloads/add-skill-to-marketplace-ms5lrgzu' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/add-skill-to-marketplace-ms5lrgzu/download' --output '.skill-downloads/add-skill-to-marketplace-ms5lrgzu/SKILL.md.part' && mv '.skill-downloads/add-skill-to-marketplace-ms5lrgzu/SKILL.md.part' '.skill-downloads/add-skill-to-marketplace-ms5lrgzu/SKILL.md'2. Vérifier les prérequis
Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.
Aucune section de prérequis reconnue dans ce fichier. Cela ne signifie pas qu’il est autonome : les bibliothèques, outils et accès peuvent être cités ailleurs dans le contenu ou dans le dépôt source.
Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.
3. Charger la skill
Le fichier ne fournit pas un en-tête name/description exploitable pour cette procédure native. Le téléchargement reste disponible pour lecture ; utilisez le mode manuel ci-dessous.
Mode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.
4. Faire un premier essai
Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :
Lis .skill-downloads/add-skill-to-marketplace-ms5lrgzu/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.
Bonnes pratiques React Hook Form
Developpement
Maîtrisez React Hook Form : évitez les anti-patterns, gérez les abonnements, et traitez correctement reset, dirty state et entrées contrôlées.
Migration Emotion vers Mantine
Developpement
Migrer les styled-components Emotion vers des composants Mantine avec style props et modules CSS. Pour convertir .styled.tsx ou supprimer les imports @emotion.
Détecteur de dérive de périmètre
Developpement
Analyse les diffs git par rapport à une intention pour détecter la dérive de périmètre, fichiers non liés et PR trop larges, puis suggère de garder, diviser ou justifier.