interactive-theatre-designer
Interactive Theatre Designer
This skill provides guidance for creating theatrical experiences where audiences participate in, influence, or co-create the performance through interactive systems and branching narratives.
Core Competencies
- Branching Narrative: Multi-path story structures
- Audience Agency: Meaningful choice and participation
- Immersive Design: Environmental storytelling, site-specific work
- Live Systems: Real-time adaptation and emergence
- Hybrid Formats: Physical/digital integration
Interactive Theatre Fundamentals
Spectrum of Interactivity
Passive Active
│ │
├──Traditional──┬──Promenade──┬──Immersive──┬──Participatory──┤
│ Theatre │ Theatre │ Theatre │ Theatre │
│ │ │ │ │
│ Fixed seats │ Audience │ Audience │ Audience │
│ Fourth wall │ moves │ is inside │ affects │
│ No agency │ Partial │ story world │ narrative │
│ │ agency │ Some agency │ Full agency │
└───────────────┴─────────────┴─────────────┴─────────────────┘
Participation Modes
| Mode | Description | Design Challenge |
|---|---|---|
| Witness | Observe from within | Manage sight lines, intimacy |
| Explorer | Choose where to go | Balance FOMO, reward curiosity |
| Player | Make story choices | Create meaningful stakes |
| Co-creator | Generate content | Scaffold creativity |
| Performer | Become a character | Lower inhibition barriers |
Branching Narrative Design
Structure Types
Linear with Variations
A ──→ B ──→ C ──→ D
↓
B' (variation based on earlier choice)
Branching Tree
┌── B1 ──→ C1
A ────┤
└── B2 ──→ C2 ──┬── D1
└── D2
Folding Paths (reconvergent)
┌── B1 ──┐
A ────┤ ├──→ D
└── B2 ──┘
Hub and Spoke
┌── B ──┐
┌────┤ │
A ──┤ └───────┘
│ ┌── C ──┐
└────┤ │
└───────┘
Parallel Threads
A1 ───────→ B1 ───────→ C1
↕ sync
A2 ───────→ B2 ───────→ C2
Choice Architecture
class NarrativeChoice:
"""A decision point in the story"""
def __init__(self, prompt, options):
self.prompt = prompt
self.options = options
self.context_requirements = []
self.consequences = {}
def evaluate_options(self, audience_state):
"""Determine available choices based on state"""
available = []
for option in self.options:
if option.is_available(audience_state):
available.append(option)
# Always ensure at least two meaningful options
if len(available) < 2:
available.append(self._create_fallback_option())
return available
class StoryBeat:
"""A unit of narrative action"""
def __init__(self, content, duration_range, choice=None):
self.content = content
self.min_duration = duration_range[0]
self.max_duration = duration_range[1]
self.choice = choice # Optional NarrativeChoice
self.state_changes = {} # What this beat modifies
self.prerequisites = [] # What must be true to reach this
Consequence Systems
class ConsequenceTracker:
"""Track choices and their ripple effects"""
def __init__(self):
self.choices_made = []
self.world_state = {}
self.character_relationships = {}
self.available_endings = set()
def record_choice(self, choice_id, option_selected, timestamp):
self.choices_made.append({
'choice': choice_id,
'selected': option_selected,
'time': timestamp
})
self._apply_consequences(choice_id, option_selected)
self._update_available_endings()
def _apply_consequences(self, choice_id, option):
"""Apply immediate and delayed consequences"""
# Immediate effects
for effect in option.immediate_effects:
self._apply_effect(effect)
# Queue delayed effects
for effect in option.delayed_effects:
self._queue_effect(effect)
def get_story_fingerprint(self):
"""Unique identifier for this audience's journey"""
return hash(tuple(
(c['choice'], c['selected'])
for c in self.choices_made
))
Audience Agency Design
Choice Design Principles
Make Choices Meaningful:
- Clear stakes: What's at risk?
- Visible consequences: Changes they can observe
- Emotional investment: Characters they care about
- No "right" answer: Multiple valid paths
Avoid Choice Paralysis:
- Limit to 2-4 options at decision points
- Provide adequate context (but not too much)
- Use time pressure sparingly and purposefully
- Signal importance level of choices
Voting and Collective Choice
class CollectiveDecision:
"""Aggregate audience input into story decisions"""
def __init__(self, voting_method='plurality'):
self.voting_method = voting_method
self.votes = {}
def collect_votes(self, options, timeout_seconds=30):
"""Gather votes from audience"""
# Methods: raise hands, mobile app, physical movement, sound
pass
def resolve(self):
"""Determine outcome based on voting method"""
methods = {
'plurality': self._plurality, # Most votes wins
'supermajority': self._supermajority, # Needs 2/3
'consensus': self._consensus, # Unanimous
'weighted': self._weighted, # Some votes count more
'random_delegate': self._delegate # One person decides
}
return methods[self.voting_method]()
def _plurality(self):
return max(self.votes.keys(), key=lambda x: self.votes[x])
Individual vs Collective Agency
| Approach | Pros | Cons |
|---|---|---|
| Individual choices | Personal investment | Logistical complexity |
| Collective voting | Easy to manage | Minority feels unheard |
| Representative | Balance of both | Choosing representative |
| Parallel paths | Everyone gets agency | Requires more content |
Immersive Environment Design
Space as Narrative
TRADITIONAL STAGE IMMERSIVE SPACE
┌─────────────────┐ ┌─────────────────────────────┐
│ │ │ GARDEN │ LIBRARY │
│ STAGE │ │ (Past) │ (Memory) │
│ │ │ ◇ ↔ ◇ │
├─────────────────┤ ├────────────┼───────────────┤
│ AUDIENCE │ │ KITCHEN │ BEDROOM │
│ │ │ (Present) │ (Future) │
└─────────────────┘ │ ◇ ↔ ◇ │
└─────────────────────────────┘
◇ = Performance hotspot
↔ = Audience flow path
Environmental Storytelling Elements
class ImmersiveSpace:
"""Design an immersive theatrical environment"""
def __init__(self, venue):
self.venue = venue
self.zones = {}
self.artifacts = []
self.ambient_states = {}
def add_zone(self, zone):
"""Define a narrative zone"""
self.zones[zone.name] = zone
def design_discovery_path(self, story_beats):
"""Create environmental narrative arc"""
path = []
for beat in story_beats:
zone = self._select_zone_for_beat(beat)
artifacts = self._place_artifacts(beat, zone)
ambient = self._set_ambient_state(beat, zone)
path.append({
'beat': beat,
'zone': zone,
'artifacts': artifacts,
'ambient': ambient
})
return path
class NarrativeArtifact:
"""Object that tells story when discovered"""
def __init__(self, name, backstory, discovery_trigger):
self.name = name
self.backstory = backstory # What it reveals
self.discovery_trigger = discovery_trigger # How found
self.required_for_story = False
self.hidden_level = 0 # 0=obvious, 5=very hidden
Sensory Design
| Sense | Storytelling Uses | Technical Considerations |
|---|---|---|
| Visual | Character, mood, focus | Lighting plots, scenic |
| Audio | Atmosphere, transition | Speakers, acoustic design |
| Smell | Memory, place, emotion | Scent machines, natural |
| Touch | Texture, temperature | Material selection |
| Taste | Ritual, communion | Food safety, allergies |
Live System Design
Real-Time Adaptation
class ShowController:
"""Manage live show based on audience behavior"""
def __init__(self, script, performers, systems):
self.script = script
self.performers = performers
self.systems = systems # Lights, sound, effects
self.current_beat = None
self.audience_state = AudienceState()
def update(self):
"""Called continuously during show"""
# Observe audience
self.audience_state.update(self._observe_audience())
# Check for triggers
triggers = self._check_triggers()
# Adapt if needed
for trigger in triggers:
self._handle_trigger(trigger)
# Cue performers
self._send_performer_cues()
def _check_triggers(self):
"""Detect conditions that require adaptation"""
triggers = []
# Audience engagement low
if self.audience_state.engagement < 0.3:
triggers.append(('low_engagement', 'intensify'))
# Audience moving to unexpected zone
if self._unexpected_movement():
triggers.append(('migration', 'redirect_or_adapt'))
# Time running over/under
pace = self._calculate_pace()
if pace < 0.8:
triggers.append(('slow_pace', 'compress'))
elif pace > 1.2:
triggers.append(('fast_pace', 'expand'))
return triggers
Performer Communication
class PerformerCueSystem:
"""Real-time communication with performers"""
def __init__(self):
self.performers = {}
self.cue_queue = []
def add_performer(self, name, device_type):
"""Register performer with their cue device"""
self.performers[name] = {
'device': device_type, # 'earpiece', 'wearable', 'visual'
'current_track': None,
'status': 'ready'
}
def send_cue(self, performer, cue_type, content, urgency='normal'):
"""Send cue to specific performer"""
cue = {
'performer': performer,
'type': cue_type, # 'go', 'hold', 'redirect', 'improv'
'content': content,
'urgency': urgency
}
self._transmit(cue)
def broadcast_state_change(self, new_state):
"""Inform all performers of story state change"""
for performer in self.performers:
self.send_cue(
performer,
'state_change',
new_state,
urgency='low'
)
Documentation and Planning
Show Bible Structure
## [Show Title] Production Bible
### Concept
- Logline (one sentence)
- Themes
- Audience experience goals
### Narrative
- Story summary (non-branching core)
- Branch points and options
- Endings (and how reached)
- Character breakdowns
### Space
- Venue requirements
- Zone map
- Artifacts inventory
- Technical requirements
### Interactivity
- Choice points catalog
- Participation mechanics
- Edge cases and recovery
### Operations
- Audience journey map
- Performer tracks
- Stage management protocol
- Emergency procedures
Run Sheet Format
TIME | BEAT | ACTION | TRIGGERS
--------|----------------|----------------------|------------------
0:00 | GATHERING | Audience enters | N/A
0:15 | INTRO | Host welcome | All present
0:20 | CHOICE 1 | Vote on path | 2 min timer
0:22 | BRANCH A or B | Split audience | Vote result
... | ... | ... | ...
1:45 | CONVERGENCE | All paths meet | All groups arrive
2:00 | FINALE | Final choice | Timer
2:10 | END | House lights | Applause
Best Practices
Designing for Failure
- Plan for empty rooms (no one chooses that path)
- Plan for crowded rooms (everyone chooses same path)
- Plan for confused audiences (unclear instructions)
- Plan for disruptive participants (graceful management)
- Plan for technical failures (degraded mode operation)
Rehearsal Process
- Paper prototype: Walk through on paper first
- Block rehearsal: Test spacing and movement
- Branch rehearsals: Practice each path separately
- Integration: Run full show with choices
- Audience tests: Invited audience for feedback
- Tech: Add all technical elements
- Previews: Public performances for refinement
References
references/choice-architecture.md- Designing meaningful decisionsreferences/immersive-case-studies.md- Notable productions analysisreferences/live-systems-tech.md- Technical implementation patterns
More from 4444j99/a-i--skills
creative-writing-craft
Craft compelling fiction and creative nonfiction with attention to structure, voice, prose style, and revision. Supports short stories, novel chapters, essays, and hybrid forms. Triggers on creative writing, fiction writing, story craft, prose style, or literary technique requests.
184skill-creator
Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Claude's capabilities with specialized knowledge, workflows, or tool integrations.
15freelance-client-ops
Manage freelance and client work professionally—proposals, contracts, scope management, invoicing, and client communication. Covers the business side of creative work. Triggers on freelance, client work, proposals, contracts, pricing, or project scope requests.
14generative-music-composer
Creates algorithmic music composition systems using procedural generation, Markov chains, L-systems, and neural approaches for ambient, adaptive, and experimental music.
12generative-art-algorithms
Create algorithmic and generative art using mathematical patterns, noise functions, particle systems, and procedural generation. Covers flow fields, L-systems, fractals, and creative coding foundations. Triggers on generative art, algorithmic art, creative coding, procedural generation, or mathematical visualization requests.
10interfaith-sacred-geometry
Generate sacred geometry patterns with interfaith symbolism for spiritual visualizations and art. Use when creating visual representations that honor multiple religious traditions, designing meditation aids, building soul journey visualizations, or producing art that bridges sacred traditions through geometric harmony. Triggers on sacred geometry requests, interfaith symbol design, spiritual visualization projects, or multi-tradition sacred art.
8