Real-time browser tab collaboration with ghost cursors, annotations, and an AI agent that can act inside the host's Chrome tabs.
TabTwin enables real-time collaboration directly inside a browser tab. A host can share a browser session with guests, allowing them to see the same tab, move ghost cursors, add annotations, and request actions while the host remains in control.
- π±οΈ Ghost Cursor Collaboration β Guests can move a collaborative cursor inside the host's browser tab.
- βοΈ Annotations β Highlight and annotate content directly on the shared page.
- π€ AI Agent β An AI agent can assist with approved browser actions.
- π Host-Controlled Permissions β The host remains in control and can approve or revoke requested actions.
- π Browser-Based Guest Access β Guests can join using a shared session link without installing an extension.
- β‘ Real-Time Communication β WebRTC data channels provide real-time collaboration.
- π WebSocket Signaling β WebSocket is used for signaling and fallback communication.
- π§ Session Recording β Participants can optionally record collaboration events.
βΆοΈ Session Playback β Recorded events can be played back, paused, resumed, and reviewed.- πΎ Redis Session Storage β Session state is stored in Redis.
- π§© Chrome Extension β Hosts use a Chrome Manifest V3 extension to manage browser-tab collaboration.
Traditional screen sharing allows teammates to watch another person's screen, but it does not provide natural interaction.
A participant cannot easily:
- Point at something on the screen.
- Highlight important content.
- Add annotations.
- Request a browser action.
- Collaborate directly inside the host's browser tab.
TabTwin addresses this by allowing guests or an AI agent to appear inside the host's real browser tab as a live collaborative participant, while keeping the host in control of browser actions.
Hosts:
- Install the TabTwin Chrome extension.
- Start a collaboration session.
- Receive a generated session link.
- Share the link with guests.
- Monitor guest interactions.
- Approve or revoke requested actions when required.
The Chrome extension injects the collaboration interface into browser tabs and communicates with the TabTwin backend.
Guests:
- Open the session link.
- Enter their name.
- Join the session.
- Move the ghost cursor.
- Add annotations and highlights.
- Scroll through the shared page.
- Request click or typing actions when permitted.
Guests do not need to install the Chrome extension.
TabTwin consists of four major components:
βββββββββββββββββββββββ
β Host β
β Chrome Browser β
ββββββββββββ¬βββββββββββ
β
βΌ
βββββββββββββββββββββββ
β Chrome Extension β
β Manifest V3 β
ββββββββββββ¬βββββββββββ
β
WebRTC / WebSocket
β
βΌ
βββββββββββββββββββββββ
β TabTwin Server β
β REST + Signaling β
βββββββββ¬ββββββ¬ββββββββ
β β
ββββββββββββββ ββββββββββββββ
βΌ βΌ
βββββββββββββββ βββββββββββββββ
β Redis β β AI Agent β
β Session β β Claude API β
β State β β β
βββββββββββββββ βββββββββββββββ
β
βΌ
βββββββββββββββββββββββ
β Guest Web App β
β Browser Client β
βββββββββββββββββββββββ
| Component | Responsibility |
|---|---|
| Chrome Extension | Hosts the collaboration session and injects collaboration overlays |
| Guest Web App | Allows guests to join and interact with a session |
| Server | Handles REST APIs, session creation, and WebSocket signaling |
| WebRTC | Provides real-time peer-to-peer collaboration |
| Redis | Stores session state |
| AI Agent | Performs approved AI-assisted browser actions |
For a more detailed technical explanation, see ARCHITECTURE.md.
- The host opens the TabTwin Chrome extension.
- The extension requests a new session from the server.
- The server creates the session and generates a join link.
- The host shares the link with guests.
- Guests open the link in their browser.
- WebSocket signaling establishes the required WebRTC connection.
- Collaboration events are exchanged in real time.
- Guests can move cursors, annotate, scroll, and request actions.
- The host controls which requested actions are allowed.
- Session events can optionally be recorded and reviewed through playback.
| Browser | Guest Support | Installation Required |
|---|---|---|
| Chrome | β Yes | β No |
| Firefox | β Yes | β No |
| Edge | β Yes | β No |
| Safari | β Yes | β No |
The host extension currently supports Chrome because the MVP depends on Chrome Manifest V3 extension APIs.
| Browser | Host Extension |
|---|---|
| Chrome | β Supported |
| Firefox | β Not currently supported |
| Edge | β Not currently supported |
| Safari | β Not currently supported |
- React
- Vite
- Tailwind CSS
- Node.js
- REST APIs
- WebSocket
- WebRTC signaling
- Chrome Extension
- Manifest V3
- Redis
- ioredis
- Anthropic Claude API
Before running TabTwin locally, make sure you have:
- Node.js installed.
- npm installed.
- Google Chrome installed.
- Redis running locally or remotely.
- An Anthropic API key if you want to use Claude-powered actions.
git clone https://github.com/itzzavdhesh/TabTwin.git
cd TabTwinnpm installCopy the example environment file:
cp .env.example server/.envConfigure the required variables in server/.env.
Example:
REDIS_URL=redis://localhost:6379
PORT=3001
CLIENT_URL=http://localhost:5173
ANTHROPIC_API_KEY=your_api_key_hereTabTwin requires Redis for session storage.
docker run -d -p 6379:6379 --name tabtwin-redis redis:7-alpineThen configure:
REDIS_URL=redis://localhost:6379If Redis is not available or REDIS_URL is missing, the server will not be able to start correctly.
npm run serverThe server uses the configured PORT value, which defaults to:
3001
Open another terminal and run:
npm run dev:webThe web application should be available at:
http://localhost:5173
From the repository root:
npm run build --workspace extensionThis generates the extension build output.
- Open Chrome.
- Navigate to:
chrome://extensions
- Enable Developer mode.
- Click Load unpacked.
- Select the
extension/directory. - Pin TabTwin to the Chrome toolbar.
- Open the extension.
- Click Start Session.
Guests do not need to install anything.
Simply:
- Open the session link provided by the host.
- Enter your name.
- Join the session.
- Start collaborating.
TabTwin supports optional session recording from the guest session interface.
When recording is enabled, TabTwin can capture a lightweight timeline of collaboration events, including:
- Session lifecycle events.
- Cursor movement.
- Scroll events.
- Annotation additions.
- Click requests.
- Typing approvals.
Recorded sessions can be reviewed directly through the session interface.
The current playback implementation supports:
- Play
- Pause
- Resume
- Seek
- Timeline review
Currently, recordings are kept in memory for the active session and are not persisted to disk or exported as standalone files.
| Variable | Required | Description |
|---|---|---|
ANTHROPIC_API_KEY |
Optional for local fallback; required for Claude actions | API key used by the AI agent |
PORT |
No | Server port. Defaults to 3001 |
CLIENT_URL |
No | Web application origin used when generating join links |
REDIS_URL |
Yes | Redis connection URL used for session storage |
Example:
ANTHROPIC_API_KEY=your_api_key
PORT=3001
CLIENT_URL=http://localhost:5173
REDIS_URL=redis://localhost:6379TabTwin uses Redis to store session state.
Redis provides:
- Session persistence.
- Shared session state.
- Support for horizontally scaled servers.
- Centralized session management.
For local development:
docker run -d -p 6379:6379 --name tabtwin-redis redis:7-alpineThen configure:
REDIS_URL=redis://localhost:6379The TabTwin server provides APIs for session management and real-time collaboration.
The API layer is responsible for functionality such as:
- Creating collaboration sessions.
- Managing session information.
- WebSocket signaling.
- WebRTC connection establishment.
- Collaboration event handling.
- AI-assisted actions.
For the exact API routes and request/response formats, refer to the server implementation.
As the API becomes more stable, endpoint-specific documentation can be added to this section.
The project is organized into separate components for the web application, server, and Chrome extension.
TabTwin/
β
βββ extension/
β βββ popup/
β βββ ...
β
βββ server/
β βββ ...
β βββ ...
β
βββ web/
β βββ ...
β βββ ...
β
βββ docs/
β
βββ ARCHITECTURE.md
βββ .env.example
βββ package.json
βββ README.md
The exact structure may evolve as the project develops. Refer to the repository directories for the current implementation.
Additional technical documentation is available in:
ARCHITECTURE.mdβ Detailed system architecture and technical design.docs/β Additional project documentation.
Contributions are welcome!
If you are interested in contributing to TabTwin, follow the workflow below.
Fork the repository to your GitHub account.
git clone https://github.com/YOUR_USERNAME/TabTwin.git
cd TabTwinFor a new feature:
git checkout -b feature/your-feature-nameFor a bug fix:
git checkout -b fix/your-bug-nameFor documentation:
git checkout -b docs/your-documentation-changenpm installImplement your feature, bug fix, or documentation improvement.
Keep changes focused and avoid modifying unrelated parts of the project.
Run the relevant development commands and verify that your changes work correctly.
Start the server:
npm run serverStart the web application:
npm run dev:webIf your changes affect the extension:
npm run build --workspace extensionUse a clear commit message:
git add .
git commit -m "docs: improve TabTwin README"git push origin docs/your-documentation-changeOpen the original TabTwin repository on GitHub and create a Pull Request from your branch.
In the PR description, explain:
- What you changed.
- Why the change was needed.
- How you tested it.
- Any relevant references.
Before opening an issue:
- Search existing issues.
- Check the documentation.
- Confirm that the problem is reproducible.
- Provide clear reproduction steps.
- Include relevant logs or other information when appropriate.
Use the appropriate GitHub issue template when creating a new issue.
Feature requests are welcome.
When proposing a feature, explain:
- What problem the feature solves.
- How the feature could work.
- Why it would benefit TabTwin users.
- Any alternative approaches you considered.
If you discover a security vulnerability, avoid publicly exposing sensitive information in a regular GitHub issue.
Follow the project's recommended security reporting process.
Potential areas for future development include:
- Improved AI-assisted browser actions.
- Additional browser extension support.
- Enhanced session recording.
- Persistent recording storage.
- Recording export functionality.
- Improved annotation capabilities.
- More detailed API documentation.
- Automated tests for collaboration workflows.
- Improved developer documentation.
- Enhanced permission and security controls.
TabTwin is released under the MIT License.
See the LICENSE file for the complete license text.
If you find TabTwin useful:
- β Star the repository.
- π Report bugs.
- π‘ Suggest features.
- π§ Submit improvements.
- π€ Contribute to the project.
Every contribution helps make TabTwin better.