Skill Packs: upstream-managed optional skill collections

Status:in progress
Date:2026-07-14
Branch:feature/skill-packs
Type:spec

Goal

Let a jacked user opt in to curated collections of third-party skills ("skill packs") as part of jacked install and from the dashboard, without jacked vendoring any third-party content. Upstream repos stay the single source of truth; jacked orchestrates install, update, verification, and removal through the vercel-labs npx skills CLI (skills.sh), which is also the upstream-recommended installer for the repos in question.

Key decisions

DecisionChoiceWhy
DeliveryLive install via npx skills, never vendoredJack's call: upstream ships multiple releases per week; snapshots drift. The skills CLI has per-skill selection, a lockfile, an update command, and multi-agent targeting.
Curationjacked owns only a pack registry (name, repo, skill list)The 28-skill marketing list keeps the practitioner-depth skills and drops the generic filler plus the broken image skill (fabricated model names).
Opt-in UXjacked install --packs NAME + dashboard toggle, persisted stateJack picked flag + dashboard. Enabled packs auto-refresh on every subsequent jacked install.
Emil skillsThe 4 vendored core skills stay vendored; only improve-animations ships as a packjacked's own behavior rules reference the 4 by name, so they cannot be optional or network-dependent.
first-customer-finderExcludedSuperseded: marketingskills' prospecting re-expresses its framework with credit and extends it.
CodexPack skills install for Codex too when Codex is presentMatches jacked's existing Codex-parity pass; the skills CLI natively supports -a claude-code codex.

Empirically verified skills-CLI behavior (sandbox, 2026-07-14, CLI v1.5.17)

Architecture

One new core module (jacked/packs.py) owns registry parsing, enablement state, subprocess orchestration of the skills CLI, and post-operation disk verification. The CLI layer and the dashboard API are thin consumers of that module.

flowchart LR
    subgraph jacked
      R[packs.json registry] --> P[packs.py]
      S[state: ~/.claude/jacked-packs.json] --> P
      C[cli.py: install --packs / jacked packs] --> P
      A[api/routes/packs.py] --> P
      W[dashboard Skill Packs section] --> A
    end
    P -->|npx -y skills add/update/remove| CLI[skills CLI]
    CLI -->|clone| U[(upstream GitHub repos)]
    CLI --> D1[~/.agents/skills/ canonical]
    CLI --> D2[~/.claude/skills/ symlinks]
    CLI --> L[.skill-lock.json]
    P -->|verify on disk after every op| D1
    P -->|verify| D2
    P -->|source check before remove| L
  
flowchart LR
    packs.json --> packs.py --> skills CLI --> upstream repos
    cli.py + dashboard API consume packs.py
    packs.py verifies ~/.claude/skills + ~/.agents/skills after every op
  

Flows

The packs

PackSourceContents
marketing coreyhaines31/marketingskills 28 curated of 47: ad-creative, ads, ai-seo, aso, churn-prevention, cold-email, competitor-profiling, competitors, copy-editing, copywriting, customer-research, directory-submissions, marketing-council, marketing-loops, marketing-plan, offers, pricing, product-marketing, programmatic-seo, prospecting, public-relations, referrals, revops, sales-enablement, seo-audit, sms, social, video. Excluded: image (fabricated model names) and 18 generic-tier skills.
design-extras emilkowalski/skills improve-animations (whole-codebase motion audit producing self-contained fix plans).

File structure

FileResponsibility
jacked/data/packs.jsonPack registry: display name, description, source repo, curated skill list.
jacked/packs.pyCore: registry load, state persistence (atomic), npx discovery via findbin, skills-CLI orchestration, post-op disk verification, lockfile source checks, pack status.
jacked/cli.py--packs option on install, enabled-pack refresh on every install, jacked packs list/enable/disable/update group, uninstall removal.
jacked/api/routes/packs.pyGET /api/packs, PUT /api/packs/{name}; registered like the features router.
jacked/data/web/js/components/settings.jsSkill Packs section in the Features tab: toggle, per-pack install count, upstream link, pending state.
tests/test_packs.py + route/CLI testsFake-npx shim tests; no network anywhere in the suite.

Safety rails

Testing


Generated with the jacked HTML artifact template. Edit freely.