Skip to main content

jup - Agent Skills Manager

Project description

jup ✨

jup is a small command-line tool for installing and syncing agent skills across the local skill directories used by supported AI assistants.

It helps you:

  • install skills from GitHub repositories that expose a top-level skills/ folder (or .claude/skills/ as a fallback)
  • keep installed skills organized in a lockfile so they can be synced again later
  • copy or link skills into the directories used by agents like Gemini, Copilot, and Claude

Features ✨

  • Multi-Agent Support: Sync skills for Gemini, Copilot, and Claude.
  • Local-First: Works with local skill directories and global configurations.
  • Git Integration: Install and update skills directly from GitHub.

Quick Start 🚀

1. Install jup 📦

The preferred way to install jup is from PyPI with uv:

uv tool install jup
jup --help

jup help

If you do not want to install it, you can run it on demand:

uvx jup --help

pip also works if you prefer a traditional install:

pip install jup
jup --help

2. Check the current configuration ⚙️

jup config show

jup config show

3. Choose which agent directories should receive synced skills 🤖

jup config set agents gemini,copilot,claude

Use none to clear the list:

jup config set agents none

4. Add skills ➕

jup add owner/repo --category productivity

Search for skills 🔍

Search for skills in the skills.sh registry:

jup find instagram

By default, this lists matching skills. You can filter and limit the results:

jup find instagram --limit 5 --min-installs 100

To install a skill interactively from the search results, use the --interactive (or -it) flag:

jup find instagram --interactive

Advanced GitHub Usage

You can use --path to specify a subdirectory (default: skills/), and --skills to select specific skill names (comma-separated) to add from the skills directory:

jup add owner/repo --path custom/skills/dir --skills skill-a,skill-b --category productivity
  • --path and --skills only work with GitHub sources (not local directories).
  • If --skills is omitted, all skills in the specified path are added.
  • If --path is omitted, the default is skills/.
  • If the specified skills directory does not exist, jup will also look for .claude/skills/ as a fallback.

You can also add local skills using relative or absolute paths (these ignore --path and --skills):

jup add ./local-skills --category productivity
jup add ../team-skills
jup add /absolute/path/to/local-skills

5. Review and update skills 📋

jup list

jup list

  • Shows all installed skills, their source repo (with clickable links in supported terminals), install/update date, and which agent directories they are synced to.

Check for updates and apply them

jup sync --update
  • Checks all installed GitHub skills for updates and applies them if available. Tracks the last update date for each source.
  • You can also use jup sync --check to only check for updates without applying them.
  • The update status and last checked date are shown in jup list.

6. Push the managed skills into the configured agent directories 🔄

jup sync

Comparison with npx skills ⚖️

While Vercel's npx skills is a fantastic package manager for AI skills with a built-in search registry, jup focuses heavily on centralized lockfile management and local symlink synchronization across multiple agents. jup is ideal if you want to maintain a single source of truth for your skills and automatically symlink them to Gemini, Claude, and Copilot simultaneously, especially when authoring skills locally.

For a full breakdown of commands, pros, and cons, see the jup vs. npx skills comparison.

What It Does 🧭

jup works with repositories that follow a simple structure:

repo/
  skills/
    skill-name/
      SKILL.md

When you run jup add owner/repo, it clones the repository, finds every nested skill directory under skills/ (or .claude/skills/ if present) that contains a SKILL.md file, stores those skills in ~/.jup, and records them in a lockfile.

For local sources, jup add supports either of these layouts:

local-skills/
  skill-a/
    SKILL.md
  skill-b/
    SKILL.md

or a single skill directory:

single-skill/
  SKILL.md

After that, jup sync installs the managed skills into the configured target locations. By default, jup uses symlinks, but you can switch to copying with:

jup config set sync-mode copy

Skills are placed directly into the agent's skill folder (e.g., ~/.gemini/skills/my-skill/), ensuring they are correctly discovered by the agent.

Update and Check Features

  • jup sync --update checks for updates to all installed GitHub skills and updates them if new versions are available. The last update date is tracked per source.
  • jup sync --check checks for updates but does not apply them.
  • jup list shows the last update/check date and provides clickable links to the source repositories (in supported terminals).

The main configuration values are:

  • scope: global or local
  • agents: a comma-separated list of agent names
  • sync-mode: link or copy

7. Manage custom agent providers 🤖

You can add your own agent providers if they use a standard skills/ directory structure:

# List all providers
jup agent list

# Add a new custom provider
jup agent add myagent --global-location ~/.myagent/skills --local-location ./.myagent/skills

# Edit an existing custom provider
jup agent edit myagent --local-location ./new-path/skills

# Remove a custom provider
jup agent remove myagent

Once a custom agent is added, you can activate it in your configuration:

jup config set agents gemini,myagent

Supported Agents 🧩

jup includes built-in locations for these agent names:

  • gemini
  • copilot
  • claude
  • default

Contributing 🤝

Contributions are welcome. We use standard tools like uv, ruff, ty, just, and pre-commit.

See CONTRIBUTING.md for detailed development setup, workflow, and publishing details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jup-0.9.0.tar.gz (97.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

jup-0.9.0-py3-none-any.whl (17.2 kB view details)

Uploaded Python 3

File details

Details for the file jup-0.9.0.tar.gz.

File metadata

  • Download URL: jup-0.9.0.tar.gz
  • Upload date:
  • Size: 97.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for jup-0.9.0.tar.gz
Algorithm Hash digest
SHA256 1dd645ffa7ce6a992d735d402a70e65d7b64608d80c82d930d66562b7e97898d
MD5 7d1bbf10ddd0fe86c584fdb75769c144
BLAKE2b-256 b6ecdbd975ed1630ed143992c810fedca716822149882c3662b301892347bef2

See more details on using hashes here.

File details

Details for the file jup-0.9.0-py3-none-any.whl.

File metadata

  • Download URL: jup-0.9.0-py3-none-any.whl
  • Upload date:
  • Size: 17.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for jup-0.9.0-py3-none-any.whl
Algorithm Hash digest
SHA256 63aad318f4f9e8eeb089cdac96e653b50bb5b9a7695c863161757b4c771c0e8b
MD5 5d9717b08093d78b091c4724cfa774a9
BLAKE2b-256 d4f0ecc5625eb1d230170d2a84a6275565cc6e0c6f82549ac9630d738ac5caf9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page