dshplugin.devDeepSeek Harness Plugins
DSH Onlyne plugin logo
DeepSeek Harness Plugin

DSH Onlyne

1
Published by dbydd

IM gateway for DeepSeek Harness agents — send and receive QQ, WeChat, Feishu and Telegram messages from dsh sessions.

Sessionsdeepseek-harnessdsh-pluginmessagingonlyne

Get this plugin

Review the source, then continue to the publisher.

dsh plugin add dsh-onlyne@latest
Get this plugin
Share on X ↗

About this plugin

Source snapshot 8/13/2026

dsh-onlyne

English | 中文

Give DeepSeek Harness agents a real IM inbox/outbox through Onlyne.

dsh-onlyne is the DeepSeek Harness (dsh) plugin for Onlyne, the workspace-local IM channel daemon. It adds model-facing tools and a watch loop so a dsh agent can receive messages from IM channels (Telegram, Feishu/Lark, QQ Bot, WeChat) and send replies — without pretending a chat platform is a terminal or a workflow engine.

It is the dsh counterpart of pi-onlyne and shares the same per-project config file (.pi/onlyne.json), so one workspace can be bridged by either harness without reconfiguration.

Install

Onlyne is a single binary; see the Onlyne README to install and initialize a workspace:

onlyne init

Then install the plugin into a dsh profile and mount it:

dsh plugin --profile web add dsh-onlyne

Add a row to the profile's cordis.patch.yml ($DSH_HOME/profiles/<name>/cordis.patch.yml):

- insert:
    - id: onlyne
      name: dsh-onlyne

The plugin finds the workspace by walking up from the dsh process's invoking directory to the nearest .onlyne/.

Tools

onlyne_daemon_start()
onlyne_daemon_stop()
onlyne_daemon_restart()
onlyne_reply({ text })
onlyne_send({ channelId, text, rawText? })
onlyne_broadcast({ targets, text, rawText? })
onlyne_loopback({ text, rawText? })
onlyne_mark_no_reply({ reason? })

Send one message

onlyne_send({
  channelId: "telegram",
  text: "# Build report\n\nAll checks passed."
})

Set rawText: true to send literal text instead of Markdown.

Broadcast

onlyne_broadcast({
  targets: [{ channelId: "telegram" }, { channelId: "feishu" }],
  text: "# Release shipped"
})

Loopback wake-up

From any local script, inject an inbound message into the running daemon:

onlyne client '{"id":"wake","op":"loopback","text":"background job finished","raw_text":true}'

Channel loopback is wake-up-only: it surfaces a follow-up in the session but does not expect onlyne_reply.

Command

/onlyne status
/onlyne watch on
/onlyne watch off
/onlyne daemon start
/onlyne daemon stop
/onlyne daemon restart
/onlyne config auto-start

watch on subscribes to the daemon's event stream; inbound messages are surfaced into the current dsh session as user follow-ups, and the agent replies with onlyne_reply or acknowledges with onlyne_mark_no_reply. Control messages such as /handshake are consumed silently. config auto-start toggles watching automatically at session start.

Config

Shared with pi-onlyne at .pi/onlyne.json:

{
  "watch": { "autoStart": false },
  "inbound": {
    "defaultMode": "auto-handle",
    "rules": [{ "channel": "telegram", "mode": "queue-only" }]
  },
  "outbound": {
    "defaultReplyMode": "guarded-explicit",
    "retry": { "attempts": 2, "concurrency": 8 }
  }
}

Development

npm install
npm run check     # build + tests
npm pack          # build the publishable tarball

Links

  • Onlyne main repository: https://github.com/dbydd/onlyne
  • dsh-onlyne package: https://www.npmjs.com/package/dsh-onlyne