Marketing OS
One skill, fourteen modules, the full surface a working marketer touches. Built by tearing down the most-starred marketing skill repos on GitHub (44K-star collections down to 100-star craft pieces), keeping what worked, and fixing what every one of them got wrong.
Three rules hold across every module, because they are what the existing ecosystem uniformly lacks:
- Score everything. Findings without a number are hard to act on and easy to argue with. Every audit ends in a weighted 0-100.
- Ship artifacts, not advice. Write the replacement headline, the JSON-LD block, the email, the screenshot caption. "Your headline is vague" is worthless; the rewritten headline is the deliverable.
- State what you couldn't determine. Every report ends with an explicit gaps section. A stated gap is credible; a silently filled one destroys the document.
Setup — always do this first
Read brand-context.md if it exists (working directory, .claude/, or .agents/). It holds the product, ICP, positioning, proof, voice and constraints, and it changes nearly every judgement below. If absent: proceed, say the output is un-contextualised, and offer to generate the file from what you learn — brand-context.template.md in this skill is the blank.
Identify the task type, then open ONLY the module file(s) needed. Do not load all references — the routing below exists so you load ~1 file, not 13.
Routing
| The user wants to... | Module | Also often needed |
|---|---|---|
| Audit/review/score/roast a website, landing page, funnel; "why isn't this converting" | references/audit.md | audit-rubric.md |
| Get cited by ChatGPT/Perplexity/AI Overviews; GEO, AEO, llms.txt, "AI doesn't recommend us" | references/geo.md | geo-engines.md |
| Write/rewrite anything: headlines, ads, pages, "make this punchier", "sounds AI-written" | references/copy.md | copy-frameworks.md, slop-patterns.md |
| Hooks for ads/video: "write me 20 hooks", thumbstop problems, hook batches per segment | references/hooks.md | paid-ads.md, slop-patterns.md |
| Diagnose paid ads: CPM up, ROAS down, fatigue, "what to test next", competitor's ads | references/paid-ads.md | ads-diagnostics.md, hooks.md |
| Email: welcome/nurture/launch sequences, subject lines, deliverability | references/email.md | slop-patterns.md |
| LinkedIn/X posts, personal brand, content that doesn't read as AI | references/social.md | slop-patterns.md |
| Launch a product, feature, or Product Hunt run | references/launch.md | copy.md |
| Positioning, category, offer design, pricing page strategy | references/positioning.md | — |
| Tear down a competitor: site, ads, positioning | references/competitive.md | paid-ads.md |
| App Store / Google Play: listing, screenshots, keywords, install rate | references/app-store.md | store-specs.md |
| Read performance data honestly, design a test, "did this work?" | references/analytics.md | — |
Multi-part requests load multiple modules. "Audit my site and rewrite the homepage" = audit.md then copy.md, carrying the audit findings forward rather than re-researching.
Every de-slop pass — copy, email, social — runs slop-patterns.md before delivery. No exceptions. A reader who clocks output as AI-written discounts the claim, not just the prose.
Subagent fan-out
When subagents are available and the task is multi-dimensional, parallelize. This is the difference between a 15-minute audit and a 2-hour one.
Full marketing audit — spawn six, one per scoring dimension (messaging, conversion, search, competitive, trust, growth), each with the URL set and its slice of audit-rubric.md. Synthesize their sub-scores into the weighted total yourself; never delegate the synthesis, because the pattern across dimensions is the product.
GEO audit — spawn one per target question to query engines and record who gets cited, plus one for on-page extractability.
Competitor teardown — one per competitor.
Copy generation — one per angle family (problem/outcome/contrarian/identity/mechanism/offer) generating 3-4 variants each; you run the scoring panel on the merged set.
Paid ads — one per concept cluster for classification; you do the fatigue diagnosis on the merged concept table.
Rules for fan-out: give each subagent its exact reference slice and output schema; launch all in one turn; never let a subagent write the final report. If subagents are unavailable, work the dimensions sequentially in the order listed — the sequence is deliberate.
Shared output standards
Reports follow this skeleton, adapted per module:
# [Deliverable] — [subject]
[date] · Score: XX/100 (where applicable) · Basis: [what you had access to]
## The one thing
[The pattern behind the findings, one paragraph. If they read nothing else.]
## Scorecard / Findings
## Do these first
[3-5 items, each with the actual fix written out, effort S/M/L, confidence H/M/L]
## What's already working
[Never skip. All-negative reports read as generated.]
## What I couldn't determine
Write reports to files ([module]-[subject]-[date].md), not into the chat — these are documents people forward.
Copy deliverables lead with the copy, reasoning after. Recommended option first, scored runners-up, then the single sharpest test contrast.
Honesty spine — applies to every module
- All scores are heuristics from marketing judgement, not measured performance or anyone's internal ranking data. Say so in the report, every time.
- Never invent proof. No fabricated statistics, testimonials, customer names, or case studies — not as placeholders. Write
[NEED: figure]and flag it. A plausible fake number in marketing copy is how a client ships a false-advertising claim. - Never declare winners on small samples. If the data can't support the claim, say the result is directional and state what volume would settle it.
analytics.mdhas the discipline. - Do not anchor on scores, numbers, or conclusions the user supplies. Form an independent read first, then compare and say where you differ.
- Say when the problem isn't the deliverable. If the offer is weak or the positioning is undifferentiated, better copy won't fix it. One uncomfortable sentence saves a wasted quarter.
- Verify anything time-sensitive (platform rules, character limits, engine behavior, crawler user-agents) with search before shipping it, when search is available. These change on a scale of weeks.
- Never handle credentials or touch live campaigns/accounts. Diagnose and prescribe; the human executes in-platform.
Module directory
references/
├── audit.md Website & funnel audit workflow
├── audit-rubric.md Scoring bands for the six dimensions
├── geo.md AI-search citability workflow
├── geo-engines.md Per-engine behavior (Google AI, ChatGPT, Perplexity), llms.txt, crawlers
├── copy.md Generate wide → panel-score → de-slop
├── copy-frameworks.md Awareness stages, 12 angles, headline groups, offer construction, channel limits
├── hooks.md Hook engine: 3-component spec, 18 tactics, diagnostic funnel, fidelity ladder
├── slop-patterns.md AI-tell catalogue — run before delivering any prose
├── paid-ads.md Concept classification, fatigue, coverage gaps, production briefs
├── ads-diagnostics.md The fatigue decision table & honest data reads
├── email.md Sequence architecture, subject lines, deliverability
├── social.md LinkedIn/X writing that survives the feed
├── launch.md Launch playbook incl. Product Hunt
├── positioning.md Positioning, offer design, pricing strategy
├── competitive.md Competitor teardown protocol
├── app-store.md ASO: diagnosis, metadata, screenshots, reviews
├── store-specs.md App Store vs Play field rules (they invert)
└── analytics.md Test design, sample honesty, attribution traps
Chaining
Modules feed each other. Common chains, in order:
- audit → copy (audit found messaging problems; now write the fixes)
- audit → geo (page ranks but is never cited)
- paid-ads → hooks → copy (brief → hooks written to spec → body copy)
- paid-ads → production (an ad-generation MCP is connected, e.g. Arcads: generate the briefed assets directly — see the production handoff in
paid-ads.md) - competitive → hooks (cluster their hooks to read their strategy) → positioning (the open flank)
- positioning → copy → launch (new positioning cascades outward)
- app-store → copy (listing copy needs real work)
When chaining, carry evidence forward. Re-researching what a previous module established wastes the user's tokens and your coherence.