distributions/claude/skills/interactive-theatre-designer/SKILL.md
Designs interactive theatrical experiences with branching narratives, audience participation systems, and immersive environmental storytelling.
npx skillsauth add organvm-iv-taxis/a-i--skills interactive-theatre-designerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill provides guidance for creating theatrical experiences where audiences participate in, influence, or co-create the performance through interactive systems and branching narratives.
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 │
└───────────────┴─────────────┴─────────────┴─────────────────┘
| 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 |
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
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
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
))
Make Choices Meaningful:
Avoid Choice Paralysis:
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])
| 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 |
TRADITIONAL STAGE IMMERSIVE SPACE
┌─────────────────┐ ┌─────────────────────────────┐
│ │ │ GARDEN │ LIBRARY │
│ STAGE │ │ (Past) │ (Memory) │
│ │ │ ◇ ↔ ◇ │
├─────────────────┤ ├────────────┼───────────────┤
│ AUDIENCE │ │ KITCHEN │ BEDROOM │
│ │ │ (Present) │ (Future) │
└─────────────────┘ │ ◇ ↔ ◇ │
└─────────────────────────────┘
◇ = Performance hotspot
↔ = Audience flow path
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
| 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 |
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
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'
)
## [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
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
references/choice-architecture.md - Designing meaningful decisionsreferences/immersive-case-studies.md - Notable productions analysisreferences/live-systems-tech.md - Technical implementation patternsdevelopment
Optimize resumes and CVs for impact, ATS compatibility, and audience targeting. Supports multiple formats (chronological, functional, hybrid), accomplishment framing (STAR/XYZ), and tailoring for specific roles. Triggers on resume review, CV update, job application prep, or career document requests.
testing
Transfer context between AI agent sessions with structured handoff protocols, state serialization, and decision log preservation. Covers multi-agent coordination, context compression, and continuity patterns. Triggers on agent handoff, session transfer, or multi-agent continuity requests.
tools
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.
devops
Transform AI conversations and chat transcripts into publishable content including blog posts, documentation, tutorials, and knowledge base entries. Covers extraction, restructuring, and editorial refinement. Triggers on conversation-to-content, transcript processing, or chat-to-doc requests.