All plugins

yuanbao

Tencent Yuanbao messaging platform (DMs and group chats over Yuanbao's bot WebSocket, native media and stickers, DM/group access policies, cron home-channel delivery) plus the yuanbao toolset (yb_query_group_info, yb_query_group_members, yb_send_dm, yb_search_sticker, yb_send_sticker). Formerly built into Hermes core; existing users are migrated automatically. A Hermes Labs plugin: built by Nous Research, not supported, and likely not maintained going forward. Fixes from the community are welcome. Disclosure — messages, media and group member lists travel between Tencent's Yuanbao servers and your Hermes gateway using your own Yuanbao bot App ID and App Secret. The plugin also downloads image URLs that appear in replies or inbound messages, and its sign-token requests carry the Hermes version and an instance id.

NousResearch156Platformv2.0.0Updated 39 minutes ago

About

Tencent Yuanbao messaging platform (DMs and group chats over Yuanbao's bot WebSocket, native media and stickers, DM/group access policies, cron home-channel delivery) plus the yuanbao toolset (yb_query_group_info, yb_query_group_members, yb_send_dm, yb_search_sticker, yb_send_sticker). Formerly built into Hermes core; existing users are migrated automatically. A Hermes Labs plugin: built by Nous Research, not supported, and likely not maintained going forward. Fixes from the community are welcome. Disclosure — messages, media and group member lists travel between Tencent's Yuanbao servers and your Hermes gateway using your own Yuanbao bot App ID and App Secret. The plugin also downloads image URLs that appear in replies or inbound messages, and its sign-token requests carry the Hermes version and an instance id.

Yuanbao

Labs plugin: works, but unsupported. Yuanbao is now a Hermes Labs plugin: built by Nous Research, not supported, and likely not maintained going forward. Fixes from the community are welcome. See what "labs" means.

Part of Hermes Labs Plugins: built by Nous Research, not supported. Formerly built into
hermes-agent core (plugins/platforms/yuanbao and
tools/yuanbao_tools.py); this directory carries their full history.

Connect Hermes to Yuanbao, Tencent's messaging platform. The adapter keeps a
persistent WebSocket connection (HMAC-signed sign token) and supports direct (C2C) and group conversations,
plus the yuanbao toolset: yb_query_group_info, yb_query_group_members, yb_send_dm,
yb_search_sticker and yb_send_sticker.

Everything an existing setup relies on is unchanged: platform name yuanbao, toolset yuanbao, the yb_*
tool names, every YUANBAO_* env var, platforms.yuanbao (and the legacy gateway.yuanbao) config keys and
YUANBAO_HOME_CHANNEL. Hermes installs this plugin automatically for profiles that used the built-in
Yuanbao platform.

Install

hermes plugins install yuanbao

Needs a Hermes release in which Yuanbao has left core. On an older Hermes the plugin stays inactive and
logs one line (the plugin stays inactive until core drops it): that Hermes still ships its own Yuanbao
support, which keeps working.

The check is whether core's Yuanbao files are present (plugins/platforms/yuanbao/ or
tools/yuanbao_tools.py), not whether core's built-in Yuanbao is enabled. On such a Hermes the plugin stays
inactive even if you disabled the built-in (plugins.disabled: [yuanbao-platform]), so neither runs:
re-enable the built-in there, or update Hermes.

Setup

1. Create a bot in Yuanbao

  1. Download the Yuanbao app from https://yuanbao.tencent.com/
  2. In the app, go to PAI → My Bot and create a new bot
  3. After the bot is created, copy the APP_ID and APP_SECRET

2. Run the setup wizard

hermes gateway setup

Select Yuanbao. The wizard asks for your App ID and App Secret and saves them. The WebSocket URL and
API domain have built-in defaults; you only need the App ID and App Secret to get started.

3. Environment variables

Verify these in ~/.hermes/.env (or your profile's .env):

# Required
YUANBAO_APP_ID=your-app-id          # legacy name YUANBAO_APP_KEY still works
YUANBAO_APP_SECRET=your-app-secret

# Optional overrides (defaults: wss://bot-wss.yuanbao.tencent.com/wss/connection, https://bot.yuanbao.tencent.com)
# YUANBAO_WS_URL=wss://...
# YUANBAO_API_DOMAIN=https://...

# Optional: bot account ID (normally obtained automatically from the sign token)
# YUANBAO_BOT_ID=your-bot-id

# Optional: internal routing environment (e.g. test/staging/production)
# YUANBAO_ROUTE_ENV=production

# Optional: home channel for cron/notifications (format: direct:<account> or group:<group_code>)
YUANBAO_HOME_CHANNEL=direct:bot_account_id
YUANBAO_HOME_CHANNEL_NAME="Bot Notifications"

# Optional: restrict access (legacy, see Access control below for fine-grained policies)
YUANBAO_ALLOWED_USERS=user_account_1,user_account_2

4. Start the gateway

hermes gateway

The adapter connects to the Yuanbao WebSocket gateway, authenticates with HMAC signatures and starts
processing messages.

Features

  • WebSocket gateway with heartbeat/keep-alive and automatic reconnection (exponential backoff)
  • C2C and group messaging, with message deduplication
  • Media: images, files and voice via COS (Tencent Cloud Object Storage); media URLs are SSRF-checked
    before download
  • Markdown-aware chunking for Yuanbao's message size limit
  • Stickers: native TIMFaceElem stickers through yb_search_sticker / yb_send_sticker
  • Group queries: group details and member lists (yb_query_group_info / yb_query_group_members)
  • DMs from a group: yb_send_dm looks a member up by name and messages them privately
  • Skill: yuanbao:yuanbao (formerly core's optional yuanbao skill) walks the model through
    @mentions, DMs and member lookups with these tools
  • WeChat forwarded chat history: forwarded bundles (including nested forwards) are decoded and injected
    into the conversation
  • Auto-sethome: with no home channel set, the first eligible sender becomes the home channel
  • Slow-response notice while the agent works on a long task

Chat ID formats

| Chat type | Format | Example |
|---|---|---|
| Direct message (C2C) | direct:<account> | direct:user123 |
| Group message | group:<group_code> | group:grp456 |

hermes send yuanbao:group:<code> and send_message accept the same forms (a bare number is a group code).

Home channel

Use /sethome in any Yuanbao chat to make it the home channel; cron jobs deliver there. Or set
YUANBAO_HOME_CHANNEL (and optionally YUANBAO_HOME_CHANNEL_NAME) in .env.

Access control

# DM policy: open (default) | allowlist | disabled
YUANBAO_DM_POLICY=open
# Comma-separated user IDs allowed to DM the bot (only used when DM_POLICY=allowlist)
YUANBAO_DM_ALLOW_FROM=user_id_1,user_id_2

# Group policy: open (default) | allowlist | disabled
YUANBAO_GROUP_POLICY=open
# Comma-separated group codes allowed (only used when GROUP_POLICY=allowlist)
YUANBAO_GROUP_ALLOW_FROM=group_code_1,group_code_2

Or in config.yaml:

platforms:
  yuanbao:
    extra:
      dm_policy: allowlist
      dm_allow_from: "user1,user2"
      group_policy: open
      group_allow_from: ""

Troubleshooting

  • Bot online but not answering: the WebSocket handshake failed to authenticate. Check App ID and App
    Secret, that the bot has permissions, and hermes logs gateway.
  • "Connection refused": the WebSocket URL is unreachable or wrong (it must start with wss://); check
    network access to the API domain.
  • Media uploads fail: check YUANBAO_API_DOMAIN and that media upload is enabled for your bot.
  • Frequent disconnects: run hermes gateway run -vv for verbose logs and look for the error pattern
    (older Chinese docs said HERMES_LOG_LEVEL=debug; Hermes does not read that variable).

Disclosure

  • The adapter talks to Tencent's Yuanbao bot endpoints: the sign-token API (YUANBAO_API_DOMAIN, default
    https://bot.yuanbao.tencent.com), the bot WebSocket (YUANBAO_WS_URL, default
    wss://bot-wss.yuanbao.tencent.com/wss/connection) and Tencent COS for media upload/download. Sign-token
    requests carry the Hermes version, the OS name (sys.platform) and an instance id header; the instance
    id is a fixed value (17), the same for every install, not a per-install identifier. The WebSocket AUTH_BIND frame carries the same version, OS and instance id.
  • It downloads public media URLs found in received messages and quoted replies (images, files) so the
    agent can see them, and URLs the agent passes to the send tools. Those requests go to whatever host the
    URL names, not only Tencent; private, loopback and link-local targets are refused, every redirect hop
    is re-checked, and downloads are size-capped.
  • Received media is cached in the Hermes media cache of the profile; the home channel is written to the
    profile's .env / config.yaml when set by /sethome or auto-sethome.
  • No telemetry of its own.

Tests

cd yuanbao
HERMES_AGENT_REPO=../../hermes-agent PYTHONPATH=../../hermes-agent python -m pytest -q

On a core that still bundles Yuanbao the plugin is inert, and the tests that need the plugin's own
registry entry are skipped.

License

MIT

README from the reviewed commit 51ede1f; it updates when the author re-pins.

More by NousResearch

29 plugins by NousResearch in the catalog.

NousResearchaccent-pickerOKLCH accent colour picker for the Hermes Desktop status bar: drag it and the whole theme retints live, with palette commands to reset to the theme default or copy the current colour. A theme-authoring tool; the colour is scratch state and is never persisted. Desktop-only (desktop/plugin.js inside the plugin SDK surface); no agent tools, hooks, middleware or env vars.OfficialDesktop app609NousResearchadvanced-delegationTwo extra delegation modes for `delegate_task`, next to the built-in default. Model routes (`delegation.backend: model_map`): the agent picks a named model route per subagent from a list you define (e.g. fast, deep, local). Profile routes (`delegation.backend: profile_routes`): the agent runs a subagent as one of your Hermes profiles, with that profile's own model, credentials, skills and SOUL.md. Only route names and their one-line descriptions reach the model. Adds `hermes delegation config` (pick the mode and edit its routes; `--show` prints the setup) and the `/delegation` slash command (save a mode for the next session, or `--now` to apply it to the current chat). Needs Hermes 0.22.5 or newer, the first release with pluggable delegation providers; Hermes 0.22.0 to 0.22.4 refuses to install it, and on a core older than 0.22.0 it installs, logs one warning and does nothing. A model route can set `daybreak: true` to run its model with OpenAI's Daybreak trusted-access program; it is sent only from your own CLI, TUI or Desktop chats, on `openai-codex`, for models your Codex catalog lists, and a route that breaks a rule is refused. Disclosure — no Python dependencies and no network or model calls of its own, except that a Daybreak route checks the Codex catalog through core's cached lookup with your existing Codex login; subagents run through core's `delegate_task` on the routes you configured. Writes only `delegation.backend` and `delegation.backends.*` (model_map / profile_routes) in the active profile's config.yaml, through core's config writer. A model route's optional `api_key` is stored in config.yaml in plain text (`provider:` keeps keys in .env / auth.json). Listing a profile under profile routes lets this profile's subagents use that profile's credentials, SOUL.md and terminal policy.Officialtools609NousResearchagent-importers`hermes import-agent`: import an OpenClaw (~/.openclaw, or legacy ~/.clawdbot / ~/.moltbot), Claude Code (~/.claude), Codex CLI (~/.codex), Cursor (~/.cursor), Grok Bot (a self-export the Bot writes from a prompt the importer prints) or OpenBot desktop (its openbot.db) setup into Hermes in one command; always previews first and asks before applying. Claude Code / Codex / Cursor: instructions, Cursor rules and memories become memory entries, Bash permission rules become command allow/deny lists, MCP servers land in config.yaml, skills are copied, and `--sync` re-imports sources that changed. OpenClaw (core's former `hermes claw migrate`; the plugin keeps that spelling, `hermes claw cleanup` and the openclaw-migration skill): persona, memories, skills, model and messaging settings, MCP servers and agent behaviour. Formerly built into Hermes core; `hermes setup` offers to install it when it finds one of these agents, and profiles with a registered sync source are migrated automatically. Disclosure — no Python dependencies, no network calls and no model calls. Claude Code / Codex / Cursor: reads those agents' local config trees (never their credential files; secret-looking MCP env vars and headers are stripped and listed) and writes only into the active profile (memories/MEMORY.md with a backup, config.yaml, skills/ and import-sync.json). OpenClaw: reads the OpenClaw dir (openclaw.json, its .env, workspace files such as SOUL.md / MEMORY.md / USER.md, skills); API keys and bot tokens come over only with --migrate-secrets (allowlisted names, shown in the preview). It writes into the active profile (config.yaml, .env, SOUL.md, memories/, skills/openclaw-imports/, a migration/openclaw/<time>/ report with item backups, and a backups/pre-migration-*.zip restore point), plus a workspace dir only when --workspace-target names one. It runs local pgrep / systemctl / tasklist checks to warn when OpenClaw or a Hermes gateway is still running, and `hermes claw cleanup` renames the OpenClaw dir to *.pre-migration after a confirmation. Grok Bot / OpenBot: instructions become SOUL.md, memories and user facts become memory entries, skills land in skills/<source>-imports/, scheduled routines become paused cron jobs (--activate-routines to start them) and event routines a notes file; credential-looking export keys refuse the file, and secret MCP env vars and headers are stripped and listed. OpenBot's database is opened read-only (or read from a scratch copy that is deleted after the read).Officialtools609NousResearchblenderOfficial Blender Lab MCP server over stdio, pinned to upstream v1.0.3, with a Blender workflow skill. Needs Git and uv; Blender 5.1+ is not needed at install. The skill opens Blender itself when a task needs it and, after you agree, installs Blender and Blender Lab's MCP add-on. First startup downloads Python dependencies; prepare the uv environment before connecting. Disclosure — tools execute arbitrary Python in Blender with your privileges; the skill starts Blender with online access for that session only (your saved preference is unchanged), and the add-on's local server on port 9876 has no password, so any program on this computer can use it while Blender is open; only after you agree does the skill download Blender from download.blender.org (about 400 MB, about 1.5 GB unpacked), check it against blender.org's sha256 list and install it in your own folder without administrator rights (Linux ~/.local/opt, macOS ~/Applications, Windows %LOCALAPPDATA%\Programs\Blender Foundation; never over an existing Blender), and download the v1.0.3 add-on, check its hash and install or enable it; first start downloads the pinned Blender Lab MCP server and its Python dependencies with uv. Server discovery does not prove scene readiness.Officialtools609