A contribution is a typed envelope a biome ships:
1{
2 "kind": "capability",
3 "id": "my-contribution-slug",
4 "manifest": { }
5}kind— one of the values in the catalog below. Closed set; the wire values are a contract and are never renamed.id— kind-local slug, unique per(kind, biome). The platform namespaces it with the biome id at install time.manifest— the kind-specific body, validated fail-fast against that kind's schema.
Two equivalent delivery forms, same envelope: one *.contribution.json file per entry
in the biome's contributions/ directory, or an inline entry under
xema.contributions.inline[]. The directory name is a FIXED CONVENTION — biome-sdk's
index builder and every biome-host parser hardcode it. It is not configurable, and the
xema.contributions.directory key that once set it was deleted in kernel-contracts 29:
BiomeContributionsSchema is .strict() with only inline, so a manifest carrying it
now fails to parse rather than being ignored.
Catalog
The Ingestion column is a fact, not a promise: it is derived from the parser registry biome-host actually runs. A kind with no ingestion path silently does nothing if you ship it as a contribution — use the delivery path named in its note instead.
kind | Enum member | Ingestion | Note |
|---|---|---|---|
workflow-step | ContributionKind.WorkflowStep | biome-host parser (WorkflowStepParser) | — |
agent-skill | ContributionKind.AgentSkill | biome-host parser (AgentSkillParser) | — |
agent-kernel | ContributionKind.AgentKernel | biome-host parser (AgentKernelParser) | — |
model-lane | ContributionKind.ModelLane | biome-host parser (ModelLaneParser) | One key in the OPEN MODEL-LANE vocabulary the Model Resolution Matrix routes on — redline, line-edit, calculate — declared by whoever does that kind of work. |
model-purpose | ContributionKind.ModelPurpose | biome-host parser (ModelPurposeParser) | One key in the OPEN MODEL-PURPOSE vocabulary — a use the platform or a biome makes of a model on NOBODY'S behalf: summarising a memory, embedding a document, expanding a query, judging an evaluation. |
widget-kind | ContributionKind.WidgetKind | biome-host parser (WidgetKindParser) | — |
surface-kind | ContributionKind.SurfaceKind | biome-host parser (SurfaceKindParser) | A VISTA SURFACE KIND contributed by a biome: the render kind a Vista preview tab can hold, declared as a bare biome-local slug plus a version, display name, summary, and an opaque JSON payloadSchema. |
artifact-type | ContributionKind.ArtifactType | biome-host parser (ArtifactTypeParser) | An artifact type contributed by a biome to the artifact-store schema-version registry (ArtifactTypeRegistryService). |
template-kind | ContributionKind.TemplateKind | biome-host parser (TemplateKindParser) | An open Template-kind descriptor owned by template-registry-api. |
design-system-kind | ContributionKind.DesignSystemKind | biome-host parser (DesignSystemKindParser) | An open DesignSystem-kind descriptor owned by template-registry-api. |
template | ContributionKind.Template | biome-host parser (TemplateParser) | An authored Template contribution owned by template-registry-api. |
design-system | ContributionKind.DesignSystem | biome-host parser (DesignSystemParser) | An authored DesignSystem contribution owned by template-registry-api. |
inquiry-kind | ContributionKind.InquiryKind | biome-host parser (InquiryKindParser) | An inquiry kind contributed by a biome to the inquiry-contracts InquiryKindSchemaRegistry (kind-registry.ts). |
role-capability | ContributionKind.RoleCapability | biome-host parser (RoleCapabilityParser) | A role capability bundle contributed by a biome. |
biome-install-schema | ContributionKind.BiomeInstallSchema | RESERVED — no contribution ingestion (category 3) | No parser, and none is wanted: the install-wizard resource-selection schema is an OPAQUE, browser-facing JSON Schema that biome-host-api serves on demand from the biome's convention install-schema/ directory (install.json plus an optional ui-schema.json) via GET /platform/biomes/server/:id/install-schema. |
icon | ContributionKind.Icon | RESERVED — no contribution ingestion (category 3) | No parser, and none is wanted: icons are BYTE ASSETS, not manifests — biome-host-api serves each one straight off disk from the biome's convention icons/ directory via the public CDN-asset route GET /platform/biomes/server/:id/icons/:slug.svg, discovered by on-disk presence and never indexed. |
project-kit | ContributionKind.ProjectKit | biome-host parser (ProjectKitParser) | A project-kit bundle contributed by a biome. |
provisioning-scaffold | ContributionKind.ProvisioningScaffold | RESERVED — no contribution ingestion (category 3) | No parser: a provisioning scaffold is declared in the manifest's xema.provisioning[] and authored as provisioning/<id>.yaml plus an optional provisioning/<id>/ template tree, and agent-session-api's provisioning-plan-resolver PULLS it over HTTP per session bootstrap from biome-host-api's GET /platform/biomes/server/:id/provisioning-scaffolds. |
connector-adapter | ContributionKind.ConnectorAdapter | biome-host parser (ConnectorAdapterParser) | A concrete connector provider contributed by a biome inside an adapter kind. |
inbound-endpoint | ContributionKind.InboundEndpoint | biome-host parser (InboundEndpointParser) | An inbound HTTP endpoint a biome needs the platform to expose ON ITS BEHALF, so the biome's own service is never reachable from outside. |
workflow-config | ContributionKind.WorkflowConfig | biome-host parser (WorkflowConfigParser) | Workflow-config content shipped by a biome. |
deliverable-spec | ContributionKind.DeliverableSpec | biome-host parser (DeliverableSpecParser) | A deliverable-spec contributed by a biome. |
workspace-manifest | ContributionKind.WorkspaceManifest | biome-host parser (WorkspaceManifestParser) | A workspace manifest contributed by a biome. |
tool-profile | ContributionKind.ToolProfile | biome-host parser (ToolProfileParser) | A tool-profile contributed by a biome. |
mcp-catalog | ContributionKind.McpCatalog | biome-host parser (McpCatalogParser) | An MCP catalog entry contributed by a biome — a catalog manifest naming a connectable MCP service and the tools it exposes. |
capability | ContributionKind.Capability | biome-host parser (CapabilityParser) | A CapabilityRef descriptor contributed by a biome — title, summary, I/O schemas, risk tier, and approval flag. |
hook-point | ContributionKind.HookPoint | biome-host parser (HookPointParser) | One hook point an operation owner declares: the parser reads xema.components[].hookPoints of the biome manifest (a HookPointDeclaration from @xemahq/contracts/hook), one item per declaration, and routes them to capability-registry-api, which owns hook points and their bindings. |
resource-ownership | ContributionKind.ResourceOwnership | RESERVED — no contribution ingestion (category 3) | Its biome-host parser is gone: nothing ingests a contributed resource-ownership file any more, and none is wanted. |
resource-kind | ContributionKind.ResourceKind | RESERVED — no contribution ingestion (category 3) | Deprecated: no parser is registered, and none will be — superseded by AuthorizationModule (see the @deprecated note below). |
authorization-module | ContributionKind.AuthorizationModule | biome-host parser (AuthorizationModuleParser) | A biome's AUTHORIZATION MODULE: a standard OpenFGA schema-1.2 module (module <biome-id>) plus its mandatory .fga.yaml tests, inside the Xema governance envelope (AuthorizationModuleContributionManifestSchema, exported from @xemahq/contracts/authorization-module). |
resource-definition | ContributionKind.ResourceDefinition | biome-host parser (ResourceDefinitionParser) | A provider-neutral resource definition contributed by a biome: namespaced key, exact unit, measurement/aggregation semantics, bounded dimensions, supported limit kinds, and usage-export capability. |
stage-machine | ContributionKind.StageMachine | biome-host parser (StageMachineParser) | A deterministic asset stage machine contributed by a domain biome to a stage-machine host (today: mailops-api). |
search-type | ContributionKind.SearchType | biome-host parser (SearchTypeParser) | A search RESULT-TYPE declaration contributed by a biome — the XemaObjectKind/docType it covers, render/route hints (label, icon, deep-link template), the searchable-field set + embedding-eligibility default, and the authz mapping (resourceType + default ResourceVisibilityPattern). |
credential-strategy | ContributionKind.CredentialStrategy | biome-host parser (CredentialStrategyParser) | A DECLARATIVE credential-mint strategy contributed by a connector biome — the open credential-kind key it registers, the projection SCHEME (bearer / basic / header), and the field/template selectors that map a custody-resolved credential into an outbound token. |
canonical-object-type | ContributionKind.CanonicalObjectType | biome-host parser (CanonicalObjectTypeParser) | A CANONICAL BUSINESS-OBJECT TYPE in the shared enterprise Common Data Model — the system-agnostic counterpart to the closed platform XemaObjectKind. |
resource-role | ContributionKind.ResourceRole | biome-host parser (ResourceRoleParser) | A ROLE in the resource-role-binding vocabulary — <resourceKind>.<role>, a human title, what choosing a resource for it DOES, and the space tiers a consumer resolves it at. |
resource-role-default-binding | ContributionKind.ResourceRoleDefaultBinding | biome-host parser (ResourceRoleDefaultBindingParser) | A biome's SAFE ZERO-CONFIG DEFAULT for a role it declares — "absent any answer from the organisation, THIS resource plays the role" — routed to space-registry-api beside the declaration above. |
setting-definition | ContributionKind.SettingDefinition | biome-host parser (SettingDefinitionParser) | A SCOPED-SETTING DEFINITION a biome declares: a typed value (boolean, integer, duration or enum), its required default, the Space tiers (Org, Project) it may be stated at, and how it inherits (nearest, or tighten over a declared order). |
ingestion-source | ContributionKind.IngestionSource | biome-host parser (IngestionSourceParser) | A PULL-BASED EXTERNAL DATA SOURCE a biome declares so the platform can materialize an external dataset into a local catalog on a cadence, with change-detection and provenance. |
notification-descriptor | ContributionKind.NotificationDescriptor | biome-host parser (NotificationDescriptorParser) | A biome declares WHICH of its events reach a human, and what they say when they do — audience, category, severity, title/body templates, deep-link action, channel eligibility, and which later events close the row. |
contribution-kind | ContributionKind.ContributionKindDescriptor | biome-host parser (ContributionKindParser) | The DOOR. A biome DECLARES a contribution kind the kernel has never heard of — its local key, a versioned JSON Schema every contribution of that kind must satisfy, and the capability refs that ingest and optionally further-validate one. |
Kinds with no biome-host parser
Do not ship a contribution of these kinds expecting it to be picked up by
biome-host-api:
biome-install-schema— RESERVED — no contribution ingestion (category 3)icon— RESERVED — no contribution ingestion (category 3)provisioning-scaffold— RESERVED — no contribution ingestion (category 3)resource-ownership— RESERVED — no contribution ingestion (category 3)resource-kind— RESERVED — no contribution ingestion (category 3)
Adding a kind
Adding a ContributionKind touches exactly two files in the kernel: the enum, and the
kind-specific manifest schema in the same package. The per-kind ingestion parser lives
in the consuming service (biome-host-api), not the kernel. Needing a third kernel
file is a layering smell.
A new member MUST arrive with a parser, or with an honest category annotation in its doc comment. This page is generated from those annotations and the parser registry — a parser-less member with no annotation fails the generator.
Related concepts
- extension-surface — the three extension channels
- contribution — what a contribution is, conceptually
- capability-contribution — the
capabilitykind's manifest - surface-contribution — the
surface-kindkind's manifest - search-type-contribution — the
search-typekind's manifest