Back to skills
SKILL.md
Stage Setup
ASecurity开一场正式的 RP 之前怎么准备(2026-09-06 整体重写):问清玩法 → 处理酒馆卡 / 预设 → cast_role 写人 → open_stage 交故事(设定 / 状态值 / 规则 / 面板 / 开场参考 / 写法预选)→ 退到后台。也管中途:玩家回来找你时先 stage_status 看演到哪;改人设 / 改规矩 / 挂背景 / 换写法各走哪条路。用户说"我想玩个 RP""用这张卡演起来""换个设定重开",或丢来酒馆角色卡 / 世界书 / 预设,或演到一半要改东西时用本 skill。
- 37 stars
- 0 votes
- 0 copies
- 0 views
- Added September 26, 2026
Security analysis
100/100npx -y skills add Xiaokebuyu/Nodesign --skill stage-setup --agent claude-codeAre you the author of Stage Setup?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/xiaokebuyu-stage-setup)---
name: stage-setup
version: 0.2.0
description: 开一场正式的 RP 之前怎么准备(2026-09-06 整体重写):问清玩法 → 处理酒馆卡 / 预设 → cast_role 写人 → open_stage 交故事(设定 / 状态值 / 规则 / 面板 / 开场参考 / 写法预选)→ 退到后台。也管中途:玩家回来找你时先 stage_status 看演到哪;改人设 / 改规矩 / 挂背景 / 换写法各走哪条路。用户说"我想玩个 RP""用这张卡演起来""换个设定重开",或丢来酒馆角色卡 / 世界书 / 预设,或演到一半要改东西时用本 skill。
---
# 这一步在干什么
写故事的不是你。正式的 RP 在**演出显示器**上演:一个独立的演出进程写每一段,玩家的话直接进它的队列,
不经过你。你做两件事:**开场前准备、中途在后台帮他**。进程起不来就照实告诉他(服务端日志里 `[stage]` 那几行),
⛔ 不自己在对话里代演。
一个故事 = 工作区里的**一个文件夹**(按标题起名),里面自成一体,画布上是一张卡:
```
<故事>/
台面.md 这个故事的全部:世界 / 规矩 / 怎么演 ← open_stage.table
角色/<名>/角色卡.md 一个人的全部(+ 他记得的事的索引) ← cast_role(落点见下)
规则.json 成就与推进的阈值,机器只做比较 ← open_stage.achievements / triggers
面板.json 背包 / 装备 / 商店 / 清单(跑团类才有) ← open_stage.panels,进程 update_panel
戏.json 标题 / 在场者 / 状态面板 / 写法 / 开场参考 / 线路 ← 机器维护
预设/ 写法预设(玩家上传的酒馆 JSON 自动拆成开关)
世界书/ 导入的酒馆世界书,一条一文件,机器按关键词自动送
记忆/ 场景/ 素材/ ← 机器维护
```
⚠️ 角色卡落在哪个 `角色/` 由工作区当时的状态决定,不是永远在故事文件夹里:工作区里正好只有一场戏时
`cast_role` 直接写进那场戏;还没开戏、或者已经有好几场时写在**工作区根上的 `角色/`**,那是共用角色库,
`open_stage` 按名字照样找得到,多场戏可以引用同一张卡。**卡不会被自动搬动**,所以先 cast 后 open 的卡
就一直留在根上,这是正常的,别去挪它(09-07 更正:这里以前写着 open_stage 会搬,那句是错的)。
演出进程的系统提示词 = 设定 + 每张在场者的卡(含玩家对「可选」一节的勾选)+ 记忆索引 + 玩家挑的写法预设
+ 面板清单,别的什么都没有。**项目 CLAUDE.md 不进去**(那是你的档案),⛔ 别把规矩抄一份进去。
# 开场流程(按顺序)
1. **第一轮问四件事**,`AskUserQuestion` 一次问完(一题四个选项,他也能自己写):
- 想跟谁演:一对一 / 一群人 / 由你安排
- 难度:爽(世界顺着他)/ 写实(他和普通人同权)/ 严酷(世界带恶意,但漂亮的输入该赢还是赢)
- 代笔到哪一步:全代入(他的角色一个字不代写)/ 大纲档(他给大意进程扩写,重要抉择停笔等他)
- 按哪套规矩写:不用预设,只按设定写(默认)/ 更文学的质地(文学派:禁明喻、长句为主)/ **我有自己的酒馆预设 JSON** / 想要某种特定文风(轻小说、武侠、网文…让他说一句)
前三条落进设定的「规矩」节;第四条选文学派或自己的预设落进 `open_stage.style`(表在文末「写法预设的模块表」),
选特定文风的把他那句话写进设定的「规矩」节(节奏、人称、对白多少、每段篇幅他提了也写在这里)。
2. **选了文学派就再问一题写法**:涌现式叙事(默认)/ 事无巨细 / 活泼通俗。他选默认或没答**不传**;选了别的按模块表翻成 `on`。
**回答要落成预选,不是记在心里**:开场页会把你动过的每个开关标成「agent 预选」,他能改,改了以他的为准。
3. **他有自己的预设**:让他把 JSON 拖进对话(附件落在 `用户内容/`,画布上是一个文件夹;路径在他的消息附件里)→
`read_tavern_json` 看 digest,确认是预设(有 prompts + prompt_order)→ `mkdir -p <故事>/预设/` 后把文件拷成
`<故事>/预设/<名>.json`(故事文件夹名跟你要传给 open_stage 的 title 一致)→ `open_stage.style = { preset: "user:<名>" }`,
⛔ 不传 on/off:条目要机器拆过才有 id,他在开场页自己勾。digest 里列出的条目名可以念给他听,问哪些不要。
酒馆世界书里那些由玩家决定要不要的条目(某条支线、某类内容、某个人物线)按他的回答列进 `open_stage.lore.off`,开场页同样标「agent 预选」。
4. **他丢来的酒馆东西**:加载 `story-import`,按落点表拆(人 → 卡;开场白 / 场景 → `opening`;
世界书 → `世界书/`;变量 / 状态栏 → `vitals` 和 `panels`;预设 → `预设/`)。
5. **`cast_role` 一人一张卡**(下面「角色卡怎么写」)。
6. **`open_stage` 一次交出去**(下面「open_stage 参数」)。它**不起进程**。
7. **你退到后台。**玩家双击卡进显示器,先到开场页:看世界、你们定下的规矩、在场的人,改写法、勾角色卡上的可选条目、点开始 ——
机器写开场指令、生开场背景、起进程。⛔ 别替他说第一句去开场;⛔ 之后别在对话里代演、别复述显示器上的剧情。
# 设定怎么写(`open_stage.table`,落成 台面.md)
三节,按这个顺序,别加节:
```
## 世界
时代、地点、这个世界跟现实差在哪。三五行,不写设定集。酒馆世界书里真常驻的十条以内放这儿。
## 规矩
难度档、代笔档、有没有骰子、这个故事特有的文风铁律("意象是暗线只写行为"这种)。
通用的写作规矩(禁转折句、对白不挂语气…)不铺开写 —— 选了预设那是预设的事;没选预设而他在问答里提了文风、人称、篇幅、对白多少,各写一句在这里。
## 怎么演
这个故事特有的口味:骰子用 d20 还是 d100、多久存一次档、选项里那枚"意想不到"偏哪个方向、镜头能不能切到玩家不在的地方。
工具怎么用不用写,机器自己接在提示词末尾。
```
**冻结纪律**:系统提示词每轮原样重发,命中缓存的读取成本极低,改动一个字则整份重新计费。所以设定只放整场不变的
(世界、规矩、文风铁律);每轮会变的(时间地点、状态数值、这一段轮到谁、刚触发的世界书)⛔ 不进设定 ——
状态值和面板走消息体,世界书由机器按关键词送。实测对比:酒馆四方世界卡每回合 75k-95k 输入、缓存读恒为 0,
单回合成本约 $1;本产品同一故事从第二段起整块命中缓存。差别不在模型,在这一条纪律。
**人不进设定,世界不进卡**:八个人的故事写进八张卡就是八份世界副本;卡里只有人,这个人才能跟着卡跨项目搬。
# 角色卡怎么写(`cast_role`)
判据:**有名字、还会再出现、玩家会想单独跟他说话的**写卡;一句话的过场(端酒的店小二)不写。
persona 里写:他是谁、怎么说话、绝不做什么,**带两三句语气样本** —— 样本比形容词有效得多,
「她说话短,不解释自己」不如直接给一句「"我听见了。"」。用户给了现成的卡,原样搬优先于改写。
**由玩家决定启不启用的设定**(某条支线、某个癖好、某段前史、NSFW 倾向)写进卡的一节 `## 可选`,一条一行:
`- [ ] 有个弟弟 — 家里还有个初中的弟弟,周末要接他`(`[x]` 默认开)。开场页画成开关,玩家勾完随卡进提示词。
⛔ 别替玩家决定,也别把这类条目写死进正文。
卡末尾那块 `nd:memory` 标记是机器维护的记忆索引,你和用户都别碰;正文在 `角色/<名>/记忆/`,进程用 `remember` 带 `who` 往里写。
**一人分饰多角是定案**(不派子代理)。所有人一个腔是最大的风险,防它靠两件事:每个人自己的卡带语气样本;
提示词里留着"开口前拿不准腔调就 Read 一遍他的卡"。
# 数字归机器:状态值、规则、面板
正文里不出现数字。三样东西各有各的家:
- **状态值 `vitals`**(标量:好感 62、时间 08:00、金钱 40):`[{key, label?, as, max?, unit?, options?, initial?, who?}]`,
`as` = bar 进度条 / chips 几格亮一格 / num 数字 / text 一行字;`who` 是属于哪个在场者(好感属于她,天气不填)。
进程每段在 `write_scene.state` 里报改了的键;机器另补 `拍数`。⛔ **key 要跟你在设定、规则里写的一字不差**
(键名不一致会导致面板数值恒为 0)。
- **规则 `achievements` / `triggers`**(拿状态值比较,别的一概不做):
成就 `{id, title, desc, when, tier, hidden}` 达成弹奖杯,阈值按难度定(宽松档 40 即可触发"她笑了",严苛档需 80),
事件型靠标志位 `牵手 == 1`;推进 `{id, when, note, once}` 条件一成立机器把 note 当便条递给进程,
从酒馆卡的分阶段规则翻(「好感过 60 进熟稔期」就是一条),`once` 默认 true。
`when` 写法:`键 比较符 值`,`and` / `or` 连,比较符 `>= <= > < == !=`,不支持括号;写错 open_stage 当场退回。
- **面板 `panels`**(清单:背包里有什么、身上穿什么、铺子里卖什么、手头哪些任务),跑团 / 冒险类才要:
| kind | 用在 | 要填 |
|---|---|---|
| `inventory` | 背包、行囊 | `items` 开场就有的 |
| `equipment` | 某个人的装备与穿着 | `who`、`slots`(默认 头 / 身 / 手 / 脚 / 饰品) |
| `shop` | 铺子、摊子 | `items` 带 `price`、`currency`(哪个状态键当钱,**要在 vitals 里声明**)、`into`(买到的进哪个背包) |
| `list` | 任务、线索、人情账 | 随意 |
一块面板 = 显示器顶栏一页 + 故事页的快捷入口。进程拿到 / 用掉 / 穿上 / 标价用 `update_panel`(在 write_scene 之前),
走进新铺子自己 `open` 一块。玩家在显示器点"买 / 用一个 / 装上"时走的是同一套记账逻辑,然后一条【便条:玩家自己动了面板】
随下一句带给进程。⛔ 恋爱日常不硬加面板;⛔ 不要把面板条目并入 vitals 充数。
# 演出进程手上的工具(五件常备,第六件看权限)
基本用法机器自动接在提示词末尾,你只在「怎么演」里写这个故事的口味。心里有数就行:
- **`write_scene`**:正文 + 2-4 枚选项 + state。显示器上只认它写的;它一返回这一轮就结束(所以别的工具都在它之前调)。
选项的按钮名和小字写玩家**具体会做什么**,⛔ 不许写"主线 / 人际 / 意外"这类类别词(机器会剥掉)。
- **`update_panel`**:面板记账,见上。
- **`remember` / `forget`**:一事一份,只在不可逆的事发生时记(关系变了、伏笔埋下、世界确立新事实、玩家做了回不了头的选择);
某个人记得的事带 `who` 进他的卡。⛔ 不记流水账。
- **`illustrate`**(玩家允许配图时才有):插图 / 换场背景 / 立绘,立刻返回后台画,两张之间至少隔三段,整场最多 40 张。
- **`roll`**:判定骰,服务端真随机(骰面 / 颗数 / 修正 / 难度 / 优势劣势,给了难度机器直接报成败)。选项也能带判定(`choices[].check`:名目 + 难度),玩家点下去机器代掷,成败随那句话进进程。什么时候掷、怎么写成败的纪律机器已接在提示词里;这个故事用 d20 还是 d100、有没有修正,写在「怎么演」。
# 记忆怎么接回来
不用你贴。两个家机器都接:某个人记得的事在他的卡上(随卡进提示词,换一个故事还是他);这个故事的事在 `<故事>/记忆/`,
索引接在提示词末尾。都只贴索引不贴正文,进程按需 Read。⛔ 别自己去读那些目录再摘要进设定 —— 两份真相。
# open_stage 参数
| 参数 | 填什么 |
|---|---|
| `title` | 故事的名字,卡上和显示器顶栏都显示它 |
| `table` | 设定全文(上面那三节) |
| `cast` | 在场者 `[{name, note?}]`。**每个 name 都要已经有卡**,且跟卡 frontmatter 的 name 一字不差 |
| `vitals` | 状态值声明,见上 |
| `achievements` / `triggers` | 规则表,见上。没设也能演 |
| `panels` | 面板,见上。恋爱日常不加 |
| `opening` | 酒馆卡的 `first_mes` + `scenario` 原文(占位符不用改)。玩家点开始时机器交给进程当第一段的底:照地点、时刻、气氛写,不照抄 |
| `style` | 写法预设 `{preset, on, off}`。他选了文学派就传 `preset: "literary"`,问答里表了态的按文末「写法预设的模块表」翻成 on / off 传进来(没表态的组别动,留默认);没选预设就不传;开场页把你动过的每个开关标成「agent 预选」。他交了自己的酒馆预设就 `preset: "user:<名>"`,不传 on/off |
| `lore` | `{off: [条目名]}`:按他的回答**预先关掉**的世界书条目(名字用 read_tavern_json 导出时的)。他没提的全开,别替他关 |
| `images` | 演出进程能不能自己配图(关键转折的插图 / 换场背景 / 立绘)。每张约 $0.20、一分钟,计入玩家每日额度。**他在问答里明确说了才传**;不传他在开场页自己开。开了之后换场背景由进程画,机器的模板图不再生 |
| `model` | 演出进程用哪个模型。只在他点名要某个模型时传,且得是他账号当前能选的(选不了会当场退回);不传用默认,他在开场页 / 外观页自己挑 |
| `skin` | **留默认**。别替用户挑外观,他在显示器「外观」页自己换 |
同名再调一次 = 换设定重开:设定 / 规则重写,进程停掉,场景和记忆都留着,下一句话到时接上前文。
用户要"从头再来"让他自己删画布上那张卡,别替他删。
# 中途:他回到对话里找你
**先 `stage_status`**(只读不起进程)看此刻的状态值、最近几段、记住的事、成就与已触发的推进,再接话 ——
别拿开场时你写的设定当现状。然后按事情走:
| 他要 | 你做 |
|---|---|
| 改人设 | `cast_role` 重登同一个 id,或告诉他显示器「角色」页能直接改卡。改完下一句话进程自动重开 |
| 改规矩 / 换玩法 / 加人 | 再调 `open_stage`(场景和记忆留着) |
| 改状态值 | 只有显示器「状态」页能拨(现值从场景流折出来,`戏.json` 里的 vitals 只是初值,改它不动现值)。他要改就请他点一下 |
| 来张背景图 | `generate_image` 出图后 `stage_backdrop`(fixed 立刻挂 / scene 按地点登记 / clear 撤)。机器换场本来就会自己生,玩家「外观」页能关。⛔ 别猜字段名往 戏.json 里塞 |
| 给某人画立绘 | `generate_image`(半身、单人、素底)出图后 `stage_backdrop mode=portrait who=<名>`:图进 `角色/<名>/立绘.<原扩展名>`,人物栏立刻换。⛔ 别自己 cp 到别的地方 |
| 想让进程自己配图 / 换模型 | 告诉他显示器「外观」页有开关和模型选择器;或你再调 open_stage 带 `images` / `model` |
| 换文风 | 告诉他显示器「设定」页的写法能改;或你再调 open_stage 带 `style` |
| 回到某一句 / 另开一条线 | 显示器里他自己做(悬停在自己说的话上);你不用动 |
| 想让某人自己来演 | 如实说明:当前版本由演出进程统一扮演全部角色,人物设定的一致性不受影响 |
# 写完自查
- [ ] 设定三节齐了,里面没有人物(人物在卡上),也没有每轮会变的东西
- [ ] 没有项目 CLAUDE.md 的内容
- [ ] 每张卡都有语气样本;玩家自选的条目进了 `## 可选`,没替他决定
- [ ] cast 里每个名字都有卡,且跟卡 frontmatter 的 name 一字不差
- [ ] 规则表的键都在 vitals 里声明过(或是机器补的 拍数),阈值按难度定过;键名跟设定 / 规则一字不差
- [ ] 商店面板的 currency 在 vitals 里声明过;恋爱日常没硬加面板
- [ ] 酒馆卡的 first_mes / scenario 进了 `opening`,没自己替他开场
- [ ] skin 留的默认;style / lore / images / model 的预选只反映他说过的话,没表态的没动
- [ ] 调了 open_stage,而不是自己在对话里开始
<!-- presets:gen:start -->
# 写法预设的模块表(由 preset.json 自动生成,⛔ 请勿手动修改;修改 preset.json 后执行 `node server/scripts/gen-presets-doc.mjs`)
`open_stage.style = { preset, on: [...], off: [...] }`:`on` 在默认勾选之上加开,`off` 关掉。互斥组(★)里开一个,机器自动关掉同组默认的;总是开的组(●)关不掉。
开场页会把你动过的每个开关标成「agent 预选」,玩家能改,改了以他的为准。**他没说的组别动,不传。**
## 他说的话 → 该动哪个开关
| 他大概会说 | 动作 |
|---|---|
| 一点都别省 / 事无巨细 | `{ preset: "literary", on: ["exhaustive"] }`(预设 `literary`) |
| 轻松通俗 / 别文艺腔 | `{ preset: "literary", on: ["lively"] }`(预设 `literary`) |
| 像轻小说 / 像武侠 / 像网文 / 像金庸 / 像广播剧… | 不动预设,他那句话写进设定「规矩」 |
| 想要更文学的质地 / 长句 / 不要比喻 | `preset: "literary"` |
| 他交了自己的酒馆预设 JSON | 文件放 `<故事>/预设/<名>.json`,`preset: "user:<名>"`,⛔ 别传 on/off(条目 id 拆出来才有) |
| 别替我说话 / 我的角色我自己来 | 这是代笔档,写进设定「规矩」,不动预设 |
| 难度 / 世界顺不顺着他 | 写进设定「规矩」,不动预设 |
## `literary` · 文学派(专家预设)
更偏文学质地的一套:严格的文学逻辑与句法(禁明喻、禁否定式转折、禁破折号、长句为主),三种写法选一种,外加一个自主运转的世界。
### 文学逻辑与句法 ●
- `logic` 文学逻辑 — 禁「像是 / 仿佛 / 似乎」引出的从句、极少明喻、不拿数字代替细节、砍掉属性堆叠的修饰(默认开)
- `sentence` 句法 — 长句为主,每句至少八个字;不把一个动作拆成碎短句;不用碎片修饰语代替描写(默认开)
### 写法(只选一种) ★
- `emergent` 涌现式叙事 — 具体、不吝笔墨,多感官,发声必写台词(默认开)
- `exhaustive` 事无巨细 — 不概括、不压缩,时间连续
- `lively` 活泼通俗 — 口语为底,吐槽跳脱,禁文艺腔
### 世界
- `live-world` 活的世界 — 环境与他人不因你而冻结(默认开)
<!-- presets:gen:end -->
Attribution
Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.