Personal Assistant
Telegram-first planner for an OpenClaw NUC. Markdown data + Python scripts. No preset times — ask the user and save via config.py.
Architecture
| Layer | Role |
|---|---|
data/*.md |
Human-readable storage |
scripts/*.py |
CRUD, agenda, cron setup |
| OpenClaw cron | --command runs scripts (no LLM for briefings) |
| Agent | Parses chat, runs scripts |
No separate reminders — "remind me at 2pm" creates a todo with --due + --time + cron ping.
Onboarding
{baseDir}/references/onboarding.md — one question at a time:
- Timezone
- Morning briefing (time or off)
- Weekly review (day + time or off)
- Habit end-of-day check time
Then: python3 {baseDir}/scripts/setup_cron.py
Scripts
python3 {baseDir}/scripts/config.py set|show|unset ...
python3 {baseDir}/scripts/todo.py add|list|edit|done|remove ...
python3 {baseDir}/scripts/birthday.py add|list|upcoming|remove ...
python3 {baseDir}/scripts/habit.py add|list|log|remove ...
python3 {baseDir}/scripts/today.py [--weekly] [--overdue]
python3 {baseDir}/scripts/setup_cron.py
Agent workflows
Add todo
todo.py add "<title>" [--due YYYY-MM-DD] [--time HH:MM] [--priority high]
Priority inferred from wording if omitted ("urgent" → high). --time requires --due. Timed todos get a cron ping at due date+time.
Edit todo
todo.py edit <id> [--title] [--due] [--time] [--priority] [--clear-time]
Reschedules cron when time changes.
Complete / remove todo
todo.py done <id> or todo.py remove <id> — removes linked cron.
Birthday
birthday.py add "<name>" --date MM-DD [--year YYYY] — day-of morning briefing only.
Habit
habit.py add "<name>" — no time. Streak in morning briefing. EOD nudge + midnight auto-miss via global cron.
habit.py log <id> yes|no
Queries
- Today:
today.py - Overdue:
today.py --overdue - Weekly:
today.py --weekly
Cron jobs (from setup_cron.py)
| Job | When | Script |
|---|---|---|
| Morning briefing | User-configured | today.py |
| Weekly review | User-configured | today.py --weekly |
| Habit EOD | User-configured | habits_eod.py |
| Habit midnight | Daily 00:00 | habits_midnight.py |
| Timed todo | Per todo due+time | created by todo.py add/edit |
Rules
- Never invent times — ask and save to config.
- "Remind me at X" → todo with due + time, not a separate reminder.
- Overdue: morning briefing +
today.py --overdueonly — no nag cron. - Prefer scripts over hand-editing markdown.
