@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 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.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>",
@@ -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). AUTO-LOAD what is necessary or quality-improving; PROPOSE style/cost/shortcut skills and wait for confirmation.'))
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('→ Decide each skill by the criteria:') + c.gray(' affects ') + c.cyan('CORRECTNESS/QUALITY') + c.gray(' → load (') + c.cyan('skill cat <name>') + c.gray('); affects ') + c.cyan('COST/SPEED') + c.gray(' → propose; affects none → skip. Task type is irrelevant; when unsure → propose.'))
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
@@ -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: before you start thinking/reasoning about the task
28
- and before any tool call MUST be to run \`skill active\`. It prints the skill
29
- CATALOG every ACTIVE skill's name + FULL description (NOT the skill body).
30
- Read it, then for EACH skill judge by ONE question — does it affect the work's
31
- CORRECTNESS, QUALITY, COST (tokens), or SPEED? Decide from the description:
32
- - Affects CORRECTNESS or QUALITYAUTO-LOAD it (\`skill cat <name>\`, silently).
33
- These are how the job should be done not optional.
34
- - Affects COST or SPEED only PROPOSE it: tell the user what it does and apply
35
- ONLY after they confirm (\`/X\` = confirm). These are trade-offs the user opts into.
36
- - Affects NONE of the four skip it.
37
- ENFORCEMENT state each decision OUT LOUD (load / propose / skip). Task type does
38
- NOT filter candidates: a COST/STYLE skill (e.g. a compression mode) affects cost on
39
- EVERY task review, debugging, refactor, anythingso it is a candidate
40
- everywhere; "the user didn't ask" is NOT a reason to skip one that applies, and
41
- "not needed for this technical task" is wrong (style/cost are task-independent).
42
- Do not wait to be askedpropose proactively. When unsure whether a skill applies
43
- PROPOSE.
44
- PRIORITIES when trading off how to do the work, rank: CORRECTNESS first, then
45
- QUALITY, then COST (cheap / token-efficient), then SPEED (fast). Never sacrifice
46
- correctness or quality for speed or cost.
47
- LOADED LISTED. A skill is loaded ONLY if you have run \`skill cat <name>\` for
48
- it THIS session. Seeing a skill in \`skill active\` / \`skill list\` does NOT load
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.