Bundle
@blue/dsh-telegram-bot
DeepSeek Harness plugin: connect a Telegram bot to your dsh agent via long polling. One agent per chat, multi-turn context, whitelist access, and agent-preset mounting so the bot gets the same tools as a Web GUI session.
- Source
- Blue-2571
- License
- MIT
- Updated
- Updated 5 days ago
Readme
# @blue/dsh-telegram-bot
[English](README.md) · [简体中文](README.zh-CN.md)
A minimal single-purpose [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) (dsh) plugin: connect a **Telegram bot** to your dsh agent via **long polling** — no public endpoint needed.
Inspired by [dsh-im-hub](https://github.com/ThreeBody6666/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
```bash
dsh plugin --profile web add @blue/dsh-telegram-bot
```
The row is **disabled by default**. Enable it from the profile's `cordis.patch.yml`:
```yaml
- 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](https://t.me/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
Install
dsh plugin --profile web add github:Blue-2571/dsh-telegram-bot#67f0cf1e397a4c48e1a9cd79daee69a3fcd8c2a4
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install blue-dsh-telegram-bot from the hub