DeepSeek ネイティブ・OpenAI 互換のターミナル向けコーディングエージェント(Xiaomi MiMo 対応済み)—— 単一バイナリ・キャッシュフレンドリー・コードグラフとローカル OCR を内蔵
Tip
⚡ 長いセッションで実測 ~99% の prompt-cache ヒット(実際のセッション:41,591 トークン中 41,472 がキャッシュ)。DeepSeek はキャッシュヒットの入力をキャッシュミスの数十分の一で課金するため(公式料金)、長時間の実行でも繰り返しのコンテキストにほとんど課金されません。
- 🦫 単一の Go バイナリ —— Node / Python ランタイム不要、
curl一行でインストール、macOS / Linux / Windows 対応。 - 💰 キャッシュフレンドリーで長時間でも安い —— DeepSeek のプレフィックスキャッシュを軸に設計(実測 ~99% ヒット)。ローカルキーワードルーティングは毎ターン、遅延ゼロ・トークンゼロで起動。
- 🧭 コードグラフ内蔵(codegraph) —— シンボル単位の定義ジャンプ / 呼び出し元 / インターフェース実装 / 影響範囲。Go は
go/typesで正確に解析し、リポジトリ全体の grep を置き換えます。 - 👀 ローカル画像 OCR(PaddleOCR) —— スクリーンショットの文字をオフラインで読み取り、マルチモーダル API は不要。
- 📎
@ファイル / ディレクトリ参照 —— 入力欄で@を打つとローカルのファジー検索パスピッカーが開く。選択すると@パスがメッセージに挿入され、モデルは必要に応じて Read(ファイル)/ List(ディレクトリ)を呼ぶ。コンテキストを精密に渡せて、全部詰め込まなくて済む。 - 🧠 デュアルモデル自動ルーティング —— 軽い処理は flash、複雑なタスクは自動で pro に昇格。
/model flash|proでモデル固定、/auto/plan/reviewでモード切替も可能。 - 🗂️ 逐次 Todo + 並列 Plan DAG —— 多段階タスクは可視チェックリストで一歩ずつ。独立した並列タスクは DAG に分解してサブエージェントを並列実行。
- 💾 ロスレスなセッション永続化 —— gob が
tool_calls/ ツール結果 /reasoning_contentを完全保持し、再起動後もシームレスに継続。ウィンドウが埋まると自動で階層圧縮。 - 🔌 MCP + Skill エコシステム —— MCP ネイティブ対応。Claude の skill ディレクトリと互換で、既存の skill をそのまま再利用。
- 🛡️ レビューモード —— ファイル書き込み / Shell 実行はデフォルトで人間の確認を要求。
- ⚡ 非対話
execモード ——deepx exec "タスク"は一度だけ実行して結果を stdout に直接出力。パイプで入力、出力をリダイレクト、スクリプト / CI / cron に組み込み可能で、TUI に入る必要なし(下記参照)。
| deepx-code | Claude Code | |
|---|---|---|
| 配布 | 単一 Go バイナリ、curl 一行 |
Node(npm) |
| オープンソース | ✅ MIT | ❌ クローズド |
| モデル | DeepSeek / Xiaomi MiMo(OpenAI 互換、設定時にプロバイダを選択、flash/pro 自動ルーティング) | Anthropic Claude |
| コスト | 長いセッションで ~99% キャッシュヒット | サブスク / Claude API 従量 |
| コードグラフ内蔵 | ✅ codegraph(Go は go/types で正確) |
❌(grep / 検索) |
| ローカル・オフライン OCR | ✅ PaddleOCR | ❌(画像はクラウドのマルチモーダル) |
| MCP | ✅ | ✅ |
| Skill エコシステム | ✅(Claude の skill ディレクトリを再利用) | ✅ |
Note
これはモデルの品質そのものを比べるものではありません。deepx-code のトレードオフは コスト・オープンソース・単一バイナリ・内蔵コードグラフ・オフライン OCR です。
1. インストール
macOS / Linux(末尾の && exec $SHELL は現在のシェルを再起動し、PATH に deepx をすぐ反映させます。rc の source や新しいターミナルを開く必要はありません):
curl -fsSL https://raw.githubusercontent.com/itmisx/deepx-code/main/scripts/install.sh | bash && exec $SHELLWindows(PowerShell):
irm https://raw.githubusercontent.com/itmisx/deepx-code/main/scripts/install.ps1 | iex~/.local/bin/deepx にインストールされます。deepx upgrade でいつでも更新可能。
2. ターミナルでプロジェクトに入って起動
deepx はターミナルプログラムです。ターミナルを開き、プロジェクトに cd して deepx を実行すると対話 UI に入ります。
- どのターミナルでも OK:macOS の Terminal / iTerm2、Linux のターミナル、Windows Terminal / PowerShell。
- VS Code 内蔵ターミナルもおすすめ(
Terminal → New Terminal、またはCtrl+`):開いているプロジェクトのディレクトリにいるので、deepxがそのプロジェクトに対して動き、編集はエディタに即座に反映されます。
cd <あなたのプロジェクト> # VS Code の内蔵ターミナルなら通常すでにプロジェクト直下
deepx # 対話型 TUI に入る3. 設定
| 項目 | 方法 |
|---|---|
| プロバイダ & Key | 初回起動時のウィザードで:←/→ でプロバイダ(DeepSeek / Xiaomi MiMo)を選び、対応する API Key を入力し ~/.deepx/model.yaml に保存。各プロバイダに flash/pro の既定モデルと 1M コンテキストを用意(DeepSeek deepseek-v4-flash / -pro、MiMo mimo-v2.5 / -pro)。/config で再設定。 |
| 手動上書き | ~/.deepx/model.yaml を直接編集し、role(flash/pro)ごとに base_url / model / api_key / max_tokens / context_window を上書き可能。flash と pro で別プロバイダも指定できる。 |
| Skill | <ワークスペース>/.deepx/skills/ に配置、または ~/.claude/skills/ などを再利用。 |
| MCP | TUI 内で /mcp-add で追加、/mcp-list で一覧。 |
フル TUI に入らず deepx をスクリプトに組み込みたいときは deepx exec "<タスク>" を使います。タスクを実行し、結果をそのままターミナル(stdout)に出力して終了します。結果のみ、途中の出力はありません。
deepx exec "README の機能リストを英語に翻訳して README.en.md に書き込む"パイプ入力にも対応(cat error.log | deepx exec "このエラーを分析して")。先に対話型 deepx で API キーを設定しておいてください。
モデルルーティング(ローカル・遅延ゼロ・トークンゼロ)
メッセージが届くと、deepx はローカルでキーワード照合 + 長さ判定を行い、追加の LLM トークンを使わずに起動モデルを即座に決定します:
"リファクタ / refactor / architecture / デバッグ …" を含む → すぐ pro
長さ < 100 文字 → flash
長さ > 500 文字 → pro
中国語(簡体 / 繁体)/ 英語 / 日本語 / 韓国語に対応。ターンの途中でも、モデルは難しい推論のために SwitchModel で pro に昇格できます。
セッション永続化(gob バイナリ、ロスレス再開)
~/.deepx/sessions/<sha1(workspace)[:16]>/
├── meta.json # ワークスペースのメタ情報
├── state.json # 圧縮状態 + 使用量スナップショット
├── YYYY-MM-DD.jsonl # テキストログ(Memory 検索用)
└── history.gob # 完全なバイナリ履歴
| 形式 | 保存内容 | 用途 |
|---|---|---|
history.gob |
system + user + assistant(tool_calls・ツール結果・reasoning_content を含む) |
再起動からの復元、シームレス継続 |
YYYY-MM-DD.jsonl |
user / assistant のプレーンテキスト | Memory ツールの検索 |
再起動時はまず gob を読み込み、失敗時は JSONL にフォールバック。アップグレードや skill 変更で system prompt が変わった場合、gob 復元時に現行版へ透過的に置換し、キャッシュのプレフィックスを安定させます。
セッション圧縮(階層 + サマリ統合)
コンテキストウィンドウの 70% を超えると自動で発動:末尾に約 20K トークンを階層的に残し、古い内容は LLM が一貫したサマリに圧縮して既存サマリと統合します。gob も更新されるため、再起動後も整合します。
タスク計画:Todo(逐次)vs Plan DAG(並列)
- Todo —— 多段階・逐次・文脈依存の作業(ゼロからのアプリ構築など):モデルが可視チェックリストに手順を並べ、一つずつチェックしながら自分で実行し、進捗をリアルタイムに見せます。
- CreatePlan(Plan DAG) —— 本当に並列で独立したファンアウト:DAG に分解し、依存順に並列サブエージェントを起動。各ノードが flash / pro を選び、最後に集約します。
CreatePlan
├─ plan-1: Read (flash) ─────┐
├─ plan-2: Read (flash) ─────┤
├─ plan-3: Grep (flash) ─────┤
└─ plan-4: Write (pro) ─────┘ depends_on: [1,2,3]
ローカル OCR(画像読み取りを補完)
画像を貼り付ける/パスを渡すと、LLM が OCR ツール(PaddleOCR PP-OCRv5)で文字を読み取ります。初回に OCR モデル(~37MB)と ONNX runtime をダウンロードし、以降は オフラインで数秒 で応答。マルチモーダル API なしでも、エラーのスクリーンショットや UI モックをエージェントに「見せる」ことができます。
シンボルグラフエンジンを内蔵し、リポジトリ全体の grep やファイルを一つずつ開く代わりに、モデルがシンボル単位のナビゲーション + 呼び出し関係クエリを直接実行できます。
op 早見表(12 個)
| op | 用途 | 必須 | 説明 |
|---|---|---|---|
def |
シンボルの定義位置 | name |
関数 / 型 / メソッド / 変数の定義箇所 |
refs |
シンボルの使用箇所 | name |
すべての参照(定義 + 呼び出し + 取得) |
symbols |
名前で曖昧検索 | name(任意), kind(任意) |
kind: func/method/type/var/const/field |
outline |
ファイル内のシンボル一覧 | path |
ファイルアウトライン |
imports |
ファイルの import 一覧 | path |
依存の概観 |
callers |
関数の呼び出し元 | name |
変更時の影響範囲、Go の暗黙インターフェースも網羅 |
callees |
関数が呼び出すもの | name |
内部フローの理解 |
implementers |
インターフェースの実装者 | name |
Go の暗黙インターフェースを シンボル精度 で。grep では不可 |
subtypes |
型を継承 / 埋め込むもの | name |
サブタイプ追跡 |
supertypes |
型の派生元 | name |
スーパータイプ / 埋め込みインターフェース |
impact |
変更が及ぼす下流 | name, depth(既定 3) |
推移閉包、影響範囲分析 |
reindex |
インデックス強制再構築 | — | キャッシュ異常時の手動トリガー |
対応言語:Go(stdlib の正確な解析)+ TypeScript / JavaScript / Python / Java / Rust / C / C++ / C# / Ruby / PHP / Kotlin / Swift / Scala / Dart / Vue / Svelte。
仕組み:起動時にバックグラウンドの Prewarm がインデックスを構築(loading → ready)。Write/Update で変更されたファイルは stale となり次回クエリで増分再構築。結果は ファイル:行(シグネチャ / 呼び出し元付き)で表示しページングされます。
| 種類 | ツール | plan | auto | review |
|---|---|---|---|---|
| 読み取り専用 | Read List Tree Glob Grep |
✓ | ✓ | ✓ |
| コードグラフ | CodeGraph |
✓ | ✓ | ✓ |
| ファイル書込 | Write Update |
✗ | ✓ | ⏳ |
| Shell | Bash |
✗ | ✓ | ⏳ |
| Web | Search Fetch |
✓ | ✓ | ✓ |
| メモリ | Memory |
✓ | ✓ | ✓ |
| Skill | LoadSkill |
✓ | ✓ | ✓ |
| 画像 | OCR |
✓ | ✓ | ✓ |
| 計画 | Todo CreatePlan |
LLM が呼び出し | ||
| 昇格 | SwitchModel |
LLM が呼び出し |
⏳ = 自動実行されるが人間の確認が必要。
| コマンド | 動作 |
|---|---|
/plan /auto /review |
モード切替(読み取り専用 / 自動 / レビュー) |
/model |
モデル選択ポップアップ(auto=タスク振り分け / flash / pro 固定);/model flash で直接指定も可 |
/reasoning |
thinking / reasoning_effort をロール毎(flash/pro)に設定するポップアップ;空 = 該当フィールドを送信しない(MiMo など非対応モデルに無影響) |
/compact |
セッションを手動圧縮 |
/lang |
UI 言語切替(中 / 英) |
/mcp-list /mcp-add /mcp-delete |
MCP サーバー管理 |
/skills /config /mode |
skill 一覧 / key 再設定 / モード表示 |
/help |
ヘルプ |
| モード | Write / Update / Bash | その他のツール | コマンド |
|---|---|---|---|
review(既定) |
人間が YES/NO 確認 | 自動実行 | /review |
auto |
自動実行 | 自動実行 | /auto |
plan |
無効 | 自動実行 | /plan |
ワークスペース <wd>/.deepx/skills/
グローバル ~/.agents/skills/ → ~/.claude/skills/ → ~/.deepx/skills/
- ワークスペース単位は
git addでチームに共有可能 - グローバルは Claude Code 互換 —— 既存の skill をそのまま再利用
データフローを展開
1 ターン:
ユーザー入力
↓
RouteByKeyword (ローカル) ─► flash または pro
↓
StartStream (メインループ)
├─ 直接回答
├─ ツール呼び出し → review が 書込/Shell をゲート → 実行 → 結果を戻す → 継続
├─ Todo → 可視チェックリスト(メインエージェントが一歩ずつ実行)
├─ SwitchModel → pro に昇格
└─ CreatePlan → DAG scheduler → 並列サブエージェント → 集約
永続化:
HistoryUpdateMsg → SaveGob (history.gob, 完全忠実)
StreamDoneMsg → Append JSONL (プレーンテキスト, Memory 検索)
再起動 → LoadGob (優先) / JSONL (フォールバック)
圧縮:
tokens ≥ ctxWindow × 70% → runCompression (非同期)
→ 末尾に ~20K トークンを保持 → LLM が新旧サマリを統合 → gob + state.json を更新
ディレクトリ構成
deepx/
├── main.go
├── agent/ StartStream ツールループ + ルーティング + DAG スケジューラ + サブエージェント
├── config/ ~/.deepx/model.yaml の読み書き
├── session/ gob 永続化 + JSONL ログ + 圧縮状態
├── tools/ 全ツール実装(読み書き / 検索 / OCR / Memory / Skill / Plan / CodeGraph)
├── codegraph/ コードグラフ:定義 / 呼び出し / 継承実装 / 影響範囲
├── skill/ 複数パスの skill 探索と読み込み
├── ocr/ PaddleOCR ラッパー(ONNX Runtime)
├── tui/ bubbletea TUI(入力 / 描画 / クリップボード / 選択 / ダッシュボード)
└── scripts/ インストールスクリプト
- ルーティングはトークンゼロ:純粋にローカルキーワード、LLM 呼び出しなし
- ツールを事前注入しない:
Memory/LoadSkillは呼び出し時のみ context に入る - system prompt は最小限:ツール横断の規約 + workspace のみ。トリガー条件は各ツールの description に
- DeepSeek の KV キャッシュに優しい:tools 配列はモード / ロールで変わらず、system prompt は gob 復元時にバージョン認識
- 盲目的検索よりコードグラフ:read / glob / grep のトークン浪費を根本から削減
# macOS / Linux
rm -f ~/.local/bin/deepx && rm -rf ~/.deepx
# Windows: %LOCALAPPDATA%\Programs\deepx と %USERPROFILE%\.deepx を削除MIT © 2026 itmisx
