@rhize/skill-forge 0.1.0 → 0.3.0
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/LICENSE +30 -21
- package/LICENSE-COMMERCIAL +42 -0
- package/LICENSE-MIT +21 -0
- package/README.md +98 -39
- package/dist/cli.js +606 -148
- package/dist/cli.js.map +1 -1
- package/dist/ingest-prompt.md +211 -0
- package/package.json +5 -3
package/LICENSE
CHANGED
|
@@ -1,21 +1,30 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
1
|
+
skill-forge licensing
|
|
2
|
+
=====================
|
|
3
|
+
|
|
4
|
+
This repository is open-core and uses a split license as of v0.2.0:
|
|
5
|
+
|
|
6
|
+
- Everything EXCEPT the Pro Modules listed below is licensed under the MIT
|
|
7
|
+
License — see LICENSE-MIT.
|
|
8
|
+
|
|
9
|
+
- The Pro Modules are source-available under the Rhize Commercial License —
|
|
10
|
+
see LICENSE-COMMERCIAL. Production use of their functionality requires a
|
|
11
|
+
valid license key.
|
|
12
|
+
|
|
13
|
+
Pro Modules
|
|
14
|
+
-----------
|
|
15
|
+
|
|
16
|
+
- src/license.ts
|
|
17
|
+
- src/gate/overlap.ts
|
|
18
|
+
- src/provenance.ts
|
|
19
|
+
- src/queue.ts
|
|
20
|
+
|
|
21
|
+
...and the portions of built artifacts (e.g. dist/cli.js in the published npm
|
|
22
|
+
package) generated from these files. Each Pro Module carries a header
|
|
23
|
+
identifying its license.
|
|
24
|
+
|
|
25
|
+
Notes
|
|
26
|
+
-----
|
|
27
|
+
|
|
28
|
+
- Versions up to and including 0.1.0 were published entirely under the MIT
|
|
29
|
+
License; this split applies from v0.2.0 onward.
|
|
30
|
+
- Licensing inquiries: jim@rhize.media
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
Rhize Commercial License v1.0
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Rhize Media (rhize.media)
|
|
4
|
+
|
|
5
|
+
This license applies to the files identified as "Pro Modules" in the LICENSE file at
|
|
6
|
+
the root of this repository, and to the portions of built artifacts generated from
|
|
7
|
+
them (together, the "Pro Software"). The Pro Software is source-available. It is NOT
|
|
8
|
+
open source and is NOT covered by the MIT license that applies to the rest of this
|
|
9
|
+
repository.
|
|
10
|
+
|
|
11
|
+
1. License required. Use of the Pro Software's functionality in production, or for
|
|
12
|
+
any commercial purpose, requires a valid skill-forge license key purchased from
|
|
13
|
+
Rhize Media.
|
|
14
|
+
|
|
15
|
+
2. Permitted without a license key:
|
|
16
|
+
a. Viewing, auditing, and compiling the source code;
|
|
17
|
+
b. Evaluating the Pro Software's functionality for up to 30 days;
|
|
18
|
+
c. Submitting patches or contributions to the official repository.
|
|
19
|
+
|
|
20
|
+
3. Prohibited:
|
|
21
|
+
a. Removing, disabling, or circumventing the license verification, or assisting
|
|
22
|
+
others in doing so;
|
|
23
|
+
b. Using the Pro Software's functionality beyond the evaluation period without a
|
|
24
|
+
valid license key;
|
|
25
|
+
c. Redistributing modified versions of the Pro Software;
|
|
26
|
+
d. Offering the Pro Software, or a service substantially based on it, to third
|
|
27
|
+
parties as a paid or unpaid service.
|
|
28
|
+
|
|
29
|
+
4. Redistribution. The Pro Software may be redistributed only unmodified and only as
|
|
30
|
+
part of official @rhize/skill-forge releases.
|
|
31
|
+
|
|
32
|
+
5. Termination. Any violation of this license immediately terminates the rights
|
|
33
|
+
granted by it.
|
|
34
|
+
|
|
35
|
+
6. No warranty. THE PRO SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
36
|
+
EXPRESS OR IMPLIED. IN NO EVENT SHALL RHIZE MEDIA BE LIABLE FOR ANY CLAIM, DAMAGES
|
|
37
|
+
OR OTHER LIABILITY ARISING FROM THE PRO SOFTWARE OR ITS USE.
|
|
38
|
+
|
|
39
|
+
7. Reservation of rights. All rights not expressly granted are reserved by
|
|
40
|
+
Rhize Media.
|
|
41
|
+
|
|
42
|
+
Licensing inquiries: jim@rhize.media
|
package/LICENSE-MIT
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Rhize Media
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -24,7 +24,20 @@ promote/hold/reject decision**, before it is allowed anywhere near your working
|
|
|
24
24
|
## Quickstart
|
|
25
25
|
|
|
26
26
|
```bash
|
|
27
|
-
npx skill-forge
|
|
27
|
+
npx @rhize/skill-forge init
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Optional, but recommended first: `init` detects which coding agents you have installed (Claude
|
|
31
|
+
Code, Codex CLI, Cursor, Windsurf, OpenCode, Gemini CLI, and more), lets you pick which of their
|
|
32
|
+
skill directories should be gated, a default promotion target, and an optional agent to hand
|
|
33
|
+
follow-up prompts off to (see [`--ingest`](#ingestion-handoff---ingest)). No configuration is
|
|
34
|
+
required for a first run either way — skip `init` and skill-forge defaults to `<cwd>/.claude/skills`
|
|
35
|
+
as its promotion target and `~/.skill-forge/quarantine` as its sandbox (and offers to run `init` for
|
|
36
|
+
you the first time `add`/`scan`/`list`/`status` runs with no config present, in an interactive
|
|
37
|
+
terminal). See [docs/configuration.md](docs/configuration.md) for the full field reference.
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
npx @rhize/skill-forge add <owner>/<skill-name>
|
|
28
41
|
```
|
|
29
42
|
|
|
30
43
|
One command runs the whole gate:
|
|
@@ -35,14 +48,10 @@ One command runs the whole gate:
|
|
|
35
48
|
4. Runs overlap analysis against your configured skill set, if one is configured.
|
|
36
49
|
5. Prints a report and asks you to **promote**, **hold**, or **reject** the candidate.
|
|
37
50
|
|
|
38
|
-
No configuration is required for a first run: skill-forge defaults to `<cwd>/.claude/skills` as
|
|
39
|
-
its promotion target and `~/.skill-forge/quarantine` as its sandbox. See
|
|
40
|
-
[docs/configuration.md](docs/configuration.md) to change either.
|
|
41
|
-
|
|
42
51
|
To gate a skill without installing it (always cleans up afterward):
|
|
43
52
|
|
|
44
53
|
```bash
|
|
45
|
-
npx skill-forge scan <owner>/<skill-name>
|
|
54
|
+
npx @rhize/skill-forge scan <owner>/<skill-name>
|
|
46
55
|
```
|
|
47
56
|
|
|
48
57
|
`<source>` accepts a `skills.sh` `owner/name` slug, a git URL (`https://...`, `git@...`, or
|
|
@@ -51,12 +60,29 @@ anything ending in `.git`), or a local filesystem path.
|
|
|
51
60
|
## Commands
|
|
52
61
|
|
|
53
62
|
```
|
|
63
|
+
skill-forge init [options] Detect installed agents and set gate targets / handoff agent
|
|
54
64
|
skill-forge add <source> [options] Quarantine-install a skill and run it through the gate
|
|
55
|
-
skill-forge scan <source>
|
|
65
|
+
skill-forge scan <source> [options] Gate a skill without installing it (always cleans up)
|
|
56
66
|
skill-forge list List skills currently held in quarantine
|
|
57
67
|
skill-forge status Show configuration and quarantine summary
|
|
58
68
|
```
|
|
59
69
|
|
|
70
|
+
### `init`
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
skill-forge init # interactive: pick targets, default target, handoff agent
|
|
74
|
+
skill-forge init --defaults # non-interactive: all detected agents, first as default (CI)
|
|
75
|
+
skill-forge init --list # print detected agent skill roots and exit — no writes
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Probes the known agent matrix (`src/agents.ts`) for both project-relative (`.claude/skills`, ...)
|
|
79
|
+
and global (`~/.codex/skills`, ...) skill directories that already exist on disk, then writes
|
|
80
|
+
`skillsRoots`, `agents`, `defaultTarget`, and (if you pick a handoff agent) `handoffCommand` to
|
|
81
|
+
`config.json`. Safe to re-run any time — it always starts from your existing config and only
|
|
82
|
+
overwrites the fields it's responsible for. If no `config.json` exists yet, `add`/`scan`/`list`/
|
|
83
|
+
`status` offer to run this for you on first use (skipped entirely for `--json`/`--yes`/non-TTY
|
|
84
|
+
invocations, so scripted runs never block on a prompt).
|
|
85
|
+
|
|
60
86
|
### `add`
|
|
61
87
|
|
|
62
88
|
```bash
|
|
@@ -75,26 +101,28 @@ target skills root until you decide.
|
|
|
75
101
|
|---|---|
|
|
76
102
|
| *(none)* | Prompts you to **promote**, **hold**, or **reject** the candidate. |
|
|
77
103
|
| `-y, --yes` | Skips the prompt and honors the gate verdict: a `block` safety verdict is rejected (process exits nonzero); anything else (`pass`/`warn`) is promoted. |
|
|
78
|
-
| `-t, --target <dir>` | Skills root to promote into. Defaults to the config's `skillsRoots[0]`. |
|
|
79
|
-
| `--json` | Prints the gate result (profile, safety findings, overlap) as JSON instead of the terminal report box. |
|
|
80
|
-
| `--ingest` | Pro. After a successful promote, hands off to
|
|
104
|
+
| `-t, --target <dir>` | Skills root to promote into. Defaults to the config's `defaultTarget`, then `skillsRoots[0]`. |
|
|
105
|
+
| `--json` | Prints the gate result (profile, safety findings, overlap) as JSON instead of the terminal report box. Implies non-interactive: the decision is made the same way `--yes` makes it (verdict decides promote/hold/reject), never an interactive prompt. |
|
|
106
|
+
| `--ingest` | Pro (free during the 0.x beta). After a successful promote, hands off to a coding agent — see [Ingestion handoff](#ingestion-handoff---ingest). |
|
|
81
107
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
`~/.skill-forge/queue.json` (or `$SKILL_FORGE_HOME/queue.json`) — see
|
|
108
|
+
A promoted skill gets a provenance entry appended to `<target>/SOURCES.md`, and every promote or
|
|
109
|
+
hold decision is recorded to `~/.skill-forge/queue.json` (or `$SKILL_FORGE_HOME/queue.json`) — see
|
|
85
110
|
[`docs/queue-schema.md`](docs/queue-schema.md) for the entry schema. A reject writes neither —
|
|
86
|
-
nothing is left behind to record.
|
|
87
|
-
|
|
111
|
+
nothing is left behind to record. These are Pro features that run free during the 0.x beta (see
|
|
112
|
+
[docs/pro.md](docs/pro.md#beta-pricing-0x)): with no valid license, `add` still writes them, and
|
|
113
|
+
prints a one-line notice above the report instead of skipping them.
|
|
88
114
|
|
|
89
115
|
### `scan`
|
|
90
116
|
|
|
91
117
|
```bash
|
|
92
118
|
skill-forge scan owner/name
|
|
119
|
+
skill-forge scan owner/name --json
|
|
93
120
|
```
|
|
94
121
|
|
|
95
122
|
Runs the same gate pipeline as `add` (profile → safety → overlap → report) but never promotes
|
|
96
123
|
anything — the quarantine sandbox is always cleaned up afterward, on success or failure. Exits
|
|
97
|
-
nonzero when the safety verdict is `block`.
|
|
124
|
+
nonzero when the safety verdict is `block`. `--json` prints the same gate-result payload shape as
|
|
125
|
+
`add`'s.
|
|
98
126
|
|
|
99
127
|
### `list` / `status`
|
|
100
128
|
|
|
@@ -111,9 +139,10 @@ strictness) plus a count of held entries.
|
|
|
111
139
|
| Safety gate — built-in ruleset + SkillSpector shell-out | ✓ | ✓ |
|
|
112
140
|
| Terminal report + `--json` | ✓ | ✓ |
|
|
113
141
|
| Promote / hold / reject decision | ✓ | ✓ |
|
|
142
|
+
| `init` setup wizard (agent detection, gate targets, handoff agent) | ✓ | ✓ |
|
|
114
143
|
| Overlap analysis against your configured skill set | | ✓ |
|
|
115
144
|
| Provenance ledger (`SOURCES.md` audit trail) | | ✓ |
|
|
116
|
-
| Pending-ingestion queue + `--ingest`
|
|
145
|
+
| Pending-ingestion queue + `--ingest` handoff | | ✓ |
|
|
117
146
|
| Set-level organizer (capability registry, redundancy, dependency graph) | | ✓ |
|
|
118
147
|
|
|
119
148
|
Free is the complete safety gate on its own — quarantine, profile, safety scan, and an explicit
|
|
@@ -121,13 +150,16 @@ promote/reject decision, with nothing held back. Pro is the curation layer on to
|
|
|
121
150
|
candidate duplicates something you already have, and an ongoing provenance record across your
|
|
122
151
|
whole skill set rather than a single install-time decision.
|
|
123
152
|
|
|
124
|
-
**
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
153
|
+
**Everything free until 1.0.** This is a 0.x beta build, and the Pro tier's runtime license check
|
|
154
|
+
is intentionally asleep for the whole 0.x line: overlap analysis, the provenance ledger, and the
|
|
155
|
+
pending-ingestion queue / `--ingest` handoff all run for everyone, licensed or not. Without a valid
|
|
156
|
+
license (`SKILL_FORGE_LICENSE` env var or `config.json`'s `licenseKey`, verified offline), `add`
|
|
157
|
+
prints a one-line notice — `Pro feature (...) — free during the 0.x beta; will require a license at
|
|
158
|
+
1.0.` — above the report (or in the `--json` payload's `notices` array) and otherwise runs exactly
|
|
159
|
+
as a licensed run would. At 1.0 the lock re-arms and these features go back to requiring a valid
|
|
160
|
+
key. The set-level organizer and the skills.sh partner-audit enrichment are not yet exposed by any
|
|
161
|
+
CLI command, licensed or not, beta or not. See [docs/pro.md](docs/pro.md) for the per-feature
|
|
162
|
+
implementation status.
|
|
131
163
|
|
|
132
164
|
## Security model
|
|
133
165
|
|
|
@@ -152,37 +184,51 @@ per-feature implementation status.
|
|
|
152
184
|
`VERCEL_OIDC_TOKEN`. The client exists (`src/gate/skillsSh.ts`) but `add`/`scan` do not call it
|
|
153
185
|
yet in this build — see [docs/gate-policy.md](docs/gate-policy.md) for current status.
|
|
154
186
|
|
|
155
|
-
##
|
|
187
|
+
## Ingestion handoff (`--ingest`)
|
|
156
188
|
|
|
157
189
|
`skill-forge` deliberately doesn't try to decide *what to extract* from a skill worth adopting —
|
|
158
190
|
that deeper judgment (which patterns to keep, whether to absorb into an existing skill vs. fork a
|
|
159
|
-
new one, verifying the result beats baseline)
|
|
160
|
-
|
|
191
|
+
new one, verifying the result beats baseline) is a job for a coding agent, not the gate. `--ingest`
|
|
192
|
+
hands a promoted skill off to one, running the bundled, agent-neutral prompt at
|
|
193
|
+
`assets/ingest-prompt.md` (Claude Code users get a deeper experience via the companion
|
|
194
|
+
`rhize-skill-forge` plugin skill, but the bundled prompt works with any agent).
|
|
161
195
|
|
|
162
196
|
```bash
|
|
163
197
|
skill-forge add owner/name --yes --ingest
|
|
164
198
|
```
|
|
165
199
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
-
|
|
170
|
-
|
|
171
|
-
|
|
200
|
+
The command that gets run, in order:
|
|
201
|
+
|
|
202
|
+
1. `config.handoffCommand` — an argv-style template (`["claude", "-p", "{prompt}"]`-shaped) set by
|
|
203
|
+
`skill-forge init`'s "handoff agent" prompt, with `{path}` (the installed skill) and `{prompt}`
|
|
204
|
+
(the bundled prompt file) substituted in. Never shell-parsed, so it's safe even if a substituted
|
|
205
|
+
path contains shell metacharacters.
|
|
206
|
+
2. Otherwise, the first known agent binary found on `PATH` (`claude`, `codex`, `cursor-agent`,
|
|
207
|
+
`windsurf`, `opencode`, `gemini`), invoked generically with the prompt.
|
|
208
|
+
3. Otherwise, skill-forge prints the prompt path and skill path for you to hand off yourself.
|
|
209
|
+
|
|
210
|
+
Every promote or hold is recorded to the pending queue (`~/.skill-forge/queue.json`) regardless of
|
|
211
|
+
`--ingest` — nothing is lost if you skip the handoff. See [`docs/queue-schema.md`](docs/queue-schema.md)
|
|
212
|
+
for the entry schema.
|
|
172
213
|
|
|
173
214
|
## Configuration
|
|
174
215
|
|
|
175
|
-
Config lives at `~/.skill-forge/config.json` (or `$SKILL_FORGE_HOME/config.json`)
|
|
216
|
+
Config lives at `~/.skill-forge/config.json` (or `$SKILL_FORGE_HOME/config.json`). Run
|
|
217
|
+
`skill-forge init` to generate it interactively, or write it by hand:
|
|
176
218
|
|
|
177
219
|
```json
|
|
178
220
|
{
|
|
179
221
|
"skillsRoots": ["/path/to/.claude/skills"],
|
|
180
222
|
"quarantineDir": "/path/to/quarantine",
|
|
181
|
-
"strictness": "block-high"
|
|
223
|
+
"strictness": "block-high",
|
|
224
|
+
"defaultTarget": "/path/to/.claude/skills",
|
|
225
|
+
"agents": [{ "id": "claude-code", "skillsRoot": "/path/to/.claude/skills" }],
|
|
226
|
+
"handoffCommand": ["claude", "-p", "Read {prompt} and follow its instructions for the skill installed at {path}"]
|
|
182
227
|
}
|
|
183
228
|
```
|
|
184
229
|
|
|
185
|
-
Missing keys fall back to defaults (`skillsRoots: ["<cwd>/.claude/skills"]`)
|
|
230
|
+
Missing keys fall back to defaults (`skillsRoots: ["<cwd>/.claude/skills"]`); `defaultTarget`,
|
|
231
|
+
`agents`, and `handoffCommand` are optional and only written by `init`. Full field reference,
|
|
186
232
|
including current caveats, in [docs/configuration.md](docs/configuration.md).
|
|
187
233
|
|
|
188
234
|
## FAQ
|
|
@@ -210,9 +256,22 @@ See [docs/gate-policy.md](docs/gate-policy.md).
|
|
|
210
256
|
**Is there a license key or activation step?**
|
|
211
257
|
An offline-verified license key exists (`SKILL_FORGE_LICENSE` env var or `config.json`'s
|
|
212
258
|
`licenseKey`), but there's no `license`/`activate` CLI command — you set the key via config or
|
|
213
|
-
environment, not a command.
|
|
214
|
-
pending-ingestion queue / `--ingest` handoff
|
|
259
|
+
environment, not a command. Through the 0.x beta the key doesn't gate anything: overlap analysis,
|
|
260
|
+
the provenance ledger, and the pending-ingestion queue / `--ingest` handoff all run for everyone,
|
|
261
|
+
with a one-line "free during the beta" notice if no valid key is set. See
|
|
262
|
+
[docs/pro.md](docs/pro.md) for details.
|
|
215
263
|
|
|
216
264
|
## License
|
|
217
265
|
|
|
218
|
-
|
|
266
|
+
skill-forge is open-core with a split license (as of v0.2.0):
|
|
267
|
+
|
|
268
|
+
- **Free tier — MIT.** Everything except the Pro modules: quarantine install, profile,
|
|
269
|
+
safety gate, report, promote/hold/reject. See [LICENSE-MIT](LICENSE-MIT).
|
|
270
|
+
- **Pro modules — Rhize Commercial License.** `src/license.ts`, `src/gate/overlap.ts`,
|
|
271
|
+
`src/provenance.ts`, `src/queue.ts` (overlap analysis, provenance ledger, pending
|
|
272
|
+
queue / `--ingest` handoff). The source is available to read and audit, but production
|
|
273
|
+
use of Pro functionality requires a license key — see
|
|
274
|
+
[LICENSE-COMMERCIAL](LICENSE-COMMERCIAL).
|
|
275
|
+
|
|
276
|
+
[LICENSE](LICENSE) is the authoritative map of which files fall under which license.
|
|
277
|
+
Versions up to and including 0.1.0 were published entirely under MIT.
|