Introducing RemCTL: The Power-User Reminders CLI for macOS and AI Agents

RemCTL in the macOS Terminal app.

Today, I’m pleased to release my latest free and open source project: RemCTL, a power-user Reminders CLI that, unlike others, exposes all the latest Reminders features as of iOS and macOS 26. RemCTL supports reading and writing subtasks, tags, sections, rich links, image attachments, grocery lists, and even templates.

It’s available on GitHub here, and it comes bundled with a skill for desktop agents.

A couple of months ago, I decided to move back to Reminders for a variety of reasons. For starters, I was using Claude and Perplexity’s voice assistant heavily at the time, and Reminders was natively integrated with both on iOS and iPadOS. More importantly, however, I was missing the ease of capture for new tasks thanks to Siri, Control Center, and Apple Watch; I also figured that, come WWDC, I’d be able to hit the ground running on day one with iOS 27 and – I’m assuming – its integration between Reminders and the new Siri powered by Gemini-backed Apple Intelligence. Considering that I’m going to work on another in-depth review of iOS and iPadOS this summer, getting familiar with Reminders again seemed like a good idea.

As most of my work and agentic setup moved to Codex, though, I hit a roadblock: my agent had no idea how to work with Reminders and manage my tasks. I started doing some research, and I found a variety of third-party CLIs for macOS that were able to communicate with Reminders using the public EventKit API and allowed agents such as Claude Code and Codex to read and create tasks in the Reminders app for Mac. I took those CLIs for a spin, and while they worked, they only supported the basic set of features exposed by Reminders to third-party apps; modern features of Reminders such as sections, tags, subtasks, and early reminders were still locked behind a private API, and those CLIs – just like Reminders clients on the App Store – could not access those functionalities at all.

So I decided to take matters into my own hands and build the Reminders CLI of my dreams with Codex. After about two months of work and everyday tests, the result is RemCTL (short for “Reminders Control”): to the best of my knowledge, it’s the only Reminders CLI that can read and write any kind of reminder and Reminders metadata based on private APIs in a fast and secure fashion using a combination of EventKit, Reminders’ read-only SQLite database on macOS, and the native (but private) ReminderKit framework. Combined with an agent and its bundled skill, RemCTL lets you create and manage tasks with Reminders’ complete feature set as of iOS and macOS 26.

A variety of RemCTL commands in cmux for Mac.

If you can do something in Apple’s Reminders app, you – or your agent – can do it with RemCTL.

Here’s a simple way to think about RemCTL: if you can do something in Apple’s Reminders app, you – or your agent – can do it with RemCTL. Want to create basic reminders in a list with a recurring schedule? Not a problem. Want to see what’s due today? Just run remctl today, and you’ll get a pretty list of tasks due today with symbols for dates, alarms, and more. How about creating a task with some subtasks in a specific section of a list? RemCTL can also do that. The urgent reminders introduced in iOS 26? Those are supported. What about creating tasks with rich links, or turning lists into Reminders templates, or using tags? Check, check, and check. Thanks to its combination of public and private API access – which is only possible thanks to the open nature of macOS – RemCTL is the all-in-one Reminders CLI that Apple never made.

Want to know more about how to install and use RemCTL, and also how I built it? Let’s dive in.

Install and Use RemCTL

RemCTL is free and open source. You can inspect its code at this repo and run the following commands to install it on your Mac:

git clone https://github.com/viticci/remctl.git
cd remctl
./install.sh --bootstrap
remctl onboard
remctl permissions full-disk-access
remctl doctor
remctl today

(The following commands assume you have git set up on your Mac. I recommend cloning repos in a dedicated folder on your Mac.)

As you run these commands, you’ll immediately notice two things: you’ll get a native permission prompt to automate the Reminders app, and – I’m pretty proud of this one – you’ll be presented with a guided permission flow via a dedicated ‘Permissions’ window:

The native permission flow of RemCTL.

The Permissions screen was necessary because RemCTL needs full-disk access on macOS to read the Reminders database and perform actions via macOS’ Python interpreter. (If you don’t have Python installed, you’ll need it.) In this screen, you’ll see icons for the Terminal app and the currently installed Python interpreter on your machine; since the Full-Disk Access page of System Settings is also automatically opened by the CLI’s onboarding flow, you can just drag and drop those two icons onto System Settings and give them access. I tried to keep this one-time setup process as simple and “visual” as possible.

If you’re using Ghostty, cmux, or another terminal app for Mac, you’ll need to grant full-disk access to that specific app manually.

RemCTL is a mix of Python, Swift, and Objective-C code largely written by GPT 5.5 in Codex over the past couple of months. These three languages encompass the three main functionalities of RemCTL:

The CLI reads all kinds of Reminders data from the local database on your Mac at ~/Library/Group Containers/group.com.apple.reminders/.../Data-*.sqlite using Python.

It writes standard reminders using the publicly available EventKit API in Swift.

It can also write private API-only reminder attributes (such as tags, smart lists, pinned lists, etc.) using the ReminderKit framework with an Objective-C bridge, mimicking how the Reminders app works behind the scenes on macOS.

Because Codex reverse-engineered the entire Reminders stack on macOS, RemCTL works like a native addition to Reminders. This means that every change it makes syncs natively with iCloud across devices, just as if it were made by the Reminders app itself.

Once you have RemCTL installed with various permissions granted, I recommend asking your agent of choice to install the skill in the repo for itself. That skill provides agents with all the guidance they need to operate RemCTL and manage reminders on your behalf. Even better, I tried to build RemCTL with both people and agents in mind: every command in the CLI supports an agent-specific --json flag that agents can use to get structured output instead of the nice plain text that is presented to humans by default.

The same command, but one is optimized for agents (left), the other for people (right). Notice how the reminder IDs carry the color of the list they belong to. The clock emoji is for urgent reminders.

When I say that every single Reminders feature has been reverse-engineered for this CLI and agents, I mean it. Take list colors and symbols in the Reminders app, for example. When you create a list or smart list, Apple lets you choose from a subset of colors and glyphs based on SF Symbols:

Creating a list in the Reminders app.

RemCTL can read and write those same colors and symbols, but it goes beyond that. If you ask Codex to create a list with a specific color and symbol, the agent will try to find the closest color and icon match, and it’ll natively apply that; or, if a native symbol can’t be found, it’ll create a list with the closest emoji match, since emoji can also be used as symbols for lists. Not sure which color or symbol you’d like to use? Run remctl list-symbols --preview, and you’ll get an interactive HTML playground in the browser to preview all colors and symbols:

Previewing the symbols and colors supported by Reminders via RemCTL in cmux.

I could go on and on with the list of advanced commands supported by RemCTL, which become especially impressive when combined with desktop agents. (I tested RemCTL with Codex, Claude Code, Perplexity Personal Computer, and even the new Grok Build.) If you want to create a reminder in a specific section of a list with a rich web link, tag, and rich subtask with its own due date, notes, URL, tags, and flag – that’s all going to work. If you ask your agent to put together a smart list in Reminders that shows you items tagged #work that are also due today, the agent will create a native smart list for you. Ask it to pin it in the Reminders UI, and it’ll get pinned. Multiple combinations of filters are, in fact, supported for smart list creation (including locations with geofences, time of day, tags, and flags), allowing you to forego the complex filter UI and just let your agent figure out how to build smart lists for you.

Why do this manually…

…when your agent can do it all in 30 seconds?

RemCTL supports image attachments, can turn existing lists into templates, and works with the special Grocery lists that Apple introduced in iOS 17 with automatic categorization of items. Ask your agent to add something to your groceries, and Reminders will auto-categorize it. RemCTL even provides better output for those categories than Apple’s own UI since Grocery lists’ sections are laid out with relevant emoji:

Who does it better?

I think you get the idea.

I need to stop describing what RemCTL can do because (a) it’d be like describing what the current Reminders app can do and (b) there’s an entire repo with advanced docs and an agent skill that you can peruse and install.

Agents + Reminders Is a Dream Come True

RemCTL working in Moshi with Grok Build (left), the ChatGPT app with Codex (center), and Termius with Claude Code (right).

Since I started rethinking my workflow around desktop agents over the past year, I resisted the urge to switch back to Reminders because I knew it wouldn’t play nice with Claude Code, OpenClaw, and then Codex. I built RemCTL to scratch my own itch and turn Reminders into an agent-native task manager that I could slot into my automations and agentic setup. I hope you’ll find it as useful as I have.

I can’t stress this enough: the combination of a native app experience that is deeply integrated with the Apple ecosystem plus a CLI for desktop agents is outstanding and gives me the best of both worlds. With Reminders and RemCTL, I retain the ability to quickly dictate tasks with Siri on the Apple Watch and use quick capture from Control Center, but I can also have Codex compile the results of a long research session into an actionable plan in a Reminders list or automate the creation of a list with multiple sections and tasks.

Perhaps the new Siri and Apple Intelligence will obviate the need for some of RemCTL’s capabilities, but I don’t think it’ll be Sherlocked. I doubt that Apple’s chatbot will match the functionality of desktop agents like Claude Code and Codex for power users; for this reason, I look forward to updating RemCTL for whatever is coming to Reminders in macOS 27.

You can download and install RemCTL for free here.