把一台真实的 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
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 15 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
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.*
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Void-LifeStream/dsh-phone-butler
把一台真实的 Android 手机,变成智能体可以查看和打理的一台设备 —— 全部走 adb,不需要 root。
相关插件 · 视觉能力
智能体工作台Devin-AXIS/iPolloWork
企业级、本地优先的智能体工作台,面向个人和智能体团队——一个工作区,容纳多个智能体引擎;一套统一体系,管理插件和技能;支…
★ 7,332已汉化DSH
72
开源设计工作台nexu-io/open-design
OpenDesign:首个协作式 AI 设计智能体工作区
★ 105,153已汉化DSH
71.8
多智能体编码工作区spacering-net/codeg
多智能体协作的 AI 编程工作区:汇总 Claude Code、Codex、OpenCode、Pi、Grok Build 等来源的会话。支持桌面应用、自托管服务器或 Docker。
★ 4,244已汉化DSH
71.6
GPT 图像提示词库freestylefly/awesome-gpt-image-2
Prompt as Code | GPT Image 2 / 2.5 提示词与案例库,530+ 个案例、20+…
★ 34,534已汉化DSH
71.5
架构图生成器tt-a1i/archify
把你想理解、规划或分享的事,变成可以互动的可视化作品。
★ 92,046已汉化DSH
71.1
AI 用量桌面小部件Javis603/token-monitor
EN | 简 | 繁 | KO | JA | PT
★ 3,480已汉化DSH
71