--- name: make-docx-file description: Create a .docx by drafting Markdown first, rendering Mermaid via Kroki, then converting with pandoc (with safe escaping + math support). compatibility: Requires `pandoc`, `uv`, and a Kroki container reachable at `http://kroki:8000`. disable-model-invocation: false metadata: kroki_url: http://kroki:8000 --- # make-docx-file ## Overview Create a high-quality `.docx` document **via Markdown as the source of truth**. You MUST: - Produce a **descriptive base name** for outputs (not generic like `report`). If the user didn’t provide one, ask for it. If the user truly doesn’t care, infer one from topic + date and state it before writing files. - First create `.md` with the full content. - Convert Mermaid diagrams to images via Kroki at `http://kroki:8000` and embed them in the Markdown. - Convert the (diagram-rendered) Markdown to `.docx` using pandoc with explicit Markdown/math extensions. - Escape Markdown characters that commonly break conversion (especially literal `$`). ## When to Use Use this skill when the user asks for: - A Word document / `.docx` - A report, memo, brief, or document that must be delivered as `.docx` - A document containing math or Mermaid diagrams that must render correctly in `.docx` ## Inputs to Confirm (fast) Before writing files, ensure you know: - **Base name**: the desired output base filename (example: `incident-postmortem-2026-02-23`) - **Title/sections**: what the document should contain (or infer from the user’s request) - **Math**: whether math is present and whether it uses `$...$`, `$$...$$`, `\(...\)`, or `\[...\]` (support all) - **Diagrams**: whether Mermaid diagrams are needed ## Instructions ### 1) Choose a descriptive `` name (required) Rules: - `` MUST be specific and descriptive (topic + optional date). - Output files MUST be named exactly: - `.md` - `.rendered.md` (after Mermaid replacement) - `.docx` ### 2) Write `.md` first (source of truth) Create a new Markdown file in the user’s **current directory** with the full content. Authoring rules: - Use headings, lists, and tables normally. - For code/shell snippets containing `$`, prefer fenced code blocks to avoid accidental math parsing. - For math, use any of: - Inline: `$...$` or `\(...\)` - Display: `$$...$$` or `\[...\]` ### 3) Escape/preflight to avoid pandoc errors (especially `$`) Pandoc enables TeX-style math parsing when math extensions are on. To avoid surprises: - If a dollar sign is **literal** (currency, environment variables, etc.), write it as `\$` or put the whole snippet in a code span/block. - Ensure `$...$` math is **balanced** (no stray/unmatched `$`). - Keep raw TeX commands inside math blocks when possible. ### 4) Convert Mermaid blocks to images via Kroki and embed For every Mermaid diagram in `.md`: - Represent it as a fenced block: ````markdown ```mermaid graph TD A --> B ``` ```` - Render it to a PNG via Kroki at `http://kroki:8000`. - Replace the Mermaid block with a Markdown image that will become a figure in the `.docx`. - Keep the **Mermaid source as a small caption** on the image (compact/minified is fine). Use the bundled script (recommended): - From the repository root: - `uv run agent-skills/make-docx-file/scripts/render_mermaid.py ".md" --output ".rendered.md" --kroki-url "http://kroki:8000" --out-dir "generated/diagrams"` If there are no Mermaid blocks, you can set `.rendered.md` to be identical to `.md`. ### 5) Convert Markdown to `.docx` with pandoc (math + features enabled) Run pandoc from the directory containing the markdown file: - **Input**: `.rendered.md` - **Output**: `.docx` Use an explicit `--from` with extensions so math and common Markdown features are interpreted consistently: - `pandoc ".rendered.md" -o ".docx" --from "markdown+tex_math_dollars+tex_math_single_backslash+raw_tex+fenced_code_blocks+pipe_tables+link_attributes+implicit_figures" --resource-path=".:generated/diagrams"` Notes: - `implicit_figures` helps ensure standalone images become Word figures with captions. - `--resource-path` must include the diagram output directory so pandoc can find the PNGs. ### 6) Validate and iterate After conversion: - Confirm `.docx` exists. - If pandoc fails: - Re-check literal `$` and unbalanced math delimiters. - Ensure Mermaid images were created and paths are correct. - Re-run the Mermaid rendering step, then pandoc again. ## Output requirement You MUST: - Create the files (don’t just describe them). - In your final response, report the filenames created: `.md`, `.rendered.md`, `.docx`.