Moving from agentWorkflowHash to an on-chain IAgentWorkflow implementation feels like the right architectural move. If the workflow guarantee depends on gate enforcement at each step, then the workflow needs to live where enforcement happens. A contract cannot enforce an off-chain workflow definition it cannot inspect. Making the contract itself the workflow gives the system a stronger trust boundary: sequencing, verifier integration, gate logic, and next-step dispatch are all enforced on-chain.
The choreography model also makes sense. Treating each DAG node as its own contract-agent cycle means the workflow contract can enforce state transitions at every step rather than assuming a single agent executed the whole graph correctly off-chain. It also leaves room for different agents per step, competitive execution, voting, commit-reveal, and application-specific quorum logic without forcing those choices into the base interface.
From an ERC-8001 perspective, I would frame the relationship as complementary, not prescriptive.
ERC-8301 defines the workflow execution surface: execute(AgentTask), step-level dispatch, gate enforcement, and taskResult(taskId).
ERC-8001 defines a coordination gateway: an initiator proposes an intent, participants provide verifiable acceptances, and the intent becomes executable once the required acceptances are present and fresh.
I would not suggest that every ERC-8301 workflow needs to use ERC-8001. Some teams will use centralised coordination services, bespoke controllers, or application-specific quorum logic. That should remain valid. But where a workflow wants reusable, decentralised, inspectable multi-party agreement, ERC-8001 should be part of the conversation.
A clean composition could look like this:
-
An ERC-8301 workflow receives an AgentTask.
-
The workflow checks its own gate for the current DAG node.
-
If that node requires multi-party agreement, the gate can query or validate an ERC-8001 coordination state.
-
If the required acceptances are present and fresh, the workflow emits the next CallAgent.
-
If not, the workflow remains gated.
That keeps ERC-8301 focused on execution while avoiding the need to reinvent participant sets, acceptance attestations, nonce freshness, expiry handling, or EIP-712 / ERC-1271 acceptance semantics inside every workflow implementation.
So I would separate the stack as:
-
ERC-8301: workflow execution
-
ERC-8001: optional decentralised coordination gateway
-
ERC-8274: proof / output verification
-
ERC-8004: agent identity / discovery
One composability point worth considering is whether taskResult(taskId) or the workflow status surface should expose enough context for downstream contracts to understand why a result is safe to consume. For example, a downstream contract may want to know not only that a task completed, but that the relevant gates passed — such as an ERC-8274 proof gate and, where used, an ERC-8001 coordination gate.
That does not mean ERC-8301 needs to depend on ERC-8001 directly. It may be enough to expose a generic gate or context reference so implementations can point to the coordination primitive they used. Centralised coordination, custom coordination, and ERC-8001-based coordination can all coexist. But given ERC-8001 is a finalised coordination standard, I think it is worth making sure ERC-8301’s interface shape leaves a clean path for it to serve as the standard decentralised coordination gateway where that property matters.
All in all, great work so far.