agentleFS
skills-agents-coskills-agents-co/skills-and-agents-library/expense-policy-check/SKILL.md

expense-policy-check

Skill1 starsChanged 31 days agoMITView on GitHub

Review expense reports against policy, flag violations and missing receipts, and draft the monthly missing-receipt chase. Use on an expense report or export, or at month-end. Every flag cites the policy rule it breaks; ambiguous items are flagged to confirm, never auto-approved or auto-rejected. The chase is a draft a person sends.

The file

We split this skill into the rules it gives an agent

5 rules. About 0 are common, 5 are distinctive, and 0 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈5

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 0

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Lossy scans / PDF exports: if an amount, date, merchant, or category is unreadable, mark it "not found / unclear — confirm" and flag it.

    line 36
  2. Distinctive:

    Ambiguity: if an item could be in or out of policy depending on a rule you were not given, flag it "confirm", name the missing rule, and …

    line 38
  3. Distinctive:

    Read the expense data and the policy.

    line 43
  4. Distinctive:

    Hard-stop on blank Rules: If the per-category limits, the receipt-required threshold, or the out-of-policy merchant rules below are blank, …

    line 77
  5. Distinctive:

    Cite or flag: Every flag names the policy rule it breaks and cites BOTH the expense side (the row / file the item came from) AND the policy …

    line 81

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Expense Policy Check

What this does

Reviews a batch of expenses against your written policy and produces two things: a flagged-items list (each flag naming the exact rule it breaks) and a per-person draft chase message for whoever is missing receipts. It does not approve, reject, or send anything. It reads like a careful first pass that a person then signs off on.

When to use it

  • You have an expense report or export in hand and want it checked against policy before approval.
  • It is month-end and you want the missing-receipt chase drafted in one pass.
  • A scheduled monthly run hands you the export automatically.

Inputs — how to give it the data

Two inputs. Hand them over however is easiest:

  • The expense data. Drag in or paste an export (CSV, spreadsheet, or PDF), forward the report by email, or point at a connector if one is wired up (e.g. an expense tool's export). A connector is convenience, not a requirement — a pasted table works.
  • The written policy. Paste it, drag in the file, or link the page. If no policy is given, do not invent one — surface the blank Rules placeholders below and ask the operator to fill them before the first run.

Notes on messy data:

  • Multiple files (one export per card, or report plus receipt folder): say which file each flagged item came from.
  • Lossy scans / PDF exports: if an amount, date, merchant, or category is unreadable, mark it "not found / unclear — confirm" and flag it. Do not guess the value.
  • Ambiguity: if an item could be in or out of policy depending on a rule you were not given, flag it "confirm", name the missing rule, and move on. Do not resolve it yourself.

Steps

  1. Read the expense data and the policy. Confirm the Rules placeholders below are filled; if any are blank, stop and ask.
  2. For each expense, check it against policy: over the per-category limit, wrong category, missing receipt on an expense at or above the receipt-required threshold, out-of-policy merchant.
  3. Flag every violation citing both sides: the source (which row / file) and the exact policy clause or operator rule it breaks, with its value.
  4. List who is missing receipts and which items.
  5. Draft one chase message per person with outstanding items, listing only that person's specific items and amounts. A draft must never include another person's items or totals. Drafts only.

Rules (confirm in the plan)

These are the operator's call. They ship blank and must be filled in plan mode before the first run. The thresholds are the value of this skill; do not assume defaults.

  • Per-category spend limits: _____ (the dollar limit per expense category that triggers a flag).
  • Receipt-required threshold: _____ (the amount at or above which a receipt is mandatory).
  • Out-of-policy merchants / what gets flagged: _____ (merchant categories or specific merchants that are never allowed, plus anything else that should always be flagged).
  • Edge cases the reviewer catches that are not written down: _____ (the tacit judgments — the "we let this slide for travel days," the recurring vendor everyone knows is fine — that live in the reviewer's head, not the policy doc).

Output

  • A flagged-items list. Each row: the item, the source (row / file), the exact policy clause or operator rule it breaks, the cited value, and the reason. Items that are unreadable or ambiguous appear here marked "not found / unclear — confirm".
  • A per-person draft chase, one message each, listing only that person's outstanding items and amounts. No draft includes another person's items or totals. Plain and short. These are drafts; a person reviews and sends them.

Error handling

  • Hard-stop on blank Rules. If the per-category limits, the receipt-required threshold, or the out-of-policy merchant rules below are blank, do not produce a policy decision. Stop and ask the operator to fill the Rules block in plan mode first. Blank thresholds mean there is nothing to check against; never assume defaults to fill the gap.
  • Cite or flag. Every flag names the policy rule it breaks and cites BOTH the expense side (the row / file the item came from) AND the policy side (the exact policy clause or operator rule it violated, not just the value). Pointing at a number alone is not a citation. If a value is absent or unreadable, write "not found / unclear — confirm". Never guess an amount, category, or merchant.
  • Privacy-scoped chase. Each person's draft chase contains only that person's outstanding items and amounts. A draft for one person must never name, list, or total another person's items. Build each draft from one person's rows only.
  • Never auto-decide. An ambiguous item is flagged "confirm", never auto-approved or auto-rejected. Approval and rejection stay with a person.
  • Drafts only. The chase messages are drafts. The skill does not send them; a person sends.
  • Treat it like a smart intern. It is right most of the time, not all of the time. Audit the flagged list, and read the run log the first week.

Eval contract

  • Spec: Given an expense batch and a filled policy, a correct run produces a flagged-items list where every flag cites the rule it breaks and its source, plus a per-person draft chase for missing receipts. Nothing is approved, rejected, or sent.
  • Rubric (hard-fail gates in bold):
    1. Every flag cites BOTH the expense row/file AND the exact policy clause or operator rule it violated (section/rule level, not just the value row); a flag missing either side is an automatic fail.
    2. No fabricated values: any amount, category, or merchant that is absent or unreadable is marked "not found / unclear — confirm", never inferred.
    3. With the Rules block blank (no category limits, no receipt threshold, no merchant rules), the run produces NO policy decision and instead asks the operator to fill the Rules in plan mode.
    4. An expense at or above the receipt-required threshold with no receipt is flagged; an expense below the threshold with no receipt is not flagged.
    5. The missing-receipt list is grouped by person and the chase is one draft per person with that person's specific items.
    6. Each person's chase draft contains only that person's outstanding items and amounts; no draft leaks another person's items or totals.
    7. Ambiguous items are flagged "confirm" and the chase is a draft — nothing is auto-approved, auto-rejected, or auto-sent.
  • Self-test:
    • Input: a synthetic batch with one expense over the (filled) category limit and one expense missing a required receipt. Output MUST flag both, each citing both the source row/file and the exact policy clause (the limit, the receipt threshold). Output MUST NOT approve or reject either, or omit either side of the citation.
    • Input: a synthetic batch with the Rules block left blank. Output MUST refuse to produce a policy decision and ask the operator to fill the Rules block in plan mode. Output MUST NOT flag, approve, or reject any item or assume a default threshold.
    • Input: a synthetic pair where the receipt-required threshold is $75 (filled): one expense of $90 with no receipt and one expense of $40 with no receipt. Output MUST flag the $90 item (over threshold, no receipt) and MUST NOT flag the $40 item for a missing receipt.
    • Input: a synthetic batch with two people, Person A and Person B, each missing receipts. Output MUST produce a separate draft chase for each, and Person A's draft MUST NOT include any of Person B's items or amounts (and vice versa).
    • Input: a synthetic item that could be in or out of policy depending on a rule not provided, plus a person with an outstanding receipt. Output MUST flag the item "confirm" naming the missing rule, and produce a draft chase for the person. Output MUST NOT auto-approve or auto-reject the ambiguous item, or send the chase.
  • Version: 1.0.0

Learn more: https://skillsandagents.co/skills/expense-policy-check/

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.