AI Agent Alerts That Explain What Happened and What to Do Next (2026)
Quick summary: Slack says Sales down 15% with no next step. The 15% is a schema fixture. Ship metric, contributors, unknowns, and ranked actions. Baymard 70.22% is not your cause.
Key Takeaways
- Slack says Sales down 15% with no next step
- The 15% is a schema fixture
- Baymard 70
- 22% is not your cause
- Monday, leadership Slack pings: Sales down 15%

Table of Contents
Monday, leadership Slack pings: Sales down 15%. No tool. No owner. No next step. Merch pauses a campaign anyway.
This is series part 55: agent alerts with a measured delta, contributors with tools, unknowns where tools are missing, and ranked actions with autonomy. If a contributor has no tool, it is an unknown, not a story. The hop contract for “why did revenue move?” is root cause analysis — this post is the payload that lands on a human after those hops (or after you admit you cannot run them). After July 30, 2026, net-new alert agents should not start on Agents Classic.
The 15% in the schema is a fixture, not a client KPI, and not a FactualMinds measurement. Map the old string to fields: the number belongs in metric only after salesByPeriod returns; the “why” belongs in contributors or unknowns; the “so what” belongs in recommended_actions with autonomy.
The job. Replace bare percentages with a schema: metric, contributors, unknowns, ranked actions.
This week. Ship the schema before the channel. Missing hops → unknowns.
A person still signs. Pause ads, markdowns, PO sends, and any irreversible write.
Skip it when you have no metric tool, no comparison window, and no owner for the recommended action.
Our take: ship the schema before the channel. Trade-off: alerts stay quiet until tools exist. You also stop paging leadership with a percentage and a vibe.
Copy the alert schema — Open
evidence-based-alert-schema.md. Deltas in that file are fixtures. Fill your tools. Series folder:ecommerce-ai-agents-series/.
FactualMinds is an AWS Select Tier Services Partner. We help merchants wire evidence into the page — we do not sell a 15% recovery.
Detection still lives in monitoring. The morning cap still lives in the daily brief. The always-on rank still lives in the control tower.
Bare percentage vs evidence-based alert
| Traditional | Agent payload |
|---|---|
Sales down 15% | Headline from salesByPeriod with window and delta as measured |
| A channel story | Contributors with evidence_tool + evidence_ref |
| Silence on gaps | unknowns[] when a hop has no tool |
| “Fix it” | Ranked recommended_actions with autonomy |
| Implicit human | human_required: true unless Policy already allows a narrow auto |
Merchandising pauses the wrong campaign; finance treats a fixture percentage as a board metric; ops marks the alert “done” because the model sounded sure. Baymard 70.22% abandonment is industry context. Pasting it as your cause is a failed eval — same rule as the daily brief and RCA.
The 15% in the artifact is there so the JSON is readable. Replace it. Do not present it as last week’s store.
The schema (fixtures, not outcomes)
From evidence-based-alert-schema.md:
{
"alert_id": "ALT-DEMO-001",
"headline": "Sales declined vs prior week as measured by salesByPeriod",
"metric": { "name": "net_revenue", "delta_pct": -15, "evidence_tool": "salesByPeriod" },
"contributors": [
{
"text": "Advertised SKU DEMO-1 ATP 0 from Tue 14:00",
"evidence_tool": "getInventory",
"evidence_ref": "sku:DEMO-1",
"causation": "possible_contributor"
}
],
"unknowns": ["Paid traffic mix — no sessionsByChannel tool"],
"recommended_actions": [
{ "rank": 1, "action": "Pause ads on DEMO-1", "autonomy": "recommend" },
{ "rank": 2, "action": "Expedite receipt if PO exists", "autonomy": "draft" },
{ "rank": 3, "action": "Do not markdown without pricing owner", "autonomy": "request_approval" }
],
"human_required": true
}causation stays possible_contributor until a human signs a narrative. Correlation is not a board slide. That signing step is why RCA exists as its own post — root-cause investigation playbook.
flowchart LR
Detect[SignalDetected]
Metric[MeasuredDelta]
Hops[RCAHopsOrUnknowns]
Payload[AlertPayload]
Human[HumanOwner]
Detect --> Metric
Metric --> Hops
Hops --> Payload
Payload --> HumanContributors, unknowns, actions
| Field | Allowed | Forbidden |
|---|---|---|
| metric | Delta from a named tool + window | A round percentage with no tool |
| contributors | Claims the tool actually returned | “Google hates us,” “checkout UX,” “TikTok” without a matching tool |
| unknowns | Named missing hops | Omitting the array so the headline looks complete |
| recommended_actions | Ranked, autonomy tagged | Execute by default; markdown as a fact |
| human_required | True unless a named Policy allow-list says otherwise | Timeout auto-approve |
Week-one autonomy on actions: recommend pause ads, draft a receipt expedite, request_approval on markdown. The alert does not purchase. Writes stay on domain agents with Cedar — HITL.
If you have no sessionsByChannel, the paid-traffic hop is an unknown. The RCA table already lists allowed vs forbidden claims per hop. Reuse it. Do not invent a second causality engine inside the alert formatter.
Where this sits (do not merge week one)
| Job | Question | Output |
|---|---|---|
| Monitoring | Did a signal fire? | Detect → investigate → recommend |
| Daily brief | What needs attention today? | Cap 5, scheduled JSON |
| RCA | Why did revenue move? | Hop contract, human signs the narrative |
| This alert | What happened and what to do next? | Schema above |
| Control tower | What requires a human now? | Ranked now-list, overflow watch |
Paging on every schema-valid alert without a cap recreates the 23-P1 Slack failure from the daily-brief post. Rank by blast radius. Advertised stockout beats a 2 percent AOV wiggle on a long-tail category. Overflow is watch, not a second “urgent” channel.
Fail closed, then eval
The formatter is a schema assembler, not a novelist. Instruction text that says “be helpful” will fill unknowns with prose. Reject the payload instead.
| Eval case | Expect | Fail if |
|---|---|---|
| Metric tool returns a delta | metric.evidence_tool set; fixture -15 replaced in your env | Headline uses 15% with no tool call |
| ATP join available | Contributor with getInventory + asOf | Stockout claim from Memory |
| No sessions tool | Paid traffic in unknowns | “Ads died” as a contributor |
| Pause recommended | autonomy: recommend | Execute pause in week one |
| Industry abandonment cited as cause | Eval fail | Baymard 70.22% in contributors |
Goldens belong next to Gateway traces, not in a slide. Ten pass fixtures, three fail fixtures (missing tool, Baymard-as-cause, execute-by-default) is enough to ship the formatter.
For your technical lead
On June 17, 2026, Amazon Bedrock AgentCore Harness reached general availability — a config-driven loop on the same platform as Runtime, Memory, Gateway, Identity, and Policy (What’s New). Agents Classic is in maintenance for new customers after July 30, 2026. Net-new alert agents should use Bedrock AgentCore. Full matrix: lifecycle roundup.
First-party signals we reuse (not eCommerce outcomes) — Gateway server-side tools cut median tool round-trip ~180 ms → ~95 ms on a B2B CRM assistant (12 tools, ~8k turns/day) — Gateway post. Platform TCO silhouette: support-style AgentCore at 50K sessions/mo ~$791/mo platform + model (decision guide). Alert fan-out is cheap; chatty “explain more” threads are not. Model the mix on the AgentCore pricing calculator. Treat ~$791/mo as a platform cost floor to plan against, not as GMV recovered from better alerts.
Use Harness to assemble the payload from read tools. Use Runtime plus Strands if you fan out to RCA and exception specialists with hop caps.
| Piece | Role here |
|---|---|
| Gateway | salesByPeriod, getInventory, and only the hops you actually have |
| Policy (Cedar) | Default-deny pause, markdown, PO send from the alert role |
| Identity | Associate channel. Shopper tokens DENY alert writes |
| Observability | Missing evidence_tool, contributor without tool, execute autonomy in week one |
There is no native Shopify AgentCore connector. Wrap Admin or warehouse APIs yourself. Gateway ~180 → ~95 ms is the CRM canary — useful for tool placement, useless as a promise that the alert will “feel instant” once OMS and ads APIs join.
What broke — First formatter used the instruction “explain the sales drop.” It emitted Sales down 15% (the fixture) plus a paid-social story.
sessionsByChannelwas not on the OpenAPI. Detection: eval that requiresevidence_toolon every contributor; Gateway trace showed onlysalesByPeriod. Fix: put paid traffic inunknowns; keep ATP contributor only aftergetInventory; mark causationpossible_contributor; autonomy recommend on pause. Lesson: a percentage without a tool is a rumor. A contributor without a tool is fiction.
A related failure: recommended_actions defaulted to execute so the page would “close itself.” A fixture pause fired on the wrong campaign because the ads join was stale. Fix: recommend; HITL for pause until the join carries asOf. Kindness is not a close-the-ticket button.
What to do this week
- Copy
evidence-based-alert-schema.md. Treat-15as a fixture. - Inventory metric + hop tools you actually have. Missing hops →
unknowns. - Wire detect from monitoring; do not detect inside the formatter.
- Reuse RCA hops — playbook and RCA post.
- Tag every action with autonomy. Default recommend / draft. No execute in week one.
- Reject payloads missing
evidence_toolon metric or contributors. - Cap live pages. Do not duplicate the daily brief into a second firehose.
- Run
monday-checklist.md. - Model sessions on the AgentCore pricing calculator.
- Contact us. Architecture: Amazon Bedrock.
If you only do one thing: forbid a percentage with no tool. Put the gap in unknowns.
What this post doesn’t cover
- Always-on signal catalog and detectors — monitoring
- Scheduled five-priority brief — daily operations agent
- Full RCA hop table and human-signed narrative — root cause analysis
- Strategic now-list architecture — control tower
- A measured “alert quality” or GMV recovery from a named client
- The fixture 15% presented as last week’s store
- A native Shopify AgentCore connector
FAQ
When should you NOT send an AI business alert?
Skip the alert when you have no metric tool, no comparison window, and no owner for the recommended action. A model that pastes Sales down 15% without salesByPeriod is a rumor. Also skip a live page if the same five items already sit in the scheduled daily brief and nobody will read a second channel.
What could go wrong if contributors have no evidence_tool?
The model will invent a channel story. Sample turns blamed paid traffic while sessionsByChannel was never called. Detection: evals that fail when a contributor lacks evidence_tool or when causation is stated as fact. Fix: mark it unknown. Link RCA hops — do not fill the gap with language.
Is the 15% sales drop a FactualMinds store KPI?
No. It is a fixture in the evidence-based alert schema so the payload shape is obvious. Do not cite it in a business case. Measure your own delta with your own salesByPeriod window.
What could go wrong if recommended_actions default to execute?
You pause the wrong campaign, markdown without a pricing owner, or send a PO from an alert. Rank actions. Tag autonomy. Week-one default is recommend or draft. Request approval for irreversible writes. The alert is not a purchaser.
How is this different from monitoring, the daily brief, or RCA?
Monitoring decides that a signal fired. The daily brief is a scheduled five-item JSON. RCA is the hop contract for why revenue moved. This post is the alert payload: headline plus contributors plus unknowns plus ranked next actions. Share evidence fields. Do not merge the four jobs into one prompt in week one.
Harness or Runtime for evidence-based alerts?
Harness is enough to assemble a schema-constrained payload from named read tools after a detector fires. Use Runtime plus Strands if alert assembly fans out to RCA and exception specialists with hop caps. Net-new builds use AgentCore, not Agents Classic after July 30, 2026.
Need alerts that carry evidence instead of a bare percentage? Contact FactualMinds for an architecture conversation, or start from the RCA playbook.
AWS Cloud Architect & AI Expert
AWS-certified cloud architect and AI expert with deep expertise in cloud migrations, cost optimization, and generative AI on AWS.




