File annotations metadata leaked as zero-byte files on disk

Where does the bug appear (feature/product)?

Cursor IDE

Describe the Bug

When custom file annotations/notes are added to files in the file explorer panel (using the **label**: value format, e.g. **Status**: P0, **Last Updated**: 2026-07-21), Cursor writes these annotation texts as actual zero-byte physical files in the project root directory.

Steps to Reproduce

  1. Open any file in the file explorer sidebar
  2. Right-click or open the file’s context menu to add a custom annotation/note with a label like **Status**:P0~P5
  3. Check the project root directory — a zero-byte file with the exact annotation text as its filename is created on disk

Expected Behavior

  • Annotations should only be displayed in the UI (file explorer sidebar tooltip / label area)
  • No physical files should be written to disk

Operating System

Windows 10/11

Version Information

Version: 3.12.17 (system setup)
VS Code Extension API: 1.128.0
Commit: 0fb762053c34788bb7760d5673f8a6d4c8589d50
Date: 2026-07-17T02:53:53.006Z
Layout: IDE
Build Type: Stable
Release Track: Nightly
Electron: 40.10.3
Chromium: 144.0.7559.236
Node.js: 24.15.0
V8: 14.4.258.32-electron.0
xterm.js: 6.1.0-beta.256
OS: Windows_NT x64 10.0.19045

For AI issues: add Request ID with privacy disabled

2bd94156-1abf-4f4b-bbff-faa15be0db31

Additional Information

  • Zero-byte files are created with names matching the annotation text, for example:
**对标**:Codshoppy(货代线路
**最后更新**:2026-06-28
**最后更新**:2026-07-03
**最后更新**:2026-07-21(🟢
**状态**:LT-P0~P5
**用途**:COD(货到付款)前后端全链路上线前准备、配置与验收。
**用途**:部署总览、脚本速查、COD
**用途**:供
**维护规则**:每次完成一个可验收功能或修复已知
**维护**:实现进度以
**适用场景**:Linux
**适用场景**:小规模
Swagger
  • These files get tracked by git (empty blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391)
  • File ctime/mtime updates every time the annotation is read/rendered by Cursor, causing persistent dirty git status

Does this stop you from using Cursor

Yes - Cursor is unusable

Hey, thanks for the detailed report. I looked into it but the news is mixed. Cursor has no “file annotations/notes” feature in the explorer. There is no command in the context menu, no decoration provider, and no place to store such notes. So the steps in the repro describe a function that does not exist in the product.

These zero-byte files are almost certainly created by the agent itself through its tool calls (Write or touch in the terminal). The key clue is the file names. They are lines from your Chinese markdown document cut line by line (**用途**:COD(货到付款)…, Swagger and so on), trimmed exactly at spaces and full-width brackets. This is a classic signature of a malformed Write call or unquoted shell loop where lines from the document accidentally end up as the file name argument.

From your Request ID it is clear the session ran on the BYOK model deepseek-v4-flash through a custom OpenAI base URL. Third-party and custom models noticeably more often generate incorrect file creation calls. This seems to be exactly that case. “Updating ctime/mtime on render” is most likely later runs of the agent that touch these files again, not “rendering annotations”.

What I recommend:

  • Open the agent’s chat history and look for Write/touch calls that created these files. That will confirm the source.
  • Delete the junk files and review the agent’s diff before accepting changes (especially on a custom model).
  • Do not run shell/Write in auto-run without review. If possible try a stronger model for such tasks to get fewer malformed calls.

If you find in the transcript the moment where Cursor itself creates the files, not the model’s tool call, send it here and we will look closer.