CMS skills marketplace¶
The CMS marketplace is a collection of plugins that teach AI coding agents how CMS analysis work is done. Each skill is grounded in commands tested on cmslpc against real CMS releases and data (CMS Open Data where possible), in both CMSSW and plain pip environments.
The marketplace is built for Claude Code. The skills follow the open Agent Skills specification, so other agents can use them too.
How it works¶
The marketplace is made of three kinds of pieces:
- Skill: a
SKILL.mdfile, with optional reference files and scripts, on one topic, for example making CMS-style histograms withhistandmplhep. The agent only reads a skill's short description until a request matches it, and then loads the rest. - Subagent: a specialist with its own instructions and context, for example
cms-analysis-coder, which implements an analysis specification end to end. - Plugin: an installable bundle of skills and subagents, such as
cms. Installed skills are namespaced by plugin, for examplecms:hist.
You don't call skills by name. Describe the physics task, and the agent picks up the skills whose descriptions match. Mentioning a skill ("use the analysis-spec-builder skill…") makes sure it is used.
What's inside¶
Current as of November 2026
New skills are added as pull requests are merged. The marketplace README always has the current list.
Core CMS analysis: CMSSW releases and architectures, OS containers, EDM modules, cmsRun configuration, EDM file inspection, and the Scikit-HEP stack on NanoAOD, plus analysis specifications.
| Skill | Use it for |
|---|---|
analysis-spec-builder | Turning an analysis request into a structured specification.md (datasets, cuts, histograms, tools) |
awkward-array | Jagged arrays with Awkward 2 on CMS NanoAOD (records, selection, combinatorics, indices, I/O) |
cmssw | Release areas, architectures and containers, EDM modules, cmsRun configs, EDM file tools |
hepdata | HEPData records with hepdata_lib, validated offline, following CMS requirements |
hist | Histograms with hist and mplhep for CMS (weights, normalisation, UHI, CMS-style plots) |
trigger-efficiency | Trigger turn-ons and offline thresholds from NanoAOD (reference method, Clopper-Pearson, plateau rule) |
vector-awkward | Four-vector kinematics on NanoAOD with vector and Awkward (masses, ΔR, mT, boosts) |
| Subagent | Role |
|---|---|
cms-analysis-coder | Implements an analysis specification using the marketplace skills |
cms-results-validator | Reviews an analysis against published CMS results on HEPData, in the style of an ARC review |
Skills for the CMS LPC analysis facility at Fermilab (cmslpc).
| Skill | Use it for |
|---|---|
lpc-condor | HTCondor batch jobs on cmslpc: inputs over XRootD, outputs to EOS, checking and resubmitting failed jobs |
Experiment-neutral Python tooling for HEP work, with notes for cmslpc.
| Skill | Use it for |
|---|---|
cli-creator | Typer command-line tools wired into pyproject.toml console scripts |
standalone-script | Single-file PEP 723 scripts run by uv, which carry their own dependencies |
A cms-ml plugin for ML workflows, covering weaver training and ONNX, TensorFlow and SONIC inference in CMSSW, is planned. See Contributing if you'd like to help write it.
Install¶
Type these in the Claude Code prompt. They are slash commands, not shell commands.
/plugin marketplace add cms-ml/marketplace
/plugin install cms@cms-marketplace
/plugin install hep-python-tools@cms-marketplace
/plugin install af-fnal-lpc@cms-marketplace
claude plugin marketplace add cms-ml/marketplace
claude plugin install cms@cms-marketplace
claude plugin install hep-python-tools@cms-marketplace
claude plugin install af-fnal-lpc@cms-marketplace # LPC users: condor batch jobs
claude plugin list # each should show "enabled"
The skills follow the Agent Skills specification, so you can link a plugin's skills/ directory into another agent's skill path. From a clone of the marketplace:
git clone https://github.com/cms-ml/marketplace && cd marketplace
ln -s $PWD/plugins/cms/skills ~/.agents/skills/cms
After installing or updating, start a new conversation: skills are loaded when a conversation starts. /skills lists what is loaded. In VS Code, run "Developer: Reload Window" if a new chat still doesn't see them.
Updating¶
When new skills or plugins are merged, refresh the marketplace and install any new plugins:
claude plugin marketplace update cms-marketplace
claude plugin install <new-plugin>@cms-marketplace
One-time setup on cmslpc¶
Keep pip packages from shadowing CMSSW
Packages in ~/.local from pip install --user break CMSSW's Python. Add this to your shell setup:
export PYTHONNOUSERSITE=1
Install uv in nobackup, for standalone scripts
This keeps uv and its cache out of the 3 GB home quota:
export UV_INSTALL_DIR=~/nobackup/.local/bin
curl -LsSf https://astral.sh/uv/install.sh | UV_NO_MODIFY_PATH=1 sh
cat >> ~/.bashrc <<'EOF'
export PATH=~/nobackup/.local/bin:$PATH
export UV_CACHE_DIR=~/nobackup/.cache/uv
export UV_PYTHON_INSTALL_DIR=~/nobackup/.local/share/uv/python
EOF
Using Claude Code from VS Code on cmslpc
The VS Code extension ships its own claude binary, which isn't on PATH. Add an alias for it:
alias claude="$(ls -d ~/.vscode-server/extensions/anthropic.claude-code-*/resources/native-binary/claude | tail -1)"
Writing good requests¶
Good requests name:
- the data: DAS name or Open Data path, era, and the number of files to start with
- the output: working directory, plot directory and format
- the deliverables: specification, script, plots, notes
| Example request | Skills it uses |
|---|---|
| "Plot the dimuon mass in this NanoAOD file with CMS style." | awkward-array, vector-awkward, hist |
| "Write a spec for a Z→μμ data/MC comparison in 2016H." | analysis-spec-builder |
| "Set up CMSSW_14_0_15 in ~/nobackup/work and write an EDAnalyzer that histograms muon pT from MiniAOD." | cmssw |
| "Split these 142 Open Data files into 10 condor jobs, write the outputs to my EOS area, and resubmit any that fail." | lpc-condor |
| "Turn the spectra and efficiencies in summary.json into a HEPData record in hepdata/, with the plots attached, and validate it." | hepdata |
| "Make this check a single-file script I can send to a colleague." | standalone-script |
| "Use the cms-analysis-coder agent to implement specification.md: start on 2 files, then run everything." | cms-analysis-coder agent |
For a complete, ready-to-paste example, try the dimuon resonances prompt. It exercises five skills at once on 2016H DoubleMuon NanoAOD and needs no grid proxy. It ends by writing SKILLS_USED.md, a record of which skill guided each step and where a skill fell short.
How skills are validated¶
Every skill and agent in the marketplace is validated by an analysis that uses it, run by an agent, with the outputs committed to the repository. Each validation records the prompt given to the agent and a SKILLS_USED.md noting where the skills helped and where they fell short. The reference example is validation/dijet-2016, a b-tagged dijet search on 2016 Open Data.
Get involved¶
The marketplace grows through contributions from CMS members. If a skill gave you a wrong answer, open an issue. If you have expertise worth sharing, write a skill.