Academy → Practical GuidesOfficial documentation · Arabic guidance

Tutorial: Team Telegram Assistant

تطبيق: مساعد Telegram لفريق

Intermediate11 min readLesson 55 questions✓ 2026-08-18
Before you read

What this page is, and what it holds.

This page covers Tutorial: Team Telegram Assistant. It carries a source warning and takes about 11 minutes to read. Open the channel to yourself first with an allowlist. An open channel means anyone can message your agent.

10sections
29code examples
2tables
12commands
1,802source words
The official one-line description

Step-by-step guide to setting up a Telegram bot that your whole team can use for code help, research, system admin, and more

What you will be able to do

Outcomes taken from this page, not a template.

  • Understand what بوابة المراسلة is and when you need it.
  • Run hermes gateway start and hermes gateway status and understand what happens next.
  • Read the table and take only the row that applies to you.
  • Set TELEGRAM_BOT_TOKEN in the right place.
Identifiers you will meet

Exactly as they appear in Hermes.

Commands
  • hermes gateway start
  • hermes gateway status
  • hermes gateway
  • hermes cron list
  • hermes cron status
  • hermes gateway stop
  • hermes pairing list
  • hermes gateway setup
Environment variables
  • TELEGRAM_BOT_TOKEN
  • TELEGRAM_ALLOWED_USERS
  • TELEGRAM_HOME_CHANNEL
  • TELEGRAM_HOME_CHANNEL_NAME
  • TERMINAL_ENV
  • TERMINAL_DOCKER_IMAGE
Page map

Jump to the part you need.

  1. 01What We're Building
  2. 02Prerequisites
  3. 03Step 1: Create a Telegram Bot
  4. 04Step 2: Configure the Gateway
  5. 05Step 3: Start the Gateway
  6. 06Step 4: Set Up Team Access
  7. 07Step 5: Configure the Bot
  8. 08Step 6: Set Up Scheduled Tasks
  9. 09Production Tips
  10. 10Going Further
The full official page

Nothing summarised away.

The documentation body below is reproduced from the official source so commands and identifiers stay exact. Each section carries a short note describing what it contains.

This tutorial walks you through setting up a Telegram bot powered by Hermes Agent that multiple team members can use. By the end, your team will have a shared AI assistant they can message for help with code, research, system administration, and anything else — secured with per-user authorization.

What We're Building

Explains the idea itself. Read it slowly; the later sections build on it.

A Telegram bot that:

  • Any authorized team member can DM for help — code reviews, research, shell commands, debugging
  • Runs on your server with full tool access — terminal, file editing, web search, code execution
  • Per-user sessions — each person gets their own conversation context
  • Secure by default — only approved users can interact, with two authorization methods
  • Scheduled tasks — daily standups, health checks, and reminders delivered to a team channel

---

Prerequisites

Explains the idea itself. Read it slowly; the later sections build on it.

Before starting, make sure you have:

  • Hermes Agent installed on a server or VPS (not your laptop — the bot needs to stay running). Follow the installation guide if you haven't yet.
  • A Telegram account for yourself (the bot owner)
  • An LLM provider configured — at minimum, an API key for OpenAI, Anthropic, or another supported provider in ~/.hermes/.env

---

Step 1: Create a Telegram Bot

Carries a warning. Read it before running anything here. The upstream warning appears below.

Every Telegram bot starts with @BotFather — Telegram's official bot for creating bots.

  1. Open Telegram and search for @BotFather, or go to t.me/BotFather ↗
  1. Send /newbot — BotFather will ask you two things:
  2. Display name — what users see (e.g., Team Hermes Assistant)
  3. Username — must end in bot (e.g., myteam_hermes_bot)
  1. Copy the bot token — BotFather replies with something like:
Text2 lines
   Use this token to access the HTTP API:
   7123456789:AAH1bGciOiJSUzI1NiIsInR5cCI6Ikp...

Save this token — you'll need it in the next step.

  1. Set a description (optional but recommended):
Text1 line
   /setdescription

Choose your bot, then enter something like:

Text1 line
   Team AI assistant powered by Hermes Agent. DM me for help with code, research, debugging, and more.
  1. Set bot commands (optional — gives users a command menu):
Text1 line
   /setcommands

Choose your bot, then paste:

Text5 lines
   new - Start a fresh conversation
   model - Show or change the AI model
   status - Show session info
   help - Show available commands
   stop - Stop the current task

---

Step 2: Configure the Gateway

Ordered, practical steps. Run one and confirm it worked before moving on. Commands here: hermes gateway setup.

You have two options: the interactive setup wizard (recommended) or manual configuration.

Shell1 line
hermes gateway setup

This walks you through everything with arrow-key selection. Pick Telegram, paste your bot token, and enter your user ID when prompted.

Option B: Manual Configuration

Add these lines to ~/.hermes/.env:

Shell5 lines
# Telegram bot token from BotFather
TELEGRAM_BOT_TOKEN=7123456789:AAH1bGciOiJSUzI1NiIsInR5cCI6Ikp...

# Your Telegram user ID (numeric)
TELEGRAM_ALLOWED_USERS=123456789

Finding Your User ID

Your Telegram user ID is a numeric value (not your username). To find it:

  1. Message @userinfobot ↗ on Telegram
  2. It instantly replies with your numeric user ID
  3. Copy that number into TELEGRAM_ALLOWED_USERS

---

Step 3: Start the Gateway

Ordered, practical steps. Run one and confirm it worked before moving on. Commands here: hermes gateway status, hermes gateway.

Quick Test

Run the gateway in the foreground first to make sure everything works:

Shell1 line
hermes gateway

You should see output like:

Text3 lines
[Gateway] Starting Hermes Gateway...
[Gateway] Telegram adapter connected
[Gateway] Cron scheduler started (tick every 60s)

Open Telegram, find your bot, and send it a message. If it replies, you're in business. Press Ctrl+C to stop.

Production: Install as a Service

For a persistent deployment that survives reboots:

Shell2 lines
hermes gateway install
sudo hermes gateway install --system   # Linux only: boot-time system service

This creates a background service: a user-level systemd service on Linux by default, a launchd service on macOS, or a boot-time Linux system service if you pass --system.

Shell15 lines
# Linux — manage the default user service
hermes gateway start
hermes gateway stop
hermes gateway status

# View live logs
journalctl --user -u hermes-gateway -f

# Keep running after SSH logout
sudo loginctl enable-linger $USER

# Linux servers — explicit system-service commands
sudo hermes gateway start --system
sudo hermes gateway status --system
journalctl -u hermes-gateway -f
Shell4 lines
# macOS — manage the service
hermes gateway start
hermes gateway stop
tail -f ~/.hermes/logs/gateway.log

Verify It's Running

Shell1 line
hermes gateway status

Then send a test message to your bot on Telegram. You should get a response within a few seconds.

---

Step 4: Set Up Team Access

Ordered, practical steps. Run one and confirm it worked before moving on. Commands here: hermes gateway stop, hermes pairing list.

Now let's give your teammates access. There are two approaches.

Approach A: Static Allowlist

Collect each team member's Telegram user ID (have them message @userinfobot ↗) and add them as a comma-separated list:

Shell2 lines
# In ~/.hermes/.env
TELEGRAM_ALLOWED_USERS=123456789,987654321,555555555

Restart the gateway after changes:

Shell1 line
hermes gateway stop && hermes gateway start

DM pairing is more flexible — you don't need to collect user IDs upfront. Here's how it works:

  1. Teammate DMs the bot — since they're not on the allowlist, the bot replies with a one-time pairing code:
Text2 lines
   🔐 Pairing code: XKGH5N7P
   Send this code to the bot owner for approval.
  1. Teammate sends you the code (via any channel — Slack, email, in person)
  1. You approve it on the server:
Shell1 line
   hermes pairing approve telegram XKGH5N7P
  1. They're in — the bot immediately starts responding to their messages

Managing paired users:

Shell8 lines
# See all pending and approved users
hermes pairing list

# Revoke someone's access
hermes pairing revoke telegram 987654321

# Clear expired pending codes
hermes pairing clear-pending

Security Considerations

  • Never set GATEWAY_ALLOW_ALL_USERS=true on a bot with terminal access — anyone who finds your bot could run commands on your server
  • Pairing codes expire after 1 hour and use cryptographic randomness
  • Rate limiting prevents brute-force attacks: 1 request per user per 10 minutes, max 3 pending codes per platform
  • After 5 failed approval attempts, the platform enters a 1-hour lockout
  • All pairing data is stored with chmod 0600 permissions

---

Step 5: Configure the Bot

Ordered, practical steps. Run one and confirm it worked before moving on.

Set a Home Channel

A home channel is where the bot delivers cron job results and proactive messages. Without one, scheduled tasks have nowhere to send output.

Option 1: Use the /sethome command in any Telegram group or chat where the bot is a member.

Option 2: Set it manually in ~/.hermes/.env:

Shell2 lines
TELEGRAM_HOME_CHANNEL=-1001234567890
TELEGRAM_HOME_CHANNEL_NAME="Team Updates"

To find a channel ID, add @userinfobot ↗ to the group — it will report the group's chat ID.

Configure Tool Progress Display

Control how much detail the bot shows when using tools. In ~/.hermes/config.yaml:

YAML2 lines
display:
  tool_progress: new    # off | new | all | verbose
ModeWhat You See
offClean responses only — no tool activity
newBrief status for each new tool call (recommended for messaging)
allEvery tool call with details
verboseFull tool output including command results

Users can also change this per-session with the /verbose command in chat.

Set Up a Personality with SOUL.md

Customize how the bot communicates by editing ~/.hermes/SOUL.md:

For a full guide, see Use SOUL.md with Hermes.

MARKDOWN5 lines
# Soul
You are a helpful team assistant. Be concise and technical.
Use code blocks for any code. Skip pleasantries — the team
values directness. When debugging, always ask for error logs
before guessing at solutions.

Add Project Context

If your team works on specific projects, create context files so the bot knows your stack:

MARKDOWN7 lines

# Team Context
- We use Python 3.12 with FastAPI and SQLAlchemy
- Frontend is React with TypeScript
- CI/CD runs on GitHub Actions
- Production deploys to AWS ECS
- Always suggest writing tests for new code

---

Step 6: Set Up Scheduled Tasks

Carries a warning. Read it before running anything here. Commands here: hermes cron list, hermes cron status. The upstream warning appears below.

With the gateway running, you can schedule recurring tasks that deliver results to your team channel.

Daily Standup Summary

Message the bot on Telegram:

Text6 lines
Every weekday at 9am, check the GitHub repository at
github.com/myorg/myproject for:
1. Pull requests opened/merged in the last 24 hours
2. Issues created or closed
3. Any CI/CD failures on the main branch
Format as a brief standup-style summary.

The agent creates a cron job automatically and delivers results to the chat where you asked (or the home channel).

Server Health Check

Text3 lines
Every 6 hours, check disk usage with 'df -h', memory with 'free -h',
and Docker container status with 'docker ps'. Report anything unusual —
partitions above 80%, containers that have restarted, or high memory usage.

Managing Scheduled Tasks

Shell7 lines
# From the CLI
hermes cron list          # View all scheduled jobs
hermes cron status        # Check if scheduler is running

# From Telegram chat
/cron list                # View jobs
/cron remove <job_id>     # Remove a job

---

Production Tips

A lookup table. Do not read it all; find the row that applies to you. Commands here: hermes gateway start, hermes gateway status.

Use Docker for Safety

On a shared team bot, use Docker as the terminal backend so agent commands run in a container instead of on your host:

Shell3 lines
# In ~/.hermes/.env
TERMINAL_ENV=docker
TERMINAL_DOCKER_IMAGE=nikolaik/python-nodejs:python3.11-nodejs20

Or in ~/.hermes/config.yaml:

YAML5 lines
terminal:
  backend: docker
  container_cpu: 1
  container_memory: 5120
  container_persistent: true

This way, even if someone asks the bot to run something destructive, your host system is protected.

Monitor the Gateway

Shell8 lines
# Check if the gateway is running
hermes gateway status

# Watch live logs (Linux)
journalctl --user -u hermes-gateway -f

# Watch live logs (macOS)
tail -f ~/.hermes/logs/gateway.log

Keep Hermes Updated

From Telegram, send /update to the bot — it will pull the latest version and restart. Or from the server:

Shell2 lines
hermes update
hermes gateway stop && hermes gateway start

Log Locations

WhatLocation
Gateway logsjournalctl --user -u hermes-gateway (Linux) or ~/.hermes/logs/gateway.log (macOS)
Cron job output~/.hermes/cron/output/{job_id}/{timestamp}.md
Cron job definitions~/.hermes/cron/jobs.json
Pairing data~/.hermes/pairing/
Session history~/.hermes/sessions/

---

Going Further

Explains the idea itself. Read it slowly; the later sections build on it.

You've got a working team Telegram assistant. Here are some next steps:

  • Security Guide — deep dive into authorization, container isolation, and command approval
  • Messaging Gateway — full reference for gateway architecture, session management, and chat commands
  • Telegram Setup — platform-specific details including voice messages and TTS
  • Scheduled Tasks — advanced cron scheduling with delivery options and cron expressions
  • Context Files — AGENTS.md, SOUL.md, and .cursorrules for project knowledge
  • Personality — built-in personality presets and custom persona definitions
  • Add more platforms — the same gateway can simultaneously run Discord, Slack, and WhatsApp

---

Questions or issues? Open an issue on GitHub — contributions are welcome.

Knowledge check

5 questions answered by this page alone.

Every option is a real identifier from the Hermes documentation. The wrong ones are real too, just from other pages.

1. According to this lesson, which command does “View all scheduled jobs”?
2. According to this lesson, which command does “Check if scheduler is running”?
3. In this lesson's table, what is the “What You See” for “verbose”?
4. Which of these environment variables actually appears in this lesson?
5. Which warning does the source state in this lesson?