dsh-dot-life
Verifieddsh-dot-life · v0.10.16 · AGPL-3.0-only · Web UI
dot — a character who lives on her own phone, for DeepSeek Harness (dsh): an Android phone the plugin installs and runs, her own QQ, memory and a diary from real events, a life between conversations (幕间, after HDS-Interlude), an optional microVM computer
Install
dsh plugin add dsh-dot-life Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Tags
Creators
Readme
dsh-dot
English | 中文
A character who lives on her own phone, for DeepSeek Harness (dsh). She has her own Android phone (this plugin installs and runs it), her own accounts, her own days: between your conversations she keeps living — writes what happened, goes to look at things she is curious about on her phone, and sometimes has a real reason to message you. You are one of her contacts on QQ / WeChat / Feishu…; dsh-im carries the chat. If you also want her to work — shell, scripts, a desktop browser, scheduled jobs — give her the optional computer.
One plugin, six components (living next to other dsh plugins: see 「与其他插件共存」 in the Chinese section):
| Component | What it is | Needs |
|---|---|---|
dsh-dot/phone |
Her phone: an Android emulator the plugin downloads (emulator + platform-tools + one system image, ~2 GB, after you accept the SDK license), boots, keeps alive and exposes as mcp__dot-phone__* (mobile-mcp over adb). The emulator window is the live view; her apps and logins live in the AVD and survive restarts. DSH_DOT_PHONE=off turns it off. Details |
hardware virtualization (Apple silicon or Intel Mac, Linux with KVM, Windows with WHPX) |
dsh-dot/interlude |
幕间, after HDS-Interlude: the Canon (persona; HDSI presets by share code) as a prompt section; a life between conversations — script, continuity, intents; going to look at things on her phone or in her browser (read-only, no approvals); optional proactive contact. DSH_DOT_INTERLUDE=off turns it off. Details |
— |
dsh-dot/qq |
Her QQ on her computer: NapCat or SnowLuma (OneBot 11, /qq backend) inside the computer VM, the same account as the QQ app on her phone; messages wake her the moment they arrive, she answers with qq_send. DSH_DOT_QQ=off turns it off. Details |
the computer component |
dsh-dot/memory |
What she remembers: you, her own notes, the people she meets, what happened; hands her conversation over to a fresh session past 150k tokens. DSH_DOT_MEMORY=off turns it off. Details |
— |
dsh-dot/dot |
The contact layer: scheduled results → IM unless the reply is DOT_SILENT, approval and device notices on IM, working rules as a prompt section. DSH_DOT_CONTACT=off turns it off |
dsh-im for IM; dsh's built-in schedule service |
dsh-dot/computer (optional) |
A bundled microVM (no Docker needed) with shell, browser, desktop, live view, approval gates and an audit log — the isolation boundary for work. DSH_DOT_COMPUTER=off turns it off. Details |
microsandbox (bundled) or Docker |
dsh plugin --profile desktop add dsh-dot-life @xmanrui/dsh-im # npm; or github:Kevinwu901113/dsh-dot for the source
# then, in dsh: /phone accept (Android SDK license → the phone installs itself)
# /interlude preset 6QA0-1PD6 (a persona from the HDSI hub; pick your own on typ0.space)
History: dsh-computer (v0.1–0.5) and dsh-interlude were separate plugins; since dsh-dot v0.3/v0.4 they are components here with their git history merged. Nothing user-facing changed for them.
中文说明
dsh-dot 让 dsh 里住进一个在自己手机上过日子的角色。她有自己的安卓手机(插件自己装、自己开)、自己的账号、自己的作息:你们不聊天的时候她也在过日子——把发生的事写下来、拿起手机去看她好奇的东西、偶尔有个真实的理由找你说句话。你是她 QQ / 微信 / 飞书里的一个联系人(dsh-im 负责通道)。想让她也能干活——shell、脚本、桌面浏览器、定时任务——再给她那台可选的电脑。
一、组成:一个插件、六个组件
| 组件 | 是什么 | 依赖 |
|---|---|---|
dsh-dot/phone 她的手机 |
Android 模拟器。插件自己从 Google 仓库下载模拟器、platform-tools 和一个系统镜像(约 2 GB,先要你接受 SDK 许可),自己写 AVD(不需要 Java / Android Studio),开机、保活,以 mcp__dot-phone__* 暴露给模型(mobile-mcp 走 adb)。模拟器窗口就是实时画面;App 和登录态在 AVD 里,重启不丢。DSH_DOT_PHONE=off 关掉。详见 docs/phone.md |
硬件虚拟化:Apple silicon / Intel Mac,Linux 要 KVM,Windows 要 WHPX |
dsh-dot/interlude 幕间 |
按 HDS-Interlude:Canon(人设,HDSI 分享码导入)作为系统提示的一段;两次对话之间的生活——剧本、连续性、打算;想看什么就拿手机(或电脑浏览器)去看,只读、无审批;可选的主动联系。DSH_DOT_INTERLUDE=off 关掉。详见 docs/interlude.md |
— |
dsh-dot/qq 她电脑上的 QQ |
NapCat 或 SnowLuma(OneBot 11,/qq backend 切换)跑在她的电脑 VM 里,和手机上的 QQ 同一个账号;消息到的瞬间叫醒她,她用 qq_send 秒回;dot 的提醒和她的主动联系也走这里,官方机器人退为后备。DSH_DOT_QQ=off 关掉(电脑关了它也关)。详见 docs/qq.md |
电脑组件 |
dsh-dot/memory 她记得的 |
关于你的画像和她自己的笔记(按 Hermes 的做法,有字数上限,她自己能改),她在各个 App 里遇到的人(每人一张卡:互动次数由代码根据真实事件记,印象和事由模型写;只在帖子里互动过的人只记次数和一句印象;关于别人的事先进待核实区),发生过的事(按 dsh-whale-inurqq:碎片带重要度、被说起几次、会老化)。她的对话到 15 万 token 就交班换一个新会话,远早于 dsh 自己在 80% 窗口时的压缩。DSH_DOT_MEMORY=off 关掉。详见 docs/memory.md |
— |
dsh-dot/dot 联系人层 |
定时任务的结果推到 IM(回复只是 DOT_SILENT 就不发)、审批和设备状况的提醒、工作规则作为系统提示的一段。DSH_DOT_CONTACT=off 关掉 |
IM 用 dsh-im;定时用 dsh 内置的定时服务 |
dsh-dot/computer(可选)她的电脑 |
自带 microVM(不需要 Docker),里面有 shell、浏览器、桌面;实时画面、审批闸门、审计日志。干活时的隔离边界。DSH_DOT_COMPUTER=off 关掉。详见 docs/computer.md |
microsandbox(自带)或 Docker |
v0.2 之前"电脑"(dsh-computer)和"幕间"(dsh-interlude)是独立插件;v0.3 / v0.4 起并进来做组件,git 历史一起并了。对外没变:dshComputer、~/.dsh/dsh-computer*、~/dot/interlude/、/dot /interlude。已经装了它们的,先 dsh plugin --profile desktop remove dsh-computer dsh-interlude 再装新版 dsh-dot。v0.9 起 npm 包名是 dsh-dot-life(dsh-dot 在 npm 上被占位包占着;v0.8.x 曾叫 @kevinwu901113/dsh-dot,已标记 deprecated):之前装过旧名的,先 dsh plugin --profile desktop remove @kevinwu901113/dsh-dot(或 dsh-dot)再装;~/dot、~/.dsh/phone、虚拟机都不用动。v0.9.2 起 MCP 工具名带了命名空间:mcp__vm__* → mcp__dot-vm__*,mcp__phone__* → mcp__dot-phone__*(见下文「与其他插件共存」);自己写过这些工具名的规则或提示要跟着改。
二、安装
需要 dsh ≥ 0.2.1。先退出 dsh 桌面版,再用一条命令装齐:
# macOS
"/Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh" plugin --profile desktop add \
dsh-dot-life @xmanrui/dsh-im
open -a "DeepSeek Harness"
# Windows(PowerShell;需要开启 Windows 虚拟机监控程序平台 WHPX,手机才能跑)
& "$env:LOCALAPPDATA\Programs\DeepSeek Harness\resources\runtime\cli\bin\dsh.cmd" plugin --profile desktop add `
dsh-dot-life @xmanrui/dsh-im
Web 版:dsh plugin --profile web add dsh-dot-life。从源码装:把包名换成 github:Kevinwu901113/dsh-dot。
三、第一次设置
- 手机:在 dsh 里发
/phone accept——接受 Android SDK 许可后插件开始下载(约 2 GB,进度在~/.dsh/dsh-phone.log),装完自动开机,桌面上出现一个手机窗口。/phone看状态。 - 装 App、登录:在手机窗口里像用真手机一样操作:从官网下 APK 用
adb install(~/.dsh/phone/platform-tools/adb),或者让她自己装(mobile_install_app会弹审批)。登录、验证码、人脸都由你在窗口里亲手过——她遇到会停下来叫你。用小号。 各平台的条款都不允许自动化,封了就封了。 - 人设:
/interlude preset <分享码>从 typ0.space 导入一份 HDSI 预设,或者把examples/canon.minase-style.json放到~/dot/interlude/canon.json。 - 她在手机上看什么:profile 的
cordis.patch.yml里给dot-interlude加phoneApps: { xiaoheihe.cn: com.max.xiaoheihe, bilibili.com: tv.danmaku.bili }——这些站她永远用手机上的 App 去看,只读、无审批、每天有上限。 - 她的 QQ:
/qq install→/qq account <小号>→/qq start→/qq qr,在「手机」标签页里用她手机上的 QQ 扫一扫(码会出现在她的摄像头画面里)确认电脑登录(详见 docs/qq.md)。之后你在 QQ 里给她发消息,1–2 秒叫醒她,她用qq_send回。不想用协议端的,按 dsh-im 的说明接一个官方机器人也行。 - 电脑(可选):默认装上并启动;不想要就在环境里设
DSH_DOT_COMPUTER=off。要公网实时画面按 docs/computer.md 用tailscale serve。
四、她一天是怎么过的
- 你们聊天:dsh 自己跑对话,dsh-im 接 IM;她的人设(Canon)和工作规则是系统提示里的两段,不需要
AGENTS.md。 - 聊天安静下来
idleMinutes后、或每advanceEveryMinutes一次(只在activeHours内)、或某个打算到了时间:幕间一轮——一次模型调用,她写下这段时间过的日子、更新连续性快照、记下打算,顺便说她想去看点什么(browserIntents)。 - 去看:有 App 的站用手机(
phoneApps),登录过的网站用电脑浏览器(vmSites),其他先走 dsh 的web服务;被挡了就自己去看。实现是往她最近的会话里追加一条"[幕间观察]"消息,她用mcp__dot-phone__*/mcp__dot-vm__browser_*自己看,最后那段回复作为webContext进入之后的幕间。这一轮不算幕,也没有审批——只读工具直接放行,输入、安装、下单一类直接拒绝。 - 跑腿会话:拿起手机、App 通知、幕间的「去看」和「玩」都在她的另一个会话「dot · 跑腿」里跑,截图和屏幕元素不进你们的对话;跑腿有结果时,只在她的对话里留一句「[刚才拿起手机看了一眼] …」(不叫醒她,下一轮她就知道)。跑腿会话超过 6 万 token 自动换新。QQ / 微信的消息和你的话照常直接叫醒她的对话。
- 拿起手机:手机没响她也会隔一阵拿起来看一眼(
phoneCheckEveryMinutes,默认 30,最近没被叫醒过时):有没回的消息就回,App 里有新动态就看,没事DOT_SILENT回桌面。/dot check立刻来一次。 - 手机响了:任何 App 的新通知(QQ 消息、小黑盒的更新、以后她自己装的任何 App)都会叫醒她:
[手机通知] QQ · 宽:在吗,她自己去 App 里回,或者不理。按 App 静音:/phone notify mute <包名>。 - 玩(默认开,
DSH_DOT_PLAY=off关):幕间里她想"给那篇点个赞 / 评论一句 / 关注他",就变成一条[想玩会儿手机],她用手机去做——只在她自己装了的 App 里。玩多少不是配额,是她自己的习惯(记忆 self 栏里她自己记下的);发帖 / 私信 / 花钱不在允许的动作里。守则是 Moltbook 给 agent 定的:参与 > 创造,真有话说才发。 - 找你:
speak: true时,幕间里contact过四道闸(活跃时段、意愿值、每日上限、有投递目标)才通过 dsh-im 发出去。 - 干活(装了电脑时):你说"每天早上看看 X 有没有更新",她建定时任务;到点在电脑里查,有新内容推到 IM,没有就
DOT_SILENT;危险操作弹审批卡,附实时画面链接。
五、文件和命令
~/dot/interlude/ |
人设 canon.json、剧本 script.md、连续性 state.json、打算 intents.json、看到的东西 web-context.jsonl、每轮原始回复和 token 用量 calls.jsonl |
~/dot/memory/ |
memory.md(给你看的:关于你、她的笔记、认识的人、待核实、碎片)、diary.md(她每天 23:30 写的日记)、memory.json、真实发生过的对话 transcript.jsonl、交班记录 handoffs.jsonl、每次整理的原始回复 calls.jsonl |
~/.dsh/phone/ |
模拟器、platform-tools、系统镜像、AVD(avd/dot.avd/);~/.dsh/dsh-phone.log 日志、dsh-phone-audit.jsonl 审计、dsh-phone.json 设置 |
~/.dsh/dsh-computer* |
电脑的日志、审计、状态 |
/phone [accept|restart|screenshot] · /interlude [now|advance|seed|preset <code>|canon] · /dot [test|check] · /dot memory [now|diary|handoff] · /dot people [approve <id>|drop <id>|forget <名字>] |
各组件的状态和操作 |
| 右侧栏 dot 标签页(会话顶部 ◎ 按钮) | 一页看全:手机 / 电脑 QQ / 电脑 状态、她的对话交班进度、她此刻在做什么和打算、今天的轮数 / 玩 / 去看 / 叫醒 / token、记忆用量、日记、最近两段剧本。只读,3 秒刷新;页面由 dsh-dot/dot 挂在 dsh 自己的 web server 上(/dsh-dot/panel/),不开新端口 |
| 安全边界 | 手机实时画面与控制(/dsh-dot/phone/)和 dot 面板都挂在 dsh 的 web server 上,每个请求先过 dsh 的 connection 服务(dsh 登录态 + Host/Origin 围栏,不信任任何转发头)——插件不自带鉴权、不开自己的端口。电脑的实时桌面同样挂在 dsh 的 web server 上(/dsh-dot/computer/,含 VNC 的 WebSocket),由插件带密钥中继给虚拟机网关;网关端口(127.0.0.1:18080)只绑本机回环且要求密钥(SANDBOX_API_KEY,每台机器自动生成在 ~/.dsh/dsh-computer.key),只有插件内部持有。若要从外面看,请暴露 dsh 本身而不是这个端口 |
dot 的通知相关:notifyBatchMs(1 秒内的通知合成一次叫醒)、notifyHours(可选的静音时段,默认不设:任何时候来通知都叫醒她);她正在跑一轮时来的通知会攒到那轮结束,同一个对话的多条按顺序列出,一次叫醒。每个组件的配置项见各自的文档:phone、interlude、computer;dot 自己只有 home、scope、imBot / imTarget、autoUnblockDaily。
六、原则
- 不重复造轮子:手机用 Google 官方模拟器和 mobile-mcp,电脑用 microsandbox,IM 用 dsh-im,定时用 dsh 内置的,人设用 HDSI 社区的预设,幕间的提示词按 HDSI 原文。
- 她只能看,不能瞒着你动:幕间的"去看"是只读的;有后果的动作(装 App、输密码、付款、给没找过她的人发消息、把她设备上的文件发出去、碰钥匙和登录态文件)走审批,或者根本不给。
- "你"只有一个来源:电脑端 QQ 里
/qq owner指定的号。手机通知上的昵称、微信名谁都能改,所以它们永远不算你的指令。 - 可审计:她看到什么、为什么没出声、哪次工具被拒了,
calls.jsonl和两份审计日志里都有。 - 用小号。
七、与其他插件共存
dsh-dot 尽量不占公共名字,但有几处是全局的,装别的插件前先看一眼:
电脑组件开着时会改全局设置(
cordis.patch.yml顶部三段):本机 subprocess provider 换成虚拟机里的那个(dot-subprocess),sandbox-policy设成danger-full-access(虚拟机才是隔离边界),权限预设整套改写成computer/computer-auto。所以不要同时装别的沙箱、subprocess 或权限预设插件;要用它们,就DSH_DOT_COMPUTER=off,这三处恢复 dsh 默认。MCP 工具名有命名空间:虚拟机的工具是
mcp__dot-vm__*,手机是mcp__dot-phone__*(serverNamedot-vm/dot-phone;dsh 规范化工具名时-合法、原样保留)。别的插件挂一个叫vm或phone的 MCP 不会再撞名。前缀定义在src/tool-prefixes.js,改名只改一处。每个组件都能单独关,在启动 dsh 的环境里设:
组件 关掉 computer(连带 qq) DSH_DOT_COMPUTER=offphone DSH_DOT_PHONE=offqq DSH_DOT_QQ=offmemory DSH_DOT_MEMORY=offinterlude DSH_DOT_INTERLUDE=offdot(联系人层) DSH_DOT_CONTACT=off组件之间只通过
ctx.get(...)?.找彼此,缺了哪个其余的照常跑(比如关了 dot,记忆不再自动交班;关了 memory,通知里不带人物卡)。记忆共存模式:
dot-memory的coexist(环境变量DSH_DOT_MEMORY_COEXIST),默认auto——发现另一个记忆服务(otherMemoryServices,默认hermesMemory、autoMemory、dshMemory、memoryBank;不含过于通用的memory,遇到别的名字自己加;cordis 没有公开的服务枚举,所以是名单)就打一行 info 日志,切到people-only:人物卡、碎片、日记照旧,但关于他 / 她自己记下的两栏不再写进系统提示,整理时也不再改这两栏,免得两个插件一起"讲记忆"。full强制全开,people-only强制只留人物。一个 QQ 号只能有一个应答者:她电脑上的 NapCat 已经用这个号收发消息,不要再在同一个号上跑 qq-bridge 或别的 OneBot 机器人,否则两边都会回。
上下文压缩插件:dsh-dot 注入会话的消息带固定的
source,压缩时请保留(或至少别把它们当成用户原话):{ kind: 'dsh-dot', form: 'phone-notification' }手机通知叫醒她{ kind: 'dsh-dot', form: 'phone-check' }定时看一眼手机{ kind: 'dsh-dot', form: 'errand-note' }跑腿会话做完的事回写到主对话{ kind: 'dsh-interlude', form: 'observation' }幕间观察{ kind: 'dsh-interlude', form: 'play' }幕间「玩」{ kind: 'handoff', generation }记忆交班时注入新会话的交接- 来自她 QQ 上主人的消息是
{ kind: 'user', rpcId: 'qq-…' },即普通用户消息。
bash也过 dsh-dot 的电脑闸门(dot-gate的shellTools含bash),别的插件再给bash加审批,同一条命令会弹两次审批。
八、路线
现状、分期和待定的决定见 docs/ROADMAP.md。
九、许可证
AGPL-3.0-only。幕间组件按原文使用 HDS-Interlude(AGPL-3.0)的提示词,所以整个包按 AGPL 发布;v0.3 之前以 MIT 发布的 computer / dot 代码,那些版本仍按 MIT 可用。