#2714
feat(cli): graduate install and sync from experimental
Summary
Graduates the lock-file restore and npm sync commands out of experimental_ for v1.9.
skills --help / banner / README / docs/commands.md
- experimental_install Restore skills from skills-lock.json (alias: install, i)
- experimental_sync Sync skills from node_modules (alias: sync)
+ install Restore skills from skills-lock.json (alias: i)
+ With a package, works like add
+ sync Sync skills from node_modules into agent directoriescli routing (unchanged behavior)
install | i (no source) -> runInstallFromLock
install | i <source> -> runAdd
experimental_install -> runInstallFromLock # kept as a compatibility alias
sync | experimental_sync -> runSync # kept as a compatibility alias- README: the collapsed "Experimental Features" block becomes "Sync Skills From npm Packages" and "Restore Project Skills" sections. The commands are also listed in the command table.
- docs/commands.md:
skills syncandskills installare top-level sections. The#skills-syncanchor is kept, and a new#skills-installanchor is added. - The
syncintro banner now saysskills sync. - Tests and e2e now use the new names. Alias coverage stays in place:
it.each(['sync', 'experimental_sync']),experimental_installinadd.test.ts, and--helprouting for both old names. - The telemetry event name stays
experimental_syncso existing analytics keep working. If we want it renamed, that can be a follow-up.
Evidence
- Before:
skills --helplistsexperimental_install/experimental_sync, and the banner showsnpx skills experimental_sync. After:skills --helplistsinstall/sync, and the banner showsnpx skills installandnpx skills sync. Updated tests check this (advertises sync in help output,advertises sync in banner). pnpm type-check,pnpm format:checkandpnpm buildpass. The tsnapi snapshot is unchanged.pnpm test: 1248 tests pass.detect-agentanduseneed agent/proxy env vars unset to pass when run from inside a coding agent; that is unrelated to this change.
Merge Danger
Door: two-way
The old names still route to the same handlers, so no existing scripts or prepare hooks break.
Blast Radius: docs
Only help text, banner and docs change. Command behavior and the public API stay the same.