with one click
writer-memory
Agentic memory system for writers - track characters, relationships, scenes, and themes
Agentic memory system for writers - track characters, relationships, scenes, and themes
| name | writer-memory |
| description | Agentic memory system for writers - track characters, relationships, scenes, and themes |
| argument-hint | init|char|rel|scene|query|validate|synopsis|status|export [args] |
| level | 7 |
Persistent memory system designed for creative writers, with first-class support for Korean storytelling workflows.
Writer Memory maintains context across Claude sessions for fiction writers. It tracks:
All data persists in .writer-memory/memory.json for git-friendly collaboration.
| 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 |
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 "์ฌ๋ํด, ๋ณด๊ณ ์ถ์ด"
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 |
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 ์๋ ํด๋ "์๋ ๋จผ์ ์ ์ก์"
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 |
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 |
The /synopsis command generates an emotion-focused summary using 5 essential elements:
์ฃผ์ธ๊ณต ํ๋ ์์ฝ (Protagonist Attitude Summary)
๊ด๊ณ ํต์ฌ ๊ตฌ๋ (Core Relationship Structure)
์ ์์ ํ ๋ง (Emotional Theme)
์ฅ๋ฅด vs ์ค์ ๊ฐ์ ๋๋น (Genre vs Real Emotion Contrast)
์๋ฉ ์ ์ ์์ (Ending Emotional Aftertaste)
The /validate command checks if dialogue matches a character's established voice.
| 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? |
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)
Natural language queries against memory, with full Korean support.
/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.
.writer-memory/memory.json with project metadata and empty collections.writer-memory/backups/Writer Memory integrates with .omc/notepad.md:
For complex character analysis:
Task(subagent_type="oh-my-claudecode:architect",
model="opus",
prompt="Analyze ์๋'s arc across all scenes...")
Validation pulls context from:
Synopsis generation aggregates:
# 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:** ์ฅ์ ์ฌํ, ์นดํ ๋ํ, ๋ง์ง๋ง ์ ํ
{
"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
/backup before significant story pivotsMemory not loading?
.writer-memory/memory.json exists/writer-memory status to diagnoseValidation too strict?
Query not finding context?
Strategic planning with optional interview workflow
Consensus planning entrypoint that auto-gates vague ralph/autopilot/team requests before execution
Configure HUD display options (layout, presets, display elements)
Install or refresh oh-my-claudecode for plugin, npm, and local-dev setups from the canonical setup flow
CLI-team runtime for claude, codex, or gemini workers in tmux panes when you need process-based parallel execution
Self-referential loop until task completion with configurable verification reviewer