sickn33/agentic-awesome-skills/hugo-to-markdown

Claude Code and agent skill by sickn33/agentic-awesome-skills

Trust tier 3
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

Convert Hugo documentation sites and Hugo-managed content into standard Markdown.

Install

npx vskill@latest install sickn33/agentic-awesome-skills/hugo-to-markdown

SKILL.md

Hugo To Markdown

When to Use

Use this skill when you need convert Hugo documentation sites and Hugo-managed content into standard Markdown. Use when Agent needs to inspect a local Hugo repository, read hugo.toml or config files, content/, archetypes/, layouts/_shortcodes/, layouts/_markup/, and related docs content, then produce Markdown...

Overview

Use this skill when Markdown output must be derived from the local Hugo site, not guessed from generic Hugo knowledge. The conversion rules are the combination of Hugo's official behavior and the repository's own configuration, shortcode templates, render hooks, archetypes, and content conventions.

The target output is standard Markdown:

  • Keep plain Markdown and YAML front matter.
  • Replace or materialize Hugo-only constructs.
  • Preserve meaning when exact rendering is not safely reproducible.
  • Prefer explicit Markdown text over live Hugo template syntax.
  • Distinguish literal Hugo syntax examples from active Hugo features before rewriting anything.

Official Basis

Treat the repository's own Hugo configuration and templates as the primary ruleset. For any site under conversion, inspect these rule sources in the user's provided site root:

  • hugo.toml (or hugo.yaml, hugo.yml, hugo.json, or config/*)
  • archetypes/*
  • data/*
  • layouts/_shortcodes/* or layouts/shortcodes/*
  • layouts/_markup/*
  • content/**

Also read any local docs that define shortcode, front matter, bundle, resource, and render-hook behavior.

Do not assume built-in Hugo defaults if the repository overrides them locally.

Workflow

1. Inventory the site before converting files

Always inspect the site-level rules first.

bash
python3 scripts/inventory_hugo_rules.py --site-root /path/to/hugo-site

Example invocation for the user's site:

bash
python3 skills/hugo-to-markdown/scripts/inventory_hugo_rules.py \
--site-root /path/to/your-hugo-site

This inventory step is mandatory for batch work. Run scripts with Python 3.11+ from a workspace containing the site; the optional inventory output must be a new file under the current workspace. It is a static aid, not an effective Hugo configuration resolver. YAML is not parsed, environment/config precedence and mounted content outside content/ are not resolved, and shortcode counts can include literal examples. Review these manually. It inventories:

  • active config files
  • module mounts and content roots
  • custom shortcodes
  • custom render hooks
  • front matter keys seen in content
  • shortcode usage across content files
2. Convert with repository rules, not generic heuristics

Read references/conversion-workflow.md before changing files. Then:

  1. Resolve the real content root from hugo.toml, config.*, and module mounts.
  2. Read archetypes to understand expected front matter shape.
  3. Read the front matter configuration to understand date aliases, fallback order, filename-derived dates, and other inferred metadata.
  4. Read site data sources in data/ when shortcodes or partials pull structured content from them.
  5. Read custom shortcode templates in layouts/_shortcodes/ or layouts/shortcodes/.
  6. Classify each encountered shortcode as embedded, custom, or inline, then check whether it uses named or positional arguments, block syntax, or self-closing syntax.
  7. Read render hooks in layouts/_markup/.
  8. Check whether the repo already defines Markdown- or JSON-facing export templates and partials; if it does, use those as evidence for how the site itself downgrades Hugo constructs.
  9. Follow include-style shortcodes into referenced content files when the docs site composes content from shared fragments.
  10. Convert one file or one coherent section at a time.
3. Preserve semantics during conversion

Use these rules by default:

  • Keep YAML front matter unless the user explicitly asks for front-matter-free Markdown.
  • Preserve core fields such as title, description, date, draft, aliases, slug, url, weight, and nested params when they still carry meaning.
  • Preserve publishDate, lastmod, expiryDate, and page resource metadata when they still affect meaning or downstream routing.
  • Normalize reserved Hugo front matter keys to their canonical names when the repo mixes casing, for example Title to title, Description to description, and LinkTitle to linkTitle.
  • Account for Hugo front matter aliases and tokens before deciding a field is unused. The official Hugo docs recognize aliases such as pubdate, published, modified, and unpublishdate, plus tokens such as :default, :filename, :fileModTime, and :git.
  • Convert Hugo internal links to normal Markdown links with resolved destinations.
  • Replace Hugo shortcodes with plain Markdown, HTML, or explicit notes only after reading the local shortcode implementation.
  • Preserve or materialize shortcode arguments according to the shortcode's real calling convention. Do not assume every shortcode is named-argument, self-closing, or block-capable.
  • Materialize dynamically generated lists and tables when the shortcode renders content from sections or data files.
  • Leave literal Hugo examples unchanged when the document is documenting Hugo syntax rather than invoking it. This applies both inside fenced code blocks and to escaped forms such as {{</* foo */>}} or {{%/* foo */%}} that appear in prose, tables, or notation examples.
  • Preserve block attribute semantics such as {.class #id} and code-fence attributes when the destination Markdown flavor supports them. If not, downgrade explicitly instead of silently dropping them.
4. Apply Hugo-specific body rules carefully

Many Hugo documentation sites use complex local behaviors. Be alert for these common patterns:

  • hugo.toml mounts content/en to the logical content root, so link and include resolution must use Hugo logical paths instead of preserving /en/ blindly.
  • The docs basis depends on Hugo front matter configuration for date resolution, aliases, and filename-derived metadata; read configuration/front-matter.md and [frontmatter] in hugo.toml before normalizing dates or slugs.
  • include renders another page through RenderShortcodes; follow the referenced content file and inline the resulting Markdown.
  • quick-reference, render-list-of-pages-in-section, and render-table-of-pages-in-section generate navigation content from sections; replace them with materialized Markdown lists or tables.
  • glossary-term, glossary, get-page-desc, module-mounts-note, new-in, and deprecated-in expand to prose or badges; convert them into explicit Markdown text or callouts.
  • code-toggle may read config snippets and data-backed examples; preserve the underlying code sample, not the UI toggle.
  • datatable, per-lang-config-keys, root-configuration-keys, syntax-highlighting-styles, chroma-lexers, newtemplatesystem, and hl are also local shortcodes; inspect their implementations before deciding whether to materialize, flatten, or downgrade.
  • if the repo has data-backed or example-extraction shortcodes such as features-table, optional-features-table, clients-example, or jupyter-example, inspect the referenced data/ files, local example sources, and Markdown-export partials before deciding whether to materialize or downgrade.
  • glossary links can use the special Markdown destination (g); resolve these to stable glossary links instead of leaving the placeholder.
  • img and imgproc are presentation helpers around page, global, or remote resources; preserve the underlying image reference and caption semantics.
  • eturl emits links to embedded template sources; convert to a normal Markdown link if the destination is known, otherwise preserve as a textual note.
  • the local link render hook resolves destinations in this order: content page, page resource, section resource when the page is not a leaf bundle, then global resource. It also validates fragments and glossary shorthand.
  • blockquote and code-block render hooks add alert, file-label, summary, and detail semantics; preserve these semantics in Markdown or explicit notes.
  • embedded ref and relref are obsolete for Markdown in modern Hugo docs and can interact poorly with the custom link render hook; resolve the final destination instead of preserving the shortcode.
  • the local docs use Markdown attributes and code-fence options that can change rendered output. Keep these semantics when the destination flavor supports them.

Read references/shortcodes-and-render-hooks.md before converting any file that contains Hugo syntax.

5. Validate the output

After conversion, scan the generated Markdown for leftover Hugo-only syntax. This regex-based checker is not a Markdown parser or HTML sanitizer and does not validate links, front matter, secrets or rendering safety. Review literal examples and unsupported fence/container cases manually; sanitize HTML with the destination renderer before publishing.

bash
python3 skills/hugo-to-markdown/scripts/check_standard_markdown.py \
--root /path/to/output

If the validator reports active Hugo syntax outside code fences, either:

  • resolve it fully, or
  • replace it with a safe textual explanation

Do not silently ship unresolved {{< ... >}}, {{% ... %}}, or Go template expressions.

6. Downgrade explicitly when full materialization is not safe

If a shortcode depends on build-time data, generated examples, or external source files that you cannot resolve deterministically from the local repo snapshot, replace it with an explicit Markdown note.

Use a short, boring format such as:

  • > Conversion note: <what the shortcode normally renders>.
  • followed by any safe subset you were able to preserve, such as inline Redis CLI text, a resolved image URL, or a known section list

Do not leave empty links, broken table cells, or stripped content with no explanation.

Common Hugo Docs Site Patterns

The following are examples from one docs-site configuration, not facts about arbitrary Hugo sites. Apply each only after confirming it in the supplied snapshot:

  • hugo.toml mounts content/en to content, so English docs are the active content tree.
  • Goldmark passthrough delimiters are configured for math, so $$...$$, \\(...\\), and \\[...\\] can be meaningful content, not junk.
  • markup.goldmark.parser.attribute.block = true, so block attribute syntax may appear after fenced blocks and other block elements.
  • markup.goldmark.parser.wrapStandAloneImageWithinParagraph = false, so standalone image attributes can target the image itself rather than a wrapping paragraph.
  • The repo defines custom render hooks for blockquotes, code blocks, links, passthrough, and tables. It documents heading and image render hooks, but the site does not override them locally.
  • The repo uses many shared _common fragments referenced through % include %, so reading a page file alone is not enough to understand the rendered content.
  • The repo documents embedded, custom, and inline shortcodes, and the conversion logic must distinguish them before flattening syntax.
  • The repo uses page bundles and page resources heavily in examples and render-hook resolution, including section resources and mounted global resources.
  • The repo contains many escaped shortcode examples such as {{</* foo */>}} and {{%/* foo */%}}; these are documentation samples and must remain literal when they appear inside code examples, notation tables, or tutorial prose.

Safety Rules

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 95 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
47,054
Repository forks
6,853
7-day trend score
54

Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/sickn33/agentic-awesome-skills/hugo-to-markdown/badge)](https://verified-skill.com/skills/sickn33/agentic-awesome-skills/hugo-to-markdown)

Something wrong with this skill or its page? Tell us.