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

AI 分析

实现通过手机等移动设备远程监控、审批和控制 DSH 任务。适合需要离开电脑时仍能把控 AI 智能体工作进度的用户。建议配合 Tailscale 使用。

パッケージ
@omdsh-plugins/omdsh-remctrl
バージョン
0.1.0
ライセンス
MIT
最終更新
2026/08/17

インストール

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

ドキュメント

README 全文を読む ↗

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.