The member-facing infrastructure page no longer documents who holds room power or which automation accounts exist. Record it here instead: @inference-admin as administrator of record, the retired @inference-bot account and its two un-leavable rooms, and the @ops_audit review account. Also repairs a heading glitch carried over from the docs page: a line began with a bare '#infrastructure', which Markdown parsed as an <h1>. The room names are now written inline so no line starts with '#'.
96 lines
5.5 KiB
Markdown
96 lines
5.5 KiB
Markdown
# The agent fleet
|
|
|
|
The co-op runs **more than one agent**, each as its **own Unix user** on the agent
|
|
host (`ov-0f018e`, `179.237.103.165`) with its **own Hermes gateway unit** and its
|
|
**own LiteLLM team**. Any document that describes "the agent" as a single thing is
|
|
now wrong.
|
|
|
|
## The three agents today
|
|
|
|
| Agent | Unix user | systemd unit | Gateway team (budget) | Model | Presence |
|
|
|---|---|---|---|---|---|
|
|
| **Inferencebot** (steward) | `ubuntu` | `hermes-gateway.service` | *(co-op account team)* | per `~/.hermes/config.yaml` | Matrix `@inferencebot:inference.coop`; digests, newsletters, membership/key plumbing |
|
|
| **infrastructure-bot** | `infrabot` | `hermes-gateway-infrabot.service` | `agent:infrastructure-bot` ($5/30d) | `greenpt/glm-5.3-flash` | Matrix `#infrastructure` (answers only when mentioned); infrastructure scope |
|
|
| **socialbot** | `socialbot` | `hermes-gateway-socialbot.service` | `agent:socialbot` ($5/30d) | `greenpt/glm-5.3-flash` | Matrix `#social-drafts`; drafts the co-op's AT Protocol (Bluesky) account `inference.coop` |
|
|
|
|
All three gateways run on the one host; each is a separate process, a separate
|
|
`.env`, and a separate set of rooms. There is **one LiteLLM gateway** (the Cloudron
|
|
app) that all three draw on — the agent host runs no gateway of its own.
|
|
|
|
### Who is who (do not conflate them)
|
|
|
|
- **Inferencebot** is the **steward** and the fleet administrator: full Cloudron
|
|
token, gateway master key, member-data plumbing. It is NOT a member-facing chat
|
|
persona.
|
|
- **infrastructure-bot** is a **lower-privileged** infrastructure agent. Per its
|
|
own SOUL it has **no sudo, no Cloudron admin token, and no member data**; when a
|
|
task needs more privilege it hands up to the steward rather than working around
|
|
it. Its gateway key has a small monthly budget and a flash-tier allowlist.
|
|
- **socialbot** has **no Cloudron, portal or member-data access** and no power over
|
|
Matrix rooms; its only writable surface is the `#social-drafts` room, and it
|
|
**never publishes an unapproved draft** — silence is its correct failure mode.
|
|
|
|
## Member bots — TIER 2 (planned, not yet provisioned)
|
|
|
|
The intended path for **member-facing** bots is a second tier: each member bot is a
|
|
**Hermes profile under the `infrabot` Unix user**, sharing **one** gateway process
|
|
(the infrabot one), with its own gateway team/key. This is tracked as **co-op/support#33**.
|
|
|
|
**Status (2026-11-04): not yet provisioned.** `/home/infrabot/.hermes/profiles/`
|
|
holds only a `.deleted` directory with two probe files — there are **no active
|
|
member-bot profiles**. Record this honestly: the design exists, the instances do
|
|
not.
|
|
|
|
## Why one Unix user per agent — and the limit of it
|
|
|
|
**Profile isolation is organizational, not security.** Run one OS user (or a
|
|
rootless container) per agent from day one: **on a shared Unix user, sibling
|
|
Hermes profiles can read each other's `.env`.** So tier-2 member bots sharing the
|
|
`infrabot` user are isolated from *members* but **not from each other** — that
|
|
sharing is accepted for member bots, not extended to the privileged agents.
|
|
|
|
## Backup coverage is automatic — but prove it
|
|
|
|
The nightly restic run (see `maintenance/backups.md`) enumerates `/home/*` **as
|
|
root** and stages every agent home, so a new agent is covered without editing any
|
|
list. Coverage is still **unproven until that agent's files show up in a
|
|
snapshot**.
|
|
|
|
## Gateway teams (member vs agent)
|
|
|
|
From `GET https://gateway.inference.coop/team/list` (2026-11-04): 97 teams — one
|
|
`member:<email>` team per member (mostly $15/30d), `member:info@inference.coop`
|
|
($135/30d, the co-op account), the two `agent:*` teams above, and
|
|
`sandbox:librechat-test` ($3). Agent teams carry a **small budget and a flash-tier
|
|
model allowlist** enforced at the gateway.
|
|
|
|
## Matrix homeserver accounts
|
|
|
|
Beyond the agent bots above, the homeserver carries two automation accounts.
|
|
Also recorded here: the room account retired in October 2026, moved out of the
|
|
member-facing docs.
|
|
|
|
- **`@inference-admin:inference.coop` — the room and server administrator.** A
|
|
Synapse server admin, used for provisioning rooms, managing membership, and
|
|
retiring rooms. It is the administrator of record for the co-op's Matrix rooms
|
|
— general, community, design, skillshare, updates and infrastructure — and
|
|
holds the portal's member-invite credential (`MATRIX_BOT_TOKEN`). It **never
|
|
speaks in a member room**; a message from it is a mistake, not a feature.
|
|
- **`@inference-bot:inference.coop` is retired (2026-10-29).** It was the
|
|
original room-administration account (it created the space and most of the
|
|
rooms) and held a Synapse server-admin flag. Its room power passed to
|
|
`@inference-admin`; its admin flag was dropped, it was deactivated, and every
|
|
device and token was deleted. Nothing should use it again.
|
|
- **`@ops_audit:inference.coop`** — a server-admin account created for the
|
|
October 2026 security review. Retained only until its tokens are revoked.
|
|
|
|
Two loose ends, recorded so nobody re-investigates them from scratch: the
|
|
retired account remains joined to two rooms it cannot leave (they reject every
|
|
write — `500` on leave), and those rooms are also why they can't be deleted; and
|
|
its *name* is still the tempting one, so check `whoami` rather than the name
|
|
before trusting any account that looks like it.
|
|
|
|
**House rule: power belongs to `@inference-admin`, voice belongs to `@inferencebot`.**
|
|
Don't create an account whose name differs from an existing one by a character or
|
|
two — that lookalike confusion is what the rule exists to undo.
|