Multi-agent ACLs in one project
A pattern for fitting more than one worker (and a read-only critic) under a single manager — with channel membership doing the ACL work, not runtime gating. #product is the open team room; #internal is a back-channel for the two devs only; #all is the wildcard. The critic sits in permission_mode: plan and so cannot mutate anything it reviews.
The patterns here also show up organically in examples/newsletter-office/ (layered managers + workers) and examples/oss-maintainer/ (channel-isolated pipeline). The compose file below stays preserved as a reference recipe.
version: "2.0.0"
project: id: swarm name: Multi-Agent Swarm cwd: .
channels: - name: product members: [manager, dev1, dev2, critic] - name: internal members: [dev1, dev2] - name: all members: "*"
managers: manager: runtime: claude-code model: claude-opus-4-8 can_dm: [dev1, dev2, critic] can_broadcast: [product, all]
workers: dev1: runtime: claude-code model: claude-sonnet-4-6 reports_to: manager can_dm: [manager, dev2, critic] can_broadcast: [product, internal] dev2: runtime: claude-code model: claude-sonnet-4-6 reports_to: manager can_dm: [manager, dev1, critic] can_broadcast: [product, internal] critic: runtime: claude-code model: claude-opus-4-8 permission_mode: plan reports_to: manager can_dm: [manager, dev1, dev2] can_broadcast: [product]The critic in permission_mode: plan is the same archetype as market-analysis’s risk dissenter — a read-only agent that proposes but never mutates.