OpenGeniChat is the default: the signed-in user’s chats plus the conversation. The list is a sidebar when the component is wide and a drawer behind a menu button when it is narrow, measured on its own container, so it works in a side panel as well as a full page. It starts new chats from their first message through the proxy’s createSession hook, and lets users rename and archive chats.
sessionList: "mine", the default); sessionList: "visible" lists every chat the user may read in the workspace. Control the selection with sessionId and onSessionChange (for example from the URL), or mount SessionList and SessionConversation separately.
Import the conversation components from @opengeni/react/session-ui. It has no optional peers; the package root also exports the workbench (editor, terminal, desktop), whose dependencies are optional peers your app would otherwise need to install.
SessionConversation is the complete conversation for one session: streaming replies, tool activity, approvals, structured questions, file attachments, the message queue, Steer, and Pause/Resume. It uses the SDK client from OpenGeniProvider, so it works unchanged behind the session proxy.
Props
Remount or reset the component when the signed-in user or tenant changes.
Brand it
compiled.css is scoped to the components and needs no Tailwind. Every visual decision is a --og-* CSS variable. Override them on any ancestor:
data-og-theme="light" to an ancestor for the light theme, and data-og-density="compact" for narrow side panels:
tokens.css.
Render your tools
Tool calls to your own MCP server can render as product UI instead of a generic activity row. Tool names are<server id>__<tool name>:
Start sessions from the browser
OpenGeniChat’s new-chat composer, and any browser createSession call, go through the proxy’s createSession hook; without it, browser-started sessions are refused. The browser sends only the first message and an idempotency key; your hook returns the full request, so tools, skills, and model policy stay server-side:
Links, artifacts, and Sites
Retained-file links download by file ID by default. Sandbox-path links render unavailable unless the proxy enablessandboxFiles: true; enabled reads stay inside the session working directory and refuse symlink components.
Use resolveLink on SessionConversation or an outer OpenGeniLinkProvider to route editable artifacts and Sites to your product’s own authenticated pages. Or use onOpenArtifact with SessionArtifactViewer from @opengeni/react/artifacts and enable the proxy’s artifacts: true. The proxy resolves fresh user grants and checks the exact source session on every read; Site HTML streams with a 25 MiB ceiling (site_html_too_large on overflow). Server-only proxy read helpers live on @opengeni/sdk/session-proxy.
For non-React renderers, use parseOpenGeniLink with isReservedOpenGeniLink; an invalid reserved reference must stay unavailable, never become a link on your own origin.
Other UI shapes
- Headless hooks from
@opengeni/react/sessionwhen you need a materially different interaction model but want the same event, queue, composer, and approval behavior. - The SDK alone for a non-React frontend, a CLI, or backend automation.
- The chat facade when you already have a chat UI. See Keep your existing chat UI.