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:

EventProperties
cli.startupMode (serve), bundle count, startup time in ms
EventProperties
agent.chat_startedWhether a skill matched, tool count, whether this is a resumed conversation
agent.chat_completedIteration count, tool call count, stop reason (complete, max_iterations, token_budget), LLM latency, tool latency, total time, input/output token counts
agent.errorError type name only (e.g., AnthropicError), structured error code if available
EventProperties
bundle.installedSource type (mpak, local, remote), whether it has UI, trust score
bundle.uninstalledSource type
EventProperties
web.page_viewAutomatic (PostHog JS), IP capture disabled
web.chat_sentWhether this is a resumed conversation, whether an app context is set
web.app_openedWhether the app has a primary view
  • Conversation content, messages, or prompts
  • File paths, working directories, or hostnames
  • Usernames, IP addresses, or email addresses
  • Bundle 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)