dsh-collab
A DeepSeek Harness (dsh) plugin for extremely low-barrier multi-person code collaboration.
Users just install the plugin, open the 👥 panel on the right side of dsh, and enter the same room number + trust password to start editing one shared code buffer together.
- No account registration.
- No server deployment required from users.
- The plugin starts a local collaboration service automatically.
- The default
autoconnection tries a public relay first, then falls back to the local/LAN service. - Real-time collaboration is powered by Yjs (CRDT).
- Includes minimal commit snapshots and a work log.
- Supports one-click uninstall.
> This is intentionally a simple MVP/framework: one room, one shared code buffer, and in-memory history. Multi-file, multi-project and persistence support can be added later.
Features
- 🔢 Room number + password: create a room, then share the room number and password with teammates.
- 👤 Random identity: no registration or login. A random name and color are generated automatically and can be edited.
- ⚡ Yjs real-time collaboration: multiple people edit at the same time and conflicts merge automatically.
- 📦 Basic commits: editors can snapshot the current code with a short message.
- 📋 Work log: room creation, joins, leaves and commits are recorded automatically.
- 🧹 One-click uninstall: uninstall the plugin from the bottom of the panel and restart dsh.
- 🌍 Built-in public relay configuration: users do not deploy anything. Only project maintainers need to deploy the public relay once.
Installation
Every participant installs the same plugin in their own dsh:
# Local installation from source
cd dsh-collab
npm install
npm run build
dsh plugin --profile web add link:$(pwd)
# Or after publishing to npm/GitHub
dsh plugin --profile web add dsh-collabRestart dsh web after installation. The 👥 entry appears on the right side.
Usage
1. The founder opens the 👥 panel. 2. Enter a room number (for example 1024) and a trust password. 3. Click Create room. 4. Share the room number and password with teammates. 5. Teammates open their own 👥 panel, enter the same server address, room number and password, then click Join room. 6. Start editing together. Editors can enter a commit message and click Commit to create a snapshot.
> Keep the server address as auto by default. It tries the public relay first and falls back to the local/LAN service. Advanced users can enter a custom relay address.
> Leaving the password empty joins as read-only. A wrong password is rejected.
One-click uninstall
Open the 👥 panel, scroll to the bottom, click Uninstall plugin and confirm.
The plugin calls the official dsh plugin manager to remove itself, then asks you to restart dsh web. You can also run:
dsh plugin --profile web remove dsh-collabZero deployment for users
The plugin already contains the full collaboration service:
- Local service: every dsh with the plugin installed starts
ws://0.0.0.0:47823/relayautomatically. - Public relay: the client also tries the project-maintained public relay by default. This relay only needs to be deployed once by project maintainers.
- Self-hosted relay (optional, advanced users only): the repository provides
server/relay-server.mjs, which maintainers or advanced users can deploy to any public server.
> Before publishing to GitHub/npm, replace PUBLIC_RELAY_URL in src/client/app.tsx with your actual public relay address. Until then, auto falls back to the local/LAN service.
The complete path for ordinary users is: install the plugin → restart dsh → enter room number/password → collaborate.
Development
npm install
npm run build # produces lib/index.js (host half) + lib/client.js (browser half)
npm run typecheck # type check
npm test # build + integration tests
npm run relay # start the standalone public relay (optional)Structure
src/
├── index.ts # dsh host half: local relay + config/uninstall routes
├── collab-server.ts # rooms/passwords/Yjs sync/commits/work log
├── uninstall.ts # one-click uninstall implementation
└── client/
├── index.tsx # dsh browser half entry
├── app.tsx # room panel + editor + commit history + work log + uninstall
└── styles.ts
server/
├── relay-server.ts # standalone public relay source
└── relay-server.mjs # runnable public relay after build
cordis.patch.yml # dsh plugin bundle patchHow it works
- The host half is a standard Cordis plugin with
inject: ['webServer', 'appExit']. - It starts a WebSocket relay bound to
0.0.0.0at path/relay. - The browser half connects with
autoby default: public relay first, local address fallback. - Yjs updates provide real-time collaboration inside a room.
- A
commitmessage stores the current code snapshot in memory and broadcasts it to all members. eventmessages form the work log./collab/uninstallis loopback-only and removes the plugin through the official dsh CLI.
Security notes
- This is a trust password model. Passwords travel over plain WebSocket, so use it on trusted LANs or for testing.
- On a public relay, the room password is the only edit credential. Use a sufficiently random password.
- For production public use, enable TLS (wss) and consider adding persistence and a more complete account system.
License
[MIT](./LICENSE)