Forums

Discuss all things Remember The Milk.

Daily Task Refresh

shalgrim says:
I don't complete all my tasks that are due every day. (I know that's a bad practice that may trigger you, but let's leave it aside for now.) As a result, I spend the first part of my day updating my list, which mostly involves postponing tasks. That's a lot of selecting and postponing.

To make it a bit more complex, I also don't want to postpone every task. Some tasks are daily reminders that, if I didn't get to them that day, don't really need to be pushed into the next day. For example, "meditate," or "practice gratitude" don't make sense to double up on.

So I've made a MilkScript that cleans up my list for me. Any task in my Now list due before today that is incomplete gets postponed, unless it has the tag "zskip," in which case it gets completed. Finally, if I have a high priority task from yesterday that didn't get completed, I don't want to automate the postponing or completion of that task...I want human input on something like that, so I just leave those alone so they're visible.

Finally, I've also set up a Zap on Zapier so every day at 6 AM my MilkScript gets run automatically

Here's my Script:

const nowList = rtm.getSmartLists().find(smartList => smartList.getName() === 'Now');
const incompleteNowTasksDueToday = nowList.getTasks('status:incomplete AND dueBefore:today')
console.info(`Your "Now" list has ${incompleteNowTasksDueToday.length} items in it due before today`);
const tagsByTaskIdMap = new Map(
incompleteNowTasksDueToday.map(task => {
const id = task.getId();
const tagNames = task.getTags().map(tag => tag.getName());
return [id, tagNames];
})
);
incompleteNowTasksDueToday.forEach(task => {
const name = task.getName();
const priority = task.getPriority();
const tagNames = tagsByTaskIdMap.get(task.getId()) || [];
if (priority.toString() === rtm.Priority.High.toString()) {
// I don't want to postpone or complete High priority tasks; requires human evaluation
console.info(`skipping high priority task ${name}`);
} else if (tagNames.includes('zskip')) {
console.info(`Completing zskip task ${name}`);
task.complete();
} else {
console.info(`Postponing ${name}`);
task.postpone();
}
});
Posted at 11:17pm on October 14, 2025
irminger.elise says:
I have been on the computer for hours today looking for exactly this type of thing! Please tell me where I can learn this magic. I will, of course, be studying this code to try to see if I can bend it to my will.
Posted 10 days ago
Log in to post a reply.