@blue/dsh-telegram-bot
English · 简体中文
A minimal single-purpose DeepSeek Harness (dsh) plugin: connect a Telegram bot to your dsh agent via long polling — no public endpoint needed.
Inspired by dsh-im-hub, but reduced to Telegram only: one adapter, no web settings card, no HTTP webhook surface.
- One agent per chat (
telegram:<chatId>), multi-turn context retained.
- Agent-preset mounting: set
agent.preset and the bot's sessions mount that preset, getting the same tools (bash, fs, ssh, ...) as a Web GUI session.
- Whitelist access control (
allowedUserIds).
- Slack-style commands:
/help /reset /status /model.
- Long replies split at Telegram's 4096-char limit.
- Idle chats disposed after
agent.idleTimeoutMs.
Install
dsh plugin --profile web add @blue/dsh-telegram-bot
The row is disabled by default. Enable it from the profile's cordis.patch.yml:
- id: dsh-telegram-bot
disabled: false
config:
telegram:
token: '123456:ABC-DEF...' # from @BotFather
allowedUserIds: [6354114195] # your numeric Telegram user id
agent:
preset: standard # mount the standard preset for full tools
Then restart the profile (dsh web).
Configuration
| Key | Default | Description |
|---|
enabled | true | Master switch. |
telegram.token | '' | Bot token from @BotFather. |
telegram.allowedUserIds | [] | Numeric user ids allowed to talk to the bot; empty = everyone. Set it in production. |
telegram.timeoutSeconds | 50 | getUpdates long-poll timeout. |
telegram.pollIntervalMs | 500 | Gap after a poll timeout/error. |
agent.cwd | '' | Working directory for agent sessions (defaults to dsh's cwd). |
agent.provider / agent.model | '' | Override model; empty = deployment default. |
agent.preset | '' | Agent preset id to mount for bot sessions ('' = deployment default). |
agent.maxMessageLength | 4000 | Max chars per outbound message. |
agent.idleTimeoutMs | 1800000 | Idle time before a chat's agent is disposed (0 = never). |
agent.instructionPrefix | '' | Prefix prepended to every user message. |
Commands
| Command | Effect |
|---|
/help | Show command help. |
/reset | Clear this chat's context (fresh agent). |
/status | Show active chats / agents. |
/model | Show the current model selection. |
Security
- Force a whitelist. An empty
allowedUserIds means anyone with the token can drive your agent — which can execute tools on the host.
- The token lives in the profile's
cordis.patch.yml; keep that file private (or reference an environment variable via !!js process.env.TG_BOT_TOKEN).
License
MIT