opencode-bridge について
OpenWorkとOpenCodeを連携する開発スキルです。CLI呼び出し、SQLiteのセッションデータ参照、双方向MCPブリッジを扱い、関連機能を開発する人を対象としています。
主な機能
- 01CLI経由のOpenCodeプロンプト実行
- 02SQLiteからのセッションとメッセージの取得
- 03進捗ストリームと権限要求の中継
- 04OpenCodeへのOpenWorkツール公開
活用シーン
- 01OpenCodeのセッション履歴表示
- 02OpenWorkでの権限要求の表示
- 03タスク進捗のUIへの配信
MCP 対応
OpenWorkはMCPサーバーとして登録し、OpenCodeから接続できます。ブリッジは進捗ストリーム、権限要求、カスタムツールに対応します。
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ different-ai/ openwork --skill opencode-bridgeインストール後、Claude Code で/opencode-bridgeを入力して読み込まれたか確認します。
詳細
概要
OpenWork は、次の 3 つの方法で OpenCode と通信します。
- CLI の呼び出し:プロンプトを指定して
opencodeを起動し、JSON レスポンスを取得します。 - データベースへのアクセス:OpenCode の SQLite データベースからセッションとメッセージを読み取ります。
- MCP ブリッジ:ストリーミングと権限のためのリアルタイム双方向通信です。
CLI の呼び出し
非対話モード
opencode -p "your prompt" -f json -q
レスポンスの内容を含む JSON を返します。
フラグ
| フラグ | 説明 |
|---|---|
-p | 実行するプロンプト |
-f | 出力形式(text、json) |
-q | Quiet モード(スピナーなし) |
-c | 作業ディレクトリ |
-d | デバッグモード |
レスポンスの例
{
"content": "Here is the result...",
"session_id": "abc123"
}
データベースへのアクセス
場所
~/.opencode/opencode.db
またはプロジェクト内:
.opencode/opencode.db
スキーマ(主要なテーブル)
sessions
CREATE TABLE sessions (
id TEXT PRIMARY KEY,
parent_session_id TEXT,
title TEXT,
message_count INTEGER,
prompt_tokens INTEGER,
completion_tokens INTEGER,
summary_message_id TEXT,
cost REAL,
created_at INTEGER,
updated_at INTEGER
);
messages
CREATE TABLE messages (
id TEXT PRIMARY KEY,
session_id TEXT,
role TEXT, -- 'user', 'assistant', 'tool'
parts TEXT, -- JSON array of content parts
model TEXT,
created_at INTEGER,
updated_at INTEGER
);
Rust(Tauri)からのクエリ
use tauri_plugin_sql::{Migration, MigrationKind};
#[tauri::command]
async fn list_sessions(db: tauri::State<'_, Database>) -> Result<Vec<Session>, String> {
let sessions = sqlx::query_as::<_, Session>(
"SELECT * FROM sessions ORDER BY updated_at DESC"
)
.fetch_all(&db.pool)
.await
.map_err(|e| e.to_string())?;
Ok(sessions)
}
SolidJS からのクエリ
import Database from "@tauri-apps/plugin-sql";
const db = await Database.load("sqlite:~/.opencode/opencode.db");
const sessions = await db.select<Session[]>(
"SELECT * FROM sessions ORDER BY updated_at DESC"
);
MCP ブリッジ(上級)
OpenWork は MCP サーバーとして登録でき、OpenCode はこれに接続します。
設定(opencode.json)
{
"mcpServers": {
"openwork": {
"type": "stdio",
"command": "openwork-mcp-bridge"
}
}
}
ユースケース
- OpenWork の UI にリアルタイムの権限プロンプトを表示します。
- 進捗状況をストリーミングで更新します。
- OpenWork が提供するカスタムツール(ネイティブのファイル選択ダイアログなど)。
メッセージのコンテンツパーツ
メッセージには、さまざまなコンテンツタイプを含む parts JSON 配列が含まれます。
TextContent
{ "type": "text", "text": "Hello world" }
ToolCall
{
"type": "tool_call",
"id": "call_123",
"name": "bash",
"input": "{\"command\": \"ls\"}"
}
ToolResult
{
"type": "tool_result",
"tool_call_id": "call_123",
"content": "file1.txt\nfile2.txt",
"is_error": false
}
Finish
{
"type": "finish",
"reason": "end_turn",
"time": 1704067200
}
よくある注意点
- データベースは SQLite です。実行中の OpenCode との競合を避けるため、読み取り専用でアクセスしてください。
- メッセージパーツは JSON エンコードされた文字列です。UI で解析してください。
- セッション ID は UUID です。ツール呼び出し ID も UUID です。
- コストの単位は USD です。トークン数は実数です。
初回セットアップ
OpenCode がインストールされていることを確認
which opencode
opencode --version
データベースが存在することを確認
ls ~/.opencode/opencode.db
CLI の呼び出しをテスト
opencode -p "Hello" -f json -q
コメント
Markdown 対応