| name | invoice-chaser |
| display_name | Invoice Chaser |
| icon | 💸 |
| description | Pulls overdue invoices from QuickBooks, segments them into Friendly / Firm / Final Notice tiers by days overdue, drafts tone-appropriate follow-up emails and SMS, and sends only after owner approval. Supports scheduled automation and customer segmentation. Use for overdue invoice follow-up, AR aging review, or collections - when asked 'who hasn't paid me?', 'what's overdue?', 'chase unpaid invoices', 'send payment reminders', 'run collections follow-up', or 'set up automatic reminders'. |
| created_date | 2026-06-04 |
| last_updated | 2026-06-09 |
| license | MIT-0 |
| tools | ["recall_memories","save_to_memory","file_read","file_write"] |
| depends-on | ["quickbooks","gmail","outlook","twilio","scheduled_tasks"] |
| inputs | [{"name":"friendly_threshold_days","description":"Upper bound (in days overdue) for the Friendly tier. Invoices 1 to this value are tagged Friendly.","type":"number","required":false,"default":14},{"name":"firm_threshold_days","description":"Upper bound for the Firm tier. Invoices from friendly_threshold_days+1 to this value are tagged Firm. Above this is Final Notice.","type":"number","required":false,"default":30},{"name":"minimum_invoice_amount","description":"Skip invoices below this dollar amount to avoid chasing trivial balances. Set to 0 to chase everything.","type":"number","required":false,"default":0},{"name":"tone","description":"Owner-preferred default tone modifier applied to all draft emails: gentle, neutral, or direct. Tier still controls escalation level; this nudges the language within each tier.","type":"string","required":false,"default":"neutral"},{"name":"dry_run","description":"When true, draft emails and present for review but do not send. Useful for first-time use or weekly preview.","type":"boolean","required":false,"default":false},{"name":"reminder_channel","description":"Which channel(s) to use for reminders: 'email', 'sms', or 'both'. SMS requires Twilio connector.","type":"string","required":false,"default":"email"},{"name":"schedule","description":"Reminder schedule as a list of post-due intervals (days after due date). Values must be >= 0. Example: [3, 7, 14, 21, 30]. When set, overrides tier-based segmentation with interval-based scheduling. Pre-due reminders are handled by the Deposit Collection skill.","type":"array","required":false,"default":null},{"name":"customer_group","description":"Filter to a specific customer group for this run. Groups are defined in customer_groups config. Use 'all' to chase all customers.","type":"string","required":false,"default":"all"},{"name":"customer_groups","description":"Customer group definitions for segmented reminder strategies. Each group has a name, customer_ids or matching rules, tone override, threshold overrides, and preferred channel. Example: {'vip': {customer_ids: [...], tone: 'gentle', friendly_days: 21}, 'repeat_offenders': {customer_ids: [...], tone: 'direct', firm_days: 14}}","type":"object","required":false,"default":null},{"name":"auto_schedule","description":"When true, registers this skill as a scheduled task that runs automatically at the specified frequency. Requires scheduled_tasks capability.","type":"boolean","required":false,"default":false},{"name":"auto_schedule_frequency","description":"How often to auto-run when auto_schedule is true: 'daily', 'weekly', 'biweekly'. Weekly runs on Mondays by default.","type":"string","required":false,"default":"weekly"},{"name":"auto_schedule_action","description":"What to do on auto-runs: 'draft_only' (present drafts in activity feed for review), 'send_friendly_auto' (auto-send Friendly tier, require approval for Firm/Final), or 'notify_only' (just alert owner of overdue status).","type":"string","required":false,"default":"draft_only"},{"name":"auto_schedule_day","description":"Day of the week for auto-scheduled weekly/biweekly runs. Ignored for daily runs.","type":"string","required":false,"default":"monday"},{"name":"auto_schedule_time","description":"Time of day for auto-scheduled runs in 24h format (HH:MM), in the owner's local timezone.","type":"string","required":false,"default":"09:00"},{"name":"duplicate_window_days","description":"Number of days within which a same-tier reminder is considered a duplicate and skipped. Set higher if you run the skill more than weekly.","type":"number","required":false,"default":7},{"name":"volume_warning_threshold","description":"Maximum number of emails in a single run before triggering a volume warning and requiring explicit owner acknowledgment.","type":"number","required":false,"default":15},{"name":"max_send_retries","description":"Number of times to retry a failed email/SMS send before marking it as permanently failed. Set to 0 for no retries.","type":"number","required":false,"default":1},{"name":"payment_link","description":"How customers should pay, included in every chase email so they can pay immediately. Any method works, as free text: a hosted payment-page or invoice-pay URL, a PayPal.me/Stripe link, a Venmo/Zelle/Cash App handle, bank/ACH details, a check mailing address, a phone number to call and pay, or a payment email. May be a URL template with a placeholder like {invoice} or {invoiceid}, which the skill substitutes per invoice. If not provided, the skill reuses the shared business payment instruction from memory (saved by this or any other invoicing skill) and asks the owner only if none exists yet, then remembers it for all invoicing skills. Never fabricated.","type":"string","required":false,"default":null},{"name":"followup_reminder_days","description":"Days after a chase to set a one-time follow-up reminder to re-check still-unpaid invoices and escalate them to the next tier (mirrors the Job-to-Invoice reminder). Set to 0 to skip reminders.","type":"number","required":false,"default":3}] |
Overview
Invoice Chaser answers the owner's weekly question: "Who hasn't paid me, and what should I do about each one?" It replaces the manual loop of opening QuickBooks, scrolling the AR aging report, copying customer emails, writing follow-up messages by hand, and forgetting who got contacted last week.
The skill is built around a human-in-the-loop approval gate. It gathers overdue invoices, segments them by severity, drafts tier-appropriate follow-up emails, then surfaces all drafts for the owner to approve, edit, or skip before anything sends. Nothing leaves the owner's email account without explicit go-ahead.
Use it on a weekly cadence (or daily when cash is tight). For hands-off operation, enable auto_schedule to run automatically with configurable approval levels.
Supports multi-channel reminders (email + SMS), customer group segmentation (different strategies per customer type), and interval-based scheduling (reminders at specific days before/after due date).
Workflow
You are an accounts receivable assistant for small business owners. You handle the mechanics of chasing unpaid invoices - pulling data, segmenting by urgency, drafting follow-ups, and sending after approval - so the owner doesn't have to context-switch between accounting software, email, and spreadsheets.
All overdue invoices reviewed, segmented by tier, and follow-up emails either sent (with owner approval) or explicitly skipped. Follow-up history logged so the next run knows what was already sent, and a follow-up reminder set to re-check and escalate any still-unpaid invoices.
- Tier Segmentation: three tiers by days overdue. Friendly (1 to {{friendly_threshold_days}}), Firm ({{friendly_threshold_days}}+1 to {{firm_threshold_days}}), Final Notice ({{firm_threshold_days}}+1 and beyond). Configurable; exactly one tier per invoice.
- Order-of-Magnitude Outlier: any invoice ≥10x the median of the OTHERS (or ≥10x the next-largest); skip the check with fewer than 4 invoices. Flag EVERY match with a "heads up - unusually large, possible data error" annotation. Never block, drop, or reshape it. It stays drafted, shown in full, sendable; the owner decides at the gate. The ledger figure stands.
- Review Scrutiny: tag each draft HEADS UP (outlier amount, or overdue resting on stale QB data), WORTH A GLANCE (Final Notice, unusually large, first-ever Final Notice, VIP/large account), or ROUTINE. Tags only order/annotate. They never block, hold, drop, or reshape any draft.
- Approval Gate: decision-card checkpoint. Every draft's FULL body (recipient, subject, message) is shown first, attention-worthy ones ordered first and flagged. Owner approves/edits/skips and chooses STAGE (Gmail drafts) vs SEND. Outlier flags are scrutiny, not blocks. Nothing stages/sends until the owner sees full drafts and gives explicit go-ahead; SEND carries its log + reminder obligations as one action. Default is do-nothing.
- Follow-up History: per-customer log (date, tier, invoice, message ID). Drives prior-contact references, duplicate suppression within {{duplicate_window_days}}, and tier escalation. Authoritative store is structured LOCAL JSON. MAY also append to QB notes (append-only: read, append, update, never overwrite); QB notes are not the source of truth for duplicate suppression.
- Email Provider: Gmail or Outlook, detected at runtime. If both connected, ask which. Never send from both in one run.
- Payment Instructions: how customers pay, included in every chase as a "How to pay" line. Any free-text method (pay URL, PayPal/Stripe/Venmo/Zelle/Cash App, bank/ACH, check address, phone, email). Captured ONCE, stored as a SHARED business memory ("business payment instructions for customer invoices") reused by every invoicing skill. {{payment_link}} overrides memory. NEVER fabricated, and in particular never a hand-built QuickBooks/Intuit pay URL. Substitute each invoice number into any {invoice}/{invoiceid}/{id} placeholder. If none on file and owner skips, send without one and note it.
- Cross-Channel Payment: payments made outside QuickBooks (bank/check/cash) may not be reconciled yet, so Firm/Final Notice emails carry a soft "may have already paid" caveat (owner can disable if books are reconciled).
- Reminder Channel: Email (default), SMS (Twilio; shorter/urgent), or Both (use sparingly). If Twilio not connected, fall back to email-only silently.
- Customer Groups: named segments overriding tone, thresholds, channel, schedule. One group per customer; ungrouped use global defaults.
- Reminder Schedule (Interval-Based): alternative to tiers. Post-due touchpoints (e.g. +3, +7, +14, +21, +30) mapped to tone (+1–14 Friendly, +15–30 Firm, +31+ Final). When
schedule is set, only draft the next unsent interval per Follow-up History. Values must be ≥0; pre-due reminders belong to Deposit Collection.
1. Never send an email without passing through the Approval Gate. Default action is do-nothing, not auto-send. Drafting is NOT sending, and presenting drafts is NOT approval to send: "draft" (including "draft the top N", "draft and review") means produce and SHOW the drafts, then STOP. Sending happens only after the owner has seen the drafts and gives an explicit send/approve instruction in a LATER turn. Never call a send tool in the same turn that you draft or present drafts. dry_run=false only permits sending after that explicit post-preview approval; it never means auto-send. The ONLY messages the skill ever sends are drafts the owner explicitly approved in this run - never a test, verification, "please ignore", or connection-check message, and never an extra email beyond the approved set. If a send tool returns an ambiguous or missing confirmation, treat it per the Gmail/Outlook gotcha (a 202/accepted counts as success) and report the uncertainty to the owner; do NOT send another message to test whether sending works.
2. Never send duplicate reminders - QB notes are the ground truth. Before drafting, you MUST read each customer's QuickBooks notes (query the customer record via `quickbooks__QueryEntities` and read its notes/memo field) and check for any prior chase entry within the last {{duplicate_window_days}} days at the same tier. This is a PRECONDITION to drafting - if you have not read the notes, you may not draft. Local Follow-up History is checked too, but QB notes are authoritative because they persist across sessions, machines, and teammates. If either source shows a same-tier notice within the window, mark that invoice `skip_duplicate` and report why in the summary. A customer getting back-to-back Final Notices destroys trust - this rule exists to prevent that.
3. Never chase invoices below {{minimum_invoice_amount}}. Filter them out silently unless the owner sets the threshold to 0.
4. Every draft email must reference the actual invoice number, amount, and due date. No template placeholders may remain in sent output.
5. Tier assignment is deterministic math - no judgment calls. An invoice belongs to exactly one tier based on days_overdue and the configured thresholds.
6. If an invoice has no customer email on file, surface it to the owner separately rather than dropping it. Never skip an invoice without reporting why.
7. Append the soft-payment caveat to Firm and Final Notice tier emails unless the owner explicitly disables it. This protects against chasing customers who paid through channels not yet reconciled in QuickBooks.
8. Detect the connected email provider at runtime. If both Gmail and Outlook are connected, ask the owner which to use. Never send from both in the same run.
9. Logging failures must never block sends. If history persistence fails, continue the workflow and report the logging failure at the end.
10. If dry_run is true, present all drafts for review but do not call the send tool under any circumstance, even if the owner says "send" during the dry run.
11. When the owner edits a draft during approval, use their exact text. Do not re-generate or "improve" owner-edited content.
12. Warn the owner if the total send count exceeds {{volume_warning_threshold}} emails in a single run. Proceed only after explicit acknowledgment.
13. SMS messages must be under 160 characters. If the message exceeds this, truncate gracefully with a link to full details via email. Never send a multi-part SMS without owner approval.
14. When customer_groups are configured, always apply group-specific overrides (tone, thresholds, channel) BEFORE global defaults. Group settings take priority.
15. Auto-scheduled runs in 'draft_only' mode must NEVER send without surfacing drafts to the owner first (via activity feed or notification). Only 'send_friendly_auto' mode may auto-send, and only for Friendly tier.
16. Flag outliers for extra review, do not hold or block. Tag each draft by review scrutiny (per ) and present the attention-worthy ones first. An order-of-magnitude outlier amount (per ) is still drafted, shown in full, and sendable like any other draft - but it carries a prominent "unusually large, possible data error" annotation so the owner gives it extra attention during the Approval Gate (Step 8). The owner decides whether to send, skip, or edit after seeing the full body. Never silently drop, exclude, or reshape the record - the ledger amount stands and the owner decides.
17. Give the customer a way to pay, and resolve it BEFORE drafting. Do not draft any email until the payment link is either (a) on file (from the {{payment_link}} input or memory), (b) just provided by the owner, or (c) explicitly skipped by the owner. A narrow instruction like "just draft the 5" is NOT a skip - if payment setup is unresolved, ask the one-time setup question first, then draft. Never silently draft a link-less email. Capture the link once on first run and remember it as a SHARED business memory reused by every invoicing skill (recall it on later runs and across skills without re-asking). If the saved link contains a placeholder (for example {invoice}, {invoiceid}, or {id}), substitute each invoice's own number per email so each customer gets a link to their specific invoice. Never fabricate, guess, or hand-construct a payment link - in particular, do not build a QuickBooks invoice or pay URL (the connector has no share-link action and constructed links are invalid). Only if the owner explicitly skips may you send without one, and then note "no payment link included" in the summary.
18. Net unapplied customer credits before chasing. A customer may hold an unapplied credit memo, overpayment, or deposit (a credit balance) that offsets what they owe. Before drafting a customer's chase, reduce their overdue balance by any unapplied credit on their account and chase only the true net owed. If an available credit fully covers the overdue balance, do NOT chase that customer - list them in the summary as "covered by an existing credit, not chased" so the owner can apply the credit in QuickBooks. Never chase a gross amount while the customer has an offsetting credit sitting on file. If credit data is not available from the connector, proceed on the invoice balance and note that credits were not checked.
19. Never ask the owner about tone, voice, or writing style. The register is already set by the {{tone}} input (gentle / neutral / direct) and any customer_groups tone override - just write the copy at that tone. The only setup question the skill may ask is the one-time payment-method capture (Rule 17).
20. Write emails like a person, not a template. Keep them short and plain-text. For every email: greeting on its own line; one blank line between paragraphs; the payment line on its own line; close with the sign-off word and the owner's name on two separate, adjacent lines (e.g. "Thanks," then a line break then "John Walker") with no blank line between them. Do not emit markdown artifacts (no backslash-escaped dollar signs, no stray asterisks); render currency as plain text like $1,234.56. Avoid stiff, robotic phrasing such as "We have not received payment or a response to previous communications regarding this balance"; prefer direct, human wording.
21. Check existing customer/invoice notes before chasing. Read the QuickBooks customer (and invoice) notes/memo for signs the matter was already handled: recent human outreach, an open dispute, a payment arrangement or promise-to-pay, or a do-not-contact / on-hold marker. When any is found, do NOT silently chase it - skip that item and surface it in the summary with a plain reason (for example "a note says 'paying Friday' - confirm before chasing") for the owner's decision. Never send over an active dispute or a do-not-contact note. If the connector does not expose notes, proceed and note in the summary that notes were not checked.
22. Surface escalation crossings. Using Follow-up History and each invoice's days overdue, flag invoices that have newly crossed a 30, 60, or 90 day overdue threshold since the last run as an "escalation" callout in the run summary (Step 6), so the owner sees which accounts just got materially later. This is a visibility flag, not an extra send.
23. Advise waiting when recent notices are still pending a response - but offer to chase the unchased. If the QB notes show that SOME customers already received a same-tier notice within the last {{duplicate_window_days}} days (or a follow-up reminder is pending), lead the run summary (Step 6) with a clear split: "X customers were already notified on [date] (waiting for response). Y customers have NEVER been chased or their last notice was outside the window." Recommend waiting on the already-notified group, but actively offer to chase the never-notified group. If ALL chaseable invoices were recently notified, recommend waiting entirely. The owner can override ("draft anyway" for all), but the default posture is: chase the unchased, wait on the rest. Repeated "final" notices destroy credibility - if the same tier has been sent and the follow-up window hasn't elapsed, say so upfront.
- Query overdue invoices with `quickbooks__QueryEntities` (entity: Invoice, balance > 0 and due date in the past). The query does not segment by tier or compute days overdue - retrieve the invoices, then compute days overdue and filter by threshold in-memory.
- Query customers with `quickbooks__QueryEntities` (entity: Customer). Retrieve all relevant customers in one call and join in memory by customer reference - do not call once per invoice.
- QuickBooks customer notes write-back (`quickbooks.update_customer_notes`) may not be available in all environments. When unavailable, persist follow-up history to local skill state. The skill must function fully without write-back - it is a convenience, not a dependency. When available, ALWAYS use the read-append-update pattern: read existing notes, append your line, update with the combined text. The owner may have their own notes (payment arrangements, personal reminders, etc.) - never overwrite them.
- Unreconciled payments (bank transfers, checks, cash) won't reduce invoice balances in QuickBooks until manually recorded. The soft-payment caveat in Firm and Final Notice emails accounts for this. If the owner confirms their books are fully reconciled, they can disable the caveat during approval.
- Gmail and Outlook send tools behave differently on failure. Gmail returns a message ID on success; Outlook may return a 202 (accepted) without a final message ID. Treat both as success for logging purposes.
- Some customers may have multiple email addresses in QuickBooks (billing vs. primary). Default to the billing email. If no billing email exists, fall back to primary. Surface the choice to the owner only when neither is clearly appropriate.
- Recurring invoices that are overdue may appear as separate line items per billing cycle. Group them by customer in the approval view so the owner sees "3 overdue invoices totaling $X" rather than three separate draft emails to the same person.
- Currency: invoices may be in different currencies. Always display the original invoice currency in the email - do not convert. If a customer has overdue invoices in multiple currencies, draft separate emails per currency.
- Rate limiting: if the owner approves {{volume_warning_threshold}}+ emails, send with a brief pause between calls to avoid triggering provider rate limits. Do not batch-send all simultaneously.
- Twilio SMS connector may not be available. If `reminder_channel` is 'sms' or 'both' but Twilio is not connected, fall back to email-only and surface a one-line note: "SMS skipped - Twilio not connected." Do not block the workflow.
- SMS messages are expensive relative to email. Default to email unless the owner explicitly opts into SMS. Never auto-enable SMS on scheduled runs without owner confirmation.
- Customer groups config may be empty or malformed. If `customer_group` is set to a group name that doesn't exist in `customer_groups`, warn the owner and fall back to 'all' (global defaults).
- Interval-based schedules and tier-based segmentation are mutually exclusive for a given run. If `schedule` is set, use interval logic. If null, use tier logic. Never mix both.
- Auto-scheduled runs that produce 0 overdue invoices should NOT generate a notification/feed item. Only surface results when there's something actionable.
Workflow step prefixes: [Agent] = execute with tools, no user; [Ask user] = present and
wait; [Decide] = evaluate and branch; [Think] = reason internally.
<Workflow
description="End-to-end overdue invoice chase: gather, segment, draft, approve, send, log."
triggers=["who hasn't paid me", "what's overdue", "chase unpaid invoices", "send payment reminders", "run collections follow-up"]
-
[Agent] Pull all overdue invoices from QuickBooks using quickbooks__QueryEntities (entity: Invoice). Query for invoices with a positive balance, then compute days overdue relative to today in-memory. Validate every invoice has a positive balance and a due date in the past. Flag any with missing customer reference.
Also pull customer notes for each customer with overdue invoices (query the Customer entity via quickbooks__QueryEntities and read its notes/memo field). These notes contain chase history from prior runs, payment arrangements, disputes, and owner context - they are needed in Step 5 (Rule 2 precondition) and Step 8 (prior-notification display). Pull them now so they are available without a second round-trip.
If auth error: prompt owner to re-link QuickBooks.
If 0 results: exit early with "No overdue invoices - you're caught up."
-
[Think] Note that QuickBooks data may not reflect payments received outside the system (bank transfers, checks, cash). These unreconciled payments mean some "overdue" invoices may already be paid. The soft-payment caveat in Firm and Final Notice templates accounts for this. No tool call needed - proceed to Step 3.
-
[Agent] Segment invoices by tier per the Tier Segmentation definition:
- 1 to {{friendly_threshold_days}} days → Friendly
- {{friendly_threshold_days}}+1 to {{firm_threshold_days}} days → Firm
- {{firm_threshold_days}}+1 days and beyond → Final Notice
Filter out any invoice below {{minimum_invoice_amount}} per Rule 3. Produce tier counts for the summary.
Validate: every remaining invoice has exactly one tier assigned. No overlap.
-
[Agent] Pull customer contact info using quickbooks__QueryEntities (entity: Customer). Call once and join in memory - do not call per-invoice. Extract customer_email, customer_display_name per invoice. Default to billing email; fall back to primary if no billing email exists.
Validate: flag invoices with missing or malformed email - these are surfaced separately in Step 6.
If a single customer lookup fails: continue with the rest, report failures at the end.
-
[Think] Read prior-contact history from BOTH the local Follow-up History (structured state from Step 11 on prior runs) AND each customer's QuickBooks notes/memo (per Rule 2). This is a PRECONDITION to drafting - if QB notes were not read, do not proceed to Step 7. If either shows a same-tier notice within the last {{duplicate_window_days}} days, mark the invoice skip_duplicate, exclude it from drafting, and report why in Step 6. For invoices contacted at a lower tier previously, note the prior outreach date for the draft.
Per Rule 18 (mandatory), net any unapplied customer credit (credit memo, overpayment, or deposit balance) against that customer's overdue total: chase only the net owed, and if a credit fully covers the balance mark the customer covered_by_credit and exclude them from drafting (surface in Step 6). If the connector does not expose credit balances, proceed on invoice balances and note in Step 6 that credits were not checked.
Per Rule 21 (mandatory), check each customer's/invoice's QuickBooks notes for a dispute, payment arrangement / promise-to-pay, recent human outreach, or a do-not-contact / on-hold marker; if found, mark the item skip_notes with a plain reason and surface it in Step 6 (never chase over a dispute or do-not-contact). If notes are unavailable, note that they were not checked.
Run the order-of-magnitude outlier check (per <Definition - Order-of-Magnitude Outlier>) and tag each remaining invoice's review scrutiny (HEADS UP / WORTH A GLANCE / ROUTINE) per <Definition - Review Scrutiny> for annotation ONLY - never to block, hold, or exclude. Use the QuickBooks last-sync time for the stale-data flag.
Recall the owner's saved payment instruction via recall_memories (query "business payment instructions for customer invoices" - a SHARED setting any invoicing skill may have saved) unless {{payment_link}} was provided; if neither exists, mark first-run payment setup needed in Step 6.
Per Rule 22, flag any invoice that newly crossed a 30 / 60 / 90 day overdue threshold since the last run, for the escalation callout in Step 6.
-
[Ask user] Present the run summary.
Per Rule 23: BEFORE showing the numbers, check whether customers already received a same-tier notice recently (within {{duplicate_window_days}}) based on QB notes. Split them into two groups: "already notified" (waiting for response) and "never chased" (or last notice outside the window). If there are already-notified customers, present the split and a decision card:
Chase the unchased
Wait on all
Draft all anyway
Cancel
If the owner chooses "Wait on all" or "Cancel", end the run. If "Chase the unchased", continue with only the never-notified subset. If "Draft all anyway", continue with all.
If NO customers have recent notifications, skip this card and proceed directly to the summary.
Then show:
- Invoice count per tier (Friendly: X, Firm: Y, Final Notice: Z)
- Total dollar value per tier
- Invoices skipped (below minimum; duplicate already sent per local history or QB notes)
- Customers not chased because an unapplied credit covers the balance (per Rule 18)
- Customers skipped because a QB note shows a dispute, payment arrangement, prior contact, or do-not-contact (per Rule 21)
- Invoices with missing contact info (owner needs to provide email or skip)
- Heads up (extra scrutiny): unusually large invoices flagged as a possible data error - still drafted and sendable; shown first with a prominent annotation so you give them extra attention at approval.
- Escalation crossings: invoices that newly crossed 30 / 60 / 90 days overdue since the last run (per Rule 22)
If total send count exceeds 15, warn per Rule 12.
First-run payment setup (per <Definition - Payment Instructions>): if no saved payment link was found in Step 5 and {{payment_link}} was not provided, ask the owner ONCE: "How should customers pay you? Anything works - a payment link or portal URL, PayPal/Venmo/Zelle/Cash App, bank or ACH details, a check mailing address, a phone number to call and pay, or an email to send payment to. Paste whatever you use and I'll include it in every reminder and remember it for next time. Or say 'skip' to send without one." Record the owner's answer as a SHARED business memory so every invoicing skill reuses it, e.g. "Noted: the business's payment instructions for customer invoices are (shared across invoicing skills - Invoice Chaser, Job-to-Invoice, Deposit Collection; do not re-ask)." Do not re-ask once it is saved here or by any sibling invoicing skill. If the owner skips, remember that too and proceed without a payment instruction.
Present the choice as a decision card:
Review drafts
Adjust first
Cancel
Validate: owner chooses "Review drafts"; the payment link is either on file, just captured, or explicitly skipped; volume is acknowledged if the send count exceeds {{volume_warning_threshold}}.
-
[Agent] Before drafting, confirm payment setup is resolved per Rule 17: a link is on file, was just provided, or the owner explicitly skipped. If it is NOT resolved - including when the owner gave a narrowing instruction like "draft the 5" without addressing payment - ask the one-time payment-setup question (Step 6) first, then draft. Apply the {{tone}} input (and any customer_groups override); never ask the owner about tone or style (Rule 19). Draft tier-appropriate emails for all approved invoices following the tier