- Single file: All tasks in
~/todo.txt - Bullet journal notation: Standard symbols for task types
- Minimal sync: Push tasks, pull completion status only
- Historical record: Complete log preserved in text file
- Plain text: Human-readable, tool-agnostic format
- vdirsyncer integration: Leverage existing CalDAV tooling
YYYY-MM-DD
<bullet> <task text> [<@context>...] [Due: YYYY-MM-DD]
<continuation lines indented with two spaces>
•Open task×Completed task>Migrated task<Scheduled task−Note!Priority task*Idea○Event
Tasks can include @context tags for categorization and filtering.
Format: Due: YYYY-MM-DD
Format: #z:slug content for zettelkasten integration.
~/todo.txt → [Parse] → [Filter: today only] → [CalDAV] → Calendar App
~/todo.txt ← [Update completion status] ← [CalDAV] ← Calendar App
- Complete todo.txt file maintains all dates and entries
- Calendar app shows only today's actionable items
- Completion status syncs bidirectionally
- Notes and non-actionable content stays local
~/todo.txt → [Parse #z: tags] → [Generate denote files] → ~/doc/notes/
- Parser: Bullet journal notation parsing
- Types: Core data structures (Task, Bullet, Context, Zettel)
- VTodo: iCalendar VTODO generation
- VDir: vdir file operations
- Sync: Orchestration and coordination
- FileOps: Safe file operations
- VDirSyncer: Subprocess management
- Zettel: Zettelkasten integration
- vdirsyncer: CalDAV protocol handling
- Calendar service: Google Calendar, iCloud, FastMail, etc.
- Parse
~/todo.txt - Filter for today's actionable tasks
- Generate VTODO/VEVENT for each task
- Write to vdir directory
- Run
vdirsyncer sync
- Run
vdirsyncer sync - Read vdir directory
- Identify completed tasks
- Update completion status in
~/todo.txt
- Parse
~/todo.txtfor#z:tags - Generate denote-format files
- Write to
~/doc/notes/(skip if exists)
- Open (•): Needs action
- Completed (×): Done
- Priority (!): Urgent
- Scheduled (<): Timed
- Event (○): Appointment
- Idea (*): Future consideration
- Migrated (>): Moved to different date
- Note (−): Information only
- Open/Priority/Scheduled → NEEDS-ACTION
- Completed → COMPLETED
- Event → VEVENT instead of VTODO
- Only today's tasks sync to calendar
- Only actionable tasks sync (not ideas, notes, migrated)
- Completion status syncs bidirectionally
- Calendar changes don't modify task text or contexts
- Invalid date formats: skip section with warning
- Malformed tasks: skip line with warning
- Continue processing remaining content
- vdirsyncer failures: abort with error message
- Network issues: retry with exponential backoff
- Calendar service errors: surface to user
- Atomic writes to prevent corruption
- Backup original before modifications
- Rollback on failure
- Parser validation for all bullet types
- VTODO generation correctness
- Date handling and filtering
- Context extraction
- Full sync cycle simulation
- vdirsyncer interaction
- File modification scenarios
- Error condition handling
- Round-trip parsing (parse → serialize → parse)
- UID determinism
- Date arithmetic correctness
- Large todo.txt files (10k+ entries) parse in <100ms
- Today-only filtering keeps calendar sync lightweight
- Incremental parsing for watch mode
- Stream-based parsing for large files
- Minimal data structure overhead
- Lazy evaluation where possible
- Only today's tasks transmitted
- Compression handled by vdirsyncer
- Differential sync via vdirsyncer's conflict resolution