Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Advanced Markdown and MDX processing for technical documentation. Parse, validate, lint, and transform Markdown content with support for MDX components, front matter, and remark/rehype plugins.
.claude/skills/a5c-ai-markdown-mdx/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 6% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 53% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 228% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 246% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 92% | 0% |
Advanced Markdown and MDX processing for technical documentation.
Invoke this skill when you need to:
| Parameter | Type | Required | Description | |-----------|------|----------|-------------| | inputPath | string | Yes | Path to Markdown/MDX file or directory | | action | string | Yes | lint, validate, transform, parse-frontmatter | | outputPath | string | No | Output path for transformed content | | configPath | string | No | Path to markdownlint config | | frontmatterSchema | object | No | JSON schema for front matter validation | | plugins | array | No | Remark/rehype plugins to apply |
json{ "inputPath": "./docs", "action": "lint", "configPath": ".markdownlint.json" }
json{ "files": 42, "errors": 5, "warnings": 12, "issues": [ { "file": "docs/getting-started.md", "line": 15, "rule": "MD022", "message": "Headings should be surrounded by blank lines", "severity": "error" } ], "fixable": 8 }
json{ "file": "docs/api/users.md", "frontmatter": { "title": "Users API", "description": "User management endpoints", "tags": ["api", "users"], "sidebar_position": 3 }, "valid": true, "content": "# Users API\n\nThis document..." }
markdown# Heading 1 ## Heading 2 {#custom-id} Paragraph with **bold**, *italic*, and `code`. > Blockquote with > multiple lines - Unordered list - With items - Nested item 1. Ordered list 2. With numbers | Column 1 | Column 2 | |----------|----------| | Cell 1 | Cell 2 | [Link text](https://example.com "Title") 
const code = 'block';
---
Horizontal rule above.markdown## GFM Extensions ### Task Lists - [x] Completed task - [ ] Incomplete task ### Tables | Left | Center | Right | |:-----|:------:|------:| | L | C | R | ### Strikethrough ~~deleted text~~ ### Autolinks https://example.com ### Footnotes Here's a sentence with a footnote[^1]. [^1]: This is the footnote. ### Alerts > [!NOTE] > Useful information. > [!WARNING] > Critical content.
mdx--- title: Interactive Guide --- import { Tabs, TabItem } from '@site/src/components/Tabs'; import CodeBlock from '@theme/CodeBlock'; # Getting Started <Tabs> <TabItem value="npm" label="npm"> ```bash npm install my-package ``` </TabItem> <TabItem value="yarn" label="yarn"> ```bash yarn add my-package ``` </TabItem> </Tabs> ## Configuration <CodeBlock language="json" title="config.json"> {`{ "setting": "value" }`} </CodeBlock> export const Highlight = ({children, color}) => ( <span style={{backgroundColor: color, padding: '0.2rem'}}> {children} </span> ); This is <Highlight color="#25c2a0">highlighted text</Highlight>.
jsx// components/Callout.jsx export function Callout({ type = 'info', title, children }) { const styles = { info: { bg: '#e7f5ff', border: '#339af0' }, warning: { bg: '#fff3bf', border: '#fab005' }, error: { bg: '#ffe3e3', border: '#fa5252' }, success: { bg: '#d3f9d8', border: '#40c057' } }; return ( <div style={{ backgroundColor: styles[type].bg, borderLeft: `4px solid ${styles[type].border}`, padding: '1rem', margin: '1rem 0' }}> {title && <strong>{title}</strong>} {children} </div> ); }
mdximport { Callout } from '@site/src/components/Callout'; <Callout type="warning" title="Deprecation Notice"> This API will be removed in version 3.0. </Callout>
json{ "default": true, "MD013": false, "MD033": { "allowed_elements": ["details", "summary", "Tabs", "TabItem"] }, "MD041": false, "MD024": { "siblings_only": true }, "MD046": { "style": "fenced" }, "MD048": { "style": "backtick" } }
yaml# .markdownlint-cli2.yaml config: default: true MD013: false globs: - "docs/**/*.md" - "!node_modules" - "!.git" ignores: - "CHANGELOG.md" customRules: - markdownlint-rule-search-replace
javascriptimport remarkGfm from 'remark-gfm'; import remarkFrontmatter from 'remark-frontmatter'; import remarkMdxFrontmatter from 'remark-mdx-frontmatter'; import remarkToc from 'remark-toc'; import remarkSlug from 'remark-slug'; export default { plugins: [ remarkGfm, remarkFrontmatter, remarkMdxFrontmatter, [remarkToc, { heading: 'contents', tight: true }], remarkSlug ] };
javascriptimport rehypeSlug from 'rehype-slug'; import rehypeAutolinkHeadings from 'rehype-autolink-headings'; import rehypePrism from 'rehype-prism-plus'; export default { plugins: [ rehypeSlug, [rehypeAutolinkHeadings, { behavior: 'wrap' }], [rehypePrism, { showLineNumbers: true }] ] };
json{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "required": ["title"], "properties": { "title": { "type": "string", "minLength": 1, "maxLength": 100 }, "description": { "type": "string", "maxLength": 300 }, "tags": { "type": "array", "items": { "type": "string" } }, "sidebar_position": { "type": "integer", "minimum": 0 }, "draft": { "type": "boolean", "default": false } }, "additionalProperties": false }
json{ "devDependencies": { "markdownlint-cli2": "^0.12.0", "remark": "^15.0.0", "remark-gfm": "^4.0.0", "remark-frontmatter": "^5.0.0", "remark-mdx": "^3.0.0", "rehype": "^13.0.0", "gray-matter": "^4.0.0", "ajv": "^8.0.0" } }
bash# Lint all Markdown files npx markdownlint-cli2 "docs/**/*.md" # Fix auto-fixable issues npx markdownlint-cli2 --fix "docs/**/*.md" # Parse and validate front matter node scripts/validate-frontmatter.js docs/ # Convert Markdown to HTML npx remark docs/guide.md -o build/guide.html
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 27,147 | 10,862 | -60% | 1 | 1 | 0% | 3,435 | 3,641 | +6% | 0 | 0 | — |
case-02 | fail→pass | 16,302 | 4,925 | -70% | 1 | 1 | 0% | 2,267 | 3,463 | +53% | 0 | 0 | — |
case-03 | pass→pass | 7,571 | 8,493 | +12% | 1 | 1 | 0% | 487 | 3,182 | +553% | 0 | 0 | — |
case-04 | pass→pass | 15,239 | 8,210 | -46% | 1 | 1 | 0% | 1,226 | 3,057 | +149% | 0 | 0 | — |
case-05 | pass→pass | 8,230 | 9,616 | +17% | 1 | 1 | 0% | 596 | 3,402 | +471% | 0 | 0 | — |
case-06 | pass→pass | 10,793 | 9,648 | -11% | 1 | 1 | 0% | 1,114 | 3,393 | +205% | 0 | 0 | — |
case-07 | pass→pass | 9,493 | 7,860 | -17% | 1 | 1 | 0% | 713 | 2,994 | +320% | 0 | 0 | — |
case-08 | pass→pass | 11,618 | 9,685 | -17% | 1 | 1 | 0% | 1,262 | 3,401 | +169% | 0 | 0 | — |
case-09 | pass→pass | 10,997 | 4,381 | -60% | 1 | 1 | 0% | 1,066 | 3,129 | +194% | 0 | 0 | — |
case-10 | pass→pass | 9,130 | 13,490 | +48% | 1 | 1 | 0% | 927 | 4,050 | +337% | 0 | 0 | — |
case-11 | pass→pass | 10,262 | 9,106 | -11% | 1 | 1 | 0% | 1,077 | 3,301 | +206% | 0 | 0 | — |
case-12 | fail→pass | 10,215 | 8,131 | -20% | 1 | 1 | 0% | 903 | 2,964 | +228% | 0 | 0 | — |
case-13 | fail→pass | 4,761 | 6,880 | +45% | 1 | 1 | 0% | 797 | 2,757 | +246% | 0 | 0 | — |
case-14 | fail→pass | 23,563 | 5,697 | -76% | 1 | 1 | 0% | 1,801 | 3,461 | +92% | 0 | 0 | — |
case-15 | pass→pass | 5,763 | 10,734 | +86% | 1 | 1 | 0% | 1,000 | 3,265 | +227% | 0 | 0 | — |
case-16 | pass→pass | 22,593 | 20,729 | -8% | 1 | 1 | 0% | 3,918 | 5,982 | +53% | 0 | 0 | — |
case-17 | pass→pass | 10,366 | 4,188 | -60% | 1 | 1 | 0% | 906 | 3,198 | +253% | 0 | 0 | — |
case-18 | pass→pass | 2,378 | 6,786 | +185% | 1 | 1 | 0% | 342 | 2,779 | +713% | 0 | 0 | — |
case-19 | pass→pass | 15,651 | 13,158 | -16% | 1 | 1 | 0% | 1,753 | 3,587 | +105% | 0 | 0 | — |
case-20 | fail→fail | 12,522 | 10,902 | -13% | 1 | 1 | 0% | 1,493 | 3,611 | +142% | 0 | 0 | — |
case-21 | pass→pass | 7,493 | 10,685 | +43% | 1 | 1 | 0% | 1,220 | 3,565 | +192% | 0 | 0 | — |
case-22 | fail→pass | 29,030 | 31,229 | +8% | 1 | 1 | 0% | 4,833 | 8,457 | +75% | 0 | 0 | — |
case-23 | pass→pass | 17,669 | 17,163 | -3% | 1 | 1 | 0% | 2,372 | 5,035 | +112% | 0 | 0 | — |
case-24 | pass→pass | 17,875 | 20,326 | +14% | 1 | 1 | 0% | 2,045 | 5,013 | +145% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 24 cases were attempted. The headline lift of +25 percentage points is the difference between those two pass rates over the 24 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.