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):
| Key | Values | Purpose |
|---|---|---|
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. |
helixSendAnalysisEmails | boolean (default true) | Whether meeting-analysis and weekly-analysis emails are sent |
helixUIMode | 'scoresAndFeedback' | 'onlyScores' | 'onlyFeedback' | Whether users see numeric scores, qualitative feedback, or both |
helixShowQuotes | boolean (default true) | Whether transcript quote snippets are shown alongside scores |
helixAdminSkillsAnalyticsPage | boolean (default true) | Shows/hides the admin Skills Analytics nav item |
helixReportingTeamType | team type | Which team-type is used for team-level reporting/heatmaps |
helixAnonymiseUsers | boolean | Hides individual names in analytics unless filtered down to a specific team |
helixBotImageUrl | URL (theming) | Custom bot avatar image used when the meeting bot joins a call |
helixScoreOutOf | number (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. |
helixShowOverallScore | boolean (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 / helixSkillSummaryFormatPrompt | string | Per-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. |
showAgentInHelixPages | boolean (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. |
helixAllowMeetingTranscriptUpload | boolean (default false) | Lets users manually upload a meeting transcript for analysis, instead of relying solely on the meeting bot. Forced off when hasMindsetSDK2. |
isTrialHub | boolean (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. |
mindsetOnboardingPlanUid | string (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.jsandmanagerOrAdminUserOrReportOrHelix.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 theirhelix_domain_idand have existing data or be targeted by ahelix_set. Surfaced viaGET /me/helixAccessandGET /users/{userId}/helixAccess. assertUserBelongsToHelixDomain.jsguards 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 allisHelixOnlyHub—mode === 'helix'(Learning features should be hidden)isHelixAndLearningHub—mode === 'both'getHelixUIMode()— returns{helixUIMode, showFeedback, showScores}derived fromhelixUIModegetHelixGraphTooltip()— 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 whenshowAgentInHelixPagesis on and the user has no skills data yetSkillAnalysisPage,WeekAnalysisPage,MeetingAnalysisPage— score/feedback viewsHelixNotAvailablePage— shown when a user lacks Helix accessHelixInfoButton/HelixInfoModal— explains what Helix is inlineMindsetAgentDock(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 viauseCheckIfWeShowAgentInPage; 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 ashelix_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.