writer-memory
npx skills add https://github.com/yeachan-heo/oh-my-claudecode --skill writer-memory
Agent 安装分布
Skill 文档
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