marketing-guru — orchestrate the growth loop
Make a channel go viral by running a closed feedback loop backed by a persistent journal. You don't guess once — you bet, deploy, measure against the channel's own history, learn, and bet again. The creative steps are their own lego-block skills any agent can use alone; this skill is the conductor, and it also owns the thin read/pick/report helpers.
┌──────────────────────────────────────────────────────────────┐
│ IDEATE → BACKLOG → DEPLOY → (wait 48-72h) → MEASURE → LEARN │
│ ▲ │ │
│ └──────────── strategy + next_seeds ◀─────────────────┘ │
└──────────────────────────────────────────────────────────────┘
The skills (invoke any one directly)
| Step | Skill / here | One-liner | CLI it drives |
|---|---|---|---|
| setup | youtube-branding | channel identity: banner/avatar/logo + keywords/description (once / on rebrand) | studio brand |
| 0 | guru: journal | read phase + strategy + bets (start here) | journal · recall |
| 1 | marketing-ideate | agent generates falsifiable bets → backlog | add (· ideate fallback) |
| 2 | guru: backlog | pick the next bet (bandit, 60/40 fallback) | backlog · bandit |
| 3 | marketing-deploy | produce+publish via film-maker, then link | studio run · link |
| 4+5 | marketing-measure-learn | score virality, snapshot age buckets, slice hidden relations, then reflect → strategy (wait 48-72h) | measure · snapshots · insights · slice · compare · strategy |
| — | guru: report | write the growth brief to disk | report |
| ⟳ | marketing-autopilot | run the WHOLE loop on a schedule (deferred-measurement aware) | tick · autopilot |
Design rule: the thinking (what to make, which bet, what was learned) is the agent's,
done in the skills; the studio marketing CLI commands are helpers — pure I/O for persistence
(add/strategy), retrieval (recall/backlog/journal/bandit), and deterministic work
(link, measure). ideate/learn keep scripted LLM fallbacks for quick non-agent passes.
Run the whole loop
- youtube-branding (once, before the loop) — if the channel has no banner/avatar/logo
yet (or is rebranding), generate the brand kit with
studio brand <spec.json>. - journal (below) — read the current phase + direction first.
- marketing-ideate — web-search trends + recall winners → write bets to the backlog.
- backlog (below) — pick the next bet.
- marketing-deploy — produce + publish (film-maker), sized to the per-video budget, then link.
- wait 48-72h+ for watch time to accrue.
- marketing-measure-learn — score, then reflect into strategy.
- Back to 2 — now exploiting what won. report (below) snapshots the cycle.
To run all of this hands-off on a schedule, use marketing-autopilot — it asks the engine what's due each tick (measure / learn / ideate / produce / idle) and does that one action, handling the 48–72h measurement-maturation wait for you.
The cold-start rule (stated once, here): relative virality is meaningless until ~10 videos
exist. Deploy the first 10 as diverse EXPLORATION bets; only then does measure rank winners
and learn start exploiting. The journal tracks the phase automatically (Journal.in_cold_start).
Full memory + phase model: docs/50-marketing/memory.md.
Everything is per-channel — pass --channel <name> (mirrors the publish OAuth token
token_<name>.json). Omit for the default journal.
journal — read the loop's state (read-only)
The first thing to run before any decision, so bets reflect the current direction.
studio marketing journal --channel <name> # phase + strategy + every bet's outcome table
studio marketing backlog --channel <name> # planned (queued) bets + explore/exploit mix
studio marketing recall "<query>" --channel <name> # past MEASURED bets most relevant to a query
You'll see the phase (COLD START n/10 vs OPTIMIZING), the Strategy (niche,
current_direction, winning/losing patterns, next_seeds), and a table of every bet (id · status ·
idea · virality · percentile · outcome). Durable store: runs/_marketing/<name>/journal.json
(machine truth) + journal.md (human render, regenerated on save — never hand-edit). Per-video
snapshots: runs/<run_id>/08_stats.json, 08_comments.json.
backlog — pick what to make next
The backlog = every journal entry with status: planned. Review it, then choose the next bet to
hand to marketing-deploy. The CLI lists; YOU decide.
studio marketing backlog --channel <name> # planned bets tagged explore/exploit + counts
studio marketing bandit --channel <name> # the SHIPPED selector's learned theme/tag win-rates
- Primary selector: the shipped Thompson bandit (T8) over theme+tags —
studio marketing banditshows what it favors and how it ranks the backlog; the autopilot picks with it. - Fallback heuristic (manual picks): ~60% exploitation (proven winning patterns) / ~40% exploration (fresh themes) — use this when you're choosing by hand rather than via the bandit.
- Cold-start (<10 deployed): everything is exploration regardless of tags — no baseline yet.
Sanity-check a candidate isn't a near-dupe of a past loser with recall "<idea/theme>". Empty
backlog → run marketing-ideate first. No delete command yet (roadmap T2) — edit
runs/_marketing/<name>/journal.json to prune, or leave stale bets unpicked.
report — write the growth brief
studio marketing report --channel <name> --provider <llm>
Writes runs/_marketing/<name>/report.md — the channel's phase, current direction, winners/losers
with their assumptions (held or refuted), and the next bets. Run it after marketing-measure-learn
so it reflects the latest cycle. For a quick interactive read instead of a file, just run
studio marketing journal.
analysis — find hidden relations
For strategy changes that depend on production choices, do not infer from the flat journal table alone. Ask the CLI for age-normalized slices across theme, cost, music, sound, animation, effects, and providers:
studio marketing due-snapshots --channel <name>
studio marketing snapshots --channel <name> --buckets 1,3,7,14,30
studio marketing insights --channel <name> --json
studio marketing slice --channel <name> --bucket 7d --group-by theme,effects,animators --metric virality
studio marketing compare --channel <name> effects=glitch --bucket 14d --metric virality
studio marketing export --channel <name> --format csv
Use 1d for early hook/packaging velocity, 3d for first maturation, 7d for retention and
durability, 14d for stronger winners/losers, and 30d for long-tail formats. Treat every slice
as association until repeated across enough examples; low n is a hypothesis generator, not a
rule.
Setup check
cd /Users/dasein/dev/slope-studio
source .venv/bin/activate 2>/dev/null || { uv venv && source .venv/bin/activate && uv pip install -e ".[fal,youtube]"; }
studio marketing --help
studio yt-channel --channel <name> # confirm WHICH channel the token points at
Always report
The channel's phase (cold-start N/10 vs optimizing), latest winners/losers with their assumptions (held or refuted), the current direction, and the next concrete bets. Be honest when a bet's assumption was refuted — that's the point.
Deeper references
- Memory & phases:
docs/50-marketing/memory.md— the canonical reference for how the journal/recall/strategy/cold-start persist and self-improve. references/loop.md·references/scoring.md·references/analytics.md·references/trends.md.- Architecture + full command reference:
docs/50-marketing/. - Producing videos: the film-maker skill. Why this shape:
docs/20-research/self-improving-loop.md.