Skip to content

Server Settings

Tenant admins manage runtime configuration through the Server Settings page at /admin/settings. This page covers what’s there in general; the next three pages cover specific configuration surfaces in detail.

Most settings can also be set via appsettings.json or environment variables at deploy time, but Kurrent provisions the tenant and you don’t typically touch those — the settings page is the operator-facing surface for everything that needs to change after the tenant is live.

Admins only. The Server Settings item appears in your user menu when one of the following is true:

  • Your GitHub user is an owner of the GitHub org bound to the tenant (auto-detected, refreshed every 15 minutes via the auth proxy).
  • Your GitHub numeric ID is listed in Auth:Admin:GitHubIds (break-glass; Kurrent sets this at deploy time on request).

Non-admin users don’t see the menu item and /admin/settings 404s for them.

The settings page is a single form grouped by area:

  • Eval runner — credentials for the server-side LLM-as-judge runner. See Eval runner.
  • Embeddings & guidelines — provider and model for the embedding service that powers judge-fact clusters and SessionStart guideline injection. See Embeddings & guidelines.
  • Slack — credentials for link-preview unfurling. Driven through a dedicated wizard at /admin/slack, not the generic form. See Slack integration.

The top of the page also surfaces a summary block for Slack and last-sync timestamps for the GitHub admin sync (so you can confirm “yes, this tenant just picked up the latest org-owner list”).

Values entered through the form are written to the tenant’s server_settings SQLite table. Secrets (API keys, signing secrets, bot tokens) are encrypted at rest using ASP.NET Core Data Protection. The keys live alongside the database in data/dp-keys/.

Settings layer into the running app’s IConfiguration between appsettings.json (lower priority) and environment variables (higher). So:

appsettings.json < server_settings (DB) < environment variables

If a key is set in the DB and in env vars, env vars win. Useful for one-off overrides during incident response without going through the UI.

The app uses IOptionsMonitor<T> for most settings consumers, so updates take effect within seconds of saving — no app restart needed. Specific behaviours worth knowing:

  • Eval chat client factory re-reads ServerEvalOptions on every Create() call, so new evals dispatched after a settings change use the new credentials immediately.
  • Slack event handler injects IOptionsMonitor<SlackConfig> and consults it per request, so credentials saved through the wizard activate on the next inbound event from Slack.
  • Embedding provider/model changes trigger a one-time vector clear at the next app startup. The backfill service re-embeds retained facts under the new provider on the side. See Embeddings & guidelines for the operational details.
  • Add or remove users. Membership is gated by your GitHub org — anyone in the org you authorised the GitHub App on can sign in.
  • Reset another user’s tokens. Tokens are user-local in ~/.config/kapacitor/tokens.json.
  • Self-host configuration (database paths, listen ports, KurrentDB connection). Kurrent operates the tenant; those live in deploy config that’s not surfaced.