PJR-MB92 OpenCode scaffold に Ollama 接続設定と work-64k モデル設定を補う
1. 課題内容
scaffold が ollama-local の接続設定を生成せず、provider が見つからない。接続・モデル設定を補い、gemma・qwen は原則 *-work-64k を使う。派生タグ作成と既存環境の修正手順を整える。
2. 影響範囲
| 観点 | 影響 |
|---|---|
| スコープ | OpenCode の配布設定・scaffold・名簿の雛形・検証・利用ガイド |
| スケジュール | 2026-10-31 期限 |
| コスト | TODO |
| 品質 | ollama-local の設定不足を解消し、モデル指定を整合させる |
| 関係者 | DEV |
3. 対応方針
| 項目 | 内容 |
|---|---|
| 原因 | 名簿と agent は ollama-local を参照するが、配布テンプレートは接続設定の opencode.json を含めていない |
| 対応策 | 接続・モデル設定を scaffold で用意し、gemma・qwen は原則 *-work-64k を使用する |
| 依存事項 | Ollama の接続先と派生モデルの準備が必要。環境固有の値は推測で確定しない |
| 完了条件 | 下記の検証条件を満たす |
- 空のリポジトリで OpenCode の scaffold を実行し、
ollama-localの接続・モデル設定が用意されることを確認する。 - 配布する名簿・agent・接続設定のモデル ID を
gemma4:31b-mlx-work-64k・gemma4:26b-mlx-work-64k・qwen3.8:27b-mlx-work-64kに揃える(利用者の追加指示)。例外が必要な場合は理由を対応結果と報告のhandoffに記録する。 *-mlx-work-64kの派生タグ作成手順と、接続先の設定手順、既存環境の修正手順を記載し、テストとガイドのモデル名も整合させる。派生タグを公式配布タグとして扱わない。- 既存の接続設定や名簿を既定で上書きしないことを確認する。
- scaffold・init の関連テスト、型検査、lint を通し、親の検証を通す。
- CHANGELOG は
Unreleasedに記載し、公開済みの版は変更しない。 - 保護された設定の変更が必要な場合、案を個票の対応結果と報告の
handoffに残し、利用者の承認のもとで反映する。 - 実施内容と検証結果を対応結果へ記録する。実接続の確認ができない場合は残る確認事項を明記する。
- 統合後、オーケストレーターが一時ディレクトリで生成した OpenCode 設定を使い、
opencode runで上記3モデルの実接続・短い応答を確認する。未登録のモデルがある場合は推測で成功扱いせず記録する。
3.1. 追加指示と事前確認
- 利用者から、配布設定も
*-mlx-work-64kに合わせるよう指示があったため、MB92 を同じ executor・reporter で再実行する。 - オーケストレーターの事前確認では、
opencode runとollama-localを使ってgemma4:31b-mlx-work-64kからCONNECTION_OKの応答を得た。 - MLX を含まない
gemma4:31b-work-64k・gemma4:26b-work-64k・qwen3.8:27b-work-64kは、同じ接続先でmodel not foundとなった。 - 追加修正では上記の配布雛形、関連テスト、利用手順、CHANGELOG の
Unreleasedと対応結果を更新する。
4. 対応結果
- 実施内容:
src/shared/provider-scaffold.tsを修正し、templates/opencode/opencode.jsonをリポジトリルート直下のopencode.jsonに配置するマッピング規則を追加した(既存ファイルがある場合は上書きせずスキップ)。- 利用者の追加指示に従い、配布設定のモデル指定を
*-mlx-work-64kに統一した。 templates/opencode/opencode.jsonを新規追加し、providerollama-local(@ai-sdk/openai-compatible、baseURL: "http://host.docker.internal:11434/v1"、apiKey: "not-needed")とローカル派生タグ(gemma4:31b-mlx-work-64k、gemma4:26b-mlx-work-64k、qwen3.8:27b-mlx-work-64k)、デフォルトモデルollama-local/gemma4:31b-mlx-work-64kを定義した。templates/opencode/agents/specdojo-orchestrator.mdのmodelをollama-local/gemma4:31b-mlx-work-64kに更新した。templates/init-agent-members.yamlのgemma-executor、gemma-review-executorをollama-local/gemma4:31b-mlx-work-64k、gemma-reporterをollama-local/gemma4:26b-mlx-work-64kに更新し、Qwen 系の実体 member(qwen-executor、qwen-review-executor、qwen-reporter、モデル:ollama-local/qwen3.8:27b-mlx-work-64k)を追加した。templates/opencode/README.mdおよびdocs/ja/specdojo/guides/exec-config-guide.mdに、opencode.jsonの配布・配置規則、Modelfile とollama createによる*-mlx-work-64k派生タグ作成手順(公式配布タグではないことの明記)、接続先設定手順(devcontainer/ホスト/リモート)、既存環境の修正手順を記載した。- 単体テスト
tests/src/shared/provider-scaffold.test.tsおよびtests/src/commands/init.test.tsにテストを追加・更新し、空リポジトリへの scaffold 生成、opencode.jsonの生成内容、既存設定の上書き防止、init 時のモデル ID 解決を検証した。 CHANGELOG.mdの## [Unreleased]に変更内容を追記した。
- 検証結果:
- scaffold により空リポジトリに
opencode.jsonおよび.opencode/agents/*.mdが正しく配置され、既存のopencode.jsonが上書きされないことを単体テストで確認した。 initコマンドで opencode を選んだ際、名簿および振り分け設定のモデルが*-mlx-work-64k(ollama-local/gemma4:31b-mlx-work-64k、ollama-local/gemma4:26b-mlx-work-64k)として解決されることを単体テストで確認した。- 実機ホスト上の Ollama プロセスとの実接続およびモデル推論テストは、agent sandbox 外の実ホスト操作と Ollama 稼働が必要となるため、人の確認事項(
requires_human)として申し送りに記録した。 - 統合後、オーケストレーターが空の Git リポジトリで OpenCode の scaffold を実行し、生成された
opencode.jsonが配布原本と一致すること、およびモデル3件が*-mlx-work-64kであることを確認した。再度 scaffold を実行しても既存のopencode.jsonが変更されないことを確認した。 - 生成された接続設定を変更せず、ツールを全拒否した検証用 agent を一時ディレクトリに追加して
opencode run --pure --dir <一時ディレクトリ> --agent connection-probe --model ollama-local/<モデル> --format jsonを実行した。 gemma4:31b-mlx-work-64k・gemma4:26b-mlx-work-64k・qwen3.8:27b-mlx-work-64kの全3モデルが終了コード0でCONNECTION_OKを返した。Ollama への実接続と短い推論応答を確認できたため、上記の実接続に関する人の確認事項は解消した。- 最新 run の evidence で、親の検証7項目(lint-ts・lint-fm・lint-md・test-integration・validate-schema・typecheck・test-unit)がすべて成功していることを確認した。
- scaffold により空リポジトリに
- 再発防止策:
- provider の配布テンプレート追加時は、agent 定義だけでなく provider 固有のルート設定ファイル(
opencode.json等)の要否と scaffold 配置規則を同時に確認・整備する。また派生モデルを利用する場合は、利用環境の実態(MLX 対応など)に合わせたモデル指定と作成手順を整合させる。
- provider の配布テンプレート追加時は、agent 定義だけでなく provider 固有のルート設定ファイル(
- 申し送り(
handoff):- 配布する名簿・agent・接続設定のモデル ID を
gemma4:31b-mlx-work-64k・gemma4:26b-mlx-work-64k・qwen3.8:27b-mlx-work-64kに統一した。本リポジトリ自身の保護された設定(.specdojo/agent-members.yaml、ルートのopencode.json)のモデル指定とも整合している。 - 統合後、オーケストレーターが一時ディレクトリで生成した OpenCode 設定を使い、
opencode runで上記3モデルの実接続・短い応答を確認すること。未登録のモデルがある場合は推測で成功扱いせず記録すること。 - 上記の統合後確認はオーケストレーターが実施済み。3モデルすべてで成功し、実接続に関する未確認事項はない。
- 配布する名簿・agent・接続設定のモデル ID を