oh-my-mermaid

omm — Architecture mirror for vibe coding

1 — 概要

oh-my-mermaid(omm)は、AI コーディングツール(Claude Code / Codex / Cursor など)と連携し、コードベースの構造を Mermaid 図 + テキストフィールド で継続的に文書化する CLI ツール。

AI writes code in seconds. Humans understand it in hours.
But skip understanding, the codebase becomes a black box — even to you.

omm はこのギャップを埋める。AI に /omm-scan スキルを実行させると、コードベースから パースペクティブ(複数の視点)が生成され、プロジェクトルートの .omm/ ディレクトリに蓄積される。

7フィールド / 要素
∞ネスト深さ
5+対応 AI ツール
MITライセンス

各パースペクティブはサブディレクトリ。さらにその中に ネスト要素(子ディレクトリ)を持てる。ビュワーはファイルシステムのツリーを自動解析してグループを展開表示する。

.omm/
├── overall-architecture/ ← perspective
│   ├── description.md
│   ├── diagram.mmd
│   ├── context.md
│   ├── cli/ ← nested element
│   │   ├── description.md
│   │   └── diagram.mmd
│   └── server/ ← deeper nesting
│       └── ...
├── data-flow/
└── command-surface/

各要素が持てる 7 つのフィールド:

description diagram context constraint concern todo note
2 — アーキテクチャ

omm 自身が /omm-scan でスキャンした overall-architecture パースペクティブ。CLI が各コマンドへ振り分け、コマンドはストア・クラウド・解析エンジン群を呼び出す。

%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#ede9fe", "primaryTextColor": "#3b1d8c", "primaryBorderColor": "#8b5cf6", "lineColor": "#8b5cf6", "secondaryColor": "#f5f3ff", "tertiaryColor": "#fdf4ff", "fontFamily": "Sora, system-ui, sans-serif", "fontSize": "13px"}}}%% graph LR cli["CLI Dispatcher\nsrc/cli.ts"] commands["Commands\nsrc/commands/"] store["Store\nsrc/lib/store.ts"] cloud["Cloud Client\nsrc/lib/cloud.ts"] diff-engine["Diff Engine\nsrc/lib/diff.ts"] refs["Ref Tracker\nsrc/lib/refs.ts"] validator["Validator\nsrc/lib/validate.ts"] meta["Meta Tracker\nsrc/lib/meta.ts"] cloud-paths["Cloud Paths\nsrc/lib/cloud-paths.ts"] platforms["Platform Integrations\nsrc/lib/platforms/"] server["Web Viewer\nsrc/server/"] public-api["Public API\nsrc/index.ts"] cli -->|"dispatches args"| commands commands -->|"read/write .omm/"| store commands -->|"push/pull REST"| cloud commands -->|"compare diagrams"| diff-engine commands -->|"cross-references"| refs commands -->|"validate mermaid"| validator commands -->|"register skills"| platforms commands -->|"start HTTP server"| server store -->|"update timestamps"| meta cloud -->|"safe path resolve"| cloud-paths server -->|"read classes"| store server -->|"compare diagrams"| diff-engine server -->|"resolve refs"| refs public-api -->|"re-exports"| store public-api -->|"re-exports"| diff-engine public-api -->|"re-exports"| refs public-api -->|"re-exports"| validator classDef entry fill:#ddd6fe,stroke:#8b5cf6,color:#3b1d8c classDef store fill:#d1fae5,stroke:#059669,color:#064e3b class cli,public-api entry class store store
モジュールファイル役割
cli.tssrc/cli.ts引数パース・コマンドディスパッチ
store.tssrc/lib/store.ts.omm/ の読み書き・メタ更新・ネスト管理
cloud.tssrc/lib/cloud.tsohmymermaid.com REST API クライアント
diff.tssrc/lib/diff.tsMermaid ノード/エッジの差分検出
refs.tssrc/lib/refs.ts図間クロスリファレンス追跡
validate.tssrc/lib/validate.tsMermaid 構文・規約バリデーション
meta.tssrc/lib/meta.tscreated/updated/git_commit メタ管理
platforms/src/lib/platforms/各 AI ツールへのスキル登録
server/src/server/インタラクティブ Web ビュワー (SSE)
index.tssrc/index.tsパブリック API(store/diff/refs/validator を再エクスポート)
3 — コマンド & スキル
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#ede9fe", "primaryTextColor": "#3b1d8c", "primaryBorderColor": "#8b5cf6", "lineColor": "#8b5cf6", "secondaryColor": "#f5f3ff", "fontFamily": "Sora, system-ui, sans-serif", "fontSize": "12px"}}}%% graph TD omm["omm\nCLI entry"] omm -->|"local"| init["init\nomm init"] omm -->|"local"| list["list\nomm list"] omm -->|"local"| show["show\nomm show <class>"] omm -->|"local"| delete["delete\nomm delete <class>"] omm -->|"local"| status["status\nomm status"] omm -->|"query"| diff["diff\nomm diff <class>"] omm -->|"query"| refs["refs\nomm refs <class>"] omm -->|"query"| validate["validate\nomm validate"] omm -->|"viewer"| view["view\nomm view [--port N]"] omm -->|"cloud"| login["login\nomm login"] omm -->|"cloud"| link["link\nomm link [org/slug]"] omm -->|"cloud"| push["push\nomm push"] omm -->|"cloud"| pull["pull\nomm pull"] omm -->|"cloud"| share["share\nomm share"] omm -->|"cloud"| org["org\nomm org <sub>"] omm -->|"integration"| setup["setup\nomm setup [platform]"] omm -->|"integration"| update["update\nomm update"] omm -->|"rw"| rw["read/write\nomm <path> <field>"] classDef entry fill:#ddd6fe,stroke:#8b5cf6,color:#3b1d8c class omm entry
コマンドカテゴリ説明
omm setup [platform]integrationAI ツールにスキルを登録。省略時は自動検出
omm view [--port N]localインタラクティブ Web ビュワーを起動 (default: 3000)
omm listlocalパースペクティブ一覧表示
omm tree <path>local要素ツリーを表示
omm show <path>local要素の全フィールドを表示
omm statuslocal全要素の概要を表示
omm diff <path>query現在と前回の図を比較
omm refs <path>queryクロスリファレンスを表示
omm validate [path]queryMermaid 構文・規約を検証
omm push / pullcloud.omm/ をクラウドへ同期
omm link [org/slug]cloudプロジェクトをクラウド slug に紐付け
omm sharecloud共有 URL を表示
omm config language <code>localコンテンツ言語を設定(例: ja, ko, zh)
omm read <path> <field>localフィールドを stdout に出力
omm write <path> <field> -localstdin からフィールドを書き込み

スキルはターミナルではなく AI コーディングツール内 で実行するコマンド。omm setup で登録される。

スキル動作
/omm-scanコードベースを解析し、パースペクティブ駆動の再帰的なアーキテクチャ文書を生成・更新する
/omm-pushログイン → リンク → クラウドへプッシュをワンステップで実行
パスの形式: omm write overall-architecture/cli description - <<'EOF' のようにスラッシュで階層を指定。Element IDs は kebab-case で、ディレクトリ名と一致させる。
4 — データフロー

omm のデータは 3 経路で流れる: 書き込みパス(AI → store → .omm/)、解析パス(.omm/ → validator/diff/refs)、同期パス(.omm/ ↔ クラウド、Web ビュワー SSE)。

%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#ede9fe", "primaryTextColor": "#3b1d8c", "primaryBorderColor": "#8b5cf6", "lineColor": "#8b5cf6", "secondaryColor": "#f5f3ff", "tertiaryColor": "#fdf4ff", "fontFamily": "Sora, system-ui, sans-serif", "fontSize": "12px"}}}%% graph LR ai-assistant["AI Assistant\nClaude Code / Codex"] cli-input["CLI Input\nomm write"] store-engine["Store Engine\nsrc/lib/store.ts"] omm-dir[".omm/ Directory\nFilesystem"] meta-tracker["Meta Tracker\nsrc/lib/meta.ts"] validator["Validator\nsrc/lib/validate.ts"] diff-engine["Diff Engine\nsrc/lib/diff.ts"] ref-tracker["Ref Tracker\nsrc/lib/refs.ts"] cloud-api["Cloud API\nohmymermaid.com"] web-viewer["Web Viewer\nlocalhost:3000"] credentials["Credentials\n~/.omm/credentials.json"] ai-assistant -->|"omm write"| cli-input cli-input -->|"writeField()"| store-engine store-engine -->|"field files"| omm-dir store-engine -->|"save prev_diagram"| omm-dir store-engine -->|"updateMeta()"| meta-tracker meta-tracker -->|"meta.yaml + git info"| omm-dir omm-dir -->|"readField()"| store-engine store-engine -->|"diagram text"| validator store-engine -->|"diagram text"| diff-engine store-engine -->|"diagram text"| ref-tracker omm-dir -->|"push all files"| cloud-api cloud-api -->|"pull files"| omm-dir credentials -->|"Bearer token"| cloud-api omm-dir -->|"fs.watch + SSE"| web-viewer web-viewer -->|"REST reads"| store-engine classDef ext fill:#e2e8f0,stroke:#94a3b8,color:#334155 classDef entry fill:#ddd6fe,stroke:#8b5cf6,color:#3b1d8c classDef storage fill:#d1fae5,stroke:#059669,color:#064e3b class ai-assistant,cloud-api ext class cli-input entry class omm-dir,credentials storage
AI が omm write 実行 → cli.ts でコマンド解析 → writeNodeField() → prev_diagram を meta.yaml に保存 → field file 書き込み → meta.yaml 更新(created / updated / git_commit) → 親要素の children リスト更新

meta.yaml は created, updated, update_count, last_field, git_commit, prev_diagram, children などを保持し、omm diff や変更履歴追跡に利用される。

5 — クラウド連携

.omm/ をクラウドに同期することで、チーム共有や公開 URL の発行が可能になる。認証トークンは ~/.omm/credentials.json(パーミッション 0600)に保存される。

omm login                    # ブラウザ認証
omm link myorg/my-project    # プロジェクトを slug に紐付け
omm push                     # .omm/ をアップロード
omm share                    # 共有 URL を表示
omm pull                     # クラウドから取得

デフォルトは プライベート。公開共有リンクは omm share で取得できる(例: ohmymermaid.com/share/…)。

コマンド説明
omm org list所属組織の一覧
omm org switch <slug>デフォルト組織を切り替え
omm org members [slug]メンバー一覧をブラウザで表示
Cloud Paths: src/lib/cloud-paths.ts がパスの安全な解決を担当し、ディレクトリトラバーサルを防ぐ。
6 — クイックスタート
# 1. インストール
npm install -g oh-my-mermaid

# 2. AI ツールへスキルを登録
omm setup         # 全ツールを自動検出
omm setup cursor  # Cursor に限定

# 3. AI ツール内でスキャン実行
/omm-scan

# 4. ブラウザでビュワーを開く
omm view
プラットフォームセットアップコマンド
Claude Codeomm setup claude
Codexomm setup codex
Cursoromm setup cursor
OpenClawomm setup openclaw
Antigravityomm setup antigravity

omm view で localhost:3000 にインタラクティブな Web ビュワーが起動する。fs.watch + SSE でファイルの変更を検知しリアルタイムに更新。Mermaid 図はクリックで展開・縮小でき、ネストされた子要素をインタラクティブに探索できる。

# カスタムポートで起動
omm view --port 8080

# バージョン確認
omm --version

# 更新
omm update