A lightweight Zsh plugin that displays urgent Remember The Milk tasks after each command execution. Clean, non-intrusive, and terminal-only.
- 📋 Shows urgent RTM tasks after command execution
- ⚡ Smart caching to avoid excessive API calls
- 🔧 Configurable via simple shell config file
- 🚀 Zero dependencies (except
rtm
CLI) - 🤫 Quiet when no urgent tasks
- Zsh shell
- Remember The Milk CLI installed and configured
- RTM CLI logged in to your account
-
Clone this repository:
git clone https://github.com/yourusername/rtm-reminder-zsh.git ~/.config/rtm-reminder-zsh
-
Add to your
~/.zshrc
:source ~/.config/rtm-reminder-zsh/rtm-reminder-zsh.plugin.zsh
-
Reload your shell:
source ~/.zshrc
-
Clone to Oh My Zsh custom plugins directory:
git clone https://github.com/yourusername/rtm-reminder-zsh.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/rtm-reminder-zsh
-
Add to your
~/.zshrc
plugins list:plugins=(... rtm-reminder-zsh)
For Zinit:
zinit load "yourusername/rtm-reminder-zsh"
For Zplug:
zplug "yourusername/rtm-reminder-zsh"
Create a config file at ~/.config/rtm-reminder-zsh/config
:
# Copy the example config
cp ~/.config/rtm-reminder-zsh/config/config.example ~/.config/rtm-reminder-zsh/config
# Edit the configuration
nano ~/.config/rtm-reminder-zsh/config
Option | Default | Description |
---|---|---|
URGENCY_QUERY |
'dueBefore:today or dueWithin:"1h"' |
RTM query to find urgent tasks |
MAX_TASKS |
2 |
Maximum number of tasks to display |
CHECK_INTERVAL_MINUTES |
5 |
How often to check for tasks (in minutes) |
SORT_TYPE |
'lsd' |
RTM sort command (ls/lsd/lsp) |
SHOW_DIVIDER |
true |
Show divider line above reminders |
DIVIDER_TEMPLATE |
'simple' |
Divider style template |
DIVIDER_CHAR |
'─' |
Character for divider line |
DIVIDER_FORMAT |
'' |
Custom Oh-My-Zsh format string |
# Show only overdue tasks
URGENCY_QUERY='dueBefore:today'
# Show up to 3 tasks
MAX_TASKS=3
# Check every 10 minutes
CHECK_INTERVAL_MINUTES=10
# Use styled divider (requires Oh-My-Zsh)
DIVIDER_TEMPLATE='styled'
The plugin supports highly customizable dividers that are compatible with Oh-My-Zsh prompt formatting.
Template | Description | Example |
---|---|---|
simple |
Basic line across screen | ──────────────────────────────── |
styled |
Blue styled line | ──────────────────────────────── |
user |
Include username | john ───────────────────────── |
time |
Include current time | 14:30 ─────────────────────── |
custom |
Use DIVIDER_FORMAT |
Fully customizable |
When using DIVIDER_TEMPLATE='custom'
, you can use full zsh prompt expansion:
# Colored divider with username and hostname
DIVIDER_FORMAT='%{$fg[cyan]%}%n@%m%{$reset_color%} %{$fg[blue]%}${(l:$((COLUMNS-10))::─:)}%{$reset_color%}'
# Time-stamped divider
DIVIDER_FORMAT='%D{%H:%M:%S} %{$fg[green]%}${(l:$((COLUMNS-9))::═:)}%{$reset_color%}'
# Fancy divider with RTM branding
DIVIDER_FORMAT='%{$fg_bold[yellow]%}── RTM ──${(l:$((COLUMNS-9))::─:)}%{$reset_color%}'
The plugin supports all standard zsh prompt sequences:
%n
- Username%m
- Hostname%D{format}
- Date/time (e.g.,%D{%H:%M}
)%{...%}
- Literal escape sequences for colors${(l:width::char:)}
- Left-pad with character to width$fg[color]
- Oh-My-Zsh color variables$reset_color
- Reset colors
# Available colors (Oh-My-Zsh)
$fg[red] $fg[green] $fg[yellow] $fg[blue] $fg[magenta] $fg[cyan] $fg[white]
$fg_bold[color] $fg_no_bold[color] $reset_color
# Rainbow divider
DIVIDER_FORMAT='%{$fg[red]%}──%{$fg[yellow]%}──%{$fg[green]%}──%{$fg[cyan]%}──%{$fg[blue]%}──%{$fg[magenta]%}${(l:$((COLUMNS-12))::─:)}%{$reset_color%}'
Once installed, the plugin runs automatically. After each command execution, it will:
- Check if the configured interval has passed
- Query RTM for urgent tasks
- Display a clean list of tasks (if any)
- Cache the result to avoid excessive API calls
Example output:
$ ls -la
total 48
drwxr-xr-x 6 user staff 192 Jan 15 10:30 .
drwxr-xr-x 3 user staff 96 Jan 15 10:29 ..
-rw-r--r-- 1 user staff 1234 Jan 15 10:30 README.md
📋 RTM Reminders:
• Call dentist - Due today
• Submit report - Due in 30 minutes
$
The plugin uses RTM's query syntax. Examples:
# High priority tasks due soon
URGENCY_QUERY='priority:1 and dueBefore:tomorrow'
# Tasks from specific lists
URGENCY_QUERY='list:Work and dueBefore:today'
# Overdue tasks only
URGENCY_QUERY='dueBefore:today'
- Set
CHECK_INTERVAL_MINUTES=0
to check after every command (not recommended) - Increase interval for less frequent checks and better performance
- The plugin creates cache files in
~/.cache/rtm-reminder-zsh/
-
Check if RTM CLI is installed and working:
rtm ls
-
Verify plugin is loaded:
echo $RTM_REMINDER_PLUGIN_DIR
-
Check if config file exists and is readable:
ls -la ~/.config/rtm-reminder-zsh/config
-
Test your RTM query directly:
rtm lsd "dueBefore:today or dueWithin:\"1h\""
-
Check the cache file timestamp:
cat ~/.cache/rtm-reminder-zsh/last_check
MIT License - feel free to modify and share!
✨ Vibe coded by Claude Code ✨
Issues and pull requests welcome! This plugin is designed to be lightweight and maintainable.