Skip to content

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.

.team/projects/swarm.yaml
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.