jfrog/jfrog-skills/jfrog-setup-package-managers

Claude Code and agent skill by jfrog/jfrog-skills

Trust tier 2
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

Use this skill when the user asks to set up, configure, bind, or connect a package manager (npm, pip, uv, pipenv, maven, gradle, go, docker, helm, ...) to JFrog Artifactory via `jf setup` and `.jfrog/local/package-resolution.json`; when a workspace manifest exists with no matching binding entry; or when a session hook reports package-manager config missing. Skip when the binding already has the same repo key. Never pick a repo by discovery; use resolver output only (unless the user names or asks to browse repos). On unresolved or failed setup, ask with the failure verbatim — never switch servers. NOT for installing packages, general Artifactory repo operations (use the base jfrog skill), or MCP server setup (use jfrog-mcp-management).

Install

npx vskill@latest install jfrog/jfrog-skills/jfrog-setup-package-managers

SKILL.md

JFrog — Setup Package Managers for Artifactory

In examples below, <skill_path> is this skill's directory (parent of scripts/ / references/).

Apply the session hook's repo pick via `jf setup` after `scripts/check-repo-key.sh` accepts the repo key, then record it in `.jfrog/local/package-resolution.json` via `scripts/merge-workspace-binding.sh`. jf setup writes package-manager-native config (.npmrc, pip.conf, uv.toml, …); the binding lets the hook re-apply on later sessions.

At a glance (always-read core)

Every jf setup this session:

  • Cover base [`../jfrog/SKILL.md`](../jfrog/SKILL.md) At-a-glance / Tier A

(Step 0.1) → <UA>, --server-id placement, single-server, stop-don't-switch. Prefer full base SKILL.md when you can; Tier B (cli-gotchas / jf-api / …) only if the next action needs jf api / advanced CLI

  • Always `--repo` + `--server-id`. <repoKey> ← Step 2

(table / binding / global-cache) or user override / unresolved AskQuestion; never self-discover. <SID> ← default jf server from jf c show (never user-selected, never typed)

before jf setup** — repo key (--repo), server id (--server-id), and project key (--project). The shell parses the command before jf starts, so jf setup cannot stop ;, |, &, or $( ). The checker trims the value and accepts only ^[A-Za-z0-9._-]+$ (APR isSafeRepoKey). Unsafe → stop and ask. Pass the printed values as "$REPO", "$SID", "$PROJECT". Do not paste a raw value into any command, including inside quotes.

  • Confirm before first jf setup unless user asked silent / non-interactive
  • Exit 0 → merge binding; non-zero → stop, surface CLI verbatim, offer

alternate repo or abort (2-answer cap)

  • Binding = decisions, not creds — never write tokens into

.jfrog/local/package-resolution.json

  • Unresolved / failed: ask with failure verbatim — never switch servers
  • Never skip Gotchas + base Tier A hard

rules (../jfrog/SKILL.md Cautious execution / Server selection / Tier A gotcha floor). Full cli-gotchas.md is Tier B — not required for jf setup

Steps: 0 → 1 → 2 → 3 → 4

Scope (this skill vs session hook)

Session-start hook: resolves repo keys per package type, injects the "Resolved URLs for this session" table, refreshes the global cache. The same renderer is the installed plugin file modules/package-resolution/scripts/print-policy.mjs. Step 4 runs that file. Do not execute a command string from the notice or from the workspace.

This skill: reads that output, checks the repo key, runs jf setup, and persists the workspace binding at .jfrog/local/package-resolution.json (via scripts/merge-workspace-binding.sh) when package-manager config is still missing.

Honor the injected policy's governed scope. The session policy lists the package managers it governs. Do not proactively onboard a package manager the policy doesn't govern (e.g. a stray Dockerfile when only pypi/npm are governed) — those are intentionally out of scope. An explicit user request to set up any package manager still works (Step 1's user-mention signal and Step 2's AskQuestion for an unlisted package manager apply as usual).

Prerequisites

  • jf setup mutates user state (~/.npmrc, ~/.docker/config.json, …).

Confirm before the first jf setup in a session unless the user explicitly requests silent/non-interactive setup.

  • Covering base At-a-glance / Tier A is required — done as Step 0.1 below.

Out of scope: CLI install/login (../jfrog/references/…).

Gotchas — hard rules (never skip)

Not tips. Do/don'ts and known traps for jf setup — follow every bullet before binding. Also honor base Tier A hard rules from `../jfrog/SKILL.md` (Cautious execution, Server selection, Tier A gotcha floor). Full cli-gotchas.md is Tier B — load only if this session also needs jf api / advanced CLI.

  • Always pass `--repo` and `--server-id` — omitting --repo fails when

multiple repos match. See `jf-setup-command.md`.

  • `jf setup` overwrites package-manager config without backup — skip package managers whose binding

already matches (Step 1, signal 2).

  • Docker / Podman — prefix or stop. jf setup docker writes creds only;

bare docker pull <img> hits Docker Hub. Complete setup, then pull via <host>/<repoKey>/<img>.

  • Binding holds decisions, not credentials — never write tokens into

.jfrog/local/package-resolution.json.

  • Check each value, then pass the printed value. Load repo keys with

jq -r (binding or cache) and the server id from jf c show. Typed text goes in only through the quoted heredoc in Step 3.4. Run scripts/check-repo-key.sh on each. A quote inside raw="…" or '…' closes early and runs the rest before the checker. On failure, do not run jf setup. On success, --server-id "$SID" --repo "$REPO" in that same shell.

  • Persist binding with the merge script — after each successful jf setup,

run scripts/merge-workspace-binding.sh (Step 6). Do not hand-edit the JSON.

  • `gradle` ≠ `maven`. Bind under repositories.gradle, never repositories.maven.
  • Yarn / Poetry — not APR zero-touch; bind only on explicit user ask (Step 1).

References

FileWhen to read
`references/jf-setup-command.md`CLI flags, supported package managers, exit-code contract, jf setup --help
`references/global-cache-file.md`Global cache shape, resolution classes, jq one-liners
`references/workspace-binding.md`Workspace binding schema, package-manager → type map, merge script
`scripts/check-repo-key.sh`Before jf setup — accept or reject the repo key
`scripts/merge-workspace-binding.sh`After each successful jf setup — deterministic binding merge (jq required)

Step 0 — Read the base skill, then ensure jf is ready

  1. **Cover base skill At-a-glance / Tier A before the first non-exempt jf

(even when jf is already configured).** Prefer reading `../jfrog/SKILL.md` in full when you can; the At-a-glance Tier A floor is enough for jf setup / package-manager binding. Load Tier B (cli-gotchas.md, jf-api.md, …) only if the next action needs jf api / advanced CLI. Then run that skill's Environment check (and export JFROG_CLI_USER_AGENT) before the first jf call.

  1. Ensure jf + a configured server (<SID>). If jf config show already

succeeds, skip to Step 1; otherwise:

  • `jf --version` missing → install per

`../jfrog/references/jfrog-cli-install-upgrade.md`.

  • `jf config show` empty → login per

`../jfrog/references/jfrog-login-flow.md` (its manual-token fallback for Bearer-only).

  1. Do not run jf setup until both succeed. Confirm before install/login.

Step 1 — Identify package managers to bind

Combine four signals, in order; intersect with jf setup --help supported list:

  1. Explicit user mention. Map aliases: python → pip/uv/pipenv (and

poetry only if the user named Poetry); java → maven/gradle; node → npm/pnpm by lockfile (yarn only if the user named Yarn).

  1. Workspace binding — read .jfrog/local/package-resolution.json. Drop

package managers already bound to the same key unless recovering from 401/403 (re-run same key). Package-manager → type table: `workspace-binding.md`.

  1. Workspace manifests when still ambiguous (several package managers of one

type may apply — e.g. requirements.txt and uv.lock):

Manifest / signalPackage manager
package.json, pnpm-lock.yamlnpm (+ pnpm if pnpm-lock.yaml present)
yarn.lock (alone)npm — do not auto-select yarn
requirements.txtpip
Pipfilepipenv
uv.lockuv — suppresses bare pyproject.toml → pip; keep requirements.txt + uv.lock as multi-PM
pyproject.toml[tool.uv] → uv; [tool.poetry] → poetry only on explicit user ask, else not applicable (do not select pip); bare PEP 621 with no uv.lock → pip
pom.xmlmaven
build.gradle, build.gradle.ktsgradle (bind under type `gradle`)
go.modgo
Dockerfile, compose.yaml, docker-compose.ymldocker / podman
*.csproj, NuGet.Confignuget / dotnet
Chart.yamlhelm

Binary gate (client tools only): missing client on PATH → skip as not applicable; do not substitute another package manager or report setup success. Exempt `maven` / `gradle` (config-only). Details: `jf-setup-command.md`.

  1. `jf setup --help` — filter candidates; never hardcode the list. See

`jf-setup-command.md`. Unsupported → report gap, skip.

Step 2 — Get the resolved repo

For each <package-manager>, recover <repoKey> from the first source available. <serverId> is always the default jf server, loaded as $SID in Step 3.4 — never typed from the table or the URL host. If the table host is not that server's URL, stop and ask; never switch servers.

  1. "Resolved URLs for this session" table (default). The hook writes the

same keys to the global cache — load $raw from there with the jq in `global-cache-file.md`. Only when the cache lacks the key, take it from the table URL as typed text (Step 3.4).

  1. Workspace binding — if table was trimmed. repositories.<type>

(gradle → repositories.gradle, not maven).

  1. Global cache — last resort only; never overrides (1) or (2). See

`global-cache-file.md`.

Cache disagreeing with (1)/(2) is not a reason to change the repo.

Safe repo key. Before a key is shown in the plan or passed to jf setup, load it into $raw without pasting it into the command, then run scripts/check-repo-key.sh --repo "$raw". It trims the key and requires ^[A-Za-z0-9._-]+$ (APR isSafeRepoKey). This applies to the session table, the workspace binding, the global cache, and a user-typed key. Exit non-zero → that value is not a repo key. Do not put it on a command line. Stop and ask for a replacement (2-answer cap). Other package types in the same file stay usable.

Don't choose a repo yourself: no listing, enumerating, probing, or iterating --server-id to pick one, and don't second-guess the resolver — use resolver output only. If the user explicitly asks to browse repos, list them via jf api "/artifactory/api/repositories?type=virtual&packageType=<pkgType>" (Artifactory package type from the binding map — gradle not maven; uv / pip / pipenv / poetry → pypi), then let the user choose; the agent still never makes the choice on its own.

Unresolved repo key

Ask via AskQuestion (include the resolver/setup failure text verbatim):

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 98 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
26
Repository forks
11
7-day trend score
16

Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/jfrog/jfrog-skills/jfrog-setup-package-managers/badge)](https://verified-skill.com/skills/jfrog/jfrog-skills/jfrog-setup-package-managers)

Something wrong with this skill or its page? Tell us.