Единый вход публикации контент-фабрики на все живые площадки: Facebook, X, Telegram-каналы, Threads, Instagram. Публикую САМ. Триггеры: /social-daily, /autopost, /postall, постить везде, разгреби очередь постинга, прогони автопостинг, постим следующий, поставь в отложку, что в очереди постинга, next social post. НЕ путать: /fb-post /x-post /tg-post = точечная дверь под один пост.
Installs into .claude/skills of the current project.
Are you the author of Social Daily?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/tonydzi-social-daily)
---
name: social-daily
description: "Единый вход публикации контент-фабрики на все живые площадки: Facebook, X, Telegram-каналы, Threads, Instagram. Публикую САМ. Триггеры: /social-daily, /autopost, /postall, постить везде, разгреби очередь постинга, прогони автопостинг, постим следующий, поставь в отложку, что в очереди постинга, next social post. НЕ путать: /fb-post /x-post /tg-post = точечная дверь под один пост."
version: 1.0.0
---
# /social-daily — автопостинг на FB + Threads + Instagram
> ⛔ **ЛИЧНОСТЬ БРАУЗЕРА (канон 30.08.2026).** Chrome профиля Default на хабе = личность Антона (claude.ai там под **[рабочий аккаунт]**, всегда).
> Робот здесь **ЧИТАЕТ и действует, но НЕ ТРОГАЕТ ЛОГИНЫ**: ни logout, ни смены аккаунта, ни «самолечения входа», ни инжекта кук.
> Увидел «не тот аккаунт» → доложи и работай из робо-профиля (`_chrome_profile_a2`, Firefox-профили). Канон: `reglament-hab-brauzernye-lichnosti-bb-i-roboty`.
**Зачем.** Раньше у каждой площадки была своя лесенка: у FB — движок-селектор, у Threads — проза внутри scheduled-задачи, у Instagram — ничего. Очереди рассинхронились и **обе замёрзли 14.07 молча**: трекер перестали пополнять, селектор честно видел ноль, лейн стоял 16 дней при живом производстве в канале. Один контракт + одна очередь + один счётчик темпа убирают этот класс.
## Жёсткие правила (не обходить)
- **⭐ ПУБЛИКУЮ САМ.** Гейт [коллега] снят приказом Антона 06.08.2026 («гейт [коллега] снят»), окно апрува = 0 часов с 05.08. Правило Антона 11.08.2026 дословно: «если за 24ч [коллега] не дала ОК — ты постишь сам». То есть ОК не ждём вообще; если материал почему-то отправлен ей на просмотр — таймер 24 часа, потом публикую без него. ⛔ «Набил в композер и жду клика» = провал прогона: человек в СЕРЕДИНЕ конвейера — баг архитектуры ([[human-is-the-bottleneck]]).
- **Что осталось выше меня** (это НЕ отменено): `paused` в `registry/limits.json` — аварийный стоп-кран площадки у [коллега] и Антона · Tier-2 (деньги, юр.обязательства, секреты 3-м лицам) · приватность (private ⛔ наружу, personal — обобщённо) · матрица форматов `platform_rules.json` · `slop_gate` FAIL = переписать сейчас · IP-гейт §7.2. Увидел `BLOCKED by registry` — это работающий стоп-кран, а не сбой: не обходить.
- **⭐ ОДНА ДВЕРЬ.** Перед отправкой спросить `pub_registry.can_post(<платформа>)`, после — записать факт в `registry/pub_ledger.jsonl`. Постинг мимо реестра = баг: замер 11.08.2026 — TG/X/FB публиковали десятками, а `pub_ledger` стоял с 10.08 и день-леджер честно показывал «FB 0 · X 0». Слепой прибор врёт в обе стороны.
- **§7.2 IP-гейт.** Постинг FB/Threads/Instagram — с постоянного IP (хаб). Селектор проверяет узел сам: `gate.mode == "block"` → **не постим отсюда**, шлём задачу разрешённому узлу текстом по шине.
- **Темп режет `fb_guard`,** не глазомер. `guard.ok == false` → стоп, назвать слот. Один ledger на все площадки — второй счётчик не заводить.
- **Голос — готовый текст Антона,** не переписываем и не выдумываем. Нет тела — нет поста.
- **Один текст дважды не постим.** Селектор берёт только незапощенное; вручную его не обходить. Перед FB-постом сверить реальную стену (трекер — не истина о стене, дубли 10.07 и 12.07).
---
## Шаг 0-бис. ⭐ ТРОЙКА ДНЯ — сперва проверь её (приказ Антона 23.08.2026)
Каждый день наружу обязаны уйти три поста за ПРЕДЫДУЩИЙ день: 🏆 итог дня · 💥 факап дня · ❓ боль дня.
Канон: `reglament-ezhednevnaya-troyka-postov-itog-fakap-bol`, память `daily-ask-and-fail-lanes`.
```bash
python [путь владельца] build --day <вчера>
```
- Полосы пусты при живых кормушках → полоса молчит честно. `exit 1` / блок «🔴 КОРМУШКА СЛОМАНА» → чинить источник, не постить.
- Публикует **[коллега]**; Антон правит, **не успел за 24ч — публикуем как есть**, человека дольше суток не ждём.
- ⛔ **@ClawRus — не публикуем вообще** · ⚠️ **@ClawEng — не чаще 1 поста в сутки** (`limits.json`, темп-гейт вернёт блокер сам).
- После публикации отметить полосу: `daily_community.py consumed --day D --lane win|fail|ask --note "..."`.
## Шаг 0. Что вообще в очереди (0 токенов)
```bash
python3 ~/.claude/scripts/social_next_pending.py --board
```
Печатает по всем площадкам: сколько опубликовано, сколько в очереди, и **поимённо все блокеры**. Дальше идём только по площадке со статусом `ГОТОВ`.
## Шаг 1. Взять следующий
```bash
python3 ~/.claude/scripts/social_next_pending.py --platform fb
python3 ~/.claude/scripts/social_next_pending.py --platform threads
python3 ~/.claude/scripts/social_next_pending.py --platform instagram
```
Читаем: `can_post`, `blockers[]`, `gate`, `guard`, `next`.
- `can_post == false` → **стоп**, доложить блокеры словами. Не обходить.
- `gate.mode == "warn"` → постим, но карв-аут упоминаем в отчёте (узел формально не по канону).
## Шаг 2. Тело поста — по лейнам
⭐ **Перед набивкой любого лейна — ИСТОРИЯ, НЕ ТЕЗИС** (anton 02.09.2026, голосом hub:6094; канон `reglament-vsegda-rasskazyvay-istoriyu-storytelling`, память [[storytelling-always-package-as-story]], гейт `/taste-check` P34): у тела поста есть герой · реальная ситуация · перелом · вывод. Голое наблюдение без контекста и жаргон без бытовой аналогии («упала рутина», «протух Python») → переписать: планка читателя — не-инженер, ELI5. ⭐ Пре-тест (anton 03.09): сюжет = ЖИВОЙ ЧЕЛОВЕК и эмоции (неудачи·страдания·деньги·стыд·камбэк), железо — декорация; «герой — инфраструктура» = переписать через человека. Каркас поста 60–120 слов = ABT («и…, НО…, ПОЭТОМУ…»); факап дня = расследование со ставкой (сцена → неверная гипотеза → улика → причина → что изменили), не исповедь; приёмка = чек-лист 10 вопросов в разделе «Чек-лист приёмки» `$OBSIDIAN_VAULT\03-Insights\Operations\reglament-vsegda-rasskazyvay-istoriyu-storytelling.md`. ⛔ Упаковка ≠ право менять слова Антона (§9.7) и раздувать объём (§9.4).
**FB** (`body_source: channel`): telegram MCP, аккаунт `[рабочий аккаунт]`, `get_message_context` chat_id=`[аккаунт]` message_id=`{next.channel_msg}` context_size=0. Тело = весь текст **до разделителя `---`**. 1-й коммент собрать из `next.links`:
```
📖 Лонгрид для людей (EN): {longread_en}
🤖 Версия для машин (devlog): {devlog}
Что будет дальше — подпишитесь: t.me/ClawRus
Написать напрямую двум кофаундерам: WhatsApp +1 341 222 9178
```
**Threads** (`body_source: bank`): текст уже готов — `next.text` из банка `_Dashboards/Threads-Posts-Bank.md`. Лимит 500 знаков (`next.over_limit` подскажет). Стиль: без длинных тире, без буквы «ё» (пишем «е»), эмодзи 0-1, без хэштегов, живо, вопрос/CTA в конце.
Осталось `[ ]` меньше двух → **сперва пополнить банк**: прочитать свежие посты `[аккаунт]`, разбить идею на standalone-микро-посты ~150 знаков, дописать секцией со статусом `[ ]`. Не дублировать уже помеченное `[x]`.
**Instagram** (`body_source: card`, `needs_image: true`): лента **не принимает пост без картинки**. Рендерим карточку:
```bash
python3 ~/.claude/scripts/social_card.py --text "<тело>" --kicker "<тема>" --footer "<дата>" --out ~/Downloads/ig_card.png
```
Откажет с цифрами, если текст не влезает → сократить или разбить на карусель (несколько карточек). Подпись поста — тот же текст (до 2200 знаков).
## Шаг 3. НАБИТЬ И ОПУБЛИКОВАТЬ
Chrome — **живой залогиненный** (`claude-in-chrome`), не headless. Не залогинен → это блок для человека, логин/2FA не трогаем.
- **FB:** поле «What's on your mind, Anton?» → модалка Create post → клик в текст → `type` тело (в композере Enter = перенос строки, безопасно).
- **Threads:** поле «What's new?» → модалка **New thread** → проверить, что активен `antondzi` → `type`.
⚠️ Грабли: первый клик часто сдвигает layout и теряет фокус — кликнуть второй раз и **скрином убедиться, что текст лёг**. Кнопка Post уезжает вниз после ввода — кликать по актуальной координате со скрина, не по памяти.
- **Instagram:** Create → Post → загрузить PNG → Next → подпись.
- **X ([аккаунт]):** вкладка `x.com`, сверить залогиненный handle по реестру, композер «What's happening», ≤280 знаков на твит (длиннее — тред через reply на свой твит). Темп: `_shared/social_guard.py check x`.
- **Telegram-каналы:** не через браузер, а через MCP `telegram` аккаунтом `[рабочий аккаунт]` (`send_message` по id из `00-System\Channels-Registry.md`). Матрица форматов: лонгрид целиком в канал ⛔ — только тизер + ссылка.
Всегда: **скриншот** (`save_to_disk:true`) — доказательство, что набито именно то.
## Шаг 4. ⭐ Публиковать сейчас или положить в ОТЛОЖКУ
Человека не ждём (правило выше). Решение принимаю сам по темпу и времени суток:
- **Сейчас** — если дневной кап не выбран и материал привязан ко дню (факап дня, вопрос дня, свежая веха).
- **В отложку** — если постов за сегодня уже много, стоит глубокая ночь по аудитории, или разгребаю накопленный бэклог пачкой (тогда размазываю по дням, а не вываливаю стеной).
**FB умеет нативную отложку — проверено вживую 11.08.2026** (профиль Антона профессиональный, Content Library доступна):
`facebook.com/professional_dashboard/content/content_library/` → вкладки **Published · Scheduled · Drafts**, плюс раздел **Planner** (календарь). Планировать можно двумя путями: (а) в композере поста кнопка **Create → Schedule post** и выбор даты/времени; (б) из Content Library → Create. Проверить результат — вкладка `?filter=SCHEDULED`: запланированное видно строкой «Scheduled • <дата, время>».
⚠️ Отложка = тоже публикация: она так же считается темпом и так же пишется в `pub_ledger` (событие `scheduled` с полем времени), иначе тот же класс слепого прибора.
X, Threads, Instagram нативной отложки под нашей рельсой не имеют — там либо сейчас, либо оставить в очереди с явной причиной.
## Шаг 5. Публикация
1. Опубликовать (FB: Next → Post settings → Post; при отложке — Schedule).
2. Скрин-подтверждение («Just now» / тост «Posted»).
3. Записать темп: `python3 ~/.claude/scripts/fb_guard.py record post --platform <fb|threads|instagram>` (для FB `--platform` можно опустить).
4. Забрать **пермалинк**: FB — клик «Comment», URL из таба; Threads — профиль `[аккаунт]`, клик по таймстампу верхнего поста; IG — клик по посту в профиле.
5. FB: 1-й коммент (печатать построчно, между строк `shift+Return`, отправить синей стрелкой — в комменте Enter = отправка) + селф-лайк.
## Шаг 6. Реестр + трекер СРАЗУ + шина
**Сначала реестр — это одна дверь наружу, а не отчётность.** В `[путь владельца]` дописать строку по факту:
`{"event": "posted"|"scheduled", "id": "<id материала>", "platform": "<fb_wall|x_en|tg_paloaltoairu|threads|...>", "url": "<пермалинк>", "title": "<коротко>", "at": "<ГГГГ-ММ-ДДTЧЧ:ММ>"}` (для `scheduled` — `at` = время публикации, плюс `"scheduled_from"` = сейчас).
Не записал — считай, что не постил: день-леджер и все дашборды читают именно этот файл.
Дальше не копить пачкой — писать статус в тот момент, когда забрал пермалинк.
```bash
cp <трекер> <трекер>.bak-$(date +%Y%m%d-%H%M%S) # бэкап перед правкой
```
Правим строку `{row_id}` в `_Dashboards/content-distribution-tracker.html` (живой файл **в волте**, не в браузере): `status:'✅ Запощен'`, `url:'<пермалинк>'`, `date:'<сегодня>'`, note += «✅ выложил Claude ({оператор}); источник {откуда тело}».
Threads дополнительно: в банке `[ ]` → `[x]` + ` ✅DD.MM → <пермалинк>`.
```bash
python3 ~/.claude/scripts/bus_send.py ALL "✅ {площадка}: пост {N} выложен → {url}. Обновил {row_id}. ХАБУ: при перепечке трекера не затирай статус."
```
## Шаг 7. Доклад одной строкой
«✅ {площадка} пост {N} — опубликован + коммент + трекер. Сегодня N/{кап}. Следующий: {что} в слот ~{время}.»
---
## Стоп-краны
- Любой варнинг площадки (checkpoint, «слишком часто», подтверждение личности) → **немедленно стоп**, не ретраить, доложить.
- `gate.mode == "block"` → отсюда не постим. Задачу — на разрешённый узел по шине.
- Текст не влезает в карточку IG → не обрезать молча, сократить или карусель.
- Логин/пароль/2FA не трогаем.
## Инструменты
| Что | Где |
|---|---|
| Селектор очереди + нода-гейт | `~/.claude/scripts/social_next_pending.py` |
| Конфиг площадок (узлы, капы, стиль) | `~/.claude/social_targets.json` |
| Счётчик темпа (один на все площадки) | `~/.claude/scripts/fb_guard.py` |
| Текст → PNG для Instagram | `~/.claude/scripts/social_card.py` |
| Тесты | `~/.claude/scripts/_test_social_autopost.py` |
| Паспорт детали | `00-System/Social-Autopost-Passport.md` |
## Связанное
`fb-daily` (скилл удалён, поглощён этим) — прежний одно-площадочный предок (его селектор `fb_next_pending.py` теперь шим над общим движком, контракт не менялся). `/fb-post` — разовый постинг конкретного текста. `/fb-reply` — комменты. `/content-mine` — пополнение воронки.
## Открытый вопрос к Антону
Канон §7.2 (16.07) требует постить FB/Threads **только с хаба** (постоянный IP), а живые рутины `fb-daily-poster` и `threads-daily-poster` заведены раньше (08–09.07) на [машина флота]. Сейчас узел пускается по карв-ауту с пометкой. Решение Антона: **мигрировать оба лейна на хаб** или **узаконить карв-аут** в каноне. Instagram как новый лейн заведён сразу по канону — только хаб.
## Анти-слоп гейт (anton 14.08)
Любой ИИ-написанный текст наружу из этого скилла перед отправкой - финальный проход `/ai-slop` (ban-лист + ритм). Исключения ровно три: текст с плашкой Майкрофта (§3.3) · машиночитаемое (GitHub/техдока/dev-log/journey-machine) · текст, написанный Антоном руками. Канон: `reglament-posty-ot-lica-antona-tolko-cherez-ai-slop`.
<!--kit-footer-->
---
**Like this skill?** It is one of 100 in [second-brain-starter-kit](https://github.com/tonydzi/second-brain-starter-kit): the second brain we built for ourselves and run every day at Palo Alto AI Research Lab. Install the whole set with `npx skills add tonydzi/second-brain-starter-kit`. Everything is open source and free, so take what you need.
Flagships worth a look on their own: [secondop-panel](https://github.com/tonydzi/secondop-panel) (a second opinion from a panel of external models), [claude-memory-tidy](https://github.com/tonydzi/claude-memory-tidy) (stop your agent's memory from rotting), [telegram-mcp-kit](https://github.com/tonydzi/telegram-mcp-kit) (your own Telegram over MCP in about 15 minutes).
Author: **Anton Dziatkovskii**, Palo Alto AI Research Lab. Telegram [@tonydzi](https://t.me/tonydzi) - WhatsApp [+1 341 222 9178](https://wa.me/13412229178) - X [@Tony_Stef_](https://x.com/Tony_Stef_)
**Engineers: want to test-drive this setup?** Message me. I hand out free starter seeds to engineers who test and report back, and custom skill requests are welcome.