ScaiSkills
ScaiSkills is ScaiGrid's skill registry and injection layer — the module that lets platform operators, partners, and tenants publish reusable capability bundles (.tar.gz skill packages containing a SKILL.md, references, and manifest) that an LLM turn can consume via progressive disclosure.
A "skill" is a piece of authored knowledge — a style guide, a step-by-step procedure, a domain vocabulary — that:
- Lives in one canonical place instead of copy-pasted into every bot's persona.
- Is scoped: a skill applies where a binding says it does (workspace / channel / user / core) — OR where a platform-wide global marker says it does.
- Reaches the model via three MCP tools the LLM can call during a turn:
skills.list(),skills.search(query),skills.view(slug, path?).
When to use#
- You want the same knowledge to reach every agent in a tenant without editing each bot's system prompt.
- Multiple teams need to share a capability (e.g. a document-authoring skill, a compliance workflow, a domain glossary).
- You want the knowledge to be discoverable during a turn instead of stuffed into a system prompt that eats context.
If a single agent needs a single style guide, you may not need ScaiSkills — put it in the bot's tone config or a linked ScaiMatrix collection.
How the pieces fit#
- Publish a skill: upload a
.tar.gzbundle with aSKILL.mdand manifest. Each publish creates an immutable version (semver). Old versions stay reachable until yanked. - Bind a skill to a scope:
POST /v1/modules/scaiskills/bindingswithskill_id,version,scope_type,scope_id. The skill is now active for that scope. - Resolve at turn time: ScaiWave (and any other consumer) calls
POST /v1/modules/scaiskills/resolvewith the caller's scope tuple. Response is a lightweight list of{slug, version, description, triggers, source}. Consumers inject these into the turn's preamble so the model knows which skills are available. - View on demand: when the model wants the full skill body, it calls
skills.view(slug)— that returnsSKILL.md, orSKILL.md's referenced files with?path=references/....
Platform globals — v1 / v2 / v3 (shipped 2026-07-03)#
A super_admin can mark a skill platform-global so it appears in every resolve response without a per-scope binding. Partner admins can do the same at partner scope. Tenant admins can opt out to hide a specific global for their workspace.
- v1: platform-global via
PUT /v1/modules/scaiskills/skills/{slug}/global - v2: partner-global via the same route with
scope_type: "partner" - v3: per-scope opt-out via
PUT /v1/modules/scaiskills/skills/{slug}/global/opt-out
Full walkthrough: Global skills.
Precedence#
When multiple sources for the same slug apply, the highest-precedence source wins:
core > user > channel > workspace > global
A tenant binding always overrides a global — that's how a tenant pins their own version of a universal skill.
Related#
- ScaiBot — consumes ScaiSkills via the bot's tool executor. When a bot has skills bound to its owning workspace, they reach the LLM automatically.
- ScaiCore — the same resolve/view calls work with a core-scope binding for headless runtimes.
- ScaiWave — the reference consumer. Its skills plugin calls
resolvebefore every turn and injects the returned slug list into the preamble.