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:
- A Skills local repository in JFrog Artifactory. See Create Skills Repository.
- JFrog CLI v2.98.0 or later configured to point to your JFrog Artifactory server. For installation, see JFrog CLI quick start. For Skills-specific configuration, see Configure JFrog CLI for Skills.
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).
| Command | What it does |
|---|---|
jf agent skills list | Browse skills in a repository or inspect locally installed skills |
jf agent skills publish | Package and upload a skill folder to JFrog Artifactory |
jf agent skills install | Download and install a skill for one or more harnesses |
jf agent skills update | Upgrade an installed skill to a newer version |
jf agent skills search | Search for skills across Skills repositories |
jf agent 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 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 containingSKILL.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.
| Flag | Description | Default |
|---|---|---|
--repo | Target Skills repository key. If omitted, auto-discovered (see Skills 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 JFrog 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 JFrog 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 agent skills publish ~/skills_dev/myskillPublish to a specific repository and record build-info:
jf agent skills publish ~/skills_dev/myskill \
--repo skills-local \
--build-name my-pipeline \
--build-number 42Publish with a version override:
jf agent 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 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 orlatest. 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.
| Mode | Flag combination | Where 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.
| Flag | Description | Default |
|---|---|---|
--repo | Skills repository to download from. See Skills Repository Resolution. | Auto-discovered |
--version | Version to install. Pass latest or omit to resolve the highest SemVer. | Latest SemVer |
--harness | Comma-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-dir | Project root directory. Combined with each harness's configured projectDir. Mutually exclusive with --global. | . (current directory) |
--global | Install under each harness's configured globalDir instead of under the project root. Mutually exclusive with --project-dir. | false |
--path | Local 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. | — |
--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 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
--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 agent skills install myskill --harness cursor --repo skills-local --version 1.0.0Install for multiple harnesses at once:
jf agent skills install myskill --harness cursor,claude-code --repo skills-local --version latestInstall globally for Cursor:
jf agent skills install myskill --harness cursor --global --repo skills-localInstall 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 jsonExample 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 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 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.
| 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 agent skills search code-reviewSearch within a specific repository, JSON output:
jf agent 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.
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 asjf agent skills install<TARGET_VERSION>: Target SemVer orlatest(default)
Flags
The following table lists flags for jf agent skills update.
| Flag | Description | Default |
|---|---|---|
--repo | Skills repository to download from. See Skills Repository Resolution. | Auto-discovered |
--version | Target version. Omit for latest. | latest |
--harness | Comma-separated harness names. Same resolution as jf agent skills install. | — |
--project-dir | Project root directory. Default: current directory. Mutually exclusive with --global. | . |
--global | Update under each harness's global directory. Mutually exclusive with --project-dir. | false |
--path | Base 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-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. 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 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
<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-localUpdate to a specific version with dry-run preview:
jf agent skills update myskill --harness cursor --repo skills-local --version 2.0.0 --dry-runForce reinstall even if already at target version:
jf agent skills update myskill --harness cursor --repo skills-local --forceGet machine-readable update summary:
jf agent skills update myskill --harness cursor --repo skills-local --format jsonExample 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:
--harnesswith 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> --globalWhere:
<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.
| Flag | Description | Default |
|---|---|---|
--repo | Skills repository to list. Mutually exclusive with --harness. | — |
--harness | Single harness name to list installed skills for (not comma-separated). Mutually exclusive with --repo. | — |
--project-dir | Project root for harness-scoped listing. Mutually exclusive with --global. | . |
--global | List from each harness'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 --harness: name (only option). | updated / name |
--sort-order | Sort order for --harness mode: asc or desc. Not supported with --repo. | asc |
--check-updates | With --harness only: compare installed versions against the registry. Adds REGISTRY LATEST and STATUS columns. Requires a configured JFrog Artifactory server. | false |
--format | Output format: table or json. | table |
Status Values for Check Updates
When you use --check-updates with --harness, 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 agent skills list --repo skills-local --sort-by downloadsList skills installed for the Cursor harness and check for updates:
jf agent skills list --harness cursor --check-updatesJSON output of locally installed skills:
jf agent skills list --harness cursor --format jsonExample 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 jsonExample 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.
| Flag | Description | Default |
|---|---|---|
--version | Version to delete. Required. | — |
--repo | Skills repository key. See Skills Repository Resolution. | Auto-discovered |
--dry-run | Show 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-localPreview what would be deleted:
jf agent skills delete myskill --version 1.0.0 --repo skills-local --dry-runSkills 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:
--repoflag valueJFROG_SKILLS_REPOenvironment variable- 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.
| 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 JFrog Xray scan. Equivalent to --skip-scan. | false |
JFROG_CLI_SKILLS_SCAN_TIMEOUT | publish | JFrog 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
Updated 5 days ago
