Writer Memory - Agentic Memory System for Writers
Persistent memory system designed for creative writers, with first-class support for Korean storytelling workflows.
Overview
Writer Memory maintains context across Claude sessions for fiction writers. It tracks:
- Characters (캐릭터): Emotional arcs (감정궤도), attitudes (태도), dialogue tone (대사톤), speech levels
- World (세계관): Settings, rules, atmosphere, constraints
- Relationships (관계): Character dynamics and evolution over time
- Scenes (장면): Cut composition (컷구성), narration tone, emotional tags
- Themes (테마): Emotional themes (정서테마), authorial intent
All data persists in .writer-memory/memory.json for git-friendly collaboration.
Commands
| Command |
Action |
/oh-my-claudecode:writer-memory init <project-name> |
Initialize new project memory |
/oh-my-claudecode:writer-memory status |
Show memory overview (character count, scene count, etc) |
/oh-my-claudecode:writer-memory char add <name> |
Add new character |
/oh-my-claudecode:writer-memory char <name> |
View character details |
/oh-my-claudecode:writer-memory char update <name> <field> <value> |
Update character field |
/oh-my-claudecode:writer-memory char list |
List all characters |
/oh-my-claudecode:writer-memory rel add <char1> <char2> <type> |
Add relationship |
/oh-my-claudecode:writer-memory rel <char1> <char2> |
View relationship |
/oh-my-claudecode:writer-memory rel update <char1> <char2> <event> |
Add relationship event |
/oh-my-claudecode:writer-memory scene add <title> |
Add new scene |
/oh-my-claudecode:writer-memory scene <id> |
View scene details |
/oh-my-claudecode:writer-memory scene list |
List all scenes |
/oh-my-claudecode:writer-memory theme add <name> |
Add theme |
/oh-my-claudecode:writer-memory world set <field> <value> |
Set world attribute |
/oh-my-claudecode:writer-memory query <question> |
Query memory naturally (Korean supported) |
/oh-my-claudecode:writer-memory validate <character> <dialogue> |
Check if dialogue matches character tone |
/oh-my-claudecode:writer-memory synopsis |
Generate emotion-focused synopsis |
/oh-my-claudecode:writer-memory export |
Export full memory as readable markdown |
/oh-my-claudecode:writer-memory backup |
Create manual backup |
Memory Types
캐릭터 메모리 (Character Memory)
Tracks individual character attributes essential for consistent portrayal:
| Field |
Korean |
Description |
arc |
감정궤도 |
Emotional journey (e.g., "체념 -> 욕망자각 -> 선택") |
attitude |
태도 |
Current disposition toward life/others |
tone |
대사톤 |
Dialogue style (e.g., "담백", "직설적", "회피적") |
speechLevel |
말투 레벨 |
Formality: 반말, 존댓말, 해체, 혼합 |
keywords |
핵심 단어 |
Characteristic words/phrases they use |
taboo |
금기어 |
Words/phrases they would never say |
emotional_baseline |
감정 기준선 |
Default emotional state |
triggers |
트리거 |
What provokes emotional reactions |
Example:
/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 "사랑해, 보고싶어"
세계관 메모리 (World Memory)
Establishes the universe your story inhabits:
| Field |
Korean |
Description |
setting |
배경 |
Time, place, social context |
rules |
규칙 |
How the world operates (magic systems, social norms) |
atmosphere |
분위기 |
Overall mood and tone |
constraints |
제약 |
What cannot happen in this world |
history |
역사 |
Relevant backstory |
관계 메모리 (Relationship Memory)
Captures the dynamic between characters over time:
| Field |
Description |
type |
Base relationship: romantic, familial, friendship, rivalry, professional |
status |
Current state: budding, stable, strained, broken, healing |
power_dynamic |
Who has the upper hand, if any |
events |
Timeline of relationship-changing moments |
tension |
Current unresolved conflicts |
intimacy_level |
Emotional closeness (1-10) |
Example:
/writer-memory rel add 새랑 해랑 romantic
/writer-memory rel update 새랑 해랑 "첫 키스 - 새랑 회피"
/writer-memory rel update 새랑 해랑 "해랑 고백 거절당함"
/writer-memory rel update 새랑 해랑 "새랑 먼저 손 잡음"
장면 메모리 (Scene Memory)
Tracks individual scenes and their emotional architecture:
| Field |
Korean |
Description |
title |
제목 |
Scene identifier |
characters |
등장인물 |
Who appears |
location |
장소 |
Where it happens |
cuts |
컷 구성 |
Shot-by-shot breakdown |
narration_tone |
내레이션 톤 |
Narrative voice style |
emotional_tag |
감정 태그 |
Primary emotions (e.g., "설렘+불안") |
purpose |
목적 |
Why this scene exists in the story |
before_after |
전후 변화 |
What changes for characters |
테마 메모리 (Theme Memory)
Captures the deeper meaning woven through your story:
| Field |
Korean |
Description |
name |
이름 |
Theme identifier |
expression |
표현 방식 |
How this theme manifests |
scenes |
관련 장면 |
Scenes that embody this theme |
character_links |
캐릭터 연결 |
Which characters carry this theme |
author_intent |
작가 의도 |
What you want readers to feel |
Synopsis Generation (시놉시스)
The /synopsis command generates an emotion-focused summary using 5 essential elements:
5 Essential Elements (시놉시스 5요소)
-
주인공 태도 요약 (Protagonist Attitude Summary)
- How the protagonist approaches life/love/conflict
- Their core emotional stance
- Example: "새랑은 상실을 예방하기 위해 먼저 포기하는 사람"
-
관계 핵심 구도 (Core Relationship Structure)
- The central dynamic driving the story
- Power imbalances and tensions
- Example: "사랑받는 자와 사랑하는 자의 불균형"
-
정서적 테마 (Emotional Theme)
- The feeling the story evokes
- Not plot, but emotional truth
- Example: "손에 쥔 행복을 믿지 못하는 불안"
-
장르 vs 실제감정 대비 (Genre vs Real Emotion Contrast)
- Surface genre expectations vs. actual emotional content
- Example: "로맨스지만 본질은 자기수용 서사"
-
엔딩 정서 잔상 (Ending Emotional Aftertaste)
- The lingering feeling after the story ends
- Example: "씁쓸한 안도, 불완전한 해피엔딩의 여운"
Character Validation (캐릭터 검증)
The /validate command checks if dialogue matches a character's established voice.
What Gets Checked
| Check |
Description |
| Speech Level |
Does formality match? (반말/존댓말/해체) |
| Tone Match |
Does the emotional register fit? |
| Keyword Usage |
Uses characteristic words? |
| Taboo Violation |
Uses forbidden words? |
| Emotional Range |
Within character's baseline? |
| Context Fit |
Appropriate for relationship and scene? |
Validation Results
- PASS: Dialogue is consistent with character
- WARN: Minor inconsistencies, may be intentional
- FAIL: Significant deviation from established voice
Example:
/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 (맥락 질의)
Natural language queries against memory, with full Korean support.
Example Queries
/writer-memory query "새랑은 이 상황에서 뭐라고 할까?"
/writer-memory query "규리의 현재 감정 상태는?"
/writer-memory query "해랑과 새랑의 관계는 어디까지 왔나?"
/writer-memory query "이 장면의 정서적 분위기는?"
/writer-memory query "새랑이 먼저 연락하는 게 맞아?"
/writer-memory query "해랑이 화났을 때 말투는?"
The system synthesizes answers from all relevant memory types.
Behavior
- On Init: Creates
.writer-memory/memory.json with project metadata and empty collections
- Auto-Backup: Changes are backed up before modification to
.writer-memory/backups/
- Korean-First: Emotion vocabulary uses Korean terms throughout
- Session Loading: Memory is loaded on session start for immediate context
- Git-Friendly: JSON formatted for clean diffs and collaboration
Integration
With OMC Notepad System
Writer Memory integrates with .omc/notepad.md:
- Scene ideas can be captured as notes
- Character insights from analysis sessions are preserved
- Cross-reference between notepad and memory
With Architect Agent
For complex character analysis:
Task(subagent_type="oh-my-claudecode:architect",
model="opus",
prompt="Analyze 새랑's arc across all scenes...")
Character Validation Pipeline
Validation pulls context from:
- Character memory (tone, keywords, taboo)
- Relationship memory (dynamics with dialogue partner)
- Scene memory (current emotional context)
- Theme memory (authorial intent)
Synopsis Builder
Synopsis generation aggregates:
- All character arcs
- Key relationship events
- Scene emotional tags
- Theme expressions
Examples
Full Workflow
# 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
Quick Character Check
/writer-memory char 새랑
Output:
## 새랑
**Arc (감정궤도):** 체념 -> 욕망자각 -> 선택
**Attitude (태도):** 방어적, 현실주의
**Tone (대사톤):** 담백, 현재충실
**Speech Level (말투):** 해체
**Keywords (핵심어):** 그냥, 뭐, 괜찮아
**Taboo (금기어):** 사랑해, 보고싶어
**Relationships:**
- 해랑: romantic (intimacy: 6/10, status: healing)
**Scenes Appeared:** 옥상 재회, 카페 대화, 마지막 선택
Storage Schema
{
"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",
"dynam