From FORSVN
Scores launched paid ads (Meta, Google, TikTok, LinkedIn) from real metrics per network in an existing eval loop.
How this skill is triggered — by the user, by Claude, or both
Slash command
/forsvn:evaluate-ad [loop slug or path] [network: meta|google-ads|tiktok-ads|linkedin-ads] [metric window][loop slug or path] [network: meta|google-ads|tiktok-ads|linkedin-ads] [metric window]This skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
<!-- BUDGET_EXCEPTION: Eval skills carry artifact-schema-as-contract (8 body sections + 8-col results row + cross-stack consumer contract) that is load-bearing and cannot move to references/. Cycle ledger discipline requires the schema be visible in the SKILL.md body. Ad-eval also surfaces the audience-temp scoping rule (one cycle = one audience-temp) and creative-fatigue signal columns. ~300 t...
agents/critic-agent.mdagents/diagnosis-agent.mdagents/metric-ingest-agent.mdagents/recommendation-agent.mdreferences/_shared/ad-intelligence/creative-cadence.mdreferences/_shared/ad-intelligence/google-ads.mdreferences/_shared/ad-intelligence/linkedin-ads.mdreferences/_shared/ad-intelligence/meta-cold-traffic.mdreferences/_shared/ad-intelligence/meta-retargeting.mdreferences/_shared/ad-intelligence/tiktok-ads.mdreferences/_shared/artifact-contract-template.mdreferences/_shared/critic-override-protocol.mdreferences/_shared/eval-loop-spec.mdreferences/_shared/evaluation-loop-rubric.mdreferences/_shared/execution-policy.mdreferences/_shared/manifest-spec.mdreferences/_shared/meter-instrumentation.mdreferences/_shared/pre-dispatch-protocol.mdreferences/_shared/quality-dashboard-spec.mdreferences/ad-intelligence/google-ads-metrics.mdEvaluation skill. Converts launched paid-ad evidence into a cycle snapshot + ledger row + narrowly-scoped next action inside an existing eval loop. One cycle = one network (+ audience-temp on Meta/TikTok).
Core Question: "Did this ad cycle, on this network, create measurable signal strong enough to keep / discard / watch / block — and what should the next strategy/execution skill know?"
Why, methodology, history:
references/playbook.md[PLAYBOOK]. Capability metadata (route triggers, prerequisites, load map):routing.yaml.
program.md + context.md absent → NEEDS_CONTEXT, recommend /run-pipeline. This skill does not create loops.references/ad-intelligence/{google-ads,tiktok-ads,linkedin-ads}-metrics.md; Meta is inline). Secondary metrics explain diagnosis; don't override unless program.md defines a guardrail failure.BLOCKED.high | medium | low | blocked.write-ad (revised brief), channel-mix to plan-campaign, LP-bottleneck to brief-landing-page./run-pipeline owns loop setup + program.md / context.md / results.tsv schema + durable learnings. This skill owns post-launch Meta-ad evidence snapshots for a loop cycle, scoped to a single audience-temp. /write-ad owns next-cycle creative.
Required: loop slug/path · network (meta | google-ads | tiktok-ads | linkedin-ads) · audience-temp tag (Meta/TikTok: cold-traffic OR retargeting) · source ad-copy artifact (docs/forsvn/artifacts/marketing/write-ad/[audience-temp]-[date]-[slug].md) · measurement window · the network's primary metric value + source · spend window.
Recommended: baseline/prior cycle row · frequency at window close (Creative-Fatigue scoring) · conversion count + CPA · audience size + reach · guardrails from program.md · qualitative evidence (comments, sentiment, click-quality).
.forsvn/loops/[slug]/evals/YYYY-MM-DD-cycle-N.md + append one row to results.tsv via bun scripts/append-loop-result.ts (8-col helper) + update learnings.md ONLY for high-confidence keep/discard reusable lessons (critic-gated) + run bun scripts/manifest-sync.ts.
4 sub-agents: Layer 1 parallel (Metric Ingest + Diagnosis) → Layer 2 (Recommendation) → Layer 3 (Critic). Critic FAIL → revise once; still FAIL → no ledger row + BLOCKED. Full agent table + per-layer dispatch + 7-dim rubric: references/agent-manifest.md. Domain rubric: references/rubric.md. Shared frame: _shared/evaluation-loop-rubric.md.
Canonical: _shared/pre-dispatch-protocol.md + _shared/eval-loop-spec.md. Hard-blocks (BEFORE Cold Start): missing program.md/context.md → NEEDS_CONTEXT + /run-pipeline; no measurement evidence → BLOCKED; mixed-audience metrics with no clean split → BLOCKED; custom 10+ col results.tsv → warn + hand-edit. Cold Start: 6 bundled questions (loop · audience-temp · source ad-copy path · window · primary metric value/baseline · spend window). Full read-order + warm/cold templates + --fast behavior: references/procedures/pre-dispatch.md [PROCEDURE].
Session execution profile (single-vs-multi): inherit per references/_shared/execution-policy.md.
.forsvn/loops/[slug]/evals/YYYY-MM-DD-cycle-N.md. Lifecycle: evaluation.skill / version / date / status / summary / purpose / lifecycle / use_when / do_not_use_when / upstream / downstream + provenance (input_artifacts = source ad-copy + brand/BRAND.md + research/icp-research.md; output_eval: null — eval cycles are typically terminal).cycle date artifact primary_metric value baseline status description. status ∈ keep|discard|watch|blocked (Critic Hard Fail otherwise); description includes the audience-temp tag.write-ad --rev=N+1 (hypothesis seeding) + human reviewers. Ad-eval does NOT directly consume write-ad output — sibling coordination is at the eval-loop boundary. Schema changes require atomic update across _shared/eval-loop-spec.md + downstream callers.Full byte-identical template + Evidence/Results/Learning formats + helper invocation: references/format-conventions.md [PROCEDURE].
bun scripts/append-loop-result.ts "<loop slug>" \
--artifact evals/YYYY-MM-DD-cycle-N.md \
--metric "<primary metric>" --value "<current>" --baseline "<baseline>" \
--status "<keep|discard|watch|blocked>" --description "<one sentence — include audience-temp>"
Do not append on Critic FAIL — return BLOCKED instead.
Operator ships despite critic FAIL — log BEFORE writing artifact or ledger row: bun scripts/log-critic-override.ts --skill evaluate-ad …. Three overrides → rubric-revision escalation. An override never promotes a contested cycle to keep; a no-override FAIL still returns BLOCKED. Full protocol: references/_shared/critic-override-protocol.md [PROCEDURE].
references/anti-patterns.md [ANTI-PATTERN] — 7 ad-eval rows + 4 cross-cutting marketing-stack. Most common: mixed-audience contamination (Gate 3 + Critic "Audience-Temp Fidelity"), confidence inflation on low-spend (Gate 5 + Critic "Attribution Honesty"), scope drift to write-ad (Gate 6 + Critic "Decision Discipline"), missing source ad-copy artifact (Critic Hard Fail).
Ad-eval cold-traffic cycle (creative-fatigue keep→watch, critic PASS): references/examples/ad-eval-cycle-walkthrough.md.
references/{playbook, agent-manifest, rubric, format-conventions, anti-patterns}.md + procedures/{pre-dispatch, dispatch-mechanics}.mdnetwork): references/ad-intelligence/google-ads-metrics.md · references/ad-intelligence/tiktok-ads-metrics.md · references/ad-intelligence/linkedin-ads-metrics.md (Meta metrics stay inline in the agents)._shared/{eval-loop-spec, evaluation-loop-rubric, pre-dispatch-protocol, critic-override-protocol, quality-dashboard-spec}.mdwrite-ad (downstream — this skill routes recommendations TO it but does not produce briefs), run-pipeline (loop scaffolding + ledger schema + durable learnings), evaluate-campaign (multi-channel aggregate sibling)npx claudepluginhub hungv47/meta-skills --plugin forsvnAudits advertising account performance across Meta, TikTok, Google, and Zalo Ads. Provides a Health Score (0-100), Quick Wins, Quality Gate violations, and prioritized action plans.
Operates professional paid advertising across Google, Meta, YouTube, LinkedIn, TikTok, and more. Handles audits, strategy, budgets, creative, experiments, reporting, and approved campaign changes.
Reviews ad performance across Google, Meta, TikTok, LinkedIn, Amazon, and ChatGPT Ads. Produces cross-channel scorecards with CPA, ROAS, CTR, and spend trends, and audits conversion tracking health.