Skip to content

Commit 955f101

Browse files
yanivt-jfroggithub-actions[bot]
authored andcommitted
chore: sync skills to v0.10.0
1 parent becfb9d commit 955f101

1 file changed

Lines changed: 41 additions & 72 deletions

File tree

plugins/jfrog/skills/jfrog/SKILL.md

Lines changed: 41 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
name: jfrog
33
description: >-
4-
Interact with the JFrog Platform via the JFrog CLI, JFrog MCP server and REST/GraphQL APIs.
4+
Interact with the JFrog Platform via the JFrog CLI and REST/GraphQL APIs.
55
Use this skill when the user wants to manage Artifactory repositories,
66
upload or download artifacts, manage builds, configure permissions,
77
manage users and groups, work with access tokens, configure JFrog CLI
@@ -17,36 +17,19 @@ compatibility: >-
1717
Requires jq on PATH.
1818
metadata:
1919
role: base
20-
version: "0.11.0"
20+
version: "0.10.0"
2121
---
2222

2323
# JFrog Skill
2424

2525
The foundational skill for all JFrog agent interactions. Covers JFrog Platform concepts, `jf` CLI setup and authentication, and intent routing to workflow skills.
2626

27-
Interact with the JFrog Platform through three tool tiers — see
28-
[Tool selection strategy](#tool-selection-strategy). In code examples below,
27+
Interact with the JFrog Platform through the JFrog CLI (`jf`) and, where the
28+
CLI falls short, through REST APIs and GraphQL. In code examples below,
2929
`<skill_path>` refers to this skill's directory and is resolved automatically
3030
by the agent. If the agent does not resolve it, determine the path by locating
3131
this SKILL.md file and using its parent directory.
3232

33-
## Tool selection strategy
34-
35-
Try the tiers in order; move to the next only when the current does not
36-
cover the operation or fails:
37-
38-
1. **JFrog MCP tools** (preferred): `CallMcpTool` against the JFrog MCP
39-
server. Discover available tools from the server's tool list; never
40-
guess tool names.
41-
2. **`jf` CLI subcommands** (fallback): dedicated commands such as
42-
`jf rt upload`, `jf rt dl`, `jf build-publish`.
43-
3. **`jf api`** (last resort): REST/GraphQL endpoints with no dedicated
44-
subcommand. Validate the path first — see rule 6 in
45-
[Cautious execution](#cautious-execution).
46-
47-
MCP and the CLI may use different token scopes. If one tier returns 403,
48-
try the alternate tier before reporting the operation blocked.
49-
5033
## Prerequisites
5134

5235
The following tools must be available on `PATH`:
@@ -55,7 +38,7 @@ The following tools must be available on `PATH`:
5538
|------|---------|
5639
| `jq` | JSON parsing of CLI and API output |
5740

58-
All JFrog HTTP traffic from Tiers 2 and 3 goes through the `jf` CLI itself
41+
All HTTP traffic to JFrog Platform APIs goes through the `jf` CLI itself
5942
(`jf api`, see [Invoking platform APIs with `jf api`](#invoking-platform-apis-with-jf-api) below) —
6043
no standalone `curl` is required for any JFrog interaction.
6144

@@ -75,10 +58,8 @@ thing to check — re-run with the appropriate escalation above.
7558

7659
## Environment check
7760

78-
MCP (Tier 1) operations do not require this check and can proceed immediately.
79-
Before your first Tier 2 or Tier 3 (`jf`) operation in a session, run the
80-
environment check and **remember its stdout** as `<UA>` for the rest of the
81-
session:
61+
Before your first JFrog operation in a session, run the environment check
62+
and **remember its stdout** as `<UA>` for the rest of the session:
8263

8364
```bash
8465
bash <skill_path>/scripts/check-environment.sh <model-slug>
@@ -111,16 +92,14 @@ subagent, pass `<UA>` in its prompt; subagents do not re-run the script.
11192

11293
| Exit | Meaning |
11394
|------|---------|
114-
| 0 | Cache fresh — CLI ready (Tiers 2 and 3 available), proceed |
115-
| 1 | Cache refreshed — CLI ready (Tiers 2 and 3 available), proceed |
116-
| 2 | `jf` not installed — Tiers 2 and 3 unavailable; only MCP (Tier 1) remains |
117-
| 3 | `jf` below minimum version — Tiers 2 and 3 unavailable; only MCP (Tier 1) remains |
95+
| 0 | Cache fresh — proceed |
96+
| 1 | Cache refreshed — proceed |
97+
| 2 | `jf` not installed — **STOP**, ask the user to install |
98+
| 3 | `jf` below minimum version — **STOP**, ask the user to upgrade |
11899

119-
Exit 2 or 3 is not a fatal error. Attempt to install or upgrade the CLI
120-
(see `references/jfrog-cli-install-upgrade.md`). If installation succeeds,
121-
re-run the environment check. If installation is not possible (no permissions,
122-
restricted environment), proceed with MCP (Tier 1) only. Both `jf` CLI commands
123-
(Tier 2) and `jf api` (Tier 3) require a working `jf` installation.
100+
On exit 2 or 3, do not fall back to `jf rt curl`, raw `curl`, or other
101+
workarounds — see `references/jfrog-cli-install-upgrade.md`. Re-run with
102+
`--force` only when the user explicitly asks to refresh or install/upgrade.
124103

125104
### JSON parsing (`jq`)
126105

@@ -144,8 +123,8 @@ command output* below.
144123

145124
## Cautious execution
146125

147-
Do not run commands speculatively. Before executing any JFrog CLI command,
148-
MCP tool call, or API call:
126+
Do not run commands speculatively. Before executing any JFrog CLI command or
127+
API call:
149128

150129
1. Confirm the operation is needed to fulfill the user's request.
151130
If the request is ambiguous or could refer to multiple systems (e.g.
@@ -155,8 +134,7 @@ MCP tool call, or API call:
155134
2. Resolve the target server using the **Server selection rules** below —
156135
there must be no ambiguity about which server is used
157136
3. For mutating operations (create, update, delete, upload), confirm with the
158-
user unless the intent is clearly implied. This applies to all tiers
159-
(MCP tools, CLI commands, and `jf api` with POST/PUT/DELETE).
137+
user unless the intent is clearly implied
160138
4. Prefer read operations first to understand current state before making changes
161139
5. **Never invent preparatory mutations.** If the requested operation fails
162140
because a precondition is not met (artifact missing from the specified repo,
@@ -167,27 +145,13 @@ MCP tool call, or API call:
167145
can have cascading effects the user has not considered — virtual repository
168146
resolution changes, storage quota consumption, replication triggers, Xray
169147
re-indexing, or permission propagation.
170-
6. **Never guess tool names or API paths.** For MCP tools, confirm the tool
171-
exists in the server's tool list. For `jf api` paths, validate against
172-
`<skill_path>/references/` (or
173-
[JFrog OpenAPI specifications](https://docs.jfrog.com/integrations/docs/openapi-specifications)
174-
if you have web access). On a 404, stop and report — never retry with a guessed
175-
alternative path.
176148

177149
## Server selection rules (mandatory)
178150

179151
**Single-server invariant.** Every `jf` call MUST pass `--server-id <SID>`
180152
(default resolved below); for one user request, all `jf` calls use **exactly
181153
one** server-id. A wrong answer from the wrong server is worse than a stop-and-ask.
182154

183-
**JFrog MCP and CLI use independent auth.** MCP tools authenticate through
184-
the MCP server session (not `jf config`); CLI commands authenticate through
185-
`jf config`. If you switch the CLI target server via `jf config use`, the
186-
MCP connection still points to its original server. Do not mix MCP and CLI
187-
calls targeting different servers in the same session. If the user asks to
188-
switch servers, warn that MCP tools will continue to target the original
189-
server until the MCP connection is re-established.
190-
191155
**MUST NOT** retry on a second configured server after 401/403/404, empty, or
192156
partial results; **MUST NOT** infer multi-server intent from "my"/"our" or
193157
from seeing extra entries in `jf config show`. **Override:** only when the user
@@ -197,7 +161,7 @@ and `<b>`") — inferred intent is not an override.
197161
### Resolve the default once per session
198162

199163
Before your first `jf` call, resolve the default server-id and **remember it**
200-
as `<SID>` for the rest of the session, same pattern as `<UA>`:
164+
as `<SID>` for the rest of the session same pattern as `<UA>`:
201165

202166
```bash
203167
jf config show 2>/dev/null \
@@ -215,8 +179,7 @@ Pass `--server-id <SID>` to every subsequent `jf` call. The flag goes
215179
When launching a subagent, pass `<SID>` in its prompt — subagents do not
216180
re-resolve. Examples elsewhere in this skill and in `references/*.md` omit
217181
`--server-id` for readability; the rule is global, same as
218-
`JFROG_CLI_USER_AGENT`. To add a new server, read
219-
`references/jfrog-login-flow.md`.
182+
`JFROG_CLI_USER_AGENT`.
220183

221184
### On any error, stop — never switch
222185

@@ -244,7 +207,7 @@ below.
244207

245208
- **Repository types, artifacts, builds, properties, or permission targets (concepts)**: read `references/artifactory-entities.md` (~220 lines)
246209
- **Stored packages, package versions, version locations, or the metadata layer over Artifactory (concepts)**: read `references/stored-packages-entities.md` (~165 lines)
247-
- **Repo, file, build, permission, user/group, or replication operations**: if the JFrog MCP server exposes a tool for the operation, prefer it. For CLI/API fallback, read `references/artifactory-operations.md` (for **listing builds** use AQL with `limit`/`offset` — see § *Listing build names*; for **full build detail** use `GET /api/build/<name>/<number>?project=` — see § *Retrieving full build info*)
210+
- **Repo, file, build, permission, user/group, or replication operations**: read `references/artifactory-operations.md` (for **listing builds** use AQL with `limit`/`offset` — see § *Listing build names*; for **full build detail** use `GET /api/build/<name>/<number>?project=` — see § *Retrieving full build info*)
248211
- **AQL queries**: read `references/artifactory-aql-syntax.md` (~585 lines)
249212
- **Artifactory REST beyond the CLI, structured JSON templates (replacing interactive wizards), or any Artifactory API gap**: read `references/artifactory-api-gaps.md` (~220 lines)
250213

@@ -261,8 +224,8 @@ below.
261224

262225
### Catalog
263226

264-
- **Public or custom catalog, package metadata, vulnerability advisories, licenses, OpenSSF, or MCP services (concepts)**: if the JFrog MCP server exposes a catalog tool, prefer it for single-package lookups. For deeper queries, read `references/catalog-entities.md` (~190 lines)
265-
- **CVE details, vulnerability lookup by CVE ID, or severity/affected-packages/fix-versions for a specific CVE**: prefer an MCP vulnerability-lookup tool if the JFrog MCP server exposes one. Otherwise read `references/onemodel-query-examples.md` § *Public security domain* for the `searchVulnerabilities` query shape — this is self-contained; do not load the `jfrog-package-safety-and-download` skill for pure CVE lookups
227+
- **Public or custom catalog, package metadata, vulnerability advisories, licenses, OpenSSF, or MCP services (concepts)**: read `references/catalog-entities.md` (~190 lines)
228+
- **CVE details, vulnerability lookup by CVE ID, or severity/affected-packages/fix-versions for a specific CVE**: go directly to `references/onemodel-query-examples.md` § *Public security domain* for the `searchVulnerabilities` query shape — this is self-contained; do not load the `jfrog-package-safety-and-download` skill for pure CVE lookups
266229

267230
### OneModel (GraphQL)
268231

@@ -289,6 +252,16 @@ below.
289252
- **Standalone HTML report with JFrog-aligned styling**: read `references/jfrog-brand-html-report.md`
290253
- **Reusable gotchas from past tasks**: read or extend `references/general-use-case-hints.md`
291254

255+
## Server management
256+
257+
Server configuration is always read live from `jf config` (never cached).
258+
259+
- **List servers**: `jf config show` (local operation, no network needed)
260+
- **Use a specific server**: pass `--server-id <id>` to any command
261+
- **Switch default**: `jf config use <server-id>`
262+
- **Add a new server**: read `references/jfrog-login-flow.md` for the full
263+
login procedure (web login or manual token setup)
264+
292265
## Command discovery
293266

294267
Use the commands listed below as your primary reference. Run `--help` to
@@ -330,9 +303,10 @@ Top-level other: `access-token-create` (`atc`), `login`, `how`, `stats`,
330303

331304
## Invoking platform APIs with `jf api`
332305

333-
`jf api` is the Tier 3 entry point for JFrog Platform REST and GraphQL
334-
endpoints, auto-authenticated against the resolved server. **Do not use
335-
`jf rt curl` or `jf xr curl`**; they are superseded by `jf api`.
306+
When the CLI lacks a dedicated subcommand, use `jf api` — the unified entry
307+
point for every JFrog Platform REST and GraphQL endpoint, auto-authenticated
308+
against the resolved server. **Do not use `jf rt curl` or `jf xr curl`**
309+
they are superseded by `jf api`.
336310

337311
### Product-prefix table
338312

@@ -356,7 +330,7 @@ returns 404.
356330

357331
```bash
358332
jf api /artifactory/api/repositories
359-
jf api --server-id <SID> /artifactory/api/system/version
333+
jf api /artifactory/api/system/version --server-id <id>
360334

361335
# AQL (POST with text/plain body)
362336
jf api /artifactory/api/search/aql \
@@ -406,15 +380,10 @@ this repo GET, see **Any API gap** under [When to read reference files](#when-to
406380

407381
## Gotchas
408382

409-
### MCP tools
410-
411-
- MCP tools return structured data in the tool result. Read response fields
412-
directly; do not pipe MCP output through shell commands or `jq`.
413-
414-
### CLI and `jf api`
415-
416-
- `jf api` requires the **product prefix** in the path. Omitting it returns
417-
404. See the [product-prefix table](#product-prefix-table) for the full list.
383+
- `jf api` requires the **product prefix** in the path (`/artifactory/...`, `/xray/...`, `/access/...`, `/evidence/...`,
384+
`/lifecycle/...`, `/apptrust/...`, `/distribution/...`, `/onemodel/...`,
385+
`/mc/...`). Omitting the prefix returns 404. See the
386+
[product-prefix table](#product-prefix-table) above.
418387
- `jf api` writes the body (success or error JSON) to **stdout** and
419388
`[Info] Http Status: NNN` to **stderr** on every call; non-2xx also exits
420389
1 and adds `[Warn] jf api: <method> <url> returned NNN`. Pipe stdout to

0 commit comments

Comments
 (0)