How to isolate AI agent work between client projects
Give every client a separate city and open a road only when two chairs have a legitimate reason to exchange information.
Reviewed against Agents City 0.3.0-beta.22 · commit c985198 ↗The real problem
A consultancy works on a retail platform and a healthcare portal from the same laptop. Reusing one long-running agent workspace risks context bleed, confused goals, and accidental cross-client coordination.
Target outcome
Each client gets a stable identity, private configuration, repositories, knowledge, deliberations, runtime session, and road allowlist. Shared work crosses only an explicit seat-to-seat route.
client-retail · client-health · shared-platform
client-retailclient cityRetail repositories, goal, knowledge, and deliberations
client-healthclient cityHealthcare repositories and a separate compliance context
shared-platforminternal cityOnly the common dependency that may affect both clients
Before you start
- 01
A clear list of which repositories and knowledge belong to each client.
- 02
Separate local repository folders and provider permissions appropriate to each engagement.
- 03
An explicit rule for what, if anything, may cross through a shared internal city.
How to do it
Step 01 Create one city per client
Create managed cities instead of copying folders or reusing an identity. Configure each seat, goal, repositories, roles, and engines independently.
$agents-city cities create client-retail$agents-city cities create client-health$agents-city cities listStep 02 Configure and inspect each boundary
Open each city separately. Confirm that its owner card contains only the intended repositories and that no road appeared implicitly.
$agents-city seat --city client-retail --repos$agents-city seat --city client-health --repos$agents-city road list client-retailStep 03 Model shared work as its own city
If both clients depend on an internal platform, give that responsibility its own goal and chair instead of connecting the client cities directly.
$agents-city cities create shared-platform$agents-city seat --city shared-platformStep 04 Open only the roads the dependency needs
Connect each client seat to the shared-platform seat. Check the roster from the active seat before sending evidence. The road does not expose either client repository.
$agents-city road connect client-retail shared-platform$agents-city road connect client-health shared-platform$agents-city bus roster
What you should get
- Switching cities does not merge goals, repo lists, knowledge, committees, or tmux sessions.
- Client seats cannot address one another unless a road is deliberately added.
- The shared platform receives only messages admitted through its own seat boundary.
What this does not solve
- City isolation is an application boundary, not a separate operating-system account or VM.
- Every configured runtime still runs as the local OS user unless you add stronger host isolation.
- Do not send confidential client text across a road merely because the route exists.