Coach - Drama Triangle - Claude
Launches Claude Code via `tuple connect` as a live drama-triangle coach. During the call it watches your own lines for Victim, Persecutor, or Rescuer patterns and fires a quiet one-line reframe as a terminal nudge and macOS notification. When the call ends, it writes a drama-evaluation.md with per-participant profiles and concrete phrases to try differently next time.
Launches Claude Code as a live Karpman Drama Triangle coach on your Tuple call when transcription starts.
When call-transcription-started fires, this trigger opens your preferred terminal and runs tuple connect --harness claude "<coaching purpose>". Connect resolves the call state, gives Claude a context prompt, and points it at the live transcript — the COACH_PURPOSE in the trigger adds the drama-triangle lens on top.
What it does
During the call
While you're talking, the coach:
- Watches your own lines for Victim ("I have no choice…"), Persecutor ("they always / never…"), or Rescuer ("let me save you…") language.
- Fires a quiet nudge when confidence is high: a terminal line plus a best-effort macOS notification, each containing a one-line reframe toward the empowered alternative — Creator, Challenger, or Coach.
- Stays otherwise silent. It won't repeat a reframe for the same pattern, won't nudge more than about once every few minutes, and ignores venting at code/infra, jokes, or self-aware naming of the pattern.
It does not post anywhere external. It does not speak in the call. Its terminal is yours alone.
When the call ends
When the call ends, the same session switches from real-time coach to analyst:
- Reads the full transcript from disk across all session directories for this call.
- Writes
drama-evaluation.mdto the call directory with: per-participant drama profiles, the 2–3 hook moments where the conversation tipped, and concrete phrases to try differently with each teammate next time. - Notifies you when the file is ready.
Because the trigger hands off to tuple connect, there is nothing call-format-specific baked in — how Claude reads the call and the coaching behavior live in connect's prompt and in COACH_PURPOSE, not in this script.
Changing the coaching framing
The coaching intent lives in one editable variable near the top of call-transcription-started:
COACH_PURPOSE="Watch my own lines for Karpman Drama Triangle patterns …"
Edit COACH_PURPOSE to adjust what the coach looks for, how noisy it is, or what it writes at the end of the call. Connect's base prompt already covers "follow the live call"; COACH_PURPOSE adds your lens on top.
Choosing your terminal
By default the trigger opens your system's default handler for .command files. To force a specific terminal, set PREFERRED_TERM at the top of call-transcription-started (or in the environment):
PREFERRED_TERM="iterm" # ghostty | iterm | alacritty | terminal
The terminal runs launch-coach-drama-triangle-claude.command, whose #!/bin/zsh -li shebang sources your shell profile so tuple resolves from the same PATH you get in a normal terminal.
Prerequisites
- macOS
- Claude Code installed so
claudeworks in a new terminal - The
tupleCLI on your interactive shell PATH (withconnectsupport)- Install it from the Tuple app: its Transcription settings have an Install button that links
tupleonto your PATH.
- Install it from the Tuple app: its Transcription settings have an Install button that links
- Tuple transcription enabled for the call
Installation
Drop this directory into your Tuple triggers folder:
- Production:
~/.tuple/triggers/coach-drama-triangle-claude/ - Staging:
~/.tuplestaging/triggers/coach-drama-triangle-claude/
The trigger fires the next time call transcription starts.
How it works
call-transcription-started fires with no call-specific arguments. This trigger:
- Creates a working directory per start,
${TMPDIR:-/tmp}/tuple-coach-drama-triangle-claude/<timestamp>-<pid>. - Writes the
COACH_PURPOSEto acoach-purpose.txtsidecar file and an executablelaunch-coach-drama-triangle-claude.commandwrapper into it. - Opens it in your preferred terminal via
open(LaunchServices). No AppleScript and no direct binary launch, so it triggers no macOS accessibility prompt and no stray windows. - The wrapper starts a login-interactive zsh,
cds to that directory, and runstuple connect --harness claude "<COACH_PURPOSE>".
There is no dedup: each transcription-start gets its own directory, so stopping and restarting transcription spawns a fresh companion while older ones keep running.
For local testing without opening a terminal, set COACH_DRAMA_TRIANGLE_CLAUDE_DRY_RUN=1; it writes the launcher and exits.
Acknowledgments
The Drama Triangle framework is Stephen Karpman's. The Creator / Challenger / Coach reframe (TED, The Empowerment Dynamic) is David Emerald's.