| name | report-pdf |
| description | Render a dev-team Markdown report to a polished, shareable PDF. Use when the user says "make a PDF of the report", "export the code-review report as PDF", "turn .dev-team-reports/code-review.md into a PDF", or wants any .dev-team-reports or reports Markdown file as a styled document to attach to a ticket or hand to a non-terminal stakeholder. |
| argument-hint | <path.md> [--out <path>] |
| user-invocable | true |
| allowed-tools | Bash |
Report PDF
Role: worker. This command renders one Markdown report to a styled PDF via the
shared render module. It is a mechanical wrapper — no reasoning, no file-by-file
searching. It never modifies the source Markdown.
You have been invoked with the /report-pdf command.
Arguments
<path.md> (required) — path to the Markdown report to render (for example
.dev-team-reports/code-review.md or .dev-team-reports/test-health-2026-07-16.md).
--out <path> (optional) — output PDF path. Defaults to the source path with
a .pdf extension, next to the source. A missing parent directory is created.
If no path argument is supplied, report path required — usage: /report-pdf <path.md> [--out <path>] and stop.
Steps
Invoke the shared render module through hooks/py.sh (never python3
directly — the shim resolves a real Python 3 on Windows too), passing the
arguments through verbatim:
sh "$CLAUDE_PLUGIN_ROOT/hooks/py.sh" "$CLAUDE_PLUGIN_ROOT/hooks/lib/report_pdf.py" <path.md> [--out <path>]
The module detects a PDF engine (fallback order: pandoc + headless
Chrome/Chromium → pandoc + weasyprint → pandoc + wkhtmltopdf → md-to-pdf) via
runtime probes, converts the report with the bundled report-print.css, and
prints a Rendering PDF via <engine>… progress line followed by one result
line. Report its output as-is:
- Exit 0,
PDF written: … — the styled PDF was produced; report the output
path and engine verbatim.
- Exit 0, skip message (
No PDF engine found. Install one, …) — no engine
was available. Report the skip message verbatim, including the single install
hint. This is non-fatal: the source Markdown is untouched.
- Exit 1,
PDF not rendered: … — the source file was missing, or an engine
was present but conversion failed. Surface the stderr message verbatim.
- Exit 2 — usage error (argparse); surface the message verbatim.
Do not add commentary beyond the module's own lines.
Related