132a5a2269
Every agent's model assignment now lives in a single-line text file at
.opencode/models/<name>.txt; default.txt is the 27-agent catch-all.
opencode.json's agent.<name>.model uses
{file:./.opencode/models/<name>.txt} interpolation, and
tools/_opencode_worker.py reads the same files at session-create to
stamp the resolved model on the session record (observability + drift
sentinel; OpenCode does NOT propagate session-level model to
prompt_async — schema for that is undocumented and deferred to Stage
2). 39 .md frontmatter `model:` lines stripped; the two intentional
inheritors (task-implementor, agent-evolution-pool-supervisor) keep
their model-less frontmatter.
Operator workflow for swapping a model is now: edit
.opencode/models/<role>.txt, restart OpenCode so opencode.json's
{file:...} re-resolves, run the dispatcher. Live-swap without restart
was attempted (override on prompt_async); OpenCode 0.x silently
dropped those requests (200 OK, no assistant message) and the
prompt_async override was reverted. The session-create override
remains for observability + drift detection.
End-to-end validation (2026-05-10): dispatch_review.py on PR #25 with
default.txt=openai/gpt-5-mini produced a clean REQUEST_CHANGES review
in 26 s for ~$0.016; dispatch_implementer.py on PR #30 with
tier-qwen-* files remapped to openai/{gpt-5-nano, gpt-5-mini,
gpt-5-codex} ran the full implementation-worker → tier-dispatcher →
estimator-implementation → tier-qwen-med → task-implementor →
git-isolator-util chain in 16 min with model=gpt-5-mini end-to-end.
Also documents the printenv VAR form as the only allowed env-read in
implementation-worker.md and task-implementor.md (live testing
showed the worker burning 2–4 turns on permission-denied
trial-and-error trying printf and echo variants).
Tests: 21 in tests/auto_agents/test_opencode_worker_models.py
(resolver semantics with caplog assertions on every malformed-input
path; session-create body shape; prompt_async body never carries
model; three repo-level invariants — every {file:...} reference
resolves, every .md is wired or in the inheritor allowlist, no .md
has a model: frontmatter). 1027 auto_agents tests pass / 3 skipped.
Note: .opencode/models/default.txt and the three tier-qwen-*.txt
files are committed with their OpenAI swaps in place (gpt-5-mini,
gpt-5-nano, gpt-5-mini, gpt-5-codex respectively) because the
CleverThis HuggingFace endpoints are paused. Revert with `git diff
HEAD~1 -- .opencode/models/*.txt | git apply -R` if/when they come
back.
Co-authored-by: Cursor <cursoragent@cursor.com>
4.2 KiB
4.2 KiB
description, mode, hidden, temperature, reasoningEffort, color, permission
| description | mode | hidden | temperature | reasoningEffort | color | permission | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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.