|
| 1 | +[English](README.md) | [中文](README.zh.md) | **日本語** |
| 2 | + |
| 3 | +# Obsidian LLM Wiki |
| 4 | + |
| 5 | +[](https://github.com/2233admin/obsidian-llm-wiki/actions/workflows/ci.yml) [](LICENSE) [](package.json) [](kb_meta.py) |
| 6 | + |
| 7 | +**AIがあなたのObsidianノートを読み、検索し、それらの上に構築できるようにします。** |
| 8 | + |
| 9 | +[KarpathyのLLM Wiki](https://www.youtube.com/watch?v=zisonDtp3GQ)にインスピレーションを受けています。でも、今すぐインストールできます。 |
| 10 | + |
| 11 | +``` |
| 12 | + .obsidian/vault/ MCP stdio Claude Code |
| 13 | + +-----------------+ +----------+ +-----------+ |
| 14 | + | notes/ | <--> | connector| <----> | agent | |
| 15 | + | daily/ | | .js | | | |
| 16 | + | projects/ | WS +----------+ +-----------+ |
| 17 | + | [[wikilinks]] | <--> Obsidian Cursor |
| 18 | + +-----------------+ Plugin Windsurf |
| 19 | +``` |
| 20 | + |
| 21 | +``` |
| 22 | +あなた: 「先月分散コンセンサスについて書いたことは?」 |
| 23 | +Claude: *あなたのボルトを検索し、3つのノートを読み、[[バックリンク]]で答えを合成する* |
| 24 | +``` |
| 25 | + |
| 26 | +Vault BridgeはあなたのObsidianボルトをMCPサーバーに変えます。任意のAIエージェント(Claude Code、Cursor、Windsurf)が接続できます。読み書き、検索、知識をコンパイル — あなたのノートを真実の源として使用します。 |
| 27 | + |
| 28 | +--- |
| 29 | + |
| 30 | +## クイックスタート |
| 31 | + |
| 32 | +```bash |
| 33 | +git clone https://github.com/2233admin/obsidian-llm-wiki.git |
| 34 | +cd obsidian-llm-wiki && npm install && npm run build |
| 35 | +node setup.js |
| 36 | +``` |
| 37 | + |
| 38 | +`setup.js`は自動的にあなたのObsidianボルトを検出し、プラグインをインストールし、Claude CodeのMCPを設定します — すべて一度に。その後、Claudeに質問します: |
| 39 | + |
| 40 | +``` |
| 41 | +「私のノートからReact Server Componentsについて検索して」 |
| 42 | +``` |
| 43 | + |
| 44 | +それだけです。 |
| 45 | + |
| 46 | +<details> |
| 47 | +<summary>手動インストール(setup.jsが機能しない場合)</summary> |
| 48 | + |
| 49 | +### 1. プラグインをインストール |
| 50 | + |
| 51 | +`main.js`、`manifest.json`、`styles.css`をボルトの`.obsidian/plugins/vault-bridge/`にコピーし、Obsidian Settings > Community Pluginsで有効にします。 |
| 52 | + |
| 53 | +### 2. エージェントを接続 |
| 54 | + |
| 55 | +`~/.claude/settings.json`(または`.cursor/mcp.json`)に追加します: |
| 56 | + |
| 57 | +```json |
| 58 | +{ |
| 59 | + "mcpServers": { |
| 60 | + "vault-bridge": { |
| 61 | + "command": "node", |
| 62 | + "args": ["/path/to/obsidian-llm-wiki/connector.js", "/path/to/your/vault"] |
| 63 | + } |
| 64 | + } |
| 65 | +} |
| 66 | +``` |
| 67 | + |
| 68 | +### 3. 確認 |
| 69 | + |
| 70 | +```bash |
| 71 | +node demo.js |
| 72 | +``` |
| 73 | + |
| 74 | +</details> |
| 75 | + |
| 76 | +--- |
| 77 | + |
| 78 | +## エージェントは何ができるのか? |
| 79 | + |
| 80 | +| 機能 | 例 | |
| 81 | +|-----------|---------| |
| 82 | +| **任意のノートを読む** | 「my notes/architecture-decisions.mdを読んで」 | |
| 83 | +| **全文検索** | 「'auth middleware'を言及しているすべてのノートを見つけて」 | |
| 84 | +| **タグで検索** | 「#project-xでタグ付けされたノートを表示して」 | |
| 85 | +| **フロントマターをクエリ** | 「status が'in-progress'のノートをリストして」 | |
| 86 | +| **グラフをたどる** | 「[[API Design]]にリンクしているノートは何ですか?」 | |
| 87 | +| **ノートを作成** | 「このPRの要約をボルトに作成して」 | |
| 88 | +| **ノートを編集** | 「今日のスタンドアップノートを日次ノートに追加して」 | |
| 89 | +| **知識をコンパイル** | 「この論文を取り込んで私のナレッジウィキを更新して」 | |
| 90 | +| **ヘルスチェック** | 「ボルト内の孤立したノートと壊れたリンクを見つけて」 | |
| 91 | + |
| 92 | +すべての書き込みはデフォルトで**ドライランモード**です。エージェントが何かを変更するために明示的にオプトインする必要があります。あなたのノートは安全です。 |
| 93 | + |
| 94 | +--- |
| 95 | + |
| 96 | +## なぜVault Bridgeなのか? |
| 97 | + |
| 98 | +| | Vault Bridge | [obsidian-claude-code-mcp](https://github.com/iansinnott/obsidian-claude-code-mcp) | [obsidian-local-rest-api](https://github.com/coddingtonbear/obsidian-local-rest-api) | |
| 99 | +|--|-------------|------------------------|------------------------| |
| 100 | +| プロトコル | MCP + WebSocket | MCP + WebSocket | REST (HTTPS) | |
| 101 | +| Obsidianなしで動作 | はい(ファイルシステムフォールバック) | いいえ | いいえ | |
| 102 | +| 検索 | 全文 + タグ + フロントマター + 正規表現 | 基本的な | コンテンツ検索 | |
| 103 | +| 知識コンパイル | 組み込み(取り込み → コンパイル → ウィキ) | いいえ | いいえ | |
| 104 | +| グラフクエリ | リンクグラフ + バックリンク + 孤立検出 | いいえ | いいえ | |
| 105 | +| 書き込み安全性 | デフォルトではドライラン | ガード機構なし | ガード機構なし | |
| 106 | +| ボルトヘルス | リント(壊れたリンク、孤立、欠けたフロントマター) | いいえ | いいえ | |
| 107 | +| バッチ操作 | はい | いいえ | いいえ | |
| 108 | +| リアルタイムイベント | ファイル変更時にWebSocketプッシュ | いいえ | いいえ | |
| 109 | +| 認証 | トークン + タイミング安全な比較 | トークン | APIキー + HTTPS | |
| 110 | + |
| 111 | +--- |
| 112 | + |
| 113 | +## ナレッジコンパイルワークフロー |
| 114 | + |
| 115 | +これは[Karpathy LLM Wiki](https://www.youtube.com/watch?v=zisonDtp3GQ)の考えを実現したものです: |
| 116 | + |
| 117 | +``` |
| 118 | +生のソース(論文、記事、ノート) |
| 119 | + | |
| 120 | + v [vault.init] トピックをスキャフォルド |
| 121 | + | |
| 122 | + v ソースをraw/にドロップ |
| 123 | + | |
| 124 | + v [kb_meta.py diff] 新しいソースを検出 |
| 125 | + | |
| 126 | + v LLMが概念、要約、関係を抽出 |
| 127 | + | |
| 128 | + v [kb_meta.py update-hash] コンパイル済みとしてマーク |
| 129 | + | |
| 130 | + v [kb_meta.py update-index] ウィキインデックスを再構築 |
| 131 | + | |
| 132 | + v [kb_meta.py check-links] 整合性を検証 |
| 133 | + | |
| 134 | +[[wikilinks]]、フロントマター、カバレッジタグ付きのコンパイル済みウィキ |
| 135 | +``` |
| 136 | + |
| 137 | +エージェントが抽出を行います。`kb_meta.py`は記簿(差分抽出、ハッシング、インデックス作成)を処理します。 — 依存関係なし、純粋Python。 |
| 138 | + |
| 139 | +--- |
| 140 | + |
| 141 | +## どのように機能するのか |
| 142 | + |
| 143 | +``` |
| 144 | +AIエージェント <--MCP stdio--> connector.js <--WebSocket--> Obsidianプラグイン |
| 145 | + | |
| 146 | + (Obsidianが閉じている場合のファイルシステムフォールバック) |
| 147 | +``` |
| 148 | + |
| 149 | +- **プラグイン**は Obsidian内でWebSocketサーバーを実行します(JSON-RPC 2.0、localhostのみ) |
| 150 | +- **connector.js**はWebSocketにプロキシするMCPサーバーです。Obsidianが閉じている場合はボルトを直接読み込みます |
| 151 | +- `~/.obsidian-ws-port`経由で自動検出 — 手動ポート設定は不要です |
| 152 | + |
| 153 | +--- |
| 154 | + |
| 155 | +## APIリファレンス |
| 156 | + |
| 157 | +MCP経由で20個のツールが利用可能です。すべてJSON-RPC 2.0を使用します。 |
| 158 | + |
| 159 | +<details> |
| 160 | +<summary>読み取り操作</summary> |
| 161 | + |
| 162 | +| メソッド | パラメータ | 説明 | |
| 163 | +|--------|--------|-------------| |
| 164 | +| `vault.read` | `path` | ノートのコンテンツを読み取る | |
| 165 | +| `vault.list` | `path?` | ファイルとフォルダをリスト | |
| 166 | +| `vault.stat` | `path` | ファイル/フォルダメタデータ(サイズ、日付) | |
| 167 | +| `vault.exists` | `path` | パスが存在するかチェック | |
| 168 | +| `vault.getMetadata` | `path` | 解析されたフロントマター、リンク、タグ、見出し | |
| 169 | + |
| 170 | +</details> |
| 171 | + |
| 172 | +<details> |
| 173 | +<summary>書き込み操作(デフォルトではドライラン)</summary> |
| 174 | + |
| 175 | +| メソッド | パラメータ | 説明 | |
| 176 | +|--------|--------|-------------| |
| 177 | +| `vault.create` | `path, content?, dryRun?` | 新しいノートを作成 | |
| 178 | +| `vault.modify` | `path, content, dryRun?` | 既存ノートを上書き | |
| 179 | +| `vault.append` | `path, content, dryRun?` | ノートに追加 | |
| 180 | +| `vault.delete` | `path, force?, dryRun?` | ノートまたはフォルダを削除 | |
| 181 | +| `vault.rename` | `from, to, dryRun?` | ファイルを移動/名前変更 | |
| 182 | +| `vault.mkdir` | `path, dryRun?` | ディレクトリを作成 | |
| 183 | + |
| 184 | +</details> |
| 185 | + |
| 186 | +<details> |
| 187 | +<summary>検索とグラフ</summary> |
| 188 | + |
| 189 | +| メソッド | パラメータ | 説明 | |
| 190 | +|--------|--------|-------------| |
| 191 | +| `vault.search` | `query, regex?, caseSensitive?, maxResults?, glob?` | 全文検索 | |
| 192 | +| `vault.searchByTag` | `tag` | タグ付きのノートを見つける | |
| 193 | +| `vault.searchByFrontmatter` | `key, value?, op?` | フロントマターフィールドでクエリ | |
| 194 | +| `vault.graph` | `type?` | リンクグラフ(ノード、エッジ、孤立) | |
| 195 | +| `vault.backlinks` | `path` | ノートにリンクしているノートを見つける | |
| 196 | + |
| 197 | +</details> |
| 198 | + |
| 199 | +<details> |
| 200 | +<summary>バッチとヘルス</summary> |
| 201 | + |
| 202 | +| メソッド | パラメータ | 説明 | |
| 203 | +|--------|--------|-------------| |
| 204 | +| `vault.batch` | `operations, dryRun?` | 1回の呼び出しで複数の操作 | |
| 205 | +| `vault.lint` | `requiredFrontmatter?` | ボルトヘルスチェック | |
| 206 | +| `vault.init` | `topic` | ナレッジベース構造をスキャフォルド | |
| 207 | + |
| 208 | +</details> |
| 209 | + |
| 210 | +--- |
| 211 | + |
| 212 | +## セキュリティ |
| 213 | + |
| 214 | +- **localhostのみ** — WebSocketは127.0.0.1にバインド、ネットワーク公開なし |
| 215 | +- **トークン認証** — タイミング安全な比較、5秒認証タイムアウト、自動生成256ビットトークン |
| 216 | +- **デフォルトではドライラン** — 書き込みは`dryRun: false`を渡さない限りノーオペレーション |
| 217 | +- **パストラバーサルをブロック** — `..`セグメントは拒否、`.obsidian/`は書き込みから保護 |
| 218 | +- **接続制限** — 最大20クライアント、10MBペイロード上限、ReDoS安全正規表現 |
| 219 | +- **ファイルシステムフォールバック** — Obsidianが閉じている場合も同じセキュリティモデル |
| 220 | + |
| 221 | +--- |
| 222 | + |
| 223 | +## Pythonコンパニオン(オプション) |
| 224 | + |
| 225 | +| ファイル | 用途 | 依存関係 | |
| 226 | +|------|---------|-------------| |
| 227 | +| `kb_meta.py` | 決定論的KB操作:差分、ハッシュ、インデックス、リント、健全性 | 標準ライブラリのみ | |
| 228 | +| `vault_bridge.py` | 非同期Python WebSocketクライアント | `websockets` | |
| 229 | +| `mcp_server.py` | Python MCPサーバー(connector.jsの代替) | `mcp`、`websockets` | |
| 230 | + |
| 231 | +--- |
| 232 | + |
| 233 | +## ライセンス |
| 234 | + |
| 235 | +MIT |
0 commit comments