pi-reminders
Pi extension for Apple Reminders via osascript (AppleScript).
Package details
Install pi-reminders from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:pi-reminders- Package
pi-reminders- Version
0.5.2- Published
- Jul 18, 2026
- Downloads
- 663/mo · 352/wk
- Author
- diwu507
- License
- MIT
- Types
- extension
- Size
- 34.4 KB
- Dependencies
- 0 dependencies · 4 peers
Pi manifest JSON
{
"extensions": [
"./index.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
pi-reminders
Pi extension for Apple Reminders on macOS, powered by osascript(AppleScript 命令行)。
This repository is extension-first:
- Always-on
/reminderssmart slash command - Empty
/reminders= deterministic list of current incomplete reminders in近期待办 /reminders <自然语言>= hand back to the current-session LLM, which calls thereminderstool withactionreminderstool for explicit model-driven calls- Risk-tiered confirmation: add and complete execute directly, only delete asks once
- Default list:
近期待办
Features
/reminders→ deterministic list, zero LLM cost/reminders <自然语言>→ let the current LLM understand add / update / complete / delete intentreminders(action=list)supportsquery(title contains), inclusivedueFrom/dueTo(absoluteYYYY-MM-DDorYYYY-MM-DD HH:MM), and a positive integerlimit; results sort by due date ascending with undated items lastreminders(action=delete)acceptsqueries[]for a single batch confirm: resolved targets are deleted after one confirmation, unresolved ones are reported per itemreminderstool keeps the structuredaction=add|list|complete|delete|updatecontract unchanged- Bounded real RPC smoke: deterministic empty-command list plus nonempty handoff to the current Pi session
Quick start
- No install needed —
osascriptis built into macOS. On first use, grant automation permission when prompted (System Settings → Privacy & Security → Automation). - Add this repository path to
~/.pi/agent/settings.jsonunderpackages. - Reload pi.
- Use:
/reminders /reminders 明天上午九点提醒我给 Curio 发测试邀请 /reminders 把 ID 为 1234ABCD 的提醒事项标题改成 给 Curio 发正式邀请 /reminders 把 ID 为 1234ABCD 的提醒事项标记为完成 /reminders 删除 ID 为 1234ABCD 的提醒事项
Real runtime regression test
Run the extension through the actual pi --mode rpc --no-session protocol:
npx tsc --noEmit
python3 scripts/test-extension-rpc.py
node --experimental-strip-types scripts/test-list-query.ts
node --experimental-strip-types scripts/test-batch-delete.ts
node --experimental-strip-types scripts/test-id-match.ts
The smoke test auto-selects the empty-command list UI and verifies that nonempty /reminders input starts a Pi agent run and delivers its exact text to the current session. test-list-query.ts deterministically covers list-reading semantics (due window, sorting, limit, validation) and tool-result rendering never overflowing the terminal width, without touching the LLM or real reminders. test-id-match.ts is a read-only real-osascript integration test verifying that the short id shown to users resolves to the right reminder for update/complete/delete. Natural-language interpretation and action selection remain the current LLM's responsibility; this extension does not bind a model or automate a model behavior matrix.
Repository layout
pi-reminders/
├── README.md
├── AGENTS.md
├── CHANGELOG.md
├── package.json
├── tsconfig.json
├── index.ts
├── scripts/
│ ├── README.md
│ ├── test-extension-rpc.py
│ ├── test-list-query.ts
│ ├── test-batch-delete.ts
│ └── test-id-match.ts
└── doc/
├── README.md
├── 00-产品与原则/
├── 10-架构与运行/
├── 30-路线图/
├── 40-版本实施方案/
├── 术语表.md
└── 决策档案/
Design notes
- The extension talks to
Reminders.appdirectly viaosascript. - No MCP backend is used.
- The public repo is extension-only.
- The goal is a small, always-loaded reminder workflow that stays out of your way.
- The
reminderstool contract is for LLM work; the slash command is only the human entrypoint.
License
MIT