# Digital Marketing Pro
Your agency just signed a 50-brand client. The previous agency left no playbook. Three brands are bleeding budget, two have stale positioning, one is launching in a regulated jurisdiction next month. Where do you start?
Run /digital-marketing-pro:engagement against each brand. Same 12-Part Strategy Flow, same Four Core Documents, same 61-step structure — auditable across the entire portfolio in ~60 minutes per brand on Claude Opus-class models (measured on Opus 4.8; Opus 5 is the current equivalent at the same price). No more inconsistent depth between brands. No more "what did the last agency do?" mysteries. No more compliance gaps in regulated jurisdictions.
Open-source AI marketing plugin — 163 skills, 24 specialist agents, EU AI Act Article 50 ready, Cowork team-persistent. Built for marketing agencies, in-house teams running 50–200 brands, and consultancies. Installs on Claude Code (CLI + IDE), Anthropic Cowork, OpenAI Codex, Cursor 2.5+, GitHub Copilot CLI, Google Antigravity 2.0, Hermes Agent, and OpenClaw + 35+ Agent Skills platforms. Created by Indranil Banerjee · LinkedIn · X.
🆕 Just shipped — v3.31.1 (August 17, 2026): all five open community issues verified and fixed. Every open GitHub issue was reproduced against the current release before touching anything — all five were real, and each fix ships with the guard that makes its regression class impossible: (#10)
claim-verifier.py's percentage pattern ended in%\b, which — because%is a non-word character — only matched when a word character followed the percent sign:98%xwas a claim while "98% of customers" extracted nothing; fixed with%(?!\w)and pinned by a new CLI-level test suite. (#11)keyword_cluster.pytokenized with[a-z0-9]+, splitting every non-ASCII letter ("bürohaftpflicht" → "rohaftpflicht") — and exact-token Jaccard scored related German compounds at 0.00, blinding the cannibalisation gate and the link map in compounding languages; fixed with a Unicode tokenizer plus compound-aware similarity (containment matching with a 6-char floor; English sets score exactly as before, SERP-URL overlap stays pure Jaccard), pinned by tests including an English-parity bound. (#13)engagement-workflow's frontmatterallowed-toolsomittedTaskwhile its body mandates Task dispatch in five Parts — on runtimes that enforce the declaration, the 12-part flow degraded;Taskadded, and a new guard fails any skill whose body references Task dispatch without declaring it. (#12)plugin.yaml(the one manifest outside the description guards) said "158 skills" for five releases; now 163, and the Hermes description joined the derived-count guard. (#9)hooks/hooks.jsoncarried a_readmefield that Cowork's plugin validation rejects — the rationale moved tohooks/README.md, the manifest is schema-clean, and a guard pins it (fixed across all three suite plugins, since every sibling shipped the same defect). Thanks to @jurazerr and @theepicsaxguy for precise, reproducible reports. 163 skills, 402 tests. Previously — v3.31.0 (August 17, 2026): Grok (xAI Build CLI) becomes the ninth native platform. A first-class.grok-plugin/manifest pair —plugin.jsonwith the"skills"pointer Grok's loader reads, plus a single-pluginmarketplace.json— makesgrok plugin install indranilbanerjee/digital-marketing-prowork directly (Grok Build also reads the Claude Code manifests for compatibility; the native pair is what an official xAI marketplace listing points at). Both files are version-locked into the release-consistency suite. The same pass also caught and fixed four stale counts that had escaped the doc-count guard through new phrasings — "158 `SKILL.md` files" hidden by backticks, "158 marketing skills" and "158 DMP skill names" hidden by qualifier words, and an "All 209 tests" claim that was 170 stale — and taught the guard each phrasing, plant-checked, with "N tests" now a derived-truth noun. 163 skills, 381 tests. Previously — v3.30.2 (August 16, 2026): the documentation truth pass. A from-zero audit found the doc-count guard pattern-blind: the comparison table said "Skills count 158" against 163 shipped, five documents quoted "86 Python scripts" against 93, and AGENTS.md — the file every non-Claude runtime auto-loads — pinned v3.17.0, thirteen releases stale. Every number is now re-derived from the filesystem and the guard grew the exact patterns that escaped it (script counts, SKILL.md-file counts, table rows, AGENTS.md currency), each plant-checked against the phrasing it previously missed. 163 skills, 379 tests. Previously — v3.30.1 (August 16, 2026): richer Agent Plugins listing metadata + the directory submission bundle (docs/distribution/). And — v3.30.0: the content-engine run auditor — “status: ready” is now re-derived, never trusted. Newscripts/run-audit.pyre-checks a finished run from its artifacts: every numbered artifact present, the humanize verdict re-measured with a freshai-tell-scan.pyrun instead of read off the scorecard, no scan JSON embedded in the fileauthorship.pymeasures (the corruption class that once flippedmay_claim_authoredand denied an author credit for work they did), the authorship record matching a fresh measurement, recorded voice distances actually inside the 0.15 gate, and publish-ready copy free of production placeholders. A scorecard declaring ready past its own recorded gate is a FAIL with the number quoted; a missing input is reported-N/A, never silent-pass. The content-engine contract now runs the audit beforestatus: readymay be declared, and the verdict lands inrun-audit.jsonbeside the artifacts so the next reader sees the run was verified rather than believed. 163 skills, 376 tests. Previously — Just shipped — v3.29.0 (August 16, 2026): Digital Marketing Pro travels in Agent Plugins 1.0. OpenAI's vendor-neutral plugin standard (announced Aug 6; adopted by ChatGPT, Codex, Cursor, GitHub Copilot, VS Code, Kiro) reads a rootplugin.jsonon a closed schema and defines${PLUGIN_DATA}as the persistent-data name — and a compliant non-Claude host previously resolved no data directory here at all, because every resolver read only theCLAUDE_*spellings. Shipped: the root manifest (version-synced with the Claude manifest and guarded by tests — closed-schema check, name rules, all 163 skills verified in the standard's layout), and${PLUGIN_DATA}accepted as the fallback whereverCLAUDE_PLUGIN_DATAwas read. One listing in the shared ChatGPT + Codex directory is now a packaging step away rather than a port. 163 skills, 364 tests. Previously — Just shipped — v3.28.0 (August 15, 2026): abrand-setup→content-enginerun, following the instructions literally, found five defects no unit test could see.brand_voice_matchwas unfailable: it asked for "≤ 1.5 point deviation" while the scorer emitsdistancebounded at 1.0 — a hollow gate that had been passing everything. Now stated in the scorer's own 0–1 unit atdistance≤ 0.15, the threshold the scorer already used internally, with a test that fails if the two diverge. **seo_completeheld one impossible criterio