Agentrem
Structured reminders CLI for AI agents with MCP server
Ask AI about Agentrem
Powered by Claude Β· Grounded in docs
I know everything about Agentrem. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
π agentrem
Structured reminders for AI agents. Persistent, searchable, works across sessions.
Instant Start
npx agentrem add "Deploy to prod" --due tomorrow --priority 2
npx agentrem check
npx agentrem list
For AI Agents
Copy this into your CLAUDE.md / AGENTS.md (or run agentrem setup to generate it):
## Reminders
You have access to `agentrem` CLI for persistent reminders across sessions.
### On every session start, run:
agentrem check --type time,session --budget 800
### When the user says "remind me", "don't forget", "follow up", or "next time":
agentrem add "<content>" --due "<when>" --priority <1-5> --tags "<tags>"
### Key commands:
- `agentrem add` β create a reminder
- `agentrem check` β see what's triggered/due
- `agentrem check --watch` β block until next reminder fires
- `agentrem list` β list all active reminders
- `agentrem search <query>` β full-text search
- `agentrem complete <id>` β mark done
- `agentrem snooze <id> --for 2h` β snooze
- `agentrem --help` β full reference
MCP Server
For Claude Desktop and any MCP client β add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"agentrem": {
"command": "agentrem-mcp",
"args": []
}
}
}
No global install? Use npx:
{
"mcpServers": {
"agentrem": {
"command": "npx",
"args": ["-y", "agentrem", "mcp"]
}
}
}
Run agentrem setup --mcp to print this config. MCP tools: add_reminder Β· check_reminders Β· list_reminders Β· search_reminders Β· complete_reminder Β· snooze_reminder Β· edit_reminder Β· delete_reminder Β· get_stats Β· get_history Β· undo_change Β· garbage_collect Β· export_reminders Β· import_reminders
All Commands
| Command | Key Flags | Example |
|---|---|---|
add <content> | --due --priority --tags --trigger --recur --agent --context --category --depends-on --dry-run | agentrem add "PR review" --due "+4h" --priority 2 |
check | --type --text --budget --format --json --escalate --agent --dry-run | agentrem check --type time,session --budget 800 --json |
check --watch | --timeout --json --type --agent | agentrem check --watch --timeout 300 --json |
list | --status --priority --tag --due --limit --json --all --agent --category --trigger --format | agentrem list --priority 1,2 --json |
search <query> | --status --limit --json | agentrem search "deploy staging" --json |
complete <id> | --notes | agentrem complete abc12345 |
snooze <id> | --until --for | agentrem snooze abc12345 --for 2h |
edit <id> | --content --due --priority --tags --add-tags --remove-tags --context --category --agent | agentrem edit abc12345 --priority 1 |
delete [id] | --permanent --status --older-than | agentrem delete abc12345 --permanent |
stats | --json | agentrem stats --json |
history [id] | --limit --json | agentrem history --limit 20 --json |
undo <history_id> | β | agentrem undo 42 |
gc | --older-than --dry-run | agentrem gc --older-than 30 |
export | --out --status | agentrem export --out backup.json |
import <file> | --merge --replace --dry-run | agentrem import backup.json --merge |
watch | --interval --once --verbose --on-fire --on-fire-preset --on-fire-timeout --install --uninstall --status --agent | agentrem watch --on-fire-preset openclaw |
setup | --mcp | agentrem setup / agentrem setup --mcp |
doctor | --json | agentrem doctor |
init | --force | agentrem init |
quickstart | β | agentrem quickstart |
schema | β | agentrem schema |
--json is available on check, list, search, stats, history, doctor β use it for structured output in your agent.
Trigger Types
| Type | Fires when... | Key flags |
|---|---|---|
time | Due datetime is reached | --due (notifies once by default; stays active until explicitly completed) |
keyword | Message text matches | --keywords, --match any|all|regex |
condition | Shell command output matches | --check, --expect |
session | Every session start check | β |
heartbeat | Every heartbeat check | β |
manual | Explicit check only | β |
Priority Levels
| Level | Label | Behavior |
|---|---|---|
| 1 | π΄ Critical | Always surfaced |
| 2 | π‘ High | Surfaced within 60% budget |
| 3 | π΅ Normal | Surfaced within 85% budget |
| 4 | βͺ Low | Counted but not surfaced |
| 5 | π€ Someday | Skipped entirely |
Natural Language Dates
--due, --until, and --decay all accept natural language:
--due "now" # Immediately
--due "today" # Today at 23:59
--due "tomorrow" # Tomorrow at 09:00
--due "in 5 minutes"
--due "in 2 hours"
--due "in 3 days"
--due "in 1 week"
--due "+5m" # Short relative
--due "+2h"
--due "+3d"
--due "+1w"
--due "2026-04-01T09:00:00" # ISO datetime
--due "2026-04-01" # ISO date
check --watch: Blocking Mode
agentrem check --watch blocks until the next due reminder fires. Useful for scripting, pipelines, or pausing an agent until something needs attention.
# Wait indefinitely for next reminder
agentrem check --watch
# Exit 1 if nothing fires within 5 minutes
agentrem check --watch --timeout 300
# Get the full reminder as JSON when it fires
agentrem check --watch --json
# Filter by trigger type and agent
agentrem check --watch --type time,heartbeat --agent jarvis --timeout 60
Exit codes: 0 = reminder found (or SIGINT/SIGTERM), 1 = timeout elapsed with no reminder.
Note:
--watchdoes not update fire counts. Use a regularagentrem checkafter to actually mark reminders as fired.
Poll-then-act pattern:
if agentrem check --watch --timeout 120 --json > /tmp/due.json; then
echo "Reminder fired:"
cat /tmp/due.json
agentrem check # mark as fired
fi
watch --on-fire: Hooks
β οΈ Security: The
--on-firecommand runs with your user's permissions. Only use trusted commands. Reminder data is passed via environment variables (never shell-interpolated) to prevent injection.
Execute a shell command whenever a reminder fires:
agentrem watch --on-fire "curl -X POST https://hooks.example.com/reminder"
Reminder data is passed as environment variables (no shell injection β data never interpolated into the command):
| Variable | Description |
|---|---|
AGENTREM_ID | Reminder ID |
AGENTREM_CONTENT | Reminder text |
AGENTREM_PRIORITY | Priority (1-5) |
AGENTREM_TAGS | Comma-separated tags |
AGENTREM_CONTEXT | Context string |
AGENTREM_DUE | Due datetime |
AGENTREM_FIRE_COUNT | Number of times fired |
- Fire-and-forget β failures are logged to
~/.agentrem/logs/on-fire.log, never crash the watcher - Sequential β multiple reminders process one at a time
- Timeout: 5 seconds default, configurable with
--on-fire-timeout <ms>
Built-in presets β skip the shell command entirely:
agentrem watch --on-fire-preset openclaw # auto-delivers to your OpenClaw agent
Or craft your own:
agentrem watch --on-fire 'curl -X POST https://hooks.example.com/reminder -d "text=$AGENTREM_CONTENT"'
Background Watcher
agentrem watch polls for due reminders and fires native OS notifications.
agentrem watch # Poll every 30s (foreground)
agentrem watch --interval 60 # Custom interval
agentrem watch --once # Single check and exit
agentrem watch --agent jarvis # Watch for a specific agent
agentrem watch --verbose # Show poll log
# Install as OS service (auto-start on boot)
agentrem watch --install
agentrem watch --install --interval 60
agentrem watch --status
agentrem watch --uninstall
Service files: macOS β ~/Library/LaunchAgents/com.agentrem.watch.plist Β· Linux β ~/.config/systemd/user/agentrem-watch.service Β· Logs β ~/.agentrem/logs/watch.log
Native Notifications π
On macOS, agentrem ships a bundled Swift app (Agentrem.app) that runs as a singleton process β notifications appear under "agentrem" with a bell icon.
| Priority | Sound |
|---|---|
| P1 π΄ Critical | Hero |
| P2 π‘ High | Ping |
| P3 π΅ Normal | Pop |
Notification behavior:
- Click body β notification re-appears (won't dismiss until you act on it)
- Complete β β marks reminder complete and dismisses (the only way to complete a fired reminder)
- Multiple reminders β single process handles all via IPC
- Fallback chain:
Agentrem.appβterminal-notifierβosascriptβconsole
To rebuild the Swift app: npm run build:notify
Programmatic API
Use agentrem directly from JavaScript/TypeScript β no CLI subprocess needed.
npm install agentrem
import { add, check, list, complete, snooze, search, stats } from 'agentrem';
import type { Reminder } from 'agentrem';
// Add a reminder
const rem = await add('Review PR #42', { due: 'tomorrow', priority: 2, tags: 'pr,review' });
// Check for triggered reminders (session start pattern)
const { included, totalTriggered } = await check({ type: 'time,session', budget: 800 });
for (const r of included) {
console.log(`[P${r.priority}] ${r.content}`);
}
// List active reminders
const reminders = await list({ limit: 20 });
// Complete a reminder
const done = await complete(rem.id, 'Reviewed and merged');
// Snooze a reminder
const snoozed = await snooze(rem.id, { for: '2h' });
// Full-text search
const results = await search('deploy staging');
// Get statistics
const s = await stats();
console.log(`${s.totalActive} active, ${s.overdue} overdue`);
All API functions are async and return full Reminder objects. The database is auto-initialized on first call (no manual init needed).
See llms-full.txt for complete type signatures and all options.
Why agentrem?
# vs flat files / memory.md
agentrem check --json # structured output your agent can parse; memory.md can't do that
- Persistent across sessions β SQLite-backed, survives restarts, not just in-context notes
- Priority-aware + token budgets β
check --budget 800fits within any context window without overflow - Triggerable β time, keyword, condition, session, heartbeat triggers; not just static lists
- Blocking watch mode β
check --watchlets agents pause until something needs attention - Agent-native β
--jsoneverywhere,--agentnamespacing, MCP server for chat clients
Install
npm install -g agentrem
The database auto-initializes on first use. Run agentrem setup to get your CLAUDE.md snippet, or agentrem setup --mcp for Claude Desktop.
MIT License
