Optional automations that add proactive behavior between Claude Code sessions.
None of these are required. Copana works great with just claude and your markdown files.
No Python, no API keys, no pip. Just cron + Claude Code:
# Example: morning briefing
claude -p "Read memory.md and tasks.md. What needs attention today?" \
--allowedTools "Read,Glob,Grep" --output-format json | jq -r '.result'See crontab-sdk.example for a full schedule.
More customizable, supports the always-running Telegram bot.
pip install -r requirements.txtAdd your API keys to .env (copy from .env.example).
| File | Approach |
|---|---|
crontab-sdk.example |
Agent SDK — claude -p commands |
crontab.example |
Python scripts |
Edit with crontab -e.
| Script | What it does | When to run |
|---|---|---|
morning_briefing.py |
Summary of tasks, loops, nudges | Daily, 7:00 AM |
proactive_ping.py |
Smart nudges about stale items | 2-3x/day |
evening_checkin.py |
Quick mood/energy check-in | Daily, 21:30 |
daily_reflection.py |
AI reviews your files overnight | Daily, 23:00 |
weekly_review.py |
Week-in-review with patterns | Sunday, 20:00 |
news_briefing.py |
Relevant news from RSS feeds | Daily or on-demand |
telegram_bot.py |
Chat with your AI via Telegram | Always running |
session_end.sh |
Git commit memory changes | End of each session |
copana_utils.py provides:
send_notification()— Telegram or ntfy.shcall_ai()— Claude API wrapperload_context()— Load markdown filesget_open_loops()/get_pending_tasks()— Parse memory fileslog()— Timestamped loggingsave_data()/load_data()— JSON data persistence
Both approaches support notifications:
Agent SDK: Pipe output to ntfy or Telegram via curl (see crontab-sdk.example).
Python scripts: Configure in .env:
- Telegram — Set
TELEGRAM_BOT_TOKENandTELEGRAM_CHAT_ID - ntfy.sh — Set
NTFY_TOPIC(free, no account needed)
If neither is configured, output goes to stdout only.