Valkyrian Labs logo

Manifest Reference

JSON manifest shape and validation rules.

Manifest Reference

The sync protocol uses JSON manifest uploads, not ZIP files.

1{2  "version": 1,3  "source": {4    "id": "main-docs",5    "commit": "abc123",6    "branch": "main",7    "repository": "valkyrianlabs/payload-markdown-docs"8  },9  "mode": "sync",10  "deleteBehavior": "archive",11  "publish": false,12  "files": [13    {14      "path": "getting-started/installation.md",15      "sha256": "...",16      "content": "# Installation\n\n..."17    }18  ],19  "assets": [20    {21      "kind": "skill",22      "path": "skills/main-docs/codex/SKILL.md",23      "route": "/plugins/main-docs/skills/codex/SKILL.md",24      "contentType": "text/markdown; charset=utf-8",25      "sha256": "...",26      "content": "# Skill\n\n..."27    }28  ]29}

Validation Rules

  • version must be 1
  • source.id is required
  • only .md files are accepted
  • paths must be relative and cannot contain traversal
  • duplicate normalized paths are rejected
  • declared SHA-256 must match content
  • frontmatter must use the supported subset
  • derived route segments must not contain ?, #, or control characters
  • file count and size limits are enforced; the binding size limit is the byte length of the JSON request body (maxBodyBytes, 5,000,000 by default)
  • two files or assets that derive the same route are rejected by the sync endpoint as a route collision
  • client-supplied asset route values are confined: skill routes are always derived from the docs set, llms/llms-full routes must be /llms.txt / /llms-full.txt (or that file under the docs set route), and static routes must stay under the docs set route without ./.., %, ?, or #

Static Assets

files are docs records and use frontmatter, title resolution, and route derivation. assets are native skill artifacts and optional static fallback artifacts stored separately. They do not require frontmatter and are not parsed as docs pages.

pmdocs emits only these asset content types, chosen by file extension: text/markdown; charset=utf-8 (.md), application/json; charset=utf-8 (.json), application/yaml; charset=utf-8 (.yaml, .yml), and text/plain; charset=utf-8 (everything else, such as llms.txt).

Supported asset kinds:

  • llms
  • llms-full
  • skill
  • static

llms and llms-full assets are optional custom static fallback files. By default, /llms.txt, /llms-full.txt, and docs-set llms files are generated by the plugin from synced docs, docs set metadata, dependencies, and skills. Skill routes are always derived from the computed docs set route (a route sent for a skill asset is ignored with a warning), so skills/main-docs/codex/SKILL.md serves under a public route such as /plugins/main-docs/skills/codex/SKILL.md. The agent root route, for example /plugins/main-docs/skills/codex, is generated as a Markdown directory index, and /plugins/main-docs/skills/codex.zip is generated from the synced text artifacts rather than stored as a static ZIP asset.

No target config in the manifest

The manifest does not include target collection, target fields, route identity, publish authority, or hard-delete authority.

See frontmatter.

Agent Artifacts

The sync manifest is not the AI workflow artifact. AI-first support is delivered through native skill directories under skills/payload-markdown-docs/<agent>/. Those files can be installed by pmdocs, included in the plugin package, or served by a docs website for direct download.

Keep /docs focused on human documentation and /skills focused on agent-native workflow instructions.