JFrog CLI for Skills

Manage AI agent skills in JFrog Artifactory with the jf agent 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 jf agent skills in JFrog CLI v2.98.0 or later. It covers every command, flag, and environment variable.

For repository setup, REST API usage, and semantic scanning, see Skills Repositories.

All examples use the full command path (for example, jf agent skills publish). Standard JFrog CLI server override flags (--url, --user, --password, --access-token, --server-id) apply to every command. When omitted, credentials and server URL come from your active jf config profile.


Commands and reference

When to Use

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

Prerequisites

Before using jf agent skills, you need:

The following tasks cover each command in the jf agent skills namespace:

Commands at a Glance

The following table summarizes each command in the jf agent skills namespace (same order as jf agent skills --help).

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

Publish a Skill

Packages the local skill folder into a zip and uploads it to JFrog 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. In CI or --quiet mode, the CLI auto-increments to the next minor SemVer from the latest published version (or defaults to 0.1.0 when no versions exist).

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

To publish a skill folder to a Skills repository:

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

Where:

  • <PATH_TO_SKILL_FOLDER>: Path to the skill folder containing SKILL.md (CLI argument name: path)
  • <REPOSITORY_NAME>: Skills local repository key in JFrog Artifactory

Flags

The following table lists flags for jf agent skills publish.

FlagDescriptionDefault
--repoTarget Skills repository key. If omitted, auto-discovered (see Skills 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 JFrog Xray security scan after upload. Equivalent to setting JFROG_CLI_SKIP_SKILLS_SCAN=true.false
--auto-delete-on-failureAutomatically delete the uploaded artifact when JFrog 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 agent skills publish ~/skills_dev/myskill

Publish to a specific repository and record build-info:

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

Publish with a version override:

jf agent 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 Skills Environment Variables.

Install a Skill

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

To install a skill from a Skills repository:

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

This matches the usage string registered in the CLI: jf agent skills install <slug> (--harness … | --path <dir>) [--repo <repo>] [--version <ver>].

Where:

  • <SKILL_NAME>: Skill slug in the repository (CLI argument name: slug)
  • <HARNESS_NAME>: Built-in or custom harness name (comma-separated for multiple harnesses)
  • <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. When omitted, the CLI resolves the highest available SemVer.

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

Install Modes

The following table describes where installed skills are placed.

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

Flags

The following table lists flags for jf agent skills install.

FlagDescriptionDefault
--repoSkills repository to download from. See Skills Repository Resolution.Auto-discovered
--versionVersion to install. Pass latest or omit to resolve the highest SemVer.Latest SemVer
--harnessComma-separated harness names. Each harness install path is resolved from ~/.jfrog/agents/agent-config.json (skills-agents key), then from built-in defaults. Mutually exclusive with --path.
--project-dirProject root directory. Combined with each harness's configured projectDir. Mutually exclusive with --global.. (current directory)
--globalInstall under each harness's configured globalDir instead of under the project root. Mutually exclusive with --project-dir.false
--pathLocal base directory for a direct install. The directory must already exist. The skill is placed at <path>/<slug>. Mutually exclusive with --harness, --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 JFrog 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 agent skills install myskill --harness cursor --repo skills-local --version 1.0.0

Install for multiple harnesses at once:

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

Install globally for Cursor:

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

Install to a custom local path (--path only). Don't combine --path with --harness:

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

Get machine-readable output:

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

Example JSON response:

{
  "slug": "myskill",
  "version": "1.0.0",
  "results": [
    {
      "agent": "cursor",
      "scope": "project",
      "path": "/path/to/project/.cursor/skills/myskill",
      "status": "ok",
      "detail": "Executed successfully with no issues."
    }
  ]
}

Install Metadata

On successful install, the CLI writes .jfrog/skill-info.json under each installed skill directory. This manifest records the source repository, installed version, harness, scope, and project directory. jf agent skills list --harness and jf agent skills update use this file for registry comparisons and update targeting.

Supported Built-in Harnesses

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

Harness 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 a harness, create or edit ~/.jfrog/agents/agent-config.json:

{
  "skills-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.

To search for skills by name or keyword:

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

Where:

  • <QUERY>: Skill name or search term (CLI argument name: query)
  • <REPOSITORY_NAME>: Optional Skills repository key to limit the search

Flags

The following table lists flags for jf agent 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 agent skills search code-review

Search within a specific repository, JSON output:

jf agent 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.

To update an installed skill to a newer or specific version:

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

Where:

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

Flags

The following table lists flags for jf agent skills update.

FlagDescriptionDefault
--repoSkills repository to download from. See Skills Repository Resolution.Auto-discovered
--versionTarget version. Omit for latest.latest
--harnessComma-separated harness names. Same resolution as jf agent skills install.
--project-dirProject root directory. Default: current directory. Mutually exclusive with --global..
--globalUpdate under each harness's global directory. Mutually exclusive with --project-dir.false
--pathBase directory of the existing direct install to update (<path>/<slug>). The base directory must already exist. Same layout as jf agent skills install --path.
--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. When not quiet, skip and failure reasons are logged to the terminal.$CI

Behavior

  • Targets not yet installed are reported as failed (run jf agent 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 <install-base>/.skill-backup/ (for example, .cursor/skills/.skill-backup/ in project-scoped mode).

Examples

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

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

Update to a specific version with dry-run preview:

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

Force reinstall even if already at target version:

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

Get machine-readable update summary:

jf agent skills update myskill --harness cursor --repo skills-local --format json

Example JSON response:

{
  "slug": "myskill",
  "version": "2.0.0",
  "results": [
    {
      "agent": "cursor",
      "scope": "project",
      "path": "/path/to/project/.cursor/skills/myskill",
      "status": "ok",
      "detail": "Executed successfully with no issues."
    }
  ]
}

List Skills

Lists skills in the following modes (matching jf agent skills list --help):

  • Registry (--repo): Skills in a Skills repository
  • Project-local: --harness with optional --project-dir (default: current directory)
  • Global-local: --harness --global

Exactly one of --repo or --harness is required. --repo and --harness are mutually exclusive. --global and --project-dir are mutually exclusive. For list mode, --harness accepts a single harness name (not comma-separated).

To list skills in a repository or installed for a harness:

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

# List skills installed for a harness (project-scoped)
jf agent skills list --harness <HARNESS_NAME> [--project-dir <DIR>]

# List skills installed for a harness (global)
jf agent skills list --harness <HARNESS_NAME> --global

Where:

  • <REPOSITORY_NAME>: Skills repository to list (mutually exclusive with --harness)
  • <HARNESS_NAME>: Harness for installed-skill listing (single name only)
  • <N>: Maximum number of results when listing a repository

Flags

The following table lists flags for jf agent skills list.

FlagDescriptionDefault
--repoSkills repository to list. Mutually exclusive with --harness.
--harnessSingle harness name to list installed skills for (not comma-separated). Mutually exclusive with --repo.
--project-dirProject root for harness-scoped listing. Mutually exclusive with --global..
--globalList from each harness'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 --harness: name (only option).updated / name
--sort-orderSort order for --harness mode: asc or desc. Not supported with --repo.asc
--check-updatesWith --harness only: compare installed versions against the registry. Adds REGISTRY LATEST and STATUS columns. Requires a configured JFrog Artifactory server.false
--formatOutput format: table or json.table

Status Values for Check Updates

When you use --check-updates with --harness, 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 agent skills list --repo skills-local --sort-by downloads

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

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

JSON output of locally installed skills:

jf agent skills list --harness cursor --format json

Example JSON response (harness mode):

[
  {
    "name": "myskill",
    "version": "1.0.0",
    "description": "Does something useful.",
    "repo": "skills-local",
    "path": ".cursor/skills/myskill"
  }
]

JSON output from a repository listing:

jf agent skills list --repo skills-local --format json

Example JSON response (repository mode):

[
  {
    "name": "myskill",
    "version": "1.2.0",
    "description": "Does something useful.",
    "source": "Repo: skills-local"
  }
]

Delete a Skill

Removes a specific version of a skill from a Skills repository. The CLI doesn't show an interactive confirmation prompt. Deletion is immediate.

For the full delete walkthrough, see Delete Skills.

To delete a skill version from a Skills repository:

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

Where:

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

Flags

The following table lists flags for jf agent skills delete.

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

Examples

Delete a specific version:

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

Preview what would be deleted:

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

Skills Repository Resolution

All jf agent 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 JFrog 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.

Skills Environment Variables

Consolidated Reference

The following table lists environment variables for the jf agent 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 JFrog Xray scan. Equivalent to --skip-scan.false
JFROG_CLI_SKILLS_SCAN_TIMEOUTpublishJFrog Xray 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