Docs
Agent account
A person as one agent knows them — their Slack user id, what the agent calls them, the account they turned out to be, and their own inference login on that agent. Being re-keyed (`features/people/`): the Slack id moves to the account as a chat id (ACCOUNT-CHAT-ID), and an agent-account becomes the account, by its id, as that agent knows it.
Has: one agent · a Slack user id or an email · a label · a link to an account, when their email was known · their own login state (not signed in | signed in | expired | error) and its provider. One per agent and value; deleting the agent deletes them, and the account is left (MEMBER-REMOVE-KEEPS-ACCOUNT).
How a person becomes known
Being known to an agent gives nobody a place in its tenant; that comes only from an invitation (MEMBER-BY-INVITE).
e.g. a Slack user signs in to an agent → known by name; the Members list is unchanged.
AGENTACCOUNT-NOT-MEMBERSHIPWithout a name from Slack nobody is registered, and the agent goes on asking who it is speaking to.
AGENTACCOUNT-NEEDS-REAL-NAMEWhen their email is known, the person is linked to the account with that email, and the account is created if it is new.
AGENTACCOUNT-LINKS-TO-ACCOUNTBeing known to one agent says nothing about another; each agent knows its own people and holds their logins separately.
AGENTACCOUNT-ONLY-THIS-AGENT
Talking to the agent
A message,
!command, slash command or button press from someone without access to the agent (AGENTACCOUNT-ACCESS-IS-GRANTED) starts nothing and calls no provider: no turn, no command, no login prompt. The platform answers instead, with fixed words and no model: an owner or admin of the tenant can give them access to the agent. It names their Slack id, which is what an admin adds them by (ACCOUNT-NO-EMAIL-NO-GUESS). In a channel only they see it; in a DM it is an ordinary reply. Said once per person and conversation in ten minutes, then nothing; a button press is ignored without a word. An agent with no registry (the open-source runtime on its own roster) answers as before.e.g. a stranger writes to Nova three times → one notice, no turn, no tokens; before this, three turns asked "who are you?" for 144k tokens (Oct 3).
AGENTACCOUNT-UNKNOWN-NO-TURN(A turn already waiting in line is not yet re-checked.) On every agent, a person is answered only when they have been allowed for that agent: the named people are the whole of who is answered, and an empty list is nobody. Nobody is allowed by being in the workspace, by being a member of the tenant — its owner included — or by being allowed on another agent (AGENTACCOUNT-ONLY-THIS-AGENT). This is checked before everything a person can start: a message, a
!command, a slash command, steering a thread, a turn waiting in line. Refused, none of them calls a provider, asks for a login, or runs; the only thing that answers is the platform's own notice. It governs what people START. What the agent sends on its own — a skill on a schedule, a drop told to the person it is for — keeps the checks it already has.e.g. a new agent with nobody allowed → answers nobody, its owner included; the owner asks from Slack and allows themselves in the Hub.
AGENTACCOUNT-ONLY-THE-ALLOWEDAn agent is told who is speaking from the registry, never from a Slack display name, and every message in a shared thread carries its sender.
e.g. someone the registry does not know → stopped before any turn (AGENTACCOUNT-UNKNOWN-NO-TURN); the agent is never asked to find out who they are.
AGENTACCOUNT-AGENT-KNOWS-SPEAKERWhether someone may talk, edit the site, file a receipt or use a credential is decided from the same account, so one gate can never pass a person another does not know.
e.g. Oct 4: Ben answered by Nova (Slack row present) but refused every website save (row not linked to her account) → cannot happen.
AGENTACCOUNT-ONE-SPEAKER-EVERY-GATEWho has access to an agent is a mark on its agent-accounts, set on the People tab by person, not a list of Slack ids on its channel; the roster hands the worker exactly those people, with their Slack ids. Nobody marked is nobody. It is the same fact the organization draws as works-with (ORG-WORKS-WITH).
AGENTACCOUNT-ALLOWED-ARE-ACCOUNTSA person reaches an agent — its commands, its login prompt, its model — only when their account has been given access to that agent. Access is granted, never implied: not by being a member of the tenant (its owner included), not by connecting an account or signing in, not by being given access to another agent of the tenant, not by nobody else having it. It is given on the agent's People tab, where the tenant's members are listed so it takes one click, and by adding someone with the Slack id the notice showed them. Taken away, it reaches the running agent in seconds (AGENT-RELOAD-IN-SECONDS). A skill can be run as someone only if they have access.
e.g. Ben, an admin of Northwind with access to Nova, writes to Orion → Orion recognises her account and tells her to ask for access; no turn, no login prompt. Given access on Orion's People tab → answered, and asked for her own login there.
AGENTACCOUNT-ACCESS-IS-GRANTEDWhen agents move to accounts, everyone answered the day before is answered the day after: each Slack row is attached to its account, found by email from Slack when not yet linked; one with no email is kept and shown as needs an email, with its Slack id.
AGENTACCOUNT-MIGRATION-KEEPS-EVERYONE
The Accounts tab
The agent's People tab shows one teammate at a time: their own login, each turned-on skill with what they are missing, and their personal connections. It opens on the signed-in person.
AGENTACCOUNT-TABAn agent's People tab is one person at a time, chosen in a picker like the account menu: everyone in the organization and anyone else given access, each with their picture, name and email and whether they have access, searchable by name, email or Slack id. The one looking is chosen to begin with. For the person chosen: their access to the agent, as a switch; then each skill copy's tools, connected for them or the command that connects it (TOOL-CONNECTED-PER-PERSON). A Slack id is a detail of the person, in small type — Slack is one channel among others, and nothing on the tab is organised around it.
PEOPLE-ONE-PICKERA person's picture is the one Google gives their sign-in, else their Slack profile picture, read by the agent's own Slack app when it registers them; with neither, their initials on a colour of their own. It is never fetched from a third service by their email. Only an https address is kept.
PEOPLE-PICKER-PHOTO"+ New person", at the foot of the picker, adds someone by email: their account if the email has none, a member of the organization — with the Hub — on its chart, and access to this agent. A role they already have is kept. Nothing is sent to them; when they write to the agent in Slack they are known by the email Slack shares. Giving an email to an older row known only by its Slack id is the same form, and the row becomes their account (ACCOUNT-NO-EMAIL-NO-GUESS).
e.g. "+ New person", nora@example.com → Nora is a member, on the chart, and has access; she DMs the agent and is answered.
PEOPLE-NEW-PERSONOn a per-person agent each teammate has a row giving their provider, whether they are signed in, and what to say in the channel to fix it (INFER-WHOSE-LOGIN).
AGENTACCOUNT-OWN-LOGIN-ROWA member whose Slack id was never linked is matched by name; unmatched, they read as not signed in.
AGENTACCOUNT-NAME-MATCH-FALLBACKThe Accounts tab holds at phone width, with nothing scrolling sideways.
AGENTACCOUNT-TAB-ON-A-PHONEThe tab is called People: everyone the agent knows with their Slack id and whether they are allowed, then each teammate's own sign-in and credentials — so "account" means only a person. A saved link to the old Accounts tab still lands on it.
AGENTACCOUNT-PEOPLE-TABThe tab says who is connected and never shows a secret; connecting happens in the agent's channel.
AGENTACCOUNT-NEVER-A-CREDENTIAL
How their login is reported
A person's login state is written only from a login that completed, a turn that failed for want of one, or the harness itself being asked.
AGENTACCOUNT-STATE-FROM-OUTCOMESWhen a per-person agent starts, everyone who already has a login is reported as signed in; anyone else is left as they stand.
AGENTACCOUNT-SCAN-ONLY-CORRECTSSomeone signing in for the first time is registered with the agent before their outcome is reported, and appears already signed in.
AGENTACCOUNT-REGISTER-THEN-REPORTOne person's failed login is recorded against that person, never against the agent, and everyone else goes on being answered (INFER-HONEST-BADGE).
AGENTACCOUNT-NOT-THE-AGENT