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.jsonwith 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", "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": "๋ถ์์ ํ์ง๋ง ๋ฐ๋ปํ ์ ํ์ ์ฌ์ด" } }
File Structure
.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
Tips for Writers
- Start with Characters: Build character memories before scenes
- Update Relationships After Key Scenes: Track evolution actively
- Use Validation While Writing: Catch voice inconsistencies early
- Query Before Difficult Scenes: Let the system remind you of context
- Regular Synopsis: Generate periodically to check thematic coherence
- Backup Before Major Changes: Use
/backupbefore significant story pivots
Troubleshooting
Memory not loading?
- Check
.writer-memory/memory.jsonexists - Verify JSON syntax is valid
- Run
/writer-memory statusto diagnose
Validation too strict?
- Review taboo list for unintended entries
- Consider if character is growing (arc progression)
- Intentional breaks from pattern are valid for dramatic moments
Query not finding context?
- Ensure relevant data is in memory
- Try more specific queries
- Check character names match exactly