Phase 0: scaffold kb structure, templates, and agent rules

- Initialize git repo
- Create kb/ directory: terms/, beats/, days/, production/, decisions/
- Create inbox/archived/ for processed files
- Update templates: beat (enhanced narrative state + production), character (aliases + arc tracking), worldbuilding (tier + aliases), day (chapter + cumulative state)
- Add new templates: eureka (replaces inbox), decision
- Update outline template with retcon/TBD tracking
- Add AGENTS.md with AI operation rules
- Add .gitignore

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-02-23 13:01:57 +08:00
co-authored by Cursor
commit 2ba7615804
41 changed files with 6752 additions and 0 deletions
+83
View File
@@ -0,0 +1,83 @@
---
id: "" # 内容命名,不含Day前缀,例:"火山-结巴" "梦-海边-姐姐"
type: beat
beat_type: "" # 维修 | 场景对话 | 梦境 | 特殊
day: ""
order_in_day: 0
status: draft # draft | review | locked
dev_status: fiction # fiction | playable | function | close
emotional_tone: "" # 情绪基调,例:"压抑/解脱" "荒诞/温暖"
cuttable: false
cut_cost: ""
characters: [] # 出场角色列表,例:[佩佩, 火山]
terms: [] # 关联的 term 条目名
created: ""
updated: ""
tags: [beat]
---
# {{title}}
> **一句话概述**{供 outline 显示}
---
## 叙事状态
**设定放出进度**
- 世界观已揭露:{到这个 beat 为止,玩家知道了哪些世界观真相}
- 本 beat 新揭露:{这个 beat 会放出什么新信息}
- 尚未揭露:{哪些真相此时还必须藏着}
**角色状态快照**
- [[角色A]]:{此时此刻的心理状态、与医生的关系阶段}
- [[角色B]]{同上}
**心流节奏**
- 前一 beat 的情绪落点:{承接}
- 本 beat 的节奏:{如"极快,短句为主,压迫感" / "舒缓,长对话,允许走神"}
- 情绪落点:{玩家带着什么感受离开}
> [!retcon] 待定/待改项
> {列出本 beat 中所有拍脑袋的、可能被 eureka 推翻的内容}
> - `[#TBD: 说明]`
> - `[#Retcon: 哪个 eureka 触发的,影响什么]`
---
## Fiction
*不确定处用标记:`[#TBD: 说明]` `[#LogicHole: 问题]` `[#CharacterCheck: 角色名]`*
{开始写作}
---
## Production
**落地形式**:{纯对话 / 演出动画 / 沙盒交互 / 混合}
**沙盒逻辑**:{触发条件、分支、关键变量——用自然语言描述}
**Yarn 节点**
**美术文档**
**程序文档**
**制作备注**
- 演出:
- 机制:
- 关键变量:
**任务单**
```dataview
LIST
FROM "kb/tasks"
WHERE contains(beats, this.file.name) AND status != "完成"
```
---
## 变更日志
| 日期 | 变更内容 | 决策理由 | 来源 |
|------|---------|---------|------|
| | | | |
+117
View File
@@ -0,0 +1,117 @@
---
id: ""
type: character
aliases: [] # 别名/代号,如 ["Kirin", "调酒妹", "奇琳"]
status: active # active | suspended | archived
dev_status: fiction # fiction | playable | function | close
created: ""
updated: ""
tags: [character]
related_characters: []
related_worldbuilding: []
---
# {{name}}
> **一句话**:{用一句话说清楚这个角色是谁}
> **核心矛盾**:{他/她/它在两种力量之间撕裂——是什么 vs 什么}
> **创作意图**:{我们为什么要创作这个角色?想让玩家感受到什么?}
---
## 基础信息
- **名称**
- **代号**
- **年龄**
- **职业/机体类型**
- **视觉描述**
- **参考图**
---
## 核心机制
> 这个角色的 Gameplay 机制是什么?机制如何和角色的心理/叙事绑定?
**机制描述**
**Gameplay 体现**
**机制的叙事意义**
---
## 声音
> 给写作者和 AI 用的校准区。让这个角色"听起来像自己"。
**说话方式**:{句式、节奏、习惯——几句话描述就够}
**代表台词**
- "…"
- "…"
- "…"
---
## 前史与核心矛盾
{自然语言,写清楚这个角色是怎么变成现在这样的。
AI 和写作者都能从这里理解角色内部的逻辑。}
---
## 关系网
- **[[角色A]]**:{这段关系的本质和张力}
- **[[角色B]]**{同上}
---
## Arc 追踪
> AI 在每次聚合后更新。写作者写某个 beat 时,可以直接引用这里的最新状态。
| Beat | Day | 事件 | 角色内部变化 | 关系变化 |
|------|-----|------|------------|---------|
| | | | | |
---
## 关联 Beats
```dataview
TABLE beat_type AS "类型", day AS "Day", dev_status AS "制作状态"
FROM "kb/beats"
WHERE contains(terms, this.file.name)
SORT day ASC, order_in_day ASC
```
---
## 变更日志
| 日期 | 变更内容 | 决策理由 | 来源 |
|------|---------|---------|------|
| | | | |
---
## 冲突记录
| 冲突描述 | 版本A | 版本B | 来源 | 状态 |
|---------|-------|-------|------|------|
| | | | | 待裁决 |
---
## TODO
> [!todo]
---
## 原始来源
| 来源 | 状态 |
|------|------|
| | 已聚合 |
+34
View File
@@ -0,0 +1,34 @@
---
id: "" # D00, D01, D02...
type: day
title: ""
chapter: "" # 序章 | 第一章 | 第二章 | 第三章 | 第四章 | 第五章
emotional_arc: "" # 这一天整体的情绪弧线
created: ""
updated: ""
tags: [day]
---
# Day {{id}}{{title}}
> **章节**{{chapter}}
> **情绪弧线**{{emotional_arc}}
---
## Beat 列表
| 顺序 | Beat | 类型 | 情绪基调 | 落地形式 | 制作状态 |
|------|------|------|---------|---------|---------|
| 1 | [[]] | | | | |
---
## 本日结束时玩家已知
> AI 在每个 beat 完成后累积更新。写作者写下一天的 beat 时从这里获取上下文。
- 关于角色:
- 关于世界观:
- 关于剧情:
- 关于机制/玩法:
+19
View File
@@ -0,0 +1,19 @@
---
type: decision
date: ""
decided_by: ""
affects: [] # 受影响的条目文件名列表
tags: [decision]
---
# {{决策标题}}
**背景**{为什么需要做这个决策}
**选项**
- A{描述}
- B{描述}
**最终选择**{A/B/其他}
**理由**{自然语言}
**影响**{修改了哪些条目}
+48
View File
@@ -0,0 +1,48 @@
---
type: eureka
status: unprocessed # unprocessed | processing | done
priority: normal # urgent | normal | low
created: ""
source: "" # 会议 | 脑暴 | 飞书 | 灵感 | 测试反馈
affects: [] # AI 填充:受影响的 term/beat 文件名列表
tags: [eureka]
---
# {{title}}
---
## 原始内容
{把想法倒进来,任何形式都可以}
---
## AI 处理记录
**影响分析**
| 受影响条目 | 操作类型 | 具体变化 |
|----------|---------|---------|
| | 新建/修改/冲突 | |
**待人工决策**
{需要创意判断的问题,AI 不做决策,列在这里}
---
## Retcon 追踪
> AI 分析这个 eureka 会推翻/修改哪些已写好的内容
| 受影响文件 | 受影响区块 | 当前内容 | eureka 要求 | 状态 |
|-----------|----------|---------|------------|------|
| | | | | 待裁决 |
---
## 处理结果
| 操作 | 目标条目 | 执行日期 |
|------|---------|---------|
| | | |
+63
View File
@@ -0,0 +1,63 @@
---
type: outline
version: "0.1"
status: draft
created: ""
updated: ""
tags: [outline]
---
# Outline
> AI auto-generated read-only view. Do not edit manually.
---
## Flow
> Day -> Beat list. Beat order maintained in Day files.
### Day 00
```dataview
TABLE beat_type AS "Type", emotional_tone AS "Tone", format AS "Format", dev_status AS "Status"
FROM "kb/beats"
WHERE day = "D00"
SORT order_in_day ASC
```
![[D00#本日结束时玩家已知]]
---
*Copy Day block as needed.*
---
## Dev Status
```dataview
TABLE length(rows) AS "Count"
FROM "kb/beats"
GROUP BY dev_status AS "Status"
```
---
## Open Retcons
```dataview
LIST
FROM "kb/beats"
WHERE contains(file.content, "[#Retcon")
```
---
## Open TBDs
```dataview
LIST
FROM "kb/beats"
WHERE contains(file.content, "[#TBD")
```
+79
View File
@@ -0,0 +1,79 @@
---
id: ""
type: worldbuilding
category: "" # 社会制度 | 技术 | 地理 | 历史事件 | 组织 | 物品
tier: "" # T0(核心不变) | T1(重要) | T2(可调整)
aliases: [] # 别名,如 ["蜂群思维", "蜂群", "Hivemind"]
status: active # active | disputed | deprecated
created: ""
updated: ""
tags: [worldbuilding]
related_characters: []
related_worldbuilding: []
---
# {{term_name}}
> **一句话定义**{最简洁的描述}
> **叙事功能**:{这个设定在故事里服务于什么?}
---
## 权威设定
{自然语言,写清楚这个设定的完整真相:核心规则、边界、例外、历史背景。
不考虑玩家视角,写的是世界"实际上"怎么运作的。}
---
## 玩家认知
**玩家最终知道什么**
{游戏结束时玩家对这个设定的完整理解}
**玩家起初以为是什么**
{初次接触时的错误或不完整认知}
**揭露路径**
{通过哪些 beats,一点点揭开?自然语言描述即可。}
---
## 在故事中的体现
```dataview
TABLE day AS "Day", beat_type AS "类型", file.link AS "Beat"
FROM "kb/beats"
WHERE contains(terms, this.file.name)
SORT day ASC
```
---
## 变更日志
| 日期 | 变更内容 | 决策理由 | 来源 |
|------|---------|---------|------|
| | | | |
---
## 冲突记录
| 冲突描述 | 版本A | 版本B | 来源 | 状态 |
|---------|-------|-------|------|------|
| | | | | 待裁决 |
---
## TODO
> [!todo]
---
## 原始来源
| 来源 | 状态 |
|------|------|
| | 已聚合 |