---
name: writer-memory
description: 面向作者的 Agentic 记忆系统 - 跟踪角色、关系、场景和主题
argument-hint: "init|char|rel|scene|query|validate|synopsis|status|export [args]"
level: 7
---

# Writer Memory - 面向作者的 Agentic 记忆系统

这是一个为创意写作者设计的持久化记忆系统，并对韩式叙事工作流提供一流支持。

## 概述

Writer Memory 在 Claude 会话之间为小说作者持续维护上下文。它会跟踪：

- **Characters (캐릭터)**: 情感弧线（감정궤도）、态度（태도）、对白语气（대사톤）、说话层级
- **World (세계관)**: 设定、规则、氛围、限制
- **Relationships (관계)**: 角色关系动态及其随时间的演变
- **Scenes (장면)**: 分镜构成（컷구성）、叙述语气、情绪标签
- **Themes (테마)**: 情感主题（정서테마）、作者意图

所有数据都会持久化到 `.writer-memory/memory.json` 中，便于进行对 git 友好的协作。

## 命令

| Command | Action |
|---------|--------|
| `/oh-my-claudecode:writer-memory init <project-name>` | 初始化新的项目记忆 |
| `/oh-my-claudecode:writer-memory status` | 显示记忆总览（角色数量、场景数量等） |
| `/oh-my-claudecode:writer-memory char add <name>` | 添加新角色 |
| `/oh-my-claudecode:writer-memory char <name>` | 查看角色详情 |
| `/oh-my-claudecode:writer-memory char update <name> <field> <value>` | 更新角色字段 |
| `/oh-my-claudecode:writer-memory char list` | 列出所有角色 |
| `/oh-my-claudecode:writer-memory rel add <char1> <char2> <type>` | 添加关系 |
| `/oh-my-claudecode:writer-memory rel <char1> <char2>` | 查看关系详情 |
| `/oh-my-claudecode:writer-memory rel update <char1> <char2> <event>` | 添加关系事件 |
| `/oh-my-claudecode:writer-memory scene add <title>` | 添加新场景 |
| `/oh-my-claudecode:writer-memory scene <id>` | 查看场景详情 |
| `/oh-my-claudecode:writer-memory scene list` | 列出所有场景 |
| `/oh-my-claudecode:writer-memory theme add <name>` | 添加主题 |
| `/oh-my-claudecode:writer-memory world set <field> <value>` | 设置世界观属性 |
| `/oh-my-claudecode:writer-memory query <question>` | 以自然语言查询记忆（支持韩语） |
| `/oh-my-claudecode:writer-memory validate <character> <dialogue>` | 检查对白是否符合角色语气 |
| `/oh-my-claudecode:writer-memory synopsis` | 生成以情绪为中心的概要 |
| `/oh-my-claudecode:writer-memory export` | 将完整记忆导出为可读的 markdown |
| `/oh-my-claudecode:writer-memory backup` | 创建手动备份 |

## 记忆类型

### 캐릭터 메모리 (角色记忆)

跟踪稳定塑造角色所需的单个角色属性：

| Field | 韩文 | 说明 |
|-------|--------|-------------|
| `arc` | 감정궤도 | 情绪旅程（例如 `"체념 -> 욕망자각 -> 선택"`） |
| `attitude` | 태도 | 角色当前对生活/他人的态度 |
| `tone` | 대사톤 | 对白风格（例如 `"담백"`, `"직설적"`, `"회피적"`） |
| `speechLevel` | 말투 레벨 | 正式程度：반말、존댓말、해체、혼합 |
| `keywords` | 핵심 단어 | 角色常用的典型词语/短语 |
| `taboo` | 금기어 | 角色绝不会说出的词语/短语 |
| `emotional_baseline` | 감정 기준선 | 默认情绪状态 |
| `triggers` | 트리거 | 会引发情绪反应的事物 |

**示例：**
```
/writer-memory char add 새랑
/writer-memory char update 새랑 arc "체념 -> 욕망자각 -> 선택"
/writer-memory char update 새랑 tone "담백, 현재충실, 감정억제"
/writer-memory char update 새랑 speechLevel "해체"
/writer-memory char update 새랑 keywords "그냥, 뭐, 괜찮아"
/writer-memory char update 새랑 taboo "사랑해, 보고싶어"
```

### 세계관 메모리 (世界观记忆)

定义你的故事所处的世界：

| Field | 韩文 | 说明 |
|-------|--------|-------------|
| `setting` | 배경 | 时间、地点、社会背景 |
| `rules` | 규칙 | 世界运作方式（魔法系统、社会规范等） |
| `atmosphere` | 분위기 | 整体氛围与基调 |
| `constraints` | 제약 | 在这个世界中不能发生的事 |
| `history` | 역사 | 相关背景历史 |

### 관계 메모리 (关系记忆)

捕捉角色之间随时间变化的动态关系：

| Field | 说明 |
|-------|-------------|
| `type` | 基础关系类型：romantic、familial、friendship、rivalry、professional |
| `status` | 当前状态：budding、stable、strained、broken、healing |
| `power_dynamic` | 如果存在主导方，谁占上风 |
| `events` | 改变关系的重要事件时间线 |
| `tension` | 当前尚未解决的冲突 |
| `intimacy_level` | 情感亲密度（1-10） |

**示例：**
```
/writer-memory rel add 새랑 해랑 romantic
/writer-memory rel update 새랑 해랑 "첫 키스 - 새랑 회피"
/writer-memory rel update 새랑 해랑 "해랑 고백 거절당함"
/writer-memory rel update 새랑 해랑 "새랑 먼저 손 잡음"
```

### 장면 메모리 (场景记忆)

跟踪单个场景及其情绪结构：

| Field | 韩文 | 说明 |
|-------|--------|-------------|
| `title` | 제목 | 场景标识 |
| `characters` | 등장인물 | 出场角色 |
| `location` | 장소 | 发生地点 |
| `cuts` | 컷 구성 | 分镜式拆解 |
| `narration_tone` | 내레이션 톤 | 叙事声音风格 |
| `emotional_tag` | 감정 태그 | 主要情绪（例如 `"설렘+불안"`） |
| `purpose` | 목적 | 这个场景在故事中的作用 |
| `before_after` | 전후 변화 | 角色前后发生了什么变化 |

### 테마 메모리 (主题记忆)

捕捉贯穿你故事的更深层含义：

| Field | 韩文 | 说明 |
|-------|--------|-------------|
| `name` | 이름 | 主题标识 |
| `expression` | 표현 방식 | 该主题如何呈现 |
| `scenes` | 관련 장면 | 体现这一主题的场景 |
| `character_links` | 캐릭터 연결 | 哪些角色承载这一主题 |
| `author_intent` | 작가 의도 | 你希望读者感受到什么 |

## Synopsis Generation (시놉시스)

`/synopsis` 命令会使用 5 个核心要素生成以情绪为中心的概要：

### 5 Essential Elements (시놉시스 5요소)

1. **주인공 태도 요약** (主角态度总结)
   - 主角如何面对生活 / 爱情 / 冲突
   - 其核心情绪立场
   - 示例：`"새랑은 상실을 예방하기 위해 먼저 포기하는 사람"`

2. **관계 핵심 구도** (关系核心结构)
   - 推动故事前进的核心动态
   - 权力不平衡与张力
   - 示例：`"사랑받는 자와 사랑하는 자의 불균형"`

3. **정서적 테마** (情绪主题)
   - 故事唤起的感受
   - 不是情节，而是情感上的真实
   - 示例：`"손에 쥔 행복을 믿지 못하는 불안"`

4. **장르 vs 실제감정 대비** (类型与真实情感的对照)
   - 表层类型预期与真实情绪内容之间的差异
   - 示例：`"로맨스지만 본질은 자기수용 서사"`

5. **엔딩 정서 잔상** (结尾情绪余韵)
   - 故事结束后留下的感受
   - 示例：`"씁쓸한 안도, 불완전한 해피엔딩의 여운"`

## Character Validation (캐릭터 검증)

`/validate` 命令会检查对白是否符合角色已经建立的声音特征。

### 检查内容

| Check | 说明 |
|-------|-------------|
| **Speech Level** | 正式程度是否匹配？（반말/존댓말/해체） |
| **Tone Match** | 情绪语域是否贴合？ |
| **Keyword Usage** | 是否使用了角色特征词？ |
| **Taboo Violation** | 是否使用了禁忌词？ |
| **Emotional Range** | 是否处于角色基线情绪范围内？ |
| **Context Fit** | 是否适配当前关系与场景？ |

### 验证结果

- **PASS**: 对白与角色一致
- **WARN**: 存在轻微不一致，可能是有意为之
- **FAIL**: 与既定角色声音显著偏离

**示例：**
```
/writer-memory validate 새랑 "사랑해, 해랑아. 너무 보고싶었어."
```
Output:
```
[FAIL] 새랑 validation failed:
- TABOO: "사랑해" - character avoids direct declarations
- TABOO: "보고싶었어" - character suppresses longing expressions
- TONE: Too emotionally direct for 새랑's 담백 style

Suggested alternatives:
- "...왔네." (minimal acknowledgment)
- "늦었다." (deflection to external fact)
- "밥 먹었어?" (care expressed through practical concern)
```

## Context Query (맥락 질의)

支持完整韩语的自然语言记忆查询。

### 示例查询

```
/writer-memory query "새랑은 이 상황에서 뭐라고 할까?"
/writer-memory query "규리의 현재 감정 상태는?"
/writer-memory query "해랑과 새랑의 관계는 어디까지 왔나?"
/writer-memory query "이 장면의 정서적 분위기는?"
/writer-memory query "새랑이 먼저 연락하는 게 맞아?"
/writer-memory query "해랑이 화났을 때 말투는?"
```

系统会综合所有相关记忆类型来生成回答。

## 行为

1. **On Init**: 创建 `.writer-memory/memory.json`，其中包含项目元数据和空集合
2. **Auto-Backup**: 在修改前会先将变更备份到 `.writer-memory/backups/`
3. **Korean-First**: 整体使用韩语情绪词汇体系
4. **Session Loading**: 会话开始时加载记忆，以便立即提供上下文
5. **Git-Friendly**: JSON 经过格式化，便于清晰 diff 和协作

## 集成

### 与 OMC Notepad System 集成
Writer Memory 与 `.omc/notepad.md` 集成：
- 场景灵感可以记录为笔记
- 分析会话中的角色洞察会被保留
- 支持 notepad 与 memory 之间的交叉引用

### 与 Architect Agent 集成
用于复杂角色分析：
```
Task(subagent_type="oh-my-claudecode:architect",
     model="opus",
     prompt="Analyze 새랑's arc across all scenes...")
```

### Character Validation Pipeline
验证会从以下来源提取上下文：
- Character memory（语气、关键词、禁忌词）
- Relationship memory（与对白对象的关系动态）
- Scene memory（当前情绪上下文）
- Theme memory（作者意图）

### Synopsis Builder
概要生成会聚合：
- 所有角色弧线
- 关键关系事件
- 场景情绪标签
- 主题表达

## 示例

### 完整工作流

```
# Initialize project
/writer-memory init 봄의 끝자락

# Add characters
/writer-memory char add 새랑
/writer-memory char update 새랑 arc "체념 -> 욕망자각 -> 선택"
/writer-memory char update 새랑 tone "담백, 현재충실"
/writer-memory char update 새랑 speechLevel "해체"

/writer-memory char add 해랑
/writer-memory char update 해랑 arc "확신 -> 동요 -> 기다림"
/writer-memory char update 해랑 tone "직진, 솔직"
/writer-memory char update 해랑 speechLevel "반말"

# Establish relationship
/writer-memory rel add 새랑 해랑 romantic
/writer-memory rel update 새랑 해랑 "첫 만남 - 해랑 일방적 호감"
/writer-memory rel update 새랑 해랑 "새랑 거절"
/writer-memory rel update 새랑 해랑 "재회 - 새랑 내적 동요"

# Set world
/writer-memory world set setting "서울, 현대, 20대 후반 직장인"
/writer-memory world set atmosphere "도시의 건조함 속 미묘한 온기"

# Add themes
/writer-memory theme add "포기하지 않는 사랑"
/writer-memory theme add "자기 보호의 벽"

# Add scene
/writer-memory scene add "옥상 재회"

# Query for writing
/writer-memory query "새랑은 이별 장면에서 어떤 톤으로 말할까?"

# Validate dialogue
/writer-memory validate 새랑 "해랑아, 그만하자."

# Generate synopsis
/writer-memory synopsis

# Export for reference
/writer-memory export
```

### 快速角色检查

```
/writer-memory char 새랑
```

Output:
```
## 새랑

**Arc (감정궤도):** 체념 -> 욕망자각 -> 선택
**Attitude (태도):** 방어적, 현실주의
**Tone (대사톤):** 담백, 현재충실
**Speech Level (말투):** 해체
**Keywords (핵심어):** 그냥, 뭐, 괜찮아
**Taboo (금기어):** 사랑해, 보고싶어

**Relationships:**
- 해랑: romantic (intimacy: 6/10, status: healing)

**Scenes Appeared:** 옥상 재회, 카페 대화, 마지막 선택
```

## 存储结构

```json
{
  "version": "1.0",
  "project": {
    "name": "봄의 끝자락",
    "genre": "로맨스",
    "created": "2024-01-15T09:00:00Z",
    "lastModified": "2024-01-20T14:30:00Z"
  },
  "characters": {
    "새랑": {
      "arc": "체념 -> 욕망자각 -> 선택",
      "attitude": "방어적, 현실주의",
      "tone": "담백, 현재충실",
      "speechLevel": "해체",
      "keywords": ["그냥", "뭐", "괜찮아"],
      "taboo": ["사랑해", "보고싶어"],
      "emotional_baseline": "평온한 무관심",
      "triggers": ["과거 언급", "미래 약속"]
    }
  },
  "world": {
    "setting": "서울, 현대, 20대 후반 직장인",
    "rules": [],
    "atmosphere": "도시의 건조함 속 미묘한 온기",
    "constraints": [],
    "history": ""
  },
  "relationships": [
    {
      "id": "rel_001",
      "from": "새랑",
      "to": "해랑",
      "type": "romantic",
      "dynamic": "해랑 주도 → 균형",
      "speechLevel": "반말",
      "evolution": [
        { "timestamp": "...", "change": "첫 만남 - 해랑 일방적 호감", "catalyst": "우연한 만남" },
        { "timestamp": "...", "change": "새랑 거절", "catalyst": "과거 트라우마" },
        { "timestamp": "...", "change": "재회 - 새랑 내적 동요", "catalyst": "옥상에서 재회" }
      ],
      "notes": "새랑의 불신 vs 해랑의 기다림",
      "created": "..."
    }
  ],
  "scenes": [
    {
      "id": "scene-001",
      "title": "옥상 재회",
      "characters": ["새랑", "해랑"],
      "location": "회사 옥상",
      "cuts": ["해랑 먼저 발견", "새랑 굳은 표정", "침묵", "해랑 먼저 말 걸기"],
      "narration_tone": "건조체",
      "emotional_tag": "긴장+그리움",
      "purpose": "재회의 어색함과 남은 감정 암시",
      "before_after": "새랑: 무관심 -> 동요"
    }
  ],
  "themes": [
    {
      "name": "포기하지 않는 사랑",
      "expression": "해랑의 일관된 태도",
      "scenes": ["옥상 재회", "마지막 고백"],
      "character_links": ["해랑"],
      "author_intent": "집착이 아닌 믿음의 사랑"
    }
  ],
  "synopsis": {
    "protagonist_attitude": "새랑은 상실을 예방하기 위해 먼저 포기하는 사람",
    "relationship_structure": "기다리는 자와 도망치는 자의 줄다리기",
    "emotional_theme": "사랑받을 자격에 대한 의심",
    "genre_contrast": "로맨스지만 본질은 자기수용 서사",
    "ending_aftertaste": "불완전하지만 따뜻한 선택의 여운"
  }
}
```

## 文件结构

```
.writer-memory/
├── memory.json          # Main memory file
├── backups/             # Auto-backups before changes
│   ├── memory-2024-01-15-090000.json
│   └── memory-2024-01-20-143000.json
└── exports/             # Markdown exports
    └── export-2024-01-20.md
```

## 给作者的建议

1. **从角色开始**：先建立角色记忆，再写场景
2. **关键场景后更新关系**：主动跟踪关系演变
3. **写作时使用验证**：尽早发现角色声音不一致
4. **困难场景前先查询**：让系统提醒你当前上下文
5. **定期生成概要**：定期检查主题是否连贯
6. **重大改动前先备份**：在重要剧情转折前使用 `/backup`

## 故障排查

**记忆没有加载？**
- 检查 `.writer-memory/memory.json` 是否存在
- 确认 JSON 语法有效
- 运行 `/writer-memory status` 进行诊断

**验证过于严格？**
- 检查 taboo 列表中是否有误加入的条目
- 考虑角色是否正在成长（arc progression）
- 为了戏剧效果而有意打破模式也是合理的

**查询找不到上下文？**
- 确保相关数据已经写入记忆
- 尝试更具体的查询
- 检查角色名称是否完全匹配
