Getting started and Connections

A person who has just signed up should end up with an assistant that can actually do something for them. That takes a few steps — connect their mail and calendar, find their learning path — and those steps are offered in one flow, not as separate cards from separate modules.

Getting started: one list, three places

There is one ordered list of steps per person. Where it shows:

Where What When
After onboarding the Getting-started page, /{you}/GettingStarted — every open step, in order, with Start and Not now once, right after the sign-up form (unless the person arrived through a deep link, which wins)
Every new chat one line: the next open step while any step is open
Every new chat one tip line — today: type /feedback to tell us anything until the person dismisses it

A step never returns once the person did it or clicked Not now; the next one moves up. The per-person record is AiSettings.DoneNudges on their own {you}/_Memex/AiSettings node — a dictionary, for the same merge-safety reason as User.CompletedLogonActions.

Where steps come from

Connections

Where your assistant is reachable, and push per thread: the Messaging tab's top section lets a person turn channels on (web, Teams, WhatsApp, iMessage), each conversation chooses which of them its replies are pushed to, and routing rules send a topic to a channel — see Where your assistant is reachable. Channel health reuses the providers below wherever a channel's "linked" means the same as its connection's "connected".

Four sign-in flows existed before this layer — Microsoft (the Executive Assistant's consent), LinkedIn, GitHub, instance-to-instance — each storing its credential its own way, and one kept an access token unencrypted (SocialMedia#174). Connections is the one layer every provider now plugs into, in MeshWeaver.AI.Connections so both compiled modules and node-native packages can bind it.

The first providers were Microsoft 365 and Teams, wrapping the existing consent — nobody reconnects. Phase 3 of Apps live on the instance (Store/AppsOnTheInstance §5–§7) added the rest; see the next section.

Connect what you already use — any provider (phase 3)

Maintainer, 2026-10-10: "we should offer the connect to mail / calendar, home entertainment, … in setup phase. not just google, but any email, linkedin, …"

One list, four headings, three places

Every provider names its heading — ConnectionDescriptor.Group (an init property, so modules compiled against the older constructor still bind):

Heading Providers
Mail & calendar Microsoft 365 · Google · iCloud · Other email (IMAP/SMTP) · Other calendar (CalDAV or an .ics link)
Professional & social LinkedIn
Messaging Teams · WhatsApp · iMessage
Home & entertainment Home Assistant · Apple Music · Weather

The SAME grouped tiles (GettingStartedAreas.ConnectionTiles) render in three places — never a second list:

The chat line Connect your accounts now leads to Settings › Connections › Accounts. There is no Maps tab in the person app: map keys are instance configuration (Administration › Maps), and people learn maps in the Examples app. None existed to remove.

A provider whose availability takes a read (IConnectionProvider.ObserveAvailable, default IsAvailable) shows "Checking…" until it answers and is dropped if it says no, faults or does not answer in time — never holding up the other rows.

Any provider: the credential-set connectors

ICredentialSetProvider (in MeshWeaver.AI.Connections) is a credential set whose FORM the platform renders: the provider lists its CredentialFields and implements one typed Probe; the base class CredentialSetConnectionProvider supplies the four states, Test connection and Connect.

Wrapped, never re-implemented: flows that already exist

Node-native packages cannot register a DI service, so NodeBackedConnection wraps their existing flow from the AI layer (as Microsoft 365 wraps the Executive Assistant's consent):

Provider Offered while Connected when Connect leads to
Google Google installed a Google/Account node under you has clientId, clientSecret, refreshToken /Google
iCloud ICloud installed an ICloud/Calendar node has appleId, appPassword /ICloud
LinkedIn LinkedIn installed {you}/_ApiCredentials/linkedin has accessToken /connect/linkedin?profile={you} (the Social module's OAuth)
Home Assistant HomeAssistant installed a HomeAssistant/Home node has baseUrl, token /HomeAssistant
Apple Music AppleMusic installed an AppleMusic/Music node has musicUserToken AND either its key trio or a developerToken (the package's own IsConfigured) /AppleMusic
Weather AppleWeather installed {you}/_Connections/weather (the ConnectionCredential the Weather package writes since #3316) has teamId, keyId, serviceId and the privateKey secret set — or, while instances migrate, the legacy AppleWeather/Weather home copy does (the better answer wins) /AppleWeather

A node whose content will not read is Couldn't tell, never reconnect advice. They READ only — whether a member is set, never its value — the package root as the system identity (installed is platform configuration) and the owner's nodes as the owner. WhatsApp wraps the link flow in its own module (WhatsAppConnectionProvider, Link, Connect continues in chat).

What is not done, and why

The recipe for adding a provider is the built-in skill /build-a-connection; the user-facing guide is /connect.

Several accounts per kind (2026-10-12)

Maintainer, 2026-10-12: "centralize all the logins … let me add all my emails". The design of record (Store/AppsOnTheInstance §6) has said "every account the assistant may use, any provider, several per kind" since phase 3. This section is that rule, made concrete.

The record: one node per ACCOUNT, and ids are never reused

A credential-set account lives at {owner}/_Connections/{account}, typed ConnectionCredential.

The surfaces

What the assistant reads

No assistant tool reads the credential-set accounts yet: Other email and Other calendar are saved and tested, and the mail and calendar tools still go through Microsoft 365. Whoever adds the first reader must enumerate ObserveAccounts and name the account in every answer. Never read only {provider}, which is only the pre-existing record.

Microsoft 365: several mailboxes (2026-10-13)

Done as a core + Plugins pair (core Doc/AI/ExecutiveAssistant → Several mailboxes holds the storage and consent design). What changed against the plan above:

Google: what several accounts needs (not done here)

This is a follow-up, tracked from this page.

What was decided, and why