Skip to content

dsh-home-hosted

Verified

dsh-home-hosted Β· v0.3.3 Β· MIT Β· Web UI

DeepSeek Harness (dsh) plugin: start your dsh web server automatically at boot, and manage home-hosted's panel and servers from inside dsh.

Install

dsh plugin add dsh-home-hosted

Confirm the layer applied with dsh --profile default --dump-config β€” see the install guide.

Source

Tags

Creators

Readme

πŸ“Œ dsh-home-hosted

Your whole home stack, up after every reboot β€” your dsh web server included.

A DeepSeek Harness plugin for home-hosted, the panel that supervises your services. Declare the servers once; this page manages the panel, the boot entry and the entries. Nothing is installed or started until you say so.

npm CI license node dsh

πŸš€ Quick start Β· πŸŽ›οΈ What the plugin does Β· πŸ€– Agent tools Β· 🧩 Depth

The plugin's page: Detailed and Compact styles, under Settings β†’ Home Hosted

The Detailed style, then the same sections in Compact β€” both switchable from the page header.


πŸš€ Quick start

dsh plugin --profile web add dsh-home-hosted

Open Settings β†’ Home Hosted, turn on Manage dsh, and enable autostart. Reboot once; dsh comes back without you touching anything.

πŸ€” Why

A panel restart shouldn't kill a prompt mid-flight, and a reboot shouldn't cost you an SSH session.

                 reboot
                   β”‚
                   β–Ό
  OS boot entry ──▢ home-hosted panel ──▢ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
  systemd Β·                    β”‚          β”‚ dsh web βœ“   β”‚
   launchd Β·                   β”‚          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
    XDG Β· Run key              β”‚
                               β”œβ”€β”€β”€β”€β”€β”€β”€β”€β–Ά β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                               β”‚          β”‚ docker      β”‚
                               β”‚          β”‚ compose     β”‚
                               β”‚          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                               β”‚
                               └────────▢ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                                          β”‚ postgres    β”‚
                                          β”‚ :5432       β”‚
                                          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

dsh is one entry in the panel, not the whole product. The panel is the supervisor: it starts each entry, watches it, restarts what dies and reclaims its port. Add your compose stack, your database, your bot β€” manage them from the page, or hand the entry ids to an agent.

A plugin cannot run at boot, so this one writes the OS entry while dsh runs and the OS takes over. One managed entry (dsh) is kept alive under home-hosted's nanny, so a panel restart leaves it running.

πŸŽ›οΈ What the plugin does

πŸš€ Boot autostart Installs, verifies and removes the OS entry. Opt in per machine.
πŸ›‘οΈ Survives a panel restart The managed entry runs under home-hosted's nanny, so restarting the panel leaves it running.
πŸ“¦ Ships its own panel The pinned home-hosted is a dependency, so boot runs the version this plugin is tested against.
πŸ–₯️ Server control Add, edit, start, stop and restart entries β€” written through the panel's API, so nothing restarts behind your back.
🧭 Token warnings that mean something A missing or refused API token is called out on the page, with one click to mint a working one.
πŸ€– Agent tools On by default, session permissions still gate every write.

πŸ€– Agent tools

Tool Does
home_hosted_status Panel, boot entry and managed-entry state
home_hosted_servers_list Every supervised server
home_hosted_servers_lifecycle start Β· stop Β· restart
home_hosted_servers_edit create Β· update Β· delete
home_hosted_autostart_manage install Β· uninstall
home_hosted_ui_manage status Β· update Β· revert Β· switch the panel's own UI

A tool that changes something asks for approval only when the session is not already Full access. A refused token is re-enrolled on the spot and the tool retries β€” see automatic regeneration below.

🧩 Depth

Boot autostart, per platform
Platform Mechanism Starts
Linux systemd-user, systemd-system, XDG autostart login, or boot with a system unit / loginctl enable-linger
macOS launchd-agent, launchd-daemon login, or boot with the daemon (one-time sudo)
Windows Run key, Task Scheduler login

When the process cannot elevate, the page prints the exact commands instead β€” including the launchd-daemon that starts a Mac before login.

Which home-hosted runs

The pinned dependency by default; the page can switch to a global install, or install the pinned range globally for you. Boot entries run a small stable launcher the plugin writes, so a node_modules path that moves never breaks boot.

dsh from a local clone

A dsh you cloned and built yourself is supported: the managed entry starts a stable launcher that re-finds your build at boot, so a rebuild, a moved checkout or a fresh profile does not strand it. Falls back to whatever dsh is on PATH, and fails with the reason when it finds neither.

Managed entry and port policy

One entry (dsh), one toggle: the panel keeps it alive, restarts it and reclaims its port. A detached restart is recognised on macOS and Linux (follow); Windows cannot prove identity through a .cmd shim, so it uses onPortConflict: kill β€” needing home-hosted 0.6.0+, and the plugin refuses that write against an older panel rather than producing a config it cannot parse.

API tokens and automatic regeneration

The plugin needs its own home-hosted API token to read and write the panel. home-hosted keeps only the token's hash, so a token it did not mint can never be recovered β€” <stateDir>/panel-token is 0600, never rendered or logged, and Regenerate token enrols a new one that replaces it.

A missing or refused token is called out on the page with that button, including when the panel is not answering at all β€” a token problem is often why it cannot be reached. Regenerate token automatically (Agent tools section, on by default) does the same thing when a panel call is refused: the tool re-enrols and retries once instead of failing. Turn it off to be asked instead of having a working token silently replaced.

Operator config

The Cordis row config is for operator overrides only:

- id: dsh-home-hosted
  name: 'dsh-home-hosted'
  config:
    stateDir: /custom/state/dir        # default: $DSH_HOME/dsh-home-hosted
    homeHostedCommand: /usr/bin/home-hosted
    defaultEntryId: dsh

Everything a person toggles lives in <stateDir>/settings.json.

Development
pnpm install
pnpm typecheck && pnpm test && pnpm build

Node 24+, pnpm. The same commands CI runs.


MIT Β· npm Β· releases Β· issues Β· built on home-hosted