← Back to Projects

Agent-Based Immersive Theater

In-progress sketch — applying agent-based design to immersive and experimental performance.

This is an open notebook entry. I’ve been thinking about whether the same kind of systems-design work I do for robotics — specifying intent, defining the spatial and temporal constraints, monitoring the live state of a chaotic environment, and feeding what happens back into the design — could be useful inside immersive and experimental theater.


The diagrams below are a first cut. Two views: a process view of how a piece would be designed and run, and a system-architecture view of the agents and data that would back it. Both will change. I’m sharing them here because the act of putting them up is part of how I think.

Process view — design, performance, feedback

Pre-performance is where intent gets translated into the constraints a piece will run on: spatial boundaries, risk parameters, the moments where learning is supposed to happen for participants, and the physical and flow design that carries all of it. During performance, the piece is observed from three viewpoints simultaneously, with continuous monitoring of data, immersion, and risk. What gets learned flows back into the next iteration of intent analysis.

graph TD
    subgraph PrePerformance[Pre-Performance Phase]
        style PrePerformance fill:#e6f3ff
        A[Raw Intent] --> B[Intent Analysis]
        B --> C[Scene Design]
        B --> D[Success Metrics]

        C --> E[Spatiotemporal Boundaries]
        C --> F[Risk Parameters]
        C --> G[Learning Moments]

        C --> PHY[Physical Layout Design]
        PHY --> SPACE[Space Configuration]
        PHY --> PROPS[Props & Resources]
        PHY --> TECH[Technical Requirements]

        C --> FLOW[Participant Flow Design]
        FLOW --> PATH[Movement Pathways]
        FLOW --> CHOKE[Bottleneck Analysis]
        FLOW --> TIME[Timing Coordination]

        C --> ROLES[Role Definition]
        ROLES --> MAIN[Core Performers]
        ROLES --> SUP[Support Roles]
        ROLES --> PLANT[Strategic Plants]

        SPACE --> INTEGRATE[Integration Planning]
        PATH --> INTEGRATE
        MAIN --> INTEGRATE

        INTEGRATE --> H[Execution Framework]
        E --> H
        F --> H
        G --> H
        D --> H
    end

    subgraph Performance[Performance Phase]
        style Performance fill:#fff0e6
        H --> I[First Person View]
        H --> J[Second Person View]
        H --> K[Third Person View]

        I --> L[Integration Layer]
        J --> L
        K --> L

        L --> M[Feedback Loop]
        M --> N[Refinement]
        N --> B

        subgraph Continuous_Monitoring[Continuous Monitoring]
            O[Data Collection]
            P[Immersion Check]
            Q[Risk Assessment]
        end

        H --> O
        O --> P
        P --> Q
        Q --> M
    end

    classDef default fill:#f9f9f9,stroke:#333,stroke-width:1px
    classDef emphasis fill:#fff,stroke:#333,stroke-width:2px
    class A,H emphasis

System architecture — agents and data

A second view, looking at the underlying machinery: three databases (history, real-time state, configuration), a small set of specialized agents (spatial, script, role, flow, plus a system integration manager), and an integration layer that processes events, makes decisions, and runs analytics. The point isn’t the specific decomposition — it’s that immersive theater has enough moving parts to benefit from being modeled this way at all.

graph TD
    subgraph DataLayer[Data Layer]
        DB1[Performance History DB]
        DB2[Real-time State DB]
        DB3[Configuration DB]

        subgraph Historical[Historical Collections]
            H1[Past Performances] --> DB1
            H2[Agent Interactions] --> DB1
            H3[Intervention Logs] --> DB1
            H4[Outcome Metrics] --> DB1
        end

        subgraph Realtime[Real-time Collections]
            R1[Current State] --> DB2
            R2[Active Communications] --> DB2
            R3[Sensor Data] --> DB2
            R4[Alerts] --> DB2
        end

        subgraph Configuration[Configuration Collections]
            C1[Venue Layouts] --> DB3
            C2[Script Templates] --> DB3
            C3[Role Definitions] --> DB3
            C4[Success Metrics] --> DB3
        end
    end

    subgraph AgentLayer[Agent Layer]
        A1[System Integration Manager]
        A2[Spatial Planning Agent]
        A3[Script Generation Agent]
        A4[Role Management Agent]
        A5[Flow Control Agent]

        subgraph Protocol[Agent Communication Protocol]
            P1[State Updates]
            P2[Decision Requests]
            P3[Intervention Commands]
        end
    end

    subgraph IntegrationLayer[Integration Layer]
        I1[Event Stream Processor]
        I2[Decision Engine]
        I3[Analytics Engine]
    end

    DB1 --> I3
    DB2 --> I1
    DB3 --> A2
    DB3 --> A3
    DB3 --> A4

    A2 --> P1
    A3 --> P1
    A4 --> P1
    A5 --> P1
    P1 --> A1

    A2 --> P2
    A3 --> P2
    A4 --> P2
    A5 --> P2
    P2 --> I2

    A1 --> P3
    P3 --> A2
    P3 --> A3
    P3 --> A4
    P3 --> A5

    I1 --> I2
    I2 --> A1
    I3 --> I2

    R1 --> I1
    R2 --> I1
    R3 --> I1
    R4 --> I1

    I1 --> H2
    I2 --> H3
    I3 --> H4

    A2 --> C1
    A3 --> C2
    A4 --> C3
    A1 --> C4

    classDef database fill:#f9f9f9,stroke:#333,stroke-width:2px
    classDef agent fill:#e6f3ff,stroke:#333,stroke-width:2px
    classDef integration fill:#fff0e6,stroke:#333,stroke-width:2px

    class DB1,DB2,DB3 database
    class A1,A2,A3,A4,A5 agent
    class I1,I2,I3 integration

Where this might go

Open questions I’m sitting with: how much of the live agent layer should be automated vs. operated by humans in the room; what the right minimum viable version of this looks like for a single piece; and how the feedback loop from performance back into design gets captured without flattening the parts of the work that resist measurement.