Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add podlite/podlite-skills --skill podlite-verifygit clone --depth 1 https://github.com/podlite/podlite-skillsWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/podlite/podlite-skills/podlite-verify)<a href="https://agentmods.dev/skills/podlite/podlite-skills/podlite-verify"><img src="https://agentmods.dev/badge/skills/podlite/podlite-skills/podlite-verify/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/podlite/podlite-skills/podlite-verify"><img src="https://agentmods.dev/badge/skills/podlite/podlite-skills/podlite-verify.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00064 | $0.02099 |
| Opus 5.5 | $0.00026 | $0.00840 |
| Sonnet 5.5 | $0.00013 | $0.00420 |
| Haiku 4.5 | $0.00006 | $0.00210 |
Grade A, and why
podlite-verify scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 12d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 116 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Podlite Verify
AI-generated markup drifts: unbalanced blocks, broken nesting, attribute values that swallow the next token. Podlite is structured, so most of these are mechanically checkable. Verify before delivering.
Run two layers: (1) self-check the output against the rules below (always available, no tooling), then (2) machine-validate with the parser/linter when it is available.
- Companion skill:
podlite-markup(how to write it) - Specification: https://podlite.org/specification
When to verify
- Immediately after generating or editing any
.podlite/.pod6content, before presenting it - When the user asks to validate, lint, check, or fix Podlite
- When a renderer or parser reports an error
- Before committing Podlite to a repository or knowledge base
Layer 1: self-check rules (no tooling required)
Read the produced markup and confirm each invariant. These are the errors LLMs introduce most often.
| # | Check | Wrong | Right |
|---|---|---|---|
| 1 | Every =begin X has a matching =end X with the same typename |
=begin code … =end pod |
=begin code … =end code |
| 2 | Balanced block nesting: inner blocks close before outer | =begin pod =begin code =end pod |
=begin pod =begin code =end code =end pod |
| 3 | No skipped list levels: an =item3 needs an =item2 earlier in the same block, and parsers warn otherwise |
=item1 → =item3 |
=item1 → =item2 → =item3 |
| 4 | If several words must form one string, quote them: unquoted words in <…> make a list |
:caption<Q1 sales> |
:caption<'Q1 sales'> or :caption('Q1 sales') |
| 5 | No raw </> inside an unquoted :attr<…>: the parser ends the value at the first > |
:caption<See L<x|y>> |
:caption('See L<x|y>') |
| 6 | Formatting codes are balanced | B<bold I<italic> |
B<bold I<italic>> |
| 7 | Content containing > uses doubled delimiters |
C<$x > 5> |
C<< $x > 5 >> or C« $x > 5 » |
| 8 | Blank line separates paragraphs / terminates =for and abbreviated blocks |
two paragraphs glued | blank line between |
| 9 | A =begin pod … =end pod root is optional: the specification wraps a .podlite file in one implicitly |
requiring a root | with or without a root |
| 10 | Indentation is intentional: indented text inside =pod/=item/=nested becomes an implicit code block |
accidental 4-space indent | flush-left prose |
| 11 | Block casing matches role: lowercase standard (=head1), UPPERCASE semantic (=TITLE), MixedCase custom (=Mermaid) |
=mermaid, =title, =Image |
=Mermaid, =TITLE, =picture |
| 12 | =end lines carry no attributes: attributes belong on =begin only |
=end code :lang<js> |
=end code |
| 13 | Markdown-fence attributes follow the language id | ```:line-numbers python |
```python :line-numbers |
| 14 | A continued attribute line starts with = and a space: an indented one is content, and its attributes are lost |
=begin pod :type<x>⏎ :id<y> |
=begin pod :type<x>⏎= :id<y> |
| 15 | A list value separates on spaces, not commas: a comma stays inside the value | :columns<a,b,c> is one name |
:columns<a b c> or :columns('a','b','c') |
| 16 | =set applies to the next block only: it needs a block after it in the same scope |
=set at end of document |
=set :caption('X') followed by the block |
| 17 | G<> conceals, it does not delete: guarded text stays in the source and reaches anyone who reads the file |
secrets inside G<> |
secrets outside the document |
| 18 | :mime-type carries its parameters: CSV and TSV need the header state |
:mime-type<text/csv> |
:mime-type<'text/csv; header=present'> |
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 12d ago Changed a54ddb068164
- 1mo ago Changed · +4 lines 901566f1cfc9
- 2mo ago First seen · 112 lines · 64 tokens per session scan A 7c1b6e031c24
podlite-verify is a skill published in the GitHub repository podlite/podlite-skills (3 stars, last pushed 13d ago), licensed MIT. It adds 64 tokens to every session and 2,099 once invoked, about $0.0003 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
podlite-verify compared with skills from other repositories
| Mod | Type | Stars | Last push | Licence | Scan | Tokens | Works with |
|---|---|---|---|---|---|---|---|
| podlite-verifypodlite/podlite-skills | Skill | 3 | 13d ago | MIT | A | 64 | Claude Code |
| init-workspace-documentationgriddynamics/rosetta | Skill | 370 | yesterday | Apache-2.0 | A | 10 | Claude Code |
| skill-creatorzhinjs/zhin | Skill | 137 | yesterday | MIT | A | 61 | Claude Code, Codex |
| bricks-builderkenming/bricks-builder-skill | Skill | 47 | 1mo ago | MIT | A | 123 | Codex |
| human-readable-reportsSummerRiversound/human-readable-reports | Skill | 14 | 11d ago | MIT | A | 46 | Claude Code |
| wgmagent-frontier/wgm | Skill | 3 | 3d ago | MIT | A | 155 | Claude Code, Codex |
| ruggedagent-frontier/wgm | Skill | 3 | 3d ago | MIT | A | 182 | Claude Code, Codex |