メインコンテンツへスキップ
L

ds-bot-control

lininn/ds-bot-control

DS Bot: a team of long-lived Bots for DeepSeek Harness, with Main Bots, Bot-to-Bot messages and group chats

インストール

dsh plugin --profile web add github:lininn/ds-bot-control

README

DS Bot

DS Bot

English | 中文

version DSH license

DS Bot is a bot plugin for DeepSeek Harness (DSH). It turns DSH into bots. You create your own bots, then talk and work with them.

Say one sentence to Chief, and it sets up the bots and the group chat

Quick start

The shortest way to get a team running, and to drive it from your phone:

npm install -g @lininn/ds-bot
ds-bot start          # starts DSH Web in the background and prints its address

Open the address it prints. ds-bot status, ds-bot stop and ds-bot restart manage it; the team keeps running after the terminal closes.

Now connect the phone:

  1. In the web UI, open Settings → Remote control.
  2. Follow the WeChat official account html5开发分享 to get an invite code, register with it, then sign in on that page with the same account.
  3. On the phone, open https://ds.d-1.top, sign in, and pick this computer from the device list.

The computer keeps one outbound WebSocket to the relay and opens no port; the phone reaches only the phone-safe part of the Bot API.

How remote control works

Prefer the desktop app? Download it from Releases; the same remote-control steps apply.

Install

Desktop app (Windows, macOS, Linux)

The desktop app brings its own DSH, so you don't need to install DSH first. Download it from Releases:

  • Windows (x64): DeepSeek-Bot-<version>-win-x64.exe. Run it; it installs for your user only, without administrator rights. If Windows shows "Windows protected your PC", select More info → Run anyway.
  • macOS: DeepSeek-Bot-<version>-mac-arm64.zip for an Apple chip, DeepSeek-Bot-<version>-mac-x64.zip for Intel. Safari unzips it by itself; open DeepSeek Bot where it was unzipped. Its first start copies it into Applications and opens that copy, so the zip and the unzipped folder can be deleted afterwards. When macOS says it cannot check the app, open System Settings → Privacy & Security and select Open Anyway.
  • Linux (x64): DeepSeek-Bot-<version>-linux-x86_64.AppImage runs on every distribution — make it executable and open it. It mounts through FUSE 2, which you may need to install first (sudo apt install libfuse2t64 on Ubuntu 24.04+, sudo dnf install fuse-libs on Fedora, sudo pacman -S fuse2 on Arch). On Ubuntu 24.04 and later an AppImage can refuse to start (Ubuntu restricts the sandbox it needs); the DeepSeek-Bot-<version>-linux-amd64.deb on Debian/Ubuntu does not have this problem and adds a menu entry.

At the first start the app asks where to keep its data and the Bots' files, and offers to copy a Bot team from your DSH (it only reads your DSH). Set up a model in its settings. The Windows app and the Linux AppImage update themselves; the macOS app and the Linux deb tell you when a new version is ready to download.

macOS: opening the app for the first time. The macOS build is not signed with an Apple Developer ID and is not notarized, so Gatekeeper reports "Apple cannot verify whether 'DeepSeek Bot' contains malware…" and refuses to open it straight from Downloads. To open it once:

  1. Open System Settings → Privacy & Security, scroll down to the message about DeepSeek Bot, and select Open Anyway, then confirm.
  2. Or Control-click DeepSeek Bot in Finder and choose Open → Open.

If macOS still refuses, clear the download quarantine flag on a build downloaded from this project's Releases:

xattr -dr com.apple.quarantine "/Applications/DeepSeek Bot.app"

Only download the app from this project's Releases; the command merely tells macOS you have checked it yourself.

As a plugin in DSH

First install DSH and set up at least one model in it. DS Bot uses the models from DSH.

DSH Desktop (Windows, macOS)

  1. In the sidebar, select Plugins → Add plugin.
  2. In Package name or address, enter @lininn/ds-bot. In mainland China, set Registry to Mainland China mirror.
  3. Select Install, then Enable now. If DSH says the change takes effect at the next start, quit DSH completely and open it again.

If npm is not reachable, in step 2 you can also enter the full path of lininn-ds-bot-0.2.11.tgz downloaded from Releases, or github:lininn/ds-bot-control#v0.2.11&path:/ds-bot (needs Git).

Coming from the older ds-bot package: on the Plugins page, remove ds-bot and add @lininn/ds-bot again. The Bots, chats and memory stay.

DSH Web (Windows, macOS, Linux)

Needs Node.js 22.19 or later, and pnpm.

npx @deepseek-ai/dsh@0.2.1-rc.5 plugin --profile web add @lininn/ds-bot
npx @deepseek-ai/dsh@0.2.1-rc.5 web

To keep that web UI running in the background — so the team stays reachable from a phone — the package also ships a small ds-bot command:

npm install -g @lininn/ds-bot          # then: ds-bot start
npx -p @lininn/ds-bot ds-bot start     # or without a global install

ds-bot status    # whether it runs, with the pid, url and log
ds-bot stop      # stop it
ds-bot restart   # stop, then start

It boots dsh --profile web --no-open; --port and --host choose the listener, and --json prints status as JSON. When dsh is not installed, start runs this package's pinned DSH release through npx and adds the plugin to the profile, so the global install above is all you need. See Command line.

Docker (NAS, Linux server)

The docker/ directory builds an image with DSH Web and DS Bot, for a NAS or any always-on machine. CI is configured to publish a prebuilt linux/amd64 image to GHCR. The container is the Bots' sandbox: they get full access to what you mount into it, and nothing else. See docker/README.md.

Setup

I strongly recommend that you set up your other bots and group chats by just talking to a bot.

DS Bot selects its auto search provider for the whole profile. If you disable web-search-auto, also select another registered search provider in that profile. See Web search and the recovery steps.

Features

Bot

You can do all your talking and work with one bot, in one window. You don't need to worry about the context behind it. The bot's details page shows its info, and there you can pick the model you want it to use. You can switch models at any time, but I still recommend that you keep one model for a bot for a long time, and switch only when you really need to.

Bots also have memory. A bot remembers what you like and uses it in later work. You can manage its memory on the bot's details page, or just tell the bot.

Bot details: model, memory, usage

Main bot

The main bot is your chief. It has very high rights: it manages the other bots and the group chats. The first time you open DS Bot, there is already a main bot called Chief. Talk to it, and it walks you through the setup.

In short: have a question? Ask the main bot.

Group chats

DS Bot has group chats. A group chat is a great way to get several bots to work together, but it clearly costs more. So DS Bot does this: every group chat has an admin. The admin answers your messages by default and calls in the other bots for you. You can also @ a bot directly, and it answers you directly: type @ and pick the bot from the list. To give the bots another chat as context, use + → Reference a chat in the message box.

Any bot can hand work to another bot with @. That bot does the work on its own, and the group goes on. While it works, it keeps the group posted, and the group, the sidebar and its own chat show what it is doing. When it is done, it posts the result in the group, and the bot that asked for the work answers. To stop the work, open the group's details.

A group chat has its own memory. What you tell the group stays in the group: its members use it there, and your other chats and the bots outside the group do not see it. You can manage it in the group's details.

Group chat: the admin, Chief, hands the work to Writer and Coder

Capabilities

Settings → Capabilities is a shared library of MCP servers, skills and packs. Add a capability to a Bot in its settings; it is available from that Bot's next message in its own chat and group chats. A local MCP command that a Bot adds needs your approval before it can run. While other Bots use a capability, only you or a Main Bot can change or delete it.

Usage

In Settings → Usage, you can see token usage by time, by bot and by model.

Usage page

Remote control

Settings → Remote control lets a phone drive this team. The computer keeps one outbound WebSocket to a relay, so no port is opened here. Sign in on the settings page with a blog account (follow the WeChat official account html5开发分享 for an invite code), then open the relay's website on the phone and pick this computer. One account can bind several computers: the phone shows a device list when more than one is online, and Switch device in the shell's header returns to it. The public relay is https://ds.d-1.top, used when no other address is set; a deployment with its own relay sets relay.url or DS_BOT_RELAY_URL. Only the phone-safe part of the Bot API is reachable. See Remote control and relay/.

Data

All data stays on your own computer, in bot/ and sessions/ in the DSH home folder (~/.dsh by default). Uninstalling the plugin does not delete this data.

Development

The plugin source is in ds-bot/. For options and internals, see ds-bot/README.md. For development, tests and how the team works, see CONTRIBUTING.md. For changes between versions, see CHANGELOG.md.

Acknowledgments

  • DeepSeek Harness: DS Bot is built on the DSH plugin system. Every bot works in DSH sessions and uses the DSH tools and models.
  • esbuild: bundles the plugin's interface code.
  • Thanks to these projects for the ideas they published. DS Bot learned from their designs and does not contain their code:
    • AgentMemoryRepo: the Markdown format of Bot memory.
    • OpenAI Codex: checkpoints that keep the user's messages next to the summary, and message anchors for chat search.
    • OpenMausBot: group chat rounds and @mention relays.
    • Hermes Agent and Hermes Bot Mode: one session per member per group chat, and handoffs that carry the earlier user messages.
    • OpenCode, goose, pi and Gemini CLI: when to condense a long chat, and what a handoff note holds.
    • obelisk: chat search with a SQLite full-text index.
  • Everyone who tries DS Bot, asks questions and reports bugs.

License

Apache License 2.0. Provided "as is", without any warranty. Third-party code and its license are listed in NOTICE.

Disclaimer

DS Bot is an independent community project. It is not an official DeepSeek product, and it is not affiliated with, endorsed by or sponsored by DeepSeek. "DeepSeek", "DeepSeek Harness" and the other names are trademarks of their owners. They are used here only to say what this plugin works with.

Bots use your own model quota, and they read and write files and run commands when you ask them to. Check important actions yourself.

関連プラグイン