Quickstart
In five minutes you'll have a published skill bound to a workspace and resolvable from the runtime. We'll use a trivial "summarise" skill so you can focus on the surface, not the content.
You need:
- A ScaiGrid API key with
scaiskills:publishandscaiskills:bind(any tenant admin has both). tarandcurl(or the language equivalents below).
1 2 3 | |
1. Register the skill identity#
Register the slug first — it owns all future versions.
1 2 3 4 5 6 7 8 | |
1 2 3 4 5 6 7 8 9 10 11 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
Save the returned skill.id and the slug summarise.
2. Build a bundle#
A bundle is a .tar.gz with a SKILL.md at the root. The YAML frontmatter is the manifest; everything below the closing --- is the body the LLM eventually reads.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
3. Publish the version#
1 2 3 | |
The response carries the content_hash (SHA-256), the storage_uri, and status: "published". Re-uploading the same bytes will dedup on hash.
4. Bind the skill to a scope#
Pin to the exact version for now. @latest and ^0.1 are also valid in the version field. Use the skill.id you saved in step 1.
1 2 3 4 5 6 7 8 9 | |
Because the manifest declared no permissions and no secrets, pending_grants is false and the binding is active immediately.
5. Resolve the scope#
This is what the runtime calls per turn.
1 2 3 4 5 6 7 | |
You get back the lightweight manifest list — slug, version, description, triggers — and a cache_ttl_ms of 60 000. The full body is fetched only when the model decides to call skills.view on the slug.
What just happened#
POST /skillswrote amod_scaiskills_skillsrow owned by your workspace.POST /skills/{slug}/versionsvalidated the bundle, deduped against existing content hashes, stored ats3://.../scaiskills/{skill_id}/{content_hash}.tar.gz, and persisted the parsed manifest on the version row.POST /bindingsresolved0.1.0to a concrete published version, walked itsrequires.skills(none here), built an empty lockfile, and flippedpending_grantstofalse.POST /resolvelooked up active, non-pending bindings for the workspace, deduped by skill_id with user > channel > workspace precedence, and returned the lightweight manifests. Result is now cached in Redis for 60 seconds.
Next#
- Architecture — the full request flow and where state lives.
- Bindings and resolution — scope precedence, lockfiles, pending grants.
- Publish a skill — the real bundle layout, manifest fields, references directory.
- Bind with permissions and secrets — when the binding sits in pending_grants and how to clear it.