by dagucloud
Lightweight, powerful workflow engine built in a single binary with Web UI. Linux, macOS, and Windows. Use your favorite AI agents to create, update, and run your workflows via secure MCP with full traceability and logging.
# Add to your Claude Code skills
git clone https://github.com/dagucloud/daguGuides for using ai agents skills like dagu.
Last scanned: 5/23/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-05-23T06:33:37.904Z",
"semgrepRan": false,
"npmAuditRan": true,
"pipAuditRan": true
}Dagu is a simple, lightweight workflow engine for small teams and private infrastructure. Single binary, file-based, and self-hosted,
It can run shell commands, any scripts, containers, HTTP requests, SQL queries, SSH commands, sub-workflows, and AI agent steps. It runs as a single binary, stores state in local files by default, and adds scheduling, dependencies, retries, queues, logs, notifications, documents, a Web UI, and optional distributed workers.
Highlights:
For a quick look at how workflows are defined, see the examples.
schedule:
- "0 2 * * *"
overlap_policy: skip
catchup_window: "6h"
tools:
- jqlang/jq@jq-1.7.1
- duckdb/duckdb@v1.5.2
steps:
- id: extract
run: ./scripts/extract.sh > data/raw.json
retry_policy:
limit: 3
interval_sec: 30
- id: validate
run: jq -e '.rows | length > 0' data/raw.json
depends: extract
- id: load
run: duckdb warehouse.duckdb < sql/load.sql
depends: validate
The tools block pins external CLIs for reproducible runs. Dagu resolves packages such as jqlang/jq and duckdb/duckdb through the Aqua standard registry, installs the pinned versions before the run, and exposes them on PATH so workers do not depend on whichever jq or duckdb version happens to be installed locally.
| Run Details | Step Logs | Documents |
|---|---|---|
|
|
|
|
Try it live: Live Demo (credentials: demouser / demouser)
Traditional Orchestrator Dagu
┌────────────────────────┐ ┌──────────────────┐
│ Web Server │ │ │
│ Scheduler │ │ dagu start-all │
│ Worker(s) │ │ │
│ PostgreSQL │ └──────────────────┘
│ Redis / RabbitMQ │ Single binary.
│ Python Runtime │ Self-hosted.
└────────────────────────┘ Adds scheduling, retries, and approvals around existing automation.
6+ services to manage
Dagu stores state in local files. How much it can run depends on the machine and the workload. CPU, memory, disk, workflow characteristics, queue settings, and worker capacity all matter.
| Use Case | How Dagu Helps |
| --- | --- |
| ETL and data operations | Turn data extraction scripts, SQL queries, dbt commands, and data-processing runbooks into observable pipelines with durable execution. |
| Cron and legacy script management | Turn complex jobs with interdependencies into maintainable DAGs with a UI, automatic logging, retries, and notifications instead of opaque cron jobs and bash scripts. |
| Media conversion | Run ffmpeg for video transcoding and format conversion. Thanks to Dagu's file-backed nature, workers can run heavy conversions in parallel without single machine bottlenecks or external databases. |
| Infrastructure and server automation | Run any command or script over SSH on remote servers, keeping logs, results, and notifications in one place. |
| GitHub-driven workflows | Trigger workflows from GitHub events. This is useful for running your automation or AI agent workflows on private infrastructure without exposing your servers to the public internet. |
| Container and Kubernetes workflows | Run Docker containers and Kubernetes Jobs as steps in your workflows without building a custom control plane around containers. |
| Customer support automation | Run self-service support tools that non-engineering teams can use to run approved workflows for running diagnostics, querying databases, and performing common support tasks without escalating to engineering. |
| IoT and edge workflows | Run sensor polling, local ML inference, data preprocessing, backups, offline sync, health checks, etc. Dagu keeps these jobs close to the data source while still providing Web UI visibility. |
macOS/Linux:
curl -fsSL https://raw.githubusercontent.com/dagucloud/dagu/main/scripts/installer.sh | bash
Homebrew:
brew install dagu
Windows (PowerShell):
irm https://raw.githubusercontent.com/dagucloud/dagu/main/scripts/installer.ps1 | iex
Docker:
docker run --rm -v ~/.dagu:/var/lib/dagu -p 8080:8080 ghcr.io/dagucloud/dagu:latest dagu start-all
Kubernetes (Helm):
helm repo add dagu https://dagucloud.github.io/dagu
helm repo update
helm install dagu dagu/dagu --set persistence.storageClass=<your-rwx-storage-class>
Replace
<your-rwx-storage-class>with a StorageClass that supportsReadWriteMany. See charts/dagu/README.md for chart configuration.
The script installers run a guided wizard that can add Dagu to your PATH, set it up as a background service, and create the initial admin account. Homebrew, npm, Docker, and Helm install without the wizard. See Installation docs for all options.
Create hello.yaml:
steps:
- id: hello
run: echo "hello from Dagu"
Run the workflow with:
dagu start hello.yaml
dagu start-all
Visit http://localhost:8080
Dagu exposes a built-in MCP server from the running HTTP server. Start Dagu, then configure MCP-capable chat or coding agents to use the Streamable HTTP endpoint:
http://localhost:8080/mcp
Use MCP when you want an AI agent to read Dagu state, preview or apply workflow changes, and start, enqueue, retry, or stop runs through dagu_read, dagu_change, and dagu_execute. See the MCP setup guide.
For authoring-only help in Claude Code, Codex, Gemini CLI, and other AI coding tools, install the Dagu workflow authoring skill:
gh skill install dagucloud/dagu dagu
Run Dagu on one machine, scale out with distributed workers, or use a managed Dagu instance operated by us. See the Deployment Models guide.
| Model | Server | Execution | Best for | |------|--------|-----------|----------|
No comments yet. Be the first to share your thoughts!