Bullet journal task synchronization with CalDAV via vdirsyncer.
Mind Goblin (mg) synchronizes plain text bullet journal files with CalDAV calendar services. Changes made in either the local text file or calendar applications are propagated bidirectionally.
The parser supports standard bullet journal notation and generates RFC 5545-compliant iCalendar data. All CalDAV communication is handled through vdirsyncer.
nix run github:daytimeforninja/mindgoblin -- init
nix run github:daytimeforninja/mindgoblin -- syncnix profile install github:daytimeforninja/mindgoblin
mg init && mg syncSupported symbols:
.- Open tasksx- Completed tasks!- Priority tasks$- Shopping itemso- Events<- Scheduled tasks>- Migrated tasks*- Ideas
Freeform text (lines without bullets) is preserved locally but not synced.
Bidirectional sync between local text files and CalDAV endpoints. Changes in either location are propagated on the next sync cycle.
RFC 5545 (iCalendar) and RFC 4791 (CalDAV) compliant.
Use #z:slug tags to extract notes to denote-format files:
2025-08-17
. Review quarterly plans @work
#z:atomic-habits Small changes compound for massive results over time
- Environment design beats willpower
- Focus on systems, not just goals
mg sync processes tasks for CalDAV and zettel tags for denote files in ~/doc/notes/.
Uses vdirsyncer for CalDAV communication.
Date-sectioned plaintext with bullet journal notation:
2025-08-17
. Buy groceries @errands
$ Milk and bread @groceries
! Call dentist @urgent Due: 2025-08-18
x Finished project @work
Meeting notes: discussed Q4 plans
- Reviewed roadmap priorities
- Customer feedback positive
- Need mobile app features
Files organized by date headers (YYYY-MM-DD format).
Use @context notation for categorization. Multiple contexts per task supported.
Format: Due: YYYY-MM-DD
mg sync performs bidirectional synchronization with today-only filtering:
- Only today's tasks sync to calendar apps
- Complete history remains in todo.txt
- Completion status syncs bidirectionally
- Calendar shows actionable items, text file preserves history
mg sync # Bidirectional sync with CalDAV and zettel extraction
mg push # Upload tasks to calendar (one-way)
mg pull # Download task changes from calendar (one-way)
mg zettel # Extract #z: tags to denote files
mg list # Show today's tasks by priority
mg init # Setup configuration and vdirsyncer
mg stats # Task statistics
mg watch # Auto-sync on file changes- Upload local tasks to calendar
- Download task changes from calendar
- Extract zettel tags to denote files
- Run vdirsyncer sync
- Update local file with remote changes
Extracts #z:slug tags to denote-format files:
- Scans todo.txt for zettel tags
- Creates timestamped files with metadata
- Skips existing files (no overwrites)
- Options:
--file,--notes-dir,--dry-run
Usage examples:
mg zettel # Extract from ~/todo.txt to ~/doc/notes
mg zettel --dry-run # Preview what would be extracted
mg zettel --file work.txt # Extract from custom file
mg zettel --notes-dir ~/notes # Custom output directorySetup configuration:
- Create directory structures
- Validate vdirsyncer config
- Calendar endpoint discovery
- Initial sync state
Shows tasks by priority (Priority β Open β Events β Completed):
- Default: today's tasks only
--all: show all dates--completed: include completed tasks--context work: filter by context--file: specify custom file
Usage examples:
mg list # Show today's tasks by priority
mg list --all # Show all tasks from all dates
mg list --completed # Include completed tasks
mg list --context work # Show only @work tasks
mg list --file ~/work.txt --all # Use custom file and show all tasksOutput format:
π₯ Priority Tasks:
! Fix production bug @urgent @computer Due: 2025-08-21
π Open Tasks:
. Review code changes @computer
π Shopping:
$ Milk and bread @groceries
π
Events:
o Team standup 10am @meetings
π Showing 4 tasks (today only)
Mind Goblin requires vdirsyncer for CalDAV communication. Install vdirsyncer through your system package manager or using pip:
pip install vdirsyncerExecute the following sequence to establish a complete working system:
- Install vdirsyncer - Required for CalDAV protocol communication
- Configure calendar discovery:
vdirsyncer discover tasks- Establishes authentication and endpoint discovery - Initialize Mind Goblin:
mg init- Creates configuration files and directory structures - Execute initial sync:
mg sync- Performs first bidirectional synchronization
Mind Goblin creates and maintains the following directory structure:
~/.config/mg/
βββ config # Main configuration file
βββ vdir/ # Local CalDAV cache directory
β βββ tasks/ # Individual task files in .ics format
βββ cache/ # Backup and temporary files
The system automatically generates configuration files optimized for most use cases. Advanced users may customize behavior through the ~/.config/mg/config file following standard TOML syntax.
Symptom: Tasks are not appearing in calendar applications after sync
Resolution: Verify vdirsyncer operation with vdirsyncer sync tasks. Check network connectivity and authentication credentials.
Symptom: Identical tasks appearing multiple times
Resolution: Upgrade to version 0.1.3.0 or later. Execute mg pull to resolve existing duplicates.
Symptom: Parser errors related to date sections
Resolution: Ensure all date headers follow ISO 8601 format: YYYY-MM-DD (example: 2025-08-17). Verify no invalid dates such as February 30th.
Symptom: "Device or resource busy" errors during sync Resolution: Ensure no other applications have the todo.txt file open. Restart the sync operation.
mg stats # Display system status and task counts
mg list # Show today's actionable tasks by priority
mg list --all # Show all tasks across all dates
vdirsyncer sync tasks # Test direct vdirsyncer functionality
mg init --force # Reset configuration (destructive)- Design Document - Comprehensive architectural overview and implementation details
- Installation Guide - Advanced installation scenarios and platform-specific instructions
- RFC 5545 - iCalendar specification
- RFC 4791 - CalDAV specification
- Bullet Journal Method - Original bullet journal methodology
- GitHub Repository: daytimeforninja/mindgoblin
- Issue Tracking: GitHub Issues
- License: AGPL-3.0-or-later