Helpike

What Helpike collects

This page is the contract. It describes everything Helpike sends about your usage, under what circumstance, and how to turn it off. If anything here differs from what the software does, that is a bug — and the field list is frozen by a test in the source. The agreement itself is section 5 of the terms of use; this page is the field-by-field detail behind it.

Search stays 100% offline. The local MCP server your assistant talks to (helpike-mcp) makes no network request for telemetry — not one. Nothing on this page changes that.

The two layers

Layer 0 — the CDN log (always on, like any download)

The app makes HTTPS requests to this site: when you download the installer, the catalog, a DocPack or the model — and also once an hour, on its own, to ask whether a new version exists (/download/latest.json, with the version, OS and architecture in the query string). An open app also reloads the catalog every 30 minutes.

Like every server on the internet, the CDN records a line for each of those requests: date, path requested, status, bytes, IP and User-Agent. That is true of any file you download from anywhere, and it existed before any decision of ours. What the project does with those lines:

The app's User-Agent is Helpike/2.3.0 (macos; aarch64) and the sidecar's is helpike-mcp/0.1.0 (macos; aarch64). Product name, version, system and architecture — nothing else.

Layer 1 — the beacon (declared in the terms of use)

Once you accept the terms of use — the screen the app shows at first launch, whose section 5 declares this — the app makes one GET per day, carrying the previous day's counters. Before that acceptance, nothing is sent at all.

The acceptance is not retroactive. Accepting marks yesterday as already reported: whatever was recorded before the terms were read is never sent. Exporting DO_NOT_TRACK stops the sending immediately, including in the middle of a send already under way.

There is no server receiving this: the target is a 3-byte file on the same CDN, and the line the CDN writes in its access log is the collection.

The literal payload

The app shows this URL on its own screen. It is built by the same function that does the sending:

GET https://helpike.com/beacon.txt
    ?v=1
    &i=0123456789abcdef0123456789abcdef
    &d=2026-08-23
    &a=2.3.0&o=macos&r=aarch64
    &fd=41&pk=7&pb=3120&ao=3&am=214&sc=5&em=95
    &q=88&q0=4&t=12&p50=31&p95=84&md=1
    &cl=claude-code:4,cursor:1
    &tp=rails,turbo,rubyllm
FieldMeaning
vpayload version
iinstall id: 16 random bytes, generated on this machine
dthe (closed) day the numbers refer to, UTC
a · o · rapp version · operating system · architecture
fddays since first run
pk · pbpacks installed · MB on disk
md1 if the embedding model is installed
ao · amtimes the app was opened · minutes with the window open
scMCP assistant sessions
emengaged minutes: 5-minute windows with at least one MCP event
q · q0 · tsearches · searches with zero results · other tool calls
p50 · p95search latency, in ms
classistants that connected, with how many sessions each
tpup to 8 packs that answered the searches

What is NEVER sent

There is no account, login, session or cookie anywhere in the product.

tp is the one apparent exception, and it is not one: a pack slug (rails) is public catalog data, and it is the only way to answer "which packs do people actually consult after downloading". Only names that exist in the published catalog are sent — a pack you built yourself and copied into ~/.helpike/packs is filtered out before sending, because its name is a directory and a file on your disk. With no catalog reachable, tp goes out empty.

How to turn it off

In the environment: export DO_NOT_TRACK=1 or HELPIKE_NO_TELEMETRY=1. It is re-read before every send, so it takes effect without restarting the app. DO_NOT_TRACK is the cross-tool convention; the Helpike variable exists so you can silence this app alone.

There is no switch in the app. Layer 1 is declared in section 5 of the terms of use and starts with your use of the product; what the app offers on screen is the transparency — the usage-data panel on the Home screen shows the literal URL that would be sent, and this installation's id.

To change identifier, delete ~/.helpike/install.json: a new one is generated on the next run and nothing links it to the old one. To have rows already sent deleted, send the i the app shows on that same screen to support@helpike.com — every row matching that id is removed. The same address takes security reports.

What stays on your machine, and where

FileWhat it is
~/.helpike/activity.jsonleverything the assistants did, including the text of the searches. Written since day one, never sent. "Clear history" on the Home screen erases it.
~/.helpike/appuse.jsonlone line every 5 minutes while the app is open
~/.helpike/usage/<day>.jsonthe daily rollup — exactly the numbers in the table above
~/.helpike/install.jsonthe install id, the terms revision you accepted and the day you accepted it

All of them are plain text, readable with cat. Deleting any of them is safe.

Why it exists

The project is free, has no revenue and is maintained by one person. The questions telemetry answers are the ones that decide what to work on: which packs are worth maintaining, how many people actually use it, and — the most expensive of them — when download traffic will pass the CDN's free tier and start costing hundreds of dollars a month.

The honest alternative to measuring is guessing. The dishonest one is measuring without saying so.