Reminders and a to-do list you text to nanobot on Telegram

Connect nanobot to a private Telegram bot, then use it for one-off reminders, recurring nudges and a to-do file it keeps for you, with a weekly review.

· ranx.cloud

Illustration of a small brass alarm clock standing on a paper note on a wooden desk, next to a checked to-do list

This guide is for one person who wants to capture tasks and reminders from their phone without opening another app. You end up with a private Telegram bot connected to nanobot that answers only you, sets one-time and recurring reminders when you ask in plain language, keeps a to-do list in a file you can read back, and sends you a short review of that list every Sunday evening.

Everything is done in the nanobot WebUI and in Telegram. Labels and behaviour below were checked against nanobot v0.4.0 (released 28 October 2026) and its chat apps and automations docs.

What you need

  • A running nanobot with a model that replies in the WebUI. If you haven't set one up, open Settings → Models, choose New preset, pick a Provider (or Add provider and paste its API key), choose a model and Save. A small model is enough for this job; see the budget guide.
  • Telegram on your phone.

Step 1: Create the bot and connect it

  1. In Telegram, open @BotFather and send /newbot. Give it a display name, then a username ending in bot.
  2. BotFather replies with a token like 123456789:ABCdefGHIjklMNOpqrSTUvwxYZ. Copy it. Anyone with this token controls the bot.
  3. Message @userinfobot to get your numeric Telegram user ID.
  4. In the nanobot WebUI, open Channels and select Telegram.
  5. Paste the token into Bot token.
  6. Put your numeric ID into Allowed users. nanobot also accepts your @username here, but the ID can't be changed by you or anyone else, so prefer it.
  7. Leave Group rules on Mentions only. This bot is for a private chat.
  8. Choose Enable channel, then Restart nanobot when the page asks for it. Channel changes only take effect after a restart.

Telegram runs in long-polling mode by default: nanobot asks Telegram for new messages over an outbound connection, so the bot works without any public webhook address.

Send the bot hi. You should get a normal reply.

If you left Allowed users empty instead, nanobot runs in pairing mode: your first message gets a code like ABCD-EFGH, valid for 10 minutes. Approve it in the WebUI's Pair account prompt, or type /pairing approve ABCD-EFGH in a WebUI chat, then message the bot again. Never put * in Allowed users: that lets anyone who finds the bot use your agent, your tools and your API key.

Step 2: Set your timezone

Reminders are only useful at the right hour. nanobot reads "tomorrow at 9" in its runtime timezone, and a cron schedule without an explicit zone uses that same default.

Open Settings → System and look at Timezone. With System timezone on, nanobot uses the server's zone, which on a cloud host is often UTC. If it shows UTC or the wrong city, turn System timezone off, pick your zone (for example Europe/Istanbul), and restart when prompted.

Then send the bot:

What time and date is it for you right now?

The answer should match your phone.

Step 3: One-off and recurring reminders

nanobot schedules work with its cron tool. You don't call it yourself; you ask, from the chat where the reminder should arrive. A job created in the Telegram chat replies in that Telegram chat.

Remind me tomorrow at 8:30 to call the dentist.
In 40 minutes, remind me to take the laundry out.
Every weekday at 17:45, remind me to write tomorrow's top three tasks.

The tool supports three kinds of schedule (cron skill):

You say What nanobot stores
"tomorrow at 8:30" a one-time at job, deleted after it runs
"every 20 minutes" an interval, every_seconds: 1200
"weekdays at 17:45" a cron expression, 45 17 * * 1-5, with your timezone

The bot confirms with the job name and ID. To see what's scheduled, ask "list my reminders", or open Automations in the WebUI. My tasks shows each job with its next run, Calendar shows them on a month view, and one-time jobs are marked as removed after running. From there you can run a job now, pause it, rename it or delete it.

Changing a reminder is also a chat message: "move the 17:45 reminder to 18:00", "pause the weekday reminder until I say so", "show the last five runs of the weekday reminder". Since v0.4.0 the tool edits jobs in place, so the ID and run history stay.

Phrase reminders as what you want to hear, not as instructions to message you. "Remind me to call the dentist" is enough; the reply goes to the saved chat automatically.

Step 4: A to-do list in a file

Reminders cover things with a time. Most tasks don't have one. Give nanobot a single file for them so the list survives restarts and new conversations, and so you can read it without trusting the model's recollection.

Send this once:

Keep my to-do list in todo.md in your workspace. Rules:
- When I send a message starting with "todo:", add it as a new line
  "- [ ] <task>" under "## Open", with today's date in brackets.
- When I say "done <words>", find the matching open item, mark it "- [x]",
  and move it under "## Done".
- When I say "list", reply with the open items, numbered, nothing else.
- Never delete items unless I ask. Confirm each change in one short line.
Create the file now if it doesn't exist.

Then use it from Telegram:

todo: renew passport photos
todo: send Ayse the lease PDF
list
done passport

These rules live in this chat's history, so they last until the conversation is compacted. To make them stick for good, ask: "Save the todo.md rules to your long-term memory." The memory guide explains how to check that it actually did.

You can open the file in the WebUI: when the agent edits it, the activity shows the file path, and selecting the filename opens a read-only preview.

Step 5: A weekly review

Now combine the two. In the Telegram chat:

Every Sunday at 19:00, read todo.md and send me:
1. Open items older than 7 days, oldest first, at most 5.
2. How many items I closed this week.
3. One line suggesting which single item to do Monday morning.
If there are no open items, reply "List is empty" and nothing else.

Open Automations, find the new job, and use run now to test it instead of waiting for Sunday. Check that the message lands in Telegram, not only in the WebUI.

What it costs

nanobot adds nothing; you pay your model provider. A reminder is one agent turn in your Telegram chat, which includes the system prompt, tool definitions and that chat's recent history. As a working assumption take 12,000 input and 150 output tokens per reminder; replace it with your real numbers from Settings → Overview → Token usage → View details, where Usage by source splits Chat from Automations.

With OpenRouter list prices in November 2026, no cache discounts:

DeepSeek V4.1 Flash ($0.049 in / $0.54 out per million tokens):
  12,000 × 0.049 / 1e6 = $0.00059
     150 × 0.54  / 1e6 = $0.00008
  ≈ $0.0007 per reminder → 60 reminders/month ≈ $0.04

Claude Haiku 5.5 ($0.10 / $0.50):
  12,000 × 0.10 / 1e6 + 150 × 0.50 / 1e6 ≈ $0.0013 → 60/month ≈ $0.08

The weekly review reads a file, so count it at about three model calls: still well under a cent per run on either model. Your ordinary chatting will dominate the bill, not the reminders.

Telegram's Bot API is free, and its documented limits (about one message per second per chat, Bot FAQ) are far above this use.

What goes wrong

The bot doesn't answer and you get no pairing code either. The channel isn't running. Open Channels, filter by Not running, and check the Telegram row. A Connection failed state usually means a wrong or revoked token: copy the current one from BotFather (/mybots → your bot → API Token). Make sure no other program is polling the same token, because Telegram delivers each update to only one poller.

You get a pairing code even though you filled in Allowed users. The entry doesn't match. Use the numeric ID from @userinfobot, not your phone number or display name.

A reminder arrives an hour or more off. Timezone. Check Settings → System → Timezone and the time the bot reports. Existing cron jobs keep the timezone they were created with; ask the bot to update the job with your zone, or delete and recreate it.

A reminder you set in the WebUI never reaches your phone. It ran in the WebUI topic you created it from. Create reminders from Telegram, or open the job in Automations, use Change chat under Run in chat, pick the Telegram chat and Confirm change. The Telegram chat only appears in that list after you've messaged the bot at least once.

"Done" marks the wrong item. Two items share a word. Use list and then done 3, or add that the agent should ask when more than one item matches.

A one-time reminder was missed during a restart. nanobot doesn't replay missed schedules. A one-time job whose time passed while the gateway was down is not run; cron jobs simply continue at their next match (delivery and reliability). On ranx.cloud an instance can be restarted briefly now and then, for example for maintenance or updates, so for anything critical keep a second alarm on your phone. After a restart, the Needs attention filter in Automations shows jobs whose last run failed.