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

FieldTypeRequiredDescription
namestringYesPackage identifier in vendor/slug format. Max 128 chars.
versionstringYesSemantic version in major.minor.patch format.
typeenumYesskill, rule, bundle, or template.
descriptionstringYesShort description. 1–1024 chars. Shown in search results.
targetsarrayYesAt least one of: cursor, claude-code, codex, generic.
install_mapobjectNoOverride the default install path per target. Use {slug} as a placeholder.
entrypointstringNoPath to the primary file, relative to the archive root.
requires.toolsstring[]NoTool names this package requires. Informational only in v0.
licensestringNoSPDX 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

TypeDescription
skillA SKILL.md file following the agentskills.io specification. Teaches an agent a specific capability or workflow.
ruleConfiguration rules for an agent environment (e.g. Cursor rules, Claude instructions).
bundleA collection of multiple skills or rules packaged together.
templateA starter template or scaffold that agents can use to initialize a project.

Install targets and paths

TargetDetectionDefault install path
cursor.cursor/ directory exists.cursor/skills/{slug}/
claude-code.claude/ directory exists.claude/skills/{slug}/
codex(not auto-detected)mog_modules/{slug}/
genericfallbackmog_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

  1. Create a directory with your content files
  2. Write mog.yaml with the required fields
  3. Write a helpful README.md (shown on the listing page)
  4. Zip the directory: zip -r my-skill-1.0.0.zip my-skill/
  5. Upload via the seller dashboard or the API
  6. Wait for the scan to pass, then publish

See the seller guide for a full walkthrough including Stripe Connect setup and pricing.

On this page