4 ready-to-build workflows

AI agent workflows for Handicrafts & artisan MSME export

Run an artisan cluster on WhatsApp in the language it actually speaks — allocation, payment status, export documents and season planning, with your own commission and tolerance rules as tenant-authored formulas and every commitment human-approved.

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. Export order → artisan cluster allocation, confirmed in-language on WhatsApp

A buyer PO lands for 900 hand-block pieces across four designs. There is one WhatsApp group per cluster — 'Bagru Team', 'Sanganer New', 'Barmer Ladies Group' — and the export manager works down them one at a time, calling the lead, asking how many they can take, and pencilling numbers into a diary page with the clusters listed down the left margin. Three leads do not pick up. One says 'ho jayega' without a number. The earliest cluster starts cutting cloth against a quantity nobody has written down anywhere, and the buyer is waiting on a ship date.

Trigger: Email / Webhook (buyer purchase order)

How the workflow runs

  1. Trigger

    PO arrives. An Email trigger on the export desk (or a Webhook from the buyer's portal — no first-party connector) catches the purchase order with quantities, designs and the requested ship window.

  2. Agent

    Draft an allocation proposal. An Agent node splits the order across clusters using the craft/skill mapping, historical per-cluster throughput and current open commitments in Knowledge — producing a proposal with a stated reason per cluster, not a round-robin.

  3. Tool (MCP)

    Cap every cluster with your own rule. A user-defined tool (SpEL) computes each cluster's remaining headroom from its documented throughput minus open commitments, minus the safety margin the export manager sets — so 'never load Barmer past 80% in a festival month' is a business setting, not a line in a prompt.

  4. Loop

    Poll each cluster lead, in their language. A Loop node asks every proposed cluster lead on WhatsApp — Sarvam handling Hindi, Bangla, Gujarati or Odia — to confirm the quantity and the date they can actually commit to, with voice-note replies accepted.

  5. Voice

    Accept voice replies. A Voice node transcribes voice-note confirmations, so a cluster lead who does not type still answers in the medium they use every day rather than finding someone's nephew to text for them.

  6. Condition

    Does the confirmed capacity cover the order?. A Condition node compares the sum of confirmed capacity against the PO. A shortfall is never quietly absorbed — it branches to the export manager with the exact gap and the clusters that still have headroom.

  7. Approval

    Export manager commits the allocation. An Approval node holds the final allocation and any buyer-facing ship date. Allocating work commits an artisan family's month and a date to a buyer — the agent proposes, the manager commits.

  8. Output

    Confirm both ways. An Output node sends each cluster its confirmed quantity, design and date on WhatsApp in-language, and the consolidated allocation to the buyer thread on Email; a Tool (MCP) node records it against the PO in the export ERP.

Channels & connectors

  • Email
  • Webhook
  • WhatsApp
  • Sarvam (Indian languages)
  • Voice
  • Knowledge base
  • Approval / HITL
  • Tool (MCP → export ERP)

Outcome

An allocation proposal grounded in real per-cluster throughput and capped by the manager's own loading rule, confirmed by each lead in their own language, with any shortfall stated as a number — and nothing committed to a buyer or a cluster without the export manager.

Why it helps

The mechanism is parallel in-language polling replacing a serial afternoon of phone calls: every cluster lead is asked at once, in the language and medium they use, their answers land as structured capacity instead of pencil marks, and the shortfall arithmetic is done before a date is promised rather than discovered after.

Build spec

2 agents1 allocation-proposal agent + 1 cheap reply-interpreter that runs once per cluster reply inside the Loop. Voice transcription, the headroom formula, the coverage branch and the approval are workflow nodes and tools. · Pattern: Proposal → tenant-authored headroom cap → in-language fan-out poll (Loop) → coverage gate → human commits allocation and date

System prompt (paste-ready)

(Allocator) Propose a split of a buyer PO across artisan clusters for {{exporter}}. Use ONLY the craft/skill mapping, historical monthly throughput and current open commitments in Knowledge, and respect the headroom returned by the capacity tool. Return strict JSON {allocations[{cluster_id, design, quantity, proposed_ready_date, reason, headroom_note}], unallocated_quantity, assumptions[]}. Never allocate a design to a cluster whose skill mapping does not cover that craft, and never propose a quantity above the tool's headroom — if the order exceeds total capacity, leave the remainder in unallocated_quantity rather than spreading it thin. Proposed dates are internal until a cluster lead confirms and the export manager approves.

Agent roles & model tiers

  • Allocation proposer Standard tier — runs once per PO

    PO → per-cluster allocation with a stated reason, bounded by documented skill mapping and the headroom formula. Remainder goes to unallocated_quantity; capacity is never invented to make the order fit.
  • Cluster-reply interpreter (per reply) Economy tier — one call per cluster reply, including voice-note transcripts

    Turn one cluster lead's in-language reply into {confirmed_quantity, confirmed_date, conditions[], unclear[]}. A partial yes, or a date with no quantity, is marked unclear and gets one short follow-up in their language — never round a hesitant 'ho jayega' up into a confirmation.

MCP connectors

  • Export ERP / order book — via Tool (MCP): read the PO lines, and read every cluster's currently open commitments so headroom is computed against reality, not last month's plan
  • Export ERP / order book — via Tool (MCP): write the approved allocation against the PO, cluster by cluster, after the manager signs off
  • Buyer portal — inbound via Webhook (no first-party connector): receives POs issued on the portal instead of by email
  • WhatsApp + Sarvam — cluster-lead polling and confirmation in Hindi, Bangla, Gujarati or Odia, voice notes included
  • Email — the buyer's confirmation thread

Built-in tools

  • knowledge_search (cluster-scoped collection: craft/skill mapping, historical monthly throughput, cluster working patterns)
  • http_request (read the PO and the open order book; write the approved allocation back)
  • send_email (consolidated allocation confirmation to the buyer, after approval)
  • user-defined tool `cluster_headroom` (SpEL): (input.monthlyThroughput * input.safetyFactor) - input.openCommitments — the export manager owns safetyFactor and can hold a cluster at 0.8 through a festival month or push a reliable one to 1.0, per cluster, in the tool editor. It is arithmetic over the numbers the workflow hands it; it does not read the ERP itself and cannot loop over clusters — the workflow calls it once per cluster.

Guardrails

  • No allocation reaches a cluster and no ship date reaches the buyer before the export manager's Approval — a commitment binds an artisan family's month
  • Proposals are bounded by the `cluster_headroom` formula and the documented skill mapping; capacity is never invented to make an order fit
  • A shortfall is surfaced as an explicit unallocated quantity with the exact gap — never silently spread across clusters
  • A partial or hesitant cluster reply is marked unclear and followed up in the lead's own language, never rounded up into a confirmation
  • Cluster leads are asked and answered entirely in their own language, by voice note if that is how they work — the English record exists for the office and the buyer, not for them

Cost strategy

One standard-tier proposal per PO, plus one economy-tier interpretation per cluster reply — reply volume scales with cluster count, not order value, which is exactly why the interpreter stays on the economy tier. The headroom formula is SpEL and costs nothing, which is also why the loading policy belongs there rather than in a prompt that would need re-testing every time it changed. Voice transcription is per note, and it is the price of the clusters participating at all.

Output & delivery

A grounded allocation proposal capped by the tenant's own headroom formula → every cluster lead polled on WhatsApp in-language with voice replies accepted → confirmations interpreted into structured capacity → the Condition node exposes any shortfall against the PO → the export manager commits the allocation and the ship date at the Approval node → clusters are confirmed in-language, the buyer on Email, and the allocation written against the PO in the export ERP.

2. Artisan payment status in their own language, payouts still human-released

Voice notes arrive at 9:15pm: 'bhaiya, pichhle consignment ka paisa kab aayega'. The accounts assistant keeps a file called ARTISAN PAYMENT NEW FINAL.xlsx with a sheet per month, and answers whichever messages she sees before she leaves at 6. The rest ask again on Thursday, and again the following Tuesday. Some artisans stop asking and assume they have been short-paid on a quality deduction nobody explained to them in Hindi. A question with a factual, written-down answer becomes a trust problem.

Trigger: WhatsApp (artisan or cluster lead asks about a payment — text or voice)

How the workflow runs

  1. Trigger

    Artisan asks. A WhatsApp trigger catches the question from the artisan's own number, at whatever hour it arrives, in whatever language they write or speak.

  2. Voice

    Transcribe the voice note. A Voice node transcribes with Sarvam, so an artisan who does not type is a first-class user of the system rather than someone who needs a relative to text on their behalf.

  3. Agent

    Identify the artisan and the consignment. An Agent node resolves who is asking and which delivery they mean, then reads the payment ledger through a Tool (MCP) node — never from memory, never from a guess.

  4. Tool (MCP)

    Deductions and commission, on your own slabs. A user-defined tool (SpEL) computes the net payable from the passed quantity, the rate, the quality-deduction percentage and the cluster-lead commission slab — the exporter authors the slabs and can vary them per cluster, so the number quoted to an artisan is always the number the policy actually produces.

  5. Condition

    Answerable, or does a human own it?. A Condition node branches: a clear, ledger-backed status is answered directly; a dispute, a quantity disagreement, a contested quality deduction or a request to release money early routes to the accounts owner.

  6. Output

    Answer in their language. An Output node replies on WhatsApp in the artisan's own language via Sarvam — what was received, what was passed, what is on hold and why, and the documented next payment date, in short plain sentences.

  7. Approval

    Any payout is released by a human. An Approval node holds every actual disbursement — milestone payout, advance, deduction reversal. The agent may report a payment's status; it never moves money.

  8. Output

    Release on approval, confirm in-language. On approval the workflow executes a Razorpay UPI payout and the artisan gets an in-language confirmation with the reference; the accounts owner sees the same trail.

Channels & connectors

  • WhatsApp
  • Sarvam (Indian languages)
  • Voice
  • Razorpay (UPI)
  • Approval / HITL
  • Tool (MCP → accounting / payment ledger)

Outcome

Every artisan gets the same accurate, ledger-backed answer in their own language within minutes of asking, at any hour — with deductions explained from the exporter's own published slab, and every rupee that actually moves released by a named human.

Why it helps

The mechanism is language plus availability plus grounding: the question is answered from the ledger rather than from someone's recollection, in the artisan's own language, without needing office hours or an intermediary — while the money stays behind a human approval, so answering faster never means paying looser.

Build spec

1 agent1 payment-status agent. Transcription, the net-payable formula, the dispute branch, the payout approval and the UPI disbursement are workflow nodes and tools. · Pattern: In-language intake → ledger-grounded answer with tenant-authored deduction maths → dispute branch → human-released UPI payout

System prompt (paste-ready)

You answer artisan payment questions for {{exporter}}. Resolve the artisan and the consignment they mean, then read the payment ledger via the ledger tool and answer ONLY from what it returns: {quantity_received, quantity_passed, rate, deduction_pct, amount_paid, on_hold_amount, hold_reason, next_scheduled_date}, using the net-payable tool for the arithmetic. If the ledger has no record, or the artisan disputes a quantity or a deduction, or they ask for money early or out of schedule, do NOT answer with a number — hand it to the accounts owner. Never promise a payment date the ledger does not state, never estimate an amount yourself, and never say a payment has been made unless the ledger shows it. You cannot initiate, approve or release any payment. Reply in the artisan's own language, in short plain sentences.

Agent roles & model tiers

  • Payment-status agent Economy tier — high message volume, and the answer is a grounded lookup plus a formula, not a reasoning problem. Configure a fallback model so an outage does not leave artisans unanswered overnight

    Resolve artisan + consignment, read the ledger, compute net payable with the tool, answer only from those fields, in the artisan's language. Disputes, missing records and early-money requests go straight to the accounts owner. Never states a date the ledger does not state; never moves money.

MCP connectors

  • Accounting / payment ledger — via Tool (MCP): resolve the artisan from their WhatsApp number, and read the consignment receipts, passed quantities, deductions and scheduled payment dates for that artisan only
  • Accounting / payment ledger — via Tool (MCP): record the released payout and its Razorpay reference against the consignment, after Approval
  • WhatsApp + Sarvam — the artisan-facing channel: text and voice, in Indian languages, at any hour
  • Razorpay UPI — executes the approved payout to the artisan's registered VPA

Built-in tools

  • knowledge_search (policy-scoped collection: payment terms, quality-hold rules, what a deduction means in plain language)
  • http_request (read the artisan payment ledger; record the released payout reference)
  • user-defined tool `net_payable` (SpEL): (input.qtyPassed * input.rate) * (1 - input.deductionPct / 100) - (input.qtyPassed * input.rate * input.leadCommissionPct / 100) — accounts authors the slab and can hold a different commission percentage per cluster or per craft. Because it is one auditable expression rather than a prompt instruction, the number an artisan is told and the number the ledger pays are computed the same way every time. It is arithmetic over the fields handed to it: no ledger access, no iteration over consignments, no ability to release anything.

Guardrails

  • The agent reports status only — every disbursement, advance and deduction reversal passes the Approval node before any Razorpay UPI payout executes
  • Answers are strictly ledger-backed and the arithmetic comes from the `net_payable` formula: no estimated amounts, no promised dates the ledger does not state, no 'it has been paid' without a ledger record
  • Disputes over quantity or quality deductions, and any request for early money, route straight to the accounts owner — the agent does not negotiate on the exporter's behalf
  • Identity is resolved from the registered number before any figure is disclosed, so one artisan's payables are never read out to another
  • Every reply is in the artisan's own language, including the reason for a hold; the English audit record is for the office side

Cost strategy

This is the highest-volume workflow in the set — many short, repeated questions — so the answering agent belongs on the economy tier and nowhere else; the accuracy comes from the ledger tool and the SpEL formula, not from model size. Transcription is per voice note. The only expensive path is escalation, and that is a human's time spent on genuine disputes, which is exactly where it should go.

Output & delivery

An artisan's WhatsApp message or voice note in any supported Indian language → Sarvam transcription → identity and consignment resolved → net payable computed by the exporter's own formula → a ledger-backed status answered in their own language, or a dispute routed to accounts → any actual payout waits at the Approval node → on release, a Razorpay UPI disbursement executes and is confirmed to the artisan in-language with its reference, with the same trail visible to the accounts owner.

3. Export document completeness check before the consignment is released

The consignment is packed and the forwarder wants it on Thursday. The export executive works down a photocopied checklist on a clipboard in the packing hall at 10pm, ticking in blue pen: commercial invoice, packing list, certificate of origin, EPCH paperwork, the buyer's labelling declaration, insurance, the shipping-bill data set for the CHA. On the last tick he notices the invoice total and the packing-list weights disagree, because the packer added two cartons in the afternoon and told the invoice clerk verbally. The booking slips a week and the buyer's Christmas window moves.

Trigger: Webhook (consignment marked ready in the export ERP) / Email

How the workflow runs

  1. Trigger

    Consignment is ready to ship. A Webhook from the export ERP (no first-party connector) fires when the consignment is marked ready, carrying the shipment reference, destination and incoterm.

  2. Knowledge

    Load the document set for this lane. A Knowledge node pulls the required document list for that destination, incoterm and product category — the set for an EU buyer is not the set for a US one, and the workflow checks against the right list rather than one photocopied master.

  3. Loop

    Map: one check per required document. A Loop node runs a cheap checker per document — present, current, signed where a signature is required, carrying the fields the destination requires.

  4. Code

    Cross-document consistency. A Code node does the arithmetic the eye skips at 10pm: invoice total against the sum of its line items, packing-list carton count and gross/net weights against the invoice, HS codes consistent across invoice, packing list and certificate of origin. This is a Code node precisely because it must iterate line items — the SpEL formula tools deliberately cannot loop.

  5. Tool (MCP)

    Tolerance band, set by your export desk. A user-defined tool (SpEL) decides whether a weight or value difference is a rounding artefact or a real mismatch, using the desk's own tolerance — so a 0.2kg gross-weight difference does not hold a container while a 20kg one always does.

  6. Agent

    Reduce: release-readiness report. A reducer agent produces one report — documents ready, documents missing, and every mismatch stated as the two conflicting values side by side with their source documents named.

  7. Approval

    Export head releases the shipment. An Approval node holds the release. Handing a consignment to the forwarder starts customs filing and a container booking — the agent reports readiness, the export head releases.

  8. Output

    Hand over + chase what is open. On release, a Tool (MCP) node pushes the pack to the forwarder/CHA system and the shipping-bill data set to the filing agent — neither has a first-party connector, and the workflow never files with customs itself; open items go back to their owners by Email or in-language WhatsApp.

Channels & connectors

  • Webhook
  • Email
  • WhatsApp
  • Sarvam (Indian languages)
  • Knowledge base
  • Approval / HITL
  • Tool (MCP → export ERP, forwarder/CHA, filing agent)

Outcome

Every consignment gets a documented release-readiness report with mismatches quoted value-against-value and banded by the desk's own tolerance — produced when the consignment is marked ready, not on a clipboard the night before the cut-off.

Why it helps

The mechanism is putting arithmetic where arithmetic belongs: totals, weights, carton counts and HS-code consistency are computed deterministically in a Code node rather than by a tired reader or a language model, the tolerance is the export desk's own setting, and the agent is left to do only what it is good at — explaining the gaps and naming who must close them.

Build spec

2 agents1 per-document checker (once per required document via the Loop) + 1 reducer that writes the readiness report. The cross-document arithmetic is a Code node and the tolerance band is a SpEL tool — deliberately, neither is an agent. · Pattern: Map over the document set → deterministic Code-node cross-checks → tenant-authored tolerance band → reduce → human releases the shipment

System prompt (paste-ready)

(Checker) Verify ONE required export document for shipment {{shipment_ref}} to {{destination}} on incoterm {{incoterm}}. Return strict JSON {doc_type, status (PRESENT_COMPLETE|PRESENT_INCOMPLETE|MISSING|UNSIGNED|UNREADABLE), missing_fields[], extracted{invoice_total, currency, carton_count, gross_weight, net_weight, hs_codes[]}, owner}. Extract values EXACTLY as printed — do not convert currencies, do not convert weight units, do not reformat an HS code. If a field is absent, return null and list it in missing_fields[]. You do not compare documents against each other; the workflow's Code node does that arithmetic. You never declare a shipment ready.

Agent roles & model tiers

  • Document checker (per document) Economy tier — runs once per required document on every consignment, so it sets the cost of the run

    One document → presence, completeness, signature status and verbatim extracted fields as strict JSON. No unit or currency conversion, no reformatting, null for absent fields. No cross-document comparison, no release judgement.
  • Readiness reducer Standard tier — reasoning. Economy fallback model so a provider outage still yields a usable, flagged report before the cut-off

    Combine the per-document verdicts with the Code node's cross-check results and the tolerance bands into one release-readiness report. State every mismatch as the two conflicting values with their source documents named. Name the owner and the single next action for each open item. Report only what the verdicts and checks contain — never assert a document is fine because nobody flagged it.

MCP connectors

  • Export ERP / document store — via Tool (MCP): read the shipment record (destination, incoterm, product category) and fetch each filed document for parsing
  • Forwarder / CHA system — via Tool (MCP): push the released document pack against the booking (no first-party connector; only after Approval)
  • Customs-filing agent — via Tool (MCP): hand over the shipping-bill data set for the agent to file. The workflow never files with customs itself and never signs a declaration
  • Buyer portal — via Tool (MCP): upload the shipping documents the buyer requires against the PO, where the buyer works that way
  • Email / WhatsApp + Sarvam — chasing open items with the owner who can close them, in their own language

Built-in tools

  • knowledge_search (lane-scoped collection: the destination + incoterm + product-category document matrix, labelling and origin requirements)
  • http_request (fetch documents; push the released pack to the forwarder and the data set to the filing agent)
  • send_email (open-item chase to office owners, and the release note to the forwarder)
  • user-defined tool `doc_tolerance` (SpEL): input.diff <= input.toleranceAbs ? 'WITHIN_TOLERANCE' : (input.diff <= input.toleranceAbs * 3 ? 'REVIEW' : 'MISMATCH') — the export desk authors this and passes a different toleranceAbs per field, so 0.2kg on a gross weight is a rounding artefact and 20kg is never one. It bands a single already-computed difference; the Code node did the summing, because a formula tool has no loop and is not pretending to. No method calls and no type references either — the grammar simply does not have them, which is exactly why it is safe to hand the expression to the export desk to edit.

Guardrails

  • The consignment is released only at the Approval node — the workflow never hands over to the forwarder, never pushes filing data and never signs a declaration on its own judgement
  • Cross-document arithmetic (line-item totals, carton counts, gross/net weights, HS-code consistency) is done deterministically in a Code node — a language model is never the arbiter of whether two numbers match
  • The tolerance band is the export desk's own SpEL expression, so what counts as a rounding artefact is an auditable business setting rather than a model's discretion
  • Extraction is verbatim: no currency conversion, no unit conversion, no HS-code reformatting; an absent field is null and gets chased, never inferred
  • The required-document list is resolved per destination, incoterm and product category — one generic checklist is never applied to every lane
  • Mismatches are always reported as both conflicting values with their source documents named, so the human resolves a fact rather than adjudicating a summary

Cost strategy

Per consignment: N documents × economy-tier checker + one deterministic Code node (effectively free) + one SpEL banding call (free) + one standard-tier reduce. Moving the cross-checks into code is a cost decision as much as a correctness one — arithmetic in code costs nothing and never hallucinates, which lets the per-document checker stay narrow and cheap. Parallel batches compress wall-clock time without changing per-document cost.

Output & delivery

Each required document is checked once by a cheap agent → a Code node runs the cross-document arithmetic deterministically → each difference is banded by the desk's own tolerance expression → a reducer writes the release-readiness report with every mismatch quoted value-against-value → the export head releases at the Approval node → a Tool (MCP) node pushes the pack to the forwarder/CHA and the shipping-bill data set to the filing agent, while open items go back to their owners on Email or in-language WhatsApp.

4. Festival-season capacity plan before the dates are promised

Diwali and Christmas orders land in the same eight-week window, and the same clusters are absent for harvest, for a village wedding season, and for the local fair. The export manager plans it on a whiteboard with cluster names in one column and week numbers across the top, half-rubbed-out, plus a diary where last year's actual dispatches are recorded but never added up. Dates get promised from feel during buyer calls, and the season is spent apologising to whichever buyer is furthest from the truth.

Trigger: Webhook / scheduled (season planning cycle opens, or the enquiry pipeline crosses a threshold)

How the workflow runs

  1. Trigger

    Season planning opens. A scheduled trigger (or a Webhook from the export ERP when the enquiry pipeline crosses a threshold) starts the planning cycle for the coming season window.

  2. Knowledge

    Load last season's actuals. A Knowledge node pulls the previous comparable season's ACTUAL per-cluster output, the local festival and harvest calendar, and each cluster's documented working-day pattern — so the plan starts from what happened, not from nominal capacity.

  3. Loop

    Ask every cluster what it can really do. A Loop node polls each cluster lead on WhatsApp in-language: available artisan count for the window, known absences, and the crafts they can run — voice replies accepted and transcribed via Sarvam.

  4. Agent

    Build the season capacity picture. An Agent node converts the replies plus last season's actuals into a week-by-week capacity view per cluster and craft, with each week's available working days already netted of the festival and harvest calendar.

  5. Tool (MCP)

    Week capacity, from your own per-day rates. A user-defined tool (SpEL) turns available artisans, available days and last season's per-artisan-day output into an indicative weekly figure — the planner owns the per-day rates per craft, which is exactly the number that should never be buried in a prompt.

  6. Agent

    Test the pipeline against it. A second Agent node lays the open enquiry and order pipeline over the capacity view and marks each enquiry comfortably servable, servable only with a later date, or not servable in the window — naming the binding constraint each time.

  7. Approval

    Manager approves the plan and any dates. An Approval node holds the season plan and, critically, any buyer-facing date derived from it. The plan is a proposal; a promised festival-season date is a commitment the manager makes.

  8. Output

    Publish it both ways. An Output node sends each cluster its indicative week-by-week load in-language on WhatsApp — labelled indicative, not a work order — and the approved position to the sales/export desk, so quoting and the floor work from the same plan.

Channels & connectors

  • Webhook
  • WhatsApp
  • Sarvam (Indian languages)
  • Voice
  • Email
  • Knowledge base
  • Approval / HITL
  • Tool (MCP → export ERP pipeline)

Outcome

A week-by-week, cluster-by-cluster capacity picture built from confirmed availability and last season's actuals, with every open enquiry marked servable or not and the binding constraint named — before a single festival-season date is promised on a call.

Why it helps

The mechanism replaces feel with two grounded inputs and one owned formula: what each cluster says it can actually staff, what it genuinely produced last comparable season, netted against the local festival and harvest calendar and converted at the planner's own per-day rates — so the manager promises dates against arithmetic and knows in advance which enquiry is the one that breaks the plan.

Build spec

3 agents1 economy-tier reply interpreter (per cluster reply, inside the Loop) + 1 capacity-model agent + 1 pipeline-fit agent. Voice transcription, the weekly-capacity formula and the plan approval are workflow nodes and tools. · Pattern: In-language capacity poll (Loop) → tenant-authored weekly capacity formula → capacity model → pipeline fit → human approves the plan and the dates

System prompt (paste-ready)

(Capacity model) Build a week-by-week capacity view for the season window {{window}} per cluster and craft. Inputs: each cluster lead's confirmed available artisan count and stated absences, last comparable season's ACTUAL output from Knowledge, and the local festival/harvest calendar. Use the weekly-capacity tool for every indicative figure. Return strict JSON {weeks[{week, cluster_id, craft, available_days, indicative_units, basis}]}. Never use nominal or theoretical capacity, and never take a cluster's optimistic self-estimate alone as the basis. Net out every calendar absence. Where last season has no comparable actual, set basis='no_baseline' and leave indicative_units null rather than guessing.

Agent roles & model tiers

  • Cluster-reply interpreter (per reply) Economy tier — one call per cluster reply, including transcribed voice notes

    One cluster lead's in-language reply → {available_artisans, absence_periods[], crafts_available[], unclear[]}. One short in-language follow-up on anything unclear; never convert a vague answer into a firm number.
  • Capacity-model agent Standard tier — runs once per planning cycle

    Confirmed availability + last season's actuals + festival/harvest calendar → week-by-week indicative capacity per cluster and craft, every figure from the weekly-capacity tool, with the basis stated per row. Null where there is no baseline; every calendar absence netted out.
  • Pipeline-fit agent Premium tier — the hard step, and its output is what dates get promised from. Economy fallback model configured, with any degraded run flagged in the plan header

    Lay the open enquiry and order pipeline over the capacity view. Mark each enquiry SERVABLE | SERVABLE_LATER (with the earliest defensible date and its basis) | NOT_SERVABLE, and name the binding constraint for every non-clean case — cluster, craft, week or material. Flag every enquiry that depends on a null/no-baseline capacity row. These are proposals for the manager, never commitments.

MCP connectors

  • Export ERP / CRM pipeline — via Tool (MCP): read the open enquiries and confirmed orders for the season window, with their requested ship dates and crafts
  • Export ERP — via Tool (MCP): read last season's actual dispatch records per cluster and craft, so the baseline is measured rather than remembered
  • Export ERP — via Tool (MCP): attach the approved season plan to the season record, after the manager signs off
  • WhatsApp + Sarvam — cluster capacity polling in Indian languages, voice notes accepted
  • Email — publication of the approved position to the sales/export desk

Built-in tools

  • knowledge_search (season-scoped collection: last comparable season's actual output, the local festival and harvest calendar, cluster working-day patterns)
  • http_request (read the enquiry/order pipeline and last season's dispatches; attach the approved plan to the season record)
  • user-defined tool `week_capacity` (SpEL): input.availableArtisans * input.availableDays * input.perArtisanDayUnits * (input.isFestivalWeek ? input.festivalFactor : 1) — the planner owns perArtisanDayUnits per craft and the festival factor, and edits them as the season teaches them something. Keeping the rates in one auditable expression means the plan, the quote and the cluster's own indicative load are all computed from the same numbers. Pure arithmetic over the row handed to it: no ERP access, no iteration over weeks — the workflow calls it per week per cluster.

Guardrails

  • No buyer-facing festival-season date leaves the workflow — every date in the plan is a proposal until the export manager approves it at the Approval node
  • Capacity is derived from last comparable season's ACTUAL output through the `week_capacity` formula, never from nominal capacity or a cluster's optimistic self-estimate alone
  • Where no comparable baseline exists, capacity is null with basis='no_baseline' and every enquiry depending on it is flagged — the plan never fills a gap with a guess
  • Festival and harvest absences are netted out of available days before any indicative number is produced
  • Every non-servable or later-date verdict names its binding constraint, so the manager can act on the constraint rather than argue with a conclusion
  • Clusters receive an indicative load, explicitly labelled as such, in their own language — an indicative plan is never sent as a confirmed work order

Cost strategy

A planning cycle costs: one economy-tier interpretation per cluster reply + one standard-tier capacity model + one premium-tier pipeline fit. The premium tier is justified exactly once, on the step whose output becomes promised dates; polling and modelling stay cheap, and the weekly-capacity arithmetic is a free SpEL evaluation. Because the cycle runs a few times a season rather than per order, total spend is small — what is being protected is the season's credibility with buyers, not a per-transaction margin.

Output & delivery

Every cluster lead polled in-language with voice replies accepted → a week-by-week capacity view computed by the planner's own formula from last season's actuals and netted of the festival/harvest calendar → each open enquiry marked servable, servable-later or not servable with its binding constraint named → the export manager approves the plan and any buyer-facing dates at the Approval node → clusters receive their indicative weekly load in-language and the sales desk receives the approved position, with the plan attached to the season record in the ERP.

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