---
name: moc-related
description: 指定MOCに対してAtomic Insightsで関連Permanentノートを取得し、MOCに未掲載の追加候補を提示する。
when_to_use: "「関連ノートを探して」「このMOCに追加できるノートは」「Atomic Insightsで見て」"
user-invocable: true
allowed-tools: Bash, Read, Edit
model: sonnet
---

# MOC Related — Atomic Insightsで関連ノート候補を取得

Step 4でユーザーに採否を確認し moc-add に引き渡すため、fork せず対話コンテキストで実行する。

## 入力

```
/moc-related <MOCファイル名>
```

引数なしの場合、ユーザーに対象MOCを確認する。

## 実行手順

### Step 1: MOCの現在のリンクを取得

```bash
obsidian links path="Brain/MOC/<対象MOC>.md"
```

結果からMOCに既に載っているノートのパス一覧を作る。

### Step 2: Atomic Insightsで関連ノートを取得

obsidian eval は重い非同期処理のPromise結果を直接返せない。ファイル書き出しパターンを使う。

```bash
obsidian eval code='window.AtomicInsights.getRelatedNotes("<MOCのパス>",{limit:30}).then(r=>{require("fs").writeFileSync("/tmp/ai_moc_related.json",JSON.stringify(r,null,2))}).catch(e=>{require("fs").writeFileSync("/tmp/ai_moc_related.json",JSON.stringify({error:e.message}))});"started"'
```

その後、結果を読む:

```bash
sleep 8 && cat /tmp/ai_moc_related.json
```

### Step 3: 未掲載ノートを抽出

Atomic Insightsの結果から:
- Step 1で取得した既存リンクを除外
- `Brain/Permanent/` で始まるノートだけ残す（MOCや他ディレクトリは除外）
- スコア順にソート

### Step 4: 候補を提示

候補をスコア順にテーブルで提示する:

| スコア | ノート | 経由（commonNeighbors） |
|---|---|---|

ユーザーが採用を決めたら `moc-add` で追加する。

## CLI制約メモ

- `getActiveRelatedNotes` はCLIから使えない（Obsidianでファイルを開いていないと "No active markdown file found"）
- `obsidian eval path=<path>` でpath引数を渡してもアクティブファイルにはならない
- Promiseの結果を `obsidian eval` の戻り値として期待しない（重い処理は返ってこない）
- Atomic Insights プラグインの API 仕様はプラグインのリポジトリ（`https://github.com/goryugocast/atomic-insights`）の `docs/OBSIDIAN_CLI.md` を参照
