JFrog CLI for Skills

Manage AI agent skills in JFrog Artifactory with the jf skills CLI: publish, install, search, update, list, and delete skills with full flag and environment variable reference.

This page is the complete CLI reference for the jf skills command namespace in JFrog CLI v2.98.0 or later. It covers every command, flag, and environment variable.

This page is part of the Skills Repositories documentation. It covers the CLI layer only. For information about creating Skills repositories, REST API usage, server-side metadata, and semantic scanning, see Skills Repositories.

When to Use

Use jf skills when you manage AI agent skills in JFrog Artifactory Skills repositories. You can publish skill bundles, install them for supported agents, search the registry, update local installs, list repository or installed skills, and delete versions from a repository.

Prerequisites

Before using jf skills, you need:

Commands at a Glance

The following table summarizes each command in the jf skills namespace.

CommandWhat it does
jf skills publishPackage and upload a skill folder to Artifactory
jf skills installDownload and install a skill for one or more AI agents
jf skills searchSearch for skills across Skills repositories
jf skills updateUpgrade an installed skill to a newer version
jf skills listBrowse skills in a repository or inspect locally installed skills
jf skills deleteRemove a specific skill version from a repository

Publish a Skill

Packages the local skill folder into a zip and uploads it to Artifactory. The version is read from the version field in SKILL.md frontmatter. If no version is present, the CLI prompts you to enter one (or auto-increments in CI or quiet mode).

For evidence signing and semantic scanning details, see Publish Skills with JFrog CLI.

Run the following command to publish a skill folder to a Skills repository.

jf skills publish <PATH_TO_SKILL_FOLDER> --repo <REPOSITORY_NAME>

Where:

  • <PATH_TO_SKILL_FOLDER>: Path to the local skill folder (must include SKILL.md)
  • <REPOSITORY_NAME>: Skills local repository key in JFrog Artifactory

Flags

The following table lists flags for jf skills publish.

FlagDescriptionDefault
--repoTarget Skills repository key. If omitted, auto-discovered (see Repository Resolution).Auto-discovered
--versionOverride the version from SKILL.md.From SKILL.md
--signing-keyPath to PGP private key for evidence signing. Overrides EVD_SIGNING_KEY_PATH.
--key-aliasAlias for the signing key. Overrides EVD_KEY_ALIAS.
--skip-scanSkip the Xray security scan after upload. Equivalent to setting JFROG_CLI_SKIP_SKILLS_SCAN=true.false
--auto-delete-on-failureAutomatically delete the uploaded artifact when Xray identifies it as malicious.false
--quietSkip interactive prompts (version collision, missing version). Enabled automatically in CI ($CI=true).$CI
--build-nameBuild name for JFrog build-info collection. Requires --build-number.
--build-numberBuild number for JFrog build-info collection. Requires --build-name.
--moduleModule name in build-info for the published artifact.Skill slug

Examples

Publish with auto-discovered repository:

jf skills publish ~/skills_dev/myskill

Publish to a specific repository and record build-info:

jf skills publish ~/skills_dev/myskill \
  --repo skills-local \
  --build-name my-pipeline \
  --build-number 42

Publish with a version override:

jf skills publish ~/skills_dev/myskill --repo skills-local --version 1.2.0
📘

Note

The scan timeout is configurable via JFROG_CLI_SKILLS_SCAN_TIMEOUT (default: 5m). See Environment Variables.

Install a Skill

Downloads a skill zip from Artifactory and installs it for one or more AI agents, or to a custom local directory.

Run the following command to install a skill from a Skills repository.

jf skills install <SKILL_NAME> \
  (--agent <AGENT_NAME[,AGENT_NAME...]> [--project-dir <DIR>] | --agent <AGENT_NAME> --global | --path <DIR>) \
  [--repo <REPOSITORY_NAME>] \
  [--version <SKILL_VERSION>]

Where:

  • <SKILL_NAME>: Skill slug in the repository
  • <AGENT_NAME>: Built-in or custom agent name (comma-separated for multiple agents)
  • <DIR>: Project root (--project-dir) or direct install base path (--path)
  • <REPOSITORY_NAME>: Skills local repository key (optional when auto-discovered)
  • <SKILL_VERSION>: SemVer or latest

One of --agent or --path is required.

Install Modes

The following table describes where installed skills are placed.

ModeFlag combinationWhere the skill lands
Project-scoped (per agent)--agent <name> (+ optional --project-dir)<project-dir>/<agent_project_path>/<slug>
Global (per agent)--agent <name> --global<agent_global_dir>/<slug>
Direct path--path <dir><dir>/<slug>

Flags

The following table lists flags for jf skills install.

FlagDescriptionDefault
--repoSkills repository to download from. See Repository Resolution.Auto-discovered
--versionVersion to install. Pass latest to always resolve the highest SemVer.latest
--agentComma-separated AI agent names. Each agent's install path is resolved from ~/.jfrog/agents/agent-config.json, then from built-in defaults. Mutually exclusive with --path.
--project-dirProject root directory. Combined with each agent's configured projectDir. Mutually exclusive with --global.. (current directory)
--globalInstall under each agent's configured globalDir instead of under the project root. Mutually exclusive with --project-dir.false
--pathLocal base directory for a direct install. The skill is placed at <path>/<slug>. Mutually exclusive with --agent, --project-dir, and --global.
--formatOutput format for the install summary: table or json.table
--quietSkip interactive prompts. In quiet or CI mode, evidence verification failure causes the install to fail unless JFROG_SKILLS_DISABLE_QUIET_FAILURE=true is set.$CI

Evidence Verification

During installation, the CLI automatically verifies evidence using public keys stored in Artifactory. No local signing keys are needed on the installer's side.

If verification fails:

  • Interactive terminal: You are prompted to proceed or abort.
  • CI or --quiet mode: The install fails. Set JFROG_SKILLS_DISABLE_QUIET_FAILURE=true to convert a failure to a warning and proceed.

Examples

Install for Cursor (project-scoped, current directory):

jf skills install myskill --agent cursor --repo skills-local --version 1.0.0

Install for multiple agents at once:

jf skills install myskill --agent cursor,claude-code --repo skills-local --version latest

Install globally for Cursor:

jf skills install myskill --agent cursor --global --repo skills-local

Install to a custom local path:

jf skills install myskill --path ./vendor/skills --repo skills-local --version 1.0.0

Get machine-readable output:

jf skills install myskill --agent cursor --repo skills-local --format json

Supported Built-in Agents

JFrog CLI resolves install paths from built-in defaults or from ~/.jfrog/agents/agent-config.json. The following agents are supported out of the box. All paths support ~/ expansion.

Agent nameProject pathGlobal path
claude-code.claude/skills~/.claude/skills
cursor.cursor/skills~/.cursor/skills
github-copilot.github/skills~/.copilot/skills
windsurf.windsurf/skills~/.codeium/windsurf/skills
codex.codex/skills~/.codex/skills
cross-agent.agents/skills~/.agents/skills

To add or override an agent, create or edit ~/.jfrog/agents/agent-config.json:

{
  "agents": {
    "my-agent": {
      "projectDir": ".my-agent/skills",
      "globalDir": "~/.my-agent/skills"
    }
  }
}

Custom entries override built-in defaults with the same name (case-insensitive).

Search Skills

Searches for skills by name or keyword across one or all discoverable Skills repositories.

Run the following command to search for skills by name or keyword.

jf skills search <QUERY> [--repo <REPOSITORY_NAME>]

Where:

  • <QUERY>: Skill name or keyword to search for
  • <REPOSITORY_NAME>: Optional Skills repository key to limit the search

Flags

The following table lists flags for jf skills search.

FlagDescriptionDefault
--repoLimit search to one Skills repository. If omitted, all discoverable Skills repositories are searched.Auto-discovers all
--formatOutput format: table or json.table
--propUse Artifactory property search (skill.name) instead of the Skills API full-text search endpoint.false

Examples

Search across all repositories:

jf skills search code-review

Search within a specific repository, JSON output:

jf skills search summarize --repo skills-local --format json

Example JSON response:

[
  {
    "name": "summarize-pr",
    "version": "1.2.0",
    "repository": "skills-local",
    "description": "Summarizes pull request changes."
  }
]

Update a Skill

Updates an installed skill to a newer (or specific) version. The command compares the currently installed version against the target version and skips targets that are already up to date. If the update fails, the previous install is automatically restored from a backup.

Run the following command to update an installed skill to a newer or specific version.

jf skills update <SKILL_NAME> \
  (--agent <AGENT_NAME[,AGENT_NAME...]> [--project-dir <DIR>] | --agent <AGENT_NAME> --global | --path <DIR>) \
  [--repo <REPOSITORY_NAME>] \
  [--version <TARGET_VERSION>]

Where:

  • <SKILL_NAME>: Skill slug to update
  • <AGENT_NAME>, <DIR>, <REPOSITORY_NAME>: Same as jf skills install
  • <TARGET_VERSION>: Target SemVer or latest (default)

Flags

The following table lists flags for jf skills update.

FlagDescriptionDefault
--repoSkills repository to download from. See Repository Resolution.Auto-discovered
--versionTarget version. Omit for latest.latest
--agentComma-separated agent names. Same resolution as jf skills install.
--project-dirProject root directory. Default: current directory. Mutually exclusive with --global..
--globalUpdate under each agent's global directory. Mutually exclusive with --project-dir.false
--pathBase directory of the existing direct install to update (<path>/<slug>).
--dry-runPreview what would be updated without downloading or changing files.false
--forceRe-download and reinstall even if the skill is already at the target version.false
--formatOutput format for the update summary: table or json.table
--quietSkip interactive prompts.$CI

Behavior

  • Targets not yet installed are reported as failed (run jf skills install first).
  • Targets already at the target version are reported as skipped (use --force to reinstall).
  • Downloads the zip once and copies it to all eligible targets.
  • On failure for any individual target, the previous install is restored from a temporary backup under .skill-backup/.

Examples

Update myskill to the latest version for the Cursor agent (project-scoped):

jf skills update myskill --agent cursor --repo skills-local

Update to a specific version with dry-run preview:

jf skills update myskill --agent cursor --repo skills-local --version 2.0.0 --dry-run

Force reinstall even if already at target version:

jf skills update myskill --agent cursor --repo skills-local --force

List Skills

Lists skills from a Skills repository, or inspects skills already installed locally for a specific agent. Exactly one of --repo or --agent is required.

Use one of the following forms to list skills in a repository or installed for an agent.

# List skills in a repository
jf skills list --repo <REPOSITORY_NAME> [--limit <N>] [--sort-by updated|downloads]

# List skills installed for an agent (project-scoped)
jf skills list --agent <AGENT_NAME> [--project-dir <DIR>]

# List skills installed for an agent (global)
jf skills list --agent <AGENT_NAME> --global

Where:

  • <REPOSITORY_NAME>: Skills repository to list (mutually exclusive with --agent)
  • <AGENT_NAME>: Agent for installed-skill listing
  • <N>: Maximum number of results when listing a repository

Flags

The following table lists flags for jf skills list.

FlagDescriptionDefault
--repoSkills repository to list. Mutually exclusive with --agent.
--agentAgent name to list installed skills for. Mutually exclusive with --repo.
--project-dirProject root for agent-scoped listing. Mutually exclusive with --global..
--globalList from each agent's global directory. Mutually exclusive with --project-dir.false
--limitMaximum number of results to return.All
--sort-bySort field. With --repo: updated (default) or downloads. With --agent: name (only option).updated / name
--sort-orderSort order for --agent mode: asc or desc. Not supported with --repo.asc
--check-updatesWith --agent only: compare installed versions against the registry. Adds REGISTRY LATEST and STATUS columns. Requires a configured Artifactory server.false
--formatOutput format: table or json.table

Status Values for Check Updates

When you use --check-updates with --agent, the STATUS column uses the following values.

StatusMeaning
currentInstalled version matches the latest in the registry
behindA newer version is available in the registry
aheadInstalled version is newer than the latest in the registry
unknownRegistry could not be reached or version comparison failed

Examples

List all skills in a repository, sorted by most downloaded:

jf skills list --repo skills-local --sort-by downloads

List skills installed for the Cursor agent and check for updates:

jf skills list --agent cursor --check-updates

JSON output of locally installed skills:

jf skills list --agent cursor --format json

Delete a Skill

Removes a specific version of a skill from a Skills repository. There is no interactive confirmation prompt. Deletion is immediate.

For the full delete walkthrough, see Delete Skills.

Run the following command to delete a skill version from a Skills repository.

jf skills delete <SKILL_NAME> --version <SKILL_VERSION> [--repo <REPOSITORY_NAME>]

Where:

  • <SKILL_NAME>: Skill slug to delete
  • <SKILL_VERSION>: Version to remove (required)
  • <REPOSITORY_NAME>: Skills repository key (optional when auto-discovered)

Flags

The following table lists flags for jf skills delete.

FlagDescriptionDefault
--versionVersion to delete. Required.
--repoSkills repository key. See Repository Resolution.Auto-discovered
--dry-runShow what would be deleted without making any changes.false

Examples

Delete a specific version:

jf skills delete myskill --version 1.0.0 --repo skills-local

Preview what would be deleted:

jf skills delete myskill --version 1.0.0 --repo skills-local --dry-run

Repository Resolution

All jf skills commands accept --repo to specify the target Skills repository. When --repo is omitted, the CLI resolves the repository using the following priority order:

  1. --repo flag value
  2. JFROG_SKILLS_REPO environment variable
  3. Auto-discovery: queries Artifactory for all local Skills repositories
    • If exactly one is found, it is used automatically.
    • If multiple are found in interactive mode, you are prompted to select one.
    • If multiple are found in CI or quiet mode, the command fails with the list of options.

Environment Variables

Consolidated Reference

The following table lists environment variables for the jf skills namespace.

VariableCommandsDescriptionDefault
JFROG_SKILLS_REPOAllSpecifies the Skills repository when --repo is not set.
JFROG_CLI_SKIP_SKILLS_SCANpublishSet to true to skip the post-publish Xray scan. Equivalent to --skip-scan.false
JFROG_CLI_SKILLS_SCAN_TIMEOUTpublishXray scan polling timeout. Accepts Go duration strings (for example, 2m, 30s).5m
JFROG_CLI_BUILD_NAMEpublishBuild name for JFrog build-info collection. Overridden by --build-name.
JFROG_CLI_BUILD_NUMBERpublishBuild number for JFrog build-info collection. Overridden by --build-number.
EVD_SIGNING_KEY_PATHpublishPath to the PGP private key for evidence signing. Overridden by --signing-key.
JFROG_CLI_SIGNING_KEYpublishAlternative path to the PGP signing key. Lower priority than EVD_SIGNING_KEY_PATH.
EVD_KEY_ALIASpublishAlias for the signing key. Overridden by --key-alias.
JFROG_SKILLS_DISABLE_QUIET_FAILUREinstallSet to true to allow installation to continue when evidence verification fails in CI or quiet mode. Default behavior is to fail.false

Key-Resolution Order for Signing Keys on Publish

The publish command checks signing key sources in this order, using the first non-empty value:

  1. --signing-key flag
  2. EVD_SIGNING_KEY_PATH environment variable
  3. JFROG_CLI_SIGNING_KEY environment variable
📘

Note

For build-info on publish, JFROG_CLI_BUILD_NAME and JFROG_CLI_BUILD_NUMBER set the build name and number when the corresponding flags are omitted. The --build-name and --build-number flags override the environment variables.

Related Topics