brainstorming
Structured design dialogue that validates ideas before implementation begins.
automating-reminders
Automates Apple Reminders using JavaScript for Automation (JXA). Use when asked to "create reminders programmatically", "automate reminder lists", "JXA Reminders scripting", or "manage reminders via automation". Covers list/reminder management, filtering with 'whose' queries, efficient creation v...
Full skill instructions
automating-mac-apps for permissions, shell helpers, and ObjC debugging patterns.automating-mac-apps skill (PyXA Installation section).Reminders works like a database: everything is accessed via specifiers (references to objects). Start by exploring the Reminders dictionary in Script Editor (switch to JavaScript view). Read properties with methods like name() or id(); write with assignments. Use .whose for efficient server-side filtering to minimize performance overhead. For creation, use constructors + .push() instead of make to avoid errors. Note: no native move command—use copy-delete instead. Priority: 1 (high), 5 (medium), 9 (low), 0 (none). Recurrence/location scripting is limited; use Shortcuts for advanced features.
First, ensure Reminders permissions are granted (see automating-mac-apps for setup).
JXA:
try {
const app = Application("Reminders");
// Get list by name, or fall back to first available list
let list;
try {
list = app.lists.byName("Reminders");
list.name(); // Verify it exists
} catch (e) {
// Fall back to first available list
const lists = app.lists();
if (lists.length === 0) {
throw new Error("No reminder lists found");
}
list = lists[0];
}
const r = app.Reminder({
name: "Prepare deck",
body: "Client review",
dueDate: new Date(Date.now() + 3*86400*1000), // 3 days from now
remindMeDate: new Date(Date.now() + 2*86400*1000), // Reminder 1 day before due
priority: 1 // High priority
});
list.reminders.push(r);
console.log("Reminder created in '" + list.name() + "'");
} catch (error) {
console.error("Failed to create reminder: " + error.message);
// Common errors: Permissions denied, list not found
}
Note: The list name varies by system. Common names include "Reminders", "Inbox", or localized versions. Using
app.lists()[0]as a fallback ensures the script works across different configurations.
PyXA (Recommended Modern Approach):
import PyXA
from datetime import datetime, timedelta
try:
reminders = PyXA.Reminders()
# Get Inbox list
inbox = reminders.lists().by_name("Inbox")
# Create reminder with due date and reminder alert
reminder = inbox.reminders().push({
"name": "Prepare deck",
"body": "Client review",
"due_date": datetime.now() + timedelta(days=3),
"remind_me_date": datetime.now() + timedelta(days=2),
"priority": 1 # High priority
})
print("Reminder created successfully")
except Exception as error:
print(f"Failed to create reminder: {error}")
# Common errors: Permissions denied, Inbox list not found
PyObjC with Scripting Bridge:
from ScriptingBridge import SBApplication
from Foundation import NSDate
try:
reminders = SBApplication.applicationWithBundleIdentifier_("com.apple.Reminders")
# Get Inbox list
lists = reminders.lists()
inbox = None
for lst in lists:
if lst.name() == "Inbox":
inbox = lst
break
if inbox:
# Create reminder
reminder = reminders.classForScriptingClass_("reminder").alloc().init()
reminder.setName_("Prepare deck")
reminder.setBody_("Client review")
# Set due date (3 days from now)
due_date = NSDate.dateWithTimeIntervalSinceNow_(3 * 24 * 60 * 60)
reminder.setDueDate_(due_date)
# Set reminder date (2 days from now)
remind_date = NSDate.dateWithTimeIntervalSinceNow_(2 * 24 * 60 * 60)
reminder.setRemindMeDate_(remind_date)
reminder.setPriority_(1) # High priority
# Add to inbox
inbox.reminders().addObject_(reminder)
print("Reminder created successfully")
else:
print("Inbox list not found")
except Exception as error:
print(f"Failed to create reminder: {error}")
app.lists.byName('Work')) or ID..whose for queries (e.g., reminders.whose({name: {_contains: 'meeting'}})). For dates, use _lessThan/_greaterThan.Reminder({...}) then add via .push() to avoid errors.Example: Filter overdue reminders:
const overdue = list.reminders.whose({dueDate: {_lessThan: new Date()}})();
After implementing Reminders automation:
app.lists().length > 0.whose queries return expected resultsapp.lists.byName(name) before use.Load progressively as needed:
automating-reminders/references/reminders-basics.md for specifiers and simple operations.automating-reminders/references/reminders-recipes.md for practical create/query/batch examples.automating-reminders/references/reminders-advanced.md (priority, limits, debugging).automating-reminders/references/reminders-dictionary.md for full type mappings.automating-reminders/references/reminders-pyxa-api-reference.mdStructured design dialogue that validates ideas before implementation begins.
Comprehensive design intelligence for web and mobile UI/UX across 10 technology stacks.
Comprehensive implementation plans for multi-step tasks, breaking down specs into bite-sized, testable steps.
Introduction to the obra skills system with mandatory skill invocation rules and best practices.
Execute a written implementation plan with critical review and task checkpoints.
Delegate independent tasks to specialized agents working concurrently with isolated context.
Isolated git worktrees with smart directory selection and safety verification.
Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.
Plan searchable and shareable content that drives traffic, builds authority, and generates leads.
README-first repository scanner that extracts commands and classifies reproduction candidates without executing them.
Brainstorm and prioritize marketing strategies tailored to your SaaS stage, budget, and goals.
Plan and optimize your website's page hierarchy, navigation, URL structure, and internal linking.
The world's fastest calendar for remote work
Capture, organize, and utilize your knowledge effortlessly.
Instant Summaries of Audio & Video Interviews with AnySummary
Transform PDFs into engaging mind maps.
Chat with any PDF instantly
Create an optimal daily plan using your voice
A productivity platform to centralize organizational knowledge and workflows with contextual AI assistance.
AskYourPDF Pricing Plans: Tailored to Your Needs