The administrator security baseline
Administrator·9 minutes to read
Eight settings, reviewed before the first member signs in, and where each one lives today. They explain F-SET-2 (organisation settings), F-ADM-1 (the admin dashboard), F-COMP-7 (the egress proxy), F-PLUG-5 (team plugin policy), F-SK-3 (organisation rules), F-NOT-3 (push notifications), F-BOT-10 (model routing) and F-BOT-8 (templates), and the review instructions F-APR-5's automatic reviewer reads.
Before the first member signs in
| # | Setting | Where | What to set | Row |
|---|---|---|---|---|
| 1 | Where model calls are processed | Organisation → Policies, the residency row (no source screen — sheet idiom Sm-46) | EU/EEA only is the default at provisioning; EU/EEA first prefers an EU/EEA route and still fails outside it rather than leaving the area; Anywhere a route requires is the owner's alone and needs the organisation's name typed under Confirm processing outside the EU/EEA. | F-SET-2 |
| 2 | Internet access | Settings → Computer (Sm-49) → Internet access; the organisation-wide Network policy row on Organisation → Policies (no source screen — sheet idiom Sm-46) | Only the sites below (the built-in package, certificate and time hosts, plus whatever the organisation adds) is the default; Anywhere on the internet needs a written reason and is admin-only — Only an organisation admin can change internet access.. The Network policy row is present and disabled: Group scope and lock wait for a customer (D43). Settings → Computer has the per-member controls. (D203 records the M6 split between the two rows.) | F-COMP-7, F-ADM-1 |
| 3 | Plugin policy | Plugins, per plugin; read back on Organisation → Policies, the Plugin policy row | Each plugin is Allowed, Blocked or Required; a Required plugin cannot be uninstalled by a member; blocking a plugin never blocks the site itself. | F-PLUG-5 |
| 4 | Organisation rules | Organisation → Rules | One instruction, up to 500 characters., applied on any of chat, computer, routines, channels; the count line reads N of M rules. The recommended block rules — production deployments, external e-mail, payments, accepting legal terms — and allow rules for routine, safe work go here as ordinary organisation rules. | F-SK-3 |
| 5 | Members' own automatic-review rules | Settings → General, the rules section (Sm-47) | Ask members to prefer Allow once over a saved rule. An automatic-allow rule expires and is renewed with one click within seven days of lapsing. A saved rule never covers local execution, whatever it is worded to say. There is no organisation lock on a member's toggle (D166, later). | F-APR-5 |
| 6 | Model allowlist | Organisation → Policies, the Model allowlist row (no source screen) | Applies to every model call made for this organisation: chats, the reviewer, group routing, memory consolidation and skill compilation. The platform's own reviewer fallback reads only the redacted card and is not affected. and A model you allow runs only on routes your residency policy admits. | F-BOT-10 |
| 7 | Template sharing | Organisation → Policies, the Template sharing row (no source screen) | Who members may publish templates to. Team keeps them inside this organisation; switching to Team moves existing public templates back to the team. Off, Team or Public, default Team; a template's own audience starts unselected. | F-BOT-8 |
| 8 | On-demand spend | Settings → Usage & Billing (Sm-51), the On-Demand card and its Set a monthly limit select | Off by default; enabling needs a ceiling and a stored payment method on a web subscription; a member ceiling never raises the organisation's (the lower binds). Edits are admin-only: Only an administrator can change usage settings for this organisation. | F-BILL-5 |
Organisation rules: the block list and the allow list
Two different lists answer two different questions, and only one of them has a screen today.
The recommended block sentences — no production deployments from this organisation, no external e-mail without review, no payments, never accept legal terms on the organisation's behalf — and the recommended allow sentences for routine, safe work go on Organisation → Rules (row 4 above) as ordinary organisation rules: they steer the run itself.
The automatic reviewer that decides an approval card reads a separate list, org_policies.review_instructions — team-wide instructions F-APR-5 calls for — but no screen or command sets it today. This page names that as a gap rather than pointing an administrator at a
setting that does not exist (this spec's decision F-11); the reviewer's other source is each
member's own automatic-review rules (row 5).
Members' own automatic-review rules
Every member carries their own automatic-review toggle, default on, on Settings → General. Turning
it off disables only the rule-released automatic-allow path — everything that needed approval
still asks. There is no organisation-wide lock on that toggle (D166, later).
Notifications
The two-gate rule F-NOT-3 describes waits for the mobile app (M7); nothing on main implements it
yet, so this page names the switch that exists instead. A bot's own Notifications row — Get notified when this Bot finishes or needs input — is the first gate. A push reaching a member's
phone needs that switch and the device's own notification permission; the phone half of the
rule arrives with the mobile app (F-NOT-3, D166).
Delegation and the product switch
Work with people outside this organisation is off by default: while it is off, a bot never hands
a task to somebody who is not a member, by mail or by a shared link.
Botseon for this organisation stops every run start for every member — chats, routines and
channels alike — and deletes nothing; an administrator turns it back on when the reason for
stopping has passed.
Both are recorded to the audit log (org.delegation_toggled, org.product_toggled).
What the audit log records
Organisation → Audit reads Who changed what in this organisation, newest first., with a
Tamper check line (Verified unbroken … or A break was found …) and an Export control
offering From, To, Request export, Download and Chain unbroken.
The action vocabulary an export carries:
| action | when it is written |
|---|---|
org.team_created, org.renamed | the organisation is provisioned, or its name changes |
org.member_invited, org.invitation_accepted, org.invitation_revoked, org.member_role_changed, org.member_removed | an invitation or a membership changes |
org.product_toggled, org.delegation_toggled, org.residency_changed, org.rule_changed, org.limits_overridden | a Policies or Rules row is changed |
org.template_sharing_changed, model.allowlist_changed, org.byok_changed | the template-sharing switch, the model allowlist or the bring-your-own-key switch changes |
org.computer_stopped | Organisation → Computers Stop is used |
org.access_requested, org.access_decided, org.join_domains_changed | a domain-join access request is filed or decided, or the join-domain list changes |
org.team_bot_added, org.team_bot_removed, bot.visibility_changed | a bot is shared with the team, unshared, or its visibility changes |
audit.export_requested, audit.export_downloaded, audit.chain_verified, audit.chain_broken | the audit log itself is exported or verified |
billing.seats_synced, billing.seats_sync_failed, billing.on_demand_enabled, billing.on_demand_disabled, billing.limit_changed | seats or on-demand billing settings change |
privacy.erase, privacy.erase_replayed | a subject-erasure request runs, or replays after a restore |
template.published, template.withdrawn, template.installed, template.exported, bot.version_cut, bot.version_restored | a template or a bot version is published, withdrawn, installed, exported, cut or restored |
package.submitted, package.reviewed, package.withdrawn, package.uninstalled, package.installed, package.update_approved | a plugin package moves through submission, review or install |
org.setup_manifest_proposed, org.setup_manifest_decided, computer.setup_ran | a Team Setup manifest is proposed, decided, or run on a computer |
Sign-up abuse controls
A new account on the hosted edition needs an address that can receive mail, and the same person cannot quietly hold two accounts on one mailbox.
Three guards run on Create an account, in this order, and the order is the point — each refusal costs less than the one after it:
- The domain. A disposable or temporary-mail domain, or a domain that accepts no mail at all,
is refused with
Use an address you can receive mail on.— one sentence for both causes, which names neither the block list nor which of the two fired. - How many accounts one network has just made. More than five in a rolling hour is refused with the same sentence a rate-limited sign-in gets, so neither page ever confirms whether an address already has an account.
- The per-address sign-in limit, unchanged, which the sign-in page has always used.
Addresses are compared by their canonical form, not the literal string typed: a +suffix is
ignored, and for Gmail so are dots in the name. Someone who signs up as ida+work@example.com when
ida@example.com already exists is signed into that existing account rather than given a second
one. Nothing is merged, because there was only ever one account.
What is recorded, and what is not
Each refusal — and each alias sign-in, and each trial rejected for a duplicate card — appends one
row to abuse_signals. A row holds a keyed hash and never an address, never a network address,
and never anything about a payment card. The hash columns accept nothing but a 64-character
digest, so a caller that passed a raw address would be refused by the database rather than stored.
Rows older than 90 days are removed as new ones are written; nothing schedules a sweep. The table
is not readable by the application role, and no bot, tool or plugin can reach it.
An organisation is named on a signal only where one exists — a refusal at sign-up happens before
anyone is signed in — and where one is named, the organisation's own audit log carries a matching
abuse.signal row.
The operator verbs
These are for whoever runs the deployment, not for an administrator of a single organisation, and they are cross-tenant:
botseon ops abuse domains add <domain> # refuse new accounts on this domain
botseon ops abuse domains allow <domain> # lift a refusal, including one the built-in list makes
botseon ops abuse domains list # the current overlay, and the signal counts behind it
add and allow are both idempotent — running either twice, or allowing a domain that was never
blocked, is not an error — and a domain moves between the two lists rather than joining both. They
write an overlay beside the built-in list, which is read fresh on every sign-up, so a change takes
effect without a redeploy. The built-in list itself is never edited by these commands.
list prints domains and counts per kind and no hash and no address: it reads aggregates only,
so even this privileged report cannot become a way to ask whether one particular person tried to
sign up.
Last verified against build c0f77aa.