Remote OpenClaw Blog
OpenClaw workflow_auto: Automated Workflow Configuration Guide
What changed
This post was reviewed and updated to reflect current deployment, security hardening, and operations guidance.
What should operators know about OpenClaw workflow_auto: Automated Workflow Configuration Guide?
Answer: workflow_auto.md is a configuration file that tells OpenClaw to perform specific tasks on a schedule, without any human trigger. Think of it as a cron job, but instead of running shell commands, it triggers your AI agent to perform intelligent tasks. This guide covers practical deployment decisions, security controls, and operations steps to run OpenClaw, ClawDBot, or MOLTBot.
Complete guide to OpenClaw's workflow_auto.md — syntax, triggers, scheduling, and real examples including morning briefings, inbox triage, and daily reports.
Marketplace
Free skills and AI personas for OpenClaw — deploy a pre-built agent in 15 minutes.
Browse the Marketplace →Join the Community
Join 500+ OpenClaw operators sharing deployment guides, security configs, and workflow automations.
What Is workflow_auto.md?
workflow_auto.md is a configuration file that tells OpenClaw to perform specific tasks on a schedule, without any human trigger. Think of it as a cron job, but instead of running shell commands, it triggers your AI agent to perform intelligent tasks.
Without workflow_auto, your agent is purely reactive — it only does things when someone sends it a message. With workflow_auto, the agent becomes proactive. It can send you a morning briefing before you ask, triage your inbox while you sleep, generate reports at the end of each day, and follow up with leads who have not responded.
The file lives in your OpenClaw configuration directory (typically /data/config/workflow_auto.md in Docker deployments). OpenClaw reads it every 60 seconds, so changes take effect quickly without a restart.
File Syntax
The workflow_auto.md file uses a structured Markdown format. Each workflow is defined as a section with YAML-style properties:
# Workflow: Morning Briefing
- **id:** morning_briefing
- **schedule:** 0 7 * * 1-5
- **timezone:** America/New_York
- **agent:** ceo
- **channel:** whatsapp_personal
- **enabled:** true
## Instructions
Check my calendar for today's events, review unread emails from the last 12 hours,
check the CRM for any leads that need follow-up today, and compile everything into
a concise morning briefing. Include:
1. Today's schedule (meetings, deadlines)
2. Important unread emails (summarize top 5)
3. Leads requiring action today
4. Any overdue tasks from yesterday
Format as a clean bulleted list. Keep it under 500 words.
---
# Workflow: End of Day Report
...
Each workflow section has these properties:
- id: A unique identifier for the workflow (used in logs and for manual triggering)
- schedule: A cron expression defining when the workflow runs
- timezone: The timezone for the schedule (default: UTC)
- agent: Which agent handles the workflow (for multi-agent setups)
- channel: Where to send the output (whatsapp, telegram, slack, email, etc.)
- enabled: Toggle the workflow on/off without deleting it
The Instructions section is free-form Markdown. This is what the agent receives as its prompt when the workflow triggers. Write it exactly as you would write a message to the agent.
Cron Scheduling
The schedule field uses standard cron syntax with five fields:
┌───────────── minute (0-59)
│ ┌───────────── hour (0-23)
│ │ ┌───────────── day of month (1-31)
│ │ │ ┌───────────── month (1-12)
│ │ │ │ ┌───────────── day of week (0-7, where 0 and 7 are Sunday)
│ │ │ │ │
* * * * *
Common schedule patterns:
| Pattern | Meaning |
|---|---|
0 7 * * 1-5 | 7:00 AM, Monday through Friday |
0 18 * * 1-5 | 6:00 PM, Monday through Friday |
0 9 * * 1 | 9:00 AM, every Monday |
0 1 1 * * | 1:00 AM, first day of every month |
*/30 * * * * | Every 30 minutes |
0 */4 * * * | Every 4 hours |
0 8,12,17 * * 1-5 | 8 AM, noon, and 5 PM on weekdays |
Important: Always set the timezone. If you do not, OpenClaw uses UTC. A "7 AM morning briefing" in UTC would arrive at 2 AM Eastern or 11 PM Pacific the previous day.
Example: Morning Briefing
The morning briefing is the most popular workflow. It gives you a summary of everything you need to know before your day starts.
# Workflow: Morning Briefing
- **id:** morning_briefing
- **schedule:** 0 7 * * 1-5
- **timezone:** America/New_York
- **agent:** ceo
- **channel:** whatsapp_personal
- **enabled:** true
## Instructions
Good morning. Prepare my daily briefing:
1. **Calendar:** List all events for today with times and participants.
Flag any conflicts or back-to-back meetings.
2. **Email:** Scan unread emails from the last 12 hours.
Summarize the top 5 most important ones (sender, subject, one-line summary).
Flag any that need a reply before noon.
3. **Tasks:** List overdue tasks and tasks due today from Notion.
4. **CRM:** List any leads or deals that need follow-up today.
Include the lead name, last contact date, and recommended action.
5. **Weather:** Include today's weather for New York City.
Format everything as a clean WhatsApp message with bullet points.
Keep it under 400 words. End with "Reply with a number to dive deeper
into any section."
When this triggers at 7 AM, the agent uses its tools (calendar, email, Notion, CRM, weather API) to gather the information and sends you a structured WhatsApp message before you even open your laptop.
Example: Inbox Triage
Inbox triage runs more frequently and handles email sorting automatically.
# Workflow: Inbox Triage
- **id:** inbox_triage
- **schedule:** 0 */2 * * 1-5
- **timezone:** America/New_York
- **agent:** ceo
- **channel:** none
- **enabled:** true
## Instructions
Check the email inbox for new unread messages received in the last 2 hours.
For each email:
1. If it is spam, promotional, or a newsletter I have not engaged with:
→ Archive it. No notification needed.
2. If it is a client email or a reply to an active thread:
→ Label it "Priority" and leave it in the inbox.
3. If it is a new business inquiry or lead:
→ Forward it to the sales email address.
→ Create a CRM entry if one does not exist.
4. If it is from a known VIP contact (check memory for VIP list):
→ Label it "VIP" and send me a WhatsApp notification:
"VIP email from [Name]: [Subject] — [one-line summary]"
Do not send notifications for categories 1-3 unless something unusual is detected.
Log all actions to the inbox_triage_log memory file.
Note that the channel is set to none because this workflow does not always produce output. It performs actions silently (archiving, labeling, forwarding) and only sends a notification when a VIP email arrives.
Example: Daily Report
The end-of-day report summarizes what happened and what is coming next.
# Workflow: End of Day Report
- **id:** daily_report
- **schedule:** 0 18 * * 1-5
- **timezone:** America/New_York
- **agent:** ceo
- **channel:** whatsapp_personal
- **enabled:** true
## Instructions
Generate the end-of-day report:
1. **Completed today:** List tasks that were marked done in Notion today.
2. **Emails sent:** Count of emails sent today. Highlight any important
threads that need follow-up tomorrow.
3. **CRM activity:** New leads added, deals updated, follow-ups completed.
4. **Tomorrow preview:** List tomorrow's calendar events and any
deadlines coming up in the next 48 hours.
5. **Open items:** Tasks that were due today but not completed.
Suggest whether to reschedule or prioritize them for tomorrow morning.
Keep it concise. Use bullet points. End with "Anything you want me
to prepare for tomorrow?"
More Workflow Examples
Weekly Revenue Summary (every Monday):
# Workflow: Weekly Revenue
- **id:** weekly_revenue
- **schedule:** 0 9 * * 1
- **timezone:** America/New_York
- **agent:** finance
- **channel:** whatsapp_personal
- **enabled:** true
## Instructions
Generate the weekly revenue summary for the past 7 days:
- Total revenue received
- Revenue by client
- Outstanding invoices and their aging
- Comparison to the same week last month
- Cash flow projection for the next 2 weeks
Format as a clean report suitable for WhatsApp.
CRM Follow-up Reminders (every 4 hours):
# Workflow: CRM Follow-ups
- **id:** crm_followups
- **schedule:** 0 9,13,17 * * 1-5
- **timezone:** America/New_York
- **agent:** sales
- **channel:** whatsapp_business
- **enabled:** true
## Instructions
Check the CRM for leads that:
- Have not been contacted in 3+ days and are in "Active" status
- Have a follow-up date of today
- Responded to our last message but we have not replied
For each lead, send a brief reminder with the lead name,
last interaction summary, and suggested next action.
Maximum 5 reminders per batch.
Server Health Check (every 30 minutes):
# Workflow: Health Check
- **id:** health_check
- **schedule:** */30 * * * *
- **agent:** ops
- **channel:** none
- **enabled:** true
## Instructions
Check the following:
1. Is the OpenClaw process healthy? (check /health endpoint)
2. What is the current RAM and CPU usage?
3. Are all messaging channels connected?
4. Any errors in the last 30 minutes of logs?
Only send a Slack notification if something is wrong.
If everything is healthy, log it silently to health_check.md.
Multiple Workflow Files
For operators with many workflows, a single workflow_auto.md file can become unwieldy. OpenClaw supports splitting workflows across multiple files:
/data/config/
├── workflow_auto.md # Main file (morning briefing, daily report)
├── workflow_auto_sales.md # Sales-specific workflows
├── workflow_auto_finance.md # Finance-specific workflows
└── workflow_auto_maintenance.md # System maintenance workflows
OpenClaw reads all files matching the pattern workflow_auto*.md in the config directory. Workflow IDs must be unique across all files.
Debugging Workflows
When a workflow does not run as expected, follow these steps:
1. Check the logs:
docker compose logs openclaw 2>&1 | grep -i "workflow"
# Look for:
# [INFO] Workflow scheduler: loaded 5 workflows
# [INFO] Workflow morning_briefing: next run at 2026-03-25 07:00:00 EDT
# [ERROR] Workflow daily_report: invalid cron expression
2. Verify the file location: The workflow file must be in the correct directory. For Docker, this is typically the mounted config volume. Check your docker-compose.yml volumes section.
3. Check cron syntax: Use an online cron expression validator (like crontab.guru) to verify your schedule expression is correct.
4. Verify timezone: An unexpected timezone causes workflows to run at the wrong time. Check that the timezone string is valid (use the TZ database format, like America/New_York or Europe/London).
5. Manual trigger: Run the workflow manually to verify it works outside of the schedule:
npx openclaw workflow run morning_briefing
6. Check permissions: If the workflow uses tools (email, calendar, CRM), verify the agent has the necessary tool permissions. A workflow that tries to read email without email permissions will fail silently.
7. Check the enabled flag: A common oversight is setting enabled: false while debugging and forgetting to re-enable it.
Automated workflows are one of the most powerful features of OpenClaw. They transform your agent from a reactive assistant into a proactive team member that works around the clock. Start with a morning briefing and daily report, then expand to more workflows as you see the value.
