Skip to content

Commit 974556c

Browse files
[patch] chore: sync skills to v0.34.0
1 parent c28ad17 commit 974556c

101 files changed

Lines changed: 10377 additions & 2001 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 52 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,23 @@
11
---
2-
name: jfrog-ai-catalog-skills
2+
name: jfrog-ai-catalog
33
description: >-
4-
Discover, install, manage, and publish agent skills hosted in the JFrog AI
5-
Catalog (Artifactory skills repositories) using the JFrog CLI (`jf skills`)
6-
and the JFrog Agent Guard. Lists and searches available skills (catalog-wide
7-
or scoped to a project), shows a skill's versions and which repos host it,
8-
installs the latest or a pinned version, verifies the install, lists
9-
installed skills, updates and removes them, and publishes (uploads) a local
10-
skill bundle and releases new versions.
11-
Use when the user asks what skills are available or installed, to
12-
search/browse the catalog, to install/update/uninstall a skill, to see a
13-
skill's versions, or to publish/upload/release a skill to JFrog /
14-
Artifactory / the AI Catalog.
4+
Discover, search, install, update, remove, and publish agent skills and
5+
plugins hosted in the JFrog AI Catalog (Artifactory) via the JFrog CLI
6+
(`jf skills`, `jf agent plugins`) and JFrog Agent Guard. Use whenever the
7+
user asks what skills or plugins are available or installed, wants to
8+
browse/search the catalog, see versions, install/update/uninstall/delete a
9+
skill or plugin, or publish/upload/release one to JFrog / Artifactory / the
10+
AI Catalog.
1511
metadata:
1612
role: workflow
1713
---
1814

19-
# JFrog AI Catalog Skills
15+
# JFrog AI Catalog
2016

21-
Discover, install, and manage agent skills from the JFrog AI Catalog
22-
(Artifactory skills repositories), and publish your own skills back to it, all
23-
through the JFrog CLI (`jf skills`) and the JFrog Agent Guard.
17+
Discover, install, and manage agent skills and agent plugins from the JFrog AI
18+
Catalog (Artifactory skills/plugins repositories), and publish your own back to
19+
it, all through the JFrog CLI (`jf skills`, `jf agent plugins`) and the JFrog
20+
Agent Guard.
2421

2522
## Choose a reference file
2623

@@ -32,6 +29,10 @@ Pick the row matching the user's intent and read that reference file.
3229
| Install or update a skill (latest or a pinned version), or a download is blocked | [references/installing-skills.md](references/installing-skills.md) |
3330
| "What's installed?" / remove an installed skill | [references/managing-installed-skills.md](references/managing-installed-skills.md) |
3431
| Publish / upload / release a skill to the catalog | [references/publishing-skills.md](references/publishing-skills.md) |
32+
| "What plugins are available?" / browse the plugin catalog / list plugin versions / search plugins | [references/discovering-plugins.md](references/discovering-plugins.md) |
33+
| Install or update a plugin (latest or a pinned version) | [references/installing-plugins.md](references/installing-plugins.md) |
34+
| "What plugins are installed?" / remove an installed plugin | [references/managing-installed-plugins.md](references/managing-installed-plugins.md) |
35+
| Publish / upload / release a plugin to the catalog | [references/publishing-plugins.md](references/publishing-plugins.md) |
3536

3637
## Prerequisites
3738

@@ -43,6 +44,12 @@ Pick the row matching the user's intent and read that reference file.
4344
- The [server selection rules](../jfrog/SKILL.md#server-selection-rules-mandatory)
4445
— resolve the default `<SID>` once and reuse it, pass `--server-id <SID>`
4546
after the subcommand on every `jf` call, and use one server per request.
47+
**Resolve it now, before any `jf` call:**
48+
```bash
49+
jf config show 2>/dev/null \
50+
| awk '/^Server ID:/{id=$NF} /^Default:[[:space:]]*true/{print id; exit}'
51+
# stdout: the default server-id; if empty, stop and ask which server to use
52+
```
4653
- The stop-on-error rule — on any `jf` failure, stop and never switch servers.
4754

4855
One addition specific to this skill: never `cat` or parse
@@ -57,16 +64,30 @@ Pick the row matching the user's intent and read that reference file.
5764
as your `jf` calls. Agent Guard also reads `JFROG_URL` / `JF_URL` directly when
5865
set, so make sure the `<SID>` you resolved points at that same host.
5966
- **Resolve the project (`<PROJECT>`) only when needed.**
60-
It is required for `--list-skills`, `--list-skill-versions`, and
61-
`--provision-skills-repository`. Take it from `JF_PROJECT` or the user.
67+
It is required for `--list-skills`, `--list-skill-versions`,
68+
`--provision-skills-repository`, `--list-agent-plugins`,
69+
`--list-agent-plugin-versions`, and `--provision-agent-plugins-repository`.
70+
Resolve it with this priority:
71+
1. Parse `~/.jfrog/setup.json` (if present) and read `.servers["<SID>"].currentActiveProject`.
72+
2. Fall back to `$JF_PROJECT`.
73+
3. If still empty, ask the user for the project key - do **not** guess.
74+
75+
```bash
76+
PROJECT=$(jq -r --arg sid "<SID>" '.servers[$sid].currentActiveProject // empty' \
77+
~/.jfrog/setup.json 2>/dev/null)
78+
[ -z "$PROJECT" ] && PROJECT="${JF_PROJECT:-}"
79+
```
6280
There is no non-admin way to look up or validate project keys (the
6381
`/access/api/v1/projects` list endpoint needs admin), so you cannot
6482
silently correct a display name to a key. If the value looks like a
6583
display name (spaces, mixed case) rather than a short slug, ask the
6684
user to confirm the project **key** specifically. Never assume
6785
`default`, never invent one. Install, update, remove, and publishing to
68-
an explicit `--repo` are keyed by skill **name** and/or **repo**, not a
69-
project.
86+
an explicit `--repo` are keyed by skill/plugin **name** and/or **repo**,
87+
not a project.
88+
- **Bundle manifests differ by type.** Skill bundles require `SKILL.md`
89+
in the bundle root; plugin bundles require `plugin.json`. Validate the
90+
correct file before installing or publishing.
7091

7192
## Workflow overview
7293

@@ -76,10 +97,14 @@ flowchart TD
7697
B -->|No| C[Ask user to install jf CLI, then continue]
7798
B -->|Yes| D{Intent}
7899
C --> D
79-
D -->|List all / versions| E[npx @jfrog/agent-guard --list-skills]
80-
D -->|Install / update| F[Resolve slug + version, then jf skills install/update]
81-
D -->|List installed / remove| G[jf skills list / rm -rf install dir]
82-
D -->|Publish| H[Resolve/provision repo, validate bundle, jf skills publish]
100+
D -->|List all skills / versions| E[npx @jfrog/agent-guard --list-skills]
101+
D -->|Install / update skill| F[Resolve slug + version, then jf skills install/update]
102+
D -->|List installed skills / remove| G[jf skills list / rm -rf install dir]
103+
D -->|Publish skill| H[Resolve/provision repo, validate bundle, jf skills publish]
104+
D -->|List all plugins / versions| I[npx @jfrog/agent-guard --list-agent-plugins]
105+
D -->|Install / update plugin| J[Resolve slug + version, then jf agent plugins install/update]
106+
D -->|List installed plugins / remove| K[jf agent plugins list / rm -rf install dir]
107+
D -->|Publish plugin| L[Resolve/provision repo, validate bundle, jf agent plugins publish]
83108
```
84109

85110
## Gotchas
@@ -100,3 +125,6 @@ the reference files above.
100125
- **Use the response templates verbatim**: where a reference file gives a "reply
101126
using this exact template" block, fill the placeholders and send exactly that,
102127
with the same wording every time and no extra preamble or commentary.
128+
- **Plugins have no Xray support**: skip all Xray-related handling (no 403
129+
gating on download, no inline scan on publish, no `--skip-scan` flag) when
130+
performing any `jf agent plugins` operation.
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
# Discovering plugins
2+
3+
List-all and versions go through the **Agent Guard**.
4+
5+
## List plugins (page through the catalog)
6+
7+
```bash
8+
npx --yes --registry <REGISTRY_URL> @jfrog/agent-guard \
9+
--list-agent-plugins --project "<PROJECT>" [--name <PATTERN>] [--server "<SID>"] [--page-size <N>] [--cursor <C>] [--format json]
10+
```
11+
12+
| Flag | Required | Purpose |
13+
|------|----------|---------|
14+
| `--project <PROJECT>` | **Yes** | AI Catalog project to list. |
15+
| `--name <PATTERN>` | No | Find plugins by name: server-side, case-insensitive substring, scoped to the project. |
16+
| `--server <SID>` | No | jf CLI config entry to authenticate with (defaults to the resolved single server). |
17+
| `--page-size <N>` | No | Results per page. Pass `50` to stay bounded. The Agent Guard defaults to 500 if omitted. |
18+
| `--cursor <C>` | No | Continuation cursor from a previous page's JSON, to fetch the next page. |
19+
| `--format json` | No | Raw page JSON instead of the default compact TSV (name + last-updated). |
20+
21+
Request a bounded page with `--page-size 50 --format json`, present those plugins,
22+
then read `exhausted` and `cursor` from the response. If `exhausted` is `false`
23+
there are more. Tell the user and offer to fetch the next page with
24+
`--cursor <cursor>`. Do not silently page through the whole catalog.
25+
26+
**Presenting results (use this exact format).** Render the plugins as this table,
27+
sorted by name, and nothing else (no commands, URLs, flags, or cursors):
28+
29+
| Plugin | Last updated |
30+
|--------|-------------|
31+
| `<name>` | `<lastUpdated>` |
32+
33+
For a `--name` search with no matches, reply with one line instead:
34+
35+
> No plugins match "`<query>`".
36+
37+
To offer a follow-up (a plugin's versions or repos), ask in plain language
38+
("want the versions for one of these?") and run the command yourself.
39+
40+
## List a repo's plugins
41+
42+
To see what is published in one specific plugins repository (for example, to check
43+
a repo before or after publishing to it), list it directly with the CLI. This is
44+
repo-scoped (Artifactory registry contents), unlike `--list-agent-plugins`, which is
45+
project-scoped:
46+
47+
```bash
48+
jf agent plugins list --repo "<repo>" --server-id "<SID>" --format json
49+
```
50+
51+
Never run a bare `jf agent plugins list` (it errors): always pass `--repo <key>` here, or
52+
`--harness <h>` for installed plugins (see `managing-installed-plugins.md`).
53+
54+
**Presenting results (use this exact format).** Render the plugins as this table,
55+
sorted by name, and nothing else (no commands, URLs, or flags):
56+
57+
Plugins in `<repo>`:
58+
59+
| Plugin | Version | Description |
60+
|--------|---------|-------------|
61+
| `<name>` | `<version>` | `<description>` |
62+
63+
Include the **Description** column only when the listing provides one (drop it if
64+
every plugin's description is empty). If the repo holds no plugins, reply with one
65+
line instead:
66+
67+
> No plugins published in `<repo>`.
68+
69+
## A plugin's versions and hosting repos
70+
71+
```bash
72+
npx --yes --registry <REGISTRY_URL> @jfrog/agent-guard \
73+
--list-agent-plugin-versions --project "<PROJECT>" --agent-plugin "<slug>" [--server "<SID>"] [--page-size <N>] [--cursor <C>] [--format json]
74+
# JSON: versions[].version, versions[].locations[].repoKey (page through with cursor like above)
75+
```
76+
77+
**Presenting versions (use this exact format).** Newest version first:
78+
79+
Versions of `<slug>`:
80+
81+
| Version | Hosted in |
82+
|---------|-----------|
83+
| `<version>` | `<repoKey>`[, `<repoKey>`] |

skills/jfrog-ai-catalog-skills/references/discovering-skills.md renamed to skills/jfrog-ai-catalog/references/discovering-skills.md

File renamed without changes.
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
# Installing and updating plugins
2+
3+
Install and update both download from the registry, so they share the same
4+
`--repo`/`--quiet` rules and verify-landed check.
5+
6+
## Contents
7+
8+
- When evidence verification fails
9+
- Verify the install landed
10+
- Update an installed plugin
11+
12+
Install by **slug** (the registry `slug`/`name`, never a display name). Latest
13+
version is used by default, and the user may pass an explicit version.
14+
**The `jf agent plugins install` command takes no project.** Resolving which repo hosts
15+
the slug uses `--list-agent-plugin-versions` (below), which does require `--project`, so
16+
use `<PROJECT>` resolved at session start (see SKILL.md Prerequisites).
17+
18+
```bash
19+
jf agent plugins install "<slug>" \
20+
--server-id "<SID>" \
21+
--version "latest" \
22+
--repo "<repo>" \
23+
--harness "<harness>" \
24+
--quiet
25+
```
26+
27+
**Always pass `--quiet`.** `jf agent plugins install`/`update` opens an interactive
28+
prompt by default, and an agent's shell has no TTY, so without `--quiet` the
29+
prompt fails. `--quiet` also defaults to `$CI`, so exporting `CI=true` has the
30+
same effect if the flag is ever unavailable. Run non-interactively and resolve
31+
every choice (`--repo`, target) up front.
32+
33+
**Resolve `<harness>` from the environment check script — never from your model
34+
name.** If `<UA>` is not already known from this session, run
35+
`bash <skill_path>/../jfrog/scripts/check-environment.sh <model-slug>` now and capture
36+
its stdout as `<UA>`. Parse the `tool=<h>` field from `<UA>` and map it to a
37+
`jf` harness name:
38+
39+
| `tool=` value in `<UA>` | `--harness` for `jf agent plugins` |
40+
|-------------------------|-------------------------------------|
41+
| `claude` | `claude` |
42+
| `cursor` | `cursor` |
43+
| `copilot` | `vscode` |
44+
| `unknown`, empty, or any other | Ask the user |
45+
46+
If `tool` is `unknown`, empty, or not in the table — do **not** guess. Ask
47+
the user for the desired install path and use `--path <dir>` instead.
48+
49+
Choose exactly one install target (these are mutually exclusive):
50+
51+
| Flag | Installs into |
52+
|------|---------------|
53+
| `--harness <name>` | The current agent's resolved plugins dir (resolve per above, e.g. `cursor`, `claude`). |
54+
| `--global` | Each agent's global directory from config. |
55+
| `--project-dir <dir>` | Project root combined with the agent's project path. |
56+
| `--path <dir>` | Direct: files go under `<dir>/<slug>`. |
57+
58+
**Always resolve and pass `--repo`.** When the platform has more than one plugins
59+
repository (the common case), `jf agent plugins install` errors with
60+
`multiple plugins repositories found … specify --repo` if you omit it, even when
61+
the plugin lives in only one repo. So **the first install step is always** to look
62+
up where the slug is hosted with the Agent Guard:
63+
64+
```bash
65+
npx --yes --registry <REGISTRY_URL> @jfrog/agent-guard \
66+
--list-agent-plugin-versions --project "<PROJECT>" --agent-plugin "<slug>" [--server "<SID>"] --format json
67+
# read versions[].version and versions[].locations[].repoKey
68+
```
69+
70+
**Resolve the repo and version only via `--list-agent-plugin-versions`.** The catalog
71+
listing (`--list-agent-plugins`, even with `--name`) returns just names, not repos or
72+
versions, so use the versions call above to pick the repo, never a name listing.
73+
74+
- **One repo hosts the slug.** Use it as `--repo <repoKey>` directly. Don't ask.
75+
- **Multiple repos host the slug.** Do not pick silently. List the repos (and
76+
the version each holds), ask the user which to install from, then pass
77+
`--repo <chosen>`. The newest version may only exist in one of them, so
78+
surface that to avoid giving the user a stale version.
79+
80+
## When evidence verification fails
81+
82+
If install fails with `evidence verification failed … no evidence found`, the
83+
plugin has **no signed evidence/attestation** (proof it's genuine and scanned).
84+
This is a security control. **Do not silently bypass it.** Stop and ask using
85+
**this exact template**:
86+
87+
> `<slug>@<version>` has no signed evidence (proof it is genuine and scanned).
88+
> Installing it skips that security check. Do you want to install it anyway?
89+
90+
Only if the user explicitly agrees, re-run with
91+
`JFROG_AGENT_PLUGINS_DISABLE_QUIET_FAILURE=true`. Never set that flag on your own.
92+
93+
## Verify the install landed
94+
95+
After install, confirm the slug shows up as installed — don't guess where
96+
`plugin.json` lives inside the bundle (layout isn't guaranteed, see
97+
*Validate the bundle* in `publishing-plugins.md`). `jf agent plugins list` is
98+
the source of truth for what's actually installed:
99+
100+
```bash
101+
jf agent plugins list --server-id "<SID>" --harness "<harness>" --format json \
102+
| jq -e --arg slug "<slug>" '.[] | select(.name == $slug)' >/dev/null \
103+
&& echo "installed" || echo "MISSING from installed list"
104+
```
105+
106+
If the slug is missing, report the failure. Do not claim success.
107+
108+
On success, reply using **this exact template**:
109+
110+
> Installed `<slug>@<version>` from `<repo>` into `<harness>`.
111+
> Restart your agent session to load it.
112+
113+
## Update an installed plugin
114+
115+
To upgrade an installed plugin to a newer version, use the CLI (it re-downloads
116+
and reinstalls in place):
117+
118+
```bash
119+
jf agent plugins update --slug "<slug>" --server-id "<SID>" --harness "<harness>" --version "latest" --quiet
120+
# Preview without touching Artifactory:
121+
jf agent plugins update --slug "<slug>" --server-id "<SID>" --harness "<harness>" --dry-run
122+
# Reinstall even if already at the target version:
123+
jf agent plugins update --slug "<slug>" --server-id "<SID>" --harness "<harness>" --force --quiet
124+
# Update all installed plugins at once:
125+
jf agent plugins update --all --server-id "<SID>" --harness "<harness>" --quiet
126+
```
127+
128+
Note: unlike `jf skills update`, the slug is passed as `--slug <slug>` (a named
129+
flag), not as a positional argument. Use the same install-target flag
130+
(`--harness`/`--global`/`--project-dir`/`--path`) the plugin was installed with.
131+
After updating, re-verify the `plugin.json` (see *Verify the install landed* above).
132+
133+
On success, reply using **this exact template**:
134+
135+
> Updated `<slug>` to `<version>` (`<harness>`).
136+
> Restart your agent session to load it.
137+
138+
If the plugin was already current:
139+
140+
> `<slug>` is already at the latest version (`<version>`). Nothing to update.

skills/jfrog-ai-catalog-skills/references/installing-skills.md renamed to skills/jfrog-ai-catalog/references/installing-skills.md

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ Install by **slug** (the registry `slug`/`name`, never a display name). Latest
1515
version is used by default, and the user may pass an explicit version.
1616
**The `jf skills install` command takes no project.** Resolving which repo hosts
1717
the slug uses `--list-skill-versions` (below), which does require `--project`, so
18-
resolve it (from `JF_PROJECT`, else ask the user) before that lookup.
18+
use `<PROJECT>` resolved at session start (see SKILL.md Prerequisites).
1919

2020
```bash
2121
jf skills install "<slug>" \
@@ -37,13 +37,28 @@ defaults to `$CI`, so exporting `CI=true` has the same effect if the flag is eve
3737
unavailable. Run non-interactively and resolve every choice (`--repo`, target)
3838
up front.
3939

40-
**Resolve `<harness>` from the host you are running in. Never take it from your
41-
model name, and never hardcode it.** Get the valid names from the CLI: run
42-
`jf skills list --harness '?'` to print the
43-
`Supported agents:` table, then install into the row for your host. Identify the
44-
host from its environment. For example, `CURSOR_*``cursor`,
45-
`CLAUDECODE``claude-code`, VS Code / GitHub Copilot → `github-copilot`. If
46-
nothing identifies the host, ask the user. Never assume.
40+
**Resolve `<harness>` from the environment check script — never from your model
41+
name.** If `<UA>` is not already known from this session, run
42+
`bash <skill_path>/../jfrog/scripts/check-environment.sh <model-slug>` now and capture
43+
its stdout as `<UA>`. Parse the `tool=<h>` field from `<UA>` and map it to a
44+
`jf` harness name:
45+
46+
| `tool=` value in `<UA>` | `--harness` for `jf skills` |
47+
|-------------------------|------------------------------|
48+
| `claude` | `claude-code` |
49+
| `cursor` | `cursor` |
50+
| `copilot` | `github-copilot` |
51+
| `unknown`, empty, or any other | Ask the user |
52+
53+
If `tool` is `unknown`, empty, or not in the table — do **not** guess. Ask
54+
the user for the desired install path and use `--path <dir>` instead.
55+
**Exception — Kiro (install only):** if you're self-identified as Kiro (IDE
56+
or `kiro-cli`, per your system prompt — `check-environment.sh` doesn't
57+
detect it), `--harness kiro` is rejected by `jf`, so skip asking and use
58+
`--path` with `.kiro/skills` (project) / `~/.kiro/skills` (global, or
59+
`$KIRO_HOME/skills` if `KIRO_HOME` is set) directly. This exception does not
60+
extend to `jf skills list` — see *List currently installed skills* in
61+
`managing-installed-skills.md`.
4762

4863
Choose exactly one install target (these are mutually exclusive):
4964

0 commit comments

Comments
 (0)