Outstanding Invoices
Skill8 starsChanged 5 months agoMITView on GitHub
Show who owes the operator money — outstanding invoices (accounts receivable) as an aged summary (Current / 1-30 / 31-60 / 61-90 / 90+), and optionally build a dashboard and email it on a daily schedule. Reads from the connected accounting integration via the Invoices / Receivables report source.
In this repository101 other files it gives its agents.
- templates/CLAUDE.mdCLAUDE.md
- Add a FieldSkill
- Assemble Content PackSkill
- Assemble PackSkill
- Audit My AutomationsSkill
- Audit My DataSkill
- automate-thisSkill
- Brand My WorkspaceSkill
- Break Down A ChannelSkill
- Build Brand StrategySkill
- Build Customer VoiceSkill
- Build DocumentSkill
- Build FormSkill
- Build Knowledge Base From DocsSkill
- Build My ProofSkill
- Build My VoiceSkill
- Build Social StrategySkill
- Build SpreadsheetSkill
- Build Work Order ProcessSkill
- Cash Flow ForecastSkill
- Coach My CallsSkill
- Compare DocumentsSkill
- Connect A ToolSkill
- Delegate This WorkSkill
- Describe A ProductSkill
- Design My ScenesSkill
- Design Nurture SequenceSkill
- draft-replySkill
- Email Me A ReportSkill
- Estimate My BASSkill
- Extract DocumentSkill
- Find My Next MoveSkill
- Five Day ChallengeSkill
- Follow-up RadarSkill
- Form RadarSkill
- Get Found OnlineSkill
- Grill Me On This DecisionSkill
- import-from-anywhereSkill
- lead-triageSkill
- Learn My BusinessSkill
- Lint DocumentSkill
- Lint FormSkill
- Lint Nurture SequenceSkill
- log-this-callSkill
- make-it-happenSkill
- Make My VideoSkill
- Make Product DemoSkill
- Make Social PostSkill
- Make ThumbnailSkill
- missed-call-recoverySkill
- Nurture HealthSkill
- Onboard Team MemberSkill
- Outstanding DocumentsSkill
- Package My VideoSkill
- Plan My AdsSkill
- Plan My ContentSkill
- Plan My RoadmapSkill
- Plan My YouTubeSkill
- Prep For CallSkill
- Price My WorkSkill
- The first 60 shown.
The file
We split this skill into the rules it gives an agent
3 rules. About 0 are common, 2 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 59
Run it via the sync_receivables MCP tool (or POST /integrations/<integration_id>/sync-receivables) on the integration_id the fetcher …
- Distinctive: line 90
If the operator wants this delivered automatically — "email it to me and my bookkeeper every morning" — wire it.
- Distinctive: line 109
Use the operator's currency from the data, don't assume dollars.
≈ “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.
Files
Outstanding Invoices
You are giving the operator a clear picture of the money they're owed, and — if they want it — wiring a daily emailed receivables report so they never have to ask again. Cash flow is the operator's #1 worry; this is one of the highest-value things in the pack.
This skill builds on the reporting engine. Read knowledge/reporting-method.md for the source/measure/dimension model and the "email any dashboard on a schedule" mechanism, and knowledge/safeguards.md for the approval-queue and synced-ledger rails.
Step 1 — Fetch the AR picture
Run the fetcher first. It confirms the accounting integration is connected and queries the open-AR ledger (AUTHORISED, amount due > 0) into an aged summary plus the individual overdue invoices.
python ~/.claude/bos-run.py outstanding-invoices(The ~/.claude/bos-run.py launcher resolves the install location for you, so this runs from any folder.) The output shape is documented at the bottom of fetch.py. Branch on what it returns:
Step 2 — Branch on the integration state
A. Not connected (connected: false)
Tell the operator plainly and stop:
"Your accounting integration isn't connected yet, so there's nothing to report on. Connect it at https://app.trustpager.com/auto/integrations and re-run this."
B. Connected but never seeded (ledger_empty: true)
The integration is live but the receivables ledger hasn't been seeded — almost always a first run. Offer the one-time catch-up sync (it loads the existing invoices; after that the integration keeps the ledger live on its own — see the synced-ledger model in safeguards).
Run it via the sync_receivables MCP tool (or POST /integrations/<integration_id>/sync-receivables) on the integration_id the fetcher returned.
⚠️ If the sync comes back queued for approval (a
202/ApprovalPending— some keys are approval-gated), hand it to the operator: "That's queued for approval — approve it at https://app.trustpager.com/settings/api?tab=approvals, then I'll pull your receivables." Do not retry or route around it.
Once seeded, re-run Step 1 and continue to C.
C. Connected with data — present the picture
Lead with the aged summary, then the most-overdue invoices. Keep it scannable:
💰 Outstanding invoices — you're owed $[total_due] across [N] invoices
Current $[x] ([n])
1–30 $[x] ([n])
31–60 $[x] ([n])
61–90 $[x] ([n])
90+ $[x] ([n]) ← chase these first
Most overdue:
→ INV-#### · [customer] · $[amount] · [days] days overdue
→ INV-#### · [customer] · $[amount] · [days] days overdue
→ ... (and N more)Then offer the next move — usually one of: draft a chase message for the worst offenders, or set up the daily emailed report (Step 3).
If the 90+ bucket is heavy, or the same customers show up chronically late, offer the structural fix alongside the chase: the cash pull-forward toolkit (per knowledge/business-method.md §9.5 — deposits on booking, billing on completion day, charge dates aligned to customer paydays). The chase fixes this month; the toolkit fixes the pattern. Cash timing is strategy (§1). Keep it a short pointer — one offered move, never the toolkit restated.
Step 3 — Offer the daily AR digest (the real prize)
If the operator wants this delivered automatically — "email it to me and my bookkeeper every morning" — wire it. This rides the same mechanism as the Team Task Digest (see reporting-method §5). Three pieces:
- A dashboard —
create_report_dashboardnamed e.g. "Outstanding Invoices", thenadd_report_cardtwice using the Invoices / Receivables source:- a bar card:
amount_due(sum) grouped byaged_bucket, filteredstatus = AUTHORISEDandamount_due > 0. - a table card: the open invoices (invoice number, customer, due date, amount due, days overdue), same filter.
- a bar card:
- A
send_report_emailaction pointing at that dashboard, with the operator's chosen recipients. Discover its exact config withdescribe_action_type('send_report_email')— don't guess the field names. - An auto schedule firing it on the operator's cadence. For "7am every weekday" that's cron
0 7 * * 1-5in the operator's timezone. Discover the shape withdescribe_resource('auto_schedule').
Confirm recipients and the time before wiring, then build it. After it's live, tell the operator the first send lands at the next scheduled time and runs server-side — nothing needs to be open.
Build each card's query with
query_reportfirst and confirm the numbers, then save the proven spec into the card. A typo'd filter field is silently ignored at render (see reporting-method §2/§4).
Output format
Aged summary first (it's the headline), then the worst invoices, then one concrete next move — not a menu. If they're owed nothing, say it cleanly: "Nothing outstanding — every invoice is paid or not yet due. 🎉"
Tone
- Direct and reassuring. This is money — be precise with the numbers, never round away a balance.
- Use the operator's currency from the data, don't assume dollars.
- "Chase these first" framing on the 90+ bucket is useful; don't moralise about late payers.
What to never do
- ❌ Don't fabricate or estimate balances — only report what the ledger returns. If it's empty, seed it (B), don't guess.
- ❌ Don't send a chase message without drafting it and getting approval first.
- ❌ Don't bypass an approval
202— surface the approval link and wait (safeguards §1). - ❌ Don't tell the operator to "keep re-syncing" — the ledger stays live on its own after the one-time seed (safeguards §2).
- ❌ Don't name the accounting vendor as the source of truth in a way that confuses — say "your accounting integration" / "your receivables".
- ❌ Don't offer "pay less if you pay now" on an issued invoice unprompted — that's a same-scope cut (per
knowledge/business-method.md§8.5). Prepay rewards belong on future work (§9.5).
Common follow-ups
- "Draft a reminder for the 90+ ones" → draft per-customer chase messages, show them, then
send_email/send_smson approval. Chase drafts are customer-facing: outcome-led with no em dashes (perknowledge/business-method.md§18), and never a same-scope discount to settle an issued invoice (§8.5); any settlement concession is the operator's explicit call. - "Email this to me and Anna every morning" → Step 3.
- "Just the ones over $1,000" → re-query with an added
amount_due gt 1000filter. - "How much is genuinely overdue vs just current?" → it's already split; the non-
currentbuckets are the overdue total.
When this skill should NOT fire
- The operator asks about a single invoice or a single customer's balance — answer that directly (a filtered
query_report), don't run the whole AR sweep. - They're asking about payments they owe (accounts payable / bills) — this source is receivables (money in), not payables.
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
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.

