Skip to content

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

{
"version": "0.1.0",
"project_name": "my-project"
}
FieldTypeDescription
versionstringConfig schema version
project_namestringHuman-readable project identifier

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"]
}
}
FieldTypeDefaultDescription
clistring"agent"CLI tool to spawn for this role
default_modelstringModel identifier (see Model Resolution)
shell_allow_liststring|array"all"Allowed shell commands, or "all"
auto_approveboolfalseAuto-approve tool calls
approval_modestringAlternative to auto_approve: "auto-approve"
timeout_secondsint1200Max seconds per agent invocation
max_prompt_bytesint102400Max prompt size before truncation
no_mcpboolfalseDisable MCP tools for this role
skill_refsarray[]Skills to inject into role prompt

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"]
}
}
FieldTypeDefaultDescription
poll_interval_secondsint5How often the manager polls room states
max_concurrent_roomsint50Maximum parallel war-rooms
max_engineer_retriesint10Retry cap before failed-final
auto_expand_planboolfalseAuto-generate sub-tasks from epics
preflight_skill_checkstring"warn""warn", "error", or "skip"
smart_assignmentboolfalseUse capability matching for assignment
dynamic_pipelinesbooltrueAllow dynamic lifecycle creation
capability_matchingbooltrueMatch roles by capabilities
external_roles_dirsarray[]Additional directories to search for roles

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

Model identifiers follow this format:

provider/model-name@variant

Resolution order:

  1. Room config.json override
  2. Role-specific default_model in .agents/config.json
  3. Role definition model field in role.json
  4. Registry default_model

Examples:

  • google-vertex-anthropic/claude-opus-4-6@default
  • google-vertex/gemini-3.1-pro-preview
  • openai:seed-2-0-pro-260328

Memory Configuration

{
"memory": {
"enabled": true,
"max_summary_bytes": 4096,
"max_detail_bytes": 16384,
"max_context_entries": 15,
"auto_publish_on_done": true
}
}

Channel Configuration

{
"channel": {
"format": "jsonl",
"max_message_size_bytes": 65536
}
}

Release Configuration

{
"release": {
"require_signoffs": ["engineer", "qa", "manager"],
"auto_draft": true
}
}

Runtime Configuration

{
"runtime": {
"max_concurrent_rooms": 9999
}
}

Autonomy Configuration

{
"autonomy": {
"idle_explore_enabled": true,
"interval": 3600
}
}

Enables autonomous exploration when no plan is running.