🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

安卓手机管家 Void-LifeStream/dsh-phone-butler

DeepSeek Harness
Void-LifeStream15 天前有提交已提供中文文档扫描:含敏感能力

把一台真实的 Android 手机,变成智能体可以查看和打理的一台设备 —— 全部走 adb,不需要 root。

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/17 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Void-LifeStream/dsh-phone-butler
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么
dsh 原生插件 · vision
装得上吗
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 15 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件
查看扫描证据(共 8 处,展示前 8 条)
  • 写入本地文件
    lib/entry.js:45
    await mkdir(join(dir, 'phone'), { recursive: true });
  • 写入本地文件
    lib/entry.js:46
    await appendFile(file, `${new Date().toISOString()} ${line}\n`, 'utf8');
  • 读取本地文件
    lib/entry.js:48
    const st = await stat(file).catch(() => null);
  • 读取本地文件
    lib/entry.js:50
    const kept = (await readFile(file, 'utf8')).split('\n').slice(-200).join('\n');
  • 写入本地文件
    lib/entry.js:51
    await writeFile(file, kept, 'utf8');
  • 读取本地文件
    lib/entry.js:107
    content: stripFrontmatter(await readFile(locator, 'utf8')),
  • 写入本地文件
    lib/entry.js:519
    await mkdir(join(homedir(), 'phone-shots'), { recursive: true }).catch(() => {});
  • 执行外部命令来自配置/变量
    lib/adb.js:84
    const r = spawnSync(this.adb, args, {
扫描于 2026/10/31(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

DeepSeek Harness 插件:把真机 Android 手机当作设备,让智能体通过 adb 检查并清理,无需 root。

README

由 DeepSeek 最新模型翻译生成
dsh-phone-butler 把一台真实的 Android 手机,变成智能体可以查看和打理的一台设备 —— 全部走 adb,不需要 root。 一个 DeepSeek Harness 插件,让智能体够得着一台真实的 Android 手机:腾出存储空间、找出谁在吃磁盘、度量目录、清掉 App 缓存又不碰它的数据、卸载、截图。 phone_status is a phone reachable, and what is it phone_scan read-only: cleanup survey · per-app data sizes · caches · usage · big files phone_fs ls / du on /sdcard phone_act the only writer: clear-cache · rm · uninstall (each gated by confirm=true) phone_shot screenshot to a local file 外加一个随插件附带的技能 phone-butler:能力地图、连接配方,以及五个曾产出错误答案的坑。 为什么值得存在 「手机空间满了」这件事,通常被三个互相矛盾的印象搅在一起:文件管理器说能清,系统设置说腾不出空间,而真正的元凶躺在一个看不见的目录里。
展开完整文档(README 剩余 1 节)
dsh-phone-butler

把一台真实的 Android 手机,变成智能体可以查看和打理的一台设备 —— 全部走 adb,不需要 root。

一个 DeepSeek Harness 插件,让智能体够得着一台真实的 Android 手机:腾出存储空间、找出谁在吃磁盘、度量目录、清掉 App 缓存又不碰它的数据、卸载、截图。

phone_status is a phone reachable, and what is it
phone_scan read-only: cleanup survey · per-app data sizes · caches · usage · big files phone_fs ls / du on /sdcard phone_act the only writer: clear-cache · rm · uninstall (each gated by confirm=true) phone_shot screenshot to a local file

外加一个随插件附带的技能 phone-butler:能力地图、连接配方,以及五个曾产出错误答案的坑。

为什么值得存在

「手机空间满了」这件事,通常被三个互相矛盾的印象搅在一起:文件管理器说能清,系统设置说腾不出空间,而真正的元凶躺在一个看不见的目录里。

这个插件做两件具体的事:

1. 把可清理的与不可清理的分开说。 /sdcard 全层(含每个 App 的 Android/data 与 Android/obb)可读写;/data/data 未 root 一律碰不到 —— 那是聊天数据库住的地方。把这两层混为一谈,是大多数「手机管家」话术的来源。
2. 让那层碰不到的东西至少可以被度量。 phone_scan kind=apps 解析 dumpsys diskstats 的并列数组,未 root 也能列出每个 App 的私有数据大小(它同时覆盖 /data/data 与外部 Android/data)。所以「到底是哪个 App 吃掉了手机」有了确定答案,而不是靠猜。

安装

在 DSH 里,用官方的 bundle 安装姿势指向本目录(或它的克隆):

plugin_manager action: install_bundle target: <本目录绝对路径>

它需要 adb:在 PATH 里,或用 DSH_PHONE_ADB 指向具体可执行文件,或放在 Android SDK 的常规位置。可选配置(在配置档的 cordis.patch.yml 里覆盖):

- id: dsh-phone-butler
config:
adbPath: 'C:\platform-tools\adb.exe'
timeoutMs: 240000

安全立场(这是设计里最要紧的部分)

- 读永远不改动任何东西。
- 写必须显式 confirm: true;否则工具什么都不执行,只返回它本来会执行的计划 —— 把计划摆给用户看、得到同意,再发一次。
- rm 只接受 /sdcard 之下的路径,其它一律拒绝(含测试断言)。
- 扫描默认不列文件名。 一份来自某人 Download 文件夹的文件清单默认是隐私;names: true 是一次明确的索要。
- Android 没有回收站。 rm 就是最终结果。

能力边界(实测,不是推测)

| 层 | 能否触达 | 说明 |
| /sdcard/ | 可以,读写皆可** | 含每个 App 的 Android/data、Android/obb |
| /data/data/<pkg> | 不可以 | 未 root Permission denied;run-as 拒绝非 debuggable 包 |
| 每个 App 的数据大小 | 可以 | dumpsys diskstats(覆盖私有层) |
| 只清缓存 | 可以 | pm clear --cache-only <pkg>,数据保留 |
| 清空 App 数据 | 技术上可以,但会毁数据 | 本插件故意不暴露 |

连接手机(最容易踩空的一段)

有两条互相独立的通道,行为完全不同:

| 通道 | 绑在哪 | 离开 Wi-Fi 还活着吗 |
| 无线调试(Android 11+) | WLAN(开关原文:「连接到 WLAN 后启用调试模式」) | 不活 —— 关掉 Wi-Fi,adbd 就不再监听 |
| adb tcpip 5555 | adbd 进程本身,监听 0.0.0.0:5555 | 活着 —— 远程能力就靠这个 |

所以想让不在同一网络的手机可达:先在同一个 Wi-Fi 下执行一次 adb tcpip 5555;此后手机一直听着 5555,任何能路由到它地址的人(例如经过 Tailscale 这类 VPN)都能 adb connect <手机地址>:5555 连上。手机重启后失效,需要重做。

找无线调试端口:adb mdns services 会直接打印 IP:端口。

五个会产出错误结论的坑

1. find /sdcard 静默返回空。 /sdcard 是符号链接(/sdcard → /storage/self/primary → /storage/emulated/0),toybox 的 find 默认不跟随。结果是一份空列表和退出码 0 —— 与「这台手机很干净」完全无法区分。必须 find -H /sdcard。 有一次「没有大文件、没有空目录」的报告就是这么来的,而那台手机两样都有几千个。
2. 别把带双引号的命令经 PowerShell 递给 adb shell。 引号会被吃掉,管道错位,得到一个静默的空结果。用 argv 数组传参。
3. 推到手机上的脚本必须是 LF 换行。 CRLF 会让 shell 报 id\r: inaccessible or not found。
4. 全黑的截图是锁屏,不是抓取失败 —— 比文件大小(约 18 KB 黑屏 vs 几 MB 有内容),或查 dumpsys power。
5. 别从截图里读路径。 OCR 会混淆 l/1、I/1。问设备:pm path <包名>。

一条共存提醒

如果同一台电脑上有多个智能体,它们共用同一个 adb server。adb kill-server 会把所有人一起断掉;只断自己那条,用 adb disconnect <地址>。

开发

node test/selftest.mjs # 离线断言(纯函数 + 引擎安全语义 + 注册形状)
node test/selftest.mjs --device # 另跑一轮真实的只读调用

lib/adb.js 是纯 Node,不从 DSH 导入任何东西 —— 所以引擎可以脱离 harness 直接测试。
lib/entry.js 同样零 DSH 导入:一个装在配置档之外的 link: 插件无法解析 @deepseek-ai/,一次这样的 import 就会让整个入口加载失败。

License

MIT © 2026 Void-LifeStream

Tested against a Xiaomi HyperOS device running Android 17 with an unrooted adb shell; the
limits above were measured there rather than assumed.*
预览分享卡片长什么样 ↓Void-LifeStream/dsh-phone-butler
分享 · DeepSeek Harness Hub
Void-LifeStream/dsh-phone-butler

把一台真实的 Android 手机,变成智能体可以查看和打理的一台设备 —— 全部走 adb,不需要 root。

回到顶部