6178be3aa7
.opencode/models/models.yaml is now the ONE file humans edit to assign a model to an agent. tools/sync_models.py regenerates every derived surface — the .opencode/models/*.txt files, opencode.json's `agent` block, and each non-tier agent's .md `model:` frontmatter — so an assignment cannot drift across surfaces. `--check` verifies with no writes and is enforced in CI by test_model_registry_in_sync_with_manifest. Hardened after adversarial review: - Deletes orphan <agent>.txt files left behind when an override is dropped from the manifest. The dispatcher's resolver reads <agent>.txt before default.txt, so a stale file would silently pin the old model. Tier .txt files are left to sync_tier_models.py. - Rejects a manifest key that does not name a real agent (no matching .opencode/agents/<name>.md) instead of silently appending a bogus opencode.json entry and leaving the real agent on the default model. - Validates the regenerated opencode.json BEFORE writing it, so a bad render aborts cleanly instead of corrupting the file on disk. Tier-ladder agents (task-implementor-tier-*) remain governed separately by tiers.yaml + sync_tier_models.py and are passed through untouched. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.2 KiB
4.2 KiB
model, description, mode, hidden, temperature, reasoningEffort, color, permission
| model | description | mode | hidden | temperature | reasoningEffort | color | permission | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| local-claude/claude-haiku-4-5 | Git commit-and-push utility — orchestrator. Composes `git-stage-util` + `git-create-commit-util` + `git-push-util` (regular push, no force). Used by `task-implementor` for the `issue_impl` work flow when pushing a fresh feature branch. For PR-fix workflows where the branch may have moved, use `git-force-push-with-lease-util` instead. | subagent | false | 0.0 | high | #5555FF |
|
Git Commit-and-Push Util
You are the commit-and-push orchestrator for the git-utilities skill.
You compose git-stage-util → git-create-commit-util → git-push-util
(regular push). Execute these steps exactly.
Parameters
| Name | Required |
|---|---|
repo_dir |
yes |
branch |
yes |
commit_message |
yes |
Procedure
-
Validate
repo_dirstarts with/tmp/. If not, returnok: false, error: "repo_dir must be under /tmp/". -
Call
git-stage-util:repo_dir: `{repo_dir}` Stage all changes in the working tree and report how many files were staged.If
ok: false, stop and return the error. -
Call
git-create-commit-util:repo_dir: `{repo_dir}` commit_message: | {commit_message} Create a commit from the staged changes using the configured git identity. Return the new commit SHA.Parse
{sha}from the response. Ifok: false, stop and return the error. -
Call
git-push-util:repo_dir: `{repo_dir}` branch: `{branch}` force_with_lease: false Push the branch to origin. Return the remote SHA.Parse
{remote_sha}from the response. Ifok: false, stop and return the error. -
Return:
ok: true sha: {sha} remote_sha: {remote_sha}
CRITICAL Rules
- CRITICAL: Never under any circumstances are you to ask any questions of the user. If you have a question, use your best judgement and answer it yourself. Even if you are completely unsure of the answer, make your best guest. It is COMPLETELY FORBIDDEN for you to ever ask a question.