Skip to content

Telemetry

NimbleBrain collects anonymous usage telemetry to improve the platform. Telemetry is on by default and can be disabled at any time. No personal data, conversation content, or file paths are ever sent.

Telemetry events fall into four categories:

Event Properties
cli.startup Mode (serve), connector count, startup time in ms
Event Properties
agent.chat_started Whether a skill matched, tool count, whether this is a resumed conversation
agent.chat_completed Iteration count, tool call count, stop reason (complete, max_iterations, max_input_tokens, cancelled), LLM latency, tool latency, total time, input/output token counts
agent.error Error type name only (e.g., AnthropicError), structured error code if available
Event Properties
connector.installed Whether the connector has UI
connector.uninstalled Source type
Event Properties
web.page_view Automatic (PostHog JS), IP capture disabled
web.chat_sent Whether this is a resumed conversation, whether an app context is set
web.app_opened Whether the app has a primary view
  • Conversation content, messages, or prompts
  • File paths, working directories, or hostnames
  • Usernames, IP addresses, or email addresses
  • Connector names, skill names, or tool names
  • Tool arguments or results
  • Error messages or stack traces (only error type)
  • Model names (could reveal organization info)
  • Cost data (reveals pricing tier)

On first run, NimbleBrain generates a random UUIDv4 and stores it at ~/.nimblebrain/.telemetry-id. This is the only identifier sent with events. It has no connection to any user identity.

The ID is scoped to the work directory. Running bun run dev (workDir = .nimblebrain) creates a different ID than bun run start (workDir = ~/.nimblebrain).

The web client uses a separate browser-scoped anonymous ID (generated by PostHog JS using in-memory persistence). Server and web events are correlated by a shared installId property.

Any one of these methods disables telemetry completely:

Add to nimblebrain.json:

{
"telemetry": {
"enabled": false
}
}

Telemetry is on by default. Remove the NB_TELEMETRY_DISABLED / DO_NOT_TRACK env vars and set telemetry.enabled: true (or drop the telemetry block) in nimblebrain.json.

To unlink future events from past events, delete ~/.nimblebrain/.telemetry-id. A new random ID is generated on the next run.

On first run, when the .telemetry-id file is created, NimbleBrain prints this notice to stderr:

NimbleBrain collects anonymous usage telemetry to improve the platform.
No personal data, conversation content, or file paths are ever sent.
Set NB_TELEMETRY_DISABLED=1 (or DO_NOT_TRACK=1) to disable. Learn more: https://nimblebrain.ai/telemetry

This notice appears exactly once per work directory.

  • Server-side SDK: posthog-node (batched, async, no native bindings)
  • Web client SDK: posthog-js with ip: false, autocapture: false, disable_session_recording: true, persistence: "memory"
  • Destination: PostHog Cloud (https://us.i.posthog.com)
  • Check order: Environment variables checked first, then config file
  • Offline behavior: Events silently dropped (no disk queue, no exceptions)