Join a machine to your Northlight account
Join a laptop to your Northlight account with crtr sys join so crtr cloud apps commands run as you, and the crtr cloud apps command list.
Joining makes this machine one of your Northlight account's machines, so crtr cloud … commands run as you. App builders need it for the two things the console cannot do yet: deleting an app and setting its run notice URL (Manage your app). Everything else about building an app is on the SDK docs site.
Create your account at https://account.northlight.ai/signup first. Then install the CLI (npm i -g @north-light/cli). Joining needs crtr 0.3.436 or later (older versions need crtr sys daemon stop first and fail if a viewer is open); crtr --version shows yours.
Then join your laptop to the account:
-
Open
https://account.northlight.ai/account/machinesand choose Create join token. A token needs a sign-in within the last 10 minutes, so the page asks you to sign in again if yours is older. -
The page shows the join command with the token filled in. On your laptop, run it from a plain terminal:
crtr sys join --directory https://account.northlight.ai --token <token>. Leave your crtr windows open: join stops the daemon itself, holds it down while it writes your identity (so an open viewer cannot restart it early), and starts it again on the joined settings. Run it outside any crtr node, because a node's engine stops with the daemon; from inside one, join refuses withjoin_inside_node. Add--name <label>to name the machine on the page. The token works once and expires at the time the page shows; the page shows it only once.crtr sys join --directory https://account.northlight.ai --token <token> --name my-laptopIt answers with
registered: true, the machine id (runtime:<id>), your user id anddaemon: restarted(daemon: startedwhen crtr was not running: join starts the daemon, and its first grant sync installscrtr cloud …and your other provider plugins). Your open viewers and nodes reconnect on their own. -
Check it:
crtr cloud apps minelists the apps you manage. Before you have joined, it answersnot_joinedand prints these same steps.
Things to know before you join:
- Joining rewrites your crtr home. Everything in your everyday crtr home that belonged to the local user (
user:local) becomes your Northlight user, the next time the daemon starts. If you would rather not do that to your everyday home, join from a home you can throw away. - There is no unjoin. The only undo is removing the machine on
/account/machines. - Removing the machine stops it. Once you choose Remove next to a machine, it gets no new tokens at once and the ones it holds expire within 5 minutes. After that its
cloudcommands answermachine_revoked: "This machine was removed from your Northlight account." It stays that way until you create a new join token and runcrtr sys joinagain. Files on the computer stay on it. - Your hosted machine is unchanged.
/account/machineslists it as "Northlight (hosted)", the default. Your chat agent athttps://chat.northlight.aistill runscrtr cloud apps …as before.
crtr cloud apps
Every app-management leaf of Northlight's cloud provider runs as you and needs a joined machine. The console does the same work for all of them except delete and set-run-notice-url. --app-id takes app:<client id> or the bare client id.
Your Northlight chat agent at https://chat.northlight.ai can run these commands as you, on your hosted runtime. It can list and change an app (mine and set-scopes were checked on production). It cannot delete one. Generate keys on your laptop and give an agent only a public JWK, never the private key.
| Command | What it does |
|---|---|
crtr cloud apps mine | Lists the apps you manage. |
crtr cloud apps register --name … --origin … --logo … --justification … --redirect-uri … | Registers an app and answers its registration, including env (the issuer, client id and origin). The --redirect-uri flag repeats. |
crtr cloud apps get --app-id <id> | Shows the registration. |
crtr cloud apps update --app-id <id> --name … / --origin … / --logo … / --justification … | Changes the profile fields you pass. |
crtr cloud apps set-redirect-uris --app-id <id> --redirect-uri … | Replaces the whole redirect URI list; repeat the flag for each. |
crtr cloud apps asks --app-id <id> | Lists what an app may ask for, with whether it asks now. Large sources such as integrations print as a count. Narrow it with --query sms:send, --source sms, --group providers|apps|agents|space, or --query <text>; --requested lists only what the app asks for now. For example crtr cloud apps asks --app-id <id> --source sms. |
crtr cloud apps set-scopes --app-id <id> --add … --remove … | Edits the scope list the app has now; repeat --add/--remove per scope. Removing a scope that is not in the list is refused. Or replace the whole list with repeated --scope; --clear empties it. crtr:act needs crtr:llm. |
crtr cloud apps set-requires --app-id <id> --add … --remove … | Edits the providers your app does not work without (for example context). Or replace the list with repeated --provider; --clear empties it. |
crtr cloud apps keys add --app-id <id> --jwk '<public JWK>' | Adds a signing key beside any existing one. Answers created: false if that key is already on the app. keygen --app calls it for you. |
crtr cloud apps keys list --app-id <id> | Lists the keys with their kid and active or retired status. |
crtr cloud apps keys retire --app-id <id> --kid <kid> | Retires a key so it no longer signs in. |
crtr cloud apps set-listing --app-id <id> --login-start-url … --text-welcome … (also --listed, --price) | Sets the listing fields; pass at least one. A loopback --login-start-url is accepted. --listed true --price free lists the app, so cloud apps install finds it; while the app is in testing it still stays out of the marketplace list. |
crtr cloud apps install --app-id <id> | Texts an install link to the signed-in person. If they already hold a grant it answers status: already_have and the install URL instead of texting. The app must be listed. |
crtr cloud apps testers add --app-id <id> --email … (or --phone …) | Lets that person sign in while the app is in testing; at most 100. Not yet run on production. |
crtr cloud apps testers list --app-id <id> | Lists the testers. |
crtr cloud apps testers remove --app-id <id> --email … (or --phone …) | Removes a tester and revokes their grants for the app. Not yet run on production. |
crtr cloud apps set-run-notice-url --app-id <id> --url … (or --clear) | Sets or clears the URL the runtime posts run notices to. https only, plain http on localhost for development, at most 512 characters. |
crtr cloud apps delete --app-id <id> --confirm <client id> | Deletes the app and removes every person's grant for it. Only you at a joined machine's terminal can run it: an agent, including your chat agent, is refused with provider_refused. |
Deleting an app removes every person's grant for it and cannot be undone. Each runtime deletes the app's runs, space and schedules, and the app's next refresh fails with invalid_grant. Apps that hold the provider role cannot be deleted.
The official plugin marketplace
When you want to know which plugins crouter ships in its official marketplace, or how to install one, read this page because it lists each plugin with what it adds and what it needs on your machine.
Concepts
When building with crtr, read this section because its pages explain which runtime parts solve each problem before you choose an SDK method or plugin field.