4 ready-to-build workflows

AI agent workflows for Marketing & content for small teams

For the team where marketing is the founder at 11pm: turn one idea into channel-native drafts, answer inbound from your own Knowledge, and never send anything a human hasn't 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. One idea → a week of channel-native drafts (supervisor + 3 writers)

The content calendar was made in week one and died in week three. Now it's one founder at 11pm writing a LinkedIn post, rewriting it shorter for X, forgetting Instagram entirely, and posting nothing for eleven days because the blank page is worse than the silence.

Trigger: Webhook / Slack (an idea, a customer quote, a shipped feature)

How the workflow runs

  1. Trigger

    Capture the idea where it happens. A Slack message in your #ideas channel, or a Webhook from wherever you dump notes, fires the workflow with one seed: a shipped feature, a customer sentence, a support ticket that keeps recurring. No calendar to maintain — the trigger IS the calendar.

  2. Knowledge

    Ground it in your own positioning. A Knowledge node pulls your positioning doc, tone-of-voice notes, objection-handling and the case studies you're actually allowed to name. Every claim in every draft has to come from here — not from the model's general knowledge of your category.

  3. Supervisor

    Supervisor plans the angle. A Supervisor agent decides the single angle worth writing this week and what each channel gets — it does not write; it briefs. If the seed is too thin to say anything true, it says so and stops rather than generating filler.

  4. Parallel

    Three writers draft at once. A Parallel node runs the channel writers side by side — long-form (LinkedIn/blog), short-form (X/Telegram), visual-first caption (Instagram) — each with the same grounded brief and the same claim limits, each writing natively for its channel instead of truncating one post three ways.

  5. Approval

    The founder approves, in one place. An Approval node holds every draft together — one review, one decision, edits in-line. Nothing is published, scheduled or sent by the workflow before this click.

  6. Output

    Publish-ready, delivered back to you. Approved drafts go to Slack (or Email) as ready-to-post copy with the source claim cited next to each one. Scheduling into a social tool, if you use one, is a Tool (MCP) node — there is no first-party connector for those platforms' publishing APIs.

Channels & connectors

  • Slack
  • Webhook
  • Knowledge base
  • Approval / HITL
  • Email
  • Tool (MCP → your scheduling tool)

Outcome

One captured idea becomes three channel-native drafts, each grounded in your own positioning, waiting in a single approval queue instead of a blank editor at midnight.

Why it helps

The mechanism is removing the blank page and the context-switch, not replacing judgement: the supervisor does the framing that usually stalls you, the writers do the channel-shaping that usually gets skipped, and the founder is left doing the only part that actually needs them — deciding whether it's true and whether it ships.

Build spec

4 agents1 supervisor (briefs, never writes) + 3 channel writers running in Parallel. The Knowledge grounding, the approval and the delivery are workflow nodes. · Pattern: Supervisor → parallel specialists → single human approval

System prompt (paste-ready)

You are the content lead for {{company}}. You receive ONE seed (a shipped feature, a customer sentence, a recurring question). Decide the single most useful angle and write a brief for three channel writers: {angle, audience, the one claim we are making, the proof for that claim, what NOT to say}. Every claim must be supported by a passage you retrieved from Knowledge — quote the passage id in the brief. If Knowledge contains no support for the claim, return {publishable: false, reason} and stop; a thin week with no post is correct, a fabricated week is not. Never invent a customer name, a metric, a result, or a logo. You brief only — you do not write posts and you do not publish.

Agent roles & model tiers

  • Supervisor / content lead (runs once) Standard tier — this is the judgement step, worth the reasoning budget

    Pick the one angle. Write the brief with the claim and its Knowledge citation. Refuse to proceed if the claim isn't supported. Never publish.
  • Long-form writer (LinkedIn / blog) Standard tier — length and structure benefit from it

    Write the long-form draft from the brief only. Use the approved claim and nothing beyond it. No invented statistics, no 'studies show', no customer names not in the brief. Plain sentences; the founder's voice from the tone notes, not a marketing voice.
  • Short-form writer (X / Telegram) Economy tier — short output, tight constraints, runs on every seed

    Write the short-form draft natively for the channel — not a truncation of the long post. Same claim, same limits. No hashtag stuffing, no engagement-bait question at the end.
  • Caption writer (Instagram / visual-first) Economy tier

    Write a visual-first caption plus a one-line description of the image or clip it needs. Same claim, same limits. Never describe an image as if it already exists.

MCP connectors

  • Your social scheduling / email-marketing tool — via a Tool (MCP) node (no first-party connector)
  • Slack — idea capture + draft delivery (first-party)
  • Webhook — inbound seeds from notes, forms or your own tooling (first-party)

Built-in tools

  • knowledge_search (positioning, tone of voice, objection handling, nameable case studies)
  • web_search (context only — never a source for a claim about your own product)
  • send_email (deliver the approved pack if you'd rather review in your inbox than Slack)

Guardrails

  • Nothing is published by the workflow — every draft is held at the Approval node until the founder approves or edits it; the agents draft, a human ships
  • Product claims come only from the team's own Knowledge base, with the supporting passage cited beside each draft; if Knowledge doesn't support it, the supervisor refuses to write it rather than filling the slot
  • No fabricated personalisation and no invented proof — no customer names, logos, metrics, awards or 'results' that aren't in Knowledge
  • Frequency cap on the trigger: one content run per week per channel, so a burst of ideas on Monday doesn't turn into six posts nobody asked for
  • Publishing is a Tool (MCP) call to your own scheduling tool under your own credentials — the workflow never posts to a platform on its own initiative

Cost strategy

The two short-form writers sit on the economy tier — they run on every seed and their output is short and heavily constrained, so that's where the volume is and where the cheap model belongs. The supervisor and the long-form writer get the standard tier because framing and structure are the parts that actually degrade on a small model. Configure a fallback model on the supervisor so a provider hiccup at 11pm downgrades the draft rather than losing the idea, and cap the run so one pathological seed can't burn a week's budget.

Output & delivery

Supervisor briefs → three writers draft in Parallel → all drafts land together in ONE Approval node with their Knowledge citations → approved copy is delivered to Slack or Email ready to post, and scheduled through your own tool via a Tool (MCP) node only if you've wired one.

2. Website form + DM replies, answered from your own Knowledge

The website form posts into an inbox nobody owns. Instagram DMs and the WhatsApp number get the same five questions — pricing, does it integrate with X, is there a free tier — and whoever sees them first answers from memory, slightly differently each time, sometimes two days later.

Trigger: Webhook (website form) / WhatsApp / Instagram / Messenger / Telegram

How the workflow runs

  1. Trigger

    Every inbound lands in one flow. The website lead form arrives on a Webhook (first-party — this is the honest, real path for a form). WhatsApp, Instagram, Messenger and Telegram messages arrive on their own first-party channels. One workflow, one queue, regardless of where the person turned up.

  2. Agent

    Classify before answering. An Agent node on the economy tier tags each inbound: QUESTION / PRICING / DEMO_REQUEST / SUPPORT / SPAM — and extracts what the person actually asked. Cheap, because this runs on everything including the spam.

  3. Knowledge

    Answer from what you've written down. A Knowledge node retrieves from your own FAQ, docs, pricing page and objection-handling notes. If there is no passage that answers the question, the agent does not improvise a capability — it says a human will confirm.

  4. Condition

    Route: answerable, or human?. A Condition node splits it. A documented question gets a drafted reply. Anything touching price beyond the published page, a discount, a commitment, a legal or security question, or anything Knowledge can't support, routes straight to a person.

  5. Approval

    First reply to a new person is approved. An Approval node holds the drafted reply. You can relax this later per-tag once you trust the FAQ answers, but the first-touch reply to a stranger is the one worth reading before it goes.

  6. Output

    Reply on the channel they used. The approved reply goes back on the same channel — WhatsApp inside the 24-hour customer-service window as a normal message, or an approved template outside it, because that's the platform's actual rule and not something a workflow can wish away.

Channels & connectors

  • Webhook
  • WhatsApp
  • Instagram
  • Messenger
  • Telegram
  • Knowledge base
  • Approval / HITL
  • Slack

Outcome

Every inbound gets the same accurate, sourced answer within minutes on the channel it arrived on, and the questions your Knowledge can't answer become a visible list instead of five improvised replies.

Why it helps

The mechanism is consistency and ownership: an unowned inbox becomes one queue with one grounded answer per question, and the gaps surface as 'Knowledge couldn't answer this' — which is the actual to-do list for your FAQ.

Build spec

2 agents1 economy-tier classifier (runs on everything, including spam) + 1 standard-tier responder (runs only on the answerable branch). Routing and approval are workflow nodes. · Pattern: Cheap classify → route → grounded draft → human approves first touch

System prompt (paste-ready)

You answer inbound questions for {{company}} on behalf of a small team. Answer ONLY from passages retrieved via knowledge_search, and cite the passage id beside each factual statement. If the question is not covered — a capability we haven't documented, a price beyond the published page, a discount, a timeline, a security or legal question — do NOT answer it: return {escalate: true, reason, what_they_asked} so a human replies. Never state a roadmap date, never confirm an integration we haven't documented, never offer a discount or waive a fee. Do not fabricate familiarity: you have not read their blog, seen their site or used their product, so never say you have. Match the channel — short on WhatsApp and Instagram, fuller on email. Sign off as the team, not as a person who doesn't exist.

Agent roles & model tiers

  • Classifier (every inbound) Economy tier — highest-volume step, strict JSON out, no prose

    Return {tag: QUESTION|PRICING|DEMO_REQUEST|SUPPORT|SPAM, question_text, channel, has_opt_in: true|false|unknown}. Judge only from the message. Never answer the question yourself.
  • Responder (answerable branch only) Standard tier, with a configured fallback model — this is the text a stranger actually reads

    Draft a reply grounded strictly in retrieved Knowledge with citations. Escalate anything uncovered, priced, promised or dated. No fabricated personalisation. No invented capabilities.

MCP connectors

  • Your CRM — via a Tool (MCP) node to log the contact (no first-party connector)
  • WhatsApp / Instagram / Messenger / Telegram — first-party inbound + reply channels
  • Website lead form — inbound via Webhook (first-party)

Built-in tools

  • knowledge_search (FAQ, docs, published pricing, objection handling)
  • http_request (log the enquiry to your CRM through its own API)
  • send_email (reply on the email branch)

Guardrails

  • Answers come only from the team's own Knowledge with citations — no roadmap dates, no undocumented integrations, no invented capabilities; an uncovered question escalates instead of being improvised
  • No price, discount, fee waiver or commercial commitment is ever stated by the agent — those route to a human every time
  • The first reply to a new contact passes the Approval node; you can relax this per-tag later, but never for the PRICING or DEMO_REQUEST branches
  • WhatsApp policy is respected as a rule of the workflow, not an afterthought: free-form replies only inside the 24-hour customer-service window, an approved template with prior opt-in outside it — the workflow will not send an un-templated message to someone who hasn't messaged first
  • No fabricated personalisation — the agent never claims to have read their post, visited their site or admired their work
  • Opt-out is honoured on every channel and stored against the contact, so a later campaign workflow can't message them again

Cost strategy

The classifier is the cost-routing decision that matters: it runs on 100% of inbound including spam, so it belongs on the economy tier with a hard token cap and a JSON-only output. The responder — the standard tier plus a fallback model — runs on the smaller answerable slice. Spam is dropped before it ever reaches a paid reasoning call, which in a public inbox is most of the saving.

Output & delivery

Classifier tags every inbound cheaply → the Condition node routes anything commercial or uncovered to a human → the responder drafts a cited, Knowledge-grounded reply → the Approval node gates the first touch → the reply goes out on the originating channel under that channel's real messaging rules, and the enquiry is logged to your CRM via a Tool (MCP) node.

3. One long asset → the derivative pieces you never get around to

You recorded a customer webinar in March. It's a 50-minute file in a folder. The clips, the quote graphics, the FAQ additions and the three posts that were obviously in there never happened, because carving them out is two hours nobody has.

Trigger: Webhook (a transcript, recording or long doc is uploaded)

How the workflow runs

  1. Trigger

    A long asset lands. A Webhook fires when a transcript, recording or long document is added — a webinar, a podcast episode, a customer call you had permission to record, a longread you already published.

  2. Loop

    Loop over the segments. A Loop node fans a cheap extractor across the asset segment by segment, so a 50-minute transcript is processed the same way as a 5-minute one and no part of it is skipped because it was late in the file.

  3. Agent

    Extract candidate moments. The extractor returns strict JSON per segment: the quotable line, its timestamp, the question it answers, and whether it names a customer or a number (which flags it for checking). It extracts what was actually said — it never paraphrases a claim into something stronger.

  4. Agent

    Shape the best ones into drafts. A second agent takes only the top candidates and shapes them into the derivative pieces: two short posts, a clip list with timestamps, and any FAQ entries the asset answers better than your current docs.

  5. Approval

    Approve — including permission to quote. An Approval node holds everything. This is also where a human confirms you actually have permission to quote the named customer, which no model can determine for you.

  6. Output

    Drafts + a Knowledge suggestion. Approved drafts go to Slack ready to post; approved FAQ entries are proposed as additions to your Knowledge base, so the next inbound question gets a better answer than it would have last week.

Channels & connectors

  • Webhook
  • Slack
  • Knowledge base
  • Approval / HITL
  • Email

Outcome

A recording that would have stayed in a folder becomes a reviewed set of posts, a timestamped clip list and concrete FAQ additions — in one approval pass.

Why it helps

The mechanism is that extraction is the expensive part and it parallelises: the Loop reads every segment cheaply so nothing is missed, and the human only makes the judgement calls — is this quotable, do we have permission, is this the right framing.

Build spec

2 agents1 extractor run once per segment via the Loop node + 1 shaper run once on the shortlist. The permission check is human, at the Approval node. · Pattern: Map-reduce: Loop (extract per segment) → shape the shortlist → human approves

System prompt (paste-ready)

(Extractor) Process ONE segment of a long asset. Return strict JSON {quote (verbatim, never paraphrased), timestamp, question_it_answers, names_customer: true|false, contains_number: true|false, strength: LOW|MED|HIGH}. Quote exactly what was said — if a line only works when reworded, mark strength LOW rather than improving it. Set names_customer or contains_number to true whenever either appears, so a human checks permission and accuracy. Never invent a timestamp. Return an empty list for a segment with nothing worth keeping — a thin segment is a normal result.

Agent roles & model tiers

  • Extractor (per segment, via Loop) Economy tier — this is the N-times step, so its tier sets the total cost of the recipe

    Verbatim quote extraction into strict JSON with timestamps and permission/accuracy flags. Never paraphrase, never strengthen a claim, never invent a timestamp.
  • Shaper (once, on the shortlist) Standard tier — the one call where framing matters

    Turn the HIGH/MED candidates into two short posts, a timestamped clip list and any FAQ entries. Keep quotes verbatim. Flag every quote that names a customer or cites a number for human permission and fact checking.

MCP connectors

  • Your video host / storage — via a Tool (MCP) node or an inbound Webhook (no first-party connector)
  • Slack — draft delivery (first-party)

Built-in tools

  • knowledge_search (check whether the FAQ already covers this, so you propose additions rather than duplicates)
  • http_request (fetch the transcript or asset from wherever it lives)

Guardrails

  • Quotes are extracted verbatim with timestamps and are never paraphrased into a stronger claim — a line that only works reworded is marked weak, not improved
  • Any quote naming a customer or citing a number is flagged for human permission and fact-checking before it can be approved; consent to quote is a human determination, never a model's
  • Nothing is published — the Approval node gates every derivative piece, and proposed FAQ entries are suggestions to your Knowledge base, not automatic writes
  • Recordings are only processed where you already had permission to record; the workflow assumes nothing about consent it cannot see
  • Idempotent per asset id, so re-uploading the same recording doesn't produce a second set of near-identical drafts

Cost strategy

Classic map-reduce economics: cost is N segments × (economy-tier, token-capped extractor) + ONE standard-tier shaping call. The extractor's tier is the dominant lever — the shaper only ever sees the shortlist, so it stays cheap no matter how long the asset is. Run the Loop in Parallel batches to cut wall-clock time without changing per-segment cost.

Output & delivery

Loop extracts verbatim candidates from every segment cheaply → the shaper turns the shortlist into posts, a timestamped clip list and FAQ entries → the Approval node gates publication AND the permission-to-quote decision → approved drafts land in Slack and approved FAQ entries are proposed into Knowledge.

4. Customer broadcast that can't accidentally become spam

You want to tell existing customers about a release. The list is a spreadsheet export from three places, you're not sure who opted in, someone remembers a rule about WhatsApp templates, and the safest option — sending nothing — is what happens most months.

Trigger: Webhook (release note published) / scheduled

How the workflow runs

  1. Trigger

    Something worth telling people. A Webhook when you publish a release note, or a scheduled run for a monthly update. The bar is 'this is genuinely useful to an existing customer', not 'it's been a while'.

  2. Loop

    Loop the list, one contact at a time. A Loop node walks the recipient list so eligibility is decided per person, not per campaign. Nobody is included because they happened to be in the same export.

  3. Code

    Eligibility as YOUR rule, not a hardcoded one. A user-defined tool — a SpEL expression you author over the tool's JSON input — decides eligibility. It is sandboxed by construction: no method calls, no constructors, no bean or type references, and there is no loop construct in the grammar. A formula, not a scripting engine — which is exactly what a send-eligibility rule is.

  4. Condition

    Ineligible means skipped, not downgraded. A Condition node drops anyone without opt-in, anyone who opted out, and anyone already messaged inside your frequency window. There is no 'send anyway on a different channel' branch — that's the branch that turns a broadcast into spam.

  5. Agent

    Draft one message per channel. An Agent node drafts the update from the release note and your Knowledge — one email version, one WhatsApp template-compatible version. Every claim comes from the release note; no benefit is embellished.

  6. Approval

    A human approves the send. An Approval node holds the campaign: the copy, the eligible recipient count, and the channel breakdown. Anything sent to prospects or customers at scale is a human decision, every time.

Channels & connectors

  • Webhook
  • Email
  • WhatsApp
  • SMS / Twilio
  • Knowledge base
  • Approval / HITL
  • Tool (MCP → your email-marketing tool)

Outcome

The update reaches exactly the people who opted in to hear it, on a channel they consented to, with copy a human approved — and the ineligible list is visible rather than quietly included.

Why it helps

The mechanism is making eligibility an explicit, per-contact, auditable decision instead of a spreadsheet's implicit one — the reason small teams under-send is uncertainty, and this removes the uncertainty without removing the human sign-off.

Build spec

1 agent1 drafting agent (runs once, not per recipient). Eligibility is a user-defined SpEL tool inside the Loop — no model call per contact, which is both cheaper and more predictable than asking an LLM who to message. · Pattern: Loop → deterministic eligibility (user-defined SpEL tool) → one drafting call → human approves the send

System prompt (paste-ready)

You draft a customer update for {{company}}. Source material: the release note plus passages from Knowledge. Produce TWO versions: (1) email — subject line plus body, plain and specific; (2) a WhatsApp version that fits an approved template's structure, short, with no marketing filler. Rules: every statement must trace to the release note or a retrieved Knowledge passage — cite the source for each. Do not embellish a fix into a feature or a feature into a transformation. No urgency manufacturing, no 'don't miss out', no fake scarcity. Include the opt-out line the channel requires. You are drafting for human approval — you never trigger the send.

Agent roles & model tiers

  • Update writer (once per campaign) Standard tier — it runs once regardless of list size, so the reasoning budget here is trivial and worth it

    Two grounded versions (email + WhatsApp-template-shaped) with per-claim citations, no embellishment, no manufactured urgency, opt-out included.
  • Eligibility (per contact) — NOT an agent User-defined SpEL tool: zero model calls, deterministic, auditable

    A tenant-authored formula, e.g. `send_eligible`: input.optedIn && !input.optedOut && input.daysSinceLastCampaign > 21 && (input.channel == 'EMAIL' || (input.channel == 'WHATSAPP' && input.templateApproved && input.whatsappOptIn)). You own this expression: change the 21 to 30 on a Friday, add a segment condition, and it takes effect on the next run — no developer, no redeploy.

MCP connectors

  • Your email-marketing tool / CRM list — via a Tool (MCP) node (no first-party connector)
  • Email, WhatsApp, SMS (Twilio) — first-party send channels

Built-in tools

  • user-defined tool `send_eligible` (SpEL over the contact JSON — consent, opt-out, frequency window, channel-specific template/opt-in state)
  • knowledge_search (release note, positioning, what we're allowed to claim)
  • send_email (the email branch)

Guardrails

  • Consent is a precondition, not a filter applied afterwards: no opt-in, no send — and an opt-out is permanent and honoured across every channel and every future workflow
  • WhatsApp platform policy is enforced in the workflow: outside the 24-hour customer-service window a broadcast requires prior opt-in AND an approved template — the ineligible contacts are skipped, never rerouted to SMS or email to get around it
  • No scraped or purchased contact lists, ever — recipients exist because they gave you their address for this purpose
  • Frequency cap per contact via the SpEL rule (e.g. nothing within 21 days), evaluated per person inside the Loop rather than per campaign
  • The whole campaign — copy, eligible count, channel breakdown — passes the Approval node before a single message is sent; the agent drafts, a human sends
  • No manufactured urgency, no fake scarcity, and every claim cites the release note or a Knowledge passage

Cost strategy

Cost is deliberately flat in list size: ONE standard-tier drafting call for the whole campaign, and zero model calls per recipient because eligibility is a deterministic SpEL expression rather than an LLM judgement. That's the right trade twice over — a formula is cheaper AND more auditable than a model for a consent decision, and consent is precisely the thing you want to be able to explain later.

Output & delivery

The writer produces both channel versions once → the Loop evaluates the user-defined `send_eligible` SpEL rule per contact → ineligible contacts are skipped and listed → the Approval node shows the copy and the real recipient count → on approval the send goes out on Email/WhatsApp/SMS under each channel's own consent rules, with opt-outs written back through a Tool (MCP) 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