Tessa M.
Tessa's Runbook
An example built from real public AI use cases. The person is invented.
Then tell your agent which numbers to build.
Daily6
1Turn school portal changes into calendar entries
Claude, run by a scheduler · every day at 6:30am and 3pm
A calendar entry or a text lands for each new date, form or bring-this ask. Silent when the portal has nothing new.
31 calendar entries and 9 texts in 30 days
- Reads
- school portal, school emails, family calendar
- Lands
- the family calendar, plus a text only if due within 48 hours
- Loop
- Closes when the entry is ticked off in the calendar or the form confirmation email arrives; an open form is re-texted once.
Example · inventedText, 3:02pm: "Year 4 trip form is due Thursday. Permission slip plus 12 for lunch money. Entry added to the family calendar, Wed 8pm reminder set."
How to build it
Needs
- Read access to the school portal page and the school email inbox (a forwarding rule into one mailbox works if the portal has no feed).
- A family calendar the agent can write to.
- Ask your person which children, which year groups and what counts as urgent (default: due within 48 hours).
Build
1. Run twice a day, 6:30am and 3pm.
2. Fetch the portal news, homework and forms pages and the last day of school email. Compare with the stored snapshot from the previous run and keep only new items.
3. For each new item ask the model: "Is there a date, a deadline, a thing to bring or a form to sign? Return child, action, due date, or NONE."
4. Write each result as a calendar entry on the due date with a reminder the evening before. Mark the source in the entry.
5. Send a text only when the due date is within 48 hours. Otherwise stay silent.
6. Next morning, re-check forms marked due: if still open, send one text; never a second.
Check
- Post a test notice on the portal or forward a made-up school email: an entry appears within the next run.
- A day with no new items produces nothing.
- A notice with no date ("details to follow") becomes a calendar entry titled "date pending" on the next Monday and is rechecked daily until a date appears.2Draft a chase when an invoice is opened but unpaid
Claude, run by a scheduler · every weekday at 9am
A Gmail draft appears under the original thread. It only exists when an invoice was opened and is 3 days past due.
23 drafts in 30 days, 17 paid within a week, in the last 30 days
- Reads
- invoicing tool, Gmail, payments feed
- Lands
- a Gmail draft on the invoice thread
- Loop
- Closes when the payment lands in the feed; the thread is then labelled paid and no second draft is made.
Example · inventedDraft: "Hi [client], I can see invoice 0412 is open on your side and three days past terms. Is it with your finance team yet? Happy to resend to a different address. Tessa"
How to build it
Needs - An invoicing tool or sheet with due dates, sent date and an open-tracking flag. - Gmail with draft access (no send permission). - A payments feed or bank export to confirm receipt. - Ask your person for terms, the tone of past chasers and a list of clients never to chase automatically. Build 1. Run every weekday at 9am. 2. List invoices where today is 3 or more days past due and the open flag is true. Skip anyone on the never-chase list and anyone already drafted for. 3. Read the last 3 emails to that client for tone, and the person who normally pays. 4. Instruct the model: "Write 2 sentences, plain, first name, ask one question about where it is stuck, offer to resend. Never mention penalties." 5. Save as a Gmail draft on the original thread. Do not send. 6. At 9am next day, check the payments feed; if matched, label the thread paid and delete any unsent draft. Check - A made-up invoice opened and 3 days late produces a draft; one unopened produces none. - A paid invoice has no draft left.
3Track promises I make in email and close them myself
Claude, run by a scheduler · every evening, summary every Monday 8am
A Monday text lists promises still open, oldest first. Each is found in sent mail and closed when a matching email goes out.
112 promises logged and 94 closed by a matching send in 60 days
- Reads
- sent Gmail, Gmail attachments, calendar
- Lands
- a Monday text and a Notion list
- Loop
- Closes when a later sent message contains the promised attachment or answer.
Example · inventedText, Mon 8:00: "4 open. Oldest: send Ali the vendor shortlist (promised Oct 2, 9 days). Others: intro to Priya, Q4 scope doc, reference letter."
How to build it
Needs
- Gmail read access to sent mail.
- A Notion database or sheet with columns promise, to whom, date made, due, status.
- Ask your person which phrases they use for promises ("I will send", "by Friday", "I will intro you").
Build
1. Every evening read the day's sent mail.
2. Ask the model to extract each commitment: who, what, any due date. Ignore thanks and pleasantries.
3. Write rows to the ledger with status open. If the promise names no date, set due to 7 days after it was made; order the Monday text by due date, then oldest first.
4. Also each evening, for every open row search later sent mail to that person for the promised item (an attachment of the right type or the intro). If found, set status closed with the link.
5. Every Monday 8am text the open rows, oldest first, maximum 6. If none, send nothing.
6. Rows open more than 60 days are marked stale and dropped from the text, kept in Notion.
Check
- Send yourself a made-up "I will send this Friday" email: a row appears next day.
- Send the item: the row closes.4Plan dinners around the nights my calendar runs late
Claude, run by a scheduler · Sunday at 4pm
A week of dinners arrives as a Notion page with a grocery basket held unsubmitted. Meeting-heavy nights get 15 minute meals.
4 weekly plans in 30 days, 4 baskets approved, 2 edited
- Reads
- calendar, last 3 grocery receipts, pantry list
- Lands
- a Notion page and a held basket at the grocer
- Loop
- Closes when I approve the basket; the next Sunday a text asks which meals were cooked, and uncooked ones roll into the new plan.
Example · inventedNotion page: "Mon 15 min: lemon pasta. Tue free evening: roast chicken. Wed late (call to 7pm): tray-bake, prepped Tue. Basket: 31 items, 2 swaps for stock."
How to build it
Needs - Calendar read access, grocery order history or receipts, a pantry list the person keeps current. - A grocer account that allows building a basket without paying. - Ask your person for allergies, dislikes, number of eaters and a weekly food budget. Build 1. Sunday 4pm read next week's calendar and mark any evening with an event ending after 6pm as late. 2. Read the last 3 grocery orders and the pantry list for what is already in the house. 3. Instruct the model: "Plan 5 dinners. Late nights get meals under 15 minutes or a prepped one. Reuse ingredients across the week. Stay under the budget." 4. Write the plan to a Notion page. 5. Build the basket minus pantry items through the grocer's saved-list or basket page using browser steps, and leave it unsubmitted. 6. Text a link. Submit only when the person taps approve; delete the basket Monday 9am if untouched. 7. The following Sunday text: which of last week's dinners were cooked? Carry uncooked ones, and their ingredients, into the new plan. Check - The basket total is within the budget and no pantry staple is double bought. - Late nights match the calendar; a week with 3 late nights has at least 3 meals marked under 15 minutes or prepped.
5Warn me when Mum is about to run out of tablets
Claude, run by a scheduler · every day at 5pm
A text arrives only when a refill is due within 3 days and no pickup message has come. Silent otherwise.
6 warnings in the 90 days to 12 Oct, all refills collected before the last tablet
- Reads
- forwarded pharmacy texts, shared medication sheet
- Lands
- a text to me and my brother
- Loop
- Closes when a pickup confirmation text arrives; otherwise a second text goes to my brother.
Example · inventedText: "Mum's blood pressure tablets: last one is Thursday, no pickup message yet. Pharmacy opens 9am. I can draft the order text."
How to build it
Needs - Pharmacy text messages forwarded to one mailbox. - A shared sheet with each medicine, dose per day, last pickup date and pack size. - Ask your person who else to alert and how many days of margin they want (default 3). The sheet is kept current by one rule: whenever a pharmacy text says a new dose or medicine, the agent adds it and texts the person to confirm; a person also edits it by replying with the change. Build 1. Each day at 5pm read new pharmacy messages and update the last pickup date when one says collected or ready. 2. Compute days remaining as pack size divided by doses per day, counted from last pickup. 3. If days remaining is 3 or fewer and no ready or collected message exists, send the text to the person only. 4. If still no pickup message 24 hours later, send the same text to the named second person. 5. Never contact the pharmacy; the person does that. Check - Backdate a made-up medicine in the sheet: the warning arrives that evening. - A collected message silences it.
6Text me when the house uses far more power than the weather explains
Claude, run by a scheduler · every day at 7am
A text arrives only when yesterday's electricity use was 40% above what the same temperature normally brings, with the likely cause.
4 alerts in the last 90 days, 2 were a failing freezer door seal and an immersion heater left on
- Reads
- smart meter readings, local weather history, appliance list
- Lands
- a text
- Loop
- Closes when I reply found or ignore; found logs the cause, and a repeat day after found re-texts with the cost so far.
Example · inventedText: "Yesterday 31 kWh, normal for 4C is 19. Spike began 2am, flat all night. Pattern fits a heating element or a fridge compressor running constantly."
How to build it
Needs - Daily or half-hourly meter readings from the supplier or a smart meter app export, and a weather history source. - Ask your person for the alert threshold (default 40%), the list of big appliances and who to text. Build 1. Every day at 7am load yesterday's total and its half-hourly shape. 2. Build a baseline: median use on the 20 previous days with a mean temperature within 3 degrees of yesterday. 3. If yesterday exceeds the baseline by the threshold, find the hours where use sat flat or jumped. 4. Instruct the model: "Given this shape and this appliance list, name the 2 most likely causes in one sentence each." 5. Text the totals and causes. Send nothing on normal days. 6. If the next day is also over, text again with the kWh above baseline so far; stop after 3 days. Check - Replay a past day with a known fault: it fires. - A week of normal days sends nothing.
Weekly5
7Settle who covers school pickup when both our calendars clash
Claude, run by a scheduler · every Sunday at 6pm
A text to Karen and me lists the days next week when both calendars block pickup and proposes who covers, by a running tally.
4 clash days found in the 30 days to 12 Oct, 4 settled by Tuesday
- Reads
- both partners' calendars, school hours, cover tally
- Lands
- one text to both of us
- Loop
- Closes when one of us replies mine; the tally updates, and an unanswered clash is re-texted Monday 7pm.
Example · inventedText: "Next week clashes: Tue (my 3pm client, Karen travelling) and Thu (both calls). Tally says I took the last two, so Karen has Tue? Reply mine or yours."
How to build it
Needs - Read access to both calendars (shared family calendar or invitation), the school pickup time, a sheet holding the tally of covered pickups. - Ask both people for the pickup time, travel buffer (default 30 minutes) and any days that are fixed. Build 1. Sunday 6pm list next week's events for each person that overlap the window from pickup minus the buffer to pickup plus 15 minutes. 2. A day is a clash when both people have an overlap and no third carer is entered. 3. For each clash propose the person with fewer covered pickups in the last 8 weeks, unless they are travelling. 4. Text both people with reply words mine or yours. 5. Update the tally on reply, and add a calendar block for the person covering. 6. If no reply by Monday 7pm, text once more; never message the school. Check - A made-up double meeting produces a clash line. - A week without clashes sends nothing.
8Turn things friends mention in passing into birthday gift ideas
Claude, run by a scheduler · daily scan, text 14 days before a birthday
A text 14 days before a birthday lists three gift ideas built from things the person said or liked in my threads over the last year.
19 birthday texts sent in the last 12 months, 12 gifts bought from them
- Reads
- texts, email threads, contacts birthdays
- Lands
- a text
- Loop
- Closes when I reply bought or skip; bought is stored so the same idea is never offered to anyone else in the group.
Example · inventedText: "Priya, birthday Nov 2. In March she said her kettle is dying, in June she liked the green notebook at the market. Ideas: stovetop kettle, linen notebook, tea tin."
How to build it
Needs - Read access to texts and email, a contacts list with birthdays. - Ask your person for a budget band and people to leave out. Texts are read from a read-only copy of the phone message database on the person's computer, or from notification emails forwarded to the mailbox if that is not possible. Build 1. Each night read new messages from the phone message export or the messages bridge the person already uses, from people with birthdays. Keep lines where they state a want, a dislike, a hobby or a problem with something they own. Store each line, date and person as a row in a Notion or sheet table called hints. 2. Every morning find birthdays exactly 14 days ahead. 3. Instruct the model: "Using only the stored lines for this person, suggest 3 gifts in the budget band, each with the line that supports it. If fewer than 2 lines exist, say so." 4. Text the ideas to the person. If no lines exist, send nothing. 5. Record bought or skip by reply and keep the history. Check - Each idea cites a real stored line. - A person with no lines sends no text.
9Flag the client who has gone quiet before they churn
Claude, run by a scheduler · Friday at 3pm
A short note lists clients whose reply time has doubled against their own 8 week norm, with the last thing they said.
5 clients flagged in the last 90 days, 3 got a call and stayed
- Reads
- client emails, shared Slack channels, project tracker
- Lands
- a Notion page and one text if any are red
- Loop
- Closes when I log a call or the client replies inside their norm.
Example · inventedNote: "Harlow Co: replies now 4.2 days, was 1.6. Last message: 'let's revisit after the board.' Suggest a 15 minute call before Tuesday."
How to build it
Needs - Email and Slack read access for client threads, plus a client list. - A Notion page to write to. - Ask your person for the client list and which clients are most important. Build 1. Friday 3pm, for each client compute the median hours between my message and their reply over the last 8 weeks, and over the last 2 weeks. 2. Mark a client red when the recent median is 2 times the 8 week median and there are at least 4 exchanges in the window. 3. For red clients quote their last message and the open question between you. 4. Instruct the model: "Suggest one low pressure next step in a single sentence." 5. Write to Notion; text only if a red client is on the important list. Nothing red means no note. Check - Replay a past quiet client: it shows red the week before they left. - No red week produces no text.
10Find client hours on my calendar that never reached an invoice
Claude, run by a scheduler · Friday at 4pm
A text lists client calendar blocks from the last 4 weeks with no matching line on any invoice. Silent when everything matches.
11 gaps found in the 12 weeks to 12 Oct, 9 added to invoices
- Reads
- calendar, invoicing tool, client list
- Lands
- a text and a corrected invoice draft
- Loop
- Closes when I reply add or skip; add puts the line on the client's next invoice draft and skip is remembered.
Example · inventedText: "Harlow Co: Oct 3 (90 min) and Oct 7 (60 min) strategy blocks not on invoice 0409. Reply add or skip."
How to build it
Needs - Calendar read access with client names in event titles or attendee domains, an invoicing tool or sheet of invoice lines with dates, a client rate sheet. - Ask your person which meetings are non-billable (internal, networking) and the minimum block length to bill (default 30 minutes). Build 1. Friday 4pm read calendar events from the last 4 weeks where an attendee domain or title matches a client. 2. Drop events marked non-billable, declined, or shorter than the minimum. 3. For each client sum event time per week and compare to invoice lines dated in the same weeks, allowing a 15 minute tolerance. 4. Collect blocks with no invoice line covering them. 5. Text the list, one line per client, with reply words add or skip. 6. On add, append a draft line (date, minutes, rate) to the next invoice. On skip, store the event id so it is never raised again. Check - Delete a line from a test invoice: the matching block appears in the next Friday text. - A fully billed month sends nothing.
11Red-team my portfolio drift before I rebalance
a drafting agent and a separate sceptic agent · Friday after market close
A text proposes trades only if a fund drifts 5 points from target. A second agent argues against first, and I approve.
7 proposals in 6 months, 5 approved, 2 rejected
- Reads
- brokerage positions, target allocation sheet
- Lands
- a text with both arguments and approve buttons
- Loop
- Closes when I approve or reject; after APPROVE I place the trade by hand and reply done, which is logged.
Example · inventedText: "VTI +5.8 over target. Proposal: sell 40 shares, buy bonds. Sceptic: gains are short term, wait 9 days. Approve / Reject."
How to build it
Needs - Read access to brokerage positions and a sheet of target weights. - The path Tessa runs: the text alone, and she places the trade herself in the broker app. A builder whose broker offers an order API may add order placement after an APPROVE reply. - Ask your person for the drift threshold, tax lot rules and the funds that are off limits. Build 1. Friday after close, compare each fund weight to its target. 2. Silent unless any fund differs by 5 points or more. 3. Agent one proposes the smallest set of trades that restores targets, preferring long term lots. 4. Agent two receives only the proposal and is told: "Find reasons this is a mistake: tax, timing, fees, concentration." 5. Text both arguments with the reply words APPROVE and REJECT (or buttons if the messaging app offers them). 6. Place nothing yourself: the person trades after reading the texts. Check - A made-up 6 point drift produces a proposal and a counterargument. - A tap of Reject places no order.
Monthly and quarterly3
12Draft a price-match request to each provider every quarter
Claude, run by a scheduler · first Monday of each quarter
Gmail drafts arrive for internet, phone and insurance providers, quoting a published competitor price. I send the ones I want.
11 drafts in 12 months, 8 sent after review, 6 reductions won
- Reads
- bills in the finance folder, competitor public prices
- Lands
- Gmail drafts
- Loop
- Closes when the provider replies; the reply is detected by a Gmail search on the thread, and the new rate is written to the provider row in the bills sheet.
Example · inventedDraft: "Hi, my fibre plan is 62 a month. [Competitor] lists the same speed at 45 for new customers. Can you match it or tell me what you can offer?"
How to build it
Needs - A folder of bills, Gmail draft access, web search. - Ask your person for the providers and a minimum saving worth asking for (default 8 a month). Build 1. Each quarter read the latest bill from every provider and extract plan, speed or cover, and monthly price. 2. Search public price pages for the closest equivalent from two competitors. 3. Keep providers where a competitor is cheaper by the minimum or more. 4. Draft a short retention request citing the competitor plan and price. 5. Save to Gmail. The person sends. 6. When a reply arrives, log the new rate. Check - Drafts cite a real competitor price. - Providers with no cheaper option get no draft.
13Search for unclaimed money in our names
Claude, run by a scheduler · first of each quarter
A Notion list shows possible matches in state unclaimed property databases for our names and old addresses, with claim drafts.
4 sweeps across 3 states in 12 months, 9 possible matches reviewed, 2 claimed
- Reads
- state unclaimed property sites, old addresses list
- Lands
- a Notion page
- Loop
- Closes when the claim is filed and paid; each possible match is reviewed within 7 days of the note or re-listed once.
Example · inventedPage: "Possible match: utility deposit, 84, address 2014 Elm St. Claim form drafted. Needs ID upload."
How to build it
Needs - Web access to official state unclaimed property search sites. - A list of full names and past addresses. - Ask your person for the states they lived in. Build 1. Each quarter search each state site for each name and address. 2. Keep results where name and a past address match. 3. Score each hit: exact full name plus a past address on file is a match; a name variant (middle initial, maiden name, nickname) plus an address is a possible match; a name alone is dropped. If a state site needs a captcha, list it under "check by hand" in the note with its link. Draft the claim answers, never uploading identity documents. 4. Write to Notion with a link to each official claim page. 5. The person files; mark paid on receipt. Check - A known test match appears, and a state with a captcha shows under check by hand. - No results produces a one line note.
14Check back 30 days after a decision to see how it landed
Claude, run by a scheduler · daily scan, check-back 30 days after
A text asks one question about a decision I logged a month ago and writes my answer back to the journal.
22 decisions logged and 17 check-backs answered in the last 90 days
- Reads
- meeting notes, sent mail, journal page
- Lands
- a text and a Notion journal page
- Loop
- Closes when I answer; the answer is stored and a pattern note is posted monthly.
Example · inventedText: "Oct 12 you decided to drop the Tuesday ops call for Harlow. 30 days on: did the issues pile up in Slack instead? Reply better, same, worse."
How to build it
Needs - Meeting notes or sent mail to find decisions, a Notion page for the journal. - Ask your person for what to count as a decision (a change to a process, price, hire, vendor or commitment). Build 1. After each meeting note or sent email containing words like "we decided", "I will switch", "let us go with", extract the decision, why, and the expected result in one line. 2. Write it to the journal with a check date 30 days later. 3. Each morning find entries due today and text one question: did the expected result happen? Reply better, same or worse. 4. Save the reply. 5. On the first of the month post a note listing which kinds of decisions turned out worse than expected. Check - A made-up decision is logged and asked about on its date. - Unanswered items are asked once more after 7 days, then closed.
When something arrives6
15Pre-mortem every proposal before it goes out
Claude, triggered by a draft · when I save a proposal draft
A page arrives within 3 minutes listing the three hardest questions a sceptical finance lead would ask, with a suggested answer to each.
13 proposals reviewed in the last 60 days, 9 of the predicted questions were asked
- Reads
- proposal draft, past client questions
- Lands
- a comment on the draft
- Loop
- Closes when the client answers; the questions they actually asked are logged and compared with the predicted ones.
Example · inventedComment: "Q1: Why is phase two priced at 2x phase one? Q2: What happens if the pilot misses its target? Q3: Who owns the data at the end? Suggested answers below."
How to build it
Needs - Access to the proposal document, a folder of past proposals with the questions clients asked. - Ask your person to describe the usual sceptic (CFO, board, buyer). To start the log from nothing, seed it by reading the last 10 sent proposals and the replies to them and extracting every question the client asked; after that each new reply adds to it. Build 1. Trigger when the document tool reports a save (a folder watch or change webhook) on a file in the proposals folder with "proposal" in the title, at most once per hour per file. 2. Load the 10 most recent past questions logged for similar clients, plus the monthly pattern note from the decision journal so decision types that went badly get harder questions. 3. Instruct the model: "Act as a sceptical finance lead. List the 3 questions most likely to stall this proposal, each with a one sentence suggested answer from the document." 4. Post as a comment on the draft. 5. When the client responds, log their actual questions and mark which were predicted. Check - Each question points at a real number in the draft. - The hit rate is logged after each reply.
16Flag a client ask that sits outside the signed scope
Claude, run on each client email · on each client email
A text and a draft change-order note arrive when an ask goes beyond the signed scope. Everything inside scope passes silently.
7 out-of-scope asks caught in the last 60 days, 5 became paid change orders
- Reads
- client emails, signed scope documents
- Lands
- a text and a Gmail draft
- Loop
- Closes when the client accepts the change order or withdraws the ask; no reply in 5 days produces a nudge draft.
Example · inventedText: "Harlow Co asked for a second regional rollout plan. Scope covers one. Draft change order ready: 12 hours, 2 weeks. Send?"
How to build it
Needs - Gmail read access, a folder with each client's signed scope, Gmail drafts. - Ask your person for the client list, the rate card and the tolerance (default: small clarifications are free). Build 1. On each new email from a client address, load that client's scope document. 2. Instruct the model: "List any new deliverable, extra location, extra stakeholder or deadline change requested in this email that the scope does not cover. Return NONE for clarifications and questions." 3. If NONE, stop with no output. 4. Otherwise estimate effort from past change orders and draft a short change-order note citing the scope clause and the rate. 5. Text the summary with the draft link. Never send to the client. 6. If the client has not answered 5 days after the draft is sent, draft a gentle nudge. Check - Send a made-up email asking for a second deliverable: a text and draft appear. - A scheduling question produces nothing.
17Show only what changed in a contract redline that matters
Claude, triggered by an attachment · when a revised contract arrives
A one page note arrives listing changed payment, liability, termination and renewal clauses, old text beside new, ignoring typos.
9 redlines compared in the last 6 months, 4 with a liability change I would have missed
- Reads
- previous contract version, revised attachment
- Lands
- an email to me and a Notion page
- Loop
- Closes when I mark each change accept or push back; push back produces a reply draft quoting the old clause.
Example · inventedNote: "Clause 9 liability cap changed from fees paid in 12 months to 3 months. Clause 14 renewal now automatic, 90 days notice. Ten other edits are wording only."
How to build it
Needs - Both contract versions as documents, Gmail, Notion. - Ask your person which clause types matter (default: payment, liability, termination, renewal, exclusivity, IP). Build 1. When an email arrives with a revised contract attachment and a prior version exists in the folder, load both. 2. Align clauses by heading and number. 3. Instruct the model: "For each clause in the listed types, return old text, new text and whether the meaning changed. Ignore punctuation and wording-only edits." 4. Write the note with meaning changes first. 5. Email it to the person and create the Notion page with accept and push back fields. 6. On push back, draft a reply quoting the old clause and asking to keep it. Check - Alter one liability number in a test copy: it is the first item. - A typo-only redline reports no meaning changes.
18Draft a compensation claim when a flight lands over three hours late
Claude, run by a scheduler · every 30 minutes on travel days
A claim draft arrives in Gmail when a flight lands 3 hours or more late on a route covered by EU or UK passenger rules.
3 claims drafted, 3 sent after review, 2 paid in the last 12 months
- Reads
- trip confirmation emails, flight status feed, airline claim page
- Lands
- a Gmail draft
- Loop
- Closes when the airline replies; after 14 days of silence a second draft escalates to the national enforcement body.
Example · inventedDraft: "Flight 220 from Madrid landed 3h 41m after schedule on 14 Oct. The delay was not caused by weather. Under EU 261 I claim 400 euros per passenger for a 1,500 to 3,500 km flight. Booking ref and boarding passes attached."
How to build it
Needs - Gmail with trip confirmations, a flight status source, and Gmail draft access. - Passenger names and booking references come from the confirmation emails; bank details are never stored, the person adds them when sending. Build 1. Read confirmation emails and keep a list of flights with scheduled arrival and booking reference. 2. On travel days, every 30 minutes after scheduled arrival, check actual arrival. 3. Claim only when the delay is 3 hours or more and the flight departs from the EU or UK, or an EU or UK airline lands there. 4. Work out the amount: 250 euros up to 1,500 km, 400 euros up to 3,500 km, 600 euros beyond. Ask the model to write a firm two paragraph claim naming the regulation and distance band. 5. Save as a draft with the boarding pass attached. Text "Claim drafted" only after a draft exists. 6. Fourteen days later, if the thread has no reply, draft an escalation to the national enforcement body. Check - Replay a past delayed flight: a draft appears with the correct band. - A 2 hour delay produces nothing.
19Draft an appeal that quotes my policy when a claim is denied
Claude, triggered by a denial letter · when a denial letter arrives
A Gmail draft appeal arrives within ten minutes, quoting the policy clauses that cover the claim and listing what to attach.
2 appeals drafted, 1 overturned in the last 12 months
- Reads
- denial letter, policy PDF, medical or repair records
- Lands
- a Gmail draft and a checklist
- Loop
- Closes when the insurer decision arrives; a second-level appeal draft starts automatically if it is refused.
Example · inventedDraft: "The denial cites exclusion 7.1 (pre-existing conditions). Section 4.2 covers sudden onset conditions, and the attached report dates onset to 3 March, after the policy began on 1 January. I ask for review."
How to build it
Needs - The policy PDF in a folder the agent can read, the denial letter by email, Gmail draft access. - Ask your person for supporting records and the appeal address. Build 1. Trigger on an email or scan containing words like "denied", "not covered" or "declined" from the insurer. 2. Extract the claim number, stated reason, clause cited and appeal deadline. 3. Search the policy for the clause cited and any clause that grants cover. Quote both exactly; if a quote cannot be found, leave it out. 4. Instruct the model: "Write a respectful appeal that argues from the policy text, in under 300 words, and list the documents to attach." 5. Save as a draft with the deadline in the subject. Never send. 6. When a refusal arrives, draft the next-level appeal using the same quotes plus the insurer's stated reason. Check - Every quoted clause appears word for word in the policy. - The deadline matches the letter.
20Let my automations diagnose and patch their own failures
Claude, run by a scheduler · every night at 1am
A morning text lists any routine that failed or produced nothing unexpectedly, with a patch waiting as a pull request.
14 failures found in the 90 days to 12 Oct, 11 patched after I approved
- Reads
- run logs, script repository, output counts
- Lands
- a pull request and a text
- Loop
- Closes when I merge the patch or reject it; a rejected patch is logged with my reason so the same fix is not offered again.
Example · inventedText: "Invoice chaser failed twice: the invoicing export renamed Opened to Viewed. Patch in PR 31, tested against last night's file. Merge?"
How to build it
Needs - Run logs for every routine, a repository holding the scripts, permission to open a pull request but not to merge. - Ask your person for the expected daily output count of each routine. Build 1. At 1am read the last 24 hours of logs and each routine output count. 2. Flag a routine if it errored twice, or if its output is zero on a day it normally produces something. 3. For each, read the error and the script and reproduce it with the saved input. 4. Instruct the model: "Propose the smallest change that fixes this and write a test that fails before the change and passes after." 5. Open a pull request with the diagnosis; text a one line summary. 6. Never merge. Record merged or rejected and why. Check - Break a script on purpose: a patch appears that passes its test. - A healthy night sends no text.
Tools
Reads from
- Gmailsent mail, receipts, drafts
- Calendarfamily and work
- Notionledgers and pages
