Browse Source

Fix install

Alvin Unreal 1 tháng trước cách đây
mục cha
commit
0b71fe606a
8 tập tin đã thay đổi với 279 bổ sung156 xóa
  1. 0 5
      .github/workflows/companion-release.yml
  2. 83 26
      README.ja-JP.md
  3. 81 22
      README.ko-KR.md
  4. 85 23
      README.zh-CN.md
  5. 10 13
      docs/companion.md
  6. BIN
      img/v2.webp
  7. 0 66
      src/cli/companion.ts
  8. 20 1
      src/cli/install.ts

+ 0 - 5
.github/workflows/companion-release.yml

@@ -140,11 +140,6 @@ jobs:
         with:
           path: artifacts
           merge-multiple: true
-      - name: Generate checksums
-        run: |
-          set -euo pipefail
-          cd artifacts
-          sha256sum * > SHA256SUMS
       - name: Create or update GitHub release
         env:
           GH_TOKEN: ${{ github.token }}

+ 83 - 26
README.ja-JP.md

@@ -1,10 +1,13 @@
 <div align="center">
-  <h3>✨ デフォルトのバックグラウンドオーケストレーションが登場 ✨</h3>
-  <p><i>オーケストレーターはワークフローマネージャーとしてバックグラウンドで専門エージェントをスケジューリングし、<br><code>/deepwork</code> が大きなゴールをファイルに紐づいた計画へと変換します。<br>フィードバックは Telegram でお寄せください。</i></p>
+  <a href="https://github.com/alvinunreal/oh-my-opencode-slim/stargazers">
+    <img src="img/v2.webp" alt="oh-my-opencode-slim V2 Release" style="border-radius: 10px;">
+  </a>
+  <h3>✨ oh-my-opencode-slim ✨</h3>
 
-  <p><b>オープン・マルチエージェント・スイート</b> · あらゆるモデルを組み合わせ · タスクを自動委譲</p>
+  <p><i>コードの夜明けから七柱の神聖なる存在が現れました。それぞれが不朽の技の達人として、<br>あなたの命令を待ち、混沌から秩序を鍛え上げ、かつて不可能と思われたものを築きます。</i></p>
 
-  <p><sub><b>Boring Dystopia Development</b> による開発</sub></p>
+  <p><b>Opencode マルチエージェントスイート</b> · 任意のモデルを組み合わせ · タスクを自動委譲</p>
+  <p><sub>by <b>Boring Dystopia Development</b></sub></p>
   <p>
     <a href="https://boringdystopia.ai/"><img src="https://img.shields.io/badge/boringdystopia.ai-111111?style=for-the-badge&logo=vercel&logoColor=white" alt="boringdystopia.ai"></a>&nbsp;
     <a href="https://x.com/alvinunreal"><img src="https://img.shields.io/badge/X-@alvinunreal-000000?style=for-the-badge&logo=x&logoColor=white" alt="X @alvinunreal"></a>&nbsp;
@@ -14,6 +17,9 @@
   <p>
     <a href="README.md">English</a> | <a href="README.zh-CN.md">简体中文</a> | <b>日本語</b> | <a href="README.ko-KR.md">한국어</a>
   </p>
+
+  <p><sub>✦ ✦ ✦</sub></p>
+
 </div>
 
 ---
@@ -42,24 +48,9 @@ Install and configure oh-my-opencode-slim: https://raw.githubusercontent.com/alv
 bunx oh-my-opencode-slim@latest install
 ```
 
-> **翻訳ステータス:** 英語版 README が最新です。この日本語訳には古い表現が一部残っている可能性があります。
-
-### デフォルトのバックグラウンドオーケストレーション
-
-現在のデフォルトでは、オーケストレーターが実行ワーカーではなくスケジューラーとして動作します。
-作業を計画し、専門エージェントをバックグラウンドタスクとしてディスパッチし、ステータスをポーリングし、
-結果を整合させてから処理を続行します。これには OpenCode のネイティブな
-バックグラウンドサブエージェントサポートが必要です。下記の環境変数を有効にして OpenCode を起動してください。
-
-```bash
-bunx oh-my-opencode-slim@beta install --background-subagents=yes
-```
-
-インストール後はターミナルを再起動するか、更新された shell ファイルを source してから `opencode` を実行してください。一回限りなら `OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS=true opencode` でも起動できます。
-
 ### はじめに
 
-インストーラーは OpenAI と OpenCode Go の両方のプリセットを生成し、デフォルトで OpenAI が有効になっています。OpenAI プリセットでは、判断力の高いエージェントに `openai/gpt-5.5` を、より高速でスコープの限定されたエージェントに `openai/gpt-5.4-mini` を使用します。インストール時に OpenCode Go をアクティブにするには `bunx oh-my-opencode-slim@latest install --preset=opencode-go` を実行するか、インストール後に `~/.config/opencode/oh-my-opencode-slim.json` のデフォルトプリセット名を変更してください。
+インストーラーは OpenAI と OpenCode Go の両方のプリセットを生成し、デフォルトで OpenAI が有効になります。OpenAI はワークフローマネージャー/スケジューラーに `openai/gpt-5.5 (medium)`、Oracle に `openai/gpt-5.5 (high)`、Fixer に `openai/gpt-5.5 (low)`、その他の専門家には `openai/gpt-5.4-mini` 系のバリアントを使用します。インストール時に OpenCode Go を有効にするには `bunx oh-my-opencode-slim@latest install --preset=opencode-go` を実行するか、インストール後に `~/.config/opencode/oh-my-opencode-slim.json` のデフォルトプリセット名を変更してください。
 
 次に:
 
@@ -74,6 +65,8 @@ bunx oh-my-opencode-slim@beta install --background-subagents=yes
    opencode models --refresh
    ```
 3. **プラグイン設定**を開きます: `~/.config/opencode/oh-my-opencode-slim.json`
+   カスタム OpenCode 設定ディレクトリを使っている場合は
+   `$OPENCODE_CONFIG_DIR/oh-my-opencode-slim.json`
 
 4. **各エージェントに使用したいモデルを更新します**
 
@@ -88,12 +81,12 @@ bunx oh-my-opencode-slim@beta install --background-subagents=yes
   "preset": "openai",
   "presets": {
     "openai": {
-      "orchestrator": { "model": "openai/gpt-5.5", "skills": ["*"], "mcps": ["*", "!context7"] },
+      "orchestrator": { "model": "openai/gpt-5.5", "variant": "medium", "skills": ["*"], "mcps": ["*", "!context7"] },
       "oracle": { "model": "openai/gpt-5.5", "variant": "high", "skills": ["simplify"], "mcps": [] },
       "librarian": { "model": "openai/gpt-5.4-mini", "variant": "low", "skills": [], "mcps": ["websearch", "context7", "gh_grep"] },
       "explorer": { "model": "openai/gpt-5.4-mini", "variant": "low", "skills": [], "mcps": [] },
       "designer": { "model": "openai/gpt-5.4-mini", "variant": "medium", "skills": [], "mcps": [] },
-      "fixer": { "model": "openai/gpt-5.4-mini", "variant": "low", "skills": [], "mcps": [] }
+      "fixer": { "model": "openai/gpt-5.5", "variant": "low", "skills": [], "mcps": [] }
     },
     "opencode-go": {
       "orchestrator": { "model": "opencode-go/glm-5.1", "skills": [ "*" ], "mcps": [ "*", "!context7" ] },
@@ -121,10 +114,8 @@ bunx oh-my-opencode-slim@beta install --background-subagents=yes
 
 インストールと認証を済ませた後、すべてのエージェントが設定済みで応答することを確認してください:
 
-先にターミナルを再起動するか、更新された shell ファイルを source してください。環境変数が有効なら `opencode` を実行できます。現在の shell で未設定の場合は次を使います:
-
 ```bash
-OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS=true opencode
+opencode
 ```
 
 次に以下を実行します:
@@ -142,6 +133,63 @@ ping all agents
 
 ---
 
+### V2 の新機能
+
+V2 は oh-my-opencode-slim を、スケジューラー中心のマルチエージェントワークフローシステムへと進化させます。Orchestrator は計画、委譲、結果の整合、検証に集中し、専門エージェントはそれぞれの lane で作業を行います。
+
+- **[バックグラウンドエージェント](#バックグラウンドエージェント)** — Orchestrator は専門家をバックグラウンドタスクとしてディスパッチし、タスク/セッション ID を追跡し、完了イベントを待ってから結果を整合します。
+- **[Companion](#companion)** — 任意のフローティングデスクトップウィンドウが、並列実行中のバックグラウンド専門家を含め、現在アクティブなエージェントを表示します。
+- **[Deepwork](#deepwork)** — 大規模、多ファイル、高リスク、または段階的なコーディング作業向けの構造化ワークフローです。永続的な計画ファイルと Oracle レビューゲートを使用します。
+- **[oh-my-opencode-slim Skill](#oh-my-opencode-slim-skill)** — モデル、プロンプト、カスタムエージェント、MCP アクセス、プリセット、プラグイン動作を安全に調整するための同梱設定 skill です。
+
+#### バックグラウンドエージェント
+
+V2 では、バックグラウンド専門家が基本の考え方になります。Orchestrator は作業グラフを計画し、適切なエージェントを起動し、重複する書き込み所有権を避け、ターミナルタスクの結果を受け取ってから次の行動に進みます。
+
+完全なスケジューラーモデルは **[Background Orchestration](docs/v2-background-orchestration.md)** を参照してください。
+
+#### Companion
+
+任意の Companion は、リアルタイムのエージェント活動を表示するフローティングデスクトップステータスウィンドウです。現在のセッション状態とアクティブなエージェントを表示するため、バックグラウンド作業を一目で追いやすくなります。
+
+<div align="center">
+  <img src="img/companion.gif" alt="Companion showing active agents" width="600">
+  <p><i>左下のビジュアル Companion。</i></p>
+</div>
+
+対話式インストールでは、インストーラーが Companion を有効にするか尋ね、デフォルトは `yes` です。自動化では明示的に有効化できます。
+
+```bash
+bunx oh-my-opencode-slim@latest install --companion=yes
+```
+
+設定、位置、サイズ、インストール詳細は **[Companion](docs/companion.md)** を参照してください。
+
+#### Deepwork
+
+Deepwork は、大規模リファクタリング、多段階機能、高リスクなアーキテクチャ変更、または永続的な計画が必要な重いコーディングセッション向けです。ローカルの markdown 進捗ファイルを作成し、Oracle レビューゲートを使い、実装フェーズを構造化します。
+
+次のように開始します。
+
+```text
+/deepwork <heavy coding task>
+```
+
+いつ使うべきか、ワークフローがどのように動くかは **[Skills](docs/skills.md#deepwork)** を参照してください。
+
+#### oh-my-opencode-slim Skill
+
+同梱の `oh-my-opencode-slim` skill は、Orchestrator がプラグイン自体を設定・改善するのを支援します。モデル調整、カスタムエージェント、プロンプト上書き、skill/MCP 権限、プリセット、任意エージェント、バックグラウンドオーケストレーション、繰り返し発生するワークフロー上の摩擦に利用できます。
+
+<div align="center">
+  <img src="img/oh-my-opencode-skill.png" alt="oh-my-opencode-slim skill in use" width="600">
+  <p><i>同梱 skill にエージェント設定の調整と改善を依頼できます。</i></p>
+</div>
+
+例と安全ルールは **[Skills](docs/skills.md#oh-my-opencode-slim)** を参照してください。
+
+---
+
 <a id="meet-the-pantheon"></a>
 
 ## 🏛️ パンテオン(神々)の紹介
@@ -535,7 +583,7 @@ ping all agents
   <p><sub>マージされたすべての貢献は、この世界に痕跡を残します。</sub></p>
 
   <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
-[![All Contributors](https://img.shields.io/badge/all_contributors-52-orange.svg?style=flat-square)](#contributors-)
+[![All Contributors](https://img.shields.io/badge/all_contributors-59-orange.svg?style=flat-square)](#contributors-)
 <!-- ALL-CONTRIBUTORS-BADGE:END -->
 </div>
 
@@ -615,6 +663,15 @@ ping all agents
       <td align="center" valign="top" width="16.66%"><a href="https://github.com/andrewylies"><img src="https://avatars.githubusercontent.com/u/103019336?v=4?s=100" width="100px;" alt="m.seomoon"/><br /><sub><b>m.seomoon</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=andrewylies" title="Code">💻</a></td>
       <td align="center" valign="top" width="16.66%"><a href="https://github.com/yolo2h"><img src="https://avatars.githubusercontent.com/u/10754850?v=4?s=100" width="100px;" alt="Yolo"/><br /><sub><b>Yolo</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=yolo2h" title="Code">💻</a></td>
       <td align="center" valign="top" width="16.66%"><a href="https://github.com/xinxingi"><img src="https://avatars.githubusercontent.com/u/49302071?v=4?s=100" width="100px;" alt="XinXing"/><br /><sub><b>XinXing</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=xinxingi" title="Code">💻</a></td>
+      <td align="center" valign="top" width="16.66%"><a href="https://github.com/eltociear"><img src="https://avatars.githubusercontent.com/u/22633385?v=4?s=100" width="100px;" alt="Ikko Eltociear Ashimine"/><br /><sub><b>Ikko Eltociear Ashimine</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=eltociear" title="Code">💻</a></td>
+      <td align="center" valign="top" width="16.66%"><a href="https://github.com/dev-wantap"><img src="https://avatars.githubusercontent.com/u/69743540?v=4?s=100" width="100px;" alt="GWANWOO KIM"/><br /><sub><b>GWANWOO KIM</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=dev-wantap" title="Code">💻</a></td>
+    </tr>
+    <tr>
+      <td align="center" valign="top" width="16.66%"><a href="https://github.com/OmerFarukOruc"><img src="https://avatars.githubusercontent.com/u/7347742?v=4?s=100" width="100px;" alt="Omer Faruk Oruc"/><br /><sub><b>Omer Faruk Oruc</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=OmerFarukOruc" title="Code">💻</a></td>
+      <td align="center" valign="top" width="16.66%"><a href="https://khallaf.uk/"><img src="https://avatars.githubusercontent.com/u/51155980?v=4?s=100" width="100px;" alt="Omar Mohamed Khallaf"/><br /><sub><b>Omar Mohamed Khallaf</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=omar-mohamed-khallaf" title="Code">💻</a></td>
+      <td align="center" valign="top" width="16.66%"><a href="https://github.com/Qesire"><img src="https://avatars.githubusercontent.com/u/102657430?v=4?s=100" width="100px;" alt="Knowingthesea_Qesire"/><br /><sub><b>Knowingthesea_Qesire</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=Qesire" title="Code">💻</a></td>
+      <td align="center" valign="top" width="16.66%"><a href="http://www.flyinghail.net/"><img src="https://avatars.githubusercontent.com/u/157430?v=4?s=100" width="100px;" alt="FENG Hao"/><br /><sub><b>FENG Hao</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=flyinghail" title="Code">💻</a></td>
+      <td align="center" valign="top" width="16.66%"><a href="https://github.com/smatheusblu"><img src="https://avatars.githubusercontent.com/u/5666794?v=4?s=100" width="100px;" alt="Matheus Nogueira Silveira"/><br /><sub><b>Matheus Nogueira Silveira</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=smatheusblu" title="Code">💻</a></td>
     </tr>
   </tbody>
 </table>

+ 81 - 22
README.ko-KR.md

@@ -1,13 +1,13 @@
 <div align="center">
   <a href="https://github.com/alvinunreal/oh-my-opencode-slim/stargazers">
-    <img src="img/v2beta.webp" alt="V2 Beta Release" style="border-radius: 10px;">
+    <img src="img/v2.webp" alt="oh-my-opencode-slim V2 Release" style="border-radius: 10px;">
   </a>
-  <h3>✨ V2 베타 릴리스: 백그라운드 오케스트레이션이 도착했습니다 ✨</h3>
-  <p><i>오케스트레이터가 이제 백그라운드에서 전문 에이전트를 스케줄링하고,<br><code>/deepwork</code>가 큰 목표를 파일 기반 계획으로 변환합니다.<br>베타 테스터 여러분, Telegram에서 피드백을 공유해 주세요.</i></p>
+  <h3>✨ oh-my-opencode-slim ✨</h3>
 
-  <p><b>오픈 멀티 에이전트 스위트</b> · 모델 자유 조합 · 작업 자동 위임</p>
+  <p><i>코드의 여명에서 일곱 신성한 존재가 나타났습니다. 각자는 불멸의 장인으로서,<br>당신의 명령을 기다리며 혼돈에서 질서를 빚고 한때 불가능하다고 여겨졌던 것을 만들어냅니다.</i></p>
 
-  <p><sub>제작: <b>Boring Dystopia Development</b></sub></p>
+  <p><b>Opencode 멀티 에이전트 스위트</b> · 어떤 모델이든 조합 · 작업 자동 위임</p>
+  <p><sub>by <b>Boring Dystopia Development</b></sub></p>
   <p>
     <a href="https://boringdystopia.ai/"><img src="https://img.shields.io/badge/boringdystopia.ai-111111?style=for-the-badge&logo=vercel&logoColor=white" alt="boringdystopia.ai"></a>&nbsp;
     <a href="https://x.com/alvinunreal"><img src="https://img.shields.io/badge/X-@alvinunreal-000000?style=for-the-badge&logo=x&logoColor=white" alt="X @alvinunreal"></a>&nbsp;
@@ -17,17 +17,20 @@
   <p>
     <a href="README.md">English</a> | <a href="README.zh-CN.md">简体中文</a> | <a href="README.ja-JP.md">日本語</a> | <b>한국어</b>
   </p>
+
+  <p><sub>✦ ✦ ✦</sub></p>
+
 </div>
 
 ---
 
-## Oh My OpenCode Slim
+## 이 플러그인은 무엇인가요
 
 oh-my-opencode-slim은 OpenCode용 에이전트 오케스트레이션 플러그인입니다. 코드베이스 정찰, 최신 문서 조회, 아키텍처 리뷰, UI 작업, 잘 정의된 범위의 구현 작업까지 처리하는 전문 에이전트 팀이 내장되어 있으며, 모두 하나의 오케스트레이터 아래에서 동작합니다.
 
 핵심 아이디어는 간단합니다. 하나의 모델이 모든 작업을 처리하도록 강제하는 대신, 각 작업에 가장 적합한 에이전트로 라우팅하여 **품질, 속도, 비용**의 균형을 맞춥니다.
 
-에이전트 자체를 살펴보려면 **[판테온 만나보기](#meet-the-pantheon)** 를 참고하세요. 전체 기능 목록은 아래의 **[기능 & 워크플로우](#features-and-workflows)** 에서 확인할 수 있습니다.
+에이전트 자체를 살펴보려면 **[판테온 만나보기](#meet-the-pantheon)** 를 참고하세요. 전체 기능 세트는 아래의 **[기능 & 워크플로우](#features-and-workflows)** 에서 확인할 수 있습니다.
 
 ### 빠른 시작
 
@@ -45,20 +48,9 @@ Install and configure oh-my-opencode-slim: https://raw.githubusercontent.com/alv
 bunx oh-my-opencode-slim@latest install
 ```
 
-### V2 백그라운드 오케스트레이션 베타
-
-V2는 오케스트레이터를 기본 실행 워커에서 스케줄러로 변경합니다. 작업을 계획하고, 전문 에이전트를 백그라운드 작업으로 디스패치한 다음, 상태를 폴링하여 결과를 조정한 뒤 계속 진행합니다. 이를 위해 OpenCode의 네이티브 백그라운드 서브에이전트 지원이 필요하므로, 베타 사용자는 실험적 플래그를 활성화한 상태로 OpenCode를 시작해야 합니다.
-
-```bash
-# 기존 사용자: 먼저 OpenCode의 캐시된 패키지를 삭제해 beta를 새로 받으세요.
-rm -rf ~/.cache/opencode/packages/oh-my-opencode-slim
-bunx oh-my-opencode-slim@beta install
-OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS=1 opencode
-```
-
 ### 시작하기
 
-인스톨러는 OpenAI와 OpenCode Go 프리셋을 모두 생성하며, 기본적으로 OpenAI가 활성화됩니다. OpenAI는 판단력이 높은 에이전트에 `openai/gpt-5.5`를, 빠른 범위 작업 에이전트에 `openai/gpt-5.4-mini`를 사용합니다. 설치 시 OpenCode Go를 활성화하려면 `bunx oh-my-opencode-slim@latest install --preset=opencode-go`를 실행하거나, 설치 후 `~/.config/opencode/oh-my-opencode-slim.json`에서 기본 프리셋 이름을 변경하세요.
+인스톨러는 OpenAI와 OpenCode Go 프리셋을 모두 생성하며, 기본적으로 OpenAI가 활성화됩니다. OpenAI는 워크플로 매니저/스케줄러에 `openai/gpt-5.5 (medium)`, Oracle에 `openai/gpt-5.5 (high)`, Fixer에 `openai/gpt-5.5 (low)`, 그 외 전문가에는 `openai/gpt-5.4-mini` 변형을 사용합니다. 설치 중 OpenCode Go를 활성화하려면 `bunx oh-my-opencode-slim@latest install --preset=opencode-go`를 실행하거나, 설치 후 `~/.config/opencode/oh-my-opencode-slim.json`에서 기본 프리셋 이름을 변경하세요.
 
 그 다음:
 
@@ -73,6 +65,8 @@ OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS=1 opencode
    opencode models --refresh
    ```
 3. **플러그인 설정 파일**을 `~/.config/opencode/oh-my-opencode-slim.json`에서 엽니다.
+   사용자 지정 OpenCode 설정 디렉터리를 사용한다면
+   `$OPENCODE_CONFIG_DIR/oh-my-opencode-slim.json`을 엽니다.
 
 4. **각 에이전트에 사용할 모델을 업데이트합니다**
 
@@ -87,12 +81,12 @@ OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS=1 opencode
   "preset": "openai",
   "presets": {
     "openai": {
-      "orchestrator": { "model": "openai/gpt-5.5", "skills": ["*"], "mcps": ["*", "!context7"] },
+      "orchestrator": { "model": "openai/gpt-5.5", "variant": "medium", "skills": ["*"], "mcps": ["*", "!context7"] },
       "oracle": { "model": "openai/gpt-5.5", "variant": "high", "skills": ["simplify"], "mcps": [] },
       "librarian": { "model": "openai/gpt-5.4-mini", "variant": "low", "skills": [], "mcps": ["websearch", "context7", "gh_grep"] },
       "explorer": { "model": "openai/gpt-5.4-mini", "variant": "low", "skills": [], "mcps": [] },
       "designer": { "model": "openai/gpt-5.4-mini", "variant": "medium", "skills": [], "mcps": [] },
-      "fixer": { "model": "openai/gpt-5.4-mini", "variant": "low", "skills": [], "mcps": [] }
+      "fixer": { "model": "openai/gpt-5.5", "variant": "low", "skills": [], "mcps": [] }
     },
     "opencode-go": {
       "orchestrator": { "model": "opencode-go/glm-5.1", "skills": [ "*" ], "mcps": [ "*", "!context7" ] },
@@ -138,6 +132,63 @@ ping all agents
 
 ---
 
+### V2의 새로운 점
+
+V2는 oh-my-opencode-slim을 스케줄러 중심의 멀티 에이전트 워크플로 시스템으로 바꿉니다. Orchestrator는 계획, 위임, 결과 조정, 검증에 집중하고, 전문가들은 각자의 lane에서 작업합니다.
+
+- **[백그라운드 에이전트](#백그라운드-에이전트)** — Orchestrator가 전문가를 백그라운드 작업으로 디스패치하고, 작업/세션 ID를 추적하며, 완료 이벤트를 기다린 뒤 결과를 조정합니다.
+- **[Companion](#companion)** — 선택 사항인 플로팅 데스크톱 창이 병렬 백그라운드 전문가를 포함해 현재 활성 에이전트를 보여줍니다.
+- **[Deepwork](#deepwork)** — 대규모, 다중 파일, 위험도가 높거나 단계적인 코딩 작업을 위한 구조화된 워크플로입니다. 지속적인 계획 파일과 Oracle 리뷰 게이트를 사용합니다.
+- **[oh-my-opencode-slim Skill](#oh-my-opencode-slim-skill)** — 모델, 프롬프트, 커스텀 에이전트, MCP 접근, 프리셋, 플러그인 동작을 안전하게 조정하는 번들 설정 skill입니다.
+
+#### 백그라운드 에이전트
+
+V2에서는 백그라운드 전문가가 기본 동작 모델입니다. Orchestrator는 작업 그래프를 계획하고, 적절한 에이전트를 실행하며, 겹치는 쓰기 소유권을 피하고, 터미널 작업 결과를 받은 뒤에 다음 행동을 이어갑니다.
+
+전체 스케줄러 모델은 **[Background Orchestration](docs/v2-background-orchestration.md)** 을 참고하세요.
+
+#### Companion
+
+선택 사항인 Companion은 실시간 에이전트 활동을 보여주는 플로팅 데스크톱 상태 창입니다. 현재 세션 상태와 활성 에이전트를 표시해 백그라운드 작업을 한눈에 파악할 수 있습니다.
+
+<div align="center">
+  <img src="img/companion.gif" alt="Companion showing active agents" width="600">
+  <p><i>왼쪽 아래의 시각적 companion.</i></p>
+</div>
+
+대화형 설치 중 인스톨러는 Companion 활성화 여부를 묻고 기본값은 `yes`입니다. 자동화에서는 명시적으로 활성화할 수 있습니다.
+
+```bash
+bunx oh-my-opencode-slim@latest install --companion=yes
+```
+
+설정, 위치, 크기, 설치 세부 사항은 **[Companion](docs/companion.md)** 을 참고하세요.
+
+#### Deepwork
+
+Deepwork는 대규모 리팩터링, 다단계 기능, 위험한 아키텍처 변경, 지속적인 계획이 필요한 작업 같은 무거운 코딩 세션을 위한 기능입니다. 로컬 markdown 진행 파일을 만들고, Oracle 리뷰 게이트를 사용하며, 구현 단계를 구조화합니다.
+
+다음으로 시작합니다.
+
+```text
+/deepwork <heavy coding task>
+```
+
+사용 시점과 워크플로 동작 방식은 **[Skills](docs/skills.md#deepwork)** 를 참고하세요.
+
+#### oh-my-opencode-slim Skill
+
+번들된 `oh-my-opencode-slim` skill은 Orchestrator가 플러그인 자체를 설정하고 개선하도록 돕습니다. 모델 튜닝, 커스텀 에이전트, 프롬프트 오버라이드, skill/MCP 권한, 프리셋, 선택적 에이전트, 백그라운드 오케스트레이션, 반복되는 워크플로 마찰에 사용할 수 있습니다.
+
+<div align="center">
+  <img src="img/oh-my-opencode-skill.png" alt="oh-my-opencode-slim skill in use" width="600">
+  <p><i>번들 skill에 에이전트 설정 튜닝과 개선을 요청하세요.</i></p>
+</div>
+
+예시와 안전 규칙은 **[Skills](docs/skills.md#oh-my-opencode-slim)** 를 참고하세요.
+
+---
+
 <a id="meet-the-pantheon"></a>
 
 ## 🏛️ 판테온 만나보기
@@ -532,7 +583,7 @@ ping all agents
   <p><sub>병합된 모든 기여는 이 영역에 흔적을 남깁니다.</sub></p>
 
   <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
-[![All Contributors](https://img.shields.io/badge/all_contributors-53-orange.svg?style=flat-square)](#contributors-)
+[![All Contributors](https://img.shields.io/badge/all_contributors-59-orange.svg?style=flat-square)](#contributors-)
 <!-- ALL-CONTRIBUTORS-BADGE:END -->
 </div>
 
@@ -613,6 +664,14 @@ ping all agents
       <td align="center" valign="top" width="16.66%"><a href="https://github.com/yolo2h"><img src="https://avatars.githubusercontent.com/u/10754850?v=4?s=100" width="100px;" alt="Yolo"/><br /><sub><b>Yolo</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=yolo2h" title="Code">💻</a></td>
       <td align="center" valign="top" width="16.66%"><a href="https://github.com/xinxingi"><img src="https://avatars.githubusercontent.com/u/49302071?v=4?s=100" width="100px;" alt="XinXing"/><br /><sub><b>XinXing</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=xinxingi" title="Code">💻</a></td>
       <td align="center" valign="top" width="16.66%"><a href="https://github.com/eltociear"><img src="https://avatars.githubusercontent.com/u/22633385?v=4?s=100" width="100px;" alt="Ikko Eltociear Ashimine"/><br /><sub><b>Ikko Eltociear Ashimine</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=eltociear" title="Code">💻</a></td>
+      <td align="center" valign="top" width="16.66%"><a href="https://github.com/dev-wantap"><img src="https://avatars.githubusercontent.com/u/69743540?v=4?s=100" width="100px;" alt="GWANWOO KIM"/><br /><sub><b>GWANWOO KIM</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=dev-wantap" title="Code">💻</a></td>
+    </tr>
+    <tr>
+      <td align="center" valign="top" width="16.66%"><a href="https://github.com/OmerFarukOruc"><img src="https://avatars.githubusercontent.com/u/7347742?v=4?s=100" width="100px;" alt="Omer Faruk Oruc"/><br /><sub><b>Omer Faruk Oruc</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=OmerFarukOruc" title="Code">💻</a></td>
+      <td align="center" valign="top" width="16.66%"><a href="https://khallaf.uk/"><img src="https://avatars.githubusercontent.com/u/51155980?v=4?s=100" width="100px;" alt="Omar Mohamed Khallaf"/><br /><sub><b>Omar Mohamed Khallaf</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=omar-mohamed-khallaf" title="Code">💻</a></td>
+      <td align="center" valign="top" width="16.66%"><a href="https://github.com/Qesire"><img src="https://avatars.githubusercontent.com/u/102657430?v=4?s=100" width="100px;" alt="Knowingthesea_Qesire"/><br /><sub><b>Knowingthesea_Qesire</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=Qesire" title="Code">💻</a></td>
+      <td align="center" valign="top" width="16.66%"><a href="http://www.flyinghail.net/"><img src="https://avatars.githubusercontent.com/u/157430?v=4?s=100" width="100px;" alt="FENG Hao"/><br /><sub><b>FENG Hao</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=flyinghail" title="Code">💻</a></td>
+      <td align="center" valign="top" width="16.66%"><a href="https://github.com/smatheusblu"><img src="https://avatars.githubusercontent.com/u/5666794?v=4?s=100" width="100px;" alt="Matheus Nogueira Silveira"/><br /><sub><b>Matheus Nogueira Silveira</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=smatheusblu" title="Code">💻</a></td>
     </tr>
   </tbody>
 </table>

+ 85 - 23
README.zh-CN.md

@@ -1,10 +1,13 @@
 <div align="center">
-  <h3>✨ 默认后台编排已上线 ✨</h3>
-  <p><i>编排者(Orchestrator)现在作为工作流管理器在后台调度专家智能体,<br>同时 <code>/deepwork</code> 可以将宏大目标转化为基于文件的具体计划。<br>欢迎在 Telegram 上与我们分享反馈。</i></p>
+  <a href="https://github.com/alvinunreal/oh-my-opencode-slim/stargazers">
+    <img src="img/v2.webp" alt="oh-my-opencode-slim V2 Release" style="border-radius: 10px;">
+  </a>
+  <h3>✨ oh-my-opencode-slim ✨</h3>
 
-  <p><b>开放式多智能体套件</b> · 混合任意模型 · 自动委派任务</p>
+  <p><i>七位神圣存在从代码黎明中现身,各自是不朽的工艺大师,<br>等待你的号令,将混沌锻造成秩序,并构建曾被认为不可能之物。</i></p>
 
-  <p><sub>由 <b>Boring Dystopia Development</b> 倾情打造</sub></p>
+  <p><b>Opencode 多智能体套件</b> · 混合任意模型 · 自动委派任务</p>
+  <p><sub>由 <b>Boring Dystopia Development</b> 打造</sub></p>
   <p>
     <a href="https://boringdystopia.ai/"><img src="https://img.shields.io/badge/boringdystopia.ai-111111?style=for-the-badge&logo=vercel&logoColor=white" alt="boringdystopia.ai"></a>&nbsp;
     <a href="https://x.com/alvinunreal"><img src="https://img.shields.io/badge/X-@alvinunreal-000000?style=for-the-badge&logo=x&logoColor=white" alt="X @alvinunreal"></a>&nbsp;
@@ -14,6 +17,9 @@
   <p>
     <a href="README.md">English</a> | <b>简体中文</b> | <a href="README.ja-JP.md">日本語</a> | <a href="README.ko-KR.md">한국어</a>
   </p>
+
+  <p><sub>✦ ✦ ✦</sub></p>
+
 </div>
 
 ---
@@ -24,7 +30,7 @@ oh-my-opencode-slim 是一个用于 OpenCode 的智能体编排插件。它内
 
 其核心理念非常简单:与其强迫单个模型做所有事情,本插件会将工作的每个部分路由到最适合它的智能体,从而平衡**质量、速度和成本**。
 
-要了解智能体本身,请参阅**[认识众神殿](#认识众神殿)**。如需了解完整的特性集,请参阅下方的**[特性与工作流](#特性与工作流)**。
+要了解智能体本身,请参阅 **[认识众神殿](#meet-the-pantheon)**。如需了解完整特性集,请参阅下方的 **[特性与工作流](#features-and-workflows)**。
 
 ### 快速开始
 
@@ -40,19 +46,6 @@ Install and configure oh-my-opencode-slim: https://raw.githubusercontent.com/alv
 bunx oh-my-opencode-slim@latest install
 ```
 
-> **翻译状态说明:** 英文 README 是最新版本;此中文翻译可能仍有少量旧表述。
-
-### 默认后台编排
-
-当前版本将编排者(Orchestrator)从默认的执行工作器转变为调度器:
-它规划工作、将专家作为后台任务分发、按需检查状态,并在继续执行之前核对结果。这需要 OpenCode 原生的后台子智能体支持,因此请使用下方环境变量启动 OpenCode。
-
-```bash
-bunx oh-my-opencode-slim@beta install --background-subagents=yes
-```
-
-安装后请重启终端或 source 更新过的 shell 文件,然后再运行 `opencode`;也可以一次性使用 `OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS=true opencode` 启动。
-
 ### 入门指南
 
 安装程序会同时生成 OpenAI 和 OpenCode Go 的预设(Preset),默认启用 OpenAI 预设。OpenAI 使用变体感知路由:`openai/gpt-5.5` (medium) 作为工作流管理器/调度模型,`openai/gpt-5.5` (high) 作为 Oracle 模型,`openai/gpt-5.5` (low) 作为 Fixer 模型,并使用 `openai/gpt-5.4-mini` 变体模型作为响应更快速、针对具体任务的智能体模型。若要在安装过程中激活 OpenCode Go 预设,请运行 `bunx oh-my-opencode-slim@latest install --preset=opencode-go` 或在安装后修改 `~/.config/opencode/oh-my-opencode-slim.json` 文件中的默认预设名称。
@@ -70,6 +63,8 @@ bunx oh-my-opencode-slim@beta install --background-subagents=yes
    opencode models --refresh
    ```
 3. **打开您的插件配置文件**,路径为 `~/.config/opencode/oh-my-opencode-slim.json`
+   或者在使用自定义 OpenCode 配置目录时打开
+   `$OPENCODE_CONFIG_DIR/oh-my-opencode-slim.json`
 
 4. **为您要分配的每个智能体更新模型配置**
 
@@ -116,10 +111,8 @@ bunx oh-my-opencode-slim@beta install --background-subagents=yes
 
 在完成安装与认证后,请验证所有智能体是否已正确配置并能够响应:
 
-请先确保已重启终端或 source 更新过的 shell 文件。环境变量生效后可运行 `opencode`;如果尚未更新当前 shell,请使用:
-
 ```bash
-OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS=true opencode
+opencode
 ```
 
 然后运行:
@@ -137,7 +130,64 @@ ping all agents
 
 ---
 
-<a id="认识众神殿"></a>
+### V2 新功能
+
+V2 将 oh-my-opencode-slim 变成了以调度器为核心的多智能体工作流系统。Orchestrator 专注于规划、委派、结果整合与验证,而专家智能体在各自的工作通道中完成任务。
+
+- **[后台智能体](#后台智能体)** — Orchestrator 现在会把专家作为后台任务派发,跟踪任务/会话 ID,等待完成事件,并在继续之前整合结果。
+- **[Companion](#companion)** — 可选的浮动桌面窗口会显示当前活跃的智能体,包括并行运行的后台专家。
+- **[Deepwork](#deepwork)** — 面向大型、多文件、高风险或分阶段编码工作的结构化工作流,使用持久化计划文件和 Oracle 评审关卡。
+- **[oh-my-opencode-slim Skill](#oh-my-opencode-slim-skill)** — 随包提供的配置技能,可安全调优模型、提示词、自定义智能体、MCP 访问、预设和插件行为。
+
+#### 后台智能体
+
+V2 将后台专家作为默认心智模型:Orchestrator 规划工作图,启动合适的智能体,避免重叠的写入所有权,并在处理终端任务结果后再继续行动。
+
+完整调度模型见 **[后台编排](docs/v2-background-orchestration.md)**。
+
+#### Companion
+
+可选 Companion 是一个用于展示实时智能体活动的浮动桌面状态窗口。它显示当前会话状态和活跃智能体,让后台工作一目了然。
+
+<div align="center">
+  <img src="img/companion.gif" alt="Companion showing active agents" width="600">
+  <p><i>左下角视觉伴侣。</i></p>
+</div>
+
+交互式安装期间,安装器会询问是否启用 Companion,并默认选择 `yes`。自动化安装可显式启用:
+
+```bash
+bunx oh-my-opencode-slim@latest install --companion=yes
+```
+
+配置、位置、尺寸和安装详情见 **[Companion](docs/companion.md)**。
+
+#### Deepwork
+
+Deepwork 适用于重型编码会话:大范围重构、多阶段功能、高风险架构变更,或需要持久计划的工作。它会创建本地 markdown 进度文件,使用 Oracle 评审关卡,并保持实现阶段结构化。
+
+启动方式:
+
+```text
+/deepwork <heavy coding task>
+```
+
+何时使用以及工作流如何运行,请参阅 **[Skills](docs/skills.md#deepwork)**。
+
+#### oh-my-opencode-slim Skill
+
+内置的 `oh-my-opencode-slim` skill 可帮助 Orchestrator 配置和改进插件本身。可用于模型调优、自定义智能体、提示词覆盖、skill/MCP 权限、预设、可选智能体、后台编排以及反复出现的工作流摩擦。
+
+<div align="center">
+  <img src="img/oh-my-opencode-skill.png" alt="oh-my-opencode-slim skill in use" width="600">
+  <p><i>让内置技能帮助调优和改进你的智能体设置。</i></p>
+</div>
+
+示例和安全规则见 **[Skills](docs/skills.md#oh-my-opencode-slim)**。
+
+---
+
+<a id="meet-the-pantheon"></a>
 
 ## 🏛️ 认识众神殿
 
@@ -530,7 +580,7 @@ ping all agents
   <p><sub>每一次合并的贡献都在这片领域留下了印记。</sub></p>
 
   <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
-[![All Contributors](https://img.shields.io/badge/all_contributors-50-orange.svg?style=flat-square)](#contributors-)
+[![All Contributors](https://img.shields.io/badge/all_contributors-59-orange.svg?style=flat-square)](#contributors-)
 <!-- ALL-CONTRIBUTORS-BADGE:END -->
 </div>
 
@@ -608,9 +658,21 @@ ping all agents
     <tr>
       <td align="center" valign="top" width="16.66%"><a href="https://github.com/zackslash"><img src="https://avatars.githubusercontent.com/u/2040617?v=4?s=100" width="100px;" alt="Luke Hines"/><br /><sub><b>Luke Hines</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=zackslash" title="Code">💻</a></td>
       <td align="center" valign="top" width="16.66%"><a href="https://github.com/andrewylies"><img src="https://avatars.githubusercontent.com/u/103019336?v=4?s=100" width="100px;" alt="m.seomoon"/><br /><sub><b>m.seomoon</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=andrewylies" title="Code">💻</a></td>
+      <td align="center" valign="top" width="16.66%"><a href="https://github.com/yolo2h"><img src="https://avatars.githubusercontent.com/u/10754850?v=4?s=100" width="100px;" alt="Yolo"/><br /><sub><b>Yolo</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=yolo2h" title="Code">💻</a></td>
+      <td align="center" valign="top" width="16.66%"><a href="https://github.com/xinxingi"><img src="https://avatars.githubusercontent.com/u/49302071?v=4?s=100" width="100px;" alt="XinXing"/><br /><sub><b>XinXing</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=xinxingi" title="Code">💻</a></td>
+      <td align="center" valign="top" width="16.66%"><a href="https://github.com/eltociear"><img src="https://avatars.githubusercontent.com/u/22633385?v=4?s=100" width="100px;" alt="Ikko Eltociear Ashimine"/><br /><sub><b>Ikko Eltociear Ashimine</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=eltociear" title="Code">💻</a></td>
+      <td align="center" valign="top" width="16.66%"><a href="https://github.com/dev-wantap"><img src="https://avatars.githubusercontent.com/u/69743540?v=4?s=100" width="100px;" alt="GWANWOO KIM"/><br /><sub><b>GWANWOO KIM</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=dev-wantap" title="Code">💻</a></td>
+    </tr>
+    <tr>
+      <td align="center" valign="top" width="16.66%"><a href="https://github.com/OmerFarukOruc"><img src="https://avatars.githubusercontent.com/u/7347742?v=4?s=100" width="100px;" alt="Omer Faruk Oruc"/><br /><sub><b>Omer Faruk Oruc</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=OmerFarukOruc" title="Code">💻</a></td>
+      <td align="center" valign="top" width="16.66%"><a href="https://khallaf.uk/"><img src="https://avatars.githubusercontent.com/u/51155980?v=4?s=100" width="100px;" alt="Omar Mohamed Khallaf"/><br /><sub><b>Omar Mohamed Khallaf</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=omar-mohamed-khallaf" title="Code">💻</a></td>
+      <td align="center" valign="top" width="16.66%"><a href="https://github.com/Qesire"><img src="https://avatars.githubusercontent.com/u/102657430?v=4?s=100" width="100px;" alt="Knowingthesea_Qesire"/><br /><sub><b>Knowingthesea_Qesire</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=Qesire" title="Code">💻</a></td>
+      <td align="center" valign="top" width="16.66%"><a href="http://www.flyinghail.net/"><img src="https://avatars.githubusercontent.com/u/157430?v=4?s=100" width="100px;" alt="FENG Hao"/><br /><sub><b>FENG Hao</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=flyinghail" title="Code">💻</a></td>
+      <td align="center" valign="top" width="16.66%"><a href="https://github.com/smatheusblu"><img src="https://avatars.githubusercontent.com/u/5666794?v=4?s=100" width="100px;" alt="Matheus Nogueira Silveira"/><br /><sub><b>Matheus Nogueira Silveira</b></sub></a><br /><a href="https://github.com/alvinunreal/oh-my-opencode-slim/commits?author=smatheusblu" title="Code">💻</a></td>
     </tr>
   </tbody>
 </table>
+
 <!-- markdownlint-restore -->
 <!-- prettier-ignore-end -->
 

+ 10 - 13
docs/companion.md

@@ -37,6 +37,10 @@ During interactive installation, the installer asks whether to download and
 enable the native Companion binary. The prompt defaults to `yes`, so pressing
 Enter installs it.
 
+Companion installation is best-effort. If the binary cannot be downloaded or
+installed, the installer prints a warning and continues installing the core
+plugin without Companion enabled.
+
 For automation, pass `--companion=yes` to install without prompting:
 
 ```bash
@@ -74,11 +78,9 @@ plan:
    `companion-v0.1.0` GitHub release.
 2. **Separate Companion Versioning**: the companion uses its own version so the
    plugin can ship beta updates without rebuilding native binaries every time.
-3. **Checksums**: the installer downloads `SHA256SUMS` and verifies the selected
-   archive before installing it.
-4. **OS/Arch Detection**: `--companion=yes` selects the archive for the current
+3. **OS/Arch Detection**: `--companion=yes` selects the archive for the current
    target.
-5. **No R2 Required**: GitHub Releases are the source of truth. R2 can be added
+4. **No R2 Required**: GitHub Releases are the source of truth. R2 can be added
    later as a mirror if download volume becomes a problem.
 
 Current release assets are named:
@@ -89,7 +91,6 @@ oh-my-opencode-slim-companion-v0.1.0-x86_64-apple-darwin.tar.gz
 oh-my-opencode-slim-companion-v0.1.0-x86_64-unknown-linux-gnu.tar.gz
 oh-my-opencode-slim-companion-v0.1.0-aarch64-unknown-linux-gnu.tar.gz
 oh-my-opencode-slim-companion-v0.1.0-x86_64-pc-windows-msvc.zip
-SHA256SUMS
 ```
 
 Supported installer targets:
@@ -100,10 +101,6 @@ Supported installer targets:
 - Linux arm64: `aarch64-unknown-linux-gnu`
 - Windows x64: `x86_64-pc-windows-msvc`
 
-For release bootstrapping only, checksum verification can be bypassed with
-`SKIP_COMPANION_CHECKSUM=true`, but normal user installs should keep checksum
-verification enabled.
-
 ## Maintainer Release Process
 
 Companion binaries are **not** built on every plugin beta. The workflow is
@@ -157,7 +154,7 @@ windows-x64
 ```
 
 The workflow creates or updates the `companion-v<version>` release and uploads
-the selected archives plus `SHA256SUMS`.
+the selected archives.
 
 ### 3. Verify release assets
 
@@ -165,7 +162,6 @@ After the workflow finishes:
 
 ```bash
 gh release view companion-v0.1.0
-gh release download companion-v0.1.0 --pattern SHA256SUMS --output -
 ```
 
 Confirm the release contains the archive names expected by the installer for the
@@ -180,8 +176,9 @@ bunx oh-my-opencode-slim@beta install --companion=yes
 ```
 
 The installer detects the user's OS/architecture, downloads the matching archive
-from `companion-v0.1.0`, verifies it against `SHA256SUMS`, installs it to the
-runtime binary path, and writes the companion config block.
+from `companion-v0.1.0`, installs it to the runtime binary path, and writes the
+companion config block. If the companion install fails, the core plugin install
+continues without enabling Companion.
 
 ### Cost controls
 

BIN
img/v2.webp


+ 0 - 66
src/cli/companion.ts

@@ -1,4 +1,3 @@
-import { createHash } from 'node:crypto';
 import {
   chmodSync,
   copyFileSync,
@@ -66,15 +65,10 @@ export async function installCompanion(
   const ext = isWindows ? 'zip' : 'tar.gz';
   const archiveName = `oh-my-opencode-slim-companion-v${COMPANION_VERSION}-${target}.${ext}`;
   const downloadUrl = `https://github.com/${GITHUB_REPO}/releases/download/${COMPANION_TAG}/${archiveName}`;
-  const checksumUrl = `https://github.com/${GITHUB_REPO}/releases/download/${COMPANION_TAG}/SHA256SUMS`;
 
   if (config.dryRun) {
     console.log(`  [dry-run] Detected companion target: ${target}`);
     console.log(`  [dry-run] Would download archive: ${downloadUrl}`);
-    console.log(`  [dry-run] Would download checksum: ${checksumUrl}`);
-    console.log(
-      '  [dry-run] Would verify via SHA256SUMS unless SKIP_COMPANION_CHECKSUM=true',
-    );
     console.log(`  [dry-run] Would extract and install to: ${finalBinaryPath}`);
     return {
       success: true,
@@ -82,29 +76,6 @@ export async function installCompanion(
     };
   }
 
-  const skipChecksum = process.env.SKIP_COMPANION_CHECKSUM === 'true';
-  let shaSumsText = '';
-
-  if (!skipChecksum) {
-    try {
-      const res = await fetch(checksumUrl);
-      if (!res.ok) {
-        return {
-          success: false,
-          configPath: finalBinaryPath,
-          error: `Failed to fetch checksum manifest (HTTP ${res.status}): ${res.statusText}. For release bootstrap, you can bypass this error by setting the SKIP_COMPANION_CHECKSUM=true environment variable.`,
-        };
-      }
-      shaSumsText = await res.text();
-    } catch (err) {
-      return {
-        success: false,
-        configPath: finalBinaryPath,
-        error: `Failed to fetch SHA256SUMS: ${err instanceof Error ? err.message : String(err)}. For release bootstrap, you can bypass this error by setting the SKIP_COMPANION_CHECKSUM=true environment variable.`,
-      };
-    }
-  }
-
   let buffer: ArrayBuffer;
   try {
     const res = await fetch(downloadUrl);
@@ -124,43 +95,6 @@ export async function installCompanion(
     };
   }
 
-  if (!skipChecksum) {
-    const lines = shaSumsText.split('\n');
-    let expectedHash: string | undefined;
-    for (const line of lines) {
-      const parts = line.trim().split(/\s+/);
-      if (parts.length >= 2) {
-        const [hashVal, fileVal] = parts;
-        const cleanFilename = fileVal.startsWith('*')
-          ? fileVal.slice(1)
-          : fileVal;
-        if (cleanFilename === archiveName) {
-          expectedHash = hashVal.toLowerCase();
-          break;
-        }
-      }
-    }
-
-    if (!expectedHash) {
-      return {
-        success: false,
-        configPath: finalBinaryPath,
-        error: `No SHA256 checksum entry found for ${archiveName} in SHA256SUMS. For release bootstrap, you can bypass this error by setting the SKIP_COMPANION_CHECKSUM=true environment variable.`,
-      };
-    }
-
-    const computedHash = createHash('sha256')
-      .update(Buffer.from(buffer))
-      .digest('hex');
-    if (computedHash !== expectedHash) {
-      return {
-        success: false,
-        configPath: finalBinaryPath,
-        error: `SHA256 checksum mismatch for ${archiveName}. Expected ${expectedHash}, got ${computedHash}`,
-      };
-    }
-  }
-
   let tempDir = '';
   try {
     tempDir = mkdtempSync(path.join(tmpdir(), 'companion-install-'));

+ 20 - 1
src/cli/install.ts

@@ -69,6 +69,10 @@ function printError(message: string): void {
   console.log(`${SYMBOLS.cross} ${RED}${message}${RESET}`);
 }
 
+function printWarning(message: string): void {
+  console.log(`${SYMBOLS.warn} ${YELLOW}${message}${RESET}`);
+}
+
 function printInfo(message: string): void {
   console.log(`${SYMBOLS.info} ${message}`);
 }
@@ -277,6 +281,20 @@ function handleStepResult(
   return true;
 }
 
+function handleOptionalCompanionResult(result: ConfigMergeResult): void {
+  if (result.success) {
+    printSuccess(
+      `Companion installed ${SYMBOLS.arrow} ${DIM}${result.configPath}${RESET}`,
+    );
+    return;
+  }
+
+  printWarning(`Desktop companion install skipped: ${result.error}`);
+  printInfo(
+    'The desktop companion is optional; continuing plugin installation without it.',
+  );
+}
+
 async function runInstall(config: InstallConfig): Promise<number> {
   const detected = detectCurrentConfig();
   const isUpdate = detected.isInstalled;
@@ -355,7 +373,8 @@ async function runInstall(config: InstallConfig): Promise<number> {
   if (companionInstall) {
     printStep(step++, totalSteps, 'Installing desktop companion binary...');
     const companionResult = await installCompanion(config);
-    if (!handleStepResult(companionResult, 'Companion installed')) return 1;
+    handleOptionalCompanionResult(companionResult);
+    if (!companionResult.success) config.companion = 'no';
   }
 
   printStep(step++, totalSteps, 'Writing oh-my-opencode-slim configuration...');