Aaron Marketing Skills
120 marketing skills — brand narrative, SEO/GEO, influencer, paid ads, email, launch, social — on one contract.
English | Deutsch | Español | Français | Italiano | 日本語 | 한국어 | Português | 简体中文 | 繁體中文
A library of Claude Skills and slash commands that turns a chat agent into a marketing operator. Seven disciplines and a shared protocol layer, at a glance:
| Layer | Skills | Lifecycle (phase directories) | Framework → gate | Entrypoint |
|---|---|---|---|---|
| Narrative | 16 | trace → architect → land → evaluate | TALE truth / system / effectiveness profiles | /aaron-marketing:narrative |
| SEO/GEO | 16 | survey → implement → tune → evaluate | CORE-EEAT → content-quality-auditor · CITE → domain-authority-auditor |
/aaron-marketing:seo-geo |
| Social | 16 | explore → craft → host → observe | ECHO asset / program-maturity profiles | /aaron-marketing:social |
| 16 | setup → engage → nurture → deliver | SEND → email-quality-auditor (EQS) |
/aaron-marketing:email |
|
| Paid ads | 16 | research → orchestrate → activate → scale | ROAS → ad-account-auditor (RQS) |
/aaron-marketing:ad |
| Influencer | 16 | scout → target → activate → report | STAR → creator-content-auditor (SQS); fit-scorer produces the Suitability (S) read |
/aaron-marketing:influencer |
| Launch | 16 | research → assemble → mobilize → prove | RAMP preflight / execution / outcome profiles | /aaron-marketing:launch |
| Protocol layer | 8 | — (shared machinery, outside the phase flows) | 7 truth registries (entity · creator · offer/claims · consent · launch · channel · narrative) + HOT/WARM/COLD memory | — |
/aaron-marketing:auto routes any natural-language goal across all of it. Skills and commands are plain Markdown; small Bash/Python-stdlib runtimes provide hooks, validation, scoring, registry events, private operational run events, connectors, and CI checks (no pip, no build step). Every skill runs at Tier 1 with data you provide; connectors only automate retrieval or an explicitly approved mutation.
The authoritative typed topology is references/system-catalog.json; see the generated system architecture for the readable four-layer map, all 120 paths, registry owners, auditor sinks, and distribution profiles.
The pre-merge standalone repos are now signpost repos pointing here — seo-geo-claude-skills (final 20-skill line preserved at tag
v9.9.12) and influencer-marketing-agent-skills (final IMPACT line at tagstandalone-final). Sibling-repo policy: docs/repo-family.md.
Contents
- Why this library
- Install
- First run
- Capability profiles
- Architecture
- Skill catalog
- Commands
- Connectors & enhancement tiers
- Recommended workflows
- Repository layout
- Design philosophy
- Quality guards (CI)
- Contributing & project docs
- Disclaimer
- License
Why this library
| Principle | What it means in practice |
|---|---|
| Keyless by default | Every skill works at Tier 1 with data you paste or pull from free/first-party sources. Paid tools and MCP servers are an opt-in convenience, never a precondition. Paid-ads skills score from your own-account manual export — keyed ad APIs are never required. |
| Content-first, executable contracts | Skills remain Markdown. Small Bash/Python-stdlib runtimes make scoring, state, safety, and conformance deterministic without adding package dependencies. |
| One shared contract | All 120 skills expose the same seven sections and self-declare discipline + phase metadata, so the library behaves like one operating system: each skill knows its inputs, outputs, and the next best skill to hand off to. |
| Gated quality | Eight benchmarks drive eight auditor-class gates that emit structured, machine-checkable verdicts — not vibes. Success/failure/batch hooks surface invalid writes through bounded checks. Pre-commit/CI protect committed Git content from PII; they do not validate ignored runtime artifacts. |
| Truth lives in events | Seven append-only registry streams are canonical; owner-controlled projections expose entity, creator, claims, consent, launch, channel, and narrative state without destructive queues. |
| Memory across turns | A HOT/WARM/COLD memory model carries findings, scores, and open loops between skills and sessions, sanitized on the way in. |
| Plain voice | Skills ship an AI-slop detector and a banned-phrase list so output reads like a human wrote it. |
Install
Use it with Claude Code, any Agent Skills-compatible host, or a plain git clone:
| Host | Install |
|---|---|
| Claude Code | /plugin marketplace add aaron-he-zhu/aaron-marketing-skills then /plugin install aaron-marketing@aaron |
| Codex · Cursor · OpenCode · Antigravity · Gemini CLI · Copilot CLI · OpenClaw · Hermes · 70+ hosts | npx skills add aaron-he-zhu/aaron-marketing-skills |
| SkillHub.cn (中文社区) | skillhub install <frontmatter-slug> (e.g. aaron-campaign-architect or legacy unprefixed slugs like keyword-research) |
| Any host | git clone https://github.com/aaron-he-zhu/aaron-marketing-skills |
In Claude Code, marketplace add only registers the catalog — run /plugin install aaron-marketing@aaron (or pick it from /plugin) to actually enable the skills and commands. To pull a single skill on a generic host: npx skills add aaron-he-zhu/aaron-marketing-skills -s keyword-research. Browse the bundle on the skills.sh registry. Per-agent directories, frontmatter quirks, and what degrades outside the plugin: docs/agent-compatibility.md (verified 120/120 installable, 2026-07).
Installing the plugin adds nothing to your /mcp list — the MCP catalogue lives in docs/mcp-catalog.json, deliberately outside the plugin-root .mcp.json path that Claude Code auto-registers, so it is a copy-paste reference only (see Connectors).
First run
If your host supports automatic skill routing, just describe the goal:
Research keywords for my SaaS product targeting small teams
Find TikTok creators for a skincare launch and score their fit
Audit this Google Ads account before I scale — exports attached
Or use the slash commands — /auto for routing, or a discipline entrypoint:
/aaron-marketing:auto turn our pricing page into an AI-citable comparison hub
/aaron-marketing:seo-geo https://example.com/blog/my-article --phase tune
/aaron-marketing:auto infers intent and runs the smallest useful workflow, stopping only at blocking decisions. Every skill works with pasted data; optional tools are documented in CONNECTORS.md.
Capability profiles
A fresh project runs Lite, including when you installed the full Governed-ceiling plugin. Choose a larger profile only when the job needs its mechanisms:
| Profile | Adds | Typical use |
|---|---|---|
| Lite | The 120 authored skills, /auto, deterministic scoring, inline delivery, canonical-state reads |
Briefs, plans, drafts, analysis, and most day-to-day work |
| Pro | Connectors and explicitly requested saved audits | Tool-assisted research and persistent audit artifacts |
| Governed | Memory/registry writes, verified run evidence, deterministic context, controller, workflow and audit loops | Stateful, recoverable, independently verifiable operations |
v19 validation status: this is an engineering-validated release. The exact source passes CI, reproducible package checks, and real model/provider execution over simulated semantic fixtures. Those runs do not constitute real-project outcome evidence; real-project outcomes remain unvalidated. Lite remains the fresh-project default. Governed is available as an explicit capability choice, but availability does not validate Governed outcomes or Governed-by-default. That promotion requires the post-release cohort of 14 pilots + 70 paired Lite/Governed projects + 28 shadow projects.
The installed archive is a hard ceiling; the effective project profile may be
lower. Select the archive in the installer/admin surface, or select the logical
profile through a one-invocation --profile, AARON_MARKETING_PROFILE, or the
closed .aaron-marketing/profile.json project config. These controls do not add
a slash command: the public grammar remains exactly /auto plus the seven
discipline commands, and every profile preserves the seven 4×4 loops and their
TALE/SITE/ECHO/SEND/ROAS/STAR/RAMP acronyms.
Profiles never disable consent, claims, PII/secret handling, external-mutation
approval, audit-verdict integrity, or release provenance. Switching profiles
also never deletes existing state. Standalone one-folder installs have a Lite
physical ceiling and degrade fail-closed when a root runtime is absent.
Configuration, archive selection, legacy-project migration, and
LEGACY_RUN_BLOCKED recovery are documented in
references/capability-profiles.md.
Architecture
The shared skill contract
Every skill follows the same activation contract — seven sections in a fixed order:
- Trigger / when-to-use — when the skill should fire.
- Quick Start — copy-paste prompts.
- Skill Contract — Expected output · Reads · Writes · Promotes · Done-when · Primary next skill.
- Handoff Summary — the standard hand-off shape so the next skill picks up cleanly.
- Data Sources —
~~categoryplaceholders, each with a keyless Tier-1 path. - Instructions — the numbered method (treats all exports as untrusted input).
- Next Best Skill — where to go next (with visited-set + max-depth termination rules).
Every skill also self-declares metadata.discipline (narrative / seo-geo / influencer / ad / email / launch / social / protocol, where ad is Paid Ads/ROAS) and metadata.phase, so routing and clustering work uniformly. The contract is documented once in skill-contract.md; the shared cross-skill state lives in state-model.md.
The system: a four-layer marketing operating system
One brand voice, expressed through five always-on channels, concentrated into launch moments, all reading and writing a shared system of record. Seven disciplines, four altitudes — a system, not a pile.
| Layer | Adopt | Disciplines | Cadence |
|---|---|---|---|
| L1 · Strategy — what we say / who we are | crawl | Narrative · TALE | always-on |
| L2 · Channels — always-on engines that express the strategy (owned → bought) | walk | SEO/GEO · CORE-EEAT + CITE · Organic Social · ECHO · Email · SEND · Paid Ads · ROAS · Influencer · STAR | always-on (influencer episodic-leaning) |
| L3 · Orchestration — the time-boxed moment across channels | run | Product Launch · RAMP | episodic |
| L4 · Protocol — the shared system of record | — | 7 truth registries + working memory · 8 auditor gates · one skill contract | — |
Narrative is the message; the channels are the mediums that express it. Each core builder records the exact canon ID/version and claims-projection offset it used, or an explicit approved fallback/block. Each discipline's 4-phase loop lives inside its layer (Narrative = Trace → Architect → Land → Evaluate).
All seven use phase directories in the catalog order: Narrative → SEO/GEO → Social → Email → Paid → Influencer → Launch. Note "activate" means creator outreach for influencer but account-gating for paid ads — same word, discipline-specific scope.
Quality system: eight frameworks, eight gates
Eight benchmarks make "good" measurable. Each defines dimensions, a rollup method, and a small set of veto items (hard fails that cap or block a score regardless of the rest):
| Framework | Scores | Items / dimensions | Rollup | Veto items |
|---|---|---|---|---|
| TALE | Brand narrative Truth / Architecture / Landing / Evidence | T / A / L / E | Separate truth, system, and effectiveness profile results; no overall composite | T1/A1/L1/E1 |
| CORE-EEAT | Content quality with diagnostic CORE/GEO and EEAT/SEO views | 80 items / 8 dimensions | complete profile-weighted result; diagnostic views are not separate totals | T04, C01, R10 |
| CITE | Domain authority & citation trust | 40 items / 4 dimensions | arithmetic weighted mean | T03, T05, T09 |
| STAR | Influencer Suitability / Trust / Appeal / Return | S / T / A / R · 40 items / 4 dimensions | SQS = floor(profile-weighted mean) (arithmetic) | STAR-S2/S6, STAR-T1/T2/T3 |
| ROAS | Paid ads Return / Offer / Audience / Spend-efficiency | R / O / A / S | RQS = floor(profile-weighted mean) (arithmetic) | R1/R2/O1/O2/A1 |
| SEND | Email marketing Sender-integrity / Engagement / Nurture / Direct-response | S / E / N / D | EQS = floor(profile-weighted mean) (arithmetic) | S1/S2/N1/D1 |
| RAMP | Product launch Readiness / Assets / Momentum / Proof | R / A / M / P · 40 stable IDs | Separate preflight, execution, and outcome profile results; never average time horizons | R1/A1/M1/P1 (framework-qualified — distinct from ROAS R1/A1) |
| ECHO | Organic social Embeddedness / Craft / Hosting / Observability | E / C / H / O · 40 stable IDs | One asset-gate or program-maturity profile per run; never combine asset and operating constructs | E1/C1/C2/H1/H2/O1 (framework-qualified — distinct from ROAS O1/O2) |
Each framework is enforced by an auditor-class gate — a skill that emits a typed artifact (class: auditor-output) checked by the deterministic validator and bounded lifecycle hooks. Repository CI regression-tests the validator and contract; it does not inspect ignored host-runtime artifacts. Gates are workflow steps, so each lives in its discipline and is counted there:
| Gate | Framework | Lives in | Verdict |
|---|---|---|---|
| narrative-quality-auditor | TALE profile gate | narrative/evaluate/ (narrative) |
Separate truth/system/effectiveness results before adoption |
| content-quality-auditor | CORE-EEAT | seo-geo/tune/ (SEO/GEO) |
SHIP / FIX / BLOCK before publishing |
| domain-authority-auditor | CITE | seo-geo/evaluate/ (SEO/GEO) |
SHIP / FIX / BLOCK / UNDECIDED; trust labels are explanatory only |
| creator-content-auditor | STAR SQS | influencer/activate/ (influencer) |
SHIP / FIX / BLOCK / UNDECIDED plus creator-facing translation |
| ad-account-auditor | ROAS RQS | ad/activate/ (paid) |
SHIP / FIX / BLOCK before budgets scale |
| email-quality-auditor | SEND EQS | email/deliver/ (email) |
SHIP / FIX / BLOCK before send |
| launch-readiness-auditor | RAMP lifecycle-profile gate | launch/mobilize/ (launch) |
SHIP / FIX / BLOCK for one declared lifecycle read |
| social-quality-auditor | ECHO asset/program gate | social/host/ (social) |
SHIP / FIX / BLOCK for one declared unit/profile |
Shared veto policy: one verified veto caps the final score at min(raw, 59); two or more verified vetoes produce status: DONE + verdict: BLOCK and no final score. Missing evidence is Unknown, resulting in NEEDS_INPUT/UNDECIDED, never an automatic failure. Gate mechanics live in auditor-runbook.md and are executed by the typed scorer.
The protocol layer
The protocol/ directory holds the shared truth & memory machinery that sits outside the discipline phase-flows — 8 skills, counted separately:
| Skill | Job | Anchored to | Canonical stream / role |
|---|---|---|---|
| entity-registry | Owns machine-facing entity identity and recognition facts | SEO/GEO | memory/events/entities.ndjson |
| creator-registry | Owns creator identity, audience, rights, terms, and compliance facts | influencer | memory/events/creators.ndjson |
| offer-claims-registry | Owns accepted offer/claim wording and substantiation pointers | paid | memory/events/claims.ndjson |
| consent-registry | Owns pseudonymous consent/suppression facts and live safety state | memory/events/consent.ndjson |
|
| launch-registry | Owns launch stage, dates, submissions, manifests, and outcomes | launch | memory/events/launches.ndjson |
| channel-registry | Owns channel state, cadence, voice pointers, and UGC permissions | social | memory/events/channels.ndjson |
| narrative-registry | Owns complete versioned narrative canon records | narrative | memory/events/narrative.ndjson |
| memory-management | Manages authorized HOT/WARM/COLD working notes without impersonating a registry | all disciplines | non-canonical memory/ working state |
The registries follow a sole-writer rule (other skills submit via registry-events.py proposal events), and they curate — the gates judge. The genuinely horizontal layer beneath everything is the references/ protocols (auditor-runbook, state-model, skill-contract, context-resolution, runtime-protocol, audit-loop, humanizer-slop, measurement-protocol) — shared by design as documents, not skills.
Memory & automation hooks
Memory is temperature-tiered, so context survives across skills and sessions without bloating the prompt:
| Tier | Location | Behavior |
|---|---|---|
| HOT | memory/hot-cache.md |
Auto-loaded each session; capped at 80 lines AND 25 KB (whichever trips first). |
| WARM | memory/<subdir>/ |
Per-skill working state and permissioned audit artifacts; registry projections are separate rebuildable views. |
| COLD | memory/archive/ |
Demoted/older records, kept for recall. |
Opt-in run evidence lives separately under memory/runs/<run-id>/: append-only metadata events, a derived session tree, turn snapshots, save points, and run envelopes. It is Git-ignored, retention-bounded, and explicitly non-authoritative — it cannot accept a registry proposal or authorize an external action. The stdlib run-events.py runtime and Runtime Protocol enforce this boundary.
Before a turn snapshot, the stdlib context-resolver.py can turn an explicit candidate request into a hash-bound context manifest. It deterministically applies required/optional/forbidden policy, authority and freshness order, conflict/supersession rules, sensitivity and byte budgets, content dedupe, and typed omission reasons. It does not perform semantic retrieval or copy source content into the manifest. /auto likewise reads a generated index plus at most three discipline/cross-discipline routing shards, while one maintenance source preserves all 88 cases.
The optional stdlib audit-loop.py adds a bounded proposal-only outer loop around validated FIX audits. It records immutable proposal, owner-review, non-empty intervention-evidence, and re-audit steps under the same ignored run namespace, with leases, idempotency, deadlines, deterministic retry timing, and 1–3 improvement cycles. Each v2 transition reserves its selected-ancestry event anchor before materializing the exact step; a missing step is recoverable only by replaying the same request, while the public loop-step command is verification-only. The final event slot stays reserved for terminal sealing. Runtime-derived loop_closure isolates sibling branches: success requires exact terminal loops; waiting/needs-input/blocked may retain exactly covered active loops; failed/aborted may preserve bounded unresolved evidence without claiming convergence. The loop never edits the audited target, performs an intervention, accepts registry truth, or authorizes an external mutation; only a distinct medium/high-confidence SHIP re-audit that passes the observation-time provenance floor can converge. audit-trends.py deduplicates exact artifact bytes, links all exact-hash edges through the verified loop graph (including non-adjacent series entries), enforces aggregate scan budgets, escapes terminal controls in human output, and reports relapse, oscillation, context/catalog drift, evidence growth, and confidence changes without guessing causality from display order.
Semantic conformance is also layered. The strict corpus projects 572 authored cases, 88 generated routing cases, and 40 generated auditor prompt-contract variants into one 700-case runner model. A fixed 24-case smoke profile, change-aware impact selection, and full nightly profile are credential-free to plan in CI. Optional protocol-v2 host adapters add hash-bound real execution provenance and keep behavior failures distinct from host failures; a real adapter run over a simulated case remains simulated case evidence. The eight generated auditor prompt contracts bind their skill, catalogs, framework rules, and runtime sources without becoming a second topology inventory; see the semantic evaluation docs for the source-only maintenance workflow.
Hooks (hooks/hooks.json, runner hooks/claude-hook.sh) wire seven Claude Code events:
| Event | Matcher | What it does |
|---|---|---|
SessionStart |
startup|resume|clear|compact |
Injects a combined-budget sanitized hot-cache/checkpoint/integrity view and, only when AARON_ACTIVE_RUN_ID is explicit, a bounded untrusted run-resume summary. Per-source truncation is labeled; symlinked records are rejected. |
UserPromptSubmit |
(all) | Lightweight per-prompt context hook; emits metadata-only turn lifecycle when an active run and stable turn ID are explicit. |
PreToolUse |
known write-capable tools | Exact-path direct memory/** writes must be Git-ignored; opaque shell/MCP memory mutations are unsupported and denied when identified. Registry/run runtimes repeat exact atomic-path checks. An active run records only hashed IDs and typed metadata. |
PostToolUse |
known write-capable tools | After successful writes, audits the full operational-memory namespace, validates the exact audit target or bounded reserved-sink sweep, and closes an opted-in tool lifecycle event. |
PostToolUseFailure |
known write-capable tools | Runs the same post-state checks after a reported failure and records a typed failed lifecycle event when tracing is active, because a failed command may still have written files. |
PostToolBatch |
(all) | Rechecks operational memory and the complete reserved sink after each parallel tool batch. |
Stop |
(all) | Performs a final bounded sweep and can block once for repair. The required stop_hook_active loop guard permits the subsequent stop. Pre-commit/CI remain Git/PII backstops only; they do not validate ignored runtime artifacts. |
The Artifact Gate is framework-agnostic — the same hook validates TALE, CORE-EEAT, CITE, STAR, ROAS, SEND, RAMP, and ECHO artifacts with no per-framework code.
Skill catalog
Skill links open each SKILL.md. Expand the Details under each discipline for a one-line purpose per skill. Catalog order follows the four-layer strata — Narrative (L1 · Strategy) first, the five always-on channels next, Launch (L3 · Orchestration), then the Protocol layer.
Narrative — TALE (16) · 📖 Discipline guide
Four phase directories under narrative/ (4 skills each) follow the TALE loop (Trace → Architect → Land → Evaluate); the gate (⛩ narrative-quality-auditor) sits in Evaluate. It runs truth, system, and effectiveness profiles separately; a full review links three results and never averages them. Narrative is the L1 · Strategy layer: one brand voice the five always-on channels inherit. It absorbs positioning — positioning-mapper stays physically in launch/ but reads logically as the front of TALE Trace.
| Skill | TALE lever | What it does |
|---|---|---|
| narrative-baseline-mapper | T | Capture the current, actual brand story as it lives across owned surfaces — the honest starting point before any redesign. |
| category-narrative-mapper | T | Map the category's dominant narratives and named alternatives so the brand can claim a defensible, differentiated position. |
| audience-belief-mapper | T | Surface what the target audience already believes, doubts, and cares about — the beliefs the narrative must move. |
| positioning-truth-tracer | T | Trace every positioning claim back to substantiation, retiring anything unsupported (upstream of the T1 truth veto). |
| strategic-narrative-designer | A | Design the core strategic narrative — the change-in-the-world story arc, stakes, and resolution the brand leads with. |
| message-system-architect | A | Architect the message system — tagline, pillars, proof points, and per-audience angles as one coherent structure. |
| brand-language-codifier | A | Codify voice, tone, lexicon, and do/don't language so every channel sounds like one brand. |
| story-bank-builder | A | Build a reusable bank of proof stories, customer narratives, and analogies channels can draw from. |
| narrative-cascade-planner | L | Plan how the narrative cascades into each channel and moment without dilution or drift. |
| pitch-narrative-builder | L | Shape the narrative into pitch form — deck spine, demo story, and investor/press framing. |
| narrative-enablement-kit | L | Enablement kit that lets every team tell the story consistently — talk track, FAQ, and message map. |
| proof-point-packager | L | Package proof points into channel-ready, claims-ledger-aware assets. |
| ⛩ narrative-quality-auditor | Truth / system / effectiveness profiles | Auditor-class TALE gate: scores one typed profile, enforces T1/A1/L1/E1 when applicable, and emits SHIP/FIX/BLOCK; full mode preserves three linked results. |
| message-test-designer | E | Design message tests — variant matrix, audience cells, and resonance read for the strategic narrative. |
| narrative-resonance-monitor | E | Track how the narrative is landing across channels from keyless sources (proxy data labeled). |
| narrative-drift-monitor | E | Watch for narrative drift — where channels have wandered off the approved canon — and flag corrections. |
Reused cross-discipline (counted in their home phases, not duplicated): positioning-mapper (logically the front of Trace, physically in launch/), message-house-builder, audience-mapper, share-of-voice-tracker (resonance denominator). No new connector — narrative resonance reuses bluesky.py / gdelt.py / tavily.py / wayback.py — see tale-benchmark.md.
SEO/GEO — SITE (16) · 📖 Discipline guide
Four phase directories (4 skills each) plus the discipline's two quality gates (marked ⛩).
| Phase | Skills |
|---|---|
| Survey | keyword-research, competitor-analysis, serp-analysis, content-gap-analysis |
| Implement | content-writer, [geo-content-optimizer](https://github.com/aaron-he-zhu/aaron-marketing-skills/blob/main/seo-geo/implement/geo-conten |
No comments yet
Be the first to share your take.