内容
# RPA-Everything
**英文** | [中文](README.zh-CN.md)

适用于所有使用重复性计算机任务的人的AI驱动自动化框架:用自然语言描述任务,AI将其转化为可重复使用的脚本。
> **不是通用的RPA平台**。它是一个轻量级的工作流:*AI编写脚本,您审查它,脚本按计划运行。* 适用于重复执行相同操作在网页应用、桌面应用和办公文档的个人和团队。
> **适用于AI代理**:如果您是桌面代理,如Claude Desktop或Codex,请阅读[AGENTS.md](AGENTS.md)以获取集成说明。
> **适用于编码代理**:安装RPA-Everything技能,然后用自然语言描述重复工作:
> `npx skills add mingqian94/RPA-Everything --skill rpa-everything`
> **在采用之前需要证据?** 阅读[能力证明](docs/CAPABILITY-PROOF.md):验证路径、安全边界和可重复演示脚本。
> **想跟踪项目方向?** 查看优先事项的[待办事项](docs/BACKLOG.md)。
---
## 非开发人员最快的路径
目标不是学习编程。用清晰的语言描述工作步骤,让代理生成技能,然后直接运行技能。
### 1. 一键设置
Windows PowerShell:
```powershell
powershell -ExecutionPolicy Bypass -File tools\setup.ps1
```
macOS / Linux:
```bash
sh tools/setup.sh
```
设置完成后,打开`config.yaml`并填写`llm.api_key` / `llm.model`。
### 2. 检查准备情况
```bash
python run.py harness/doctor
python run.py harness/runtime --json # 只读代理/运行时上下文
```
修复`FAIL`项。Android/iPhone的`WARN`项是可选的,直到您需要手机自动化。
### 3. 描述工作流并生成技能
使用[工作流模板](docs/workflow-template.zh-CN.md)如果您需要结构,然后运行:
```bash
python run.py harness/agent -- --goal "Plan my described workflow first. Do not submit, publish, or send anything." --dry-run
python run.py harness/agent -- --goal "Run through my described workflow once and export a reusable Skill." --export skills/my_workflow.py
python run.py skills/my_workflow
```
对于浏览器任务,首先启动专用Chrome:
```bash
tools\start_chrome.bat # Windows
sh tools/start_chrome.sh # macOS
```
---
## 与类似工具的区别
| 工具 | 定位 | 限制 |
|---|---|---|
| Playwright / Selenium | 开发人员编写测试脚本 | 需要编码 — 非工程师无法使用 |
| n8n / Zapier | 无代码工作流编排 | 在复杂UI操作或私有系统上会中断 |
| RPA平台(UiPath等) | 企业记录和重放 | 沉重、昂贵、AI能力弱 |
| Claude Computer Use | AI查看屏幕,计算坐标,移动鼠标 | 模型必须每次重新理解UI:每次执行的token成本,LLM从截图中猜测坐标固有不可靠(该项目遇到由Retina坐标系不匹配导致的实际点击错误) |
| **此框架** | AI通过对话生成脚本;脚本按计划运行 | 探索阶段需要Claude API密钥 |
**核心权衡**:使用AI降低编写自动化的门槛,但在执行时绝不依赖AI — 一旦工作流固化,它就是一个普通的脚本:零AI成本,高稳定性。
### vs. Claude Computer Use
一句话:**Computer Use是“AI每次手动执行”;此框架是“AI执行一次(探索),然后交给确定性脚本”**。
Computer Use让模型查看截图,判断坐标并点击鼠标本身 — 一个通用能力,对于真正的一次性任务非常有用,其步骤事先无法确定。但当同一任务重复时(例如每天检查余额,每小时处理审批),让模型每次重新理解UI既消耗token又脆弱:从截图中获取坐标精度有限,物理像素与逻辑像素在Retina显示屏上的不匹配是我们实践中遇到的陷阱。
该框架将能力分为两个阶段。**探索**:AI(截图分析或浏览器DOM操作)一次性确定步骤。**固化**:这些步骤变成一个确定性脚本 — 桌面流程通过图像模板匹配定位元素(`locate_and_click()` in `core/desktop.py`)而不是LLM坐标猜测;浏览器流程使用CSS/XPath选择器而不是视觉。固化后,AI退出舞台:脚本直接进入crontab — 零AI成本,可复制结果,可审查代码。
一个真正的比较:我们的飞书审批自动化首先使用Harness(截图 + LLM坐标点击 — 与Computer Use相同的模式)进行测试,两次失败 — 一次API请求挂起,一次误点击另一个应用由于坐标漂移。重写为具有模板匹配的固定脚本后,相同的审批票据批次通过3/3,18秒内完成,无AI调用。
---
## 工作流
```
描述任务(自然语言)
↓
Claude Desktop + MCP Server
↓ 截图,操作,代码生成
看起来不错? → 保存为技能
↓
python run.py <skill> # 按计划/按需,无AI参与
```
---
## 架构
```
┌──────────────────────────────────────────────────┐
│ 用户(对话/CLI) │
│ Claude Desktop / python run.py <skill> │
├──────────────────────────────────────────────────┤
│ MCP Server mcp_server.py │
│ 对话驱动:NL → Claude → 工具调用 │
│ 可固化:生成的代码保存为技能 │
├──────────┬───────────────────┬───────────────────┤
│ 示范 │ 您的技能 │ 直接脚本 │
│ 示例 │ 从聊天中保存 │ python run.py │
└──────────┴───────────────────┴───────────────────┘
↓
核心 / 连接器(共享基础)
```
---
## 目录布局
```
rpa-everything/
├── core/ # 通用能力层(业务无关)
│ ├── browser.py # 网页自动化(Playwright,重用您登录的Chrome);is_logged_in()用于httpOnly会话cookie
│ ├── intercept.py # 通过fetch/XHR钩子捕获API响应(适用于加载数据通过后台请求的页面)
│ ├── desktop.py # 桌面自动化(macOS:screencapture + pyautogui;Windows:pywinauto)
│ ├── android.py # 通过ADB的安卓自动化(PC操作手机)
│ ├── llm.py # Claude API(决策/内容生成/视觉备用)
│ ├── agent.py # 代理循环(run_browser / run_desktop / run_android)
│ ├── tools.py # 工具模式的单一真相来源(代理循环和MCP Server共享)
│ ├── skills.py # 技能发现和保存(run.py / MCP /生成器共享)
│ ├── config.py # 配置访问(config.yaml + 环境变量)
│ ├── logger.py # 结构化执行日志(自动修剪)
│ ├── notify.py # 失败通知(飞书webhook)
│ └── verify.py # 运行后验证(LLM-as-judge:截图 + SOP → ok/fail)
│
├── connectors/ # 系统连接器(可选)
│ ├── feishu.py # 飞书API
│ └── http.py # 通用HTTP
│
├── harness/ # Harness Agent(高级别目标 → 计划 + 执行)
│ └── agent.py # LLM规划(结构化工具使用输出)→ 并发子代理
│
├── showcase/ # 技能示例(每种技术方法一个,见ARCHITECTURE.md)
│ ├── web/
│ │ ├── extract_table/ # 通用网页表格提取(浏览器DOM)
│ │ ├── click_by_vision/ # 基于视觉的点击(浏览器 + LLM视觉)
│ │ └── xhs/ # 小红书用户/搜索/详情爬取示范
│ ├── app/
│ │ ├── integration/ # MCP / CLI / API直接集成(无屏幕或视觉)
│ │ └── desktop/
│ │ └── template_click/ # 图像模板匹配点击,当没有直接集成时
│ ├── mobile/
│ │ ├── android/
│ │ │ ├── adb_basics/ # 安卓ADB基础:设备,截图,触摸,滑动,推送文件
│ │ │ └── xhs_note/ # 小红书笔记草稿流程:缓慢的ADB步骤,在最终发布前停止
│ │ └── ios/
│ │ └── iphone_assist/ # iPhone准备和证据;最终UI步骤保持手动
│ └── office/ # 纯文件格式操作 — 不需要屏幕,服务器友好
│ ├── excel_toolkit/ # Excel读写(openpyxl)
│ ├── ppt_generator/ # 从结构化内容生成PPT(python-pptx)
│ └── word_report/ # 生成Word文档(python-docx)
│
├── skills/ # 您自己的技能(提交它们或保持私有)
│ └── feishu_project_daily.py # 飞书项目日报(API拦截,按计划)
│
├── assets/ # 桌面自动化图像模板(每个系统一个子目录)
├── sops/ # SOP文档(Harness验证使用;添加您自己的)
│
├── tools/
│ ├── generate_skill.py # 技能生成器(截图 + 描述 → 代码)
│ ├── cron_helper.sh # 生成crontab行(macOS / Linux)
│ ├── cron_helper.ps1 # 生成schtasks命令(Windows)
│ ├── start_chrome.sh # 启动调试Chrome(macOS)
│ └── start_chrome.bat # 启动调试Chrome(Windows)
│
├── logs/ # 执行日志(自动生成,默认30天保留)
├── config.yaml # 配置模板
├── mcp_server.py # MCP Server入口点
├── run.py # 统一运行器(`rpa`命令安装后)
└── pyproject.toml
```
---
## 技能可以在哪里运行:本地 vs. 服务器
不同类型的技能有不同的环境要求:
| 技能类型 | 典型场景 | 服务器友好? | 备注 |
|---|---|---|---|
| **API** | 飞书API,自定义Webhook | ✅ 是 | 纯HTTP,无UI依赖 |
| **办公文件** | Excel/PPT/Word读写 | ✅ 是 | 纯文件格式操作,应用从不打开 |
| **浏览器** | CRM查询,HR系统 | ⚠️ 需要本地Chrome | 取决于您的登录Chrome会话 |
| **桌面** | 飞书/钉钉原生应用 | ❌ 仅限本地 | 需要物理屏幕和前台窗口 |
| **安卓手机** | 手机应用,手机独有流程 | ⚠️ 需要本地ADB连接 | PC通过ADB驱动真实安卓设备 |
**部署建议:**
```
无人值守的定时自动化
→ 仅限API类型技能 → 部署到服务器,通过cron触发
需要UI交互
→ 在本地机器上运行,或专用始终在线的盒子(Mac Mini / Windows PC)
```
混合使用API和UI技能时,拆分流程:本地运行UI步骤,通过API发布结果。
---
## 支持的自动化目标
| 应用类型 | 示例 | 方法 | 模块 |
|---|---|---|---|
| **APIs** | 飞书,自定义HTTP端点 | 直接HTTP调用 | `connectors/` |
| **办公文件** | Excel,PPT,Word报告 | 直接文件格式读写(openpyxl / python-pptx / python-docx),应用从不打开 | `showcase/office/` |
| **网页应用** | CRM,HR系统,校园门户 | Playwright DOM操作 | `core/browser.py` |
| **Electron应用** | 飞书/钉钉桌面 | Playwright通过调试端口 | `core/browser.py` |
| **Windows原生应用** | 本地桌面软件 | pywinauto UI自动化 | `core/desktop.py` |
| **任意桌面应用(备用)** | 飞书,钉钉等 | PyAutoGUI + 图像模板匹配;CJK输入通过剪贴板粘贴 | `core/desktop.py` |
| **安卓应用** | 移动应用,手机独有流程 | ADB截图/触摸/滑动/按键事件/文件推送 | `core/android.py` |
### 元素位置备用链
**浏览器:**
```
CSS/XPath选择器 → 失败 → Claude视觉 → 失败 → 人工确认
毫秒,免费 计费按token 最后手段
```
**桌面:**
```
图像模板匹配(locate_and_click) → 失败 → Claude视觉坐标猜测 → 失败 → 人工确认
免费,确定性,容忍小规模漂移 计费按token,精度较低
```
模板匹配优于LLM坐标猜测:对于稳定外观的按钮/图标(Approve,导航项),拍摄一张截图,将其保存为`assets/<system>/`下的模板,让`core.desktop.locate_and_click()`每次精确找到它 — 无需LLM参与。这也解决了Retina问题,LLM从截图中读取*物理*像素坐标,但点击被解释为*逻辑*像素(`physical_to_logical()` in `core/desktop.py`处理转换,但模板匹配从根源上避免坐标猜测)。
---
## 快速开始
### 1. 安装依赖
**系统需求(超出Python包):**
| 依赖 | 目的 | 是否需要? |
|---|---|---|
| **Google Chrome** | 浏览器技能运行时(重用您的登录会话) | 浏览器技能需要 |
| Python 3.11+ | 运行框架 | 是 |
Chrome:https://www.google.com/chrome/
```bash
pip install -r requirements.txt
playwright install chromium
# 可选:可编辑安装以获取`rpa` CLI入口点
pip install -e .
```
**macOS桌面自动化**(驱动原生应用,如飞书/钉钉)还需:
```bash
# pyautogui需要Homebrew Python 3.11+(系统Python 3.9不工作)
brew install python@3.12
/opt/homebrew/bin/python3.12 -m pip install pyautogui --break-system-packages
```
还需在系统设置中授予终端的屏幕录制权限,隐私和安全。
### 2. 配置
复制`config.yaml`并填写,或使用环境变量:
```bash
export ANTHROPIC_API_KEY=<您的Anthropic API密钥>
```
### 3. 启动Chrome(重用登录会话)
运行启动脚本。**在此浏览器中登录您的目标系统;后续运行无需登录:**
```bash
# macOS
sh tools/start_chrome.sh
# Windows
tools\start_chrome.bat
```
该脚本使用专用配置文件(`~/.chrome-rpa-profile`),因此它永远不会触及您的日常Chrome — 两个可以并行运行。
### 4. 运行技能
```bash
# 列出所有可用技能
python run.py
# 运行演示示例
python run.py showcase/office/excel_toolkit/excel_toolkit -- --read data.xlsx
# 运行您自己的技能
python run.py skills/my_skill
```
### 5. 调度技能
**macOS / Linux**(crontab):
```bash
# 用法:sh tools/cron_helper.sh <技能路径> <cron表达式>
sh tools/cron_helper.sh skills/my_skill "0 9 * * 1-5"
```
脚本打印完整的crontab行(带有PYTHONPATH,python路径和日志重定向) — 通过`crontab -e`粘贴。
**Windows**(任务调度器):
```powershell
# 每天09:00
powershell -File tools\cron_helper.ps1 skills/my_skill 09:00 -Weekdays
# 每30分钟
powershell -File tools\cron_helper.ps1 skills/my_skill -EveryMinutes 30
```
脚本打印完整的`schtasks /Create`命令 — 在提升的PowerShell中运行。
### 6. 生成新技能(无需编码)
```bash
python tools/generate_skill.py
```
打开目标页面 → 描述操作 → AI生成代码 → 保存并运行。
### 7. Harness Agent(探索 → 固化为技能)
Harness是**探索工具,不是生产执行器**。使用它快速验证“可以自动化吗?以及步骤是什么?” — 然后将流程固化为纯技能,按计划运行。固化后,Harness退出画面:后续运行的AI成本为零。
**固化路径:```bash
# 步骤1:查看LLM分解目标,确认方向
python run.py harness/agent -- --goal "extract the table from this page" --dry-run
# 可选:让Agent检查本地准备情况、技能和安全边界,然后规划
python run.py harness/runtime --json
# 步骤2:提供SOP文档;运行后截图根据它进行验证
python run.py harness/agent -- --goal "extract the table from this page" --sop sops/my_task/extract.md
# 步骤3:导出骨架脚本(自动生成,带有结构和TODOs)
python run.py harness/agent -- --goal "extract the table from this page" --export skills/my_task_daily.py
# 步骤4:执行一次,然后导出实际工具调用轨迹作为第一稿技能
python run.py harness/agent -- --goal "extract the table from this page" --export-trace skills/my_task_daily.py
# 可选:返回浏览器登录/MFA的Structured handoff代替等待控制台输入
python run.py harness/agent -- --goal "open my CRM" --handoff-on-login
# 可选:导出可重放的JSON轨迹,然后干运行它
python run.py harness/replay -- --trace data/outputs/trace.json --dry-run
# 可选:运行静态Harness评估集
python evals/run.py
# 可选:运行非破坏性安卓真实设备烟雾测试
python run.py showcase/mobile/android/smoke_test/smoke_test -- --output data/outputs/android_smoke.json
python run.py showcase/mobile/android/smoke_test/smoke_test -- --include-file-check --output data/outputs/android_smoke.json
# 步骤4:打开技能/my_task_daily.py,替换TODO为确定性Playwright代码
# 步骤5:验证
python run.py skills/my_task_daily
```
# 第 6 步:调度它 - Harness 不再需要
sh tools/cron_helper.sh skills/my_task_daily "0 9 * * 1-5"
| | Harness(探索) | 普通技能(生产) |
|---|---|---|
| 步骤来源 | 运行时 LLM 规划 | 硬编码 |
| 执行 | 代理循环,推理每一步 | 确定性脚本 |
| AI 成本 | 每次运行 | 零 |
| 最适合 | 首次演练,可行性检查 | 调度生产运行 |
**扩展 Harness:** 在 `core/capabilities.py` 中添加可重用的代理功能。`showcase/` 和 `skills/` 下的可运行脚本也会自动发现为 `skill:<path>` 功能,因此规划器可以直接调用固化的技能,当目标匹配时。
## 编写新技能
在 `skills/` 下创建一个 `.py` 文件,并包含一个 `main()` 函数:
```python
from core.browser import open_page
from core.logger import SkillLogger
from core.config import get
async def main():
log = SkillLogger("my_skill")
async with open_page(get("systems.crm.url")) as page:
log.step("打开 CRM")
await page.click("text=导出")
log.step("点击导出")
log.finish()
```
### 何时引入 LLM
| 场景 | 方法 |
|---|---|
| 固定流程,稳定页面 | 纯 Playwright,无 LLM |
| 选择器损坏,UI 更改 | `vision.find_element()` → `llm.find_element()` |
| 个性化消息复制 | `llm.generate()` |
| 条件判断,状态识别 | `llm.decide(screenshot)` |
## MCP 服务器 - 基于对话的自动化
MCP 服务器是对话入口:通过与 Claude 交谈来驱动自动化并探索新场景,无需代码。
### 连接到 Claude 桌面版
编辑 `~/.claude/claude_desktop_config.json`(如果丢失则创建):
```json
{
"mcpServers": {
"rpa-everything": {
"command": "python",
"args": ["/absolute/path/to/rpa-everything/mcp_server.py"]
}
}
}
```
重启 Claude 桌面版;`rpa-everything` 工具箱出现在侧边栏表示您已连接。
### 可用工具(34)
浏览器、桌面和 Android 工具共享一个与代理循环(`core/tools.py`)的模式定义,因此它们不会脱节。
**浏览器**
| 工具 | 描述 |
|---|---|
| `browser_navigate` | 打开一个 URL |
| `browser_screenshot` | 截取当前页面的截图 |
| `browser_click` | 点击一个元素(按文本 / CSS 选择器) |
| `browser_type` | 在输入字段中输入内容 |
| `browser_extract_text` | 提取页面文本 |
| `browser_extract_table` | 提取表格(返回 JSON) |
| `browser_evaluate` | 在页面上运行 JavaScript |
**桌面**
| 工具 | 描述 |
|---|---|
| `desktop_screenshot` | 截取整个屏幕的截图 |
| `desktop_click` | 点击屏幕坐标(逻辑像素,Retina 感知) |
| `desktop_type` | 输入文本(CJK 通过剪贴板粘贴) |
| `desktop_hotkey` | 发送键盘快捷键,例如 `command+v`,`ctrl+c` |
| `desktop_find_click` | 截图 → LLM 视觉定位元素 → 点击 |
**Android**
| 工具 | 描述 |
|---|---|
| `android_devices` | 列出连接的 ADB 设备 |
| `android_screenshot` | 截取连接的 Android 设备的截图 |
| `android_tap` | 按像素或归一化屏幕比率点击 |
| `android_dump_ui` | 转储 UIAutomator 节点为 JSON |
| `android_tap_element` | 按文本、资源 ID 或内容描述点击 |
| `android_swipe` | 按像素或归一化屏幕比率滑动 |
| `android_key` | 发送 Android 键事件,例如 `KEYCODE_BACK` |
| `android_type` | 输入文本;`unicode=true` 使用 ADBKeyboard 广播输入,并在可能的情况下恢复原始 IME |
| `android_push_file` | 推送文件到设备,可选触发媒体扫描 |
| `android_diagnostics` | 检查 ADB 可用性、设备状态、硬件序列号、分辨率、截图、UIAutomator、ADBKeyboard 和可选输入/文件推送探针 |
**iPhone**
| 工具 | 描述 |
|---|---|
| `ios_devices` | 列出 `pymobiledevice3` 可见的 iPhone;WiFi 发现是尽力而为 |
| `ios_diagnostics` | 检查 iPhone 半自动化前提条件 |
| `ios_copy_text` | 将文本复制到 iPhone 剪贴板 |
| `ios_launch_app` | 通过包 ID 启动 iPhone 应用,例如 `com.tencent.xin` |
| `ios_screenshot` | 捕获 iPhone 截图作为证据 |
iPhone 路径是半自动化:它可以准备手机、复制文本、打开应用并捕获证据。它不声称远程触摸或最终发布/批准自动化,无需单独验证的 WDA/XCUITest/CoreDevice 触摸路径。
**技能管理**
| 工具 | 描述 |
|---|---|
| `skill_list` | 列出所有可用技能 |
| `skill_run` | 运行已保存的技能 |
| `skill_save` | 将对话生成的代码保存为技能 |
**Harness**
| 工具 | 描述 |
|---|---|
| `orchestrate` | 接受自然语言目标,规划和执行多个技能;支持 `dry_run`(仅规划),`export`(骨架脚本),`export_trace`(实际工具调用的初稿脚本),`sop`(运行后截图验证) |
| `skill_solidify` | 将跟踪 JSON 转换为监督运行的技能,并返回语法检查和审查发现 |
| `run_list` | 列出最近的技能运行或读取一次运行记录 |
| `runtime_snapshot` | 读取本地 Harness 准备情况、可用技能/功能、安全边界和推荐的下一个命令,而不更改本地状态 |
技能运行的工件应默认放置在 `data/outputs/<skill>/<timestamp>/` 下。当另一个系统需要稳定路径时,请使用 `--output <path>`。
### 典型流程
**探索新场景:**
1. 使用启用的 `rpa-everything` 工具打开 Claude 桌面版
2. 描述目标:“检查哪些 CRM 跟进事项今天到期”
3. Claude 截图,操作页面,返回结果
4. 看起来不错?“保存为技能” → 代码存放在 `skills/`
**驱动桌面应用(Feishu 示例):**
```
你:在 Feishu 群组中发布消息:“今日进展更新……”
Claude:desktop_screenshot → 定位输入框 → desktop_click → desktop_type → 截图确认
```
### 安全边界
参见 [SECURITY.md](SECURITY.md) 以获取完整的安全策略:秘密、本地数据、提示词注入、外部副作用、桌面/Android 风险和预提交扫描。
MCP 服务器赋予 LLM 操作您的屏幕和编写及运行代码的能力。这意味着 **它读取的任何内容 - 包括网页内容 - 都可以间接影响其工具调用**(提示词注入)。请记住:
- 当 Claude 在探索过程中操作 **不受信任的网页** 时,请关注它执行的 `skill_save` / `skill_run` 调用 - 不要盲目批准 Claude 桌面版的工具确认对话框
- `skill_save` 只能在 `skills/` 目录中写入;请在运行之前审查保存的代码
- 固化的技能是纯脚本,永远不会触摸 LLM,因此此风险不适用于它们 - 另一个原因说明此框架坚持将探索与生产分离
## Showcase 状态
| 技能 | 方法 | 状态 | 备注 |
|---|---|---|---|
| `showcase/web/extract_table` | 浏览器 DOM | ✅ 可运行 | `--url https://www.w3schools.com/html/html_tables.asp` |
| `showcase/web/click_by_vision` | 浏览器 + LLM 视觉 | ✅ 可运行 | `model: global.anthropic.claude-sonnet-4-6` 在 config.yaml 中 |
| `showcase/web/xhs/user_posts` | 浏览器 DOM 爬取 | ✅ 可运行 | 慢速滚动用户的帖子; `--user-url <URL> --output data/xhs_user.json` |
| `showcase/web/xhs/search_posts` | 浏览器 DOM 爬取 | ✅ 可运行 | 慢速滚动关键词/标签结果; `--keyword "camping" --output data/xhs_search.json` |
| `showcase/web/xhs/post_detail` | 浏览器 DOM 爬取 | ✅ 可运行 | 提取可见文本、图像、视频、互动; `--url <URL>` |
| `showcase/app/desktop/template_click` | 桌面图像模板匹配 | ✅ 可运行 | 当没有 MCP/CLI/API 集成时使用;零 AI 成本; `--template assets/<system>/<button>.png` |
| `showcase/mobile/android/adb_basics` | Android ADB 操作 | ✅ 可运行 | 需要 Android platform-tools / ADB; `--devices`, `--diagnostics`, `--tap-ratio 0.5 0.5` |
| `showcase/mobile/android/xhs_note` | Android ADB 应用流程 | ✅ 可运行 | 慢慢编写 Xiaohongshu 笔记;默认在最终发布前停止; `--profile data/xhs_profile.json --dry-run` |
| `showcase/mobile/ios/iphone_assist` | iPhone 半自动化 | ✅ 可运行 | 可选 `pymobiledevice3`;复制文本、启动应用、截图证据,最终步骤需要手动确认 |
| `showcase/office/excel_toolkit` | 文件格式操作(openpyxl) | ✅ 可运行 | 零 AI 成本,服务器友好; `--read data.xlsx` |
| `showcase/office/ppt_generator` | 文件格式操作(python-pptx) | ✅ 可运行 | 零 AI 成本,服务器友好; `--output out.pptx --data '[...]'` |
| `showcase/office/word_report` | 文件格式操作(python-docx) | ✅ 可运行 | 零 AI 成本,服务器友好; `--output out.docx --title "Title" --data '[...]'` |
| `skills/feishu_project_daily` | 浏览器 API 拦截 | ✅ 可运行 | 需要 Chrome 登录到 Feishu Project;每日计划 |
> 运行浏览器技能前:确保 `sh tools/start_chrome.sh` 启动了 RPA Chrome(不是 Feishu 的 Electron 外壳)。
## 常见问题
**Q:`Chrome 未启动调试端口` 错误**
先运行 `sh tools/start_chrome.sh`,并确认终端打印就绪消息。Feishu 桌面版也占用端口 9222 - 如果它们冲突,请退出 Feishu,然后启动 RPA Chrome。
**Q:`浏览器上下文管理不支持`**
端口 9222 被 Feishu 的 Electron 占用。运行 `lsof -i :9222 | grep LISTEN` 以确认哪个进程拥有它,然后重启 RPA Chrome。
**Q:`click_by_vision` 报告视觉模型错误**
在 config.yaml 中将 `model` 设置为多模态模型。在内部 AI 网关后面:`global.anthropic.claude-sonnet-4-6`;直接 Anthropic 访问:`claude-sonnet-4-6`。
**Q:桌面技能无法找到其元素(新机器/应用重新设计)**
桌面技能通过图像模板匹配定位元素(`assets/<system>/*.png`),而不是硬编码坐标。不同的机器、分辨率或应用重新设计可能会破坏匹配 - 重新捕获模板截图,并参见 [ARCHITECTURE.md](ARCHITECTURE.md) 中的坐标系统陷阱。
## 贡献/开发
```bash
pip install -r requirements-dev.txt # 包括 pytest / ruff
ruff check . # 校验
pytest # 测试(浏览器测试在没有 Chrome 的情况下自动跳过)
```
CI 在每个 PR 上运行校验 + 测试。
`showcase/` 下的技能是通用示例 - **它们的主要价值是结构参考**:用您自己的系统 URL、字段和模板图像替换。要贡献新的技能,请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。
## 平台支持
| 平台 | 状态 |
|---|---|
| macOS | ✅ 支持(Web + API + 桌面控制;需要 Homebrew Python 3.12 + 屏幕录制权限) |
| Windows | ✅ 主要支持(包括 pywinauto 原生窗口控制;通过 cron_helper.ps1 调度) |
| HarmonyOS PC | ⏳ 待评估 |
## 许可证
[MIT](LICENSE)
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器