npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@gcavanunez/slinky

v0.4.0

Published

Standalone CLI and TUI for managing a separate agent skills repository.

Readme

Slinky

skills host                          global agent stores
├─ skills/              ┐            ~/.agents/skills/
├─ vendor/              ├─ slinky ─> ~/.claude/skills/
└─ skills.manifest.json ┘            project-local skills

Slinky keeps your coding-agent skills in one versioned repository and reconciles them into the global stores agents read from. Skills you write live in skills/; skills you pull from others are vendored under vendor/ with their upstream provenance, so they can be updated, diffed, and shared across machines through git.

Install

npm install --global @gcavanunez/slinky
npx skills add gcavanunez/slinky --skill slinky --global --yes   # the agent-facing skill

The npm package installs a standalone binary for macOS and glibc Linux on ARM64 and x64; Bun is not required at runtime. Archives are also attached to each GitHub release. Slinky needs Git, tar, diff, and Node.js/npx on PATH.

Quick start

slinky init /path/to/my-agent-skills     # record the host repo
slinky bootstrap --dry-run               # see what would change
slinky bootstrap                         # back up, materialise, verify
slinky                                   # open the TUI

On another machine, clone and set up in one step:

slinky bootstrap --clone=https://github.com/you/my-agent-skills.git

Starting from nothing? The guide shows how to create an empty host.

Everyday use

slinky status                            # catalog, live state, drift
slinky enable <skill>                    # or disable, or profile apply <name>
slinky autoinvoke <skill> off            # keep installed; activate explicitly in OpenCode
slinky skills add owner/repo --skill x   # vendor a skill from skills.sh
slinky update --check                    # anything new upstream?
slinky update                            # review and accept changes
slinky sync                              # save, pull, reconcile, restore

sync is the whole loop: it commits reviewed catalog changes, pulls the upstream, rebuilds the global stores, and resets live vendor copies to the catalog. Preview it with --dry-run.

To keep other machines current without logging into each one, register them on the machine that can push and let it drive them over ssh:

slinky fleet add devbox me@devbox          # once per follower
slinky fleet sync                          # sync + push here, then each follower pulls and restores

The guide covers the details.

The TUI

One catalog tree on the left, the selected skill's documentation on the right.

The Slinky TUI: a folded catalog tree beside a skill's documentation

| key | does | | --------------- | ------------------------------------------------------------------------------------- | | j/k h/l | move; fold or unfold a group | | space | toggle a skill, or every skill in a group from its heading | | A | cycle OpenCode invocation: manual, automatic, inherit | | z / Z | fold one group / fold all | | / | filter the catalog, or search the document | | enter i | open the document / show details | | d u | diff a drifting vendor skill / check upstream | | e a L p | edit, index/adopt a skill, link into a project, manage profiles | | 1 2 3 | available here, all skills, skills waiting to be adopted | | F | fork a vendor skill into skills/ as your own copy | | S | run slinky sync (on a leader, the whole fleet); the tab row shows ⇣ N to pull | | m | the fleet: add, edit, remove, and check the followers this machine leads | | t | pick a theme (27 available, previewed live) | | x v < > | zoom, cycle layouts, resize | | ? | everything else |

How it fits together

  • Local skills in skills/ are symlinked into ~/.agents/skills. When OpenCode invocation metadata is needed, the symlink points to a generated copy refreshed during reconciliation.
  • Vendor skills in vendor/ are committed baselines, copied into the store so npx skills can update them; slinky update shows you the diff before anything changes in the catalog.
  • Profiles in the manifest are shared enabled sets; a machine following one gets its edits on sync, and can still enable or disable a skill for itself. Machine state (.local/state.json, gitignored) records what this machine follows or disables, and which projects have links.
  • Project links copy or symlink a catalog skill into another repository, excluded from that repo's git by default.

OpenCode invocation

Keep a skill available for explicit use without advertising it to OpenCode's model:

slinky autoinvoke make-pr off --dry-run
slinky autoinvoke make-pr off
slinky autoinvoke make-pr on         # explicitly allow automatic discovery
slinky autoinvoke make-pr inherit    # follow the skill's frontmatter again

Preferences live in the catalog's gitignored .local/state.json and survive disable/re-enable and profile changes. status shows the effective setting and whether it comes from this host, upstream metadata, compatibility translation, or the default.

Slinky adds metadata.opencode/autoinvoke to global installations while preserving catalog sources and upstream provenance. Without a host preference, explicit upstream OpenCode metadata wins; otherwise disable-model-invocation: true translates to manual invocation. Skills with neither field retain OpenCode's default behavior.

off keeps explicit activation available. It does not change slash-command visibility. These preferences apply to global copies; project-local definitions and higher-priority OpenCode sources can take precedence. See OpenCode V2's skill documentation for discovery rules.

The catalog repo is yours; Slinky only owns the tooling. Save it with slinky save, share it with slinky push, and each machine's slinky sync keeps up.

Documentation

  • Guide: every workflow in depth, TUI bindings, safety notes, and the full CLI reference.
  • Data contract: the manifest, state, lock, and config formats.
  • Slinky skill: what an agent reads to drive Slinky for you.

Development

git clone https://github.com/gcavanunez/slinky.git
cd slinky
bun install
bun test
bun run typecheck
bun run build:bin          # dist/slinky for this platform

Bun 1.3 or newer. bun run package:smoke builds and installs the npm package the way a release does.

Credits

This project draws inspiration from and utilities from: