Workspace Isolation
Each rollout runs in its own workspace, with an isolated Docker network with its own containers. This is the unit of multi-tenancy:
- Parallel execution of multiple rollouts without interference
- Clean state between rollouts
- Per-rollout environment variables and configuration
When a rollout finishes, the workspace is torn down. When the next rollout starts, a fresh workspace is provisioned from scratch.
Tool servers expose a standard HTTP API. Any service that implements this protocol can be used as a tool in the Simulation Lab.
A workspace can include multiple tool servers. The agent sees a unified tool list. Tools are automatically namespaced by their server name (e.g., email-env__send_email, chronos-server__create_event). Routing is handled transparently; the agent calls tools by name and the Simulation Lab forwards each call to the correct server.
Each tool server is defined as a YAML file that maps directly to Docker Compose services. Here is the email tool as an example:
name: email
display_name: Email
description: Email sending and inbox management via SMTP server.
category: communication
exposed_ports:
- port: 8025
description: Email web UI
services:
smtp-server:
image: <smtp-image>
ports: ["8025", "1025"]
healthcheck:
interval: 10s
retries: 6
email-env:
image: <tool-server-image>
environment:
SMTP_BASE_URL: http://smtp-server:8025
depends_on:
smtp-server:
condition: service_healthy
The YAML specifies everything Docker needs: images, ports, health checks, environment variables, and dependency ordering. The CLI reads these definitions and composes them into a working docker-compose.yml.
Below is a selection of out-of-the-box tools that come with Simulation Lab. We are continually adding more domain-specific tools as part of our roadmap.
| Name | Category | Description |
|---|
playwright | Browser | Browser automation via Playwright MCP |
coding | Development | Sandboxed shell and filesystem (OpenHands) |
frappe-hrms | Enterprise | Full HR management system (Frappe HRMS) |
email | Communication | Email sending/inbox via MailHog SMTP |
calendar | Productivity | CalDAV calendar (Baikal + Chronos MCP) |
rocketchat | Communication | Open source Slack-equivalent Team chat |
sec-edgar | Finance | SEC EDGAR filings search |
twelve-data | Finance | Market data |
google-workspace | Productivity | Drive, Docs, Sheets |
Domain Templates
Templates are named tool combinations for common domains:
| Template | Included Tools |
|---|
human-resources | frappe-hrms, rocketchat, email, calendar |
customer-service | frappe-helpdesk, rocketchat, email, calendar |
coding | OpenHands |
finance | sec-edgar, twelve-data, google-workspace |
Templates are a starting point; users can then build custom combinations by selecting individual tools.
Environment Composition
The composition engine takes your selected tools and produces a complete Docker Compose stack:
- Collects services from each tool’s YAML definition
- Adds networking — all services join a shared bridge network
- Maps ports — only agent-facing and web UI ports get host bindings; internal services (databases, MCP servers) stay network-only
- Detects port conflicts and auto-resolves them
- Generates a
.env file with placeholders for any required API keys
- Produces a
README.md with endpoints and quickstart commands
This feature is launching soon.
Simulation Lab enables users to bring their own tools via MCP.
The Core Idea
Simulation Lab’s tool server protocol wraps MCP servers. To add your own tools, you point Simulation Lab at your MCP server, and then it becomes available to agents in the workspace, and can be used for task generation and verification.
Two Paths for Integration
For task generation: Provide your MCP tool definitions as JSON. The hosted task generation API consumes them and produces task bundles (instructions, seed data, and verifiers) tailored to your tools.
# Generate tasks for your custom tools
collinear-sim-lab tasks-gen run --tools ./tools.json --out ./bundles/hr-custom
For runtime: Point Simulation Lab at your MCP server URL. It becomes available to agents in the workspace alongside built-in tools. Agents discover it via the unified tool list and call it like any other tool.