diff --git a/config/scripts/record-ime-trace.mjs b/config/scripts/record-ime-trace.mjs
new file mode 100644
index 00000000000..32a6fec66f7
--- /dev/null
+++ b/config/scripts/record-ime-trace.mjs
@@ -0,0 +1,261 @@
+// Captures a real IME composition trace from your own machine and your own input
+// method, in the exact JSON shape src/renderer/src/lib/*.test-fixtures.ts consumes.
+//
+// Why this exists: CDP-dispatched keystrokes bypass the OS input-method layer, so no
+// amount of page.keyboard.type() produces a real composition. The Linux CI matrix
+// drives ibus through X11 and covers hangul/libpinyin/anthy/unikey, but there is no
+// macOS or Windows IME CI. On those platforms a human typing into this page is the
+// only way to get a trace that is honestly labelled `recorded`.
+//
+// pnpm ime:record
+//
+// Then open the printed URL, switch to the input method you want to characterize,
+// type, and press Save. Everything runs on localhost and nothing is uploaded.
+
+import { createServer } from 'node:http'
+import { mkdirSync, writeFileSync } from 'node:fs'
+import path from 'node:path'
+
+const projectDir = path.resolve(import.meta.dirname, '../..')
+const outputDir = path.join(projectDir, 'test-results', 'ime-recordings')
+const host = '127.0.0.1'
+const port = Number(process.env.ORCA_IME_RECORDER_PORT ?? 7331)
+
+// Kept identical to tests/e2e/terminal-ime-boundary-probe.ts so traces captured here
+// and traces captured in CI deserialize through the same loader.
+const RECORDED_EVENT_TYPES = [
+ 'compositionstart',
+ 'compositionupdate',
+ 'compositionend',
+ 'beforeinput',
+ 'input',
+ 'keydown',
+ 'keypress',
+ 'keyup'
+]
+
+const PAGE = /* html */ `
+
+
+
+Orca IME trace recorder
+
+
+
+
Orca IME trace recorder
+
+ Switch to the input method you want to characterize, then compose in the box below.
+ Every composition, input and key event is captured together with the textarea's
+ value and selection offsets at that exact instant — the offsets are what make a
+ trace recorded rather than reconstructed.
+
+
+ Type the sequence you care about, including the committing key and any candidate
+ navigation. Then name it after the behavior it demonstrates and press Save.
+