← All scenarios
Store manager · Merch Insights Assistant

End-of-Quarter Markdown Review

It's the last week of the quarter, and the BlastBox Omega store manager has the usual chore: figure out what's selling, what's dead on the shelf, and what to mark down before the numbers close. Instead of exporting a spreadsheet and squinting at pivot tables, she works the question out loud with the Merch Insights Assistant, starting from a store-wide view and drilling all the way down to a single SKU, week by week, then to a discount she can actually defend.

Merch Insights Assistant Sales & Performance Agent Inventory & Fulfillment Agent Store Policy Agent 3 Python skills Charts + PDF out

The conversation

  1. 1
    Manager
    It's end of quarter and I need to tidy up inventory. Over the last 8 weeks, what's selling and what's just sitting on the shelf? Show me the numbers.
  2. Agent → Sales & Performance Agent → Manager
    Sales & Performance Agent · query_sales raw weekly rows, 2026-04-12 → 2026-05-31
    get_catalog price, unit cost, stock on hand per SKU

    The MCP returns raw rows only, no pre-baked analytics, so the skill derives the metrics itself.

    sales-analysis-chart runs Python (matplotlib) → velocity, weeks-of-cover, margin → top_sellers.png, slow_movers.png

    "Here's the quarter. Top sellers (units): MEGA Lizards from Outer Space 408 (68/wk), PulseGrip Pro Controller 310 (51.7/wk), Omega MEGA Edition 240 (40/wk). Slow movers (weeks-of-cover, anything past the 8-week line): OmegaVision VR Headset 72 wks, Cadet Bundle 60, Galaxy Smash 56, Omega Core (1st-gen) 14.5. Charts attached."

  3. 2
    Manager
    Four slow movers across three categories. Is this a category-wide problem, or just specific products? Break it down.
  4. Agent (drill-down 1: by category)
    Sales & Performance Agent · query_sales re-queried per category (console / game / accessory)

    "It's not a category problem, it's specific SKUs. Within the same category the spread is huge: MEGA Lizards (game) is your #1 seller while Galaxy Smash (game) is dead stock; PulseGrip (accessory) flies while the VR Headset (accessory) sits. The one place a whole category skews slow is consoles, and that's almost entirely the 1st-gen Omega Core dragging it down."

  5. 3
    Manager
    The Omega Core is the one I care about, it's last year's console. Pull it on its own, week by week, is it fading or just flat? And how long have we been sitting on it?
  6. Agent (drill-down 2: single SKU + aging)
    Sales & Performance Agent · query_sales filtered to sku = SKU-OMEGA-CORE, week by week
    Inventory & Fulfillment Agent · get_inventory_aging weeks-in-stock, inbound PO

    "It's fading, not flat: weekly units run 9 → 8 → 7 → 6 → 6 → 5 → 4 → 3, down about 67% across the window. It's sitting on 75 units with no inbound PO (about 16 weeks of cover at its slowing pace), and it's being phased out by the MEGA Edition. This is the one to act on."

  7. 4
    Manager
    OK. What should I mark down, and by how much? Keep it within policy, this is a promo, not a clearance.
  8. Agent → Store Policy Agent → Manager
    Store Policy Agent · get_markdown_policy "promo" → max 30% off, 15% margin floor, 10% min-useful

    The guardrails are never hardcoded in the skill, they come from the Policy Agent and get passed straight into the math.

    markdown-optimizer runs Python → per-SKU discount, new price, new margin, binding constraint → markdowns.png

    "Recommended promo markdowns, all within policy:

    • OmegaVision VR Headset · −30% · $199.99 → $139.99 · margin 50.0% (max-discount cap)
    • Galaxy Smash · −30% · $49.99 → $34.99 · margin 48.6% (max-discount cap)
    • Cadet Bundle · −13.7% · $149.99 → $129.42 · margin 15.0% (margin floor)
    • Omega Core (1st-gen) · only −5.9% possible under the floor → flagged for clearance, not promo

    The first three are clean promos. The Core can't be meaningfully promoted, want to know why?"

  9. 5
    Manager
    Yes, why does the Core only get 5.9% when everything else gets 30?
  10. Agent (drill-down 3: the rationale)

    "It's the margin floor, not the 30% cap. The Core costs $320 against a $399.99 price, that's only a 20% starting margin. The 15% floor puts the lowest legal price at $376.47, which is just 5.9% off. That's below the 10% min-useful-promo line, so a promo discount won't move it. Given 75 units, a fading pace, and no inbound PO, the right call is a separate clearance (which needs a manager flag), not this promo."

  11. 6
    Manager
    Good. Apply the three-item promo set, leave the Core out for a separate clearance decision, and give me a one-pager I can send to the regional team.
  12. Agent → Manager
    merch-report-pdf runs reportlab → embeds the charts, the recommendation table, and the clearance note
    📊 hands back merch_review.pdf

    "Done. Promo set applied: VR Headset, Galaxy Smash, and Cadet Bundle, each within the 15% margin floor. Omega Core left out and noted for a separate clearance with a manager flag. The one-pager has the top-seller and slow-mover charts, the markdown table, and the guardrail source. Want me to email it to the regional team?"

📊
Outcome
3-item promo within policy (max 30% off, 15% floor) · Omega Core flagged for clearance · top_sellers / slow_movers / markdowns PNGs · merch_review.pdf

What was demonstrated

Drill down without leaving the chat

The manager pivots from a store-wide view, to a per-category breakdown, to one SKU week-by-week, to the reasoning behind a single number. Each follow-up re-queries the raw MCP with sku / category / week filters and re-derives the metrics live.

Charts the agent draws itself

The Sales & Performance MCP returns no analytics, only raw rows. sales-analysis-chart computes velocity, weeks-of-cover, and margin in Python and renders the top-seller, slow-mover, and markdown charts with matplotlib.

Recommendations grounded in policy

Every discount comes from the Store Policy Agent's guardrails, the max-discount cap, the margin floor, and the min-useful threshold, never hardcoded. The optimizer even flags an item a promo can't move and routes it to clearance instead.

What gets generated

📈
top_sellers.png · slow_movers.png · markdowns.png matplotlib · derived from raw MCP rows
📊
merch_review.pdf reportlab · one-page manager report · charts + markdown table + notes