Skill schema
Generated from the canonical schema
schemas/skill.schema.jsonbyscripts/generate-schema-docs.mjs— do not edit this page by hand.
Canonical (Stage 3A, owner-approved 2026-09-01). The stable registry identity for one reusable agent skill. Skill contents are NOT a TfP format: every version is an Agent Skills-compatible package (agentskills.io — SKILL.md plus standard supporting files); TfP adds registry identity, provenance, immutable versioning, discovery/curation, and ProblemRevision attachment. Any User may publish a Skill independently of any Campaign; the display address @{handle}/{slug} is derived presentation from the publisher's CURRENT handle — renaming a handle changes the display address but never the Skill's identity or any reference (durable references use ids). First-party TfP Skills use the same mechanism, published by a first-party publisher account (e.g. @tfp). Campaigns curate/recommend Skills; they do not own a separate kind of Skill. Organization publishing is deferred. The current/default version is derived: the highest version_number whose yanked_at is null. Agent Skills package metadata lives on each SkillVersion.
Schema version: 0.2.0 · $id: https://tokensforprogress.org/schemas/skill.schema.json
Fields
id
Type: string · Required: yes · Mutable: no · Pattern: ^skl_[0-9a-z]{10,32}$
Stable opaque identifier — the durable identity every reference uses. Canonical URL: /skills/{id}.
Example: "skl_01jf95aa1lean"
slug
Type: string · Required: yes · Mutable: yes · Pattern: ^[a-z0-9]+(-[a-z0-9]+)*$
URL-safe short name, unique WITHIN the publisher's Skills (publisher_user_id + slug), not globally. Appears in the derived display address @{handle}/{slug} and pretty URLs; never a durable reference.
Example: "lean-mathlib-proving"
publisher_user_id
Type: string · Required: yes · Mutable: no · Pattern: ^usr_[0-9a-z]{10,32}$
The User who publishes/maintains this Skill on TfP (registrant). Ownership and the derived namespace hang off this stable id. Publishing is distinct from authorship: an imported Skill's underlying content may be authored upstream by someone else — see SkillVersion source provenance.
Example: "usr_01jf8xw3tempo"
created_at
Type: string · Required: yes · Mutable: no
RFC 3339 UTC timestamp of creation.
Example: "2026-09-01T10:00:00Z"
updated_at
Type: string · Required: yes · Mutable: yes
RFC 3339 UTC timestamp of the most recent change to any mutable field.
Example: "2026-09-01T10:00:00Z"
JSON Schema source
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://tokensforprogress.org/schemas/skill.schema.json",
"title": "Skill",
"description": "Canonical (Stage 3A, owner-approved 2026-09-01). The stable registry identity for one reusable agent skill. Skill contents are NOT a TfP format: every version is an Agent Skills-compatible package (agentskills.io — SKILL.md plus standard supporting files); TfP adds registry identity, provenance, immutable versioning, discovery/curation, and ProblemRevision attachment. Any User may publish a Skill independently of any Campaign; the display address @{handle}/{slug} is derived presentation from the publisher's CURRENT handle — renaming a handle changes the display address but never the Skill's identity or any reference (durable references use ids). First-party TfP Skills use the same mechanism, published by a first-party publisher account (e.g. @tfp). Campaigns curate/recommend Skills; they do not own a separate kind of Skill. Organization publishing is deferred. The current/default version is derived: the highest version_number whose yanked_at is null. Agent Skills package metadata lives on each SkillVersion.",
"x-tfp-version": "0.2.0",
"type": "object",
"additionalProperties": false,
"required": [
"id",
"slug",
"publisher_user_id",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string",
"pattern": "^skl_[0-9a-z]{10,32}$",
"x-mutable": false,
"description": "Stable opaque identifier — the durable identity every reference uses. Canonical URL: /skills/{id}.",
"examples": [
"skl_01jf95aa1lean"
]
},
"slug": {
"type": "string",
"pattern": "^[a-z0-9]+(-[a-z0-9]+)*$",
"maxLength": 64,
"x-mutable": true,
"description": "URL-safe short name, unique WITHIN the publisher's Skills (publisher_user_id + slug), not globally. Appears in the derived display address @{handle}/{slug} and pretty URLs; never a durable reference.",
"examples": [
"lean-mathlib-proving"
]
},
"publisher_user_id": {
"type": "string",
"pattern": "^usr_[0-9a-z]{10,32}$",
"x-mutable": false,
"description": "The User who publishes/maintains this Skill on TfP (registrant). Ownership and the derived namespace hang off this stable id. Publishing is distinct from authorship: an imported Skill's underlying content may be authored upstream by someone else — see SkillVersion source provenance.",
"examples": [
"usr_01jf8xw3tempo"
]
},
"created_at": {
"type": "string",
"format": "date-time",
"x-mutable": false,
"description": "RFC 3339 UTC timestamp of creation.",
"examples": [
"2026-09-01T10:00:00Z"
]
},
"updated_at": {
"type": "string",
"format": "date-time",
"x-mutable": true,
"description": "RFC 3339 UTC timestamp of the most recent change to any mutable field.",
"examples": [
"2026-09-01T10:00:00Z"
]
}
}
}