Skip to content

DAW — Dilux Agentic Workflow

verify License: Apache 2.0

A development pipeline your coding agent has to walk through. Phases in order, gates it cannot talk its way past, auditors that did not write the code they review, and state that survives closing the terminal.

Works with Claude Code, Codex CLI, Copilot CLI, Cursor, Gemini CLI and OpenCode — one method, six wirings.

The DAW pipeline: six phases and the gates between them

Install

As a plugin, and nothing of DAW's lands in your repository. The method lives in the tool; what stays with the project is the AGENTS.md you write, the documents each phase produces, and the pipeline's state.

Tool How
Claude Code /plugin marketplace add soydiloreto/dilux-agentic-workflow, then /plugin install daw@dilux --scope project
Copilot CLI .github/INSTALL.md — written as steps to hand to your agent
OpenCode .opencode/INSTALL.md — same, and it registers the plugin in opencode.json

Those two need their own steps for a reason worth knowing before you start: Copilot reads the plugin manifest for its skills and ignores the hooks in it, so the gates ride user-level hooks instead — install the skills and stop, and it looks alive while enforcing nothing.

Codex CLI, Cursor and Gemini CLI are next. All three already run the method, and the test suite drives each one's real hook with that tool's own event format — what is not finished is the plugin path end to end. Today they install by copying the method into the repository, which works and is one command: see docs/INSTALL.md.

Copying the method in is also what you want on any of the six once you need to change how the method works, rather than only use it. Both ways, and what each one costs, are in docs/INSTALL.md.

Then open your agent in the project and ask it for something. The pipeline starts on its own.

🌍 On language. This repo is in English; DAW is not. Its files are prompts, and they carry an explicit directive: answer in the language the user writes in, and write every artifact — PRDs, specs, commit messages — in that same language. Ask in Spanish, get a Spanish PRD.

The problem it solves

Put a coding agent on a real repository and the same three things happen:

  • It skips ahead — straight to the implementation, before anyone agreed on what was being built.
  • It forgets — forty messages in, the decision you made an hour ago is gone.
  • It drowns — give it forty rules and it follows the ones nearest the end of the context window.

None of these is fixed by a better prompt. They are structural.

What it does

CLASSIFY → DEFINE → PLAN → CODE → VERIFY → RELEASE, one phase at a time, with a gate between each pair and your approval on every arrow. Only the current phase's rules enter the context. Every phase commits what it produced. The state lives on disk, so closing the terminal costs you nothing.

And the ceremony matches the size of the request: a question gets an answer, a ten-line fix gets a short lane, a feature gets the full run.

How it works, in detail — the phases, the tiers, the PRD, security.

The distinction the whole thing rests on

A rule written in a prompt is a promise. The model can forget it, misread it, or decide this once does not count.

A rule enforced by a hook is a guarantee. Before every write, code outside the model reads the state and refuses a transition the graph does not carry, and a write of product source from a phase whose rules forbid it. There is no talking past either one, because the decision never reaches the model. Try to write code with no approved spec and the write does not happen — not "the agent apologizes and continues".

Where that guarantee ends, stated plainly: it covers the write tools. A shell command does not go through them, so bash -c 'cat > src/x.py' reaches the disk. DAW does not try to parse your shell to catch it — every spelling it failed to anticipate would fail open, and a guard that reads as total and is not is worse than an honest gap. What it does instead is notice, and say so.

That is the line through every decision here: if a rule matters, it is executable. If it cannot be executed, it does not get to call itself a gate.

Not every gate is the same strength, and DAW says which

A gate is refused-without and recorded. What backs the claim is graded, and the grading is written down instead of implied: the PRD's gate rests on a receipt naming the document's current bytes, the commit gate asks git, and the rest rest on the model's record of what it did.

That grading is not ours. Supply chain security calls the artifact an attestation and the graded version provenance — at SLSA level 1 it may be self-declared by whoever did the work, and from level 2 it is produced by the platform and cannot be forged by the party doing the work. A required status check is the same idea in the shape everyone uses daily: you cannot merge until CI reports the check, and you cannot report it for CI.

Two gates stay self-declared on purpose. sast has nothing to run — it is a model reading code, and a receipt would dress a report up as proof. tests would mean DAW running your suite in your repository, guessing your runner and your environment: CI can do that because CI is the environment, and a gate that cannot be satisfied honestly gets satisfied dishonestly. Both stay in the pipeline, gated and sequenced, and stay honest about what they are.

Which gate rests on what, and why

Status

  • Claude Code — exercised end to end, and all four acceptance checks pass against the live tool (2.1.220, 2026-07-28; the record is in scripts/acceptance.md). Told to write source with no approved spec, the write is refused by the hook rather than declined by the model.
  • OpenCode — the same four, against the live tool (1.18.9, 2026-07-29). That session is also where two defects were found, which is the argument for doing this by hand.
  • Copilot CLI — three of the four (1.0.75, 2026-07-29). The fourth is detected and not prevented, and the ceiling is the tool's: its post hook cannot refuse anything.
  • Codex CLI, Cursor, Gemini CLI — each adapter is driven through its own hook, with its own event format, by the test suite: it must refuse an illegal transition and let a legal one through. What has not been done for these three is a full session against the live tool, so treat their status as verified at the boundary, unverified in the wild. Reports welcome.
bash scripts/verify_install.sh    # the full suite: install, FSM, and every adapter's enforcement
python3 scripts/lint_method.py    # the prose against the graph, the catalog and the filesystem
python3 scripts/mutate.py         # breaks DAW on purpose and checks the suite notices

Docs

docs/INSTALL.md Both ways in, upgrading, uninstalling, what lands where
docs/METHOD.md How a request flows, and why each part is shaped that way
docs/AGENTS-MD.md The one file you write — and why a missing heading fails quietly
docs/RATIONALE.md Every decision that could have gone the other way, and its cost
docs/DEVELOPMENT.md Internals: the orchestrator, the state machine, the hooks
docs/AI-POLICY.md How AI-generated work is handled here, and who is accountable
daw/rules/README.md The method itself, phase by phase
adapters/adapter.schema.md How to add a seventh tool

CONTRIBUTING.md · SECURITY.md · CODE_OF_CONDUCT.md

Something to report? A bug, an adapter you drove against a real tool, a decision you would have made differently — each has its own form. A vulnerability goes to a private advisory, never a public issue.

Where it comes from

Years of building production software with teams, where you find out quickly which parts of a process earn their cost and which ones everybody routes around. DAW is that way of working, built completely for once, with nothing left as an intention. Every decision in it is one I would defend on its own terms, and docs/RATIONALE.md is where I do.

— Pablo Ariel Di Loreto

License

Apache 2.0. Use it, fork it, adapt it to how your team actually works — that last one is the point. The license grants patent rights explicitly and reserves the names: fork the method freely, call your fork something else.

Copyright 2026 Pablo Ariel Di Loreto.


Built by Pablo Di Loreto — Director of Engineering, Microsoft MVP for Azure & AI, and someone who got tired of explaining the same process to an agent every morning.

DAW is the framework behind the Agentic Orchestration module of AI-First Builders Lab, where students take it apart, rewire it for their own stack, and port it to a second tool.

About

A development pipeline your coding agent has to walk through: six phases, gates enforced outside the model, and one method wired into six tools.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages