Connectors

What the on-device model can see, and what it deliberately can't

Connectors are what let LocalLM Lab's on-device model answer questions using real information from your Mac — your calendar, your contacts, the weather, where you are — instead of just what it already knows. Every connector is off by default, and you turn each one on individually in Connectors.

Building your own app instead? Most of these are available as ready-made Tools in the SDK, so you don't have to write your own adapters.

Two rules apply across all of them. First, what the model may do with a connector is a level you set in Security: Read-only (look things up), Changes (also add new items and modify existing ones — the default), or Full (also permanently delete). Each step only ever adds capability; see Levels below. Second, everything stays on your device by default; the one exception (Weather) is clearly flagged in the app, since it's the only connector that sends anything over the network.

The examples below won't do anything until you turn the relevant connector on in Connectors first — and for Calendar, Reminders, Contacts, and Location, turning one on for the first time will prompt you for the matching macOS permission, same as any other app asking for that data. Try them and see what the model actually does with them — that's the point of LocalLM Lab.

🕐 System Clock

Local

Lets the model read the current date and time on your Mac.

Tool calls: getCurrentTime

Try in Prompt Playground

  • "What time is it right now?"

📁 Filesystem

Local

Lets the model work in a single folder you choose — nothing else on your Mac. It can list what's in that folder and read plain text files from it, and, at the default Changes level, write and edit files there and run the data tools that write derived files (a CSV, a SQLite table) into it.

Can read, write and edit inside the folder you granted; there is no delete tool. At Read-only it can only look. Can't reach outside the folder — not even through a symbolic link. When an MCP tool saves its result to a file, it goes in a raw/ subfolder.

Tool calls: listFiles, readFile, readFileRange, describeJson, csvInfo — with Changes, also writeFile, editFile, loadTable, sqlQuery, jsonToCsv, selectColumns, filterRows, sortRows, dedupeRows, aggregateRows, concatRows

Building your own app on the SDK instead? The same single-folder scoping is available via WorkspaceTools, which also adds a delete tool and multi-file patches. See the SDK page's workspace-buddy example.

Want the model to extract and analyze data from a folder or an MCP dataset, rather than just read files? FileBackedTool and the SDK's "AIQL" data verbs pull the data into an ephemeral SQLite table and have the model write one read-only SQL query against it — the row data never enters the model's context, so it can't fabricate or miscopy a value it never saw. See the aiql example for the full pipeline: plain English in, a CSV out.

Try in Prompt Playground

  • "What files are in my folder?"
  • "Summarize the file [filename] in a couple sentences."

🌤️ Weather

Leaves this Mac

Looks up current conditions for a place you name — temperature, feels-like, humidity, wind, and a plain-English description. The only connector that sends anything over the network: your location query goes to Open-Meteo, a third-party weather service, to resolve it. Note that the place name cannot include additional qualifiers e.g. "San Jose, CA". Use only the city name, such as "San Jose".

Tool calls: getWeather

Try in Prompt Playground

  • "What's the weather like in Tokyo right now?"
  • "Should I bring a jacket if I'm in Chicago today?"

📅 Calendar

Local

Lets the model list your upcoming Calendar events — title, time, calendar, and location — and create new quick events (title, date, time, duration) on your default calendar.

Can list, create and modify events by default (level Changes). No invitees are ever added. At Full (see below) the model can also permanently delete an event; at Read-only it can only list.

Tool calls: getUpcomingEvents, addCalendarEvent, updateCalendarEvent — with Full, also deleteCalendarEvent

Try in Prompt Playground

  • "What's on my calendar for the rest of the week?"
  • "Add a 30-minute event called 'Team sync' tomorrow at 2pm."
  • "Move my dentist appointment to 3pm." (needs Changes, the default)
  • "Delete my dentist appointment." (needs Full)

✅ Reminders

Local

Lets the model list your upcoming Reminders — title, due date, list, and priority — and create new reminders with a title and an optional due date/time.

Can list, create, modify and mark reminders complete by default (level Changes). At Full (see below) the model can also permanently delete a reminder; at Read-only it can only list.

Tool calls: getUpcomingReminders, addReminder, updateReminder — with Full, also deleteReminder

The model doesn't know today's date on its own. LocalLM Lab is raw in, raw out — it doesn't inject today's date into what the model sees, so a relative phrase like "tomorrow" or "next Friday" can resolve to the wrong day, or even the wrong year. Two ways around it: enable the Clock connector alongside Reminders so the model can check getCurrentTime before it computes a date, or just tell it directly — add a line like "Today's date is 2026-08-23" to the System Prompt in Prompt Playground, or say the date in your own message. Giving addReminder/updateReminder an exact date (e.g. "due 2026-08-25") sidesteps the problem entirely.

Try in Prompt Playground

  • "What do I have on my reminders list this week?"
  • "Remind me to call the dentist tomorrow morning."
  • "Mark my 'call the dentist' reminder as done." (needs Changes, the default)

👤 Contacts

Local

Lets the model search or list your Contacts — name, organization, phone numbers, and email addresses.

Can search, list, add and modify contacts by default (level Changes). At Full (see below) the model can also permanently delete a contact; at Read-only it can only search and list.

Tool calls: searchContacts, listContacts, addContact, updateContact — with Full, also deleteContact

Updating a contact can occasionally touch a field you didn't ask about. See Known Issues — most update requests behave correctly, but it's worth a glance at the result after an update.

Try in Prompt Playground

  • "Do I have a contact for [a name from your own contacts]?"
  • "What's the phone number for [name]?"
  • "Add a contact for Jane Doe with this phone number." (needs Changes, the default)
  • "Update Jane Doe's organization to Acme Corp." (needs Changes, the default)

📍 Location

Local

Lets the model look up where your Mac currently is — a single, one-time reading, not continuous tracking. Includes a resolved place name alongside the coordinates, so the model doesn't have to guess where that actually is.

One-shot only. LocalLM Lab never tracks your location in the background.

Tool calls: getCurrentLocation

Try in Prompt Playground

  • "Where am I right now?"
  • "What city am I in?"

Turning on many connectors at once can exhaust the model's context

Apple's on-device model has a small context window. Every connector (and MCP tool) you enable adds its schema to that budget before your prompt is even considered — with several connectors and MCP servers all turned on simultaneously, that alone can leave almost no room for an actual answer, and a request can fail with a context-window error. See Known Issues for the full explanation and a guideline on how many to enable at once.

Every connector needs your permission first

Calendar, Reminders, Contacts, and Location all require you to grant macOS's real system permission before they'll work — the same permission dialog you'd see from any other app asking for that data. LocalLM Lab can't read any of it until you say yes, and you can revoke access at any time in System Settings → Privacy & Security.

These are two separate switches, not one. The toggle in Connectors controls whether the model is offered the connector at all — turn it off and the model has no way to even attempt a lookup, regardless of what macOS has granted. The macOS permission (checked in System Settings) controls whether the connector can actually read your data once it's offered. Turning the in-app toggle off never revokes the macOS permission — only System Settings or an OS-level reset can do that — so re-enabling the toggle later won't prompt you again if you've already said yes once.

Levels: how much each connector may do

In Security, every connector that can change data has a level. Each level only adds capability to the one before it:

Confirm each change (Prompt Playground) adds a yes/no prompt before any create, edit or delete call from that connector. API Lab uses the same levels but has no per-call confirmation — nobody is there to confirm a scripted call — so choose its level with that in mind.

Under the hood this is a graded ceiling on which tools even reach the model at all — the SDK's own Sequence<any Tool>.limited(toMaxImpact:), described in the SDK's security section — and the app re-checks the live level again before it carries out any change, so a tool that was offered while the level was higher can't run after you lower it.

A few things worth knowing:

Everything above describes LocalLM Lab the app. The SDK and CLI toolkit reach the same connectors through different rules:

Contact

Reading, adding and modifying are available for Calendar, Reminders, Contacts and the granted Filesystem folder by default; deleting needs the Full level (see above). If you need something beyond what's described on this page, let us know what you're trying to do.

Questions about a specific connector, or want capabilities beyond what's listed here? Contact neuron@thisbrain.ai or join our Discord.