omdsh-plugins/omdsh-remctrl0

@omdsh-plugins/omdsh-remctrl

Remote control for the DeepSeek Harness: a second front door on its own port, behind device pairing and a tiered method allowlist, so a phone on your tailnet can watch a session, approve what it asks for, and hand it new work

包名
@omdsh-plugins/omdsh-remctrl
版本
0.1.0
许可证
MIT
最近更新
2026年8月17日

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:omdsh-plugins/omdsh-remctrl

Configuration

Settings namespace omdsh-remctrl, editable from omdsh-plughub.

FieldDefaultWhat it does
enabledtrueWhether the door opens at all
bindHost127.0.0.1Loopback, or a tailnet address this machine holds
port3081The phone's port — not the harness's 3080
defaultTierdriveWhat a newly paired device may do
pairingTtlSeconds300How long a code lives
maxPairingAttempts5Wrong guesses a code survives
devicesWritten by the plugin; holds token hashes, never tokens

Every field is applies: 'live'. Moving bindHost, port or enabled rebinds the listener where it stands; a tier change and a revocation are in force on the next request. Nothing here asks for a restart.

Two behaviours are worth knowing before editing:

  • A bindHost this machine does not hold is refused as you save it, not at the next boot. The namespace validates a write by running the same bind policy the listener runs, so a laptop whose Tailscale is down cannot store an address it would then fail to listen on — the panel reports the refusal and the stored value stays as it was.
  • The device table is authoritative in memory. Mirroring it back into settings can fail — a read-only provider, a disk that will not take the write — and when it does, this plugin logs a line and carries on: pairings hold until the process ends rather than taking the whole agent host down with them.

Tiers

Each admits everything below it.

TierMay
observeList and read sessions, subagents, workspaces, skills, presets
respond…and cancel a run or interrupt a subagent
drive…and send messages, steer, edit the queue, start and rename sessions
full…and fork, pick models, edit workspaces and goals

cancel sits in respond rather than drive on purpose: somebody trusted to watch a run should be able to end one going wrong without being trusted to launch another.