Observe-with-approval Telegram Business Mode (secretary bot) for Hermes Agent.
Connect your Telegram Business account to your Hermes bot and it becomes your secretary: every incoming customer message gets an LLM-drafted reply delivered to your DM with inline buttons — nothing reaches the customer until you tap Send.
Customer → your Business account (via Business Mode)
↓ debounce 8s, draft once
Bot → your DM
💬 Carol wrote:
> Hey, are you free Friday afternoon?
📝 Suggested reply:
Friday afternoon works — anywhere between 2 and 5pm?
[✓ Send] [✎ Edit] [✕ Discard]
↓
Send → delivered to the customer via your Business connection
Edit → your next DM text becomes the outgoing message
Discard → dropped, the customer sees nothing
can_reply is granted.owner_user_id; anyone else gets ⛔.can_reply, the Send button is hidden — you're told to copy/paste manually instead of getting a button that silently fails.ctx.register_telegram_handler, hermes-agent PR #59159 / v0.18+)git clone https://github.com/NousResearch/hermes-telegram-business \
~/.hermes/plugins/telegram-business
hermes plugins enable telegram-business
Restart the gateway (hermes gateway restart). Then:
/biz to confirm the connection is live.| Command | Effect |
|---|---|
/biz | status dashboard |
/biz pause / /biz resume | global drafting kill switch |
/biz off <chat_id> / /biz on <chat_id> | per-customer-chat mute |
Optional block in ~/.hermes/config.yaml:
plugins:
entries:
telegram-business:
debounce_seconds: 8 # coalesce typing bursts
draft_ttl_hours: 24 # stale-draft expiry
max_customer_text_chars: 4000
owner_persona: >
You are drafting replies for a freelance photographer.
Friendly, brief, always suggest a concrete next step.
Drafting uses your active Hermes model through the host-owned plugin LLM surface (ctx.llm) — no separate API key.
Plugin-owned SQLite at ~/.hermes/telegram-business/state.db (two tables: connections + drafts). Hermes' core state is never touched. Delete the file to reset.
python3 -m pytest
37 tests covering connection lifecycle, draft supersession, debounce coalescing, all three button paths, edit capture, owner-scoped callback authorization, and /biz subcommands. No network, no live Telegram.
Based on the design and implementation from hermes-agent#30055, replatformed as a standalone plugin. Related earlier community proposals: #26654 by @evgyur (earliest submission), #35342 by @MilekhinAV, #46728 by @kxnkxv.
MIT
2 commits
1 commits
Python
100.0%
Observe-with-approval Telegram Business Mode (secretary bot) for Hermes Agent.
Connect your Telegram Business account to your Hermes bot and it becomes your secretary: every incoming customer message gets an LLM-drafted reply delivered to your DM with inline buttons — nothing reaches the customer until you tap Send.
Customer → your Business account (via Business Mode)
↓ debounce 8s, draft once
Bot → your DM
💬 Carol wrote:
> Hey, are you free Friday afternoon?
📝 Suggested reply:
Friday afternoon works — anywhere between 2 and 5pm?
[✓ Send] [✎ Edit] [✕ Discard]
↓
Send → delivered to the customer via your Business connection
Edit → your next DM text becomes the outgoing message
Discard → dropped, the customer sees nothing
can_reply is granted.owner_user_id; anyone else gets ⛔.can_reply, the Send button is hidden — you're told to copy/paste manually instead of getting a button that silently fails.ctx.register_telegram_handler, hermes-agent PR #59159 / v0.18+)git clone https://github.com/NousResearch/hermes-telegram-business \
~/.hermes/plugins/telegram-business
hermes plugins enable telegram-business
Restart the gateway (hermes gateway restart). Then:
/biz to confirm the connection is live.| Command | Effect |
|---|---|
/biz | status dashboard |
/biz pause / /biz resume | global drafting kill switch |
/biz off <chat_id> / /biz on <chat_id> | per-customer-chat mute |
Optional block in ~/.hermes/config.yaml:
plugins:
entries:
telegram-business:
debounce_seconds: 8 # coalesce typing bursts
draft_ttl_hours: 24 # stale-draft expiry
max_customer_text_chars: 4000
owner_persona: >
You are drafting replies for a freelance photographer.
Friendly, brief, always suggest a concrete next step.
Drafting uses your active Hermes model through the host-owned plugin LLM surface (ctx.llm) — no separate API key.
Plugin-owned SQLite at ~/.hermes/telegram-business/state.db (two tables: connections + drafts). Hermes' core state is never touched. Delete the file to reset.
python3 -m pytest
37 tests covering connection lifecycle, draft supersession, debounce coalescing, all three button paths, edit capture, owner-scoped callback authorization, and /biz subcommands. No network, no live Telegram.
Based on the design and implementation from hermes-agent#30055, replatformed as a standalone plugin. Related earlier community proposals: #26654 by @evgyur (earliest submission), #35342 by @MilekhinAV, #46728 by @kxnkxv.
MIT
2 commits
1 commits
Python
100.0%