I rolled my own simple execution DAG program.
It’s shockingly effective due to rooting sub-DAGs into Planner nodes which are the only mutators of the DAG. The deepest topological leaf nodes become the blockers to the next Planner node.
The only other special node is a Human node; structurally impossible for agents to close (I rolled my own harness) and block on my attention.
Nice, yeah also I have planner nodes, review nodes and organizer nodes (organizers can mutate the graph/workflow, create new node types, etc.) Trying to automate the node type/role definitions and overall workflow definitions as much as possible.
I split my project into 3 layers - the engine/infra layer (handles task dispatch/queuing, spinning up node/agent containers, etc.), the 'brain' - basically a collection of different workflow models and related stuff (multiple different models for testing/exploration purposes), and the harness.
I’d be curious what performance / behavior changes you’d observe with two changes:
- planner nodes and topo deepest for rescheduling, no inflight modifications. (repair protocol = redispatch root planner for rare cases where required; ~9% of the time for me)
- no review nodes; strongly enforced on orchestrator to always do adversarial reviews post-codegen and fix out of band
I found that putting myself in the graph is critical to ongoing fidelity, even if subpar to if I had written it all myself.