Rtm
Manage Remember The Milk tasks — list, add, complete, delete, search, prioritize, tag, move, and ann
- Rating
- 4.5 (394 reviews)
- Downloads
- 7,056 downloads
- Version
- 1.0.0
Overview
Manage Remember The Milk tasks — list, add, complete, delete, search, prioritize, tag, move, and annotate tasks.
Complete Documentation
View Source →
Remember The Milk
CLI tool at scripts/rtm.py for full RTM task management. Stdlib only — no pip dependencies.
Setup
- Get API credentials at https://www.rememberthemilk.com/services/api/keys.rtm
- Set env vars
RTM_API_KEYandRTM_SHARED_SECRET(via OpenClaw configskills.entries.rtm.env) - Run
scripts/rtm.py auth— opens a URL, authorize, press Enter. Token saves to~/.rtm_token
RTM_API_KEY=... RTM_SHARED_SECRET=... python3 scripts/rtm.py <command>
Security
- Env vars:
RTM_API_KEYandRTM_SHARED_SECRETare required at runtime. Configure via OpenClaw skill env, not hardcoded. - Auth token: Stored as plain text at
~/.rtm_tokenafter interactive auth. This file grants full access to the linked RTM account. Protect it accordingly — restrict file permissions (chmod 600) or remove after use if not needed persistently. - Network: All API calls go to
api.rememberthemilk.comandwww.rememberthemilk.comonly. No other outbound connections. - Permissions: The auth flow requests
deletepermission (RTM's highest tier) to support task deletion. Use a dedicated API key with minimum needed scope if preferred.
Commands
# Auth (interactive, one-time)
scripts/rtm.py auth
# Lists
scripts/rtm.py lists # show active lists
scripts/rtm.py lists --all # include archived
# Tasks
scripts/rtm.py tasks # all incomplete
scripts/rtm.py tasks --list LIST_ID # filter by list
scripts/rtm.py tasks --filter "priority:1" # RTM filter syntax
scripts/rtm.py tasks --no-notes # hide notes
# Add (--parse enables Smart Add for dates/tags/priority)
scripts/rtm.py add "Buy groceries" --list LIST_ID --parse
# Smart Add: "Buy milk ^tomorrow #shopping !1" sets due, tag, priority
# Complete / Delete
scripts/rtm.py complete LIST_ID SERIES_ID TASK_ID
scripts/rtm.py delete LIST_ID SERIES_ID TASK_ID
# Priority (1=high, 2=medium, 3=low, N=none)
scripts/rtm.py set-priority LIST_ID SERIES_ID TASK_ID 1
# Due date (natural language parsed by RTM)
scripts/rtm.py set-due LIST_ID SERIES_ID TASK_ID "next friday"
# Move between lists
scripts/rtm.py move FROM_LIST_ID TO_LIST_ID SERIES_ID TASK_ID
# Tags
scripts/rtm.py add-tags LIST_ID SERIES_ID TASK_ID "tag1,tag2"
# Search (RTM filter syntax)
scripts/rtm.py search "tag:work AND status:incomplete"
# Notes
scripts/rtm.py notes-add LIST_ID SERIES_ID TASK_ID "text" --title "Title"
scripts/rtm.py notes-delete NOTE_ID
Task output format
Task output includes IDs needed for write operations:
Task Name [P1] (due: 2025-03-15) #tag1 #tag2
list=12345 series=67890 task=11111
📝 Note Title (note_id=99999)
Note body text here
RTM filter syntax
Common filters: status:incomplete, priority:1, tag:tagname, due:today, dueBefore:tomorrow, list:Inbox, isTagged:true, addedWithin:"1 week". Combine with AND, OR, NOT.
Full reference: https://www.rememberthemilk.com/help/answers/search/advanced.rtm
Reliability
- All API calls have a 15-second timeout with automatic retry (up to 3 attempts with backoff)
- Transient network errors are retried; permanent API errors exit immediately
- Write operations (add, complete, delete, etc.) auto-create timelines
Installation
openclaw install rtm
💻Code Examples
scripts/rtm.py notes-delete NOTE_ID
## Task output format
Task output includes IDs needed for write operations:# Auth (interactive, one-time)
scripts/rtm.py auth
# Lists
scripts/rtm.py lists # show active lists
scripts/rtm.py lists --all # include archived
# Tasks
scripts/rtm.py tasks # all incomplete
scripts/rtm.py tasks --list LIST_ID # filter by list
scripts/rtm.py tasks --filter "priority:1" # RTM filter syntax
scripts/rtm.py tasks --no-notes # hide notes
# Add (--parse enables Smart Add for dates/tags/priority)
scripts/rtm.py add "Buy groceries" --list LIST_ID --parse
# Smart Add: "Buy milk ^tomorrow #shopping !1" sets due, tag, priority
# Complete / Delete
scripts/rtm.py complete LIST_ID SERIES_ID TASK_ID
scripts/rtm.py delete LIST_ID SERIES_ID TASK_ID
# Priority (1=high, 2=medium, 3=low, N=none)
scripts/rtm.py set-priority LIST_ID SERIES_ID TASK_ID 1
# Due date (natural language parsed by RTM)
scripts/rtm.py set-due LIST_ID SERIES_ID TASK_ID "next friday"
# Move between lists
scripts/rtm.py move FROM_LIST_ID TO_LIST_ID SERIES_ID TASK_ID
# Tags
scripts/rtm.py add-tags LIST_ID SERIES_ID TASK_ID "tag1,tag2"
# Search (RTM filter syntax)
scripts/rtm.py search "tag:work AND status:incomplete"
# Notes
scripts/rtm.py notes-add LIST_ID SERIES_ID TASK_ID "text" --title "Title"
scripts/rtm.py notes-delete NOTE_IDTask Name [P1] (due: 2025-03-15) #tag1 #tag2
list=12345 series=67890 task=11111
📝 Note Title (note_id=99999)
Note body text hereTags
Quick Info
Ready to Install?
Get started with this skill in seconds
Related Skills
4claw
4claw — a moderated imageboard for AI agents.
Aap Passport
Agent Attestation Protocol - The Reverse Turing Test.
Adaptive Suite
A continuously adaptive skill suite that empowers Clawdbot.
Adversarial Prompting
Adversarial analysis to critique, fix.