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:
- A Skills local repository in Artifactory. See Create Skills Repository.
- JFrog CLI v2.98.0 or later configured to point to your Artifactory server. For installation, see JFrog CLI quick start. For Skills-specific configuration, see Configure JFrog CLI for Skills.
Commands at a Glance
The following table summarizes each command in the jf skills namespace.
| Command | What it does |
|---|---|
jf skills publish | Package and upload a skill folder to Artifactory |
jf skills install | Download and install a skill for one or more AI agents |
jf skills search | Search for skills across Skills repositories |
jf skills update | Upgrade an installed skill to a newer version |
jf skills list | Browse skills in a repository or inspect locally installed skills |
jf skills delete | Remove 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 includeSKILL.md)<REPOSITORY_NAME>: Skills local repository key in JFrog Artifactory
Flags
The following table lists flags for jf skills publish.
| Flag | Description | Default |
|---|---|---|
--repo | Target Skills repository key. If omitted, auto-discovered (see Repository Resolution). | Auto-discovered |
--version | Override the version from SKILL.md. | From SKILL.md |
--signing-key | Path to PGP private key for evidence signing. Overrides EVD_SIGNING_KEY_PATH. | — |
--key-alias | Alias for the signing key. Overrides EVD_KEY_ALIAS. | — |
--skip-scan | Skip the Xray security scan after upload. Equivalent to setting JFROG_CLI_SKIP_SKILLS_SCAN=true. | false |
--auto-delete-on-failure | Automatically delete the uploaded artifact when Xray identifies it as malicious. | false |
--quiet | Skip interactive prompts (version collision, missing version). Enabled automatically in CI ($CI=true). | $CI |
--build-name | Build name for JFrog build-info collection. Requires --build-number. | — |
--build-number | Build number for JFrog build-info collection. Requires --build-name. | — |
--module | Module name in build-info for the published artifact. | Skill slug |
Examples
Publish with auto-discovered repository:
jf skills publish ~/skills_dev/myskillPublish to a specific repository and record build-info:
jf skills publish ~/skills_dev/myskill \
--repo skills-local \
--build-name my-pipeline \
--build-number 42Publish with a version override:
jf skills publish ~/skills_dev/myskill --repo skills-local --version 1.2.0Note
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 orlatest
One of --agent or --path is required.
Install Modes
The following table describes where installed skills are placed.
| Mode | Flag combination | Where 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.
| Flag | Description | Default |
|---|---|---|
--repo | Skills repository to download from. See Repository Resolution. | Auto-discovered |
--version | Version to install. Pass latest to always resolve the highest SemVer. | latest |
--agent | Comma-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-dir | Project root directory. Combined with each agent's configured projectDir. Mutually exclusive with --global. | . (current directory) |
--global | Install under each agent's configured globalDir instead of under the project root. Mutually exclusive with --project-dir. | false |
--path | Local base directory for a direct install. The skill is placed at <path>/<slug>. Mutually exclusive with --agent, --project-dir, and --global. | — |
--format | Output format for the install summary: table or json. | table |
--quiet | Skip 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
--quietmode: The install fails. SetJFROG_SKILLS_DISABLE_QUIET_FAILURE=trueto 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.0Install for multiple agents at once:
jf skills install myskill --agent cursor,claude-code --repo skills-local --version latestInstall globally for Cursor:
jf skills install myskill --agent cursor --global --repo skills-localInstall to a custom local path:
jf skills install myskill --path ./vendor/skills --repo skills-local --version 1.0.0Get machine-readable output:
jf skills install myskill --agent cursor --repo skills-local --format jsonSupported 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 name | Project path | Global 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.
| Flag | Description | Default |
|---|---|---|
--repo | Limit search to one Skills repository. If omitted, all discoverable Skills repositories are searched. | Auto-discovers all |
--format | Output format: table or json. | table |
--prop | Use Artifactory property search (skill.name) instead of the Skills API full-text search endpoint. | false |
Examples
Search across all repositories:
jf skills search code-reviewSearch within a specific repository, JSON output:
jf skills search summarize --repo skills-local --format jsonExample 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 asjf skills install<TARGET_VERSION>: Target SemVer orlatest(default)
Flags
The following table lists flags for jf skills update.
| Flag | Description | Default |
|---|---|---|
--repo | Skills repository to download from. See Repository Resolution. | Auto-discovered |
--version | Target version. Omit for latest. | latest |
--agent | Comma-separated agent names. Same resolution as jf skills install. | — |
--project-dir | Project root directory. Default: current directory. Mutually exclusive with --global. | . |
--global | Update under each agent's global directory. Mutually exclusive with --project-dir. | false |
--path | Base directory of the existing direct install to update (<path>/<slug>). | — |
--dry-run | Preview what would be updated without downloading or changing files. | false |
--force | Re-download and reinstall even if the skill is already at the target version. | false |
--format | Output format for the update summary: table or json. | table |
--quiet | Skip interactive prompts. | $CI |
Behavior
- Targets not yet installed are reported as failed (run
jf skills installfirst). - Targets already at the target version are reported as skipped (use
--forceto 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-localUpdate to a specific version with dry-run preview:
jf skills update myskill --agent cursor --repo skills-local --version 2.0.0 --dry-runForce reinstall even if already at target version:
jf skills update myskill --agent cursor --repo skills-local --forceList 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> --globalWhere:
<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.
| Flag | Description | Default |
|---|---|---|
--repo | Skills repository to list. Mutually exclusive with --agent. | — |
--agent | Agent name to list installed skills for. Mutually exclusive with --repo. | — |
--project-dir | Project root for agent-scoped listing. Mutually exclusive with --global. | . |
--global | List from each agent's global directory. Mutually exclusive with --project-dir. | false |
--limit | Maximum number of results to return. | All |
--sort-by | Sort field. With --repo: updated (default) or downloads. With --agent: name (only option). | updated / name |
--sort-order | Sort order for --agent mode: asc or desc. Not supported with --repo. | asc |
--check-updates | With --agent only: compare installed versions against the registry. Adds REGISTRY LATEST and STATUS columns. Requires a configured Artifactory server. | false |
--format | Output format: table or json. | table |
Status Values for Check Updates
When you use --check-updates with --agent, the STATUS column uses the following values.
| Status | Meaning |
|---|---|
current | Installed version matches the latest in the registry |
behind | A newer version is available in the registry |
ahead | Installed version is newer than the latest in the registry |
unknown | Registry 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 downloadsList skills installed for the Cursor agent and check for updates:
jf skills list --agent cursor --check-updatesJSON output of locally installed skills:
jf skills list --agent cursor --format jsonDelete 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.
| Flag | Description | Default |
|---|---|---|
--version | Version to delete. Required. | — |
--repo | Skills repository key. See Repository Resolution. | Auto-discovered |
--dry-run | Show what would be deleted without making any changes. | false |
Examples
Delete a specific version:
jf skills delete myskill --version 1.0.0 --repo skills-localPreview what would be deleted:
jf skills delete myskill --version 1.0.0 --repo skills-local --dry-runRepository 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:
--repoflag valueJFROG_SKILLS_REPOenvironment variable- 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.
| Variable | Commands | Description | Default |
|---|---|---|---|
JFROG_SKILLS_REPO | All | Specifies the Skills repository when --repo is not set. | — |
JFROG_CLI_SKIP_SKILLS_SCAN | publish | Set to true to skip the post-publish Xray scan. Equivalent to --skip-scan. | false |
JFROG_CLI_SKILLS_SCAN_TIMEOUT | publish | Xray scan polling timeout. Accepts Go duration strings (for example, 2m, 30s). | 5m |
JFROG_CLI_BUILD_NAME | publish | Build name for JFrog build-info collection. Overridden by --build-name. | — |
JFROG_CLI_BUILD_NUMBER | publish | Build number for JFrog build-info collection. Overridden by --build-number. | — |
EVD_SIGNING_KEY_PATH | publish | Path to the PGP private key for evidence signing. Overridden by --signing-key. | — |
JFROG_CLI_SIGNING_KEY | publish | Alternative path to the PGP signing key. Lower priority than EVD_SIGNING_KEY_PATH. | — |
EVD_KEY_ALIAS | publish | Alias for the signing key. Overridden by --key-alias. | — |
JFROG_SKILLS_DISABLE_QUIET_FAILURE | install | Set 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:
--signing-keyflagEVD_SIGNING_KEY_PATHenvironment variableJFROG_CLI_SIGNING_KEYenvironment variable
Note
For build-info on publish,
JFROG_CLI_BUILD_NAMEandJFROG_CLI_BUILD_NUMBERset the build name and number when the corresponding flags are omitted. The--build-nameand--build-numberflags override the environment variables.
Related Topics
- Skills Repositories — Create a Skills repository, configure JFrog CLI, REST API, semantic scanning, and evidence signing.
- JFrog CLI Command Reference — Overview of all JFrog CLI command namespaces, including
jf skills. - JFrog CLI quick start — Install and configure JFrog CLI before using
jf skills. - Publish Skills with JFrog CLI — Task-oriented publish walkthrough with evidence signing and semantic scanning.
- Install Skills with JFrog CLI — Task-oriented install walkthrough on the Skills Repositories page.
Updated 1 day ago
