Skip to content

Add Skills widget with cross-platform hook framework#201

Merged
sirmalloc merged 4 commits intosirmalloc:mainfrom
fernandezbaptiste:feat/skills-widget-crossplatform
Mar 5, 2026
Merged

Add Skills widget with cross-platform hook framework#201
sirmalloc merged 4 commits intosirmalloc:mainfrom
fernandezbaptiste:feat/skills-widget-crossplatform

Conversation

@fernandezbaptiste
Copy link
Contributor

@fernandezbaptiste fernandezbaptiste commented Mar 5, 2026

Summary

Supersedes #163. Addresses feedback:

  • Cross-platform hooks — no bash/jq; hook handler runs via ccstatusline --hook (Node/Bun, works on Windows)
  • Reusable hook framework — widgets declare hooks via getHooks(), auto-synced to ~/.claude/settings.json on save (tagged ccstatusline-managed for clean install/uninstall)
  • Skills widget — shows skill invocations (last used / total count / unique list), three modes via m keybind

How it works

Widget declares hooks → saveSettings() syncs them to Claude config → Claude calls ccstatusline --hook → parses stdin, appends to JSONL → widget reads JSONL on render.

Test plan

  • tsc --noEmit passes
  • eslint passes
  • vitest — no new failures
  • Add/remove Skills widget via TUI → hooks auto-managed in Claude settings
  • Invoke /commit → widget displays it

Replaces bash/jq hook with a built-in --hook CLI handler that works
on all platforms. Widgets can declare hooks via getHooks() which are
auto-synced to Claude settings when the statusline config is saved.
@sirmalloc
Copy link
Owner

Nice, I like how this is architected. Let me dig into it either tonight or tomorrow and I should be able to test and publish a build with it. I'll go ahead and close the previous PR.

Notes:\n- Hook sync now follows saved-state semantics: installing statusline syncs hooks from saved ccstatusline settings on disk, and uninstall always removes all ccstatusline-managed hooks.\n- syncWidgetHooks always strips managed hooks first, including when statusline.command is missing, then persists cleanup.\n- Skills metrics storage path is now ~/.cache/ccstatusline/skills/skills-<sessionId>.jsonl.\n- Skills unique list ordering is now most-recent-first.\n- Skills widget updates: view toggle on (v), hide-when-empty toggle on (h), explicit empty outputs when not hidden, and new list-only (l)imit editor option where 0 means unlimited (default).\n- Added list-limit custom editor flow and list-only keybind visibility in ItemsEditor.\n- Maintained Node 14 compatibility by avoiding Array.prototype.at in skills metrics parsing.\n- Added/updated regression tests for hook sync/install/uninstall behavior, skills metrics path/order, Skills widget rendering/editing, and items-editor custom keybind handling.
@sirmalloc sirmalloc merged commit 78d6dcc into sirmalloc:main Mar 5, 2026
@sirmalloc
Copy link
Owner

Thanks for this. Did some bug fixes and added some enhancements. Will publish shortly.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants