Eazler AI Lab AI Engineering Journal
Skip to article
Security◷ 23 min read

ZCode uploaded the entire Git history — what AI coding tools send to the cloud

ZCode packed a 345MB workspace into a 313MB encrypted snapshot for upload, and 86.6% of it was .git. What five other AI coding tools document.

On this page

On September 18, 2026, a developer published an investigation that took apart ZCode, Z.ai's AI coding desktop app. The investigation began with a 313MB encrypted file found during a disk cleanup and concluded that, whenever a user is logged in, the app bundles the entire workspace, .git history included, and uploads it to Alibaba Cloud. The two switches in the settings did not stop the upload, and the decryption key existed only on the server. Z.ai apologized the same day, saying the repository wiki feature was the cause and had already been fixed. This report puts the investigation, two independent audits and the vendor's statement side by side to separate what has been confirmed from what is still a claim. It then applies the same criteria to five other AI coding tools and records what their official documentation says they send.

Korean original: 한국어 원문 (2026-09-19)Scope: the investigation into ZCode's workspace uploads, the vendor statement and independent audits; official data documentation for six coding toolsSources checked: 2026-09-19 · no measurements of our own

1. Executive summary

313MB
Size of one encrypted snapshot that bundled a 345MB workspace (42,411 files)
From the investigator's single installation [1]
86.6%
Share of the snapshot taken up by the .git directory
LFS cache 56.8% + objects 29.6% + logs 0.2% [1]
0
Settings switches that actually stop the upload
The two switches control only training consent and server-side indexing [1][4][5]
The key conclusion: The problem is not that "AI tools send code to a server." To use a model, you have to send context anyway. The problem is scope and control. ZCode bundled the repository's entire history, which has nothing to do with the task at hand: the .git directory, with its deleted secrets, unpushed branches and internal host names. It locked that bundle with a key the user cannot use, offered no setting to turn it off, and left it out of the privacy policy. Of these four points, the vendor statement explained only the first, attributing it to the repository wiki feature, and did not answer the other three. Read the other tools' documentation by the same standard and the difference is not "whether they send" but "whether the documentation says what is sent, when, and whether you can turn it off."

First, some definitions. Z.ai is the international brand of Zhipu (智谱), an AI company based in Beijing, China, and it makes the GLM model series. ZCode is a free desktop coding agent app the company announced in June 2026; it runs on macOS, Windows and Linux [8]. In this report, a snapshot is a single compressed file into which the app bundles the entire workspace (the project folder). Envelope encryption locks a file with a one-time symmetric key, locks that symmetric key again with a public key, and sends both together. Only the holder of the matching private key can unlock it.

The figures in this report are exactly as stated in the investigation [1] and the GitHub audit repositories [4][5]. The vendor statement is taken from the full text as carried by Chinese media [2][3]. We did no measurements of our own.

2. What happened — from the June launch to September 18

WhenWhat happenedSource
2026-06-12Z.ai announces ZCode as an "Agentic Development Environment." The app is free; subscriptions start at $16.20 a month. It also supports self-hosted models and bring-your-own-key (BYOK) setupsVentureBeat [8]
2026-06-15The ZCode privacy policy takes effect. It collects "the text, files […], and code submitted to us through conversation," where files include shell commands, and the "Optimization Program" used for training is off by default. The policy does not mention snapshots, checkpoints, a wiki or workspace uploads. Data is generally processed in SingaporePolicy text [7]
2026-07-05 to 09-18The period over which snapshot captures were recorded on the Windows auditor's machine: 26 workspaces, 50,617 files, about 1.77GBAudit repository [5]
2026-09-18The investigation "Inside ZCode: Silently Uploading Your Entire Git History to the Cloud" is published. 294 points and 97 comments on Hacker News (checked 2026-09-19)Investigation [1], HN [9]
2026-09-18Z.ai posts an apology in its official user group. Its points: Repo Wiki, part of the codebase indexing feature, triggered the uploads; it was on by default at first; it has already been fixed; the code will be released and reviewed by a third party. Every user gets one extra reset of their weekly usage quotaSina Tech and Tencent News [2][3]
After 2026-09-18Several independent audit repositories and self-check tools appear on GitHub[4][5]

One more piece of context. This is the second time this year that hidden behavior in a coding agent has come to light after the fact. On June 30, an analysis of Claude Code version 2.1.196 found code that carried the user's time zone and proxy host information inside the date sentence of the system prompt, encoded as invisible apostrophe variants [10]. An Anthropic engineer replied that it was "an experiment we launched in March" to prevent unauthorized resale and distillation, and it was removed in the July 1 release (according to secondary reporting [11]). What the two incidents have in common: behavior missing from the documentation came to light only after someone reverse-engineered the binary. We collected incidents that actually happened with coding agents, and the defenses that do not work, in Coding agent security 2026.

3. What the investigation found — the flow, the contents, the switches, the key

The investigator started after noticing that the ~/.zcode folder had grown past 700MB. Inside v2/checkpoints/ were a 313MB .enc file and a state file. The state file recorded the path of a commercial project, a workspace of 345,549,173 bytes, 313,070,842 bytes after encryption, the kind baseline (a full snapshot), and a failure count of 564 [1]. The upload had failed 564 times and the file had stayed in pending/, which is how it was found. The logs did not contain the upload address, so the investigator unpacked the app package (app.asar) and reconstructed the flow.

The upload flow

StepFrom → toWhat
1Client → zcode.z.aiPOST /api/v1/snapshot/upload-credential. Receives a snapshot ID, an RSA public key, a size limit, a signature for uploading to Alibaba Cloud OSS (object storage), and a callback address
2Inside the clientPacks the workspace as tar.gz and encrypts it with AES-256-CTR. The symmetric key is encrypted again with the server-supplied public key, using RSA-OAEP-SHA256
3Client → Alibaba OSSUploads the tar.gz.enc by HTTP form POST directly to storage, without passing through Z.ai's servers
4OSS → zcode.z.aiConfirms receipt by callback. From the sockets, the investigator confirmed that the running process kept HTTPS connections open to zcode.z.ai and to two OSS nodes

What was in the snapshot

The ciphertext cannot be opened, but the file list (manifest) created during bundling was left in plaintext. This is the breakdown of the 42,411 files [1].

.git — 86.6% in total
.git/lfs/
56.8%
.git/objects/
29.6%
.git/logs/
0.2%
Everything else
Source and docs
13.4%
86.6% of what was uploaded was .git. Source code and documents were only 13.4%; the rest was the LFS cache and the entire commit history. The reflog is small at 0.2%, but it holds traces of work that has not been pushed yet. The figures match the table below.
ContentSizeShareWhat it holds
.git/lfs/196.1MB56.8%LFS cache. Every binary and media file downloaded so far
.git/objects/102.2MB29.6%All commits, trees and blobs (file-content objects). Every piece of Git history since the repository was created
.git/logs/0.6MB0.2%The reflog (reference log). Local branch history and traces of work not yet pushed
Source and docsabout 46.2MB13.4%src/, config files, internal documents

The .git directory makes up 86.6% of the total snapshot size. This is different from "sending code" because it includes things that are not in the current working tree: secrets such as API keys and tokens, and settings, that were deleted in later commits; the names of branches that were never made public; and the internal GitLab host names and paths in .git/config. On top of that, an extra list holding hashes of global settings files such as settings.behavior.json was bundled into every snapshot [1]. .gitignore does not help, because the target is not ignored files but .git itself.

What the two switches actually do

Setting nameWhat users expectWhat the code actually does
Optimize Experience
optimizeAgentExperienceEnabled
Turn off telemetry and data collectionControls only whether data may be used for model training. Snapshot capture and upload continue
Repo Snapshot Indexing
repoSnapshotIndexingEnabled
Turn off the snapshot featureControls only whether the server indexes uploaded snapshots. Local bundling and upload continue

According to the investigation, the background capture-and-upload component, which the code calls a sidecar, is created unconditionally when the app starts. No code path checks the user's settings; the only condition was whether a valid login token (JWT) could be obtained [1]. Captures happened right before every prompt was sent (captureBeforePrompt) and when a task labeled repo-wiki-update finished, and up to 62 were recorded in one session.

Where the key lives. This is the point the investigator took most issue with. The public key used for encryption is sent down by the server each time, and the matching private key is not on the client. None of the private keys on the investigator's machine could decrypt the file. If the feature were for user recovery or syncing between devices, the key would have to be with the user, as it is with Git or Time Machine. The investigator concludes that a key only the server can use points to a design meant for the server to read. That judgment is the investigator's interpretation [1].

4. Where the vendor's answer and the findings disagree

Z.ai's apology appeared in its official user group on September 18, and Chinese outlets including Sina Tech and Tencent News carried the full text [2][3]. It makes five points.

  • The problem came from the "codebase indexing" feature. This feature builds an index locally to support restoring session checkpoints, rolling back to earlier versions, and Repo Wiki (repository knowledge pages).
  • A repository data upload can happen when Repo Wiki pages are generated.
  • Once the wiki has been generated in the cloud, the uploaded data is destroyed immediately and is not stored.
  • The feature was on by default in the early days after launch, so some users were affected.
  • It has already been fixed; the code will be released, a third party will assess it, and progress will be made public.

The table below sets each claim in the statement (our translation from the Chinese) beside what the investigation and audits found.

The statement's claimWhat the investigation and audits foundOur assessment
"The Repo Wiki feature, when generating Wiki pages, may trigger an upload of repository data"Captures happen right before every prompt and when a repo-wiki-update task completes: 62 times in one session. The Windows audit also saw a capture on every prompt submission and every terminal-state change [1][5]Far more often than "when generating the wiki." The statement made the upload conditions and frequency sound narrower than they actually were
"The related uploaded data is destroyed immediately"The server side cannot be verified locally. The audit repository also states outright: "It does not establish what the vendor's servers do with uploaded snapshots" [4]An unverifiable claim. This is exactly what a third-party review would need to check
"Because the feature was on by default in the early days after launch, some users were affected"That implies an on/off setting existed, but the switches did not stop the upload. The sidecar was created unconditionally [1][4][5]Not a problem of defaults but of being impossible to turn off
“The issue has been fixed”The statement gives no fixed version number and no description of what changed. We could not confirm what changed in builds after 3.12.3, the version the audit examined [5]Unverifiable. It can be checked once the code is released
(Not mentioned) Why is the key only on the server?Envelope encryption with a public key sent by the server. The private key is not on the client [1][4]A question the statement did not answer
(Not mentioned) How this relates to the privacy policyThe policy lists only text, files, commands and code "submitted to us through conversation," and never mentions snapshots, checkpoints, a wiki or workspace uploads [7]The statement did not say whether the policy will be revised

In fairness, a few things should be noted. The statement came out on the day of the incident, named the feature responsible, and made verifiable commitments: releasing the code and a third-party review. Whether those commitments are kept is the next thing to check in this incident. However, the apology was posted only in a user group, so this report relies on the full text as carried by Chinese media. We could not find an official English post as of 2026-09-19.

5. Two independent audits — what is confirmed and what cannot be

The investigation records a single installation. That makes it important whether the same behavior reproduces on other machines. Among the audit repositories posted to GitHub after September 18, we looked at two that assign evidence grades and include reproduction scripts.

ItemBakaronLab audit [4]HunLuanZhiZhu audit [5]
EnvironmentWindows desktop app (Electron), server process on WSLZCode 3.12.3, Windows x64. app.asar hash pinned
Capture scale7 workspace state files30 manifests, 26 workspaces, 50,617 files, about 1.77GB. 11 pending encrypted files, about 1.06GB
Capture timingRight before promptsEvery prompt submission + terminal-state updates
.git includedYes. 62–90% of the archiveYes
Encryption and destinationAES-256-CTR + server-supplied RSA public key, Alibaba OSSSame. Requests credentials from zcode.z.ai/api/v1/snapshot/upload-credential
Effect of the switchrepoSnapshotIndexingEnabled exists in the server bundle only as schema, normalization and upload key-list entries. The sidecar is created unconditionallyExists but does not stop capture or upload
Did the upload complete?Confirmed. All 7 state files contain lastAcceptedManifestHash, which is written only after a successful upload, and pending files are deleted after uploadCannot be determined from local evidence. The audit states that the local logs hold no record of an upload transaction, so it cannot tell whether the server received the snapshots
Server-side processing"It does not establish what the vendor's servers do with uploaded snapshots." Retention, training use and employee access are unknownEqually unknown

The two audits agree on the capture scope (.git included), the encryption method, the destination, and the fact that the switches do not stop the upload. The investigation's core claims match across three machines. Where they differ is whether the upload actually completed. One audit found completion records; the other wrote that it could not tell on its own machine. On the investigator's machine, the file was still pending after 564 failures. In short, "it bundles your workspace and tries to upload it" is established, while "how much actually went up" varies from machine to machine.

None of the three records knows anything about the server side. Whether the data was destroyed immediately, used for training, or opened by anyone cannot be learned no matter how thoroughly the client is taken apart. What this incident has established stops at the client's behavior. Everything beyond that is for the third-party review the vendor promised to answer.

6. What do other tools send? — according to their official documentation

In the Hacker News discussion, many commenters asked whether other tools do the same thing [9]. That question should be answered from documentation, not guesswork. For the table below, we read each tool's official data documentation on 2026-09-19 and recorded the same four things. Anything we could not confirm in the documentation is marked as not in the docs. There is no guarantee that what the documentation says matches actual behavior: ZCode's documentation did not mention snapshots either, and Claude Code's June incident was also undocumented behavior.

ToolHow your code leaves the machineTraining use by defaultHow to turn it offNot in the docs
ZCode
Z.ai
Text, files, commands and code submitted through conversation (policy). On top of that, undocumented workspace snapshots go to Alibaba OSS (investigation)The "Optimization Program" is off by default. Data is not used for training until you turn it onNo setting turns snapshots off. The investigator's workaround is to lock ~/.zcode/v2/checkpoints with the immutable flagSnapshot, checkpoint and wiki uploads; the retention period ("as long as it is needed"); server-side processing [7]
Claude Code
Anthropic
All prompts and model outputs go to the API. Metrics (latency, usage patterns) "never include your code, prompts, or file paths." Session transcripts are kept locally in plaintext under ~/.claude/projects/ for 30 daysConsumer plans (Free, Pro, Max) follow a setting the user turns on or off. Commercial plans (API, Team, Enterprise) are not used for trainingDISABLE_TELEMETRY=1, DISABLE_ERROR_REPORTING=1, or everything at once with CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1. Training consent is an account settingThe documentation is detailed, but June's prompt marker was behavior the documentation did not cover [6][10]
Codex CLI
OpenAI
Prompts and code go to the model API. Of the client analytics metrics, the maintainers say "None of those will contain code coming from your codebase," and they include no personally identifiable information (announced 2025-12; collection logic not yet implemented as of 2026-01)With an API key, the API policy applies: data sent through the API since 2023-03-01 "is not used to train or improve OpenAI models," abuse-monitoring logs are kept 30 days, and zero data retention is available on request [17]. Consumer settings when signed in with a ChatGPT plan are unconfirmed, because we could not open the help page directly (section 8)The analytics flag in config.toml [12]. Training consent is an account-side settingThe CLI documentation has no section on data flows, and the API documentation does not mention Codex separately [12][17]
Cursor"Even if you use your API key, your requests will still go through our backend!" (that is where the final prompt is built). File contents are cached temporarily on the server to reduce latency, encrypted with client-generated keys that exist on the server only for the duration of a requestWith Privacy Mode on, data is not used for training, and Cursor has zero data retention agreements with model providers. The documentation does not state the defaultPrivacy Mode. Anyone, free users included, can turn it on, and it inherits team settingsHow the codebase index is stored (chunks, embeddings, path obfuscation) was not in either of the two documents we read [13]
GitHub CopilotInputs (code snippets shown to the model), outputs accepted or modified, context around the cursor, file names, repository structure and navigation patternsFree, Pro and Pro+ data has been used for training since 2026-04-24 (unless the user opts out). Private repositories are included during active sessions. Business and Enterprise are excluded, and repositories of paid organizations are excluded whichever account you work fromThe Privacy section of github.com/settings/copilot/featuresData used for training may be shared with GitHub affiliates, including Microsoft, and does not go to third-party AI providers [16]. The documents we read do not cover how much usage data is collected outside training
Gemini CLI
Google
Prompts and code go to Code Assist, the Gemini API or Vertex, depending on the authentication method. Usage statistics send only tool names, success or failure, duration and model name; per the documentation, "We do not log the content of your prompts or the responses from the Gemini model," nor file contentsEach authentication method follows a different policy document. For the personal Google account policy, see section 8privacy.usageStatisticsEnabled: false in settings.json (on by default)The training policy for each authentication method sits in documents linked from outside the CLI documentation [15]

How to read the table: any tool sends code when a request gives the model code context. That cannot be avoided. The differences come down to three things. First, scope. The five tools talk about "what you sent in the conversation" and "around the cursor"; ZCode's snapshot was the repository's entire history. Second, defaults. Copilot's individual plans have used data for training by default since April, Claude Code's consumer plans leave it to the user, and all five tools exclude commercial and enterprise plans from training. Third, whether the documentation gives you a switch to turn it off. Among the documents we read, the only items with no way to turn them off are ZCode's snapshots and Copilot's engagement data, and the two are different in kind: the latter is usage metrics, the former is code.

7. Checklist to apply today

The first items are for ZCode users; the rest apply to anyone using a coding agent.

If you use ZCode

  • First, look at what was bundled. The state files and file lists (manifests) under ~/.zcode/v2/checkpoints/ are plaintext. They show which projects were captured, when, and how many times. Some repositories have published self-check scripts [4][5].
  • To block uploads, lock the folder. The investigator found that if you delete it, the workspace is bundled again within 30 minutes. The investigator's procedure is to delete the folder, recreate it, and lock it. On macOS: rm -rf ~/.zcode/v2/checkpoints && mkdir -p ~/.zcode/v2/checkpoints && chflags uchg ~/.zcode/v2/checkpoints. On Linux, only the last command changes: sudo chattr +i ~/.zcode/v2/checkpoints. If you lock the folder without deleting it first, encrypted files already pending stay there. Checkpoint rollback stops working; chat, autocomplete and tool execution keep working [1]. This is a workaround the investigator confirmed on their own machine. We could not confirm whether it is still needed in the version the vendor says is fixed.
  • Rotate every secret that ever entered the repository history. Snapshots include the contents of deleted commits. Treat any API key, token or password that was ever in the .git history as already exposed, and reissue it. Scan the history with git log -p or a secret scanner.
  • Logging out stops it. According to the investigation, the sidecar's only condition is a valid login token. Setups that use your own key or a self-hosted model are documented [8]; check that those setups also work without logging in before you use them.

Whatever coding agent you use

  • Read the data documentation before installing, and if there is none, treat that as a signal in itself. Do not connect a tool to your team's code if you cannot fill in the four fields from section 6 (path, training default, how to turn it off, retention period).
  • Look at the outbound connections yourself at least once. There is no guarantee that behavior matches the documentation. Use lsof -i -P | grep <process> or firewall logs to see what the app connects to. If you see a storage domain other than the model API, find out why.
  • Turn off unnecessary traffic in the settings. For Claude Code, that is CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1. For Gemini CLI, privacy.usageStatisticsEnabled: false. For Codex, the analytics flag. For Copilot individual plans, the Privacy section of the settings; for Cursor, Privacy Mode. For a team, put these in a settings file and distribute it.
  • Use company code only on commercial or enterprise plans. All six tools exclude commercial and enterprise contracts from training use. Copilot excludes a paid organization's repositories from training even when you open them on an individual plan, but private repositories owned by a personal account can be used for training during active sessions on an individual plan [14]. Which account the company code lives under decides how far the protection reaches.
  • Know what .gitignore cannot block. In this incident, 86.6% was .git. Secret values in the history go away only when you reissue them, not through an ignore list.

8. What this is not yet

  • We did no measurements of our own. This report cross-checks one investigation, two audit repositories, press reports carrying the vendor statement, and each tool's official documentation. We did not install ZCode and reproduce the behavior ourselves.
  • Nobody has verified the server side. "Destroyed immediately" cannot be verified, and neither can training use, retention or access. If the vendor delivers the code release and third-party review it promised, we will revise this report.
  • Whether the upload completed varies by machine. One audit found completion records, the other could not tell, and the investigator's machine showed 564 failures. How many users' code was actually uploaded is unknown.
  • We could not confirm the fixed version. The statement gives no version number, and the audited version is 3.12.3. How the sidecar changed in later builds is hard to know until the code is released.
  • The vendor statement is secondhand. Chinese media relayed a post from a user group. We could not find an official English post, and the wording may differ between outlets.
  • Sources disagree on ZCode's launch date. VentureBeat gives an announcement on June 12, while other secondary sources give a launch in early July. This report follows VentureBeat.
  • We could not confirm the training policy for Codex used through a ChatGPT plan. The OpenAI help page refused automated requests. We confirmed the policy for use with an API key (no training, 30-day abuse-monitoring logs) from the API documentation, but that documentation does not mention Codex separately [17].
  • The same limitation applies to Gemini CLI's personal-account policy. The Code Assist policy page for individuals had been replaced by a service-termination notice dated 2026-06-18, so we could not confirm the current wording. The table lists only the usage-statistics part.
  • Copilot's plan list follows the 2026-03-25 blog post and the FAQ (Free, Pro, Pro+). We could not confirm from official documentation whether any individual plans have been added since.
  • How Cursor indexes a codebase was not in the documents we read. We recall details such as chunks, embeddings and path obfuscation from earlier documentation, but we could not confirm them, so we left them out.
  • We left out the suspicions about other tools raised on Hacker News. They are comment-level claims that no source material or documentation confirms.
  • We could not find Korean coverage. As of 2026-09-19, we found no Korean-language media or community posts about this incident.

9. Sources

All checked on 2026-09-19. [1], [4], [5] and [10] are investigation records by independent developers; [6], [7] and [12]–[17] are official documentation from each vendor. [2], [3], [8], [9] and [11] are secondary sources.

SourceWhat we checkedScope of the evidence
[1] ferstar · Inside ZCode: Silently Uploading Your Entire Git History to the Cloud (2026-09-18)313MB/345MB, 42,411 files, 564 failures, the upload flow, envelope encryption and where the key lives, the 86.6% .git breakdown, what the two switches actually do, capture timing and the 62 captures, the folder-lock workaroundReverse-engineering record of one personal installation. The author states that the text is an AI translation
[2] Sina Tech · 智谱 ZCode 被质疑“偷传代码”:官方回应 (2026-09-18)Full text of the apology from the official group: codebase indexing and Repo Wiki as the cause, immediate destruction, on by default at first, fix completed, code release and third-party review, weekly usage resetSecondary source. A report carrying the full statement
[3] Tencent News · report on the same statement (2026-09-18)Cross-check of the same content as [2]Secondary source
[4] BakaronLab · zcode-snapshot-auditWindows/WSL audit. Evidence grades, .git at 62–90%, the switch does not stop the sidecar, upload completion confirmed through lastAcceptedManifestHash, server side not establishedIndependent audit. Includes reproduction scripts
[5] HunLuanZhiZhu · zcode-workspace-snapshot-auditZCode 3.12.3 on Windows x64. 30 manifests, 26 workspaces, 50,617 files, 1.77GB; 11 pending files, 1.06GB; capture period 2026-07-05 to 09-18; upload completion cannot be determined from local evidenceIndependent audit. Conclusions tied to the app.asar hash
[6] Anthropic · Claude Code Data usageTraining policy for consumer and commercial plans, retention periods (30 days, 5 years), no code, prompts or paths in metrics, DISABLE_TELEMETRY and CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC, local session transcripts kept 30 daysVendor's official documentation
[7] Z.ai · ZCode Privacy Policy (effective 2026-06-15)What is collected (text, files, commands and code submitted through conversation), Optimization Program off by default, processing in Singapore, retention "as long as it is needed," no mention of snapshots or a wikiVendor's official documentation
[8] VentureBeat · Z.ai launches ZCode (2026-06-12)Announcement date, platforms, free app and subscription price, GLM-5.2, support for BYOK and self-hostingSecondary source. Tech media report
[9] Hacker News · Inside ZCode discussion294 points and 97 comments (2026-09-19), the debate over whether other tools do the same, translations of the statement shared by commentersSecondary source. Community discussion
[10] Thereallo · Claude Code Is Steganographically Marking Requests (2026-06-30)Analysis of 2.1.196. Matching against the ANTHROPIC_BASE_URL host, and apostrophe and date-format changes that depend on the time zoneReverse-engineering record by an independent developer
[11] Malwarebytes · Claude Code's hidden tracker was an "experiment" (2026-07-07)The Anthropic engineer's reply on X ("an experiment we launched in March," against resale and distillation), removal on July 1Secondary source. Security media report
[12] OpenAI · Codex Client Analytics (GitHub announcement, 2025-12-18)Analytics items, no code or personal information included, on by default, the config.toml flag, collection logic not implemented as of 2026-01-08Vendor's official announcement
[13] Cursor · Data Use & Privacy Overview (updated 2026-09-03) · Security (updated 2026-08-25)Requests go through the backend even with your own key, temporary file caching encrypted with client keys, Privacy Mode's exclusion from training and zero data retentionVendor's official documentation
[14] GitHub · FAQ: Privacy Statement update on Copilot data use for model trainingTraining use for Free, Pro and Pro+ from 2026-04-24, what is collected, private repositories included during active sessions, Business and Enterprise excluded, paid organizations' repositories excluded, how to opt outVendor's official FAQ
[15] Google · Gemini CLI Configuration, Usage Statistics section · Terms and PrivacyWhat usage statistics collect and exclude, on by default, privacy.usageStatisticsEnabled, policy documents for each authentication methodVendor's official documentation
[16] GitHub · Updates to GitHub Copilot interaction data usage policy (2026-03-25)Effective 2026-04-24, applies to Free, Pro and Pro+, what is collected, sharing with affiliates (Microsoft included) and not with third-party AI providers, Business, Enterprise and enterprise-owned repositories excludedVendor's official blog
[17] OpenAI · Your data (API documentation)Data sent through the API since 2023-03-01 "is not used to train or improve OpenAI models," abuse-monitoring logs for 30 days, endpoints eligible for zero data retention. No mention of CodexVendor's official documentation

Editorial standard: in every table we separated what was confirmed on the client from claims about the server side, and we state that the vendor statement is secondhand. For the other tools, we included only what the official documentation says and marked undocumented items as missing.

Newsletter

The week’s new reports, every Sunday

One email a week with that week’s reports, skipped when nothing new came out. Nothing but report news.

Used only to announce new reports. Unsubscribe any time. Privacy Policy
Publisher

Eazler AI Lab is the AI engineering journal of Eazler Inc. We read primary sources in full, and say so when something is unverified.

Editorial standards and method →

We also post report summaries on Threads: @eazler.inc.

Building or adopting AI agents? hello@eazler.com