Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
1a3e015
Spec: CLI telemetry and the signup-funnel measurement gap
alexeyzimarev Aug 8, 2026
6ba475f
Close the Tenant__Name open item: SaaS-only org group
alexeyzimarev Aug 8, 2026
c073173
Plan: CLI telemetry and signup-funnel instrumentation
alexeyzimarev Aug 8, 2026
1e2fc05
Plan: assert inertness rather than a tautology in the pre-init test
alexeyzimarev Aug 8, 2026
90e18ca
Add telemetry opt-out precedence resolution
alexeyzimarev Aug 8, 2026
0a26215
Add telemetry device state (telemetry.json)
alexeyzimarev Aug 8, 2026
c1e5cb0
Fix: Add cross-process lock to TelemetryState and adjust test paralle…
alexeyzimarev Aug 8, 2026
5f2e46f
Fix round 2: Make read-modify-write operations fully atomic inside lock
alexeyzimarev Aug 8, 2026
3c5d5a3
Fix round 3: Skip writes when mutations are no-ops
alexeyzimarev Aug 8, 2026
f7bae15
Add command event construction with allowlisted subcommands and shape…
alexeyzimarev Aug 8, 2026
4831017
Tighten the telemetry flag shape bound to 30 chars
alexeyzimarev Aug 8, 2026
94640d5
Fix GUID-shaped flag leak by tightening regex bound from 40 to 30 cha…
alexeyzimarev Aug 8, 2026
d306940
Correct the flag-bound arithmetic: window is [31, 38), bound is 37
alexeyzimarev Aug 8, 2026
9cf1d67
Correct flag regex bound: 37 chars with 6-char headroom, floor at 31,…
alexeyzimarev Aug 8, 2026
3e05242
Add PostHog batch payload with SaaS-only org group derivation
alexeyzimarev Aug 8, 2026
0552bac
Add mutation guard tests for PostHog event serialization
alexeyzimarev Aug 8, 2026
91679e6
Remove tautological nested-mutation test
alexeyzimarev Aug 8, 2026
5103046
Add bounded drop-oldest telemetry spool
alexeyzimarev Aug 8, 2026
635b076
Fix critical exception handling in TelemetrySpool.Deserialize
alexeyzimarev Aug 8, 2026
53e4483
Add telemetry client with budgeted flush and spill-on-failure
alexeyzimarev Aug 8, 2026
113142c
Add telemetry client with budgeted flush and spill-on-failure
alexeyzimarev Aug 8, 2026
dff9033
Harden telemetry spool and client exception handling for NativeAOT sa…
alexeyzimarev Aug 8, 2026
d272c4a
Correct test naming and add defence-in-depth documentation for spool …
alexeyzimarev Aug 8, 2026
c3dca86
Add CliTelemetry facade with first-run notice
alexeyzimarev Aug 8, 2026
bc3524d
Plan: JsonArray.Add<T> binds for any narrower static type, not just c…
alexeyzimarev Aug 8, 2026
66c3a84
Close JsonArray.Add<T> AOT warnings; make denylist test load-bearing
alexeyzimarev Aug 8, 2026
039a749
Wire cli_command telemetry into the CLI entry point
alexeyzimarev Aug 8, 2026
c2e16e8
Instrument the setup signup funnel
alexeyzimarev Aug 8, 2026
dfda2a5
Plan: anchor WorkOS signin events inside WorkOSDiscovery, not on its …
alexeyzimarev Aug 8, 2026
e0137a2
Fix setup funnel review findings: signin anchor, redirect event, eage…
alexeyzimarev Aug 8, 2026
acbdc62
Plan: nine MCP servers handle tools/call, not eight
alexeyzimarev Aug 8, 2026
0b2f05f
Record MCP tool calls
alexeyzimarev Aug 8, 2026
78133ca
Plan: suppress the first-run notice for mcp-server, and flush review-…
alexeyzimarev Aug 8, 2026
d53106f
Fix MCP telemetry review findings: dead flush, swallowed first-run no…
alexeyzimarev Aug 8, 2026
99f6059
Add machine-scoped telemetry config key
alexeyzimarev Aug 8, 2026
3b464c1
Add composition test for kcap config set telemetry
alexeyzimarev Aug 8, 2026
5b38765
Stop the composition test racing telemetry classes on PathOverride
alexeyzimarev Aug 8, 2026
3c964a2
Document CLI telemetry and its opt-outs
alexeyzimarev Aug 8, 2026
875c3f4
Plan: exclude McpReviewContextServer from telemetry
alexeyzimarev Aug 8, 2026
18800b3
Remove telemetry from the review-context sidecar
alexeyzimarev Aug 8, 2026
ad6c384
Fix privacy overclaim: flag names are collected, argument values neve…
alexeyzimarev Aug 8, 2026
5814309
Spec: state positively what identifies an installation
alexeyzimarev Aug 8, 2026
d58bee7
Fix telemetry privacy/redaction gaps from final branch review
alexeyzimarev Aug 8, 2026
a1acd30
Plan: record that $ip alone does not suppress geo-IP
alexeyzimarev Aug 8, 2026
3f16cb9
Fix six PR #501 bot-review findings in the telemetry signup funnel
alexeyzimarev Aug 9, 2026
804f777
Narrow a test comment to what it actually proves
alexeyzimarev Aug 9, 2026
a0917bf
Merge branch 'main' of https://github.com/kurrent-io/kcap-cli into cl…
alexeyzimarev Aug 10, 2026
644fa2f
Fix order-dependent telemetry test failures by resetting CliTelemetry…
alexeyzimarev Aug 10, 2026
e6461d6
Make the telemetry-enable guard diagnostic rather than presumptive
alexeyzimarev Aug 10, 2026
9661189
Share one diagnostic telemetry-enable guard across the test classes
alexeyzimarev Aug 10, 2026
16e19cc
Split telemetry device id into its own lock-free file
alexeyzimarev Aug 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 29 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
- MCP servers: [sessions](#sessions-mcp-server-for-agents) · [flows](#flows-mcp-server-for-agents) · [flow-result](#flow-result-mcp-server-hosted-reviewers) · [memory](#memory-mcp-server-for-agents)
- Importing: [import](#loading-historical-sessions) · [remap](#renamed-repo-directories-kcap-remap)
- Agents & daemon: [daemon](#daemon) · [agent](#local-agents-kcap-agent) · [repos](#repository-paths)
- Account: [projects](#projects) · [profiles](#profiles) · [config](#configuration) · [uninstall](#uninstalling) · [other](#other-commands)
- Account: [projects](#projects) · [profiles](#profiles) · [config](#configuration) · [telemetry](#telemetry) · [uninstall](#uninstalling) · [other](#other-commands)
- [License](#license)

## Why Capacitor
Expand Down Expand Up @@ -178,6 +178,8 @@ If your repo directories have been renamed or deleted on disk, the import prints

Open the server URL in your browser. The dashboard shows repositories, sessions, and agents. It updates in real time as Claude Code sessions are active.

kcap also reports anonymous CLI usage data by default — see [Telemetry](#telemetry) for what's collected and how to opt out.

### Sessions and Flows MCP servers for agents

The `kcap mcp sessions` stdio server lets coding agents search and recall past Capacitor sessions without leaving the chat. `kcap setup` **registers it (with `kcap-review`) for Claude Code, Codex CLI, Cursor, GitHub Copilot CLI, Gemini CLI, SST OpenCode, Google Antigravity, and AWS Kiro CLI** — no manual `claude mcp add` or TOML/JSON edit. For Claude Code it's carried by the plugin's `.mcp.json`; for Codex CLI, `kcap setup` / `kcap plugin install --codex` write it into `~/.codex/config.toml`; for Cursor, `kcap setup` / `kcap plugin install --cursor` write it into `~/.cursor/mcp.json` (opt out with `--skip-cursor-mcp`); for Copilot, `kcap setup` / `kcap plugin install --copilot` write it into `~/.copilot/mcp-config.json` (opt out with `--skip-copilot-mcp`); for Gemini, `kcap setup` / `kcap plugin install --gemini` write it into the shared `~/.gemini/settings.json` (opt out with `--skip-gemini-mcp`); for OpenCode, into `~/.config/opencode/opencode.json` (opt out with `--skip-opencode-mcp`); for Antigravity, `kcap setup` / `kcap plugin install --antigravity` write it into `~/.gemini/config/mcp_config.json` (opt out with `--skip-antigravity-mcp`); for Kiro, `kcap setup` / `kcap plugin install --kiro` write it into `~/.kiro/settings/mcp.json` (opt out with `--skip-kiro-mcp`). The server is repo-aware: `cd` into a project before spawning your agent and `search_sessions` defaults to that repo's sessions.
Expand Down Expand Up @@ -1766,6 +1768,32 @@ Semantics:

After adding a remap, re-run `kcap import --org` (or whichever scope you use). The missing-cwd report at the top of the import will show what's still unresolved. Ephemeral worktree paths under `<project>/.<anything>/worktrees/<slug>` are auto-attributed to `<project>` when it still exists on disk, so deleted-worktree cwds don't need a remap entry.

### Telemetry

kcap reports anonymous usage data so we can see which commands people use and where setup goes wrong. It records **command and flag names, exit codes, durations, MCP tool names, and setup-funnel steps.** It never records argument values, file paths, repo names or URLs, session ids, transcript content, environment variable values, usernames, or email addresses.

What identifies an installation, stated plainly: a random device id generated once and stored on this machine, so events can be tied to one install over time without naming a person. For a hosted `*.kcap.ai` workspace, every event additionally carries that workspace's slug — as an `org` property and an `organization` group — so usage rolls up per workspace; self-hosted installs never send it, and the slug names a workspace, not a user.

The first time you run a reportable command, kcap prints a one-time notice to stderr; it never prints again on that machine.

Turn it off in any of three ways:

```bash
kcap config set telemetry off # persisted, machine-wide
export KCAP_TELEMETRY=0 # this shell only
export DO_NOT_TRACK=1 # the cross-tool convention, honoured by kcap too
```

`telemetry` is deliberately machine-wide rather than per-profile: consent is a property of the machine, and having it flip when you switch profiles would be surprising.

Precedence, highest first: `KCAP_TELEMETRY` > `DO_NOT_TRACK` > the persisted `telemetry` setting > on by default. `KCAP_TELEMETRY` wins over `DO_NOT_TRACK` **in both directions** — it's the kcap-specific, deliberate statement, and the only way to opt back in on a machine whose shell profile sets a blanket `DO_NOT_TRACK`:

```bash
DO_NOT_TRACK=1 KCAP_TELEMETRY=1 kcap status # reports anyway — the explicit setting wins
```

`kcap config show` reports the effective state and which setting decided it, e.g. `Telemetry: off (source: DO_NOT_TRACK)`.

### Uninstalling

To remove kcap from this machine, run:
Expand Down
Loading
Loading