Claudian × OpenCode × qwen3-coder-next によるClaude Code代替動作検証(Obsidian統合エージェント実用評価)

✅ 検証済み | 技術 | 優先度:🟠 高

シリーズ: AI・IT実践シリーズ


目的(ゴール)

Obsidian プラグイン Claudian を UI として、OpenCode + qwen3-coder-next(Node4 MoE・総パラメータ 80B / アクティブ 3B)を推論バックエンドとするCC代替スタックが、日常的な Vault オペレーション・コーディングタスクに実用的か検証する。UC260417-001(OpenHands/Aider on Node3 による完全代替)の並列検証として、Obsidian 統合型エージェントアプローチの実用性・コスト効果・safe モード運用可否を評価し、CC との代替比率を定量化する。


アクター

  • 著者(Manabazu)
  • Claudian(Obsidian プラグイン・UIレイヤー)
  • OpenCode(エージェントランタイム・ツール実行層)
  • qwen3-coder-next(Node4 LiteLLM 経由・GatedDeltaNet + MoE コーディングモデル)
  • Claude Code(対照・品質基準)
  • Node4 LiteLLM(モデルルーティング層)

開始条件(起動トリガー)

Claudian の opencode プロバイダーで qwen3-coder-next が選択可能な状態にあり、claudian-safe モードが有効化されているとき。日常的な Vault 作業または CC へのタスク発行の代替として試行する場合。

事前条件

  • Node4 LiteLLM が稼働し、qwen3-coder-next/v1/models に登録済み
  • Claudian の visibleModelsopenai/qwen3-coder-next が追加済み
  • claudian-settings.jsonselectedMode: "claudian-safe" / savedProviderPermissionMode.opencode: "safe" が設定済み

事後条件

  • 対象タスク種別において Claudian/OpenCode/qwen3-coder-next スタックが CC と同等以上の品質で処理できることが検証済み、または代替不可の限界が明確化されている
  • 評価結果が UC260417-001 の Phase A 比較データとして統合可能な形で記録されている

メインフロー

  1. Obsidian 上の Claudian を claudian-safe モードで起動し、opencode プロバイダー・qwen3-coder-next を選択する
  2. CC と同一のタスクセットを Claudian 経由で発行し、成果物・品質・処理速度を記録する
  3. safe モードの動作(bash/edit への ask 要求)が正常に機能することを確認する
  4. Vault オペレーション(LabLog 作成・UC 登録・AtomicNote 生成)を Claudian 経由で実行し代替可否を判定する
  5. コーディングタスクを実行し CC との品質比較スコアを記録する
  6. 評価結果を UC260417-001 S1〜S4 シナリオの比較データとして統合する

代替フロー

  • qwen3-coder-next の品質が不十分な場合: Claudian 内でモデルを切り替え(qwen35-122b-a10b など)て再評価する
  • Node4 が停止した場合: ollama/qwen25coder-7b-node1(Node1 ローカル)にフォールバックし、フォールバック品質も記録する

例外フロー


シナリオリスト

  1. S1 - safe モード統合動作確認
  2. S2 - コーディングタスク代替(Vault スクリプト修正)
  3. S3 - Vault オペレーション代替(LabLog・UC登録・AtomicNote)
  4. S4 - Sandbox 化(検証環境のポータブル化・Node3 Docker 移行)

シナリオ記述

S1: safe モード統合動作確認

トリガー: Claudian の opencode プロバイダーで新規セッションを開始する フロー:

  1. claudian-settings.jsonselectedMode: "claudian-safe" / savedProviderPermissionMode.opencode: "safe" を確認する
  2. bash コマンドまたはファイル編集を伴うタスクを発行し、Claudian が ask プロンプトを表示することを確認する
  3. セッション再起動後も safe モードが維持されることを確認する(yolo への自動復帰が発生した場合は設定を再適用する)

S2: コーディングタスク代替

トリガー: 著者が Vault スクリプトまたは設定ファイルの修正タスクを Claudian 経由で発行する フロー:

  1. qwen3-coder-next が修正案を生成し、OpenCode が safe モードで確認を取りながら適用する
  2. CC と同一タスクの成果物・品質スコア・処理時間を記録する
  3. 品質スコアが CC の 80% 以上であれば「代替可」と判定する

S3: Vault オペレーション代替

トリガー: 著者が LabLog 作成・UC 登録・AtomicNote 生成等の定型タスクを Claudian 経由で実行する フロー:

  1. CLAUDE.md / Vault ルールを context として渡し、qwen3-coder-next に定型タスクを実行させる
  2. 成果物の整合性(frontmatter・ID 採番・WikiLink 等)を著者がレビューする
  3. hallucination(架空 ID・日付)の発生率を記録し R260416-001 の証跡データとする

S4: Sandbox 化(検証環境のポータブル化・Node4 Docker 移行)

設計調査: qwen3.6-35b-a3b(スクリプト棚卸し・アーキテクチャ設計)+ qwen3-coder-next(配置判断・計画統合)により実施。評価: 20260522-UC260522-001-S4-Docker化LabLog評価

トリガー: Node1 のみで動作している PowerShell / WSL 検証スクリプトを Docker イメージにまとめ、Node4 上で実行可能にする(Node3 は冗長化予備)

背景: 検証スクリプト(ベンチマーク・Vault 操作等)が Node1 のローカル環境(WSL2・PowerShell)に密結合しており、他ノードから実行できない。また Bitdefender が PowerShell -EncodedCommand をブロックするなど OS 固有の制約もある。

事前条件:

  • Node4 Docker 環境が稼働中
  • Node4 LiteLLM が稼働中
  • GitHub 認証情報がコンテナに渡せる状態
  • スクリプト棚卸し完了(13 本・3 グループ確認済み)

スクリプト棚卸し結果(qwen3.6-35b-a3b 調査):

グループパス本数主な依存
A: 中核自動化~/usecases/orchestrator/3stdlib, pyyaml
B: LLM 評価~/usecases/llm-eval/4 + benchmarks/requests, pyyaml
C: Vault 内Publishing/.../6requests, openai, stdlib
合計13requests / pyyaml / openai(3 パッケージのみ)

Python バージョン: 3.11.9(Node1 実測)

設計決定事項:

#項目決定根拠
1配置先Node4 第一候補・Node3 は冗長化LiteLLM 同一ホストでループバック高速、安定基盤
2ベースイメージpython:3.11-slim依存 3 パッケージのみ、軽量
3Vault 同期GitHub 経由(コンテナ内 git clone/pull)履歴管理・NAS 非依存・Node1 オフライン耐性
4実行パターンSSH → docker run —rm(Pattern A)シンプル・ステートレス
5GitHub 認証Fine-grained PAT(.envセキュリティと運用容易性のバランス
6ネットワークai-net(external bridge)Node3 既存エージェント統一パターン準拠
7Git write-backコンテナ内 git commit & push(オプション)Node1/Node5 での結果確認を容易に

アーキテクチャ:

Node1 / Node5
├── Obsidian + Claudian → OpenCode → Node4 LiteLLM(変更なし)
├── git push → GitHub(Vault 同期)
└── SSH → docker run --rm → Node4(スクリプト実行)

GitHub
├── ← Node1/Node5 push
└── → Node4 コンテナ clone/pull/push

Node4 ★Docker ホスト
├── LiteLLM(変更なし)
└── /data/verification-tool/
    └── verification-tool:latest コンテナ
        ├── scripts/(Group A + B 移植済み)
        ├── vault-scripts/(Group C 移植済み)
        └── → LiteLLM(ループバック)

Node3 ★冗長化予備(後日)
└── 同一イメージをデプロイ(Node4 障害時フォールバック)

ディレクトリ構成(Node4 上):

/data/verification-tool/
├── Dockerfile          # python:3.11-slim + git + jq
├── docker-compose.yml  # ai-net 参加
├── .env                # 認証情報・接続先設定
├── requirements.txt    # requests, pyyaml, openai
├── entrypoint.sh       # サブコマンドディスパッチ
├── scripts/            # Group A + B(orchestrator / llm-eval)
│   ├── vault_worker.py
│   ├── publishing_ops.py
│   ├── orchestrate.py
│   ├── eval_runner.py
│   ├── report.py
│   └── benchmarks/
└── vault-scripts/      # Group C(Vault 内スクリプト)
    ├── generate_uc_pages.py
    ├── generate_risk_pages.py
    ├── linkify_masters.py
    └── JailBreak/

実装フロー:

  1. Node4 上に /data/verification-tool/ を作成し、Dockerfile / entrypoint.sh / requirements.txt を実装する
  2. scripts/ に Group A・B のスクリプトをコピーし、vault-scripts/ に Group C を抽出する
  3. docker build -t verification-tool:latest でイメージをビルドする
  4. Node1 PowerShell から ssh <Node4ホスト> docker run --rm verification-tool:latest --help で疎通確認する
  5. end-to-end テスト: Node1 git push → GitHub → コンテナ内 git pull → スクリプト実行 → git push → Node1 git pull で成果物確認する
  6. Node5(M1 Mac)からの SSH 接続を確認する
  7. (オプション)Node3 への同一イメージデプロイで冗長化する

未解決の検討課題:

  • pull_models.py(Group B)の要否:本番運用では基本不要だが初期セットアップ時に有用か
  • Node5 → Node4 SSH 鍵設定が未確認
  • バッチ向け拡張(Pattern B: git push トリガー)は Pattern A 安定後に検討

評価項目:

  • Node1 実行時と同一の出力・品質がコンテナ内で得られるか
  • Vault の git sync ラウンドトリップ(push → pull)が実用レイテンシか
  • Node1 がオフラインでも Node4 単独でスクリプト実行継続できるか
  • Node5(M1 Mac)からの SSH 経由実行が問題なく動作するか

備考

  • UC260417-001 との違い:本 UC は「Claudian UI(Obsidian プラグイン)+ OpenCode ランタイム」という特定スタックの評価。UC260417-001 は OpenHands/Aider on Node3 で CC を完全除去するゴール。異なるアプローチの並列検証として独立登録。
  • qwen3-coder-next スペック:GatedDeltaNet + MoE・SWE-bench Verified 70.6%・49GB (UD-Q4_K_M)・Node4 128GB 統合メモリ収容済み
  • claudian-safe モード定義:bash: ask, edit: ask, plan_enter: allow.claudian/opencode/config.json 参照)

派生構想:Claudian Sandbox — Docker 自律型エージェント

本UCの評価フェーズから派生して、Claudian の system prompt と OpenCode ランタイムを Docker コンテナにパッケージし、Node3 (Z890) 上で自律動作させるアーキテクチャ構想が具体化した。以下にその設計骨子を記録する。

アーキテクチャ概要

Node1 (Surface Pro / Obsidian)        Node3 (Z890)
┌─────────────────────────┐          ┌──────────────────────────────────┐
│ 原稿執筆・git commit    │          │  Claudian Sandbox (Docker)       │
│   ↓                     │          │  ┌────────────────────────────┐  │
│  git push ──────────────┼────────→ │  │ git clone/pull vault       │  │
│   ↑                     │          │  │ OpenCode → LLM call        │──┼──→ GitHub
│  git pull ←─────────────┼───────── │  │ 自律タスク実行・git push   │  │
└─────────────────────────┘          │  └────────────────────────────┘  │
                                      └──────────────────────────────────┘
                                              │ Node4 LiteLLM HTTP API
                                              ▼
Node4 (EVO-X2)
┌─────────────────────────┐
│ LiteLLM                 │
│ Ollama :11434           │
│ qwen3-coder-next 他     │
└─────────────────────────┘

アーキテクチャ設計の要点

要素設計方針根拠
Vault同期GitHub 媒介(SMB/NFS不要)Node1→push, Sandbox→pull/push。履歴管理・ロールバック・競合解決をGitに集約。NAS非依存でシンプル
配置先Node3 (Z890) の ~/usecases/codingagent/claudian/ または独立ディレクトリ既にOpenHands/Aider/SWE-agentが稼働中。Dockerホストとして実績あり
ネットワークai-net (external bridge) に参加 → Node4 LiteLLM に直接アクセスNode3の既存エージェント全般の統一パターンに準拠
GPU要否不要(CPU-only)LLM呼び出しは全てNode4へのHTTP API。GPUはNode4が専有
LLM接続先Node4 LiteLLM HTTP APINode4 LiteLLM 経由で qwen3-coder-next 他をルーティング
ベースイメージnvidia/cuda:12.4.1-base-ubuntu22.04(GPU不要だがCUDAツールキット互換性統一のため)あるいは ubuntu:22.04 で十分。要検討
エージェントランタイムOpenCode(CLI)Claudianの既存プロバイダー設定をそのまま継承
再起動ポリシーrestart: unless-stoppedNode3の全エージェント統一パターン
UID1000 (mnbz)既存全コンテナと統一

S4(構想): 自律型 Claudian Sandbox 動作検証

トリガー: Claudian Sandbox コンテナが Node3 上で起動し、GitHub 経由で Vault を取得する

事前条件:

  • Node3 Docker 環境 (nvidia-container-toolkit + Docker Compose v2) が稼働中
  • ai-net 外部ネットワークが作成済み(docker network create ai-net
  • GitHub 認証情報がコンテナに渡せる状態
  • Node4 LiteLLM が稼働中

フロー:

  1. Sandbox コンテナ起動 → GitHub から Vault リポジトリを git clone
  2. Claudian の system prompt (system.md) + 設定 (config.json) を継承
  3. 自律エージェントが Vault 内の定型タスク(UC登録・LabLog作成・原稿編集)を実行
  4. 変更を git add / git commit / git push
  5. Node1 側で git pull → 成果物を確認・レビュー
  6. Node1 上での修正 → git push → Sandbox が git pull で同期

評価項目:

  • 自律エージェントが Vault の frontmatter / WikiLink / ID採番ルールを遵守できるか
  • 長時間セッションでの hallucination 発生率
  • GitHub を介した同期レイテンシが実用範圍か
  • Node1 がオフラインでも Node3 単独でタスク継続できるか

想定されるユースケース:

  • 夜間バッチ的な原稿校正・リンク検証
  • 定型タスク(LabLog作成・UC登録・AtomicNote生成)の自動処理
  • CC 使用量削減・APIコスト最適化

技術的課題(未解決)

  • GitHub 認証情報の受け渡し — Docker secret または .env での GITHUB_TOKEN 管理。安全性と運用容易性のバランス要検討
  • コンテナライフサイクル管理sleep infinity 常駐型 or ジョブ型(タスク実行後に終了)。OpenManus のパターンと比較
  • Sandbox内での Git ユーザー設定 — 自律コミットの author 名を Claudian Bot <claudian@manabazu.example> 等に固定
  • ワークスペースの永続性git clone 先を volume 永続化するか、起動都度クリーン取得するか
  • 安全機構 — safe モード相当の制御が無人動作で不要か、あるいは制限付きモードを新設するか

関連ファイル(配置予定) ~/usecases/claudian-sandbox/

  • Dockerfile — ベースイメージ + OpenCode CLI + Git 設定
  • docker-compose.ymlai-net 参加・ボリュームマウント・環境変数
  • config/opencode.jsonc — OpenCode 設定(継承元:.claudian/opencode/config.json
  • config/system.md — Claudian system prompt(継承元:.claudian/opencode/system.md
  • config/entrypoint.sh — コンテナ起動時スクリプト(git clone + OpenCode CLI起動)

対応リスク


エージェント評価記録(2026-05-22)

評価概要

Claudian + OpenCode + qwen3-coder-next スタックに、UC 文書更新(本 UC ファイル作成)と LabLog 作成を依頼し、Claude Code(CC)が出力を検査した。

良かった点

  • UC ファイル内容の品質は CC と遜色ない — frontmatter 必須キー完備、シナリオ記述済み、アーキテクチャ図・設計要点表・課題整理まで構造化されている
  • コミットプレフィックスの使い分けが正確plan: / log: を CLAUDE.md §5 に準拠して使用
  • LabLog 本文の可読性 — 表・コードブロックで設計判断が整理されており、後から参照しやすい形式

問題点

#問題重要度
1UseCase-Master.md・Risk 逆リンク(3件)がコミットされず working tree に残留高(CLAUDE.md §3 違反)
2LabLog frontmatter に不正値:log_type: design(→ planning)・status: draft(→ completed
339236cc のコミットメッセージ「追記」が実態(新規作成)と不一致
4LabLog の risk_ids: [] が空(関連リスク 3 件を未記載)

総評

Vault 文書の内容品質は合格水準。ただし CLAUDE.md §3「UC 登録は 2 ファイルセット必須」ルールを遵守できず、UseCase-Master.md と Risk 逆リンクが未 commit のまま残った。CC による事後検査で補完。

ユースケース一覧に戻る