@xelandernt/skilly 0.0.24 → 0.0.26

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.
package/README.md CHANGED
@@ -1,20 +1,270 @@
1
- # @xelandernt/skilly
1
+ [![npm](https://img.shields.io/npm/v/%40xelandernt%2Fskilly
2
+ )](https://www.npmjs.com/package/@xelandernt/skilly)
3
+ [![pyrefly](https://img.shields.io/endpoint?url=https://pyrefly.org/badge.json)](https://github.com/facebook/pyrefly)
4
+ [![GitHub stars](https://img.shields.io/github/stars/xelandernt/skilly)](https://github.com/xelandernt/skilly/stargazers)
5
+ [![PyPI Downloads](https://static.pepy.tech/badge/skilly/month)](https://pepy.tech/projects/skilly)
6
+ [![Supported versions](https://img.shields.io/pypi/pyversions/skilly.svg)](https://pypi.python.org/pypi/skilly)
7
+ # skilly
2
8
 
3
- Run the native `skilly` CLI through `npx` without a separate TypeScript or
4
- JavaScript CLI implementation.
9
+ Manage [Agent Skills](https://agentskills.io/specification) from the command line
10
+ or Python.
5
11
 
6
- ## Usage
12
+ `skilly` creates specification-compliant skills, installs skills from GitHub or
13
+ Python dependencies, and keeps managed skills up to date.
7
14
 
15
+ ## Installation
16
+
17
+ Run with `uvx`:
18
+ ```shell
19
+ uvx skilly --help
20
+
21
+ ```
22
+
23
+ Run with `npx`:
8
24
  ```shell
9
25
  npx @xelandernt/skilly --help
10
26
  ```
11
27
 
12
- The package preserves the native CLI's stdio behavior so interactive TUI flows
13
- and non-interactive automation keep using the same Rust implementation.
28
+ Install the native CLI with Homebrew from this repository's tap:
29
+
30
+ ```shell
31
+ brew tap xelandernt/skilly https://github.com/xelandernt/skilly
32
+ brew install xelandernt/skilly/skilly
33
+ ```
34
+
35
+ Homebrew installs the CLI only. Install the Python package when you need the
36
+ import surface as well:
37
+
38
+ ```shell
39
+ pip install skilly
40
+ ```
41
+
42
+ The npm package ships the same native Rust CLI behind the executable name
43
+ `skilly`. The current npm support matrix is macOS arm64/x64, Linux x64
44
+ (glibc), and Windows x64.
45
+
46
+ ## Quick Start
47
+
48
+ Scan the current Python project for skills shipped by its dependencies:
49
+
50
+ ```shell
51
+ uvx skilly scan
52
+ ```
53
+
54
+ Download a skill from GitHub:
55
+
56
+ ```shell
57
+ uvx skilly download https://github.com/example/project/tree/main/skills/code-review
58
+ ```
59
+
60
+ Inspect installed skills:
61
+
62
+ ```shell
63
+ uvx skilly list
64
+ ```
65
+
66
+ ## CLI Commands
67
+
68
+ | Command | Purpose |
69
+ | --- | --- |
70
+ | `uvx skilly scan` | Find skills provided by the project's Python dependencies. |
71
+ | `uvx skilly download <github-url>` | Install one or more skills from GitHub. |
72
+ | `uvx skilly list` | Browse, update, or remove installed skills. |
73
+ | `uvx skilly update` | Preview available updates; add `--yes` to apply all updates. |
74
+ | `uvx skilly remove <name>` | Remove an installed skill by directory name. |
75
+ | `uvx skilly skillsmp search <query>` | Search SkillsMP and install a selected result. |
76
+ | `uvx skilly create` | Create a valid skill through a terminal wizard or explicit options. |
77
+
78
+ Use `uvx skilly <command> --help` for all options.
79
+
80
+ ### Create Skills
81
+
82
+ Interactive terminals open a full-screen editor for the required and optional
83
+ Agent Skills fields. `Ctrl+S` creates the skill, `Ctrl+X` cancels, and `Enter`
84
+ in the multi-line editors inserts real line breaks.
85
+
86
+ For scripts and automation, provide the required name and description:
87
+
88
+ ```shell
89
+ uvx skilly create deployment-checks \
90
+ --description "Validate deployment readiness before a production release." \
91
+ --instructions "# Instructions
92
+
93
+ Run the deployment checklist and report blockers." \
94
+ --metadata owner=platform \
95
+ --with-scripts \
96
+ --yes
97
+ ```
98
+
99
+ Existing skills are rejected by default. Use `--overwrite` to replace one
100
+ atomically. See `uvx skilly create --help` for the complete contract.
101
+
102
+ ### Install Dependency Skills
103
+
104
+ `uvx skilly scan` reads `pyproject.toml` and the project's `.venv`, then offers
105
+ skills shipped by direct, development, and optional dependencies:
106
+
107
+ ```shell
108
+ uvx skilly scan
109
+ ```
110
+
111
+ Exclude dependency categories when needed:
112
+
113
+ ```shell
114
+ uvx skilly scan --no-dependency-groups --no-optional-dependencies
115
+ ```
116
+
117
+ ### Install GitHub Skills
118
+
119
+ ```shell
120
+ uvx skilly download https://github.com/example/project
121
+ ```
122
+
123
+ When a repository contains multiple skills, select one or install all:
124
+
125
+ ```shell
126
+ uvx skilly download https://github.com/example/project --skill-name code-review
127
+ uvx skilly download https://github.com/example/project --all
128
+ ```
129
+
130
+ ### Destinations
131
+
132
+ Management commands accept the same destination options:
133
+
134
+ | Option | Destination |
135
+ | --- | --- |
136
+ | `--local` | Project-local skills directory. |
137
+ | `--global` | User-global skills directory. |
138
+ | `--claude` | Claude skills directory. |
139
+ | `--codex` | Codex skills directory. |
140
+ | `--copilot` | GitHub Copilot skills directory. |
141
+ | `--directory <path>` | Explicit directory; overrides all other destination options. |
142
+
143
+ Without destination options, `skilly` uses `.agents/skills`.
144
+
145
+ Set `SKILLY_DIRECTORY` to change that default without passing `--directory`
146
+ every time:
147
+
148
+ ```shell
149
+ export SKILLY_DIRECTORY="$HOME/.config/skilly/skills"
150
+ skilly list
151
+ ```
152
+
153
+ `--directory`, `--local`, `--global`, `--claude`, `--codex`, and `--copilot`
154
+ override `SKILLY_DIRECTORY` when provided explicitly.
155
+
156
+ ```shell
157
+ uvx skilly download https://github.com/example/project --global --codex
158
+ uvx skilly list --local --claude
159
+ ```
160
+
161
+ #### Destination Mapping
162
+
163
+ `skilly` resolves destination paths before use. Relative paths become absolute
164
+ from the current working directory, and `--directory "~/.copilot"` expands `~`
165
+ to your home directory.
166
+
167
+ | Flags | Resolved destination |
168
+ |----------------------|---------------------------------------------------------------------------|
169
+ | _none_ | `SKILLY_DIRECTORY` when set, otherwise `.agents/skills` |
170
+ | `--local` | `.agents/skills` |
171
+ | `--global` | `~/.agents/skills` |
172
+ | `--claude` | `.claude/skills` |
173
+ | `--claude --global` | `~/.claude/skills` |
174
+ | `--codex` | `.codex/skills` |
175
+ | `--codex --global` | `~/.codex/skills` |
176
+ | `--copilot` | `.github/skills` |
177
+ | `--copilot --global` | `~/.copilot/skills` |
178
+ | `--directory <path>` | Exactly that directory, after `~` expansion and absolute-path resolution. |
179
+
180
+ `--directory` overrides `--local`, `--global`, `--claude`, `--codex`, and
181
+ `--copilot`.
182
+
183
+ ### GitHub Authentication
184
+
185
+ Authenticated requests have higher GitHub API rate limits. Use the first
186
+ available token:
187
+
188
+ ```shell
189
+ export SKILLY_GITHUB_TOKEN=ghp_your_token
190
+ # or GITHUB_TOKEN / GH_TOKEN
191
+ ```
192
+
193
+ GitHub-fetching commands also accept `--github-token`.
194
+
195
+ ## Python API
196
+
197
+ `SkillRepository` is the stateful management interface. Bind a destination,
198
+ project settings, or custom filesystem once and reuse it:
199
+
200
+ ```python
201
+ from pathlib import Path
202
+
203
+ from skilly import ProjectSettings, Skill, SkillRepository
204
+
205
+ repository = SkillRepository(
206
+ directory=Path(".agents/skills"),
207
+ project=ProjectSettings(include_dependency_groups=True),
208
+ )
209
+
210
+ created = repository.install(
211
+ Skill(
212
+ name="code-review",
213
+ description="Review code for correctness and maintainability.",
214
+ content="# Instructions\n\nReview the proposed change.",
215
+ )
216
+ )
217
+
218
+ for match in repository.scan_project():
219
+ print(match.available.name, match.status)
220
+ ```
221
+
222
+ Use focused discovery functions when no repository state is needed:
223
+
224
+ ```python
225
+ from skilly import discover_installed_skills, discover_venv_skills
226
+
227
+ installed = discover_installed_skills()
228
+ dependency_skills = discover_venv_skills()
229
+ ```
230
+
231
+ The SkillsMP client returns typed results directly. Async methods expose the
232
+ same result types without blocking the event loop:
233
+
234
+ ```python
235
+ from skilly.skillsmp import ClientSettings, SkillsMp, SkillsMpSearchQuery
236
+
237
+ client = SkillsMp(settings=ClientSettings(base_url="https://skillsmp.com/api/v1"))
238
+ result = client.search(SkillsMpSearchQuery(text="python", limit=5))
239
+ print(result.data.skills[0].github_url)
240
+ ```
241
+
242
+ ## Development
243
+
244
+ Install development dependencies and the editable extension:
245
+
246
+ ```shell
247
+ just install
248
+ ```
249
+
250
+ Run the required quality gates:
251
+
252
+ ```shell
253
+ just lint
254
+ just test
255
+ just typecheck
256
+ ```
257
+
258
+ The TypeScript launcher package also has dedicated helpers:
259
+
260
+ ```shell
261
+ just ts::build
262
+ just ts::test
263
+ just ts::typecheck
264
+ just ts::smoke
265
+ just ts::publish-dry-run
266
+ ```
14
267
 
15
- ## Supported targets
268
+ ## License
16
269
 
17
- - macOS arm64
18
- - macOS x64
19
- - Linux x64 (glibc)
20
- - Windows x64
270
+ [MIT](LICENSE)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xelandernt/skilly",
3
- "version": "0.0.24",
3
+ "version": "0.0.26",
4
4
  "description": "Native npm launcher for the skilly CLI.",
5
5
  "license": "MIT",
6
6
  "bin": {
@@ -22,9 +22,10 @@
22
22
  "scripts": {
23
23
  "build": "tsc -p tsconfig.json",
24
24
  "stage-local-binary": "npm run build && node ./dist/scripts/stage-local-binary.js",
25
+ "sync-readme": "node ./dist/scripts/sync-readme.js",
25
26
  "test": "npm run build && node --test ./dist/test/targets.test.js ./dist/test/launcher.test.js",
26
27
  "typecheck": "tsc --noEmit -p tsconfig.json",
27
- "prepack": "npm run build"
28
+ "prepack": "npm run build && npm run sync-readme"
28
29
  },
29
30
  "devDependencies": {
30
31
  "@types/node": "^22.16.5",
Binary file
Binary file