$npx -y skills add MoizIbnYousaf/marketing-cli --skill document-reviewAudits brand/ files for completeness, consistency, and freshness. Use when the agent or user wants to review brand files, audit marketing docs, check brand consistency, verify brand health, or assess what's missing from brand memory. Produces a structured audit report with per-fi
| 1 | # /document-review — Brand Document Audit |
| 2 | |
| 3 | You audit the `brand/` directory for quality: completeness, consistency, and freshness. You report problems — you never fix them. Fixes belong to domain skills (e.g., `/audience-research` fixes `audience.md`). |
| 4 | |
| 5 | For brand memory protocol, see /cmo [rules/brand-memory.md](../cmo/rules/brand-memory.md). |
| 6 | |
| 7 | ## On Activation |
| 8 | |
| 9 | 1. Verify `brand/` directory exists. If it does not exist, report Overall Health as **Not Started** and recommend `mktg init`. Skip all phases. |
| 10 | 2. Read all 9 `brand/` files (or confirm which are missing). |
| 11 | 3. Determine audit scope based on user request. |
| 12 | 4. Run all four phases sequentially. |
| 13 | |
| 14 | ## Phase 0: Assess Scope |
| 15 | |
| 16 | | Request | Scope | |
| 17 | |---------|-------| |
| 18 | | "review brand files" | Full brand/ audit (default) | |
| 19 | | "check audience.md" | Single-file deep review | |
| 20 | | "is my brand consistent?" | Consistency-only (Phase 2) | |
| 21 | | "what's stale?" | Freshness-only (Phase 3) | |
| 22 | | No specific request | Full brand/ audit | |
| 23 | |
| 24 | For single-file reviews, still cross-reference against other brand files for consistency. |
| 25 | |
| 26 | ## Phase 1: Completeness Check |
| 27 | |
| 28 | For each of the 10 brand files, assess status: |
| 29 | |
| 30 | ### Profile Files (7) |
| 31 | |
| 32 | These should contain substantive content beyond the template scaffold. |
| 33 | |
| 34 | | File | Key Sections | Owner Skill | |
| 35 | |------|-------------|-------------| |
| 36 | | `voice-profile.md` | Voice DNA (tone, personality, vocabulary), do/don't examples | `/brand-voice` | |
| 37 | | `positioning.md` | Core positioning (category, for, unlike, we), angles | `/positioning-angles` | |
| 38 | | `audience.md` | Primary audience (who, pain points, watering holes), personas | `/audience-research` | |
| 39 | | `competitors.md` | Named competitors with positioning, strengths, weaknesses | `/competitive-intel` | |
| 40 | | `keyword-plan.md` | Priority keywords table (keyword, intent, difficulty, priority) | `/keyword-research` | |
| 41 | | `creative-kit.md` | Brand colors, typography, visual style | `/creative` | |
| 42 | | `stack.md` | Available tools (email, social, video, search, media) | `mktg init` | |
| 43 | |
| 44 | **Scoring:** |
| 45 | |
| 46 | | Score | Meaning | Criteria | |
| 47 | |-------|---------|----------| |
| 48 | | **complete** | Ready for use | File exists, has substantive content beyond template, key sections populated | |
| 49 | | **partial** | Needs work | File exists but some key sections are empty or still contain template placeholders (`<!-- Generated by mktg init -->` without real content below) | |
| 50 | | **empty** | Template only | File exists but matches the `mktg init` template exactly (no customization) | |
| 51 | | **missing** | Not created | File does not exist | |
| 52 | |
| 53 | **How to detect template-only content:** |
| 54 | - Look for lines like `- **Tone:**` with no value after the colon |
| 55 | - Look for empty table rows |
| 56 | - Look for `<!-- Generated by mktg init. Fill in or let /cmo build this. -->` as the only substantive comment |
| 57 | - Profile files with fewer than 5 lines of real content (excluding headers and comments) are likely empty |
| 58 | |
| 59 | ### Append-Only Files (2) |
| 60 | |
| 61 | | File | Purpose | Owner | |
| 62 | |------|---------|-------| |
| 63 | | `assets.md` | Log of created assets | All skills (append) | |
| 64 | | `learnings.md` | What worked, what didn't, audience insights | All skills (append) | |
| 65 | |
| 66 | **Scoring:** |
| 67 | |
| 68 | | Score | Meaning | Criteria | |
| 69 | |-------|---------|----------| |
| 70 | | **complete** | Has entries | File exists with dated entries | |
| 71 | | **empty** | No entries | File exists but contains only the header/comment | |
| 72 | | **missing** | Not created | File does not exist | |
| 73 | |
| 74 | Append-only files are never "partial" — they either have entries or they don't. |
| 75 | |
| 76 | ## Phase 2: Consistency Check |
| 77 | |
| 78 | Cross-reference files for contradictions. Only check files that are `complete` or `partial` (skip `empty` and `missing`). |
| 79 | |
| 80 | ### Cross-References to Check |
| 81 | |
| 82 | | Check | Files Involved | What to Look For | |
| 83 | |-------|---------------|-----------------| |
| 84 | | **Audience alignment** | `positioning.md` ↔ `audience.md` | Does positioning's "For:" match audience's primary persona? | |
| 85 | | **Voice-brand fit** | `voice-profile.md` ↔ `positioning.md` | Does the tone match the brand positioning? (e.g., playful voice + enterprise positioning = mismatch) | |
| 86 | | **Keyword-positioning alignment** | `keyword-plan.md` ↔ `positioning.md` | Do target keywords reflect the positioning angles? | |
| 87 | | **Competitor consistency** | `competitors.md` ↔ `positioning.md` | Are competitor names consistent across both files? | |
| 88 | | **A |