Files
cleveragents-core/opencode.json
T
drew 1eac4ea233 refactor(auto-agents): manifest-driven tier-model registry, slot-based naming
Replace the scattered per-agent .txt-file mapping (whose names embedded
model-family identity like tier-qwen-med and tier-kimi and went stale
the moment a model was swapped) with a single source-of-truth manifest
at .opencode/models/tiers.yaml. The four tier slots get model-agnostic
slot-based names (tier-min, tier-0, tier-1, tier-2); the model in each
slot is configured ONLY in the manifest.

Derived artifacts (per-agent .txt files and the mapping table block in
tier-dispatcher.md) are now generated by tools/sync_tier_models.py.
A drift-detection test in tests/auto_agents/test_tier_model_registry.py
fails CI if any derived file diverges from the manifest, if an agent
referenced by the manifest lacks an agent file, if the manifest cites
a provider not declared in opencode.json, or if opencode.json carries
a stale tier-* entry.

To swap a model in a slot: edit tiers.yaml -> run
python3 tools/sync_tier_models.py -> commit. The runtime dispatcher
re-reads the .txt files per cycle (no restart); the static OpenCode
config path needs a server restart.

Tier rename mapping (escalation_tier integers UNCHANGED):
  tier-qwen-small  -> tier-min  (slot -1)
  tier-qwen-med    -> tier-0    (slot  0, default first attempt)
  tier-qwen-large  -> tier-1    (slot  1)
  tier-kimi        -> tier-2    (slot  2)

Vestigial tier-* agents removed (declared but never in the active
mapping): tier-haiku, tier-sonnet, tier-opus, tier-codex,
tier-gpt5-mini, tier-gpt5-nano, tier-o4-mini.

estimator-implementation.md now reasons in capability descriptors
(cheapest / default / advanced / complex) instead of model-family
labels (qwen-small / qwen-med / qwen-large / kimi), so the estimator
stays correct across model swaps. The stale "default tier = gpt-5-mini"
docstring claim (already drifted to claude-haiku-4-5) is removed.

Companion prose updates across every consumer of tier names:
- Agent prompts: tier-dispatcher.md, implementation-worker.md,
  estimator-implementation.md
- Skills: implementer-pr-context, implementer-workspace
- Python: dispatch_implementer.py, _opencode_worker.py,
  _pr_context_sentinel.py, implementer_workspace.py,
  setup_auto_labels.py, _attempt_history.py
- Tests: test_worker_permissions.py (parametrize list + byte-identity
  test now covers 4 slot files instead of 3 family-named files),
  test_opencode_worker_models.py (synthetic-fixture names updated)
- Docs: .opencode/models/README.md, docs/development/models.md,
  docs/development/agent-system-specification.md,
  docs/development/auto-agents-tier-2-3-plan.md,
  docs/development/implementer-in-cycle-escalation-plan.md,
  docs/development/final-working-harvest-plan.md

Validation: 1625 tests pass (+6 net new from the tier-registry test
file), 3 skipped. python3 tools/sync_tier_models.py --check exits 0.
local_ci_gate.sh --gate lint PASS.

Files: 9 added, 22 deleted, 18 modified. The drift-detection test
ran green on every step of the refactor, catching one out-of-sync
.txt file before commit.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 12:49:31 -04:00

422 lines
16 KiB
JSON

{
"$schema": "https://opencode.ai/config.json",
"permission": "allow",
"instructions": [
".opencode/instructions/*.md"
],
"mcp": {
"context7": {
"type": "local",
"command": [
"npx",
"-y",
"@upstash/context7-mcp"
],
"enabled": true
},
"sequential-thinking": {
"type": "local",
"command": [
"npx",
"@modelcontextprotocol/server-sequential-thinking"
],
"enabled": false
}
},
"provider": {
"anthropic": {
"models": {
"anthropic/claude-opus-4-6": {
"name": "Claude OPUS 4.6",
"limit": {
"context": 200000,
"output": 32768
}
},
"anthropic/claude-haiku-4-5": {
"name": "Claude Haiku 4.5",
"limit": {
"context": 200000,
"output": 32768
}
},
"anthropic/claude-sonnet-4-6": {
"name": "Claude Sonnet 4.6",
"limit": {
"context": 200000,
"output": 32768
}
}
}
},
"local-claude": {
"npm": "@ai-sdk/anthropic",
"options": {
"baseURL": "http://127.0.0.1:3456/v1",
"apiKey": "{env:LOCAL_ANTHROPIC_API_KEY}"
},
"models": {
"claude-sonnet-4-6": {
"name": "Claude Sonnet 4.6 (local proxy)",
"limit": {
"context": 200000,
"output": 32768
},
"tools": true
},
"claude-opus-4-6": {
"name": "Claude Opus 4.6 (local proxy)",
"limit": {
"context": 1000000,
"output": 32768
},
"tools": true
},
"claude-haiku-4-5": {
"name": "Claude Haiku 4.5 (local proxy)",
"limit": {
"context": 200000,
"output": 32768
},
"tools": true
}
}
},
"CleverThis": {
"npm": "@ai-sdk/openai-compatible",
"options": {
"baseURL": "https://ke5ntcikhnj2clcp.us-east-1.aws.endpoints.huggingface.cloud/v1",
"apiKey": "{env:HF_TOKEN}",
"headers": {
"X-HF-Bill-To": "CleverThis",
"Authorization": "Bearer {env:HF_TOKEN}"
}
},
"models": {
"Qwen3-6-35B-A3B-GGUF-BF16": {
"name": "Qwen 3.6 35b A3B GGUF BF16 (Thinking)",
"tools": true
}
}
},
"CleverThis-2": {
"npm": "@ai-sdk/openai-compatible",
"options": {
"baseURL": "https://bqdgwv2uzjgianhe.us-east-2.aws.endpoints.huggingface.cloud/v1",
"apiKey": "{env:HF_TOKEN}",
"headers": {
"X-HF-Bill-To": "CleverThis",
"Authorization": "Bearer {env:HF_TOKEN}"
}
},
"models": {
"MiniMax-M2-7-GGUF-BF16": {
"name": "MiniMax M2.7 GGUF BF16 (Thinking)",
"limit": {
"context": 196608,
"output": 65536
},
"tools": true
}
}
},
"CleverThis-3": {
"npm": "@ai-sdk/openai-compatible",
"options": {
"baseURL": "https://jve0bsgx6csdzln9.us-east-1.aws.endpoints.huggingface.cloud/v1",
"apiKey": "{env:HF_TOKEN}",
"headers": {
"X-HF-Bill-To": "CleverThis",
"Authorization": "Bearer {env:HF_TOKEN}"
}
},
"models": {
"Devstral-Small-2-24B-Instruct-GGUF": {
"name": "Devstral Small 2 24B GGUF (Instruct)",
"tools": true
}
}
},
"CleverThis-4": {
"npm": "@ai-sdk/openai-compatible",
"options": {
"baseURL": "https://ntgtpdbn2vuag4yb.us-east-2.aws.endpoints.huggingface.cloud/v1",
"apiKey": "{env:HF_TOKEN}",
"headers": {
"X-HF-Bill-To": "CleverThis",
"Authorization": "Bearer {env:HF_TOKEN}"
}
},
"models": {
"Kimi-K2-6-GGUF-Q2-K-XL": {
"name": "Kimi K2.6 GGUF Q2_K_XL (Thinking)",
"tools": true
}
}
},
"CleverThis-5": {
"npm": "@ai-sdk/openai-compatible",
"options": {
"baseURL": "https://fhe4kwehnm1rb275.us-east-1.aws.endpoints.huggingface.cloud/v1",
"apiKey": "{env:HF_TOKEN}",
"headers": {
"X-HF-Bill-To": "CleverThis",
"Authorization": "Bearer {env:HF_TOKEN}"
}
},
"models": {
"Qwen3-Coder-Next-GGUF-BF16": {
"name": "Qwen3 Coder Next GGUF BF16",
"tools": true
}
}
},
"CleverThis-6": {
"npm": "@ai-sdk/openai-compatible",
"options": {
"baseURL": "https://f0oelboag4bzw1zp.us-east-1.aws.endpoints.huggingface.cloud/v1",
"apiKey": "{env:HF_TOKEN}",
"headers": {
"X-HF-Bill-To": "CleverThis",
"Authorization": "Bearer {env:HF_TOKEN}"
}
},
"models": {
"Nemotron-3-Nano-30B-GGUF-Q8-K-XL": {
"name": "Nemotron 3 Nano 30B GGUF Q8_K_XL (Thinking)",
"tools": true
}
}
},
"CleverThis-7": {
"npm": "@ai-sdk/openai-compatible",
"options": {
"baseURL": "https://dfwwzwtekzhnh4fl.us-east-2.aws.endpoints.huggingface.cloud/v1",
"apiKey": "{env:HF_TOKEN}",
"headers": {
"X-HF-Bill-To": "CleverThis",
"Authorization": "Bearer {env:HF_TOKEN}"
}
},
"models": {
"DavidAU/Qwen3.6-40B-Claude-4.6-Opus-Deckard-Heretic-Uncensored-Thinking": {
"name": "Qwen 3.6 40B Uncensored BF16 (Thinking)",
"tools": true
}
}
},
"CleverThis-8": {
"npm": "@ai-sdk/openai-compatible",
"options": {
"baseURL": "https://ki19d58snp1d3qa4.us-east-1.aws.endpoints.huggingface.cloud/v1",
"apiKey": "{env:HF_TOKEN}",
"headers": {
"X-HF-Bill-To": "CleverThis",
"Authorization": "Bearer {env:HF_TOKEN}"
}
},
"models": {
"Qwen3-Coder-Next-GGUF-Q4-0": {
"name": "Qwen3 Coder Next GGUF Q4_0",
"tools": true
}
}
},
"CleverThis-9": {
"npm": "@ai-sdk/openai-compatible",
"options": {
"baseURL": "https://m56026p5kxvout0d.us-east-1.aws.endpoints.huggingface.cloud/v1",
"apiKey": "{env:HF_TOKEN}",
"headers": {
"X-HF-Bill-To": "CleverThis",
"Authorization": "Bearer {env:HF_TOKEN}"
}
},
"models": {
"Qwen3-6-35B-A3B-GGUF-MXFP4-MOE": {
"name": "Qwen 3.6 35b A3B GGUF MXFP4_MOE (Thinking)",
"tools": true
}
}
},
"CleverThis-10": {
"npm": "@ai-sdk/openai-compatible",
"options": {
"baseURL": "https://dirv1cnem5wqzoax.us-east-1.aws.endpoints.huggingface.cloud/v1",
"apiKey": "{env:HF_TOKEN}",
"headers": {
"X-HF-Bill-To": "CleverThis",
"Authorization": "Bearer {env:HF_TOKEN}"
}
},
"models": {
"Qwen3-235B-A22B-INST-GGUF-Q8-0": {
"name": "Qwen3 235b A22B GGUF Q8_0 (Instruct)",
"tools": true
}
}
},
"CleverThis-11": {
"npm": "@ai-sdk/openai-compatible",
"options": {
"baseURL": "https://hueiyrdbly1ff4oo.us-east-1.aws.endpoints.huggingface.cloud/v1",
"apiKey": "{env:HF_TOKEN}",
"headers": {
"X-HF-Bill-To": "CleverThis",
"Authorization": "Bearer {env:HF_TOKEN}"
}
},
"models": {
"Qwen3-235B-A22B-INST-GGUF-UD-Q2-K-XL": {
"name": "Qwen3 235b A22B GGUF UD-Q2_K_XL (Instruct)",
"tools": true
}
}
},
"CleverThis-12": {
"npm": "@ai-sdk/openai-compatible",
"options": {
"baseURL": "https://atocunu78hjdnu3f.us-east-1.aws.endpoints.huggingface.cloud/v1",
"apiKey": "{env:HF_TOKEN}",
"headers": {
"X-HF-Bill-To": "CleverThis",
"Authorization": "Bearer {env:HF_TOKEN}"
}
},
"models": {
"Qwen3-30B-A3B-INST-GGUF-UD-Q8-K-XL": {
"name": "Qwen3 30b A3B GGUF UD-Q8_K_XL (Instruct)",
"tools": true
}
}
},
"CleverThis-13": {
"npm": "@ai-sdk/openai-compatible",
"options": {
"baseURL": "https://dpe3orf5en4581im.us-east-1.aws.endpoints.huggingface.cloud/v1",
"apiKey": "{env:HF_TOKEN}",
"headers": {
"X-HF-Bill-To": "CleverThis",
"Authorization": "Bearer {env:HF_TOKEN}"
}
},
"models": {
"Qwen3-30B-A3B-INST-GGUF-UD-Q5-K-XL": {
"name": "Qwen3 30b A3B GGUF UD-Q5_K_XL (Instruct)",
"tools": true
}
}
},
"CleverThis-14": {
"npm": "@ai-sdk/openai-compatible",
"options": {
"baseURL": "https://jamyigykfzm39bcu.us-east-1.aws.endpoints.huggingface.cloud/v1",
"apiKey": "{env:HF_TOKEN}",
"headers": {
"X-HF-Bill-To": "CleverThis",
"Authorization": "Bearer {env:HF_TOKEN}"
}
},
"models": {
"MiniMax-M2-7-GGUF-UD-Q4-K-XL": {
"name": "MiniMax M2.7 GGUF UD-Q4_K_XL (Thinking)",
"tools": true
}
}
},
"CleverThis-15": {
"npm": "@ai-sdk/openai-compatible",
"options": {
"baseURL": "https://n4u4h8h0fgintms4.us-east-1.aws.endpoints.huggingface.cloud/v1",
"apiKey": "{env:HF_TOKEN}",
"headers": {
"X-HF-Bill-To": "CleverThis",
"Authorization": "Bearer {env:HF_TOKEN}"
}
},
"models": {
"Qwen3-6-35B-A3B-GGUF-UD-Q3-K-XL": {
"name": "Qwen 3.6 35b A3B GGUF UD-Q3_K_XL (Thinking)",
"tools": true
}
}
},
"CleverThis-16": {
"npm": "@ai-sdk/openai-compatible",
"options": {
"baseURL": "https://kcgeda25msp4dkwm.us-east-2.aws.endpoints.huggingface.cloud/v1",
"apiKey": "{env:HF_TOKEN}",
"headers": {
"X-HF-Bill-To": "CleverThis",
"Authorization": "Bearer {env:HF_TOKEN}"
}
},
"models": {
"Qwen3-code-480B-A35B-INST-GGUF-1M-UD-Q3-K-XL": {
"name": "Qwen3 Code 480b A35B GGUF UD-Q3_K_XL (Instruct, 1M Context)",
"tools": true
}
}
},
"openai": {
"models": {
"gpt-5-codex": {
"name": "GPT-5 Codex"
},
"gpt-5-mini": {
"name": "GPT-5 Mini"
},
"gpt-5-nano": {
"name": "GPT-5 Nano"
},
"o4-mini": {
"name": "o4-mini"
}
}
},
"google": {
"models": {
"gemini-2.5-pro": {
"name": "Gemini 2.5 Pro"
}
}
}
},
"agent": {
"async-agent-util": { "model": "{file:./.opencode/models/default.txt}" },
"auto-agents": { "model": "{file:./.opencode/models/default.txt}" },
"conflict-resolver-worker": { "model": "{file:./.opencode/models/default.txt}" },
"estimator-implementation": { "model": "{file:./.opencode/models/default.txt}" },
"git-checkout-util": { "model": "{file:./.opencode/models/default.txt}" },
"git-cleanup-util": { "model": "{file:./.opencode/models/default.txt}" },
"git-clone-util": { "model": "{file:./.opencode/models/default.txt}" },
"git-commit-and-push-util": { "model": "{file:./.opencode/models/default.txt}" },
"git-commit-util": { "model": "{file:./.opencode/models/default.txt}" },
"git-create-commit-util": { "model": "{file:./.opencode/models/default.txt}" },
"git-fetch-util": { "model": "{file:./.opencode/models/default.txt}" },
"git-force-push-with-lease-util": { "model": "{file:./.opencode/models/default.txt}" },
"git-isolator-util": { "model": "{file:./.opencode/models/default.txt}" },
"git-push-util": { "model": "{file:./.opencode/models/default.txt}" },
"git-rebase-and-push-util": { "model": "{file:./.opencode/models/default.txt}" },
"git-rebase-util": { "model": "{file:./.opencode/models/default.txt}" },
"git-stage-util": { "model": "{file:./.opencode/models/default.txt}" },
"implementation-worker": { "model": "{file:./.opencode/models/default.txt}" },
"pr-merge-supervisor": { "model": "{file:./.opencode/models/default.txt}" },
"pr-merge-worker": { "model": "{file:./.opencode/models/default.txt}" },
"pr-review-worker": { "model": "{file:./.opencode/models/default.txt}" },
"session-health-full-util": { "model": "{file:./.opencode/models/default.txt}" },
"session-health-quick-util": { "model": "{file:./.opencode/models/default.txt}" },
"session-health-util": { "model": "{file:./.opencode/models/default.txt}" },
"supervisor": { "model": "{file:./.opencode/models/default.txt}" },
"tier-dispatcher": { "model": "{file:./.opencode/models/default.txt}" },
"work-group-util": { "model": "{file:./.opencode/models/default.txt}" },
"tier-min": { "model": "{file:./.opencode/models/tier-min.txt}" },
"tier-0": { "model": "{file:./.opencode/models/tier-0.txt}" },
"tier-1": { "model": "{file:./.opencode/models/tier-1.txt}" },
"tier-2": { "model": "{file:./.opencode/models/tier-2.txt}" },
"ca-test-infra-improver": { "model": "{file:./.opencode/models/ca-test-infra-improver.txt}" }
}
}