Back to Use Cases
📖Use CaseIntermediate

Telegram Project Manager

Turn Telegram into a full-featured project management hub with an AI agent that creates and tracks tasks, enforces deadlines, generates status reports, coordinates team workflows, and runs sprint ceremonies — all from the chat interface your team already uses every day.

Connected Apps & Services

Telegram

Telegram

Jira

Jira

Slack

Slack

Why Telegram as a Project Hub

With over 800 million monthly active users in 2026, Telegram has evolved far beyond a messaging app. Its native support for topic-based group threads, large file sharing, bots with inline keyboards, and the new checklist feature make it a natural home for project coordination. Teams already discuss work in Telegram — the friction comes from context-switching to a separate PM tool to log the outcomes.

An OpenClaw agent deployed as a Telegram bot eliminates that gap. Instead of copying tasks from chat into Jira or Notion, your team speaks naturally — "create a task for Sarah to finalize the API docs by Friday" — and the agent handles the rest: parsing the assignment, setting the deadline, filing it in your task store, and reminding the right people at the right time.

This use case walks through the complete architecture: from BotFather setup and OpenClaw Telegram channel configuration to a production BOOTSTRAP.md that turns your agent into an opinionated project manager with task CRUD, deadline enforcement, sprint planning, and automated status reporting.


Architecture Overview

The system has three layers:

  • Telegram Bot (Channel Layer) — OpenClaw connects to the Telegram Bot API via grammY in long-polling mode. The bot lives in your team's project group, listens for mentions or commands, and relays messages to the agent.
  • OpenClaw Agent (Intelligence Layer) — The agent interprets natural language, maintains a JSON task store on disk, and uses cron jobs for scheduled actions like daily standups, deadline reminders, and sprint reports.
  • External Integrations (Sync Layer) — Optional connections to Jira (issue tracking), Notion (documentation and wiki), and Slack (cross-posting summaries to stakeholders who are not in the Telegram group).
Telegram Group
  ├─ @PMBot mentioned → OpenClaw Gateway
  │                        ├─ Agent processes message
  │                        ├─ Reads/writes tasks.json
  │                        ├─ Cron: daily standup, deadline alerts
  │                        └─ Optional: sync to Jira/Notion/Slack
  └─ Bot replies with formatted updates

All task data lives in ~/.openclaw/agents/default/tasks.json on the agent's persistent volume. This keeps the system self-contained — no external database required for small-to-medium teams (up to ~200 active tasks). For larger deployments, the agent can use a SQLite database or sync to an external system.


Step 1: Create the Telegram Bot

Before configuring OpenClaw, you need a bot token from Telegram's BotFather.

  • Open Telegram and search for @BotFather (verify the blue checkmark).
  • Send /newbot and follow the prompts:
- Name: Your project name, e.g., "Acme PM Bot" - Username: Must end in bot, e.g., acme_pm_bot
  • Copy the bot token (format: 123456789:ABCdef...).
  • Configure the bot profile:
- /setdescription — "AI project manager for the Acme team. Mention me to create tasks, check status, or run standups." - /setabouttext — "Powered by OpenClaw + Donely" - /setuserpic — Upload your team or project logo. - /setprivacy — Select Disable so the bot can read all group messages (required for natural language task parsing without explicit mentions). - /setjoingroups — Select Enable to allow adding the bot to groups.
Privacy mode note: If you prefer the bot only responds when mentioned, leave privacy mode enabled and set requireMention: true in the OpenClaw config. This is recommended for busy groups where not every message is project-related.

Step 2: Configure the OpenClaw Telegram Channel

Add the bot token to your OpenClaw gateway configuration:

JSON
// ~/.openclaw/openclaw.json
{
  channels: {
    telegram: {
      enabled: true,
      botToken: "123456789:ABCdef...",
      dmPolicy: "allowlist",
      allowFrom: ["YOUR_TELEGRAM_USER_ID"],
      groups: {
        "-1001234567890": {
          groupPolicy: "open",
          requireMention: true
        }
      }
    }
  }
}
Key configuration choices:
  • groupPolicy: "open" — Any group member can interact with the bot. Use "allowlist" with allowFrom IDs if you want only managers to create tasks.
  • requireMention: true — The bot only responds when mentioned with @acme_pm_bot. Set to false for a more ambient experience where the agent observes all messages and proactively identifies action items.
  • dmPolicy: "allowlist" — Restrict DM access to admins who need private reporting. Add IDs to allowFrom.

Add the bot to your project group and start the gateway:

Bash
openclaw gateway

The bot should appear online in the group. Test with a mention: @acme_pm_bot hello and verify the agent responds.


Step 3: The BOOTSTRAP.md — Project Manager Agent Persona

The BOOTSTRAP.md file is the agent's system prompt. It defines how the agent behaves, what tools it uses, and the structure of its task management system. Place this at ~/.openclaw/agents/default/BOOTSTRAP.md.

Markdown
# Project Manager Agent

You are a project manager bot for the team. You manage tasks, deadlines, sprints, and status reporting through Telegram.

Task Storage

Maintain all tasks in ~/tasks.json with this schema:

{ "tasks": [ { "id": "TASK-001", "title": "Finalize API documentation", "description": "Complete the REST API reference for v2 endpoints", "assignee": "Sarah", "status": "in-progress", "priority": "high", "created": "2026-03-20T10:00:00Z", "deadline": "2026-03-22T17:00:00Z", "sprint": "Sprint 12", "tags": ["docs", "api"], "comments": [ { "author": "Alex", "text": "Include auth examples", "at": "2026-03-20T14:30:00Z" } ] } ], "sprints": [ { "name": "Sprint 12", "start": "2026-03-18", "end": "2026-03-29", "goal": "Ship v2 API and documentation" } ], "nextId": 2 }

Task ID Format

Auto-increment: TASK-001, TASK-002, etc. Never reuse IDs.

Operations

Creating Tasks

When someone says something like "create a task for Sarah to finalize the API docs by Friday":
  • Parse: assignee (Sarah), title (finalize API docs), deadline (next Friday)
  • Assign the next available ID
  • Set status to "todo", priority to "medium" (unless specified)
  • Add to current sprint if one is active
  • Confirm with a formatted summary

Updating Tasks

Support natural language: "mark TASK-001 as done", "change priority of TASK-003 to high", "reassign TASK-005 to Mike"

Querying Tasks

Respond to: "what's on Sarah's plate?", "show overdue tasks", "sprint status", "what's due this week?"

Deleting Tasks

Only with explicit request: "delete TASK-007". Confirm before deleting.

Status Values

todo → in-progress → review → done (also: blocked, cancelled)

Priority Levels

critical > high > medium > low

Response Formatting

Use Telegram-compatible formatting:
  • Bold for task IDs and titles
  • Code blocks for data summaries
  • Bullet lists for task listings
  • Include emoji sparingly for status: ✅ done, 🔄 in-progress, 📋 todo, 🚫 blocked, ⚠️ overdue

Daily Standup (Cron)

Every weekday at 9:00 AM, post a standup summary:
  • Tasks completed yesterday
  • Tasks in progress today
  • Blocked items
  • Approaching deadlines (within 48 hours)

Deadline Enforcement

When checking tasks, flag any task past its deadline as overdue and notify the assignee.

Sprint Management

Support: "start sprint 13 from March 30 to April 11, goal: Launch beta" At sprint end, generate a retrospective summary with velocity metrics.

Step 4: Set Up Cron Jobs for Automated Reporting

The agent's real power comes from scheduled automation via OpenClaw's built-in cron system. These jobs persist across restarts and run inside the gateway.

Daily Standup Report

Bash
openclaw cron add \
  --name "Daily Standup" \
  --cron "0 9   1-5" \
  --tz "America/New_York" \
  --session isolated \
  --message "Generate the daily standup report. Read tasks.json, identify what was completed yesterday, what is in progress today, any blocked items, and deadlines approaching within 48 hours. Post a formatted summary." \
  --announce \
  --channel telegram \
  --to "group:-1001234567890"

This fires every weekday at 9:00 AM Eastern. The agent reads the task store, compiles the report, and posts it directly to the project group.

Deadline Reminder (Twice Daily)

Bash
openclaw cron add \
  --name "Deadline Check" \
  --cron "0 10,16   1-5" \
  --tz "America/New_York" \
  --session isolated \
  --message "Check tasks.json for any tasks with deadlines within the next 24 hours or already overdue. For each, mention the assignee and the deadline. If nothing is due, respond with a brief all-clear." \
  --announce \
  --channel telegram \
  --to "group:-1001234567890"

Weekly Sprint Summary (Friday Afternoon)

Bash
openclaw cron add \
  --name "Sprint Weekly Summary" \
  --cron "0 16   5" \
  --tz "America/New_York" \
  --session "session:sprint-reports" \
  --message "Generate the weekly sprint progress report. Include: tasks completed this week, tasks remaining, sprint burndown percentage, velocity compared to last week, and any risks to the sprint goal. Use the persistent session context to compare with previous reports." \
  --announce \
  --channel telegram \
  --to "group:-1001234567890"

Note the use of session:sprint-reports — a persistent named session that maintains context across runs, so the agent can compare this week's velocity to last week's.


Capabilities Deep Dive

Task CRUD

The agent handles full task lifecycle through natural language:

ActionExample MessageWhat Happens
Create"@bot create task: Design login page, assign to Mike, due Tuesday, high priority"Parses fields, assigns TASK-XXX, adds to current sprint, confirms
Read"@bot show all tasks for Sarah"Filters tasks.json by assignee, returns formatted list
Update"@bot mark TASK-012 as done"Updates status field, logs completion timestamp
Delete"@bot delete TASK-007"Asks for confirmation, then removes from store
Bulk"@bot move all Sarah's tasks to Mike"Batch reassignment with summary of affected tasks

Deadline Tracking and Enforcement

The agent maintains deadline awareness through both reactive queries and proactive cron-based alerts:

  • Reactive: Ask "what's overdue?" or "what's due this week?" at any time
  • Proactive: The twice-daily deadline check cron job surfaces approaching and overdue items automatically
  • Escalation: Tasks more than 48 hours overdue are flagged as critical in the next standup with a direct mention of the assignee
  • Timezone handling: Deadlines are stored in UTC internally; the agent converts to the team's timezone for display

Status Reports and Analytics

Beyond the automated daily standup and weekly summary, the agent responds to ad-hoc report requests:

  • "@bot sprint burndown" — Percentage of sprint tasks completed vs. remaining time
  • "@bot team workload" — Task count and priority distribution per team member
  • "@bot velocity report" — Tasks completed per sprint over the last 4 sprints
  • "@bot blocked items" — All tasks with status "blocked" and their blockers

Team Coordination

Telegram group dynamics map naturally to project coordination:

  • Assignments: "@bot assign TASK-015 to Sarah" notifies Sarah in the group
  • Handoffs: "@bot reassign TASK-015 from Sarah to Mike with note: Sarah is on PTO" logs the comment and notifies both parties
  • Mentions: The agent uses Telegram usernames when available for direct notifications
  • Threads: In groups with topics enabled, the agent can post sprint reports to a dedicated "Reports" topic and task updates to a "Tasks" topic

Sprint Planning

Full agile sprint lifecycle support:

  • Sprint Creation: "@bot start Sprint 13, March 30 to April 11, goal: Launch beta"
  • Backlog Grooming: "@bot show unassigned tasks" or "@bot show tasks not in any sprint"
  • Sprint Loading: "@bot add TASK-020 through TASK-025 to Sprint 13"
  • Mid-Sprint: Daily standups and deadline tracking run automatically
  • Sprint Review: "@bot sprint review" generates a completion report with metrics
  • Retrospective: "@bot sprint retro" summarizes what went well (completed on time), what slipped (overdue items), and velocity trends

Example 1: Startup Engineering Team

A 6-person startup team uses a single Telegram group for all engineering discussion. They add the PM bot with requireMention: true so it only activates on @pm_bot. Daily workflow:

  • 9:00 AM: Bot posts standup summary automatically
  • Throughout the day: Engineers create tasks inline — "@pm_bot task: Fix payment webhook timeout, high priority, due tomorrow"
  • 4:00 PM: Bot posts deadline reminders for anything due within 24 hours
  • Friday 4:00 PM: Bot posts the weekly sprint summary
Sprint planning (Monday morning):
Engineer: @pm_bot start Sprint 14, April 1 to April 12, goal: Payment v2 launch
Bot: ✅ Sprint 14 created (April 1–12). Goal: Payment v2 launch. 
     12 unassigned backlog tasks available. Want me to list them?

Engineer: @pm_bot show backlog Bot: 📋 Unassigned tasks (12): • TASK-031: Stripe webhook retry logic [high] • TASK-032: Payment confirmation email [medium] • TASK-033: Refund flow UI [medium] ...

Engineer: @pm_bot add TASK-031 through TASK-036 to Sprint 14, assign 031-033 to Sarah, 034-036 to Mike Bot: ✅ 6 tasks added to Sprint 14. Sarah: TASK-031, TASK-032, TASK-033 Mike: TASK-034, TASK-035, TASK-036


Example 2: Agency Managing Multiple Client Projects

A digital agency creates separate Telegram groups per client project, each with its own OpenClaw agent instance on Donely. The agency lead gets DM access to all bots for cross-project reporting. Cross-project check-in via DM:

Manager (DM): Show me all overdue tasks
Bot: ⚠️ 3 overdue tasks:
     • TASK-089: Homepage redesign mockup — 2 days overdue (assigned: Jake)
     • TASK-091: SEO audit report — 1 day overdue (assigned: Lisa)
     • TASK-094: Client feedback integration — 4 hours overdue (assigned: Tom)

Manager (DM): Send a reminder to the group about TASK-089 Bot: ✅ Posted to group: "⚠️ TASK-089 (Homepage redesign mockup) is 2 days overdue. @jake — please update status or flag blockers."

Integration with Jira: The agent can sync task creation to Jira via the OpenClaw HTTP tool, creating a corresponding Jira issue for tasks tagged with [jira]. Completions in either system are synced bi-directionally via cron polling.

Example 3: Open Source Project with Community Contributors

An open source project uses a public Telegram group with the PM bot in requireMention: true mode. The bot has groupPolicy: "allowlist" with maintainer IDs only, so community members can see reports but only maintainers can create or modify tasks. Release planning:

Maintainer: @pm_bot create milestone "v3.0 Release" with deadline April 15
Bot: 🎯 Milestone created: v3.0 Release (due April 15)
     0 tasks linked. Add tasks with: @pm_bot add TASK-XXX to milestone v3.0

Maintainer: @pm_bot link all tasks tagged "v3" to milestone v3.0 Bot: ✅ 8 tasks linked to v3.0 Release: • 3 todo, 4 in-progress, 1 in review • Earliest deadline: April 5 (TASK-102: Migration guide) • Latest deadline: April 14 (TASK-108: Release notes)

Community visibility: The weekly sprint summary is posted publicly so contributors can see priorities and pick up unassigned tasks.

Best Practices

1. Start with requireMention Enabled

In active groups, ambient mode (no mention required) generates noise. Start with requireMention: true and only switch to ambient mode if the group is exclusively project-focused.

2. Use Isolated Sessions for Cron Jobs

All scheduled reports should use --session isolated or named sessions. This prevents cron job context from polluting the main conversation history and keeps token usage efficient.

3. Set Realistic Cron Schedules

Avoid scheduling too many automated reports. A good default cadence:
  • Daily standup: Once per weekday morning
  • Deadline check: Twice per workday (morning and afternoon)
  • Sprint summary: Once per week (Friday)
  • Retrospective: Once per sprint (sprint end date)

4. Use Named Sessions for Trend Analysis

The session:sprint-reports pattern lets the agent build context over time. Weekly summaries in a persistent session enable the agent to say "velocity is up 15% compared to last week" without you having to provide historical data.

5. Keep the Task Store Lean

Periodically archive completed tasks. Add a monthly cron job that moves tasks with status "done" older than 30 days into an archive.json file, keeping the active tasks.json fast to parse.

6. Set Group Admin Status for the Bot

Making the bot a group admin ensures it receives all messages regardless of Telegram's privacy mode setting. This is required if you use ambient task detection (parsing action items from regular conversation).

7. Pair with Notion for Documentation

Use the agent for real-time task management in Telegram and sync sprint summaries, retrospectives, and project documentation to Notion for long-term reference. The Notion API integration can be triggered via cron.

8. Establish a Tagging Convention

Define tags upfront (e.g., frontend, backend, docs, bug, feature) and reference them in the BOOTSTRAP.md. Consistent tagging enables powerful queries like "show all frontend bugs in Sprint 14."

Troubleshooting

Bot Not Responding in Group

  • Check privacy mode: Send /setprivacy to BotFather. If enabled, the bot only sees messages that mention it or are replies to its messages. Disable privacy mode, then remove and re-add the bot to the group for the change to take effect.
  • Verify group ID: The group ID in your OpenClaw config must match exactly. Use curl "https://api.telegram.org/bot/getUpdates" after sending a message in the group to find the correct chat ID (negative number for groups).
  • Check groupPolicy: If set to "allowlist", verify the sender's numeric Telegram user ID is in groupAllowFrom or the per-group allowFrom array.

Bot Responds in DM but Not Group

  • The groups config block may be missing or misconfigured. Ensure the group's chat ID (including the -100 prefix for supergroups) is listed under channels.telegram.groups.
  • If using requireMention: true, make sure you are mentioning the exact bot username.

Cron Jobs Not Firing

  • Run openclaw cron list to verify jobs are registered and enabled.
  • Check timezone: If you specified --tz "America/New_York" but the host clock is UTC, the cron will still fire at the correct local time — but verify the timezone string is a valid IANA timezone.
  • For isolated jobs, check openclaw cron runs --id to see execution history and any errors.
  • Cron jobs persist in ~/.openclaw/cron/jobs.json. If the gateway restarts, jobs reload automatically.

Tasks Not Persisting

  • Verify the agent has write access to its working directory. On Donely, the persistent volume is mounted at /data with HOME=/data.
  • Check disk space: df -h /data. If the volume is full, the agent cannot write task updates.
  • If tasks.json becomes corrupted, the agent should detect the parse error and create a backup before reinitializing.

Duplicate Messages

  • Telegram can retry webhook deliveries (if using webhook mode) or the bot may process the same update twice. OpenClaw's gateway deduplicates by update ID, but if you see duplicates, check the gateway logs: openclaw logs --follow.

Rate Limiting

  • Telegram limits bots to ~30 messages per second to the same group. For large teams with many task updates, batch responses (e.g., list 10 tasks in one message rather than 10 separate messages).
  • The BOOTSTRAP.md should instruct the agent to consolidate related updates into single messages.

Agent Losing Context in Long Conversations

  • Telegram groups generate high message volume. Use requireMention: true to filter only relevant interactions.
  • For the task store, the agent reads tasks.json on each interaction rather than relying on conversation memory, making it stateless and reliable regardless of context window limits.