diff --git a/crates/guest-agent/src/gui.rs b/crates/guest-agent/src/gui.rs
index 3d0fe33..d955841 100644
--- a/crates/guest-agent/src/gui.rs
+++ b/crates/guest-agent/src/gui.rs
@@ -26,6 +26,22 @@ use anyhow::{Context, Result, bail};
use chefer_bundle::Manifest;
use nix::mount::{MsFlags, mount};
+/// 記一行 GUI 診斷。同時走 stderr(原生 Linux / 有接 console 的後端可見)與 **`/dev/kmsg`**
+/// ——WHP 的序列 console 在 `quiet` 下不顯示 guest-agent 自己的 stderr,但高優先序 kmsg 會
+/// 出現在 console(同 appliance init 的 `report()`),故 WHP GUI 的啟動診斷才看得到。best-effort。
+fn note(msg: &str) {
+ eprintln!("[guest-agent] gui: {msg}");
+ if let Ok(mut f) = std::fs::OpenOptions::new().write(true).open("/dev/kmsg") {
+ use std::io::Write as _;
+ // **一次 write() = 一筆 kmsg 記錄**:必須先組好整行再單次寫入。`writeln!`(write_fmt)
+ // 會拆成多次 write,只有第一筆帶 `<2>` 前綴、其餘(含訊息本體)落回預設 level 而被
+ // `quiet` 擋掉。`quiet` 把 console_loglevel 壓到 4(只印 level < 4),故用 <2>=KERN_CRIT
+ //(appliance init 的 report() 用 <0> 亦同理)。
+ let line = format!("<2>[guest-agent] gui: {msg}\n");
+ let _ = f.write_all(line.as_bytes());
+ }
+}
+
/// cage 建立 Wayland socket 的 runtime 目錄(guest 內,appliance tmpfs 上)。
const GUI_RUNTIME_DIR: &str = "/run/chefer-gui";
/// 等 compositor socket 出現的上限。llvmpipe 首次啟動慢,放寬一點。
@@ -82,11 +98,13 @@ pub fn maybe_start(bundle_dir: &Path, manifest: &Manifest) -> Result