.facet file ready to publish or share. Make sure you have the CLI installed first — see the Introduction.
Scaffold a new facet
Run the create wizard
facet create wizard walks you through five prompts:- Name — the facet identity: an unscoped name (
my-facet) or a scoped name (@scope/name, e.g.@acme/my-facet). Each segment is kebab-case. - Description — a brief summary of what the facet does.
- Version — defaults to
0.0.0. - Privacy — Public (default) or Private.
- Assets — add skills, agents, and commands by name. Asset names are always plain kebab-case — never scoped, even when the facet identity is. At least one asset is required.
Understand the structure
The manifest (facet.json) is the source of truth for what the facet contains:
description field and optional adapters metadata. The name maps to the file at the conventional path (skills/<name>/SKILL.md, agents/<name>.md, commands/<name>.md). At least one text asset must be present.
The manifest’s name, description, and any per-adapter extras are merged on top of whatever YAML front matter you write in the content files at install time.
Write your first skill
Openskills/code-review/SKILL.md and replace the starter template:
skills/<name>/SKILL.md. This convention comes from the Agent Skills spec and allows skills to include supplementary files alongside the main SKILL.md in the future.
Write an agent
Openagents/reviewer.md:
agents.<name>.adapters block:
Write a command
Opencommands/review-pr.md:
Build the facet
facet build runs a 6-stage validation pipeline:
- Parse manifest — reads and validates
facet.jsonagainst the schema. - Resolve prompts — reads each declared asset file from its conventional path.
- Validate assets — checks that all content files are non-empty.
- Check collisions — validates no two assets within the same type share a name.
- Validate adapters — validates adapter metadata for installed adapters.
- Assemble archive — collects the manifest and all assets into a deterministic tar archive, computes the integrity hash, and writes the
.facetfile.
dist/:
@acme/my-facet at 0.0.0 is written to dist/@acme/my-facet-0.0.0.facet.
The .facet file is the single distributable artifact. Use --emit-manifest to also write a loose build-manifest.json to dist/ for debugging:
facet edit to fix issues.
Reconcile with facet edit
If you add, rename, or remove files on disk without updating facet.json, the manifest and the file tree drift apart. facet edit detects this and enters a reconciliation phase:
- New files on disk not tracked in the manifest — choose “Add to manifest” or “Ignore for now”.
- Missing files declared in the manifest but absent from disk — choose “Scaffold template” or “Remove from manifest”.