Configuration
The .agents/config.json file is the central configuration for an OSTwin project. It controls role behavior, model selection, concurrency, memory, channels, and release policy.
Top-Level Fields
Section titled “Top-Level Fields”{ "version": "0.1.0", "project_name": "my-project"}| Field | Type | Description |
|---|---|---|
version |
string |
Config schema version |
project_name |
string |
Human-readable project identifier |
Role Overrides
Section titled “Role Overrides”Each role can be configured at the top level using its name as the key. Common fields:
{ "engineer": { "cli": "agent", "default_model": "google-vertex-anthropic/claude-opus-4-6@default", "shell_allow_list": "all", "auto_approve": true, "timeout_seconds": 1200, "max_prompt_bytes": 102400, "no_mcp": false, "skill_refs": ["web-research"] }}| Field | Type | Default | Description |
|---|---|---|---|
cli |
string |
"agent" |
CLI tool to spawn for this role |
default_model |
string |
— | Model identifier (see Model Resolution) |
shell_allow_list |
string|array |
"all" |
Allowed shell commands, or "all" |
auto_approve |
bool |
false |
Auto-approve tool calls |
approval_mode |
string |
— | Alternative to auto_approve: "auto-approve" |
timeout_seconds |
int |
1200 |
Max seconds per agent invocation |
max_prompt_bytes |
int |
102400 |
Max prompt size before truncation |
no_mcp |
bool |
false |
Disable MCP tools for this role |
skill_refs |
array |
[] |
Skills to inject into role prompt |
Manager Configuration
Section titled “Manager Configuration”The manager key has additional orchestration fields:
{ "manager": { "default_model": "google-vertex-anthropic/claude-opus-4-6@default", "poll_interval_seconds": 5, "max_concurrent_rooms": 50, "max_engineer_retries": 10, "auto_approve_tools": true, "state_timeout_seconds": 2400, "auto_expand_plan": false, "preflight_skill_check": "warn", "smart_assignment": false, "dynamic_pipelines": true, "capability_matching": true, "external_roles_dirs": [], "skill_refs": ["risk-decision", "war-room-communication"] }}| Field | Type | Default | Description |
|---|---|---|---|
poll_interval_seconds |
int |
5 |
How often the manager polls room states |
max_concurrent_rooms |
int |
50 |
Maximum parallel war-rooms |
max_engineer_retries |
int |
10 |
Retry cap before failed-final |
auto_expand_plan |
bool |
false |
Auto-generate sub-tasks from epics |
preflight_skill_check |
string |
"warn" |
"warn", "error", or "skip" |
smart_assignment |
bool |
false |
Use capability matching for assignment |
dynamic_pipelines |
bool |
true |
Allow dynamic lifecycle creation |
capability_matching |
bool |
true |
Match roles by capabilities |
external_roles_dirs |
array |
[] |
Additional directories to search for roles |
Instances
Section titled “Instances”Roles that support instance_support: true in the registry can define named instances:
{ "engineer": { "instances": { "fe": { "display_name": "Frontend Engineer", "default_model": "google-vertex-anthropic/claude-opus-4-6@default", "timeout_seconds": 2400, "working_dir": "dashboard", "skills": ["javascript", "typescript", "css"] }, "be": { "display_name": "Backend Engineer", "default_model": "google-vertex-anthropic/claude-opus-4-6@default", "working_dir": "api", "skills": ["python", "sql", "docker"] } } }}Each instance inherits from the parent role config and can override any field.
Model Resolution
Section titled “Model Resolution”Model identifiers follow this format:
provider/model-name@variantResolution order:
- Room
config.jsonoverride - Role-specific
default_modelin.agents/config.json - Role definition
modelfield inrole.json - Registry
default_model
Examples:
google-vertex-anthropic/claude-opus-4-6@defaultgoogle-vertex/gemini-3.1-pro-previewopenai:seed-2-0-pro-260328
Memory Configuration
Section titled “Memory Configuration”{ "memory": { "enabled": true, "max_summary_bytes": 4096, "max_detail_bytes": 16384, "max_context_entries": 15, "auto_publish_on_done": true }}Channel Configuration
Section titled “Channel Configuration”{ "channel": { "format": "jsonl", "max_message_size_bytes": 65536 }}Release Configuration
Section titled “Release Configuration”{ "release": { "require_signoffs": ["engineer", "qa", "manager"], "auto_draft": true }}Runtime Configuration
Section titled “Runtime Configuration”{ "runtime": { "max_concurrent_rooms": 9999 }}Autonomy Configuration
Section titled “Autonomy Configuration”{ "autonomy": { "idle_explore_enabled": true, "interval": 3600 }}Enables autonomous exploration when no plan is running.
