{"id":"daemon-link","repo":"itsjustanks/paseo-plugin-daemon","url":"https://github.com/itsjustanks/paseo-plugin-daemon","name":"daemon-link","description":"Daemon Link for Paseo: Hosts: private localhost links, reviewed Git project transfers, and project-scoped monitoring.","categories":["orchestration","monitoring"],"platforms":[],"caveats":[],"images":["https://raw.githubusercontent.com/itsjustanks/paseo-plugin-daemon/26c5b002b8a2a6e18ab5c190f22901acc3a0330e/docs/screenshots/overview.png","https://raw.githubusercontent.com/itsjustanks/paseo-plugin-daemon/26c5b002b8a2a6e18ab5c190f22901acc3a0330e/docs/screenshots/dev-servers.png","https://raw.githubusercontent.com/itsjustanks/paseo-plugin-daemon/26c5b002b8a2a6e18ab5c190f22901acc3a0330e/docs/screenshots/dev-relay.png","https://raw.githubusercontent.com/itsjustanks/paseo-plugin-daemon/26c5b002b8a2a6e18ab5c190f22901acc3a0330e/docs/screenshots/project-sync.png","https://raw.githubusercontent.com/itsjustanks/paseo-plugin-daemon/26c5b002b8a2a6e18ab5c190f22901acc3a0330e/docs/screenshots/processes.png","https://raw.githubusercontent.com/itsjustanks/paseo-plugin-daemon/26c5b002b8a2a6e18ab5c190f22901acc3a0330e/docs/screenshots/popover.png"],"themes":[],"health":{"manifestValid":true,"hasReadme":true,"hasLicense":true,"hasTests":true,"hasTypecheckScript":true,"updatedRecently":true},"scannedAt":"2026-10-15T12:29:43.389Z","addedAt":"2026-09-10T18:09:18+03:00","version":"0.22.0","security":{"status":"failed","blockingFindings":1,"advisoryFindings":0,"scannedAt":"2026-10-15T12:14:24.405Z","commit":"26c5b002b8a2a6e18ab5c190f22901acc3a0330e"},"license":"MIT","paseoVersionRequirement":">=0.11.1","descriptionNodes":[{"type":"text","text":"Daemon Link for Paseo: Hosts: private localhost links, reviewed Git project transfers, and project-scoped monitoring."}],"caveatNodes":[],"manifest":{"id":"daemon-link","description":"Hosts: see what's slowing this computer down and stop runaway jobs safely, open your dev servers in a browser, and ask an agent to fix what breaks.","requirements":{"paseo":">=0.11.1"},"build":[["node","scripts/browser/bootstrap.mjs"]]},"repoMeta":{"stars":3,"defaultBranch":"main","pushedAt":"2026-10-14T04:24:27Z"},"owner":{"login":"itsjustanks","avatarUrl":"https://avatars.githubusercontent.com/u/11022280?v=4"},"installNotesHtml":"<p>Add <code>itsjustanks/paseo-plugin-daemon</code> in <strong>Paseo → Settings → Plugins</strong>, or use the CLI:</p>\n<pre><code class=\"language-sh\">paseo plugin add itsjustanks/paseo-plugin-daemon\npaseo plugin ls\n</code></pre>\n<p>Enable plugins if needed, confirm <strong>daemon-link</strong> is <code>running</code>, and open <strong>Hosts</strong> from the\nsidebar. Paseo installs dependencies in its managed checkout; no manual build or daemon restart\nis needed. The plugin also provides a workspace panel and a Command Center entry.</p>\n<p>Plugins run as trusted code with your daemon's privileges. Install from a source you trust.\nFor private localhost access, install this plugin on <strong>both</strong> computers running Paseo.\nA browser-only device can use a temporary browser link instead.</p>\n<p>Update a Git-managed installation with:</p>\n<pre><code class=\"language-sh\">paseo plugin update daemon-link\n</code></pre>","readmeText":"# Daemon Link for Paseo\n\n**Keep a Paseo host healthy, and open its dev servers in one press.**\n\nSee what is using a host's CPU and memory, against the container's own limit, and stop a runaway\nbuild safely after a list of exactly what will stop. Watch services on other machines, such as\nOmniRoute. See every dev server running on a host, press **Open**, and it appears in your browser.\nPair two Paseo hosts for a private local URL, or save an SSH forward. Receive selected Git projects\nwith a preview and history.\n\nSupports Paseo 0.7 through 0.11 (current releases need 0.9 or newer; see\n[Paseo compatibility](#paseo-compatibility)).\n\nThe plugin is **Daemon Link**; its sidebar entry is **Hosts**, matching Paseo's host terminology.\n\n[Install](#install) · [One-press Open](#open-a-dev-server-in-one-press) ·\n[Private connection](#your-first-private-connection) · [Screenshots](#inside-the-plugin) ·\n[Troubleshooting](#troubleshooting) · [Contributing](#development-and-contributing)\n\n![Hosts Overview: the state in words, memory against its limit, heavy jobs.](docs/screenshots/overview.png)\n\n*Actual plugin components rendered with fictional data. Every screenshot in this repository uses\nan isolated preview: no real accounts, host addresses, project names, credentials, or conversations.*\n\n## Workspace browser\n\nSelect the always-on remote host and open the workspace **Browser** panel. Press **Open browser**\nto start a private browser at `about:blank`. Its address bar, tabs, mouse and keyboard operate the same\nbrowser exposed to newly created supported workspace agents through `hosts-browser` MCP.\nHuman control takes priority in this managed runtime. The browser stays on its host when you disconnect;\na sleeping laptop cannot keep a browser running on that laptop.\n\nSupported web clients decode streamed video, with JPEG fallback. Display controls offer resolution,\nquality, bitrate and frame-rate ceilings; actual speed depends on the host, page and connection.\nAn open managed browser adds a **Browser** shortcut to its workspace chats. Browser tool steps show\ncompact status cards and an **Open Browser** action; screenshots remain in Paseo's native timeline.\nThese cards describe what happened at that step, not the browser's current availability.\n\n**Watch external browser** in the Browser menu retains the existing read-only observer for independently\nstarted Agent Browser sessions. Hosts cannot enforce a control lease against an independent CLI.\nThe managed browser uses the native plugin panel and authenticated Paseo RPC, not the desktop-only\n`navigation.openBrowser` API. See [managed setup and boundaries](docs/managed-browser.md),\n[external observation](docs/browser-viewing.md), and [source attribution](docs/managed-browser-source.md).\n\n**Connections** guides setup for agents across computers. Agent access stays off until confirmed and shares full\ndaemon authority between opted-in hosts, independently of restricted private app/file grants. Turning off\nclears local peers and pending deliveries; revoke previously shared pairing credentials separately. Requires\nconnected-host APIs; older runtimes show an update explanation. [Integration and security\nboundary](docs/cross-daemon-integration.md).\n\n**Recover another host** on Overview or in Command Center opens Connections' SSH recovery fold. Select an online\nhelper in Paseo first. Save a target hostname or SSH alias and a local key/config reference; test SSH\nexplicitly, then review any start, restart, saved-connection removal or reboot.\nNo credentials are configured by default. No\nbackground SSH, arbitrary saved commands, browser-control commands or automatic recovery. If all helpers are\noffline, use the provider console. [Headless setup and recovery](docs/headless-setup.md).\n\nMIT sources: browser transport patterns adapted from [Omer Cohen's shared\nbrowser](https://github.com/omercnet/paseo-plugins/tree/504b5907a3b44d72c0a15757a9a9f6e7ca03dd29/paseo-shared-browser)\n([retained notice](server/browser-LICENSE.txt)); cross-daemon adapted from\n[maxwell-01/maxs-paseo-plugins](https://github.com/maxwell-01/maxs-paseo-plugins/tree/975f8c4c062cb78ca82b203c8952e6c31621a9e6/cross-daemon)\n([retained notice](docs/cross-daemon-LICENSE.txt)). See the pinned source notes for exact provenance.\n\n## What you get\n\n- **Heavy processes, first-class.** The Processes tab lists the heaviest processes with how long\n  they have run and which workspace or dev server they belong to, groups each build or test run with\n  everything it started, and flags runaways: a process holding a full CPU core for minutes, memory\n  near the container's limit, or more heavy jobs at once than your limit (4 by default).\n- **Memory against the real limit.** Inside a container, Daemon Link reads the container's own\n  memory limit (cgroups), so \"6.9 GB of 7.3 GB\" is judged against what actually stops processes,\n  not the 64 GB machine. On macOS it uses the whole machine.\n- **A safe stop.** Select processes, see exactly what will stop (children included) and what won't,\n  then stop: each is asked to exit, and anything still running after 10 seconds is stopped\n  forcefully. Paseo itself, its plugins, agents, terminals and databases are never stopped, and\n  every stop is logged.\n- **Runaway memory, early.** A job holding a quarter of memory, or growing fast, is flagged in plain\n  words (\"A test run is using 36 GB, 61% of this computer's memory\"), as is memory pressure, from a\n  check loop that runs every 10 seconds even when Paseo is closed. Stop or Ask an agent sits beside\n  it. An optional guard (off by default) stops the biggest stoppable job when memory stays nearly\n  full for over a minute.\n- **Disk usage and reviewed cleanup.** Free space at a glance (the sidebar dot warns at 85%\n  full), every Paseo workspace by size with its status and what looks safe to clear, and shared\n  caches and temporary files by size. Delete offers only verified tool-managed workspace folders,\n  behind a warning listing exactly what will go. Shared caches, temporary folders and ambiguous\n  contents use \"Ask an agent to clean this up\" with the list and checks to perform. A workspace's\n  own Hosts tab speaks up\n  when 500 MB or more of it looks safe to clear (or the disk is 85% full), the chip under the message\n  box appears at 95% full, and the Hosts attachments include a Disk report. Linux Housekeeping\n  separately offers automatic cleanup after its live-mode confirmation; it starts in preview.\n- **Stuck plugins, restarted in one press.** When a Paseo plugin stops answering (\"Activity isn't\n  answering (12 timeouts in 10 min)\"), Paseo can't add, update or reload plugins. Restart reloads just\n  that plugin; if Paseo is stuck on it, Hosts stops only that plugin's own process and reloads it. The\n  daemon is never restarted.\n- **Watched services.** Add health URLs on other machines (such as the AI Router's OmniRoute, offered\n  in one press when that plugin is set up). A slow or failing answer shows on the sidebar dot and the\n  Overview card in plain words: \"OmniRoute is slow: 4.2 s, usually 110 ms\".\n- **Native on Paseo 0.11.** A full Hosts screen with its own sidebar row and a status dot that opens\n  a quick health check. Older apps keep the 0.9 sidebar surface.\n- **One press to open.** Every verified dev server on the host is a card with an **Open** button, in\n  the Hosts sidebar and in each workspace's Hosts tab. Open starts a browser link (or reuses the live\n  one) and lands your browser on the app; the card shows starting, ready with time left, or why not.\n- **Links that last a work session.** Browser links default to 2 hours (15 minutes to 8 hours in\n  Settings), show their remaining time, and **Extend** in place without a new URL, up to 24 hours.\n- **Private routes, side by side.** Pair hosts once for a private localhost link, or save an SSH\n  forward preset to the server's port; nothing is published. The surface says when each is right.\n- **Reviewed project transfers.** Separate sharing permissions, a commit preview, isolated checkouts,\n  and persistent transfer history. Nothing syncs automatically.\n- **Automatic health checks.** The daemon re-checks hosts on a schedule and flags a dev server that\n  stopped serving, a failed browser link, an SSH forward that is down, a runaway, memory near the\n  limit, too many heavy jobs, or a slow watched service, per workspace.\n- **What this workspace costs.** The workspace tab sums the CPU and memory of the workspace's own\n  processes and shows each as a share of the host, so you can tell a loaded machine from a loaded\n  workspace.\n- **A chip only when a chat needs you.** Under an agent's message box, a chip appears only when that\n  workspace's dev server stopped, a link to it failed, or one of its jobs drives the host's load. It\n  opens the Hosts tab for that workspace. A calm chat shows nothing; host-wide health is the sidebar\n  dot's job.\n- **Guidance where you need it.** Five tabs, technical parts folded into rows you open in place, and\n  a Help tab of plain questions with live setup checks on Overview.\n\nAgent Browser is not required. Daemon Link forwards traffic; your normal browser renders the app. The\napp cannot be rendered inside Paseo itself: the plugin SDK has no WebView and no plugin HTTP route,\nso a browser link, a paired-host forward, or an SSH forward is always the mechanism. Daemon Link's\njob is to make that one press.\n\n## Install\n\nAdd `itsjustanks/paseo-plugin-daemon` in **Paseo → Settings → Plugins**, or use the CLI:\n\n```sh\npaseo plugin add itsjustanks/paseo-plugin-daemon\npaseo plugin ls\n```\n\nEnable plugins if needed, confirm **daemon-link** is `running`, and open **Hosts** from the\nsidebar. Paseo installs dependencies in its managed checkout; no manual build or daemon restart\nis needed. The plugin also provides a workspace panel and a Command Center entry.\n\nPlugins run as trusted code with your daemon's privileges. Install from a source you trust.\nFor private localhost access, install this plugin on **both** computers running Paseo.\nA browser-only device can use a temporary browser link instead.\n\nUpdate a Git-managed installation with:\n\n```sh\npaseo plugin update daemon-link\n```\n\n## Open a dev server in one press\n\nWith the remote host selected, open **Hosts → Workspaces** (or the **Hosts** tab of the workspace\nthe server runs in) and press **Open in browser** on its card. Daemon Link reserves a browser tab,\nstarts a temporary HTTPS link to that port (or reuses the live one), and sends the tab there once the\nlink is connected. The card reads **Starting link**, then **Link ready · 2 h left**, or **Link\nfailed** with the reason. Press **Extend** to renew a live link without a new URL, or **Close link**\nwhen you are done. The dev server itself is never touched.\n\nA browser link is a public URL protected by a private session cookie and by the service lease, and it\nalways expires. If you would rather publish nothing, switch the card row to **Private forward**: it\nshows the same servers with an **SSH forward…** button that presets the remote port, and a\n**Paired-host link…** button for the private relay described next.\n\n## Your first private connection\n\nImagine a development server running Paseo and a laptop also running Paseo. The server hosts the\napp; the laptop receives a local port. You can manage either through Paseo's host picker.\n\n```text\nDevelopment server                         Your laptop\nPaseo + Daemon Link                         Paseo + Daemon Link\nProject app on port 3000  <── encrypted ──  Local forward on port 3000\n                             relay                   ↑\n                                           Browser: localhost:3000\n```\n\n### 1. Start a project app\n\nOn the development server, open a project in Paseo, then start its normal dev command in that\nproject's terminal. For example:\n\n```sh\nnpm run dev\n```\n\nKeep that terminal running. Open **Hosts → Workspaces** with the server selected.\nRecognized apps appear automatically with their project, framework, and listening port.\nThe plugin discovers an existing server; opening the panel does not start your project for you.\n\n### 2. Pair the two hosts\n\nOn the development server, open **Hosts → Connections → Private apps and project files → Pair hosts\n→ Create pairing code**.\nUse Paseo's host picker to select your **laptop's daemon**, then paste the code under **Pair host**.\n\nPairing establishes permission for one host to discover and access the other's eligible project\napps. It does not grant agent, file, process-control, or daemon-management access. Pair separately\nin the other direction if both computers will host apps.\n\n### 3. Open the remote app\n\nKeep your laptop selected. Choose the paired development server and press **Create local link**\nbeside its app. **Copy local URL** and open it on your laptop, or use **Open in this browser**\nwhen this browser runs on that same computer. If the preferred local port is occupied, Daemon Link\nchooses a free one instead.\n\n**A local port belongs to the selected daemon's computer.** Selecting the remote daemon does not\ncreate a port on your laptop. The host label and in-app guide explain this throughout the flow.\n\n### 4. Finish or reconnect\n\n**Close forward** removes local access while leaving the project server running. **Revoke access**\non the hosting daemon removes a peer's permission and closes its active connections.\n\nPairings persist. Active forwards close when the plugin stops; use **Create local link** to recreate\nthem. After a plugin or daemon restart, open Hosts on the hosting daemon once to initialize\nproject access. Both plugins must remain running while you use a connection.\n\n## Inside the plugin\n\n| Tab | What to do here |\n| --- | --- |\n| **Overview** | The host's state in words; problems, watched services, setup, Project Sync and details fold out. |\n| **Processes** | Heaviest processes, runaways, memory against the limit, the ask-first stop; recent stops fold out. |\n| **Workspaces** | Current running-app snapshot with ownership, resources, Open and reviewed Stop; disk below. |\n| **Connections** | Add computers, review agent access, private apps/files, SSH forwards and SSH recovery. |\n| **Help** | Plain questions, each folded, starting with how Hosts works. |\n\nConnections is a dedicated top-level tab. Old Connect, Pair, SSH and recovery links still open their\nsections. Project Sync remains on Overview. Running apps are independent of disk measurements and\nshow up to 50 listeners from the current snapshot. Memory defaults highest first; CPU, workspace,\nproject, app, port and status can also be sorted. Unknown ownership stays visible.\n\nA server labelled **Listening · waiting for requests** is waiting for work, not an offline computer.\nA listening port does not prove app health. Stop first previews ownership warnings and affected children,\nwith Cancel as the default. Running-app Stop requests a graceful exit; Force stop is reviewed separately\nif it remains running. Open remains restricted to verified shareable project ports.\n\nEach workspace also gets a **Hosts** tab, in the workspace view and in the Projects explorer; what it\nshows depends on the panel scope setting described below.\n\n### Hosts workspace tab: only what belongs to this workspace\n\nBy default the workspace tab leads with **Dev servers in this workspace**: one card per verified dev\nserver whose working directory sits inside the workspace, each with the same **Open**, link state,\n**Extend**, and **Close link** controls as the sidebar surface. A **Health** card follows: the\nworkspace's status, how many verified dev servers run inside it and on which ports, when the daemon\nlast checked, and every issue that touches it. Then a **Resources** card: the summed CPU and resident memory of the\nworkspace's processes, how many processes that is, and each figure as a share of the host (CPU\nagainst the machine's cores and its current load; memory against total and used memory). The\nnumbers come from the same sample as the pro"}