- remote_task strips the device name from the title it creates, and tells the model not to include it
- session lists (Devices tab, sidebar, remote_devices) strip it from existing titles
- tests for stripDevicePrefix
- sidebar: workspaces (+ sessions) of every other device appear inside the stock
Workspaces list with a server icon and the device name; click folds sessions,
hover + creates a session there, a session opens as the remote conversation view
(/r/<device>/#/session/<id>); the viewed device's own rows stay native
- Devices tab: every device with its state (online/offline, last seen, platform,
workspace/session/running counts), offline and revoked devices included
- deploy/e2e-dom.mjs, e2e-eval.mjs: DOM dump / evaluate-in-page helpers
- Settings → Remote devices → Node: type master|slave (stored in state, beats
config role; Restart DSH button under systemd/launchd), origin (read-only:
own origin / paired master), 'Master has an auth middleware' toggle
- middleware on: a non-DSH answer on the link (login redirect, 401/403, inline
HTML) raises auth-required; the UI opens <master>/dsh-remote/signin in a popup,
the user signs in to the proxy, one click hands the proxy session cookie back
(postMessage, origin-checked, trusted origins only), link retries
- edge mode 'cookie': pasted authentik_proxy_… (or a whole Cookie header),
rotated proxy cookies persisted back; pair.mjs/install-mac --edge cookie
- connectMaster serialised; a failed attempt never clears a finished link
- tests: cookie seed/mode, HTML login wall; e2e-signin against a fake proxy
- deploy/install-mac.sh: per-user Node 22 (checksum-verified), DSH + pnpm in
~/.local, dsh-remote from the repo archive, pairing, LaunchAgent dsh web
- deploy/pair.mjs: pair without a running DSH (detects login-proxy redirects)
- install-local.mjs: --accept secrets list, --restart-on-sync
- sync.restartOnSync: slave restarts itself after synced plugins change
(waits for idle sessions, at most once per 10 min)
- remote_devices / remote_exec / remote_file / remote_task tools on the master
(exec: bash -lc with timeout + output clipping; files: read/write/list;
task: delegate a prompt to the device's own AI, wait for turn end, return
its answer; optional permission preset, status/cancel)
- only the master may control devices (allowPeerControl to relay between slaves),
agentTools.enabled=false opts a device out
- FORGE_CREDENTIALS opt-in pseudo-secret: ships the master's tea logins to a
slave (tea config + git credential store + identity)
- /dsh-remote/debug/inspect + deploy/session-log.mjs for transcripts
- tests for exec/files/task/forge install