名称: turix-mac
描述: 使用 TuriX 实现 macOS 自动化的计算机使用代理(CUA)。当你需要在桌面上执行视觉任务时使用,例如打开应用程序、点击按钮或导航没有 CLI 或 API 的 UI。
此技能允许 Clawdbot 使用 TuriX 计算机使用代理通过视觉方式控制 macOS 桌面。
TuriX 使用一个复杂的多模型系统:
- Brain(大脑):理解任务并生成分步计划
- Actor(执行者):基于视觉理解执行精确的 UI 操作
- Planner(规划器):协调高层次的任务分解(当 use_plan: true 时)
- Memory(记忆):跨任务步骤维护上下文
技能是指导代理执行特定领域任务的 Markdown 剧本:
- github-web-actions:GitHub 导航、仓库搜索、加星标
- browser-tasks:通用网页浏览器操作
- 自定义技能可以添加到 skills/ 目录中
代理可以通过设置一个稳定的 agent_id 来恢复被中断的任务。
skills/local/turix-mac/scripts/run_turix.sh "打开 Chrome 并访问 github.com"
skills/local/turix-mac/scripts/run_turix.sh --resume my-task-001
✅ 注意:
run_turix.sh会为你更新examples/config.json(任务、恢复、use_plan、use_skills)。如果你想保留手动编辑的配置,请跳过传递任务参数,直接编辑examples/config.json。
✅ 好的示例:
- “打开 Safari,访问 google.com,搜索 ‘TuriX AI’,并点击第一个结果”
- “打开系统设置,点击深色模式,然后返回系统设置”
- “打开访达,导航到文稿,并创建一个名为 ‘项目 X’ 的新文件夹”
❌ 避免:
- 模糊的指令:“帮我”或“修复这个”
- 不可能的操作:“删除所有文件”
- 需要系统级权限但未提前告知的任务
💡 最佳实践:
1. 明确指定目标应用程序
2. 将复杂任务分解为清晰的步骤,但不要提及屏幕上的精确坐标。
Cmd+Shift+2 - 立即停止代理日志保存在项目目录的 .turix_tmp/logging.log 中。检查此文件以获取:
- 分步执行详情
- LLM 交互与推理过程
- 错误及恢复尝试
exec 命令在 pty:true 模式下启动始终先设置 PATH:
export PATH="/usr/sbin:$PATH"
cd your_dir/TuriX-CUA
/opt/anaconda3/envs/turix_env/bin/python examples/main.py
为什么? screencapture 工具位于 /usr/sbin/screencapture,它不在默认的 PATH 中。
# 检查进程
ps aux | grep "python.*main" | grep -v grep
# 应该显示类似这样的内容:
# user 57425 0.0 2.4 412396704 600496 s143 Ss+ 5:56PM 0:04.76 /opt/anaconda3/envs/turix_env/bin/python examples/main.py
注意: .turix_tmp 目录可能在 TuriX 开始执行步骤后才会创建。
| 错误 | 解决方案 |
|---|---|
NoneType has no attribute 'save' |
缺少屏幕录制权限。在系统设置中授予权限并重启终端。 |
Screen recording access denied |
运行:osascript -e 'tell application "Safari" to do JavaScript "alert(1)"' 并点击允许 |
Conda environment not found |
确保 turix_env 存在:conda create -n turix_env python=3.12 |
| 模块导入错误 | 激活环境:conda activate turix_env 然后 pip install -r requirements.txt |
| 键盘监听器的权限错误 | 将终端/IDE 添加到 辅助功能 权限中 |
日志默认包含 DEBUG 级别。检查:
tail -f your_dir/TuriX-CUA/.turix_tmp/logging.log
用户请求
↓
[Clawdbot] → [TuriX 技能] → [run_turix.sh] → [TuriX 代理]
↓
┌─────────────────────────┼─────────────────────────┐
↓ ↓ ↓
[规划器] [大脑] [记忆]
↓ ↓ ↓
[执行者] ───→ [控制器] ───→ [macOS UI]
技能是位于 skills/ 目录下带有 YAML 前言(frontmatter)的 Markdown 文件:
---
名称: 技能名称
**描述:** 何时使用此技能
---
# 技能说明
高层次工作流,例如:打开 Safari,然后访问 Google。
规划器根据名称/描述选择相关技能;大脑使用完整内容来指导步骤执行。
| 选项 | 描述 |
|---|---|
use_plan: true |
为复杂任务启用规划 |
use_skills: true |
启用技能选择 |
resume: true |
从之前的中断处恢复 |
max_steps: N |
限制总步骤数(默认:100) |
max_actions_per_step: N |
每步的操作数(默认:5) |
force_stop_hotkey |
停止代理的自定义快捷键 |
TuriX 支持 技能:帮助代理在特定领域更可靠地行为的 Markdown 剧本。
| 技能 | 用途 |
|---|---|
github-web-actions |
GitHub 网页操作(搜索仓库、加星标等) |
在 TuriX 项目的 skills/ 目录中创建一个 .md 文件:
---
名称: 我的自定义技能
**描述:** 当执行 X 特定任务时
---
# 自定义技能
## 指南
- 步骤 1:首先做这个
- 步骤 2:然后做那个
- 步骤 3:验证结果
字段定义:
- name:技能标识符(规划器用于选择)
- description:何时使用此技能(规划器据此匹配)
- 正文部分:完整的执行指南(大脑使用)
在 examples/config.json 中:
{
"agent": {
"use_plan": true,
"use_skills": true,
"skills_dir": "skills",
"skills_max_chars": 4000
}
}
skills/local/turix-mac/scripts/run_turix.sh "在 GitHub 上搜索 turix-cua 并为其加星标"
代理将自动:
1. 规划器读取技能名称和描述
2. 选择相关技能
3. 大脑使用完整的技能内容来指导执行
背景:
通过 shell 插值传递中文文本可能会破坏 UTF-8 编码,并且将不受信任的文本插值到 heredoc 中是不安全的。
解决方案:
run_turix.sh 脚本使用 Python 正确处理 UTF-8,并从环境变量中读取任务文本:
import json
# 使用 UTF-8 读取
with open(config_path, 'r', encoding='utf-8') as f:
data = json.load(f)
# 写入时不转义非 ASCII 文本
with open(config_path, 'w', encoding='utf-8') as f:
json.dump(data, f, indent=2, ensure_ascii=False)
关键点:
1. 读写文件时始终使用 encoding='utf-8'
2. 使用 ensure_ascii=False 来保留非 ASCII 文本
3. 通过环境变量或 stdin 传递任务内容,并使用单引号 heredoc 以避免 shell 插值
挑战:
- 要求 TuriX 收集新闻,然后直接创建并发送文档
- TuriX 是一个 GUI 代理,因此可能较慢且确定性较低。建议仅在 Clawdbot 无法完成或 TuriX 更快的情况下使用 TuriX。
推荐方法: 自己创建文档,只让 TuriX 发送它
1. 使用 python-docx 创建 Word 文档
2. 只让 TuriX 发送文件
from docx import Document
doc = Document()
doc.add_heading('标题')
doc.save('/path/to/file.docx')
建议工作流:
1. 使用 web_fetch 收集信息
2. 使用 Python 创建 Word 文档
3. 使用 TuriX 发送文件。指定文件路径并说明发送文件,而不仅仅是文件名。
4. 如果你确实需要 TuriX 手动创建 Word 文档并输入收集的信息,请将内容放在 turix 技能中(对于大量内容)或任务名称中(对于少量内容)。
创建 skills/browser-tasks.md:
---
名称: browser-tasks
**描述:** 当在网页浏览器中执行任务时(搜索、导航、填写表单)。
---
# 浏览器任务
## 导航
- 使用地址栏或搜索框进行导航
- 为每个不同的任务打开新标签页
- 等待页面完全加载后再继续
## 表单
- 点击输入框以获取焦点
- 清晰地输入内容
- 寻找提交/按钮以完成操作
## 安全
- 提交表单前进行确认
- 未经用户许可不要下载文件
# 在后台运行(推荐)
cd your_dir/clawd/skills/local/turix-mac/scripts
./run_turix.sh "你的任务描述" --background
# 或者使用 timeout 设置最大运行时间
./run_turix.sh "任务" &
方法 1:会话日志
# 列出正在运行的会话
clawdbot sessions_list
# 查看历史记录
clawdbot sessions_history <session_key>
方法 2:TuriX 日志
# 实时跟踪日志
tail -f your_dir/TuriX-CUA/.turix_tmp/logging.log
# 或者检查已完成的步骤文件
ls -lt your_dir/TuriX-CUA/examples/.turix_tmp/brain_llm_interactions.log_brain_*.txt
方法 3:检查进程
ps aux | grep "python.*main.py" | grep -v grep
方法 4:检查生成的文件
# 列出代理创建的文件
ls -la your_dir/TuriX-CUA/examples/.turix_tmp/*.txt
| 文件 | 描述 |
|---|---|
logging.log |
主日志文件 |
brain_llm_interactions.log_brain_N.txt |
大脑模型的对话(每步一个) |
actor_llm_interactions.log_actor_N.txt |
执行者模型的对话(每步一个) |
关键日志标记:
- 📍 步骤 N - 新步骤开始
- ✅ 评估:成功/失败 - 当前步骤评估
- 🎯 本步骤要实现的目标 - 当前目标
- 🛠️ 操作 - 已执行的操作
- ✅ 任务成功完成 - 任务完成
| 问题 | 检查项 |
|---|---|
| 进程无响应 | ps aux | grep main.py |
| 卡在步骤 1 | 检查是否创建了 .turix_tmp/ |
| 模型加载缓慢 | 首次运行可能需要 1-2 分钟加载模型 |
| 无日志输出 | 检查 config.json 中的 logging_level |
快捷键:Cmd+Shift+2 - 立即停止代理
命令:
pkill -f "python examples/main.py"
完成后,代理将:
1. 在 .turix_tmp/ 中创建交互日志
2. 创建记录文件(如果使用了 record_info)
3. 在内存中保留屏幕截图供后续步骤使用
示例:查看摘要文件
cat your_dir/TuriX-CUA/examples/.turix_tmp/latest_ai_news_summary_jan2026.txt
brain_llm_interactions.log_brain_*.txt 中的 analysis 和 next_goalactor_llm_interactions.log_actor_*.txt 中的操作record_info 将关键信息保存到 .txt 文件中# 1. 运行任务
./run_turix.sh "搜索 AI 新闻并总结" &
# 2. 等待几秒并检查进程
sleep 10 && ps aux | grep main.py
# 3. 检查是否正在创建日志
ls -la your_dir/TuriX-CUA/examples/.turix_tmp/
# 4. 实时跟踪进度
tail -f your_dir/TuriX-CUA/.turix_tmp/logging.log
# 5. 检查当前步骤数
ls your_dir/TuriX-CUA/examples/.turix_tmp/brain_llm_interactions.log_brain_*.txt | wc -l