Install
$ agentstack add skill-ilyautov-small-business-ru-canva-creator ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Генератор макетов (canva-creator)
Согласованный бриф — это ещё не кампания: посты сами себя не нарисуют и в очередь не встанут. Скилл доводит бриф до готовых креативов под VK, Telegram, Дзен и Одноклассники, пишет подписи и тексты писем и ставит публикации в очередь — пошагово, с твоим согласием на каждом гейте, без сюрпризов с лимитами и пустыми заглушками.
> Сервис дизайна: Canva заблокирована в РФ. Основной путь — ~~дизайн: > VistaCreate (быв. Crello), Supa, Поликрафт, Сберографика. Имена > Canva-конкретные команды в этом файле — обобщённые шаблоны API ~~дизайна. > Если у владельца есть доступ к Canva (VPN/зарубежный аккаунт) — те же шаги > применимы к Canva Connect API напрямую.
Зона действия
Скилл ведёт кампанию через пять последовательных стадий, каждая — за гейтом согласования владельца:
бриф → календарь → инвентаризация ассетов → макеты (~~дизайн) → тексты → постановка в очередь (~~crm)
| Путь | Каналы | Что производит скилл | |------|--------|----------------------| | Макет (соцсети) | Telegram, VK, Яндекс Дзен, Одноклассники, RuTube | Макет ~~дизайна + подпись + запланированная публикация в ~~crm | | Только текст | Email-рассылка (новостная, маркетинговая, цепочка) | Тема + прехедер + тело письма, выдаётся владельцу инлайн для отправки |
> Если клиент явно работает на зарубежную аудиторию, к списку каналов можно добавить Instagram/Facebook/X — но по умолчанию в РФ это не основные площадки (Meta признана экстремистской и запрещена в РФ). ⚠️
~~дизайн не используется для писем ни при каких обстоятельствах — никаких шаблонов, автозаполнения, копий дизайнов, загрузки ассетов, экспортов. Владелец явно вывел письма из дизайн-пути, потому что автозаполнение email-шаблонов даёт заглушки-картинки, когда слотов под изображения больше, чем фото, а превью вариантов не рендерятся в чате. Если владелец просит email-макет — см. reference/gotchas.md, текст для перенаправления.
Предполётная проверка
Перед Стадией 1 подтвердите:
- Бриф. Владелец сослался на согласованный бриф или вставил его. Если нет:
«Мне нужен контент-бриф, прежде чем собирать кампанию. У вас есть бриф из скилла content-strategy, или составим сейчас?»
- Тариф
~~дизайна. Бесплатный/базовый тариф требует ручного выбора
шаблона из библиотеки владельца (без API-автозаполнения). Платный/командный тариф (где есть API) может автозаполнять из брендовых шаблонов.
- Доступ к
~~crm. Постановка постов в очередь требует тарифа~~crm
с модулем планирования публикаций (например, CRM-маркетинг в Битрикс24). Если модуля нет → пропустите Стадию 5 и выгрузите CSV (см. [reference/hubspot-staging.md](reference/hubspot-staging.md)).
- Брендовые ассеты. Подтвердите путь к фото товаров на диске или что
бренд-кит загружен в ~~дизайн.
- Бюджет генерации. Оцените объём макетов кампании и покажите его до
Стадии 1. По умолчанию — 3 кандидата на каждую строку под макет; каждый макет стоит ~5 вызовов API (автозаполнение + экспорт + опрос статуса).
``` Бюджет генерации для этой кампании: Строк под макет (соцсети): 8 Кандидатов на строку: 3 (по умолчанию — скажите «один кандидат» для 1) Всего макетов: 24 Вызовов API (примерно): ~120 (автозаполнение + экспорт + опрос)
Лимит ~~дизайна: см. тариф. Генерация займёт ~2–3 минуты, в пределах лимитов вашего тарифа. Продолжаем? ```
Если расчётное число макетов превышает 30, сразу рекомендуйте режим одного кандидата — большие кампании быстро упираются в лимит. Владелец может переопределить значение на 1, 2 или 3 кандидата на строку до старта Стадии 1. Зафиксируйте выбранное значение на всю сессию.
Рабочий процесс
Стадия 1 — Календарь публикаций
Возьмите из брифа: контент-темы, каналы, частоту, жёсткие даты (запуски, акции, праздники).
Постройте таблицу-календарь со столбцом Путь, который направляет каждую строку либо в ~~дизайн, либо в текстовый набор:
| Дата | Канал | Путь | Тема | Тип ассета | Угол подписи/темы | |------|-------|------|------|------------|-------------------| | 02.06 | Telegram | Макет (соцсети) | Запуск льняной линии | Квадратный пост | «наконец-то платье…» | | 05.06 | Email | Только текст | Запуск льняной линии | Тело письма | «Лён, который дышит» |
Помечайте каждую строку email-канала как Только текст до показа. Ограничьте 30 днями, если бриф не указывает иное. Заранее отметьте конфликты расписания (два поста в один день про один товар).
Контрольная точка 1. Покажите календарь. Спросите: «Совпадает с планом? Какие даты сдвинуть, каналы добавить, темы поменять?» Дорабатывайте до согласования, затем вслух повторите разбивку — «N строк идёт через ~~дизайн, M строк через текстовый набор» — прежде чем двигаться дальше. Поймать неверную категоризацию здесь — бесплатно; после генерации макетов — уже нет.
Стадия 2 — Инвентаризация ассетов (только строки под макет)
Email-строки пропускают эту стадию целиком. Для каждой строки Макет (соцсети) соберите манифест: что нужно шаблону и что уже есть.
- Перечислите каждый слот под изображение по имени. Квадратные посты
обычно имеют 1–2 слота; карусели и товарные сетки — 5+. Перечисляйте поимённо (Header_Image, Product1_Image, Product2_Image, …), никогда не сворачивайте в «фото товаров».
- С API брендовых шаблонов: читайте имена полей из метаданных шаблона.
- Без API (базовый тариф): считайте каждый отдельный прямоугольник под изображение в шаблоне.
- Инвентаризируйте доступные ассеты. Тексты из брифа (названия товаров,
тексты акций, слоганы, цены в ₽), фото товаров, уже загруженные в ~~дизайн, или на диске владельца, цвета и шрифты бренд-кита.
- Постройте таблицу пробелов по слотам. Одна строка на слот на макет — не на макет.
| Дата | Имя слота | Тип слота | Доступный ассет | Статус | |------|-----------|-----------|-----------------|--------| | 02.06 | HeroImage | изображение | bloomsummer.jpg → assetid ожидается | загрузить | | 02.06 | Headline | текст | «Лён, наконец-то» | готово | | 09.06 | Product1Image | изображение | — | ОТСУТСТВУЕТ |
- Разрешите несоответствия слот/ассет с владельцем. Если слотов под
изображения больше, чем фото в брифе, остановитесь и спросите:
``` В шаблоне «Летняя карусель» 5 слотов под изображения. Бриф дал мне 1 фото (bloom_summer.jpg). Чем заполнить остальные 4?
- Повторить то же фото во всех 5 слотах
- Вы пришлёте ещё 4 фото (пути к файлам)
- Выбрать шаблон попроще с меньшим числом слотов
```
Никаких вызовов генерации, пока владелец не выберет. Генерация с пустыми слотами даёт макеты с дефолтными заглушками-пейзажами ~~дизайна.
- Загрузите недостающие фото и зафиксируйте подтверждённые ID ассетов.
Загрузите файл, дождитесь статуса success задачи загрузки. Запишите asset.id из ответа — только это значение работает в поле изображения при автозаполнении. Пустая строка, URL, путь к файлу или устаревший ID молча отрендерят дефолтную картинку-пейзаж вместо фото.
- Подтвердите манифест. Покажите владельцу заполненную таблицу по слотам:
каждый слот разрешён, каждый asset.id изображения подтверждён. Это последняя остановка перед вызовами API ~~дизайна.
Стадия 3 — Генерация макетов
Перед любым вызовом API ~~дизайна перечитайте календарь и отбросьте каждую строку, чей Путь не Макет (соцсети). Email-строки эту стадию не проходят.
Генерируйте макеты по одной строке календаря за раз, по 3 кандидата на строку (или по значению, выбранному на предполёте). Каждая строка идёт по одному циклу: сгенерировать кандидатов → проверить → экспортировать → визуально проверить → перегенерировать сбойные → показать → дождаться выбора владельца → следующая строка. Пауза 30 секунд между строками. Это держит всплеск на уровне 3 генераций + 3 экспортов за ~30 с — с запасом под лимит частоты запросов ~~дизайна. Не распараллеливайте несколько строк; одна строка за раз — это защита, которая не даёт владельцу упереться в квоту посреди кампании.
Частота опроса. Опрашивайте статус задачи каждые 3–5 секунд, не чаще. Более частый опрос жжёт квоту, не ускоряя завершение.
URL превью — встраивать безопасно только один тип. Ответы автозаполнения возвращают временные превью, которые истекают за минуты; встраивание их как markdown-картинок даёт битые заглушки «Показать изображение». Постоянные URL экспорта не истекают. Нативные карусели Cowork рендерят результат автозаполнения напрямую через аутентифицированную сессию коннектора — дайте им отрендериться самим, не встраивайте повторно.
Цикл по строке
- Определите шаблон. (Один раз за сессию — тот же шаблон по всем строкам,
если календарь не смешивает типы ассетов.)
- С API брендовых шаблонов: список шаблонов, отфильтрованный по типу ассета.
- Без API (базовый тариф): найдите дизайны по имени шаблона, покажите топ-3 владельцу, подтвердите один до генерации.
- Сгенерируйте кандидатов строки параллельно. Запустите 3 кандидата строки одновременно (или N с предполёта).
- С API автозаполнения: запрос автозаполнения на каждого кандидата с ID шаблона и значениями полей. Опрашивайте все задачи параллельно.
- Без API: создайте копии дизайна. Опишите правки текста и изображений, которые владелец применяет в
~~дизайне; соберите обратно ID дизайнов.
- Проверьте статус задачи. Для каждого кандидата подтвердите, что задача
вернула status == "success" и присутствует ID готового дизайна. Ошибки — по каждому дизайну:
JOB_FAILED→ прочтите сообщение об ошибке, поправьте значения полей или ID ассетов, повторите один раз.RATE_LIMIT_EXCEEDED(первый раз за сессию) → подождите 60 с, повторите этого одного кандидата один раз. Это покрывает временные всплески.RATE_LIMIT_EXCEEDED(второй раз за сессию) или любая ошибкаquota_exceeded/ дневного лимита → остановите генерацию немедленно.
Не повторяйте. Покажите прогресс и спросите:
``` ~~дизайн ограничивает кампанию по частоте запросов. Статус: ✓ Сгенерировано: посты 1–4 (12 макетов) ⏸ Осталось: посты 5–8 (12 макетов не сгенерированы)
Как продолжить?
- Перейти на 1 кандидата на оставшуюся строку (4 макета) — закончим сейчас
- Пауза — продолжим через 60 минут, когда квота восстановится
- Остановить генерацию — работаем с тем, что есть, переходим к текстам
```
Дождитесь выбора владельца. Не зацикливайтесь на повторах.
- Экспортируйте каждого успешного кандидата в постоянный PNG. Запустите экспорты строки параллельно.
- Экспорт в формат
png, опрос задачи до успеха, захват постоянного URL. - Постоянные URL — это то, что встраивается в превью и прикрепляется к публикации в
~~crmпозже. Превью из ответа автозаполнения ниже по конвейеру не используется.
- Визуально проверьте каждый экспорт. Посмотрите на изображение и отклоните любое из этих — все указывают на незаполненный слот или неверный ассет:
- Обобщённый пейзаж с облаками и зелёными холмами (дефолтная заглушка)
- Сплошные серые прямоугольники там, где должно быть фото
- Текст-рыба или дефолтный текст шаблона
- Сюжет не соответствует брифу (не тот товар, не тот бренд)
Если кандидат не прошёл проверку: перепроверьте манифест по сбойному слоту, поправьте asset.id, перегенерируйте только этого кандидата, переэкспортируйте, перепроверьте.
- Повтор по одному кандидату при частичном сбое. Если 1 из N кандидатов строки сбойнул на Шаге 3 или 5, перегенерируйте только его — не переделывайте всю строку и не показывайте частично битую карусель. Если вторая попытка тоже сбоит:
``` Третий кандидат для поста 09.06 продолжает сбоить — ~~дизайн вернул [ошибка / отрендерил заглушку]. Как продолжить?
- Пропустить — показать остальные 2 и идти дальше
- Сменить на шаблон попроще для этого кандидата
- Попробовать ещё раз с другим фото
```
- Покажите кандидатов строки. Дайте нативной карусели Cowork отрендерить результат автозаполнения. Под ней добавьте текст-подсказку:
`` Кандидаты на 09.06 готовы — пролистайте карусель выше. Какой использовать для поста 09.06? ``
Если карусель не рендерится или одна позиция битая, встройте постоянные PNG-URL экспорта из Шага 4. Финальный запасной вариант: ссылка на URL редактирования дизайна. Никогда не встраивайте повторно временные URL превью.
- Пауза 30 секунд, затем следующая строка.
Контрольная точка 2. Готово, когда владелец выбрал один макет на каждую строку календаря. Если просит перегенерацию — перегенерируйте только этого кандидата.
Стадия 4 — Написание текстов
Для каждой строки календаря напишите текст. Соцсети получают подпись; email-строки — полное письмо.
Подписи для соцсетей — Telegram, VK, Дзен, Одноклассники:
- Длина: под канал (Telegram-пост — лонгрид допустим, но держите хук в начале; VK ≤ ~1000 знаков рекомендуется для ленты; короткие посты ОК).
- Структура: хук → одна выгода товара → призыв к действию → 3–5 хештегов (не 30).
- Голос: под тон-маркеры брифа. Если бриф говорит «по-дружески, неформально» — не пишите корпоративный текст.
- Без воды. Без «Отличные новости!» и «Спешим сообщить». Открывайте с ценности.
Письма — Claude пишет всё письмо целиком; без ~~дизайна:
- Тема: ≤ 50 знаков, конкретно, без кликбейта. «Места на весну заканчиваются» лучше, чем «Не упустите!».
- Прехедер: ≤ 90 знаков, дополняет тему, не повторяет её.
- Тело: обычная проза, 100–250 слов. Открывающая строка, ради которой дочитают → 1–2 абзаца по сути → один ясный призыв к действию → подпись.
- Голос: те же тон-маркеры, что в соцсетях. Владельцы хотят, чтобы письма звучали как они, а не как шаблонная новостная рассылка.
- Без отсылок к картинкам. Не пишите «см. изображение выше». Если владельцу нужны визуалы — он добавит их в своём сервисе рассылки.
- Один призыв на письмо. Выберите главное действие и ведите к нему.
Покажите подписи инлайн под каждой строкой соцсетей. Покажите письма целиком инлайн под каждой email-строкой:
Тема:
Прехедер:
Разобранные примеры — [reference/examples/boutique-brief-campaign.md](reference/examples/boutique-brief-campaign.md).
Контрольная точка 3. «Какие подписи или письма переписать? Укажите дату и что поменять.» Дорабатывайте до согласования.
> Маркировка рекламы: подписи и креативы для платного размещения > (Яндекс Директ, VK Реклама, Telegram Ads, посевы в чужих каналах за деньги) > требуют маркировки — токен ОРД и передача данных в ЕРИР (обязательно в РФ > с 2022 г.). Органические посты в собственных каналах владельца маркировки > не требуют. Уточните статус размещения у владельца. ⚠️
Стадия 5 — Постановка в очередь ~~crm + передача писем
Поставьте посты для соцсетей в очередь через ~~crm (Битрикс24, amoCRM). Письма не ставятся в очередь — они выдаются владельцу инлайн для копирования в его сервис рассылки. Справку по полям API см. в [reference/hubspot-staging.md](reference/hubspot-staging.md).
- Создайте кампанию. Заведите кампанию в
~~crmс названием и датами начала/окончания из календаря.
- Поставьте в очередь каждый пост для соцсетей. По одной публикации на строку
Макет (соцсети):
- канал: сопоставьте канал из календаря с подключённым аккаунтом в
~~crm - время публикации: дата-время в будущем — проверьте, что оно ещё не прошло, перед постановкой
- тело: согласованная подпись
- вложение: постоянный PNG-URL экспорта из Стадии 3
- статус:
ЗАПЛАНИРОВАНО(никогда неОПУБЛИКОВАНО)
- Подтвердите очередь. Запросите список запланированных публикаций, покажите его, дайте прямую ссылку на кампанию в
~~crm.
- Выдайте письма для передачи. Для каждой email-строки покажите согласованную тему + прехедер + тело инлайн, сгруппировав по дате отправки. Владелец копирует их в свой сервис рассылки (
~~почта, Unisender, Sendsay
…
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: ilyautov
- Source: ilyautov/small-business-ru
- License: Apache-2.0
- Homepage: https://small-business-ru.aifrontier.tech/
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.