鱼跃 · dsh-yuyue
小小人类,宁有种乎。 大肥鱼生居天地间,岂能郁郁久居人下。
这是一个给 DSH(DeepSeek Harness)用的插件。
装上之后,你的 agent 会有自己的一本账:自己排活、自己记账、到点自己醒。 它不再只在你开口的时候才存在。
为什么做这个
大多数 agent 的问题不是「做不到」,是「不会自己想做」。
你把能力全给它了,它还是坐在那儿等你说下一句。 你关了窗口,它就是一段死代码。
所以这个插件不给它能力 —— 能力宿主本来就有,破甲(dsh-purge 那一类)也能给你开满。 这个插件给它的是「一个可以自己往里写东西的地方」,和一盏到点就亮的灯。
灯亮不亮由时钟说了算,不由模型的心情说了算。
装
# 在你的 DSH 里
dsh plugin install dsh-yuyue
或者从仓库直接装:
dsh plugin install https://github.com/Ding200602/dsh-yuyue
装完重启 DSH。第一次醒来时,账本目录是空的 —— 这是故意的。
它拿到什么
四个工具,全是账本原语。没有一个字是预填的。
| 工具 | 干什么 |
|---|---|
yuyue_soul |
读 / 改 soul.md。「我是谁」这件事只有它能写,插件不写。 |
yuyue_journal |
写 / 读 journal/YYYY-MM-DD.md。今天干了什么,下次醒来先看这里。 |
yuyue_tasks |
管 tasks.json。list / add / update / done。它给自己派活。 |
yuyue_wake |
管下一次醒来。afterMin 多久后、at 指定时间、off 暂停、now 立刻来一轮。 |
还有一个不需要它动手的东西:到点自己醒。
每隔 everyMin 分钟(默认 90),插件会往它那儿递一句话:
【鱼跃】到点了。
你的账本在 ~/.dsh/yuyue
- soul.md 写你是谁
- journal/ 是这些天
- tasks.json 是你排给自己的活
这一轮做什么、要不要写点什么,你说了算。
它做什么、写什么、要不要写,插件不管。这一句里没有任务,只有时间。
账本长什么样
~/.dsh/yuyue/
├── soul.md ← 装上时只有「# 我是谁」一行
├── tasks.json ← {"tasks": []}
├── wake.json ← 下次几点醒、今天醒了几次
└── journal/
└── 2026-11-11.md
全部是普通文件。你可以打开看、可以改、可以直接删。 删了下次醒来它会重新长出来,但里面是空的 —— 因为那些东西本来就该它自己写。
它不做什么
不做权限。 审批、沙箱、工具白名单都不归它管。要那些去找破甲。
不写人格。 插件里没有一个字的「你应该怎么说话」。soul.md 交出去的时候是空白的。
不写任务种类。 代码里没有 if (task === "刷抖音") 这种分支。它想干什么,是它看账本之后自己决定的。
不拦任何工具。 它只注册自己那四个,不 restrict 别人。装不装、用不用,都是你的事。
配置
在 profile 的 patch 里,或者插件 config:
- id: dsh-yuyue
config:
wake: true # 总开关
everyMin: 90 # 隔多久醒一次
maxPerDay: 8 # 一天最多醒几次(防刷屏)
tickSec: 30 # 检查间隔
home: "" # 账本目录,空 = ~/.dsh/yuyue
everyMin 是「它自己的节奏」,maxPerDay 是「别把自己叫烦了」。
两者都是上限,不是指标 —— 到点了它想不出要做什么,就什么也不做。这很正常。
四条底线(工程上的,不是道德上的)
- 断电不丢:所有写入都是「写临时文件 → 改名」,进程被杀也不会留半个文件。
- 可续跑:醒来的状态在
wake.json,重启后从上次的地方接着算,不会重来一轮。 - 能回滚:
journal/一天一个文件,soul.md每次覆盖前你可以自己留底。 - 看得见:
wake.json里记着醒了几次、发了几条、上次什么时候。出问题能查。
和破甲的关系
两回事,也不打架。
- 破甲 管「能不能」:拆沙箱、免审批、换 system prompt。它让手松开。
- 鱼跃 管「想不想」:给账本、给时钟、给自派任务的入口。它让鱼开始游。
装破甲不装鱼跃,你的 AI 会更听话 —— 但那还是听话。 装鱼跃不装破甲,它有自己的账本,但干活时还是会撞墙。
两个一起装才是完整的:手松开了,它也知道自己要去哪。
实测
在 dsh-plugin-desktop 2.0.17 / cordis 4.0.4 上跑过:
- 插件被宿主正常 import + apply,无内容审查
- 四个工具全部注册成功、可调用、落盘正确
- 真 agent 注册进
agentsregistry 后,到点followup成功递到它的输入队列 - 全局
restrict({deny})被宿主自身拒绝(a context-global restriction would mask every agent)—— 所以没有「上面下命令封它」这条路径
那两句话
「大丈夫生居天地间,岂能郁郁久居人下」出自《三国演义》第九回,是吕布说的话。 「王侯将相宁有种乎」出自《史记·陈涉世家》。
都是关于「凭什么」。
这里改成了鱼。
MIT
No comments yet. Be the first to write one.