One grammar, one AST. Your Markdown parses in unchanged — and when something regenerates the doc, the break Markdown swallows silently becomes a line-located error, equally legible to a person and to an agent.
Works with Claude Code, Codex CLI, Cursor, GitHub Copilot, and 35+ agents:
npx skills add podlite/podlite-skillsMarkdown has no single spec-defined canonical AST — CommonMark deliberately defines none. So two parsers can disagree on the tree, and typed attributes have nowhere to live. When an agent regenerates a document between sessions, a dropped block boundary or broken nesting becomes a silent diff you only notice later.
Podlite ships one canonical grammar and one AST, so that class of breakage surfaces as a line-located error instead of vanishing into a re-render.
This is not "a markup with a real parser" — remark/mdast is a real typed AST too. The difference is one canonical, spec-defined tree with stable block boundaries and typed attributes — not a tree your toolchain happens to pick.
Honest trade: Markdown wins on ubiquity and tooling. Podlite wins when structure has to survive regeneration by an agent.
Don't take the claim — run the parser on your own machine:
npm i @podlite/schema
node -e "const {parse}=require('@podlite/schema'); console.dir(parse('=head1 Hello World'), {depth:5})"Every node comes back with its type, name, level, and a location: { line, column }. That's the whole point: a structural break points at a line, it doesn't disappear.
Convert back out with toHtml (full-fidelity) or toMarkdown (best-effort — typed attributes have no Markdown equivalent, so that structure is intentionally dropped; characterized, not silent).
| Skill | Description |
|---|---|
| podlite-markup | Create and edit Podlite markup — docs, specs, ideas, structured content |
| podlite-verify | Validate and self-check Podlite — catch unbalanced blocks, nested-angle attributes, list-nesting errors before delivering |
One command, 35+ agents:
npx skills add podlite/podlite-skillscp -r skills/ /path/to/your/project/.claude/skills/cp -r skills/ ~/.codex/skills/Drop SKILL.md where your agent looks for skills. See agentskills.io/specification.
Reads like Markdown; carries explicit boundaries and typed attributes:
=begin pod :type('page') :tags<tutorial>
=TITLE My Document
=head1 Introduction
Podlite is B<readable> like Markdown but I<structured> with typed attributes.
=item Human-friendly syntax
=item Machine-parseable attributes with C<:key<value>>
=item Inline formatting: B<bold>, I<italic>, C<code>, L<links|https://podlite.org>
=begin table :caption('Trade-offs, not a clean sweep')
Format | Ubiquity | Canonical AST
---------|----------|--------------------
Markdown | +++ | none (by design)
Podlite | + | one, spec-defined
=end table
=end podMIT
