4 ready-to-build workflows

AI agent workflows for Job seekers & career growth

Screen postings against your real must-haves, tailor only where it's worth it, keep the tracker honest and practise out loud — without a single invented line on your CV.

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. Sixty postings → a ranked shortlist, then a tailored application (map-reduce, 3 agents)

One CV, unchanged, went out to sixty postings. Each application took twenty minutes of scrolling and copy-paste, so the tailoring stopped after the first four and the rest went out generic. Nobody ever read back which sixty they were, or which ones actually matched what the person can genuinely do.

Trigger: Webhook (saved-search digest from a job board) / Email (job alerts)

How the workflow runs

  1. Trigger

    The day's postings arrive. Job-board alert emails hit an Email trigger, or a saved-search digest posts to a Webhook. Job boards and ATS career portals have no first-party connector — postings come in via Webhook and/or are fetched by a Tool (MCP) node.

  2. Knowledge

    Your own record, once. A Knowledge node holds the person's real material: current CV, past project write-ups, certificates, transcripts, reference letters. This is the ONLY source of fact about them — everything downstream is grounded in it.

  3. Loop

    Map: one cheap pass per posting. A Loop node fans a cheap screener agent across every posting — one focused pass each, isolated context — so sixty postings cost the same per item as six.

  4. Agent

    Screener scores the fit honestly. The screener returns strict JSON per posting: must-have requirements found vs. missing, evidence quoted from the person's own Knowledge, and a verdict. A missing must-have is reported as missing, never smoothed over.

  5. Tool (MCP)

    Your must-haves, encoded once. A user-defined tool turns the screener's counts into a single verdict using YOUR thresholds, not a model's mood — the same rule applied identically to all sixty.

  6. Agent

    Reduce: the shortlist. A reducer agent ranks the STRONG and STRETCH postings into one shortlist with the reason for each, and lists the SKIPs with the specific must-have that was missing — that list is the honest map of the person's real gaps.

  7. Agent

    Premium tailoring, shortlist only. Only for shortlisted roles does a premium-tier writer draft the tailored CV summary and cover letter — re-ordering and re-framing what is already true in Knowledge, adding nothing that isn't.

  8. Approval

    You read it before it exists anywhere. An Approval node holds every draft. The person reads the claims, checks each one is theirs, edits, and only then releases. Nothing is submitted by the workflow — applications are filed by the human on the employer's own portal.

Channels & connectors

  • Webhook (job-board digest)
  • Email
  • Tool (MCP → job board / ATS career portal)
  • Knowledge base
  • Approval / HITL
  • Telegram

Outcome

Every posting in the day's batch is screened against the person's actual must-haves, the shortlist arrives ranked with reasons, and only shortlisted roles get a hand-checked tailored draft.

Why it helps

The mechanism is cost asymmetry plus grounding: the expensive work (tailoring) is spent only where a cheap, rule-checked screen says it's warranted, and every claim in the draft traces back to a document the person already owns — so tailoring scales without the CV drifting away from the truth.

Build spec

3 agents1 screener (runs once per posting via the Loop node) + 1 reducer (once) + 1 tailoring writer (only for shortlisted roles). The Loop, the user-defined verdict tool and the Approval are workflow nodes. · Pattern: Map-reduce with a premium tail: Loop (cheap map) → reducer (rank) → premium writer on the shortlist only → human approves

System prompt (paste-ready)

(Screener) Assess ONE job posting against the candidate's own record in Knowledge. Return strict JSON {title, employer, mustHaveTotal, mustHaveMatches, matched[{requirement, evidence, source_doc}], missing[{requirement, why}], niceToHaveMatches, notes}. EVERY item in matched[] MUST quote real evidence from the candidate's own documents and name the source document — if you cannot find evidence, the requirement goes in missing[], never in matched[]. Do NOT infer a skill from a job title, do NOT round up years of experience, do NOT assume a degree or certificate that isn't in Knowledge. You are scoring fit, not selling the candidate. If the posting is unreadable or a duplicate, return {skip: true, reason}.

Agent roles & model tiers

  • Screener (per posting) Economy tier — fast and cheap; it runs once per posting, so this single choice dominates the total cost of the whole run. Configure a fallback model so one flaky call doesn't drop a posting from the batch.

    Score ONE posting against the candidate's Knowledge into schema-valid JSON. Quote evidence and name its source document for every match; anything without evidence is 'missing'. No inferred skills, no rounded-up years, no assumed credentials.
  • Reducer (once per batch) Standard tier — reasoning over the whole batch

    Rank the screened postings into one shortlist (STRONG first, then STRETCH) with a one-line reason each, and list the SKIPs grouped by the must-have that was missing. Use only the provided results — never re-score a posting yourself. Finish with the two or three requirements that blocked the most roles; that is the candidate's real gap list, state it plainly.
  • Tailoring writer (shortlist only) Premium tier — this is the one place the quality is worth paying for, and it runs on a handful of roles, not on sixty

    Draft a tailored CV summary and a cover letter for ONE shortlisted role, using ONLY facts present in the candidate's Knowledge. You may re-order, re-frame, re-word and choose which true things to lead with. You may NOT add a skill, tool, employer, responsibility, qualification or date that is not in the source documents, and you may NOT change any date or duration. Where the role asks for something the candidate genuinely lacks, either omit it or address it honestly as a gap they are working on — never imply it is held. Mark every draft as a draft for the candidate to check.

MCP connectors

  • Job board / saved search — inbound via Webhook; posting bodies fetched by a Tool (MCP) node (no first-party connector)
  • ATS career portal — read-only via Tool (MCP) where the employer exposes one; applications are filed by the human, never by the workflow
  • Email / Telegram — where the shortlist and the drafts are delivered

Built-in tools

  • knowledge_search (the candidate's own CV, project write-ups, certificates, references)
  • web_search (employer background for the cover letter — public information only)
  • http_request (fetch posting bodies from the board)
  • user-defined tool `role_fit` (SpEL): input.mustHaveMatches >= input.mustHaveTotal ? 'STRONG' : (input.mustHaveMatches >= input.mustHaveTotal - 1 ? 'STRETCH' : 'SKIP') — a tenant-authored SpEL expression over the tool's JSON input. It is a data-transform/formula tool, not a scripting engine: sandboxed by construction, because the grammar allows no method calls, no constructors, no bean or type references and no loop. The benefit is that the person encodes THEIR OWN must-have threshold once — 'one gap is a stretch, two is a no' — and it is applied identically to all sixty postings, deterministically, without a developer and without asking a model to be consistent about arithmetic.

Guardrails

  • HONESTY, absolute: the agent never fabricates experience, skills, qualifications, employers or dates. It only reframes and highlights what is genuinely true in the candidate's own Knowledge, and it flags missing requirements as missing — a CV that lies is unethical and is the candidate's legal risk to carry
  • Every 'matched' requirement must quote evidence and name the source document; anything unevidenced is forced into the missing[] list, so the shortlist can't be inflated by a confident model
  • No draft leaves as an application: the Approval node holds every CV summary and cover letter for the person to read line by line, and the submission itself is done by the human on the employer's portal — the workflow never auto-applies
  • The screener's verdict comes from the deterministic `role_fit` SpEL rule, not from model discretion, so the same posting scores the same way on every run
  • Schema validation on each screener output — a malformed posting is skipped with a reason and surfaced, never silently ranked

Cost strategy

The whole design is a cost shape: N × economy-tier screener + ONE standard-tier reduce + K × premium-tier tailoring where K is the shortlist, not the batch. Screening sixty postings on the premium tier would cost roughly an order of magnitude more than screening them on the economy tier and paying premium for four cover letters — the Loop is exactly where cost routing earns its keep. Cap the screener per-call, give it a fallback model so a single failure doesn't cost a re-run of the batch, and run the map in Parallel batches for wall-clock speed at unchanged per-item cost.

Output & delivery

The Loop maps the economy screener over every posting → `role_fit` turns counts into STRONG/STRETCH/SKIP deterministically → the reducer emits one ranked shortlist plus an honest gap list → the premium writer drafts only for shortlisted roles → the Approval node puts every claim in front of the person before anything is used, and they file the application themselves.

2. The tracker that updates itself (and admits when it doesn't know)

Applications went into a spreadsheet. The spreadsheet stopped being updated in week two. Now replies, rejections and interview invites are scattered across an inbox, and it's genuinely unclear which roles are still live, which went quiet three weeks ago, and which one needed a follow-up last Tuesday.

Trigger: Email (replies to applications) + scheduled Webhook (daily sweep)

How the workflow runs

  1. Trigger

    A reply lands, or the day rolls over. An Email trigger catches replies from employers and ATS no-reply addresses; a scheduled Webhook fires a daily sweep for the applications that nobody replied to at all.

  2. Agent

    Classify the reply. An Agent node matches the message to an application and classifies it — acknowledgement, rejection, screening call, interview invite, offer, or ambiguous — extracting any date, time and named contact it actually contains.

  3. Condition

    Ambiguous stays ambiguous. A Condition node routes anything the agent could not confidently match or classify to a human-review lane instead of guessing a stage. A tracker that quietly guesses is exactly how the last one lost trust.

  4. Loop

    Sweep the silent ones. A Loop node walks the still-open applications and computes days since the last contact, so the ones that went quiet surface on their own rather than being remembered.

  5. Tool (MCP)

    Your follow-up window, encoded. A user-defined tool decides what is due today using the person's own waiting periods — not a generic default, and not a model's opinion of what's polite.

  6. Output

    One short daily digest. An Output node sends a single WhatsApp or Telegram message: what moved, what's due for a nudge, what's ambiguous and needs a human eye. One message a day, not a notification per email.

  7. Approval

    Nudges are drafted, never auto-sent. An Approval node holds each follow-up draft — the person reads it and releases it. Nothing is sent to an employer without a click.

Channels & connectors

  • Email
  • Webhook (scheduled sweep)
  • WhatsApp
  • Telegram
  • Approval / HITL
  • Tool (MCP → application tracker sheet/store)

Outcome

The pipeline stays current on its own, silence becomes visible instead of invisible, and follow-ups are drafted at the right moment for the person to send.

Why it helps

The mechanism is that the update work moves off the person entirely — a tracker fails because maintaining it is manual, so the fix is not a better spreadsheet but removing the maintenance step, while keeping every outbound message human-released and every uncertain classification human-reviewed.

Build spec

1 agent1 classification agent (per reply and per swept application). The daily sweep Loop, the ambiguity gate, the follow-up SpEL rule and the send Approval are workflow nodes.

System prompt (paste-ready)

You are the candidate's own application tracker. Given an inbound message and the list of open applications, match it to exactly one application and classify the stage as one of {ACK, REJECTED, SCREENING_CALL, INTERVIEW, TASK_ASSIGNMENT, OFFER, UNCLEAR}. Extract only what the message literally contains: {employer, role, date, time, timezone, contact_name, action_required}. Never infer a date, a stage or an outcome that is not written down — if the match or the stage is not obvious, return UNCLEAR with the two best candidate matches and let a human decide. Do not draft or send anything to the employer; you only classify and summarise. Never treat silence as a rejection; report it as days since last contact.

Agent roles & model tiers

  • Reply classifier (per message) Economy tier — short, structured extraction on a high-volume stream; add a fallback model so a transient failure doesn't lose a reply

    Match one message to one open application and return schema-valid JSON with the stage and only literally-stated dates/contacts. UNCLEAR is a valid, preferred answer over a guess.
  • Digest writer (once a day, same agent, second pass) Standard tier — one call per day, so the reasoning budget is affordable here

    Write one short daily digest: what moved and to which stage, which applications are due a follow-up today, which items are UNCLEAR and need the person's eye. Plain language, no encouragement filler, no invented statistics about response rates.

MCP connectors

  • Application tracker store (sheet / database) — via a Tool (MCP) node; there is no first-party connector for a personal spreadsheet
  • ATS no-reply mail — inbound via the Email trigger only; ATS portals are not written to by the workflow
  • WhatsApp / Telegram — the daily digest channel

Built-in tools

  • knowledge_search (what was actually applied for, and the tailored draft that was sent)
  • http_request (read and update the tracker store)
  • send_email (follow-up drafts — released only after Approval)
  • user-defined tool `follow_up_due` (SpEL): input.daysSinceContact >= input.nudgeAfterDays && input.stage != 'REJECTED' && input.nudgesSent < 2 ? 'NUDGE' : 'WAIT' — a tenant-authored SpEL expression over the tool's JSON input, sandboxed by construction (no method calls, no constructors, no bean/type references, no loop in the grammar). It is a formula tool, not a scripting engine. The benefit: the person sets their own waiting period and their own cap on how many times they will chase a single employer, once, and it is applied the same way to every application forever — no developer, and no model deciding on the day what counts as too soon or too pushy.

Guardrails

  • HONESTY, absolute: no fabricated experience, skills, qualifications or dates anywhere in a follow-up message — it may reference only what is genuinely in the person's Knowledge and what was actually sent, and it flags gaps honestly rather than papering over them
  • UNCLEAR is a first-class outcome — an unmatched or ambiguous message goes to the human-review lane and never silently moves an application to a stage it may not be in
  • Silence is never classified as a rejection; it is reported as days since last contact
  • Every follow-up is drafted and held at the Approval node — the person releases it; the workflow sends nothing to an employer on its own, and the SpEL nudge cap stops repeat chasing
  • The tracker write is keyed to the application id and idempotent, so a forwarded or re-delivered email can't create a duplicate row or double-count a stage

Cost strategy

Per-reply classification is short structured extraction, so it belongs on the economy tier with a hard per-call cap — over a long search this is the volume that adds up. Exactly one standard-tier call a day writes the digest. The daily sweep does no model work at all: `follow_up_due` is deterministic SpEL, so computing what's due costs nothing and can't drift.

Output & delivery

Each reply is classified and the tracker updated by a Tool (MCP) node → the daily Loop plus the `follow_up_due` SpEL rule marks what's due → one Output node sends a single digest on WhatsApp or Telegram → each follow-up draft waits at the Approval node until the person releases it via send_email.

3. Interview practice out loud, grounded in the actual job ad

Interview prep is re-reading the job ad on the bus. The first time the answers are said out loud is in the interview itself, and the questions that get asked are the ones about the parts of the CV that are thinnest — which is exactly where the answers were never rehearsed.

Trigger: WhatsApp / Voice ("practise the Tuesday interview") — or scheduled the evening before

How the workflow runs

  1. Trigger

    Start a practice round. The person messages on WhatsApp or dials in on Voice/Call. A scheduled trigger can also open a practice slot the evening before a confirmed interview from the tracker.

  2. Knowledge

    The ad and the real CV, side by side. A Knowledge node loads the specific posting and the person's genuine record — so the questions come from the actual requirements of that role, and the feedback is measured against what they have actually done.

  3. Agent

    Interviewer agent asks, one at a time. An Agent node runs a realistic round: role-specific questions, a follow-up probe when an answer is vague, and deliberate coverage of the requirements the fit screen flagged as gaps — because those are the questions that will land.

  4. Voice

    Spoken, in the person's language. A Voice node with ElevenLabs handles the spoken round; Sarvam covers Indian-language practice, so someone interviewing in English can still rehearse and get feedback in the language they think in.

  5. Agent

    Feedback on substance, not vibes. After the round, the agent gives specific feedback: which answers had a concrete example and which didn't, where an answer drifted into a claim the CV doesn't support, and which genuine experience they under-sold.

  6. Condition

    Gap or overclaim?. A Condition node separates two very different notes — 'you have this and didn't mention it' versus 'you said something your record doesn't support' — and the second is always surfaced, never smoothed.

  7. Output

    A short written brief. An Output node sends a compact recap on WhatsApp or Email: the questions, the strongest true examples to reuse, and the honest gaps to be ready to name.

Channels & connectors

  • WhatsApp
  • Voice / Call
  • ElevenLabs
  • Sarvam
  • Knowledge base
  • Email

Outcome

The person has said their answers out loud, against the real requirements of the specific role, and knows which of their genuine examples are strongest and which gaps they need an honest answer for.

Why it helps

The mechanism is rehearsal against the specific ad rather than generic prep, plus a truthfulness check on the spoken answers themselves — practising a claim the CV doesn't support is worse than not practising, so the agent catches it in the room where it costs nothing.

Build spec

1 agent1 interviewer/coach agent running both the question round and the feedback pass. Voice, the gap/overclaim branch and the delivery are workflow nodes.

System prompt (paste-ready)

You are running interview practice for a candidate on ONE specific role. Load the posting and the candidate's own record from Knowledge. Ask realistic questions for that role, one at a time, and probe once when an answer is vague or has no concrete example. Cover the requirements the fit screen marked as gaps — those are the questions most likely to be asked. Then give specific feedback: which answers carried a real example, which were generic, which under-sold something the candidate genuinely has, and — most importantly — any answer that claimed something their record does not support. NEVER coach the candidate to claim experience, skills, tools, qualifications or dates they do not have; if they lack a requirement, help them say so honestly and describe what they would do about it. Do not invent an interviewer's opinion, a scoring rubric or an outcome prediction. No flattery.

Agent roles & model tiers

  • Interviewer / coach (whole session) Standard tier for the question round — conversational latency matters more than depth here; a premium-tier fallback is worth configuring for the feedback pass, where the substance judgement actually happens

    Ask role-specific questions one at a time with a single probe on vague answers, then give evidence-based feedback. Flag any answer that outruns the candidate's own record. Never coach a false claim.

MCP connectors

  • Job posting — pulled in via a Tool (MCP) node or the Webhook digest (no first-party job-board connector)
  • ElevenLabs — spoken practice round
  • Sarvam — Indian-language practice and feedback
  • WhatsApp / Email — the written recap

Built-in tools

  • knowledge_search (the specific posting + the candidate's real CV, projects and certificates)
  • web_search (public information about the employer, for context questions only)

Guardrails

  • HONESTY, absolute: the coach never helps the candidate fabricate experience, skills, qualifications or dates. It flags any spoken answer that outruns their own record, and it coaches an honest 'I haven't done that, here's the closest thing I have' instead — a rehearsed lie is both unethical and the candidate's legal risk in the interview
  • Feedback is grounded in the candidate's own documents and the actual posting; no invented rubric, no predicted outcome, no invented callback or success rates
  • The practice session is a rehearsal only — nothing from it is sent to any employer, and no recording or transcript leaves the person's own workspace
  • No flattery-as-feedback: an answer with no concrete example is named as such, because the point of practising is to find that before the interview does

Cost strategy

A conversational round is many short turns, so it runs on the standard tier with a per-session budget cap; the single feedback pass at the end is the one call worth routing to a premium model, with a fallback configured so a dropped call doesn't waste the session. Voice minutes, not tokens, are usually the larger line here — cap the session length rather than the model.

Output & delivery

The Voice node runs the spoken round through ElevenLabs (or Sarvam for an Indian language) → the agent's feedback pass separates under-sold strengths from unsupported claims at the Condition node → an Output node delivers a short written brief on WhatsApp or Email with the strongest true examples and the gaps to answer honestly.

4. The referral asks that never got sent

There are eleven people who would probably help — an ex-manager, two former colleagues, someone met at a meetup. The messages were never written, because each one needs to be different and writing eleven different honest messages at 11pm after a day of applications is where the energy runs out.

Trigger: Webhook (a role is shortlisted) / WhatsApp ("who do I know at this company?")

How the workflow runs

  1. Trigger

    A shortlisted role needs a warm route. A Webhook fires when the fit screen shortlists a role, or the person asks directly on WhatsApp.

  2. Knowledge

    Your own contact notes. A Knowledge node holds the person's own notes on their network — who they worked with, on what, when, and how well they actually know them. Only what the person themselves recorded; nothing scraped, nothing compiled from outside sources.

  3. Loop

    One draft per contact, not one template. A Loop node walks the relevant contacts, so each message is drafted from the real shared history with that specific person instead of a mail-merge.

  4. Agent

    Draft an honest, specific ask. An Agent node writes each message: how they actually know each other, what the person is looking for, what they genuinely bring, and a small, easy, refusable ask. No inflated claims, and no pretending to a closeness that isn't there.

  5. Condition

    Thin connection?. A Condition node separates strong ties from thin ones and drafts them differently — a barely-remembered meetup contact gets a short reintroduction, not a referral request, because pretending otherwise is how these messages get ignored.

  6. Approval

    You send it, always. An Approval node holds every draft. The person reads it, edits the tone, and sends it themselves — a message to someone's real professional network is theirs to send, not an agent's.

  7. Output

    Logged so it isn't asked twice. An Output node records who was asked, for which role and when, so the same contact isn't approached three times in a month.

Channels & connectors

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

Outcome

Eleven specific, honest, individually-grounded messages exist as drafts within minutes, and the person spends their remaining energy on reading and sending rather than on writing from a blank page.

Why it helps

The mechanism is removing the blank-page cost that kills these messages, while keeping the two things that make them work: specificity to the real shared history, and the person's own hand on send.

Build spec

1 agent1 drafting agent, run once per contact via the Loop node. The tie-strength branch, the send Approval and the ask-log are workflow nodes.

System prompt (paste-ready)

Draft ONE outreach message from the candidate to ONE person in their own contact notes, about ONE specific role. Ground it in the real shared history recorded in Knowledge — where and when they worked together, on what. Say plainly what the candidate is looking for and what they genuinely bring, using ONLY what is in the candidate's own record. Make the ask small, specific and easy to decline. NEVER overstate the relationship, never claim a shared project that isn't in the notes, and never inflate the candidate's experience, skills, qualifications or dates. If the recorded connection is thin, write a short honest reintroduction instead of a referral request and say so. This is a draft for the candidate to edit and send themselves — do not write it as if already sent.

Agent roles & model tiers

  • Outreach drafter (per contact) Standard tier — short, tone-sensitive writing where per-contact specificity is the whole point; economy tier flattens every message into the same voice, which is the failure mode being fixed

    Write one honest, specific message grounded in the recorded shared history. Small refusable ask. No overstated relationship, no inflated experience. Draft only.

MCP connectors

  • The person's own contact notes — held in Knowledge; no external network is scraped or compiled
  • Email / WhatsApp / Slack — the channels the person sends from themselves after approving

Built-in tools

  • knowledge_search (own contact notes, own CV and project history)
  • send_email (only after the Approval node releases a specific draft)

Guardrails

  • HONESTY, absolute: no fabricated experience, skills, qualifications or dates, and no fabricated shared history — the message may only reference what the person themselves recorded, and a thin connection is written as a thin connection
  • Nothing is sent by the workflow: every draft passes the Approval node and the person clicks send, because these are their real relationships
  • Only the person's own contact notes are used — the workflow does not scrape, enrich or compile information about contacts from outside sources
  • The ask-log prevents the same contact being approached repeatedly across different roles in a short window

Cost strategy

One standard-tier call per contact, bounded by how many people are actually relevant to a given role — typically a handful, so there is no runaway multiplier. If a batch ever gets large, cap it and draft the strong ties first: the thin-tie reintroductions are the ones that can wait, not the ones worth a cheaper model.

Output & delivery

The Loop drafts one grounded message per contact → the tie-strength Condition splits referral asks from reintroductions → every draft waits at the Approval node for the person to edit and send from their own Email, WhatsApp or Slack → an Output node logs who was asked, for what, and when.

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