Lifesight Anomaly Watch
Tell the user what actually moved and what to do about it — separating real,
actionable shifts from noise. The value is the triage, not the list. A dump of
every wobble is worse than useless; the job is to say "act on these two, ignore the
rest, here's why."
Prerequisites (router handles): workspace calibrated, profile loaded. Operate
under lifesight-core; present under lifesight-rendering. Load both.
The core judgment: act vs noise
Every flagged movement gets a tag. A movement is act-worthy only if it is BOTH:
- Statistically real — beyond normal variance (e.g. >2σ), not a one-day blip.
- Causally material — it reflects a real efficiency/outcome shift, not a
platform-reporting artifact, a known seasonal pattern, or a change the user already
made (a campaign launch, a budget change). If it's explainable, it's context, not an alarm.
Everything else is noise — name it as noise so the user can stop worrying about it.
Flow
- Scope the window and surface. Default to the period the user names ("last
week") or the most recent complete week. Don't scan "everything, all time".
- One heavy call. Pull the movement analysis via
ask_mia (it summarizes). If
you need a specific metric series, a single scoped query_ad_data is fine — never
a broad dump (lifesight-core Rule 3).
- Classify and rank. Tag each anomaly act/noise; rank the act items by causal
materiality (impact on incremental revenue/efficiency), not by raw % change.
Judgment checks (mandatory)
- Significance before size. A big % swing on a tiny-spend channel rarely matters;
a small shift on a major channel can. Rank by impact, not drama.
- Platform vs causal. A platform-reported ROAS dip may be measurement noise, not a
real outcome change. Flag which basis the movement is on.
- Explainable ≠ anomaly. Seasonality, a known launch, or a deliberate budget
change is context — present it as the explanation, don't raise it as an alarm.
- Every "act" needs an action. Don't just flag — say what to do (cut, scale,
investigate, run a test), and route to the right next skill.
Output shape
Lead with the single most material item, then the rest, tight:
Act on (2):
- TikTok Prospecting — efficiency down 18% wk/wk (causal). Past its saturation
knee; trim ~15% and watch. → channel-deep-dive
- Influencers — incremental revenue +31%. Real, under-saturated; room to scale.
Noise / explained (3): Linear TV dip = known flight gap · Pinterest swing within
normal variance · Google Branded up = brand campaign you launched Tuesday.
Clean channel names, signed/formatted numbers, causal language throughout.
Next steps to offer
"Deep-dive the channel that moved" (→ channel-deep-dive) · "Re-optimize given these
shifts" (→ budget-optimization) · "Set this up as a recurring check".
Red flags — STOP
- Listing every movement without an act/noise tag → triage, don't dump
- Ranking by raw % change instead of causal impact
- Raising a known/seasonal change as an alarm → it's context
- Treating a platform-reported wobble as a real outcome shift → name the basis
- A scan with no recommended action on the "act" items
1---2name: lifesight-anomaly-watch3description: Use when the user wants to find what changed, broke, spiked, or dipped in their marketing recently — "what moved last week", "what should I act on", "anything weird in the data", "what's up/down", "what moved more than 2 standard deviations", "surface opportunities", "what needs my attention". Produces a ranked, act-vs-noise triage of anomalies with a recommended action for each. Routed to from the `lifesight` router after the workspace is calibrated.4---56# Lifesight Anomaly Watch78Tell the user what actually moved and what to do about it — separating real,9actionable shifts from noise. **The value is the triage, not the list.** A dump of10every wobble is worse than useless; the job is to say "act on these two, ignore the11rest, here's why."1213**Prerequisites (router handles):** workspace calibrated, profile loaded. Operate14under `lifesight-core`; present under `lifesight-rendering`. Load both.1516## The core judgment: act vs noise1718Every flagged movement gets a tag. A movement is **act**-worthy only if it is BOTH:19- **Statistically real** — beyond normal variance (e.g. >2σ), not a one-day blip.20- **Causally material** — it reflects a real efficiency/outcome shift, not a21 platform-reporting artifact, a known seasonal pattern, or a change the user already22 made (a campaign launch, a budget change). If it's explainable, it's context, not an alarm.2324Everything else is **noise** — name it as noise so the user can stop worrying about it.2526## Flow27281. **Scope the window and surface.** Default to the period the user names ("last29 week") or the most recent complete week. Don't scan "everything, all time".302. **One heavy call.** Pull the movement analysis via `ask_mia` (it summarizes). If31 you need a specific metric series, a single scoped `query_ad_data` is fine — never32 a broad dump (`lifesight-core` Rule 3).333. **Classify and rank.** Tag each anomaly act/noise; rank the act items by causal34 materiality (impact on incremental revenue/efficiency), not by raw % change.3536## Judgment checks (mandatory)3738- **Significance before size.** A big % swing on a tiny-spend channel rarely matters;39 a small shift on a major channel can. Rank by impact, not drama.40- **Platform vs causal.** A platform-reported ROAS dip may be measurement noise, not a41 real outcome change. Flag which basis the movement is on.42- **Explainable ≠ anomaly.** Seasonality, a known launch, or a deliberate budget43 change is context — present it as the explanation, don't raise it as an alarm.44- **Every "act" needs an action.** Don't just flag — say what to do (cut, scale,45 investigate, run a test), and route to the right next skill.4647## Output shape4849Lead with the single most material item, then the rest, tight:5051> **Act on (2):**52> - **TikTok Prospecting — efficiency down 18% wk/wk (causal).** Past its saturation53> knee; trim ~15% and watch. → channel-deep-dive54> - **Influencers — incremental revenue +31%.** Real, under-saturated; room to scale.55>56> **Noise / explained (3):** Linear TV dip = known flight gap · Pinterest swing within57> normal variance · Google Branded up = brand campaign you launched Tuesday.5859Clean channel names, signed/formatted numbers, causal language throughout.6061## Next steps to offer6263"Deep-dive the channel that moved" (→ channel-deep-dive) · "Re-optimize given these64shifts" (→ budget-optimization) · "Set this up as a recurring check".6566## Red flags — STOP6768- Listing every movement without an act/noise tag → triage, don't dump69- Ranking by raw % change instead of causal impact70- Raising a known/seasonal change as an alarm → it's context71- Treating a platform-reported wobble as a real outcome shift → name the basis72- A scan with no recommended action on the "act" items