Install
openclaw skills install @zj-zc/emotional-memoA shared emotional memo for relationships — records emotional moments and gently reminds before old wounds are touched
openclaw skills install @zj-zc/emotional-memoAll emotional data is stored in data/memo.json. Create this file on first use with the following structure:
{
"couple": {
"person_a": "",
"person_b": ""
},
"entries": [],
"patterns": []
}
Each entry in the entries array follows this schema:
{
"id": "entry-001",
"timestamp": "2026-03-18T14:30:00Z",
"reporter": "person_a's nickname",
"about": "person_b's nickname",
"event": "Free-text description of what happened",
"emotions": ["hurt", "misunderstood", "lonely"],
"underlying_need": "Needed to feel valued and heard",
"triggers": ["being dismissed", "phone during conversation", "interrupting"],
"intensity": 3,
"status": "active",
"follow_ups": [
{
"date": "2026-03-20T10:00:00Z",
"note": "They talked about it, feeling a bit better"
}
]
}
Field rules:
id — Auto-increment: entry-001, entry-002, etc.timestamp — ISO 8601 format, set at creation timereporter — The person sharing the feelingabout — The other person involved (or "self" for personal reflections)emotions — Array of emotion words, extracted from conversationunderlying_need — The deeper need beneath the surface emotion (gently inferred, confirmed with user)triggers — Specific situations, words, or behaviors that triggered the emotionintensity — 1 (mild) to 5 (overwhelming)status — One of: active, healing, healedfollow_ups — Chronological notes on progressEach entry in the patterns array:
{
"id": "pattern-001",
"detected_date": "2026-03-25T00:00:00Z",
"description": "Feeling dismissed when phone is used during conversations",
"linked_entries": ["entry-001", "entry-004", "entry-007"],
"suggested_insight": "This might be about needing undivided attention as a form of love"
}
Trigger: First conversation, or when data/memo.json does not exist.
Steps:
data/memo.json with the couple's names and empty entries/patterns arraysTrigger: User shares an emotional event, conflict, or feeling. Phrases like "something happened", "I felt...", "we had a fight", "it hurt when..."
Steps:
emotions)underlying_need)triggers)intensity)data/memo.jsonTrigger: A new conflict or situation is described that resembles an existing active entry.
Steps:
entries where status is active or healingtriggers, emotions, keywords in event, and about personTrigger: User says things like "I don't know how to say this", "can you help me explain", "translate this for me", "how do I tell them..."
Steps:
Trigger: User asks to "review", "look back", "show history", "how are we doing", "timeline"
Steps:
data/memo.jsonTrigger: User says "it's getting better", "we talked about it", "this is resolved", "update entry", or references a past event with progress
Steps:
active → healing: "That's a beautiful step forward 🌤️"healing → healed: "Look at that — a wound that's truly healed 💛🎉"healing → active (with compassion, not judgment)data/memo.jsonTrigger: Automatic — check after every new entry is recorded.
Steps:
active and healing entriespatterns array| What you say | What happens |
|---|---|
| "Something happened today..." / "I felt..." / "We had a fight" | → Record a new emotional entry |
| "We're arguing about X again" / describing a familiar conflict | → Match & Remind + Record |
| "I don't know how to say this" / "Help me explain" / "Translate this" | → Translate into 3 temperature levels |
| "How are we doing?" / "Show our history" / "Review" / "Timeline" | → Review Timeline |
| "It's getting better" / "We talked about it" / "This is resolved" | → Update Status |
| "Do you see any patterns?" / (auto after 3+ similar entries) | → Detect Patterns |
| First conversation / no memo.json exists | → Initialize |