DeepSeek v4.1 flash on OpenCode pretty good
DeepSeek v4.1 flash on OpenCode pretty good (github.com)
要約
shevは、メールやチケットなどのメッセージを処理し、JSON形式でアクション、信頼度、生成された返信を返すシンプルな意思決定ツールです。ローカル(Apple Silicon)またはDeepSeek API経由で実行でき、インストールも容易です。UIは簡潔で、プロンプトエンジニアリングや複雑な設定は不要です。
全文翻訳
shev
誇張なしのシンプルなJevライクな意思決定ツール。
メール、チケット、レビュー、ドキュメントなど、サポートキューから貼り付けたメッセージ全体を渡し、それに対して何をしたいかを伝えてください。JSON形式で単一の決定が返されます。
{
"actionable": "Samに返信し、未払いの3月請求書について経理をCCに入れる。",
"take_action": true,
"confidence": 95,
"generated_response": "Hi Sam, ... (返信内容)"
}
これだけです。エージェントなし。オーケストレーションなし。プロンプトエンジニアリングなし。覚えるべき500トークンの前置きもありません。メッセージ1つを入力すると、1つの決定が出力され、読みやすいファイル形式で提供されます。
- メッセージ全体を一度に判断。 メッセージを段落に分割したり、行ごとに処理したりしません。メッセージ1つ、決定1つです。
- あなたの意図が反映される。 回答する前に質問し、あなたが何をしたいかが返信の作成を主導します。
- 回答には構造がある。
actionable(文字列)、take_action(ブール値)、confidence(整数、常に[34, 100]の範囲)。推測する必要のあるタプルはありません。 - 希望すればMacで実行可能。 ネットワーク経由のDeepSeek、またはマシン上に配置された小さなTernary MLXモデルを使用できます。いつでも切り替え可能です。
- すべて記録されます。 決定は
responses.jsonにresponse1,response2, … として蓄積され、他のモデルがMCP経由で読み取ることができます。
インストール
コピー&ペースト可能な1行です。
curl -fsSL https://raw.githubusercontent.com/aditauqir/shev/main/install.sh | bash
その後、shev と入力してください。インストーラーは、可能な場合は既にPATHが通っているユーザーのbinディレクトリを使用します。それ以外の場合は、シェルプロファイルに小さく削除可能なPATHブロックを追加します。新しいターミナルを開いて shev と入力すれば、手動でのシェル編集は不要です。
npmを好みますか?
npm install -g @noorslvt/shev
shev
これにより、パッケージ @noorslvt/shev がインストールされ、ターミナルコマンド shev および shev-cli が利用可能になります。スコープなしのnpmレジストリ名 shev は無関係なプロジェクトに属しているため、このツールには npm install -g shev を使用しないでください。リポジトリから直接インストールすることもできます。
npm install -g git+https://github.com/aditauqir/shev.git
どちらのインストーラーも、一致するプリビルドリリースを優先し、それ以外の場合はRustでビルドします(必要に応じて最小限のRustツールチェーンをインストールします)。npmはバイナリを取得またはビルドする postinstall ステップを実行します。macOS/Linuxはnpmランチャーでサポートされており、WindowsユーザーはWSLを使用できます。
最近のnpmリリースではインストールスクリプトが制限されています。インストールがスキップされた場合、shev が実行すべきことを指示します。事前に修正することもできます。
# npmがインストールスクリプトをブロックした場合:
npm approve-scripts @noorslvt/shev # または:
npm rebuild -g @noorslvt/shev --foreground-scripts
Rustが既にインストールされている場合:同じくらい簡単です。
cargo install --git https://github.com/aditauqir/shev
アンインストール
curlまたはnpmでインストールした場合でも、完全にクリーンアップするには、まず他の実行中のshevセッションを閉じます。
shev --uninstall --dry-run # パスをプレビュー; 何も削除しません
shev --uninstall # 削除前に確認
# または: shev --uninstall --yes
これにより、登録されたshevバイナリ、保存されたキー/設定、ローカルモデルデータ、追跡されたチャット記録、変更されていない追跡されたshev MCP登録、およびインストーラーによって追加されたPATHブロックが削除されます。npmベースの完全なアンインストールでは、npmのパッケージ削除も実行されます。変更されたバイナリ/プロファイルブロック、外部で管理されているウェイト、ホストリカバリバックアップ、無関係なホスト設定、エクスポートファイル内のチャット以外のメタデータ、ソースチェックアウト、共有ツール/キャッシュ(Rust、Node、uv、Codex、OpenCode)は削除されません。
npmパッケージを直接削除することもできます。
npm uninstall -g @noorslvt/shev
これにより、npmパッケージとそのバイナリが削除されます。最新のnpmはアンインストールフックを実行しないため、永続的な設定/モデル/履歴や外部MCP登録を削除することはできません。 完全なクリーンアップには shev --uninstall を使用してください。これもnpmパッケージの削除を処理します。永続的なnpmデータは意図的にパッケージの外に配置されているため、通常のnpmアップグレードで秘密鍵、履歴、またはモデルのダウンロードが消去されることはありません。バックグラウンドのアンインストールウォッチャーやnpmオーバーライドはインストールされません。
必要なもの
- ローカル使用に最適: Apple Silicon — M1以降、RAM 16 GB以上。
- 8 GB でもローカルモデルは動作しますが、かなりタイトです。
- その他すべて: DeepSeek APIキーがあればどこでも動作します。Macは不要です。
ローカルモデルはMacのみを対象としています。MLX上で動作し、MLXはApple Silicon専用であるため、「マシン上で実行する」とは「Mac上で実行する」ことを意味します。shevをDeepSeekキーに向けると、処理はネットワーク経由で行われます。その後、Rustが動作するあらゆるプラットフォームでビルドおよび実行できます。
クイックスタート
shev
- Bonsaiがデフォルトです。必要に応じて
/modelからインストールしてください。APIキーは不要です。DeepSeekは/model経由でオプションです。キーは~/.config/shev/config.jsonに0600として保存されます。 - メッセージ全体を入力または貼り付けます。Enter で送信、Ctrl+J で複数行メッセージの中間に行を挿入します。
- メッセージに対して何をしたいかを伝えます。「短い返信を作成して」「今日私が必要なものか」「リスクはどこにあるか」など。
- 決定を読みます。Enter で次の決定を開始するか、
▸ open responses.json in Finderをクリックしてファイルを確認します。
初回実行後は、shev を実行し、入力し、完了するだけです。
TUI
ホーム/スタート画面には、背景ボックスやJSONペインなしで、壁紙の上に白いASCIIワードマークが表示されます。チャットが開始されると、2つのウィンドウが表示されます。
- 左側、モデルの出力。 各決定はクリーンなフィールドリストとして表示されます。プロンプトボックスは一番下にあり、モードライン(「Build · bonsai (local) · …」)が最後の行に表示されます。
- 右側、現在のターンのみのJSON。 現在の決定の生のレコードが表示されるため、画面を離れることなくファイルを読むことができます。JSONテキストをドラッグして選択します。マウスを離すと選択した部分が正確にコピーされ、画面上部中央に ✓ copied to clipboard と表示されます。マウスホイールでJSONを独立してスクロールできます。
/copy jsonは、画面外のテキストを含む完全なレコードをコピーします。
テキストパネルは、薄暗い写真の壁紙の上に #0F0E08 を使用しています。コマンドには / を入力します。パネルはターミナルの端からインセットされています。スキル/ツールメニューには名前のみが表示され、長いメニューは選択された行の周りをスクロールし、画面外にクリップしません。
| コマンド | 説明 |
|---|---|
/file <path> | ファイルからメッセージをロードします(ドラッグ&ドロップも可能) |
/copy [json] | 選択したJSONまたは最後の応答をコピーします。json は完全なレコードをコピーします |
/key | DeepSeek APIキーを入力または置き換えます |
/cancel | 実行中のリクエストを中止します |
/clear | 表示されているチャットと入力をクリアします。保存された履歴は保持します |
/reset | チャット、保存されたすべての履歴、ロードされたコンテキスト、カウンターをクリアすることを確認します。キー/モデルは保持します |
/help | キーバインドを表示します |
/model | モデルを選択し、管理します(キー、インストール、アンインストール) |
/home | ホーム画面に戻ります(トランスクリプトは保持されます) |
/history | これまでの決定をたどります |
/mcp | ローカルMCPブリッジをインストール、削除、または報告します |
/skills | 既存のスキルガイダンスをロードします。/skills off はサポートコンテキストをクリアします |
/tools [server] | 登録されたMCPサーバーに接続し、読み取り専用ツールを検査します |
/tool server/tool <JSON> | 読み取り専用ツールを呼び出し、その結果を次の決定にアタッチします |
/plugins | ホストプラグインの互換性制限を表示します |
/quit | 終了します |
便利なキー:
| キー | 説明 |
|---|---|
Enter | メッセージを送信し、次に意図を送信します |
Ctrl+J | ボックス内で改行します |
Ctrl+T | モデルを切り替えます(DeepSeek ↔ Bonsai) |
Ctrl+H | 履歴を開きます(/history と同じ) |
履歴で Ctrl+D | 保存されたエントリのみの削除を確認します |
Ctrl+Y | 選択したJSON、または最後の生成された応答をコピーします |
Ctrl+C | 終了します |
/clear は新しいチャットビューを開始します。/history は保持されたレコードを再オープンできます。/reset および履歴削除は、確認メニューでデフォルトで キャンセル になります。確認された変更は応答ファイルに更新されるため、MCPクライアントもそれらを確認できます。
モデル
/model は2つのバックエンドを切り替え、それぞれを管理します。
DeepSeek — 2番目の明示的に選択されたリモートオプション。APIキーが必要です。オプション:新しいキーを入力、保存されたキーを削除、またはキャンセル。
Bonsai (デフォルト) — prism-ml/Ternary-Bonsai-2-2B-mlx-2bit。MLXを介してApple Siliconで動作する小さなTernaryモデル。オプション:インターネットからインストール(約1.2 GB、~/.local/share/shev/models に保存)またはアンインストール。
Bonsaiパックは独自のローダーを同梱しています。なぜなら、そのウェイトは標準の mlx-lm/mlx-vlm ではロードできない(Unsupported model type: prism_hadamard_qwen35 と報告される)からです。そのため、shevはパックにバンドルされたランタイムを常駐ワーカーで実行し、パックの固定要件を持つ uv を使用します。同じセッションでの繰り返しリクエストはロードされたモデルを再利用します。ワンショットローダーはフォールバックとして残ります。ポートをリッスンするものは何もありません。最初のリクエストはMLXスタックを uv 環境にインストールします。これには数分かかる場合があります。
出力ヘッド実験
このパックは、出力を language_model.model.embed_tokens.as_linear に結び付けており、独立した language_model.lm_head はありません。ネイティブの2ビット動作には、パックのHadamard変換が必要です。bits パラメータを変更するだけでは、有効な変換にはなりません。
tools/bench-bonsai-head.py は、ネイティブ2ビットと正しく再パックされた4ビット出力ヘッドをメモリ内で比較し、入力埋め込みとインストールされたファイルは変更しません。パックの runtime/requirements.txt を使用して実行します。ローカルのshevリクエストが ~/.local/share/shev/models/shev_bonsai_worker.py を作成した後で実行します。
uv run --python 3.12 --with-requirements \
~/.local/share/shev/models/Ternary-Bonsai-2-2B-mlx-2bit/runtime/requirements.txt \
python tools/bench-bonsai-head.py
現在の決定論的なプロンプトでは、1回のローカル実行でネイティブ2ビットは1.55 ms/head、669 ms/decisionを測定しました。一方、再パックされた4ビットは2.29 ms/head、734 ms/decisionでした。どちらも小さなスモークテストで6/6のアクションラベルをスコアしました。以前のプロンプト/サンプリングベースラインは3/6でした。これは一般的な精度を示すものではなく、改善は再パックではなく、プロンプト/サンプリングの変更によるものです。再パックでは、2ビットチェックポイントで既に失われた精度を回復することはできません。したがって、ネイティブ2ビットがデフォルトのままです。ハードウェア、プロンプト、出力長はこれらのタイミングに影響します。既存の明示的なプロバイダー選択は保持されます。
MCP
shevのMCPサーバーにより、他のアシスタントが保存された決定を読み取ることができます。Bonsai/DeepSeekを実行したり、ファイルを編集したりするものではありません。APIキー、OAuthログイン、ターミナル、ネットワークポート、または個別に起動されたTUIは必要ありません。MCPホストはshevをサブプロセスとして起動し、stdin/stdout経由でJSON-RPCで通信します。
1. 履歴ファイルを選択
少なくとも1つの決定を明示的なファイルパスで保存します。例:
shev --file "$HOME/shev-responses.json"
そのTUI内で /mcp install (または /mcp → install)を実行します。これにより、~/.config/shev/mcp/ の下にディスクリプタが書き込まれ、実行可能ファイルと絶対履歴パスが既存のグローバルOpenCode設定に登録され、プライベートバックアップが作成されます。/mcp status は登録を報告し、/mcp uninstall はshev自身の変更されていない登録を削除します。決定は削除されません。
2. OpenCodeまたはCodexを接続
OpenCodeの場合、インストール後に shev を /mcps から再接続するか、クライアントを再起動します。または、シェルから明示的に登録します(ソースからビルドした場合は実行可能パスを置き換えてください)。
opencode mcp add shev --global -- "$HOME/.local/bin/shev" --mcp --file "$HOME/shev-responses.json"
opencode mcp list
同等のOpenCode V2設定は次のとおりです。
{
"mcp": {
"servers": {
"shev": {
"type": "local",
"command": ["/absolute/path/to/shev", "--mcp", "--file", "/absolute/path/to/responses.json"],
"enabled": true
}
}
}
}
Codexの場合、これを ~/.codex/config.toml(またはお使いの CODEX_HOME 設定)に追加し、パスを置き換えてからCodexを再起動し、codex mcp list を確認してください。
[mcp_servers.shev]
command = "/absolute/path/to/shev"
args = ["--mcp", "--file", "/absolute/path/to/responses.json"]
shev --mcp と shev-cli --mcp の両方が機能します。ソースビルドの場合、cargo build --release の後に /absolute/path/to/repository/target/release/shev を使用してください。JSON/TOMLコマンド配列内に $(pwd) のようなシェル式を入れないでください。
3. ホストアシスタントにshevの使用を依頼
OpenCode/Codexでのプロンプト例:
- 「shevの
latest_decisionツールを使用して、私の最新の決定を要約してください。」 - 「shevの
search_decisionsをクエリinvoiceと制限10で使用してください。」 - 「shevの
get_decisionツールを使用してresponse2を読み取ってください。」
| ツール | 例示引数 | 結果 |
|---|---|---|
list_decisions | {"limit": 20} | 最新のレコード、古いものから順に |
latest_decision | {} | 最新の保存されたレコード |
get_decision | {"key": "response2"} または {"index": 2} | 保存されたレコード1件 |
search_decisions | {"query": "invoice", "limit": 10} | マッチした保存済み決定 |
リソースは shev://decisions(全レコード)と shev://decisions/latest(最新レコード)です。読み取りはファイルを毎回新しく参照するため、開いているTUIによって保存された決定は、MCPプロセスの再起動なしで利用可能になります。
トラブルシューティング: unknown option --mcp は、ホストが古いTUIバイナリを起動していることを意味します。MCPコマンド内の正確な実行可能ファイルを更新/再ビルドし、shevを再接続してください。現在のリリースでは、ターミナルセットアップの前に --mcp がディスパッチされます。接続に成功しても決定が表示されない場合は、ホストとTUIが同じ絶対履歴パスを使用しているか確認してください。shev --mcp を手動で起動すると、プロトコルの入力を静かに待ちます。これは正常であり、フリーズしたチャットウィンドウではありません。
既存のスキルとツールの再利用
/skills は、Codex、Claude、共有 ~/.agents/skills、~/skills、OpenCodeのXDG設定ディレクトリ、および親プロジェクトの .opencode、.agents、.codex スキルフォルダ、さらにOpenCodeで設定されたローカルスキルディレクトリから既存の SKILL.md ファイルを読み取ります。ガイダンスをメモリにロードするだけで、スキルスクリプトのインストール、編集、実行は行いません。
/tools は、Codexの config.toml およびOpenCodeのグローバル/プロジェクトJSONまたはJSONC(V2 mcp.servers を含む)からのMCP登録を読み取ります。CODEX_HOME および XDG_CONFIG_HOME が尊重されます。サーバーを選択すると接続され、ツールがリスト表示されます。ツールを選択すると、その引数スキーマが表示され、/tool server/tool {} が準備されます。引数を編集してからEnterキーを押すと呼び出されます。成功した結果は、次の決定のための参照コンテキストになります。/skills off はそれらをアンロードします。サポートコンテキストは、履歴内のユーザーの元の意図を置き換えるものではありません。
readOnlyHint: true を持ち、destructiveHint: true を持たないツールのみが呼び出されます。不明な/変更を伴うツールは、サイレントに承認されずにブロックされます。MCPアノテーションは信頼できるサーバーからの宣言であり、セキュリティサンドボックスではありません。信頼できるサーバーのみを使用してください。設定されたサーバーを起動すると、その起動コードが実行される場合があります。呼び出しには時間/出力制限があり、サンプリングや承認を要求することはできません。Stdioおよびストリーム可能なHTTP(JSON/SSE)がサポートされています。設定されたヘッダーと環境ベースのトークンはログに記録されずに再利用されます。ホスト管理のOAuth認証情報はコピーされません。OAuth専用サーバーは、成功を主張するのではなく、認証要件を報告します。
右ペインの上部には、ロードされたスキルまたは正常に呼び出されたツールの名前とそのソースが表示されます。統合IDも決定とともに保存されます。サーバーの検出/選択だけでは、成功したツール呼び出しとして報告されません。
OpenCodeの設定済みJavaScriptプラグインは、互換性に関する通知とともにリスト表示されます。ホスト固有のプラグインはshevでネイティブに実行できません。それらはホストランタイムを必要とします。MCPインターフェース(登録されている場合)は、/tools 経由で使用できます。shevは、検出またはツール使用中にホスト構成を書き換えることはありません。明示的な /mcp install は別であり、登録前に構成をバックアップします。
CLI
TUIはフレンドリーな入り口です。ラインCLIは shev-cli で、パイプ処理を想定しています。
echo "Your invoice is 30 days overdue." | shev-cli -i "draft a polite reminder"
shev-cli "Should I ship this today?" -i "answer yes or no and why"
shev-cli --mcp # MCP経由で決定をstdioで提供
| オプション | 説明 |
|---|---|
-c, --once <message> | メッセージを1つ評価して終了 |
-i, --intent <text> | それに対して何をしたいか |
-f, --file <path> | 決定が追記される場所(デフォルト responses.json) |
--mcp | 記録された決定をMCP経由で提供(stdio) |
便利な環境変数:
| 変数 | 説明 |
|---|---|
DEEPSEEK_API_KEY | 保存されたキーの代わりにこのキーを使用 |
SHEV_RESPONSES_FILE | 決定が追記される場所 |
SHEV_INTENT | 非対話型実行のデフォルトの意図 |
SHEV_MODELS_DIR | ローカルモデルの場所 |
SHEV_HOME | 管理対象のnpm状態ルート(npmランチャーによって自動設定) |
SHEV_BONSAI_MAX_TOKENS | ローカルワーカーのトークンキャップ(デフォルト 256、コールドフォールバック 2048) |
SHEV_BONSAI_STREAM | 1 はワーカーのトークンデルタプロトコルメッセージを有効にします |
SHEV_BONSAI_TEMPERATURE | ローカルサンプリング温度(デフォルト 0、決定論的) |
フッターにはトークン使用量と最後の決定の経過ミリ秒が表示されます。常駐ワーカーは実際のローカルトークン数を報告します。コールドフォールバックは使用メタデータがなく、推測する代わりにゼロを報告します。簡潔な要約と生成された応答は、JSONとともに表示されます。測定されたウォーム実行は約750 msかかりましたが、初期モデルロードを含む場合は2500 msでした。これはJevの100 ms未満のレイテンシを主張するものではありません。不正な形式のローカル決定は、最大2回のフォーマット修正リトライを受けます。使用量にはこれらの試行が含まれます。リトライはレイテンシを追加する可能性があり、無効なJSONをサイレントに記録するのではなく、失敗する可能性があります。
ファイルの場所
| パス | 内容 |
|---|---|
~/.config/shev/config.json | APIキーと選択されたモデル(0600) |
responses.json | 決定(response1, response2, … として追記) |
~/.local/share/shev/models/ | ダウンロードされたローカルモデル |
~/.config/shev/install.json | インストーラー所有のバイナリ/PATHブロックと、スコープ付きクリーンアップ用の履歴パス |
npmランチャーは、上記のパスの代わりに ~/.local/share/shev-npm/state/(または $XDG_DATA_HOME/shev-npm/state/)の下に設定、デフォルト履歴、モデルを分離します。このデータはnpmアップグレード後も保持されます。シェルおよびMCP統合は、資格情報をコピーせずに既存のホスト構成を読み取ります。明示的な --file/SHEV_RESPONSES_FILE パスは、選択した場所に留まり、明示的な shev --uninstall クリーンアップのために追跡されます。
ライセンス
Apache-2.0。LICENSE を参照してください。