Mda
MDA Open Spec β a Markdown superset for agent-facing documents. One .mda source compiles to drop-in SKILL.md, AGENTS.md, MCP-SERVER.md, and CLAUDE.md. JSON Schema validated, with typed dependency graph, footnote relationships, and Sigstore-anchored signatures. For agentskills.io and AAIF runtimes.
Ask AI about Mda
Powered by Claude Β· Grounded in docs
I know everything about Mda. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
π MDA Open Spec β Markdown for Agent
A Markdown superset for agent-facing documents. One source, many targets β compile into the
.mdfiles every major agent runtime already loads. Tamper-evident at load β every artifact carries a reproducible content digest, and signed artifacts carry Sigstore-anchored signatures, so neither the agent loading the doc nor the human reviewing it has to trust an unsigned blob.
Read in other languages: English Β· δΈζ Β· Deutsch Β· EspaΓ±ol Β· FranΓ§ais Β· Π ΡΡΡΠΊΠΈΠΉ Β· νκ΅μ΄ Β· ζ₯ζ¬θͺ Β· ΰ€Ήΰ€Ώΰ€¨ΰ₯ΰ€¦ΰ₯
What MDA is
Until now, you shipped the same skill four times. Once as SKILL.md for the agentskills.io runtimes. Once as AGENTS.md for the AAIF ecosystem. Once as MCP-SERVER.md with a sidecar JSON. Once as CLAUDE.md. Same content, four frontmatter shapes. Update one, forget the others, and a month in, the four files have quietly drifted into four slightly different instruction files.
You write one .mda. The compiler emits the rest.

βββββββββββββββββββββββββββ
β <name>.mda (source) β β MDA superset
ββββββββββββββ¬βββββββββββββ
β mda compile
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β <name>/SKILL.md (+ scripts/, references/, assets/) β
β AGENTS.md β
β <name>/MCP-SERVER.md (+ mcp-server.json sidecar) β
β CLAUDE.md β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
drop-in compatible
And those four files can't say who signed them. The agent loading SKILL.md has no way to verify the content matches what you wrote, and the curator reviewing AGENTS.md has no way to know whose hands have been on it between merge and load. The standard frontmatter shapes have nowhere to put a content digest or a signature, so the trust decision quietly falls back to "we trust the repo, somehow."
MDA carries a JCS-canonicalized integrity.digest and DSSE-enveloped, Sigstore-anchored signatures[] in the frontmatter itself. Both sides β the agent at load time and the human at review time β can make a real trust decision against the artifact in hand, not against a feeling about the repo. Tamper-evidence and signer verification ship in the contract, not as a later bolt-on.

.mda adds three things on top of standard Markdown. All of them optional.
- Rich YAML frontmatter. Beyond the open-standard
nameanddescriptionbaseline, MDA carriesdoc-id,version,requires,depends-on,relationships, andtags. Agent-aware tools use these for routing, dependency resolution, and graph traversal. Seespec/v1.0/02-frontmatter.mdandspec/v1.0/10-capabilities.md. - Typed footnote relationships. Standard Markdown footnotes whose payload is a JSON object:
parent,child,related,cites,supports,contradicts,extends. Mirrored tometadata.mda.relationshipsin body order on compile. Seespec/v1.0/03-relationships.md. - Cryptographic identity. A JCS-canonicalized
integritydigest plus DSSE-enveloped, Sigstore-anchoredsignatures[]. The compiled.mdcarries reproducible tamper detection without bolting it on later. Seespec/v1.0/08-integrity.mdandspec/v1.0/09-signatures.md.
A .mda source with only the open-standard frontmatter compiles unchanged into a .md. Use as much or as little of MDA as your project needs.
Why this exists
The honest version. I kept shipping the same skill four times. Same content, four wrappers. Each runtime had its own opinions about what frontmatter belonged at the top and what counted as vendor-specific. The third or fourth time I copy-pasted a paragraph between SKILL.md and AGENTS.md and then watched them drift, I started writing this.
The thing is, the duplication isn't the worst part. The worst part is what you can't say in any of those formats. You can't say "this skill depends on that one, version ^1.2.0, with this content digest." You can't say "this file was signed by this identity at this Rekor index." You can't say "the relationship between this document and that one is supports, not cites." There's nowhere to put that information, so it sits in prose, where neither agents nor humans can act on it reliably.
MDA puts those things in the frontmatter and footnotes, in shapes a JSON Schema can validate. The Markdown body still renders. The standard fields still load. Everything new is optional. That's the whole pitch.
For the long version, two documents go deeper. Both trace every claim back to a section of the spec, and both call out current ecosystem gaps inline. Read them if you're deciding whether to adopt.
docs/v1.0/ai-agent-core-value.mdβ five points framed for runtimes, harnesses, validators, and dispatchers. What MDA gives an agent at load time: structuredrequiresfor typed dispatch, verifiable trust at load, machine-readable graph edges, filename-based one-lookup target dispatch, and the same validation contract for agent-authored and compiler-emitted output.docs/v1.0/human-curator-user-core-value.mdβ six points framed for the people who write and curate agent-facing instruction libraries. What MDA gives an author at ship time: one source into multiple ecosystems, tamper-evidence and publisher attribution, machine-readable dependency graph and version pinning, LLM-mediated authoring without learning every runtime's frontmatter, smaller (not zero) vendor lock-in, and strict validation that catches almost-conformant artifacts before they ship.
Three authoring modes
MDA artifacts may be produced three ways. They're equivalent under validation.
- Agent mode β an AI agent writes the
.mddirectly. The primary near-term use case. - Human mode β a human writes the
.mddirectly, with standard hashing and DSSE-capable signing tools. - Compiled mode β an author writes a
.mdasource; the MDA compiler emits one or more.mdoutputs.
Whichever path you take, the artifact is judged against the same JSON Schema 2020-12 target schema and the same conformance suite. There's no second code path for "this came from an agent."
See docs/create-sign-verify-mda.md for the human and agent-authored paths without the reference CLI, and spec/v1.0/00-overview.md Β§0.5βΒ§0.6 for the normative statement of priority and modes.
Minimal example
pdf-tools.mda:
---
name: pdf-tools
description: Extract PDF text, fill forms, merge files. Use when handling PDFs.
metadata:
mda:
doc-id: 38f5a922-81b2-4f1a-8d8c-3a5be4ea7511
title: PDF Tools
version: "1.2.0"
tags: [pdf, extraction]
---
# PDF Tools
β¦
Compiles to pdf-tools/SKILL.md. The source already sits in the strict target shape, with every MDA-extended field nested under metadata.mda.*, so the compile is essentially a rename. More worked examples live in examples/ and docs/mda-examples/.
Compatibility
A compiled SKILL.md is loadable by the major agentskills.io v1 consumers:
- Claude Code β https://code.claude.com/docs/en/skills
- OpenCode β https://opencode.ai/docs/skills/
- OpenAI Codex β https://developers.openai.com/codex/skills
- Hermes Agent β https://hermes-agent.nousresearch.com/docs/user-guide/features/skills
- OpenClaw β https://docs.openclaw.ai/tools/skills
- skills.sh / Skills Directory β https://www.skillsdirectory.com/
- Cursor, Windsurf, and other 2026 SKILL.md consumers
A compiled AGENTS.md lands in the AAIF-aligned ecosystem (the Linux Foundation's Agentic AI Foundation): Codex CLI, GitHub Copilot, Cursor, Windsurf, Amp, Devin, Gemini CLI, VS Code, Jules, Factory.
Per-vendor extensions live under reserved metadata.<vendor>.* namespaces. Loaders read only their own namespace, and consumers must not reject a document solely because it carries an unregistered one. See REGISTRY.md for the namespace registry, standard requires keys, reserved Sigstore OIDC issuers, and reserved DSSE payload-type values.
The Open Spec
The normative MDA Open Spec lives at SPEC.md β spec/v1.0/.
- Β§00 Overview β terms, RFC 2119, P0 > P1 > P2 priority, three authoring modes, governance, versioning
- Β§01 Source and output
- Β§02 Frontmatter
- Β§03 Relationships β footnotes +
depends-on+ version/digest pinning - Β§04 Platform namespaces
- Β§05 Progressive disclosure
- Β§06 Target schemas β
SKILL.md,AGENTS.md,MCP-SERVER.md,CLAUDE.md - Β§07 Conformance
- Β§08 Integrity
- Β§09 Signatures β Sigstore OIDC default, did:web fallback
- Β§10 Capabilities β
metadata.mda.requires - Β§11 Implementer's Guide (informative)
- Β§12 Sigstore tooling integration (informative)
- Β§13 Trusted Runtime Profile β production verification profile and trust policy
JSON Schemas live in schemas/ β frontmatter-source, frontmatter-skill-md, frontmatter-agents-md, frontmatter-mcp-server-md, relationship-footnote, mda-trust-policy, plus shared _defs/ for integrity, signature, requires, depends-on, and version-range. Conformance fixtures and the validation runner live in conformance/ (node scripts/validate-conformance.mjs).
Reference implementation
The TypeScript CLI lives in apps/cli/ (npm package: @markdown-ai/cli). The architecture spec is apps/cli/IMPL-SPEC.md. The current release candidate is v1.0.0-rc.3, whose primary change is the shipped npm CLI. The final 1.0.0 lands when the CLI passes 100% of the conformance suite.
Use the CLI as an authoring, CI, and agent-side checking tool, not as an application runtime dependency. The clean boundary is simple: @markdown-ai/cli helps humans and agents create, validate, compile, canonicalize, and integrity-check MDA artifacts before they are trusted or shipped; runtime libraries should keep their own lightweight loaders and verifier hooks instead of shelling out to mda. An AI agent may still run mda during a task as an external gate before it edits, compiles, or acts on an artifact, especially with --json and explicit --target. See apps/cli/HOW-TO-USE.md for the practical command flow.

Status, honestly
v1.0 ships the contract, not the entire ecosystem around it.
What works today: you can author a .mda, compile it to one or more conforming .md outputs, and validate them against the target JSON Schemas and the conformance suite.
What's still being built:
- A bundled verifier for signatures isn't shipped yet. Operators currently combine a JCS library with DSSE-capable Sigstore signing and verification helpers.
- A working dependency resolver and a central artifact registry don't exist yet.
- A graph indexer that consumes
metadata.mda.relationshipsisn't shipped. - No 2026 multi-agent harness is known to route through
metadata.mda.requirestoday. - v1.0 covers the agentskills.io and AAIF subset. It does not target Cursor MDC, Windsurf rules, Continue, Aider, or
*.instructions.md. Those still need parallel maintenance.
The .mda you write today still produces conforming .md outputs that load in every runtime listed above. The verification, resolution, and graph-traversal pieces are work in progress. The contract that lets them be built without further negotiation is what v1.0 freezes.
For the full gap between the spec and the consumer-side ecosystem, see docs/v1.0/what-v1.0-does-not-ship.md. That distinction, between an honest spec freeze and a marketing freeze, is the one this project tries to keep.
Contributing
Contributions welcome. Major changes to the Open Spec or the vendor registry should start as a discussion before code. See CONTRIBUTING.md, CODE_OF_CONDUCT.md, and SECURITY.md. For vendor namespace assignment, see REGISTRY.md. Recent changes are logged in CHANGELOG.md.
License
- Open Spec content (
spec/,REGISTRY.md,SPEC.md): CC-BY-4.0 - Schemas (
schemas/), tooling, and reference implementations: Apache-2.0
Related
- Documentation site: https://mda.sno.dev
- Spec discussion: https://github.com/sno-ai/mda/discussions
