CLAUDE CODE · TELEGRAM · LAUNCHD
Раз в день, без открытого терминала: проверяет твои каналы в Telegram, отбирает подходящее по ключевым словам, готовит черновик сопроводительного письма и присылает тебе же в Избранное. Работодателям ничего не уходит без твоей проверки.
Скрипт запускается по расписанию (в macOS — через launchd) и открывает headless-сессию Claude Code с чётко заданным заданием: посмотреть выбранную папку в Telegram, взять сообщения за последний день из чатов-каналов, оставить только те, что совпадают по смыслу с твоим запросом, и отправить результат тебе же в личку («Избранное»).
На каждую подходящую вакансию — одно сообщение: роль и компания, формат работы и зарплата (если указаны), ссылка на исходный пост, контакты для отклика и черновик сопроводительного письма, написанный на основе твоего профиля. Письмо помечено как черновик — отправляешь его сама, если решила откликнуться.
claude mcp list: в списке должна быть строка вида telegram: ... — ✔ Connected. Если её нет, попроси Claude Code помочь найти и настроить такой сервер — это отдельный шаг до всего, что описано ниже.Спроси Claude Code в обычном чате: «покажи мои папки Telegram» — он вызовет list_folders и вернёт список с id. Запомни id нужной папки (в примерах ниже — 169).
Два независимых условия: ключевые слова по роли и формат работы. Например:
| Параметр | Пример значения |
|---|---|
| Ключевые слова | редактор, smm, автор, продюсер, журналист, копирайтер |
| Формат работы | удалённо, удаленка, remote, гибрид, гибридный |
Вакансия проходит фильтр, только если встречается хотя бы одно слово из каждой группы.
Если хочешь получать не только дайджест, но и готовые черновики откликов — дай Claude Code 3–5 предложений о себе: роль, ключевой опыт, достижения, контакты. Он будет использовать только эти факты и ничего не выдумывать.
Файл, например, ~/.claude/scripts/vacancy-digest.sh — шаблон с местами под замену отмечен «# ← замени»:
#!/bin/bash # Ежедневный дайджест вакансий из Telegram + черновики откликов. # Всё уходит только в Избранное — работодателям ничего не отправляется. export PATH="$HOME/.local/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin" FOLDER_ID=169 # ← замени на свой id из шага 01 SINCE_DATE=$(date -v-1d +%Y-%m-%d) # на Linux: date -d yesterday +%Y-%m-%d KEYWORDS="редактор, smm, смм, автор, продюсер, журналист, копирайтер" # ← замени FORMAT="удалённо, удаленка, удалённый, remote, гибрид, гибридный" # ← замени PROFILE="Имя Фамилия — роль/специализация. 3-5 фактов из опыта. Контакты: email, telegram, телефон." # ← замени PROMPT="Проверь папку Telegram (folder_id=$FOLDER_ID через mcp__telegram__get_folder) и найди новые вакансии за последний день. 1. Возьми из папки только чаты с type == \"Channel\". 2. Для каждого канала вызови mcp__telegram__list_messages с from_date=\"$SINCE_DATE\", limit около 30. 3. Отбери сообщения, где есть хотя бы одно слово из списка: $KEYWORDS — и упоминается формат: $FORMAT. 4. Если ничего не нашлось — ничего не отправляй и завершись. 5. Для каждой вакансии получи ссылку на пост через mcp__telegram__get_message_link. 6. Получи свой chat_id через mcp__telegram__get_me (chat_id \"me\" = Избранное). 7. Составь короткое (4-6 предложений) сопроводительное письмо от первого лица на основе профиля — только реальные факты. Письмо должно начинаться со слов «Откликаюсь на [вакансию](ссылка на пост) НАЗВАНИЕ ВАКАНСИИ» (слово «вакансию» — markdown-гиперссылка на ссылку поста из шага 5), а ближе к концу содержать фразу «прикладываю резюме»: $PROFILE 8. Через mcp__telegram__send_message (с parse_mode=\"md\", чтобы гиперссылка на слове «вакансию» отрендерилась кликабельной) в чат \"me\" отправь ОДНО сообщение на каждую вакансию: роль/компания, формат/зарплата, ссылка на пост, контакты, черновик письма с пометкой «не отправлено — проверь перед отправкой». Никогда не пиши и не отправляй ничего работодателям напрямую — только себе в Избранное." claude -p "$PROMPT" \ --allowedTools "mcp__telegram__get_folder,mcp__telegram__list_messages,mcp__telegram__get_me,mcp__telegram__send_message,mcp__telegram__get_message_link" \ --model claude-sonnet-5
chmod +x ~/.claude/scripts/vacancy-digest.sh
Файл ~/Library/LaunchAgents/com.ИМЯ.vacancy-digest.plist (замени ИМЯ и путь к скрипту):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.ИМЯ.vacancy-digest</string>
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>/Users/ИМЯ/.claude/scripts/vacancy-digest.sh</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key><integer>11</integer>
<key>Minute</key><integer>0</integer>
</dict>
<key>StandardOutPath</key>
<string>/Users/ИМЯ/.claude/logs/vacancy-digest.log</string>
<key>StandardErrorPath</key>
<string>/Users/ИМЯ/.claude/logs/vacancy-digest.err.log</string>
<key>RunAtLoad</key><false/>
</dict>
</plist>
Hour/Minute — время запуска по местному времени. Компьютер должен быть включён в этот момент (выключенный ночью и включённый утром — нормально, просто ставь время с запасом).
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.ИМЯ.vacancy-digest.plist
launchctl enable gui/$(id -u)/com.ИМЯ.vacancy-digest
# тестовый запуск прямо сейчас, не дожидаясь расписания:
launchctl kickstart -p gui/$(id -u)/com.ИМЯ.vacancy-digest
Если всё настроено верно, через 1–2 минуты (проверка нескольких каналов занимает время) в Избранном появятся карточки вакансий — или ничего, если за последний день подходящего не нашлось.
| Действие | Команда |
|---|---|
| Изменить время | поправь Hour/Minute в plist, затем bootout + bootstrap + enable заново |
| Остановить совсем | launchctl bootout gui/$(id -u)/com.ИМЯ.vacancy-digest |
| Посмотреть логи | cat ~/.claude/logs/vacancy-digest.log |
Скрипту разрешены только пять инструментов Telegram (--allowedTools) — чтение папок и сообщений, ссылка на пост и отправка сообщения себе. У него нет доступа ни к каким другим чатам, кроме твоих собственных (Избранное), и нет возможности написать кому-то ещё.
Черновики писем — это черновики: Claude Code пишет их только на основе фактов, которые ты сама дала в профиле, и явно помечает каждое сообщение как неотправленное. Решение откликаться или нет, редактировать письмо или нет — всегда остаётся за тобой.