← Портфолио ЮР Юлия Репринцева EN

CLAUDE CODE · TELEGRAM · LAUNCHD

Пусть Claude Code каждый день сам присылает тебе вакансии — с черновиком отклика

Раз в день, без открытого терминала: проверяет твои каналы в Telegram, отбирает подходящее по ключевым словам, готовит черновик сопроводительного письма и присылает тебе же в Избранное. Работодателям ничего не уходит без твоей проверки.

Telegram-папка с каналами → фильтр по словам + формату → Claude Code пишет черновик → Избранное, раз в день

Что это делает

Скрипт запускается по расписанию (в macOS — через launchd) и открывает headless-сессию Claude Code с чётко заданным заданием: посмотреть выбранную папку в Telegram, взять сообщения за последний день из чатов-каналов, оставить только те, что совпадают по смыслу с твоим запросом, и отправить результат тебе же в личку («Избранное»).

На каждую подходящую вакансию — одно сообщение: роль и компания, формат работы и зарплата (если указаны), ссылка на исходный пост, контакты для отклика и черновик сопроводительного письма, написанный на основе твоего профиля. Письмо помечено как черновик — отправляешь его сама, если решила откликнуться.

Что нужно заранее

Проще всего не переписывать шаги руками, а открыть эту страницу в диалоге со своим Claude Code и попросить: «настрой мне то же самое, но под мою папку и мои ключевые слова». Он повторит всё сам, спросит недостающие детали и адаптирует под твою систему.

Шаги

01Найди ID своей папки

Спроси Claude Code в обычном чате: «покажи мои папки Telegram» — он вызовет list_folders и вернёт список с id. Запомни id нужной папки (в примерах ниже — 169).

02Определись с критериями отбора

Два независимых условия: ключевые слова по роли и формат работы. Например:

ПараметрПример значения
Ключевые словаредактор, smm, автор, продюсер, журналист, копирайтер
Формат работыудалённо, удаленка, remote, гибрид, гибридный

Вакансия проходит фильтр, только если встречается хотя бы одно слово из каждой группы.

03Напиши короткий профиль для писем (по желанию)

Если хочешь получать не только дайджест, но и готовые черновики откликов — дай Claude Code 3–5 предложений о себе: роль, ключевой опыт, достижения, контакты. Он будет использовать только эти факты и ничего не выдумывать.

04Создай скрипт

Файл, например, ~/.claude/scripts/vacancy-digest.sh — шаблон с местами под замену отмечен «# ← замени»:

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
terminal
chmod +x ~/.claude/scripts/vacancy-digest.sh

05Опиши расписание для launchd

Файл ~/Library/LaunchAgents/com.ИМЯ.vacancy-digest.plist (замени ИМЯ и путь к скрипту):

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 — время запуска по местному времени. Компьютер должен быть включён в этот момент (выключенный ночью и включённый утром — нормально, просто ставь время с запасом).

06Зарегистрируй и проверь

terminal
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 пишет их только на основе фактов, которые ты сама дала в профиле, и явно помечает каждое сообщение как неотправленное. Решение откликаться или нет, редактировать письмо или нет — всегда остаётся за тобой.