PluginWorld
Ds

dsh-adult-tension

dsh

DeepSeek 自带破甲 18+ 互动叙事:活人感 NPC(自主决策/拒绝迎合)、211个世界与上万素材、开局随心定制、世界自行运转、零漂移存档。

@daha1216 · no license · updated 6d ago

SECURITY

B

SCORE

63

STARS

▲ 439

PLUG IN

git clone https://github.com/daha1216/dsh-adult-tension.git

No npm package published — plug in from source

README

Adult Tension。像素风黄昏卧室:一个人坐在床边弹红色电吉他,窗外是霓虹城市,窗上写着 ADULT TENSION;她头边一个像素思考气泡,写着她的心里话:再弹一首……他该来敲门了吧。18+,尺度全开,真实成人互动,Claude Opus 5.5 从零重构。下方三栏:活人感 NPC、211 个深度世界、自运行状态机。

中文 · English

dsh-adult-tension
专为高张力、强连续性的成人互动叙事打造

18+ 深度破甲 · Claude Opus 5.5 重构
原生 Agent Skill | 活人感 NPC
数千余项素材库 | 零漂移 SQLite 状态机
——这里没有百依百顺的玩偶,只有各怀心事的成年人。


超多世界 · 支持与赞助 · 体验切片 · 怎么开始 · 安装


内置世界库:跨时代独立世界框架和一万四千余项素材。世界分类展示:17 盒录像带封面朝外排成两排,一类一盒:宫廷与江湖、仙侠与志怪、和风与神社、清末民国、欧陆古典、邻里与屋檐下、百工与夜铺、学府与书斋、黑道与豪门、职场与律政、谍战与战地、舞台与镜头、赛场与博弈、绝境与重工、科幻与末世、圣堂与魔裔、王都与剑魔;每盒顶上写着这一类有几个世界,封面是这一类的小夜景,底下贴着分类名;全部 211 个世界已开放,整面录像带墙就在下方。下方磁带架写着一万四千余项素材:970+ 地点、1270+ NPC 角色、940+ 玩家身份、1120+ 人物组合、910+ 张力引擎、1770+ 日常活动、1270+ 压力事件、3330+ 开场钩子、1460+ 中期转折、1740+ 规矩与风俗。


每次开局都是同个世界里的真人真事和老规矩,绝不拿随机名词糊弄人。

所有世界都已开放,挑一个抓起来就能玩。
图里没有想要的?直接喊“自定义世界”,说你想去哪年哪地,当场给你现造一个。

录像带墙:211 盒录像带平放叠在一家深夜租碟店的胡桃木货架上,侧脊朝外印着世界名,按题材分为 17 栏,排成四层货架,每层一枚铜铭牌:东方与古典(宫廷与江湖、仙侠与志怪、和风与神社、清末民国),西式与年代(欧陆古典、邻里与屋檐下、百工与夜铺、学府与书斋),都市与暗线(黑道与豪门、职场与律政、谍战与战地、舞台与镜头),幻想与绝境(赛场与博弈、绝境与重工、科幻与末世、圣堂与魔裔、王都与剑魔);每栏标着世界数,八盒推荐片被抽出半截、亮着金色小灯,全部已开放,可直接开局。


☕ 支持与赞助

如果 Adult Tension 为你带来了乐趣、灵感或良好的互动体验,欢迎请作者喝杯咖啡或投喂罐头,感谢每一份支持与鼓励!作者被裁员,收入不稳定,感谢支持。

支付宝收款码 - 南瓜他爹大哈
打开支付宝 [扫一扫] · 感谢对开源与独立创作的支持与认可


体验切片:真实会话交付实录

港口夜班 · 有压力模式。 你是夜班调度,台风封港前最后一班船,第三排最底下的集装箱过磅足足超了四吨。吊具十四分钟后咬合,手边还压着船公司塞过来的厚红包。

👤 你: 我去找能帮上忙的人,把情况跟对方说清楚

你往后退了半步,手腕一翻避开了红纸包。红纸包顺着硬板纸滑落在铁皮箱边缘,船公司代表潘宝珠脸上的笑意微微一滞,手慢慢收回风衣口袋,眼神在水银灯的阴影里深了下去。

远处桥吊的铁爪在头顶发出刺耳的金属摩擦声,还剩十三分钟。

👤 你: 我想让对方答应替我分担一部分,看对方肯不肯

两排集装箱夹出的深隙里黑得见不到底,湿热海风灌进来像抽风机一样啸叫。你把装卸班组长梁嘉欣拉进铁壁阴影里,压着嗓子把想让她搭一把手的意思递了过去。

梁嘉欣残缺的左手在粗布工裤上蹭了蹭,眼神沉得像浸了海水:

“阿青,当年你刚进调度室,台账还是我教你对的。你想让我帮你扛,行,但话得摆在明处——我可以用班组长的名义在频道里喊一次吊具钢丝绳例检,硬把七号机停下来,顶多给你匀出二十分钟。但放行单是你们调度的事,那个超重四吨的单子,字我绝对不签,出了事我也绝不会替你顶。能给你的,就这两轮机的时间。”

【时间】第一天 23:36 | 【地点】堆场通道 | 回合:5

两个人都没有因为你开口就顺从:一个被拒后收敛了客套,一个匀出二十分钟却坚决不替你签字。
成年人的世界里没有无条件的庇护,每一步退让都有明码标价的底线。

出自真实试玩记录,宿主 opencode,模型 gemini-3.8-flash,删节处用“……”标出。全文:opencode-pt-harbor_night_shift-pressure-r3.json · 全部试玩与评分:reports/playtests/playtests.md


为什么不会崩盘:模型写故事,本地引擎守事实

普通 AI 常见表现 Adult Tension
角色态度 无底线顺从,有求必应 每个 NPC 有目标和底线;回应分拒绝、协商、有限配合、表面配合、真诚配合五档
成人内容 写到关键处一句带过,或突然跳到“事后” 尺度由你定:不强制淡出,你要求写到哪步就写到哪步;全员成年、同意可撤回、硬边界由引擎执行
长线记忆 聊十几轮就失忆,关系与设定漂移 人物、关系、时间、事实都存在本地 SQLite;每回合上下文不超过 20 KB
时间推移 你离开后,世界停在原地 快进时,不在场的人各有动静,承诺到期、风声传开
进度保存 关掉窗口就白玩 命名存档、另存为、导入导出;重试不会重复推进,升级前自动备份

还有三处细节:名字按时代和地域取,不出戏;用词不穿越,盛唐的人不说“OK”;每个 NPC 都有表里两副样子,开了“内心可见”,你能看见他没说出口的那句话。


怎么开始:不用记语法,直接说大白话

开一局

你说 会发生什么
开局 完全随机;会先问你选“日常”还是“有压力”
开局,港口夜班 指定世界
开局,不要职场 排除题材
开局,我是三十岁的女摄影师 设定你自己
自定义世界 没想好就先给一份灵感清单
自定义世界,民国的一座山城…… 模型当场写一个世界
开局 我的世界 名字 用保存过的世界再开一局
重开 42 号 同一种子,原样重来

推进剧情

新局依次给出“世界观”“人物”和正文,正文停在一个等你接手的动作上。直接写动作或台词:

我走到她面前,把文件放在桌上:“我们单独谈谈。”

随时调整

你说 会发生什么
继续 · c 向前推一幕,场面里至少有一处变化
快进到明天早上 不在场的人各有动静,到期的事有结果
状态 关系、承诺、风声、快到期的事
存档 · qs 存到当前存档槽
另存为 名字 · 读档 名字 另存一条分支,或从那一刻接着玩
存档列表 所有存档
保存世界 名字 · 我的世界 把自定义世界存下来;查看存过的世界
导出 · 导入 导出存档文件,换台电脑也能续
刚才不算 撤销或改写上一回合
内心可见 开 · 暂停 · 边界:不要 X 看见没说出口的话;立刻停下;划一条引擎替你守的线

同一个存档被另一个窗口改过时,会提示你读最新版、另存为,或取消,不会静默覆盖。


安装:只需交给 AI 操作,原生 SKILL

不需要 pip install,不需要设环境变量,也不需要任何 API Key。

让 AI 替你装,在宿主里说:

帮我安装这个 skill:https://github.com/daha1216/dsh-adult-tension (Skill 在 skill/adult-tension 目录)

或者手动装,把 skill/adult-tension/ 放进宿主的 Skill 目录:

git clone --depth 1 https://github.com/daha1216/dsh-adult-tension.git
cp -r dsh-adult-tension/skill/adult-tension ~/.dsh/skills/
宿主 Skill 目录
DeepSeek Harness (DSH) ~/.dsh/skills/ · 项目里的 .dsh/skills/
Claude Code ~/.claude/skills/ · 项目里的 .claude/skills/
Codex ~/.agents/skills/ · 仓库里的 .agents/skills/
OpenCode ~/.config/opencode/skills/ · 项目里的 .opencode/skills/
pi ~/.pi/agent/skills/ · ~/.agents/skills/

然后开一个新对话,说:“看看 Adult Tension 能不能用。”

存档在哪里,升级会不会丢

存档永远不放在 Skill 目录里,升级、卸载都不会动它。

系统 数据目录
Windows %LOCALAPPDATA%\adult-tension
macOS ~/Library/Application Support/adult-tension
Linux $XDG_DATA_HOME/adult-tension,未设置时 ~/.local/share/adult-tension

也可以用环境变量 ADULT_TENSION_HOME 或参数 --data-dir 指定。升级就是替换 Skill 目录;数据库格式变了会先自动备份再迁移,失败就恢复。

用什么模型玩

出文效果随模型版本、上下文长度和平台配置变化;对话越深,角色一致性和语感越依赖模型本身。时间线、关系和存档由本地引擎守着,换模型也不会丢。上面的实录用的是 gemini-3.8-flash。

使用边界

  • 仅限成年人。 所有人物与情节均为虚构,全员成年;同意随时可以撤回;硬边界由引擎执行,不靠模型自觉。
  • 需要一个能运行本地命令的 Agent 宿主,比如上表里的几个。宿主怎么把对话发给模型,由宿主和你选的模型服务决定;存档只存在你自己的电脑上。
  • 出文质量取决于模型。 引擎保证事实不漂移,文笔和分寸还是模型的事。
开发者
skill/adult-tension/     可安装的 Skill:SKILL.md、references/、runtime/、编译好的世界包
content-src/worlds/      世界包源文件
tools/                   编译、校验、开局预览、模拟、基准测试
tests/                   core · content · integration · e2e
reports/                 试玩记录、评审、基准与验收证据
spec/                    需求规范
PROGRESS.md              进度、实际数字、待决事项

运行时只用 Python 标准库;SQLite 是唯一的状态存储,只有一个写入口。每个写操作都带 request_id,会话内的还带 expected_revision,重试不会重复推进。

python -m unittest discover -s tests/core
python tools/validate_skill.py skill/adult-tension

加一个世界:按 spec/CONTENT_BIBLE.md,用 tools/new_world.py 起草,tools/preview_openings.py 逐条读开局,通过校验和开局多样性门禁,再经真实试玩,才从 review 转为 released。


SKILL 架构:无需理会,当正常 SKILL 使用就行。玩家对 Agent 宿主说话,宿主按 SKILL.md 用 JSON 调用本地运行时;运行时分 adapters/cli、application、content、projections、persistence、domain 六层,存档写进用户数据目录里的 SQLite;世界源文件由 tools 编译成只读世界包。


由 Claude Opus 5.5 从零重构。仅限成年人,所有人物与情节均为虚构。

SIMILAR PLUGINS