CodesSkill codes.skill@1

Generated at from openvibe-contracts v0.419.0 and openvibe-sdk v0.161.0.

Version
1.0.0
Owner
codes
Visibility
public
Status
active
Compatibility
backward
Schema
https://openvibe.network/contracts/codes/skill.v1.json

codes.skill@1: one skill, rule, MCP server, command or hook in the OpenVibe.Codes hub (the Compute plan §5, E6). KIND says what it is: a skill is a SKILL.md folder the agent tools load, a rule is text for the tools' AGENTS.md/CLAUDE.md files, an mcp record is one MCP server definition, and command/hook are a slash command and a hook. SLUG is the folder name (lowercase letters, digits and hyphens) and is stable within one owner. VERSION is the newest record in codes.skill-version@1; BODY is that version's content. AUDIENCE is the four sharing audiences of openvibe-sdk/share: private (the owner only), people (the owner and the members listed in codes_skill_members), link (anyone with the link, not in the gallery) and public (the gallery, search and agents). A private, people or link record is never in the gallery. OFFICIAL marks OpenVibe's own skills. TOOLS names the harnesses the skill is written for; an empty list means every tool the Link knows. The body is untrusted text: the page renders it through the markup gate (escape first, then a small Markdown subset), never as HTML.

Fields

FieldTypeRequiredDescriptionConstraints
idstringyesThe hub id (skl_ + ULID).
  • pattern ^skl_[0-9A-HJKMNP-TV-Z]{26}$
owner_subjectstringyesThe person who owns the record.
  • pattern ^usr_[0-9A-HJKMNP-TV-Z]{26}$
kindenumyes
  • one of "skill", "rule", "mcp", "command", "hook"
slugstringyesThe stable folder name (SKILL.md lives in a folder with this name).
  • pattern ^[a-z0-9][a-z0-9-]{0,63}$
titlestringyes
  • minLength 1
  • maxLength 120
summarystringyes
  • maxLength 500
audienceenumyesThe sharing audience, the same four openvibe-sdk/share uses.
  • one of "public", "link", "people", "private"
officialbooleanyesTrue for OpenVibe's own records; the gallery shows them beside community ones.
toolsarray of enumyes
  • maxItems 8
  • unique items
  • items: one of "claude-code", "codex", "opencode", "command-code", "minimax-code", "aider", "agents"
versionintegeryesThe newest coded_skill_versions row for this record.
  • minimum 1
bodystringyesThe skill's SKILL.md body (or the rule/command/hook/MCP text), untrusted Markdown.
  • minLength 1
  • maxLength 131072
created_atstringyes
  • format date-time
updated_atstringyes
  • format date-time

Examples

From the contract's own test fixtures: valid ones validate, rejected ones must fail.

Valid: mcp
{
  "id": "skl_01M4XEV0JT93CAYTXVD6V0QW3B",
  "owner_subject": "usr_01M4XEV0JT93CAYTXVD6V0QW1F",
  "kind": "mcp",
  "slug": "openvibe-know",
  "title": "OpenVibe Know",
  "summary": "The shared knowledge lookup as an MCP server.",
  "audience": "people",
  "official": true,
  "tools": [
    "claude-code",
    "codex"
  ],
  "version": 2,
  "body": "{\"command\":\"ov-know-mcp\",\"args\":[]}",
  "created_at": "2026-11-07T09:00:00.000Z",
  "updated_at": "2026-11-07T11:00:00.000Z"
}
Valid: rule
{
  "id": "skl_01M4XEV0JT93CAYTXVD6V0QW2A",
  "owner_subject": "usr_01M4XEV0JT93CAYTXVD6V0QW1F",
  "kind": "rule",
  "slug": "no-force-push",
  "title": "Never force-push",
  "summary": "A branch is append-only once somebody may have read it.",
  "audience": "private",
  "official": false,
  "tools": [],
  "version": 1,
  "body": "Never force-push a shared branch; add a commit instead.",
  "created_at": "2026-11-07T09:00:00.000Z",
  "updated_at": "2026-11-07T09:00:00.000Z"
}
Valid: skill
{
  "id": "skl_01M4XEV0JT93CAYTXVD6V0QW1E",
  "owner_subject": "usr_01M4XEV0JT93CAYTXVD6V0QW1F",
  "kind": "skill",
  "slug": "ship-a-change",
  "title": "Ship a change",
  "summary": "Open a pull request, wait for CI, and merge only when it is green.",
  "audience": "public",
  "official": false,
  "tools": [
    "claude-code",
    "codex",
    "opencode"
  ],
  "version": 3,
  "body": "---\nname: ship-a-change\ndescription: Open a PR, wait for CI, and merge only when it is green.\n---\n\n# Ship a change\n\n1. Read the repository's own instructions.\n2. Run the narrowest test that proves the change.\n3. Open the pull request with what changed and how it was checked.\n",
  "created_at": "2026-11-07T09:00:00.000Z",
  "updated_at": "2026-11-07T10:30:00.000Z"
}
Rejected: bad-audience
{
  "id": "skl_01M4XEV0JT93CAYTXVD6V0QW1E",
  "owner_subject": "usr_01M4XEV0JT93CAYTXVD6V0QW1F",
  "kind": "skill",
  "slug": "ship-a-change",
  "title": "Ship a change",
  "summary": "",
  "audience": "everyone",
  "official": false,
  "tools": [],
  "version": 1,
  "body": "text",
  "created_at": "2026-11-07T09:00:00.000Z",
  "updated_at": "2026-11-07T09:00:00.000Z"
}
Rejected: bad-id
{
  "id": "skl_bad",
  "owner_subject": "usr_01M4XEV0JT93CAYTXVD6V0QW1F",
  "kind": "skill",
  "slug": "ship-a-change",
  "title": "Ship a change",
  "summary": "",
  "audience": "public",
  "official": false,
  "tools": [],
  "version": 1,
  "body": "text",
  "created_at": "2026-11-07T09:00:00.000Z",
  "updated_at": "2026-11-07T09:00:00.000Z"
}
Rejected: bad-kind
{
  "id": "skl_01M4XEV0JT93CAYTXVD6V0QW1E",
  "owner_subject": "usr_01M4XEV0JT93CAYTXVD6V0QW1F",
  "kind": "plugin",
  "slug": "ship-a-change",
  "title": "Ship a change",
  "summary": "",
  "audience": "public",
  "official": false,
  "tools": [],
  "version": 1,
  "body": "text",
  "created_at": "2026-11-07T09:00:00.000Z",
  "updated_at": "2026-11-07T09:00:00.000Z"
}
Rejected: bad-tools
{
  "id": "skl_01M4XEV0JT93CAYTXVD6V0QW1E",
  "owner_subject": "usr_01M4XEV0JT93CAYTXVD6V0QW1F",
  "kind": "skill",
  "slug": "Ship a change",
  "title": "Ship a change",
  "summary": "",
  "audience": "public",
  "official": false,
  "tools": [
    "not-a-tool"
  ],
  "version": 1,
  "body": "text",
  "created_at": "2026-11-07T09:00:00.000Z",
  "updated_at": "2026-11-07T09:00:00.000Z"
}
Rejected: missing-body
{
  "id": "skl_01M4XEV0JT93CAYTXVD6V0QW1E",
  "owner_subject": "usr_01M4XEV0JT93CAYTXVD6V0QW1F",
  "kind": "skill",
  "slug": "ship-a-change",
  "title": "Ship a change",
  "summary": "",
  "audience": "public",
  "official": false,
  "tools": [],
  "version": 1,
  "created_at": "2026-11-07T09:00:00.000Z",
  "updated_at": "2026-11-07T09:00:00.000Z"
}

Validate

const contracts = require('openvibe-contracts');
contracts.validate('codes.skill@1', value);   // { valid, errors: [{ path, message }] }