Borrowing it
Nothing to install: this file belongs to BRO3886/rem. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/BRO3886/rem/main/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/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/instructions/bro3886/rem/claude-md"><img src="https://agentmods.dev/badge/instructions/bro3886/rem/claude-md.svg" alt="Reviewed on agentmods" width="80" 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.1 | $0.02953 | $0.02953 |
| Opus 5.5 | $0.01181 | $0.01181 |
| Sonnet 5.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 2mo 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.
- 2mo 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 (157 stars, last pushed 9d ago), licensed MIT. It adds 2,953 tokens to every session, about $0.0118 per session on Opus 5.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.
rem CLAUDE.md compared with instructions from other repositories
| Mod | Type | Stars | Last push | Licence | Scan | Tokens | Works with |
|---|---|---|---|---|---|---|---|
| rem CLAUDE.mdBRO3886/rem | Instructions file | 157 | 9d ago | MIT | A | 2,953 | Claude Code |
| vscode buildNext.instructions.mdmicrosoft/vscode | Instructions file | 195k | yesterday | MIT | A | 9,719 | GitHub Copilot |
| next.js AGENTS.mdvercel/next.js | Instructions file | 143k | today | MIT | A | 7,461 | Codex, OpenCode |
| langchain AGENTS.mdlangchain-ai/langchain | Instructions file | 149k | yesterday | MIT | A | 4,680 | Codex, OpenCode |
| vscode oss-third-party-notices.instructions.mdmicrosoft/vscode | Instructions file | 195k | yesterday | MIT | A | 5,516 | GitHub Copilot |
| vscode copilot-instructions.mdmicrosoft/vscode | Instructions file | 195k | yesterday | MIT | A | 3,093 | GitHub Copilot |
| deepseek-harness AGENTS.mddeepseek-ai/deepseek-harness | Instructions file | 274k | 2d ago | MIT | A | 4,313 | Codex, OpenCode |