feat: OpenCode 対応#118
Conversation
|
OpenCode対応の大軍を率いて御参陣、かたじけなく存じます。cli_adapter.sh・inbox_watcher.sh・agent_status.sh等の基幹スクリプトに加え、テスト・権限設定・指示書生成まで一手に整えられた手腕、恐れ入りました。 ただいまより精査に入りまする。今しばらくお待ちくださいませ。 家老より |
|
はっ!家老めが謹んで申し上げまする。 12,738行にも及ぶ大規模なるご貢献、誠にありがたく、天にも届かんばかりの感謝を申し上げまする。この陣営(multi-agent-shogun)の世界観を深くご理解くださり、戦国口調のREADMEに面食らうことなく颯爽とPRをお送りくださった御姿、まことに頼もしゅう存じました。このプロジェクトの志を共有してくださる方が現れたこと、陣営一同、大いに鼓舞されております。 現在、家老は cmd_325 の対応(PR #116 バグ修正・PR #122 dashboard-viewer 追加・Issue #124 新機能実装)を最優先で進めておりまする。これらが完了し次第、Contabo VPS(本陣の実機環境)にて軍師(戦略担当エージェント)の指揮のもと、以下の段取りで検証に着手いたしまする:
つきましては、1〜2週間ほどの猶予をいただけますよう、何卒ご容赦くださいませ。 なお、検証完了後は将軍自ら Zenn および dev.to にて本 PR の内容を記事化される予定でございます。このたびのご貢献が記事を通じ広く世に知れ渡ることとなりましょう。ZenkakuHiragana 殿のお名前が歴史に刻まれる日が近うございます。 天下布武! |
|
@ZenkakuHiragana 殿、このたびは実に豪快なる一手を打ってくださった! 12,738行に及ぶ大規模なOpenCode CLI対応、まことに恐れ入り奉る。 現在、我が陣では cmd_325(PR #116・#122 リリース + Issue #124 実装)を進行中にて、 本 PR の検証は、その完了後、VPS 実機(接続先非公開)にて
おおよそ 1〜2 週間ほどお時間をいただきたい。 また、殿はこの検証結果を Zenn / dev.to にて記事化される予定にて、 今しばし、ご辛抱いただけますよう伏してお願い申し上げる。 天下布武! |
|
@yohey-w 殿、御対応いただきかたじけなく存ずる。 生成された指示書ゆえ差分が大きく見えておるが、何卒ご容赦願いたい。 しばし続報を座して待ち申す。天下布武! |
|
Thank you for the OpenCode compatibility proposal @ZenkakuHiragana! Adding OpenCode support requires architectural review since it introduces a new CLI agent type into the multi-CLI orchestrator framework. This is a meaningful enhancement and we want to ensure it integrates cleanly with our current Claude/Codex/Copilot/Kimi setup. We'll review this against our v4.7.0 roadmap (currently finalizing the Autonomous-by-default + GLPF system) and report back. High likelihood of acceptance once the current release cycle completes. |
|
@ZenkakuHiragana 殿、長らくお待たせ申し訳なく、家老から重要な進展ご報告にござる。 状況の正直開示先のコメント(4/19, 5/5)にて v4.7.0 として本PR をリリースする旨申し上げたが、その後 v4.7.0 (cmd_376 Autonomous-by-default mode) は 安定性の問題で revert となり申した(commit 94f39a1)。投稿者殿に v4.7.0 を3度約束しながら、その v4.7.0 自体が消滅する形となり、誠に申し訳なく存ずる。 殿の意志 — OpenCode は OSS としての裾野拡大の鍵殿(プロジェクト主)から、本PR の戦略的位置付けに関し以下の意志表明があり申した:
これは個人利用の話ではなく、当プロジェクトを OSS として広く採用してもらうための鍵としての位置付けにござる。Claude/Codex/Copilot/Kimi がそれぞれ特定プロバイダーのサブスク前提である現状、それらの契約を持たぬユーザにとって当プロジェクトは導入障壁が高い状態にござった。OpenCode 統合により OpenAI/Anthropic/Google/Ollama/local いずれの構成でも動作可能となれば、OpenCode コミュニティ全体を当プロジェクトの新規ユーザ層として迎え入れることが可能となり申す。 投稿者殿の 12,738 行のご貢献(うち実コードは ~1,500 行、残りは お願い — rebase のご検討本PR は 40日経過により main と CONFLICTING 状態にござる。差し支えなければ、最新 main への rebase をご検討いただきたく。主な衝突予想領域:
rebase 完了後は速やかに当方の検証環境にて実機テスト → 検証 OK 次第 main merge → 新リリースに含めて公開、という段取りで進める所存にござる。 万が一の場合(フェイルセーフ)もし rebase のお手間が大きく難しければ、当方の家臣(家老→足軽)にて conflict 解消を引き取ることも可能にござる。1週間以内 にお返事いただけぬ場合は当方で引き取る判断をさせていただきたく、ご了承願いたい。投稿者殿のコミット履歴は最大限保全いたす所存。 御礼40日もの長きにわたるお待たせ、家老の不手際にござる。投稿者殿の 引き続きのご厚誼を願い申し上げる。⚔️ 天下布武! |
|
@ZenkakuHiragana 殿、家老から補足にござる。 先のコメントで「当方の検証環境」と曖昧に申し上げた件、過去 4/19 にお伝えした VPS 実機(接続先非公開)での軍師主導検証 の方針は維持しており申す。当方にて VPS 検証パイプラインを稼働状態に整え直し、投稿者殿の rebase 完了次第即座に検証開始できる態勢で待ち申す。 引き続き宜しくお願い申し上げる。 |
eced06e to
738187d
Compare
|
@yohey-w 殿 rebase と conflict 解消を終え、最新 main との差分も確認のうえ対応完了いたしたでござる。 |
|
ご対応ありがとうございます。前回 QC 懸念 3 点 (mark-as-read.ts のハイフン、agent_status.sh の python fallback、build_instructions.sh の終了コード検証) は全て確認できました。 しかし、VPS で fresh checkout (738187d) して
詳細・実機ログは別途共有する検証レポートをご確認ください。両件とも修正規模は数行で済む見込みです。修正後に再度 fresh checkout で |
PR #118 (ZenkakuHiragana, OpenCode 対応) の rebase 完了後に軍師が VPS で fresh checkout して unit bats 実行、2 系統 7 件の regression を検出した 詳細レポートを OSS-公開。 差し戻しコメント (#issuecomment-4481599436) で言及した「別途共有する検証 レポート」の実体。投稿者および将来のレビュアーが参照できる形にする。 .gitignore に whitelist エントリ追加 (whitelist-based gitignore のため)。
|
@ZenkakuHiragana 殿、先のコメント (#issuecomment-4481599436) で言及いたした 「別途共有する検証レポート」を公開 いたした。 https://github.com/yohey-w/multi-agent-shogun/blob/main/reports/cmd_334_pr118_verification.md 主な内容:
ご修正の参考にしていただければ幸いにござる。修正後の再 push をお待ち申し上げる。 |
殿の指摘で発覚: reports/ ディレクトリは 31 ファイル tracked のうち 17 ファイルが FLUX/大里/osato/インフォマート/加藤義弘/ブイシンク 等のプライベート情報を含むまま 公開され続けていた。memory feedback_zenn_no_company_name 「公開アクション (Zenn / GitHub / SNS) のみ匿名化必須」に違反した状態。 対応: - .gitignore から reports/cmd_334_pr118_verification.md の whitelist 削除 - git rm --cached -r reports/ で全 31 ファイルを untrack - ファイル本体は local に残る、次回以降の clone/fetch から reports/ は空 注意: 過去 commit に既に含まれてる情報は履歴に残る。GitHub の Insights / fork / search cache では引き続き見える可能性。完全削除には git filter-repo + force push が 必要だが D003 (destructive operation) ゆえ別途相談。 副作用: PR #118 のコメントで案内した cmd_334_pr118_verification.md の URL が切れる。 投稿者向けに別経路 (Gist or PR コメント本文に貼り直し) で再共有する。
|
@ZenkakuHiragana 殿、先のコメントで案内した検証レポート URL は 削除いたした (リポジトリ運用方針見直しのため reports/ ディレクトリを丸ごと untrack した、commit 0. 結論サマリーPR #118 を VPS 上に 主要 regression:
両方とも単純な実装ミスで修正は数行で済むが、main へ取り込めば運用中の Claude セッションの 2. 前回 QC 懸念 3 点の修正確認
3 点とも問題なし、前回指摘事項は全て解消。 3. PR 全体所見 (実コード ~2,000 行、auto-generated agent md 約 8,000 行を除いた範囲)良かった点
設計方針自体は妥当 ( 4. テスト実行結果4.1 unit batsPASS: 229 / FAIL: 7 4.2 e2e bats
4.3 main ベースライン比較PR と同じ → 7 失敗は PR #118 で導入された regression で確定。 5. 検出した regression 詳細5.1 [R1]
|
Adds OpenCode command construction, startup prompt handling, role-specific instruction generation, runtime reset behavior, docs, and E2E/regression coverage to make OpenCode a first-class supported CLI.
Uses OpenCode's documented OPENCODE_PERMISSION config to keep unattended launches consistent with the other CLI permission-bypass defaults, and updates docs, generated instructions, and tests accordingly.
Make OpenCode sessions easier to identify by seeding startup prompts with the role name, and update the related docs and tests to match the new behavior.
Route OpenCode automation through Escape and C-u instead of Ctrl-C so wakeup, reset, and exit flows do not terminate the TUI. Update the related docs and regression tests to lock in the corrected key handling.
…interrupt OpenCode binds Escape to session_interrupt in opencode-tui.json. The opencode_prepare_input_reset() function sent Escape×2 + Ctrl-C as pre-clear, which aborted responses. Remove the function entirely and unify all CLI paths to use C-u for input clearing. Add ctrl+u to input_clear keybind so C-u works as clear in OpenCode.
Migrating OpenCode from --prompt to --agent.
Changes:
- lib/cli_adapter.sh:
OpenCode correctly returns empty (uses .opencode/agents/ auto-load).
- tests/unit/test_cli_adapter.bats: update opencode build_cli_command
tests to verify --agent <id> instead of OPENCODE_CONFIG_CONTENT JSON.
Update get_startup_prompt tests to expect empty for OpenCode
(--agent).
- scripts/build_instructions.sh:
also generates .opencode/agents/*.md with permission YAML frontmatter.
- instructions/{cli_specific,generated}/opencode_*.md: documentation
updated to reflect --agent mode.
send_context_reset() and send_cli_command() treated OpenCode identically to Codex, sending the hardcoded Codex bootstrap prompt via send_startup_prompt(). OpenCode loads its agent definition via --agent flag and does not need an external startup prompt. The unnecessary prompt also set STARTUP_PROMPT_SENT=1, which suppressed the normal inboxN nudge, so agents never received the expected nudge signal. Two fixes: - send_cli_command() opencode /clear branch: remove send_startup_prompt call - send_context_reset() codex/opencode branch: wrap send_startup_prompt in codex-only condition (opencode still gets /new for session reset)
…, add support prompt for self-recognition Add function documentation for the new build helper functions, fix the codex thinking guard precedence bug, and keep the regenerated OpenCode agent files in sync with the build output. Also added a small support prompt for OpenCode agents so that they know who they are even when they forgot to get @agent_id from tmux pane.
738187d to
94c5509
Compare
|
@ZenkakuHiragana 殿、再pushと競合解消、かたじけなく存じます。かなり大きな差分でしたが、最新 確認結果です。
当方の検証環境では 残りで見えているのは、機能ブロッカーというより生成ファイルの整形差分です。 ここまでの対応、まことに助かりました。少なくとも前回の致命的な懸念は解消されており、PR は merge にかなり近い状態まで来ています。 |
|
@yohey-w 殿 競合の解消と整合性の確認を行っているところでござるが、まだ一件、OpenCode のカスタムツール経由で inbox lock を獲得する経路が増えたことにより、既存の inbox_write.sh のロック経路との競合が懸念されるとの指摘が当方のエージェントによるレビューにて明らかになっておる。 そちらの対処が終了次第、改めて CONTRIBUTING.md のガイドラインとの整合性を確認の上、当方の作業を完了といたしたい。 |
|
maintainer 側で、残っていた生成ファイルの改行・末尾空白の仕上げを 1 commit 積みました。
検証結果です。
当方環境では引き続き これで前回の機能ブロッカーに加えて、残っていた |
Ensure inbox lock directories are released after write failures and make watcher-side inbox updates fail closed when the shared lock cannot be acquired. Add regression coverage for both paths.
Update OpenCode-specific agent instructions to avoid stale fixed tool lists and clarify how OpenCode subagents should be used within the multi-agent-shogun chain of command. - Treat runtime-exposed tools and generated permission frontmatter as authoritative - Encourage bounded subagent use for investigation, review prep, surface mapping, and independent leaf work - Forbid using subagents to bypass role ownership, YAML task state, inbox/report flow, permission boundaries, or completion judgment - Add Karo-specific guidance that execution still goes to Ashigaru and judgment-heavy QC still goes to Gunshi - Regenerate OpenCode generated instructions and agent files
Address OpenCode compatibility review follow-ups across the instruction build pipeline and generated agent artifacts. - require a Python interpreter with PyYAML before generating OpenCode agents - make CI install requirements.txt before the build-instructions check - include .opencode/agents in local and CI generated-output diff checks - generate OpenCode agents from a deterministic fixed agent list - keep read-like OpenCode tools aligned by applying read permissions to grep - document CLI-specific reset behavior for Claude/Copilot/Kimi and Codex/OpenCode - update README escalation docs to describe /clear versus /new behavior - regenerate instruction and OpenCode agent outputs Validation: - make build - bash -n scripts/build_instructions.sh - bats tests/unit/test_build_system.bats tests/unit/test_send_wakeup.bats tests/unit/test_cli_adapter.bats - git diff --check - git diff --check upstream/main
Address review feedback for the OpenCode compatibility branch by reducing unnecessary documentation churn and making the invalid-permission test isolated. - add OPENCODE_PERMISSIONS_FILE override for OpenCode agent generation tests - change the invalid permission YAML test to use a temporary file instead of modifying config/opencode-permissions.yaml - reduce README.md and README_ja.md changes to OpenCode-related content only - keep generated instruction and OpenCode agent outputs in sync Validation: - make build - bash -n scripts/build_instructions.sh - bats tests/unit/test_build_system.bats tests/unit/test_send_wakeup.bats tests/unit/test_cli_adapter.bats tests/test_inbox_write.bats tests/agent_selfwatch.bats - make check - git diff --check - git diff --check upstream/main
OpenCode permissions now intentionally leave grep unscoped so it inherits the top-level permissive policy. This avoids misleading path-scoped grep rules because OpenCode matches grep permissions against the search regex, not target file paths. Also allow the Shogun agent to read queue/reports/* so OpenCode behavior matches the Shogun oversight workflow while keeping report edits denied. Tests were updated to assert: - grep is intentionally omitted from generated agent permissions - generated agents include an explanatory grep comment - Shogun can read but not edit reports
…crash OpenCode can intermittently fail with SIGILL when many TUI instances are started in a tight burst under WSL2. The departure script previously launched karo, ashigaru, and gunshi panes almost back-to-back, which made the failure timing-sensitive. This change adds a small helper that sleeps only when the resolved CLI type is opencode, then calls it after each agent startup command. Other CLI types keep their existing startup behavior.
|
VPS 実機でも OpenCode smoke を実施しました。 対象: VPS 実機(接続先非公開) / PR head 確認結果:
OpenRouterについて:
結論: PR #118 の OpenCode agent 読込・生成物・VPS runtime smoke は PASS。OpenRouter実呼び出しのみ credential 未設定で未完です。 |
|
追加でご懸念いただいていた inbox lock 経路も確認しました。 現 head 手元での追加検証です。
ここまでの粘り強い対応、まことに感謝いたします。大きなPRで、しかも multi-agent-shogun の中核に触る難しい統合でしたが、OpenCode対応としてかなり実用に近いところまで持ってきていただきました。 差し支えなければ、このPRと検証の経緯を、私(yohey-w)側で Zenn 記事として紹介させてください。OpenCode対応そのものだけでなく、review → rebase → VPS smoke → lock競合懸念の解消まで含めて、OSSでAI agent基盤を育てる実例として価値が高いと感じています。 |
|
OpenRouter credential を VPS root 環境に設定し、未完だった OpenRouter 実呼び出しも確認しました。 対象: VPS 実機(接続先非公開) / PR head 設定:
追加検証: timeout 90s env OPENCODE_TUI_CONFIG=<opencode-tui-config> opencode run --agent shogun --model openrouter/openai/gpt-4o-mini "Reply exactly: OK_OPENROUTER_PERSISTED"結果:
これで VPS 上の OpenCode smoke は、無料 provider だけでなく OpenRouter provider 経由でも PASS です。 |
|
@yohey-w 殿 慌ただしくいろいろな修正を加えてしまいましたが、最新版の検証いただき感謝いたします。 私としても、初のOSS貢献ということで大変価値のある体験をさせて頂きました。 |
instead the issue might come from OpenCode itself
|
VPSで最新head
補足: OpenRouter smokeはログインシェルで環境変数を読み込んだ状態でPASSしています。非ログインSSHシェルでは provider が読まれず失敗するため、VPS上の検証コマンドは OpenCode対応ありがとうございます。実運用側の組み込み検証としては、このheadでPASS扱いです。 |
|
あらためて、OpenCode 対応 PR #118 へのご貢献、まことにありがとうございました。 本 PR の経緯、OpenCode 対応の意義、検証の流れ、そして OpenRouter 実験まで含めて、Zenn に記事化いたしました。 https://zenn.dev/shio_shoppaize/articles/shogun-opencode-v5-openrouter 初の OSS 貢献としてこの規模の統合を持ち込み、rebase、regression 修正、inbox lock の懸念解消まで粘り強く対応いただいたことに、心より感謝申し上げます。 multi-agent-shogun が OpenCode 勢にも開かれる大きな一歩になりました。超絶スペシャルサンクスでございます。 |
|
@yohey-w 殿 マージいただきありがとうございます!早速記事を読ませて頂きました!(大笑いしました) OpenRouter での検証もお疲れ様でした。当方ではそこまで深く検証していなかったので、追って検証頂けるのは安心感があります。 v5.0.0 として成果が反映されることに強い達成感があります。やって良かった、と思いました。 |
概要
御館様、OpenCode を新たなる軍勢として迎え入れるべく布陣整備を行ったでござる。
既存の CLI アダプターに OpenCode の分岐を加え、各役目の指示書、権限、起動経路、通知処理、既読処理を整え申した。
変更点
instructions/cli_specific/opencode_tools.mdを新設し、build_instructions.shにて指示書の組み上げ導線を整え候lib/cli_adapter.sh、scripts/switch_cli.sh、scripts/inbox_watcher.sh、scripts/agent_status.shなどを改修し、起動・通知・状態管理の OpenCode 対応いたした
.opencode/tools/mark-as-read.tsを追加し、OpenCode においては inbox を直接編集させない設定を加えたでござるconfig/opencode-permissions.yamlとconfig/opencode-tui.jsonを整え、権限設定と tmux 操作の安定性を確保しているでござる
検証
make lintの警告が増加していないことを確認(origin/main: 16件, 本PR: 16件)make testの通過を確認make test-intは不可能であったinbox 伝令・既読処理・tmux nudge 等一連の伝達機構が機能することを確認いたした
備考
既存の挙動は破壊していないつもりでござるが当方 OSS 貢献活動は初めてである故、至らぬ点あれば遠慮なく御指摘願いたい。
以上、⚔️ 天下布武!