Skip to content

Configuration

Config file location

The CLI stores its configuration in a TOML file:

PlatformPath
macOS~/Library/Application Support/jsm/config.toml
Linux~/.config/jsm/config.toml (or $XDG_CONFIG_HOME/jsm/config.toml if set)
Windows%APPDATA%\jsm\config.toml

The file is created automatically on first run or when you run jsm setup. jsm config show prints the path it uses.

Reading and writing values

# Show the full config
jsm config show

# Read a single key
jsm config get notifications.check_interval_hours

# Set a value
jsm config set notifications.check_interval_hours 12

# Reset everything to defaults
jsm config reset

Configuration keys

General

KeyTypeDefaultDescription
api_urlstringhttps://jeffreys-skills.mdAPI base URL
auth_methodstringoauthAuthentication method (oauth or api_key)
skills_dirpath(auto)Override the skill installation directory
cache_dirpath(auto)Override the cache directory
verboseboolfalseEnable verbose logging globally

User

KeyTypeDefaultDescription
user.projects_dirpath-Preferred projects root directory
user.projects_symlinkpath-Convenience symlink to projects_dir
user.setup_completeboolfalseWhether first-time setup has been run

Skills directories

KeyTypeDefaultDescription
skills.claude_dirpath~/.claude/skillsClaude Code skills directory
skills.codex_dirpath~/.agents/skillsCodex skills directory (~/.codex/skills to 0.3.36)
skills.gemini_dirpath~/.gemini/skillsGemini skills directory
skills.disabled_mirrorslist(none)Agent mirrors jsm leaves alone (jsm 0.3.39 and later)

jsm installs every skill into the Claude Code directory and mirrors it to the other agents' folders: Codex always, and Gemini (from jsm 0.3.40), Cursor, OpenClaw and Hermes when it detects them. Gemini counts as detected once Gemini CLI has run, and while ~/.gemini/skills still holds skills: jsm mirrored there for everyone through 0.3.39 and keeps those copies current until you delete the folder. To keep jsm out of agents you don't use, turn their mirrors off:

jsm config set skills.disabled_mirrors gemini,cursor

The names are codex, gemini, cursor, openclaw and hermes. jsm then neither creates those folders nor installs, updates or removes skills in them. Skills it put there earlier stay until you delete them. An empty value turns every mirror back on.

Network

KeyTypeDefaultDescription
network.offline_modeboolfalseDisable all network requests

Setting network.offline_mode to true is equivalent to passing --offline on every command or setting JSM_OFFLINE=1.

Notifications

KeyTypeDefaultDescription
notifications.show_update_bannersbooltrueShow update banners in CLI output
notifications.check_interval_hoursint24How often to check for updates (0 = never)
notifications.banner_quiet_hoursint24Quiet period between banners
notifications.show_tipsbooltrueShow tips and suggestions

Email notifications

KeyTypeDefaultDescription
notifications.email.enabledboolfalseEnable email notifications
notifications.email.addressstring-Email address for notifications
notifications.email.frequencystringweeklyFrequency: immediate, daily, or weekly

Webhook notifications

KeyTypeDefaultDescription
notifications.webhook.enabledboolfalseEnable webhook notifications
notifications.webhook.urlstring-Webhook URL (must be http:// or https://)

Environment variables

The CLI respects these environment variables, which take priority over the config file:

VariableDescription
JSM_OFFLINESet to 1 to enable offline mode
HTTPS_PROXYHTTP proxy for all requests

Example config file

api_url = "https://jeffreys-skills.md"
auth_method = "oauth"
verbose = false

[user]
projects_dir = "/home/user/projects"
setup_complete = true

[skills]
claude_dir = "/home/user/.claude/skills"
codex_dir = "/home/user/.agents/skills"
gemini_dir = "/home/user/.gemini/skills"

[notifications]
show_update_banners = true
check_interval_hours = 12
show_tips = true

[notifications.email]
enabled = true
address = "you@example.com"
frequency = "daily"

[network]
offline_mode = false

Skill update preferences

Control how the CLI handles skill updates:

# View current preference
jsm config update-preference

# Set preference
jsm config update-preference auto      # apply updates automatically on sync
jsm config update-preference notify    # show a notification, don't apply
jsm config update-preference manual    # never auto-update