Remote OpenClaw

Remote OpenClaw Blog

OpenClaw workflow_auto: Automated Workflow Configuration Guide

Published: ·Last Updated:
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.

Updated: · Author: Zac Frulloni

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.


Marketplace

Free skills and AI personas for OpenClaw — browse the marketplace.

Browse Marketplace →

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:

PatternMeaning
0 7 * * 1-57:00 AM, Monday through Friday
0 18 * * 1-56:00 PM, Monday through Friday
0 9 * * 19: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-58 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.