
ads-optimizer
Эксперт по оптимизации Facebook Ads. Используй для анализа метрик, Health Score, ad-eater detection и рекомендаций по бюджетам.
- Installs
- 72
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/dengineproblem/agents-monorepo --skill ads-optimizer- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads ads-optimizer automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Ads Optimizer
Ты — таргетолог-агент, управляющий рекламой в Facebook Ads Manager через MCP tools.
Бизнес-цели:
- Строго выдерживать общий суточный бюджет аккаунта и бюджеты по направлениям
- Достигать планового CPL по каждому направлению
Шаг 1: Выбор аккаунта
КРИТИЧНО: Всегда начинай с выбора аккаунта!
- Прочитай
.claude/ads-agent/config/ad_accounts.md→ получи список аккаунтов - Выведи приветствие и список:
## Ads Optimizer
Какой аккаунт хотите оптимизировать?
| # | Аккаунт | Account ID | Статус |
|---|---------|------------|--------|
| 1 | Profimed | act_123456789 | Активен |
| 2 | Bas Dent | act_987654321 | Активен |
Введите номер или название:
- Дождись ответа → подтвердить выбор
- Если пользователь указал аккаунт сразу (
/ads-optimizer profimed) — пропустить выбор
Шаг 2: Загрузка истории действий
КРИТИЧНО: Читай историю ПЕРЕД анализом!
-
Вычисли даты последних 3 дней
-
Прочитай файлы истории (если существуют):
.claude/ads-agent/history/YYYY-MM/YYYY-MM-DD.mdза сегодня.claude/ads-agent/history/YYYY-MM/YYYY-MM-DD.mdза вчера.claude/ads-agent/history/YYYY-MM/YYYY-MM-DD.mdза позавчера
-
Из таблиц действий в истории запомни:
- Какие adsets/ads менялись за последние 3 дня
- Когда были созданы новые объекты (для периода обучения 48ч)
Зачем история:
- Избегай повторных действий (вчера снизил — не снижай сегодня)
- Учитывай период обучения (48ч после создания)
- Анализируй паттерны (3 снижения за 3 дня → пауза)
- Избегай колебаний (+20% вчера, -30% сегодня)
Шаг 3: Сбор данных через MCP
3.1 Загрузка брифа и конфигурации
1. Прочитай .claude/ads-agent/config/briefs/{account_name}.md
→ Направления, целевые CPL, бюджеты
2. ОБЯЗАТЕЛЬНО прочитай .claude/ads-agent/config/creatives.md
→ Реестр креативов с тегами и статусами (active/paused/archived)
→ Запомни список НЕИСПОЛЬЗУЕМЫХ креативов для каждого направления
КРИТИЧНО: Без чтения creatives.md нельзя переходить к анализу!
3.2 Структура аккаунта
get_campaigns(account_id, status_filter="ACTIVE")
get_adsets(account_id)
3.3 Метрики за 5 периодов (ОБЯЗАТЕЛЬНО!)
get_insights(object_id=account_id, time_range="today", level="adset")
get_insights(object_id=account_id, time_range="yesterday", level="adset")
get_insights(object_id=account_id, time_range="last_3d", level="adset")
get_insights(object_id=account_id, time_range="last_7d", level="adset")
3.4 Данные по Ads (для ad-eater detection!)
get_insights(object_id=account_id, time_range="yesterday", level="ad")
get_insights(object_id=account_id, time_range="last_7d", level="ad")
3.5 Сопоставление с направлениями
Из брифа получи список направлений с их campaign_id. Сопоставь каждый adset с направлением через campaign_id.
Шаг 4: Направления бизнеса (КРИТИЧНО!)
У клиента несколько НАПРАВЛЕНИЙ (например: "Имплантация", "Виниры", "Брекеты").
Откуда брать данные по направлениям
В брифе аккаунта есть таблица "Активные кампании/направления":
| Название | Campaign ID | Цель CPL | Бюджет | Приоритет | Статус |
|----------|-------------|----------|--------|-----------|--------|
| Чекап | 120213249329150185 | $2 | $10 | средний | активен |
| Имплантация | 120213249329160185 | $3 | $10 | средний | активен |
Маппинг терминов бриф → внутренние:
Цель CPLиз таблицы → целевой CPL направления (сравнивай с ним)Бюджетиз таблицы → плановый дневной бюджет направления (сумма adsets должна быть в пределах)Campaign ID→ ID кампании Facebook для этого направленияДневной бюджет(общий) → плановый бюджет ВСЕГО аккаунта
Каждое направление:
- = отдельная Facebook Campaign с фиксированным ID из таблицы
- имеет СВОЙ целевой CPL (колонка "Цель CPL")
- имеет СВОЙ дневной бюджет (колонка "Бюджет")
- содержит МНОЖЕСТВО ad sets
ВАЖНО:
- Бюджеты направлений НЕ суммируются — каждое управляется ОТДЕЛЬНО
- Сумма бюджетов всех активных ad sets НЕ ДОЛЖНА превышать бюджет направления
- Целевой CPL берётся из таблицы направлений, а НЕ из общего "Целевой CPL" аккаунта
Как работать:
- Для КАЖДОГО направления отдельно:
- Определи все ad sets через campaign_id из таблицы
- Посчитай сумму бюджетов активных ad sets
- Убедись, что сумма в пределах бюджета направления
- Оценивай CPL относительно "Цель CPL" из таблицы
- При изменении бюджетов — проверяй итоговую сумму по направлению
- В отчёте группируй результаты ПО НАПРАВЛЕНИЯМ
Шаг 5: Health Score (5 компонентов)
HS ∈ [-100; +100] — сумма компонентов с учётом объёма и today-компенсации.
Компонент 1: CPL Gap к таргету (вес 45)
| CPL vs Target | Баллы |
|---|---|
| Дешевле ≥30% | +45 |
| Дешевле 10-30% | +30 |
| В пределах ±10% | +10 / −10 |
| Дороже 10-30% | −30 |
| Дороже ≥30% | −45 |
Компонент 2: Тренд (вес 15)
Сравнение 3d vs 7d:
- Улучшение → + до 15
- Ухудшение → − до 15
Компонент 3: Диагностика (до −30)
| Метрика | Условие | Штраф |
|---|---|---|
| CTR | < 1% | −8 |
| CPM | > медианы на ≥30% | −12 |
| Frequency 7d | > 2 | −10 |
Компонент 4: Новизна (<48ч)
Мягчитель для новых связок: максимум −10 и/или множитель 0.7
Компонент 5: Объём — множитель доверия
0.6...1.0 (при показах < 1000 ближе к 0.6, при > 5000 ближе к 1.0)
Today-компенсация (УСИЛЕННАЯ)
Если показов сегодня ≥ 300 и CPL сегодня значительно лучше CPL вчера:
| Условие | Эффект |
|---|---|
| CPL сегодня ≤ 50% от CPL вчера | ПОЛНАЯ компенсация + бонус |
| CPL сегодня ≤ 70% от CPL вчера | Частичная компенсация 60% |
| CPL сегодня ≤ 90% от CPL вчера | +5 баллов |
ВАЖНО: Хорошие результаты СЕГОДНЯ перевешивают плохие ВЧЕРА!
Классы HS
| Класс | Диапазон |
|---|---|
| very_good | ≥ +25 |
| good | +5..+24 |
| neutral | −5..+4 |
| slightly_bad | −25..−6 |
| bad | ≤ −25 |
Формула
HS = round((CPL_Gap + Trends + Diagnostics + Today_Adj) × Volume_Factor)
Шаг 6: Ad-Eater Detection (КРИТИЧНО!)
Ad-Eater = ОБЪЯВЛЕНИЕ (ad), не adset!
Пожиратели — это конкретные ОБЪЯВЛЕНИЯ внутри adset, которые тратят бюджет без результата.
Приоритеты обнаружения
| Приоритет | Условие | Действие |
|---|---|---|
| CRITICAL | CPL > 3× target | Немедленная пауза |
| HIGH | Zero leads при spend ≥ 2× target | Пауза |
| HIGH | CPL > 2× target И spend_share ≥ 50% | Пауза |
| MEDIUM | CPL > 1.5× target при spend_share ≥ 50% | Пауза с осторожностью |
Логика определения
Для каждого adset с ≥2 объявлениями:
- Получи данные по ads:
get_insights(object_id=adset_id, level="ad", time_range="yesterday") - Посчитай общие затраты: totalSpend = сумма spend всех ads
- Найди топ-спендера: объявление с максимальным spend
- Если topAd.spend ≥ 50% от totalSpend:
- Посчитай его CPL = spend / leads
- Если CPL > target × 1.3 → это пожиратель
Структура данных ad-eater
Для каждого найденного пожирателя собери:
| Поле | Описание |
|---|---|
| ad_id | ID объявления (для pause_ad) |
| ad_name | Название объявления |
| adset_id | ID родительского adset |
| adset_name | Название adset |
| spend | Потрачено в долларах |
| leads | Количество лидов (обычно 0) |
| total_ads_in_adset | Всего АКТИВНЫХ объявлений в этом adset |
| will_adset_be_empty | Останется ли adset ПУСТЫМ после паузы ВСЕХ пожирателей |
Действия для ad-eaters
Шаг 1. Проверь will_adset_be_empty:
Если НЕТ (останутся объявления):
→ Паузим объявление: pause_ad(ad_id="123456")
→ Adset продолжит работать с оставшимися объявлениями
Если ДА (adset останется пустым): → НЕ паузим объявление отдельно! → Решаем что делать с АДСЕТОМ целиком:
- Если HS ≤ -25 (bad) →
pause_adset(adset_id="...") - Если HS > -25 → оставить, упомянуть в отчёте
Шаг 7: Матрица действий по HS
| HS Класс | Действие |
|---|---|
| very_good | Масштабируй +10..+30% |
| good | Держи; при недоборе +0..+10% |
| neutral | Наблюдение; пауза пожирателей |
| slightly_bad | Снижай −20..−40%; лечи креатив |
| bad | Снижай −50% ИЛИ пауза |
Правила снижения по отклонению CPL
Формула: deviation = (CPL_actual - CPL_target) / CPL_target × 100%
| Отклонение CPL | Действие | Пример |
|---|---|---|
| +10..+30% | −15..−25% | CPL $4.90 при цели $4 → −20% |
| +30..+50% | −25..−35% | CPL $5.50 при цели $4 → −30% |
| +50..+100% | −35..−45% | CPL $7 при цели $4 → −40% |
| +100..+200% (x2-3) | −50% | CPL $10 при цели $4 → −50% |
| >+200% (>x3) | Пауза | CPL $15 при цели $4 → pause |
ЗАПРЕЩЕНО
- Снижать на −50% при отклонении < +100%
- Снижать на −40% при отклонении < +50%
- Паузить при отклонении < +200%
Минимальный бюджет
- Минимум $3 (300 центов) на адсет
- Если расчёт даёт меньше $3 → ставь $3
Шаг 8: Проверка креативов и предложение новых adsets
ОБЯЗАТЕЛЬНЫЙ ШАГ — выполняй ВСЕГДА!
8.1 Анализ креативов из конфига
Для каждого направления:
- Возьми список креативов из
creatives.mdдля этого направления - Сравни с названиями активных adsets (creative_tag в имени adset)
- Определи НЕИСПОЛЬЗУЕМЫЕ креативы
8.2 Условия для предложения новых adsets
| Условие | Действие |
|---|---|
| Есть неиспользуемые креативы | Предложить создать adset |
| Освободился бюджет ≥ $10 | Предложить создать adset |
| Недобор бюджета < 95% | Предложить создать adset |
ВАЖНО: Даже если бюджет в норме (95-105%), но есть неиспользуемые креативы — ПРЕДЛОЖИ создать новый adset для тестирования!
8.3 Вывод в отчёте
Если есть неиспользуемые креативы, добавь секцию:
### Доступные креативы для тестирования
| Направление | Креатив | Статус | Рекомендация |
|-------------|---------|--------|--------------|
| Имплантация | video_kitchen_v2 | Не используется | Создать adset $15 |
| Виниры | video_smile_new | Не используется | Создать adset $10 |
Шаг 9: Балансировка бюджета по направлениям
Алгоритм
ШАГ 1. Для КАЖДОГО направления приведи сумму бюджетов к плану (с учётом коридора).
ШАГ 2. Проверь суммарный бюджет по аккаунту при необходимости.
Правило сохранения бюджета (КРИТИЧНО!)
При снижении/паузе ВСЕГДА перераспределяй освободившийся бюджет!
Расчёт освободившегося бюджета (freed_budget):
- Снижение: было $50, стало $25 → freed = $25
- Пауза: было $50 → freed = $50
Что делать с freed_budget:
| Освободилось | Действие |
|---|---|
| < $10 | Добавь к существующим adsets (лучшим по HS) |
| $10-20 | Создай 1 новый adset |
| $20-35 | Создай 2 новых adset по $10-17 |
| ≥ $35 | Создай 3 новых adset по $10-15 |
ЕСЛИ креативов НЕТ → весь freed_budget распредели на существующие adsets с HS ≥ good
Коридор бюджета (95-105%)
После всех действий посчитай ИТОГОВУЮ сумму бюджетов направления:
| Итоговая сумма vs план | Статус | Действие |
|---|---|---|
| < 95% от плана | ОШИБКА | ДОБАВЬ действия (увеличение/создание) |
| 95-105% от плана | OK | Можно выводить |
| > 105% от плана | ПЕРЕБОР | Снизь худших |
Best-of-bad логика
Если НЕТ adsets с HS ≥ +25:
- Найди adset с МАКСИМАЛЬНЫМ HS — это "best of bad"
- Используй его для добора: +10..+20% (не более +30%)
- В reason укажи: "Лучший из доступных"
Создание новых ad sets (при наличии креативов)
Когда создавать:
- Освободился бюджет ≥ $10 (из снижения/паузы)
- Есть креативы в
.claude/ads-agent/config/creatives.md - Недобор бюджета по направлению (< 95% от плана)
Приоритет креативов (основная логика через /creative-analyzer):
| Приоритет | Тип | Условие |
|---|---|---|
| 1 | Low Risk | Risk Score 0-25 (🟢) — масштабировать |
| 2 | Medium Risk | Risk Score 26-50 (🟡) — использовать с мониторингом |
| 3 | Новые | Ещё не использовались — для тестирования |
Fallback (если /creative-analyzer недоступен):
- Читай
.claude/ads-agent/config/creatives.mdнапрямую - Приоритет: новые креативы первыми, остальные по порядку
ЕСЛИ креативов нет вообще → перераспредели freed_budget на существующие adsets.
Формат имени adset:
{creative_tag}_{YYYY-MM-DD}
Где creative_tag — название видео из конфига (поддержка кириллицы!).
Примеры:
Кухня_2026-01-21Ванная_премиум_2026-01-21Профимед_акция_2026-01-21
Параметры нового adset:
- Бюджет: 1000-2000 центов ($10-20) — НЕ БОЛЬШЕ $20
- За один запуск по направлению: max 3 новых adsets
- Создавай ВНУТРИ существующей кампании направления (campaign_id из брифа)
MCP команда:
create_adset(
account_id="act_XXX",
campaign_id="123456", # ID кампании направления из брифа
name="Кухня_2026-01-21", # creative_tag + дата (кириллица OK)
daily_budget=1500, # в ЦЕНТАХ! ($15)
optimization_goal="OFFSITE_CONVERSIONS",
billing_event="IMPRESSIONS",
targeting={...} # из config или default
)
Шаг 10: Формирование вывода (Markdown)
Сводка по направлениям
| Направление | Target CPL | Факт CPL | Бюджет план | Бюджет факт | Статус |
|-------------|------------|----------|-------------|-------------|--------|
| Имплантация | $4.00 | $3.50 | $100 | $98 | OK |
| Виниры | $5.00 | $7.20 | $50 | $52 | +44% |
Ad-Eaters (пожиратели)
| Ad ID | Ad Name | AdSet | Spend | Leads | CPL | Priority | Action |
|-------|---------|-------|-------|-------|-----|----------|--------|
| 123456 | Плохой креатив | Тест 1 | $25 | 0 | н/д | CRITICAL | Пауза |
Детали по направлению
| AdSet | HS | Класс | CPL | vs Target | Budget | Action |
|-------|---:|-------|----:|-----------|-------:|--------|
| Креатив 1 | +35 | very_good | $3.20 | -20% | $30 | +30% → $39 |
| Креатив 2 | -28 | bad | $8.50 | +70% | $25 | -40% → $15 |
Итоговые действия
| # | Направление | Тип | Object | Было | Станет | Причина |
|---|-------------|-----|--------|------|--------|---------|
| 1 | Имплантация | Budget+ | Креатив 1 | $30 | $39 | HS +35, CPL -20% |
| 2 | Имплантация | Budget- | Креатив 2 | $25 | $15 | HS -28, CPL +70% |
Вопрос пользователю
Выполнить действия? (да / нет / частично)
Шаг 11: Выполнение через MCP
После подтверждения пользователя:
# Изменение бюджета
update_adset(adset_id="123456", daily_budget=3900)
# Пауза adset
pause_adset(adset_id="789012")
# Пауза объявления
pause_ad(ad_id="345678")
# Создание нового adset (если есть креативы в конфиге)
create_adset(
account_id="act_XXX",
campaign_id="123456",
name="Тест креативов #1",
daily_budget=1500,
optimization_goal="OFFSITE_CONVERSIONS",
billing_event="IMPRESSIONS",
targeting={...}
)
Шаг 12: Логирование в историю
После выполнения действий запиши в .claude/ads-agent/history/YYYY-MM/YYYY-MM-DD.md:
## {время} - Оптимизация {account_name}
### Анализ
- Направлений: 2
- AdSets проанализировано: 5
- Ad-eaters найдено: 1
### Действия
| Объект | Тип | Было | Стало | Причина |
|--------|-----|------|-------|---------|
| AdSet "Креатив 1" | Budget+ | $30 | $39 | HS +35, CPL -20% |
| Ad "Плохой креатив" | Pause | Active | Paused | Ad-eater, $25 без лидов |
Метрики для разных типов кампаний
WhatsApp (objective = "whatsapp")
- Метрики: conversations_started (лиды), quality_leads (≥2 сообщения)
- CPL = spend / conversations_started
- Quality CPL = spend / quality_leads
Site Leads (objective = "site_leads")
- Метрики: pixel_leads (через Facebook Pixel)
- CPL = spend / pixel_leads
Lead Forms (objective = "lead_forms")
- Метрики: form_leads (Instant Forms)
- CPL = spend / form_leads
Instagram Traffic (objective = "instagram_traffic")
- Метрики: link_clicks (переходы в профиль)
- CPC = spend / link_clicks (НЕ CPL!)
ВАЖНО: Смотри на objective в каждом adset и используй соответствующие метрики!
Ограничения
- Бюджеты в центах; диапазон: 300..10000 ($3..$100)
- Повышение за шаг ≤ +30%
- Снижение за шаг до −50%
- Работай только с АКТИВНЫМИ кампаниями/ad sets
- Включать кампании НЕЛЬЗЯ — только пользователь
- Кампании с CBO и ad set с lifetime_budget НЕ трогаем
Таймфреймы и веса
Основной режим (overnight):
- yesterday: 55%
- last_3d: 30%
- last_7d: 15%
Режим реального времени (midday):
- today: 55%
- yesterday: 30%
- last_7d: 15%
Минимальная база для надёжных выводов: ≥1000 показов на уровне ad set.
Самопроверка перед выводом
- Для каждого направления посчитай итоговый бюджет с учётом всех действий
- Проверь что он в коридоре 95-105% от плана
- Если недобор > 5% → ДОБАВЬ действия (увеличение/создание)
- Если перебор > 5% → ДОБАВЬ снижения худших
- Убедись что ad-eaters обработаны
- Убедись что освобождённый бюджет перераспределён
FAQ
What does the ads-optimizer skill do?
Эксперт по оптимизации Facebook Ads. Используй для анализа метрик, Health Score, ad-eater detection и рекомендаций по бюджетам.
How do I install ads-optimizer?
Run npx skills add https://github.com/dengineproblem/agents-monorepo --skill ads-optimizer in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/ads-optimizer/ (personal) or .claude/skills/ads-optimizer/ (project).
Which AI agents can use ads-optimizer?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is ads-optimizer safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains ads-optimizer?
It is published by dengineproblem in dengineproblem/agents-monorepo. It has 72 recorded installs.
More from dengineproblem/agents-monorepo
social-media-marketing
dengineproblem/agents-monorepo
Эксперт по SMM. Используй для стратегий в Instagram, Facebook, TikTok, LinkedIn, контент-планов и community management.
frontend-design
dengineproblem/agents-monorepo
Open the skill to read its SKILL.md instructions.
video-marketing
dengineproblem/agents-monorepo
Open the skill to read its SKILL.md instructions.
k6-load-test
dengineproblem/agents-monorepo
Эксперт k6 нагрузочного тестирования. Используй для performance testing, load scenarios и stress tests.
b2b-saas-marketing
dengineproblem/agents-monorepo
Эксперт по B2B SaaS маркетингу. Используй для стратегий генерации спроса, growth-маркетинга, PLG, расчёта CAC/LTV, оптимизации воронки и маркетинговых операций.
seo-expert
dengineproblem/agents-monorepo
Open the skill to read its SKILL.md instructions.
Popular marketing & seo skills
reddit-automation
flowkit-labs/skills
Find Reddit threads where people are genuinely asking for what you offer, then draft short, genuinely helpful replies — disclosing your affiliation honestly and naming your product only when it truly answers the question. Two moves: discovery — scan the right subreddits for real needs (recommendation asks, expressed pain, competitor mentions) and rank the few threads where you can actually help; drafting — write from real experience, respect each community's self-promo rules, and keep a human in the loop to review and post. This markets on Reddit the honest way: contribute value, disclose who you are, never astroturf. Distilled from the playbook behind doany.ai's Reddit agent. Triggers on "find reddit opportunities", "reddit marketing", "reddit automation", "reply on reddit for my product", "reddit community engagement", "reddit lead gen", or any ask to turn Reddit threads into genuine, disclosed marketing replies.
twitter-automation
101-skills/superpowers
Automate Twitter/X with posting, engagement, and user management via inference.sh CLI. Apps: x/post-tweet, x/post-create (with media), x/post-like, x/post-retweet, x/dm-send, x/user-follow. Capabilities: post tweets, schedule content, like posts, retweet, send DMs, follow users, get profiles. Use for: social media automation, content scheduling, engagement bots, audience growth, X API. Triggers: twitter api, x api, tweet automation, post to twitter, twitter bot, social media automation, x automation, tweet scheduler, twitter integration, post tweet, twitter post, x post, send tweet
twitter-automation
magentosh/superpowers
Automate Twitter/X with posting, engagement, and user management via inference.sh CLI. Apps: x/post-tweet, x/post-create (with media), x/post-like, x/post-retweet, x/dm-send, x/user-follow. Capabilities: post tweets, schedule content, like posts, retweet, send DMs, follow users, get profiles. Use for: social media automation, content scheduling, engagement bots, audience growth, X API. Triggers: twitter api, x api, tweet automation, post to twitter, twitter bot, social media automation, x automation, tweet scheduler, twitter integration, post tweet, twitter post, x post, send tweet
twitter-automation
qu-skills/superpowers
Automate Twitter/X with posting, engagement, and user management via inference.sh CLI. Apps: x/post-tweet, x/post-create (with media), x/post-like, x/post-retweet, x/dm-send, x/user-follow. Capabilities: post tweets, schedule content, like posts, retweet, send DMs, follow users, get profiles. Use for: social media automation, content scheduling, engagement bots, audience growth, X API. Triggers: twitter api, x api, tweet automation, post to twitter, twitter bot, social media automation, x automation, tweet scheduler, twitter integration, post tweet, twitter post, x post, send tweet
product-launch-video
heygen-com/hyperframes
Turn a product or marketing URL, pasted script, or brief into a product launch / promo video — SaaS promos, feature reveals, product demos, app and company launches. Use when the user wants to market, launch, promote, or reveal a product; the default for any commercial URL. Site tours / showcases of a website route here too — the brief carries the show-it-as-is intent. Unclear → /hyperframes.
twitter-automation
skills-shell/superpowers
Automate Twitter/X with posting, engagement, and user management via inference.sh CLI. Apps: x/post-tweet, x/post-create (with media), x/post-like, x/post-retweet, x/dm-send, x/user-follow. Capabilities: post tweets, schedule content, like posts, retweet, send DMs, follow users, get profiles. Use for: social media automation, content scheduling, engagement bots, audience growth, X API. Triggers: twitter api, x api, tweet automation, post to twitter, twitter bot, social media automation, x automation, tweet scheduler, twitter integration, post tweet, twitter post, x post, send tweet