github dagucloud/dagu v2.8.0

latest releases: v2.8.2, v2.8.1
4 hours ago

This release makes workflows easier to write, inspect, and run safely.

This release improves value resolution, step outputs, runtime context, and shell execution. It also adds container support for harness.run, Podman runtime support for sandboxing, flexible Kanban views, and HTML artifact previews.

Special thanks to @iandvt for the Podman support and the containerized harness work. These changes make it much easier to run coding agents in a controlled container environment.

Added

Harness steps can now run in containers

Contributed by @iandvt.

harness.run can now run CLI providers inside container:. This works with providers such as claude, codex, copilot, and opencode. It also works with custom harness providers.

Use this when an agent needs a fixed toolchain, explicit mounts, limited credentials, or a separate network setup.

container:
  image: ghcr.io/acme/dagu-agent-runner:latest
  volumes:
    - .:/workspace:rw
  working_dir: /workspace

steps:
  - name: Test
    run: go test ./...

  - name: Fix with Codex
    action: harness.run
    with:
      provider: codex
      prompt: "Fix the failing tests and keep the patch minimal"
      sandbox: workspace-write

The container is the outer execution boundary. Provider-specific options, such as Codex's sandbox flag, are still passed to the provider CLI.

Notes:

  • The provider CLI must exist inside the container image.
  • provider: builtin does not run in a container.
  • Containerized harness steps do not support stdin-based prompt mode.
  • Custom providers should use prompt_mode: arg or prompt_mode: flag.

Podman is now supported

Contributed by @iandvt.

Dagu can now use Podman through its Docker-compatible API.

The same runtime setting applies to root-level container:, step-level container:, docker.run, and containerized harness.run.

DAGU_CONTAINER_RUNTIME=podman \
DAGU_PODMAN_HOST=unix:///run/user/1000/podman/podman.sock \
dagu start-all

These settings come from the Dagu process environment. They are not DAG YAML fields. A workflow cannot switch the runtime by setting DAGU_CONTAINER_RUNTIME inside env:.

Step outputs are now first-class

Steps can publish named outputs through $DAGU_OUTPUT_FILE. Later steps can read them with ${steps.<id>.outputs.<name>}.

steps:
  - id: build
    run: |
      printf 'image_tag=v1.2.3\n' >> "$DAGU_OUTPUT_FILE"
    outputs:
      - name: image_tag

  - id: deploy
    depends: build
    env:
      IMAGE_TAG: ${steps.build.outputs.image_tag}
    run: ./deploy.sh "$IMAGE_TAG"

This gives workflows a clear way to pass values between steps. It avoids parsing stdout or logs for data flow.

Value resolution is more predictable

Dagu now has clearer rules for references such as:

  • ${params.name}
  • ${env.NAME}
  • ${steps.build.outputs.image_tag}
  • ${context.run.id}

If a reference cannot be resolved, Dagu preserves it as text. Validation and the Web UI can show a passive notice. Normal run logs stay quiet.

Runtime context is available through ${context.*}

Workflows can read stable run metadata without relying on internal paths or host environment details.

steps:
  - id: notify
    run: notify.sh '${context.dag.name}' '${context.run.id}'

This includes values such as the DAG name, run ID, step name, log path, artifact directory, and output file path.
Use this instead:

Other improvements

  • Added ${context.*} references for common run metadata, including DAG name, run ID, step name, log paths, artifact paths, and output file paths.
  • Added inline preview for .html and .htm artifacts in the Web UI, with raw mode available.
  • Added saved views to the Overview page. Views can store filters such as workspace, labels, DAG name, and time range.
  • Container volume sources can now use environment variables.
  • Container cleanup is more reliable.
  • Fixed local sub-DAG retry status handling.
  • Scoped DAG detail SSE updates more accurately to the selected remote node.

Fixed

Acknowledgements

Thank you to @iandvt for the Podman runtime support and the containerized harness work. This is a major improvement for users who run coding agents through Dagu and need tighter control over the execution environment.

Contributors

Thanks to our contributors for this release:

Contribution Contributor
bug: subdag still shows running after unexpected restart of dagu container (#2298) @Kirandeep-Singh-Khehra (report)
chore(deps): bump tar from 7.5.13 to 7.5.16 in /npm/dagu in the npm_and_yarn group across 1 directory (#2288), chore(deps): bump the ui-security group across 1 directory with 2 updates (#2289), chore(deps): bump the ui-security group across 1 directory with 3 updates (#2295) @dependabot
feat(runtime): service-selected Docker/Podman container runtime (#2293) @iandvt

New Contributors

Full Changelog: v2.7.17...v2.8.0

Don't miss a new dagu release

NewReleases is sending notifications on new releases.