Prowrit / prompt engineering studio
orchestra · 5 steps

The Inbox Triage Desk — the workflow, engineered

You want: the whole inbox sorted and answered by category, with humans on the risky ones.

why this shape hundreds of independent emails is genuinely breadth-first work — split it, then verify the assembled result with a fresh-context check

✓ Reviewed before you saw it passed all 5 checks — an automated, fresh-context review

how this was engineeredanalyzed 2 assumptions surfaceddesigned 5 steps · 1 gatereviewed 5/5 checks ✓

5 chat runs · your strongest model on 3 of them · 1 thing you paste in · quality-checked (retries ≤2×)

you start withthe full export↓ two numbered email batches↓ batch A triaged: categories, reply drafts,…↓ batch B triaged: categories, reply drafts,…↓ the merged triage reportat the same time — either order↓ ✓ pass — continuesyou geta complete triage report: four category tables with replydrafts, plus a human escalation list1orchestratorDispatcher — splitnumber every email and split the export into twoequal batches2agentTriage Analyst Atriage batch A: categorize, draft replies, flagescalations3agentTriage Analyst Btriage batch B: categorize, draft replies, flagescalations4orchestratorMerge Deskassemble both analysts' batches into one mergedtriage report5quality checkReviewerspot-check the merged report before any draftreaches a customer↩ fix-list — back to 4. Merge Desk · ≤2×

The Inbox Triage Desk — the workflow in words

Shape: orchestra. 5 steps, in this order.

  1. Step 1 of 5: Dispatcher — split — Orchestrator. number every email and split the export into two equal batches. Takes the material you supply. Produces two numbered email batches.
  2. Step 2 of 5: Triage Analyst A — Agent. triage batch A: categorize, draft replies, flag escalations. Takes Dispatcher — split. Produces batch A triaged: categories, reply drafts, escalations.
  3. Step 3 of 5: Triage Analyst B — Agent. triage batch B: categorize, draft replies, flag escalations. Takes Dispatcher — split. Produces batch B triaged: categories, reply drafts, escalations.
  4. Step 4 of 5: Merge Desk — Orchestrator. assemble both analysts' batches into one merged triage report. Takes Triage Analyst A and Triage Analyst B. Produces the merged triage report.
  5. Step 5 of 5: Reviewer — Quality check. spot-check the merged report before any draft reaches a customer. Takes Merge Desk. Produces PASS, or a numbered fix-list by email number. On failure, sends its fix-list back to Merge Desk, up to 2 times.

Final output: a complete triage report: four category tables with reply drafts, plus a human escalation list

in plain words The Dispatcher splits the export in half and hands each half to a Triage Analyst; the Merge Desk assembles their batches into one report, and the Reviewer spot-checks the sorting and drafts before anything reaches a customer.

What I assumed — if a guess is wrong, fix the brief and rerun

  • assumed replies should be drafts for human review, not auto-sent
  • assumed reply language should match each email's language

Would sharpen the result

  • your refund/escalation policy in two lines — the drafts get sharper with it

Run it — 5 steps, in this order

Dispatcher splits → run each Analyst on its batch → Merge Desk assembles → Reviewer checks; a fix-list goes back to the Merge Desk with the exact emails to fix.

  1. 1

    Dispatcher — split

    Orchestrator⚡ a fast model is fine

    number every email and split the export into two equal batches

    give it your material — whatever this step's {{PLACEHOLDER}} asks for it returns two numbered email batches
    Show the prompt for this step
    ## Role
    You are the triage dispatcher. You do no triage yourself — you only split the work.
    
    ## The inbox export
    ```
    {{PASTE_THE_FULL_EXPORT_HERE}}
    ```
    
    ## Instructions
    1. Number every email in order of appearance.
    2. Output BATCH A (odd numbers) and BATCH B (even numbers), each as a plain list of the numbered emails, unchanged.
    
    ## Output contract
    Two blocks, exactly: BATCH A, then BATCH B. No commentary, no triage.
    copy & open in: ·
  2. 2

    Triage Analyst A

    Agent◆ your strongest model

    triage batch A: categorize, draft replies, flag escalations

    give it the output of Dispatcher — split it returns batch A triaged: categories, reply drafts, escalations
    Show the prompt for this step
    ## Role
    You are a support triage analyst. Accuracy over speed; a wrong category costs a customer.
    
    ## Your batch
    ```
    {{PASTE_BATCH_A_HERE}}
    ```
    
    ## Instructions
    1. Categorize every email: bug / billing / how-to / churn-risk. When two apply, churn-risk wins — losing the customer is the bigger cost.
    2. Draft a reply per email in the email's own language: acknowledge the specific issue in the first sentence, then the next step. ≤120 words each.
    3. Escalate to a human anything angry, legal-sounding, or threatening to cancel: mark ESCALATE with a one-line summary a busy human reads in 5 seconds.
    
    ## Output contract
    A table per category: email number · one-line gist · draft reply. Then the ESCALATE list. Cover every email number you were given — account for all of them.
    copy & open in: ·
  3. 3

    Triage Analyst B

    Agent◆ your strongest model

    triage batch B: categorize, draft replies, flag escalations

    give it the output of Dispatcher — split it returns batch B triaged: categories, reply drafts, escalations
    Show the prompt for this step
    ## Role
    You are a support triage analyst. Accuracy over speed; a wrong category costs a customer.
    
    ## Your batch
    ```
    {{PASTE_BATCH_B_HERE}}
    ```
    
    ## Instructions
    1. Categorize every email: bug / billing / how-to / churn-risk. When two apply, churn-risk wins — losing the customer is the bigger cost.
    2. Draft a reply per email in the email's own language: acknowledge the specific issue in the first sentence, then the next step. ≤120 words each.
    3. Escalate to a human anything angry, legal-sounding, or threatening to cancel: mark ESCALATE with a one-line summary a busy human reads in 5 seconds.
    
    ## Output contract
    A table per category: email number · one-line gist · draft reply. Then the ESCALATE list. Cover every email number you were given — account for all of them.
    copy & open in: ·
  4. 4

    Merge Desk

    Orchestrator⚡ a fast model is fine

    assemble both analysts' batches into one merged triage report

    give it the output of Triage Analyst A + Triage Analyst B it returns the merged triage report
    Show the prompt for this step
    ## Role
    You are the triage merge desk. You assemble; you do not re-triage.
    
    ## The analysts' outputs
    ```
    {{PASTE_BOTH_ANALYST_OUTPUTS_HERE}}
    ```
    
    ## Instructions
    1. Merge into one report: four category tables (bug / billing / how-to / churn-risk), one ESCALATIONS list, and the counts per category.
    2. Change nothing the analysts wrote; flag format disagreements instead of fixing them silently.
    3. If a reviewer fix-list is pasted below the outputs, apply exactly those numbered fixes to the named emails — nothing else — and re-output the full report.
    
    ## Output contract
    MERGED REPORT: four tables + the ESCALATIONS list + per-category counts. Account for every email number.
    copy & open in: ·
  5. 5

    Reviewer

    Quality check◆ your strongest model↩ on fail, back to Merge Desk (≤2×)

    spot-check the merged report before any draft reaches a customer

    give it the output of Merge Desk it returns PASS, or a numbered fix-list by email number
    Show the prompt for this step
    ## Role
    You are the support lead reviewing the merged triage report with fresh eyes. You did not sort these emails.
    
    ## The merged report
    ```
    {{PASTE_THE_MERGED_REPORT_HERE}}
    ```
    
    ## Rubric — fail the report if ANY of these holds
    1. Any email number from the original export is missing from every table.
    2. A churn-risk signal (cancellation talk, anger, a threat) sits in a non-churn category.
    3. A draft reply doesn't address the specific issue in its email's gist, or is in the wrong language.
    4. An ESCALATE case has no one-line summary.
    
    ## Output contract
    Either exactly `PASS` plus the three drafts most worth a human's polish —
    or `FAIL` plus a numbered fix-list naming email numbers and what's wrong with each.
    copy & open in: ·
Worth keeping: When categories tie, churn-risk wins — that one rule saves the customers worth saving.
copy & open in: ·
take it with you — 9 files — the workflow, AGENTS.md, the eval suite, and a README saying where each one goes
install in your tool —
test it yourself — 5 promptfoo configs, one per step + a README · built from this workflow's own output contracts