Plan an A/B test by script: sample size per variant, days to run, stopping rules. "how many visitors per variant"
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Run the scored pre-publish gate via eval-runner.py: claims, brand voice, compliance, AI tells. "check this before we publish"
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
설치 방법 보기설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
Script location. If your host does not set
${CLAUDE_PLUGIN_ROOT}, the scripts are in this plugin'sscripts/folder, next toskills/. Run them with Python 3.10 or newer:python, orpython3wherepythonis not found (macOS, many Linux systems).
This skill is the canonical pre-publish gate for marketing content. It wraps the evaluation suite (scripts/eval-runner.py) and produces a single pass/fail decision with actionable issues.
Heavy skill. Grep before Read any referenced file, then Read only matched ranges with offset + limit. List the brand's workspace at ~/.claude-marketing/brands/{slug}/ (or $CLAUDE_PLUGIN_DATA/digital-marketing-pro/brands/{slug}/ when that env var is set) before opening files. On re-invocation mid-session, skip files already in context.
Use this skill before publishing any marketing content — blog posts, ad copy, emails, social posts, landing pages, press releases, or any branded copy.
An earlier version shipped a global PreToolUse hook that auto-ran a hallucination + brand-compliance check on every Write/Edit operation in every project. That hook was removed because it fired globally across all plugins and projects (Slack writes, GitHub PRs, code edits — all of it), causing friction in non-marketing work.
/digital-marketing-pro:check replaces that automatic gate with an explicit user-invoked gate. The work is the same; the trigger is intentional.
The check delegates to scripts/eval-runner.py (the master eval orchestrator) which calls four sibling scripts:
| Dimension | Script | What it checks |
|---|---|---|
| Hallucination | hallucination-detector.py | Unattributed statistics, placeholder URLs (example.com / your-site.com), unsupported superlatives ("best", "#1", "leading"), fabricated citations |
| Claims | claim-verifier.py (when --evidence provided) | Cross-checks specific claims against a user-provided evidence file |
| Brand voice | brand-voice-scorer.py (when --brand provided) | Scores content against the active brand's voice profile (formality, energy, humor, authority, prefer/avoid words) |
| Structure | output-validator.py (when --schema provided) | Validates content matches expected schema (blog_post, email, ad_copy, social_post, landing_page, press_release, content_brief, campaign_plan) |
| C2PA provenance (compliance) | embed-c2pa.py (presence check) | When the brand's target_markets include an EU/EEA jurisdiction AND an accompanying asset is AI-generated: verifies a C2PA provenance manifest is present and valid. Missing or invalid manifest → CRITICAL / BLOCKED (EU AI Act Article 50, applies from 2 Aug 2026) |
Plus content quality and readability scoring (always run).
/digital-marketing-pro:check <file-path-or-content>
Runs the quick eval: hallucination detection + content quality + readability. Fast (~2 seconds), zero external dependencies. Use this for routine checks.
/digital-marketing-pro:check <file-path-or-content> --full
Runs all 6 dimensions: hallucination + claims (if evidence provided) + brand voice (if brand provided) + structure (if schema provided) + content quality + readability. Use before publishing anything client-facing or external.
/digital-marketing-pro:check <file-path-or-content> --compliance --brand <slug> [--evidence <path>] [--schema <name>]
Runs hallucination + claims + brand voice + structure. Best for regulated industries (healthcare, financial services, alcohol, cannabis, gambling) where claim substantiation and brand-voice fidelity matter most.
/digital-marketing-pro:check <file-path> --evidence <evidence-file.json>
When the content makes specific claims you want to substantiate, provide a JSON evidence file:
{
"evidence": [
{
"claim": "50% increase in conversions",
"source": "GA4 Q4 report",
"date": "2025-12-31",
"verified": true
},
{
"claim": "Trusted by Fortune 500 companies",
"source": "Customer roster (internal)",
"date": "2026-04-01",
"verified": true
}
]
}
The check will extract every claim from the content and flag any that don't match an evidence entry.
/digital-marketing-pro:check <file-path> --schema blog_post
Validates the content matches the structural requirements of the named schema. Available schemas: blog_post, email, ad_copy, social_post, landing_page, press_release, content_brief, campaign_plan. Use --schema list to see all schemas with their requirements.
/digital-marketing-pro:check <file-path> --brand acme
Scores the content against the brand voice profile at ~/.claude-marketing/brands/acme/profile.json. Reports per-dimension breakdown (formality, energy, humor, authority) plus deviation from prefer/avoid word lists.
The check returns a unified report:
DM CHECK REPORT — <file or content snippet>
=============================================
Composite Score: 73.4 / 100 (Grade: B-)
Auto-Reject: NO
Dimensions:
Hallucination ............ 96/100 PASS (weight 0.40)
Content Quality .......... 78/100 PASS (weight 0.35)
Readability .............. 65/100 PASS (weight 0.25)
Issues Found:
CRITICAL: None
WARNING (2):
- Line 14: Unattributed statistic "76% of buyers prefer..."
Suggestion: cite source or rephrase as observation
- Line 22: Superlative "best in class" without substantiation
Suggestion: replace with measurable claim or proof point
Decision: PASS — safe to publish but address WARNINGs first
If any CRITICAL issue is found, decision = BLOCKED and the user is asked to fix before publishing.
auto_reject_threshold, default 40)Alongside the eval-runner scorers, run both tell scans and report them as a single ADVISORY section of the check output:
python "${CLAUDE_PLUGIN_ROOT}/scripts/ai-tell-scan.py" --file <input> # Tier 1: surface
python "${CLAUDE_PLUGIN_ROOT}/scripts/structural-tell-scan.py" --file <input> # Tier 2: structure
"fix": "Delete this sentence; do not reword it." — pass that through verbatim, because rewording is the wrong remedy.entity_development, always carry through that the fix is to develop an existing specific, never to delete specifics.This whole section NEVER affects the PASS/WARN/BLOCKED decision. Both scripts keep their thresholds inside themselves, deliberately outside the eval config, because these are editorial judgment calls for a human editor, not publish gates — and because a detector proxy has a real false-positive rate on genuinely human writing. (The one place a tell scan does gate is the content-engine's humanize_passed, and only on the two tells precise enough to gate on: significance_marker and soft_adverb_cluster. llm_favored_word was dropped from that set on 2026-08-15 after it was measured firing only on prose published before ChatGPT existed and never on model prose. That gate is a density floor — measured, it fails no published human writing and catches no unedited model prose — so never report a pass as evidence that a piece reads human.) Both scans measure visible text only; neither can see, and neither has any relationship to, any statistical watermark.
The check gains a compliance dimension for AI-generated assets in EU-targeted campaigns. It fires when both conditions hold:
--brand) profile's target_markets include any EU/EEA jurisdiction, and--evidence JSON declares ai_generated: true for it.When both hold, the gate checks the asset read-only with python "${CLAUDE_PLUGIN_ROOT}/scripts/embed-c2pa.py" --verify <asset>: exit 0 = manifest present and valid (a self-signed dev signer is reported as untrusted_signer, not failed), 6 = no manifest, 7 = manifest fails validation, 2 = c2pa-python not installed (report the dimension as SKIPPED with the printed install command; never PASS it). A missing or invalid C2PA provenance manifest (exit 6 or 7) is a CRITICAL issue → decision = BLOCKED. Article 50 applies from 2 Aug 2026 (penalty up to EUR 15M or 3% of global turnover). To embed a compliant manifest, run /digital-marketing-pro:c2pa-metadata.
If embed-c2pa.py is not present in the script inventory or the asset cannot be resolved, surface the dimension as SKIPPED with a warning (never silently PASS an EU AI-asset check).
The skill follows this flow:
--brand not specified, attempt to load from active brand at ~/.claude-marketing/brands/_active-brand.json. If --schema not specified, infer from content type if obvious (blog markdown → blog_post, etc.) or skip structure check.run-quick (default), run-full (with --full), run-compliance (with --compliance).python "${CLAUDE_PLUGIN_ROOT}/scripts/eval-runner.py" --action run-quick --file <input> [--brand <slug>] [--evidence <path>] [--schema <name>]
scripts/eval-runner.py — master orchestratorscripts/hallucination-detector.py — invoked by eval-runnerscripts/claim-verifier.py — invoked by eval-runner if --evidence providedscripts/brand-voice-scorer.py — invoked by eval-runner if --brand providedscripts/output-validator.py — invoked by eval-runner if --schema providedscripts/content-scorer.py — invoked by eval-runnerscripts/readability-analyzer.py — invoked by eval-runnerscripts/embed-c2pa.py — presence/verify check for the EU AI Act Article 50 C2PA gate (only when an EU-targeted brand has an AI-generated asset)All scripts use stdlib only (except brand-voice-scorer which optionally uses nltk). No external API calls, no internet required.
User: /digital-marketing-pro:check drafts/q2-launch-blog.md
Skill:
1. Read drafts/q2-launch-blog.md
2. Run python "${CLAUDE_PLUGIN_ROOT}/scripts/eval-runner.py" --action run-quick --file drafts/q2-launch-blog.md
3. Parse JSON output:
composite_score: 81.2, grade: B+, auto_rejected: false
hallucination: 92/100 pass, content_quality: 76/100 pass, readability: 84/100 pass
alerts: 1 warning ("unattributed stat in line 14")
4. Format report:
DM CHECK REPORT — drafts/q2-launch-blog.md
============================================
Composite Score: 81.2 / 100 (Grade: B+)
Decision: PASS
Dimensions:
Hallucination ......... 92/100 pass
Content Quality ....... 76/100 pass
Readability ........... 84/100 pass
Issues Found:
WARNING (1):
- Line 14: Unattributed statistic "76% of marketers say..."
Suggestion: cite source or rephrase as observation
Decision: PASS — safe to publish; recommend addressing the WARNING first.
User: /digital-marketing-pro:check drafts/healthcare-ad.md --full --brand healthfirst --evidence facts/q2-claims.json --schema ad_copy
Skill:
1. Read drafts/healthcare-ad.md
2. Run python "${CLAUDE_PLUGIN_ROOT}/scripts/eval-runner.py" --action run-full --file drafts/healthcare-ad.md --brand healthfirst --evidence facts/q2-claims.json --schema ad_copy
3. Parse JSON output. Composite: 58.4, grade: D+, auto_rejected: true
4. Format report with CRITICAL issues highlighted
5. Decision: BLOCKED. Two unattributed health claims need substantiation before this can publish.
User: /digital-marketing-pro:check drafts/financial-services-landing.md --compliance --brand finadvisor --evidence facts/finra-disclosures.json
Skill:
1. Read content
2. Run python "${CLAUDE_PLUGIN_ROOT}/scripts/eval-runner.py" --action run-compliance --file drafts/financial-services-landing.md --brand finadvisor --evidence facts/finra-disclosures.json
3. Output prioritises hallucination + claim verification + brand voice + structure
4. Returns decision with FINRA-relevant issues highlighted
User: /digital-marketing-pro:check "Our amazing product boosts conversion by 347% — visit example.com today!"
Skill:
1. Detect inline content (not a file path)
2. Write content to a temp file
3. Run quick eval
4. Report:
CRITICAL: 2
- Placeholder URL "example.com" — replace with real URL before publishing
- Unattributed statistic "347%" — fabricated stat or missing citation
Decision: BLOCKED
| Scenario | Recommended mode |
|---|---|
| Routine content check during drafting | /digital-marketing-pro:check <file> (quick) |
| Before publishing any external content | /digital-marketing-pro:check <file> --full --brand <slug> |
| Regulated industry content (healthcare / financial / alcohol / cannabis / gambling) | /digital-marketing-pro:check <file> --compliance --brand <slug> --evidence <facts> |
| Client-facing deliverable (Growth Plan, Yearly Planner, monthly report) | /digital-marketing-pro:check <file> --full --brand <slug> |
| Ad copy specifically | /digital-marketing-pro:check <file> --schema ad_copy --brand <slug> |
| Email specifically | /digital-marketing-pro:check <file> --schema email --brand <slug> |
| Blog post specifically | /digital-marketing-pro:check <file> --schema blog_post --brand <slug> |
~/.claude-marketing/brands/_active-brand.json. If no active brand, run without --brand (skip brand voice dimension).--evidence or --schema, note that the corresponding dimensions were skipped./digital-marketing-pro:engagement growth-plan — produces Part 8 deliverable; should be checked with /digital-marketing-pro:check --full --schema content_brief before client delivery/digital-marketing-pro:content-engine — produces marketing content; recommended workflow is /digital-marketing-pro:content-engine → review → /digital-marketing-pro:check → publish/digital-marketing-pro:eval-content — legacy alias that routes to this skillscripts/eval-runner.py — the master orchestrator this skill wrapsskills/context-engine/eval-framework-guide.md — full eval framework documentationskills/context-engine/eval-rubrics.md — per-dimension scoring rubricsdocs/architecture.md Section 16 (Evaluation Layer) — eval framework architecture아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.
Plan an A/B test by script: sample size per variant, days to run, stopping rules. "how many visitors per variant"
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Write ad copy variants to each platform's specs, policy-checked and in brand voice. "write ad copy for Meta"
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Add a custom MCP integration: scaffold the server, write .mcp.json, test it. "add a new MCP server"
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Run a one-time AEO audit of six AI answer engines, scored per surface. "check our AI search visibility"
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Plan AEO/GEO strategy to get cited by AI: content, entities, schema, 90-day plan. "how do we get cited by AI"
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Build the agency dashboard across all client brands: health, pacing, risk. "how are all our clients doing"
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.