Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add instructions/bro3886/rem/claude-mdgit clone --depth 1 https://github.com/BRO3886/remWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/instructions/bro3886/rem/claude-md)<a href="https://agentmods.dev/instructions/bro3886/rem/claude-md"><img src="https://agentmods.dev/badge/instructions/bro3886/rem/claude-md.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.02953 | $0.02953 |
| Opus 5 | $0.01477 | $0.01477 |
| Sonnet 5 | $0.00591 | $0.00591 |
| Haiku 4.5 | $0.00295 | $0.00295 |
Grade A, and why
rem CLAUDE.md scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 3d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 95 lines — stays where its author put it; the contents beside it link to each section on GitHub.
rem - CLI for macOS Reminders
Non-Negotiables
- Conventional Commits: ALL commits MUST follow Conventional Commits. Format:
type(scope): description. Types:feat,fix,docs,style,refactor,test,chore,build,ci,perf. No exceptions.
What is this?
Go CLI wrapping macOS Reminders. Uses go-eventkit (cgo + Objective-C EventKit + private ReminderKit bridge) for fast reads AND writes (<200ms) as a single binary — including reminder CRUD, list CRUD, and flagged operations. AppleScript only for the default list name query. Provides CRUD for reminders/lists, natural language dates, and import/export. For programmatic Go access, use go-eventkit directly.
Architecture
cmd/rem/commands/- Cobra CLI commands (one file per command);huh_helpers.gohas shared interactive utilitiesinternal/service/- Service layer:reminders.goandlists.gowrapgo-eventkitclient.executor.gorunsosascriptfor the default list name query only.internal/reminder/- Domain models:Reminder,List,Priorityinternal/export/- JSON/CSV import/exportinternal/skills/- Agent skill install/uninstall/status logicinternal/update/- Background update check (GitHub releases, 24h cache)internal/ui/- Table (olekukonko/tablewriterv1.x), plain, JSON outputskills/rem-cli/- Embedded agent skill files (go:embed'd into binary)
Critical: Architecture Rules
- ALL reads AND writes go through
go-eventkit(github.com/BRO3886/go-eventkit/reminders) — in-process EventKit via cgo, <200ms - Single binary — go-eventkit's cgo code compiled into the binary
- AppleScript only for: default list name query (nothing else)
- Flagged is read/written via go-eventkit using the private ReminderKit bridge (same mechanism as URL attachments).
EKReminder.flaggeddoesn't exist, butREMReminder.flaggeddoes. Read via KVC (valueForKey:, notisFlaggedselector — it's a dynamic property). Write viaREMSaveRequest.updateReminder:change item, thenchangeItem.flaggedContext.setFlagged:, thensaveSynchronouslyWithError:. Refetch the EKReminder after save so the returned dict reflects the new value. See journal 011. Graceful degradation (#44): like tags, flagged is set via a separateUpdateRemindercall after the core create/update — if the private API is unavailable, rem warns on stderr and the reminder still succeeds.FlagReminder/UnflagReminderdelegate toUpdateReminder(id, {"flagged":bool})so all four flagged paths (add/update/flag/unflag) share one degradation policy: a private-API write failure warns + exits 0, a genuine error (not found) stays fatal. Requires go-eventkit ≥ v0.10.0 (v0.9.0 swallowed the flagged write failure silently). See journal 014. - go-eventkit field names:
Title(notName),Notes(notBody),List(notListName), nativeURLfield - URL field goes to
REMURLAttachment, NOTEKCalendarItem.URL:EKCalendarItem.URLis a public property that's disconnected from the Reminders.app UI (Apple bug/limitation). go-eventkit v0.5.0+ writes to the real UI-visible URL field via a private ReminderKit bridge (REMSaveRequest→attachmentContext.setURLAttachmentWithURL:), guarded byrespondsToSelector:with fallback toEKCalendarItem.URL. See journal 009. - List CRUD via go-eventkit:
CreateList(auto-discovers source),UpdateList(ID-based),DeleteList(ID-based). Immutable lists are rejected. - List moves (#50): plain moves are native and ID-stable (public EventKit
calendarreassignment; go-eventkit ≥ v0.11.0 also has a ReminderKit reparent rescue). Moves involving a shared list cannot be done natively — ReminderKit refuses at the account-capability level, and even Apple's paths (Reminders.app, AppleScriptmove) are copy+delete under the hood. rem detects the boundary via the sharing booleans onList(IsShared/SharedToMe/IsOwnedByMe, go-eventkit ≥ v0.12.0, read from the privateREMListsince public EventKit exposes no sharing state) and does copy+delete itself (moveViaCopyininternal/service/reminders.go), warning on stderr that the reminder gets a new ID. Because the ID changes,rem updateprompts before a shared-list move (confirmSharedMoveinupdate.go; skip with--force/-y/--yes, non-TTY errors without it — same convention asdelete). Detection failures fall through to the native move.rem listsmarks shared lists. - Tags use the private ReminderKit hashtag API (
REMHashtag,REMReminderHashtagContext). Title#hashtagparsing happens in rem only (not go-eventkit). Tags are written as a separateUpdateRemindercall after the core create/update — if the private API is unavailable, rem warns on stderr but the reminder still succeeds. Pure-numeric fragments like#42are filtered out byisNumeric()to avoid treating issue references as tags. - Location reminders (#47) use PUBLIC EventKit (
EKAlarm.structuredLocation+proximity, go-eventkit ≥ v0.13.0 — no private API, CoreLocation framework added forCLLocation).--location "lat,lng"+--radius+--on-arrive/--on-leaveon add/update; proximity defaults to arrive. Coordinates only, no geocoding (CLGeocoder is async + needs network). DomainAlarmLocationlives onreminder.Alarm.Location;parseLocationAlarm()infilters.go.update --remind-meandupdate --locationmanage separate alarm buckets (splitAlarmsByTrigger()) — each replaces only its own kind, so--remind-me nonekeeps the geofence and vice versa. Geofences save without Location Services but never fire without it. - Priority: 0=none, 1-4=high, 5=medium, 6-9=low
due dateandremind me dateare independentrem add --dueauto-attaches a zero-offset alarm by default (matches Apple Reminders.app). Use--silentto suppress. The alarm decision logic lives inbuildAlarms()infilters.go— both CLI and interactive add paths call it. Do NOT pass--remind-me 0mto enable — it's the default.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 3d ago First seen · 95 lines · 2,953 tokens per session scan A 5b39f1cf1572
rem CLAUDE.md is an instructions file published in the GitHub repository BRO3886/rem (151 stars, last pushed 2mo ago), licensed MIT. It adds 2,953 tokens to every session, about $0.0148 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other instructions, from other repositories
mcp-server-apple-events CLAUDE.md
Claude Code instructions for FradSer/mcp-server-apple-events, covering claude.md, commands, run all tests, run a single test file and run tests matching a pattern.
mcp-server-apple-events AGENTS.md
AGENTS.md instructions for FradSer/mcp-server-apple-events, covering repository guidelines, project structure & module organization, build, test, and development commands, coding style & naming conventions and testing guidelines.
mcp-server-apple-events GEMINI.md
Gemini CLI instructions for FradSer/mcp-server-apple-events, covering apple events mcp server, project overview, architecture, building and running and prerequisites.
orchard-mcp AGENTS.md
Instructions for l22-io/orchard-mcp, covering agents.md, project overview, commands, architecture and key patterns.
apple-calendar-mcp CLAUDE.md
Claude Code instructions for redpop/apple-calendar-mcp, covering claude.md, commands, the architecture constraint that explains everything, invariants that are easy to break and dependencies worth knowing.
orchard-mcp CLAUDE.md
Instructions for l22-io/orchard-mcp: Do not edit this file for project guidance. The canonical repository guidance lives in AGENTS.md.