Agent Platforms

eneo

Eneo — open AI platform from Sundsvall municipality (agent workspaces, assistants, document AI)

@r8s/eneo

eneodocumentscorporaknowledge

Components (1)

01

Eneo

Eneo — open AI platform from Sundsvall municipality (agent workspaces, assistants, document AI).

import { Platform } from '@r8s/recipes'
import { Eneo } from '@r8s/eneo'

export default (
  <Platform secrets={{ backend: 'openbao', mount: 'kv', path: 'apps' }}>
    <Eneo
      name="eneo"
      host="eneo.example.com"
      objectStorage={{
        endpoint: 'https://s3.internal.example.com',
        bucket: 'eneo-corpora',
        credentialsSecret: 'eneo-object-storage',
      }}
    />
  </Platform>
)
namestringOptional

Resource name (defaults to 'eneo')

namespacestringOptional

Kubernetes namespace (defaults to 'default')

versionstringOptional

Container image tag (defaults to 'latest' — pin a version in production)

hoststringRequired

Public hostname for the Eneo web app (required)

replicasnumberOptional

Number of app replicas (defaults to 2 — scale freely, the app is stateless)

objectStorage{ endpoint: string, bucket: string, credentialsSecret: string, region?: string }Required

S3-compatible object storage for document corpora (RustFS in the platform). Required. Reference a bucket whose credentials live in a Secret provisioned by the secrets backend (keys: accessKey, secretKey) — never plaintext.

sso{ issuer: string, clientId: string, clientSecretRef: SecretRef, scopes?: string }Optional

OIDC SSO client — register Eneo as a client in Keycloak (the Auth recipe) and reference the client secret through the backend.

smtp{ host: string, port?: number, from?: string }Optional

Outgoing SMTP for invitations and notifications (mirror of the EuroOffice recipe). When set, SMTP_HOST / SMTP_PORT / SMTP_FROM are rendered as plain env and SMTP_PASSWORD is delivered via secretKeyRef from the ${name}-secrets bundle (key: smtpPassword) — never plaintext. The bundle then requires the smtpPassword key as well; without smtp only appSecret is required from the bundle.

secretsNamestringOptional

Name of an existing Secret holding appSecret (and smtpPassword when smtp is set). Required unless a secrets backend (openbao/vault) is configured on the surrounding Platform — the backend then provisions them.

dbStoragestringOptional

Storage size for the Postgres cluster (defaults to '10Gi'). Document corpora live in object storage (objectStorage, S3/RustFS) — Eneo does not persist corpora on a local volume. A local corpus PVC (mounted volumes/sidecars on the app workload) is a v1.1 item.

resources{ requests?: { cpu?: string, memory?: string }, limits?: { cpu?: string, memory?: string } }Optional

Requested app resources

tls{ secretName: string, clusterIssuer: string }Optional

TLS configuration (defaults to letsencrypt-prod cluster issuer)