check
Skill873 starsChanged 9 months agoMITView on GitHub
Run the scored pre-publish gate via eval-runner.py: claims, brand voice, compliance, AI tells. \"check this before we publish\"
We split this skill into the rules it gives an agent
11 rules. 0 are common, 7 are distinctive, and 4 are very specific to this project.
0
Common
Most of the 66 edited versions we read keep these.
7
Distinctive
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 19
Use this skill before publishing any marketing content — blog posts, ad copy, emails, social posts, landing pages, press releases, or any …
- Distinctive: line 73
When the content makes specific claims you want to substantiate, provide a JSON evidence file:
- Distinctive: line 139
If any CRITICAL issue is found, decision = BLOCKED and the user is asked to fix before publishing.
- Very specific: line 170
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 …
- Distinctive: line 176
Resolve the input: If the user passed a file path, read it.
- Very specific: line 177
Resolve options: If --brand not specified, attempt to load from active brand at ~/.claude-marketing/brands/_active-brand.json.
- Distinctive: line 185
If BLOCKED, refuse to recommend publishing: Always require the user to address CRITICAL issues before they proceed.
- Distinctive: line 198
All scripts use stdlib only (except brand-voice-scorer which optionally uses nltk).
- Distinctive: line 289
Never report PASS if there are CRITICAL issues: Always BLOCKED.
- Very specific: line 292
Resolve the active brand if not specified: Check ~/.claude-marketing/brands/_active-brand.json.
- Very specific: line 294
Surface skipped dimensions explicitly: If the user did not provide --evidence or --schema, note that the corresponding dimensions were …
“Common” is measured: kept by at least 6 in 10 of the 66 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
/digital-marketing-pro:check — Unified Pre-Publish Quality Gate
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.
Context efficiency
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.
Why this skill exists
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.
What the check evaluates
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).
Subcommands and modes
Default (run-quick)
/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.
Full eval (run-full)
/digital-marketing-pro:check <file-path-or-content> --fullRuns 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.
Compliance-focused (run-compliance)
/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.
With evidence file
/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.
With schema validation
/digital-marketing-pro:check <file-path> --schema blog_postValidates 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.
With brand voice check
/digital-marketing-pro:check <file-path> --brand acmeScores 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.
Output format
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 firstIf any CRITICAL issue is found, decision = BLOCKED and the user is asked to fix before publishing.
Decision rules
- PASS — no CRITICAL issues and the composite score is above the auto-reject threshold (
auto_reject_threshold, default 40) - WARN — no CRITICAL issues but at least one WARNING; the user should address it before publishing
- BLOCKED — at least one CRITICAL issue (e.g. placeholder URL, fabricated statistic in a headline, missing required disclaimer for a regulated industry, missing C2PA provenance manifest on an AI-generated asset in an EU-targeted campaign); the content cannot publish until fixed
AI-tell scans (advisory section, never scored)
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- Tier 1 (surface) — LLM-favored vocabulary, significance markers, soft-adverb clusters, connective and participial openers, em-dash density, ungrounded one-liners. Report the overall LOW/MODERATE/HIGH rating and the flagged sentences with their suggested fix. Significance markers are reported with
"fix": "Delete this sentence; do not reword it."— pass that through verbatim, because rewording is the wrong remedy. - Tier 2 (structure) — the overall OK/NOTE/ATTENTION band plus each NOTE/ATTENTION finding with its spans (moralizing, section symmetry, parallel headings, specificity, stance, paragraph evenness, entity development). For
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.
EU AI Act Article 50 — C2PA provenance gate
The check gains a compliance dimension for AI-generated assets in EU-targeted campaigns. It fires when both conditions hold:
- The active (or
--brand) profile'starget_marketsinclude any EU/EEA jurisdiction, and - An accompanying asset is declared AI-generated — either the file metadata says so, or the
--evidenceJSON declaresai_generated: truefor 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).
How the skill operates
The skill follows this flow:
- Resolve the input. If the user passed a file path, read it. If they passed inline content, use it.
- Resolve options. If
--brandnot specified, attempt to load from active brand at~/.claude-marketing/brands/_active-brand.json. If--schemanot specified, infer from content type if obvious (blog markdown →blog_post, etc.) or skip structure check. - Build the eval-runner command. Choose action:
run-quick(default),run-full(with--full),run-compliance(with--compliance). - Execute via Bash.
python "${CLAUDE_PLUGIN_ROOT}/scripts/eval-runner.py" --action run-quick --file <input> [--brand <slug>] [--evidence <path>] [--schema <name>] - Parse the JSON output. Extract composite score, grade, dimension scores, alerts, auto-reject decision.
- Format for the user. Present the human-readable report shown above. Lead with the decision (PASS / WARN / BLOCKED).
- If BLOCKED, refuse to recommend publishing. Always require the user to address CRITICAL issues before they proceed.
Scripts called
scripts/eval-runner.py— master orchestratorscripts/hallucination-detector.py— invoked by eval-runnerscripts/claim-verifier.py— invoked by eval-runner if--evidenceprovidedscripts/brand-voice-scorer.py— invoked by eval-runner if--brandprovidedscripts/output-validator.py— invoked by eval-runner if--schemaprovidedscripts/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.
Examples
Example 1: Quick check on a draft
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.Example 2: Full eval with brand + evidence + schema
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.Example 3: Compliance check on regulated content
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 highlightedExample 4: Quick check on inline content
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: BLOCKEDWhen to use which mode
| 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> |
Behaviour rules
- Never report PASS if there are CRITICAL issues. Always BLOCKED.
- Always report the composite score and grade. Even if PASS, surface room for improvement.
- Always include actionable suggestions. Each issue must be paired with a fix recommendation.
- Resolve the active brand if not specified. Check
~/.claude-marketing/brands/_active-brand.json. If no active brand, run without--brand(skip brand voice dimension). - Never modify the content. This skill only reports — the user (or the agent that produced the content) makes the fix.
- Surface skipped dimensions explicitly. If the user did not provide
--evidenceor--schema, note that the corresponding dimensions were skipped.
Related skills + commands
/digital-marketing-pro:engagement growth-plan— produces Part 8 deliverable; should be checked with/digital-marketing-pro:check --full --schema content_briefbefore 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 skill
Related references
scripts/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.mdSection 16 (Evaluation Layer) — eval framework architecture
Other versions76 projects use a version of this.
Word for word · 0
None found.
Edited · 1
Wrote their own version · 75
- tw93/Waza★ 7.5ksame name
- tw93/claude-health★ 7.3ksame name
- katanemo/archgw★ 7.1ksame name
- katanemo/plano★ 7.1ksame name
- tokio-rs/topcoat★ 6.1ksame name
- Giskard-AI/giskard-oss★ 5.9ksame name
- VibiumDev/vibium★ 2.9ksame name
- DAIR-AutoResearch/AutoSci★ 1.7ksame name
- PKU-DAIR/AutoSci★ 1.7ksame name
- skyllwt/AutoSci★ 1.7ksame name
65 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
Used alongsideProjects with it also use daily-arxiv, exp-eval and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
LambenthanSkilldaily-arxiv
每日从 arXiv 拉取新论文,过滤相关性,auto-ingest 高优先级论文,检测 SOTA 更新
Also in 5 projects that use this
LambenthanSkillexp-eval
实验判决门:Review LLM 独立评判实验结果 → 4 种判决路径 → 自动更新 claims confidence、ideas status、graph edges
Also in 5 projects that use this
JuliusBrusseeSkillbackprop
Bug → spec protocol. When a bug is found or a test fails, trace the cause, decide whether a new §V invariant would catch recurrence, append to §B. This is the one non-obvious thing SDD does that plan-then-execute doesn't. Triggers on test failure, bug report, post-mortem, or explicit user ask.
Also in 4 projects that use this
DAIR-AutoResearchSkillexp-pilot-eval
Pilot result evaluation — read pilot results, apply success criteria, update idea page (pilot_result, failure_reason if failed), generate PILOT_VERDICT_REPORT. Called by /ideate Phase 5 after /exp-pilot-run.
Also in 4 projects that use this
DAIR-AutoResearchSkillexp-pilot-run
Pilot experiment execution — read Pilot Spec YAML, write pilot code, run experiment(Confirm with the user before operation and require the applicant to conduct manual inspection), return results. Called by /ideate Phase 5. Does NOT modify wiki pages or judge pass/fail.
Also in 4 projects that use this
- +6 more from Lambenthan
- +1 more from DAIR-AutoResearch
In this repository164 other files it gives its agents.
- AGENTS.mdAGENTS.md
- ab-test-planSkill
- ad-creativeSkill
- add-integrationSkill
- aeo-auditSkill
- aeo-geoSkill
- agency-dashboardSkill
- agent-readiness-auditSkill
- analytics-insightsSkill
- anomaly-scanSkill
- attribution-modelSkill
- attribution-reportSkill
- audience-intelligenceSkill
- audience-profileSkill
- autopilot-statusSkill
- backlink-gapSkill
- brand-setupSkill
- budget-optimizerSkill
- budget-trackerSkill
- c2pa-metadataSkill
- campaign-auditSkill
- campaign-orchestratorSkill
- campaign-planSkill
- campaign-statusSkill
- case-study-planSkill
- churn-riskSkill
- client-onboardingSkill
- client-proposalSkill
- client-reportSkill
- client-validation-documentSkill
- cohort-analysisSkill
- competitor-alertsSkill
- competitor-analysisSkill
- competitor-monitorSkill
- competitor-pagesSkill
- connectSkill
- content-briefSkill
- content-calendarSkill
- content-decay-scanSkill
- content-engineSkill
- content-repurposeSkill
- context-engineSkill
- continuous-improvement-loopSkill
- counter-narrativeSkill
- cowork-setupSkill
- creative-healthSkill
- creative-testing-frameworkSkill
- credential-switchSkill
- crisis-responseSkill
- crm-syncSkill
- croSkill
- dark-funnelSkill
- data-exportSkill
- data-importSkill
- digital-prSkill
- email-sequenceSkill
- emerging-channelsSkill
- engagement-workflowSkill
- entity-auditSkill
- eval-configSkill
- The first 60 shown.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

