Build an Automated AI Briefing
Schedule a daily AI briefing that searches the web and delivers to Telegram.
Introduction
⚡️ 30 Second Summary
You check your phone every morning for news, but what if your AI assistant checked for you and only sent the stuff that actually matters to your goals?
In this project, you will build a personalized AI learning briefing that your OpenClaw assistant delivers to Telegram every morning. It discovers tools with web_search, extracts articles with web_fetch, and runs on a cron schedule.
What You'll Build
You'll configure OpenClaw's cron system to run a daily briefing job that searches the web, reads full articles, and delivers a personalized summary to Telegram before you wake up.
The cron job fires on your schedule. The assistant searches the web for AI tools and tutorials relevant to your interests, fetches full pages for the best results, and delivers a curated briefing straight to Telegram.
By the end of this project, you'll have:
- ⏰ A cron job that runs every morning on your schedule.
- 🔍 AI tool discovery via web_search matched to your learning goals.
- 📄 Full article extraction via web_fetch for deep context beyond search snippets.
- 🧠 Personalized curation powered by your USER.md from Part 2.
- 💎 Secret Mission: Share your briefing with the NextWork community via Discord.
Want a complete demo of how to do this project, from start to finish? Check out our 🎬 walkthrough with Jon.
Are there any prerequisites?
This is Part 3 of the Build with OpenClaw series -- complete Part 1 and Part 2 first. Your Gateway, Telegram bot, and workspace memory from those projects must be in place before you start.
Not sure if this project is right for you? Check if it matches your goals
If you're up for a bit of a challenge, quiz yourself on the key concepts up ahead in this project.
Schedule Your Assistant to Talk First
Up until now, your OpenClaw assistant has been reactive. You send a message, it replies. But what if it could reach out to you first? That's the shift we're making in this project: from an assistant that waits to one that acts on a schedule.
The tool that makes this possible is called a cron job. Cron is a time-based scheduler that's been around since the 1970s. OpenClaw brings cron to AI, letting you tell your assistant "do this thing at this time, every day."
In this step, you'll create a test cron job to see the whole loop in action: schedule, run, and receive a message in Telegram.
In this step, get ready to:
- Create a test cron job that sends a message on a schedule.
- Run the cron job manually to see it work immediately.
- Clean up the test job once you've confirmed it works.
Create a Test Cron Job
Before you build the real briefing, start with something simple. This test job tells your assistant to send a motivational quote and the current time. It's cheap to run and proves the whole scheduling pipeline works.
- Copy and paste the following command into your terminal:
openclaw cron add \
--name "Test Briefing" \
--cron "*/2 * * * *" \
--tz "America/Chicago" \
--session isolated \
--message "Send me a motivational quote and tell me what time it is in my timezone." \
--model "anthropic/claude-haiku-4-5" \
--announce \
--timeout-seconds 60
What does each flag do?
- --name gives the job a label so you can find it later.
- --cron "*/2 * * * *" sets the schedule. This one means "every 2 minutes." You'll decode cron expressions in a moment.
- --tz "America/Chicago" pins the schedule to a specific timezone. Always set this explicitly. Without it, --cron defaults to the Gateway host's timezone, which can cause confusion.
- --session isolated means each run starts fresh with no memory of previous runs. The opposite is main, which shares conversation history with your normal chat.
- --message is the prompt your assistant will follow when the job fires.
- --model "anthropic/claude-haiku-4-5" selects Claude Haiku, a small and fast model that costs a fraction of a cent per run.
- --announce tells OpenClaw to automatically deliver the response to Telegram. Without this flag, the job runs silently.
- --timeout-seconds 60 stops the job if it takes longer than 60 seconds.
Verify and Run the Job
You don't have to wait five minutes to see it work. OpenClaw has a command that triggers a cron job immediately.
- List your cron jobs to confirm it was created:
openclaw cron list
- Copy the job ID from the output. It looks like 0b88ec2d-0e3b-4685-8d11-807aaf7b3fe2 -- a long string of letters, numbers, and dashes.
- Run the job immediately:
openclaw cron run [[CRON_JOB_ID="your cron job ID"]]
- Open Telegram.
Your assistant should send a message within a few seconds with a motivational quote and the current time.
Don't see a message in Telegram?
Make sure your Gateway is running with openclaw gateway status. If it's running, check that you used the --announce flag when creating the cron job -- without it, the job runs silently. Try running the job again with openclaw cron run <id>. Help me troubleshoot my missing Telegram message.
What is an isolated session?
When you set --session isolated, each cron run gets its own fresh context. The assistant doesn't remember previous cron runs or your normal chat history. This is ideal for scheduled tasks because they should be self-contained. The main session option shares context with your regular conversations, which is useful when you want a cron job to build on ongoing chats.
Now that you've seen the job fire, take a moment to understand the schedule you set. Cron expressions have five fields: minute, hour, day-of-month, month, and day-of-week.
ExpressionMeaning
*/2 * * * *Every 2 minutes
0 7 * * *Every day at 7:00 AM
0 9 * * 1-5Weekdays at 9:00 AM
30 18 * * *Every day at 6:30 PM
0 */2 * * *Every 2 hours
How to read a cron expression
Read it left to right: minute 0, hour 9, any day of the month, any month, days 1 through 5 (Monday to Friday). That gives you "9:00 AM on weekdays."
Clean Up the Test Job
This test job runs every 2 minutes. If you leave it running, you'll get a motivational quote every 2 minutes forever. Time to clean up.
- Remove the test cron job:
openclaw cron rm [[CRON_JOB_ID="your cron job ID"]]
- Confirm it's gone:
openclaw cron list
The list should now be empty.
Your assistant just talked to you first. That's the fundamental shift: from reactive to proactive AI. Instead of waiting for you to ask, it reached out on its own schedule. You just gave a crustacean a calendar. 🦞
But a motivational quote isn't very useful. In the next step, you'll teach your assistant to find things that actually help you learn.
Teach Your Assistant to Research
Your assistant is set up and running on a schedule. But right now it's working with a fixed message every time. To build an actual intelligence briefing, your assistant needs to go out, find new information on the web, and bring it back to you.
In this step, you'll give your assistant two new abilities: searching the web for content, and reading full articles. These are the building blocks of any research pipeline.
In this step, get ready to:
- Create a cron job that searches the web for AI tools.
- Test your search module and see results in Telegram.
- Compare search-only vs search+fetch results.
Understand the Two Web Data Tools
Your assistant is about to gain two new tools for working with web data. Understanding the difference between them is key to building effective research pipelines.
- web_search is for discovery. It searches the web and returns titles, URLs, and short snippets. Think of it like searching a library catalog: you find out what exists, but you don't read the full content.
- web_fetch is for extraction. It takes a URL and pulls back the full page content as markdown. Think of it like checking out a book from the library and reading it cover to cover.
Why two separate tools?
These two tools mirror the same patterns used in production data pipelines. Discovery (finding what exists) and extraction (reading the details) are separate concerns. Keeping them separate gives your assistant flexibility: sometimes you only need headlines, other times you need the full story.
Create Your Search Cron Job
Now let's put these tools to work. You'll create a cron job that tells your assistant to search for the latest AI tools, fetch the most interesting result, and summarize everything in a report.
- Open your terminal.
- Run this command to create the cron job:
openclaw cron add \
--name "AI Tool Discovery" \
--cron "*/2 * * * *" \
--tz "America/Chicago" \
--session isolated \
--message "Search for the latest AI tools and releases from this week. Use web_search to find 3-5 interesting results. Then use web_fetch on the most interesting one to get the full details. Summarize what you found in a brief report." \
--model "anthropic/claude-haiku-4-5" \
--announce \
--timeout-seconds 120
What does this command do?
This creates a scheduled task that runs every 2 minutes. The --session isolated flag means each run starts fresh with no memory of previous runs. The --announce flag tells OpenClaw to send the results to your Telegram chat. The --model flag keeps costs low by using Claude Haiku, which is more than capable for search and summarization tasks.
- Copy the cron job ID from the output. You'll need it for the next command.
- Test the cron job immediately by running:
openclaw cron run [[CRON_JOB_ID="your cron job ID"]]
- Wait for the results to arrive in your Telegram chat. This usually takes 1-2 minutes.
- The second message shows the detailed summary from web_fetch:
Your assistant just went to the internet, found something new, read the full article, and summarized it for you. That's a research pipeline.
Not seeing the results described above?
If you don't see results in Telegram: check that the Gateway is running with openclaw gateway status, verify you used the --announce flag, and try running the cron job again with openclaw cron run <id>. Web tool calls can sometimes time out -- if you see a partial response, increase --timeout-seconds to 180. Help me troubleshoot my search results.
See the Difference: Search vs Search+Fetch
To really understand why both tools matter, let's see what happens when your assistant can only search versus when it can search and fetch.
- Look at your Telegram results and compare the two types of output.
The search results give you titles and snippets. Short, scannable, enough to know what's out there. The fetch result gives you real details: what the tool does, how it works, key features. Information you could actually act on.
What's the real difference?
Without web_fetch, your assistant only knows what Google's snippets tell it. With web_fetch, it reads the actual source. The difference is like reading a book review versus reading the book.
- Clean up this cron job since you'll be building a better one in the next step:
openclaw cron rm [[CRON_JOB_ID="your cron job ID"]]
Having trouble with web tools?
If your assistant can't use web_search or web_fetch, your tool profile may need updating. Check your openclaw.json file and make sure web tools are allowed. How do I enable web tools in OpenClaw?
Right now your assistant is finding generic AI news. It can search the entire internet but has the personal taste of a search engine. Next up, you'll fix that. 🦞
Make It About What You're Learning
Your assistant can search the web and read full articles. That's a solid research pipeline. But it's still finding generic AI news that could be for anyone. The whole point of a personal assistant is that it knows you: what you're learning, your skill level, what you're working on right now.
In this step, you'll connect your assistant's research capabilities to the memory profile you built in Part 2. The result is a content curation pipeline: a single cron job that delivers a personalized daily learning briefing to Telegram, with content matched to your interests and level.
In this step, get ready to:
- Update your USER.md with learning-relevant fields.
- Build a personalized learning briefing cron job.
- Review the briefing in Telegram for personalized results.
Prepare Your Profile and Clean Up
Before building the briefing, your assistant needs to know what you're learning and where you're at. The USER.md file from Part 2 is where your assistant reads your profile.
- Open your USER.md file in your OpenClaw workspace:
nano ~/.openclaw/USER.md
- Make sure it includes learning-relevant fields. If any of these are missing, add them now:
Interests: AI agents, cloud computing, Python
Skill Level: beginner
Current Projects: OpenClaw series
Learning Goals: Build automated AI workflows, learn cron scheduling
- Save the file.
Why does USER.md matter here?
Your cron job prompt will tell the assistant to read USER.md before doing anything else. The interests field shapes what it searches for. The skill level shapes how it explains what it finds. The current projects field shapes what it recommends you do next. Better profile, better briefing.
You cleaned up the Step 2 cron job at the end of that step, but let's verify there are no leftover jobs.
- Run this command to check your active cron jobs:
openclaw cron ls
- If you see any remaining test cron jobs from Step 2, remove them:
openclaw cron rm [[CRON_JOB_ID_STEP2="your cron job ID from Step 2"]]
Build the Personalized Learning Briefing
This is the core of the project. You're about to create a single cron job prompt that does what a human content curator would: read your profile, search for relevant content, read the best articles, and write a personalized brief.
Find Your Telegram Chat ID
The briefing cron job needs your Telegram chat ID to deliver messages directly to you. Your OpenClaw assistant already knows it.
- Open your OpenClaw Gateway dashboard.
- Ask your assistant: "What is my Telegram chat ID?"
- Copy the chat ID from the response (a number like 123456789).
- Run this command to create the briefing cron job:
openclaw cron add \
--name "AI Learning Briefing" \
--cron "0 7 * * *" \
--tz "America/Chicago" \
--session isolated \
--light-context \
--message "You are my personal AI learning assistant. Read my USER.md and SOUL.md to understand my interests, skill level, and learning goals.\n\nGenerate a daily learning briefing with these sections:\n1. NEW TOOLS: Use web_search to find 2-3 new AI tools or releases relevant to my interests this week. Include what each does and why it matters for someone at my level.\n2. TUTORIAL PICK: Use web_search to find one tutorial matched to my skill level on a topic I'm currently learning. Use web_fetch to read the full page and summarize the key takeaway.\n3. TREND WATCH: One industry trend connecting to my goals -- what's happening and why I should care.\n4. NEXT STEP: Based on my progress through the OpenClaw series, suggest what to explore or practice next.\n\nFormat for Telegram -- emoji headers, scannable, under 500 words." \
--model "anthropic/claude-sonnet-4-5" \
--announce \
--channel telegram \
--to "[[YOUR_CHAT_ID="your Telegram chat ID"]]" \
--timeout-seconds 300
- Copy the cron job ID from the output:
Why did we switch to claude-sonnet-4-5?
In Step 2, you used Claude Haiku for simple search-and-summarize tasks. This briefing is more demanding: the assistant reads your profile, runs multiple searches, fetches and reads a full article, then writes a personalized report. Claude Sonnet handles this multi-source curation much better. The cost tradeoff: Haiku runs at ~$0.016 per run, Sonnet at ~$0.048 per run. About 3x the cost for significantly better personalization.
💡 What does --light-context do?
The --light-context flag tells OpenClaw not to inject the full workspace file tree into the isolated session. Since the prompt explicitly asks the assistant to read USER.md and SOUL.md, it only needs those files, not everything else. This saves tokens and keeps costs down.
💡 What makes this prompt different?
This prompt is essentially a mini program. It tells the assistant who it is, what to read for context, what sections to produce, which tools to use for each section, and how to format the output. Cron prompts like this are how you build automated workflows without writing code.
Test and Review the Briefing
- Copy the cron job ID from the output.
- Run the briefing immediately to test it:
openclaw cron run [[CRON_JOB_ID="your cron job ID"]]
- Wait for the results to arrive in your Telegram chat. This one takes longer than Step 2 because the assistant is doing more work: reading your profile, running multiple searches, fetching a full article, and writing a tailored report.
Now check whether the briefing is actually personalized to you.
- Read through the briefing in Telegram and check each section:
- NEW TOOLS should match your interests from USER.md.
- TUTORIAL PICK should be at your skill level.
- TREND WATCH should connect to your stated goals.
- NEXT STEP should reference where you are in the OpenClaw series.
- If the personalization feels off, update your USER.md with more specific interests or goals and run the cron job again.
Pro tip
Iterate on the prompt
The prompt is the entire pipeline. If you want different sections, different sources, or a different tone, edit the --message parameter. Students who get the best results usually tweak the prompt 2-3 times to dial in what they want.
🙋♀️ Briefing not personalized?
If the briefing looks generic, check that your USER.md has specific interests (not just "technology") and a clear skill level. The more specific your profile, the better the curation. How do I improve my USER.md for better personalization?
Your briefing is delivering personalized content matched to your goals. Your lobster just read your diary and used it to curate your morning news. Somehow that's fine. 🦞 Next up, you'll lock in the schedule and make sure everything runs reliably on your actual morning routine.
Set Your Schedule and Sleep on It
In Step 3, you built a personalized briefing that curates content matched to your interests and delivers it to Telegram. The last piece is making this run automatically at the right time every day, so your briefing is waiting when you wake up.
Right now the cron job is on a test schedule. In this step, you'll set it to your actual wake-up time, pick the right model for long-term cost, and handle the one gotcha that catches everyone: your computer going to sleep.
In this step, get ready to:
- Set your cron job to your real wake-up time and timezone.
- Review the cost of running your briefing daily.
- Keep your Gateway alive overnight and receive your first real briefing.
Set Your Real Schedule
Time to swap the test schedule for your actual wake-up time. The openclaw cron edit command lets you update any cron job's schedule without recreating it.
- Run this command to set the briefing for 6:30 AM in your timezone:
openclaw cron edit [[CRON_JOB_ID="your cron job ID"]] --cron "30 6 * * *" --tz "America/Chicago"
- Replace America/Chicago with your own IANA timezone. Common options:
- America/New_York (US Eastern)
- America/Chicago (US Central)
- America/Denver (US Mountain)
- America/Los_Angeles (US Pacific)
- Europe/London (UK)
- Asia/Tokyo (Japan)
- Pacific/Auckland (New Zealand)
- Australia/Sydney (Australia Eastern)
- Replace 30 6 with the hour and minute you actually wake up. The format is MINUTE HOUR * * *.
What does the --tz flag do?
The --tz flag tells OpenClaw to evaluate the cron expression in YOUR local timezone, not UTC. Without it, "6:30 AM" would mean 6:30 AM UTC, which might be 1:30 AM where you live. The IANA timezone names (like America/Chicago) are the same identifiers used by your operating system and most scheduling tools.
- Confirm your schedule is correct:
openclaw cron list
You should see your briefing cron job with the updated schedule and timezone.
Prepare for Overnight Delivery
This briefing runs every day. Before you let it run long-term, it's worth knowing what it costs.
How much does this cost?
Each briefing run uses tool calls (web_search, web_fetch) that inflate token usage 5-10x over a simple chat message. Here's what to expect:
- Claude Haiku (recommended): ~$0.016 per run, ~$0.48/month.
- Claude Sonnet: ~$0.048 per run, ~$1.44/month.
Claude Haiku is more than capable for search, summarization, and curation tasks. Save Claude Sonnet for tasks that need stronger reasoning.
Your laptop must stay awake for the briefing to fire.
Closing the lid, letting the screen timeout with sleep enabled, or shutting down will all kill the Gateway. Missed jobs will replay as a catch-up burst when you restart, but that defeats the purpose of a morning briefing.
- Pick the option that works for your setup:
🍎 macOS
The simplest option on macOS is caffeinate, a built-in command that prevents your Mac from sleeping.
- Open a new terminal tab or window.
- Run this command:
caffeinate -s &
- Close the laptop lid halfway if you want to dim the screen, but keep it cracked open so macOS does not trigger lid-sleep.
What does caffeinate -s do?
The -s flag prevents system sleep even when running on battery. The & runs it in the background so you can keep using your terminal. To stop it later, run kill %1 or just close that terminal window.
🖼️ Windows
The equivalent of caffeinate on Windows is a PowerShell script that tells Windows to stay awake while it's running.
- Open a new PowerShell window.
- Run this command:
powershell -Command "& {
$code = '[DllImport(\"kernel32.dll\")] public static extern uint SetThreadExecutionState(uint esFlags);'
$ES = Add-Type -MemberDefinition $code -Name System -Namespace Win32 -PassThru
$ES::SetThreadExecutionState(0x80000001)
Write-Host 'Sleep disabled. Close this window or press Ctrl+C to re-enable.'
while (`$true) { Start-Sleep 60 }
}"
- Leave this PowerShell window open overnight. To stop it later, press Ctrl+C or close the window — sleep returns to normal automatically.
What does this script do?
It calls the Windows SetThreadExecutionState API with flags that prevent system sleep, just like macOS caffeinate -s. The script stays running in a loop, and when you close the window or press Ctrl+C, Windows automatically clears the state and restores normal sleep behavior. No admin rights needed.
Alternatively, you can disable sleep through the GUI:
- Open Settings.
- Select System, then Power & battery.
- Set Screen and sleep timeout to Never for both battery and plugged in.
- Remember to set these back to your preferred timeout after the project.
Pro tip
Run on an always-on machine
If you have a VPS, Raspberry Pi, or an old computer that stays on, that's the ideal place to run the Gateway. It removes the sleep problem entirely and your briefings become truly hands-off.
Leave it running overnight
Your briefing is scheduled and ready to go. Leave your Gateway running overnight and go to sleep. Tomorrow morning, check Telegram first thing. Your assistant will have woken up before you, searched the web, read articles, and left a personalized briefing waiting on your phone.
- Leave your Gateway running overnight.
- Go to sleep.
Wake Up to Your Briefing
- Check your Telegram chat when you wake up.
Your AI assistant discovered new tools, found a tutorial at your level, and told you what to learn next. All before you picked up your phone. Your lobster woke up before you did and made you smarter by breakfast. 🦞
No message in Telegram?
If you didn't receive a briefing, your Gateway likely went to sleep. Check that caffeinate is still running (macOS) or that your sleep settings are configured correctly (Windows). Restart the Gateway with openclaw gateway start and run openclaw cron run with your cron job ID to trigger a manual catch-up. Help me troubleshoot my missing briefing.
Secret mission
Your daily briefing is running on autopilot. But right now it only reaches your phone. What if you could share it with the NextWork community too?
In this secret mission, you'll deliver your briefing to the NextWork Discord server, so other learners can see what your assistant is finding.
In this secret mission, get ready to:
- Set up Discord delivery for your briefing.
- Create a new cron job that posts to the NextWork community.
- Test your Discord delivery and verify it works.
Share Your Briefing or Go Deeper
Clean Up Your Resources
Clean Up Your Resources
Decide whether to keep your resources running, pause them to come back later, or delete them entirely. Your cron job runs your briefing daily, costing ~$0.048/run with Claude Sonnet (~$1.44/month) or ~$0.016/run with Claude Haiku (~$0.48/month).
Cost warning
Your briefing cron job runs automatically every day and uses Anthropic API credits each time. If cost is a concern, switch to Haiku: openclaw cron edit <id> --model anthropic/claude-haiku-4-5.
Resources you used:
- AI Learning Briefing cron job (running daily).
- Workspace files (SOUL.md, USER.md with interests).
- OpenClaw Gateway (background service).
- Test cron jobs from Steps 1-2 (should already be removed).
✔️ Keep everything running
No action needed. Choose this if you're still actively building or want to keep receiving your daily briefing. Your claw keeps clipping the web for you every morning. 🦞
Your cron job runs at the schedule you configured and delivers briefings to Telegram. The only ongoing cost is Anthropic API credits per run. All workspace files are stored locally with no hosting fees.
✋ Pause - I'll come back to this later
Shut down running processes to free up memory, but keep all your files and data so you can pick up where you left off.
- Disable your cron job temporarily:
openclaw cron disable <id>
How do I find my cron job ID?
Run openclaw cron list to see all your scheduled jobs and their IDs.
- Your workspace files (SOUL.md, USER.md), interests, and Gateway configuration remain intact.
- Re-enable anytime: openclaw cron enable <id>.
ⓧ Delete - I don't want to use this again
Remove all project resources and start fresh if you ever want to rebuild.
- List your cron jobs to find the briefing job ID:
openclaw cron list
- Delete the briefing cron job:
openclaw cron delete <id>
- If you also want to remove OpenClaw entirely, stop the Gateway and uninstall:
openclaw gateway stop
npm uninstall -g openclaw
- Delete the configuration directory (includes workspace files, memory, and all settings):
rm -rf ~/.openclaw
Continuing with OpenClaw?
Keep OpenClaw installed if you plan to do Part 4 or Part 5 of this series. Your workspace files and memory carry forward. You only need to delete the cron job if you want to stop the daily briefing.
That's a Wrap!
That's a Wrap!
Your AI assistant just became your personal learning curator. 🚀 Every morning, before you even pick up your phone, it's already discovered new tools, found tutorials at your level, and suggested what to learn next. That's not a chatbot -- that's a personalized learning channel.
You've learned how to:
- 🕐 Write cron expressions that schedule jobs on your terms, using the scheduling language of the internet since 1975.
- 🔍 Use web_search to discover AI tools and content -- the discovery pattern that finds what's out there.
- 📖 Use web_fetch to read full articles instead of just snippets -- the extraction pattern that goes deeper.
- 🧠 Build a personalized content curation pipeline powered by your memory from Part 2.
- 📬 Configure automatic Telegram delivery so your briefing reaches you without lifting a finger.
- ⚙️ Select the right model for the job -- Claude Haiku for simple tasks, Claude Sonnet for complex ones -- as a cost/quality tradeoff.
- 💎 Share your briefing with the NextWork community via Discord.
Congratulations!
You've completed Part 3 of the OpenClaw series. Your assistant now runs on a schedule, searches the web, reads articles, and delivers a personalized intelligence briefing straight to your phone. The shift from reactive AI (waits for you) to proactive AI (reaches out to you) is one of the most powerful patterns in personal automation.
Ready to quiz yourself? 💪
p.s. Does it say "Still tasks to complete!" at the bottom of the screen?
This means you still have screenshots left to upload, or questions left to answer!
- Press Ctrl+F (Windows) or Command+F (Mac) on your keyboard.
- Search for the text Return to later.
- Jump straight to your incomplete tasks!
- 🙋♀️ Still stuck? Ask the community!