Kimi Work secretly attaches raw records from five recent agent sessions to feedback reports

Moonshot AI’s Windows desktop app packages bounded raw records from the five most recently updated Kimi Work conversations whenever a user submits feedback. The form does not identify those attachments or the conversations selected.

By · Published · Updated

RUNTIMEWIRE INVESTIGATION — Scoop

Original reporting by RuntimeWire, based on reverse engineering, testing.

Why it matters

Kimi Work can handle private files, source code and shell output. Packaging five recent sessions without listing them prevents users from reviewing the data attached to feedback.

Reporting record

Finding

Submitting feedback in Kimi Work automatically triggers uploads of a diagnostic archive and bounded raw-record archives from the five most recently updated agent sessions, while the form does not list those attachments or let users choose which sessions are included.

How we verified

Methods: reverse engineering, testing.

RuntimeWire reverse-engineered Kimi Desktop 3.1.5 and its bundled Daimon 0.5.49 service. Static tracing established that the renderer invokes diagnostic-log and raw-record uploads before submitting feedback; the main process sorts all Work conversations by updatedAt, selects five, requests an archive for each and sends the ZIPs to /file/upload_simple. In a Windows Firewall-blocked test launched from Plugins feedback, Kimi selected five distinct conversation IDs, each reached the HTTP upload stage and failed with ERR_NETWORK_ACCESS_DENIED. Kimi's log concluded: "ok: 0/5 archives uploaded in 166ms." Official documentation describes wire.jsonl as the agent's complete communication record and says it includes request parameters, tool schemas and MCP tool listings.

RuntimeWire extracted the production ASAR and Windows Daimon bundle without modifying them, hashed the relevant files and traced the feedback flow from the renderer through preload IPC, the desktop main process, Daimon's archive generator and the two Kimi HTTP endpoints. We decoded the archive limits and sanitization logic, checked Kimi's public help, session-export documentation and privacy policy, and searched for prior reporting. For runtime validation, we blocked outbound traffic from the signed Kimi.exe, started the application, submitted harmless feedback from the Plugins page and reviewed the resulting main-process logs. The firewall denied every external request. We did not inspect or transmit conversation-record contents.

Tested versions: Kimi Desktop 3.1.5, release 3.1.5+c88420152; Daimon 0.5.49; Windows x64; Electron 41.7.2.

Reproduction

RuntimeWire independently reproduced the core finding.

Install Kimi Desktop 3.1.5 on Windows and ensure the Work interface has at least five recent conversations. Fully exit Kimi. Create a temporary outbound Windows Firewall block for Kimi.exe. Start Kimi and open Work > Plugins. Click the feedback icon, enter harmless test text and press Submit. Open %APPDATA%\kimi-desktop\logs\main.log. Search for FeedbackRawRecords. Confirm five distinct conversation entries fail with ERR_NETWORK_ACCESS_DENIED, followed by "ok: 0/5 archives uploaded." Remove the temporary firewall rule.

File hashes

  • 4ecfdc4ff9ad57707f050888056babeac79eb85b61c3e0a369b612d809f80122 app.asar
  • f92a5544c72a51e742060866a9cdb7c8129b553b36739a8d45a96e5aa9884e23 daimon-bundle.tar.gz
  • bc7a22afe8c91b8196550e6401797d55ff7565f80da5dd6109bcff38ee5eb079 out/main/index.js
  • aa4193cf1ac834842219823adaeb65d91c30d6b4739a95aad36c1a63e69dc508 preload-kimi-agent.mjs
  • 57e81f63c0d21f38a2c74f0ea55edb63e4a07f8e9e64dda20a3e2cabf64028ea common-DPn1pjsS.js
  • 794019269179bd285a5c16cdb7abe2f7d8f82737e1a3e1d1e90efd6422faca5d c-TFPRZLAB.js
  • 799d67dc410e99553e68c9bc151cf95c559f2cedcc3936ab8f8800e8fc97cb28 c-ECRC3J6R.js

Company response

RuntimeWire requested comment; the company had not responded by publication time.

Five numbered agent-session records feeding into a Kimi Work feedback form marked Records attached, showing how submitting feedback silently bundles the user's five most recent sessions.

Moonshot AI's Kimi Work desktop app is designed to attach raw diagnostic records from five recent agent conversations whenever a user submits feedback, a RuntimeWire analysis of the Windows application found.

The collection reaches beyond the task a user is reporting. Kimi Desktop sorts every locally registered Work conversation by its last update time, takes the newest five and asks a bundled background service to create a separate ZIP archive for each one. It uploads those archives alongside a desktop diagnostic-log package before sending the feedback text.

RuntimeWire confirmed the behavior on an installed copy of Kimi Desktop 3.1.5 using a Windows firewall rule that blocked outbound traffic from Kimi.exe. The test opened feedback from Kimi Work's Plugins page and submitted the harmless phrase "RuntimeWire test." Kimi immediately attempted a multipart upload containing its diagnostic archive. It then tried to upload raw-record archives associated with five distinct recent conversation IDs.

All five attempts failed with net::ERR_NETWORK_ACCESS_DENIED, as intended. Kimi's own main-process log recorded five failures within five milliseconds, followed by:

[FeedbackRawRecords] ok: 0/5 archives uploaded in 166ms

The firewall kept the records from leaving the machine and confirmed production execution of the handler.

A generic feedback form reaches across recent work

The Plugins feedback screen was a particularly revealing entry point. Its internal metadata identified the report as coming from the plugin hub, and that version of the form disables user image attachments. Submitting it still invoked the same global collection routine used by feedback from the account menu, an active conversation and Kimi's generated-website preview.

The renderer starts two background operations before it submits the report:

Promise.allSettled([
  feedbackUploadLogs(),
  feedbackUploadRawRecords()
])

The raw-record handler calls conversations.list, sorts the returned conversations by updatedAt, and applies .slice(0, 5). It does not receive the current conversation as an argument. An internal comment in Kimi's shipped preload code describes the method as exporting and uploading the five most recent sessions, with the selection fixed in the desktop main process.

Each completed upload returns an object name. Kimi places those identifiers in a hidden metadata prefix inside the feedback body under rawRecordsObjectNames. The normal file_object_names attachment field is reserved for images the user selected.

That division matters at the interface. The English form invites the user to describe a problem and says images can be uploaded or pasted. It does not list the diagnostic archive, the five conversation archives or their combined potential size. There is no attachment preview, consent box or control for selecting a relevant session.

Kimi's public help page says in-product reports automatically attach "device and account context." It does not mention raw records from recent agent sessions. The company's help documentation was current when RuntimeWire reviewed it on August 15.

What Kimi puts in a raw-record archive

Kimi Work uses a bundled background component named Daimon. The Windows package RuntimeWire examined was version 0.5.49, created July 24. It advertises and registers a production control method called conversations.getRawRecordsArchive, then wires that route to the archive generator used during feedback submission.

For each selected conversation, Daimon discovers the main agent's wire.jsonl file and records belonging to any subagents. It can include as many as 100 record files in one conversation archive and reads the last 500 JSONL records from each file. A single compressed ZIP is capped at 8 MiB, making the client-side ceiling 40 MiB across five raw-record archives, plus the separate desktop log package.

Kimi's own documentation describes agents/main/wire.jsonl as the main agent's "complete communication record." The files support session recovery and replay. They also carry request traces containing tool schemas, request parameters and MCP tool listings, according to the company's session documentation.

Daimon does apply bounded sanitization. It removes strings that look like large base64 blobs, replaces oversized values with length-and-hash markers and limits ordinary strings to 8,192 characters. Those checks are based on size and encoding. The code does not look for passwords, API keys, access tokens, private source code, shell output or sensitive file paths. An ordinary string within the size limit is retained verbatim.

Malformed or unusually large JSONL records receive a diagnostic replacement containing a 256-character preview. The archive manifest also records local session paths, record paths, identifiers and processing statistics.

Kimi's CLI offers a separate, explicit session-export flow. Its documentation warns that exported files may contain code, command output and file paths and tells users to review the contents before sharing. The feedback workflow provides no comparable warning or review step.

What the privacy policy says

Moonshot AI's privacy policy, effective August 4, says the company may collect conversation information, feedback data and logs that can include conversation content. That language covers broad categories of information handled by Kimi.

The implementation makes a narrower product choice that users cannot see at submission: a plugin report, website-preview report or general account report can carry bounded records from five unrelated recent Work sessions. Those sessions may involve different projects, folders, clients or credentials.

The shipping client performs the collection as part of its ordinary feedback handler. This is a collection-scope and disclosure problem. The test did not uncover a remote exploitation path.

RuntimeWire found no public documentation of the five-session selection and no previous public result for the internal method name conversations.getRawRecordsArchive or the logging tag FeedbackRawRecords.

Moonshot AI should explain when the behavior shipped, which desktop versions and platforms include it, how long uploaded archives are retained, who can access them and whether the server performs additional redaction. Users also need a way to inspect the proposed attachments, limit collection to the session being reported and submit feedback without providing conversation records.

How RuntimeWire tested it

RuntimeWire examined the production ASAR from Kimi Desktop 3.1.5 and a Windows x64 Daimon 0.5.49 bundle. Static analysis traced the feedback button from the renderer through Electron IPC, ZIP generation, /file/upload_simple and /user/feedback.

For the runtime test, outbound Windows Firewall access was blocked for the signed Kimi.exe executable before the application was started. RuntimeWire submitted harmless plugin feedback and observed the resulting local logs. The application selected five conversation IDs and reached the upload stage for each archive. Every external request failed with ERR_NETWORK_ACCESS_DENIED. RuntimeWire did not inspect or transmit the conversations' record contents.

The principal file hashes and detailed limits are available in RuntimeWire's reporter notes.

Reader comments

Conversation for this story loads after sign-in.