__DESCRIPTION__

A Claude Code marketplace of mods and plugins.
mods/) change Claude Code's own interface or behaviour through a TypeScript hooks module: panes, status line entries, toasts, slash commands, and hooks on tool calls or prompts.plugins/) bundle classic extensions: slash commands, skills, subagents, command hooks, and MCP servers.Both kinds are listed in .claude-plugin/marketplace.json and install the same way.
At the prompt of a Claude Code terminal session:
/plugin install <name> --marketplace claudezss/claude-tools
Answer y to add the marketplace, then pick a scope. From a shell:
claude plugin install <name> --marketplace claudezss/claude-tools
In the desktop app, click + next to the prompt box, then Plugins → Add marketplace with claudezss/claude-tools, then Add plugin.
| Name | Kind | Description |
|---|---|---|
| sysmon | mod | CPU, RAM, GPU and GPU RAM usage and totals in the status line or a pane (macOS, Windows, Linux) |
.claude-plugin/marketplace.json the marketplace: one entry per mod or plugin
mods/<name>/ function-hook mods
.claude-plugin/plugin.json
hooks/hooks.json { "modules": ["./register.ts"] }
hooks/register.ts export const register: Register = on => { ... }
hooks/*.test.ts run with `claude plugin test`
plugins/<name>/ classic plugins
.claude-plugin/plugin.json
skills/ agents/ commands/ hooks/hooks.json .mcp.json
templates/ what scripts/new.mjs copies
scripts/
new.mjs scaffold a mod or plugin and list it
validate.mjs validate everything, run mod tests
Create a new mod or plugin (copies the template, fills in the name, adds the marketplace entry):
node scripts/new.mjs mod my-mod "One-line description"
node scripts/new.mjs plugin my-plugin "One-line description"
Try it from disk without installing; an interactive session reloads it on save:
claude --plugin-dir mods/my-mod
Or add this checkout as a marketplace, so installed entries are read straight from the folder (/reload-plugins picks up edits):
claude plugin marketplace add ./
claude plugin install my-mod@claude-tools
Before committing, validate the marketplace and every entry, check that entries and folders agree, and run the mods' tests:
node scripts/validate.mjs
The mod API's TypeScript declarations are written by the engine into <mod>/.claude-plugin/types/ the first time it loads the mod (git-ignored); with them in place, tsc -p mods/my-mod type-checks it. The mod API is early access and may change between Claude Code releases.
hooks/register.ts 20 lines1import type { Register } from 'claude-code'
2
3// A starter mod: registers the /__NAME__ slash command.
4// API reference: `.claude-plugin/types/claude-code/index.d.ts`, laid by the
5// engine the first time it loads this mod from a folder.
6export const register: Register = on => {
7 on('session.start', async ($, e, next) => {
8 await $.command.register({
9 name: '__NAME__',
10 description: "__DESCRIPTION__",
11 })
12
13 return next(e)
14 })
15
16 on('command.run', { command: '__NAME__' }, $ => ({
17 text: `Hello from ${$.plugin.name}!`,
18 }))
19}
20