ThreadsAgent: расширение, которое ведёт профиль в Threads само
65 файлов, около 16 000 строк, работа только в реальной залогиненной вкладке. Отбор веток, генерация в своём голосе, гуманизация и публикация — без человека.
ThreadsAgent — моё расширение для Chrome, которое отбирает ветки в Threads по нише и комментирует их в моём стиле, а также ведёт собственный профиль. Работает только в реальной залогиненной вкладке: никаких прямых запросов к API площадки и никаких headless-браузеров.
Конвейер
скан ленты → бесплатный префильтр → импульс HOT/COLD → оценка релевантности ИИ
→ скоринг → softmax-выбор цели → открытие ветки → разбор корня и ответов
→ проход 1: чего в обсуждении не хватает → проход 2: текст
→ гуманизация локально → фильтры безопасности
→ очередь на подтверждение ИЛИ автопубликация
→ курсор по кривой Безье → посимвольный набор → отправка → проверка появления
Два прохода вместо одного — принципиально. Первый отвечает на вопрос «чего в этом обсуждении не хватает», и только второй пишет текст. Без первого прохода агент производит вежливые пересказы чужой мысли.
Цифры
- 65 файлов, около 16 000 строк, Manifest V3, чистый JavaScript без сборки.
- $0,09 в день на объёме 38 комментариев и 30 постов. Разбор инструмента стоит $0,0005 — дешевле обычного поста.
- Выкат на боевой сервер — одной командой, без входа по RDP. До этого обновление расширения делалось руками по шесть раз за вечер.
Что оказалось сложнее, чем ожидалось
Агент однажды заблокировал сам себя. Сторож искал на странице признаки ограничения — и прочитал слова «rate limit» в тексте, который сам же и написал: форма ответа в Threads тоже имеет role="dialog". Сутки простоя из-за области сканирования.
Отказ navigated съедал треть целей. Четыре гипотезы не подтвердились. Пятая сработала, потому что якорь взяли не в разметке, а в содержимом: поле опознаётся по уже набранному в нём тексту, а не по атрибутам, которые площадка перерисовывает.
Части одной ветки обязаны делить тему — в этом её смысл. Прогонять их через проверку тематической новизны значило браковать вторую часть за то, что она продолжает первую. Пришлось разделить: прошлые посты сверяются по теме и тексту, соседние части — только по тексту.
Тема делится, формулировка — нет. Это, пожалуй, самая полезная строчка из всего проекта.