Configuration
What this is. Team reads one optional project-local file,
.team/config.json. It overrides the bundled model selections used to dispatch body-loaded agents on Codex CLI and Antigravity CLI. Every other setting lives in the host’s own plugin configuration.
Where it lives
.team/config.json sits at the home project root — the project Team was
pointed at when the run began. The same root is used for later slice worktrees
and companion repositories. Team reads only that root’s file: it does not search
ancestor directories and never creates the file for you.
The file is optional. Without it, dispatch uses the
bundled selections. The
repository ignores the whole .team/ directory, so a local override stays
untracked. Pipeline state is separate and lives under
docs/plans/<id>/.
What it configures
Model selection for the hosts that load an agent definition’s body instead of a
native agent file. Claude Code’s named-agent dispatch reads native model: and
effort: frontmatter and ignores this file entirely. OpenCode makes no model
claim through it.
Bundled selections map each Claude tier to a host model:
Agent model: |
Codex model class | Antigravity invocation tier |
|---|---|---|
opus |
astra |
pro |
sonnet |
sol |
flash |
haiku |
luna |
flash_lite |
At dispatch, Team resolves each Codex class to the newest model in that class that the running host offers and that supports the agent effort.
An override replaces individual bundled selections, not the whole map. Tiers you do not name keep their bundled value.
Schema
{
"codex": {
"sonnet": { "model": "terra", "reasoning_effort": "medium" }
},
"antigravity": {
"sonnet": { "model": "flash" }
}
}
- Host keys: only
codexandantigravity. - Tier keys: only
opus,sonnet, andhaiku. - Selection: requires
model. Codex also acceptsreasoning_effort; no other fields are allowed.
Codex
model is a model class or a concrete catalog ID. It is not a Claude alias
(opus, sonnet, haiku), fable, or inherit. A class name has only
lowercase letters. A catalog ID belongs to class sol when its last
hyphen-separated part is sol and the part before that is a numeric version.
A concrete catalog ID pins one version, even when a newer model in its class
exists. The optional reasoning_effort replaces the
agent’s own effort; without it the agent’s effort is preserved. Accepted
efforts: low, medium, high, xhigh, max, ultra.
Antigravity
model must be one of inherit, flash_lite, flash, or pro. Antigravity
selects effort with the invocation tier, so there is no separate effort field.
inherit deliberately chooses the parent session’s model.
How overrides are validated
Before the first dispatch — and again if the host’s provider or model
configuration changes — Team reads the running host’s current capabilities.
Codex exposes its model catalog and supported reasoning efforts; Antigravity
exposes the invoke_subagent model enum.
Team rejects the file when it names an unknown host, tier, or field; omits
model; uses a Claude alias as a Codex model; or selects a model, tier, or
effort the host does not currently offer. A Codex class also fails when the
catalog has no model in that class, when two models tie at the newest version,
or when no model in the class supports the effort. A missing or invalid override is an
error, never a silent fall back to a default. The resolver validates selections
only — it does not query a provider or spawn an agent.
For the dispatch procedure and the full validation contract, see model selection and cross-host portability.
When validation runs
.team/config.json is validated at dispatch time, by the resolver, before a
body-loaded model selection is applied. Nothing validates it ahead of a prompt:
a present file that cannot be read, is not valid JSON, or fails the schema is
reported when the first dispatch needs a selection, not before. An absent file
is valid at every point.