writer-memory について
writer-memory は、Claude を使う小説家向けの永続的な物語メモリスキルです。キャラクターや世界観、関係、シーン、テーマをセッション間で管理し、台詞の検証や感情に焦点を当てたあらすじ作成を支援します。
主な機能
- 01セッションをまたぐ物語メモリ
- 02キャラクターの声と感情の軌跡を記録
- 03世界観・関係・シーン・テーマの記録
- 04台詞の一貫性を検証
- 05自然言語でメモリを検索
- 06感情に焦点を当てたあらすじと Markdown 出力
活用シーン
- 01執筆中にキャラクター設定を一貫させる
- 02シーンごとの関係の変化を記録
- 03台詞がキャラクターの声に合うか確認
- 04あらすじで物語の感情的テーマを振り返る
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ yeachan-heo/ oh-my-claudecode --skill writer-memoryインストール後、Claude Code で/writer-memoryを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
lib/character-tracker.tsmemory-manager.tsrelationship-graph.tsscene-organizer.tssynopsis-builder.tstemplates/synopsis-template.md詳細
Writer Memory - 作家向けエージェント型メモリシステム
クリエイティブライター向けに設計された永続メモリシステムです。韓国語のストーリーテリングワークフローを第一級でサポートします。
概要
Writer Memory は、小説家が Claude のセッションをまたいでコンテキストを維持できるようにします。以下を追跡します。
- キャラクター (캐릭터):感情の軌道 (감정궤도)、態度 (태도)、台詞のトーン (대사톤)、話し方のレベル
- 世界観 (세계관):設定、ルール、雰囲気、制約
- 関係 (관계):キャラクター間の力学と時間の経過に伴う変化
- シーン (장면):カット構成 (컷구성)、ナレーションのトーン、感情タグ
- テーマ (테마):感情的なテーマ (정서테마)、作者の意図
すべてのデータは .writer-memory/memory.json に保存され、Git を使った共同作業に適しています。
コマンド
| コマンド | 操作 |
|---|---|
/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 | 手動バックアップを作成 |
メモリの種類
캐릭터 메모리 (キャラクターメモリ)
一貫した描写に欠かせない、各キャラクターの属性を追跡します。
| フィールド | 韓国語 | 説明 |
|---|---|---|
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 "사랑해, 보고싶어"
세계관 메모리 (世界観メモリ)
物語の舞台となる世界を定義します。
| フィールド | 韓国語 | 説明 |
|---|---|---|
setting | 배경 | 時代、場所、社会的背景 |
rules | 규칙 | 世界の仕組み(魔法体系、社会規範など) |
atmosphere | 분위기 | 全体的な雰囲気とトーン |
constraints | 제약 | この世界で起こり得ないこと |
history | 역사 | 関連する過去の経緯 |
관계 메모리 (関係メモリ)
時間の経過に伴うキャラクター間の関係性を記録します。
| フィールド | 説明 |
|---|---|
type | 基本的な関係:恋愛、家族、友情、ライバル関係、仕事上の関係 |
status | 現在の状態:始まりかけ、安定、緊張、破綻、修復中 |
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 새랑 해랑 "새랑 먼저 손 잡음"
シーンメモリー(Scene Memory)
個々のシーンと、その感情構造を追跡します。
| 項目 | 韓国語 | 説明 |
|---|---|---|
title | 제목 | シーンの識別子 |
characters | 등장인물 | 登場人物 |
location | 장소 | シーンの舞台 |
cuts | 컷 구성 | ショットごとの構成 |
narration_tone | 내레이션 톤 | ナレーションの文体 |
emotional_tag | 감정 태그 | 主な感情(例:「ときめき+不安」) |
purpose | 목적 | 物語におけるこのシーンの役割 |
before_after | 전후 변화 | 登場人物に起こる変化 |
テーマメモリー(Theme Memory)
物語に織り込まれた、より深い意味を捉えます。
| 項目 | 韓国語 | 説明 |
|---|---|---|
name | 이름 | テーマの識別子 |
expression | 표현 방식 | テーマの表れ方 |
scenes | 관련 장면 | テーマを体現するシーン |
character_links | 캐릭터 연결 | このテーマを担う登場人物 |
author_intent | 작가 의도 | 読者に感じてほしいこと |
あらすじ生成(シノプシス)
/synopsis コマンドは、5つの重要な要素を使って感情に焦点を当てた要約を生成します。
5つの重要な要素(シノプシスの5要素)
-
主人公の態度の要約(主人公の態度の要約)
- 主人公が人生・恋愛・葛藤にどう向き合うか
- 主人公の根底にある感情的な姿勢
- 例:「セランは喪失を避けるため、先に諦める人」
-
関係性の中核構造(関係性の中核構造)
- 物語を動かす中心的な力関係
- 力の不均衡と緊張
- 例:「愛される者と愛する者の不均衡」
-
感情的なテーマ(感情的なテーマ)
- 物語が呼び起こす感情
- 筋書きではなく、感情的な真実
- 例:「手にした幸せを信じられない不安」
-
ジャンルと実際の感情の対比(ジャンルと実際の感情の対比)
- 表面的なジャンルへの期待と、実際に描かれる感情の内容
- 例:「ロマンスでありながら、本質は自己受容の物語」
-
結末に残る感情の余韻(結末に残る感情の余韻)
- 物語が終わった後に残る感情
- 例:「ほろ苦い安堵、不完全なハッピーエンドの余韻」
キャラクター検証
/validate コマンドは、台詞がキャラクターの確立された話し方に合っているかを確認します。
検証項目
| 確認項目 | 説明 |
|---|---|
| 話し方のレベル | 敬語のレベルは合っていますか?(반말/존댓말/해체) |
| トーンの一致 | 感情の表し方は適切ですか? |
| キーワードの使用 | そのキャラクターらしい言葉を使っていますか? |
| 禁忌への違反 | 禁止されている言葉を使っていますか? |
| 感情の範囲 | キャラクターの基準となる範囲内ですか? |
| 文脈との適合性 | 関係性やシーンに適していますか? |
検証結果
- PASS:台詞はキャラクターと一貫しています
- WARN:軽微な不一致がありますが、意図的な可能性があります
- FAIL:確立された話し方から大きく逸脱しています
例:
/writer-memory validate 새랑 "사랑해, 해랑아. 너무 보고싶었어."
出力:
[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)
コンテキストへの問い合わせ(맥락 질의)
韓国語に完全対応した、メモリーへの自然言語クエリです。
クエリの例
/writer-memory query "새랑은 이 상황에서 뭐라고 할까?"
/writer-memory query "규리의 현재 감정 상태는?"
/writer-memory query "해랑과 새랑의 관계는 어디까지 왔나?"
/writer-memory query "이 장면의 정서적 분위기는?"
/writer-memory query "새랑이 먼저 연락하는 게 맞아?"
/writer-memory query "해랑이 화났을 때 말투는?"
システムは、関連するすべてのメモリータイプから回答を統合します。
動作
- 初期化時:プロジェクトのメタデータと空のコレクションを含む
.writer-memory/memory.jsonを作成します - 自動バックアップ:変更を加える前に、
.writer-memory/backups/に変更内容をバックアップします - 韓国語優先:感情語彙には一貫して韓国語の用語を使用します
- セッション読み込み:即座にコンテキストを利用できるよう、セッション開始時にメモリーを読み込みます
- Git との親和性:差分の確認や共同作業がしやすいよう、JSON を整形します
インテグレーション
OMC Notepad System との連携
Writer Memory は .omc/notepad.md と連携します。
- シーンのアイデアをメモとして記録できます
- 分析セッションで得たキャラクターの洞察を保持します
- メモ帳とメモリーの相互参照が可能です
Architect Agent との連携
複雑なキャラクター分析の場合:
Task(subagent_type="oh-my-claudecode:architect",
model="opus",
prompt="Analyze 새랑's arc across all scenes...")
キャラクター検証パイプライン
検証では、以下からコンテキストを取得します。
- キャラクターメモリー(トーン、キーワード、禁忌)
- 関係性メモリー(会話相手との力関係)
- シーンメモリー(現在の感情的な文脈)
- テーマメモリー(作者の意図)
あらすじ作成ツール
あらすじの生成では、以下を集約します。
- すべてのキャラクターアーク
- 重要な関係性の出来事
- シーンの感情タグ
- テーマの表れ方
例
ワークフロー全体
# 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 새랑
出力:
## 새랑
**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を使用します
トラブルシューティング
記憶が読み込まれない場合
.writer-memory/memory.jsonが存在することを確認します- JSON の構文が有効であることを確認します
/writer-memory statusを実行して診断します
検証が厳しすぎる場合
- タブーリストに意図しない項目がないか確認します
- キャラクターが成長しているか(人物の成長)を検討します
- ドラマチックな場面では、パターンから意図的に外れることも有効です
クエリで背景情報が見つからない場合
- 関連データが記憶に含まれていることを確認します
- より具体的なクエリを試します
- キャラクター名が完全に一致していることを確認します