iOS自动化技能库

mirroir-skills是一个社区驱动的iOS自动化技能和模式库,为mirroir-mcp提供AI驱动的真实设备自动化能力,通过声明式模式和命令式技能实现跨应用工作流。

  • by jfarcand
  • Python
  • 本地部署
  • 9 星标
  • 更新于
在 GitHub 查看 jfarcand/iphone-mirroir-scenarios

使用说明

mirroir技能

社区市场 模式 和 技能 为了 mirroir mcp --AI驱动的真正iOS设备自动化。

模式vs技能

mirroir使用了两个互补的概念:

  • 模式 (声明性)-教mirroir iOS应用程序是什么样子以及它们的行为方式。只读知识。
  • 技能 (势在必行)——人工智能执行的循序渐进的流程。行动。

模式有三种尺度——相同的概念,不同的粒度:

比例 描述内容 位置
元素模式 行级UI组件(表行、选项卡栏、按钮) patterns/elements/
屏幕图案 根据元素组合(仪表板、提要)筛选原型 patterns/screens/
应用程序模式 应用级结构、障碍、跳过列表(App.md) patterns/apps/
mirroir-skills/
├── patterns/
│   ├── elements/    # 34 iOS UI element definitions
│   ├── screens/     # 7 screen archetype recipes
│   └── apps/        # APP.md app descriptions
├── skills/
│   ├── apps/        # Per-app automation flows
│   ├── workflows/   # Cross-app sequences
│   └── testing/     # Test flows
└── legacy/          # Old YAML skills (deterministic runners)

APP.md——描述你的应用程序

你能贡献的最有影响力的东西是你最喜欢的iOS应用程序的APP.md。告诉mirroir这个应用程序是什么,危险在哪里,以及会遇到什么障碍:

---
version: 1
app: Santé
locale: fr_CA
archetype: dashboard
obstacle_mode: auto
---

## Structure
Dashboard with 4 tabs: Résumé, Partage, Parcourir, Profil.

## Résumé Tab
- Summary cards for health metrics that drill down to charts

## Obstacles
- Health Access permission → tap "Autoriser"
- Notification permission → tap "Ne pas autoriser"

## Skip
- Supprimer les données de Santé
- Réinitialiser

这 archetype field告诉mirroir应用程序如何导航(dashboard, social-feed, settings-list, content-grid, conversation-list, utility-display, detail-form).在探索过程中,障碍物会自动排除。跳过元素永远不会被点击。结构作为AI上下文注入到生成的技能中。

什么是技能?

技能将多步骤iOS自动化描述为 意图,而不是脚本。像“点击电子邮件”这样的步骤并没有硬编码坐标——人工智能通过OCR找到元素,并适应屏幕布局、本地化和意外对话框。

主要格式为 技能.md --带有YAML前端的markdown文件:

---
version: 1
name: Send Slack Message
app: Slack
tags: ["slack", "messaging"]
---

Send a direct message to a contact in Slack.

## Steps

1. Launch **Slack**
2. Wait for "Home" to appear
3. Tap "Direct Messages"
4. Tap "${RECIPIENT}"
5. Tap "Message"
6. Type "${MESSAGE:-Hey, just checking in!}"
7. Press **Return**
8. Screenshot: "message_sent"
Legacy YAML format (used by mirroir test and mirroir compile)
name: Send Slack Message
app: Slack
description: Send a direct message to a contact in Slack

steps:
  - launch: "Slack"
  - wait_for: "Home"
  - tap: "Direct Messages"
  - tap: "${RECIPIENT}"
  - tap: "Message"
  - type: "${MESSAGE:-Hey, just checking in!}"
  - press_key: "return"
  - screenshot: "message_sent"

YAML文件位于 legacy/ 目录。它们被确定性使用 mirroir test 和 mirroir compile 需要结构化步骤定义的CLI工具。使用 mirroir migrate 将YAML转换为SKILL.md格式。

安装

克劳德代码

claude plugin marketplace add jfarcand/mirroir-skills
claude plugin install skills@mirroir-skills

GitHub Copilot命令行界面

copilot plugin marketplace add jfarcand/mirroir-skills
copilot plugin install skills@mirroir-skills

两者都安装 技能.md 它教AI如何解释和执行技能步骤。

手册(所有其他客户)

克隆到您的全局技能目录:

git clone https://github.com/jfarcand/mirroir-skills ~/.mirroir-mcp/skills

或者放入项目本地目录:

git clone https://github.com/jfarcand/mirroir-skills .mirroir-mcp/skills

这两条路径都由递归扫描 list_skills.

可用技能

应用技能

技能 描述
skills/apps/appstore/install-app 在app Store中搜索并安装应用程序
skills/apps/calendar/create-event 创建新的日历事件
skills/apps/calendar/check-today 使用以下方式阅读今天的活动 remember 提取会议详细信息
skills/apps/clock/set-alarm 创建新警报
skills/apps/clock/set-timer 启动倒计时器并验证其是否正在运行
skills/apps/mail/email-triage 检查收件箱中是否有未读电子邮件——根据内容存档或标记
skills/apps/mail/batch-archive 将所有未读电子邮件循环存档,直到收件箱为空
skills/apps/maps/save-directions 搜索目的地,获取路线,提取旅行时间 remember
skills/apps/photos/share-recent 长按最近的照片并通过消息分享
skills/apps/settings/check-about 通过以下方式提取设备型号、iOS版本和存储 remember
skills/apps/settings/check-about-fr 与检查相同,但适用于法国地区(Réglages)
skills/apps/settings/list-apps 从iPhone存储中列出已安装的应用程序大小
skills/apps/settings/uninstall-app 通过“设置”>“通用”>“iPhone存储”删除应用程序
skills/apps/slack/send-message 向联系人发送DM
skills/apps/slack/check-unread 使用频道名称和消息预览读取未读通知
skills/apps/weather/check-forecast 提取当前状况和10天预测 remember
skills/apps/weather/add-city 将城市添加到天气

测试

技能 描述
skills/testing/expo-go/login-flow 使用条件分支对注册与现有帐户进行测试登录
skills/testing/expo-go/shake-debug-menu 通过shake打开React Native调试菜单
skills/testing/expo-go/qa-smoke-pack 视觉回归测试——截图关键屏幕和使用 remember 检测UI异常

工作流

技能 描述
skills/workflows/morning-briefing 阅读天气+日历,撰写并通过iMessage发送晨间总结
skills/workflows/commute-eta-notify 从Waze获取预计到达时间,通过消息发送给你的老板
skills/workflows/standup-autoposter 从日历中阅读今天的会议,在Slack上发布会议记录

工作流演示 跨应用数据提取 --AI从一个应用程序中读取动态内容,并将其组合成另一个应用中的动作。这是只有AI执行者才能做到的。

变量替换

技能使用 ${VAR} 从环境变量中解析出占位符。使用 ${VAR:-default} 用于回退值。

# Set credentials for testing skills
export TEST_EMAIL=user@example.com
export TEST_PASSWORD=secret

# Or use direnv
echo 'export TEST_EMAIL=user@example.com' >> .envrc
direnv allow

没有默认值的未求解变量保持不变——人工智能将在继续之前询问值。

条件

技能支持分支 condition 步骤。AI检查屏幕并执行匹配的分支:

steps:
  - launch: "Mail"
  - wait_for: "Inbox"
  - condition:
      if_visible: "Unread"
      then:
        - tap: "Unread"
        - tap: "Archive"
        - assert_visible: "Archived"
      else:
        - screenshot: "empty_inbox"

条件步骤包括:

  • if_visible 或 if_not_visible --屏幕上要检查的标签
  • then (必填)--条件为真时运行的步骤
  • else (可选)--条件为false时运行的步骤

分支内的步骤是常规步骤,包括嵌套条件。看 skills/apps/mail/email-triage.md 举个完整的例子。

重复

技能支持循环 repeat 步骤。AI在每次迭代前检查屏幕状态:

steps:
  - launch: "Mail"
  - wait_for: "Inbox"
  - repeat:
      while_visible: "Unread"
      max: 10
      steps:
        - tap: "Unread"
        - tap: "Archive"
        - tap: "< Back"
        - wait_for: "Inbox"

重复步骤有:

  • 循环模式 (正好一个): while_visible, until_visible,或 times
  • max (必填)——安全界限,防止无限循环
  • steps (必需)--运行每次迭代的步骤

看 skills/apps/mail/batch-archive.md 举个完整的例子。

从YAML迁移

这 mirroir migrate 命令将YAML技能转换为SKILL.md格式:

mirroir migrate apps/settings/check-about.yaml           # single file
mirroir migrate --dir ../iphone-mirroir-skills/apps       # entire directory
mirroir migrate --dry-run apps/mail/email-triage.yaml     # preview without writing

旧的YAML文件存在于 legacy/ 目录,并保持确定性的可访问性 mirroir test 和 mirroir compile CLI工具。

验证

运行验证脚本以检查必填字段、有效元数据和正确变量语法的所有技能:

python3 scripts/validate-skills.py

这将验证SKILL.md文件(在 skills/)以及传统的YAML文件(in legacy/).APP.md文件是模式,不是技能,会被跳过。它通过GitHub Actions在推送和PR上自动运行。

贡献

欢迎投稿!提交pull请求或补丁,即表示您同意 贡献者许可协议您的Git提交元数据(姓名和电子邮件)用作您的电子签名,无需单独签名。

CLA确保项目可以在一致的许可证下长期维护。您保留对您的贡献的完全所有权——CLA只是授予维护者将其作为项目的一部分分发的权利。

如何做出贡献

  1. 复刻此仓库
  2. 在相应的目录中创建文件:
    • patterns/apps/<app-name>/APP.md --描述应用程序(结构、障碍、原型)
    • patterns/elements/ --新UI组件的元素模式
    • patterns/screens/ --屏幕原型食谱
    • skills/apps/<app-name>/ --单应用程序自动化
    • skills/testing/<framework>/ --移动测试和QA
    • skills/workflows/ --跨应用程序提取数据的多应用程序序列
  3. 使用SKILL.md格式:
    ---
    version: 1
    name: Human-readable name
    app: App Name
    ios_min: "17.0"
    locale: "en_US"
    tags: ["app-name", "category", "action-type"]
    ---
    
    What this skill does.
    
    ## Steps
    
    1. Launch **App Name**
    2. Wait for "Expected Element" to appear
    3. Tap "Element Label"
    4. Type "${VAR:-sensible default}"
    5. Verify "Success Indicator" is visible
    6. Screenshot: "result"
    
  4. 使用 ${VAR:-default} 对于可配置的值,永远不要硬编码凭据
  5. 至少包括一个“验证”步骤,以便技能能够自我验证
  6. 提交拉取请求

许可证

Apache 2.0——请参阅 许可证。参见 贡献者许可协议 对于贡献者条款。