Skip to content

sx v2.1.0

Choose a tag to compare

@github-actions github-actions released this 08 Jul 00:48
8129ae3

sx 2.1 — extensions

sx 2.1 makes the desktop app extensible. Extensions are small plugins
that add dashboard widgets, publish checks, editor commands, and whole
new views to the app — installed from a shared marketplace in one
click, or published to your own library like any other asset. Yesterday
2.0 gave your team a library; 2.1 lets you shape the app around it.

🧩 Extensions

Settings → Extensions is the new home for everything pluggable.
Extensions belong to a library: installing one shares it with everyone
who uses that library, while turning it on stays each person's own
choice. Enabling shows a plain-language list of exactly what the
extension can access — read your assets, add widgets, connect to a
named host — and re-prompts whenever an update changes that list.
Disabling removes everything it added, immediately.

Extensions ride the normal asset pipeline (type = "app-plugin"), so
publishing, versioning, team scoping, pinning, and the audit trail all
work exactly like a skill — updates can never sneak past review the way
they can in other plugin ecosystems. Org admins can restrict or disable
third-party extensions vault-wide with an [app-plugins] allowlist in
the manifest.

Six built-ins ship in the box and run through the same machinery:
Publish Doctor (pre-publish checks), Templates, Importer, and the three
dashboard widgets (adoption, top assets, leaderboard).

🛍️ The extensions marketplace

Settings → Extensions → Browse marketplace… opens a shared
repository of extensions — search, check the permission chips, Install.
Updates surface in the same list with per-extension and update-all
buttons. The default marketplace ships with fifteen extensions,
including:

  • Claude Assist — ask your library questions and get answers that
    cite (and open) your assets, critique the draft you have open as a
    prompt, or turn a description into a skill draft. Uses your own
    Anthropic API key, stored in your OS keychain, talking only to
    api.anthropic.com.
  • Review Rota — every asset gets a review due date that adapts to
    how heavily it's used, reviews rotate fairly across the team, and
    verdicts are shared with everyone. Publishing resets the clock.
  • Library Grid & Board — bulk-edit metadata in a grid; move drafts
    through a pipeline board that warns when something publishes early.
  • Asset Query — pin live query tables over your assets and usage to
    the dashboard, Dataview-style.
  • Plus related-assets, activity heatmap, library stats, weekly team
    digest, style linter, table tidy, draft refactor, metric charts, smart
    templates, recent assets, and asset relations.

The marketplace is just another sx vault
(sleuth-io/sx-extensions)
— point the app at your own repository to run a private one.

🔌 Build your own

An extension is a folder with a manifest and one ES module — no build
step until you want one. The versioned SxAPI (1.5.0) gives you
dashboard widgets, sidebar panels, asset tabs, full-page views, palette
commands, publish-time warnings, editor text operations, draft
creation, metadata revisions, per-extension secrets in the OS keychain,
host-scoped network access, and team-shared state stored in the vault.
Start with the authoring guide; publish
with sx add ./my-extension.

Also in 2.1

  • ⌘K command palette — every app action, plus whatever your
    extensions add.
  • Full-text search — the main search box now searches inside asset
    content, ranked and excerpted, not just names and descriptions.
  • skills.new extensions — cloud libraries store extensions and the
    org policy server-side (rolling out; the app detects support
    automatically).
  • Git and local libraries now infer asset descriptions from frontmatter,
    so nothing shows "No description yet" when the file already says it.
  • Dashboard widgets label their time windows, and hovering the adoption
    donut names the people in each group.

Trust model, briefly

Extensions run inside the app behind a permission-gated API: no
filesystem, no Node, and no network beyond hosts an extension declares
— each one is its own consent line. Treat publishing an extension to a
shared library like giving someone commit access, because within your
org that's what it is. The full model is in the
authoring guide.

Changelog

  • 121b792 Approve app extensions spec with amendments
  • 393f296 Bump actions/checkout from 6 to 7
  • a83dbcf Extensions P1: host, API, palette, built-ins
  • 083085b Fix spec consistency findings from review
  • 3408308 Record P1 loader spike results in spec
  • 3354a3e SK-623: API 1.3.0 — main views, draft ops, metadata
  • 1bbb114 SK-623: Add extension update buttons
  • d74d9c5 SK-623: Add extensions marketplace
  • 672f85a SK-623: Align spec table; fix palette memo
  • f66c7b7 SK-623: Allowlist examples use third-party ids
  • 7ffd2f6 SK-623: Anchor options flyout to the viewport
  • 2ed3838 SK-623: Cap modal height; fix snapshot gate
  • 0b73fcc SK-623: Cap tooltip width; unshadow chart scale
  • e522221 SK-623: Content search in core; install enables
  • 70760f7 SK-623: Dashboard windows labeled; header cleanup
  • 1cfd61b SK-623: Deterministic description fallback order
  • 2977923 SK-623: Editor API for extensions (1.2.0)
  • d8258a9 SK-623: Extensions P2 — consent, policy, intent
  • 8703aa1 SK-623: Extensions P3 + P2 review fixes
  • 2cdceaa SK-623: Extensions P4 — third-party distribution
  • c1842d8 SK-623: Extensions feedback round
  • 23cce2d SK-623: Fall back to frontmatter descriptions
  • dc88a30 SK-623: Fix P1 review findings
  • 93abced SK-623: Fix P4 + feedback review findings
  • 4fdf0f1 SK-623: Fix content-search review findings
  • cea2180 SK-623: Fix import grouping in plugin_shared
  • c0f7aa7 SK-623: Fix marketplace review findings
  • 24731c6 SK-623: Fix widget-split review findings
  • fbedd9e SK-623: Fold manifest writer into shared helper
  • bc0fe82 SK-623: Forced catalog reload skips stale fetch
  • bcb5e17 SK-623: Hide app-plugin drafts; fix 0 badge
  • a1f58ef SK-623: Indent header conditional JSX
  • 1e9901b SK-623: Make the command palette discoverable
  • cbf9560 SK-623: Menu flyout, refresh, widget extensions
  • fc9d15b SK-623: Move Tools to sidebar bottom with summary
  • 9ce4613 SK-623: One atomic-write helper in utils
  • 763c996 SK-623: One shared-doc contract and sentinel
  • 681a49e SK-623: Per-library extension sync and sleuth gate
  • a19256d SK-623: Precompile matchers; add search tests
  • 2d71618 SK-623: Release notes for 2.1.0
  • b1754d1 SK-623: Scope allowlist; per-plugin slot ids
  • 466c880 SK-623: Scrub Library Dashboard references
  • e40a19e SK-623: Secrets and net:host permissions (1.4.0)
  • f2975c9 SK-623: Serialize sync and enable; fail closed
  • bb95ce5 SK-623: Share update catalog; add Tools section
  • 2f4fd6a SK-623: Shared storage (1.5.0); review fixes
  • a6bf5b4 SK-623: Shared storage on skills.new vaults
  • b880ae5 SK-623: Size options flyout from measured height
  • 8890c60 SK-623: Skip app-plugin only on schema rejection
  • eedb816 SK-623: Slim the palette chip to just the keys
  • 84c96a1 SK-623: Standard menu order; chip skips debounce
  • d20f9c6 SK-623: Trigger CI for P1 commits
  • bc2a785 SK-623: Truncate descriptions on rune boundaries
  • ca46902 SK-623: Truncate widget errors by code point
  • 896719b SK-623: Use existing WriteFileAtomic helper
  • 39cfe90 SK-623: Validate shared doc before sleuth save
  • 71dd9be SK-623: Widget errors name their cause
  • 98fef60 SK-623: Widget tooltip fixes
  • 49160ab SK-623: Write shared extension doc atomically
  • 80d9429 SK-623: skills.new extension support (P5 client)
  • 3091127 SK-623: sx.app.currentUser for team extensions
  • 46cd8c3 SK-623: teams.list degrades on teamless vaults
  • 6645411 SK-623: teams.list for extensions; 1.2.0 docs