ChannelHelm Docs Docs index Command Deck v1.9 summary App
Operator guide · v1.9

Helm Decisions.
Your data, turned into next moves.

ChannelHelm already knows what your catalogue covers (Atlas), what everything cost (Ledger), how it performed (Signal), and which variants won (experiments). Helm Decisions joins all of it, once a day per brand, and writes a short queue of recommendations at /decisions. Every recommendation is plain arithmetic over your own numbers — there is no LLM anywhere in the decision path, so every claim on a card can be checked by hand.

The eight rules

KindFires whenAccept does
revisit_topicA topic carried ≥2 videos but hasn't been covered in 90+ days — proven material going stale.Creates a ranked idea on the Plan board.
followup_topicA high-weight topic was covered exactly once — strong material with no follow-up.Creates a ranked idea on the Plan board.
double_down_asset_typeOne asset type reaches at least 2× the median of your other types (≥3 assets each).Acknowledges — you prioritize it in upcoming packages.
budget_paceFrom day 7, month-to-date spend projects past the monthly budget.Acknowledges — raise the budget or trim fan-out.
prompt_winner_readyA prompt-version A/B decided. Winners are never auto-pinned.Acknowledges — you pin the prompt version deliberately.
stale_brandNo new packages ingested in 14+ days.Acknowledges — bulk ingest takes a backlog paste.
experiment_opportunity≥3 published videos and zero experiments ever.Acknowledges — start a title/thumbnail rotation.
roi_outlierAn asset type costs ≥3× the median per 1,000 reach this month.Acknowledges — cheaper model, fewer variants, or skip it.

Why dismissals stick

Every recommendation carries a dedupe key and the engine may create each key at most once, ever. Subject-stable keys (revisit_topic:local-first software) mean a dismissed topic never comes back. Period-scoped keys (budget_pace:2026-06) re-evaluate next month — the situation is genuinely new, so the question is asked again. The engine cannot nag: re-running it a hundred times produces nothing you haven't already seen.

Where the numbers come from

Coverage comes from Helm Atlas (topics extracted at zero LLM cost). Spend comes from the Helm Ledger (every LLM call, image, and render priced). Reach comes from Helm Signal (collect_signal pulling YouTube/Zernio analytics). Cost-per-1k-reach joins the two — and unmeasured content shows as "no data", never as "free". The same join powers the "Return on content" panel on /performance.

What it will never do

Decisions never gate anything: generation, dispatch, and budgets behave exactly as before whether the queue is empty or full. It never auto-applies a prompt winner, never auto-schedules, never auto-spends. It recommends; you decide. That split is by design and by contract.