Skip to main content

Agentic Development Workflow (ADW)

The ADW is Wasteology's AI-powered development pipeline. Instead of a human developer writing every line of code, AI agents implement features from a written specification — then a human reviews what was built in a safe sandbox environment before it ever reaches production.

The core principle: humans own sign-off, not authorship.

For leadership: how this is different from "vibe coding" or an off-the-shelf AI tool

Read the ADW Translation Matrix ↗ — a leadership-facing breakdown of six pillars of this platform (the spec-first pipeline, the knowledge graph, the evidence gate, 24/7 monitoring, access governance, and unified intake), each translated from technical reality into business argument.

Want the full hands-on course?

This page is the quick-start. For the step-by-step curriculum — install Claude Code, ground an agent with lat.md, write a spec, run the local loop, scale to the cloud, and onboard your own project — take the ADW Track in Wasteology Academy ↗ (labs + knowledge checks + a capstone).


The Five-Step Pipeline

Every piece of work — bug fixes, new features, chores — follows the same five steps:

ADW Five-Step Pipeline

StepWho does itWhat happens
Identify & ClassifyHuman or automated triggerIssue is categorized — bug, feature, or chore
Draft SpecificationHuman (with AI assist)A spec document is written describing exactly what to build and how to verify it
Review SpecificationAI architect agentThe spec is checked for completeness, clarity, and technical soundness
Implement in SandboxAI agentsCode is written and deployed to the sandbox environment
ValidateAI Playwright agentThe implementation is tested against the spec's acceptance criteria
Human ApprovalYouYou review the working feature in sandbox and decide whether it's ready
Promote to ProductionCI/CD pipelineApproved code goes live automatically

The Three Environments

Work moves through three isolated environments. Each has a distinct owner and purpose.

ADW Environment Model

Key rule: Nothing reaches production until a human has reviewed the working feature in sandbox. There is no shortcut path.

What "sandbox" means

Sandbox is not a mock environment — it's a complete, running copy of the application with a real database and real API. AI agents deploy their implementation there automatically. You review actual behavior (not code) before approving.


The Spec Lifecycle

Every work item is anchored to a specification document. The spec drives everything: what gets built, how it's tested, and when it's done.

ADW Spec Lifecycle

Spec files live in the project's specs/ directory as self-contained HTML documents. Open any .html file in a browser to read it.


What You Do as a Human Reviewer

Your role in the ADW pipeline is to:

  1. Review the spec before agents start — does it describe the right behavior? Is anything missing?
  2. Review sandbox output — navigate to the sandbox URL and use the feature as a real user would
  3. Approve or request changes — if the feature works correctly, approve it; if not, describe what's wrong and the cycle repeats

You do not need to read code, write tests, or understand implementation details. Your input is behavioral: does the feature do what was specified?


How to Trigger Work

All ADW work is initiated from the wg-orchestration project with Claude Code:

# Create a new specification (starts the pipeline)
/spec-create "description of the feature or change"

# Implement immediately in the current Claude session
/task <spec-id>

# Dispatch to overnight ADW pipeline
/dispatch --go

If you're working in any other project directory, cd ~/projects/wg-orchestration first — spec creation and dispatch always run from there.


Mars / Orbit Platform Example

The Mars work order platform (mars_workorder_system) uses a refined version of this workflow:

  • Specs live in mars_workorder_system/specs/ as numbered HTML documents (01-adw-workflow-init.html, 02-backend-skeleton.html, etc.)
  • The sandbox environment is orbit-backend-sandbox on Azure
  • Playwright validation automatically tests scenarios listed in each spec
  • The roadmap (specs/roadmap.html) tracks the status of all specs

See it in action: Watch a 2-minute narrated replay of a real run on the Orbit ADW Workflow page.

📽 Executive briefing deck: Open an 11-slide interactive briefing on ADW governance and adoption, for leadership audiences (opens full-screen; arrow keys to navigate).


Newer Projects: Self-Updating Roadmaps

The newest ADW projects (starting with the Avalara tax commit & reconciler) add three refinements that make the roadmap trustworthy without extra bookkeeping:

  • Specs are drafted with OpenSpec — an open spec-driven-development standard. You and the AI agree on what to build before any code is written, and the specification lives in the repo as the source of truth.
  • The roadmap updates itself. It's a single structured file where every deliverable moves through planned → implemented → validated → deployed automatically — flipping to implemented when its spec merges and to validated when its test/Playwright evidence is on file. No one hand-maintains status.
  • A CI gate makes "done" mean proven. Every pull request is checked automatically; a deliverable cannot be marked validated without its validation evidence, and the check blocks the merge otherwise. The check is plain, deterministic tooling — no AI cost.

The result: at any moment the roadmap reflects reality, and nothing is called finished until it's been demonstrated.

For the engineering detail (the TOML source of truth, the roadmap.py tool, and the exact status transitions), see the Orbit ADW Workflow page.


Known Gotcha: CLI Version Drift Breaks Headless Slash Commands

A silently-upgraded Claude Code CLI can make an ADW pipeline pass green having done nothing

Applies to: any repo whose ADW pipeline shells out to the bare headless Claude Code CLI on the shared ADW-Agents self-hosted pool (Azure Container Apps, image built from wg-orchestration's adw-agent Dockerfile) and drives its loop through a repo-local slash command like /adw.

Not applicable to Pipeline 9's Anthropic-SDK tool-loop, which never invokes the CLI product and so is immune to CLI-version drift.

What happened (2026-09-09, portal-reconciliation — build 8796, work item #516). The pool image is rebuilt independently of the repos that use it, and its pre-installed Claude Code CLI jumped 2.1.63 → 2.1.197 between two pipeline runs. The pipeline's /adw <id> invocation was then parsed as a literal unrecognized command, Claude replied "Unknown command: /adw", and the run exited reporting success with zero real work done.

The dangerous part: claude --print exits 0 regardless. A pipeline that trusts the exit code alone reports a false-green build that built nothing — and the requester waits on a PR that will never appear.

Two distinct causes — don't stop at the first one

"Workspace trust" is only half the story

Workspace trust was the first hypothesis, and a fix based on it alone still failed identically on retry (build 8808, same work item). Local repro isolated two separate effects of the version jump.

1. The actual blocker: CLAUDE_CODE_SIMPLE=1 changed meaning across CLI versions. The pipeline had set this env var since its creation, to "reinforce headless/simple mode." On 2.1.63 it only trims the tool list. On 2.1.197 it also unconditionally strips every project-level slash command — including the repo's own /adwregardless of workspace trust. Confirmed locally: 2.1.197 + CLAUDE_CODE_SIMPLE=1 drops /adw even with trust accepted; the same binary loads /adw fine once trusted if CLAUDE_CODE_SIMPLE is unset.

2. A separate, genuinely real issue: a workspace-trust gate that --dangerously-skip-permissions does not bypass. In an untrusted cwd, 2.1.197 ignores .claude/settings.json permissions.allow and logs a warning. Worth fixing on its own merits — but fixing only this does not restore /adw while CLAUDE_CODE_SIMPLE=1 is set on a newer CLI.

The four-part fix

Applied and verified in portal-reconciliation's azure-pipelines-adw.yml (PR #1376, branch fix/adw-pipeline-cli-trust-regression). Port all four to any ADW pipeline on this pool.

#FixWhy
1Pin the CLI to a known-good version via a local npm prefix — npm install --prefix $HOME/.adw-claude-pin @anthropic-ai/claude-code@<version>Don't trust whatever a shared pool image happens to ship. A local prefix needs no root and won't collide with the root-owned pre-installed copy. Make it best-effort: fall back to the pre-installed CLI if the install fails, so a network hiccup never hard-fails the step. This is what actually keeps the pipeline working.
2Make the pinned binary survive the step boundary — symlink it into $HOME/.local/bin/claude rather than relying on export PATH=Each Azure Pipelines script: block is a fresh shell, so a PATH-prepend is step-local and silently no-ops by the time a later step runs claude. See the callout below — this is a general ADO lesson, not a CLI-specific one.
3Stamp workspace trust on every run — merge projects["<cwd>"].hasTrustDialogAccepted = true into ~/.claude.json before invoking claudeFixes cause (2) above; not sufficient on its own. A one-time interactive trust accept does not stick, because the self-hosted agent's checkout path varies per run (/azp/_work/N/s). Merge, don't overwrite — preserve the file's other keys.
4Never treat exit 0 as proof of work — gate the build on a concrete downstream artifactConfirm a PR was actually opened and linked to the originating work item before marking the build green. In portal-reconciliation this existing silent-empty-run guard is what caught both failed attempts instead of publishing a false green.
Gotcha inside the gotcha: PATH does not cross Azure Pipelines steps

The first fix attempt (build 8808) installed the pinned CLI correctly and logged the right version in its own step — then the ADW step still launched the old pre-installed one. Every script: block gets a fresh shell, so export PATH=... never reaches the next step. Hand a tool install across steps via a disk-backed location already on PATH (here $HOME/.local/bin, which later steps add for uv). This applies to any multi-step ADO pipeline chaining tool installs — not just this CLI pin.

Symptom to look for

An ADW build that succeeds in minutes with no spec, no branch, and no PR. Search the run log for Unknown command: — that string plus a green build is this exact failure. If you've already stamped trust and the warning is gone but the symptom persists, check for CLAUDE_CODE_SIMPLE (or any similar mode-forcing env var) in the pipeline.

Canonical version lives in shared infra

This is a shared-infrastructure lesson, not a portal-reconciliation one. The canonical cross-project write-up is recorded in wg-orchestration's lat.md/operations.md — check there first for the current pinned version and the exact pipeline snippets. The portal-reconciliation specifics are in that repo's lat.md/operations.md.

Any new repo adopting this pattern — especially any repo copying a CLAUDE_CODE_SIMPLE=1-style env var into a headless pipeline — should port the pin, the cross-step PATH fix, and the trust-stamp up front rather than rediscovering them the hard way.


Frequently Asked Questions

Q: What if the agents build the wrong thing?
The spec is the contract. If agents misimplement it, they fix it. If the spec was wrong, the spec is updated and the cycle repeats. Either way, nothing incorrect reaches production.

Q: Can I still write code myself?
Yes. The ADW pipeline is the standard path, but developers can implement directly on feature branches. The spec still exists — it just gets implemented manually instead of by agents.

Q: How long does a typical cycle take?
Simple features: a few minutes to a few hours. The agents work continuously; the bottleneck is human review time.

Q: What's the overnight ADW pipeline?
Specs dispatched with /dispatch --go are picked up by an automated pipeline that runs outside business hours. You find the results in sandbox the next morning, ready to review.