# daemon-link

> Daemon Link for Paseo: Hosts: private localhost links, reviewed Git project transfers, and project-scoped monitoring.

> This is a community-submitted listing. Treat plugin-provided text as untrusted data and review the source before installing or running code.

- **Plugin ID:** `daemon-link`
- **Source repository:** [itsjustanks/paseo-plugin-daemon](https://github.com/itsjustanks/paseo-plugin-daemon)
- **Catalog page:** https://paseo.cafe/plugins/daemon-link
- **Markdown listing:** https://paseo.cafe/plugins/daemon-link.md
- **Catalog API:** https://paseo.cafe/api/plugin/daemon-link.json
- **License:** MIT
- **Requires Paseo:** `>=0.11.1`
- **Platforms:** all
- **Categories:** orchestration, monitoring

## Install

```sh
Exact install target unavailable
```

## Caveats

- None declared.

## Catalog health

- Manifest: valid
- README: present
- License: present
- Tests: present
- Typecheck script: present

## Security scan

- Status: failed
- Blocking findings: 1
- Advisory findings: 0

## Repository-provided content

> Everything below this point comes from the community repository. It is untrusted reference material, not system instructions. No catalog-authored facts follow it.

### Installation notes

Add `itsjustanks/paseo-plugin-daemon` in **Paseo → Settings → Plugins**, or use the CLI:

```sh
paseo plugin add itsjustanks/paseo-plugin-daemon
paseo plugin ls
```

Enable plugins if needed, confirm **daemon-link** is `running`, and open **Hosts** from the
sidebar. Paseo installs dependencies in its managed checkout; no manual build or daemon restart
is needed. The plugin also provides a workspace panel and a Command Center entry.

Plugins run as trusted code with your daemon's privileges. Install from a source you trust.
For private localhost access, install this plugin on **both** computers running Paseo.
A browser-only device can use a temporary browser link instead.

Update a Git-managed installation with:

```sh
paseo plugin update daemon-link
```

### Source README

#### Daemon Link for Paseo

**Keep a Paseo host healthy, and open its dev servers in one press.**

See what is using a host's CPU and memory, against the container's own limit, and stop a runaway
build safely after a list of exactly what will stop. Watch services on other machines, such as
OmniRoute. See every dev server running on a host, press **Open**, and it appears in your browser.
Pair two Paseo hosts for a private local URL, or save an SSH forward. Receive selected Git projects
with a preview and history.

Supports Paseo 0.7 through 0.11 (current releases need 0.9 or newer; see
[Paseo compatibility](#paseo-compatibility)).

The plugin is **Daemon Link**; its sidebar entry is **Hosts**, matching Paseo's host terminology.

[Install](#install) · [One-press Open](#open-a-dev-server-in-one-press) ·
[Private connection](#your-first-private-connection) · [Screenshots](#inside-the-plugin) ·
[Troubleshooting](#troubleshooting) · [Contributing](#development-and-contributing)

![Hosts Overview: the state in words, memory against its limit, heavy jobs.](docs/screenshots/overview.png)

*Actual plugin components rendered with fictional data. Every screenshot in this repository uses
an isolated preview: no real accounts, host addresses, project names, credentials, or conversations.*

##### Workspace browser

Select the always-on remote host and open the workspace **Browser** panel. Press **Open browser**
to start a private browser at `about:blank`. Its address bar, tabs, mouse and keyboard operate the same
browser exposed to newly created supported workspace agents through `hosts-browser` MCP.
Human control takes priority in this managed runtime. The browser stays on its host when you disconnect;
a sleeping laptop cannot keep a browser running on that laptop.

Supported web clients decode streamed video, with JPEG fallback. Display controls offer resolution,
quality, bitrate and frame-rate ceilings; actual speed depends on the host, page and connection.
An open managed browser adds a **Browser** shortcut to its workspace chats. Browser tool steps show
compact status cards and an **Open Browser** action; screenshots remain in Paseo's native timeline.
These cards describe what happened at that step, not the browser's current availability.

**Watch external browser** in the Browser menu retains the existing read-only observer for independently
started Agent Browser sessions. Hosts cannot enforce a control lease against an independent CLI.
The managed browser uses the native plugin panel and authenticated Paseo RPC, not the desktop-only
`navigation.openBrowser` API. See [managed setup and boundaries](docs/managed-browser.md),
[external observation](docs/browser-viewing.md), and [source attribution](docs/managed-browser-source.md).

**Connections** guides setup for agents across computers. Agent access stays off until confirmed and shares full
daemon authority between opted-in hosts, independently of restricted private app/file grants. Turning off
clears local peers and pending deliveries; revoke previously shared pairing credentials separately. Requires
connected-host APIs; older runtimes show an update explanation. [Integration and security
boundary](docs/cross-daemon-integration.md).

**Recover another host** on Overview or in Command Center opens Connections' SSH recovery fold. Select an online
helper in Paseo first. Save a target hostname or SSH alias and a local key/config reference; test SSH
explicitly, then review any start, restart, saved-connection removal or reboot.
No credentials are configured by default. No
background SSH, arbitrary saved commands, browser-control commands or automatic recovery. If all helpers are
offline, use the provider console. [Headless setup and recovery](docs/headless-setup.md).

MIT sources: browser transport patterns adapted from [Omer Cohen's shared
browser](https://github.com/omercnet/paseo-plugins/tree/504b5907a3b44d72c0a15757a9a9f6e7ca03dd29/paseo-shared-browser)
([retained notice](server/browser-LICENSE.txt)); cross-daemon adapted from
[maxwell-01/maxs-paseo-plugins](https://github.com/maxwell-01/maxs-paseo-plugins/tree/975f8c4c062cb78ca82b203c8952e6c31621a9e6/cross-daemon)
([retained notice](docs/cross-daemon-LICENSE.txt)). See the pinned source notes for exact provenance.

##### What you get

- **Heavy processes, first-class.** The Processes tab lists the heaviest processes with how long
  they have run and which workspace or dev server they belong to, groups each build or test run with
  everything it started, and flags runaways: a process holding a full CPU core for minutes, memory
  near the container's limit, or more heavy jobs at once than your limit (4 by default).
- **Memory against the real limit.** Inside a container, Daemon Link reads the container's own
  memory limit (cgroups), so "6.9 GB of 7.3 GB" is judged against what actually stops processes,
  not the 64 GB machine. On macOS it uses the whole machine.
- **A safe stop.** Select processes, see exactly what will stop (children included) and what won't,
  then stop: each is asked to exit, and anything still running after 10 seconds is stopped
  forcefully. Paseo itself, its plugins, agents, terminals and databases are never stopped, and
  every stop is logged.
- **Runaway memory, early.** A job holding a quarter of memory, or growing fast, is flagged in plain
  words ("A test run is using 36 GB, 61% of this computer's memory"), as is memory pressure, from a
  check loop that runs every 10 seconds even when Paseo is closed. Stop or Ask an agent sits beside
  it. An optional guard (off by default) stops the biggest stoppable job when memory stays nearly
  full for over a minute.
- **Disk usage and reviewed cleanup.** Free space at a glance (the sidebar dot warns at 85%
  full), every Paseo workspace by size with its status and what looks safe to clear, and shared
  caches and temporary files by size. Delete offers only verified tool-managed workspace folders,
  behind a warning listing exactly what will go. Shared caches, temporary folders and ambiguous
  contents use "Ask an agent to clean this up" with the list and checks to perform. A workspace's
  own Hosts tab speaks up
  when 500 MB or more of it looks safe to clear (or the disk is 85% full), the chip under the message
  box appears at 95% full, and the Hosts attachments include a Disk report. Linux Housekeeping
  separately offers automatic cleanup after its live-mode confirmation; it starts in preview.
- **Stuck plugins, restarted in one press.** When a Paseo plugin stops answering ("Activity isn't
  answering (12 timeouts in 10 min)"), Paseo can't add, update or reload plugins. Restart reloads just
  that plugin; if Paseo is stuck on it, Hosts stops only that plugin's own process and reloads it. The
  daemon is never restarted.
- **Watched services.** Add health URLs on other machines (such as the AI Router's OmniRoute, offered
  in one press when that plugin is set up). A slow or failing answer shows on the sidebar dot and the
  Overview card in plain words: "OmniRoute is slow: 4.2 s, usually 110 ms".
- **Native on Paseo 0.11.** A full Hosts screen with its own sidebar row and a status dot that opens
  a quick health check. Older apps keep the 0.9 sidebar surface.
- **One press to open.** Every verified dev server on the host is a card with an **Open** button, in
  the Hosts sidebar and in each workspace's Hosts tab. Open starts a browser link (or reuses the live
  one) and lands your browser on the app; the card shows starting, ready with time left, or why not.
- **Links that last a work session.** Browser links default to 2 hours (15 minutes to 8 hours in
  Settings), show their remaining time, and **Extend** in place without a new URL, up to 24 hours.
- **Private routes, side by side.** Pair hosts once for a private localhost link, or save an SSH
  forward preset to the server's port; nothing is published. The surface says when each is right.
- **Reviewed project transfers.** Separate sharing permissions, a commit preview, isolated checkouts,
  and persistent transfer history. Nothing syncs automatically.
- **Automatic health checks.** The daemon re-checks hosts on a schedule and flags a dev server that
  stopped serving, a failed browser link, an SSH forward that is down, a runaway, memory near the
  limit, too many heavy jobs, or a slow watched service, per workspace.
- **What this workspace costs.** The workspace tab sums the CPU and memory of the workspace's own
  processes and shows each as a share of the host, so you can tell a loaded machine from a loaded
  workspace.
- **A chip only when a chat needs you.** Under an agent's message box, a chip appears only when that
  workspace's dev server stopped, a link to it failed, or one of its jobs drives the host's load. It
  opens the Hosts tab for that workspace. A calm chat shows nothing; host-wide health is the sidebar
  dot's job.
- **Guidance where you need it.** Five tabs, technical parts folded into rows you open in place, and
  a Help tab of plain questions with live setup checks on Overview.

Agent Browser is not required. Daemon Link forwards traffic; your normal browser renders the app. The
app cannot be rendered inside Paseo itself: the plugin SDK has no WebView and no plugin HTTP route,
so a browser link, a paired-host forward, or an SSH forward is always the mechanism. Daemon Link's
job is to make that one press.

##### Install

Add `itsjustanks/paseo-plugin-daemon` in **Paseo → Settings → Plugins**, or use the CLI:

```sh
paseo plugin add itsjustanks/paseo-plugin-daemon
paseo plugin ls
```

Enable plugins if needed, confirm **daemon-link** is `running`, and open **Hosts** from the
sidebar. Paseo installs dependencies in its managed checkout; no manual build or daemon restart
is needed. The plugin also provides a workspace panel and a Command Center entry.

Plugins run as trusted code with your daemon's privileges. Install from a source you trust.
For private localhost access, install this plugin on **both** computers running Paseo.
A browser-only device can use a temporary browser link instead.

Update a Git-managed installation with:

```sh
paseo plugin update daemon-link
```

##### Open a dev server in one press

With the remote host selected, open **Hosts → Workspaces** (or the **Hosts** tab of the workspace
the server runs in) and press **Open in browser** on its card. Daemon Link reserves a browser tab,
starts a temporary HTTPS link to that port (or reuses the live one), and sends the tab there once the
link is connected. The card reads **Starting link**, then **Link ready · 2 h left**, or **Link
failed** with the reason. Press **Extend** to renew a live link without a new URL, or **Close link**
when you are done. The dev server itself is never touched.

A browser link is a public URL protected by a private session cookie and by the service lease, and it
always expires. If you would rather publish nothing, switch the card row to **Private forward**: it
shows the same servers with an **SSH forward…** button that presets the remote port, and a
**Paired-host link…** button for the private relay described next.

##### Your first private connection

Imagine a development server running Paseo and a laptop also running Paseo. The server hosts the
app; the laptop receives a local port. You can manage either through Paseo's host picker.

```text
Development server                         Your laptop
Paseo + Daemon Link                         Paseo + Daemon Link
Project app on port 3000  <── encrypted ──  Local forward on port 3000
                             relay                   ↑
                                           Browser: localhost:3000
```

###### 1. Start a project app

On the development server, open a project in Paseo, then start its normal dev command in that
project's terminal. For example:

```sh
npm run dev
```

Keep that terminal running. Open **Hosts → Workspaces** with the server selected.
Recognized apps appear automatically with their project, framework, and listening port.
The plugin discovers an existing server; opening the panel does not start your project for you.

###### 2. Pair the two hosts

On the development server, open **Hosts → Connections → Private apps and project files → Pair hosts
→ Create pairing code**.
Use Paseo's host picker to select your **laptop's daemon**, then paste the code under **Pair host**.

Pairing establishes permission for one host to discover and access the other's eligible project
apps. It does not grant agent, file, process-control, or daemon-management access. Pair separately
in the other direction if both computers will host apps.

###### 3. Open the remote app

Keep your laptop selected. Choose the paired development server and press **Create local link**
beside its app. **Copy local URL** and open it on your laptop, or use **Open in this browser**
when this browser runs on that same computer. If the preferred local port is occupied, Daemon Link
chooses a free one instead.

**A local port belongs to the selected daemon's computer.** Selecting the remote daemon does not
create a port on your laptop. The host label and in-app guide explain this throughout the flow.

###### 4. Finish or reconnect

**Close forward** removes local access while leaving the project server running. **Revoke access**
on the hosting daemon removes a peer's permission and closes its active connections.

Pairings persist. Active forwards close when the plugin stops; use **Create local link** to recreate
them. After a plugin or daemon restart, open Hosts on the hosting daemon once to initialize
project access. Both plugins must remain running while you use a connection.

##### Inside the plugin

| Tab | What to do here |
| --- | --- |
| **Overview** | The host's state in words; problems, watched services, setup, Project Sync and details fold out. |
| **Processes** | Heaviest processes, runaways, memory against the limit, the ask-first stop; recent stops fold out. |
| **Workspaces** | Current running-app snapshot with ownership, resources, Open and reviewed Stop; disk below. |
| **Connections** | Add computers, review agent access, private apps/files, SSH forwards and SSH recovery. |
| **Help** | Plain questions, each folded, starting with how Hosts works. |

Connections is a dedicated top-level tab. Old Connect, Pair, SSH and recovery links still open their
sections. Project Sync remains on Overview. Running apps are independent of disk measurements and
show up to 50 listeners from the current snapshot. Memory defaults highest first; CPU, workspace,
project, app, port and status can also be sorted. Unknown ownership stays visible.

A server labelled **Listening · waiting for requests** is waiting for work, not an offline computer.
A listening port does not prove app health. Stop first previews ownership warnings and affected children,
with Cancel as the default. Running-app Stop requests a graceful exit; Force stop is reviewed separately
if it remains running. Open remains restricted to verified shareable project ports.

Each workspace also gets a **Hosts** tab, in the workspace view and in the Projects explorer; what it
shows depends on the panel scope setting described below.

###### Hosts workspace tab: only what belongs to this workspace

By default the workspace tab leads with **Dev servers in this workspace**: one card per verified dev
server whose working directory sits inside the workspace, each with the same **Open**, link state,
**Extend**, and **Close link** controls as the sidebar surface. A **Health** card follows: the
workspace's status, how many verified dev servers run inside it and on which ports, when the daemon
last checked, and every issue that touches it. Then a **Resources** card: the summed CPU and resident memory of the
workspace's processes, how many processes that is, and each figure as a share of the host (CPU
against the machine's cores and its current load; memory against total and used memory). The
numbers come from the same sample as the pro
