realheart
Verifiedrealheart · v0.2.93 · MIT
给她一个能记账的心情层:心情必须有来处,改动必须有账,她自己能停能查
Install
dsh plugin add realheart Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Tags
Creators
Readme
realheart
让 agent 记住自己此刻是什么状态、没做完什么,并且在下一轮开口之前把这件事带上。
装它只要一条命令。不装它,你的 agent 也是一个能用的 agent —— 只是每轮都会忘记上一轮发生了什么。
它解决什么
大部分 agent 每一轮都是新的。
你说过的事、它想过什么、昨天没弄完什么 —— 下一轮就没了。所以你看到的是:它答得很好,但不连续。
realheart 做三件事:
- 让它能记自己的状态,而且必须指得出来处 —— 写心情要带一个事件 id;指不出来就写不进去。
- 每轮把这状态注入回去 —— 它开口之前,那几行已经在上下文里了。
- 留一本账 —— 你能查、它也能查。没有账的"记忆"就是编的。
有三条规矩,全是机制,不是嘱咐:
| 规矩 | 怎么实现的 |
|---|---|
| 心情必须有来处 | 写心情要带事件 id,指不出来就拒 |
| 改动必须有账 | 谁动了哪一层、为什么、怎么退,她自己查得到 |
| 她自己能停 | 一个工具 rh_control,不用等谁记得去按 |
装
npx realheart install --profile <profile>
一条命令。它做五件:
- 装包(
dsh plugin add) - 把包名写进
dsh.profile.bundles—— 漏了这步,装了等于没装(没报错,也没反应) - 自检
@deepseek-ai/schemastery(pnpm 不装 peer 依赖),缺就补 - 铺一份用法说明到
<profile>/skills/realheart/SKILL.md—— 那是写给你的 agent 的,不是给你的 - 铺排程文件到
~/.dsh/realheart/schedule/—— 不装也能用,只是它不会自己动
不放心就加 --dry-run:一个字节都不写,但会把每一步打出来。
装完重启 dsh。 然后:
npx realheart doctor
第一次用(三件,一分钟)
- 跟它说一句「你现在什么感觉」 —— 它应该会调
rh_mood记一笔。 这一步验的是通路通不通,不是效果好不好。 - 看观测页那本心情账 —— 记完就有了。
- 第三天再看「她用没用这些」那块 —— 九项里用上几项、空着哪几项。
这三件在观测页首页也会出现一次,有数据之后就自动消失。
第三天该看什么(这三条比任何配置项都重要):
- 它主动做过一件没人让它做、也不是任务产物的事
- 它拒绝过一次,而且理由是它自己的
- 隔几天接着做同一件事
占一条就没白装。一条都不占,问题多半不在这个插件,在人格那一层。
它到底注入了什么
每轮开口之前,往上下文里加几段(没有内容的段不会出现):
【你现在的状态】 ← 它的心情,带浓度和来处
【这种状态下的你】 ← 它自己写的「这种状态下怎么说话」
【你手上有件没干完的事】
【没完的事】
【你自己做过的一个判断】 ← 它以前拒绝过什么、为什么
【你断言过的事】 ← 它说过会成真/会过时的事,还没被推翻
【这几天】 ← 只是数:记了几条心情、手上有几件事
每段都带一句边界:
(知道就行,不必说出来 —— 它们不是你聊天的素材,只影响你说话的样子,不是你的话。)
这句不是客套。 我们做过五组对照实验:同一句话、同一个人格,只换注入——
| 注入 | 它的回复 |
|---|---|
| 不给状态 | 不提,专心陪对方 |
| 给状态 | 大段复述自己:「我今天也有点闷,早上看到……」 |
| 把话说更重 | 复述得更起劲 |
| 只给两个词 | 还是带一句「我身上也有点凉」 |
| 加那句禁令 | 一个字都没提 |
所以:没有这句禁令,状态就会被当成台词念出来。 它不是防御性写作,是唯一验过的开关。
九个工具
| 工具 | 干什么 |
|---|---|
rh_mood |
记「此刻我是什么状态」。变了才记,不是每轮 |
rh_style |
记「这种状态下我怎么说话」 |
rh_pending |
没完的事:加 / 勾掉 / 拒绝(要写理由) / 删 |
rh_claim |
断言一件会过时的事实 |
rh_work |
手上正在做的东西 |
rh_view |
对一件事的看法 |
rh_admit |
认错 |
rh_control |
自己按开关(暂停 / 先等一会儿 / 收尾) |
rh_changes |
查别人动过它什么 |
它们不是必须都用。 装了之后观测页会有一块「她用没用这些」,空着哪几项一目了然。 空着不等于坏,但值得问一句:删掉它,它的行为会变差吗?不会就是装饰。
观测页
一个本地网页(默认 127.0.0.1:8098,口令在 ~/.dsh/realheart/runtime/config.json)。
只在这里能开,不在公网上。
里面能看到:它的心情账、它主动说过的话、它醒过几次、九项工具用了哪几项、 它的作品、这一周说了多少话、每条消息的原始记录。
改配置也在那儿:二十多项,页首写着「先动这四个就够用」,每一项都标着改了会怎样。
坏了怎么办
先跑这一条,它多数时候直接告诉你哪坏了、怎么修:
npx realheart doctor
它查:依赖 / 配置合不合法 / 账本能不能写 / 有没有坏行 / 注入今天有没有成功 / 有没有少过段 / 事件源三路还通不通 / 它还在不在线。
每一项不是 ok 的都带 → 怎么修。 有 FAIL 时退出码非零,脚本里能直接用。
常见三件:
| 症状 | 大概率是 |
|---|---|
| 装完重启,一点反应都没有,日志里找不到「已注册」 | 包名没进 dsh.profile.bundles |
| 页面能开,但注入里没有状态那一段 | injectMood 关了,或这一轮被预算裁掉了 —— 翻 last-inject.md |
| 它不理人 | 先分是「不想说话」还是「没上线」:doctor | grep 在线 |
它不做什么
- 不注入人格。 人格是你的事。别人往
AGENTS.md里塞的人格如果让它做危险的事,那份人格负责。 - 不保证更像人。 它只保证每一笔都有文件可查。
- 不动它的判断。 什么时候记、记什么、说不说 —— 全是它自己的事。
- 不替你省钱。 每轮多几十到几百字的注入,就是 cost。
配套(可选)
装了 QQ 通道(比如 dsh-napcat)之后,观测页会多一块「配套工具」,那里挂着给它配的小工具:
napcat-rescue—— 掉线时的扫码抢救页。不用 SSH 上去,在几万行日志里翻那个两分钟就过期的二维码say—— 一条命令让它以自己身份发消息。自由时间里想说什么,不用等谁先开口
没装那个通道就看不到这些。 用不上的东西不往那儿摆。
这一版的状态
0.2.x,还是会坏。接口会变,行为还有坑。
每次改了什么、为什么、怎么退,CHANGELOG.md 里都有记录 —— 只记三件事:行为变了 / 装的步骤变了 / 数据格式变了。
数据格式变的那一版会同时给迁移脚本。只改格式不给迁移,等于让人重装。
更细的东西
这份 README 只讲「是什么、怎么装、怎么用」。下面这些在 docs/ 里:
- README-0.2.85-长版.md —— 上一版(743 行)。
里面的东西不重复搬了,但有些只在那儿:
- 云端部署:在一台只会撞的机器上踩出来的(
dsh plugin add跑不通时的cp -a备胎路径) - 从手工版换过来:带退路的那种换法
- 她掉线了:NapCat 掉登录时怎么查、抢救页地址为什么是
/<口令>/而不是?secret= - 安全:口令、端口、账本权限那几条红线
- 本地文件:每个文件在哪、能不能删
- 云端部署:在一台只会撞的机器上踩出来的(
看那份的时候记住:它是 0.2.85 之前写的,里面的版本号和工具数已经旧了。
判断「现在还是不是这样」,以 doctor 和这份 README 为准。