Communitygithub.com

CatsMansion/portfolio-one-shot

從真實作品資料夾一鍵生成可驗證、零虛構的作品集。當使用者要求「一键生成作品集、做作品集、生成作品集、build a portfolio、make a portfolio site from my files」或希望從本地資產產出作品集且不允許虛構專案描述時,應使用此技能。它會掃描目錄、建置響應式離線 HTML 作品集與 ATS 可讀純文字版本,並執行失敗大聲嚷嚷的驗證器,列出遺漏欄位而非填補它們。支援兩種模式:case_study 適用於敘事型作品,gallery 適用於視覺型作品。

portfolio-one-shot 是什麼?

此 AI 代理技能名為「Portfolio One Shot」,旨在從使用者指定的本地檔案目錄中,透過單一命令自動生成一份零虛構、可獨立驗證的作品集。它特別適合開發者、設計師與創作者,當他們需要快速將真實專案文件轉換為可供瀏覽的離線 HTML 頁面與純文字履歷版本時使用。此技能嚴格遵循三個不變原則:不虛構任何事實(遺漏欄位會以可見缺口呈現)、執行獨立驗證(在回報成功前先執行驗證器)、以及僅需一條命令即可完成掃描、建置與驗證作業。支援「case_study」與「gallery」兩種模式,分別針對敘事型與視覺型作品提供不同的佈局與文字密度。此技能可與 Claude Code、Cursor 等命令列互動式 AI 代理工具整合,確保輸出的作品集內容完全可追溯至原始檔案,杜絕 AI 常見的幻覺問題。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/CatsMansion/portfolio-one-shot/tree/HEAD

在你喜歡的 AI 中提問

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

說明文件

Portfolio One Shot

目的

將真實作品的目錄轉換為可開啟、可被機器讀取且可獨立驗證的作品集,而不讓模型撰寫任何虛構的專案文案。

三個不變原則,依優先順序排列:

  1. 零虛構。每個顯示的事實都必須追溯到某個檔案、README 摘錄或使用者提供的值。遺漏的欄位將呈現為可見的缺口。絕不虛構專案名稱、角色、指標、客戶、引述、結果或圖片。
  2. 獨立驗證。在回報成功之前,先對輸出執行驗證器。先列出失敗項目,再列出通過項目。絕不將綠色清單標準作為作品集看起來很棒的證據——視覺判斷需由使用者親眼所見。
  3. 一條命令。all 執行掃描 → 設定 → 建置 → 驗證。出現第二條命令是缺陷,而非工作流程。

何時使用

  • 使用者說「一鍵生成作品集 / 做個作品集 / 把我的項目做成作品集 / build a portfolio from this folder」。
  • 使用者交給你一個包含圖片、影片或專案資料夾的目錄,並希望將它們展示出來。
  • 使用者在新增或刪除作品後希望重新生成作品集。
  • 使用者希望檢查現有作品集是否有遺漏的證據。

請勿在使用者想要一個含有虛構內容的裝飾性示範網站、特定藝術指導視覺風格或託管平台整合時使用。這些是不同類型的工作。在此情況下,不要默默切換到此技能的零虛構規則——請明確說出差異。

唯一命令

python scripts/portfolio.py all <SOURCE_DIR> --out <OUTPUT_DIR> --mode <case_study|gallery>

範例:

python scripts/portfolio.py all "C:/work/my-projects" --out "C:/work/portfolio-dist" --mode gallery

該命令會將 index.html、portfolio.txt、portfolio.md、projects.json、assets/、build-report.json 和 verify-report.md 寫入輸出目錄,然後列印驗證器判定結果。使用檔案呈現工具為使用者開啟 index.html。將視覺交付物放在清單首位。

在使用者編輯 projects.json 後重新建置,僅執行 build 和 verify:

python scripts/portfolio.py build <OUTPUT_DIR>/projects.json --out <OUTPUT_DIR> --mode gallery
python scripts/portfolio.py verify <OUTPUT_DIR>

工作流程

階段 0 · 決定模式,不要默默猜測

存在兩種模式是因為來源研究發現這兩個領域要求相反的東西(參見 references/content-spec.md §領域區分)。

模式適用對象文字密度佈局
case_studyUX、產品、設計、工程、研究長篇敘事;七個必填欄位群組每個專案一個區段,圖片交錯排列
gallery遊戲美術、插畫、概念藝術、攝影、動畫極少量文字;讓作品說話圖片優先的網格,點擊後開啟燈箱

如果使用者尚未選擇,請從素材推斷,並在執行前用一句話說明推斷結果——然後讓使用者用一個詞覆寫。絕不將某個預設值硬編碼到別人的作品集中。

階段 1 · 掃描真實素材

scan 將子目錄列舉為專案。對於每個專案,它會記錄:

  • 目錄名稱作為專案標題候選項(事實,而非虛構)。
  • 每個圖片和影片檔案的大小、SHA-256 前綴以及像素尺寸。
  • README.md / project.md / about.md 的第一段作為逐字 summary 候選項,並附帶一個 _sources 條目,標明檔案名稱和行號範圍。
  • 一個 missing 清單,列出沒有檔案能提供的欄位。

副檔名未知的檔案會保留在 manifest.json 中作為 unclassified,而不是被丟棄。絕不刪除、重新命名、移動或調整原始檔案大小。僅寫入輸出目錄。

階段 2 · 建置

build 讀取 projects.json(結構定義在 references/config-schema.md 中)並呈現:

  • index.html — 淺色主題、響應式、系統字型堆疊、無 CDN 依賴、無花俏模板。每個 <img> 都帶有 alt、width、height、loading="lazy"。圖片使用 assets/ 下的相對路徑。
  • portfolio.txt — 純文字專案摘要,適用於 ATS 解析和複製貼上到履歷中。
  • portfolio.md — 與上述相同的資訊,以 Markdown 格式呈現,可用於 README 或電子郵件。
  • 一個可見的警告橫幅,明確指出有多少欄位遺漏,以便骨架絕不會被誤認為是完成的作品集。

當設定了 --embed 時,僅將小於 10 KB 的圖片內嵌為 base64,較大的圖片保持外部引用;對每個超過閾值的檔案印出警告。Base64 會使負載增加約 33%,且無法實現延遲載入——參見 references/content-spec.md §圖片政策。

階段 3 · 在回報前驗證

verify 檢查欄位完整性、圖片是否存在且可解碼、替代文字是否有意義、是否使用佔位圖主機、連結格式、HTML 結構以及純文字版本的一致性。它會寫入 verify-report.md,失敗項目在前,通過項目在後,最後是 限制 / 未驗證項目。

退出碼為 1 表示存在紅色項目。請如實回報。不要為了讓標準通過而編輯它們,不要重試失敗的生成通道,也不要隱藏限制。

如需正/負面對照測試,請執行 python scripts/portfolio.py verify <dir> --self-test——它會在記憶體中建構一個故意有問題的專案和一個完整的專案,並確認驗證器會標記前者而放行後者。如果負面對照通過了綠色,則表示驗證器有問題;請修復驗證器,而非修復測試案例。

階段 4 · 交接

首先呈現 index.html,以便使用者可以開啟它,然後是 verify-report.md,最後是 projects.json。在文字回覆中:給出判定結果、遺漏欄位的確切數量,以及下一步的唯一動作(填寫 projects.json)。不要聲稱作品集看起來不錯。當警告橫幅存在時,不要聲稱它已準備好寄出。

零虛構合約

硬性規則,全部源自 references/content-spec.md 中記錄的失敗模式:

  • 絕不撰寫輸入中不存在的專案敘述、說明文字、角色、指標、成果、貢獻者姓名或客戶名稱。遺漏的欄位呈現為 [MISSING: field]——醒目可見,絕不無聲地留空,也絕不將其改寫成看似合理的句子。
  • 絕不使用佔位圖主機(picsum.photos、placehold.co、lorem、素材網址)來代替真實作品。沒有圖片的專案則呈現一個明確的空媒體區塊。
  • 絕不引用沒有 _sources 條目的指標。如果使用者提供了某個指標,記錄 source: "user-supplied";不要將其升級為「已驗證」。
  • 絕不虛構工作室名稱、個人簡介或聯絡方式。將它們留空並列為失敗項目。
  • 使用 README 時,逐字複製段落,並記錄其檔案名稱和行號範圍。不要潤飾、縮短或改寫它。
  • 不要將 AI 輔助的措辭呈現為使用者自己的決策。流程和反思欄位保持空白,直到使用者提供它們。

多版本輸出

同一個 projects.json 支援針對特定目標的版本。在 build 中加入 select 的專案 ID 清單,或傳遞 --only id1,id2,以產生針對特定觀眾的版本。重新排序是設定變更,絕非自動改寫。這遵循了文件中所記錄的區分:網站用於探索,而 PDF 或簡報用於申請。

常見陷阱

  • 不要從片段下判斷。在得出任何內容是完整或有問題的結論之前,請閱讀完整的 README、完整的 projects.json 以及完整的驗證器報告。
  • 標準通過不等於品質。綠色驗證器僅表示檔案結構健全。美學需要使用者親眼判斷。
  • 不要為了讓頁面看起來完整而填補空缺。當使用者尚未提供事實時,一個明顯不完整的頁面才是正確的輸出。
  • 不要碰觸個人目錄。掃描對來源目錄是唯讀操作。所有寫入動作都發生在輸出目錄中。
  • 不要擴大範圍到 PDF 生成、託管或 GitHub API 存取。這些需要使用者明確決定。
  • 圖片尺寸很重要。提供 width 和 height 可以防止佈局位移。如果 Pillow 不可用,請回退到標頭解析並印出可見警告;絕不無聲降級。
  • 一個資料夾就是一個專案。如果使用者的素材是扁平結構,請要求分組或使用 --flat 來建立一個包含所有媒體的專案。不要虛構分組。

資源

路徑角色
scripts/portfolio.py單一 CLI:scan、build、verify、all、--self-test。使用標準函式庫及可選的 Pillow。
references/content-spec.md基於研究的內容規則、領域區分、圖片政策及來源網址。在變更欄位定義或模板之前,請先載入。
references/config-schema.md完整的 projects.json 結構定義、欄位含義以及何謂來源。
assets/template.html淺色主題響應式模板,包含兩種模式。僅替換 {{TOKEN}} 佔位符;不要為了追求某種外觀而改寫 CSS。
assets/projects.sample.json一個明確標示為 DEMO 的設定檔。切勿將其作為使用者的真實作品集送出。

相關技能