Skip to content
Hoody.com

Collaboration on computers has mostly meant taking turns: screen sharing where one person drives and everyone else watches, pair programming where two people share one keyboard, code review where changes move through a queue. Google Docs showed that real-time collaboration does not require turn-taking: multiple cursors, simultaneous edits, every change visible to everyone as it happens. Hoody applies the same model to an entire computer.

Share a URL and the other person is in: the same terminal, the same file system, the same database, the same browser, the same desktop. Everyone works in the same environment at the same time rather than watching one another work. One person can sit in a browser tab while another connects over ssh hoody.com from a plane, and both see the same container, the same terminals, and the same state in real time.

Screenshot Coming Soon Hoody Agent multiplayer session: two people typing into the same shared terminal, identical live view on both screens
Multiplayer: two people working in the same terminal, simultaneously

None of this is a separate collaboration feature; it follows from making everything HTTP. When every service is a URL, a second participant is just another connection. And because the Hoody Agent itself runs in a container, sharing your whole working view means sharing one more URL.


Every Hoody service has a URL, and sending that URL to someone is the entire sharing mechanism:

Your terminal: https://PROJECT-CONTAINER-terminal-1.SERVER.containers.hoody.com
Your display: https://PROJECT-CONTAINER-display-1.SERVER.containers.hoody.com
Your VS Code: https://PROJECT-CONTAINER-code-1.SERVER.containers.hoody.com
Your database: https://PROJECT-CONTAINER-sqlite-1.SERVER.containers.hoody.com
Your agent: https://PROJECT-CONTAINER-agent-1.SERVER.containers.hoody.com

Send any of those URLs to someone and they open it in their browser; they are now in your environment. Joining involves no installation, no invitation system, no account creation at your end, no VPN, and no SSH key exchange.


A terminal URL accepts multiple people at once. Everyone sees the identical live screen, anyone can type, and every keystroke appears for everyone in real time.

┌─────────────────────────────────────────────────┐
│ root@container:~# │
│ │
│ $ npm test ← Alice │
│ Running 47 tests... │
│ ✓ All tests passed │
│ │
│ $ git status ← Bob │
│ On branch feature/auth │
│ modified: src/auth.ts │
│ │
│ $ cat src/auth.ts ← the agent │
│ // AI reviewing the file... │
│ │
└─────────────────────────────────────────────────┘

Three participants, two humans and an AI agent, are attached to the same live shell. It is one terminal, with one screen, one cursor, and one stream of output, identical for everyone. Each participant sees output the moment it happens; there is no screen share to wait for.

There is nothing to set up. Open the terminal URL from multiple browsers:

Terminal window
# Read the container details; nothing else is required
hoody containers get $CONTAINER_ID
# Output includes id, project_id, name, status, server_name, etc.
# Construct and share the terminal URL:
# https://PROJECT-CONTAINER-terminal-1.SERVER.containers.hoody.com

Instance numbers give you separate terminal sessions for different tasks:

terminal-1 → Alice and Bob debug the backend together
terminal-2 → Carol and the AI agent work on the frontend
terminal-3 → Dave monitors logs independently
terminal-4 → Shared team standup terminal for commands

Each instance is a separate URL that can be shared on its own. Every instance supports multiple simultaneous users.


Displays extend the same model to graphical applications. Multiple people see the same desktop, the same browser, the same GUI application, and all of them can interact with it simultaneously.

Display URL: https://PROJECT-CONTAINER-display-1.SERVER.containers.hoody.com
Alice sees: The React app running in the container's Chrome
Bob sees: The exact same view, in real time
Carol clicks: A button in the app; Alice and Bob see the result instantly

This differs from screen sharing in that no one rebroadcasts a monitor. Every participant connects to the same live display session, with full input, straight from the source, and the experience is identical for each of them.

Live debugging: Everyone sees the same browser, so one person triggers the bug while the rest watch the network tab, the console, and the DOM at the same time.

Design review: A designer opens Figma in the container’s browser and the team reviews together, pointing at elements and making live changes.

AI observation: The agent runs browser automation in display-1 while the team watches it navigate, click, and fill forms, and verifies the behavior is correct.


hoody-code gives everyone VS Code in a browser, and multiple people can edit the same codebase simultaneously:

https://PROJECT-CONTAINER-code-1.SERVER.containers.hoody.com

Open this URL from different browsers. Each person gets a full VS Code instance connected to the same filesystem. File changes propagate instantly.


The Hoody Agent puts your whole working context in one multi-pane view: AI chat beside live terminals, files, and a display preview. Because the Agent is streamed as a shared session, its URL is multiplayer like everything else; everyone who opens it sees the same panes, live.

https://PROJECT-CONTAINER-agent-1.SERVER.containers.hoody.com

You can also compose your own view. Every service is an iframe-able URL, so you can put terminal-1, display-1, code-1, and sqlite-1 side by side in a plain HTML page and send the link. Each pane is the real, live service, and each is independently multiplayer.

┌──────────────────────────────────────────────────────────────┐
│ SHARED WORKSPACE: "Team Dashboard" │
│ │
│ ┌─────────────────────┐ ┌──────────────────────────────┐ │
│ │ Terminal-1 │ │ Display-1 │ │
│ │ (Backend logs) │ │ (App preview) │ │
│ │ │ │ │ │
│ │ Alice & Bob here │ │ Everyone sees this │ │
│ └─────────────────────┘ └──────────────────────────────┘ │
│ │
│ ┌─────────────────────┐ ┌──────────────────────────────┐ │
│ │ Code-1 │ │ SQLite-1 │ │
│ │ (VS Code) │ │ (Database browser) │ │
│ │ │ │ │ │
│ │ Carol editing │ │ Dave checking data │ │
│ └─────────────────────┘ └──────────────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────┘

One URL carries four services and four participants, everything in sync. Nothing here is a static screenshot; every pane is the live service itself, open to everyone at once.


Open by default does not mean open forever. When you are ready to control access, Hoody provides granular proxy permissions:

Terminal window
# Build the permissions document one field at a time with the granular commands.
# Writes are optimistic-concurrency guarded, and every successful write bumps
# file_version, so read a fresh ETag before each mutation (a stale --if-match
# is rejected with 412).
v() { hoody containers proxy permissions get -c $CONTAINER_ID -o json | jq -r '.file_version'; }
# Set a password on the container
hoody containers proxy groups password set -c $CONTAINER_ID \
--group-name team \
--auth-username team --auth-password 'team-access-2026' \
--salt team-salt-2026 --algorithm sha256 \
--if-match "file:v$(v)"
# Grant the services the group may reach, one program per call
for program in terminal files display; do
hoody containers proxy groups permissions set -c $CONTAINER_ID \
--group-name team --program $program --access true --if-match "file:v$(v)"
done
hoody containers proxy groups permissions set -c $CONTAINER_ID \
--group-name team --program http --access '[8080]' --if-match "file:v$(v)"
# Everything not granted above is denied
hoody containers proxy default --default deny -c $CONTAINER_ID --if-match "file:v$(v)"
# Alternative: reset this container's permissions document, then restrict by IP.
# Each IP group takes one CIDR; add multiple groups for multiple ranges.
hoody containers proxy permissions delete -c $CONTAINER_ID --if-match "file:v$(v)" -y
hoody containers proxy default --default deny -c $CONTAINER_ID --if-match "file:v$(v)"
hoody containers proxy groups ip set -c $CONTAINER_ID \
--group-name office-vpn --range 203.0.113.50/32 --if-match "file:v$(v)"
hoody containers proxy groups ip set -c $CONTAINER_ID \
--group-name office-lan --range 198.51.100.0/24 --if-match "file:v$(v)"
for group in office-vpn office-lan; do
for program in terminal files display; do
hoody containers proxy groups permissions set -c $CONTAINER_ID \
--group-name $group --program $program --access true --if-match "file:v$(v)"
done
hoody containers proxy groups permissions set -c $CONTAINER_ID \
--group-name $group --program http --access '[8080]' --if-match "file:v$(v)"
done
# Alternative: reset this container's permissions document, then use a shared-secret token carried in a header.
hoody containers proxy permissions delete -c $CONTAINER_ID --if-match "file:v$(v)" -y
hoody containers proxy default --default deny -c $CONTAINER_ID --if-match "file:v$(v)"
hoody containers proxy groups token set -c $CONTAINER_ID \
--group-name realm --if-match "file:v$(v)" \
--body '{"header":"Authorization","value":"'$REALM_TOKEN'"}'
for program in terminal files display; do
hoody containers proxy groups permissions set -c $CONTAINER_ID \
--group-name realm --program $program --access true --if-match "file:v$(v)"
done
hoody containers proxy groups permissions set -c $CONTAINER_ID \
--group-name realm --program http --access '[8080]' --if-match "file:v$(v)"

A typical progression:

  1. Development: wide open. Share the URL and anyone can join.
  2. Staging: password protected. Team members know the password; external parties have to ask.
  3. Production: IP restricted or token gated. Only authorized traffic reaches the services.

Permissions apply at the proxy level, so one document protects every service in the container. You set the rules once and they are enforced for everything the container exposes.


Two developers share one container from two browser tabs:

Developer A: Opens code-1 URL → Edits src/components/Header.tsx
Developer B: Opens code-1 URL → Edits src/components/Footer.tsx
Both: Open terminal-1 URL → See each other's commands
Both: Open display-1 URL → See the app update live

There is no screen-sharing latency and no “let me take control.” Both developers have full access to everything, and the filesystem is the single source of truth.

Show a client the work in progress, live and interactive:

You: Open display-1 URL → Present the running application
Client: Opens the same URL → Clicks around, tests features, asks questions
You: Open terminal-1 → Make live changes in response to feedback
Client: Sees changes immediately in display-1

The client does not install anything and does not need an account. Opening a URL in their browser is the entire onboarding process.

During a production issue, everyone needs to see the same thing at the same time:

Lead: Opens terminal-1 → Tails the error logs
Backend: Opens terminal-2 → Queries the database for corrupted records
Frontend: Opens display-1 → Reproduces the bug in the browser
DevOps: Opens terminal-3 → Checks network configuration
Everyone: Opens each other's terminal URLs for every perspective

Four people bring four perspectives to one container and coordinate in real time, without a Zoom call.

Humans and AI agents can work together in the same container:

Terminal window
# Open an agent session, then dispatch a blocking turn into it
SESSION_ID=$(hoody agent sessions create --realm global --container "$CONTAINER_ID" -o json | jq -r '.id')
hoody agent sessions prompt-sync \
--id "$SESSION_ID" \
--text "Implement the user profile page based on the design in /docs/profile-mockup.png" \
--policy auto_approve \
--realm global
# While the agent works, you and your team observe in real time:
# terminal-1 URL → Watch the agent execute commands
# code-1 URL → Watch the agent write code
# display-1 URL → Watch the app update
# agent-1 URL → Send prompts to steer the agent (HTTP API / hoody CLI)

The team watches the AI work. Someone notices a mistake and corrects the agent with a follow-up prompt; someone else opens the terminal and fixes a configuration issue the agent missed. The agent continues building, now on the right track, with human judgment and AI execution running at the same time.


When multiple people and agents share a container, use instance numbers to avoid stepping on each other:

terminal-1 → Team lead (oversight, commands)
terminal-2 → AI agent (automated execution)
terminal-3 → Backend developer (database queries)
terminal-4 → Frontend developer (build tools)
display-1 → App preview (shared)
display-2 → AI agent's browser automation (shared observation)
agent-1 → Primary AI agent (feature work)
agent-2 → Secondary AI agent (testing)
code-1 → Developer A's VS Code
code-2 → Developer B's VS Code

All instances share the same container filesystem and network. Each one is a separate access point that can be shared independently.


Traditional collaboration tools add a sharing layer on top of single-user systems. In Hoody, multiplayer is a property of the architecture: every service URL accepts multiple connections.

TraditionalHoody
Install screen sharing softwareShare the URL
One person drives at a timeEveryone has full control
Video encoding introduces lagDirect HTTP connection, no encoding
Requires same time zone for effectivenessAsynchronous access to the same URL
Setup per collaboration sessionNone; URLs are permanent
Cannot share with AI agentsAgents use the same URLs as humans

The URL is the collaboration mechanism. There is nothing to configure or install; anyone with the URL opens it and joins.