Skill Registry API: schemas

The request and response bodies of the operations in this API.

CreateSkillBundleDto

PropertyTypeRequiredDescription
resourcesarray of CreateSkillBundleResourceDtoyesEvery non-SKILL.md bundle file. A nested SKILL.md resource declares a sub-skill. Pass an empty array for a SKILL.md-only bundle.
scopeSpaceKindyesAuthoring scope — only org, project, or user.
skillMarkdownstringyesRaw SKILL.md content (YAML frontmatter + body). Frontmatter is strictly validated — name and description are required.
slugstringyesHierarchical slug, e.g. software-engineering/requirements.

CreateSkillBundleResourceDto

PropertyTypeRequiredDescription
contentBase64string (base64)yesFile bytes, base64-encoded.
relPathstringyesForward-slash path relative to the skill directory, e.g. reference/api.md or scripts/lint.sh. No leading slash, no .. segments.
typeSkillResourceTypeyesClassification of the file. The server re-derives this deterministically from relPath; the supplied value documents author intent.

CreateSkillBundleResponseDto

PropertyTypeRequiredDescription
contentHashstringyesSHA-256 content hash of the top-level skill bundle.
ingestedSkillSlugsarray of stringyesSlugs of every skill written by this call — the top-level skill plus any nested sub-skills, parents first.
revisionNumbernumberyesServer-generated revision number of the top-level skill.
skillIdstringyesId of the top-level skill the bundle authored.
slugstringyesSlug of the top-level skill.

CreateSkillBundleResponseDtoDataEnvelope

PropertyTypeRequiredDescription
dataCreateSkillBundleResponseDtoyes

CreateSkillDto

PropertyTypeRequiredDescription
categorystringnoFree-form grouping tag.
descriptionstringyesWhat the skill does + when to use it. Drives discovery.
injectionModeSkillInjectionModeno
kindSkillKindno
namestringyesSKILL.md name — lowercase letters, numbers, hyphens.
parentSlugstringnoParent skill slug when creating a nested sub-skill.
scopeSpaceKindyesAuthoring scope — only org, project, or user.
skillMarkdownstringyesRaw SKILL.md content (frontmatter + body).
slugstringyesHierarchical slug, e.g. software-engineering/requirements.
tagsarray of stringno

CreateSkillRepositoryDto

PropertyTypeRequiredDescription
refstringnoBranch, tag, or commit to ingest. Defaults to the repo default branch.
rootPathstringnoSub-directory to scan for SKILL.md bundles. Defaults to the repo root.
urlstring (uri)yesHTTP(S) clone URL of the git repository.

EvaluationVerdict

Type: one of "pass", "fail"

ExactSkillRevisionAuthorityResponseDto

PropertyTypeRequiredDescription
bundleSkillBundleResponseDtoyes
contentExactSkillRevisionContentDtoyesCanonical stored revision content. Consumers recompute contentHash with the kernel Skill revision hash contract.
contentHashstring (sha256)yes
contentHashVersionone of 2yes
ownerSpaceRefSkillOwnerSpaceRefDtoyes
resourceIdstringyes
revisionIdstringyes
revisionNumbernumberyes

ExactSkillRevisionAuthorityResponseDtoDataEnvelope

PropertyTypeRequiredDescription
dataExactSkillRevisionAuthorityResponseDtoyes

ExactSkillRevisionContentDto

PropertyTypeRequiredDescription
dependenciesarray of objectyes
resourcesarray of SkillBundleResourceDtoyes
schemaVersionone of 2yes
skillMarkdownstringyesStored SKILL.md body before mount-time frontmatter rendering.

ProblemActionableBy

Who can act on this refusal: user (correct the input, sign in), org-admin (an administrator of the organisation), platform (the operators of this installation), none (nobody — it cannot succeed). ABSENT when not known; never guessed.

Type: one of "user", "org-admin", "platform", "none"

ProblemDetailsDto

RFC 9457 problem document. The declared members are the reserved core; extension members are TOP-LEVEL and OPEN, owned by the refusing plane.

PropertyTypeRequiredDescription
actionableByProblemActionableBynoWho can act on this refusal: user (correct the input, sign in), org-admin (an administrator of the organisation), platform (the operators of this installation), none (nobody — it cannot succeed). ABSENT when not known; never guessed.
codestringyesSCREAMING_SNAKE_CASE. The machine-branchable refusal, and the value a policy rule, a retry predicate and a UI branch all name.
detailstringnoHuman-readable and specific to THIS occurrence.
errorsarray of ProblemFieldIssueDtonoField-level issues, when the refusal is about the request body.
instancestringnoURI reference identifying the occurrence — a request path, a run, a row.
paramsmap of string or number or booleannoSafe i18n interpolation values for the message keyed by code — typed and allowlisted per code by its declaration. Never server-authored copy, never internal diagnostics.
retryProblemRetrynoWhat a retry can achieve: transient (later, unchanged), after-change (only after someone changes something), never (a defect until a fixed version ships). ABSENT when not known.
statusnumberyesThe HTTP status code, repeated in the body so a logged document is self-contained.
titlestringyesShort, human-readable, and STABLE for a given type. Never per-occurrence — that is detail.
traceIdstringnoW3C trace-context trace-id, present when the caller sent a traceparent. Omitted rather than invented when it did not.
typestringyesAbsolute URI identifying the refusal TYPE. Derived one-to-one from code, so a caller may branch on either and can never be told two different things. Never about:blank.

ProblemFieldIssueDto

PropertyTypeRequiredDescription
codestringnoSCREAMING_SNAKE_CASE code of THIS issue, for a frontend i18n key. Present when the issue was minted by a declared problem.
detailstringyesProse for logs and developers. A frontend localises from code + params instead.
paramsmap of string or number or booleannoSafe i18n interpolation values for this issue's code.
pointerstringyesRFC 6901 JSON Pointer into the request body. Root is "/".

ProblemRetry

What a retry can achieve: transient (later, unchanged), after-change (only after someone changes something), never (a defect until a fixed version ships). ABSENT when not known.

Type: one of "transient", "after-change", "never"

RejectSkillDto

PropertyTypeRequiredDescription
reasonstringyesWhy the skill version was rejected.

RescopeSkillDto

PropertyTypeRequiredDescription
targetProjectIdstringnoProject that becomes the new owner. REQUIRED when targetScope = project; rejected for any other target.
targetScopeSpaceKindyesTarget owner tier. Must be a legal promotion of the row's current tier (user → project|org, project → org) — demotion, same-tier, and moves into/out of biome/system are refused with 422. app and session are not tiers this registry owns at all and are refused with 400.

RestoreSkillRevisionDto

PropertyTypeRequiredDescription
targetRevisionNumbernumberyesHistorical revision number to COPY into a new working draft so it can be edited. The live revision is untouched, and the copy is a NEW revision that must clear the full governance gate (review, separation of duties, and a fresh eval run) before it can be served. To simply return to this revision, use POST …/governance/rollback instead.

RollbackSkillRevisionDto

PropertyTypeRequiredDescription
targetRevisionNumbernumberyesThe approved revision number to serve. Must belong to this skill, must be approved, and must not already be the served revision.

SearchSkillsQueryDto

PropertyTypeRequiredDescription
kindSkillKindno
limitnumbernoMax results to return (1–100). Defaults to 20.
querystringyesFree-text query matched against name + description.

SetSystemSkillEnabledDto

PropertyTypeRequiredDescription
enabledbooleanyesDisabling a MANDATORY skill is refused, not silently ignored: the baseline resolver unions the core back in regardless, so accepting it would report a change that does not happen.
slugstringyes

SkillAssertionGradingMethod

Type: one of "mechanical", "llm_judge"

SkillAssertionResultDto

PropertyTypeRequiredDescription
assertionstringyesThe assertion text, copied verbatim from the test case.
evidencestringyesConcrete evidence for the verdict — a quote from the actual output or a mechanical observation. A PASS requires real evidence, never an opinion.
methodSkillAssertionGradingMethodyes
verdictEvaluationVerdictyes

SkillAvailableAction

Lifecycle transitions the caller can perform on this skill now: those legal from its current lifecycle state, whose route admits the caller org role, and that separation of duties allows. Render governance actions from this list only.

Type: one of "submit_for_review", "approve", "reject", "deprecate"

SkillBundleFileMode

Type: one of "read-only", "executable"

SkillBundleResourceDto

PropertyTypeRequiredDescription
contentstringyesFile bytes, base64-encoded.
modeSkillBundleFileModeyes
relPathstringyesForward-slash path relative to the skill directory.
sizeBytesnumberyesDecoded byte length of the file.
typeSkillResourceTypeyes

SkillBundleResponseDto

PropertyTypeRequiredDescription
allowedToolsstring or nullyes
compatibilitystring or nullyes
contentHashstringyesSHA-256 of the bundle; verified at mount time.
contentHashVersionone of 2yes
dependenciesarray of objectyes
descriptionstringyesThe skill's resolved description. Part of the mountable identity so consumers (e.g. hot skill-attach) can record it without a second metadata lookup.
licensestring or nullyes
metadatamap of stringyes
namestringyes
resourceIdstringyesIdentity of the skill resource. With revisionId and contentHash it is the exact pin the exact-revision authority resolves.
resourcesarray of SkillBundleResourceDtoyes
revisionIdstringyesIdentity of the revision this bundle is the content of.
revisionNumbernumberyesServer-generated live revision number.
skillMarkdownstringyesRaw SKILL.md (frontmatter + body).
slugstringyes

SkillBundleResponseDtoDataEnvelope

PropertyTypeRequiredDescription
dataSkillBundleResponseDtoyes

SkillCatalogEntryDto

PropertyTypeRequiredDescription
categorystring or nullyes
descriptionstringyes
kindSkillKindyes
namestringyes
slugstringyes
tagsarray of stringyes

SkillCatalogEntryDtoDataArrayEnvelope

PropertyTypeRequiredDescription
dataarray of SkillCatalogEntryDtoyes

SkillEvalBenchmarkDto

PropertyTypeRequiredDescription
passRateDeltanumberyeswithSkill.passRate - withoutSkill.passRate. Positive = helps.
totalDurationMsDeltanumberyeswithSkill.totalDurationMs - withoutSkill.totalDurationMs.
totalTokensDeltanumberyeswithSkill.totalTokens - withoutSkill.totalTokens. Positive = costs.
triggeringAccuracyDeltanumberyeswithSkill.triggeringAccuracy - withoutSkill.triggeringAccuracy.
withSkillSkillEvalConfigBenchmarkDtoyes
withoutSkillSkillEvalConfigBenchmarkDtoyes

SkillEvalCaseDto

PropertyTypeRequiredDescription
assertionsarray of stringyesVerifiable, specific, observable statements graded against the actual output (e.g. "The output file is valid JSON", "The report includes at least 3 recommendations"). Not vague, not brittle exact-phrase matches.
expectedOutputstringyesHuman-readable description of what a successful output looks like.
filesarray of SkillEvalCaseFileDtonoOptional input files seeded into the sandbox /workspace/ before the run.
idstringyesAuthor-supplied stable identifier, unique within the suite.
promptstringyesA realistic user message — the prompt sent to the agent.
triggerExpectationSkillTriggerExpectationyesWhether the skill is expected to load into context for this prompt.

SkillEvalCaseFileDto

PropertyTypeRequiredDescription
contentstringyesUTF-8 file content.
pathstringyesForward-slash path relative to /workspace/.

SkillEvalCaseResultDto

PropertyTypeRequiredDescription
assertionResultsarray of SkillAssertionResultDtoyes
caseIdstringyes
configSkillEvalRunConfigyes
durationMsnumberyesEnd-to-end turn duration in milliseconds.
gradingFailednumberyesAssertions that failed.
gradingPassRatenumberyespassed / total, in [0, 1].
gradingPassednumberyesAssertions that passed.
gradingTotalnumberyesTotal assertions graded.
outputstringyesThe agent’s final assistant reply text.
skillTriggeredbooleanyesWhether the skill under test actually loaded into context.
totalTokensnumberyesSum of input + output tokens across the turn.
triggeringCorrectbooleanyesWhether observed triggering matched the case expectation.

SkillEvalConfigBenchmarkDto

PropertyTypeRequiredDescription
configSkillEvalRunConfigyes
passRatenumberyesMean assertion pass rate across all cases, in [0, 1].
totalDurationMsnumberyesTotal wall-clock duration summed across every case (ms).
totalTokensnumberyesTotal tokens summed across every case.
triggeringAccuracynumberyesFraction of cases whose triggering matched expectation.

SkillEvalRunConfig

Type: one of "with_skill", "without_skill"

SkillEvalRunResponseDto

PropertyTypeRequiredDescription
benchmarkSkillEvalBenchmarkDto or nullyesAggregated benchmark; null until the run completes.
caseResultsarray of SkillEvalCaseResultDtoyes
completedAtstring or nullyes
failureReasonstring or nullyesFailure detail when status is failed; null otherwise.
gatePassedboolean or nullyesWhether this run satisfies the governance gate (with-skill pass rate ≥ threshold AND positive delta). Null while running / on failure.
iterationnumberyesWhich iteration of the eval-driven loop this run is.
runIdstringyes
skillIdstringyes
startedAtstringyes
statusSkillEvalRunStatusyes

SkillEvalRunResponseDtoDataEnvelope

PropertyTypeRequiredDescription
dataSkillEvalRunResponseDtoyes

SkillEvalRunStatus

Type: one of "running", "completed", "failed"

SkillEvalSuiteResponseDto

PropertyTypeRequiredDescription
baselineAgentIdstringyes
casesarray of SkillEvalCaseDtoyes
nextIterationnumberyesThe iteration number the NEXT eval run will be recorded as.
skillIdstringyes

SkillEvalSuiteResponseDtoDataEnvelope

PropertyTypeRequiredDescription
dataSkillEvalSuiteResponseDtoyes

SkillGovernanceAction

Type: one of "submit_for_review", "approve", "reject", "deprecate", "restore_to_draft", "rollback"

SkillGovernanceEventDto

PropertyTypeRequiredDescription
actionSkillGovernanceActionyes
actorIdstringyes
createdAtstringyes
fromStateSkillLifecycleStateyes
notestring or nullyes
toStateSkillLifecycleStateyes

SkillGovernanceStateDto

PropertyTypeRequiredDescription
approvedByIdstring or nullyes
contentHashstringyes
createdByIdstring or nullyes
hasEvalSuitebooleanyesWhether an evaluation suite has been submitted.
historyarray of SkillGovernanceEventDtoyes
latestEvalGatePassedboolean or nullyesWhether the LATEST eval run satisfies the governance gate; null when no suite, no run, or the latest run is still running / failed.
latestEvalIterationnumber or nullyesIteration number of the latest eval run; null when no run exists.
lifecycleStateSkillLifecycleStateyes
requiresExplicitApprovalbooleanyesWhether this tier mandates an explicit human approval.
revisionNumbernumberyes
riskIndicatorsarray of SkillRiskIndicatoryesDeterministic indicators that fired during the risk scan.
riskTierSkillRiskTieryes
skillIdstringyes
stableRevisionNumbernumber or nullyes

SkillGovernanceStateDtoDataEnvelope

PropertyTypeRequiredDescription
dataSkillGovernanceStateDtoyes

SkillInjectionMode

Type: one of "always", "context_dependent"

SkillKind

Type: one of "procedural", "deliverable", "system"

SkillLifecycleState

Type: one of "draft", "in_review", "approved", "deprecated"

SkillOwnerSpaceDto

PropertyTypeRequiredDescription
biomeIdstringno
orgIdstringno
projectIdstringno
tierone of "system", "org", "project", "app", "session", "biome", "user"yes
userIdstringno

SkillOwnerSpaceRefDto

PropertyTypeRequiredDescription
fenceone of "global", "tenant"yes
orgIdstring or nullyes
spaceSkillOwnerSpaceDtoyes

SkillRepositoryResponseDto

PropertyTypeRequiredDescription
createdAtstringyes
idstringyes
lastSyncedAtstring or nullyes
lastSyncedRefstring or nullyesResolved commit sha of the last successful sync.
refstring or nullyes
rootPathstring or nullyes
updatedAtstringyes
urlstringyes

SkillRepositoryResponseDtoDataArrayEnvelope

PropertyTypeRequiredDescription
dataarray of SkillRepositoryResponseDtoyes

SkillRepositoryResponseDtoDataEnvelope

PropertyTypeRequiredDescription
dataSkillRepositoryResponseDtoyes

SkillRepositorySyncResultDto

PropertyTypeRequiredDescription
ingestedSkillSlugsarray of stringyesSlugs of skills created or updated by this sync.
removedSkillSlugsarray of stringyesSlugs removed because they no longer exist in the repo.
repositoryIdstringyes
resolvedRefstringyesResolved commit sha actually ingested.
syncedAtstringyes

SkillRepositorySyncResultDtoDataEnvelope

PropertyTypeRequiredDescription
dataSkillRepositorySyncResultDtoyes

SkillResourceType

Type: one of "reference", "script", "asset", "template", "sub_skill"

SkillResponseDto

PropertyTypeRequiredDescription
availableActionsarray of SkillAvailableActionyesLifecycle transitions the caller can perform on this skill now: those legal from its current lifecycle state, whose route admits the caller org role, and that separation of duties allows. Render governance actions from this list only.
biomeIdstring or nullyesThe biome that contributed this skill; null for a skill no biome contributed. The value ?biomeId= filters on.
categorystring or nullyes
contentHashstring or nullyes
createdAtstringyes
descriptionstringyes
draftRevisionNumbernumber or nullyesWorking draft revision number; null when no draft exists.
idstringyes
injectionModeSkillInjectionModeyes
kindSkillKindyes
lifecycleStateSkillLifecycleState or nullyes
namestringyes
parentSlugstring or nullyesParent skill slug; null for a top-level skill.
policyRevisionnumber or nullyesMonotonic authorization policy revision that bracketed availableActions; null when no policy was evaluated (a role-gate projection, which this one is).
requiredCapabilitiesarray of stringyesCapabilityRef strings this skill needs to drive the tools it orchestrates (SkillFrontmatter.requiredCapabilities). Empty for most procedural skills. When an armed skill declares some, the llm-registry auto-grant engine unions them into the required-capability manifest of the arming agent.
revisionNumbernumber or nullyesServer-generated live revision number; null before approval.
riskTierSkillRiskTier or nullyes
scopeSpaceKindyes
skillMarkdownstring or nullyesRaw SKILL.md — present on single-skill reads, null in lists.
slugstringyesHierarchical slug, e.g. software-engineering/requirements.
sourceKindSkillSourceKindyes
surfacesarray of SkillSurface or nullyesOptional surface gate. null = applies to BOTH surfaces (the default). A non-null array lists the surfaces this skill applies to; the always-on resolver filters by this against the requesting surface.
tagsarray of stringyes
updatedAtstringyes
upstreamChangedSinceForkboolean or nullyesFor a customer fork of a contributed skill: true when a push has delivered a revision newer than the one the fork was taken from. Null when the skill is not a fork.

SkillResponseDtoDataArrayEnvelope

PropertyTypeRequiredDescription
dataarray of SkillResponseDtoyes

SkillResponseDtoDataEnvelope

PropertyTypeRequiredDescription
dataSkillResponseDtoyes

SkillRevisionHistoryEntryDto

PropertyTypeRequiredDescription
approvedAtstring or nullyes
contentHashstringyes
createdAtstringyes
idstringyes
isDraftbooleanyesWhether this revision is the current working draft.
isLivebooleanyesWhether this revision is the currently live revision.
lifecycleStateSkillLifecycleStateyes
restoredFromRevisionNumbernumber or nullyesHistorical revision copied to create this draft; null for authored/source revisions.
revisionNumbernumberyes
riskTierSkillRiskTieryes
sourceRevisionstring or nullyes

SkillRevisionHistoryEntryDtoDataArrayEnvelope

PropertyTypeRequiredDescription
dataarray of SkillRevisionHistoryEntryDtoyes

SkillRiskIndicator

Deterministic indicators that fired during the risk scan.

Type: one of "script_resource", "mcp_tool_reference", "network_call", "path_traversal", "hardcoded_credential", "shell_invocation"

SkillRiskTier

Type: one of "low", "medium", "high"

SkillSourceKind

Type: one of "system", "biome", "authored", "git_repo"

SkillSurface

Type: one of "workflow", "agent-session"

SkillTreeNodeDto

PropertyTypeRequiredDescription
childrenarray of SkillTreeNodeDtoyes
skillSkillResponseDtoyes

SkillTreeNodeDtoDataArrayEnvelope

PropertyTypeRequiredDescription
dataarray of SkillTreeNodeDtoyes

SkillTriggerExpectation

Whether the skill is expected to load into context for this prompt.

Type: one of "should_trigger", "should_not_trigger"

SpaceKind

Type: one of "system", "org", "project", "app", "session", "biome", "user"

StringDataArrayEnvelope

PropertyTypeRequiredDescription
dataarray of stringyes

SystemSkillBaselineEntryDto

PropertyTypeRequiredDescription
enabledbooleanyesWhether this org mounts it. Always true for a mandatory skill — reporting otherwise would contradict what the running system does.
mandatorybooleanyesMounted for every agent regardless of configuration. An agent without it cannot function, so it cannot be disabled — the toggle is shown read-only rather than hidden, so its presence in every session is explained rather than mysterious.
namestringyes
slugstringyes

SystemSkillBaselineEntryDtoDataArrayEnvelope

PropertyTypeRequiredDescription
dataarray of SystemSkillBaselineEntryDtoyes

UpdateSkillDto

PropertyTypeRequiredDescription
categorystringno
descriptionstringno
injectionModeSkillInjectionModeno
namestringno
skillMarkdownstringnoNew SKILL.md content. When changed, a server-numbered draft revision is created.
tagsarray of stringno

UpsertSkillEvalSuiteDto

PropertyTypeRequiredDescription
baselineAgentIdstringyesllm-registry-api Agent id of the GENERIC baseline composition the eval runs against. Both A/B configs use this composition; the with-skill config additionally mounts the skill under test. Pick a generic agent composition with no domain skills so the delta isolates THIS skill.
casesarray of SkillEvalCaseDtoyes