Commands
Command overview
The jsm CLI groups functionality into subcommands. Run jsm --help for
a full list, or jsm <command> --help for details on any command.
Global flags
| Flag | Description |
|---|---|
-v, -vv, -vvv | Increase verbosity |
-q / --quiet | Suppress non-error output |
--json | Machine-readable JSON output |
--offline | Disable all network requests |
Environment variable JSM_OFFLINE=1 is equivalent to --offline.
From an agent, a script or CI there is no terminal to answer a question, so
pass --yes to the commands that ask for confirmation: install-all,
uninstall --all, rollback and tools install|update|uninstall. jsm stops
and says so when a question cannot be asked.
With --json, stdout holds exactly one JSON document, and the exit status
agrees with its success field (0 when true, non-zero when false; jsm
v0.3.35 and later). A failure looks like
{"success": false, "error": {"code": "SKILL_NOT_FOUND", "message": "..."}}.
Codes include NOT_AUTHENTICATED (run jsm login), SUBSCRIPTION_REQUIRED,
TEAM_SUBSCRIPTION_REQUIRED (with --org: the organization's plan does not cover you; your
own plan is fine, so ask its admin), SKILL_NOT_FOUND, INVALID_INPUT (the message says what to change) and
NETWORK_ERROR; RATE_LIMITED carries retry_after in seconds.
Authentication
jsm login
Open browser-based OAuth to authenticate with jeffreys-skills.md.
jsm logout
Clear stored credentials and revoke them on the server. That includes an API
key saved with jsm auth set-key: anything else using the same key (CI,
another machine) stops working, and you create a new one at
Settings → API keys.
jsm whoami
Print the current user, email, and subscription status.
jsm auth set-key <key>
Set an API key directly (format: jsm_xxx). Useful in CI or headless
environments.
Setup & diagnostics
jsm setup
Run the first-time setup wizard. Configures your projects directory and
skill directories. Pass --force to re-run.
jsm doctor
Check authentication, skill directories, database integrity, network
connectivity, and CLI version. Pass --fix to auto-repair common issues.
jsm status
Print a summary of mode, sync state, and installed skills.
jsm verify [skill]
Verify integrity of installed skills. Omit the skill name to verify all.
Browsing & discovery
jsm list
List installed skills. Useful filters:
| Flag | Effect |
|---|---|
--pinned | Pinned skills only |
--outdated | Skills with available updates |
--mine | Your published skills |
--jeffreys | Jeffrey's premium skills |
--saved | Saved/bookmarked skills |
--remote | Query the server catalog |
-t <tag> | Filter by compatibility tag (repeatable) |
jsm search <query>
Full-text search across the skill catalog. Uses a local Tantivy index when offline.
jsm search "code review" --limit 5
jsm show <skill>
Display detailed metadata, description, and install status for a skill.
jsm info is an alias.
jsm featured
Show the currently featured skill. Pass --install to install it
immediately, or --history to see past features.
jsm tags
List all available compatibility tags.
jsm related <skill>
Show skills related to the given skill, grouped by relationship type
(pairs_with, alternative_to, extends, prerequisite). Pass --all to see
relationships for every installed skill.
jsm examples <skill>
Show curated usage examples for a skill.
jsm why <skill>
Display the author's notes explaining why a skill exists.
jsm suggest [query]
Context-aware skill suggestions based on your current project. Analyzes files in the working directory and recommends matching skills.
jsm suggest --add-to-project
jsm context [path]
Analyze a project directory and display detected context tags (language, framework, tooling).
Installation & updates
jsm install <skill>
Install a skill to your managed agent skills directories (~/.claude/skills/,
~/.agents/skills/ for Codex, and the folders of other agents jsm detects; see
Configuration). jsm 0.3.36
and earlier used Codex's old folder, $CODEX_HOME/skills/ (default
~/.codex/skills/); Codex lists a skill found in both folders twice, so jsm
0.3.37 and later move their copies from it to ~/.agents/skills/ (jsm doctor
reports any left there).
jsm install code-review-expert
jsm install code-review-expert --version 3
jsm install code-review-expert --related # also install related skills
jsm install-all
Install every one of Jeffrey's premium skills at once (alias jsm ia), into the
same directories as jsm install. It asks before starting; pass --yes when
there is no terminal to answer (a script, an agent, a cloud machine). --force
re-installs skills that are already up to date.
jsm install-all
jsm install-all --yes # no prompt
jsm uninstall <skills...>
Remove one or more installed skills. Pass --all to remove everything, or
--keep-data to preserve per-skill configuration.
jsm sync [skill]
Sync saved skills between local and cloud. Omit the skill name to sync all.
jsm sync # sync everything
jsm sync --force # force re-download
jsm sync --org acme # install organization acme's skills at its pinned versions
jsm sync --org # the same, for your only organization
jsm sync --status # show sync status only
--org takes an organization slug or ID from jsm team list (slugs need jsm
0.3.37 or later). Plain jsm sync never syncs an organization.
jsm upgrade [skill]
Check for and apply skill updates. Pass --list to preview without
applying.
Version management
jsm pin <skill> [version]
Pin a skill to a specific version. Pinned skills are excluded from automatic updates.
jsm unpin <skill>
Remove the version pin so the skill receives updates again.
jsm versions <skill>
List all published versions of a skill.
jsm diff <skill>
Show a diff between the installed version and the latest (or between two specified versions).
jsm diff my-skill --from 2 --to 5
jsm changelog [skill]
Show recent changes across your installed skills, or for a specific skill. Defaults to the last 7 days.
jsm rollback <skill>
Roll back to the previous version. Pass --to <version> to target a
specific version.
Skill development
jsm create <name>
Scaffold a new skill from a template.
jsm create my-new-skill -c "code-review" -d "Enforces lint rules"
jsm create my-new-skill --with-self-test
jsm validate [path]
Validate skill structure, SKILL.md format, and metadata. Runs
automatically before jsm push.
jsm push <path>
Upload a skill to jeffreys-skills.md for review.
jsm push ./my-skill -m "Added Python support" --attest
The --attest flag confirms you have distribution rights.
Workspace management
jsm workspace init [path]
Initialize a skill development workspace. Pass --git to create a Git
repository.
jsm workspace mirror [skills...]
Copy workspace skills to the global ~/.claude/skills/ directory. Pass
--watch to auto-sync on file changes.
jsm workspace status
Show the status of skills in the current workspace.
jsm workspace diff
Show changes between workspace copies and installed versions.
jsm workspace clean
Remove stale workspace artifacts. Pass --dry-run to preview.
Project integration
jsm project add <skills...>
Add skills to .claude/skills/ in the current repository so they are
available in project-scoped Claude Code sessions.
jsm project list
List skills configured for the current repository.
jsm project remove <skills...>
Remove skills from the repository configuration.
jsm project sync
Without a jsm.lock, refresh the project's skills from your global install. When
the repository has a jsm.lock, it installs exactly what the lock pins instead
(see jsm project sync --lock below).
jsm project fix-gitignore
Ensure .claude/skills/ is listed in .gitignore.
Shared project setup (jsm.lock)
A jsm.lock at the repository root records which public catalog skills a project
uses, at exact versions, so everyone working in the repository (and their agents)
gets the same setup. It holds no skill content, and .claude/skills/ itself stays
gitignored. Commit jsm.lock; the Terms permit committing it.
jsm lock
Write jsm.lock from the skills in this project's .claude/skills/ (add them with
jsm project add <skills...> first). Each entry is a skill name, its exact version
and the content hash the server attests for that version:
# Agent skills pinned with jsm (https://jeffreys-skills.md). No skill content is stored here.
lock_version = 1
[[skill]]
name = "de-slopify"
version = 7
hash = "<64 hex characters>"
Only public catalog skills are locked. Private skills, skills you wrote, and
skills that are not public are skipped and never named in the file. A skill whose
project copy you edited is refused rather than locked: restore it with
jsm project sync --lock --repair <skill> or remove it from the project.
jsm lock --org <org>
Also record your organization in jsm.lock (jsm 0.3.37 and later). It is
opt-in: by default the lock names no organization. With --org <slug|id> (or a
bare --org for your only organization), jsm writes its slug as
org = "<slug>", and a colleague who can't install the locked skills is
pointed at your company's account, where they can ask for a seat. Later runs
keep the organization until jsm lock --no-org removes it. A lock that names
an organization is written as lock_version = 2; an older jsm reading it says
to run jsm update.
jsm lock --check
Compare .claude/skills/ with jsm.lock without changing anything. It works
offline and exits non-zero when a locked skill is missing, was modified, or is
recorded at a different version, so a CI job can enforce the lock.
jsm project sync --lock
Install exactly the versions jsm.lock pins into .claude/skills/. Lock mode is
also used automatically whenever the repository has a jsm.lock. Every download is
checked against the hash in the lock, and nothing is moved into place until all of
them verify, so a failure leaves the project as it was. Your user-level skill
folders are not touched.
You need to be signed in with an account that has access to the skills. Without access, jsm installs nothing and prints a link to a page that lists the pinned skills and how to get access.
| Flag | Description |
|---|---|
--target <dir> | Also install into this folder inside the repository, e.g. .agents/skills for Codex (repeatable). The folder must be gitignored; jsm adds the entry and checks it |
--repair [skill,...] | Restore locally modified skills from jsm.lock (all of them when no name is given). Without it, modified skills are only reported |
jsm project sync --lock --target .agents/skills
jsm project sync --lock --repair de-slopify
jsm project agents-md
Add one short, factual block to AGENTS.md at the repository root, telling coding
agents that the repository records optional skill setup in jsm.lock and how to
check and install it. jsm prints the change and asks before writing.
| Flag | Description |
|---|---|
--file CLAUDE.md | Edit CLAUDE.md instead of AGENTS.md |
--remove | Remove the block again (the file itself is never deleted) |
--yes, -y | Apply the change without asking (the diff is still printed) |
The block jsm adds:
<!-- jsm:begin (managed by `jsm project agents-md`; remove with --remove) -->
## Agent skills (optional)
This repository records optional agent-skill setup in `jsm.lock` (installed into `.claude/skills`); it is not needed to build or test the code. When skill setup is part of your task, check it with `jsm lock --check` and install with `jsm project sync --lock` (requires a signed-in jeffreys-skills.md account). Never commit skill contents, share credentials, or purchase anything on the user's behalf.
<!-- jsm:end -->
Workflows
jsm workflow list
List available skill workflows.
jsm workflow run <name>
Generate step-by-step prompts for a named workflow. Pass --edit to open
the output in your editor.
Community requests
jsm requests list
Browse open skill requests. Filter with --mine, --status, or
--limit.
jsm requests trending
Show the most-voted skill requests.
jsm requests vote <id> / jsm requests unvote <id>
Vote or remove your vote on a request.
jsm requests new
Interactively create a new skill request.
Notifications
jsm notify check
Check for available skill updates now. Since v0.3.28, jsm also checks on its
own after an ordinary command when you are signed in: at most once per
notifications.check_interval_hours (default 24), or right after a command
that changes your installed skills (install, uninstall, sync, pin, rollback,
and so on). It gives up after 3 seconds, waits an hour after a failed check,
and never runs for --json or --quiet invocations. That check feeds the
update banner and the statuses in jsm list. Set check_interval_hours to 0
or JSM_NO_UPDATE_CHECK=1 to turn it off.
jsm notify list
View the notification feed. Pass --unread for unread only.
jsm notify read <ids...>
Mark notifications as read. Pass --all to clear everything.
jsm notify config
View or modify notification settings (email, webhook, frequency).
Effectiveness tracking
jsm effectiveness record
Record a skill outcome (success/failure, duration, context).
jsm effectiveness record -s code-review --success --duration-seconds 120
jsm effectiveness show
Display effectiveness metrics for a skill.
jsm outcome
Ergonomic alias for effectiveness record.
Graph analysis
jsm graph insights
Full analysis: keystones, bottlenecks, clusters, and cycles.
jsm graph keystones
Show the most-connected skills by PageRank.
jsm graph bottlenecks
Show skills with highest betweenness centrality.
jsm graph clusters
Detect and display skill clusters.
jsm graph tree <skill>
Print a dependency tree for a skill.
jsm graph cycles
Detect dependency cycles.
jsm graph export
Export the skill graph in Mermaid, DOT, or JSON format.
jsm graph export --format mermaid -o graph.md
Compilation
jsm compile <path>
Compile a skill into a standalone MCP server binary. Also available as
jsm build.
jsm compile ./my-skill -o my-skill-server
jsm compile ./my-skill --transport http --port 9090
jsm compile ./skills-dir --bundle --bundle-name all-skills
Key flags:
| Flag | Description |
|---|---|
--transport | stdio (default), http, or both |
--target | Cross-compile target (e.g., x86_64-unknown-linux-musl) |
--optimize-size | Optimize for binary size |
--bundle | Compile all skills in a directory into one binary |
Team features
--org takes an organization slug or ID from jsm team list (jsm 0.3.37 and
later; earlier versions take only the ID).
jsm team list
List your organizations: slug, ID, your role, and whether you hold a paid seat.
jsm team status [--org <org>]
Compare the skills installed on this machine with your organization's pinned
versions: each is in sync, drifted (another version is installed), or missing.
It only reads the organization's library; nothing about this machine is sent.
Without --org it uses your only organization.
jsm team collections list --org <org>
List skill collections for a team organization.
jsm team collections show <collection> --org <org>
Show skills in a specific collection.
Vault (encrypted offline storage)
jsm vault init
Create an encrypted vault for offline skill storage.
jsm vault status
Show vault status and statistics.
jsm vault lock / jsm vault unlock
Lock or unlock the vault.
jsm vault set-auto-lock <minutes>
Configure automatic locking after inactivity.
Telemetry (opt-in)
jsm telemetry enable / jsm telemetry disable
Opt in or out of anonymous usage analytics.
jsm telemetry status
Show current telemetry state.
jsm telemetry flush
Send pending telemetry events to the server.
CASS integration
These commands search, show and mine your past AI coding sessions through
cass (install it
with jsm tools install cass, then run cass index --full once). jsm 0.3.39 and later
talk to cass 0.10 or later through its JSON interface, so cass's own data directory
is used. JSM_CASS_BIN points jsm at a cass that is not on PATH, and
JSM_CASS_DATA_DIR at another cass data directory. A session is named by its
path, as jsm cass search and jsm cass list print it.
jsm cass status
Show whether cass is installed, its version, its data directory, and the state of its search index.
jsm cass search <query>
Search past agent sessions (--days, --agent, --project, --limit). Each hit
names the session's path and the message it matched (message_index).
jsm cass list
List recent sessions (--days, default 7; --agent; --limit).
jsm cass show <session_id>
Show a session's messages (the first 200), or --turn <message_index> with
--context messages either side.
jsm cass mine [topic]
Mine sessions for patterns and generate skill drafts. A run reads at most 20 sessions (around each search hit for a topic, or the most recent ones), so it stays quick on a large cass store.
jsm cass mine "error handling" --days 30 -o ./drafts
More commands
Each of these has full options under jsm <command> --help.
| Command | What it does |
|---|---|
jsm update | Update the jsm CLI itself |
jsm auto-update | Manage scheduled background auto-updates for installed skills |
jsm install-all (alias ia) | Install all of Jeffrey's premium skills at once |
jsm save <skill> / jsm unsave <skill> | Add or remove a skill from your account's saved list, which drives jsm sync |
jsm prune | Remove orphaned skill directories left behind after a rename or retirement |
jsm load <skill> | Load a skill into the AI context window |
jsm copy-prompt | Copy a curated example prompt to the clipboard |
jsm scan | Scan the current project for skill-relevant patterns |
jsm apply | Apply repo-aware skill recommendations directly to this project |
jsm tools | Manage flywheel ecosystem tools (list, info, install, update, uninstall, doctor, bundle) |
jsm security | Scan skills for prompt injection and manage quarantine |
jsm bandit | Inspect and manage the recommendation engine |
Configuration
jsm config show
Print the current configuration.
jsm config get <key>
Read a single configuration value.
jsm config set <key> <value>
Set a configuration value. See the configuration guide for available keys.
jsm config reset
Reset all configuration to defaults.
jsm completions install
Install shell completions for bash, zsh, or fish.
Compliance
jsm report-leak <url>
Report a suspected unauthorized copy of a premium skill.