Skip to content
Back to skills

Social Daily

ASecurity

Единый вход публикации контент-фабрики на все живые площадки: Facebook, X, Telegram-каналы, Threads, Instagram. Публикую САМ. Триггеры: /social-daily, /autopost, /postall, постить везде, разгреби очередь постинга, прогони автопостинг, постим следующий, поставь в отложку, что в очереди постинга, next social post. НЕ путать: /fb-post /x-post /tg-post = точечная дверь под один пост.

  • 9 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 25, 2026
ai-agentspythongobashgit

Works with

  • mcp

Security analysis

A100/100

Scanned October 3, 2026

npx -y skills add tonydzi/second-brain-starter-kit --skill social-daily --agent claude-code

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.

Security grade badge for Social Daily
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tonydzi-social-daily/badge)](https://www.skillsdirectory.com/skills/tonydzi-social-daily)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…