Skip to main content

What is Nox

Audience: Sales · Management · Support · QA · Engineering · Where in app: Dashboard → Nox chat panel (also Voice, and the morning Daily Brief) · Plan availability: Typically Pro+ (gated per-tenant by knox.enabled; Voice is a further entitlement — verify against the live plan matrix)

Nox is the AI assistant the customer's own team talks to inside the Knock Knock dashboard. Where the widget's AI talks to visitors, Nox talks to the admin. You ask it questions in plain English — "What did John do on the site this week?", "How many of yesterday's leads came from Google Ads?", "Walk me through what someone did before they booked." — and it reads across visitors, sessions, chats, calls, bookings, lead scores, and the connected CRM to answer, citing its sources.

Naming. Customer-facing it is Nox. The codebase calls it Knox (every table, tool, and service is prefixed knox_/Knox). They are the same agent — when you see "Knox" in logs or code, read "Nox".

Engineering deep-dive: this page is the functional/reference version. For the request-flow internals, sub-agent wiring, and memory architecture see Nox / Knox Admin Assistant and ms-ai.

What it does

Nox is read-side first. Its main job is to read across the platform and explain — it does not run the business for you, it tells you what's happening so you can decide. With the right entitlements it can also take a small set of pre-approved actions (place or schedule an outbound call, draft a follow-up, enrich a CRM contact, set a return-visit watch; on Nox funnel tenants: tag a contact, move a GHL pipeline card, trigger a workflow, book a meeting, mark a lead Won), but every customer-facing message goes through a review step unless the account has explicitly opted into autonomous send.

Besides the chat panel there is Nox Live, a full-screen surface (orb + a canvas pane that renders tool results as cards — frontend/src/components/knox/NoxLive.vue). The morning brief no longer auto-opens: a brief-ready badge appears, and the per-user auto-play preference controls spoken playback.

Typical questions Nox answers well today:

  • "Did John visit my site again after our meeting?"
  • "Walk me through everything John did last night."
  • "What questions did Sarah ask in her last conversation?"
  • "Of yesterday's 3 bookings, what was each person's journey?"
  • "How many of yesterday's leads came from Google Ads vs organic?"
  • "Where do I change my working hours?" (and it can offer to navigate you there)
  • "What can you actually do?" / "How do you know all this?"

For the full done/partial/future breakdown, see Capabilities.

How it works

Every question runs through the same pipeline:

  1. Hydrate prior turns. The conversation's earlier turns are pulled from the database (the source of truth), so Nox has the thread's context.
  2. Intent classification. The question is forced into exactly one intent: navigate, how_to, explain, analytics, compare, troubleshoot, action, draft_followup, greeting, or unknown. The classifier also returns a confidence score and, if the question is ambiguous, one clarifying question instead of guessing.
  3. Routing to a specialist sub-agent based on intent (see table below). Low-confidence or unmapped intents fall through to the generalist, which carries the full toolset.
  4. Tool selection. The specialist invokes one or more of 42 tools (see Tools) — visitor/session lookups, analytics, knowledge search, CRM queries, funnel reads/actions, etc.
  5. Synthesis. The LLM composes a natural-language answer, citing knowledge-base chunks where relevant with markers like [S1], [S2].
  6. Action card (optional). If the answer suggests navigating somewhere or sending something, it renders as a clickable card the admin confirms.

Intent → sub-agent routing

IntentSub-agentHandles
navigateNavigation"take me to / open / show me the X page"
how_to, explain, compare, troubleshootKnowledgeproduct docs, how-tos, concept questions (RAG-grounded)
analyticsAnalyticsvisitor / session / metric / cohort questions
actionActionside effects: place call, enrich contact, propose navigation
draft_followupOutreachcompose a customer-facing email/SMS as a reviewable draft
greeting, unknown, low-confidenceGeneralistsmalltalk + catch-all with the superset toolset

The confidence threshold is 0.65: anything below it routes to the generalist rather than risk committing to a wrong specialist whose tool allowlist might not include what the question needs.

Configuration & options

Most Nox behavior is controlled by the companies.knox.* config block (see Company Configuration):

  • knox.enabled — master on/off for the tenant (super-admin gate).
  • knox.target_market — context the assistant uses when framing answers.
  • knox.tracked_pages[], watchlist_companies[], high_value_pages[] — what the tenant cares about.
  • knox.alert_thresholds.* — thresholds that flag anomalies in the Daily Brief.
  • knox.daily_brief.* — the morning brief: enabled, send_hour (default 9; funnel tenants 5), sections.* (see Daily Brief). knox.digest_schedule still exists but is legacy.
  • knox.baseline_metrics — nightly rollup of "what's normal" for this tenant.

Per-tenant LLM/model config lives in knox_ai_models; custom behaviors in knox_tenant_config.

Behaviors & edge cases

  • Tenant isolation is strict. Every tool scopes its query to the caller's company_id. Nox never sees another tenant's data.
  • Honesty about limits is part of the brand. If a question needs infra that isn't built (e.g. predictions, a B2B account entity, a CRM-stage join), Nox explains why and what it would need, rather than fabricating. See Capabilities.
  • No long-term admin memory by default — each conversation historically started fresh, though durable per-admin facts can now be stored (knox_remember/knox_recall, pgvector knox_admin_memory) and are pulled into context each turn. It still does not auto-correct yesterday's answers.
  • Presence is a snapshot. "Who's on the site right now?" reflects the moment of the query; it may change by the time you read the reply.
  • Citations can have false positives. A cited claim should be verified before acting on it (see Citations & Feedback).

Plan & limits

  • Nox is typically Pro+, gated per-tenant by knox.enabled (or absence of the entitlement). Voice Nox is a further entitlement. Verify exact tier mapping against the live plan matrix.
  • Every question consumes AI credits / tokens; usage is budget-tracked in knox_usage_events (tool name, input, output size, duration, tokens, cost USD).
  • Action tools (place call, send follow-up) are individually entitlement-gated on top of the base Nox entitlement.
  • Nox does not make per-visitor predictions, does not take autonomous write actions without approval (except where an account opts into autonomous send), and does not see data from before the company joined.

Technical implementation

  • Lives in ms-ai at src/knox-agent/. Orchestrated by knox-agent.service.ts; entry point POST /knox-agent/ask (streaming SSE).
  • Intent classifier: intent/knox-intent-classifier.service.ts (uses generateObject + a strict Zod schema — intent/knox-intent.types.ts).
  • Sub-agents: agents/knox-{navigation,analytics,knowledge,action,outreach,generalist}.agent.ts; routing in agents/knox-agent-router.ts.
  • Tools registered in tools/knox-tool-registry.ts; each tool is OTel-traced as knox.tool.<name> (visible in Grafana) and logged to knox_usage_events.
  • Conversations persisted to knox_agent_conversations (Postgres, ms-ai). Knowledge chunks in knox_knowledge_chunks (pgvector). See Data Stores.
  • Voice is a separate module, src/knox-voice/, bridging the same tools into ElevenLabs Conversational AI.