Skip to main content

Admin config, permissions & frontend

Domain-level configuration

Helix behaviour is configured per-domain via JSON keys on domains.config, all editable from the Admin app's Settings page (frontend/src/admin/pages/settings/index.js, "Helix setup"/"Helix UI settings" sections):

KeyValuesPurpose
helixIntegrationMode'helix' | 'learning' | 'both'The master flag. 'helix' = Helix-only hub (Learning features hidden entirely). 'both' = Helix + Learning. 'learning' = a Learning-only hub with Helix off — also the default when the key is unset.
helixSendAnalysisEmailsboolean (default true)Whether meeting-analysis and weekly-analysis emails are sent
helixUIMode'scoresAndFeedback' | 'onlyScores' | 'onlyFeedback'Whether users see numeric scores, qualitative feedback, or both
helixShowQuotesboolean (default true)Whether transcript quote snippets are shown alongside scores
helixAdminSkillsAnalyticsPageboolean (default true)Shows/hides the admin Skills Analytics nav item
helixReportingTeamTypeteam typeWhich team-type is used for team-level reporting/heatmaps
helixAnonymiseUsersbooleanHides individual names in analytics unless filtered down to a specific team
helixBotImageUrlURL (theming)Custom bot avatar image used when the meeting bot joins a call
helixScoreOutOfnumber (default 100)Rescales every skill score from the engine's native 0–100 to this domain's chosen maximum (e.g. 5, 10, 20). API/MCP responses that include a score always include a scoreOutOf field alongside it. See Scoring engine → Score scale.
helixShowOverallScoreboolean (default false)Shows an "overall score" (average across a meeting/week's skills) next to summaries, as the first bar-chart/graph-card entry, and as an aggregate column on the admin Skills Analytics heatmap. overall_score is always computed and stored regardless of this flag — it only gates display, so no backfill is needed if turned on later.
helixScoreDecimalPlaces'0' | '1' | '2' (default '0')Decimal places shown for averaged scores — weekly per-skill scores, overall scores, admin analytics averages, emails, and the CSV report. Individual meeting skill scores are always whole numbers.
helixMeetingSummaryFormatPrompt / helixSkillSummaryFormatPromptstringPer-domain override of the format instructions used to make the AI return meeting-level / skill-level summaries as structured Markdown (Overall assessment / What was done well / Where to improve). See Scoring engine → Summary format.
showAgentInHelixPagesboolean (default false)Surfaces the Mindset Coach agent on Helix pages — as MindsetAgentDock (sidebar/FAB) once the user has skills data, or embedded via OnboardingMindsetCard on the empty-state welcome page. Forced off when hasMindsetSDK2. Does not depend on isTrialHub. See Frontend surface area.
helixAllowMeetingTranscriptUploadboolean (default false)Lets users manually upload a meeting transcript for analysis, instead of relying solely on the meeting bot. Forced off when hasMindsetSDK2.
isTrialHubboolean (default false)Swaps HelixInfoModal's content for trial-specific info (TrialInfo) and adds extra Hubspot contact tracking. Does not gate agent visibility — that's showAgentInHelixPages alone.
mindsetOnboardingPlanUidstring (agent plan uid)The onboarding plan the agent is force-set onto (via forceOnboardingPlan) the first time a user opens it — e.g. from OnboardingMindsetCard. The agent must be linked to this plan or the request times out.

Backend permissions

  • Privileges (api/utils/privileges.js): HELIX_READ = 'helix_read', HELIX_WRITE = 'helix_write', plus a 'helix' role preset.
  • Middlewares: checkIsUserOrTeamManagerOrHelixAdmin.js and managerOrAdminUserOrReportOrHelix.js (api/middlewares/) gate routes like /userAnalysis, /skillsAnalysis, and /me/helixAccess-style endpoints to team managers, admins, or users with Helix admin rights.
  • Per-user access: getIsHelixUser()/checkIsHelixUser() (api/routes/userAnalysis/utils/index.js) determine whether a user has access to Helix in the current domain — they must belong to it as their helix_domain_id and have existing data or be targeted by a helix_set. Surfaced via GET /me/helixAccess and GET /users/{userId}/helixAccess.
  • assertUserBelongsToHelixDomain.js guards admin routes (e.g. additional-email management) to prevent cross-domain Helix data leakage.

Frontend flag helpers

frontend/src/common/utils/helix/ wraps helixIntegrationMode/helixUIMode into simple booleans/helpers used throughout the app:

// isHelixEnabled.ts
export const isHelixEnabled =
config.helixIntegrationMode === 'helix' || config.helixIntegrationMode === 'both';
  • isHelixEnabled — Helix features should show at all
  • isHelixOnlyHubmode === 'helix' (Learning features should be hidden)
  • isHelixAndLearningHubmode === 'both'
  • getHelixUIMode() — returns {helixUIMode, showFeedback, showScores} derived from helixUIMode
  • getHelixGraphTooltip() — tooltip copy helper for score graphs

These gate large parts of both apps' navigation — e.g. on a Helix-only hub, Asset Library/Playlists/Nudges/Topics are hidden entirely from both main (Navigation.tsx, HelixOnlyAccessWrapper.tsx) and admin (nav.tsx, ToolsMenu.tsx, LogsMenu.tsx).

Role-editing UI mirrors the backend privileges: frontend/src/common/utils/privileges/constants.ts merges a helixPermission array into the available permission set only when the domain is in helix/both mode (adminRoles/index.js, NewRoleModal.js, PermissionsEditorPanel.js).

Frontend surface area

Main app (frontend/src/common/screens/UserSkills/) — the "My Skills" experience:

  • WelcomePage — onboarding, explains inviting the agent account; embeds the onboarding agent card (OnboardingMindsetCard) inline when showAgentInHelixPages is on and the user has no skills data yet
  • SkillAnalysisPage, WeekAnalysisPage, MeetingAnalysisPage — score/feedback views
  • HelixNotAvailablePage — shown when a user lacks Helix access
  • HelixInfoButton/HelixInfoModal — explains what Helix is inline
  • MindsetAgentDock (frontend/src/common/components/MindsetAgentDock/) — persistent sidebar (desktop) / FAB (mobile) for Mindset Coach, a separate, related AI-coaching feature (see Scoring engine) that Helix pages surface via useCheckIfWeShowAgentInPage; hides itself automatically whenever a page embeds its own agent card instead (e.g. OnboardingMindsetCard), so only one agent instance ever runs at once

Admin app:

  • Settings page — the domain config flags above
  • Skills management (admin/pages/skills/) — the skills themselves, and the sets that group them. A set's detail panel is where its skills are ordered: alphabetically, or in a custom order dragged into place, stored as helix_set_skill.sort_order (see Data model)
  • Skills Analytics (admin/pages/skillsAnalytics/) — heatmap/progression/weeks-and-teams views
  • Skill Logs (admin/pages/logs/skills/)
  • Meeting Reprocessing (admin/pages/meetingReprocessing/) — see Scoring engine → Manual reprocessing
  • Helix email-watch toggle and the "Run Helix weekly email for all users on all hubs" button (see Scoring engine → weekly roll-up)

Calendar connection UI: CalendarDeAuthorisedContent.tsx plus the OAuth callback handlers under me/calendar/google/auth/callback and me/calendar/microsoft/auth/callback — see Meeting bots → User-side calendar connection.