skillset v0.30.0
skillset v0.30.0: published 2026-10-26. Package changelog notes and the original GitHub publication notice.
GitHub release · Package changelog
Publication
Published the seven-package Skillset 0.30.0 set to npm with dist-tag latest.
Changes
Minor Changes
-
8b4fd6f: Generated
AGENTS.mdfiles now wrap each rule in an XML section withsourceandapplies_toattributes when the file combines rules or one rule narrows withpaths:, replacing the<!-- source: … -->boundary comments, which Claude strips. A lone rule withoutpaths:and theRULES.mdfront page stay bare, andCLAUDE.mdno longer carries a source comment. Builds warn when two rules reaching oneAGENTS.mdboth carry a## Code Review Rulessection. -
28dc751:
skillset importandskillset adoptnow warn instead of failing when a provider’s native pluginauthorcannot become canonical source (a scalar like42,{}, an email-only object, or an empty or non-stringname). The raw value is kept on that provider’s<provider>.manifest.authoroverride so it doesn’t disappear, andskillset.authorstill comes only from a readable author. Theunreadable-plugin-authoradopt diagnostic is now a warning, so adoption plans and writes go through. A later build can still fail the provider’s manifest conformance if the kept value is invalid there. -
e02c52a:
skillset new hookwithout--attachnow writes a shared hook definition to.skillset/hooks/instead of failing. It prints how to attach the hook withhooks.autoin a plugin, skill, or project agent, since shared hooks render only where attached. -
f71bf5c: A rule’s directory under
.skillset/rules/is now its scope:rules/<dir>/<topic>.mdrenders<dir>/AGENTS.md,rules/<topic>.mdis unscoped, andpaths:narrows files within the scope relative to it. Claude and Cursor globs are derived from the scope, with the literal scope escaped for Claude. Destinations no longer depend on which files exist in the working tree.Wildcard scopes (
[.],[...]) render nothing and record anunsupportedresult until wildcard expansion lands. Codexpaths:narrowing and unescaped Cursor punctuation are reported asdegradedrender results. Builds warn on an unmanagedAGENTS.override.mdbeside a generatedAGENTS.md, on apaths:entry that repeats its scope directory, and on a scope directory that does not exist yet. Rule filenames may no longer contain[or].Migration: a top-level rule that relied on
paths:to reach a nestedAGENTS.mdnow lands in the rootAGENTS.md; move it underrules/<dir>/and make itspaths:relative to that directory.
Patch Changes
-
411d5c6: Correct CLI help:
checklists--isolated,create --rootdescribes the parent directory,--include,--preset,--targets,--timeout-ms, and--linesdescribe what they accept,build --repairshows--yes,evalhas a command summary,resolvesits besidereconcile,newhas examples, and the CI workflow header names bothcreateandinit. -
aa4fbe3:
skillset explainno longer reports never-written outputs astarget state: sync: it marks themplanned (not written), lists the render results blocking the build, prefers the writer of the exact path asked about (naming bundle files and their source), and limits feature support rows to targets enabled incompile.targets. -
e1abe4b: Recognize generated-output drift that
skillset build --yescan repair on its own. When every drifted generated file differs from its source render only in whitespace or layout (equal parsed JSON, or Markdown with the same words, structure, frontmatter, and code),skillset checknames a formatter as the likely cause and offersskillset buildandskillset build --yesinstead of reconcile or provider-format migration. Generated edits whose reconciliation is blocked only by each other are now one rebuildable set rather than a “cannot be rebuilt mechanically” manual-review deadlock. -
d32f038:
skillset initnow points atskillset init --adopt all --yeswhen it finds existing guidance to import, instead of suggesting a build that would collide with it. -
05865de:
skillset init --include cinow adds the CI workflow to an existing workspace instead of refusing because.skillset/RULES.mdor another scaffold file was edited or came fromskillset create. -
2bcac1a: Change-ledger and release fixes:
draft,promote, andmove --yesnow mint a fresh ledger event id per run, so two branches running the same command from the same trunk ledger no longer produce a duplicate id that breaks every ledger read after a merge.bun run change-stream:guardaccept a second amendment of the same change or release, and compare trunk’s prefix correctly in CRLF checkouts.- A failed
release applyrestores pending change files with their original permissions, and rolling back ledger appends keeps unrelated blank lines. - Release baseline seeding (
skillset setup,skillset import) writesstate.jsonunder the change-ledger lock. - Note for
--jsonconsumers: since the lifecycle ledger moved to an owned append, the ledger entry indraft,promote, andmoveJSON plans reportsplan.operations[].kind: "append"where it previously reported"update".
-
f28936c:
skillset listnow labels the bare.skillset/rulessource as “workspace rules” instead of the retired “workspace instructions”. -
9509bf3: Package placement errors no longer cite internal tracker IDs; they say the requested
plugins.outputplacement is not yet supported. -
c9a1fd9:
skillset resolvenow finds a trackedskillset.lockwhose path contains a newline; it reads tracked locks NUL-delimited instead of line by line. -
d578b91: Rebased rule links now percent-encode spaces,
#,?,%, and unbalanced parentheses in rule folder names, so a rule under a folder likemy app/links correctly from.claude/rules/and.cursor/rules/. -
3525b36: Relative Markdown links in rule bodies now work in every destination. Skillset reads a rule’s links as relative to the directory the rule applies to (the repository root for
RULES.md), keeps them unchanged in that directory’sAGENTS.md, and rebases them for.claude/CLAUDE.md,.claude/rules/, and.cursor/rules/. -
061c0ef:
skillset initandskillset createno longer scaffold empty_claude/and_codex/provider folders, and builds ignore.gitkeepplaceholders in provider folders, so a fresh workspace no longer emits.claude/.gitkeepor.codex/.gitkeep. -
21b36ba: Scaffolded
RULES.mdandskillset new ruleplaceholders now say “rules” instead of “repository instructions”,new ruleadds a commentedpaths:hint, and thenew agent --inerror points at.skillset/subagents/. -
72b2ad6: The SessionStart stale-output hint now tells agents to preview with
npx skillset build, write withnpx skillset build --yes, and read theuse-skillsetskill, instead of naming askillset-helpskill that does not exist. -
5969c05: Source move and pending-change fixes:
- Releasing a reason after
skillset moveretires the old selector from the moved skill’s own version instead of the workspace version, so a skill released at 1.2.3 no longer records its retirement as0.1.0 -> 0.1.1. - Moving a skill out of a plugin no longer leaves the source plugin (
plugin:<name>) uncovered inchange checkandchange refresh. - Moving a skill onto a selector that an earlier move in the same release window vacated now associates the removal with the pending reason instead of blocking check, refresh, and release.
- Recovery guidance offers
skillset change migratewhen a legacy entry’s only error is stale evidence, since migration succeeds in that case. - Rewriting authored YAML on move or rename keeps flow lists such as
scopes: [x]and their comments instead of turning them into block lists.
- Releasing a reason after