Skip to main content
observe lets your bot listen to a group without answering — every message lands in the transcript, but the agent only runs when it’s @mentioned.

Quick Start

1

Simple Usage

Write the agent that answers when addressed.
Behind the scenes: run this agent through the Telegram, Discord or Slack bot with group_policy: observe.
2

Gateway YAML (the real switch)

group_policy: observe is the whole change. Add session_scope: per_chat for shared group memory.

How It Works

Unmentioned messages are recorded as passive user turns; the agent only runs on an @mention and sees the full recent conversation.

Policy Options

Every group_policy value and when to pick it.
Reply-to-bot works on both branches: under mention_only and observe, tapping Reply on the bot’s message admits the follow-up without re-typing @bot. See Implicit Mentions to enable quote/thread signals or turn this off.

Interaction Flow

What the group sees versus what the transcript actually holds under observe + per_chat.
The bot stayed silent for the first two messages but still captured them, so the @mention answers with full awareness.

Compatibility

Telegram, Discord and Slack honour observe today — they share one group-admission decision, so the same group_policy behaves identically on all three. The YAML above uses telegram:; discord: and slack: channel entries take the same keys.

Reply-to-bot on Discord and Slack

Discord: using Discord’s native Reply on one of the bot’s own messages counts as addressing the bot. Slack: a reply posted in a thread whose parent message was posted by the bot counts as addressing the bot. Top-level channel messages, and threads started under someone else’s message, do not count.

Best Practices

Without per_chat, passive turns are keyed under each individual sender’s own session — useful for solo group DMs but not shared. Add session_scope: per_chat so every message lands on the shared per-chat transcript that a later @mention reads from.
observe records unmentioned messages without running the agent — no LLM tokens spent, no risk of an accidental reply. respond_all + NO_REPLY runs the agent on every message and then chooses silence, which is more expensive and less safe.
DMs always run the agent regardless of group_policy. observe only changes how unmentioned group messages are handled.
Every unmentioned message is stored. In busy or sensitive channels, lower max_history or enable compaction to summarise older turns.

Per-Chat Session Scope

Share one transcript across a group with sender attribution

Bot Intentional Silence

Let the agent choose not to reply with NO_REPLY