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-skillsGitHub 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: "/APP.md` --描述应用程序(结构、障碍、原型)
- `patterns/elements/` --新UI组件的元素模式
- `patterns/screens/` --屏幕原型食谱
- `skills/apps//` --单应用程序自动化
- `skills/testing//` --移动测试和QA
- `skills/workflows/` --跨应用程序提取数据的多应用程序序列
1. 使用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"
1. 使用 `${VAR:-default}` 对于可配置的值,永远不要硬编码凭据
1. 至少包括一个“验证”步骤,以便技能能够自我验证
1. 提交拉取请求
## 许可证
Apache 2.0——请参阅 [许可证](LICENSE)。参见 [贡献者许可协议](CLA.md) 对于贡献者条款。