Skip to content

v0.22.0

Choose a tag to compare

@fvarrui fvarrui released this 15 Oct 18:03
· 27 commits to main since this release

Installed extensions grow up: they are plain Claude Code plugins, configurable, installable from a catalog in the chats, and safe to share with a workspace. The documentation has a new Extensions section, with a tutorial that builds an extension with its own MCP server from scratch.

New features

  • Extensions are valid Claude Code plugins. The kit's own data (labels, capabilities, read-only tools, help, catalog look) moves under metadata["agent-kit"] in plugin.json, which Claude Code ignores, so one folder serves both.
  • Options. An extension's userConfig settings are asked at install (extension add … --set key=value), set with extension config or /extensions config, kept per scope (secrets apart, out of the file tools' reach), and applied live: only that extension's servers restart.
  • npx servers. A server declared as npx -y <package>@<exact version> is fetched by the kit into the agent's folder, checked against its integrity and run with the agent's own Node: no npx needed, also inside a packaged desktop app.
  • The catalog in the chats. /extensions search|install|update|remove|reload, and the chat controller's extensionCatalog(), extensionImage(), installExtension(), updateExtension(), removeExtension(), extensionOptions(), setExtensionOptions() and reopen() for a host of its own. Extensions carry topics, a logo and a banner; catalogTopics filters what an agent offers, and officialMarketplace names the agent's own marketplace, installed from without a question.
  • Workspaces. A project scope keeps only its lock; the code lives in the agent's store and is fetched with extension restore. A workspace's extensions run only once trusted (extension trust, /extensions trust, the controller's trustWorkspace()), and trust is lost when their code changes.
  • MCP elicitation. A server can ask the person a form, through a port's askForm (field by field where there's none), never through the model.
  • Plan mode trusts readOnlyHint for an installed server whose manifest lists no read-only tools.
  • The marketplace catalog's contract. JSON schemas for metadata["agent-kit"] and for a marketplace's catalog.json ship in schemas/, and the new package @falkenslab/agent-kit-catalog writes and checks a marketplace's catalog.json (npx @falkenslab/agent-kit-catalog --check).

Fixes

  • An extension's hash no longer counts text files' line endings, so a checkout with CRLF matches its lock.

Breaking changes

  • metadata["agent-kit"]. The kit's fields in plugin.json (kit, provides, requires, needs, readOnlyTools, labels, help) move under metadata["agent-kit"]. Move them there; claude plugin validate --strict must pass.
  • Hashes changed. Extensions installed with 0.21 no longer match their lock: reinstall them (extension remove <name>, then extension add …), including the jokebook in ~/.captain-whiskers.
  • Workspace layout. A project scope keeps only extensions.lock.json; its extensions' code goes to the agent's store and its data to <agent>/.projects/. Reinstall a project's extensions with --project, then extension trust.
  • SDK 0.3.300 (CLI 2.1.300), needed for userConfig options.

Captain Whiskers

Captain Whiskers 0.3.0, the example agent built on agent-kit 0.22.0, as a Windows app: download the installer. It's unsigned, so SmartScreen warns about it; it asks for a Claude key on first start and keeps everything in ~/.captain-whiskers. New: an extensions drawer with the catalog (logos, topics, search), settings, updates and uninstall, and his jokebook from his own marketplace.