Settings — Nox
Audience: Management · Sales · Support · QA · Engineering · Where in app: Settings → {Nox} Assistant (/settings/nox) · Plan availability: Requires Nox enabled for the account; company-level cards require the settings.organization permission
This screen controls how the Nox admin assistant behaves for your account: the morning Daily Brief email (send hour + which sections it includes), how Nox follows up with leads (channel + whether it can send without approval + the GoHighLevel contact-update policy), visitor-alert defaults, the registered watches Nox is holding, a per-user auto-play toggle for the spoken brief, and the list of durable memories Nox has saved about you. It mixes company-level settings (org-admin only) with personal preferences available to everyone.
The assistant name is white-labeled — the page reads "{Nox} Assistant" using the resolved brand name. This page is the settings surface for Nox; the assistant itself is documented under modules/nox and subsystems/nox-assistant.
What it does
- Toggles the Daily Brief email (yesterday's leads/activity), sets its send hour, and picks which content sections it includes.
- Sets the follow-up channel and whether Nox may send follow-ups without approval (off by default).
- Sets the GHL contact-update policy for correcting linked GoHighLevel contacts when a visitor's real identity is later learned.
- Sets visitor-alert defaults: identity confidence required to alert, auto-engage cooldown, and quiet-push outside business hours.
- Per-user, this-device-only: auto-play daily brief when you first open Nox each day.
- Lists and lets you delete durable memories Nox has saved about you.
How it works
The view (settings/nox/Index.vue) only applies when Nox is enabled for the org (company.knox.enabled === true); otherwise it shows a "Nox isn't enabled yet" card. Company-level cards render only with the settings.organization permission (canManageCompany); the per-user cards (auto-play, memories) are available to everyone.
Company settings are a vee-validate + zod Form saved via a dedicated endpoint PUT /company/<id>/nox-settings, which uses dot-path $set so it never clobbers the rest of the knox subdocument (counters, etc.).
Daily Brief
-
Daily Brief email toggle →
knox.daily_brief.enabled(defaulttrue). -
Send hour →
knox.daily_brief.send_hour(payloadbrief_send_hour, validated 0–20; model default 9, funnel-beta tenants are set to 5 when gated). -
What to include (shown when enabled) →
knox.daily_brief.sections.*(all default on):Section key Label Includes statsDaily stats Visitor and lead counts captured_leadsCaptured leads New form submissions hot_leadsHot leads High-intent returning visitors identified_visitorsIdentified visitors Other named visitors ask_noxSuggested questions Prompts you can ask next On funnel-beta tenants (
nox_funnel_beta_enabled && nox_funnel.enabled) the funnel section keys (funnel_snapshot,funnel_pace,funnel_priorities, …) are appended to the checkbox group — see Nox Funnel. On save, unchecked sections are written asfalse(the payload sends an explicit boolean per known key).
Follow-ups (only when GHL is connected)
The Follow-ups card renders only if GoHighLevel is connected (company.go_high_level.access_token).
-
Follow-up channel →
knox.actions.channel_preference:auto(SMS then email),email, orsms. Defaultauto. -
Let {Nox} send follow-ups without approval →
knox.actions.autonomous_send(defaultfalse). Off = Nox drafts follow-ups for you to review/send. On = Nox sends email/SMS automatically. The AI phone call-back is a separate path and is not gated by this toggle. -
Update GHL contacts with corrected identity →
knox.ghl_contact_update_policy:Value Label Effect created_onlyOnly contacts Nox created Corrects only contacts Nox auto-created from enrichment; never overwrites a pre-existing contact (those are conflict-flagged). Default. allAll matched contacts Also overwrites a pre-existing contact on a mismatch. offOff — don't update GHL Never writes corrected identity back to GHL.
Visitor alerts
Defaults for "watch this visitor / auto-engage on return" directives. Written under knox.visitor_watch:
| Control | Field | Options / range | Default in form |
|---|---|---|---|
| Identity confidence to alert | min_confidence | verified (only) or strong (match) | verified |
| Auto-engage cooldown (hours) | auto_engage_cooldown_hours | 0–168 | 6 |
| Quiet push outside business hours | quiet_push_outside_business_hours | on/off | on (holds mobile/desktop push; in-app alert still recorded) |
The form initializes
min_confidencetoverified, while theCompanyModelschema default isstrong. New accounts that never save this screen use the model default (strong); once saved, the chosen value (form defaultverified) is persisted. Note this when supporting "why did/didn't an alert fire."
Registered watches
Lists the visitor watches / auto-engage directives Nox registered from chat (getVisitorWatches / cancelVisitorWatch → GET/DELETE /knox/visitor-watches, repository @/repositories/Knox/watches). Each row shows the person, type, and recurrence, with a cancel action.
My preferences (per-user, this device only)
- Auto-play daily brief — speaks your brief automatically the first time you open Nox each day (at most once/day). Stored in
localStoragevianoxSettingsstore (autoPlayBrief, keykk_nox_settings); not synced across devices. When off (or already played today), a brief-ready badge on the Nox header replaces auto-play — the brief never auto-opens.
What Nox remembers (per-user)
- Loads durable memories via
getNoxMemories()and lists them with a type tag. - Forget removes one via
deleteNoxMemory(id); failures are non-blocking (chat memory still works).
Configuration & options
PUT /company/<id>/nox-settings payload (company cards):
| Card | Payload key(s) |
|---|---|
| Daily Brief | daily_brief_enabled; brief_send_hour (0–20); brief_sections.{stats,captured_leads,hot_leads,identified_visitors,ask_nox,funnel_*} |
| Follow-ups (GHL only) | channel_preference, autonomous_send, ghl_contact_update_policy |
| Visitor alerts | visitor_watch.{min_confidence, auto_engage_cooldown_hours, quiet_push_outside_business_hours} |
The Follow-up keys are only included in the payload when GHL is connected.
Behaviors & edge cases
- Nox disabled: the entire form is replaced by an "isn't enabled yet" card — nothing is editable.
- Non-org-admins: see only the per-user cards (auto-play, memories); the company
Formand Save button are hidden. - No GHL: the Follow-ups card (channel, autonomous send, GHL policy) is hidden entirely; those settings aren't editable until GoHighLevel is connected.
- Cooldown bounds:
auto_engage_cooldown_hoursis validated 0–168 (a week). - Autonomous send is off by default and deliberately conservative (draft-and-approve) — the AI call-back path is independent of it.
- Unsaved-changes guard: leaving with a dirty company form prompts to save (
onBeforeRouteLeave+swal). - Auto-play is device-local — clearing browser storage resets it; it never affects the email brief.
Plan & limits
Requires Nox enabled for the account (company.knox.enabled) — a per-account capability rather than a generic plan flag. Company-level cards additionally require the settings.organization permission. Follow-ups depend on a connected GoHighLevel integration. The Daily Brief and follow-ups consume AI credits per the assistant's general behavior. Tier specifics (which plans include Nox / GHL action layer) are verify with product/pricing.
Technical implementation
- View:
frontend/src/views/settings/nox/Index.vue(vee-validate + zod) - Route: name
settings-nox, path/settings/nox, no route-level permission (per-user cards open to all; company cards gated in-page viausePermissions().canAccess('settings.organization')) —frontend/src/router/index.js - Save endpoint:
PUT /company/<id>/nox-settings(dot-path$set, preserves the rest ofknox) - Per-user store:
frontend/src/store/noxSettings.js(autoPlayBrief, localStorage) - Memory API:
@/repositories/Knox/memory(getNoxMemories,deleteNoxMemory) - Company model:
backend/app/models/CompanyModel.js→knox.daily_brief,knox.actions,knox.visitor_watch,knox.ghl_contact_update_policy(notevisitor_watch.min_confidencemodel default isstrong) - Brief generation/scheduling and visitor directives are produced by the Nox subsystem (see below). The send fires at
knox.daily_brief.send_hourwith a once-per-day guard (knox.daily_brief.last_sent_local_day);backend/app/jobs/DailyBriefEmailJob.js. - Watches list:
@/repositories/Knox/watches→GET/DELETE /knox/visitor-watches(backendNoxActionUserController). - Funnel stage criteria/feeding/mapping live on a separate page — Settings → Nox Funnel (
/settings/nox-funnel,views/settings/nox-funnel/Index.vue); see Nox Funnel.
Related
- What is Nox · Nox Daily Brief · Nox Capabilities · Nox Voice · Nox Tools
- subsystems/nox-assistant — the engine that composes briefs, follow-ups, and visitor alerts.
- Integrations — GoHighLevel — required for the Follow-ups card and the contact-update policy.
- subsystems/identity-graph — the confidence levels (
verified/strong) behind visitor alerts.