Menu

Configuration examples

These examples are intentionally small. Copy the pattern you need and omit the rest.

Replace placeholder model IDs such as <provider/model-strong> with model IDs exposed by your OpenCode installation.

Minimal skeleton

{
  "$schema": "https://raw.githubusercontent.com/geckon/opencode-squad/main/schema/squad.schema.json"
}

Global personalization

Good for ~/.config/opencode/squad.json:

{
  "$schema": "https://raw.githubusercontent.com/geckon/opencode-squad/main/schema/squad.schema.json",
  "primary": {
    "outputIcons": "emoji",
    "userTraits": {
      "communication": "Prefer concise answers first, with details when they affect the decision.",
      "language": "Conversation in the user's language; code, comments, and documentation in English."
    },
    "userRequirements": [
      "Challenge risky assumptions before implementation.",
      "Warn before destructive filesystem operations."
    ]
  }
}

Project rules

Good for <project>/.opencode/squad.json:

{
  "$schema": "https://raw.githubusercontent.com/geckon/opencode-squad/main/schema/squad.schema.json",
  "primary": {
    "projectRequirements": {
      "workflow": [
        "Use the package manager already used by this repository.",
        "Run the repository check command before reporting work as complete."
      ],
      "documentation": ["Write project documentation in English unless the task says otherwise."]
    }
  }
}

Simple model routing

Use one strong model pool for most work and one fast pool for discovery:

{
  "models": {
    "providers": {
      "main": ["<provider/model-strong>"],
      "fast": ["<provider/model-fast>"]
    },
    "handlers": {
      "primary": "@provider/main",
      "developer": "@provider/main",
      "coordinator": "@provider/main",
      "code_analyzer": "@provider/main",
      "scout": "@provider/fast"
    }
  }
}

Beta second opinion

Route /beta to a different model family or provider than normal primary work:

{
  "models": {
    "providers": {
      "main": ["<provider/model-primary>"],
      "second_opinion": ["<provider/model-alternative>"]
    },
    "handlers": {
      "primary": "@provider/main",
      "primary_beta": "@provider/second_opinion"
    }
  }
}

If both handlers resolve to the same concrete model, /beta is hidden because it would not provide an independent review.

Retitler with suggestions

{
  "retitler": {
    "instructions": ["Use ticket IDs when they are clearly present.", "Keep titles short, factual, and searchable."],
    "suggestions": true
  }
}

Global local paths

Only put this in global squad.json:

{
  "paths": {
    "dataDir": "/absolute/path/to/opencode-squad-data",
    "containersDir": "/absolute/path/to/opencode-squad-containers"
  }
}

Most users should leave paths.* unset. Use these fields only when you intentionally need custom local directories.

Combining sections

A real file can combine multiple field groups:

{
  "$schema": "https://raw.githubusercontent.com/geckon/opencode-squad/main/schema/squad.schema.json",
  "primary": {
    "outputIcons": "emoji"
  },
  "retitler": {
    "suggestions": true
  },
  "models": {
    "providers": {
      "main": ["<provider/model-strong>"]
    },
    "handlers": {
      "primary": "@provider/main"
    }
  }
}

Keep combined files readable by grouping related fields and deleting empty sections.

On this page
Manual home Built from Markdown

opencode-squad v0.1.0