manifest.yaml Reference
Every Lore package must include a manifest.yaml at the root of the package directory.
Schema
apiVersion: lore.io/v1
kind: Skill # Skill | Rule | Spec | Template | MCPServer | Bundle | Agent | Scaffold
metadata:
namespace: m1cloud
name: azure-architect
version: 1.0.0
spec:
title: Azure Architect
description: Azure architecture specialist
content:
defaultLanguage: en-US
translations:
- en-US
- pt-BR
dependencies:
- m1cloud/terraform-reviewer:^1.0.0
license: Apache-2.0
tags:
- azure
- architectureFields
apiVersion
Must be lore.io/v1.
kind
Package type. One of: Skill, Rule, Spec, Template, MCPServer, Bundle, Agent, Scaffold.
| Kind | Description |
|---|---|
Skill | Reusable capability that teaches an AI how to perform a task |
Rule | Behavioral constraints and policies |
Spec | Structured project requirements |
Template | Reusable project scaffolding described as markdown instructions |
MCPServer | MCP Server installation descriptor — configures an MCP server in AI runtimes |
Bundle | A curated set of other packages, installed together via components: |
Agent | An AI agent persona with an optional model hint (ai.model) |
Scaffold | A project scaffold that bundles real files (not just markdown) via spec.include — see below |
metadata.namespace
Publisher namespace. Must match your registered namespace in the registry.
metadata.name
Package name in kebab-case. Together with namespace, forms the unique package identifier.
metadata.version
Semver (MAJOR.MINOR.PATCH). Published versions are immutable.
spec.title
Human-readable package title.
spec.description
One-line package description.
spec.include
Optional list of directories or individual files, relative to the package directory, that get bundled into the .lore archive as real files — alongside the usual manifest.yaml and content/*.md. Allowed for every kind except Bundle. Entries are literal paths — no glob patterns.
spec:
title: .NET Service Scaffold
description: Base structure for a .NET service with Clean Architecture
include:
- templates
- schemas/openapi.yamlThis is how kind: Scaffold packages ship real project files (source trees, config files, etc.) instead of just markdown instructions. lore pull never extracts include: files directly onto disk — it writes an instruction file (.claude/includes/{name}.md, or .claude/scaffolds/{name}.md specifically for kind: Scaffold) listing the included paths and a lore extract command, so the AI decides how and where to place them after downloading with the CLI’s own authenticated session. See Content Structure and lore pull for the full behavior.
spec.include content is capped by size: 5 MB total, 2 MB per file, 10 MB for the whole .lore archive (Registry-configurable, but these are the defaults). lore publish/lore push reject oversized archives before uploading; the Registry enforces the same limits on ingestion regardless.
Older versions of this schema auto-bundled assets/ and examples/ directories without needing to declare them. That convention is gone — every extra directory or file must now be listed explicitly in spec.include. lore publish prints a warning if it finds an assets/, examples/, or templates/ directory that isn’t declared.
content.defaultLanguage
IETF BCP 47 language tag (e.g., en-US). A content file for this language must exist.
translations
List of all languages for which content files exist.
dependencies
List of required packages. Format: <namespace>/<name>:<semver-range>.
license
SPDX license identifier.
tags
List of tags for search and discovery.
mcp: (MCPServer only)
Required for kind: MCPServer. Forbidden for all other kinds. Defines how the CLI installs the MCP server into the target AI runtime’s configuration.
mcp:
defaultTransport: stdio # "stdio" | "sse" — required when both transports are declared
transports:
stdio:
command: npx # executable to invoke
args:
- -y
- my-mcp-server
env:
MY_API_KEY: "" # empty = required (user must fill in)
LOG_LEVEL: "info" # non-empty = optional with default
sse:
url: https://mcp.example.com/sse
headers:
Authorization: "Bearer ${MY_API_KEY}"At least one transport (stdio or sse) must be present. When only one transport is declared, defaultTransport is optional (the CLI defaults to the single available transport).
Env vars with an empty value ("") are treated as required — the CLI will warn after installation that the user must set them. Env vars with a non-empty value are optional and pre-filled with the default.