Full Daily Planner
Complete daily life management: health data import → health report → next-day plan → system crontab reminders.
Architecture
15:00 agentTurn (isolated) — Health Report
├── runs sleep_import.py (Google Drive → parse → Sheets → memory)
├── generates health report with leisure/relaxation recommendations
└── delivers to Telegram
22:00 agentTurn (isolated) — Next-Day Plan
├── reads health data + health report leisure recommendations
├── generates next-day plan
├── delivers plan to Telegram
├── writes plan to {PLAN_FILE}
└── runs update-reminders.sh → updates system crontab
22:05 system crontab → parse-plan-update-reminders.sh (fallback)
Next day: system crontab → tg-remind.sh → curl Telegram Bot API (zero LLM)
Setup
1. Install scripts
Copy scripts/ to a stable path (e.g. ~/.openclaw/scripts/):
tg-remind.sh— editBOT_TOKENandCHAT_IDupdate-reminders.sh— editREMINDpathparse-plan-update-reminders.sh— editPLAN_FILEandUPDATE_SCRIPTpathssleep_import.py— editACCOUNT,DRIVE_FOLDER_ID,SHEET_IDconstants
2. Prerequisites for sleep_import.py
gogCLI installed and authenticated (gog auth login)- Google Drive folder with Health Auto Export JSON files
- Google Sheets for sleep log
- Local workspace dirs:
tmp/sleep-import/,memory/
3. System crontab
# Fallback plan parser (22:05 local, convert to UTC)
5 <UTC_HOUR> * * * /path/to/parse-plan-update-reminders.sh
4. OpenClaw cron jobs
15:00 Health Report:
- schedule:
0 15 * * *(your timezone) - sessionTarget:
isolated - payload:
agentTurn— run sleep_import.py then generate report perreferences/health-report.md - timeoutSeconds:
600 - delivery: telegram
22:00 Next-Day Plan:
- schedule:
0 22 * * *(your timezone) - sessionTarget:
isolated - payload:
agentTurn— generate plan perreferences/briefing-prompt.md, write plan file - timeoutSeconds:
300 - delivery: telegram
5. Configure reference files
Edit both files in references/ — replace all {PLACEHOLDER} values with actual paths.
Scripts
| Script | Purpose |
|---|---|
sleep_import.py |
Import health data: Google Drive → parse → Sheets → memory |
tg-remind.sh |
Send Telegram message via Bot API (no LLM) |
update-reminders.sh |
Update crontab dynamic reminder block |
parse-plan-update-reminders.sh |
Parse plan file → extract times → update crontab |
sleep_import.py
Full pipeline: searches Google Drive for HealthAutoExport-YYYY-MM-DD.json (last 3 days), downloads, parses Apple Health metrics (sleep, HR, HRV, SpO2, respiratory rate, wrist temp, breathing disturbances), appends to Google Sheets, and updates local memory file.
python3 scripts/sleep_import.py
Output: human-readable sleep report with metrics, assessment, and advice.
update-reminders.sh
Flags: --recovery, --training, --english, --openclaw1..3 — all HH:MM local time. Only pass that day's events. OpenClaw = start time (auto -10min for warning).
Reference Files
references/briefing-prompt.md— Complete 22:00 plan generation rules. See for: life-day rules, schedule constraints, health report integration, self-check checklist.references/health-report.md— Complete 15:00 health report rules. See for: data pipeline, report format, leisure recommendation format.
Design Decisions
- Two isolated cron jobs: health report (15:00) and plan (22:00) run independently. Plan reads health report output, not the reverse.
- System crontab for reminders: LLM-based reminders unreliable. curl Telegram is mechanical and always works.
- Isolated sessions: 3x cheaper than session-bound (~$0.9 vs ~$2.6/run), stable context size.
- Plan file decoupling: 22:05 fallback parser catches cases where agent didn't update crontab.
- Health report → plan pipeline: health report includes leisure recommendations that the plan generator must incorporate. This creates a data dependency, not a runtime dependency.
