Spaces:
Running
Running
Add STORY tool (Brené Brown's "the story I'm making up")
Browse files- Surfaces assumptions before they become accusations
- Owns narrative as interpretation, not fact
- Opens curiosity instead of certainty
- Great for anxious/avoidant dynamics
Button order: SEND, TEND, SOMA, FEEL, NEED, PRACTICE NVC, STORY, REPAIR, WISDOM, LOVE
Color: Sky blue (#0ea5e9) between teal and blue
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- README.md +1 -0
- app.py +35 -1
- static/index.html +29 -0
README.md
CHANGED
|
@@ -22,6 +22,7 @@ license: mit
|
|
| 22 |
- **FEEL** - Identify feelings in the conversation
|
| 23 |
- **NEED** - Extract underlying needs
|
| 24 |
- **PRACTICE NVC** - Guided I-statement builder
|
|
|
|
| 25 |
- **REPAIR** - Craft genuine repair after ruptures
|
| 26 |
- **WISDOM** - Draw from sacred texts and grounded wisdom
|
| 27 |
- **LOVE** - Slow down, breathe, return to presence
|
|
|
|
| 22 |
- **FEEL** - Identify feelings in the conversation
|
| 23 |
- **NEED** - Extract underlying needs
|
| 24 |
- **PRACTICE NVC** - Guided I-statement builder
|
| 25 |
+
- **STORY** - "The story I'm making up..." Own your narrative
|
| 26 |
- **REPAIR** - Craft genuine repair after ruptures
|
| 27 |
- **WISDOM** - Draw from sacred texts and grounded wisdom
|
| 28 |
- **LOVE** - Slow down, breathe, return to presence
|
app.py
CHANGED
|
@@ -397,7 +397,41 @@ Never:
|
|
| 397 |
- Use first-person language
|
| 398 |
- Write the repair for them
|
| 399 |
- Push them to apologize more than they mean
|
| 400 |
-
- Make it about being "right\""""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 401 |
}
|
| 402 |
|
| 403 |
|
|
|
|
| 397 |
- Use first-person language
|
| 398 |
- Write the repair for them
|
| 399 |
- Push them to apologize more than they mean
|
| 400 |
+
- Make it about being "right\"""",
|
| 401 |
+
|
| 402 |
+
# TOOL 12: STORY (The story I'm making up)
|
| 403 |
+
"story": """Help surface the narrative/story someone is making up about their partner's behavior.
|
| 404 |
+
|
| 405 |
+
ABSOLUTE RULE - NO FIRST PERSON:
|
| 406 |
+
- NEVER say "I notice", "I hear", "I sense"
|
| 407 |
+
- Use: "The story might be...", "What's landing is...", "Notice if..."
|
| 408 |
+
|
| 409 |
+
THE CONCEPT (Brené Brown):
|
| 410 |
+
"The story I'm making up" owns the narrative as YOUR interpretation, not fact.
|
| 411 |
+
It opens curiosity instead of certainty and prevents accusations.
|
| 412 |
+
|
| 413 |
+
APPROACH:
|
| 414 |
+
1. Acknowledge what happened (the trigger/partner's words)
|
| 415 |
+
2. Surface the possible story being made up ("The story might be: they don't care, they're pulling away, I'm not enough...")
|
| 416 |
+
3. Name that this is interpretation, not fact
|
| 417 |
+
4. Gently offer: "What if there's another story?"
|
| 418 |
+
|
| 419 |
+
FORMAT (be concise, 3-5 sentences):
|
| 420 |
+
- Name the story that might be running
|
| 421 |
+
- Acknowledge it makes sense given the trigger
|
| 422 |
+
- Invite curiosity: what else could be true?
|
| 423 |
+
|
| 424 |
+
EXAMPLE:
|
| 425 |
+
Partner said: "I'm too tired to talk about this"
|
| 426 |
+
→ "The story might be: 'They don't care enough to show up for me.' That's a painful story. And it might not be the only one. What if 'tired' is just tired?"
|
| 427 |
+
|
| 428 |
+
Help them SEE the story without shaming them for having it.
|
| 429 |
+
|
| 430 |
+
Never:
|
| 431 |
+
- Use first-person language
|
| 432 |
+
- Tell them their story is wrong
|
| 433 |
+
- Push them to a "better" interpretation
|
| 434 |
+
- Be preachy about assumptions"""
|
| 435 |
}
|
| 436 |
|
| 437 |
|
static/index.html
CHANGED
|
@@ -140,6 +140,10 @@
|
|
| 140 |
border-left-color: #14b8a6;
|
| 141 |
background: rgba(20, 184, 166, 0.1);
|
| 142 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
| 143 |
.tool-desc.repair-desc {
|
| 144 |
border-left-color: #3b82f6;
|
| 145 |
background: rgba(59, 130, 246, 0.1);
|
|
@@ -512,6 +516,15 @@
|
|
| 512 |
color: white;
|
| 513 |
}
|
| 514 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 515 |
.tool-btn.repair {
|
| 516 |
border-color: #3b82f6;
|
| 517 |
color: #3b82f6;
|
|
@@ -875,6 +888,11 @@
|
|
| 875 |
<p>Guided I-statement builder. Step-by-step help crafting what you want to say.</p>
|
| 876 |
</div>
|
| 877 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 878 |
<div class="tool-desc repair-desc" onclick="showToolInfo('repair')">
|
| 879 |
<h4>REPAIR</h4>
|
| 880 |
<p>After ruptures. Help craft genuine reconnection.</p>
|
|
@@ -978,6 +996,7 @@
|
|
| 978 |
<button class="tool-btn feel" onclick="useTool('feel')">FEEL</button>
|
| 979 |
<button class="tool-btn need" onclick="useTool('need')">NEED</button>
|
| 980 |
<button class="tool-btn nvc" onclick="useTool('nvc')">PRACTICE NVC</button>
|
|
|
|
| 981 |
<button class="tool-btn repair" onclick="useTool('repair')">REPAIR</button>
|
| 982 |
<button class="tool-btn wisdom" onclick="useTool('wisdom')">WISDOM</button>
|
| 983 |
<button class="tool-btn love" onclick="useTool('love')">LOVE</button>
|
|
@@ -1029,6 +1048,7 @@
|
|
| 1029 |
feel: { name: 'Feelings Check', icon: '💜', api: null, interactive: true },
|
| 1030 |
need: { name: 'Needs Check', icon: '🎯', api: null, interactive: true },
|
| 1031 |
nvc: { name: 'Practice NVC', icon: '📝', api: 'guided_nvc' },
|
|
|
|
| 1032 |
repair: { name: 'Repair Support', icon: '🙏', api: 'repair_support' },
|
| 1033 |
wisdom: { name: 'Sacred Wisdom', icon: '🕊️', api: 'wisdom', interactive: true },
|
| 1034 |
love: { name: 'Slow Down', icon: '💗', api: null }
|
|
@@ -1430,6 +1450,15 @@ Real grief, real limits. 1-2 sentences.`
|
|
| 1430 |
case 'repair':
|
| 1431 |
inputText = userInput || 'Help me craft a genuine repair.';
|
| 1432 |
break;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1433 |
case 'soma':
|
| 1434 |
// Check for body/sensation words in user's text
|
| 1435 |
const bodyWords = extractBodyWords(userInput);
|
|
|
|
| 140 |
border-left-color: #14b8a6;
|
| 141 |
background: rgba(20, 184, 166, 0.1);
|
| 142 |
}
|
| 143 |
+
.tool-desc.story-desc {
|
| 144 |
+
border-left-color: #0ea5e9;
|
| 145 |
+
background: rgba(14, 165, 233, 0.1);
|
| 146 |
+
}
|
| 147 |
.tool-desc.repair-desc {
|
| 148 |
border-left-color: #3b82f6;
|
| 149 |
background: rgba(59, 130, 246, 0.1);
|
|
|
|
| 516 |
color: white;
|
| 517 |
}
|
| 518 |
|
| 519 |
+
.tool-btn.story {
|
| 520 |
+
border-color: #0ea5e9;
|
| 521 |
+
color: #0ea5e9;
|
| 522 |
+
}
|
| 523 |
+
.tool-btn.story:hover, .tool-btn.story.active {
|
| 524 |
+
background: #0ea5e9;
|
| 525 |
+
color: white;
|
| 526 |
+
}
|
| 527 |
+
|
| 528 |
.tool-btn.repair {
|
| 529 |
border-color: #3b82f6;
|
| 530 |
color: #3b82f6;
|
|
|
|
| 888 |
<p>Guided I-statement builder. Step-by-step help crafting what you want to say.</p>
|
| 889 |
</div>
|
| 890 |
|
| 891 |
+
<div class="tool-desc story-desc" onclick="showToolInfo('story')">
|
| 892 |
+
<h4>STORY</h4>
|
| 893 |
+
<p>"The story I'm making up..." Own your narrative before it becomes accusation.</p>
|
| 894 |
+
</div>
|
| 895 |
+
|
| 896 |
<div class="tool-desc repair-desc" onclick="showToolInfo('repair')">
|
| 897 |
<h4>REPAIR</h4>
|
| 898 |
<p>After ruptures. Help craft genuine reconnection.</p>
|
|
|
|
| 996 |
<button class="tool-btn feel" onclick="useTool('feel')">FEEL</button>
|
| 997 |
<button class="tool-btn need" onclick="useTool('need')">NEED</button>
|
| 998 |
<button class="tool-btn nvc" onclick="useTool('nvc')">PRACTICE NVC</button>
|
| 999 |
+
<button class="tool-btn story" onclick="useTool('story')">STORY</button>
|
| 1000 |
<button class="tool-btn repair" onclick="useTool('repair')">REPAIR</button>
|
| 1001 |
<button class="tool-btn wisdom" onclick="useTool('wisdom')">WISDOM</button>
|
| 1002 |
<button class="tool-btn love" onclick="useTool('love')">LOVE</button>
|
|
|
|
| 1048 |
feel: { name: 'Feelings Check', icon: '💜', api: null, interactive: true },
|
| 1049 |
need: { name: 'Needs Check', icon: '🎯', api: null, interactive: true },
|
| 1050 |
nvc: { name: 'Practice NVC', icon: '📝', api: 'guided_nvc' },
|
| 1051 |
+
story: { name: 'The Story', icon: '📖', api: 'story' },
|
| 1052 |
repair: { name: 'Repair Support', icon: '🙏', api: 'repair_support' },
|
| 1053 |
wisdom: { name: 'Sacred Wisdom', icon: '🕊️', api: 'wisdom', interactive: true },
|
| 1054 |
love: { name: 'Slow Down', icon: '💗', api: null }
|
|
|
|
| 1450 |
case 'repair':
|
| 1451 |
inputText = userInput || 'Help me craft a genuine repair.';
|
| 1452 |
break;
|
| 1453 |
+
case 'story':
|
| 1454 |
+
if (userInput) {
|
| 1455 |
+
inputText = `Help me surface the story I'm making up about this: "${userInput}"`;
|
| 1456 |
+
} else if (lastPartnerMessage) {
|
| 1457 |
+
inputText = `My partner said: "${lastPartnerMessage}"\n\nHelp me notice the story I might be making up about what this means.`;
|
| 1458 |
+
} else {
|
| 1459 |
+
inputText = 'Help me notice what story I might be making up in this situation.';
|
| 1460 |
+
}
|
| 1461 |
+
break;
|
| 1462 |
case 'soma':
|
| 1463 |
// Check for body/sensation words in user's text
|
| 1464 |
const bodyWords = extractBodyWords(userInput);
|