Skills and Imports
Passive organization knowledge with staged scan, review, and publication.
Skills are passive, never executable
A skill is reusable Markdown/text knowledge or procedure an agent loads when relevant. Skills are not connections, MCP servers, or tools. Alpha imports normalize to Markdown/text only — archives containing scripts, binaries, or hooks are rejected at scan time with actionable findings.
Lifecycle
author/paste → draft version → validate → staged import → review → publish (immutable)
POST /v1/skillscreates the stable identity (name, slug, visibility).POST /v1/skills/:id/versionsdrafts content; every draft carries scan findings and ablockedflag.POST .../publishrequires zero blocking findings. Published versions are immutable; tenants keep working when you deprecate and replace.- Agent versions pin skill versions in their manifest (
skills: [{ skill_version_id }]). Publishing an agent validates that each referenced skill version is published.
Staged imports
POST /v1/skill-imports accepts exactly one source — repository (public GitHub, fetched as an archive), url (raw file or zip), text/files (paste), or multipart file (zip/md/txt). The import is normalized (Markdown/text kept, traversal and executables rejected), scanned, and staged as ready_for_review. Nothing becomes a production capability automatically.
The scanner flags secrets (AWS keys, private keys, tokens), prompt-injection patterns, binaries, archive bombs, and oversized packages as blockers; external links are warnings. POST .../publish with name creates the skill and emits an immutable published version pinned to the scanned checksum.
Turn-time loading
Sessions installed from a version with skill pins load published skill contents into context (capped, tenant-private skills only for their tenant). Skills never carry credentials.
const skill = await cencori.skills.create({ name: 'Refund policy' });
await cencori.skills.createVersion(skill.id, { version: '1.0.0', content: '# Refunds\n\n30 days.' });
await cencori.skills.publishVersion(skill.id, '1.0.0', { reviewed_by: 'bola' });
