Skip to main content
Every facet is defined by a facet.yaml manifest file. This page documents every field in the schema.

Top-level fields

FieldTypeRequiredDescription
namestringYesUnique facet name (min 1 character)
versionstringYesSemantic version string (min 1 character)
descriptionstringNoShort description of the facet
authorstringNoAuthor name and optional email
requiresstring | string[]NoShell commands to verify as prerequisites
skillsstring[]NoList of skill names bundled in the facet
agentsRecord<string, AgentDescriptor>NoMap of agent name to descriptor
commandsRecord<string, CommandDescriptor>NoMap of command name to descriptor
platformsPlatformsNoPlatform-specific configuration
The schema uses .passthrough() — unknown fields are preserved, not rejected.

AgentDescriptor

Defines an agent that the facet provides.
FieldTypeRequiredDescription
descriptionstringNoWhat the agent does
promptPromptYesThe agent’s prompt content (see Prompt types)
platformsobjectNoPlatform-specific settings
platforms.opencodeobjectNoOpenCode-specific settings
platforms.opencode.toolsRecord<string, boolean> | string[]NoTool permissions for the agent

Tool permissions

Tools can be specified as either:
  • Record — Explicitly enable/disable tools: { write: false, bash: true }
  • Array — List of enabled tools: ["bash", "read"]

CommandDescriptor

Defines a slash command that the facet provides.
FieldTypeRequiredDescription
descriptionstringNoWhat the command does
promptPromptYesThe command’s prompt content (see Prompt types)

Prompt types

The prompt field accepts three forms:

String path

A relative file path to the prompt file:
prompt: prompts/my-agent.md

File object

Explicit file reference:
prompt:
  file: prompts/my-agent.md

URL object

Reference a prompt hosted at a URL:
prompt:
  url: https://example.com/prompts/my-agent.md
URL prompts are fetched at cache time, not at install time. The fetched content is stored in the cache alongside other resources.

Platforms

Platform-specific configuration. Currently supports OpenCode, but uses a catchall for extensibility.
FieldTypeRequiredDescription
opencodeobjectNoOpenCode platform config
opencode.toolsstring[]NoTool file names (without extension) to install
(other)Record<string, unknown>NoConfig for other platforms (passthrough)

Requires

The requires field specifies shell commands that must succeed before the facet can be installed. These are prerequisite checks — typically version commands like gh --version or jq --version. Accepts a single string or an array:
# Single prerequisite
requires: gh --version

# Multiple prerequisites
requires:
  - gh --version
  - jq --version

Complete example

name: my-facet
version: 1.0.0
description: A comprehensive example facet
author: Jane Doe <jane@example.com>

requires:
  - gh --version
  - jq --version

skills:
  - my-skill

agents:
  my-agent:
    description: Does a specific thing
    prompt: prompts/my-agent.md
    platforms:
      opencode:
        tools:
          write: false

commands:
  my-command:
    description: Runs a workflow
    prompt:
      file: prompts/my-command.md

platforms:
  opencode:
    tools:
      - my-tool
This facet bundles:
  • 1 skill (my-skill)
  • 1 agent (my-agent) with write access disabled
  • 1 command (my-command)
  • 1 tool (my-tool)
  • 2 prerequisites (gh and jq)