Releases: gcavanunez/slinky
Release list
v0.5.0
L in the TUI now opens a single link form: pick this project or global, then copy or symlink, and whether to hide the link from git and add the .claude/skills symlink. "Hide from git" now works in linked git worktrees, where it used to be skipped silently: lines go to the main checkout's shared .git/info/exclude and stay until the last worktree using them unlinks. Linking a skill whose recorded files were deleted by hand, or lost with a recreated worktree, now replaces the stale record instead of failing with "unlink first".
v0.4.0
Add fleet sync: a leader registers followers (slinky fleet add, or m in the TUI) and slinky fleet sync (or S on the leader) syncs and pushes it, then every follower pulls, reconciles, and restores over ssh. Profiles become the shared on/off state: machines following one keep per-machine changes, and profiles can be created, edited, renamed, and deleted from the CLI and the TUI. Also adds host-local OpenCode invocation preferences (slinky autoinvoke, TUI A), dims the TUI behind open modals, and fixes pull/sync failing on unknown-origin vendor skills.
v0.3.0
Add vendor skill forks (slinky fork and the TUI F binding) and a TO ADOPT tab for detected global skills, including provenance, file previews, and adoption.
v0.2.1
Patch Changes
- f019a13: Publish every platform binary from the release workflow, so the npm packages carry provenance and match the GitHub release assets byte for byte.
v0.2.0
Minor Changes
-
737c34c: Add
slinky restore allto reset every drifting live vendor skill from the catalog baseline, and add positionalslinky adopt allas an equivalent toslinky adopt --allfor importing every unindexed global or staged skill. -
f9170bd: Record a preferred diff pager and review updates in one session.
slinky config diff-pager <hunk|delta|none>persists the choice in~/.config/slinky/config.json, andslinky configshows the recorded host and pager. Bothslinky diffandslinky updateuse it, with the existing--hunk/--delta/--pagerflags overriding it for one run and a new--no-pagerforcing inline output.slinky updatenow collects every changed skill into a single aggregate patch and opens that one pager session before prompting, instead of dumping each unified diff into the terminal where it could not be read. Writing one config field no longer drops another, so setting a pager survives a laterslinky init. -
8c85ed3: Resolve the TUI editor instead of hardcoding
nvim. Pressingepreviously always spawnednvim, with no$EDITORor$VISUALlookup anywhere. The editor now resolves in order:editorfrom~/.config/slinky/config.json, then$VISUAL, then$EDITOR, thennvim. Set it withslinky config editor "code -w", ornoneto fall back to the environment.The spec may carry flags and is tokenised with single and double quotes respected, so an editor at a path containing spaces works. The resulting argv is spawned directly rather than through a shell, so a skill path can never be interpreted as shell syntax. The TUI's help text and failure notice now name the resolved editor rather than saying
nvim. -
09d0bf6: Add Hunk and Delta integrations to
slinky diffthrough direct flags, a generic pager option, and the TUI drift review. The TUI can also accept a live global skill as the repository baseline or restore the global skill from that baseline, and author groups now flag contained drift. -
4877ba1: Commit vendor update provenance in the skills host, absorb it during staged and global adoption, and seed the machine skills.sh lock before updates so shared catalogs use consistent upstream sources across machines.
-
7d58707: Make
slinky pullreplay diverged local commits onto the upstream tip instead of refusing. Runningslinky saveon two machines is the ordinary way this catalog diverges, and those commits almost always touch disjoint skills, so pull now rebases them itself. It only does so when it can prove the outcome first:git merge-treehas to merge both sides without conflict, and the merged catalog must not retire a skill, because retirement needs the preflight the fast-forward path runs. Conflicts and retirements are still reported — now naming the conflicting paths or the retired skills — and a replay that cannot be completed is aborted so the branch is left where it was found. -
57631f4: Stop making a stale local hash block
slinky save. Local skills are symlinked into the global store, so editing the installed copy edits the repo copy directly and leaves the manifest hash behind;savealready committed that content, so the mismatch was bookkeeping rather than a reason to abort.slinky savenow refreshes stale local hashes itself and prints each skill it touched, andslinky rehashwith no arguments sweeps every stale local skill. Vendor skills are still excluded: a hash mismatch on a committed baseline means it was hand-edited instead of going throughslinky vendor, and that remains a verification failure. -
35cf614: Add safe
push, fast-forward-onlypull, andsync --pullworkflows for sharing a catalog across machines while preserving each machine's local state. Addslinky versionas a discoverable equivalent toslinky --version. -
0c5f0ff: Add
slinky saveto verify and commit catalog-managed paths in the skills host without including unrelated staged files. -
5318287: Add
slinky skills addfor lock-aware skills.sh installation, surface host skill directories that are not indexed in the manifest, let users index matching skills from the TUI, show project placement and Git visibility on skill rows, and provide top-levelavailable hereandall skillscatalog tabs. -
7586d61: Consolidate skills through a staging inbox instead of driving skills.sh non-interactively.
slinky skills add <source>now runsnpx skills addproject-scoped inside the host repo (--project -a universal), so omitting--skillhands you skills.sh's own picker rather than a reimplementation of it, and--skillmay be repeated. Installing project-scoped also stops skills.sh reporting failures for agents that do not support global installs.skills.sh writes into
<repo>/.agents/skills/, which Slinky now treats as a staging inbox:slinky adoptlists staged skills alongside host skills missing from the manifest, reads provenance from<repo>/skills-lock.json, and recovers the git tree hash from GitHub that project-scoped locks omit soupdate --checkkeeps working. Adoption clears the staging directory, removes the.claudesymlink pointing at it, and prunes the adopted lock entry; a staged copy identical to an indexed baseline is discarded as redundant, and agent directories populated by a hand-runnpx skills addare reported rather than deleted.This means you can run
npx skills add <source>in the host repo yourself and letslinky adoptvendor the result.Removes the
--listflag and the ANSI-scraping skill listing added for it, which are no longer needed now that skills.sh does its own discovery. -
570ba30: Notice unpulled catalog commits:
slinky updaterefuses to run on a store behind its upstream (--forceoverrides) andupdate --checkreports it; the TUI checks in the background on launch, shows⇣ N to pull, andSrunsslinky syncin a scrollable modal. -
285d3e8: Copy TUI text selections on mouse release or Ctrl-C through OSC52 and native clipboard utilities.
-
570ba30: Redesign the TUI: open panes divided by rails with a single foldable catalog tree (headings toggle, fold, and summarise their group), labelled status columns, persistent document zoom,
fto revealSKILL.mdfrontmatter, and 27 colour themes chosen withtorslinky config theme. -
9d467d2: Add
xto zoom the focused TUI pane,v/Vto cycle the split, catalog-only, and document-only layouts,</>to resize the split, and aneeditor action for local skills in the skills host. -
5318287: Extend TUI navigation: full-page (
ctrl-f/ctrl-b) and line-wise (ctrl-e/ctrl-y) scrolling, in-document search from the document pane (/withn/Nmatch jumping), markdown heading jumps ({/}), and mouse support — click rows, panels, and catalog tabs; wheel-scroll lists and the file tree.
Patch Changes
- d9e4116: Stop treating
$HOMEas a project. Its.agents/skillsand.claude/skillsare the global stores, so opening the TUI from the home directory reported every installed skill as anunmanagedproject skill. Linking is now refused there as well: the guard that already blocked linking into the skills repo has moved intolinkSkill, where it covers the TUI as well as the CLI, and it now also rejects any directory whose.agents/skillsresolves to the global store. - fc89a81: Upgrade to Effect 4.0.0-rc.112 and TypeScript 7.0.2, consolidate Effect imports through the package root, and remove the unused Effect Node platform dependency.
- 7586d61: Fix the TUI failing to start from a project that sets its own
jsxImportSource. Bun resolvestsconfig.jsonfrom the current working directory rather than from the source file, so runningslinkyinside (for example) a Vue project transformed the TUI's JSX against that project's runtime and failed withCannot find module 'vue/jsx-dev-runtime'. The TUI's.tsxfiles now pin@jsxImportSource @opentui/reactper file. - 8193f73: Publish standalone macOS and Linux binaries for ARM64 and x64. The main npm package now selects the matching platform package and no longer requires Bun at runtime.
- b57ce7d: Ignore machine-local disabled-skill tombstones after a catalog removes or renames a skill, while continuing to reject stale project links that require explicit cleanup.
- 5e38d83: Allow
slinky saveto stage tracked catalog paths removed or renamed by a catalog migration. - d582df5: Route CLI and TUI catalog behavior through shared application operations. Adoption now compensates manifest, state, lock, and filesystem changes as one transaction; save, pull, push, and sync own their Git lifecycle outside the CLI adapter; and catalog inspection consistently rejects wrong-target links. Machine state migrates to a version-2 custom/profile selection that derives profile membership without caching duplicate disabled-skill state.