phone-link-samsung-control
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChinesePhone Link Samsung Control
Phone Link 三星手机控制
Use this skill when a task needs direct interaction with a Samsung phone as mirrored through the Windows Phone Link app.
This skill captures a previously tested native Windows control path. The important distinction is that Phone Link is a native Windows app, not a browser tab. Do not conclude that control is unavailable merely because browser tools cannot see it.
当任务需要与通过Windows Phone Link应用镜像的三星手机进行直接交互时,使用此skill。
此skill捕获了一条经过测试的原生Windows控制路径。重要区别在于Phone Link是原生Windows应用,而不是浏览器标签页。不要仅仅因为浏览器工具无法看到它就断定无法控制。
Required Computer Use Setup
必需的Computer Use设置
Before controlling Windows apps, load the bundled skill and its required docs. Use the JavaScript execution surface that can import ; if that tool is not currently loaded, search for or Computer Use tools rather than using browser-only automation.
computer-use@oai/skynode_replInitialize the runtime once per fresh JavaScript session:
js
if (!globalThis.sky) {
const { sky } = await import("@oai/sky");
globalThis.sky = sky;
}
nodeRepl.write("sky initialized");在控制Windows应用之前,加载捆绑的 skill及其必需文档。使用能够导入的JavaScript执行界面;如果该工具当前未加载,请搜索或Computer Use工具,而不是使用仅浏览器的自动化。
computer-use@oai/skynode_repl在每个新的JavaScript会话中初始化运行时一次:
js
if (!globalThis.sky) {
const { sky } = await import("@oai/sky");
globalThis.sky = sky;
}
nodeRepl.write("sky initialized");Find The Phone Link Windows
查找Phone Link窗口
Phone Link has been observed under this native Windows app id:
text
Microsoft.YourPhone_8wekyb3d8bbwe!AppList apps or windows and filter for that app id plus titles such as:
YOUR PHONE TITLEPhone LinkEinstellungen
Prefer the device window titled for touch interaction with the mirrored phone. Use only for the main app shell, and only when the Android Settings app is open inside the mirrored phone.
YOUR PHONE TITLEPhone LinkEinstellungenKnown working selection pattern:
js
globalThis.apps = await sky.list_apps();
const candidates = apps.flatMap(app => app.windows || [])
.filter(w => w.app === "Microsoft.YourPhone_8wekyb3d8bbwe!App" && w.title === "YOUR PHONE TITLE");
if (candidates.length !== 1) {
nodeRepl.write(JSON.stringify(candidates.map(w => ({ id: w.id, app: w.app, title: w.title })), null, 2));
throw new Error(`Expected exactly one selected Phone Link window; found ${candidates.length}`);
}
globalThis.targetWindow = await sky.get_window({ id: candidates[0].id, app: candidates[0].app });
await sky.activate_window({ window: targetWindow });
globalThis.state = await sky.get_window_state({
window: targetWindow,
include_screenshot: true,
include_text: false
});
globalThis.targetWindow = state.window;If the JavaScript session loses state, reinitialize , find the target window again, and re-observe before acting.
skyPhone Link已在以下原生Windows应用ID下观察到:
text
Microsoft.YourPhone_8wekyb3d8bbwe!App列出应用或窗口,并过滤出该应用ID以及类似标题:
YOUR PHONE TITLEPhone LinkEinstellungen
对于与镜像手机的触摸交互,优先选择标题为的设备窗口。仅将用于主应用外壳,仅当镜像手机内打开Android设置应用时才使用。
YOUR PHONE TITLEPhone LinkEinstellungen已知可行的选择模式:
js
globalThis.apps = await sky.list_apps();
const candidates = apps.flatMap(app => app.windows || [])
.filter(w => w.app === "Microsoft.YourPhone_8wekyb3d8bbwe!App" && w.title === "YOUR PHONE TITLE");
if (candidates.length !== 1) {
nodeRepl.write(JSON.stringify(candidates.map(w => ({ id: w.id, app: w.app, title: w.title })), null, 2));
throw new Error(`Expected exactly one selected Phone Link window; found ${candidates.length}`);
}
globalThis.targetWindow = await sky.get_window({ id: candidates[0].id, app: candidates[0].app });
await sky.activate_window({ window: targetWindow });
globalThis.state = await sky.get_window_state({
window: targetWindow,
include_screenshot: true,
include_text: false
});
globalThis.targetWindow = state.window;如果JavaScript会话丢失状态,请重新初始化,再次找到目标窗口,并在操作前重新观察。
skyAct Through Screenshots
通过截图操作
For phone interaction, use screenshots and coordinates against the latest observation. Keep unless text is necessary and safe to inspect. This avoids exposing private messages, emails, notifications, or app contents.
include_text: falseBefore every click, drag, or scroll:
- Re-observe the relevant Phone Link window if the current screenshot may be stale.
- Use the from the latest observation.
screenshotId - Clear or replace stale cached state after the action.
- Re-observe after the action to verify the visible result.
Known working harmless proof action:
js
const observation = globalThis.state;
const screenshotId = observation.screenshots?.[0]?.id;
if (!screenshotId) throw new Error("No screenshotId returned by latest observation");
globalThis.state = null;
await sky.drag({
window: observation.window,
screenshotId,
from_x: 560,
from_y: 1160,
to_x: 120,
to_y: 1160
});
globalThis.state = await sky.get_window_state({
window: observation.window,
include_screenshot: true,
include_text: false
});
globalThis.targetWindow = state.window;In the successful run, this horizontal drag on the Android home screen produced a visible Android edge/swipe response in the window. That proved Phone Link accepted touch gestures.
YOUR PHONE TITLE对于手机交互,使用截图和坐标依据最新观察。保持,除非文本必要且安全检查。这可以避免暴露私人消息、电子邮件、通知或应用内容。
include_text: false在每次点击、拖拽或滚动之前:
- 如果当前截图可能已过期,请重新观察相关的Phone Link窗口。
- 使用最新观察中的。
screenshotId - 在操作后清除或替换过期的缓存状态。
- 在操作后重新观察以验证可见结果。
已知可行的无害验证操作:
js
const observation = globalThis.state;
const screenshotId = observation.screenshots?.[0]?.id;
if (!screenshotId) throw new Error("No screenshotId returned by latest observation");
globalThis.state = null;
await sky.drag({
window: observation.window,
screenshotId,
from_x: 560,
from_y: 1160,
to_x: 120,
to_y: 1160
});
globalThis.state = await sky.get_window_state({
window: observation.window,
include_screenshot: true,
include_text: false
});
globalThis.targetWindow = state.window;在成功运行中,此在Android主屏幕上的水平拖拽在窗口中产生了可见的Android边缘/滑动响应。这证明了Phone Link接受了触摸手势。
YOUR PHONE TITLESafety Boundaries
安全边界
Treat phone control as privacy-sensitive.
- Do not open, read, summarize, or expose private content such as emails, messages, notifications, browsing history, account details, or app contents.
- Do not purchase anything, add items to a cart, enter credentials, approve payments, or approve paid plans.
- Stop and ask before installing third-party apps, granting sensitive permissions, changing account settings, choosing allowed contacts/callers, or changing alarms.
- Prefer harmless system navigation such as Back, Home, Recents, Settings navigation, or empty-area gestures when testing control.
- Avoid actions that could make sound unexpectedly louder, such as disconnecting Bluetooth while media might continue through phone speakers.
将手机控制视为隐私敏感操作。
- 不要打开、阅读、总结或暴露私人内容,如电子邮件、消息、通知、浏览历史、账户详情或应用内容。
- 不要购买任何东西、添加商品到购物车、输入凭据、批准付款或批准付费计划。
- 在安装第三方应用、授予敏感权限、更改账户设置、选择允许的联系人/来电者或更改闹钟之前,请停止并询问。
- 在测试控制时,优先选择无害的系统导航,如返回、主屏幕、最近任务、设置导航或空白区域手势。
- 避免可能导致声音意外变大的操作,例如断开蓝牙而媒体可能继续通过手机扬声器播放。
Personal device and routine context
个人设备与日常习惯上下文
For a user's saved device title and routine preferences, read when available. If that path is absent, read as a plain absolute directory path and load the same filename there. It is private context installed separately; do not publish its values here. If absent, discover the actual window title and ask for only the routine details needed by the current request.
~/.config/AgentDesk/workstation/phone-link-guidance.md~/.config/AgentDesk/workstation-root.txtSaved routine preferences describe intent, not verified current settings. Verify the UI before claiming a schedule, alarm or restriction is configured.
对于用户保存的设备标题和日常习惯偏好,在可用时读取。如果该路径不存在,将作为纯绝对目录路径读取,并在该处加载相同文件名。这是单独安装的私人上下文;请勿在此发布其值。如果不存在,请发现实际窗口标题,并仅询问当前请求所需的日常习惯细节。
~/.config/AgentDesk/workstation/phone-link-guidance.md~/.config/AgentDesk/workstation-root.txt保存的日常习惯偏好描述的是意图,而非已验证的当前设置。在声称已配置日程、闹钟或限制之前,请先验证UI。