Communitygithub.com

IbrahimSobh/content-mermaid

建立並設計 Mermaid 圖表(流程圖、序列圖、狀態圖、實體關係圖、類別圖、甘特圖、心智圖、時間軸),用於呈現技術流程、工作流程、架構與系統流程。

content-mermaid 是什麼?

此技能專門用於從文字描述產生 Mermaid 圖表,涵蓋流程圖、序列圖、狀態圖、實體關係圖、類別圖、甘特圖、心智圖、時間軸與象限圖等多種圖表類型。它解決的問題是:當開發者需要可內嵌於文件或支援 Mermaid 原生渲染的平台(如 GitHub、Notion、Obsidian)的圖表時,能快速產出語法正確、色彩對比清晰且易於維護的圖表,無需手動調整 SVG 幾何座標。此技能支援 Claude Code、Coder、Cursor 等 AI 代理工具,工作流程包括:先根據內容結構選取正確的圖表類型,再為不同角色分配固定色系(如藍色代表輸入、綠色代表流程、紫色代表輸出),並透過 init 區塊鎖定畫布樣式以避免主題依賴。它不包含渲染、截圖、裁切的驗證循環,因為 Mermaid 渲染器已保證幾何正確性;驗證重點在於語法正確性、color 與 fill 的對比度、節點 ID 的完整性,以及標籤長度控制。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/IbrahimSobh/AISkills/tree/HEAD/content-mermaid

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

Content Mermaid

為技術流程與結構產生 Mermaid 圖表。這是 content-diagrams 的快速、語法驅動的對應版本:擁有相同的視覺清晰度標準,但建立在一個已保證幾何正確性的語言上,因此心力投入在選擇正確的圖表類型以及可讀、一致的色彩系統,而非驗證座標。

與 content-diagrams 的關係

兩個技能共享相同的標準——可讀的文字、真正的色彩系統(而非裝飾)、清晰勝過密度——但 content-diagrams 自行計算 SVG 幾何,而此技能將幾何完全交給 Mermaid 佈局引擎;根據圖表實際被檢視的地方(原生 Mermaid 表面 vs. 僅顯示靜態圖片的平台)來選擇,而不是根據習慣,如果不確定就詢問——Mermaid 原始碼若不經實際重新處理,無法乾淨地螢幕截圖成精美的獨立圖形。

為什麼這裡沒有驗證循環

content-diagrams 大部分心力花在幾何上:SVG 線條、方框或標籤只是 Claude 計算出的數字,而計算出的數字可能出錯——因此需要渲染、截圖、裁切、檢查。

Mermaid 完全消除了那種失敗模式。節點寬度、文字換行、箭頭路徑以及元素間的碰撞避免是渲染器的工作,而非 Claude 的工作——渲染器不會將標籤放在方框之上,也不會將線條穿越形狀。在此複製那個驗證循環(將渲染後的圖表截圖、裁切、檢查重疊)只會浪費 token 和延遲,去確認工具已經保證的事情。

仍然可能出錯的部分完全不同,而且完全是文字層面的:

  • 語法錯誤(未閉合的括號、用作節點 ID 的保留字、不符的箭頭類型)
  • 邊引用了一個從未定義的節點 ID
  • 色彩對比度差(填充色和文字色實際閱讀起來彼此不協調)
  • 針對內容實際結構選錯了圖表類型

因此,此處的驗證意味著:將語法從頭到尾檢查一次正確性,確保每個 classDef 都將填充色與真正對比的文字色配對,並確認圖表類型與被建模的內容相符。不需要影像渲染。

圖表類型選擇

根據內容本身的結構來選擇類型——這是 Mermaid 版本的 content-diagrams 主題選擇:

內容結構Mermaid 類型
帶有分支/迴圈的順序步驟(流程、工作流程、演算法)flowchart TD(由上而下)或 LR(由左至右,用於管道/時間軸)
服務/角色之間按時間排序的訊息(API 呼叫、協定交換)sequenceDiagram
實體的狀態與其間的轉換(生命週期、狀態機)stateDiagram-v2
資料模型/實體關係(綱要、資料庫表格)erDiagram
物件導向結構(類別、繼承、介面)classDiagram
具有持續時間和相依性的時程gantt
無嚴格順序的層級式分解/腦力激盪mindmap
按時間順序的敘事(專案歷史、版本歷史)timeline
雙軸優先級(影響力 vs. 努力等)quadrantChart

不要凡事都預設使用 flowchart——像「圖表化我們的服務如何互相呼叫」這樣的請求應該是 sequenceDiagram,即使容易想用方框和箭頭來畫;像「展示票證經歷的狀態」這樣的請求是 stateDiagram-v2,而不是用菱形充當狀態的流程圖。

色彩與可讀性系統

這是人工驗證仍然重要的領域,因為 Mermaid 會愉快地渲染出難以閱讀的色彩選擇而不發出抱怨。

規則:每個 classDef 必須將填充色與一個特意選擇與之對比的文字色配對——絕不要留下 color 不設定,指望主題的預設值能起作用。 Mermaid 自己的預設調色板(淡綠/粉紅/藍色搭配黑色文字)之所以沒問題,正是因為填充和文字是一起選擇的;一旦你將 fill 覆蓋為更飽和或更暗的顏色,你必須也明確設定 color,否則就會重現一個常見的缺陷:看起來可讀的方框,但實際上文字與其對比度很低。

兩種調色板配方,選擇一種並在一個圖表中的每個類別一致地使用(不要混用):

  1. 深色填充 / 白色文字(預設方案——經過驗證、高對比度、在淺色和深色聊天主題中都能良好閱讀):
    classDef category1 fill:#1e3a5f,stroke:#0d1f33,stroke-width:2px,color:#ffffff
    
  2. 淺色調填充 / 深色文字 / 飽和邊框(當圖表需要與遵循其淺色調慣例的 content-diagrams SVG 在視覺上並排放置時使用):
    classDef category1 fill:#e1f0ff,stroke:#1e3a5f,stroke-width:2px,color:#1a1a1a
    

直接借用 content-diagrams 的規則:每個類別一個色調,並在該類別出現的每個地方都應用它——在該角色的每個節點上使用相同的填色和邊框顏色,而非一次性使用。根據角色分配色調,例如:

  • 藍色 → 輸入 / 資料 / 待辦項目
  • 綠色 → 流程 / 進行中的工作步驟
  • 琥珀色或棕色 → 決策點 / 閘門
  • 紫色 → 輸出 / 發行版 / 終止狀態
  • 紅色 → 回饋迴圈 / 失敗路徑 / 回顧

鎖定畫布,使其不依賴主機的淺色/深色模式。 在圖表的第一行放一個 init 指令:

%%{init: {'theme': 'base', 'themeVariables': { 'fontFamily': 'Trebuchet MS, Verdana, Arial, sans-serif', 'fontSize': '16px', 'primaryColor': '#1e3a5f', 'primaryTextColor': '#ffffff', 'primaryBorderColor': '#0d1f33', 'lineColor': '#666666', 'background': '#ffffff' } } }%%

theme: 'base' 加上明確的 themeVariables 意味著無論主機環境預設使用哪個 Mermaid 主題,圖表看起來都一樣——不要只依賴主題名稱(default、dark、forest 等),因為那會讓實際顏色由渲染器決定。

字型大小:對於節點超過少數幾個的圖表,最小 16px;只有在圖表簡單到可讀性不成問題時才使用 14px。如果圖表需要縮小到 14px 以下才能容納標籤,那就是 content-diagrams 中相同的「清晰勝過密度」信號——拆分圖表或刪減內容,不要進一步縮小文字。

不同圖表類型的樣式設定範圍不同:flowchart、stateDiagram-v2 和 classDiagram 都直接支援按節點進行 classDef/class 指派,因此請逐節點使用上述的類別色彩系統。sequenceDiagram、erDiagram 和 gantt 的逐元素樣式設定能力非常有限——針對這些類型,應將心力投入 init 區塊中的 themeVariables(序列圖的 actorBkg、actorTextColor、noteBkgColor 等),而不要期望節點層級的類別能以相同方式運作。

箭頭語法

與手寫 SVG 不同,Mermaid 會自動放置箭頭標籤,且位置正確——-->|label| 文字不會像手動定位的 SVG 標籤那樣有落在形狀之上的風險。因此,與 content-diagrams「將文字留在箭頭之外,透過圖例解碼」的預設相反,直接在箭頭上標註標籤是可行的,而且通常更清晰。但還是要將標籤保持為短片段(「已核准」、「重試」、「失敗時」),而非句子——標籤是標記,不是句子。

保留線條樣式用於與 content-diagrams 相同的廣泛區分:

  • 實線箭頭 (-->) → 主要/正常流程
  • 虛線箭頭 (-.->) → 回饋、可選路徑,或外部/間接互動
  • 粗箭頭 (==>) → 強調的或關鍵路徑,應節制使用

保持標籤簡短;使用子圖進行分組

節點文字應為短語,而非句子——Mermaid 會像其他工具一樣,對段落長度的標籤進行尷尬的換行或溢出。如果節點需要多行,請在標籤內使用 <br/> 明確插入,而不是依賴自動換行在合理的位置斷行。

使用 subgraph 來聚類相關步驟(例如,同一個衝刺、同一個部署階段、同一個服務邊界內的所有內容)——它是 Mermaid 版本的群組方框,並可透過它自己的 style SubgraphName fill:...,stroke:... 行來設定樣式。不要將子圖嵌套超過一層;這會很快變得難以閱讀。

工作流程

  1. 識別底層結構並從上方的表格中選擇圖表類型,然後再開始編寫語法。
  2. 為出現的角色分配類別色彩(輸入、流程步驟、決策、輸出、回饋)——用一兩句話先勾勒出這個分配,就像 content-diagrams 的「勾勒主題推理步驟」,這樣如果使用者想要調整某個部分時,選擇是可稽核的。
  3. 編寫圖表,從 %%{init: ...}%% 指令開始,然後是結構,接著是 classDef/class 指派(或針對不支援按節點類別的類型使用 themeVariables)。
  4. 自行檢查語法——每個在邊中使用的節點 ID 都在某處定義;每個 classDef 都同時設定了 fill 和 color;括號/引號是平衡的;沒有段落長度的標籤。不需要渲染,不需要截圖。
  5. 透過 create_file 儲存為 .mermaid 檔案,以便它作為內嵌的成品渲染,使用描述性的 slug:/mnt/user-data/outputs/<slug>.mermaid。使用 present_files 展示。
  6. 如果使用者需要可攜帶的靜態圖片形式的圖表(用於嵌入不會渲染 Mermaid 的地方,或用於歸檔),請直說:此環境無法可靠地執行無頭 Mermaid 到圖片匯出(這依賴於沙盒網路通常無法連線的 Chromium 下載)。建議使用 mermaid.live 進行手動匯出,或者如果真正的需求是獨立圖形,則切換到 content-diagrams。

不該做的事

  • 不要在覆蓋 fill 之後遺留 classDef 的 color 未設定——這正是此技能存在要避免的對比度錯誤。
  • 不要在一個圖表中混用深色填充和淺色填充配方。
  • 不要將每個請求都預設為 flowchart——選擇與實際結構相符的類型(序列、狀態、實體關係等)。
  • 不要在此處重新引入 content-diagrams 的渲染/裁切/驗證循環——它解決的是 Mermaid 佈局引擎沒有的問題。
  • 不要在節點標籤中放入段落長度的文字;使用 <br/> 換行或刪減內容。
  • 不要將子圖嵌套超過一層。
  • 不要在未附加說明無頭 Mermaid 渲染可能在此處無法運作的情況下,承諾從此沙盒產出乾淨的 PNG/SVG 匯出。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

相關技能