Skip to content

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

FlagDescription
-v, -vv, -vvvIncrease verbosity
-q / --quietSuppress non-error output
--jsonMachine-readable JSON output
--offlineDisable 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:

FlagEffect
--pinnedPinned skills only
--outdatedSkills with available updates
--mineYour published skills
--jeffreysJeffrey's premium skills
--savedSaved/bookmarked skills
--remoteQuery 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.

Show the currently featured skill. Pass --install to install it immediately, or --history to see past features.

jsm tags

List all available compatibility tags.

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.

FlagDescription
--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.

FlagDescription
--file CLAUDE.mdEdit CLAUDE.md instead of AGENTS.md
--removeRemove the block again (the file itself is never deleted)
--yes, -yApply 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.

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:

FlagDescription
--transportstdio (default), http, or both
--targetCross-compile target (e.g., x86_64-unknown-linux-musl)
--optimize-sizeOptimize for binary size
--bundleCompile 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.

CommandWhat it does
jsm updateUpdate the jsm CLI itself
jsm auto-updateManage 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 pruneRemove orphaned skill directories left behind after a rename or retirement
jsm load <skill>Load a skill into the AI context window
jsm copy-promptCopy a curated example prompt to the clipboard
jsm scanScan the current project for skill-relevant patterns
jsm applyApply repo-aware skill recommendations directly to this project
jsm toolsManage flywheel ecosystem tools (list, info, install, update, uninstall, doctor, bundle)
jsm securityScan skills for prompt injection and manage quarantine
jsm banditInspect 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.