DSH Plugins Marketplace

DSH Plugins

Plugins

/

Notifications & Integrations

/

dsh-telegram-notify

d

dsh-telegram-notify

Identified★ 1

One-way Telegram notifications for DeepSeek Harness, with a Settings page for the bot token, chat id and event toggles.

dsh-telegram-notify

npm ci

One-way Telegram notifications for DeepSeek Harness. When you are away from the DSH UI, the bot tells you that a turn finished, failed, is waiting for an answer, has a plan ready for review, or needs a tool approval. It never reads Telegram updates, so the bot stays send-only.

The plugin ships its own Settings → Telegram page: paste the bot token, enter the chat id, and pick which events notify you. No YAML editing needed.

Events

EventMessageToggle
A turn completes✅ Turn completenotifyTurnComplete
A turn fails, is blocked, or hits the token limit❌ / ⚠️notifyTurnError
A turn is cancelled⏹ Turn cancellednotifyTurnAborted (off by default)
ask_user_question waits for an answer❓ Waiting for your inputnotifyQuestions
A plan is presented for approval (exit_plan_mode / plan-review question)📋 Plan ready for approvalnotifyPlanReviews
A tool approval waits for a human🔐 Approval needednotifyApprovals

Subagent sessions are ignored. Approval and question notifications wait 400 ms and are cancelled if the corresponding decision/tool result arrives first, so instantly rejected approvals and instantly failing tool calls stay quiet.

Messages are fire-and-forget. A Telegram outage is logged as a warning and never fails, blocks, or delays an agent turn.

Install

dsh plugin --profile web add dsh-telegram-notify

If your app runs the desktop profile, use --profile desktop. From a local checkout (before the npm release), use dsh plugin --profile web add link:$PWD.

Enable the bundle by adding "dsh-telegram-notify" to dsh.profile.bundles in ~/.dsh/profiles/web/package.json (or enable it from the DSH Plugin Manager). The bundle patch mounts the telegram-notify row.

Restart DSH, open Settings → Telegram, and:

  1. Paste the bot token and press Save token. It is stored in the DSH credential store under the reference shown on the page (TELEGRAM_BOT_TOKEN by default), never in the plugin configuration.
  2. Enter the chat id and press Save settings.
  3. Pick the events you want and save again.

Getting a bot and chat id

Create a bot with @BotFather and copy its token. Send the bot a message first, then ask a helper bot such as @userinfobot for your numeric id. For a group, add the bot to the group and use the group's negative id (for example -1001234567890); @channelusername also works for public channels.

The plugin only calls sendMessage. It never calls getUpdates, so it cannot consume messages meant for another Telegram integration.

Configuration reference

The Settings page writes the profile patch for the telegram-notify row. The same fields remain editable in ~/.dsh/profiles/web/cordis.patch.yml:

- id: telegram-notify
  config:
    chatId: "123456789"
    tokenRef: TELEGRAM_BOT_TOKEN
    notifyTurnComplete: true
    notifyTurnError: true
    notifyTurnAborted: false
    notifyQuestions: true
    notifyPlanReviews: true
    notifyApprovals: true
    silent: false
FieldDefaultMeaning
chatId"" (disabled)Target chat id, or @channelusername.
tokenRefTELEGRAM_BOT_TOKENCredential reference holding the bot token.
tokenunsetLiteral token for headless/one-off runs. The Settings page never writes this; prefer tokenRef.
apiBasehttps://api.telegram.orgBot API base URL; only change for a local Bot API server.
silentfalseSend without a notification sound.
notifyTurnCompletetrueCompleted turns.
notifyTurnErrortrueFailed, blocked, and max-token turns.
notifyTurnAbortedfalseCancelled turns.
notifyQuestionstruePending user questions.
notifyPlanReviewstruePlans waiting for approval.
notifyApprovalstruePending tool approvals.

The Settings page is keyed to the loader row id telegram-notify; mounting the plugin under a different id makes the page report the namespace as unavailable. The editable page fields are schemastery volatile config, so saves apply to the running plugin without a restart. Messages are plain text (no parse mode), so model output cannot break formatting or inject markup; text is clipped to Telegram's 4096-character limit.

If you also run a two-way Telegram bridge such as dsh-im, sessions handled by that bridge produce their own replies, and this plugin will additionally send turn notifications for them. Disable the bridge or turn off the turn toggles if that is noisy.

How it works

The Host half subscribes to session/event. It formats messages from turn/end, tool/call (ask_user_question, exit_plan_mode), approval/asked/approval/decided, assistant/message, user/message, and session/title, and posts them with fetch. The browser half registers a settings.section slot and reads/writes the telegram-notify namespace through ctx.configForms; the token goes through the credentials remote. The Host plugin disables the auto-generated config form so the secret token field is never exposed by a generic page.

Development

pnpm install
pnpm check        # typecheck, build, node:test

Source layout: src/index.ts (Host), src/client.ts (browser settings page, compiled as a classic module-loader script), test/ (Host event pipeline, client registration, and server-rendered settings page). No test touches Telegram; the transport tests use a local HTTP stub.

The first npm publish must authenticate with a token (trusted publishing can only be configured after the package exists):

npm login
npm publish --access public

Then add this repository as a trusted publisher for dsh-telegram-notify on npm (package settings → Trusted publishing → GitHub Actions, workflow publish.yml). Subsequent releases publish through OIDC from .github/workflows/publish.yml when a GitHub release is published.

License

MIT

Comments

Loading…

Similar plugins

dsh-ping

by chintoleung

Telegram pings when your DeepSeek Harness agent needs you — question asked, approval requested, turn done. Notification-only: one file, zero deps, real-DSH compat canary.

Tools & CapabilitiesNotifications & IntegrationsManifest valid

★ 0

MIT

JavaScript

Oct 17, 2026

dsh plugin --profile web add dsh-ping

by datit309

Full 2-way Telegram Remote Control, Vision, Voice, Shell, Diff & Sound Notifications for DeepSeek Harness (DSH)

Manifest valid

★ 3

↓ 72/wk

NOASSERTION

JavaScript

Oct 8, 2026

dsh plugin --profile web add dsh-telegram-bridge

by qschen86

DSH host plugin: Telegram notifications and reply-to-continue for sessions

Tools & CapabilitiesManifest valid

★ 0

MIT

JavaScript

Sep 5, 2026

dsh plugin --profile web add dsh-telegram-bridge

Multi-channel notifications for DeepSeek Harness: registers a send_notification tool and a settings page fanning out to NotifyX, WeCom app webhook, WeCom group robot, email (Resend), SMTP, DingTalk, F

Notifications & IntegrationsTerminal & ClientsManifest valid

★ 0

dsh plugin --profile web add @czf1995/dsh-notifier

by GooDAnDReaDY

Telegram bridge for DeepSeek Harness: bidirectional sessions, conversation steering, home-channel routing, and TTS voice notes sent as Telegram audio messages.

Tools & CapabilitiesNotifications & IntegrationsTerminal & ClientsManifest valid

★ 2

↓ 1.6k/wk

MIT

JavaScript

Sep 25, 2026

dsh plugin --profile web add @goodandready/dsh-messenger-gateway

by pedesdestiny

Browser desktop notifications for DeepSeek Harness (dsh) — get notified when a turn completes or an approval is needed

Tools & CapabilitiesManifest valid

★ 3

↓ 241/wk

JavaScript

Aug 18, 2026

dsh plugin --profile web add dsh-notify