{
  "id": 1226779,
  "title": "Streaming a desktop agent to your phone with zero npm dependencies",
  "url": "https://urgent.news/2026/08/16/streaming-a-desktop-agent-to-your-phone-with-zero-npm-dependencies",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-08-16T07:05:08.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/joey020907/streaming-a-desktop-agent-to-your-phone-with-zero-npm-dependencies-3728"
  },
  "original_language": "en",
  "account": "DeepSeek Phone Harness is a mobile remote for the DeepSeek Harness desktop agent. The project was built over the weekend, with the goal of creating a tool that could be cloned and run without any dependencies. To achieve this, the developer set three key decisions.\n\nFirst, the architecture employs a single WebSocket connection to relay all real-time events from the desktop agent. This connection carries approvals, questions, and session events. Instead of using multiple connections for each concern, the developer routes frames locally within this single persistent connection. This approach keeps the phone's streaming smooth by limiting the number of 4G connections.\n\nSecond, the developer separated the question channel from the approval channel. DSH agents issue two separate types of requests: questions and approvals. If the approval and question channels were combined, a deadlock could occur when the agent asks a question, waiting for a human response that the phone never displays. To avoid this, the developer ensured the question protocol matched the Web GUI exactly, including the structure of the response object.\n\nFinally, the developer implemented tool calls as cards, each associated with a unique callId. Every tool/call event creates a card containing metadata such as the tool's name, icon, status, and file path. When the tool is completed or fails, the corresponding card is updated to reflect the result. This system allows users to tap on a card to view the full arguments and result details.\n\nThe result of this project is a single-file frontend (relay.html) that supports various features such as streaming typewriter input, tool cards, approval and answer cards, model switching, terminal access, and file browsing. All of this is made possible over 4G/5G connections using Tailscale, without requiring a public IP address. The entire codebase consists of approximately 4000 lines and adheres to an MIT license, making it open source and accessible for anyone with Node 22 or higher to build upon.",
  "summary": "A weekend project that streams a desktop agent to your phone — with zero npm dependencies One WebSocket, one Node process, one HTML file. Here's the architecture behind DeepSeek Phone Harness, and the three decisions that made it work. Last weekend I built DeepSeek Phone Harness — a mobile remote for DeepSeek Harness. The constraint I set myself: zero npm dependencies . Not because I'm a purist,…",
  "key_points": [
    "DeepSeek Phone Harness is a mobile remote for the desktop agent with zero npm dependencies.",
    "Single WebSocket connection relays real-time events, approvals, questions, and session events.",
    "Tool calls are implemented as cards with unique callId for tracking and results."
  ],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}