---
name: mind-map-cli-ops
description: "`mind-map` アプリのマインドマップをCLIで読み書きするスキル。`/Users/yappa/code/app/mind-map` リポジトリ、`mm` コマンド、マップ/ワークスペース/ノードの参照、検索、追加、編集、移動、ノート更新、座標更新、エクスポートの依頼では必ず使う。ブラウザを開かずにマインドマップを確認したい、AIにマップを書き換えてほしい、構造を解析したい場面でも積極的に使う。Web UI の `localStorage` 専用データに触れたい場合も、このスキルを使い、CLI ブリッジ経由で `~/.mindmap` へ取り込んでから扱う。"
---

# Mind Map CLI Ops

`mind-map` リポジトリのCLIを使い、ファイル保存されたマインドマップを安全に読む・編集するためのスキル。

## スコープ

- このスキルは `/Users/yappa/code/app/mind-map` のCLIを使う。
- 読み書き対象は CLI が扱う `~/.mindmap` 配下の保存データ。
- Web UI の `localStorage` 上にだけ存在するブラウザ内ワークスペースも、ブリッジで CLI 保存領域へマージした後なら扱える。
- ブリッジ未実行なら、このスキル単体ではブラウザ内データを直接は読めない。必要時はまずブリッジを案内する。

## 使い方の基本

このスキルでは、必ず同梱スクリプト `scripts/mm.sh` を使う。

- スクリプトは `packages/cli/dist/bin/mm.js` が無ければ自動でビルドする。
- `node` や `npm` がPATHに無い環境でも、Homebrew標準パスを優先して探す。
- 出力取得は原則 `--json` を付ける。人向けに整形表示したい時だけプレーンテキストを使う。
- Web 側にしか無いワークスペースを扱う時は、先に Web UI の `CLIから取り込む` か `CLIへ書き出す` を使って保存先を橋渡しする。

## Web/CLI ブリッジ

`mind-map` Web UI には、ワークスペースメニュー内に次の2つのブリッジ操作がある。

- `CLIから取り込む`
  - CLI 保存領域 `~/.mindmap` の内容をブラウザ `localStorage` へマージする。
  - 同じIDのマップは CLI 側が優先される。
- `CLIへ書き出す`
  - 現在のブラウザ `localStorage` の内容を CLI 保存領域 `~/.mindmap` へマージする。
  - 同じIDのマップはブラウザ側が優先される。

このスキルでブラウザ専用データを扱いたい時は、次の順で進める。

1. Web UI が開けるなら、ユーザーに `CLIへ書き出す` を実行してもらう。
2. その後、このスキルで CLI 保存領域を読む。
3. 逆に CLI 側で更新した内容を Web に反映したい時は、`CLIから取り込む` を使ってもらう。

ブリッジ API もある。

- `GET /api/bridge/workspaces`
  - CLI 保存領域のワークスペース一式を返す。
- `POST /api/bridge/workspaces`
  - Web 側 payload を CLI 保存領域へマージする。

ブラウザ自動化が使えるなら、Web UI でブリッジボタンを押す。使えないなら、ユーザーへ実行を依頼する。

## 読み取り手順

1. 対象マップが曖昧なら `scripts/mm.sh --json list` で候補を確認する。
2. 必要なら `scripts/mm.sh --json open <map-id-or-title>` で対象をアクティブ化する。
3. 全体像は `scripts/mm.sh --json info` と `scripts/mm.sh --json view` で確認する。
4. 特定ノードは `scripts/mm.sh --json node get <node-id>` を使う。
5. キーワード探索は `scripts/mm.sh --json search "<query>"` を使う。
6. 外部共有や保存が必要なら `scripts/mm.sh export markdown <file>` または `scripts/mm.sh export json <file>` を使う。

## 書き込み手順

1. 変更前に対象マップと対象ノードを特定する。
2. ノード単位の変更では、先に `node get` か `view` で対象を確認する。
3. 変更は最小単位で実行する。
4. 変更後は必ず `node get`、`view`、`search` のいずれかで検証する。
5. ユーザーに返す時は、実行した変更内容と影響ノードを短くまとめる。

## 主要コマンド

### マップ操作

- 一覧: `scripts/mm.sh --json list`
- 新規作成: `scripts/mm.sh --json init "Map Title"`
- 開く: `scripts/mm.sh --json open <map-id-or-title>`
- 情報: `scripts/mm.sh --json info`
- ツリー表示: `scripts/mm.sh --json view`
- 部分ツリー: `scripts/mm.sh --json view <node-id> --depth 2`
- エクスポート: `scripts/mm.sh export markdown /tmp/map.md`

### ノード参照

- 詳細: `scripts/mm.sh --json node get <node-id>`
- 検索: `scripts/mm.sh --json search "keyword"`

### ノード追加

- ルート直下に追加: `scripts/mm.sh --json node add --root "New Node"`
- 任意親の子として追加: `scripts/mm.sh --json node add <parent-id> "New Node"`
- 親なしトップレベルで追加: `scripts/mm.sh --json node add --detached "Floating Node"`
- 座標付きで追加: `scripts/mm.sh --json node add --root "Idea" --x 180 --y 96`
- detached を座標付きで追加: `scripts/mm.sh --json node add --detached "Parking Lot" --x 640 --y 320`

### ノード更新

- 本文更新: `scripts/mm.sh --json node edit <node-id> "Updated Text"`
- ノート更新: `scripts/mm.sh --json node note <node-id> "Notes"`
- 親変更: `scripts/mm.sh --json node move <node-id> <new-parent-id>`
- 座標変更: `scripts/mm.sh --json node position <node-id> 480 260`
- 削除: `scripts/mm.sh --json node delete <node-id>`

## 判断ルール

- ノードIDは短縮プレフィックスでも通ることがあるが、曖昧なら完全IDを取り直す。
- 削除はサブツリーごと消えるので、ユーザー意図が明示されていない時は対象を確認してから実行する。
- ルートノードは削除・移動できない。
- `ACTIVE_MAP_NOT_FOUND` が出たら、新規作成する前に `list` で既存マップ有無を確認する。
- 位置調整の依頼では、まず現在位置を `node get` で確認してから `node position` を使う。
- Web UIとCLIの内容差分が疑われる時は、「このスキルはCLI保存領域 `~/.mindmap` を見ています」と明示し、必要ならブリッジを先に案内する。

## レポート形式

### 読み取り依頼

- 対象マップ名
- ノード数または対象ノード
- 重要な構造や検索結果
- 必要なら次に使うCLIコマンド

### 書き込み依頼

- 実行した操作
- 影響したノードID
- 検証結果
- 必要ならエクスポート先

## 例

### 例1: マップ全体を読む

1. `scripts/mm.sh --json list`
2. `scripts/mm.sh --json open project-map`
3. `scripts/mm.sh --json info`
4. `scripts/mm.sh --json view`

### 例2: ノードを探して追記する

1. `scripts/mm.sh --json search "認証"`
2. `scripts/mm.sh --json node get <node-id>`
3. `scripts/mm.sh --json node note <node-id> "追加メモ"`
4. `scripts/mm.sh --json node get <node-id>`

### 例3: 新しい枝を追加して配置する

1. `scripts/mm.sh --json node add --root "新機能候補" --x 220 --y 120`
2. `scripts/mm.sh --json node add <new-node-id> "詳細タスク"`
3. `scripts/mm.sh --json node position <new-node-id> 220 120`
4. `scripts/mm.sh --json view`

### 例4: ブラウザ専用ワークスペースをCLIで読む

1. ユーザーに Web UI の `CLIへ書き出す` を実行してもらう
2. `scripts/mm.sh --json list`
3. `scripts/mm.sh --json open <map-id-or-title>`
4. `scripts/mm.sh --json view`
