agentrem 1.3.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +98 -6
- package/assets/Agentrem.app/Contents/Info.plist +11 -0
- package/assets/Agentrem.app/Contents/MacOS/agentrem-notify +0 -0
- package/assets/notify-src/main.swift +159 -35
- package/dist/date-parser.d.ts.map +1 -1
- package/dist/date-parser.js +20 -1
- package/dist/date-parser.js.map +1 -1
- package/dist/notifier.d.ts +1 -0
- package/dist/notifier.d.ts.map +1 -1
- package/dist/notifier.js +2 -1
- package/dist/notifier.js.map +1 -1
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +2 -0
- package/dist/service.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.js +1 -1
- package/llms-full.txt +240 -9
- package/llms.txt +43 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/agentrem)
|
|
4
4
|
[](https://github.com/fraction12/agentrem/actions/workflows/ci.yml)
|
|
5
|
-
[](https://github.com/fraction12/agentrem)
|
|
6
6
|
[](https://opensource.org/licenses/MIT)
|
|
7
7
|
[](https://nodejs.org)
|
|
8
8
|
[](https://modelcontextprotocol.io)
|
|
9
9
|
|
|
10
|
-
Structured reminders CLI + MCP server that gives AI agents persistent, priority-aware memory with triggers, recurrence, dependencies,
|
|
10
|
+
Structured reminders CLI + MCP server that gives AI agents persistent, priority-aware memory with triggers, recurrence, dependencies, full-text search, and native OS notifications.
|
|
11
11
|
|
|
12
|
-
**Why?** AI agents forget between sessions. agentrem gives them a reminder system that persists across sessions, triggers on time/keywords/conditions, and fits within token budgets.
|
|
12
|
+
**Why?** AI agents forget between sessions. agentrem gives them a reminder system that persists across sessions, triggers on time/keywords/conditions, fires native desktop notifications, and fits within token budgets.
|
|
13
13
|
|
|
14
14
|
## Install
|
|
15
15
|
|
|
@@ -56,7 +56,7 @@ agentrem add "<content>" --due "<when>" --priority <1-5> --tags "<tags>"
|
|
|
56
56
|
**3. That's it.** Next time you tell Claude Code "remind me to deploy tomorrow at 9am", it runs:
|
|
57
57
|
|
|
58
58
|
```bash
|
|
59
|
-
agentrem add "Deploy to production" --due "tomorrow
|
|
59
|
+
agentrem add "Deploy to production" --due "tomorrow" --priority 2
|
|
60
60
|
```
|
|
61
61
|
|
|
62
62
|
Next session, `agentrem check` surfaces it automatically.
|
|
@@ -125,9 +125,17 @@ agentrem complete <id>
|
|
|
125
125
|
## Quick Start
|
|
126
126
|
|
|
127
127
|
```bash
|
|
128
|
+
# Run the interactive walkthrough (first time)
|
|
129
|
+
agentrem quickstart
|
|
130
|
+
|
|
128
131
|
# Time-triggered reminder
|
|
129
132
|
agentrem add "Deploy v2.1 to staging" --due "+2h" --priority 2 --tags "deploy,staging"
|
|
130
133
|
|
|
134
|
+
# Natural language dates
|
|
135
|
+
agentrem add "Send weekly report" --due "tomorrow" --priority 2
|
|
136
|
+
agentrem add "Check alerts" --due "in 30 minutes"
|
|
137
|
+
agentrem add "Quarterly review" --due "2026-04-01" --priority 3
|
|
138
|
+
|
|
131
139
|
# Keyword-triggered (fires when text matches)
|
|
132
140
|
agentrem add "Review security checklist" --trigger keyword --keywords "deploy,release" --match any
|
|
133
141
|
|
|
@@ -135,7 +143,7 @@ agentrem add "Review security checklist" --trigger keyword --keywords "deploy,re
|
|
|
135
143
|
agentrem add "Check CI pipeline status" --trigger session
|
|
136
144
|
|
|
137
145
|
# Recurring weekly reminder
|
|
138
|
-
agentrem add "Weekly sync prep" --due "
|
|
146
|
+
agentrem add "Weekly sync prep" --due "2026-02-24T09:00:00" --recur 1w
|
|
139
147
|
|
|
140
148
|
# Check what's triggered
|
|
141
149
|
agentrem check
|
|
@@ -148,6 +156,9 @@ agentrem search "deploy staging"
|
|
|
148
156
|
|
|
149
157
|
# Complete
|
|
150
158
|
agentrem complete <id>
|
|
159
|
+
|
|
160
|
+
# Run self-diagnostics
|
|
161
|
+
agentrem doctor
|
|
151
162
|
```
|
|
152
163
|
|
|
153
164
|
## CLI Commands
|
|
@@ -170,6 +181,10 @@ agentrem complete <id>
|
|
|
170
181
|
| `export` | Export to JSON |
|
|
171
182
|
| `import <file>` | Import from JSON |
|
|
172
183
|
| `schema` | Show database schema |
|
|
184
|
+
| `watch` | Background daemon: poll + fire OS notifications |
|
|
185
|
+
| `doctor` | Self-diagnostic check |
|
|
186
|
+
| `quickstart` | Interactive first-run walkthrough |
|
|
187
|
+
| `setup` | Print CLAUDE.md snippet (`--mcp` for MCP config) |
|
|
173
188
|
|
|
174
189
|
## Trigger Types
|
|
175
190
|
|
|
@@ -192,8 +207,80 @@ agentrem complete <id>
|
|
|
192
207
|
| 4 | ⚪ Low | Counted but not surfaced |
|
|
193
208
|
| 5 | 💤 Someday | Skipped entirely |
|
|
194
209
|
|
|
210
|
+
## Natural Language Dates
|
|
211
|
+
|
|
212
|
+
`--due` (and `--until`, `--decay`) accept many formats:
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
--due "now" # Immediately
|
|
216
|
+
--due "today" # Today at 23:59
|
|
217
|
+
--due "tomorrow" # Tomorrow at 09:00
|
|
218
|
+
--due "in 5 minutes" # Relative natural language
|
|
219
|
+
--due "in 2 hours"
|
|
220
|
+
--due "in 3 days"
|
|
221
|
+
--due "in 1 week"
|
|
222
|
+
--due "+5m" # Short relative
|
|
223
|
+
--due "+2h"
|
|
224
|
+
--due "+3d"
|
|
225
|
+
--due "+1w"
|
|
226
|
+
--due "2026-02-22T09:00:00" # ISO datetime
|
|
227
|
+
--due "2026-02-22" # ISO date
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
## Background Watcher
|
|
231
|
+
|
|
232
|
+
`agentrem watch` polls for due reminders and fires native OS notifications. Perfect for always-on setups or running as a background service.
|
|
233
|
+
|
|
234
|
+
```bash
|
|
235
|
+
# Run in foreground
|
|
236
|
+
agentrem watch # Poll every 30s
|
|
237
|
+
agentrem watch --interval 60 # Custom interval
|
|
238
|
+
agentrem watch --agent jarvis # Watch for a specific agent
|
|
239
|
+
agentrem watch --once # Single check, then exit
|
|
240
|
+
agentrem watch --verbose # Show poll log
|
|
241
|
+
|
|
242
|
+
# Service management (auto-start on boot)
|
|
243
|
+
agentrem watch --install # Install as launchd/systemd service
|
|
244
|
+
agentrem watch --install --interval 60 # Install with custom interval
|
|
245
|
+
agentrem watch --uninstall # Remove service
|
|
246
|
+
agentrem watch --status # Check if installed and running
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
The watcher uses a 5-minute per-reminder cooldown to avoid notification spam. It checks all trigger types (`time`, `heartbeat`, `session`, `condition`) and runs escalation automatically.
|
|
250
|
+
|
|
251
|
+
**Service files:**
|
|
252
|
+
- macOS: `~/Library/LaunchAgents/com.agentrem.watch.plist`
|
|
253
|
+
- Linux: `~/.config/systemd/user/agentrem-watch.service`
|
|
254
|
+
- Logs: `~/.agentrem/logs/watch.log`
|
|
255
|
+
|
|
256
|
+
## Native Notifications 🔔
|
|
257
|
+
|
|
258
|
+
agentrem ships a custom Swift app (`Agentrem.app`) in `assets/`. On macOS, notifications show:
|
|
259
|
+
|
|
260
|
+
- **App name:** "agentrem" with a 🔔 bell icon (not a terminal icon)
|
|
261
|
+
- **Priority-based sounds:** P1=Hero, P2=Ping, P3=Pop
|
|
262
|
+
- **Cheeky overdue messages:** e.g. "so... you forgot about this one 😅"
|
|
263
|
+
|
|
264
|
+
**Notification backend priority:**
|
|
265
|
+
|
|
266
|
+
| Backend | When used |
|
|
267
|
+
|---------|-----------|
|
|
268
|
+
| `Agentrem.app` | Preferred on macOS (bundled, no dependencies) |
|
|
269
|
+
| `terminal-notifier` | Fallback if app is missing |
|
|
270
|
+
| `osascript` | macOS AppleScript fallback |
|
|
271
|
+
| `console` | Linux / last resort |
|
|
272
|
+
|
|
273
|
+
To rebuild the Swift app from source:
|
|
274
|
+
|
|
275
|
+
```bash
|
|
276
|
+
npm run build:notify
|
|
277
|
+
```
|
|
278
|
+
|
|
195
279
|
## Features
|
|
196
280
|
|
|
281
|
+
- **Natural language dates** — `--due "tomorrow"`, `"in 5 minutes"`, `"+2h"`, ISO formats
|
|
282
|
+
- **Background watcher** — `agentrem watch` daemon with OS service management
|
|
283
|
+
- **Native notifications** — custom macOS app with bell icon, priority sounds, cheeky overdue messages
|
|
197
284
|
- **Recurrence** — `--recur 1d/2w/1m` auto-creates next instance on completion
|
|
198
285
|
- **Dependencies** — `--depends-on <id>` blocks until dependency is completed
|
|
199
286
|
- **Decay** — `--decay <datetime>` auto-expires after a date
|
|
@@ -204,6 +291,8 @@ agentrem complete <id>
|
|
|
204
291
|
- **Undo** — revert any change via audit history
|
|
205
292
|
- **Multi-agent** — `--agent <name>` isolates reminders per agent
|
|
206
293
|
- **Export/Import** — JSON backup with merge and replace modes
|
|
294
|
+
- **Doctor** — `agentrem doctor` runs self-diagnostics
|
|
295
|
+
- **Quickstart** — `agentrem quickstart` for interactive first-run setup
|
|
207
296
|
|
|
208
297
|
## MCP Server
|
|
209
298
|
|
|
@@ -230,7 +319,10 @@ git clone https://github.com/fraction12/agentrem.git
|
|
|
230
319
|
cd agentrem
|
|
231
320
|
npm install
|
|
232
321
|
npm run build
|
|
233
|
-
npm test #
|
|
322
|
+
npm test # 392 tests
|
|
323
|
+
|
|
324
|
+
# Rebuild native notification app (Swift)
|
|
325
|
+
npm run build:notify
|
|
234
326
|
```
|
|
235
327
|
|
|
236
328
|
## License
|
|
@@ -14,5 +14,16 @@
|
|
|
14
14
|
<string>APPL</string>
|
|
15
15
|
<key>LSUIElement</key>
|
|
16
16
|
<true/>
|
|
17
|
+
<key>CFBundleURLTypes</key>
|
|
18
|
+
<array>
|
|
19
|
+
<dict>
|
|
20
|
+
<key>CFBundleURLSchemes</key>
|
|
21
|
+
<array>
|
|
22
|
+
<string>agentrem</string>
|
|
23
|
+
</array>
|
|
24
|
+
<key>CFBundleURLName</key>
|
|
25
|
+
<string>com.agentrem.notifier</string>
|
|
26
|
+
</dict>
|
|
27
|
+
</array>
|
|
17
28
|
</dict>
|
|
18
29
|
</plist>
|
|
Binary file
|
|
@@ -8,6 +8,7 @@ struct NotifyPayload: Decodable {
|
|
|
8
8
|
let subtitle: String?
|
|
9
9
|
let message: String
|
|
10
10
|
let sound: String?
|
|
11
|
+
let reminderId: String?
|
|
11
12
|
}
|
|
12
13
|
|
|
13
14
|
// ── Read JSON file from argv[1] or process args ──────────────────────────────
|
|
@@ -23,49 +24,118 @@ for i in 1..<args.count {
|
|
|
23
24
|
}
|
|
24
25
|
}
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
27
|
+
// Parse payload if a JSON path was provided (nil when relaunched for action handling)
|
|
28
|
+
var parsedPayload: NotifyPayload? = nil
|
|
29
|
+
if let path = jsonPath {
|
|
30
|
+
if let fileData = try? Data(contentsOf: URL(fileURLWithPath: path)),
|
|
31
|
+
let decoded = try? JSONDecoder().decode(NotifyPayload.self, from: fileData) {
|
|
32
|
+
parsedPayload = decoded
|
|
33
|
+
} else {
|
|
34
|
+
fputs("agentrem-notify: failed to read or decode \(path)\n", stderr)
|
|
35
|
+
exit(1)
|
|
36
|
+
}
|
|
35
37
|
}
|
|
36
38
|
|
|
37
39
|
// ── Set up as proper NSApplication (required for UNUserNotificationCenter) ───
|
|
38
40
|
|
|
39
41
|
class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDelegate {
|
|
40
|
-
let payload: NotifyPayload
|
|
41
|
-
|
|
42
|
-
|
|
42
|
+
let payload: NotifyPayload?
|
|
43
|
+
var timeoutWorkItem: DispatchWorkItem?
|
|
44
|
+
|
|
45
|
+
init(payload: NotifyPayload?) {
|
|
43
46
|
self.payload = payload
|
|
44
47
|
super.init()
|
|
45
48
|
}
|
|
46
|
-
|
|
49
|
+
|
|
50
|
+
// ── Shared logging ────────────────────────────────────────────────────────
|
|
51
|
+
|
|
52
|
+
func log(_ msg: String) {
|
|
53
|
+
let logPath = NSHomeDirectory() + "/.agentrem/logs/notify-actions.log"
|
|
54
|
+
let ts = ISO8601DateFormatter().string(from: Date())
|
|
55
|
+
let line = "[\(ts)] \(msg)\n"
|
|
56
|
+
if let fh = FileHandle(forWritingAtPath: logPath) {
|
|
57
|
+
fh.seekToEndOfFile()
|
|
58
|
+
fh.write(line.data(using: .utf8)!)
|
|
59
|
+
fh.closeFile()
|
|
60
|
+
} else {
|
|
61
|
+
// Create parent dirs if needed
|
|
62
|
+
try? FileManager.default.createDirectory(
|
|
63
|
+
atPath: NSHomeDirectory() + "/.agentrem/logs",
|
|
64
|
+
withIntermediateDirectories: true)
|
|
65
|
+
FileManager.default.createFile(atPath: logPath, contents: line.data(using: .utf8))
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// ── Run `agentrem complete <reminderId>` ──────────────────────────────────
|
|
70
|
+
|
|
71
|
+
func runComplete(reminderId: String) {
|
|
72
|
+
log("Running: agentrem complete \(reminderId)")
|
|
73
|
+
let proc = Process()
|
|
74
|
+
proc.executableURL = URL(fileURLWithPath: "/opt/homebrew/bin/node")
|
|
75
|
+
proc.arguments = ["/opt/homebrew/lib/node_modules/agentrem/dist/index.js", "complete", reminderId]
|
|
76
|
+
proc.environment = ["HOME": NSHomeDirectory(), "PATH": "/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin"]
|
|
77
|
+
do {
|
|
78
|
+
try proc.run()
|
|
79
|
+
proc.waitUntilExit()
|
|
80
|
+
log("Complete exited with code \(proc.terminationStatus)")
|
|
81
|
+
} catch {
|
|
82
|
+
log("ERROR running complete: \(error.localizedDescription)")
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
47
86
|
func applicationDidFinishLaunching(_ notification: Notification) {
|
|
48
87
|
let center = UNUserNotificationCenter.current()
|
|
49
88
|
center.delegate = self
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
89
|
+
|
|
90
|
+
// Register the "Complete ✅" action category so macOS shows the button.
|
|
91
|
+
// .foreground ensures the app is brought to foreground on tap, making
|
|
92
|
+
// the didReceive callback fire reliably even after relaunch.
|
|
93
|
+
let completeAction = UNNotificationAction(
|
|
94
|
+
identifier: "COMPLETE_REMINDER",
|
|
95
|
+
title: "Complete ✅",
|
|
96
|
+
options: []
|
|
97
|
+
)
|
|
98
|
+
let category = UNNotificationCategory(
|
|
99
|
+
identifier: "AGENTREM_REMINDER",
|
|
100
|
+
actions: [completeAction],
|
|
101
|
+
intentIdentifiers: [],
|
|
102
|
+
options: []
|
|
103
|
+
)
|
|
104
|
+
center.setNotificationCategories([category])
|
|
105
|
+
|
|
106
|
+
if payload != nil {
|
|
107
|
+
// Normal launch: request permission then fire the notification
|
|
108
|
+
center.requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in
|
|
109
|
+
if let error = error {
|
|
110
|
+
fputs("agentrem-notify: auth error: \(error.localizedDescription)\n", stderr)
|
|
111
|
+
NSApp.terminate(nil)
|
|
112
|
+
return
|
|
113
|
+
}
|
|
114
|
+
guard granted else {
|
|
115
|
+
fputs("agentrem-notify: notification permission not granted\n", stderr)
|
|
116
|
+
NSApp.terminate(nil)
|
|
117
|
+
return
|
|
118
|
+
}
|
|
119
|
+
self.postNotification()
|
|
62
120
|
}
|
|
63
|
-
|
|
64
|
-
self.postNotification()
|
|
65
121
|
}
|
|
122
|
+
// else: relaunched to handle an action or URL — wait for the delegate callback
|
|
123
|
+
|
|
124
|
+
// Terminate after 10 s whether or not we handle an action
|
|
125
|
+
scheduleTimeout(seconds: 10.0)
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
func scheduleTimeout(seconds: Double) {
|
|
129
|
+
let work = DispatchWorkItem {
|
|
130
|
+
NSApp.terminate(nil)
|
|
131
|
+
}
|
|
132
|
+
timeoutWorkItem = work
|
|
133
|
+
DispatchQueue.main.asyncAfter(deadline: .now() + seconds, execute: work)
|
|
66
134
|
}
|
|
67
|
-
|
|
135
|
+
|
|
68
136
|
func postNotification() {
|
|
137
|
+
guard let payload = payload else { return }
|
|
138
|
+
|
|
69
139
|
let content = UNMutableNotificationContent()
|
|
70
140
|
content.title = payload.title
|
|
71
141
|
content.body = payload.message
|
|
@@ -75,24 +145,78 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele
|
|
|
75
145
|
} else {
|
|
76
146
|
content.sound = .default
|
|
77
147
|
}
|
|
78
|
-
|
|
148
|
+
|
|
149
|
+
// Attach category so the "Complete ✅" button appears
|
|
150
|
+
content.categoryIdentifier = "AGENTREM_REMINDER"
|
|
151
|
+
|
|
152
|
+
// Pass reminderId (and URL scheme backup) so we can call `agentrem complete`
|
|
153
|
+
if let reminderId = payload.reminderId {
|
|
154
|
+
content.userInfo = [
|
|
155
|
+
"reminderId": reminderId,
|
|
156
|
+
"url": "agentrem://complete/\(reminderId)"
|
|
157
|
+
]
|
|
158
|
+
}
|
|
159
|
+
|
|
79
160
|
let request = UNNotificationRequest(
|
|
80
161
|
identifier: UUID().uuidString,
|
|
81
162
|
content: content,
|
|
82
163
|
trigger: nil
|
|
83
164
|
)
|
|
84
|
-
|
|
165
|
+
|
|
85
166
|
UNUserNotificationCenter.current().add(request) { error in
|
|
86
167
|
if let error = error {
|
|
87
168
|
fputs("agentrem-notify: post error: \(error.localizedDescription)\n", stderr)
|
|
88
|
-
}
|
|
89
|
-
// Give the notification a moment to display
|
|
90
|
-
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
|
|
91
169
|
NSApp.terminate(nil)
|
|
92
170
|
}
|
|
171
|
+
// Stay alive for 10 s to handle an immediate action tap;
|
|
172
|
+
// the timeout scheduled in applicationDidFinishLaunching covers this.
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// ── URL scheme handler (agentrem://complete/<reminderId>) ─────────────────
|
|
177
|
+
|
|
178
|
+
func application(_ application: NSApplication, open urls: [URL]) {
|
|
179
|
+
for url in urls {
|
|
180
|
+
log("application:open URL=\(url.absoluteString)")
|
|
181
|
+
guard url.scheme == "agentrem",
|
|
182
|
+
url.host == "complete" else {
|
|
183
|
+
log("Unrecognised URL, ignoring: \(url.absoluteString)")
|
|
184
|
+
continue
|
|
185
|
+
}
|
|
186
|
+
// Path is "/<reminderId>" — strip leading slash
|
|
187
|
+
let reminderId = url.path.hasPrefix("/")
|
|
188
|
+
? String(url.path.dropFirst())
|
|
189
|
+
: url.path
|
|
190
|
+
guard !reminderId.isEmpty else {
|
|
191
|
+
log("URL missing reminderId: \(url.absoluteString)")
|
|
192
|
+
continue
|
|
193
|
+
}
|
|
194
|
+
runComplete(reminderId: reminderId)
|
|
195
|
+
}
|
|
196
|
+
timeoutWorkItem?.cancel()
|
|
197
|
+
NSApp.terminate(nil)
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// ── Action handler ────────────────────────────────────────────────────────
|
|
201
|
+
|
|
202
|
+
func userNotificationCenter(_ center: UNUserNotificationCenter,
|
|
203
|
+
didReceive response: UNNotificationResponse,
|
|
204
|
+
withCompletionHandler completionHandler: @escaping () -> Void) {
|
|
205
|
+
log("didReceive action=\(response.actionIdentifier) userInfo=\(response.notification.request.content.userInfo)")
|
|
206
|
+
|
|
207
|
+
if response.actionIdentifier == "COMPLETE_REMINDER" {
|
|
208
|
+
if let reminderId = response.notification.request.content.userInfo["reminderId"] as? String,
|
|
209
|
+
!reminderId.isEmpty {
|
|
210
|
+
runComplete(reminderId: reminderId)
|
|
211
|
+
} else {
|
|
212
|
+
log("No reminderId in userInfo")
|
|
213
|
+
}
|
|
93
214
|
}
|
|
215
|
+
completionHandler()
|
|
216
|
+
timeoutWorkItem?.cancel()
|
|
217
|
+
NSApp.terminate(nil)
|
|
94
218
|
}
|
|
95
|
-
|
|
219
|
+
|
|
96
220
|
// Show notification even when app is in foreground
|
|
97
221
|
func userNotificationCenter(_ center: UNUserNotificationCenter,
|
|
98
222
|
willPresent notification: UNNotification,
|
|
@@ -103,6 +227,6 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele
|
|
|
103
227
|
|
|
104
228
|
let app = NSApplication.shared
|
|
105
229
|
app.setActivationPolicy(.accessory) // No dock icon
|
|
106
|
-
let delegate = AppDelegate(payload:
|
|
230
|
+
let delegate = AppDelegate(payload: parsedPayload)
|
|
107
231
|
app.delegate = delegate
|
|
108
232
|
app.run()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-parser.d.ts","sourceRoot":"","sources":["../src/date-parser.ts"],"names":[],"mappings":"AAIA,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"date-parser.d.ts","sourceRoot":"","sources":["../src/date-parser.ts"],"names":[],"mappings":"AAIA,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CA6EzC;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,IAAI,GAAG,MAAM,CAQxC;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CA0B9C;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAIjE;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAQ9E;AAED,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACvC,IAAI,CAcN"}
|
package/dist/date-parser.js
CHANGED
|
@@ -22,8 +22,27 @@ export function parseDate(s) {
|
|
|
22
22
|
}
|
|
23
23
|
return now;
|
|
24
24
|
}
|
|
25
|
-
// 2.
|
|
25
|
+
// 2. Natural language: "in N minutes/hours/days"
|
|
26
|
+
const nlm = /^in\s+(\d+)\s*(min(?:ute)?s?|hours?|days?|weeks?)$/i.exec(s);
|
|
27
|
+
if (nlm) {
|
|
28
|
+
const n = parseInt(nlm[1], 10);
|
|
29
|
+
const unit = nlm[2].toLowerCase();
|
|
30
|
+
const now = new Date();
|
|
31
|
+
if (unit.startsWith('min'))
|
|
32
|
+
now.setMinutes(now.getMinutes() + n);
|
|
33
|
+
else if (unit.startsWith('hour'))
|
|
34
|
+
now.setHours(now.getHours() + n);
|
|
35
|
+
else if (unit.startsWith('day'))
|
|
36
|
+
now.setDate(now.getDate() + n);
|
|
37
|
+
else if (unit.startsWith('week'))
|
|
38
|
+
now.setDate(now.getDate() + n * 7);
|
|
39
|
+
return now;
|
|
40
|
+
}
|
|
41
|
+
// 2b. Named shortcuts
|
|
26
42
|
const sl = s.toLowerCase();
|
|
43
|
+
if (sl === 'now') {
|
|
44
|
+
return new Date();
|
|
45
|
+
}
|
|
27
46
|
if (sl === 'today') {
|
|
28
47
|
const now = new Date();
|
|
29
48
|
now.setHours(23, 59, 0, 0);
|
package/dist/date-parser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-parser.js","sourceRoot":"","sources":["../src/date-parser.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAE7E,MAAM,WAAW,GAAG,oBAAoB,CAAC;AAEzC,MAAM,UAAU,SAAS,CAAC,CAAS;IACjC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAEb,4CAA4C;IAC5C,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,EAAE,CAAC;QACN,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;QACvC,CAAC;aAAM,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACxB,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;QACnC,CAAC;aAAM,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACxB,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QACjC,CAAC;aAAM,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACxB,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"date-parser.js","sourceRoot":"","sources":["../src/date-parser.ts"],"names":[],"mappings":"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"}
|
package/dist/notifier.d.ts
CHANGED
package/dist/notifier.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notifier.d.ts","sourceRoot":"","sources":["../src/notifier.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"notifier.d.ts","sourceRoot":"","sources":["../src/notifier.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI3C,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,eAAe,GAAG,cAAc,GAAG,mBAAmB,GAAG,WAAW,GAAG,SAAS,CAAC;AAM7F,8CAA8C;AAC9C,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED,wEAAwE;AACxE,wBAAgB,cAAc,IAAI,eAAe,CA2BhD;AAkBD,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAapD;AAED,mFAAmF;AACnF,wBAAgB,eAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,GAAE,MAAmB,GAAG,UAAU,CAgBnF;AA4BD,0DAA0D;AAC1D,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAiBvD;AAED,wEAAwE;AACxE,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAE3C"}
|
package/dist/notifier.js
CHANGED
|
@@ -86,7 +86,7 @@ export function buildNotifyOpts(rem, now = Date.now()) {
|
|
|
86
86
|
}
|
|
87
87
|
const message = truncate(rem.content, 80);
|
|
88
88
|
const sound = PRIORITY_SOUNDS[rem.priority]; // undefined for P4/P5
|
|
89
|
-
return { title, subtitle, message, sound, group: 'com.agentrem.watch' };
|
|
89
|
+
return { title, subtitle, message, sound, group: 'com.agentrem.watch', reminderId: rem.id };
|
|
90
90
|
}
|
|
91
91
|
// ── Path helpers ─────────────────────────────────────────────────────────────
|
|
92
92
|
/** Resolve the bundled .app bundle path. Returns undefined if it doesn't exist. */
|
|
@@ -148,6 +148,7 @@ function sendViaAgentremApp(opts) {
|
|
|
148
148
|
subtitle: opts.subtitle,
|
|
149
149
|
message: opts.message,
|
|
150
150
|
sound: opts.sound,
|
|
151
|
+
reminderId: opts.reminderId,
|
|
151
152
|
});
|
|
152
153
|
writeFileSync(tmpPath, payload, 'utf8');
|
|
153
154
|
try {
|
package/dist/notifier.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notifier.js","sourceRoot":"","sources":["../src/notifier.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,2FAA2F;AAC3F,+DAA+D;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"notifier.js","sourceRoot":"","sources":["../src/notifier.ts"],"names":[],"mappings":"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"}
|
package/dist/service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AACvD,eAAO,MAAM,iBAAiB,2BAA2B,CAAC;AAE1D,MAAM,WAAW,cAAc;IAC7B,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAID,uDAAuD;AACvD,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,sDAAsD;AACtD,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAaD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,GAAE,cAAmB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AACvD,eAAO,MAAM,iBAAiB,2BAA2B,CAAC;AAE1D,MAAM,WAAW,cAAc;IAC7B,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAID,uDAAuD;AACvD,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,sDAAsD;AACtD,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAaD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,GAAE,cAAmB,GAAG,MAAM,CAwDtE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,GAAE,cAAmB,GAAG,MAAM,CA+BrE;AAID,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;AASpD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,GAAE,cAAmB,GAAG,aAAa,CA+EvE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAmDhD;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAqDhD;AAID,MAAM,WAAW,sBAAsB;IACrC,qBAAqB,EAAE,OAAO,CAAC;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,sBAAsB,CAuBzD;AAID,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAO3C"}
|
package/dist/service.js
CHANGED
|
@@ -77,6 +77,8 @@ ${programArgsXml}
|
|
|
77
77
|
\t<dict>
|
|
78
78
|
\t\t<key>HOME</key>
|
|
79
79
|
\t\t<string>${escapeXml(os.homedir())}</string>
|
|
80
|
+
\t\t<key>PATH</key>
|
|
81
|
+
\t\t<string>${escapeXml(process.env.PATH || '/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin')}</string>
|
|
80
82
|
\t</dict>
|
|
81
83
|
|
|
82
84
|
\t<key>ThrottleInterval</key>
|
package/dist/service.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,qEAAqE;AACrE,uDAAuD;AAEvD,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,CAAC,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AACvD,MAAM,CAAC,MAAM,iBAAiB,GAAG,wBAAwB,CAAC;AAe1D,8EAA8E;AAE9E,uDAAuD;AACvD,MAAM,UAAU,kBAAkB;IAChC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,kBAAkB,QAAQ,CAAC,CAAC;AAC3F,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,kBAAkB;IAChC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC;AAClF,CAAC;AAED,wCAAwC;AACxC,SAAS,SAAS,CAAC,QAAiB;IAClC,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC;QACP,kCAAkC;QAClC,OAAO,UAAU,CAAC;IACpB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAuB,EAAE;IAC5D,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IAC3E,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAEvD,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IACnE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,cAAc,GAAG,WAAW;SAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;SAClD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO;;;;;YAKG,kBAAkB;;;;EAI5B,cAAc;;;;;;;;;;YAUJ,SAAS,CAAC,SAAS,CAAC;;;YAGpB,SAAS,CAAC,SAAS,CAAC;;;;;cAKlB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;;;;;;;
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const SCHEMA_VERSION = 1;
|
|
2
|
-
export declare const VERSION = "1.
|
|
2
|
+
export declare const VERSION = "1.4.0";
|
|
3
3
|
export declare const PRIORITY_LABELS: Record<number, string>;
|
|
4
4
|
export declare const PRIORITY_COLORS: Record<number, string>;
|
|
5
5
|
export declare const VALID_TRIGGERS: Set<string>;
|
package/dist/types.js
CHANGED
package/llms-full.txt
CHANGED
|
@@ -28,7 +28,7 @@ Create a reminder.
|
|
|
28
28
|
|
|
29
29
|
| Flag | Description | Example |
|
|
30
30
|
|------|-------------|---------|
|
|
31
|
-
| `--due, -d <datetime>` | Due datetime (
|
|
31
|
+
| `--due, -d <datetime>` | Due datetime (natural language or ISO) | `--due "+2h"`, `--due "tomorrow"`, `--due "in 5 minutes"` |
|
|
32
32
|
| `--trigger, -t <type>` | Trigger type: time/keyword/condition/session/heartbeat/manual | `--trigger keyword` |
|
|
33
33
|
| `--priority, -p <n>` | Priority 1-5 (default: 3) | `--priority 1` |
|
|
34
34
|
| `--tags <tags>` | Comma-separated tags | `--tags "deploy,urgent"` |
|
|
@@ -50,6 +50,10 @@ Create a reminder.
|
|
|
50
50
|
# Time reminder
|
|
51
51
|
agentrem add "Deploy v2" --due "+2h" --priority 2 --tags "deploy"
|
|
52
52
|
|
|
53
|
+
# Natural language due date
|
|
54
|
+
agentrem add "Team standup" --due "tomorrow" --priority 3
|
|
55
|
+
agentrem add "Send report" --due "in 30 minutes"
|
|
56
|
+
|
|
53
57
|
# Keyword trigger
|
|
54
58
|
agentrem add "Review security" --trigger keyword --keywords "deploy,release" --match any
|
|
55
59
|
|
|
@@ -57,7 +61,7 @@ agentrem add "Review security" --trigger keyword --keywords "deploy,release" --m
|
|
|
57
61
|
agentrem add "Check CI" --trigger session
|
|
58
62
|
|
|
59
63
|
# Recurring weekly
|
|
60
|
-
agentrem add "Team sync prep" --due "
|
|
64
|
+
agentrem add "Team sync prep" --due "2026-02-24T09:00:00" --recur 1w
|
|
61
65
|
|
|
62
66
|
# With dependency
|
|
63
67
|
agentrem add "Deploy" --due "+4h" --depends-on abc12345
|
|
@@ -175,7 +179,7 @@ Snooze a reminder.
|
|
|
175
179
|
|
|
176
180
|
```bash
|
|
177
181
|
agentrem snooze abc12345 --for 2h
|
|
178
|
-
agentrem snooze abc12345 --until "tomorrow
|
|
182
|
+
agentrem snooze abc12345 --until "tomorrow"
|
|
179
183
|
```
|
|
180
184
|
|
|
181
185
|
### agentrem edit <id>
|
|
@@ -187,7 +191,7 @@ Edit reminder fields.
|
|
|
187
191
|
| `--content <text>` | New content |
|
|
188
192
|
| `--context <ctx>` | New context |
|
|
189
193
|
| `--priority, -p <n>` | New priority |
|
|
190
|
-
| `--due, -d <datetime>` | New due date |
|
|
194
|
+
| `--due, -d <datetime>` | New due date (natural language or ISO) |
|
|
191
195
|
| `--tags <tags>` | Replace all tags |
|
|
192
196
|
| `--add-tags <tags>` | Add tags |
|
|
193
197
|
| `--remove-tags <tags>` | Remove tags |
|
|
@@ -200,6 +204,7 @@ Edit reminder fields.
|
|
|
200
204
|
```bash
|
|
201
205
|
agentrem edit abc12345 --priority 1
|
|
202
206
|
agentrem edit abc12345 --due "+4h" --add-tags "urgent"
|
|
207
|
+
agentrem edit abc12345 --due "in 2 hours"
|
|
203
208
|
```
|
|
204
209
|
|
|
205
210
|
### agentrem delete [id]
|
|
@@ -307,17 +312,218 @@ agentrem setup # Print CLAUDE.md snippet
|
|
|
307
312
|
agentrem setup --mcp # Print Claude Desktop MCP config
|
|
308
313
|
```
|
|
309
314
|
|
|
310
|
-
### agentrem
|
|
315
|
+
### agentrem doctor
|
|
311
316
|
|
|
312
|
-
|
|
317
|
+
Self-diagnostic command. Checks that the database exists and is healthy, schema is valid, and warns about overdue reminders or large DB size.
|
|
318
|
+
|
|
319
|
+
| Flag | Description |
|
|
320
|
+
|------|-------------|
|
|
321
|
+
| `--json` | Output structured JSON |
|
|
322
|
+
|
|
323
|
+
```bash
|
|
324
|
+
agentrem doctor
|
|
325
|
+
agentrem doctor --json
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
Output:
|
|
329
|
+
```
|
|
330
|
+
🩺 agentrem doctor
|
|
331
|
+
|
|
332
|
+
✅ Database exists: /Users/you/.agentrem/reminders.db
|
|
333
|
+
✅ Schema valid: Tables: reminders, history, reminders_fts
|
|
334
|
+
⚠️ Active reminders: 0 active reminders. Add one: agentrem add "Test" --due "+1h"
|
|
335
|
+
✅ Database size: 64 KB
|
|
336
|
+
|
|
337
|
+
🟡 Some issues found.
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
JSON output example:
|
|
341
|
+
```json
|
|
342
|
+
{
|
|
343
|
+
"healthy": false,
|
|
344
|
+
"checks": [
|
|
345
|
+
{ "check": "Database exists", "status": "ok", "detail": "/Users/you/.agentrem/reminders.db" },
|
|
346
|
+
{ "check": "Schema valid", "status": "ok", "detail": "Tables: reminders, history, reminders_fts" },
|
|
347
|
+
{ "check": "Active reminders", "status": "warn", "detail": "No active reminders. Add one: agentrem add \"Test\" --due \"+1h\"" },
|
|
348
|
+
{ "check": "Database size", "status": "ok", "detail": "64 KB" }
|
|
349
|
+
]
|
|
350
|
+
}
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
### agentrem quickstart
|
|
354
|
+
|
|
355
|
+
Interactive first-run walkthrough. Initializes the database (if needed), creates a sample reminder, runs a check, and cleans up — confirming everything works.
|
|
356
|
+
|
|
357
|
+
```bash
|
|
358
|
+
agentrem quickstart
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
Output:
|
|
362
|
+
```
|
|
363
|
+
📦 Step 1/4: Initializing database...
|
|
364
|
+
📝 Step 2/4: Creating a sample reminder...
|
|
365
|
+
🔔 Step 3/4: Checking triggered reminders...
|
|
366
|
+
✅ Step 4/4: Completing the test reminder...
|
|
367
|
+
|
|
368
|
+
🎉 Quickstart complete! agentrem is working.
|
|
369
|
+
|
|
370
|
+
Next steps:
|
|
371
|
+
agentrem add "My first real reminder" --due "+1h" --priority 2
|
|
372
|
+
agentrem check
|
|
373
|
+
agentrem setup # Get your CLAUDE.md snippet
|
|
374
|
+
agentrem doctor # Run diagnostics anytime
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
### agentrem watch
|
|
378
|
+
|
|
379
|
+
Background daemon that polls for due reminders and fires native OS notifications. Runs until interrupted (SIGINT/SIGTERM).
|
|
380
|
+
|
|
381
|
+
| Flag | Description |
|
|
382
|
+
|------|-------------|
|
|
383
|
+
| `--interval <seconds>` | Poll interval in seconds (default: 30) |
|
|
384
|
+
| `--agent, -a <name>` | Agent name to check for (default: main) |
|
|
385
|
+
| `--once` | Run a single check and exit |
|
|
386
|
+
| `--verbose` | Show poll log output |
|
|
387
|
+
| `--install` | Install as OS background service (launchd on macOS, systemd on Linux) |
|
|
388
|
+
| `--uninstall` | Remove the background service |
|
|
389
|
+
| `--status` | Show service status |
|
|
390
|
+
|
|
391
|
+
```bash
|
|
392
|
+
# Run in foreground
|
|
393
|
+
agentrem watch # Poll every 30s (default)
|
|
394
|
+
agentrem watch --interval 60 # Poll every 60s
|
|
395
|
+
agentrem watch --agent jarvis # Check reminders for agent "jarvis"
|
|
396
|
+
agentrem watch --once # Single check then exit
|
|
397
|
+
agentrem watch --verbose # Verbose logging
|
|
398
|
+
|
|
399
|
+
# Service management (auto-start on boot)
|
|
400
|
+
agentrem watch --install # Install and start service
|
|
401
|
+
agentrem watch --install --interval 60 # Install with custom interval
|
|
402
|
+
agentrem watch --uninstall # Stop and remove service
|
|
403
|
+
agentrem watch --status # Show installed/running status
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
#### How polling works
|
|
407
|
+
|
|
408
|
+
- Runs `coreCheck` with types `time,heartbeat,session,condition` and `--escalate` on every tick
|
|
409
|
+
- Per-reminder **dedup cooldown**: once a reminder is notified, it won't fire again for 5 minutes
|
|
410
|
+
- Handles SIGINT/SIGTERM for clean shutdown
|
|
411
|
+
- First check runs immediately on start
|
|
412
|
+
|
|
413
|
+
#### Service management
|
|
414
|
+
|
|
415
|
+
**macOS (launchd):**
|
|
416
|
+
- Writes a LaunchAgent plist to `~/Library/LaunchAgents/com.agentrem.watch.plist`
|
|
417
|
+
- Logs to `~/.agentrem/logs/watch.log` and `watch.error.log`
|
|
418
|
+
- Service label: `com.agentrem.watch`
|
|
419
|
+
- `KeepAlive: true` — restarts automatically on crash
|
|
420
|
+
|
|
421
|
+
**Linux (systemd):**
|
|
422
|
+
- Writes a user unit to `~/.config/systemd/user/agentrem-watch.service`
|
|
423
|
+
- Enabled with `systemctl --user enable --now`
|
|
424
|
+
- Logs to `~/.agentrem/logs/watch.log` and `watch.error.log`
|
|
425
|
+
|
|
426
|
+
#### watch --status output
|
|
427
|
+
|
|
428
|
+
```
|
|
429
|
+
✅ Installed: true
|
|
430
|
+
🟢 Running: true
|
|
431
|
+
Platform: darwin
|
|
432
|
+
File: /Users/you/Library/LaunchAgents/com.agentrem.watch.plist
|
|
433
|
+
Detail: launchctl: ...
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
#### watch --once (single check)
|
|
437
|
+
|
|
438
|
+
Useful in scripts or cron jobs to check once and exit. Combine with `--verbose` to see what fired:
|
|
439
|
+
|
|
440
|
+
```bash
|
|
441
|
+
agentrem watch --once --verbose
|
|
442
|
+
# [agentrem watch] started — interval=30s agent=main
|
|
443
|
+
# [agentrem watch] 🔔 [8f103c9c] Deploy v2
|
|
444
|
+
# [agentrem watch] checked at 2026-02-22T09:00:00.000Z — 1 triggered, 1 notified
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
---
|
|
448
|
+
|
|
449
|
+
## Native Notifications
|
|
450
|
+
|
|
451
|
+
agentrem ships a custom Swift app (`Agentrem.app`) bundled in `assets/`. When present, it is preferred over all other backends.
|
|
452
|
+
|
|
453
|
+
### Notification Backends (priority order)
|
|
454
|
+
|
|
455
|
+
| Backend | When used | Notes |
|
|
456
|
+
|---------|-----------|-------|
|
|
457
|
+
| `agentrem-app` | `Agentrem.app` found in `assets/` | Preferred. Shows "agentrem" as app name with 🔔 bell icon |
|
|
458
|
+
| `terminal-notifier` | `terminal-notifier` on PATH | Fallback if app missing |
|
|
459
|
+
| `osascript` | macOS, no terminal-notifier | Native AppleScript notifications |
|
|
460
|
+
| `console` | Linux / no other option | Prints to stdout |
|
|
461
|
+
|
|
462
|
+
### Priority-Based Sounds
|
|
463
|
+
|
|
464
|
+
| Priority | Sound |
|
|
465
|
+
|----------|-------|
|
|
466
|
+
| P1 Critical | Hero |
|
|
467
|
+
| P2 High | Ping |
|
|
468
|
+
| P3 Normal | Pop |
|
|
469
|
+
| P4–P5 | (no sound) |
|
|
470
|
+
|
|
471
|
+
### Overdue Messages
|
|
472
|
+
|
|
473
|
+
The notification subtitle changes based on how overdue a reminder is:
|
|
474
|
+
|
|
475
|
+
| Overdue duration | Subtitle |
|
|
476
|
+
|-----------------|----------|
|
|
477
|
+
| < 2 min | "just now" |
|
|
478
|
+
| < 30 min | "X min ago" |
|
|
479
|
+
| < 1 hour | "about an hour, no biggie" |
|
|
480
|
+
| < 3 hours | "been a couple hours..." |
|
|
481
|
+
| < 6 hours | "this has been waiting a while" |
|
|
482
|
+
| < 24 hours | "so... you forgot about this one 😅" |
|
|
483
|
+
| < 48 hours | "it's been a whole day, dude" |
|
|
484
|
+
| 2+ days | "I've been here for N days. just saying." |
|
|
485
|
+
|
|
486
|
+
### Rebuilding Agentrem.app
|
|
487
|
+
|
|
488
|
+
```bash
|
|
489
|
+
npm run build:notify # Recompile Swift source in assets/notify-src/
|
|
490
|
+
```
|
|
313
491
|
|
|
314
492
|
---
|
|
315
493
|
|
|
316
494
|
## Date/Time Formats
|
|
317
495
|
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
496
|
+
All date inputs (`--due`, `--until`, `--decay`, etc.) accept:
|
|
497
|
+
|
|
498
|
+
### Natural language
|
|
499
|
+
```
|
|
500
|
+
now # Immediately
|
|
501
|
+
today # Today at 23:59
|
|
502
|
+
tomorrow # Tomorrow at 09:00
|
|
503
|
+
in 5 minutes
|
|
504
|
+
in 2 hours
|
|
505
|
+
in 3 days
|
|
506
|
+
in 1 week
|
|
507
|
+
```
|
|
508
|
+
|
|
509
|
+
### Relative shortcuts
|
|
510
|
+
```
|
|
511
|
+
+5m # 5 minutes from now
|
|
512
|
+
+2h # 2 hours from now
|
|
513
|
+
+3d # 3 days from now
|
|
514
|
+
+1w # 1 week from now
|
|
515
|
+
```
|
|
516
|
+
|
|
517
|
+
### ISO 8601
|
|
518
|
+
```
|
|
519
|
+
2026-02-22T09:00:00 # Full datetime
|
|
520
|
+
2026-02-22T09:00 # Without seconds
|
|
521
|
+
2026-02-22 09:00:00 # Space separator
|
|
522
|
+
2026-02-22 09:00 # Space, no seconds
|
|
523
|
+
2026-02-22 # Date only (00:00:00)
|
|
524
|
+
```
|
|
525
|
+
|
|
526
|
+
---
|
|
321
527
|
|
|
322
528
|
## Environment Variables
|
|
323
529
|
|
|
@@ -326,6 +532,8 @@ Absolute: `2026-03-01`, `2026-03-01T09:00:00`
|
|
|
326
532
|
| `AGENTREM_DB` | Database file path | `~/.agentrem/reminders.db` |
|
|
327
533
|
| `AGENTREM_DIR` | Data directory | `~/.agentrem` |
|
|
328
534
|
|
|
535
|
+
---
|
|
536
|
+
|
|
329
537
|
## MCP Server
|
|
330
538
|
|
|
331
539
|
```bash
|
|
@@ -334,3 +542,26 @@ npx agentrem mcp # Without global install
|
|
|
334
542
|
```
|
|
335
543
|
|
|
336
544
|
14 tools, 4 resources, 3 prompts. See README.md for full MCP reference.
|
|
545
|
+
|
|
546
|
+
### Claude Desktop Config
|
|
547
|
+
|
|
548
|
+
```json
|
|
549
|
+
{
|
|
550
|
+
"mcpServers": {
|
|
551
|
+
"agentrem": {
|
|
552
|
+
"command": "agentrem-mcp",
|
|
553
|
+
"args": []
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
```
|
|
558
|
+
|
|
559
|
+
---
|
|
560
|
+
|
|
561
|
+
## agentrem schema
|
|
562
|
+
|
|
563
|
+
Print the database schema (useful for debugging).
|
|
564
|
+
|
|
565
|
+
```bash
|
|
566
|
+
agentrem schema
|
|
567
|
+
```
|
package/llms.txt
CHANGED
|
@@ -14,7 +14,7 @@ npm install -g agentrem && agentrem init
|
|
|
14
14
|
agentrem check --type time,session --budget 800
|
|
15
15
|
|
|
16
16
|
# 3. When your human says "remind me" — save it
|
|
17
|
-
agentrem add "Deploy to prod" --due "
|
|
17
|
+
agentrem add "Deploy to prod" --due "+2h" --priority 2
|
|
18
18
|
```
|
|
19
19
|
|
|
20
20
|
Add `agentrem setup` output to your CLAUDE.md for automatic integration.
|
|
@@ -30,6 +30,9 @@ agentrem complete <id> # Mark done (auto-creates next if recurring)
|
|
|
30
30
|
agentrem snooze <id> --for 2h # Snooze by duration or --until datetime
|
|
31
31
|
agentrem edit <id> # Modify fields
|
|
32
32
|
agentrem stats # Overview (--json for structured output)
|
|
33
|
+
agentrem watch # Background daemon: poll + fire OS notifications
|
|
34
|
+
agentrem doctor # Self-diagnostic check
|
|
35
|
+
agentrem quickstart # Interactive first-run walkthrough
|
|
33
36
|
agentrem setup # Print CLAUDE.md snippet (--mcp for MCP config)
|
|
34
37
|
```
|
|
35
38
|
|
|
@@ -37,7 +40,7 @@ agentrem setup # Print CLAUDE.md snippet (--mcp for MCP config)
|
|
|
37
40
|
|
|
38
41
|
| Type | Use when... | Example |
|
|
39
42
|
|------|------------|---------|
|
|
40
|
-
| `time` | Something is due at a specific time | `--due "
|
|
43
|
+
| `time` | Something is due at a specific time | `--due "+2h"` |
|
|
41
44
|
| `keyword` | You should react when certain words appear | `--trigger keyword --keywords "deploy,release"` |
|
|
42
45
|
| `session` | You need to check every session start | `--trigger session` |
|
|
43
46
|
| `heartbeat` | You need to check every heartbeat | `--trigger heartbeat` |
|
|
@@ -47,6 +50,26 @@ agentrem setup # Print CLAUDE.md snippet (--mcp for MCP config)
|
|
|
47
50
|
|
|
48
51
|
1=Critical (always surfaced), 2=High, 3=Normal, 4=Low (counted not shown), 5=Someday (skipped)
|
|
49
52
|
|
|
53
|
+
## Natural Language Dates
|
|
54
|
+
|
|
55
|
+
`--due` accepts many formats:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
--due "now" # Immediately
|
|
59
|
+
--due "today" # Today at 23:59
|
|
60
|
+
--due "tomorrow" # Tomorrow at 09:00
|
|
61
|
+
--due "in 5 minutes"
|
|
62
|
+
--due "in 2 hours"
|
|
63
|
+
--due "in 3 days"
|
|
64
|
+
--due "in 1 week"
|
|
65
|
+
--due "+5m" # 5 minutes from now
|
|
66
|
+
--due "+2h" # 2 hours from now
|
|
67
|
+
--due "+3d" # 3 days from now
|
|
68
|
+
--due "+1w" # 1 week from now
|
|
69
|
+
--due "2026-02-22T09:00:00"
|
|
70
|
+
--due "2026-02-22"
|
|
71
|
+
```
|
|
72
|
+
|
|
50
73
|
## Agent Integration Patterns
|
|
51
74
|
|
|
52
75
|
```bash
|
|
@@ -65,6 +88,23 @@ agentrem list --json
|
|
|
65
88
|
agentrem stats --json
|
|
66
89
|
```
|
|
67
90
|
|
|
91
|
+
## Background Watcher (watch)
|
|
92
|
+
|
|
93
|
+
`agentrem watch` runs a daemon that polls for due reminders and fires native OS notifications.
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
agentrem watch # Start daemon (Ctrl+C to stop)
|
|
97
|
+
agentrem watch --interval 60 # Poll every 60s (default: 30s)
|
|
98
|
+
agentrem watch --agent jarvis # Check for specific agent
|
|
99
|
+
agentrem watch --once # Single check, then exit
|
|
100
|
+
agentrem watch --verbose # Show poll log
|
|
101
|
+
|
|
102
|
+
# Service management (auto-start on boot)
|
|
103
|
+
agentrem watch --install # Install as launchd/systemd service
|
|
104
|
+
agentrem watch --uninstall # Remove service
|
|
105
|
+
agentrem watch --status # Show service status
|
|
106
|
+
```
|
|
107
|
+
|
|
68
108
|
## Key Features
|
|
69
109
|
|
|
70
110
|
- **Recurrence**: `--recur 1d|2w|1m` — auto-creates next on completion
|
|
@@ -74,6 +114,7 @@ agentrem stats --json
|
|
|
74
114
|
- **Multi-agent**: `--agent <name>` isolates per agent
|
|
75
115
|
- **Full-text search**: FTS5 across content, context, tags, notes
|
|
76
116
|
- **JSON output**: `--json` on check, list, search, stats, history
|
|
117
|
+
- **Native notifications**: macOS Agentrem.app with bell icon + priority sounds
|
|
77
118
|
- **MCP server**: `agentrem-mcp` for Claude Desktop / MCP clients
|
|
78
119
|
- **Zero config**: SQLite database, no external services
|
|
79
120
|
|