From aria-proactive
Send a proactive Telegram message by spawning a fresh headless Claude session (not the current one). Use this when the user asks for scheduled or fire-and-forget tasks that end in a Telegram notification — it avoids the 409 Conflict that would occur if a second session tried to load the telegram plugin alongside the current one.
How this skill is triggered — by the user, by Claude, or both
Slash command
/aria-proactive:proactive-messageThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
- User asks for scheduled messaging ("every day at X", "remind me at Y", recurring check-ins)
Do NOT use this skill for normal in-session replies — use mcp__plugin_telegram_telegram__reply directly when responding live.
When the current session was launched with --channels plugin:telegram@claude-plugins-official, it spawned a bun subprocess that long-polls Telegram's getUpdates API. Telegram only allows one getUpdates poller per bot token — a second claude instance with the same flag would hit endless 409 Conflict retries.
But sending a message (sendMessage API) is a stateless HTTP POST that works from any process. The pattern:
claude -p "<prompt>" without --channels → no polling conflictThe telegram plugin must already be configured and paired (token stored at ~/.claude/channels/telegram/.env). This skill uses that existing token but does NOT require the plugin to be running in the fresh session.
You need a TELEGRAM_CHAT_ID — the chat where messages should be delivered. Get this from the inbound <channel> tag in any Telegram message the user has sent.
TELEGRAM_CHAT_ID=<chat_id> "${CLAUDE_PLUGIN_ROOT}/scripts/aria-send.sh" "<task description>"
Examples:
# Simple greeting
TELEGRAM_CHAT_ID=123456 "${CLAUDE_PLUGIN_ROOT}/scripts/aria-send.sh" \
"Send a good morning greeting and check if there's anything on the calendar today"
# Status report with external data
TELEGRAM_CHAT_ID=123456 "${CLAUDE_PLUGIN_ROOT}/scripts/aria-send.sh" \
"Look up the current BTC price and send a one-line comment"
# Memory-aware check-in
TELEGRAM_CHAT_ID=123456 "${CLAUDE_PLUGIN_ROOT}/scripts/aria-send.sh" \
"Query long-term memory for today's schedule and send a reminder"
The fresh session:
For persistent scheduling that survives session restarts, shell out to crontab or launchd pointing at the helper script.
crontab (edit with crontab -e):
# Daily 9:03am greeting
3 9 * * * TELEGRAM_CHAT_ID=123456 /path/to/aria-proactive/scripts/aria-send.sh "Send a good morning check-in"
launchd (macOS, better than cron for sleep/wake handling): create a plist in ~/Library/LaunchAgents/ with ProgramArguments pointing at the script and EnvironmentVariables.TELEGRAM_CHAT_ID set.
Use at for "remind me at X time" requests:
echo 'TELEGRAM_CHAT_ID=123456 /path/to/aria-proactive/scripts/aria-send.sh "Remind about the 2pm meeting"' \
| at 13:55
The helper script reads these env vars:
| Variable | Required | Default | Purpose |
|---|---|---|---|
TELEGRAM_CHAT_ID | Yes | — | Destination chat |
TELEGRAM_TOKEN_FILE | No | $HOME/.claude/channels/telegram/.env | File with TELEGRAM_BOT_TOKEN |
CLAUDE_BIN | No | claude (on PATH) | Claude CLI path |
mcp__plugin_telegram_telegram__reply — use this for live in-session replies, NOT this skill.Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub ar8327/aria --plugin aria-proactive