Ad-creative-strategy synthesises every live creative's performance into a single weekly Strategy Brief, posted each Sunday to Asel's Slack direct message. It answers four questions: what mode is the account in, how should production capacity split between new concepts and iteration of winners, which iteration path should each winning creative get next, and whether anything is close to burning out. It is the last automated step in the weekly Sunday job — Sales extract → Ad-Autopsy → Voice Book calibration → Strategy Brief → Slack. The brief ends with a pre-filled /ad-context parameter block that Asel pastes into the next session to start iteration mode. The system does the data work and the scoring. Asel approves every action.
All calls go through OpenRouter and are logged with model + cost to agent_run. Counting and arithmetic are always plain code.
The post-sweep skill source (2026-06-10) and the framework doc (v2.0, 2026-04-11) disagree on two routing rows. The skill source is authoritative — it is post-sweep and explicitly declares itself "the operational spec the skill follows." The framework doc's conflicting entries are flagged here for operator decision. (a) Loop 1 divergence narrative: skill source routes to Sonnet 4.6; framework doc routes to Opus 4.8. The table below follows the skill source. (b) Non-Anthropic and extra-model rows in framework doc only: Haiku 4.5 (ingest) and GPT-5.5 (A/B hypothesis variation) appear in the framework doc but are absent from the post-sweep skill source. They may have been intentionally dropped. Operator decides whether to add them back.
| Task | Model | Why |
|---|---|---|
| Staleness check, hit-rate arithmetic, threshold lookups, state classification, path-score arithmetic (Steps 1–6, 8) — everything that involves counting creatives, comparing costs to thresholds, or running the final_score formula | Plain code — no language model | Deterministic-first rule. Classification, counting, and arithmetic are pure logic. A language model adds hallucination risk and latency and cannot improve on deterministic enumeration. Model reasoning only ever runs over a pre-digested, bounded shortlist — never over raw data. |
| Loop 1 divergence narrative — explaining why a path's predicted rank vs. actual rank diverged (runs monthly, Step 7) | claude-sonnet-4-6 (Sonnet 4.6) via OpenRouter | Bounded synthesis over a small result set: four paths, two rank lists, and a divergence delta. Mid-tier job. Opus 4.8 is overkill for a 4-row comparison where the input is fully structured. |
| Weekly brief synthesis — "Why" lines per Performing creative, vs-last-week narrative, checking loop, strategic framing | claude-opus-4-8 (Opus 4.8) via OpenRouter | The brief is the highest-consequence output in this skill. Wrong reasoning drives the wrong production allocation for the entire next batch. Full reasoning capacity required. Every call is logged to agent_run with model ID, provider, and cost. |
| Quarterly or major-pivot synthesis — cross-batch pattern analysis spanning 3+ weeks, or first brief for a new expert with no prior portfolio data | claude-fable-5 (Fable 5) via OpenRouter — operator opt-in only | Ceiling one-shot jobs only. Costs 2× Opus 4.8. Carries a mandatory 30-day data-retention obligation and requires customer personally identifiable information sign-off before any identifiable lead or customer data is included. These caveats must be stated in the run log before every Fable 5 invocation. Default is Opus 4.8. |
What goes in, and what comes out. Weekly brief mode and sales-side check mode have different input sets — they are listed separately.
Weekly brief mode (default — cron-triggered Sunday night)
| Input | What it is |
|---|---|
live_performance view (Supabase Layer 4) | The always-fresh Supabase view of every creative in the expert's paid Meta ad account. Hermes agents keep this current via the daily Meta and Hyros sync into Fibery, which Curator-Hermes then mirrors into Supabase. The skill reads this view exclusively — never Fibery directly. Key fields: fibery_creative_id, creative_name, spend, cost_per_booked_call (CPBC — cost per booked call), cost_per_lead (CPL — cost per lead), hook_rate, status (performing / underperforming / fatiguing / paused / winning), last_synced_at. If any row is older than 36 hours the run halts — stale data produces wrong recommendations. |
expert_config row (Supabase Layer 6) | Configuration for the active expert: target_cpbc (maximum acceptable cost per booked call), playgate_lead_cost (average cost of a Playgate opt-in lead), pca_booked_call (the direct Platform Cost Acquisition — cost to acquire a booked call), lead_to_call_rate (the expert's actual ratio of leads who book a call), and strategy.daily_spend_gbp (rolling 7-day average daily spend, used to select dynamic path-scoring weights). If any of these are null the run halts immediately with a config-null error. |
Prior brief archive (logs/strategy-briefs/<expert>/) | The most recent two YYYY-WW.md brief files. Read at Step 0b to extract prior mode, top recommendation, allocation split, and Performing creatives. Used to produce the vs-last-week section. If no prior brief exists (first run), the skill notes "First run — no prior context" and continues. |
| Launch learnings (Supabase Layer 5, upstream feed) | Written by Ad-Autopsy (the step immediately before this one in the Sunday job). The strategy skill does not read launch_learnings rows directly in weekly mode — they are consumed by Ad-Autopsy and affect the classifier in /ad-context downstream. Represented here as the upstream context this brief is always produced against. |
Four columns are referenced in the skill spec but do not yet exist in the live_performance view. Until they are added, the affected steps run in degraded mode using brief-archive approximations. (1) source_path: required for Loop 1 path-scoring validation — Loop 1 outputs a blocked notice until this column is added. (2) format_style: required for Mode 3 gate classification (validated styles count) — inferred from creative_name prefix if naming conventions allow, otherwise Mode 3 gate is blocked. (3) cumulative_booked_calls: required for Loop 2 / Tier 3 eligibility — approximated from brief-archive history until added. (4) 7-day window columns (cpbc_last_7d, cpl_last_7d, cpbc_baseline_7d_prior): required for the Fatiguing and Stopped Performing state classifications — approximated from prior brief comparison until added.
Sales-side check mode (operator-triggered only)
| Input | What it is |
|---|---|
| Expert key + optional creative name | CLI argument. Defaults to all creatives for the expert with 15 or more booked calls. |
| Hyros leads with creative attribution | Pulled directly from the Hyros API in this mode. Matched by firstSource.sourceLinkAd.name (the Meta ad name as Hyros records it at first touch). Email and lead timestamp are extracted per creative. Matching is case-insensitive: both sides lowercased and whitespace-trimmed before comparison. |
| Airtable closed-deal records | Pulled directly from the Airtable sales pipeline base. Joined to Hyros leads by email address within a 60-day window of the lead's first-touch timestamp. Stage = Closed is the close criterion. |
Expert config (orchestration/config/<expert>.json) | Provides strategy.loops.loop2_call_threshold (default 15 booked calls for Tier 3 eligibility) and strategy.loops.loop2_action_band_pct (default ±5 percentage points for LEAN IN / STOP ITERATING / WITHIN BAND classification). |
D08FFCKD1FB · archived at logs/strategy-briefs/<expert>/<YYYY-WW>.mdThe brief is assembled in this order. Every field is required unless marked optional.
| Field | What it means |
|---|---|
| header | Expert name, operating mode (Mode 1 / 2 / 3 with full label), week (ISO date). First line of the brief. |
| four hit rates | Portfolio Hit Rate T1 (outcome-producing creatives at or below target CPL divided by all creatives launched, including those Meta stifled) · Tested Hit Rate T1 (same numerator divided by only those creatives past 5× Playgate lead cost) · Portfolio Hit Rate T2 (outcome-producing at or below target CPBC divided by all creatives launched) · Tested Hit Rate T2 (same numerator divided by those past 2× PCA booked call). If fewer than 10 creatives are past either threshold, that metric shows "insufficient data" rather than a misleading number. |
| operating mode + missing gate | Mode 1 (Testing — no confirmed converters), Mode 2 (Converting, no composites — winners exist but fewer than 2 distinct validated styles in footage library), or Mode 3 (Composites unlocked — Gate 1: 2+ validated styles with confirmed winners; Gate 2: 3+ Performing creatives with reliable hook rate and CPBC data, where reliable means ≥5,000 impressions per creative). If Mode 3 is not unlocked, state which gate is missing. |
| vs. last week | Mode change (same / escalated / de-escalated and why) · new Performing creatives since last brief · creatives that were Performing last week but are no longer (and why: fatigue / META-STIFLED / spend threshold dropped) · whether last week's top recommendation was actioned (inferred from brief-archive front-matter source_path field, since the source_path column in live_performance is currently blocked). First run shows "First run — no prior context." |
| production allocation split | Percentage of next batch to allocate to new concepts vs. iteration of winners. Derived deterministically from Portfolio Hit Rate T2: under 15% → 75–80% new / 20–25% iteration; 15–33% → 50–60% / 40–50%; 33–50% → 40–50% / 50–60%; 50%+ → 30% / 70%. |
| per-Performing creative ranked iteration paths | For each Performing creative: top recommendation (path name, score to one decimal, one-line "Why" from Opus 4.8, Confidence badge — Theoretical / Provisional / Validated, Gateway flag if Refilm in Mode 2) · alternatives ranked 2nd and 3rd by score. Scores use the dynamic weight formula: final_score = (EC × w_ec) + (YPU × w_ypu) + (STS × w_sts) with weights selected by rolling 7-day average daily spend tier (under £1k/day / £1k–£3k/day / over £3k/day). |
| Loop 1 status | Monthly only (first Monday brief of each calendar month). When source_path column is available: per-path Tested Hit Rate T2 vs. predicted rank; divergence flag if any path is 2+ positions off for 2 consecutive months. Until that column is added: "Loop 1 blocked — source_path column not yet in live_performance view." |
| Loop 2 / Tier 3 eligibility list | Any creative with 15+ cumulative booked calls (approximated from brief-archive until cumulative_booked_calls column is added). Surfaces the list and prompts /ad-creative-strategy <expert> --tier3. Does not run the sales-side check automatically — operator-triggered. |
pre-filled /ad-context parameter block | A copy-paste code block for Asel to paste into the next Claude Code session. Contains expert key, mode (always iteration in this context), top recommendation (creative name, path, one-line reasoning), batch size derived from the allocation split, and the 30-day context window. This is what makes the brief actionable — no re-derivation needed. |
D08FFCKD1FB · appended to logs/strategy-briefs/<expert>/loop2-tier3-history.jsonl| Field | What it means |
|---|---|
| creative | Name of the creative being evaluated. |
| calls | Total cumulative booked calls attributed to this creative via Hyros firstSource first-touch matching. |
| closes | Closed deals in Airtable where the stage is "Closed" and the close timestamp falls within 60 days of the Hyros lead's first-touch timestamp, joined by email address. |
| close % | closes / calls as a percentage for this creative. |
| account avg | Total closes ÷ total calls across all creatives in the 60-day window. The baseline every creative is compared against. |
| delta (pp) | Percentage-point difference: (close % − account avg) × 100. Positive means this creative's audience closes above average. |
| action | LEAN IN if delta ≥ +5pp · STOP ITERATING if delta ≤ −5pp · WITHIN BAND if between −5 and +5pp. Threshold is configurable via expert_config.strategy.loops.loop2_action_band_pct. A notes block below the table defines each label so the operator does not need to remember them. |
agent_run table · one row per run, stamped on every log write as created_by_run_id| Field | What it means |
|---|---|
| agent_name | ad-creative-strategy for weekly mode; ad-creative-strategy-tier3 for sales-side check mode. |
| triggered_by | cron for Sunday automated runs; operator for manual invocations. |
| expert_namespace | Which expert this run is for — e.g. ida for Amelia Fenmore. Each expert gets a separate agent_run row, even in --all mode. |
| status | Set to running at open. Updated to success, partial, or halted at close. halted is used for config-null errors, stale data, Supabase unreachable, or no eligible creatives. Never silently swallow infrastructure failures. |
| status_detail | Human-readable explanation for any non-success status. Also records: which operating mode was detected; whether Fable 5 was considered and not used (with justification); any Loop 1 blocked notices. |
[Phase 6 Strategy Brief] IDA — Amelia Fenmore | Week of 2026-W23
EXPERT: ida (Amelia Fenmore — interior design business coach)
MODE: 2 · Converting, no composites (Mode 3 gate blocked — only one validated style in footage library)
WEEK: 2026-06-08
━━━ HIT RATES (last 30 days) ━━━
Portfolio Hit Rate T1 (CPL at or below target / all creatives): 57% (17 of 30)
Tested Hit Rate T1 (CPL at or below target / past spend gate): 68% (13 of 19)
Portfolio Hit Rate T2 (CPBC at or below target / all creatives): 53% (16 of 30)
Tested Hit Rate T2 (CPBC at or below target / past spend gate): 74% (14 of 19)
11 creatives stifled by Meta before reaching spend threshold. Excluded from Tested, counted in Portfolio.
━━━ OPERATING MODE ━━━
Mode 2 · Converting, no composites.
Gate 1 (2+ validated styles with confirmed winners): BLOCKED.
Currently: 1 validated style in footage library (Selfie/DTC).
Action: Refilm in a second style (Studio DTC, Podcast format, or Street Interview) to unlock Gate 1.
Refilm is flagged GATEWAY on every Performing creative below — its standalone score understates
its value because each new validated style benefits all future winners.
Gate 2 (3+ Performing creatives with ≥5,000 impressions on hook_rate): not evaluated (Gate 1 blocked).
Composite Edit is NOT available until Mode 3 unlocks.
━━━ VS. LAST WEEK ━━━
Mode: same (Mode 2 both weeks)
New Performing: CREDENTIALS/no-degree added to Performing list (CPL $8, now past 2× PCA booked call gate)
Dropped Performing: none
Last week's top rec: Skillshow Transposition on ESCAPE/accountant — not yet actioned (no new creative with
source_path = Skillshow in brief archive). No action required — noting for continuity.
━━━ PRODUCTION ALLOCATION ━━━
Portfolio Hit Rate T2: 53% → allocation band: 50%+
→ 30% new concepts | 70% iteration of winners
━━━ ITERATION PATHS — PER PERFORMING CREATIVE ━━━
Daily spend: £450/day (rolling 7-day avg) → weight tier: under £1k
Weights: EC 0.45 · YPU 0.30 · STS 0.25
──────────────────────────────────────────────────────
CREDENTIALS/no-degree (CPL $8, CPBC on target, status: performing)
──────────────────────────────────────────────────────
1. SKILLSHOW TRANSPOSITION (score: 8.30) ← TOP RECOMMENDATION
Why: Identity callout angle (no-degree) is a mechanism/credentials frame — Skillshow is the natural
multiplier. Visual composition changes guarantee a new Andromeda Entity ID at low spend.
Confidence: Theoretical
Gateway: no
2. AI Hook Injection (score: 8.00)
Why: New face plus new environment likely generates a new Entity ID. Kling workflow is provisional —
show score but tag provisional until validated at scale.
Confidence: Theoretical (provisional — Kling unvalidated)
3. Refilm — Different Style (score: 6.70)
Why: Lower standalone score but carries the GATEWAY flag. Refilming in a second format (e.g. Studio DTC)
unlocks Mode 3 and Composite Edit for every future winner — not just this one.
Confidence: Theoretical
Gateway: YES ← adds Mode 3 access
──────────────────────────────────────────────────────
ESCAPE/accountant (CPL trending below target, CPBC tracking toward threshold, status: performing)
──────────────────────────────────────────────────────
1. SKILLSHOW TRANSPOSITION (score: 8.30) ← TOP RECOMMENDATION
Why: Vulnerability/confession angle (accountant career escape) is a mechanism-adjacent frame.
Skillshow is the strongest multiplier for confession-led identity hooks.
Confidence: Theoretical
Gateway: no
2. AI Hook Injection (score: 8.00)
Why: Same reasoning as above — new face/environment at under £1k/day.
Confidence: Theoretical (provisional — Kling unvalidated)
3. Refilm — Different Style (score: 6.70)
Why: GATEWAY flag applies here too. Refilm on either Performing creative triggers Mode 3.
Gateway: YES
━━━ LOOP 1 — PATH SCORING VALIDATION ━━━
STATUS: Blocked. source_path column not yet in live_performance view.
Loop 1 requires source_path (Composite | Skillshow | AI-Hook | Refilm) per creative row in Supabase.
Until that column is added, per-path hit rate cannot be computed. Predicted rank is:
Composite > Skillshow > AI-Hook > Refilm (Composite blocked in Mode 2)
━━━ LOOP 2 — TIER 3 ELIGIBILITY ━━━
No creatives have reached 15+ booked calls yet. (cumulative_booked_calls column pending — approximated
from brief archive.) Nothing eligible for the sales-side close-rate check.
━━━ NEXT STEP — PASTE INTO /ad-context ━━━
/ad-context
expert: ida
mode: iteration
top_recommendation:
creative: CREDENTIALS/no-degree
path: Skillshow
reasoning: Identity-callout / credentials angle — highest EC prior for Skillshow at under £1k spend.
batch_size: 7 # 30% new (2 concepts) + 70% iteration (5 iterations) from current window
allocation_split:
new_concepts: 30%
iteration: 70%
context_window: 30 days/ad-context block at the bottom is the handoff: Asel reads, decides, and pastes. No re-derivation needed.Every abbreviation spelled out. Every term grounded in how it is used in this skill.
| Term | In full / what it means |
|---|---|
| CPBC | Cost Per Booked Call — How much total ad spend it took to get one person to book a sales call with the expert. The primary success metric for cold traffic in the IDA account. Target threshold lives in expert_config.target_cpbc. A creative at or below target CPBC is a Tier 2 converter; above target is an underperformer. |
| CPL | Cost Per Lead — How much total ad spend it took to get one person to opt in to the free Playgate training (the intermediate step before a booked call). Used as an early signal before enough data exists for a CPBC judgment. Target CPL is calculated as target_cpbc × lead_to_call_rate from expert config — it is grounded in the expert's own funnel, not an industry benchmark. |
| Hit rate | Hit Rate — The fraction of launched creatives that produce an outcome (lead or booked call) at or below the target cost. Two versions: Portfolio Hit Rate includes all creatives launched, even those Meta stifled before reaching the spend threshold — this is the production planning number. Tested Hit Rate counts only creatives past the spend threshold — this is the creative-quality judgment number. They often diverge significantly. |
| Path scoring | Path scoring — The system's method for ranking the four iteration paths (Composite Edit, Skillshow Transposition, AI Hook Injection, Refilm) for each Performing creative. Each path is scored on three axes — EC Prior, YPU (yield per production unit — how many testable entities the path produces per unit of effort), and STS (speed to ship — how fast the path produces a new live creative). Axis weights shift by daily spend tier because the bottleneck changes: at low spend, Entity ID separation matters most; at high spend, fatigue speed dominates. The formula is final_score = (EC × w_ec) + (YPU × w_ypu) + (STS × w_sts). |
| EC Prior | Entity Conditioning Prior — A first-principles estimate of how likely a given iteration path is to generate a new, distinct Andromeda Entity ID in Meta's ad delivery system. It is a prior (a starting belief), not a measurement. Every EC value starts as Theoretical (no live data). It moves to Provisional (some data, not yet conclusive) and then Validated (10+ iterations on this path AND per-path Tested Hit Rate T2 within 1 position of predicted rank for 2 consecutive months). At rollout, all four paths are Theoretical. |
| Entity ID | Andromeda Entity ID — Meta's internal identifier for a creative asset in its Andromeda delivery system. When an ad runs long enough, Meta's algorithm learns which audiences to show it to; over time it fatigues in that learned audience pool. A new Entity ID resets that pool. The entire iteration path scoring system exists to answer one question: which path most reliably generates a new Entity ID from a winning concept, without starting from scratch. |
| Fatigue | Creative fatigue — The performance degradation that occurs when Meta's delivery algorithm has exhausted the most responsive subset of a target audience for a given creative Entity ID. Measured as a baseline-relative trigger: CPBC or CPL in the most recent 7-day window trending 1.5× or more above the prior 7-day baseline (pending cpbc_last_7d and cpbc_baseline_7d_prior view columns — approximated until those columns are added). CPBC is always the arbiter of fatigue, not hook rate. The instant fatigue alert is handled by the separate ad-fatigue-monitor skill; the strategy brief lists fatiguing creatives in its ranked output. |
| Operating modes | Account operating modes (Mode 1 / 2 / 3): Mode 1 (Testing) — no confirmed converters; 100% of production goes to new concepts. Mode 2 (Converting, no composites) — winners exist but only one validated filmed style in the footage library; Composite Edit is not available. Mode 3 (Composites unlocked) — Gate 1 (2+ validated styles with confirmed winners) AND Gate 2 (3+ Performing creatives with ≥5,000 impression sample on hook rate) are both met; all four iteration paths are available. Modes are filming milestones, not spend milestones. Note: "Pioneer" and "Iteration" refer to the downstream /ad-context modes this brief feeds into — Pioneer is used for new-expert or fresh-niche runs with no own performance data; Iteration is the default once winners exist. The strategy brief always emits mode: iteration in its pre-filled parameter block. |
| Baseline-relative trigger | Baseline-relative trigger — The correct way to detect fatigue or hook failure: compare a creative's recent metric (e.g. CPBC over the last 7 days) to that same creative's own prior-period baseline, not to an absolute industry number. The framework explicitly falsifies the hook-rate-as-absolute-threshold rule: IDA's best-performing ad had a hook rate of 7.75%, which produced a CPL of $8; the two ads with the highest hook rates in the portfolio were both conversion duds. Hook rate is a delivery diagnostic, not a quality predictor. CPBC is the arbiter. |
| YPU | Yield Per Production Unit — One of the three path-scoring axes. Measures how many testable creative entities a given iteration path generates per unit of production effort. Composite Edit scores 9 (one edit session produces multiple entity variants); Refilm scores 4 (requires a full new filming session). |
| STS | Speed To Ship — One of the three path-scoring axes. Measures how quickly a given iteration path moves from decision to a live ad. AI Hook Injection and Composite Edit score 8–9 (fast, no filming required); Refilm scores 4 (requires booking and shooting a new session). |
| IDA | Interior Design Academy — The expert identity for Amelia Fenmore, an interior-design business coach. IDA cold Meta ads drive traffic to a free Playgate training, which converts to booked sales calls. The expert namespace for all IDA Supabase rows is ida. Queries for IDA read IN ('ida','shared'); the IDA-specific row wins ties. |
| Voice Book | Expert Voice Book — The structured artifact that captures an expert's voice, signature phrases, delivery patterns, and on-brand language. Built by the ad-voice-profile skill. The "Voice Book calibration" step in the Sunday job ensures this artifact is current before the strategy brief runs. The old label "Layer 3 calibration" or "L3 calibration" is deprecated — never use it. |
| Playgate | Playgate — The funnel architecture used in IDA ads. An opt-in lead registers for a free training (Playgate lead); a subset then books a sales call. The lead cost (Playgate lead cost) and the lead-to-call rate together determine the target CPL from the target CPBC. |
| PCA | Platform Cost of Acquisition — The cost recorded by Meta (via the Hyros tracking layer) to acquire a booked call. Used as the spend-gate threshold for Tier 2 creative classification: a creative must have spent at least 2× PCA of a booked call before it is included in the Tested Hit Rate T2 denominator. |
| PII | Personally Identifiable Information — Any data that can identify a specific individual — names, email addresses, phone numbers, call recordings with customer details. Relevant to Fable 5 invocations (which carry a 30-day data-retention obligation) and to the sales-side check mode (which handles individual Hyros lead emails). PII must never be included in a Fable 5 call without explicit operator sign-off. |
| HITL | Human In The Loop — The system principle that no action in the creative pipeline is taken autonomously. The strategy skill flags, scores, and recommends. Asel reviews and approves. Auto-tuning weights, priors, or thresholds is explicitly out of scope. |
| Hermes | Hermes (autonomous agent layer) — The always-on background agent system. Curator-Hermes mirrors Fibery performance data into the Supabase live_performance view after each daily Meta and Hyros sync. Sales-Hermes handles the Sunday-job Sales extract. The strategy skill reads from Supabase views that Hermes keeps current — it does not trigger scrapes itself. |
| Supabase | Supabase (database platform) — The PostgreSQL-based system-of-record database for all seven data layers in the ad creative system. The strategy skill reads from live_performance and expert_config views and writes to agent_run. Runtime reads are always Supabase views — never Fibery, Google Drive, or repo files. |
| Fibery | Fibery (project management and creative entity record) — The system of record for all creative entities, their production status, and their Meta performance data. Hermes agents sync Fibery into the Supabase live_performance view. The strategy skill never queries Fibery directly at runtime. |
| OpenRouter | OpenRouter (model routing proxy) — The API gateway through which all language model calls in this system are routed. Provides unified billing, model switching, and per-call logs (model ID, provider, cost) that feed into the agent_run audit record. |