Communitygithub.com

Mirofy

システムの図を作成し、その出典を明示し、見えなかった部分を報告します。5種類の図を検証し、単一の自己完結型HTMLファイルにレンダリングします。

Mirofy とは?

Mirofyは、小さな型付きJSON仕様から自己完結型のインタラクティブHTML図を作成するAIエージェントスキルです。アーキテクチャ図、ワークフロー図、シーケンス図、データフロー図、ライフサイクル図の5種類をサポートし、生成される図は検証され、単一のHTMLファイルとして出力されます。このスキルの特徴は、既存のリポジトリから図を導出するスキャンファーストアプローチと、図が分析できなかったファイルや省略したオブジェクトを「ギャップ」として報告する透明性にあります。また、JSONスキーマに基づく高速なオーサリングパス、Mermaidからのインポート機能、重なりを自動修復するジオメトリ修復機能も備えています。最終的な成果物は`validate`と`deliver`コマンドで厳密に検証され、品質プロファイル「showcase」に合格する必要があります。ブランドアイデンティティやインタラクティブなビューア機能も必要に応じて追加できます。

対応~Claude Code~Codex CLI~Cursor
npx skills add Hasan-Laraib/Mirofy

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Mirofy は何をしますか?

小さな型付きJSON仕様から、自己完結型のインタラクティブHTML図を作成します。静的出力がデフォルトです。ユーザーがデモやプレゼンテーションを明示的に要求した場合のみ、アニメーションを有効にします。

スキャンファースト:実際のリポジトリから図を導出する

図が実際に存在するコードを説明する必要がある場合、記憶に頼って作成しないでください。以下の手順で導出します。

npm run scan      # リポジトリ -> エビデンスグラフ(事実とギャップ)
npm run model     # エビデンス + ドキュメント -> 1つのシステムモデル
npm run compile   # モデル -> 意図を持った境界のあるビュー

各ステップは判断できなかったことを報告します。scan は分析できなかったすべてのファイルのギャップを記録し、compile は省略したすべてのオブジェクトとその理由を記録します。それらをユーザーに伝えます。システムの半分を黙って省略する図は、何を省略したかを示す図よりも劣ります。

ユーザーがまだ存在しないもの、またはリポジトリが利用できないものを説明している場合は、以下の高速パスを使用してください。

高速オーサリングパス

通常の生成にはこの境界のあるパスを使用します。ユーザーがそれらの機能について質問しない限り、オプションのビューアランタイムリファレンスを読まないでください。

  1. 質問から architecture、workflow、sequence、dataflow、lifecycle のいずれかを選択します。

  2. schemas/ の一致するスキーマ1つ、schemas/common.schema.json、および examples/ の一致するJSON例を1つ読みます。これらのファイルのみを読んでください。新規作成とは、新しい安定したID、ドメイン用語、レイアウトを意味します。例はフィールドの形状のためだけに使用し、事実として使用しないでください。実際の製品IDが重要な場合は、node bin/mirofy.mjs brands "<name>" --json を実行し、不明なブランドでユーザー提供のURLがある場合のみ references/brand-marks.md を読んでください。

  3. まずアーティファクトを作成する:次のツールアクションは候補を書き出す必要があります。レンダラーの内部を調査する前に候補を書き出してください。散文で正確な座標を計画しないでください。1つの明確なメインパス、短いサイドブランチ、最小限のラベル、最大12のプライマリノードから始めてください。meta.quality_profile を "showcase" に設定します。ただし、ユーザーが明示的に高密度の standard マップを要求した場合を除きます。自動ルートとラベルから始めてください。診断で必要になる前に via、channelX、channelY、labelAt を追加しないでください。修復ごとに最大1つの診断されたジオメトリコントロールを適用してください。

  4. 候補を編集するたび、および引き渡しの直前に検証します。

    node bin/mirofy.mjs validate <type> <candidate.json> --quality showcase --json
    

    アーティファクトチェックが4つだけのレシートは基本検証であり、showcaseの受け入れではありません。showcaseパスは、9つすべてのアーティファクトチェックが、0個の構成エラーと0個の警告で報告される必要があります。候補が正確な meta.quality_profile フィールドを省略または誤って綴っている場合は、ジオメトリの前に修正してください。最終検証に合格すると候補が確定します。その後は決して編集しないでください。

  5. 配信されたHTMLの場合、deliver が最終受け入れコマンドです。

    node bin/mirofy.mjs deliver <type> <candidate.json> <output.html> --quality showcase --json
    

    ゼロ以外の終了コードは成功として説明することはできません。検証が失敗した場合、診断された subject のみを変更し、evidence を確認し、supportedFixes から選択して再実行してください。客観的なエラー数が新しい最小値に達するまで、焦点を絞った修正を続けてください。2回連続してその最良のカウントが改善されない場合は、停止し、未解決の診断を正直に報告してください。

最初の候補の前に renderers/shared/geometry.mjs、レンダラーソース、バリデーターソース、テスト、またはベンチマークを読まないでください。実装を調査するのは、サポートされていない内部診断の場合、または2回の集中修復が失敗した後のみです。

タイプルーター

タイプ用途
architectureコンポーネント、サービス、クラウド/セキュリティ境界、インフラストラクチャ
workflowプロセス、承認ゲート、ツール呼び出し、Runbook、CI/CD
sequenceAPI呼び出しチェーン、リクエストライフサイクル、非同期トレース、戻り値
dataflowパイプライン、ETL/ELT、系列、ガバナンス、コンシューマー
lifecycle状態/ステータス遷移、リトライ、待機および終了状態

曖昧な場合は、node bin/mirofy.mjs guide "<scenario>" --json を実行してください。シナリオ証明の例は構造的な参照であり、コピーする事実ではありません。

Mermaid 入力

node bin/mirofy.mjs import mermaid <input.mmd> [output.json] [--json]

flowchart/graph → architecture、sequenceDiagram → sequence、stateDiagram(-v2) → lifecycle。

インポーターは推測しません。読み取れない行は行番号とともにギャップになるため、結果を完全と呼ぶのではなく、何が引き継がれなかったかを報告してください。また、位置も割り当てません。変換されたアーキテクチャは layout.mode: "grid" を使用し、ファンアウトによってエッジがノードを通過する可能性があり、これは常時オンの clean-flow ゲートに失敗します。インポート後は常に検証してください。ソースから意味も読み取ってください。インポーターはトポロジーを運びますが、ドメイン判断は行わないため、ラベルとタイプはしばしば書き換えが必要です。

ジオメトリの修復

検証でコンポーネントの重なりが報告された場合、座標を1つずつ手動編集しないでください。

node bin/mirofy.mjs repair <type> <input.json> [output.json] --safe

--safe は、これがオーサリングされた座標を書き換えるため必須です。修復は重なりに関与するコンポーネントのみを、バリデーターの8pxギャップをクリアする最小の修正で移動し、すべての微調整のレシートを出力し、ジオメトリのみに触れ、ラベル、タイプ、接続、IDには触れません。再検証し、変位で修正できないもの(ルーティング、ラベル配置)を、次の実行で再発見させるのではなく明示します。

オーサリングの不変条件

  • 1つの明白なメインパス。サイドブランチは最も近いメインパスノードから分岐します。ルーティング制御を追加する前に、価値の低いエッジを削除してください。
  • デフォルトでは meta.visual_preset を省略し、すべての図が解決されたカラーモード(明るい/暗い)に関係なく classic で開くようにします。カラーモードとビジュアルプリセットは独立しています。Light/Dark を切り替えても現在のプリセットを維持する必要があります。signal-flow、blueprint、editorial は、ユーザーがそのビジュアルスタイルを明示的に要求した場合のみ設定してください。
  • デフォルトでは meta.subtitle を省略します。タイトル、ノード、カードを言い換えるサブタイトルを決して作成しないでください。ユーザーが明示的に要求した場合のみ、1行の短いサポートラインを含めてください。
  • スタンドアロンのデスクトップビューアを、デフォルトでは浅いストリップではなく、ファーストスクリーンアーティファクトとして扱います。ノートパソコンと外部ディスプレイ用に1つのレスポンシブアーティファクトを生成します。デバイス固有のHTMLや代替トポロジーは決して生成しないでください。ビューアは、ライブビューポートの高さからの外側の読み取り幅のみを適応させる場合があります。オーサリングされたSVG/viewBox、比率、意味論的なジオメトリ、および通常のドキュメントフローを維持する必要があります。ワイドまたはハイデスクトップでは、図パネルとその必要な結論カードがバランスの取れた全体として画面を占めるように、十分なオーサリングされた垂直リズムを使用します。ランタイムのスケーリングは、過度に圧縮されたYレイアウトや小さすぎる明示的な meta.viewBox を修復できません。引き渡し前に、実際のHTMLを1440×900、1600×1000、1920×1080で開き、構成が大きなデスクトップディスプレイ向けの場合は2048×1320も追加で確認します。すべての確認サイズで document.documentElement.scrollWidth <= window.innerWidth および scrollHeight <= window.innerHeight を要求し、最大の確認ビューポートで図が快適に読み取れ、垂直方向にバランスが取れていることを視覚的に確認します。オーバーフローは、ノード、ラベル、またはメインパネルを縮小する前に、真に冗長なコンテンツを削除するか、間隔をコンパクトにすることで修復します。最大のビューポートでもビューアの幅制限で顕著な空の下部バンドがある場合は、オーサリングされたY位置を再配分し、viewBoxの高さを比例して増やします。フィラーのコピーや装飾的なカードを追加しないでください。overflow: hidden、クリップされたコンテンツ、内部図スクローラー、引き伸ばされたSVG高さ、または小さいタイポグラフィで合格を偽装しないでください。狭い/モバイルレイアウトは、コンテナが必要とする場合に垂直スクロールする場合があります。
  • デフォルトでは meta.legend を省略し、真実の auto デフォルトにします。必要な場合のみ、mode: auto|all|hidden とレンダラーがサポートする entries.<kind>.label|visible を使用します。ラベルがセマンティクスを変更することは決してありません。
  • 明示的なユーザーの選択から1つの主要なオーサリング言語を選択します。それ以外の場合は、リクエストまたは会話の支配的な言語に従います。meta.locale はレンダラー所有のビューアUIのみを制御します。対応するサポートされている主要言語には "en" または "zh-CN" を使用します。他のすべての言語については、meta.locale を省略し、固定されたビューアUIと <html lang> が英語にフォールバックすることを明示的に開示します。レンダラーはオーサリングされたコンテンツを翻訳しません。詳細は references/authoring-contract.md を参照してください。
  • 正確な製品名、コード識別子、コマンド、プロトコル、APIパス、環境名を保持します。これらはローカライズされたコピー内で英語のままである場合がありますが、周囲の説明文を別の言語のままにすることを正当化することは決してありません。
  • ブランドIDはオプションであり、明示的です。ノードが実際の製品に名前を付ける場合、標準の組み込みIDを brand に入れます。プリセットが一致せず、ユーザーが公式のHTTP(S) URLを提供した場合、最初に node bin/mirofy.mjs brands capture "<url>" --json を実行し、返されたダイジェスト固定された brand オブジェクトをオーサリングします。レンダリングと検証は、固定されていないキャプチャを決して実行しません。それ以外の場合は brand を省略します。「データベース」のような曖昧な役割からブランドを推測したり、バッジにセマンティックな type、ラベル、または関係の事実を置き換えさせたりしないでください。
  • シーケンス図の場合、安定した fixed レイアウトには meta.column_fit を省略します。ワイドなviewBoxが未使用の水平スペースを残す場合、または意味のある参加者ラベルが固定ボックスに収まらない場合は、"spread" に設定します。spread を試す前にセマンティックラベルを短縮しないでください。
  • コンポーネントタイプは frontend、backend、database、cloud、security、messagebus、external です。バリアントは default、emphasis、security、dashed です。
  • 関係ラベルはセマンティックデータです。衝突する場合、ラベルを移動し、ルートまたは間隔を調整し、次に意味を保持しながら文言を短縮します。両方のエンドポイントが関係を完全に暗示し、プロトコル、アクション、方向、同期/非同期動作、または境界を越えるメカニズムを含まない場合のみラベルを削除します。削除されたラベルがなぜ冗長であるかを説明してください。単に showcase を通過させるために意味のあるラベルを削除しないでください。
  • デフォルトでは meta.engineering_profile を省略します。リージョン、クラスター、セキュリティ境界の文言だけではこれを有効にしません。ユーザーが明示的に本番デプロイメントトポロジー、所有権の引き継ぎ、または障害時クローズドデプロイメントレビューを要求し、ソース事実が既知の場合のみ deployment-ownership を有効にします。一度有効にした場合、単に検証を通過させるためにエンジニアリングプロファイルを削除してはなりません。事実を修復するか、診断を正直に報告してください。
  • 間隔は、中心間距離ではなく、明確なギャップを意味します。関係ラベルの場合、明確なギャップは測定されたマスク幅を超える必要があります。削除を検討する前に、ラベルを保持する修復順序を使用してください。
  • 自動ルートはそれら自身のエンドポイント側を所有します。側は方向契約です。最初と最後のセグメントは、その側に対して垂直に出入りする必要があります。
  • 自動ポート分散は、アーキテクチャ、ワークフロー、データフロー、ライフサイクルのデフォルトのレンダラー動作です。単一の関係と明示的な via、channelX、channelY、labelAt、または非autoルートをスキップします。近接するパラレルポートは外部ブリッジを使用するため、自動ルーティングは8px未満のセグメントや16px未満の内部ターンを作成できません。アーキテクチャは別途、それらのオフセットが16px未満で両方のポートがコーナークリアランスを保持する場合、遮るもののない対面する自動ポート(left/right または top/bottom)を1つの共有軸上に保持します。正確に1つのエンドポイントが分散された場合、共有されていないエンドポイントのみがその軸上に移動できます。両方のエンドポイントが分散された場合、競合するポートが区別可能なままになるように外部ブリッジを維持します。
  • 無関係な不透明なノード、曖昧な共有コリドー、または別のルートをマスクする関係ラベルをエッジが横切ることを決して受け入れないでください。

references/authoring-contract.md は、フィールド列挙型、間隔計算、自動ポート配置、ジオメトリ修復ルール、リポジトリエビデンス、またはモード固有の配置が必要な場合のみ読んでください。

配信

修復中は validate を、最終受け入れには deliver を1回使用します。配信は、正確な仕様バイトをプライベートな同一ディレクトリのスナップショットに固定し、そのスナップショットをレンダリングしてチェックし、アトミックにHTMLをコミットし、仕様とアーティファクトの両方のSHA-256とバイト数を報告します。

配信後、信頼できるHTMLを変更または再レンダリングせずに、境界のあるデスクトップエビデンスを収集します。

node bin/mirofy.mjs visual-check <output.html> --json

visual-check は1440×900、1600×1000、1920×1080、2048×1320でのコンテナメントを測定します。最小および最大サイズで明るい/暗いスクリーンショットをキャプチャし、アーティファクトの横に相対パスのコンタクトシートとJSONサイドカーを書き込みます。その自動レシートは常に visualReview: "pending" を報告します。スクリーンショットは検査のためのエビデンスであり、自動的なポリッシュクレームではありません。終了コード0はコンテナメントとキャプチャが成功したことを意味し、1はオーバーフローまたはキャプチャ失敗、2はChrome/Chromiumが利用できずレシートが skipped であることを意味します。このコマンドは配信されたHTMLを決して変更しません。ユーザーが即座のローカルプレビューを希望する場合のみ --open を追加します。アクティブなデスクトップオーサリングループの場合、オプションのコマンドは次のとおりです。

node bin/mirofy.mjs preview <type> <input>.json <output>.html --quality showcase

デフォルトではプレビューを開始しないでください。プレビュー、リポジトリエビデンス、エクスポートレシート、ビジュアルレビュー、またはコミット後のオープンを使用する場合は references/delivery-contract.md を読んでください。

オプションのビューア機能

生成されたHTMLにはすでにテーマ切り替え、パン/ズーム、検索、フォーカス、関係トレース、セマンティックビュー、プレゼンテーション、真実のエクスポートが含まれています。これらはリーダー機能であり、追加のオーサリング作業ではありません。meta.animation: "trace" はオプトインです。meta.views はオプションであり、最大5つの厳選されたチャプターを含む必要があります。ユーザーが明示的にShare Cards、Route/Reach Cards、モーション、ガイド付きストーリー、ディープリンク、プレゼンテーション、検索/フォーカス、またはその他のビューアランタイム機能を要求した場合のみ references/viewer-runtime.md を読んでください。

セットアップとフォールバック

スキルのインストールはオプションです。

関連スキル