dsh-lifecard
Local-first character archive in the DSH sidebar: it interviews you about someone and writes the answers into Markdown cards, imports SillyTavern character cards, writes a novel chapter by chapter, and roleplays with a card plus its world book; anything written into a card has to be quotable from ma
Install
dsh plugin --profile web add dsh-lifecard
Sandbox test results
| Stage | Result |
|---|---|
| 1 install | ✓ |
| 2 list | ✓ |
| 3 mount | ✓ |
| 4 boot | — |
Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).
README
LifeCard(DSH 插件)
本地优先的人物档案库。把现实里的人、虚构角色和他们之间的关系写成可读的 Markdown,放在你可以随时打开、随时带走的一个文件夹里。
三十秒看懂:把家里人、老朋友、你自己,一件一件问清楚——他做过什么、怎么说话、你们之间发生过什么——写成一张能一直改的卡。卡就在你自己的文件夹里,用记事本就能打开,换台电脑也能带走。不联网、不上传,也不替你编:每条都要能在你写过的话里找到出处,找不到就丢掉。
打开先选一扇门。 三扇门是三件不同的事,进去之后随时能换(右上角「换门」),卡和世界书都在同一个文件夹里,不会因为换门丢掉:
门 · 用来做什么 · 里面有什么
真实人物记录 · 记现实里的人:家里人、朋友、你自己 · 访谈、材料整理、导角色卡、简历与规划、求职、写日记、人物关系网
写小说 · 立虚构角色、写一本书 · 边聊边立角色、大纲、逐章写、盲审(只看正文挑毛病)、把酒馆一场对话或游戏一段变成一章
酒馆(角色扮演) · 拿一张卡,和 TA 你一句我一句地演 · 角色卡 + 世界书命中、开场白、收尾备忘(记到「到这儿为止」)、挑几句进卡的「对话示例」
真实人物记录那扇门里,五个入口组成两条链路:
① 导入 角色卡 PNG / JSON / CHARX → 直接出卡 (纯格式搬运,不调模型)
② 聊着建 它问,你答 → materials/ ─┤
③ 一段文字 访谈稿/聊天记录/日记 → materials/ ─┤
④ 从记忆里认人 DSH 记过的人和事 → materials/ ─┤
↓
整理材料 → 引文校验 → 提案 → 你勾选 → 写进卡
↑
⑤ 新建 手写,不经过 AI (这条路没有闸门,因为句句都是你说的)
②、③、④ 产出同一种东西(材料),之后走完全相同的一条链。这是它能成立的原因:一套闸门,三个进料口。
④ 从记忆里认人:DSH 的记忆功能记过你和身边人的事,这里能认出「父亲=张三」「师傅王先生」这类明确写了的人和关系。认出来的人先给你看一眼,标清每个人缺什么(名字 / 出生时间 / 做什么的),勾上的人才变成材料。
它不会直接建卡。记忆里关于一个人的话往往只有一两句,直接建卡会造出一排空卡。先落成材料、走正常的分析勾选,你能看见每条是从哪句话来的,也能拒绝。从记忆来的卡如果还缺东西,打开时名字旁边会挂一个红色「还缺 N 样」——那是提醒你「接着聊」专门问这几样。
界面上的按钮名:首页「新建」「聊着建」「导入」;导入页里分「角色卡文件」和「一段文字」两个标签;有材料后首页右边会出现「整理 N 份材料」;右上角「检查一下」。本文档里说的「访谈」= 聊着建、「分析」= 整理材料、「体检」= 检查一下。
安装
这是一个 DeepSeek Harness 插件,跑在侧边栏里。
# 从本地目录装进你的 profile(替换成实际路径) dsh plugin --profile desktop add /path/to/LifeCard/plugin
⚠️ 这条命令底层是 pnpm,会重新解析整棵依赖树、把 profile 里所有插件按锁文件重装一遍。
如果你的 profile 里有手工改过代码的插件,它会被覆盖。这种情况请手动装:把整个目录复制成
~/.dsh/profiles/<profile>/node_modules/dsh-lifecard,再在cordis.patch.yml末尾加
- insert: [{ id: lifecard, name: dsh-lifecard }]。
装完重启 DSH App(桌面版的 profile 被它独占,改了文件也不会热更新,必须重启)。
重启后,左边那排图标里会多一个 Life Cards(一个打开的小本子)。点一下,中间主区域就是它。
另外,如果你装了 dsh-better-sidebar(侧边栏底座),右边那栏的「+ / 新标签页」列表里也会有一条 Life Cards,可以把它开在右边长期看着。左边那个入口不依赖它——没装底座也照样能用,只是少了右边这个。
第一次打开
它会问你要一个文件夹。选一个空目录,或者一个已经有 lifecard.config.json 的旧库。
这个文件夹就是全部数据:
我的档案/
├── lifecard.config.json 名字、语言、上次选的分析模型、你写的「想要什么样的人」
├── people/ 主世界的人 妈妈.card.md
├── self/ 我自己 + 偏好透镜
├── relations/ 有向关系边 mama--self.relation.md
├── worlds/ 世界观;导进来的世界书落成 worlds/<名字>/world.md
├── systems/ 消费协议(扮演 / 访谈 / 写作素材)
├── materials/ 原始材料,只追加、不编辑;可整份删除
├── interviews/ 访谈账本(问答过程,不是结果)
├── proposals/ 建议清单 + 你勾的那几项
│ 两份文件:.md 给人看,.json 给程序读,
│ 还有一个 .checked.json 记你在界面上勾了哪几条
├── story/ 小说章节与状态账本
│ ├── chapters/
│ ├── state/ledger.jsonl
│ ├── state/snapshots/
│ └── threads.jsonl
├── redactions.jsonl 删除墓碑,只追加
├── assets/ 头像(<卡 id>.png)和插图,导出时打进卡里
├── jobs/ 求职
│ ├── evaluations/ 每看一份招聘说明存一份报告
│ ├── applications.md 投递记录(一张表,你能自己打开改)
│ ├── story-bank.md 面试用的故事
│ ├── resumes/ 按招聘说明改出来的简历
│ └── covers/ 求职信
└── .lifecard/
├── index.json 派生索引,删了能重建
├── raw/ 导入的原件
├── drafts/ 写到一半的卡(存成功后自动删掉)
└── snapshots/ 每次保存前的全文快照
排法在 SPEC.md §1 里定死了,不要自己加目录。
jobs/ 那一套是求职时的记录,不是简历生成器:它能照一份招聘说明把你已经写过的经历重排一版,但不会替你编一个数字。改出来的简历里每个数字都能在你材料里找到同一个数字,找不到的会在页面上单独列出来告诉你「这几个数字在你材料里没有」——投之前自己核一遍。
它就是一个普通文件夹。 用 Obsidian 打开,全文搜、双链、标签、手机版全都有——不需要本插件也能读写。
怎么用
从零建一张卡(最常用的路)
点 聊着建,填名字、选关系类型,然后开始答。
也可以在自己对话里用 lifecard-interview 这个 skill 问同样的问题——它产出同样的材料,只是跑在对话框里而不是侧栏里。
1 / 12 你妈最像哪一种?
① 嘴上嫌弃,手上不停
② 很少说,但记性极好
③ 什么都问,问完自己拿主意
④ 都不像,我自己说
选完它会追问一件具体的事:
那么「嘴上嫌弃、手上不停」——最近一次这样,是什么时候? (要一件具体的事,不是评价。跳过也行)
四条规矩:
1. 每题都有「都不像,我自己说」。 没有这一项,你会被逼着从四个错的里挑一个最近的,最后得到一张写着别人妈性格的卡。
2. 随时可以跳过。 说「不想说」的题记进账本,以后永不再问。
3. 一次最多 3 个问题。 答完一句就能停,下次接着来——它记得停在哪。
4. 它不替你总结。 不会给你「她是一个温柔而坚韧的母亲」这种句子。原话进 materials/,概括由你自己写。
导入已有的酒馆卡
点 导入,把 PNG / JSON / CHARX 拖进去,可以一次拖多张、也能拖整个文件夹。
- 不认识的字段原样保存(V2 规范要求「绝不能销毁」),导出时写回
- 原始文件复制到
.lifecard/raw/,方便核对 - 不执行宏、不跑 decorator —— 这是编辑器,不是播放器
- 整个导入过程不联网、不调模型
- 支持
.png(带chara/ccv3两种标签)、.json(CCv2 / CCv3 / V1)、.charx(zip)
把材料变成卡
点 整理材料(首页右边那个按钮),选一张卡和要用哪些材料,然后:
1. 模型读材料,产出每一条都带原文引文的建议
2. 程序做机械校验:引文必须在材料里逐字出现,对不上的整条丢弃
3. 你在清单上勾选,点「就用这 N 条」
AI 全程不能直接写卡。 它只能写 proposals/,勾选和落盘是你的动作。这不是流程偏好——模型会把「它推断的」说成「材料里有的」,而且说得比人更自信。三个月后你分不清哪句是本人说的,就再也救不回来了。
导出
- 导出 PNG:
chara(V2)与ccv3(V3)两个 chunk 来自同一个源对象,V3 是 V2 的严格超集。SillyTavern 的read()以ccv3优先,两份独立投影会让同一张卡在两个前端里变成两个人。 - 导出 JSON:CCv3 格式。
写小说
写小说 那扇门里先选一本(或新建一本),一本书就是三个文件:
books/<书名>/book.md 书名、题材、一句话 books/<书名>/outline.md 大纲:主线、结局、第 N 章各写什么(这一个人能直接改) books/<书名>/chapters/001.md 正文,一章一个文件
三步:
1. 先想清楚这本书怎么走——点「让 AI 想大纲」,或者自己在 outline.md 里写。大纲是纯文本,你想怎么改就怎么改。
2. 写第 N 章——点「让 AI 写这一章」。它一次会拿到四样东西:这一章的计划(大纲里对应的那一句)、整本大纲、上一章结尾、挂在这本书上的角色卡。出来的是一份草稿,你看了点「收下,写进这一章」才落盘。
3. 挑挑毛病——只把正文给它,不给书名、不给大纲、不给「本来想写什么」。这样它挑的是「写出来是什么」,而不是按你的意图夸你写得对。四条固定要求:卡在哪、哪不信、哪想跳过、哪句是空话(要引原句)。
章号不重排:删了第 3 章,第 4 章还是第 4 章。你手里说的「第四章」不会突然变成第三章。
一本书还能挂「文字小说游戏」:挑一章当起点,它写这一刻发生了什么,给你 A/B/C 三个方向,你选一个,它接着往下推。玩出来的东西也能一键变成小说的一章,你选过的那几步会保住。
酒馆(角色扮演)
酒馆 那扇门里挑一张虚构角色卡,点一张就开一场。开场白是第一条,之后你说一句它回一句。
- 世界书按关键词进:常驻条目每轮都带;其余条目只有最近六句话里出现了它的关键词才带。不像写小说那样整本设定全塞进去——演的时候塞满了,它就只会复述设定。
- 现实里的卡默认收起来。真人有真人的记录,拿去演会复制一份独立的角色卡(
-role后缀),之后你把副本的性格改成完全相反都动不到原来那张。 - 收个尾:聊到一段落点「收个尾」,它把到这儿为止发生的事、定下来的事、还没解决的事记成一段备忘,存进这场对话的
## 到这儿为止。不满八句不收,因为三句话总结出来的东西比没有更误导。下次接着说,这段备忘每轮都带着。 - 挑几句进卡里:演出来好用的说话方式,可以挑 4~8 句写回那张卡的「对话示例」小节,下次演就更像。
- 变成小说的一章:一场对话可以整段改写成小说正文,存进某本书的下一章。
对话存在 chats/ 下,一个 Markdown 文件一场,用记事本就能打开看。
简历与规划
真实人物记录 门里的工具行有「简历与规划」。两边分开:
- 左半边是你自己:基本情况、学过什么、做过什么、会用哪些工具、想去哪、还差什么。照这个可以直接写一份简历(它会按你填的「想投哪儿」调重点),也能看「差在哪」。
- 右半边是路
…(truncated)
Rendered from the README published on npm. Formatted only, not edited.
Versions
Published on npm::8,最后更新 2026-11-01