원클릭으로
easytouch
跨平台系统自动化操作工具,支持 Windows、Linux、macOS。提供 CLI 命令行和 MCP 服务器两种使用方式,支持鼠标键盘控制、屏幕截图、窗口管理、系统信息查询等功能。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
跨平台系统自动化操作工具,支持 Windows、Linux、macOS。提供 CLI 命令行和 MCP 服务器两种使用方式,支持鼠标键盘控制、屏幕截图、窗口管理、系统信息查询等功能。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
| name | easytouch |
| description | 跨平台系统自动化操作工具,支持 Windows、Linux、macOS。提供 CLI 命令行和 MCP 服务器两种使用方式,支持鼠标键盘控制、屏幕截图、窗口管理、系统信息查询等功能。 |
使用 npm 安装时:Node.js >= 18(npm 安装场景)
直接从 Github Release 下载文件后添加环境变量。
# 推荐:自动匹配当前平台
npm install -g @whuanle/easytouch
# Windows
npm install -g easytouch-windows
# Linux
npm install -g easytouch-linux
# macOS
npm install -g easytouch-macos
安装后命令入口:
et help
# 显示命令总览与参数格式
et help
# 显示当前运行时状态与主机平台信息
et status
# 列出各平台实现状态与能力模块
et platforms
# 显示 CLI/MCP 接口与能力映射概览
et interfaces
# 显示能力接入和运行时要求清单
et requirements
# 启动 MCP stdio 服务
et mcp-stdio
# 输出 MCP manifest(工具清单)JSON
et mcp-stdio --output json
默认命令执行输出结果内容为 json,如需直接输出文本可使用 -output text 指定。
| 命令 | 用途 |
|---|---|
system os-info | 读取操作系统版本、架构、主机名等信息 |
system cpu-info | 读取 CPU 架构与核心信息 |
system memory-info | 读取内存总量、可用量与占用情况 |
system disk-list | 列出磁盘与容量信息 |
system process-list | 列出当前进程列表 |
system hardware-info | 读取硬件概览(架构、核心、页大小、物理内存、虚拟内存、机器名) |
system network-info | 读取网络适配器信息(IPv4、MAC、网卡类型、DHCP 状态) |
平台说明:
system network-info 依赖 ip 命令。sysctl、vm_stat、ifconfig 等系统命令。| 命令 | 用途 |
|---|---|
mouse position | 读取当前鼠标坐标 |
mouse move --x <x> --y <y> [--duration-ms <ms>] [--jitter-px <px>] [--step-delay-ms <ms>] | 以渐进轨迹移动鼠标,支持抖动与延迟,更接近人类操作 |
mouse click [--button <left|right|middle>] [--count <n>] | 执行鼠标点击 |
mouse scroll --delta <amount> | 执行鼠标滚轮滚动 |
平台说明:
xdotool,并要求运行在 X11 或 XWayland 会话中;Wayland 原生会话下可能被桌面环境限制。参数说明:
--x / --y:目标坐标(整数)--duration-ms:总移动时长(毫秒),默认 280--jitter-px:轨迹抖动幅度(像素),默认 3--step-delay-ms:每一步移动间隔(毫秒),默认 8--button:按键类型,left、right、middle--count:点击次数,默认 1--delta:滚动量,正负值分别代表不同方向| 命令 | 用途 |
|---|---|
window list [--include-hidden] [--pid <pid>] | 列出窗口,可按可见性和进程过滤 |
window foreground | 读取当前前台窗口信息 |
window find --title <text> [--match <contains|exact>] [--include-hidden] [--pid <pid>] | 按标题查找窗口 |
window activate --handle <handle> | 按句柄激活窗口 |
window show --handle <handle> | 显示窗口并请求激活 |
window minimize --handle <handle> | 最小化窗口 |
window maximize --handle <handle> | 最大化窗口 |
window restore --handle <handle> | 恢复窗口(从最小化/最大化) |
window move --handle <handle> --x <x> --y <y> [--width <n>] [--height <n>] | 拖曳/移动窗口到指定坐标,可选调整尺寸 |
window close --handle <handle> | 按句柄请求关闭窗口 |
app launch --target <path-or-uri> | 启动应用、打开文件或 URI |
平台说明:
window list、window foreground、window activate、window close 可用;window show、window minimize 依赖 xdotool,window maximize、window restore、window move 依赖 wmctrl 和兼容 EWMH 的窗口管理器。window show、window minimize、window maximize、window restore、window move、window close 通过 System Events 操作,若同一进程里有多个同名窗口,系统会按首个匹配窗口执行。参数说明:
--title:窗口标题关键字--match:匹配模式,contains 或 exact--include-hidden:包含隐藏窗口--pid:按进程 ID 过滤--handle:窗口句柄(非负整数)--x / --y:窗口目标位置--width / --height:窗口目标尺寸(可选,不传则保持原尺寸)--target:可执行路径、文件路径或 URI| 命令 | 用途 |
|---|---|
clipboard get-text | 读取剪贴板文本 |
clipboard set-text --text <value> | 写入剪贴板文本 |
clipboard get-files | 读取剪贴板中的文件列表 |
clipboard set-files --paths <path1;path2;...> | 写入剪贴板文件列表(用于后续粘贴文件) |
clipboard set-image --path <image-file> | 写入剪贴板图片(用于后续粘贴图片) |
平台说明:
wl-copy / wl-paste 或 xclip / xsel;缺少这些工具时,对应文本、文件、图片剪贴板能力不可用。pbcopy / pbpaste;文件和图片剪贴板通过 osascript / JXA 写入,若宿主进程缺少 Automation 权限可能失败。参数说明:
--text:要写入的文本内容--paths:多个文件路径,使用分号 ; 分隔--path:单个图片文件路径| 命令 | 用途 |
|---|---|
keyboard key --key <name> | 发送单个按键 |
keyboard hotkey --keys <combo> | 发送组合键 |
keyboard type --text <value> | 直接注入文本内容(直输模式) |
keyboard type-keys --text <value> [--key-delay-ms <ms>] | 按键位逐字输入(模拟人类打字模式) |
keyboard ime-switch [--strategy <win-space|alt-shift|ctrl-shift>] | 切换输入法 |
keyboard caps-lock [--state <toggle|on|off>] | 控制大小写状态 |
keyboard paste [--expect-title <text>] [--match <contains|exact>] | 发送粘贴动作,可加窗口标题保护 |
平台说明:
xdotool,并要求运行在 X11 或 XWayland 会话中;Wayland 原生会话下键盘注入通常不稳定或被系统阻止。keyboard ime-switch 的策略会映射到系统快捷键,是否真正切换输入法取决于系统当前输入源绑定。keyboard caps-lock 目前仅稳定支持 toggle,on / off 仍不保证可用。参数说明:
--key:按键名(如 enter、esc、f5)--keys:组合键(如 ctrl+c、ctrl+shift+s)--text:输入文本--key-delay-ms:模拟键位输入时每个按键之间的延迟--strategy:输入法切换快捷键策略--state:大小写状态,toggle、on、off--expect-title:执行粘贴前要求前台窗口标题匹配--match:标题匹配模式,contains 或 exact| 命令 | 用途 |
|---|---|
screen displays | 列出显示器与分辨率信息 |
screen pixel-color --x <x> --y <y> | 读取指定像素颜色 |
screen capture [--path <file>] [--display-id <id>] [--window-handle <handle>] | 默认截取所有屏幕,或按屏幕/窗口定向截图 |
平台说明:
screen displays 依赖 xrandr,screen capture 依赖 grim、gnome-screenshot、scrot 或 import 之一。screen capture --display-id 和 screen capture --window-handle 仍未实现,当前只保证整桌面截图。screen capture 依赖系统 screencapture 命令;若系统未授予屏幕录制权限,截图或像素读取会失败。--display-id 与 --window-handle 定向截图,但前提是目标窗口仍存在于当前 CoreGraphics 快照中。参数说明:
--x / --y:像素坐标--path:截图输出路径,不传则使用默认路径--display-id:指定屏幕 ID(来自 screen displays)--window-handle:指定窗口句柄(来自 window list / window foreground)# 默认:截取所有屏幕
screen capture --path ./captures/all.png
# 截取指定屏幕
screen capture --display-id 1 --path ./captures/display-1.png
# 截取指定窗口
screen capture --window-handle 0x001A09F2 --path ./captures/window.png
等待器用于“动作后确认状态”,避免脚本只执行动作却不验证结果。 典型用法:点击/输入/窗口切换之后,先等待目标条件成立,再继续下一步。 这样可以降低因为界面刷新延迟、窗口抢焦点、颜色尚未变化导致的误操作。
| 命令 | 用途 |
|---|---|
wait window --title <text> [--timeout-ms <ms>] [--match <contains|exact>] [--foreground-only] | 等待目标窗口出现或满足前台条件 |
wait focus --title <text> [--timeout-ms <ms>] [--match <contains|exact>] | 等待焦点窗口标题匹配 |
wait activate --handle <handle> [--expect-active <true|false>] [--timeout-ms <ms>] | 监听指定窗口句柄是否成为前台激活窗口(或等待其失去激活) |
wait pixel --x <x> --y <y> --hex <RRGGBB> [--timeout-ms <ms>] | 等待指定像素达到目标颜色 |
wait clipboard [--expect-text <value>] [--timeout-ms <ms>] [--match <contains|exact>] | 等待剪贴板变化或匹配目标文本 |
wait process [--name <text>|--pid <pid>] [--expect-running <true|false>] [--timeout-ms <ms>] [--match <contains|exact>] | 等待进程进入期望状态 |
平台说明:
wait activate 依赖 X11/XWayland 窗口焦点能力,wait clipboard 依赖剪贴板后端工具,wait pixel 依赖图形会话可读。wait activate、wait clipboard、wait pixel 等同样受系统权限和图形会话状态影响。参数说明:
--timeout-ms:最长等待时间(毫秒),超时会返回失败--match:文本匹配模式,contains 或 exact--foreground-only:仅匹配当前前台窗口(仅 wait window)--handle:目标窗口句柄(用于 wait activate)--expect-active:true 等待激活,false 等待失去激活--expect-text:剪贴板期望文本,不传则等待任意变化--name / --pid:进程名称或进程 ID--expect-running:期望进程是否存在,true 表示等待启动,false 表示等待退出复杂参数组合示例:
# 标题精确匹配 + 只接受前台窗口
wait window --title "记事本" --match exact --foreground-only --timeout-ms 5000
# 监听窗口激活(句柄来自 window list)
wait activate --handle 0x001A09F2 --expect-active true --timeout-ms 5000
# 颜色等待(十六进制)
wait pixel --x 100 --y 200 --hex FFCC00 --timeout-ms 3000
# 进程退出等待
wait process --name "chrome" --expect-running false --match contains --timeout-ms 10000
功能按照 Windows 设计,以上所有功能在 Windows 下均可用,Linux 和 macOS 已补齐大部分常用能力,但仍有平台依赖和少量限制,使用前需要先确认桌面会话、系统权限和命令行工具是否满足。
Linux:
xdotool,并要求运行在 X11 或 XWayland 会话里。window maximize、window restore、window move 依赖 wmctrl 和兼容 EWMH 的窗口管理器。wl-copy / wl-paste 或 xclip / xsel。screen displays 依赖 xrandr,screen capture 依赖 grim、gnome-screenshot、scrot 或 import 之一。system network-info 依赖 ip 命令。screen capture --display-id 和 screen capture --window-handle 在 Linux 仍未实现,当前只保证整桌面截图。macOS:
window show、window minimize、window maximize、window restore、window move、window close 通过 System Events 操作窗口;如果同一进程里有多个同名窗口,系统会按首个匹配窗口执行。keyboard ime-switch 在 macOS 下做了策略映射:win-space 对应 Command+Space,alt-shift 对应 Option+Space,ctrl-shift 对应 Control+Space。是否真正切换输入法,取决于系统当前输入源快捷键绑定。keyboard caps-lock 目前只支持 toggle;on / off 还不能稳定判断系统真实状态。任务编排:
et mcp-stdio
et mcp-stdio --output json
优先在全局安装后执行 init,把真实原生 et 程序复制出来,再让 MCP 直接调用这个文件:
npm i -g @whuanle/easytouch
easytouch init
这一步会直接从包内复制当前主机对应的原生 et 文件。
生成后的默认路径:
<npm root -g>/@whuanle/easytouch/et.exe<npm root -g>/@whuanle/easytouch/et同时会刷新全局 et 命令。
也可以通过 --output 指定输出位置。
推荐配置:
{
"mcpServers": {
"easytouch": {
"command": "et",
"args": ["mcp-stdio"]
}
}
}
Windows 请把文件名写成 et.exe。Linux / macOS 写 et。
默认会把 et 生成到全局安装目录下的包目录里,并同步刷新全局 et 命令。也可以显式指定输出路径:
easytouch init --output <你想放置 et 的路径>
如果你直接安装的是平台包,初始化命令分别是 easytouch-windows init、easytouch-linux init、easytouch-macos init。
如果需要查看实际路径,可以执行 npm root -g 和 npm prefix -g。
如果宿主能正确处理 PATH,MCP 直接写 command: "et" 即可;否则改成 npm prefix -g 或 npm root -g 对应的实际路径。
如果 Windows 宿主报 LOCAL_PROCESS_ERROR,优先改用 init.js 生成的 et.exe;如果仍走 npm 命令,再检查这里是不是还写成了 npx。
当需要更稳定地点击控件时,可以先读取前台窗口的元素树,再按元素查找、等待、点击或 invoke:
et element tree --output json
et element find --name "确定" --control-type Button --output json
et wait element --name "保存" --control-type Button --timeout-ms 5000 --output json
et element click --element-id root/0/3 --output json
et element invoke --element-id root/0/3 --output json
element tree 返回 element_id、control_type、automation_id、class_name、framework_id、center、bounds、children 等字段,适合让模型先找元素再执行动作。
element find 支持按 element_id、name、automation_id、class_name、control_type、framework_id 查询元素。wait element 会轮询这些条件直到元素出现。element invoke 会走平台语义动作或中心点击回退。
平台要求:
python3/python + pyatspi,点击回退还需要 xdotool。osascript + System Events,宿主需要 Accessibility / Automation 权限。