@victortomaili/skill-cli 0.6.6 → 0.6.8
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/CHANGELOG.md +20 -0
- package/package.json +1 -1
- package/src/commands/defaults.js +8 -2
- package/src/lib/agents-md.js +22 -36
package/CHANGELOG.md
CHANGED
|
@@ -11,6 +11,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
11
11
|
- Cursor adapter (`.cursor/rules` format) for `init -g` bootstrap.
|
|
12
12
|
- Per-agent hook adapters for automatic `/X` triggering (push model).
|
|
13
13
|
|
|
14
|
+
## [0.6.8] - 2026-07-08
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
- AGENTS.md + `skill active`: reframed cost/style/speed skills as USER TRADE-OFFS
|
|
18
|
+
the agent must never pre-judge. The agent kept skipping proposals with "not
|
|
19
|
+
relevant to this task"; the new wording forbids deciding a trade-off for the
|
|
20
|
+
user ("not relevant here" = stealing the user's decision). Made the `skill active`
|
|
21
|
+
footer mechanical (LOAD/PROPOSE/SKIP grid) with an explicit callout: "cost/style
|
|
22
|
+
but not relevant here → that is the bug. Ask instead."
|
|
23
|
+
|
|
24
|
+
## [0.6.7] - 2026-07-08
|
|
25
|
+
|
|
26
|
+
### Changed
|
|
27
|
+
- AGENTS.md START GATE: heavily compressed (605 → ~250 words) and made the
|
|
28
|
+
classification mechanical. cost/style/speed-affecting skills MUST be proposed on
|
|
29
|
+
EVERY task (those axes apply by definition); the rationalizations "not needed for
|
|
30
|
+
this task", "the user didn't request it", and "skip unless needed" are now
|
|
31
|
+
explicitly FORBIDDEN. Also de-hardcoded the caveman example (it overfit the test)
|
|
32
|
+
— the rule is now fully generic.
|
|
33
|
+
|
|
14
34
|
## [0.6.6] - 2026-07-08
|
|
15
35
|
|
|
16
36
|
### Changed
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@victortomaili/skill-cli",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.8",
|
|
4
4
|
"description": "Cross-agent skill manager — one global store, clean agent folders, activation via skill.config",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Victor Tomaili <victor@tomaili.com>",
|
package/src/commands/defaults.js
CHANGED
|
@@ -16,7 +16,7 @@ export function cmdActive() {
|
|
|
16
16
|
const eff = computeEffective(installed, globalCfg, projCfg)
|
|
17
17
|
const defs = new Set((globalCfg.defaults || []).map(d => String(d).toLowerCase()))
|
|
18
18
|
|
|
19
|
-
console.log(c.bold('skill active') + c.gray(' — active skills (descriptions only).
|
|
19
|
+
console.log(c.bold('skill active') + c.gray(' — active skills (descriptions only). LOAD correctness/quality ones; PROPOSE every cost/style/speed one (a trade-off is the USER') + c.gray("'s call — never skip it)."))
|
|
20
20
|
console.log()
|
|
21
21
|
|
|
22
22
|
if (eff.length === 0) {
|
|
@@ -40,7 +40,13 @@ export function cmdActive() {
|
|
|
40
40
|
if (s.description) console.log(c.gray(' ' + String(s.description).replace(/[\r\n]+/g, ' ').trim()))
|
|
41
41
|
}
|
|
42
42
|
console.log()
|
|
43
|
-
console.log(c.bold('→
|
|
43
|
+
console.log(c.bold('→ For EACH skill above, decide in your reply:'))
|
|
44
|
+
console.log(c.gray(' LOAD moves CORRECTNESS/QUALITY → run ') + c.cyan('skill cat <name>') + c.gray(' now.'))
|
|
45
|
+
console.log(c.gray(' PROPOSE moves COST, STYLE, or SPEED → you MUST ASK "enable <name>?". A trade-off is the'))
|
|
46
|
+
console.log(c.gray(' USER') + c.gray("'s decision — these move an axis on EVERY reply, so NEVER skip one and"))
|
|
47
|
+
console.log(c.gray(' NEVER say "not relevant to this task" (that = you deciding for the user).'))
|
|
48
|
+
console.log(c.gray(' SKIP moves NONE of the above.'))
|
|
49
|
+
console.log(c.yellow(' ⚠ If you wrote "cost/style but not relevant here" → that is the bug. Ask instead.'))
|
|
44
50
|
}
|
|
45
51
|
|
|
46
52
|
// `skill default <name>` — mark a skill as a default (active by default in every
|
package/src/lib/agents-md.js
CHANGED
|
@@ -24,42 +24,28 @@ Usage:
|
|
|
24
24
|
- \`skill default <name>\` — mark a skill as a global default (active + auto-load)
|
|
25
25
|
|
|
26
26
|
START GATE (mandatory): On the FIRST user message of a session, your VERY FIRST
|
|
27
|
-
action — BEFORE ANYTHING ELSE
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
CORRECTNESS
|
|
32
|
-
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
PRIORITIES
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
it — you then know only its name + description, nothing more. Never infer a skill
|
|
50
|
-
is in your context from its name, the \u2605 marker, or an \`active\` status: if you
|
|
51
|
-
haven't catted it, treat it as NOT loaded (then decide: cat it, or propose it).
|
|
52
|
-
Do not assume a skill is already applied — \`active\`/\u2605-default = AVAILABLE, not
|
|
53
|
-
APPLIED. ANY skill can be context-altering; judge from the description — there is
|
|
54
|
-
no fixed list and no flag. Do this even if the task looks trivial: skills shape
|
|
55
|
-
how you approach it, so you cannot reason about it correctly until you've reviewed
|
|
56
|
-
them.
|
|
57
|
-
|
|
58
|
-
Discovery (every message): On EVERY later user message, re-check the catalog
|
|
59
|
-
against the new request; load any newly-relevant functional skill
|
|
60
|
-
(\`skill cat <name>\`), and PROPOSE any newly-relevant context-altering one.
|
|
61
|
-
Load each skill only ONCE per session (\`skill trigger <keyword>\` resolves a
|
|
62
|
-
keyword to a skill).
|
|
27
|
+
action — BEFORE ANYTHING ELSE (before thinking, before any tool call) — MUST be to
|
|
28
|
+
run \`skill active\`. It lists each ACTIVE skill's name + FULL description (never the
|
|
29
|
+
body). Read it, then for EACH skill classify which axis it moves and ACT — there is
|
|
30
|
+
no discretion and no third option:
|
|
31
|
+
- moves CORRECTNESS or QUALITY → load it now: \`skill cat <name>\`.
|
|
32
|
+
- moves COST, SPEED, or response STYLE → PROPOSE it. These are TRADE-OFFS — the
|
|
33
|
+
USER decides them, NEVER you. Even if you are SURE one would hurt THIS task, you
|
|
34
|
+
still ASK: "Enable <name>? It <one-line benefit>." (apply only on yes). They move
|
|
35
|
+
an axis on EVERY task by definition (every reply has a token cost, a length, a
|
|
36
|
+
style, a speed), so the thoughts "not relevant to this task", "not needed here",
|
|
37
|
+
"the user didn't request it", and "skip unless needed" are FORBIDDEN — each one
|
|
38
|
+
is you STEALING the user's decision. Deciding a trade-off is not your role;
|
|
39
|
+
surfacing it is. A line in a table is NOT proposing — you must actually ask.
|
|
40
|
+
- moves none of the above → skip.
|
|
41
|
+
When unsure if a skill moves an axis → PROPOSE (ask). LOADED \u2260 LISTED: a skill is
|
|
42
|
+
loaded only if you \`cat\`-ed it this session — listing it, its \u2605, or its \`active\`
|
|
43
|
+
status is NOT loading; active/\u2605 means AVAILABLE, not APPLIED.
|
|
44
|
+
PRIORITIES: correctness > quality > cost (cheap) > speed — never trade correctness
|
|
45
|
+
or quality for speed or cost.
|
|
46
|
+
Discovery: on EVERY later message, re-run this classification; load newly-relevant
|
|
47
|
+
correctness/quality skills, PROPOSE newly-relevant cost/style/speed ones. Load each
|
|
48
|
+
skill only ONCE per session (\`skill trigger <keyword>\` resolves a keyword).
|
|
63
49
|
|
|
64
50
|
Triggers: when the user types \`/X\`, run \`skill trigger X\`.
|
|
65
51
|
- Single match → apply the output directly.
|