Highlights
v2.22 connects harness.run to ACP agents, adds a local command notification channel, and adds time-of-day gates to wait.until. Dagu Console can now show why runs failed and reach self-hosted servers over MCP. Binaries are built with Go 1.27.3 to distrust compromised eMudhra CAs.
- Upgrade notes:
- Requests that need no login (
auth.mode: none, andPOST /api/v1/auth/setup) now get HTTP 400 for an unrecognizedHost. Add public or custom domains toallowed_hosts/DAGU_ALLOWED_HOSTS. IP addresses,localhost, and the configuredhostandpublic_urlare always allowed (#3232). - Workspace settings are deprecated and will be removed in v3.0. The server logs the settings in use and admins see a notice. Feedback: #3288 (#3282).
- Requests that need no login (
- Security: Go 1.27.3 (CVE-2026-111943) refuses TLS chains through eight eMudhra intermediate CAs whose private keys are recoverable (#3275).
- Harness:
harness.runtalks to ACP agents over stdio, WebSocket, or Streamable HTTP (#3256). - Notifications: a command channel runs a local shell command when a rule matches. Run values reach it only as environment variables (#3157, #3235).
- wait.until:
HH:MM[:SS]clock times withoffset,timezone, andif_past(#3248). Value references resolve at run time (#3236). - Dagu Console: a new
errorsreport level sends the error messages of failed steps (#3254, #3266). Withcloud.remote_accesson, AI apps connected to Dagu Cloud can call a self-hosted server's MCP endpoint, even behind NAT (#3276). Connecting with the 14-day trial takes one step (#3287). - Scheduler and sync:
scheduler.wake_holdholds the first tick after the host wakes from sleep (#3270). Git Sync pull removes DAGs and Wiki pages deleted upstream (#3278). - Upgrades: the banner asks for a restart once a new binary is installed and shows the update command for the install method:
dagu upgrade, Homebrew, Snap, orgo install(#3289).
Added
- feat: add a local command notification channel (#3157) @kriyanshii
- feat(harness): support ACP agents over stdio, WebSocket, and HTTP (#3256) @100apps
Changed
- http: leave status_code and headers out of silent JSON output (#3215) @SCcagg5
- runtime: pass the step span to step processes as TRACEPARENT (#3216) @SCcagg5
- Check Host names where no login is needed (#3232) @yohamta0
- Keep the certproxy echo server from resetting (#3234) @yohamta0
- Polish the local command channel UI (#3235) @yohamta0
- wait: defer strict validation for value references to run time (#3236) @ianwalkeruk
- Pin the Helm version in chart CI (#3237) @yohamta0
- Drive hold test deadlines with an explicit clock (#3238) @yohamta0
- Pin column types in dagu xlsx read (#3245) @yohamta0
- wait.until: native time-of-day gates (offset, timezone, if_past) (#3248) @ianwalkeruk
- Report why runs failed at a new errors level (#3254) @yohamta0
- Allow while and until repeat without a condition (#3255) @RyoKusnadi
- workbook: create the output folder for xlsx.write_cells (#3265) @MitchelTighe
- Distrust compromised eMudhra intermediate CAs (#3275) @yohamta0
- Take MCP calls from Dagu Cloud while remote access is on (#3276) @yohamta0
- Warn of workspace settings before v3.0 removes them (#3282) @yohamta0
- persis: store a repeated step output once per status line (#3283) @yohamta0
- Connect to Dagu Console with the trial in one step (#3287) @yohamta0
- upgrade: show restart and install-specific update steps (#3289) @yohamta0
Fixed
- telemetry: send /v1/traces endpoints to the OTLP/HTTP exporter (#3213) @SCcagg5
- file: check the record lock before a compare-and-write (#3224) @SCcagg5
- Keep SSE topic polling alive on bad input (#3231) @yohamta0
- Keep cmd.exe from reparsing harness prompts (#3233) @yohamta0
- xlsx: write update_rows and append results to an output workbook (#3239) @ybai08
- fix(value): import core PowerShell modules before a substitution (#3242) @ReguiguiMohamed
- ui: send the login page to the dashboard without built-in auth (#3247) @SCcagg5
- runtime: skip fsync for non-regular step redirects (#3264) @dagomez137
- Offer error messages to servers at run status (#3266) @yohamta0
- Fix tool installs from custom registries rejected by aqua's default policy (#3267) @100apps
- Report scheduled DAGs and what came of their slots (#3269) @yohamta0
- scheduler: hold the first tick after the host wakes from sleep (#3270) @yohamta0
- Decide waiting steps through dagu_execute (#3273) @yohamta0
- Remove remotely deleted DAGs and Wiki pages on Git Sync pull (#3278) @yohamta0
- dagrun: read the latest status from the end of its file (#3280) @yohamta0
- Validate child params when dag.run passes none (#3281) @yohamta0
Contributors
Thanks to our contributors for this release:
| Contribution | Contributor |
|---|---|
| feat(harness): support ACP agents over stdio, WebSocket, and HTTP (#3256), Fix tool installs from custom registries rejected by aqua's default policy (#3267) | @100apps |
| workbook: create the output folder for xlsx.write_cells (#3265) | @MitchelTighe |
| fix(value): import core PowerShell modules before a substitution (#3242) | @ReguiguiMohamed |
| Allow while and until repeat without a condition (#3255) | @RyoKusnadi |
| telemetry: send /v1/traces endpoints to the OTLP/HTTP exporter (#3213), http: leave status_code and headers out of silent JSON output (#3215), runtime: pass the step span to step processes as TRACEPARENT (#3216), file: check the record lock before a compare-and-write (#3224), ui: send the login page to the dashboard without built-in auth (#3247) | @SCcagg5 |
| bug: otel.endpoint ending in /v1/traces is exported over gRPC instead of OTLP/HTTP (#3204), bug: http.request with format: json and silent: true prints status_code 0 and headers null (#3205), feat: pass the step span to step processes as TRACEPARENT and TRACESTATE (#3206) | @SCcagg5 (report) |
| runtime: skip fsync for non-regular step redirects (#3264) | @dagomez137 |
| wait: defer strict validation for value references to run time (#3236), wait.until: native time-of-day gates (offset, timezone, if_past) (#3248) | @ianwalkeruk |
| feat: allow value-resolution in wait.until (build-time validation rejects references) (#3226) | @ianwalkeruk (report) |
| feat: add a local command notification channel (#3157) | @kriyanshii |
| bug: sync from git (#3277) | @sashok60 (report) |
| xlsx: write update_rows and append results to an output workbook (#3239) | @ybai08 |
New Contributors
- @MitchelTighe made their first contribution in #3265
- @100apps made their first contribution in #3267
- @dagomez137 made their first contribution in #3264
- @ybai08 made their first contribution in #3239
- @ianwalkeruk made their first contribution in #3236
Full Changelog: v2.21.0...v2.22.0