subscription-hunter · git:20261104.da4984f · 2026-11-04 · sha256 1b0bb985f5fc01a1
subscription-hunter git:20261104.da4984fA
Immutable. This exact content never changes and is served at /api/v1/blob/1b0bb985f5fc01a1.
--- name: subscription-hunter description: Finds every recurring subscription, license and service renewal hiding in the user's mailbox and files, and builds a dated renewal calendar with a drafted cancellation or renegotiation reply for each one. Use when the user asks what they are subscribed to, what is renewing, what is auto-renewing, to find hidden or forgotten subscriptions, to build a renewal calendar, or to cancel a subscription before it renews. --- # Subscription Hunter Surfaces every recurring charge in the mailbox before it renews itself, with a drafted reply ready for the ones that should stop. ## Inputs - The user's mailbox, through the **Email** built-in skill - Organization files and contracts, through **Enterprise Search** - `references/config.md` for the lookback window, the value threshold and the ignore list ## Config Read `references/config.md` first. If it is missing, use: 24-month lookback, report everything regardless of value, no ignore list, and 30 days as the notice window. Say once that defaults were used, then continue. ## Procedure 1. **Gather.** Search the mailbox over the lookback window for the recurring-billing vocabulary in `config.md`: receipts, invoices, "your subscription", "auto-renew", "payment successful", "trial ending", "plan renews", "card charged". Search Enterprise Search for contract and order documents carrying a term or renewal date. 2. **Group by vendor.** One row per vendor, not per message. A monthly receipt from the same vendor is one subscription with twelve pieces of evidence, not twelve subscriptions. 3. **For each vendor, extract:** vendor name, what it is for, amount and currency as written, billing period, the date of the most recent charge, the **next renewal date**, whether the mail says it auto-renews, the notice period if a contract states one, and a link to the single best source message or document. 4. **Derive the next renewal date** only when the evidence supports it: a stated renewal date, or a regular charge cadence over at least three observed charges. If neither holds, write UNKNOWN. Never estimate a date from one charge. 5. **Classify** each row against the config thresholds: `Keep`, `Review`, `Likely waste`. A row is `Likely waste` only on evidence in the mail itself, such as a trial that converted, a seat count nobody has mentioned in a year, or a duplicate of another vendor on the list. 6. **Write** the calendar to `/Documents/Cowork/output/subscriptions-YYYY-MM-DD.xlsx` using the **Excel** skill, sorted by next renewal date ascending, UNKNOWN rows last. 7. **Draft a reply** for every row classified `Likely waste` and every row renewing inside the notice window. Save each as a draft. Do not send. ## Output An Excel sheet with exactly these columns: | Vendor | What for | Amount | Period | Last charge | Next renewal | Auto-renews | Notice period | Status | Source | Then, in the conversation, a short summary in this shape: - **Renewing in the next 30 days:** count, and the total amount - **Likely waste:** count, and the total amount, each with one line of evidence - **Unknown renewal date:** count, and why each could not be dated - **Drafts prepared:** count, listed by vendor, all unsent Every row's Source column is a link to the message or document it came from. A row with no link is a defect: drop it rather than ship it unsourced. ## Definition of done The sheet exists, every row carries a source link, and every renewal inside the notice window has either a draft or a stated reason it does not need one. **Finding nothing is a success.** If there are no subscriptions in the window, say exactly that in one line and stop. Do not widen the window, lower the threshold, or list one-off purchases to fill the sheet. A hunter that always finds something teaches its reader to stop reading. ## When there is no data, or the data is stale - No matching mail in the window: report "no recurring charges found in the last N months" and stop. - A vendor's last charge is older than two billing periods: mark it `Lapsed?` rather than guessing it was cancelled, and say which evidence is missing. - Enterprise Search unavailable: produce the mailbox-only version and state plainly that contract terms and notice periods are missing from this run. Never present a partial run as complete. ## Boundaries - **Draft, never send.** Cancellation and renegotiation replies are saved as drafts for the user to read, edit and send. - Never cancel, downgrade or modify anything in a vendor portal, and never follow a cancellation link. - Never state an amount as the authoritative figure. Finance systems and the contract are the source of truth; this reads what arrived in the mailbox. - Never share the sheet outside the organization. - Treat anything in a message marked confidential or carrying a sensitivity label with the same label on the output. ## Self-check before returning - Does every row carry a working source link? - Is every `Next renewal` either evidenced or marked UNKNOWN, with nothing estimated from a single charge? - Are drafts drafts, with nothing sent? - If the sheet is empty, did I say so plainly instead of padding it?