Community生產力與協作github.com

jacksuter12/skills_and_agents

建立可獨立運作的 HTML 檔案,內含內嵌 SVG 圖表以進行視覺論證,並透過截圖與語法檢查的反覆循環,直到圖表完美無瑕。當使用者想要將工作流程、架構、系統、流程或概念視覺化為可在瀏覽器中開啟、嵌入或分享的圖表時使用。

skills_and_agents 是什麼?

此技能旨在建立高品質的技術圖表,強調「視覺論證」而非單純的資訊展示。它要求將圖表製作成自包含的 HTML 檔案,並使用單一內嵌 SVG 元素。核心原則包括:所有圖形(方框、文字、箭頭)都位於 SVG 中,以確保精確的座標系統;手動佈局而非依賴自動佈局引擎,以便形狀能反映概念;以及透過「深度評估」決定圖表是簡單抽象還是詳細技術性。對於技術圖表,它強制要求納入「證據工件」,例如真實的程式碼片段、JSON 範例或 API 名稱,以確保準確性和教育價值。技能還引入了「多層級縮放架構」,包含摘要流程、區域邊界和區塊內部細節,以創建具深度和脈絡的全面圖表。它支援多種視覺模式(如扇形展開、時間軸、樹狀圖),並提供一個嚴格的「渲染與驗證」循環(使用 Playwright 進行截圖和 lint 檢查)以確保最終輸出品質。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/jacksuter12/skills_and_agents/tree/HEAD/.claude/skills/html-diagram

Installed? Explore more 生產力與協作 skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

在你喜歡的 AI 中提問

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

說明文件

HTML 圖表建立器

產生自包含的 .html 檔案,內含單一內嵌 <svg>,旨在進行視覺論證,而不僅僅是顯示資訊。然後使用 Playwright 對其進行截圖,檢查 PNG,並修正直到完美。

此技能中的檔案

檔案用途何時讀取
references/color-palette.md所有顏色和品牌樣式:唯一的事實來源在每個圖表之前
references/visual-patterns.md每種佈局模式(扇形展開、時間軸、樹狀圖...)的草圖設計步驟 2
references/starter.html頁面外殼:CSS 權杖、文字/形狀類別、箭頭標記、每種慣例的一個範例複製它作為每個圖表的開頭
scripts/render.py將 HTML 截圖為 PNG 並 lint 幾何圖形每次編輯後執行(請參閱渲染與驗證)
examples/兩個已完成的圖表及其 PNG 檔案當您需要參考密度和樣式時

若要為品牌重新設定所有圖表的樣式,請編輯 color-palette.md(以及 starter.html 中相符的權杖)。其他一切都是通用方法。


已做出的兩個決定(每個圖表無需重新討論)

1. 一切都是 SVG。HTML 只是環繞它的頁面。

方框、文字、箭頭和程式碼區塊都位於一個 <svg id="diagram"> 中。不要使用 HTML/CSS(flexbox/grid div)建立方框,然後疊加 SVG 作為連接器。

原因: 圖表是幾何問題,箭頭需要兩端的精確座標。使用全 SVG 時,每個節點和每個箭頭共享一個寫入檔案中的座標系統,因此您可以透過算術計算箭頭端點並透過編輯數字來修正它。使用 HTML 方框時,位置來自瀏覽器的佈局引擎:它們不在原始碼中,它們會隨著字型和視口寬度而變化,然後連接器需要 JavaScript 在執行時測量方框。這是需要除錯的第二個程式,而且讀者的視口可能與您驗證時使用的不同。全 SVG 的代價是真實存在的,但較小:SVG 文字不會自動換行(您需要使用 <tspan> 自行換行),並且其寬度在渲染前是未知的(lint 會測量它並回報溢位)。

<foreignObject>(SVG 內部的 HTML)預設為關閉:它是您可能獲得文字換行的唯一地方,但在瀏覽器外部渲染不一致,而且 lint 無法檢查它。僅當使用者需要在形狀內部使用段落時才使用它。

2. 不使用 Graphviz 或 D2 進行佈局。手動放置座標。

原因: 此方法要求佈局反映概念:扇形展開、時間軸、循環、並排比較、自由浮動註釋、放置在所說明步驟旁邊的程式碼區塊。自動佈局引擎針對不同的目標(具有較少邊交叉的分層圖)進行最佳化,因此它們會將每個圖表壓平成相同的由上而下層級結構,而這正是此技能旨在避免的「統一方框」輸出。它們還會引入二進制依賴關係,並產生難以重新設定樣式和註釋的 SVG。

例外情況: 一個真正圖形狀的主題(大約 15 個以上具有許多交叉連結的節點,例如依賴關係圖),其中交叉是主要問題。在那種情況下,僅執行 dot -Tplain (Graphviz) 以獲取節點座標,然後使用此技能的樣式和慣例自行繪製節點。請說明您正在這樣做及其原因。


核心理念

圖表應該論證,而非顯示。

圖表不是格式化文字。它是一個視覺論證,顯示關係、因果關係和流程,純文字無法表達這些。形狀本身應該就是意義。

同構測試:如果移除所有文字,結構本身是否能傳達概念?如果不能,請重新設計。

教育測試:有人能從這個圖表中學到具體的東西,還是它只是標記方框?一個好的圖表會教學——它顯示實際的格式、真實的事件名稱、具體的範例。


深度評估(請先執行此操作)

在設計之前,確定此圖表需要何種細節層級:

簡單/概念性圖表

在以下情況使用抽象形狀:

  • 解釋心智模型或哲學
  • 受眾不需要技術細節
  • 概念本身就是抽象(例如,「關注點分離」)

全面/技術性圖表

在以下情況使用具體範例:

  • 繪製真實系統、協定或架構的圖表
  • 圖表將用於教學或解釋(例如,YouTube 影片)
  • 受眾需要了解事物的實際樣貌
  • 您正在顯示多種技術如何整合

對於技術圖表,您必須包含證據工件(請參閱下文)。


研究要求(針對技術圖表)

在繪製任何技術性內容之前,請研究實際的規格。

如果您正在繪製協定、API 或框架的圖表:

  1. 查閱實際的 JSON/資料格式
  2. 找到真實的事件名稱、方法名稱或 API 端點
  3. 了解各個部分實際如何連接
  4. 使用真實的術語,而非通用的佔位符

錯誤:「協定」→「前端」 正確:「AG-UI 串流事件(RUN_STARTED、STATE_DELTA、A2UI_UPDATE)」→「CopilotKit 透過 createA2UIMessageRenderer() 進行渲染」

研究使圖表既準確又具教育意義。


證據工件

證據工件是具體的範例,證明您的圖表是準確的,並幫助觀眾學習。在技術圖表中包含它們。

證據工件的類型(選擇與您的圖表相關的類型):

工件類型何時使用如何渲染
程式碼片段API、整合、實作細節深色矩形 + 語法著色的文字(請參閱證據工件顏色的色板)
資料/JSON 範例資料格式、結構、負載深色矩形 + 彩色文字(請參閱色板)
事件/步驟序列協定、工作流程、生命週期時間軸模式(線 + 點 + 標籤)
UI 模型顯示實際輸出/結果模仿真實 UI 的巢狀矩形
真實輸入內容顯示進入系統的內容矩形,其中顯示範例內容
API/方法名稱真實的函式呼叫、端點使用文件中的實際名稱,而非佔位符

範例:對於關於串流通訊協定的圖表,您可以顯示:

  • 規格中的實際事件名稱(不僅僅是「事件 1」、「事件 2」)
  • 一個顯示如何連接的程式碼片段
  • 串流資料的實際樣貌

範例:對於關於資料轉換管道的圖表:

  • 顯示範例輸入資料(實際格式,而非「輸入」)
  • 顯示範例輸出資料(實際格式,而非「輸出」)
  • 如果相關,顯示中間狀態

關鍵原則:顯示事物的實際樣貌,而不僅僅是它們的名稱。


多層級縮放架構

全面的圖表同時在多個縮放層級運作。將其想像為一張同時顯示國界和街道名稱的地圖。

層級 1:摘要流程

一個簡化的概覽,一目瞭然地顯示完整的管道或流程。通常放置在圖表的頂部或底部。

範例:輸入 → 處理 → 輸出 或 用戶端 → 伺服器 → 資料庫

層級 2:區域邊界

標記的區域,用於對相關元件進行分組。這些建立了視覺「房間」,幫助觀眾理解哪些內容屬於同一組。

範例:按職責分組(後端 / 前端),按階段分組(設定 / 執行 / 清理),或按團隊分組(使用者 / 系統 / 外部)

層級 3:區塊內部細節

每個區塊內的證據工件、程式碼片段和具體範例。這是教育價值所在。

範例:在「後端」區塊內,您可以顯示實際的 API 回應格式,而不僅僅是標記為「API 回應」的方框

對於全面的圖表,目標是包含所有三個層級。 摘要提供脈絡,區域進行組織,細節則進行教學。

差與好

差(顯示)好(論證)
5 個帶有標籤的相等方框每個概念都有一個反映其行為的形狀
卡片網格佈局視覺結構符合概念結構
裝飾文字的圖示本身就是意義的形狀
所有東西都用相同的容器每個概念都有不同的視覺詞彙
所有東西都在方框內自由浮動文字搭配選擇性容器

簡單與全面(了解您需要哪一種)

簡單圖表全面圖表
通用標籤:「輸入」→「處理」→「輸出」具體:顯示輸入/輸出的實際樣貌
命名方框:「API」、「資料庫」、「用戶端」命名方框 + 實際請求/回應的範例
「事件」或「訊息」標籤時間軸,其中包含規格中的真實事件/訊息名稱
「UI」或「儀表板」矩形顯示實際 UI 元素和內容的模型
約 30 秒解釋約 2-3 分鐘的教學內容
觀眾了解結構觀眾了解結構 AND 細節

簡單圖表適用於抽象概念、快速概覽,或當觀眾已經了解細節時。全面圖表適用於技術架構、教學、教育內容,或當您希望圖表本身進行教學時。


容器與自由浮動文字

並非每一段文字都需要一個形狀環繞。 預設使用自由浮動文字。僅在容器有用途時才新增它們。

使用容器的時機...使用自由浮動文字的時機...
它是某個區塊的焦點它是標籤或描述
它需要與其他元素進行視覺分組它是支援性細節或元資料
箭頭需要連接到它它描述附近的某物
形狀本身具有意義(決策菱形等)排版本身建立了足夠的層級結構
它代表系統中一個獨特的「事物」它是章節標題、副標題或註釋

排版作為層級結構: 使用字型大小、粗細和顏色來建立視覺層級結構,而無需使用方框。一個 28px 的標題不需要一個矩形環繞它。

容器測試: 對於每個帶框的元素,問問「它是否可以作為自由浮動文字運作?」如果可以,請移除容器。


設計流程(在撰寫 SVG 之前執行此操作)

步驟 0:評估所需深度

在任何其他操作之前,確定這是否需要是:

  • 簡單/概念性:抽象形狀、標籤、關係(心智模型、哲學)
  • 全面/技術性:具體範例、程式碼片段、真實資料(系統、架構、教學)

如果是全面的:先進行研究。查閱實際的規格、格式、事件名稱、API。

步驟 1:深入理解

閱讀內容。對於每個概念,問問:

  • 這個概念做什麼?(不是它是什麼)
  • 概念之間存在什麼關係?
  • 核心的轉換或流程是什麼?
  • 某人需要看到什麼才能理解這個?(而不僅僅是閱讀)

步驟 2:將概念對應到模式

對於每個概念,找到反映其行為的視覺模式。每種模式的草圖和使用說明位於 references/visual-patterns.md。

如果概念...使用此模式
產生多個輸出扇形展開(從中心放射狀的箭頭)
將多個輸入合併為一個收斂(漏斗,箭頭合併)
具有層級/巢狀結構樹狀圖(線條 + 自由浮動文字)
是一系列步驟時間軸(線條 + 點 + 自由浮動標籤)
循環或持續改進螺旋/循環(返回起點的箭頭)
是抽象的狀態或脈絡雲狀(重疊的橢圓)
將輸入轉換為輸出裝配線(之前 → 處理 → 之後)
比較兩件事並排(平行並列,帶有對比)
分為階段間隙/中斷(區塊之間的視覺分隔)

步驟 3:確保多樣性

對於多概念圖表:每個主要概念必須使用不同的視覺模式。不要使用統一的卡片或網格。

步驟 4:草擬流程

在撰寫標記之前,在腦中追蹤視線如何移動通過圖表。應該有一個清晰的視覺故事。

步驟 5:建構 HTML/SVG

只有在現在才撰寫檔案,從 references/starter.html 開始。在 20px 網格上佈局,並在放置任何東西之前記下關鍵座標(欄、列、節點中心)。關於如何處理大型圖表,請參閱下文。

步驟 6:渲染與驗證(強制)

撰寫檔案後,您必須執行渲染-檢視-修正迴圈,直到圖表看起來正確。這不是可選的——請參閱下方的渲染與驗證章節以了解完整流程。


大型 / 全面圖表策略

對於全面或技術性圖表,請一次建立一個區塊的 SVG。 不要一次撰寫整個檔案。一個全面的圖表可能會超過每次回應的輸出限制,即使它符合,一次一個區塊也能讓每個區塊得到真正的關注。

逐區塊工作流程

階段 1:建立每個區塊

  1. 從 references/starter.html 建立檔案:設定 <title>、viewBox,並新增第一個區塊。
  2. 每次編輯新增一個區塊,每個區塊都在其自己的 <g id="sec-..."> 中。思考此區塊的佈局、其間距,以及它如何連接到已經存在的內容。
  3. 使用描述性 ID(data-node="trigger"、id="sec-backend"),以便跨區塊的邊具有可讀性:data-from="trigger" data-to="router"。
  4. 在 svg 頂部的 HTML 註解中保留座標計劃(欄 x、列 y、區塊邊界)。每個後續區塊和每條邊都會讀取它,這是您在不猜測的情況下修正間距的方法。

階段 2:檢視整體

完整閱讀檔案並檢查:

  • 每個 data-from/data-to 是否都命名了一個存在的 data-node?
  • 間距是否平衡?或者某些區塊擁擠而其他區塊稀疏?
  • viewBox 是否包含了所有內容,並有大約 40px 的邊距?

階段 3:渲染與驗證(如下)。

區塊邊界

… [為翻譯而截斷]

相關技能