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

#SettingWhereWhat to setRow
1Where model calls are processedOrganisation → 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
2Internet accessSettings → 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
3Plugin policyPlugins, per plugin; read back on Organisation → Policies, the Plugin policy rowEach 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
4Organisation rulesOrganisation → RulesOne 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
5Members' own automatic-review rulesSettings → 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
6Model allowlistOrganisation → 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
7Template sharingOrganisation → 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
8On-demand spendSettings → Usage & Billing (Sm-51), the On-Demand card and its Set a monthly limit selectOff 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:

actionwhen it is written
org.team_created, org.renamedthe organisation is provisioned, or its name changes
org.member_invited, org.invitation_accepted, org.invitation_revoked, org.member_role_changed, org.member_removedan invitation or a membership changes
org.product_toggled, org.delegation_toggled, org.residency_changed, org.rule_changed, org.limits_overriddena Policies or Rules row is changed
org.template_sharing_changed, model.allowlist_changed, org.byok_changedthe template-sharing switch, the model allowlist or the bring-your-own-key switch changes
org.computer_stoppedOrganisation → Computers Stop is used
org.access_requested, org.access_decided, org.join_domains_changeda domain-join access request is filed or decided, or the join-domain list changes
org.team_bot_added, org.team_bot_removed, bot.visibility_changeda bot is shared with the team, unshared, or its visibility changes
audit.export_requested, audit.export_downloaded, audit.chain_verified, audit.chain_brokenthe audit log itself is exported or verified
billing.seats_synced, billing.seats_sync_failed, billing.on_demand_enabled, billing.on_demand_disabled, billing.limit_changedseats or on-demand billing settings change
privacy.erase, privacy.erase_replayeda subject-erasure request runs, or replays after a restore
template.published, template.withdrawn, template.installed, template.exported, bot.version_cut, bot.version_restoreda 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_approveda plugin package moves through submission, review or install
org.setup_manifest_proposed, org.setup_manifest_decided, computer.setup_rana 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:

  1. 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.
  2. 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.
  3. 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.