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

skillpack-tui

v0.4.0

Published

Unified TUI manager for agent skills across Codex, Claude, and Global

Readme

Skillpack

NPM Downloads

Unified TUI manager for agent skills across Codex, Claude, and Global (~/.agents/skills).

Features

  • Multi-platform scanning — discovers skills from Codex, Codex plugins, Claude, and Global provider locations automatically, with symlink support
  • Project Skills — scans read-only project skill directories (.codex/skills, .claude/skills, .agents/skills) in a separate view
  • Provider-native availability — reads provider config when available and uses .disabled- renaming only as a fallback
  • Skill Inventory — groups provider instances by Skill Identity and surfaces deterministic Health Signals
  • Skill Usage — derives aggregate Codex and Claude skill usage from local session artifacts after explicit consent
  • skills.sh installs — installs, updates, and removes Global Skills through the skills.sh CLI
  • Manual updates — checks updates only when requested
  • Fuzzy search — filter skills by name or description
  • Keyboard-driven — full TUI navigation without a mouse

Installation

From npm (recommended)

npm i -g skillpack-tui
skillpack

Or run without installing:

npx skillpack-tui

From source

git clone https://github.com/WTW0313/skillpack.git && cd skillpack
pnpm install
pnpm build
node packages/tui/dist/skillpack.js

Development

Contributing requires a Vite+-supported Node.js release (20.19+, 22.18+, or 24.11+) and pnpm 11. The published CLI still supports Node.js 18 and newer.

pnpm check          # format check, type-aware lint, and type check
pnpm format         # format supported source and config files
pnpm lint           # type-aware lint and type check
pnpm test           # run all package tests once
pnpm build          # package Core and the TUI
pnpm dev            # build Core, then watch the TUI package

CI uses the explicit pnpm check:ci, pnpm test:ci, and pnpm build:ci entry points. The final command also verifies the Core exports, CLI shebang and executable bit, ESM syntax, source-map policy, and npm package contents.

Quick Start

Launch skillpack to see discovered skills grouped into Skill Groups with provider status and Health Signals. Use ↑↓ arrow keys to navigate, Tab / Shift+Tab to filter by provider (All, Codex, Claude, Global), and / to search.

Press Enter to inspect a Skill Group, then use left/right to choose a provider instance before taking instance-level actions. Press g to open Skill Usage, p to inspect read-only Project Skills, s to inspect Settings and Scan Roots, i to install a skills.sh Global Skill, or u to open manual updates. Plugin-owned skills require confirmation because the action toggles the owning plugin and affects sibling skills from the same plugin.

Skill Usage is opt-in. The first time you open it, press y to allow Skillpack to derive aggregate usage records from provider session artifacts. Skillpack stores only minimal invocation metadata: skill name, provider, source path, status, and timestamps. It does not store prompts, responses, tool arguments, file contents, or transcripts.

Keyboard Shortcuts

List View

| Key | Action | Description | |-----|--------|-------------| | / | Navigate | Move selection up / down | | Enter | Detail | Open Skill Group detail view | | Tab / Shift+Tab | Switch tab | Cycle through All / Codex / Claude / Global | | / | Search | Fuzzy match on name + description | | Esc | Clear search | Clear the active search filter | | p | Project Skills | Open read-only Project Skills view | | s | Settings | Open read-only Settings and Scan Roots view | | i | Install | Install a Global Skill through skills.sh | | u | Updates | Open manual skills.sh updates | | g | Usage | Open opt-in Skill Usage analytics | | q | Quit | Exit skillpack |

Detail View

| Key | Action | Description | |-----|--------|-------------| | Esc | Back | Return to list view | | / | Provider instance | Switch the selected provider instance inside the Skill Group | | Space | Toggle | Enable or disable a Codex or Claude skill; plugin-owned skills ask for confirmation | | o / O | Open folder | Open skill directory in system file manager | | d | Delete | Remove a skills.sh-managed Global Skill with confirmation | | / | Scroll | Scroll the description when it overflows |

Usage View

| Key | Action | Description | |-----|--------|-------------| | y | Enable import | Grant consent for local Skill Usage import when prompted | | Esc | Back | Return to list view | | Tab / Shift+Tab | Provider | Switch between usage providers | | 1 / 2 / 3 | Range | Show 7 / 30 / 90 days | | / | Day | Move the selected day by one day | | / | Week | Move the selected day by one week | | PageUp / PageDown | Scroll | Scroll long usage reports | | Home / End | Jump | Jump to top / bottom of the report | | r | Rescan | Re-import usage from configured artifact roots | | x | Reset | Clear Skillpack's derived local usage records | | q | Quit | Exit skillpack |

Configuration

Skillpack stores its configuration at ~/.config/skillpack/config.json. On first run it auto-detects which provider directories exist and enables them.

{
  "editor": "vi",
  "autoCheckUpdates": false,
  "projectSkillsDirs": [
    ".codex/skills",
    ".claude/skills",
    ".agents/skills"
  ],
  "providers": {
    "codex":  { "enabled": true, "paths": ["~/.codex/skills", "~/.codex/plugins/cache"] },
    "claude": { "enabled": true, "paths": ["~/.claude/plugins/cache", "~/.claude/skills"] },
    "global": { "enabled": true, "paths": ["~/.agents/skills"] }
  },
  "sources": {
    "skillssh": { "enabled": true }
  },
  "usage": {
    "importConsent": false,
    "artifactRoots": {
      "codex": [
        "~/.codex/sessions",
        "~/.codex/archived_sessions"
      ],
      "claude": [
        "~/.claude/projects"
      ]
    }
  }
}

usage.importConsent defaults to false. When enabled from the TUI, Skillpack imports supported Codex and Claude artifacts into derived JSONL records under ~/.local/share/skillpack/usage/. Claude usage is derived from structured Skill tool calls that match user-level or plugin-provided skills in configured Claude Scan Roots. Built-In Skills and Claude Project Skills are not counted in the current Claude adapter.

The Settings view shows both Scan Roots and Usage Artifact Roots so you can verify which local directories Skillpack will inspect.

Adding a Provider

Extend the BaseProvider class from @skillpack/core (which implements ISkillProvider with default scanning and a fallback .disabled- prefix rename strategy). Providers with native availability config should override scan, setEnabled, and getDisableStrategy so Skillpack reflects the provider's own loading rules.

import { BaseProvider, type ProviderCapabilities } from '@skillpack/core';

class MyProvider extends BaseProvider {
  readonly id = 'my-platform';
  readonly displayName = 'My Platform';
  readonly basePaths = ['/path/to/skills'];
  readonly capabilities: ProviderCapabilities = {
    canToggle: true,
  };

  override async scan() { /* return provider-native Skill instances */ }
  override async setEnabled(skill, enabled) { /* update provider-native availability */ }
  override getDisableStrategy(skill) { /* describe the availability mechanism */ }
}

Register it in the manager:

manager.registerProvider(new MyProvider());

Project Structure

skillpack/
├── packages/
│   ├── core/                  # @skillpack/core — platform-agnostic library
│   │   ├── src/
│   │   │   ├── models/        # Skill, DuplicateInfo, RemoteSkill, etc.
│   │   │   ├── providers/     # Codex, Claude, Global providers + BaseProvider
│   │   │   ├── sources/       # skills.sh install source
│   │   │   ├── config.ts      # Configuration manager
│   │   │   ├── duplicates.ts  # Duplicate detection logic
│   │   │   ├── lockfile.ts    # Lock file manager
│   │   │   ├── manager.ts     # SkillManager — central orchestrator
│   │   │   └── parser.ts      # SKILL.md frontmatter parser (YAML)
│   │   └── tests/
│   └── tui/                   # @skillpack/tui — Ink-based terminal UI
│       └── src/
│           ├── views/         # ListView, DetailView, InstallView, ProjectSkillsView, SettingsView, UpdatesView, UsageView
│           ├── components/    # StatusBar, ConfirmDialog, SearchInput, SkillRow, TabBar
│           ├── context/       # React context for app state
│           ├── hooks/         # useSkillManager, useSkills, useSearch, useTerminalSize
│           └── app.tsx        # App shell and router
├── docs/                      # Design specs and implementation plans
├── package.json               # Workspace root
└── pnpm-workspace.yaml        # pnpm workspace config

License

MIT