phone-link-samsung-control

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Phone 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
computer-use
skill and its required docs. Use the JavaScript execution surface that can import
@oai/sky
; if that tool is not currently loaded, search for
node_repl
or Computer Use tools rather than using browser-only automation.
Initialize 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应用之前,加载捆绑的
computer-use
skill及其必需文档。使用能够导入
@oai/sky
的JavaScript执行界面;如果该工具当前未加载,请搜索
node_repl
或Computer Use工具,而不是使用仅浏览器的自动化。
在每个新的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!App
List apps or windows and filter for that app id plus titles such as:
  • YOUR PHONE TITLE
  • Phone Link
  • Einstellungen
Prefer the device window titled
YOUR PHONE TITLE
for touch interaction with the mirrored phone. Use
Phone Link
only for the main app shell, and
Einstellungen
only when the Android Settings app is open inside the mirrored phone.
Known 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
sky
, find the target window again, and re-observe before acting.
Phone Link已在以下原生Windows应用ID下观察到:
text
Microsoft.YourPhone_8wekyb3d8bbwe!App
列出应用或窗口,并过滤出该应用ID以及类似标题:
  • YOUR PHONE TITLE
  • Phone Link
  • Einstellungen
对于与镜像手机的触摸交互,优先选择标题为
YOUR PHONE TITLE
的设备窗口。仅将
Phone Link
用于主应用外壳,仅当镜像手机内打开Android设置应用时才使用
Einstellungen
。
已知可行的选择模式:
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会话丢失状态,请重新初始化
sky
,再次找到目标窗口,并在操作前重新观察。

Act Through Screenshots

通过截图操作

For phone interaction, use screenshots and coordinates against the latest observation. Keep
include_text: false
unless text is necessary and safe to inspect. This avoids exposing private messages, emails, notifications, or app contents.
Before every click, drag, or scroll:
  • Re-observe the relevant Phone Link window if the current screenshot may be stale.
  • Use the
    screenshotId
    from the latest observation.
  • 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
YOUR PHONE TITLE
window. That proved Phone Link accepted touch gestures.
对于手机交互,使用截图和坐标依据最新观察。保持
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主屏幕上的水平拖拽在
YOUR PHONE TITLE
窗口中产生了可见的Android边缘/滑动响应。这证明了Phone Link接受了触摸手势。

Safety 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
~/.config/AgentDesk/workstation/phone-link-guidance.md
when available. If that path is absent, read
~/.config/AgentDesk/workstation-root.txt
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.
Saved 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。