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
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
id | string | yes | The hub id (skl_ + ULID). |
|
owner_subject | string | yes | The person who owns the record. |
|
kind | enum | yes |
| |
slug | string | yes | The stable folder name (SKILL.md lives in a folder with this name). |
|
title | string | yes |
| |
summary | string | yes |
| |
audience | enum | yes | The sharing audience, the same four openvibe-sdk/share uses. |
|
official | boolean | yes | True for OpenVibe's own records; the gallery shows them beside community ones. | |
tools | array of enum | yes |
| |
version | integer | yes | The newest coded_skill_versions row for this record. |
|
body | string | yes | The skill's SKILL.md body (or the rule/command/hook/MCP text), untrusted Markdown. |
|
created_at | string | yes |
| |
updated_at | string | yes |
|
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 }] }