Package format
mog.yaml schema, package directory structure, lockfile format, and install targets.
A mog package is a .zip archive containing a manifest, a README, and your content files. This page documents everything you need to create and publish a valid package.
Directory structure
your-package/
mog.yaml # Required — distribution manifest
README.md # Required — displayed on the listing page
CHANGELOG.md # Optional — version history
content/
SKILL.md # Your main content (standard agentskills.io format)
reference.md # Additional content files
assets/
diagram.png # Images are supported
The archive can have any top-level directory name — the CLI strips it during extraction. The important thing is that mog.yaml and README.md exist at the root level of that top-level directory.
mog.yaml schema
mog.yaml is the package manifest. Every field is validated on upload. The scan worker will reject the release if mog.yaml is missing or invalid.
name: acme/router-eval # vendor/slug — see naming rules below
version: 1.0.0 # semver (major.minor.patch)
type: skill # skill | rule | bundle | template
description: >
Comprehensive router evaluation patterns for React applications.
Works with React Router v6 and TanStack Router.
targets:
- cursor
- claude-code
- generic
install_map: # optional — override default install paths
cursor: .cursor/skills/{slug}/
claude-code: .claude/skills/{slug}/
entrypoint: content/SKILL.md # optional — primary file for agent consumption
requires: # optional — tool requirements
tools:
- react-router
license: MIT # optional, defaults to MIT
readme: README.md # optional — path to readme (default: README.md)
Field reference
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Package identifier in vendor/slug format. Max 128 chars. |
version | string | Yes | Semantic version in major.minor.patch format. |
type | enum | Yes | skill, rule, bundle, or template. |
description | string | Yes | Short description. 1–1024 chars. Shown in search results. |
targets | array | Yes | At least one of: cursor, claude-code, codex, generic. |
install_map | object | No | Override the default install path per target. Use {slug} as a placeholder. |
entrypoint | string | No | Path to the primary file, relative to the archive root. |
requires.tools | string[] | No | Tool names this package requires. Informational only in v0. |
license | string | No | SPDX license identifier. Defaults to MIT. |
Naming rules
- Format:
vendor/package-name - Both parts: lowercase letters, numbers, and hyphens only
- No dots, underscores, or uppercase letters
- Examples:
acme/react-testing-skill,my-org/gpt4o-rules
Package types
| Type | Description |
|---|---|
skill | A SKILL.md file following the agentskills.io specification. Teaches an agent a specific capability or workflow. |
rule | Configuration rules for an agent environment (e.g. Cursor rules, Claude instructions). |
bundle | A collection of multiple skills or rules packaged together. |
template | A starter template or scaffold that agents can use to initialize a project. |
Install targets and paths
| Target | Detection | Default install path |
|---|---|---|
cursor | .cursor/ directory exists | .cursor/skills/{slug}/ |
claude-code | .claude/ directory exists | .claude/skills/{slug}/ |
codex | (not auto-detected) | mog_modules/{slug}/ |
generic | fallback | mog_modules/{slug}/ |
To override the path for a specific target:
install_map:
cursor: .cursor/rules/{slug}/ # install to rules/ instead of skills/
claude-code: .claude/memory/{slug}/
The lockfile (mog.lock.json)
Every mog install or mog update writes to mog.lock.json in your project root. Commit this file to version control — it makes your installs fully reproducible.
{
"version": 1,
"lockfileVersion": "1.0.0",
"generatedAt": "2026-01-15T10:00:00.000Z",
"packages": {
"acme/router-eval": {
"name": "acme/router-eval",
"vendor": "acme",
"slug": "router-eval",
"version": "1.0.0",
"listingId": "uuid",
"releaseId": "uuid",
"entitlementId": "uuid",
"installedAt": "2026-01-15T10:00:00.000Z",
"target": "cursor",
"installPath": "/my-project/.cursor/skills/router-eval/",
"archiveSha256": "a3f8c2d1...",
"updateChannel": "minor",
"files": [
{
"path": "content/SKILL.md",
"sha256": "b1c9d2e3...",
"size": 4096
}
]
}
}
}
Creating a package
- Create a directory with your content files
- Write
mog.yamlwith the required fields - Write a helpful
README.md(shown on the listing page) - Zip the directory:
zip -r my-skill-1.0.0.zip my-skill/ - Upload via the seller dashboard or the API
- Wait for the scan to pass, then publish
See the seller guide for a full walkthrough including Stripe Connect setup and pricing.