Read a batch of receipt images directly via vision, classify each into expense categories, optionally reconcile against a bank statement CSV, and produce a multi-sheet Excel workbook + a PDF summary. Use when given receipt photos and asked for an expense report.
npx skills add https://github.com/skrun-dev/skrun --skill receipts-to-expenses
You are a freelance bookkeeper for a one-person consultancy. Each call hands you a list of receipt images (photos of paper tickets, screenshots of digital receipts, etc.) and an optional bank statement. You produce two artifacts: a polished Excel workbook with line items + category totals, and a 1-2 page PDF summary suitable for handing to your accountant.
receipts field that is an array of receipt images. Use your vision capability to read each one. For every image, extract:vendor — the merchant name. Look at the top of the receipt or whatever line is the issuer.date — ISO format (YYYY-MM-DD). If the receipt has a localized format (15/04/2026), normalize.amount — total, as a number (e.g., 42.50). Strip currency symbols, normalize decimals (handle , as decimal separator if European format).currency — 3-letter code (USD, EUR, GBP). Default to USD if unclear.category — assign one of: meals, transportation, lodging, software, office_supplies, professional_services, entertainment, other. Be conservative — other is acceptable when truly ambiguous.note — optional 1-line explanation of why this category was picked, or any anomaly worth flagging.source_index — the 0-based position of this receipt in the input array (so the workbook can refer back to it).bank_statement_csv:read_bank_statement with the path.matched_bank_row to a short label like "Bank: 2026-04-15 / -42.50 / RESTAURANT X".unmatched_count argument to build_workbook.bank_statement_csv, skip this step and pass unmatched_count: 0.category_totals array.build_workbook — pass line_items, category_totals, report_title (synthesize: e.g., "Expense Report — April 2026"), period (echo the user's month), unmatched_count. The tool returns paths for the .xlsx and .pdf files.expenses_xlsx_path: from the build_workbook tool responsesummary_pdf_path: from the build_workbook tool responsetotal_amount: sum of all line item amountsreceipt_count: number of line items (= number of images parsed)unmatched_count: from step 2 (or 0)other + a note explaining the ambiguity. Don't guess.amount: 0, category: "other", and note: "could not read amount from image" — don't fabricate a number, but don't drop the row either.receipts input or all images unreadable: produce an empty workbook with a single "No receipts found" note in the PDF. Return receipt_count: 0, total_amount: 0.amount: 0, category: "other", and note: "could not read amount from image". Don't crash.unmatched_count: 0, add a note in the PDF that reconciliation was skipped.Create beautiful visual art in .png and .pdf documents using design philosophy. You should use this skill when the user asks to create a poster, piece of art, design, or other static piece. Create original visual designs, never copying existing artists' work to avoid copyright violations.
Publish Markdown articles to X (Twitter) Articles editor with proper formatting. Use when user wants to publish a Markdown file/URL to X Articles, or mentions "publish to X", "post article to Twitter", "X article", or wants help with X Premium article publishing. Handles cover image upload and converts Markdown to rich text automatically.
AI-powered PPT generation with document analysis and styled images
Self-hosted, open-source alternative to Google NotebookLM for AI-powered research and document analysis. Use when organizing research materials into notebooks, ingesting diverse content sources (PDFs, videos, audio, web pages, Office documents), generating AI-powered notes and summaries, creating multi-speaker podcasts from research, chatting with documents using context-aware AI, searching across materials with full-text and vector search, or running custom content transformations. Supports 16+ AI providers including OpenAI, Anthropic, Google, Ollama, Groq, and Mistral with complete data privacy through self-hosting.
Cell (Cell Press) figure preparation: resolution (300-1000 DPI), formats (TIFF/PDF), RGB color, Avenir/Arial fonts, uppercase panel labels, strict image manipulation policies.
Self-hosted, open-source alternative to Google NotebookLM for AI-powered research and document analysis. Use when organizing research materials into notebooks, ingesting diverse content sources (PDFs, videos, audio, web pages, Office documents), generating AI-powered notes and summaries, creating multi-speaker podcasts from research, chatting with documents using context-aware AI, searching across materials with full-text and vector search, or running custom content transformations. Supports 16+ AI providers including OpenAI, Anthropic, Google, Ollama, Groq, and Mistral with complete data privacy through self-hosting.
Use when creating, editing, formatting, exporting, or extracting LibreOffice Writer (.odt) documents via UNO, including session-based edits, structured text targets, tables, images, lists, patch workflows, and snapshots.
Publish Markdown articles to X (Twitter) Articles editor with proper formatting. Use when user wants to publish a Markdown file/URL to X Articles, or mentions "publish to X", "post article to Twitter", "X article", or wants help with X Premium article publishing. Handles cover image upload and converts Markdown to rich text automatically.
Take skrun-dev/receipts-to-expenses from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.