turn/start.capabilities.
Every installed skill has a stable skill_id that is separate from its slug, display name, source path, and current pack membership. Clients should use skill_id for updates, uninstall, policy changes, health operations, and capability references. A pack rename, source move, or pack update can change names and membership without changing the identity of a retained skill.
Methods
Listing skills
snapshot_version as an invalidation aid. When the gateway sends skills/changed, refresh the list and replace the local catalog.
Policy model
Skills have two separate policy switches:
This split matters for client UX. “Installed” is not the same as “available to agents”, and “available explicitly” is not the same as “agent may decide to use it on its own”.
Newly installed skills default to enabled but not implicit unless policy is changed after install. Clients should make explicit use available through the composer or another
turn/start.capabilities flow instead of flipping implicit invocation automatically.
Pack methods return the pack projection, deterministic member changes, and lifecycle audit information. Treat the operation as atomic from the UI perspective: refresh the catalog from the returned snapshot or the subsequent skills/changed notification rather than merging individual member updates optimistically.
Upload flow
Skill installation starts with a compressed archive upload. The supported archive format is currentlytar_gz.
Binary chunk frame
A skill upload chunk frame has this layout:
Chunk header:
next_offset for resumable upload UI and retry from the acknowledged offset after reconnect.
Finishing or aborting upload
skills/upload/abort with workspace_id and upload_id.
Installing a skill
Installation consumes a finished upload. The only lifecycle source currently accepted by the public protocol isuploaded_archive.
skills/update for replacing an existing skill. It accepts slug, source_kind, source, and optional expected_previous_fingerprint for optimistic concurrency.
After install, use skills/policy/set only when changing policy. The default explicit-only state is enough for composer selection.
Setting policy
allow_implicit_invocation without enabled.
Health
skills/health is for detailed diagnostics. Pass an empty skills array to inspect all skills, or pass exact { slug, source_kind } targets.
Notifications
Skills are scoped by gateway and workspace. A skill installed on one remote gateway is not available on another gateway until it is installed there too.