Skip to main content
Skills are reusable capability packs that the gateway can expose to agents. Pioneer skills are compatible with the Agent Skills specification, but installation and policy are managed by the gateway so every client connected to that gateway sees the same catalog. The skills protocol has three jobs: move a skill archive to the gateway, install/update/uninstall the skill, and control whether agents may use it implicitly. Explicit per-turn use is represented through 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

Response shape:
Use 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 currently tar_gz.
Response:
After this response, chunks are not sent as JSON-RPC requests. They are sent as binary WebSocket frames on the same authenticated connection.

Binary chunk frame

A skill upload chunk frame has this layout: Chunk header:
The gateway acknowledges chunks with a notification:
Clients should use next_offset for resumable upload UI and retry from the acknowledged offset after reconnect.

Finishing or aborting upload

Response:
If the user cancels before install, call 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 is uploaded_archive.
Response:
Use 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

Omit a field when you want to keep its current value. For example, toggling only implicit invocation should send 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.
Health responses include dependency diagnostics, security findings, validation issues, trust-gate decisions, and recent audit events. Clients should surface blocking diagnostics before letting a user assume a skill is ready.

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.