convert-inputs — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited convert-inputs (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Source documents (bank statements, broker statements, receipts) come in mixed formats — PDF, xlsx, mhtml, html, sometimes plain text. Downstream skills work best on markdown: line-addressable, diff-friendly, easy to extract tables from.
This skill converts every file in regnskab{YYYY}/input/ (excluding the markdown/ subfolder) to a markdown file in regnskab{YYYY}/input/markdown/.
input/.build-workbook for the first time.Microsoft markitdown is the converter. Install once:
pip install 'markitdown[all]' --break-system-packagesThe markdown filename keeps the original extension as a suffix. This avoids collisions when the same stem exists as both .pdf and .xlsx (a common case for broker statements):
broker2025.pdf → input/markdown/broker2025__pdf.md
broker2025.xlsx → input/markdown/broker2025__xlsx.mdUse __{ext} (double underscore + extension) as the separator.
markitdown "regnskab{YYYY}/input/{filename}.pdf" -o "regnskab{YYYY}/input/markdown/{filename}__pdf.md"
markitdown "regnskab{YYYY}/input/{filename}.xlsx" -o "regnskab{YYYY}/input/markdown/{filename}__xlsx.md"PDF files become text. xlsx files become tables. mhtml / html become structured markdown. From this point on, downstream skills always read the markdown version — never the original.
Plain markitdown extracts text but not text inside embedded images. Some broker statements render as scanned tables (the original PDF was a scanned document, not a born-digital one).
Trigger condition: a PDF input produces < 50 lines of markdown but the file is > 50 KB.
When triggered, enable the markitdown-ocr plugin with Mistral OCR v3 as the LLM client:
pip install markitdown-ocr --break-system-packages
markitdown-ocr "regnskab{YYYY}/input/{filename}.pdf" -o "regnskab{YYYY}/input/markdown/{filename}__pdf.md"If Mistral isn't available, document the file as needing manual transcription in note{YYYY}.md.
Re-running this skill should be safe. The script:
input/ (top-level only — not the markdown/ subfolder).mtime(markdown) >= mtime(input)).After running, the user should see:
A simple check:
for f in regnskab{YYYY}/input/markdown/*.md; do
lines=$(wc -l < "$f")
if [ "$lines" -lt 5 ]; then
echo "WARNING: $f has $lines lines"
fi
donebuild-workbook.input/ for audit trail.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.