本技能面向在 Node.js 脚本、Claude Code 钩子等非交互式子进程环境中启动和管理 Windows Terminal(wt.exe)窗口与标签页的场景。
核心问题:wt.exe 是注册在 %LOCALAPPDATA%\Microsoft\WindowsApps 的 App Execution Alias,在 cmd.exe、PowerShell 交互式会话中可用,但无法被 Node.js 的 child_process.spawn() 解析,直接调用会报 CommandNotFoundException。
主要做法:优先使用 cmd.exe /c start '' wt ...,即通过 cmd /c start 启动 GUI 窗口,其中空字符串 '' 是 start 传参时必需的标题占位符;仅有 cmd /c wt 而无 start 在非交互上下文中会静默失败。启动 claude 时需先 set CLAUDECODE= 清除该环境变量,否则子进程 claude 拒绝启动。另一种方案是 PowerShell Start-Process。若未安装 Windows Terminal,可回退到 Start-Process cmd.exe。
文中还给出 wt 的 CLI 语法:全局选项 -w/--window(new/-1 新建,0/last 最近窗口)、-M、-F、-f、--pos、--size;子命令 new-tab(-p、-d、--title、--tabColor、--colorScheme 等)、split-pane(-H/-V/-s/-D)、focus-tab(-t)、move-focus;命令链使用分号,各 shell 转义方式不同。
关键限制与注意事项:Claude Code 钩子运行在 Windows job object 中,detached:true 无法逃逸,钩子退出时子进程会被杀;可靠方法是写 .bat(必须 CRLF)并用 execFileSync('cmd', ['/c', batPath]) 同步执行,让 wt 或 start 在独立进程树中创建进程。其他反模式包括 shell:true、用标题定位窗口(应通过 WMI 按 PID 定位)、.bat 用 \n 换行、从 Git Bash 直接传反斜杠路径等。钩子去重可用 O_EXCL 锁文件加冷却时间。外部输入需过滤以防参数注入。具体平台检测与回退策略见原文示例。