Telemetry
Nogic collects completely anonymous telemetry data about general usage. This helps us understand how the extension is used and prioritize improvements. No code, file contents, prompts, or AI responses are ever collected.
We value your privacy. Nogic is built by developers, for developers. Telemetry is fully optional and can be disabled at any time. Properties are coarse enums (e.g. kind: "dataflow"), measurements are numeric (durations, counts) — never raw content.
This page covers data collected strictly for telemetry and analytics purposes. For a complete overview of all data we collect (including account information and third-party integrations), please see our Privacy Policy.
Why is telemetry collected?
Telemetry helps us understand which features are used, identify performance issues, and prioritize development. Without this data, we would be building in the dark. We believe in transparency about what we collect and give you full control to opt out.
What is being collected?
Extension telemetry is sent to Microsoft Azure Application Insights (retained for 90 days) via the official VS Code extension telemetry API. Each event has a stable name plus coarse-grain enum properties and numeric measurements. Below is the complete event registry shipped in 0.2.0.
Lifecycle
extension.activated— extension versionreturn.user— days since last use (number only)session.duration— how long the visualizer was openfirstUse.feature— first time a given feature was used (feature name only)error.occurred— bucketed error category, no stack traces
Commands
command.openVisualizercommand.addToBoardcommand.createBoardcommand.openDiffBoardcommand.showMcpSetup
Performance
parse.completed— language used (e.g. “ts,py”)layout.completed— layout durationworkspace.size— bucket only (small / medium / large), never file names or counts
Boards & views
board.created/board.deleted/board.renamed— counts only, no board namesboard.nodeCount— numeric distributionview.switched— view name (unified / walkthrough / etc.)node.expanded— node kind (file / folder / class / function), never node identitydiffBoard.reconciled— kind (create / update / noop), nodeCount, durationMsdiffAnalyze.opened/groupSwitched/refresh
Cmd+K (AI agent flow)
cmdK.invoked— promptLength (number), cli (claude/codex), model id, isFollowup. The prompt itself is never sent — only its character count.cmdK.turnCompleted— reason (complete/error/cancelled), rendered (yes/no), kind, cliKind (claude-code/codex), model. Measurements: durationMs, toolCallCount, costUsd, inputTokens, outputTokens, cacheCreationTokens, cacheReadTokens.cmdK.followupInvoked— overlayKind, onStep (yes/no)
About costUsd: this is an API-equivalent cost derived from the CLI's reported token usage and a static price table for the model used. For users on flat-rate AI subscriptions (Claude Pro/Max, Codex Plus/Pro), this is hypothetical — not your actual bill. For pay-as-you-go API users, it reflects real spend. We use it internally to gauge feature efficiency, never to identify users.
CLI integration
cli.detected— which CLIs are available (claude, codex)cli.toggled— adapterId, enabled (yes/no)cli.turnError— bucketed error type (timeout / aborted / missing_cli / disabled_cli / spawn / mcp_server / unknown). Raw error messages are never sent.
MCP server
mcp.toolCalled— tool name (e.g. “render_dataflow”), ok (yes/no). Tool arguments are NOT sent — they would contain file paths and code.mcp.patchRejected— kind (tree / dataflow / sequence / state-machine)
Walkthrough playback
walkthrough.started— kind, stepCountwalkthrough.stepAdvanced— direction, step, totalwalkthrough.completed/walkthrough.restored
Canvas authoring (Diff Analyze)
canvas.authored— Properties: kind (tree/dataflow/sequence/state-machine), rendered (yes/no), refresh (yes/no), cliKind (claude-code/codex), model. Measurements: durationMs, nodeCount, concurrency (parallel-dispatcher saturation), readsBeforeRender, totalReads, hunksDroppedInvalid, costUsd, inputTokens, outputTokens, cacheCreationTokens, cacheReadTokens.
The diff-analyze flow uses the "explore-yourself" pattern — the AI uses its own Read / Grep tools to investigate the diff. readsBeforeRender and totalReads count those tool calls (numeric only — never the file paths or contents read). hunksDroppedInvalid counts how many of the AI's line-anchors failed validation (out-of-bounds, wrong file) — used as a quality regression signal.
Authentication
auth.signInStarted/auth.signOut— no propertiesauth.signInCompleted— connection (google-oauth / github / magic-link / sso). The provider category only — never your account name or email.auth.error— bucketed errorType (state_mismatch / token_exchange / no_code / invalid_code / rate_limited / unknown). The user's email is never included.
Example event
Here is exactly what gets sent for a Cmd+K invocation:
{
"eventName": "cmdK.invoked",
"properties": {
"detail": "auto",
"cli": "claude",
"model": "claude-haiku-4-5",
"isFollowup": false
},
"measurements": {
"promptLength": 42
}
}Note: promptLength: 42 is just the number of characters you typed — the actual prompt content stays on your machine. You can verify this yourself in the open-source event registry.
What about sensitive data?
We do not collect:
- Source code or file contents
- Your prompts to the AI or the AI's responses
- File names, paths, or directory structure
- Repository names, branch names, or commit messages
- Email addresses, usernames, or any personally identifiable information
- MCP tool arguments (tool names yes; their arguments — which contain file paths and code — no)
- Raw error messages or stack traces (errors are bucketed into coarse categories)
All extension telemetry runs through sanitizeProperties() before being sent, which strips any stray dynamic values that don't match a fixed enum. The classifier for CLI errors buckets messages into seven categories — never the original string. File paths are also stripped from any string property whose key contains "path" (e.g. /Users/<you>/proj/... never reaches the wire).
Cost-telemetry (costUsd on Cmd+K and Diff Analyze events) is computed from token counts the CLI itself reports — it is your API-equivalent cost, not your actual bill. If you're on a flat-rate AI plan (Claude Pro / Max, Codex Plus / Pro), this number is what those tokens would have cost on pay-as-you-go pricing — useful internally to understand feature efficiency, never tied back to your subscription or identity.
How do I opt out?
You can disable telemetry in two ways:
1. VS Code global setting
Nogic respects the global VS Code (or fork) telemetry setting:
"telemetry.telemetryLevel": "off"2. Nogic-specific setting
Or disable telemetry only for Nogic, leaving editor-wide telemetry untouched:
"nogic.telemetry.enabled": falseExtension telemetry is stored in Azure Application Insights and retained for 90 days.
Questions about telemetry? support@nogic.dev