@hasna/skills 0.10.88 → 0.10.90

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
@@ -1019,10 +1019,43 @@ offered as `skills load` commands instead of being injected or picked by name
1019
1019
  order. Weaker pointers are offered the same way, at most three and never
1020
1020
  injected: a multi-word keyword whose words all appear apart, one of them
1021
1021
  discriminating ("designs review" in "the designs app for review"), or a common
1022
- one-word keyword; a tie that does not fit is left out.
1022
+ one-word keyword; a tie that does not fit is left out. Managed prompt hooks are
1023
+ stricter than a direct `skills context` call: they inject an unnamed prompt
1024
+ match only for a phrase of two or more words, and offer anything weaker as a
1025
+ `skills load` command, so a `keywords: ["pdf"]` selection needs `$pdf`, "the pdf
1026
+ skill", a two-word keyword or `triggers.always` to arrive as a body.
1027
+ `SKILLS_HOOK_PROMPT_MIN_PHRASE_WORDS` can raise that length, never lower it.
1028
+ Sumi's plugin and Cursor's prompt hook discard a prompt call's output, so a
1029
+ pointer could not reach their models, and they keep the plain selection. Each
1030
+ `skills load` command a session is offered names that session and carries
1031
+ `--cache-first`, so it loads the pinned version from the verified cache the hook
1032
+ used, which works in a sandbox with no network. Once the cache can't serve it it
1033
+ loads from the Skills service. That happens when the pin was last verified over
1034
+ 24 hours ago, which is common for a subagent, since it inherits its parent's time
1035
+ and no hook renews its own pin. With no network as well, the load refuses and says
1036
+ so, and `skills sync` doesn't renew a session's pin. Like a body the hook delivers
1037
+ from the cache, a cached load doesn't ask the service whether the selection is
1038
+ still current.
1039
+
1040
+ A load is recorded on the session the command names, whoever runs it, so running
1041
+ another session's command marks that session as having loaded the skill, and its
1042
+ later prompts offer it no pointer. Where the session store can't be written or is
1043
+ full, as in a Codex sandbox, a load still returns its content and says it wasn't
1044
+ recorded, unless the bundle isn't cached and the cache can't be written either, in
1045
+ which case it refuses. Compaction won't restore an unrecorded skill and the session
1046
+ won't be told if it's retired. An agent or subagent with no way to run a command can't use a
1047
+ pointer.
1048
+
1023
1049
  A session retains its loaded selections; compaction restores the two most
1024
- recently loaded instructions, and a subagent receives its parent's most recent
1025
- one, each followed by `skills load` commands for the next most recent. A
1050
+ recently loaded instructions, followed by `skills load` commands for the next
1051
+ most recent. A subagent started by a managed hook is offered its parent's
1052
+ loaded skills as `skills load` commands, and gets a body at its start only for a
1053
+ skill that `triggers.always` or a path selects. Claude Code's and Codex's
1054
+ subagent start carries no prompt, so naming a skill in a subagent's brief doesn't
1055
+ deliver its body there. OpenCode's adapter does pass the subagent's first prompt,
1056
+ so there it also gets a body for a skill it names or matches by a phrase. A
1057
+ direct `skills context` call, and Sumi's and Cursor's hooks, give it its parent's
1058
+ most recent one as a body. A
1026
1059
  read-only prompt does not rewrite the session receipt or take its write lock
1027
1060
  (a damaged lock still refuses), and receipt writers wait up to two seconds for
1028
1061
  another live writer's lock before refusing; a lock another writer is