Audit of the operator docs against live reality (2026-11-04): - app-inventory.md: all 19 Cloudron apps with id, fqdn and registry image pin. Corrects the portal path (code/member-portal, not co-op/member-portal) and the panel path (local/coop.inference.admin-panel, not code/admin-panel). - maintenance/backups.md: the two backup systems; the deliberate per-user restic cache split and the --group-by "" retention fix, with why. - maintenance/woodpecker-ci.md: CI server + agent, image build/pin, manual-only trigger, git-lfs requirement, and its current not-yet-green state (agent's job-collection long-poll gets HTTP 500 from the server). - provider-pricing/: index + GreenPT, Tinfoil (local EHBP proxy architecture) and the Metis /v1/systemone decision-model route; regolo.md updated to record the gateway prices were applied. - agent-fleet.md: steward, infrastructure-bot and socialbot (Unix users, gateway units, teams); member-bot tier 2 planned but not yet provisioned. - README: file list; operator-token-runbook: correct the membership_sweep cadence (3x daily, not nightly); migration doc: post-migration addendum (16->19 apps, DNS split resolved, old box still on with apps stopped).
5.9 KiB
Cloudron app inventory
The co-op's Cloudron server carries 19 apps. Before 2026-11-02 it carried 16; the three added since the migration are the docs site, the CI server and the CI agent (marked NEW below).
Source of truth: read it from the running apps, not from memory or a sibling
deploy. GET https://my.inference.coop/api/v1/apps returns every app with its
id, fqdn, install state and — inside manifest — dockerImage. The app
record's own top-level image field is null; the CLI's list output does
not carry the image at all. The registry paths are per-app and not uniform
(there are three different namespaces in use — see below), and a path copied from
a remembered deploy of a different app points the update at a repository that
does not hold it.
Verified against the live API 2026-11-04.
The 19 apps
| FQDN | App id | Label | Image (pin) | Install |
|---|---|---|---|---|
inference.coop |
55f5f904-3233-44de-ad7b-5dc7c8533b75 |
— | cloudron/io.cloudron.surfer:202611021342220000 |
store (Surfer — marketing site) |
chat.inference.coop |
4023ccbf-d57a-4500-97df-14de9cf3516e |
AI Chat | registry.inference.coop/co-op/librechat-custom:20261031-2a98892 |
custom (LibreChat overlay) |
chat-legacy.inference.coop |
50ae6c97-e851-4d17-b013-51ca7a4e5be0 |
Legacy AI Chat | cloudron/com.openwebui.cloudronapp:202611030420300000 |
store (Open WebUI) |
portal.inference.coop |
d4f05e4b-75c6-492e-9faf-7afb0712fc94 |
— | registry.inference.coop/code/member-portal:20261104-d076729 |
custom |
dashboard.inference.coop |
daf8750e-2683-4104-83ea-f77d1b4601e8 |
Dashboard | registry.inference.coop/code/member-dashboard:20261103-3453131 |
custom |
panel.inference.coop |
ae187071-7a43-4a6e-8a02-986609a66a1a |
Admin Panel | local/coop.inference.admin-panel:0.1.0-1793634279942 |
custom |
gateway.inference.coop |
adababd4-2427-4bdd-9bf7-6bdad0302610 |
LiteLLM | registry.inference.coop/local/ai.coop.litellm:1.0.0-20261103-d6cfe78 |
custom |
matrix.inference.coop |
aa6f4597-6206-4509-b32e-c89750b2c1d8 |
Matrix Chat | cloudron/org.matrix.synapse:202611030719520000 |
store (Synapse) |
git.inference.coop |
c91c13aa-30ed-4af9-9599-7a87ab4f221d |
Code | cloudron/io.gitea.cloudronapp:202611011719500000 |
store (Gitea) |
registry.inference.coop |
c257ba3c-6737-4375-ad51-ea19586bf3f0 |
— | cloudron/io.cloudron.container-registry:202610221511140000 |
store (container registry) |
vault.inference.coop |
cb838bcf-f2e2-4670-b117-dca04b0ee957 |
— | cloudron/com.github.bitwardenrs:202611020820270000 |
store (Vaultwarden) |
forum.inference.coop |
8b1a972c-08af-4e92-852c-d573c37b01ad |
Forum | cloudron/org.loomio.cloudronapp:202611010321240000 |
store (Loomio) |
newsletter.inference.coop |
eed2217c-b165-430e-bc29-7ccfef9b11e4 |
— | cloudron/app.listmonk.cloudronapp:202610220221130000 |
store (Listmonk) |
search.inference.coop |
d7c73fff-ee42-4db0-98c0-4ce7a8ab35cc |
— | cloudron/io.github.ascimoo.searx:202611012319290000 |
store (SearXNG) |
cloud.inference.coop |
fd261d67-b790-424f-9e82-f74883ee8585 |
— | cloudron/com.nextcloud.cloudronapp:202610211606270000 |
store (Nextcloud) |
email.inference.coop |
fbb256b9-ead3-41d8-bee0-d5ea87149436 |
— | cloudron/io.cloudron.mail:202610261602550000 |
store (Cloudron mail UI) |
docs.inference.coop |
85b7ce06-e2af-49a4-bd4f-a9c2e692e3ab |
Docs | cloudron/io.cloudron.surfer:202611021342220000 |
store (Surfer) — NEW 2026-11-03 |
ci.inference.coop |
4984f95e-0c0a-4af3-9ce1-4ca4f3e8483d |
Woodpecker | cloudron/org.woodpecker_ci.cloudronapp:202610300219490000 |
store (Woodpecker server) — NEW 2026-11-03 |
ci-agent.inference.coop |
5ac63873-cf2c-4ad9-acd6-81dc0e016c83 |
— | registry.inference.coop/co-op/woodpecker-agent:20261104-e070275 |
custom (Woodpecker agent) — NEW 2026-11-03 |
(my.inference.coop is the Cloudron dashboard hostname — the platform itself, not
an app object — so it does not appear here.)
Registry namespaces — they are NOT uniform
Five custom apps pull from four different namespaces. Deriving one path from another app's pattern deploys the wrong (or a missing) image:
| App | Registry path |
|---|---|
| chat (LibreChat overlay) | registry.inference.coop/co-op/librechat-custom |
| CI agent | registry.inference.coop/co-op/woodpecker-agent |
| member portal | registry.inference.coop/code/member-portal |
| member dashboard | registry.inference.coop/code/member-dashboard |
| gateway (LiteLLM) | registry.inference.coop/local/ai.coop.litellm |
| admin panel | local/coop.inference.admin-panel |
Correcting a stale memory: the portal is code/member-portal (not
co-op/member-portal), and the admin panel is local/coop.inference.admin-panel
(not code/admin-panel). Both were cited wrongly in earlier notes; the values
above are read from the running apps.
Store vs custom, and what that decides
Six apps are custom installs (packaged by us, appStoreId == ""): chat,
CI agent, portal, dashboard, panel, gateway. Custom apps get no automatic
update (Cloudron says "not available for custom apps") — their protection is the
manifest.dockerImage pin, which an update deploys, so a custom app must never be
pinned to a floating tag. The rest carry a real appStoreId and update through
the store.
Notes that are easy to get wrong
enableAutomaticUpdateexists on every app object and means nothing for a custom one. Judge update behaviour by the install SOURCE (appStoreId), not by that flag.- Public collectives reach
co-op/*andcode/*repos; the only private repos areops/inferencebotandops/security. info@inference.coopis the co-op's gateway team account (member:info@inference.coop, budget $135/30d) and also the owner account of several provider keys — see the token runbook.