agent-browser
Browse the web for any task — research topics, read articles, interact with web apps, fill forms, take screenshots, extract data, and test web pages. Use…
Add Telegram as a channel. Can replace WhatsApp entirely or run alongside it. Also configurable as a control-only channel (triggers actions) or passive channel (receives notifications only).
$ npx -y skills add sbusso/claudeclaw --skill add-telegram --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/add-telegramContext preview
The summary Claude sees to decide when to auto-load this skill.
Add Telegram as a channel. Can replace WhatsApp entirely or run alongside it. Also configurable as a control-only channel (triggers actions) or passive channel (receives notifications only).
name: add-telegram description: Add Telegram as a channel. Can replace WhatsApp entirely or run alongside it. Also configurable as a control-only channel (triggers actions) or passive channel (receives notifications only).
This skill adds Telegram support to ClaudeClaw, then walks through interactive setup.
Check if `src/channels/telegram.ts` exists. If it does, skip to Phase 3 (Setup). The code changes are already in place.
Use `AskUserQuestion` to collect configuration:
AskUserQuestion: Do you have a Telegram bot token, or do you need to create one?
If they have one, collect it now. If not, we'll create one in Phase 3.
git remote -v
If `telegram` is missing, add it:
git remote add telegram https://github.com/qwibitai/claudeclaw-telegram.git
git fetch telegram main
git merge telegram/main || {
git checkout --theirs package-lock.json
git add package-lock.json
git merge --continue
}This merges in:
If the merge reports conflicts, resolve them by reading the conflicted files and understanding the intent of both sides.
npm install npm run build npx vitest run src/channels/telegram.test.ts
All tests must pass (including the new Telegram tests) and build must be clean before proceeding.
If the user doesn't have a bot token, tell them:
> I need you to create a Telegram bot: > > 1. Open Telegram and search for `@BotFather` > 2. Send `/newbot` and follow prompts: > - Bot name: Something friendly (e.g., "Andy Assistant") > - Bot username: Must end with "bot" (e.g., "andy_ai_bot") > 3. Copy the bot token (looks like `123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11`)
Wait for the user to provide the token.
Add to `.env`:
TELEGRAM_BOT_TOKEN=<their-token>
Channels auto-enable when their credentials are present — no extra configuration needed.
Sync to container environment:
mkdir -p data/env && cp .env data/env/env
The container reads environment from `data/env/env`, not `.env` directly.
Tell the user:
> **Important for group chats**: By default, Telegram bots only see @mentions and commands in groups. To let the bot see all messages: > > 1. Open Telegram and search for `@BotFather` > 2. Send `/mybots` and select your bot > 3. Go to **Bot Settings** > **Group Privacy** > **Turn off** > > This is optional if you only want trigger-based responses via @mentioning the bot.
> **Service name:** Derived from the directory name: `com.claudeclaw.<dirname>` (macOS) / `claudeclaw-<dirname>` (Linux). For example, if cwd is `my-assistant`, the service is `com.claudeclaw.my-assistant`. Determine the correct service name before running service commands below.
npm run build launchctl kickstart -k gui/$(id -u)/com.claudeclaw # macOS # Linux: systemctl --user restart claudeclaw
Tell the user:
> 1. Open your bot in Telegram (search for its username) > 2. Send `/chatid` — it will reply with the chat ID > 3. For groups: add the bot to the group first, then send `/chatid` in the group
Wait for the user to provide the chat ID (format: `tg:123456789` or `tg:-1001234567890`).
The chat ID, name, and folder name are needed. Use `npx tsx setup/index.ts --step register` with the appropriate flags.
For a main chat (responds to all messages):
npx tsx setup/index.ts --step register -- --jid "tg:<chat-id>" --name "<chat-name>" --folder "telegram_main" --trigger "@${ASSISTANT_NAME}" --channel telegram --no-trigger-required --is-mainFor additional chats (trigger-only):
npx tsx setup/index.ts --step register -- --jid "tg:<chat-id>" --name "<chat-name>" --folder "telegram_<group-name>" --trigger "@${ASSISTANT_NAME}" --channel telegramTell the user:
> Send a message to your registered Telegram chat: > - For main chat: Any message works > - For non-main: `@Andy hello` or @mention the bot > > The bot should respond within a few seconds.
tail -f logs/claudeclaw.log
Check: 1. `TELEGRAM_BOT_TOKEN` is set in `.env` AND synced to `data/env/env` 2. Chat is registered in SQLite (check with: `sqlite3 store/messages.db "SELECT * FROM registered_groups WHERE jid LIKE 'tg:%'"`) 3. For non-main chats: message includes trigger pattern 4. Service is running: `launchctl list | grep claudeclaw` (macOS) or `systemctl --user status claudeclaw` (Linux)
Group Privacy is enabled (default). Fix: 1. `@BotFather` > `/mybots` > select bot > **Bot Settings** > **Group Privacy** > **Turn off** 2. Remove and re-add the bot to the group (required for the change to take effect)
If `/chatid` doesn't work:
If running `npm run dev` while the service is active:
# macOS: launchctl unload ~/Library/LaunchAgents/com.claudeclaw.plist npm run dev # When done testing: launchctl load ~/Library/LaunchAgents/com.claudeclaw.plist # Linux: # systemctl --user stop claudeclaw # npm run dev # systemctl --user start claudeclaw
Repo: sbusso/claudeclaw
Browse the web for any task — research topics, read articles, interact with web apps, fill forms, take screenshots, extract data, and test web pages. Use…
Add /compact command for manual context compaction. Solves context rot in long sessions by forwarding the SDK's built-in /compact slash command. Main-group or…
Add Gmail integration to ClaudeClaw. Can be configured as a tool (agent reads/sends emails when triggered from WhatsApp) or as a full channel (emails can…
Add image vision to ClaudeClaw agents. Resizes and processes WhatsApp image attachments, then sends them to Claude as multimodal content blocks.
Add Ollama MCP server so the container agent can call local models for cheaper/faster tasks like summarization, translation, or general queries.