Introduction¶
The DeepSeek Harness (DSH) plugin ecosystem supports enriching workflows through extension capabilities. In local multi-node collaboration scenarios, developers often need real-time communication among multiple DSH instances on the same local area network (LAN). The lan-im plugin solves this problem. It allows DSH instances with this plugin installed to discover one another as accounts and enables reliable message delivery and LAN file sharing.
Features¶
The plugin provides a complete LAN instant messaging and collaboration solution, including the following capabilities:
- Account system: Uses accounts (username + display name), not machines, as identities. The first use requires creating an account; after that, no further login is needed.
- Network discovery: Uses both mDNS and UDP broadcast for node discovery, deduplicates by device, and can still discover nodes in networks where multicast is isolated.
- Reliable messaging: Private chats support delivery acknowledgment (ack) and offline backfill (persistent outbox; messages are automatically resent when the peer comes online). Group chats use best-effort delivery.
- Real-time push: Uses browser-native WebSocket between the client and host (same-origin upgrade, no polling); the connection persists even after the window is closed.
- Unread notifications: Provides an unread badge on the floating button and triggers desktop notifications when the window is closed or not visible.
- Channel management: Uses stable UUIDs to identify channels and supports public and private channels. Private channels support member invitations, removal, and message routing by member.
- LAN drive: Each channel has a shared file space. Index broadcasting enables on-demand fetching and local caching, and the uploader can delete files.
- Data and UI: Chat history is persisted locally to
~/.dsh/plugins-data/lan-im/(in-memory window limit is 500 messages; the history file is fully retained). The UI provides a sidebar entry, a draggable floating window (with keyboard shortcut invocation), and diagnostic logs.
Installation and Enablement¶
Run the following commands in the terminal to complete installation and enablement:
dsh plugin --profile web add git:https://github.com/mishiqian/lan-im.git
dsh web
After installation, restart the DeepSeek Harness Web service stack.
Usage¶
- Create account: When opening the floating window for the first time, enter an account, display name (password optional) to create a local identity.
- Open the interface: Open the chat window via the “LAN Chat” sidebar tab, the floating button in the lower-right corner, or the shortcut
Ctrl+Shift+L. - Send messages: Send in a public channel, or click an account on the left to switch to a one-to-one private chat. Private messages display a delivered status.
- Share files: Switch to the “Files” tab within a channel. Uploading, downloading, previewing, and deleting shared files are supported.
- Receive notifications: If a message is received while the window is closed, the floating button shows an unread badge and a desktop notification is triggered (requires initial click authorization).
Notes¶
- Message capacity: The offline outbox queue for private chats is limited to 200 messages per account; messages beyond the limit are discarded, starting with the oldest.
- File cache: When the owner of a shared file is offline, users can only access cached files and cannot fetch new files. They must wait for the owner to come online.
- Security limitations: Passwords are stored only as hashes and are not verified across machines. Transmission is plaintext and is suitable only for trusted LANs.
- State reset: The unread count is browser session state and is cleared after refreshing the page.
- Privacy risk: There is no end-to-end encryption. Do not use it on untrusted networks.
Conclusion¶
lan-im provides a lightweight instant messaging and file sharing solution for local multi-node DSH collaboration. It uses WebSocket and mDNS to achieve serverless LAN communication, making it suitable for developers in internal network environments.