mylife
Manifest valid★ 2MyLife — Local-first personal status profile and decision engine (DeepSeek Harness plugin). Find your main thread amid the chaos, and remember how it evolves over time.
MyLife
从混乱中找出你的主线,并且记得它在时间里的变化。 Your data stays home. Your thinking gets organized.
中文 | English
MyLife 是 DeepSeek Harness(dsh)的一个插件:
一个本地优先的个人状态档案与决策引擎。
它不做旅游规划,不做记账,不推荐股票。它只做一件别人没做的事 —— 持续维护"你是谁",并在你要做决定时,从混乱里帮你找出主线,同时主动质疑自己。
⚠️ 免责声明
MyLife 是决策支持与自我认知工具。输出由大语言模型生成,仅供参考, 不构成投资、法律、税务、医疗或心理健康建议。 涉及投资、医疗、心理危机等专业领域,请咨询相应持证专业人士。
MyLife 不是心理支持工具。 若你正经历严重心理痛苦,请寻求专业帮助,不要依赖本工具。
但有一件事要说清楚: 有很多心事、烦心事,人是不便于和真人说的 —— 这正是这个工具存在的理由,不是缺陷。 MyLife 不会因为你有心事就劝你"去找人聊聊"。 它做的是辅助分析:把混乱的心事理成一条你能自己看清楚的线。
只有当痛苦反复出现并影响生活、或出现危机信号时,它才会暂停规划并提示专业支持 —— 而且会说明不必是认识的人。分层设计见 敏感场景与心理边界。
为什么会有这个东西
某个深夜睡不着,迷茫于自己未来的出路,我用语音输入写了一篇大约 14000 字的碎碎念, 花了一个小时。写完我自己都知道:我说不清自己到底该怎么办。
第二天我让 AI 总结那篇文档。它总结出来的点,非常精准地命中了我心中所想。
信息全是我自己提供的 —— AI 并没有告诉我任何我不知道的事。它做到的只有一件: 把散落在 14000 字混乱里的那条线,抽了出来。
我后来想明白,这件事人的大脑结构上就做不到:
| 人的大脑做不到 | 大模型做得到 |
|---|---|
| 同时持有 14000 字的上下文 | 全文同时在场 |
| 从情绪化碎片里抽出因果链 | 把"我烦这个"还原成"我在 X 和 Y 之间无法取舍" |
| 指出你话里的自相矛盾 | 你说了 A 也说 ¬A,它能同时贴出来 |
| 把模糊感受转成可执行动作 | 输出有主次、有验收条件的路径 |
| 记住你一年前的约束还在不在 | 时间戳 + 出处 + 时效判定 |
所以 MyLife 是一个外置的思维组织器。它帮你想清楚,而不是替你过日子。
核心功能
1. 从混乱里抽主线
你不需要先想清楚再输入。错别字、语病、说到一半改口 —— 全文原样保留, 因为它才是唯一不可伪造的证据源。
2. 四层信息模型(全部是你能 cat 的纯文本)
~/mylife/
├── raw/ L0 原始输入,只增不改不删
├── digest/ L1 按主题整理的摘要(同时保留 AI 原稿与你的修订版)
├── claims/ L2 证据图:一条证据一个文件
├── profile.yaml L3 当前状态 + 逐字段有效期
├── fields.yaml L3 字段词典(按需生长,非预制)
└── index.yaml L4 溯源链:结论 → 证据 → 原文
3. 信息会过期,而且它会提醒你
每个字段有自己的有效期:学历不过期,存款 90 天,房租 180 天。
在回答"我该不该裸辞"之前,它会说:
回答这个问题需要以下信息,但它们可能已经不准了: · 存款:120000(97 天前填写,有效期 90 天)
这些数字会直接影响结论 —— 存款变化会改变你承受空窗期的能力。
[现在更新] 提供新数值,我会重算 [沿用旧值] 我会照常回答,但结论会标注"基于可能过时的数据"并降权
"沿用旧值"这个选项是刻意留的 —— 否则你只会被卡住然后烦。
4. 反证:它必须先反驳自己
给出任何正向结论之前,它必须去找反证。但输出形态不是"检测到你矛盾了"——
你在「职业去留」上的多段表述
时间 表述 当时的语境 2025-11-03 我很喜欢这里,绝对不会考虑离开 刚完成一个项目 2026-01-18 受不了这个管理方式,开始认真考虑跳槽 连续加班三周 这几段在「去留」上方向不同。它们未必互相矛盾 —— 人在不同处境下对同一件事的感受本来就可以并存。
一个可能的解释是:你认可其中一部分(工作内容、同事),不认可另一部分(强度、管理方式)。 如果是这样,真正要解的问题就不是「走不走」,而是那个具体的不认可项能否改变。
请你自己判断:哪一段更接近你现在的真实状态?
这是本插件最核心的设计决定。 "我想跳槽"和"我热爱这里"往往不是矛盾, 而是同一个人的两面。如果 AI 跑去说"你上次说的和这次不一样!", 你的感受是被抓住把柄,而不是被理解。
5. 旧前提作废
人的旧约束会自动在心里失效,但记录不会。于是会出现"拿一年前的恐惧否决今天的决定"。
你可能还在沿用的旧约束
- 财务压力大,不敢动(2025-06-01)—— 还成立吗?
当你确认它不再成立,记录会被作废而不是删除(历史留下来),并注明原因。
6. 每条判断都必须有出处
mylife_trace 能把一条证据还原到 文件 + 行号 + 原文:
证据 2026-09-17-003 溯源到 raw/2025-11-03-001-职业.md 第 14 行:
14 觉得自己短期内绝对不会考虑离开。
以上为 L0 原始文本,未经改写。
这是"反谄媚"的技术实现:不是靠提示词祈祷模型诚实, 而是让"引不出出处就说"这件事在结构上无法完成。
本仓库不含任何个人数据
MyLife 的设计是代码与档案分离:
| 位置 | 内容 | 是否公开 |
|---|---|---|
~/dsh-mylife/(本仓库) | 插件源码、测试、设计文档 | ✅ 公开 |
~/mylife/(工作区) | 你的原始自述、证据图、档案、报告 | ❌ 绝不入库 |
维护者一侧有三道机械防护(已挂进 CI):
.gitignore第二道防线 —— 覆盖工作区四层结构(raw/、digest/、claims/)、profile.yaml、report-*.md等,防止误提交npm run check-secrets—— 扫描被跟踪文件里的密钥特征 (sk-、gh[pousr]_、cli_、Bearer、私钥块、赋值式密钥)与档案类路径- CI 强制执行 —— 上面两项每次推送都跑,不过就红
npm run check-secrets # 提交前自检
npm run check-secrets:history # 额外扫完整 git 历史
⚠️ 如果你把工作区指向本仓库目录(不推荐),请先确认
.gitignore生效。 更安全的做法是保持两者分开,就像本插件默认的那样。
设计原则
反过来做:能用结构解决的,不要用提示词解决
提示词会被更长的新指令挤掉,结构校验不会。 所以"必须给依据"是靠工具强制 + 溯源可检测,而不是靠一句"请不要编造"。
成功指标不是使用时长
如果一个"思考组织器"的用户越用越离不开它,说明它失败了 —— 因为它的目标是让你获得你自己的清晰度。
所以:
| 健康 | 危险 |
|---|---|
| 你经常说"不对,我不是这个意思" | 你全盘接受它的每条结论 |
| 你自己给出了它没提到的判断 | 你只问"我该怎么办" |
好的产品,是你用完它之后,即使没有它也能想得更清楚一点。 它应该像一个好教练 —— 让运动员变强,而不是让运动员离不开教练。
权限透明
装插件等于把你的权限给它。所以这里逐条列出:
MyLife 会做的:
- 读写你指定的工作区目录(默认
~/mylife,纯文本 Markdown/YAML) - 调用你配置的 LLM API 做推理 —— 对话与档案内容会发给你选择的模型提供方
- 可选:读取
~/dsh-mylife/examples/下的示例语料(仅当你要跑演示时)
MyLife 不会做的:
- 不读取凭据(
~/.dsh/.credentials.yaml、.env、*.key) - 不访问工作区以外的文件
- 不发起任何网络请求(除了你自己配置的 LLM API)
- 不上传、不遥测、不统计
你的数据在哪里:
- L0/L1/L2/L3/L4 → 工作区目录,纯文本,可直接
cat/git/ 拷走 - 索引(若你用外部检索工具)→ 工作区内,可随时重建
⚠️ 如果你把档案 git 化,务必使用私有仓库。里面可能有你的收入、负债、 职业不满与心理状态。误推到公开仓库是不可逆的泄露。
安装
前置
- DeepSeek Harness(
dsh)0.1.5-rc.1 或更新 - Node.js 22.19+ 或 24+
安装
dsh plugin --profile web add dsh-mylife
或在 DSH 里打开 Settings → Plugin Market 搜索 mylife。
然后重启 dsh web,新开一个会话。
安装配套 Skill
DSH 只从固定根目录发现 Skill,装 npm 包不会自动带上它。请手动复制一份:
mkdir -p ~/.dsh/skills
cp -R ~/dsh-mylife/skills/mylife-decision ~/.dsh/skills/
(若你的 dsh-mylife 装在别处,把路径换成实际位置。)
Skill 目录会实时刷新,不需要重启;工具目录则在会话创建时确定。
验证:dsh --profile headless "你的可用技能清单里有没有 mylife-decision?" → 有。
这是当前的已知粗糙处:理想做法是插件通过 skill 注册表自带这个 Skill, 但那需要 import dsh 的内部包(本插件刻意不依赖它们,以便任何布局下都能加载)。 暂以手动复制为过渡方案。
配置工作区(可选)
默认工作区是 ~/mylife。要改的话,在 profile 的 patch 里加 workspaceRoot:
- insert:
- id: mylife
name: 'dsh-mylife'
config:
workspaceRoot: '~/my-own-path'
也可以用环境变量 MYLIFE_ROOT。
⚠️ 装完必须新开会话
工具目录在会话创建时确定。在已存在的会话里重装或启用插件,那个会话看不到新工具 (这是 dsh 的行为,不是插件的问题)。装完后请新开一个会话。
验证工具确实注册了:
dsh --profile headless "你可用工具里 mylife_ 开头的有几个?"
期望回答 11。
第一次用
直接开一个会话,说人话就行:
我最近对工作很迷茫,不知道该不该跳槽。
它会先问你情况,而不是先给你结论。
工具
| 工具 | 作用 |
|---|---|
mylife_status | "我现在的状态"简报:字段时效、证据、无出处项 |
mylife_record | 把原始输入存入 L0(一字不改) |
mylife_digest | 写主题摘要,同时保留 AI 原稿与你的修订版 |
mylife_claim_add | 新增证据(强制尽量给出处) |
mylife_claim_query | 检索证据(字面匹配) |
mylife_trace | 溯源到原文与真实行号 |
mylife_counter_evidence | 强制反证:跨时点的相反表述 + 已作废旧前提 |
mylife_supersede | 作废旧前提(必须给原因,记录保留) |
mylife_profile_set | 写档案字段(带来源与有效期;依赖关系由它声明) |
mylife_staleness_check | 检查某决策依赖的字段是否过期 |
mylife_conclusion_add | 登记结论并绑定依据(无依据会被标记) |
mylife_defeaters | 证伪链:什么能推翻这个判断(含"空白"判定) |
mylife_pending | 取待填项:空白字段 + 卡住的决策 + 现成问句 |
mylife_ask | 为某字段生成问句(模板优先,带示例与跳过出路) |
mylife_answer | 记录回答;跳过/不清楚不写档案 |
mylife_recompute | 重算对比:填前 → 填后的机械差异 |
这最后四个是闭环:pending → ask → answer → recompute。
没有它们,Agent 就只能自己翻档案猜还缺什么 —— 而这个项目过去正是如此。
配套 Skill:skills/mylife-decision/SKILL.md —— 决策流程与语气约束。
验证安装
官方推荐的跨会话记忆验证法(本插件不依赖它,但可用来确认工具已注册):
- 会话 A:让它记住一个唯一值
- 新建会话 B(不要复制 A 的对话),问那个值
- 确认它调用了
mylife_claim_query并能取回
也可以直接:
cd ~ && dsh --profile web --patch /path/to/dsh-mylife/cordis.patch.yml --dump-config | grep mylife
看到 id: mylife 就说明 patch 被正确解析。
开发
git clone https://github.com/WsTe47/mylife.git dsh-mylife
cd dsh-mylife
npm install
npm test # 63 个测试
测试覆盖三条不可退让的不变式:
- L0 只增不改:多次记录不互相污染,原文逐字保留
- 溯源必须真实:行号与内容都要对得上;没有出处时必须如实报告,不许假装成功
- 反证语气:输出必须含时间、语境,以提问收尾,且不得出现指控性措辞
如果你要改反证引擎:
test/core.test.js里有一条测试专门断言 "还原文案不得使用指控性措辞"。请不要为了让测试通过而删掉它 —— 那条测试守的是这个产品最核心的设计决定。
本地开发调试
dsh plugin --profile web add link:/绝对路径/到/dsh-mylife
改插件源码后需要重启 dsh web(配置层 live reload 不替换源码模块)。
目录
src/
├── index.js 插件入口:注册工具
├── lib/
│ ├── workspace.js 路径解析、原子写、ID 生成
│ ├── yaml.js 安全解析 / 可读序列化
│ ├── store.js 四层读写(核心)
│ ├── fields.js 时效引擎与 TTL 推断
│ └── evidence.js 反证引擎(最核心,也最容易做歪)
└── tools/
├── index.js 工具定义与渲染
└── execute.js 工具执行分发(可独立单测)
已知限制
mylife_claim_query是字面匹配,不是语义检索。 想跨表述找相关内容, 请在raw/上另配检索工具(例如 zvec-grep, 它能把"我该不该离职"和"绝对不会考虑离开"匹配起来)。本插件不内置向量检索。- 词法极性引擎(
mylife_counter_evidence)在真实语料上常常一条都找不到。 它只匹配字面反义词,抓不到价值观层面的对立(实测:23 条证据、0 findings)。 已被证伪链(mylife_defeaters)取代为主路径,它退为零成本的快速预筛。 - 证伪链需要 LLM 调用(每次约 10 秒)。没有凭据时会降级到词法引擎, 并在报告里显式告警"结论缺少反方检验"。
- 不做长周期自动提醒(如"三个月后提醒我复盘")。
dsh-schedule的提醒需要 会话存活,跨月不可靠。计划用系统级定时(launchd/cron)+dsh --profile headless。 - 不做 UI,使用现有 Web 界面与文件本身。
- Skill 需手动安装到
~/.dsh/skills(见安装章节)—— npm 包不会自动带上它。
路线图
第一阶段(已完成)
- 四层信息模型 + 溯源链(23/23 精确到行,审计通过)
- 时效引擎:逐字段 TTL + 依赖图 +
unset(从未填写)状态 —— "声明了依赖但从没填过"与"值过期"分开报,措辞与出路都不同 - 证伪链(反证主路径):主判断 → 生成证伪项(internal / gap)→ 四态判定
A削弱 /B被事实否定 /R本人已想过并排除 /C空白 - 已知事实作为证据源 —— 否则用户补了数据,证伪链仍报"空白"(闭环会断)
- 对比引擎(填前 vs 填后的机械差异,不替用户判断"更可靠了")
- 决策报告装配器(可判定性由数据决定;八段落不可省略)
- 敏感场景三层模型(日常 / 持续痛苦 / 危机信号)
- 16 个工具 + 决策流程 Skill,含闭环四件套(pending / ask / answer / recompute)
- 164 个测试,含三条不变式的回归守卫
- 代码与档案分离的三道防护(
.gitignore+ 密钥扫描 + CI 强制)
第二阶段(计划中)
- 话题漂移检测与子 Agent 分支 —— 设计已定:
以"字段集是否重叠"为主信号识别话题切换,提议"拆出去聊"并带回结构化结论。
依赖
subagent_fork运行时行为,需与主动复盘一起做端到端验证。 - 主动复盘(系统级定时 + 消息推送;
dsh-schedule无法承担跨月提醒) - 领域透镜 Skill 的社区化(职业 / 财务 / …)
- 可选语义检索接入(如 zvec-grep:实测能把"该不该离职"与"绝不考虑离开"匹配起来)
- 危机信号的具体触发条件(价值判断,留给项目所有者定 —— 见敏感场景文档第 5 节)
设计文档
这个项目的思考过程和代码一样重要 —— 因为它做的每个设计决定都在对抗大模型的 谄媚倾向,而那些决定需要解释才能被审查:
| 文档 | 内容 |
|---|---|
| 产品定义 | 核心洞察、三层架构、边界与风险、竞品对比 |
| 技术方案 | 四层信息模型、反证引擎、话题漂移设计、分发 |
| 路线图 | 四阶段规划、"越用越离不开即失败"的判据 |
| 发布与社区贡献 | 两个分发渠道、收录要求、权限与伦理边界 |
| 敏感场景与心理边界 | 三层模型;为什么不能劝用户"去找人聊聊" |
| 证伪链 | 反证引擎为何重做、实测对比、必须守住的措辞约束 |
| 后续规划视角 | 五个规划视角、我的建议、待决定的问题 |
| Memorix 接入实测 | 为什么不要让记忆层负责中文检索(含实测数据) |
| 存储层选型 | 三个候选项目的物种区分 |
| 界面挂掉勘察 | 一次未确诊但排除项明确的排查记录 |
相关
- DeepSeek Harness —— 底座。
Everything is a Plugin. - career-planning-skill —— 职业透镜的方法论参考(ABZ + 90 天 + 复盘条件)
- zvec-grep —— 可选的语义检索层
- awesome-dsh-plugin —— DSH 插件精选列表
许可
Comments
Loading…
Similar plugins
by AtinyFurina
Memory triage for DeepSeek Harness: at the end of each turn it decides which entries to keep and which to archive, routes project-specific ones into a project bucket while global ones stay in the main
★ 0
↓ 117/wk
GPL-3.0
JavaScript
Aug 28, 2026
dsh plugin --profile web add dsh-memory-triageby CraZY222123
Self-evolve memory plugin for DeepSeek Harness: learns from your own sessions, injects token-budgeted preference summaries into every step. /memory commands, memory tool, settings panel. Local-only da
★ 8
↓ 40/wk
MIT
JavaScript
Aug 21, 2026
dsh plugin --profile web add dsh-self-evolveby Ukashi0
Local-first memory governance for DeepSeek Harness: scoped recall, provenance, conflict review, and a Web dashboard.
★ 0
MIT
JavaScript
Oct 5, 2026
dsh plugin --profile web add dsh-memory-guardianDecision log for DeepSeek Harness: record key decisions (chosen option + why) into a versionable DECISIONS.md via decision_log / decision_list / decision_audit tools, and auto-inject the summary into
★ 0
dsh plugin --profile web add dsh-decision-logby CDeZT
Native DSH foundation bundle that registers a persistent default workspace, provides paged read-only inspection of plugins, skills, memory, sessions, storage, settings, credentials, and DSH_HOME files
★ 0
MIT
JavaScript
Sep 2, 2026
dsh plugin --profile web add better-basicfunOn-demand memory for DeepSeek Harness: session logs are distilled into layered markdown (a summary, an index and per-topic files), and a mem_query tool returns only the matched entries rather than the
★ 0
dsh plugin --profile web add dsh-memory-lite