skillup 0.3.2__tar.gz → 0.5.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. skillup-0.5.0/.github/workflows/docs.yml +42 -0
  2. skillup-0.5.0/PKG-INFO +104 -0
  3. skillup-0.5.0/README.md +91 -0
  4. skillup-0.5.0/assets/logo-wordmark.svg +12 -0
  5. skillup-0.5.0/assets/logo.svg +8 -0
  6. skillup-0.5.0/docs/assets/extra.css +186 -0
  7. skillup-0.5.0/docs/assets/logo.svg +8 -0
  8. skillup-0.5.0/docs/changelog.md +13 -0
  9. skillup-0.5.0/docs/commands.md +135 -0
  10. skillup-0.5.0/docs/development.md +65 -0
  11. skillup-0.5.0/docs/index.md +59 -0
  12. skillup-0.5.0/docs/lock-file.md +54 -0
  13. skillup-0.5.0/docs/quickstart.md +77 -0
  14. skillup-0.5.0/docs/skill-definition.md +43 -0
  15. {skillup-0.3.2 → skillup-0.5.0}/pyproject.toml +2 -1
  16. {skillup-0.3.2 → skillup-0.5.0}/skillup/github.py +3 -2
  17. skillup-0.5.0/skillup/http.py +13 -0
  18. {skillup-0.3.2 → skillup-0.5.0}/skillup/install.py +12 -6
  19. {skillup-0.3.2 → skillup-0.5.0}/tests/test_github_auth.py +26 -19
  20. skillup-0.5.0/tests/test_install.py +151 -0
  21. skillup-0.5.0/zensical.toml +63 -0
  22. skillup-0.3.2/PKG-INFO +0 -113
  23. skillup-0.3.2/README.md +0 -101
  24. {skillup-0.3.2 → skillup-0.5.0}/.github/workflows/ci.yml +0 -0
  25. {skillup-0.3.2 → skillup-0.5.0}/.github/workflows/publish.yml +0 -0
  26. {skillup-0.3.2 → skillup-0.5.0}/.gitignore +0 -0
  27. {skillup-0.3.2 → skillup-0.5.0}/.python-version +0 -0
  28. {skillup-0.3.2 → skillup-0.5.0}/LICENSE +0 -0
  29. {skillup-0.3.2 → skillup-0.5.0}/skillup/__init__.py +0 -0
  30. {skillup-0.3.2 → skillup-0.5.0}/skillup/cli.py +0 -0
  31. {skillup-0.3.2 → skillup-0.5.0}/skillup/lock.py +0 -0
  32. {skillup-0.3.2 → skillup-0.5.0}/skillup/settings.py +0 -0
  33. {skillup-0.3.2 → skillup-0.5.0}/tests/test_cli.py +0 -0
  34. {skillup-0.3.2 → skillup-0.5.0}/tests/test_e2e.py +0 -0
  35. {skillup-0.3.2 → skillup-0.5.0}/tests/test_migrate.py +0 -0
  36. {skillup-0.3.2 → skillup-0.5.0}/tests/test_sync.py +0 -0
  37. {skillup-0.3.2 → skillup-0.5.0}/uv.lock +0 -0
@@ -0,0 +1,42 @@
1
+ name: Deploy Docs
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ paths:
7
+ - 'docs/**'
8
+ - 'zensical.toml'
9
+ workflow_dispatch:
10
+
11
+ permissions:
12
+ contents: read
13
+ pages: write
14
+ id-token: write
15
+
16
+ concurrency:
17
+ group: "pages"
18
+ cancel-in-progress: false
19
+
20
+ jobs:
21
+ deploy:
22
+ runs-on: ubuntu-latest
23
+ environment:
24
+ name: github-pages
25
+ url: ${{ steps.deployment.outputs.page_url }}
26
+ steps:
27
+ - uses: actions/configure-pages@v5
28
+ with:
29
+ enablement: true
30
+ - uses: actions/checkout@v5
31
+ - uses: actions/setup-python@v5
32
+ with:
33
+ python-version: '3.12'
34
+ - name: Install Zensical
35
+ run: pip install zensical
36
+ - name: Build docs
37
+ run: zensical build --clean
38
+ - uses: actions/upload-pages-artifact@v4
39
+ with:
40
+ path: site
41
+ - uses: actions/deploy-pages@v4
42
+ id: deployment
skillup-0.5.0/PKG-INFO ADDED
@@ -0,0 +1,104 @@
1
+ Metadata-Version: 2.4
2
+ Name: skillup
3
+ Version: 0.5.0
4
+ Summary: A minimal CLI to manage agent skills from GitHub releases.
5
+ License-File: LICENSE
6
+ Requires-Python: >=3.11
7
+ Requires-Dist: questionary
8
+ Requires-Dist: requests
9
+ Requires-Dist: rich
10
+ Requires-Dist: truststore
11
+ Requires-Dist: typer
12
+ Description-Content-Type: text/markdown
13
+
14
+ <p align="center">
15
+ <img src="assets/logo-wordmark.svg" alt="skillup" height="72" />
16
+ </p>
17
+
18
+ <p align="center">
19
+ <strong>Skill your agents up.</strong><br/>
20
+ A minimal CLI to install, version, and sync skills for your AI agents.<br/>
21
+ Local-first · GitHub-backed · Works with Claude, Gemini, and more.
22
+ </p>
23
+
24
+ <p align="center">
25
+ <code>pip install skillup</code> &nbsp;·&nbsp; <code>uv tool install skillup</code>
26
+ </p>
27
+
28
+ ---
29
+
30
+ ## Features
31
+
32
+ - **Interactive install** — pick skills from any GitHub repo release
33
+ - **Multi-repo** — manage skills from multiple sources independently
34
+ - **Lock file** — pins commit SHAs for reproducible installs (`~/.agents/skills.lock.json`)
35
+ - **Auto-update** — upgrade all or specific repos to their latest release or branch head
36
+ - **Smart cache** — skips redundant downloads; override with `SKILLUP_CACHE_DIR`
37
+ - **gh integration** — uses `gh` CLI when available, falls back to `requests`
38
+
39
+ ## Installation
40
+
41
+ ```bash
42
+ pip install skillup
43
+ # or
44
+ uv tool install skillup
45
+ ```
46
+
47
+ ## Usage
48
+
49
+ ### Add skills
50
+
51
+ ```bash
52
+ skillup add google/gemini-cli-skills
53
+ ```
54
+
55
+ No releases? Falls back to `main` automatically. Pin a branch explicitly:
56
+
57
+ ```bash
58
+ skillup add anthropics/skills --branch main --skill pdf
59
+ ```
60
+
61
+ ### Remove skills
62
+
63
+ ```bash
64
+ skillup remove
65
+ ```
66
+
67
+ ### Update skills
68
+
69
+ ```bash
70
+ skillup update # all repos
71
+ skillup update --repo google/gemini-cli-skills # one repo
72
+ ```
73
+
74
+ ### Sync (restore from lock file)
75
+
76
+ ```bash
77
+ skillup sync
78
+ ```
79
+
80
+ Installs skills at the exact pinned SHAs from the lock file — useful for new machines.
81
+
82
+ ### Migrate from NPX skills CLI
83
+
84
+ ```bash
85
+ skillup migrate # reads skills-lock.json from repo root
86
+ skillup migrate path/to/skills-lock.json
87
+ ```
88
+
89
+ ## Skill definition
90
+
91
+ A folder is recognized as a skill when it lives inside a `skills/` directory at the repo root and contains a `SKILL.md` file.
92
+
93
+ ## Development
94
+
95
+ ```bash
96
+ uv sync # install deps
97
+ uv run skillup --help
98
+ uv run pytest
99
+ uv run pyright skillup
100
+ ```
101
+
102
+ ## License
103
+
104
+ MIT
@@ -0,0 +1,91 @@
1
+ <p align="center">
2
+ <img src="assets/logo-wordmark.svg" alt="skillup" height="72" />
3
+ </p>
4
+
5
+ <p align="center">
6
+ <strong>Skill your agents up.</strong><br/>
7
+ A minimal CLI to install, version, and sync skills for your AI agents.<br/>
8
+ Local-first · GitHub-backed · Works with Claude, Gemini, and more.
9
+ </p>
10
+
11
+ <p align="center">
12
+ <code>pip install skillup</code> &nbsp;·&nbsp; <code>uv tool install skillup</code>
13
+ </p>
14
+
15
+ ---
16
+
17
+ ## Features
18
+
19
+ - **Interactive install** — pick skills from any GitHub repo release
20
+ - **Multi-repo** — manage skills from multiple sources independently
21
+ - **Lock file** — pins commit SHAs for reproducible installs (`~/.agents/skills.lock.json`)
22
+ - **Auto-update** — upgrade all or specific repos to their latest release or branch head
23
+ - **Smart cache** — skips redundant downloads; override with `SKILLUP_CACHE_DIR`
24
+ - **gh integration** — uses `gh` CLI when available, falls back to `requests`
25
+
26
+ ## Installation
27
+
28
+ ```bash
29
+ pip install skillup
30
+ # or
31
+ uv tool install skillup
32
+ ```
33
+
34
+ ## Usage
35
+
36
+ ### Add skills
37
+
38
+ ```bash
39
+ skillup add google/gemini-cli-skills
40
+ ```
41
+
42
+ No releases? Falls back to `main` automatically. Pin a branch explicitly:
43
+
44
+ ```bash
45
+ skillup add anthropics/skills --branch main --skill pdf
46
+ ```
47
+
48
+ ### Remove skills
49
+
50
+ ```bash
51
+ skillup remove
52
+ ```
53
+
54
+ ### Update skills
55
+
56
+ ```bash
57
+ skillup update # all repos
58
+ skillup update --repo google/gemini-cli-skills # one repo
59
+ ```
60
+
61
+ ### Sync (restore from lock file)
62
+
63
+ ```bash
64
+ skillup sync
65
+ ```
66
+
67
+ Installs skills at the exact pinned SHAs from the lock file — useful for new machines.
68
+
69
+ ### Migrate from NPX skills CLI
70
+
71
+ ```bash
72
+ skillup migrate # reads skills-lock.json from repo root
73
+ skillup migrate path/to/skills-lock.json
74
+ ```
75
+
76
+ ## Skill definition
77
+
78
+ A folder is recognized as a skill when it lives inside a `skills/` directory at the repo root and contains a `SKILL.md` file.
79
+
80
+ ## Development
81
+
82
+ ```bash
83
+ uv sync # install deps
84
+ uv run skillup --help
85
+ uv run pytest
86
+ uv run pyright skillup
87
+ ```
88
+
89
+ ## License
90
+
91
+ MIT
@@ -0,0 +1,12 @@
1
+ <svg viewBox="0 0 288 64" xmlns="http://www.w3.org/2000/svg">
2
+ <!-- Mark -->
3
+ <rect x="2" y="2" width="60" height="60" rx="14" fill="#0a0a0a"/>
4
+ <path d="M14 22 L23 32 L14 42" stroke="#ffffff" stroke-width="4" fill="none" stroke-linecap="square" stroke-linejoin="miter"/>
5
+ <rect x="27" y="40" width="11" height="3.5" fill="#ffffff"/>
6
+ <rect x="42" y="34" width="4" height="8" fill="#00d26a"/>
7
+ <rect x="48" y="28" width="4" height="14" fill="#00d26a"/>
8
+ <rect x="54" y="22" width="4" height="20" fill="#00d26a"/>
9
+ <!-- Wordmark -->
10
+ <text x="79" y="46" font-family="'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace" font-weight="700" font-size="40" letter-spacing="-1.6" fill="#0a0a0a">skill</text>
11
+ <text x="191" y="46" font-family="'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace" font-weight="700" font-size="40" letter-spacing="-1.6" fill="#00d26a">up</text>
12
+ </svg>
@@ -0,0 +1,8 @@
1
+ <svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
2
+ <rect x="2" y="2" width="60" height="60" rx="14" fill="#0a0a0a"/>
3
+ <path d="M14 22 L23 32 L14 42" stroke="#ffffff" stroke-width="4" fill="none" stroke-linecap="square" stroke-linejoin="miter"/>
4
+ <rect x="27" y="40" width="11" height="3.5" fill="#ffffff"/>
5
+ <rect x="42" y="34" width="4" height="8" fill="#00d26a"/>
6
+ <rect x="48" y="28" width="4" height="14" fill="#00d26a"/>
7
+ <rect x="54" y="22" width="4" height="20" fill="#00d26a"/>
8
+ </svg>
@@ -0,0 +1,186 @@
1
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap');
2
+
3
+ /* ── Brand tokens ─────────────────────────────── */
4
+ :root {
5
+ --su-ink: #0a0a0a;
6
+ --su-ink-2: #141414;
7
+ --su-ink-3: #1a1a1a;
8
+ --su-ink-4: #262626;
9
+ --su-paper: #fafaf9;
10
+ --su-bone: #f5f5f4;
11
+ --su-line: #e7e5e4;
12
+ --su-mute: #78716c;
13
+ --su-green: #00d26a;
14
+ --su-green-dark: #00a854;
15
+ --su-amber: #fbbf24;
16
+ --su-cyan: #22d3ee;
17
+ }
18
+
19
+ /* ── Typography ───────────────────────────────── */
20
+ body,
21
+ .md-typeset {
22
+ font-family: 'Inter', system-ui, sans-serif;
23
+ }
24
+
25
+ code,
26
+ pre,
27
+ kbd,
28
+ .md-typeset code,
29
+ .md-typeset pre {
30
+ font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace !important;
31
+ }
32
+
33
+ /* tight tracking on headings — matches brand */
34
+ .md-typeset h1,
35
+ .md-typeset h2,
36
+ .md-typeset h3 {
37
+ font-family: 'JetBrains Mono', ui-monospace, monospace;
38
+ font-weight: 700;
39
+ letter-spacing: -0.03em;
40
+ }
41
+
42
+ /* ── Header — always ink ──────────────────────── */
43
+ .md-header {
44
+ background-color: var(--su-ink) !important;
45
+ border-bottom: 1px solid var(--su-ink-4);
46
+ box-shadow: none;
47
+ }
48
+
49
+ .md-header__title {
50
+ font-family: 'JetBrains Mono', monospace;
51
+ font-weight: 700;
52
+ letter-spacing: -0.03em;
53
+ }
54
+
55
+ /* "up" green accent in site title */
56
+ .md-header__title::after {
57
+ content: '';
58
+ }
59
+
60
+ /* ── Dark mode (slate scheme) ─────────────────── */
61
+ [data-md-color-scheme="slate"] {
62
+ --md-default-bg-color: var(--su-ink);
63
+ --md-default-bg-color--light: var(--su-ink-2);
64
+ --md-default-fg-color: #e5e5e5;
65
+ --md-default-fg-color--light: #a3a3a3;
66
+ --md-default-fg-color--lighter: #737373;
67
+ --md-default-fg-color--lightest: #404040;
68
+ --md-code-bg-color: var(--su-ink-3);
69
+ --md-code-fg-color: #e5e5e5;
70
+ --md-typeset-a-color: var(--su-green);
71
+ --md-accent-fg-color: var(--su-green);
72
+ --md-primary-fg-color: var(--su-green);
73
+ }
74
+
75
+ /* nav sidebar in dark mode */
76
+ [data-md-color-scheme="slate"] .md-sidebar {
77
+ background-color: var(--su-ink-2);
78
+ }
79
+
80
+ [data-md-color-scheme="slate"] .md-nav__link--active,
81
+ [data-md-color-scheme="slate"] .md-nav__link:hover {
82
+ color: var(--su-green) !important;
83
+ }
84
+
85
+ /* ── Light mode (default scheme) ─────────────── */
86
+ [data-md-color-scheme="default"] {
87
+ --md-default-bg-color: var(--su-paper);
88
+ --md-code-bg-color: var(--su-bone);
89
+ --md-typeset-a-color: var(--su-green-dark);
90
+ --md-accent-fg-color: var(--su-green-dark);
91
+ --md-primary-fg-color: var(--su-green-dark);
92
+ }
93
+
94
+ [data-md-color-scheme="default"] .md-nav__link--active,
95
+ [data-md-color-scheme="default"] .md-nav__link:hover {
96
+ color: var(--su-green-dark) !important;
97
+ }
98
+
99
+ /* ── Code blocks — terminal feel ─────────────── */
100
+ .md-typeset .highlight {
101
+ border-radius: 4px;
102
+ border: 1px solid var(--su-ink-4);
103
+ }
104
+
105
+ [data-md-color-scheme="slate"] .md-typeset .highlight {
106
+ background-color: var(--su-ink-3) !important;
107
+ }
108
+
109
+ /* shell prompt color */
110
+ [data-md-color-scheme="slate"] .md-typeset .highlight .gp {
111
+ color: #525252;
112
+ }
113
+
114
+ /* ── Inline code ──────────────────────────────── */
115
+ [data-md-color-scheme="slate"] .md-typeset code:not(.highlight code) {
116
+ background-color: var(--su-ink-3);
117
+ border: 1px solid var(--su-ink-4);
118
+ color: var(--su-green);
119
+ padding: 0.1em 0.35em;
120
+ border-radius: 3px;
121
+ }
122
+
123
+ /* ── Admonition / callout accents ────────────── */
124
+ .md-typeset .admonition,
125
+ .md-typeset details {
126
+ border-radius: 4px;
127
+ border-left-width: 3px;
128
+ }
129
+
130
+ .md-typeset .note > .admonition-title,
131
+ .md-typeset .note > summary {
132
+ border-left-color: var(--su-cyan);
133
+ }
134
+
135
+ .md-typeset .tip > .admonition-title,
136
+ .md-typeset .tip > summary {
137
+ border-left-color: var(--su-green);
138
+ }
139
+
140
+ .md-typeset .warning > .admonition-title,
141
+ .md-typeset .warning > summary {
142
+ border-left-color: var(--su-amber);
143
+ }
144
+
145
+ /* ── Tables ───────────────────────────────────── */
146
+ [data-md-color-scheme="slate"] .md-typeset table:not([class]) th {
147
+ background-color: var(--su-ink-3);
148
+ color: var(--su-green);
149
+ font-family: 'JetBrains Mono', monospace;
150
+ font-size: 0.75rem;
151
+ letter-spacing: 0.08em;
152
+ text-transform: uppercase;
153
+ }
154
+
155
+ [data-md-color-scheme="slate"] .md-typeset table:not([class]) td {
156
+ border-color: var(--su-ink-4);
157
+ }
158
+
159
+ /* ── Footer ───────────────────────────────────── */
160
+ .md-footer {
161
+ background-color: var(--su-ink) !important;
162
+ border-top: 1px solid var(--su-ink-4);
163
+ }
164
+
165
+ .md-footer-meta {
166
+ background-color: var(--su-ink) !important;
167
+ }
168
+
169
+ /* ── Scrollbar (dark) ─────────────────────────── */
170
+ [data-md-color-scheme="slate"] ::-webkit-scrollbar {
171
+ width: 6px;
172
+ height: 6px;
173
+ }
174
+
175
+ [data-md-color-scheme="slate"] ::-webkit-scrollbar-track {
176
+ background: var(--su-ink-2);
177
+ }
178
+
179
+ [data-md-color-scheme="slate"] ::-webkit-scrollbar-thumb {
180
+ background: var(--su-ink-4);
181
+ border-radius: 3px;
182
+ }
183
+
184
+ [data-md-color-scheme="slate"] ::-webkit-scrollbar-thumb:hover {
185
+ background: #404040;
186
+ }
@@ -0,0 +1,8 @@
1
+ <svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
2
+ <rect x="2" y="2" width="60" height="60" rx="14" fill="#0a0a0a"/>
3
+ <path d="M14 22 L23 32 L14 42" stroke="#ffffff" stroke-width="4" fill="none" stroke-linecap="square" stroke-linejoin="miter"/>
4
+ <rect x="27" y="40" width="11" height="3.5" fill="#ffffff"/>
5
+ <rect x="42" y="34" width="4" height="8" fill="#00d26a"/>
6
+ <rect x="48" y="28" width="4" height="14" fill="#00d26a"/>
7
+ <rect x="54" y="22" width="4" height="20" fill="#00d26a"/>
8
+ </svg>
@@ -0,0 +1,13 @@
1
+ # Changelog
2
+
3
+ ## Unreleased
4
+
5
+ - Added Zensical documentation site
6
+ - Added brand assets (`assets/logo.svg`, `assets/logo-wordmark.svg`)
7
+
8
+ ## v0.4.1
9
+
10
+ - Renamed CLI from `bms-skills` to `skillup`
11
+ - Added `migrate` command to import `skills-lock.json` from the NPX skills CLI
12
+ - Fixed `migrate` default input path to repo root
13
+ - Refactored `cli.py` into focused modules (`install`, `lock`, `settings`, `github`)
@@ -0,0 +1,135 @@
1
+ # Commands
2
+
3
+ ## Global flag
4
+
5
+ All commands accept a `--global` / `-g` flag that switches the lock file and base directory to your home directory instead of the current working directory.
6
+
7
+ ```bash
8
+ skillup --global add myorg/skills
9
+ ```
10
+
11
+ ---
12
+
13
+ ## `add`
14
+
15
+ Add skills from a GitHub release or branch.
16
+
17
+ ```bash
18
+ skillup add <owner/repo> [OPTIONS]
19
+ ```
20
+
21
+ | Option | Short | Description |
22
+ |--------|-------|-------------|
23
+ | `--skill TEXT` | `-s` | Skill name to add (repeatable). Skips interactive picker. |
24
+ | `--branch TEXT` | `-b` | Install from this branch instead of the latest release. |
25
+
26
+ **Examples**
27
+
28
+ ```bash
29
+ # Interactive picker — choose from all available skills
30
+ skillup add google/gemini-cli-skills
31
+
32
+ # Add one skill non-interactively
33
+ skillup add anthropics/skills --skill pdf
34
+
35
+ # Add multiple skills at once
36
+ skillup add anthropics/skills --skill pdf --skill code-review
37
+
38
+ # Pin to a branch
39
+ skillup add myorg/skills --branch main
40
+ ```
41
+
42
+ **Behavior**
43
+
44
+ - Fetches the latest GitHub release. If none exists, falls back to `main`.
45
+ - Downloads the release zip (cached in `TEMP`/`/tmp` or `SKILLUP_CACHE_DIR`).
46
+ - Installs selected skills to `~/.agents/skills` and `~/.claude/skills`.
47
+ - Writes the resolved tag/commit to the lock file.
48
+
49
+ ---
50
+
51
+ ## `remove`
52
+
53
+ Interactively remove installed skills.
54
+
55
+ ```bash
56
+ skillup remove
57
+ ```
58
+
59
+ Shows a checkbox list of all installed skills across all tracked repos. Selected skills are deleted from disk and removed from the lock file. Repos with no remaining skills are dropped from the lock file entirely.
60
+
61
+ ---
62
+
63
+ ## `update`
64
+
65
+ Update installed skills to the latest release or branch head.
66
+
67
+ ```bash
68
+ skillup update [OPTIONS]
69
+ ```
70
+
71
+ | Option | Description |
72
+ |--------|-------------|
73
+ | `--repo TEXT` | Update only this repository (`owner/repo`). |
74
+
75
+ **Examples**
76
+
77
+ ```bash
78
+ # Update everything
79
+ skillup update
80
+
81
+ # Update one repo
82
+ skillup update --repo google/gemini-cli-skills
83
+ ```
84
+
85
+ **Behavior**
86
+
87
+ - Resolves the current latest source for each repo (release or branch head).
88
+ - If the resolved commit/tag matches what's in the lock file, skips with "already up-to-date".
89
+ - Re-installs all skills from the new source and updates the lock file.
90
+
91
+ ---
92
+
93
+ ## `sync`
94
+
95
+ Install all skills exactly as defined in the lock file.
96
+
97
+ ```bash
98
+ skillup sync
99
+ ```
100
+
101
+ Uses the pinned commit SHAs from the lock file — no network resolution of "latest". Useful for:
102
+
103
+ - Setting up a new machine from a shared or committed lock file.
104
+ - CI environments that need deterministic installs.
105
+
106
+ ---
107
+
108
+ ## `migrate`
109
+
110
+ Import a `skills-lock.json` from the Claude Code NPX skills CLI.
111
+
112
+ ```bash
113
+ skillup migrate [INPUT_FILE]
114
+ ```
115
+
116
+ | Argument | Description |
117
+ |----------|-------------|
118
+ | `INPUT_FILE` | Path to `skills-lock.json`. Defaults to `<base_dir>/skills-lock.json`. |
119
+
120
+ **Example**
121
+
122
+ ```bash
123
+ # Default path
124
+ skillup migrate
125
+
126
+ # Custom path
127
+ skillup migrate path/to/skills-lock.json
128
+ ```
129
+
130
+ **Behavior**
131
+
132
+ - Reads each GitHub-sourced skill from the input file.
133
+ - Resolves the current latest release/branch for each repo.
134
+ - Merges into the skillup lock file without overwriting existing entries.
135
+ - Skips skills with unsupported `sourceType` (non-GitHub).
@@ -0,0 +1,65 @@
1
+ # Development
2
+
3
+ ## Setup
4
+
5
+ This project uses [uv](https://github.com/astral-sh/uv) for dependency management.
6
+
7
+ ```bash
8
+ git clone https://github.com/bmsuisse/skillup
9
+ cd skillup
10
+ uv sync
11
+ ```
12
+
13
+ ## Running locally
14
+
15
+ ```bash
16
+ uv run skillup --help
17
+ ```
18
+
19
+ ## Tests
20
+
21
+ ```bash
22
+ uv run pytest
23
+ ```
24
+
25
+ Run a specific test file:
26
+
27
+ ```bash
28
+ uv run pytest tests/test_cli.py
29
+ ```
30
+
31
+ ## Type checking
32
+
33
+ ```bash
34
+ uv run pyright skillup
35
+ ```
36
+
37
+ ## Project structure
38
+
39
+ ```
40
+ skillup/
41
+ ├── skillup/
42
+ │ ├── cli.py # Typer commands (add, remove, update, sync, migrate)
43
+ │ ├── install.py # Download, unzip, and copy skill folders
44
+ │ ├── lock.py # Lock file read/write and source normalization
45
+ │ ├── settings.py # Paths and environment config
46
+ │ └── github.py # GitHub release/branch resolution
47
+ ├── tests/
48
+ ├── docs/ # This documentation (built with Zensical)
49
+ ├── zensical.toml # Docs config
50
+ └── pyproject.toml
51
+ ```
52
+
53
+ ## Building the docs locally
54
+
55
+ ```bash
56
+ pip install zensical
57
+ zensical serve # live-reload dev server
58
+ zensical build # static output → site/
59
+ ```
60
+
61
+ ## Environment variables
62
+
63
+ | Variable | Default | Description |
64
+ |----------|---------|-------------|
65
+ | `SKILLUP_CACHE_DIR` | system temp | Override the download cache directory. |