jostlebot Claude Opus 4.5 commited on
Commit
c23c3fa
·
1 Parent(s): d47699c

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>

Files changed (3) hide show
  1. README.md +1 -0
  2. app.py +35 -1
  3. 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);