Magnitude
magnitudedev/magnitude — 推論エンジンを内蔵し、ローカルモデルだけで完結するオープンソース・エージェント
Magnitude はターミナルで動くコーディング/作業エージェントです。特徴は、エージェント本体だけでなく 推論エンジンそのものを同梱している点にあります。モデルはあなたのマシン上で動き、プロンプトもファイルも外部 API に送られません。API キー、トークン課金、レート制限がありません。
公式ドキュメントの表現を借りると、「今日のエージェントはローカルにあるが、モデルはそうではない」という問題意識から出発しています。Magnitude はスタック全体を自前で持つことで、モデルの選定・ダウンロード・メモリ配置・実行までを 1 つのアプリケーションの中で完結させます。
標準状態でシェルの実行、ファイルの編集、スクリプトの実行ができます。README では次のような日常業務が例に挙げられています。
- 外部に出したくないデータの分析
- プライベートなノートの管理
- コードやログのレビュー
- ファイルの検索と整理
- ドキュメントやスライドの作成
- 自動化スクリプトの作成
対応プラットフォームは macOS と Linux です。Windows では WSL 経由で利用します。
CLI をグローバルにインストールし、作業したいディレクトリで magnitude を実行します。npm 以外に bun / pnpm / yarn でも導入できます。
npm install -g @magnitudedev/cli
cd your-project
magnitude
wsl --install の後、WSL 内で同じ手順を実行します。
Exa の API キーを環境変数に設定してから起動すると、エージェントが Web 検索を使えるようになります。
export EXA_API_KEY="your-api-key"
magnitude
推論ランタイムは llama.cpp の上に Rust で書かれた自前エンジンで、アプリケーションの一部として同梱されます。別途モデルサーバーを立てたりランタイムを設定したりする必要はありません。モデルの起動・ロード・保持・停止という一連のライフサイクルを Magnitude が握っている点が、外部サーバーを呼ぶ構成との最大の違いです。
ドキュメントでは「ダウンロード済み」と「ロード済み」を明確に区別しています。状態は /settings → Hardware から確認し、手動でロード・停止することもできます。
| 状態 | 意味 |
|---|---|
| Downloaded | モデルファイルがディスク上に保存されている |
| Loading | モデルと実行時データをメモリへ配置している最中 |
| Running | 応答できる状態になっている |
| Unloaded | 選択もダウンロードもされているが、推論用メモリは使っていない |
しばらく使われないモデルは自動的にアンロードされますが、ファイルが削除されるわけではありません。
- アクセラレーション・配置・コンテキスト・メモリ: その時点のマシンに合わせて設定されます。ロード直前にもう一度メモリを確認するため、普段は収まる設定でも他のアプリがメモリを使いすぎていれば起動しません。
- コンテキストと並列度: リクエストごとに設定されたコンテキストを維持したうえで、マシンに余力があるときだけ同時実行に追加のメモリを使います。余力がない場合はコンテキストを黙って削るのではなく、同時実行数を減らします。
- キャッシュの再利用: 長い会話では、実行中のモデルが既に処理した一致部分を再利用し、新しい入力だけを処理します。
- メモリ保護: ロード中・実行中は継続的にメモリを監視し、危険な水準まで空きが減るとマシンが不安定になる前にモデルを停止します。停止後もモデルの選択は保持され、
/settingsから再ロードできます。
ハードウェアプロファイルとキュレーション済みのモデルデータを組み合わせ、そのマシン向けの少数の構成を提示します。1 件の推薦は「モデル・量子化・コンテキストサイズ」の具体的な組み合わせです。
| 推薦 | 優先するもの |
|---|---|
| Balanced | 能力・速度・メモリ使用量の総合バランス |
| Best Quality | モデルの能力や忠実度 |
| Fastest | 応答速度 |
| Lightweight | メモリとディスクの使用量を抑えること |
評価にはエージェントとしての能力、推定速度、コンテキスト、実行時メモリ、ダウンロードサイズ、量子化による品質の保持率が使われます。速度は ~36–48 tok/s のような範囲で表示され、実際の値はプロンプト長や他の負荷で変動します。
推薦はあくまで短いリストで、カタログにはそのマシンで評価対象になる完全なキュレーション済みセットが並びます。/settings から catalog を開くと、推薦度・メモリ・知能・量子化品質・速度・コンテキスト・ライセンスを比較できます。
- Magnitude が管理するモデルは
~/.magnitude/modelsに保存されます。 - Hugging Face Hub のキャッシュも走査し、互換性のある GGUF モデルを取り込みます。
- キャッシュ位置は
HF_HUB_CACHE→HUGGINGFACE_HUB_CACHE→HF_HOME→XDG_CACHE_HOMEの順に確認し、いずれも無ければ~/.cache/huggingface/hubを見ます。
カタログ外のモデルを使う
カタログに無い GGUF モデルも、Hugging Face CLI で正規のキャッシュへ配置すれば利用できます。任意のディレクトリではなくキャッシュに置くのがポイントです。
hf download <owner>/<repository> --include "<model-and-quantization>*.gguf"
ダウンロードは一致するファイル(選択したセットの全シャードを含む)をすべて取得します。完了後に Magnitude を再起動すると、モデル一覧が更新されます。
スキルはエージェントに追加できる再利用可能な機能です。Magnitude を使うディレクトリで npx skills add を実行します。プロジェクト単位でも、グローバルでも導入できます。README が推奨しているものは次のとおりです。
npx skills add vercel-labs/agent-browser # ログイン済み Chrome を操作する
npx skills add anthropics/skills/xlsx # Excel の読み書き
npx skills add anthropics/skills/pptx # PowerPoint の作成
npx skills add anthropics/skills/docx # Word の読み書き
npx skills add anthropics/skills/pdf # PDF の読み取り・入力・作成
導入したスキルはスラッシュコマンドのメニューに現れます。/ を入力して一覧から選ぶか、スキルの説明に合う作業を依頼すると、Magnitude がその指示を読み込んで実行します。現在のセッションに出てこない場合は、新しいセッションを開始してください。
グローバルスキルは以下から読み込まれます。
~/.claude/skills
~/.agents/skills
~/.magnitude/skills
加えて、カレントディレクトリ内の .claude/skills / .agents/skills / .magnitude/skills も読み込まれます。同名の場合はカレントディレクトリ側が優先されます。
Bun ワークスペースのモノレポで、cli / desktop / web / inference / packages/* が並びます。AGENTS.md は依存方向を次のように定めています。
クライアントは client-common と sdk だけを import し、acn / agent / acn-protocol / ai / providers を直接参照しません。クライアントに新しい機能が必要な場合は、acn-protocol に RPC を追加し、acn にハンドラを実装します。SDK 側は自動的にそれを公開します。
| パッケージ | 役割 |
|---|---|
client-common | 共有ステート、フック、表示同期。AgentClient を利用する |
sdk | 型付き RPC クライアント、デーモンのライフサイクル、バイナリ解決 |
acn | エージェントランタイム・セッション・ファイル操作・表示ストリームをホストするデーモン |
acn-protocol | SDK と ACN が共有するワイヤ契約(RPC とスキーマ) |
ai | プロバイダ非依存の契約(Provider, ModelCatalog, BoundModel など) |
providers | 具体的なプロバイダ実装とレジストリ |
agent | エージェントランタイム、プロジェクション、ワーカー、ツール、表示のマテリアライズ |
event-core | イベントソーシング、プロジェクション、アドレス付きステート |
icn / icn-protocol | 推論エンジンのライフサイクルと OpenAPI 由来の型 |
storage | セッション・設定・認証の永続化 |
roles | ワーカー特化のためのロール/スロット定義 |
| ディレクトリ | 位置づけ |
|---|---|
design/ | アーキテクチャと挙動の恒久的なソース・オブ・トゥルース。bun design-docs で該当文書を引ける |
info/ | 人間と LLM 向けの簡潔な高レベル文書。壊れやすいファイル名やコード片に依存しない記述を保つ |
docs/ | 公開ドキュメントサイトのソース(Get Started、Models、Skills、Reference など) |
inference/ | Rust の推論クレート、カタログ、ベンチマーク、パリティ検証 |
- Effect-TS ネイティブ: 新規コードは Effect-TS で書き、Effect に触れる TypeScript コードは effectful なまま保ちます。逆方向(脱 Effect 化)は行いません。
- DI はサービスに分割: サービスは同名のインターフェイスを持つ
Context.Tagとして定義します。 - シリアライズ対象は Effect Schema: 任意値は
Schema.optionalWith(..., { as: 'Option', exact: true })を使い、undefinedを持ち込まないようにします。 - ブランド型: ID など意味を持つ文字列には Effect のブランド型を使います。
- 不要な後方互換を作らない: 明示的に求められない限り、レガシー互換のシムは残しません。
event-core は Effect ベースのイベントソーシング基盤です。永続化される「イベント」と、プロジェクションからのみ発生する揮発的な「シグナル」を明確に分けています。
| 観点 | Events | Signals |
|---|---|---|
| 永続化 | EventSink に保存される | 保存されない |
| リプレイ | ハイドレーション時に再生される | 再生されない |
| 発生元 | ワーカー(非同期)、外部 | プロジェクションのみ(同期) |
| 意味 | 起きた事実 | 派生した通知 |
プロジェクションはステートフルかつ同期で、イベントを発行できませんがシグナルを出せます。ワーカーはステートレスで非同期に fork され、イベントを発行できますがハイドレーション中は動きません。
表示(Display)はイベントソースドなセッション状態に対する、ウィンドウ付きのランタイムビューとして設計されています。クライアントは表示の意図を持ち、エージェントは受理された表示の真実を持ちます。
- Requested shape — クライアントの表示意図(選択中のセッション、表示するワーカースタック、タイムラインのウィンドウなど)から導かれる要求。
- Accepted shape — 要求のうち、その時点のプロジェクション状態で解決できる部分だけを含むエージェント側の答え。
- Accepted snapshot —
{ shape, state }。UI が描画するのは要求ではなくこのスナップショットです。
形状の書き込み経路が 1 本で、受理された真実の所有者も 1 つ、常駐管理は UI キャッシュではなく event-core が担当するため、競合が起きにくい構造になっています。DisplayViewRuntime はランタイム状態であり、プロジェクションでもイベントログでもありません。
過去のセッションは ~/.magnitude/sessions/ に UTC タイムスタンプのフォルダ名で保存され、bun session で検査できます。イベントは 0 始まりのインデックスを持ち、出力は JSON なので jq に流せます。
bun session list # 直近のセッション一覧
bun session events <id> # 全イベントを index / type / timestamp で列挙
bun session event <id> <index> # 1 イベントのペイロードを JSON で表示
bun session search <keyword> <id> # ペイロードをキーワード検索
bun session projection <id> Window # イベントを再生して指定プロジェクションを出力
利用できるプロジェクションは Window、Fork、TaskGraph、Turn、Display、Compaction、WorkingState、SessionContext、Proposal、AgentRegistry、Artifact、ChatTitle、Replay などです。
| コマンド | 別名 | 内容 |
|---|---|---|
/new | — | 新しい会話を開始する |
/resume | — | 最近の会話を開く |
/models | — | 準備済みのモデルを選ぶ |
/catalog | — | ローカルモデルを探してダウンロードする |
/hardware | — | ローカル推論のハードウェアを確認する |
/settings | /s | モデル設定を開く |
/bash | — | bash モードに入る |
/init | — | プロジェクト用の AGENTS.md を生成する |
/transcript | — | トランスクリプト表示を切り替える |
/exit | /quit, /q | Magnitude を終了する |
/ を入力すると補完付きで一覧が出ます。導入したスキルも同じメニューにコマンドを追加できます。
| キー | 動作 |
|---|---|
Enter / Shift+Enter | 送信・確定 / 改行の挿入 |
Ctrl+T | 推論レベルのセレクタを開く(もう一度押すと選択肢を移動) |
Ctrl+R | 最近の会話を開閉する |
Esc | 開いているメニューを閉じる、または実行中の作業を中断する |
Ctrl+C | 入力欄をクリア(空でアイドル時は終了) |
Ctrl+A / Ctrl+E | 行頭 / 行末へ移動 |
Ctrl+U / Ctrl+K | カーソルより前 / 後を削除 |
Ctrl+W / Ctrl+D | 前の単語 / 次の単語を削除 |
Ctrl+Y | 最後に削除したテキストを復元 |
入力欄で @ を打つとファイルやディレクトリを参照でき、その内容がコンテキストに含まれます。画像は貼り付けやドラッグで渡せます。長いテキストの貼り付けは入力欄を埋め尽くさず、ペーストセグメントに畳まれます。! で始めるとシェルコマンドを直接実行できます。
| パス | 用途 |
|---|---|
~/.magnitude/models/ | Magnitude が管理するローカルモデル |
~/.magnitude/cache/ | モデルのメタデータ、プロファイリング結果などの破棄可能なキャッシュ |
~/.magnitude/sessions/ | 会話履歴 |
~/.magnitude/logs/ | アプリケーションログ |
~/.magnitude/traces/ | トレース有効時のローカルトレースデータ |
~/.magnitude/config.json | ユーザー設定とモデル選択 |
~/.magnitude/cache を消すとハードウェアのプロファイリングとモデル評価がやり直しになりますが、ダウンロード済みモデルは消えません。モデルは ~/.magnitude/models に分けて保存されています。
環境変数は EXA_API_KEY(Web 検索)のほか、HF_HUB_CACHE、HUGGINGFACE_HUB_CACHE、HF_HOME、XDG_CACHE_HOME が Hugging Face キャッシュの探索に使われます。会話がモデルのコンテキストに収まらなくなると、古い部分を要約に圧縮してセッションを継続します。
- GitHub: magnitudedev/magnitude — 本体リポジトリ(TypeScript / Rust モノレポ)
- Magnitude Documentation — 公式ドキュメント
- CLI Reference — コマンド・ショートカット・環境変数
- skills.sh — Vercel によるスキルディレクトリ
- Exa — Web 検索を有効にするための API
- Apache License 2.0 — ライセンス
README.md、AGENTS.md、docs/ 配下のドキュメント(why-magnitude、get-started、inference-engine、models、skills、reference)、および info/・packages/event-core/ARCHITECTURE.md の記述をもとに構成しています。