Orchestrator { n1: circle label="Complex task arrives" n2: rectangle label="Request shared context" n3: rectangle label="Create research subtask" n4: rectangle label="Create action subtask" n5: rectangle label="Receive findings and results" n6: rectangle label="Compile final answer" n1.handle(right) -> n2.handle(left) n2.handle(bottom) -> SharedMemory.n7.handle(top) [label="Read state"] n3.handle(right) -> n4.handle(left) n3.handle(bottom) -> Researcher.n9.handle(top) [label="Research task"] n4.handle(bottom) -> Operator.n13.handle(top) [label="Action task"] n5.handle(right) -> n6.handle(left) Researcher.n12.handle(top) -> n5.handle(left) [label="Finding"] Operator.n17.handle(top) -> n5.handle(right) [label="Result"] } Researcher { n9: rectangle label="Receive research task" n10: rectangle label="Read shared memory" n11: rectangle label="Analyze with context" n12: rectangle label="Return finding" n9.handle(right) -> n10.handle(left) n10.handle(right) -> n11.handle(left) n11.handle(right) -> n12.handle(left) n10.handle(bottom) -> SharedMemory.n7.handle(left) [label="Read state"] } Operator { n13: rectangle label="Receive action task" n14: rectangle label="Read shared memory" n15: rectangle label="Execute with context" n16: rectangle label="Write result to memory" n17: rectangle label="Return result" n13.handle(right) -> n14.handle(left) n14.handle(right) -> n15.handle(left) n15.handle(right) -> n16.handle(left) n16.handle(bottom) -> SharedMemory.n8.handle(left) [label="Write state"] n15.handle(bottom) -> n17.handle(top) } SharedMemory { n7: rectangle label="Resolve memory request" n8: rectangle label="Update shared state" n7.handle(right) -> n8.handle(left) }