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-skillsCommonMark specifies how Markdown is parsed, but its conformance tests compare HTML output, not trees. Each parser builds its own tree format, and there is no syntax for typed attributes. When an agent regenerates a document between sessions, a dropped block boundary or broken nesting becomes a silent diff you only notice later.
Podlite has one specification and one reference parser, @podlite/schema. Every tool built on it sees the same tree, and podlite lint reports this kind of breakage with a line number instead of letting it vanish 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 tree shared by every tool, with stable block boundaries and typed attributes, instead of 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})"Each block comes back with its type and a location: { line, column }. A heading also carries its name and level. A structural break points at a line instead of disappearing.
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 | Tree format
---------|----------|--------------------
Markdown | +++ | one per parser
Podlite | + | one for all tools
=end table
=end podMIT
