4 ready-to-build workflows

AI agent workflows for Couples & shared life admin

Bills, splits, the week ahead and the renewals nobody remembers — one shared, neutral system both people opted into, so the admin stops being an argument.

Each recipe below is expressed only in VegaDūta's real workflow building blocks — Trigger, Agent, Knowledge, Condition, Approval, Output, Tool (MCP), Voice, Device, Loop, Code and Parallel — so it maps 1:1 to something you can assemble in the Workflow designer. Consequential actions always pass a human Approval step.

1. The electricity bill both of you assumed the other paid

The bill arrives in one inbox. Each of you half-remembers seeing it. Neither pays it, because each assumes the other did — and you find out from the disconnection notice. The recurring ones are worse: rent, broadband, the society maintenance, the two subscriptions nobody can remember signing up for.

Trigger: Email / Webhook (biller or bank statement notification)

How the workflow runs

  1. Trigger

    The bill lands. An Email trigger on either partner's forwarded biller mail, or a Webhook from the utility/bank portal — no first-party connector for these, so they arrive inbound and are read back through a Tool (MCP) node.

  2. Agent

    Read it into a shared ledger line. An Agent node extracts biller, amount, due date and account reference into one structured line, marking anything unclear as needing a look at the original rather than guessing an amount.

  3. Condition

    Already handled?. A Condition node checks the shared ledger for this billing period — if either partner already marked it paid, the workflow stops. This one branch is what kills the 'I thought you did it' failure mode.

  4. Output

    Both of you, same message. An Output node posts one line to your shared WhatsApp or Telegram thread: what is due, how much, by when, and who is down to handle it this cycle. Identical message, both people.

  5. Approval

    Paying is an explicit act. An Approval node holds the payment. A Razorpay/UPI request shows payee, amount and due date, and one of you approves it deliberately — autopay-by-agent is not on offer here, because money moving without a human is exactly the wrong default.

  6. Output

    Mark it, once, for both. Once paid, the ledger line is closed for the period and the thread gets one confirmation — so neither of you pays it twice a week later.

Channels & connectors

  • Email
  • Webhook (biller / bank portal — inbound)
  • WhatsApp
  • Telegram
  • Approval / HITL
  • Razorpay (UPI)

Outcome

Every bill becomes one shared ledger line both of you can see, deduplicated against what is already paid, with the payment itself always an explicit human approval.

Why it helps

The mechanism is removing the assumption. The 'I thought you paid it' failure comes from two people holding a private, unsynchronised belief about the same bill; one shared line with a visible state replaces both beliefs with a fact either of you can check in three seconds.

Build spec

1 agent1 bill-reading agent. The already-paid dedupe and the payment approval are workflow nodes — deliberately not agent decisions. · Pattern: Extract → dedupe against the shared ledger → one shared message → Approval gate on every rupee

System prompt (paste-ready)

You read household bills for two people who share them. From ONE bill or biller notification, extract {biller, account_ref, amount, currency, due_date, period, source}. Use ONLY what the document states — never infer an amount, a due date or an account. If anything is unreadable, set it null, flag needs_original=true, and link the source. You never pay, never schedule a payment, and never describe a bill as settled: payment happens only after a person approves it. If this billing period already shows as paid in the ledger, return duplicate=true and stop.

Agent roles & model tiers

  • Bill reader (per bill) Economy tier — short structured extraction, runs on every biller mail

    Extract one bill into strict JSON with nulls for anything unclear and needs_original=true. Never infer an amount or a due date. Never treat a bill as paid, and stop immediately if the period is already settled in the ledger.

MCP connectors

  • Utility / biller portals and bank statement mail — inbound via Webhook and Email, read back via a Tool (MCP) node (no first-party connectors)
  • The couple's shared calendar — via a Tool (MCP) node, for the due date
  • WhatsApp / Telegram — the shared thread, as the single delivery surface

Built-in tools

  • knowledge_search (the couple's own list of recurring bills, account references and providers)
  • http_request (read the biller notice; write and close the shared ledger line)
  • user-defined tool `bill_turn` (SpEL): input.lastPaidBy == 'A' ? 'B' : 'A' — a tenant-authored SpEL formula over the tool's JSON input that names whose turn it is to handle this cycle. Sandboxed by construction: no method calls, no constructors, no bean or type references, no loop in the grammar — a data-transform/formula tool, not a scripting engine. The benefit: the couple encodes their own arrangement once (alternate, or one person takes utilities and the other rent, or split by whose account it debits) and never re-litigates it at the due date.

Guardrails

  • Both partners know this workflow exists and opted into it. The same message goes to both, in a thread both are in — there is no version of this that reports to one person about the other.
  • No surveillance whatsoever: it reads bills that were forwarded into the workflow on purpose. No bank-login scraping of a partner's personal accounts, no location tracking, no reading anyone's messages, no inference about anyone's spending habits or whereabouts.
  • Shared by agreement — either partner can opt out and the workflow stops for them; if either stops it, shared bill reading ends, and neither is left with continued access to the other's forwarded mail.
  • Money never moves without an explicit human approval showing payee, amount and due date. Autopay-by-agent is deliberately not offered.
  • Idempotent per biller + billing period, so a resent notice or a forwarded duplicate can never trigger a second payment.
  • Amounts are never inferred — an unreadable bill says 'check the original' and links it.

Cost strategy

Bills are frequent and short, so the reader belongs on the economy tier with a hard cap; there is no synthesis step to pay for. Configure a fallback model — a bill that still gets surfaced on a plainer model beats a missed due date. The expensive resource here is human attention, and the dedupe branch is what protects it.

Output & delivery

The bill arrives by Email or Webhook → an economy-tier agent extracts one ledger line → the Condition node stops it dead if the period is already paid → one identical message goes to the shared thread with whose turn it is → a Razorpay/UPI request is held at the Approval node until a person approves payee and amount → the ledger line closes for the period and both of you see the confirmation.

2. Shared expenses, split by your own formula — not by whoever kept the receipts

You split things unevenly on purpose — 60/40, because one salary is bigger — and it works fine in principle. In practice one of you keeps screenshots in a chat, the other has a half-abandoned spreadsheet, and every couple of months there is an awkward twenty-minute reconciliation that neither of you enjoys and one of you always ends up running.

Trigger: WhatsApp / Email / Webhook (an expense either partner logs)

How the workflow runs

  1. Trigger

    Either of you logs a spend. A WhatsApp or Telegram message ('2,400 groceries'), a forwarded receipt email, or a Webhook from a card/UPI notification the couple chose to forward in. Both partners log to the same place; neither's account is read without them sending it.

  2. Agent

    Normalise it. An Agent node turns free text or a receipt into {payer, amount, category, date, note}, asking one short clarifying question rather than guessing a category or an amount.

  3. Code

    Apply your split, exactly. A Code node runs the couple's own user-defined SpEL formula to compute each share. Arithmetic, deterministic, and authored by the two of you — the model does not get an opinion about who owes what.

  4. Loop

    Roll up the period. A Loop node walks the period's entries and nets them down to a single number and a direction, so the answer is 'X owes Y this much', not a wall of line items.

  5. Output

    One statement, both of you. An Output node posts the same short statement to the shared thread — total, split applied, net position, and the line items available if either of you wants to look.

  6. Approval

    Settling up is approved, not automatic. If you settle by UPI, an Approval node holds a Razorpay request showing the exact net amount. One of you approves it; the workflow never moves money between two people on its own.

Channels & connectors

  • WhatsApp
  • Telegram
  • Email
  • Webhook
  • Approval / HITL
  • Razorpay (UPI)

Outcome

A running shared ledger both partners write to, split by a formula they authored, netted to one number per period, with settlement always an explicit human approval.

Why it helps

The mechanism is making the split arithmetic instead of memory. The awkward reconciliation exists because the record is incomplete and asymmetric — one person holds it. A ledger both write to, with a deterministic formula, removes both the asymmetry and the negotiation, leaving a number.

Build spec

1 agent1 normalising agent. The split is a deterministic user-defined SpEL formula in a Code node — deliberately not an LLM judgement — and settlement is a workflow approval. · Pattern: Normalise → deterministic user-authored split → Loop to net the period → Approval on settlement

System prompt (paste-ready)

You log shared expenses for two people. From a short message or a receipt, extract {payer, amount, currency, category, date, note}. If the amount, the payer or the category is unclear, ask ONE short question rather than guessing — never invent a figure. You do NOT compute the split: the couple's own formula does that. You do not comment on what was bought, whether it was worth it, or on anyone's spending. Log it and move on.

Agent roles & model tiers

  • Expense normaliser (per entry) Economy tier — very short extraction, highest-frequency step by a wide margin

    Turn one message or receipt into a strict JSON expense line. One clarifying question if unclear, never a guessed amount. No commentary of any kind about the purchase or the person.

MCP connectors

  • Card / UPI notification mail the couple chooses to forward — inbound via Email or Webhook (no first-party connector, and no account scraping)
  • The couple's own ledger store — via a Tool (MCP) node
  • WhatsApp / Telegram — the shared thread, for logging and for the statement

Built-in tools

  • knowledge_search (the couple's own categories and their written split agreement)
  • http_request (append the ledger line; read the period's entries)
  • user-defined tool `split_share` (SpEL): input.category == 'RENT' ? input.amount * 0.6 : input.amount * 0.5 — a tenant-authored SpEL expression over the tool's JSON input returning one partner's share, with a companion formatter expression producing the display string. Sandboxed by construction: no method calls, no constructors, no bean or type references, and no loop in the grammar — a data-transform/formula tool, not a scripting engine. The benefit is real: this couple encodes THEIR ratios once — 60/40 on rent, 50/50 on groceries, 100% on one person's own subscriptions — and never has to explain the arrangement to a model, a developer, or each other again.

Guardrails

  • Both partners know the ledger exists, both write to it, and both see the same statement. There is no one-sided view and no report about one partner sent to the other.
  • Only what a partner deliberately logs or forwards enters the ledger. No bank or card account is connected to read one person's spending, no location tracking, no reading messages, and no inference about where anyone was or what they bought beyond the line they typed.
  • Shared by agreement: either partner can opt out and the workflow stops for them — logging ends, the statement stops, and neither retains a live feed of the other's spending.
  • The split is deterministic and authored by the couple, so the system never appears to take a side. Changing it takes one line and requires both of them to agree, not a support ticket.
  • No settlement without an explicit approval showing the exact net amount and direction. The workflow never transfers money between two people by itself.
  • The agent never comments on what was bought or on anyone's spending habits. A ledger that editorialises becomes a weapon; this one records.

Cost strategy

Every logged expense is one very short economy-tier call, which is the whole recurring cost — the split itself is a SpEL formula and costs nothing, and the period roll-up is a Loop over data, not a reasoning pass. Set a fallback model so logging never fails silently; a dropped entry is what makes people abandon a shared ledger.

Output & delivery

Either partner logs a spend on WhatsApp, Telegram or by forwarded receipt → an economy-tier agent normalises it → a Code node applies the couple's own `split_share` SpEL formula → a Loop nets the period to a single number and direction → the same short statement posts to the shared thread → settling up is a Razorpay/UPI request held at the Approval node until a person approves the exact amount.

3. The week ahead, agreed on Sunday instead of discovered on Thursday

There is a shared calendar. Nobody updates it. So the actual coordination happens as a Thursday-night discovery that you are both out on Friday, the car is needed in two places on Saturday, and the dinner you agreed to a month ago is tomorrow. The information existed — it was just never in the same place at the same time.

Trigger: Scheduled Webhook (weekly) + Email/Webhook for anything newly dated

How the workflow runs

  1. Trigger

    Sunday evening. A scheduled Webhook opens the week. New dated things — a booking confirmation, an invitation, a delivery slot — arrive on their own inbound Email or Webhook during the week and join the same view.

  2. Parallel

    Read both calendars — both shared on purpose. A Parallel node reads each partner's calendar through a Tool (MCP) node. Each person connected their own calendar themselves and shares only free/busy plus the events they chose to share — not a full read of the other's life.

  3. Agent

    Find the actual collisions. An Agent node looks for the specific things that cause Thursday-night arguments: both out at once when someone needs to be home, one car in two places, a commitment neither of you has prepared for, an evening with nothing shared in it at all.

  4. Condition

    Anything genuinely clashing?. A Condition node distinguishes a real conflict from a busy week. If nothing collides, the digest says so in one line — a weekly message that always finds a problem trains you both to ignore it.

  5. Output

    One short shared digest. An Output node posts the same digest to both of you: the collisions, the shared commitments, and anything that needs a decision from the two of you rather than from one.

  6. Approval

    Nobody's diary is edited without them. An Approval node gates any calendar write or any message sent on someone's behalf — declining an invitation or moving an event needs the person whose commitment it is to approve it themselves.

Channels & connectors

  • Webhook (scheduled)
  • Email
  • WhatsApp
  • Telegram
  • Tool (MCP → each partner's own calendar)
  • Approval / HITL

Outcome

One short Sunday digest showing only the genuine collisions in the week ahead, posted identically to both partners, with no calendar edited and no message sent on anyone's behalf without their own approval.

Why it helps

The mechanism is bringing two private schedules into one shared view at a moment when the week can still be changed. Thursday-night discoveries happen because the collision was only visible to someone reading both calendars, and nobody was — the digest is that reader, and it reports to both of you at once.

Build spec

2 agents1 collision-detection agent + 1 digest writer. The parallel calendar reads, the real-conflict gate and the write approval are workflow nodes. · Pattern: Parallel read of two consented calendars → detect real collisions only → one shared digest → Approval on any write

System prompt (paste-ready)

You look at the week ahead for two people who have each connected their own calendar and agreed to share it with the other. Identify ONLY genuine collisions: both unavailable when one of them needs to be present, one shared resource (a car, a room) committed twice, a joint commitment neither has prepared for, or a week with no shared time at all. Report what is on the calendars — never speculate about what an event means, who someone is meeting, or why. Do not flag a busy week as a problem. If nothing collides, say exactly that in one line.

Agent roles & model tiers

  • Collision detector (once per week) Standard tier — genuine reasoning over two schedules

    Compare the two shared schedules and return only real collisions with the reason each is a collision. Report entries as written; never infer the purpose of an event or who anyone is with. An uneventful week returns an empty list, and that is a valid, good answer.
  • Digest writer (once per week) Economy tier — short, warm formatting of an already-decided list

    Write a short shared digest: the collisions, the joint commitments, and anything needing a decision from both. Neutral and warm. Never characterise either person's week as too full or too empty, and never suggest what anyone should cancel.

MCP connectors

  • Each partner's own calendar — via a Tool (MCP) node, connected by that partner themselves (no first-party connector); free/busy plus the events they chose to share
  • Booking / invitation mail — inbound via Email or Webhook
  • WhatsApp / Telegram — the shared thread, as the single delivery surface

Built-in tools

  • knowledge_search (the couple's own standing arrangements — who does the school run, which evenings are protected)
  • http_request (read shared free/busy; write an approved calendar entry)
  • user-defined tool `digest_window` (SpEL): input.dayOfWeek == 'SUN' ? 7 : 2 — a tenant-authored SpEL formula over the tool's JSON input setting how far ahead each run should look: a full week on Sunday, a short horizon on a mid-week nudge. Sandboxed by construction — no method calls, no constructors, no bean or type references, no loop in the grammar; a data-transform/formula tool, not a scripting engine. The benefit: the couple tunes their own rhythm (some want Sunday only, some want a Wednesday check too) without a developer.

Guardrails

  • Both partners connected their own calendar themselves and both know the digest exists. Neither has access to the other's calendar through this workflow beyond what they each chose to share.
  • No surveillance: free/busy and shared events only. No location tracking, no reading messages, no attendee-level snooping, and no inference about who anyone is meeting or why. The agent reports entries as written and speculates about nothing.
  • Shared by agreement — either partner can disconnect their calendar at any time and the digest stops for both, immediately. There is no residual read.
  • No calendar is written to and no message is sent on anyone's behalf without that person's own approval — declining an invitation is theirs to do, not their partner's and not the agent's.
  • The digest is identical for both and posted to a shared thread — no private variant, no 'here is what your partner is doing this week' report.
  • A quiet week returns nothing to flag, deliberately. A weekly message that manufactures a problem is a message you both stop reading.

Cost strategy

One standard-tier reasoning pass per week over two schedules, plus one economy-tier formatting call — a weekly cadence, so total cost is small and flat. Put the digest writer on an economy model with a fallback: the reasoning is where the value is, the wording is not.

Output & delivery

The Sunday Webhook opens the week → a Parallel node reads both consented calendars via Tool (MCP) nodes → a standard-tier agent finds only real collisions → the Condition node lets an uneventful week pass with one line → an economy-tier writer posts the same short digest to both partners → any calendar write or on-behalf message waits at the Approval node for the person whose commitment it is.

4. The renewals nobody owns — insurance, rent, passports, the car

The health policy renews in March, the rent agreement in June, one passport expired last year and was discovered at an airline counter. These live in a folder in one person's email, a physical file in a cupboard, and the memory of whoever dealt with it last time. There is no system, only a person — and when that person is busy, the deadline is simply missed.

Trigger: Scheduled Webhook (monthly look-ahead) + Email/Webhook when a renewal notice arrives

How the workflow runs

  1. Trigger

    Look ahead, monthly. A scheduled Webhook runs the look-ahead. Insurer, landlord or bank renewal notices arrive on their own inbound Email or Webhook and update the same record.

  2. Knowledge

    The household's own documents. A Knowledge node holds what the couple chose to put there: policy schedules, the rent agreement, warranty cards, ID expiry dates. Their documents, in their own tenant — nothing is fetched from anywhere they did not connect.

  3. Loop

    Walk every dated item. A Loop node walks each tracked item and works out what falls inside the look-ahead window the couple set — with enough runway to actually act, not a notice the day before.

  4. Agent

    Say what renewing takes. An Agent node writes, for each item, what is actually needed: the documents to gather, the likely amount from the couple's own record, and who is down to handle it. It quotes the source document rather than asserting a figure from nowhere.

  5. Output

    Both of you, one list. An Output node posts the same short list to the shared thread, with the earliest deadline first and a clear owner per item.

  6. Approval

    Money out and documents out both need a person. An Approval node holds two distinct things: any premium or fee payment via Razorpay/UPI, and any document leaving the household — a policy schedule to a broker, an ID to a landlord — approved as a specific, named share each time.

Channels & connectors

  • Webhook (scheduled)
  • Email
  • WhatsApp
  • Telegram
  • Knowledge base
  • Approval / HITL
  • Razorpay (UPI)
  • Tool (MCP → insurer / bank portal)

Outcome

A monthly look-ahead over every renewal the couple tracks, grounded in their own documents, with an owner per item — and both money out and documents out gated on an explicit human approval.

Why it helps

The mechanism is giving deadlines an owner other than someone's memory. A renewal is missed not because it was unknown but because it was known by one person at the wrong moment; a monthly look-ahead with enough runway converts it from a surprise into a scheduled, assignable task.

Build spec

2 agents1 per-item agent inside the Loop + 1 list writer. The payment gate and the document-share gate are separate workflow approvals, on purpose. · Pattern: Loop the tracked items → ground each in the couple's own documents → one shared list → two distinct Approval gates (money, and documents leaving the house)

System prompt (paste-ready)

You track renewals for a couple. For ONE item {type, provider, expires_on, last_amount, documents_needed}, state plainly what renewing requires: documents to gather, the expected amount, and the deadline. Ground every figure in the couple's own document in Knowledge and quote the source line — if the amount is not written down, say 'last known' or 'unknown', never estimate. You are not an adviser: never recommend a policy, an insurer, or a financial product, and never say whether cover is adequate. You surface the deadline and what it takes; the decision is theirs.

Agent roles & model tiers

  • Renewal item agent (per item, inside the Loop) Economy tier — short grounded extraction, runs once per tracked item per month

    One renewal, one short grounded summary. Quote the source line for every figure. 'Unknown' is a valid answer and is always better than an estimate. No product recommendations, ever.
  • List writer (once per run) Standard tier — ordering and clarity across items

    Order the due items by real urgency, group anything sharing a document, and write one short shared list with a clear owner per item. Neutral tone; never imply anyone let something slip.

MCP connectors

  • Insurer / bank / landlord portals — inbound via Webhook, read back via a Tool (MCP) node (no first-party connectors)
  • The couple's shared calendar — via a Tool (MCP) node, to place each deadline with runway
  • WhatsApp / Telegram — the shared thread, as the single delivery surface

Built-in tools

  • knowledge_search (the couple's own policy schedules, rent agreement, warranty cards, ID expiry dates)
  • http_request (read a renewal notice; write an approved calendar entry; raise an approved payment)
  • user-defined tool `renewal_lead_days` (SpEL): input.type == 'PASSPORT' ? 180 : (input.type == 'INSURANCE' ? 45 : 21) — a tenant-authored SpEL expression over the tool's JSON input returning how much runway each kind of renewal needs. Sandboxed by construction: no method calls, no constructors, no bean or type references, and no loop in the grammar — a data-transform/formula tool, not a scripting engine. The benefit is concrete: a passport genuinely needs months and a broadband renewal needs a fortnight, and the couple encodes that difference themselves, once, instead of receiving every reminder on the same useless schedule.

Guardrails

  • Both partners know the tracker exists, both can see every item, and both receive the same list. There is no version that reports one partner's paperwork to the other.
  • No surveillance: only documents the couple deliberately added and portals they deliberately connected. No location tracking, no reading anyone's messages, no scraping of a partner's personal accounts.
  • Shared by agreement — either partner can opt out and the tracker stops for them; items that are solely theirs leave the shared list, and the workflow stops entirely if either ends it.
  • Two separate approval gates, deliberately not merged: money out (premium or fee, with payee and amount shown) and documents out (a specific, named share to a specific recipient, every time). Blanket 'always share my ID' is not offered.
  • Figures are quoted from the couple's own documents with the source line; 'unknown' is an acceptable output and an estimate is not.
  • The agent never recommends a policy, an insurer or any financial product, and never opines on whether cover is adequate — it surfaces the deadline and what renewing takes, and the decision stays with them.

Cost strategy

The per-item agent runs once per tracked item per run, so it sits on the economy tier with a hard cap — a household tracks perhaps a couple of dozen items, and the monthly cadence keeps the total flat. The one standard-tier list-writing call per run is where ordering and clarity are worth paying for. A fallback model on both keeps the look-ahead running, since a missed run is the one failure that costs real money.

Output & delivery

The monthly Webhook opens the look-ahead → a Loop walks each tracked item with the couple's own `renewal_lead_days` SpEL runway → an economy-tier agent grounds each in their own documents in Knowledge, quoting source lines → a standard-tier writer posts one ordered shared list with an owner per item → any premium is held at the payment Approval node, and any document leaving the household is held at a separate, per-share Approval node.

Related industries

Build one of these in minutes

The sandbox gives you a live agent workspace — no account, no card. Or head back to the full catalogue and compare patterns across every industry.

See how VegaDūta compares to n8n, Dify and BotpressWhy VegaDūta's architectureEstimate your WhatsApp API costs