Providers
The first-party providers an app can call on a person's runtime, their ids, how scope strings are named, and how to list a provider's tools.
A provider is a service the person's runtime calls for your app. Your app asks the runtime with runtime.providers.call(...), and the runtime checks that the person approved the provider's scope for your app. See Providers for the model.
| Provider id | What it does | Scopes | Page |
|---|---|---|---|
sms | Texts the signed-in person's own verified phone | sms:send, sms:status | Texting (sms) |
search | Web search, sourced answers, page contents and paid data endpoints | search:<group> | Search |
integrations | The person's own accounts at other services | integrations:discover, integrations:<service>_read, integrations:<service>_write | Integrations |
context | Ask about the person from their memory, and look up public profiles | context:<group> | Context |
device | The person's Mac: browser, files, Messages and shell | device:<group> | Device |
Where names come from
- Scope strings come from the console's What it asks for → Add permissions list. A scope is
<provider id>:<group>. Do not guess them. - Tool names and arguments come from
runtime.providers.tools('<provider id>'). It answers the provider's groups, and each group's tools with a description, parameters and output. It lists only the groups your app's grant holds, so ask for the scope first, then list. - Required providers. If your app does not work without a provider being set up first, add it under What your app requires in the console. See Grant changes.
import type {ConnectedCrouter} from '@north-light/sdk';
/** List the tools a provider offers this person, then call one. Scope strings come from the console's
* "Add permissions" list; tool names and arguments come from `providers.tools`. Never invent either. */
export async function textMe(runtime: ConnectedCrouter, body: string) {
const sms = await runtime.providers.tools('sms');
console.log(JSON.stringify(sms.groups, null, 2)); // each leaf: tool, description, params
return runtime.providers.call({provider: 'sms', tool: 'send', arguments: {body}});
}Each provider page below shows the tools of a provider as captured on 2026-10-16. The capture is not an app's view: it came from the runtime of a person's own Northlight account (GET /v1/providers/<id>/tools on crtr 0.3.462, joined to production), which shows the groups that person's own grant holds. What providers.tools answers for your app depends on the scopes your app was granted. Tools can change between releases, so treat a table as a starting point and list the tools at run time.