SkillAgentSearch skills...

check

Run the unified pre-publish quality gate on marketing content — wraps scripts/eval-runner.py to score hallucination risk, claim substantiation (with --evidence), brand-voice fit (with --brand), structure (with --schema), content quality, and readability, plus a C2PA provenance check for AI assets in…

Install / Use

npx skills add indranilbanerjee/digital-marketing-pro --skill check

Installs into whichever agent you are using.

About this skill
📄

SKILL.md

Installable skill definition

Quality Score

92/100

Category

Marketing

Supported Platforms

Universal

Our assessment of check

check scores 92/100 on our quality scale, 171st of 610 Marketing skills we index (top 29%).

Its SKILL.md is 17 KB long, well organised into 26 sections with 13 code examples: a thorough specification that gives an agent plenty to work with.

It has 832 GitHub stars, a meaningful sign that others use it.

Substance
30/30
Structure
20/20
Description
15/15
Adoption
12/20
Freshness
15/15

Maintenance, license and trust

  • The repository was last updated 26 days ago, so check is actively maintained.
  • It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
  • Its trust signals score 100/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.

check compared with similar skills

All 4 of these similar skills score higher than check; compare them before choosing.

SkillScoreStarsUpdatedFormat
check (this skill)by indranilbanerjee9283226d agoSKILL.md
Agent-Reachby Panniantong10090.1k18d agoCLAUDE.md
LocalAIby mudler10049.4ktodayMCP Server
algorithmic-artby anthropics100177.9k11d agoSKILL.md
pptxby anthropics100177.9k11d agoSKILL.md

Frequently asked questions

How do I install check?
Run npx skills add indranilbanerjee/digital-marketing-pro --skill check. The install tabs above show the steps for each supported agent.
Which AI agents does check work with?
It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
Is check safe to use?
It is MIT-licensed and scores 100/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
Is check still maintained?
The repository was last updated 26 days ago, so check is actively maintained.

name: check description: "Run the unified pre-publish quality gate on marketing content — wraps scripts/eval-runner.py to score hallucination risk, claim substantiation (with --evidence), brand-voice fit (with --brand), structure (with --schema), content quality, and readability, plus a C2PA provenance check for AI assets in EU-targeted campaigns; returns a composite score with a PASS / WARN / BLOCKED decision and per-issue fix suggestions. Reports only — it never edits the content. Triggers on "/digital-marketing-pro:check", "is this safe to publish", "run a hallucination check on this draft", "validate this copy against the brand voice", "pre-publish quality gate". Resolves the active brand profile automatically; pairs with /digital-marketing-pro:c2pa-metadata to fix missing manifests." user-invocable: true argument-hint: "<file-or-content> [--full|--compliance] [--brand <slug>] [--evidence <path>] [--schema <name>]" allowed-tools: Read Bash Glob Grep

/digital-marketing-pro:check — Unified Pre-Publish Quality Gate

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> --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.

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_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.

With brand voice check

/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.

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 first

If 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:

  1. The active (or --brand) profile's target_markets include any EU/EEA jurisdiction, and
  2. An accompanying asset is declared AI-generated — either the file metadata says so, or the --evidence JSON declares ai_generated: true for it.

When both hold, the gate runs a C2PA manifest presence check on the asset via embed-c2pa.py (presence/verify mode — it does not modify the asset). A missing or invalid C2PA provenance manifest 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:

  1. Resolve the input. If the user passed a file path, read it. If they passed inline content, use it.
  2. Resolve options. If --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.
  3. Build the eval-runner command. Choose action: run-quick (default), run-full (with --full), run-compliance (with --compliance).
  4. Execute via Bash.
    python "${CLAUDE_PLUGIN_ROOT}/scripts/eval-runner.py" --action run-quick --file <input> [--brand <slug>] [--evidence <path>] [--schema <name>]
    
  5. Parse the JSON output. Extract composite score, grade, dimension scores, alerts, auto-reject decision.
  6. Format for the user. Present the human-readable report shown above. Lead with the decision (PASS / WARN / BLOCKED).
  7. If BLOCKED, refuse to recommend publishing. Always require the user to address CRITICAL issues before they proceed.

Scripts called

  • scripts/eval-runner.py — master orchestrator
  • scripts/hallucination-detector.py — invoked by eval-runner
  • scripts/claim-verifier.py — invoked by eval-runner if --evidence provided
  • scripts/brand-voice-scorer.py — invoked by eval-runner if --brand provided
  • scripts/output-validator.py — invoked by eval-runner if --schema provided
  • scripts/content-scorer.py — invoked by eval-runner

Truncated for display — read the full file on GitHub.

Related Skills

View on GitHub
GitHub Stars832
CategoryMarketing
Updated26d ago
Forks136

Languages

Python

Trust signals

100/100

From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.

No cautions