Skip to content

Room-shared computer: one Local VM per room, lease-arbitrated #430

Description

@milind-soni

Research across OpenHands, cua's computer-server, E2B/envd, AutoGen/CrewAI/LangGraph, and VNC/Guacamole/TeamViewer arbitration models. The striking finding: nobody arbitrates at the daemon — cua's computer-server and E2B's envd are both lockless multi-client free-for-alls; every system that works does exclusivity by scheduling (one selected actor at a time) plus a control-plane lease.

We already have both halves:

  • Room turns run one member at a time on the group's threadId
  • LocalVmLease.claim() already re-claims across bots sharing one threadId — sequential room members would hand the lease along naturally
  • computer-control.ts holds the human-takeover lease (pause-all is the right interplay, per TeamViewer/Teams' owner-grants-token model)

Remaining design: container named per-room instead of per-bot (follow the existing refuse-and-instruct migration precedent, no auto-migration), surface "who has the computer" in the room header, and the dead-holder path already exists (!isBotBusy(owner) recovery + TTL).

Pairs with #209's shared working folder. Scope: container-computer.ts naming, room turn dispatch mounting the computer, ComputerPanel room view.

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions