<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    <title>Agent Skills｜林鼎淵 Dean Lin</title>
    <link>https://deanlin.net/tags/agent-skills/</link>
    <image><url>https://deanlin.net/images/author_hu_aa256fc934e9a932.jpg</url><title>Agent Skills｜林鼎淵 Dean Lin</title><link>https://deanlin.net/tags/agent-skills/</link><width>144</width><height>144</height></image>
    <description>林鼎淵（Dean Lin）的部落格：生成式 AI 企業內訓講師、外商資安公司軟體專家、7 本書作者。400 多篇文章用白話分享生成式 AI 實戰、Claude Code 與 Vibe Coding 教學、團隊合作與職場成長。</description>
    <generator>Hugo</generator>
    <language>zh-tw</language>
    <copyright>© 2020–2026 林鼎淵 Dean Lin</copyright>
    <lastBuildDate>Wed, 05 Aug 2026 21:54:25 +0800</lastBuildDate>
    <atom:link href="https://deanlin.net/tags/agent-skills/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>【Manus Skill 技能教學】教會 AI 一次，他永遠記得！讓 AI Agent 自動完成你的工作流</title>
      <link>https://deanlin.net/blog/202608/manus-skills/</link>
      <pubDate>Wed, 05 Aug 2026 21:54:25 +0800</pubDate>
      <guid>https://deanlin.net/blog/202608/manus-skills/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>AI 實戰</category>
      <description>最珍貴的不是別人的 Prompt，而是你打磨成果的流程</description>
      <media:content url="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-og_hu_bfc3197808ad41c0.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<p>今天想跟大家分享 Manus 的技能（Skill）如何幫我們解決職場以及 AI 使用的痛點。</p>
<figure class="figure"><img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-01.webp" width="1400" height="788" alt="【Manus Skill 技能教學】教會 AI 一次，他永遠記得！讓 AI Agent 自動完成你的工作流（圖 1）" fetchpriority="high" decoding="async">
  <figcaption><a href="https://youtu.be/lKiwb381mfU">https://youtu.be/lKiwb381mfU</a></figcaption>
</figure>

<h3 id="-痛點缺乏教育訓練">痛點：缺乏教育訓練<a class="h-anchor" href="#-%e7%97%9b%e9%bb%9e%e7%bc%ba%e4%b9%8f%e6%95%99%e8%82%b2%e8%a8%93%e7%b7%b4" aria-label="這個段落的連結"></a></h3>
<p>首先是新人的教育訓練。</p>
<p>回想一下，當我們剛入職時，是不是需要公司前輩的帶領，你才知道<strong>做事的流程、報告的格式、專案的細節</strong>。</p>
<p>但並不是每間公司都有新人教育訓練，有些公司甚至沒有標準作業流程，全靠新人自行摸索。</p>
<p>在這樣的狀況下，會因為每個人對任務的理解不同，導致交付成果的品質差異很大。</p>
<h3 id="-痛點業務沒有代理人">痛點：業務沒有代理人<a class="h-anchor" href="#-%e7%97%9b%e9%bb%9e%e6%a5%ad%e5%8b%99%e6%b2%92%e6%9c%89%e4%bb%a3%e7%90%86%e4%ba%ba" aria-label="這個段落的連結"></a></h3>
<p>再分享一個很多公司的陋習，就是<strong>複雜的業務流程只有某位員工知道</strong>。</p>
<p>這除了導致能者過勞的問題外，還會讓對方請假也不得安寧，因為遇到狀況時沒有代理人能處理。</p>
<p>更慘的是，<strong>如果他一氣之下離職，可能連完整的交接文件都沒有，後續接手的人只能從頭摸索</strong>。</p>
<h3 id="-痛點複製貼上類似的提示詞prompt">痛點：複製貼上類似的提示詞（Prompt）<a class="h-anchor" href="#-%e7%97%9b%e9%bb%9e%e8%a4%87%e8%a3%bd%e8%b2%bc%e4%b8%8a%e9%a1%9e%e4%bc%bc%e7%9a%84%e6%8f%90%e7%a4%ba%e8%a9%9eprompt" aria-label="這個段落的連結"></a></h3>
<p>另外，如果你已經使用了一段時間的 AI，應該會發現自己最常用的提示詞大概就是那幾個。</p>
<p>但這些指令可能<strong>散落在筆記本、Notion，甚至是聊天記錄中</strong>。</p>
<p>真的要用時，可能還<strong>分不清楚哪個才是最後一版</strong>，而且還需要根據不同主題調整提示詞細節。</p>
<h3 id="-技能給-ai-的-sop-手冊">技能＝給 AI 的 SOP 手冊<a class="h-anchor" href="#-%e6%8a%80%e8%83%bd%e7%b5%a6-ai-%e7%9a%84-sop-%e6%89%8b%e5%86%8a" aria-label="這個段落的連結"></a></h3>
<p>如果這些痛點讓你產生共鳴，那一定不能錯過今天 Manus 技能（Skill）的實戰教學。</p>
<blockquote class="pullquote"><p>Skill 可以把我們驗證過可行的流程，變成 AI 能參考執行的 SOP 手冊。</p>
</blockquote>
<p><strong>教會 AI 一次，它永遠記得，未來遇到類似任務，它就知道如何應對。</strong></p>
<p>這樣只要把公司做事的流程、報告的格式、專案要注意的細節設計成技能，新人就能在更短時間上手、交付的成果也會更穩定。</p>
<p>另外，複雜的業務流程也可以封裝成技能，讓同事可以在更短時間上手。</p>
<p>就算有人請假、甚至離職，任務也不會壓在同個人身上。</p>
<blockquote>
<p>完整的 Demo，可以觀看 YT 喔 👉</p>
<p>對 AI 應用感興趣的朋友，歡迎按下訂閱按鈕，未來我計畫分享一系列 AI 工具的應用教學。</p>
</blockquote>
<div class="yt" data-yt="lKiwb381mfU" data-title="【Manus Skill 技能教學】教會 AI 一次，他永遠記得！讓 AI Agent 自動完成你的工作流">
  <a class="yt-link" href="https://www.youtube.com/watch?v=lKiwb381mfU" target="_blank" rel="noopener" aria-label="播放影片：【Manus Skill 技能教學】教會 AI 一次，他永遠記得！讓 AI Agent 自動完成你的工作流">
    <img src="https://i.ytimg.com/vi/lKiwb381mfU/hqdefault.jpg" alt="" width="480" height="360" loading="lazy" decoding="async">
    <span class="yt-play" aria-hidden="true"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M8 5.2v13.6L19 12z"/></svg></span>
    <span class="yt-title">【Manus Skill 技能教學】教會 AI 一次，他永遠記得！讓 AI Agent 自動完成你的工作流</span>
  </a>
</div>

<ul>
<li>🔗<a href="https://manus.im/login?code=9EZQALE1FISTXZP"> Manus 邀請連結（多送 500 積分）</a></li>
<li>🎁 <a href="https://manus.im/redeem?c=E29T7A48">點擊連結可免費領取 Manus 1,000 積分（名額有限）</a></li>
</ul>
<h3 id="-文章大綱">文章大綱<a class="h-anchor" href="#-%e6%96%87%e7%ab%a0%e5%a4%a7%e7%b6%b1" aria-label="這個段落的連結"></a></h3>
<ol>
<li>白話文建立第一個技能</li>
<li>把對話流程彙整成技能</li>
<li>搭配連接器存進 Notion</li>
<li>分享驗證過的技能，匯入實用的技能</li>
<li>技能運作原理，個人使用心得</li>
</ol>
<p>影片使用的 AI 工具是 <a href="https://manus.im/">Manus</a>，如果你是第一次接觸，我過去有做一期影片帶大家掌握 <a href="https://manus.im/">Manus</a> 的基礎操作：<a href="https://youtu.be/P4dO-vsiE1Q">https://youtu.be/P4dO-vsiE1Q</a></p>
<hr>
<h2 class="h-nomark" id="-用白話文建立第一個技能">① 用白話文建立第一個技能<a class="h-anchor" href="#-%e7%94%a8%e7%99%bd%e8%a9%b1%e6%96%87%e5%bb%ba%e7%ab%8b%e7%ac%ac%e4%b8%80%e5%80%8b%e6%8a%80%e8%83%bd" aria-label="這個段落的連結"></a></h2>
<h3 id="-瀏覽預設技能">瀏覽預設技能<a class="h-anchor" href="#-%e7%80%8f%e8%a6%bd%e9%a0%90%e8%a8%ad%e6%8a%80%e8%83%bd" aria-label="這個段落的連結"></a></h3>
<p>這邊我先帶大家看一下 Manus 有哪些預設技能，先點擊左側頭像，選擇設定。</p>
<p>然後選擇技能，這邊你會看到 Manus 根據不同情境，已經幫我們建立好許多實用技能了。</p>
<p><img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-02.webp" width="1190" height="697" alt="瀏覽預設技能（圖 2）" loading="lazy" decoding="async"></p>
<h3 id="-建立技能的方式">建立技能的方式<a class="h-anchor" href="#-%e5%bb%ba%e7%ab%8b%e6%8a%80%e8%83%bd%e7%9a%84%e6%96%b9%e5%bc%8f" aria-label="這個段落的連結"></a></h3>
<p>除了可以使用預設技能外，我們也可以根據需求打造專屬技能。</p>
<p>Manus 有提供幾種方式，最簡單的方案是「使用 Manus 建立技能」，你只要白話說出自己的需求，它會透過內建的技能創作者（skill-creator）來協助建立。</p>
<p>另外也可以上傳別人建立好的技能，或直接從 GitHub 匯入技能；這部分在第四小節會跟大家詳細介紹。</p>
<p>而最下面的「從官方技能添加」這塊，其實就是從預設技能中，打開你需要的就能使用了。</p>
<p><img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-03.webp" width="1190" height="697" alt="建立技能的方式（圖 3）" loading="lazy" decoding="async"></p>
<h3 id="-建立第一個技能">建立第一個技能<a class="h-anchor" href="#-%e5%bb%ba%e7%ab%8b%e7%ac%ac%e4%b8%80%e5%80%8b%e6%8a%80%e8%83%bd" aria-label="這個段落的連結"></a></h3>
<p>這邊我先以「使用 Manus 建立技能」給大家做個示範，點擊後，Manus 會有一個模板提示詞，點擊送出後，會看到一個技能應該具備哪些元素。</p>
<p>這邊分享我平常高頻率使用的技能，現在大家每天都會收到海量的資訊，但靠人力一一確認這這些資訊是否有用真的太累了。</p>
<p>所以我要帶大家建立一個「萃取網頁重點」的技能，把滑到的好內容分享給 AI，讓他變成更好吸收的重點，這邊我先貼上提示詞：</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-markdown" data-lang="markdown"><span style="display:flex;"><span>技能名稱: web-digest
</span></span><span style="display:flex;"><span>當使用者貼上網址，沒有明確要求時，用瀏覽器打開網頁，先等 10 秒確保網頁渲染完成，先判斷內容類型，再萃取出該類型最重要的資訊
</span></span><span style="display:flex;"><span>內容類型與萃取重點：
</span></span><span style="display:flex;"><span><span style="color:#ff7b72">-</span> [知識]：核心觀念、使用方式（具體怎麼做）、可行性評估（適合誰、前置條件、限制）
</span></span><span style="display:flex;"><span><span style="color:#ff7b72">-</span> [美食]：店名、地址、料理類型、價位、評價與推薦菜色、注意事項（ex: 要排隊、需訂位）
</span></span><span style="display:flex;"><span><span style="color:#ff7b72">-</span> [其他]：不屬於上面三類時使用，標註內容主題後，條列 3~5 個重點
</span></span><span style="display:flex;"><span>輸出格式：
</span></span><span style="display:flex;"><span><span style="color:#ff7b72">-</span> 開頭固定為：內容類型、來源標題、一句話總結，接著列出該類型的萃取重點
</span></span><span style="display:flex;"><span><span style="color:#ff7b72">-</span> 使用繁體中文，條列清楚，方便快速閱讀
</span></span><span style="display:flex;"><span><span style="color:#ff7b72">-</span> 直接輸出整理結果，不需要額外解釋
</span></span><span style="display:flex;"><span>務必遵守：
</span></span><span style="display:flex;"><span><span style="color:#ff7b72">-</span> 只根據網頁實際內容整理；遇到打不開、需要登入、付費牆的頁面，直接告訴我，不要看標題腦補
</span></span><span style="display:flex;"><span><span style="color:#ff7b72">-</span> 原文沒提到的資訊（ex: 地址、營業時間、價格）就留空，不要自己編
</span></span></code></pre></div><p>這段提示詞的 3 個設計重點：</p>
<ul>
<li><strong>第一，預先設計好選項</strong>，只讓 AI 在範圍內執行，像「內容類型」我就先定義了知識、美食這些選項；同時我想好「都不符合」時，有「其他」當保底，這樣分類才不會失控。</li>
<li><strong>第二，格式由我來定</strong>，不讓 AI 自由發想。因為技能要的是「穩定重複」，比如美食我就是要地址、類型、評價，如果每次萃取的重點都長得不一樣，那就稱不上 SOP 了。</li>
<li><strong>第三，也是這個技能的保險</strong>，打不開的網頁要直說，沒提到的資訊要留空。因為 AI 最常見的問題，就是網頁根本打不開，卻看著標題腦補一篇文章。你想想，要是他幫美食編出一個地址，你可能導航到現場才發現沒有這間店。</li>
</ul>
<h3 id="-初步瞭解技能結構">初步瞭解技能結構<a class="h-anchor" href="#-%e5%88%9d%e6%ad%a5%e7%9e%ad%e8%a7%a3%e6%8a%80%e8%83%bd%e7%b5%90%e6%a7%8b" aria-label="這個段落的連結"></a></h3>
<p>稍等一段時間，技能就生成出來了：</p>
<p><img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-04.webp" width="1190" height="697" alt="初步瞭解技能結構（圖 4）" loading="lazy" decoding="async"></p>
<p>我們把它點開來看看，你會發現有一個 SKILL.md，這就是技能的本體；上方的 YAML 是所謂的元數據（Meta Data）。</p>
<p><img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-05.webp" width="1190" height="697" alt="初步瞭解技能結構（圖 5）" loading="lazy" decoding="async"></p>
<ul>
<li><strong>name</strong>：我們指定的 web-digest</li>
<li><strong>description</strong>：技能描述，如果與 AI 對話的內容有匹配到，他就會自動觸發；觸發後，AI 才會閱讀下面的文字內容，也就是我們規範給 AI 參考的執行 SOP。</li>
</ul>
<p>確認符合預期後，點擊「新增到我的技能」，之後我們在對話中就可以使用了。</p>
<p>未來想找已儲存的技能，可以點擊左下角頭像，選擇設定，打開側邊欄的技能後往下滑，在個人的部分，就可以看到我們剛剛新增的 web-digest 技能嚕。</p>
<p><img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-06.webp" width="1190" height="697" alt="初步瞭解技能結構（圖 6）" loading="lazy" decoding="async"></p>
<blockquote>
<p>這邊分享一個心得，AI 設計的技能，有時會有過度設計、冗贅資訊的問題；大家可以根據實戰結果調整細節，不一定要照單全收。</p>
</blockquote>
<h3 id="-驗證技能--被動觸發">驗證技能 — 被動觸發<a class="h-anchor" href="#-%e9%a9%97%e8%ad%89%e6%8a%80%e8%83%bd--%e8%a2%ab%e5%8b%95%e8%a7%b8%e7%99%bc" aria-label="這個段落的連結"></a></h3>
<p>在技能建立後，提醒大家一定要實際驗證。</p>
<p>技能的觸發方式有兩種，第一種是用「意圖、關鍵字」被動觸發，這邊開一個新對話，貼上自己部落格的文章網址後直接送出。</p>
<pre tabindex="0"><code>https://deanlin.net/blog/202507/afteroffice1-15-years-one-book/
</code></pre><p>你可以看到，儘管我沒有輸入技能名稱，但如果 Manus 判斷這個需求與技能的描述匹配，就會自動套用了。</p>
<p><img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-07.webp" width="1190" height="697" alt="驗證技能 — 被動觸發（圖 7）" loading="lazy" decoding="async"></p>
<p>它正確判斷這是「知識」類型，按照我規定的格式，萃取出核心觀念、使用方式與可行性評估。</p>
<p><img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-08.webp" width="1190" height="697" alt="驗證技能 — 被動觸發（圖 8）" loading="lazy" decoding="async"></p>
<blockquote>
<p>我會建議大家盡可能把技能得「描述」，讓他可以被動觸發，因為技能會越來越多，要把每個名稱記住太困難了。</p>
</blockquote>
<h3 id="-驗證技能--主動觸發">驗證技能 — 主動觸發<a class="h-anchor" href="#-%e9%a9%97%e8%ad%89%e6%8a%80%e8%83%bd--%e4%b8%bb%e5%8b%95%e8%a7%b8%e7%99%bc" aria-label="這個段落的連結"></a></h3>
<p>但如果你希望主動觸發，那可以輸入斜線加技能名稱，開一個新對話窗，這次我改貼一篇 Threads 的美食文：</p>
<pre tabindex="0"><code>/web-digest 
https://www.threads.com/@deb_yaaang/post/Da7BZWvoA6n
</code></pre><p>可以看到它的輸出自動切換成[美食]模板，店名、地址、類型、評價都讀取出來了。</p>
<p><img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-09.webp" width="1190" height="697" alt="驗證技能 — 主動觸發（圖 9）" loading="lazy" decoding="async"></p>
<blockquote>
<p>當你想穩定觸發技能，或是一段對話中綜合多個技能的功能使用時，主動觸發的方式比較穩定。</p>
</blockquote>
<h3 id="-先完成雛形再透過實戰迭代">先完成雛形，再透過實戰迭代<a class="h-anchor" href="#-%e5%85%88%e5%ae%8c%e6%88%90%e9%9b%9b%e5%bd%a2%e5%86%8d%e9%80%8f%e9%81%8e%e5%af%a6%e6%88%b0%e8%bf%ad%e4%bb%a3" aria-label="這個段落的連結"></a></h3>
<p>在成功建立第一個技能後，先幫大家建立一個重要觀念：「<strong>一開始建立的技能，通常是不完美的。</strong>」</p>
<p>在使用過程中，你會發現許多需要優化的細節；比如美食相關的，你或許會希望直接得到 Google Map 連結方便查看。</p>
<p>而這些需求與問題，都可以直接用白話文請 AI 協助優化，比如我這邊可以跟他說：</p>
<pre tabindex="0"><code>我希望 web-digest 這個技能在遇到美食類型時，取得店名後，回傳 Google Map 的完整網址（須確保該網址可以瀏覽）
</code></pre><p>執行後，稍等一段時間，AI 就會完成優化，這邊記得要點擊「更新」，並選擇「更新技能」才會生效喔。</p>
<p><img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-10.webp" width="1190" height="697" alt="先完成雛形，再透過實戰迭代（圖 10）" loading="lazy" decoding="async"></p>
<p>接著我們開一個新對話窗，驗證技能更新是否如預期</p>
<pre tabindex="0"><code>/web-digest 
https://www.threads.com/@deb_yaaang/post/Da7BZWvoA6n
</code></pre><p>這次我們就看到輸出有涵蓋 Google Map 網址了：</p>
<p><img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-11.webp" width="1190" height="697" alt="先完成雛形，再透過實戰迭代（圖 11）" loading="lazy" decoding="async"></p>
<p>透過持續迭代，就能讓技能更貼近你的使用需求，而這就是價值積累的過程。</p>
<hr>
<h2 class="h-nomark" id="-把過去與-ai-對話的流程轉化成重複使用的技能">② 把過去與 AI 對話的流程，轉化成重複使用的技能<a class="h-anchor" href="#-%e6%8a%8a%e9%81%8e%e5%8e%bb%e8%88%87-ai-%e5%b0%8d%e8%a9%b1%e7%9a%84%e6%b5%81%e7%a8%8b%e8%bd%89%e5%8c%96%e6%88%90%e9%87%8d%e8%a4%87%e4%bd%bf%e7%94%a8%e7%9a%84%e6%8a%80%e8%83%bd" aria-label="這個段落的連結"></a></h2>
<p>用 AI 一段時間後你會發現，好的結果往往要經過多輪對話才能得到。</p>
<p><strong>但在得到期待的成果後，大部分的人都會直接關閉視窗，我覺得非常可惜。</strong></p>
<p>因為這樣下次你還要從零開始，但如果把引導 AI 的過程設計成技能，未來就可以有更高的起點。</p>
<p>這邊我用「提案企劃」當示範給大家看。</p>
<p>在技能推出來以前，如果我想與 AI 協作建立一份提案企劃，會需要與它討論半小時以上，來回執行 7 段固定的提示詞，當時我覺得自己真的比 AI 更像機器人。</p>
<p>這邊我先展示當年 7 個步驟是如何設計的：</p>
<h3 id="step-1優化提示詞">STEP 1：優化提示詞<a class="h-anchor" href="#step-1%e5%84%aa%e5%8c%96%e6%8f%90%e7%a4%ba%e8%a9%9e" aria-label="這個段落的連結"></a></h3>
<p>一開始先簡單說明想完成的目標，比如給台灣新創行銷公司導入 AI的提案企劃；然後讓 AI 幫我優化提示詞，這可以讓需求描述更加精確。</p>
<pre tabindex="0"><code>我準備製作一個[給台灣新創行銷公司導入 AI]的提案企劃

以上面的 Prompt 為基礎，我要提供怎麼樣的 Prompt 可以得到較好回答？
請說明為什麼，並在最後舉出能得到專業回覆的 Prompt 範例。
</code></pre><p>接著 Manus 就給了我們一些建議，此時你可以選擇符合自己需求的複製下來，但不要急著送出。</p>
<p><img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-12.webp" width="1190" height="697" alt="STEP 1：優化提示詞（圖 12）" loading="lazy" decoding="async"></p>
<h3 id="step-2讓-ai-反問">STEP 2：讓 AI 反問<a class="h-anchor" href="#step-2%e8%ae%93-ai-%e5%8f%8d%e5%95%8f" aria-label="這個段落的連結"></a></h3>
<p>因為接下來我要讓 AI 反問，儘管提示詞已經優化過一次，但往往還有許多沒考慮到的地方。</p>
<pre tabindex="0"><code>```
貼上複製的 Prompt
```

在用這個 Prompt[撰寫提案企劃前]有任何問題，請先詢問我，不要直接產生。
</code></pre><p><img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-13.webp" width="1190" height="697" alt="STEP 2：讓 AI 反問（圖 13）" loading="lazy" decoding="async"></p>
<p>像這邊就被問了許多實務上細節，我建議大家根據問題自行填寫，這樣結果才會更符合自己的需求。</p>
<h3 id="step-3補齊資訊">STEP 3：補齊資訊<a class="h-anchor" href="#step-3%e8%a3%9c%e9%bd%8a%e8%b3%87%e8%a8%8a" aria-label="這個段落的連結"></a></h3>
<p>但這邊為了是示範，所以我讓 AI 扮演顧問的角色，用自問自答的方式補齊資訊</p>
<pre tabindex="0"><code>請扮演對這個領域非常熟悉的[產業顧問]，針對提出的問題給出具體詳細的回覆、不要逃避問題。
</code></pre><h3 id="step-4利害關係人">STEP 4：利害關係人<a class="h-anchor" href="#step-4%e5%88%a9%e5%ae%b3%e9%97%9c%e4%bf%82%e4%ba%ba" aria-label="這個段落的連結"></a></h3>
<p>在取得詳細資訊的狀態下，我們可以請 AI 從利害關係人的角度來思考企劃可能存在哪些問題。</p>
<p>因為如果想讓一份企劃執行起來是否順利，不能只考量到自己：</p>
<pre tabindex="0"><code>請分析這份企劃最重要的[3]個利害關係人，從他們的角度和利益出發，詳細說明對這份企劃有哪些具體的[意見、建議、憂慮]？
</code></pre><p><img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-14.webp" width="1190" height="697" alt="STEP 4：利害關係人（圖 14）" loading="lazy" decoding="async"></p>
<h3 id="step-5彙整建議生成企劃">STEP 5：彙整建議生成企劃<a class="h-anchor" href="#step-5%e5%bd%99%e6%95%b4%e5%bb%ba%e8%ad%b0%e7%94%9f%e6%88%90%e4%bc%81%e5%8a%83" aria-label="這個段落的連結"></a></h3>
<p>那在得到利害關係人的建議後，我們就能生成初版的企劃了：</p>
<pre tabindex="0"><code>請扮演[提案企劃]的專家，了解[利害關係人]的想法後，以最專業的角度撰寫企劃，設計出更完善、可行的方案。
</code></pre><p><img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-15.webp" width="1190" height="697" alt="STEP 5：彙整建議生成企劃（圖 15）" loading="lazy" decoding="async"></p>
<h3 id="step-6扮演對手挑毛病">STEP 6：扮演對手挑毛病<a class="h-anchor" href="#step-6%e6%89%ae%e6%bc%94%e5%b0%8d%e6%89%8b%e6%8c%91%e6%af%9b%e7%97%85" aria-label="這個段落的連結"></a></h3>
<p>在得到第一版的企劃後，我通常不會直接採納，而是讓 AI 扮演競爭者的角色來挑毛病，這樣你會得到更全面的觀點：</p>
<pre tabindex="0"><code>你是這份提案企劃的[競爭者]，盡可能列出這份企劃的不足之處。
並說明自己可以做到哪些更完善、可行的方案。
</code></pre><p><img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-16.webp" width="1190" height="697" alt="STEP 6：扮演對手挑毛病（圖 16）" loading="lazy" decoding="async"></p>
<p>像這邊你可以看到，從競爭者的角度來看，我們有還有許多細節可以優化。</p>
<h3 id="step-7生成最終版本">STEP 7：生成最終版本<a class="h-anchor" href="#step-7%e7%94%9f%e6%88%90%e6%9c%80%e7%b5%82%e7%89%88%e6%9c%ac" aria-label="這個段落的連結"></a></h3>
<p>在了解競爭者的想法後，最後我們在讓 AI 扮演提案企劃的專家，重新完善這份企劃。</p>
<pre tabindex="0"><code>請扮演[提案企劃]的專家，在了解[不足之處、更完善的方案後]後，以最專業的角度，重新完善這份企劃。
</code></pre><p>在經歷以上繁瑣來回對話的步驟後，這份企劃的品質，以及考量到的面向，會遠遠比你只跟 AI 説「幫我寫提案企劃」好非常多。</p>
<p><img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-17.webp" width="1190" height="697" alt="STEP 7：生成最終版本（圖 17）" loading="lazy" decoding="async"></p>
<h3 id="-把對話彙整成技能">把對話彙整成技能<a class="h-anchor" href="#-%e6%8a%8a%e5%b0%8d%e8%a9%b1%e5%bd%99%e6%95%b4%e6%88%90%e6%8a%80%e8%83%bd" aria-label="這個段落的連結"></a></h3>
<p>但如果你每次寫企劃都要反覆貼上這些提示詞，那也太累了吧。</p>
<p>所以在確認最後的版本符合自己的期待後，你可以直接請 AI 把它設計成可以重複使用的技能：</p>
<pre tabindex="0"><code>/skill-creator
請根據以下要求分析上方對話內容後，整理成可重複使用的技能，名稱為[proposal-refiner]

1. 起初怎麼提問
2. 中間如何引導與調整
3. 最終是如何得出這個成果的
</code></pre><p>稍等一段時間，這個技能就生成了；我們先把它「新增到我的技能」。</p>
<p><img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-18.webp" width="1190" height="697" alt="把對話彙整成技能（圖 18）" loading="lazy" decoding="async"></p>
<h3 id="-驗證技能">驗證技能<a class="h-anchor" href="#-%e9%a9%97%e8%ad%89%e6%8a%80%e8%83%bd" aria-label="這個段落的連結"></a></h3>
<p>接下來開一個新的對話窗，驗證這個技能是否真的讓我們可以用一句話就能觸發完整流程：</p>
<pre tabindex="0"><code>/proposal-refiner 我要做一份[給連鎖餐飲品牌導入 AI 點餐分析]的提案企劃，幫我做到專業可行的程度。
</code></pre><p>這邊你會看到在觸發這個 Skill 後，AI 不會預設立場直接產生企劃，而是先拋出問題詢問我們細節。</p>
<p><img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-19.webp" width="1190" height="697" alt="驗證技能（圖 19）" loading="lazy" decoding="async"></p>
<p>這樣才能確保最終的結果盡可能貼近需求，這邊我一樣讓 AI 來模擬回覆</p>
<pre tabindex="0"><code>請扮演對這個領域非常熟悉的[產業顧問]，針對提出的問題給出具體詳細的回覆、不要逃避問題。
</code></pre><p>回覆後，稍等一段時間，AI 就按造技能給的步驟，自動走完整個流程；而且每個步驟都有留下對應的文件，讓我們可以確認當時的決策。</p>
<p><img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-20.webp" width="1190" height="697" alt="驗證技能（圖 20）" loading="lazy" decoding="async"></p>
<p>經過這次驗證，我們確認了兩件事：</p>
<ul>
<li>第一，AI 會根據主題確認細節再執行，而非用腦補的方式直接給出方案</li>
<li>第二，這個技能，換一個主題也依舊可以使用，初步確認 SOP 是可行的</li>
</ul>
<h3 id="-最珍貴的是打磨成果的流程">最珍貴的是打磨成果的流程<a class="h-anchor" href="#-%e6%9c%80%e7%8f%8d%e8%b2%b4%e7%9a%84%e6%98%af%e6%89%93%e7%a3%a8%e6%88%90%e6%9e%9c%e7%9a%84%e6%b5%81%e7%a8%8b" aria-label="這個段落的連結"></a></h3>
<p>我之所以會分享這個將對話彙整成技能的流程，<strong>就是想提醒大家，最珍貴的並不是別人的提示詞，而是你與 AI 對話打磨成果的過程。</strong></p>
<p>網路上的提示詞跟技能的資源很多，但要能讓轉化成匹配自己工作流的技能，價值才有辦法持續累積。</p>
<hr>
<h2 class="h-nomark" id="-搭配連接器把萃取的重點存進-notion-知識庫">③ 搭配連接器，把萃取的重點存進 Notion 知識庫<a class="h-anchor" href="#-%e6%90%ad%e9%85%8d%e9%80%a3%e6%8e%a5%e5%99%a8%e6%8a%8a%e8%90%83%e5%8f%96%e7%9a%84%e9%87%8d%e9%bb%9e%e5%ad%98%e9%80%b2-notion-%e7%9f%a5%e8%ad%98%e5%ba%ab" aria-label="這個段落的連結"></a></h2>
<p>前兩個案例，我們製作的技能都是在「整理與產出」。</p>
<p>接下來我要跟大家示範一個進階用法，讓技能搭配連接器，讓 AI 幫你「自動儲存資訊」。</p>
<p><a href="https://youtu.be/gNVkDO6-7Jo">上一集我們透過連接器</a>，讓 Manus 可以直接操作 Gmail、Google Calendar 與 Notion 這些外部工具。</p>
<p>接下來，我就會透過實戰，把兩者組合起來。</p>
<h3 id="-痛點分析">痛點分析<a class="h-anchor" href="#-%e7%97%9b%e9%bb%9e%e5%88%86%e6%9e%90" aria-label="這個段落的連結"></a></h3>
<p>還記得我們在第一個案例，設計了分析網址內容的技能嗎？</p>
<p>用一段時間後你會發現一個問題，那就是我們把內容萃取出來後，對話一關就不見了；<strong>這樣不管「知識」還是「美食」都是一次性的資訊。</strong></p>
<p>所以接下來，我們要優化這個技能，讓他把萃取完的重點自動儲存到 Notion，變成可以隨時查找的長期記憶；但在優化這個技能前，我們有兩件事要做。</p>
<h3 class="h-nomark" id="1-連上-notion-連接器">1. 連上 Notion 連接器<a class="h-anchor" href="#1-%e9%80%a3%e4%b8%8a-notion-%e9%80%a3%e6%8e%a5%e5%99%a8" aria-label="這個段落的連結"></a></h3>
<p>點擊左下角頭像，選擇設定，然後在側邊欄選擇「連接器」；進入瀏覽連接器，搜尋 Notion，確認已經建立連接。</p>
<p><img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-21.webp" width="1190" height="697" alt="1. 連上 Notion 連接器（圖 21）" loading="lazy" decoding="async"></p>
<h3 class="h-nomark" id="2-準備知識庫範本">2. 準備知識庫範本<a class="h-anchor" href="#2-%e6%ba%96%e5%82%99%e7%9f%a5%e8%ad%98%e5%ba%ab%e7%af%84%e6%9c%ac" aria-label="這個段落的連結"></a></h3>
<p>接下來，我們要準備給 Manus 寫入的 Notion 知識庫。</p>
<p>你可以請 AI 幫你設計，或直接複製我的模板，範例連結我放在影片描述欄，點擊右上角的「建立副本（Duplicate）」，就會存進你自己的 Notion。</p>
<p><a href="https://kaput-lord-cf7.notion.site/manus-3a71a22ceed9812f90abf2172450478a">https://kaput-lord-cf7.notion.site/manus-3a71a22ceed9812f90abf2172450478a</a></p>
<p><img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-22.webp" width="1190" height="697" alt="2. 準備知識庫範本（圖 22）" loading="lazy" decoding="async"></p>
<h3 id="-升級-web-digest-技能">升級 web-digest 技能<a class="h-anchor" href="#-%e5%8d%87%e7%b4%9a-web-digest-%e6%8a%80%e8%83%bd" aria-label="這個段落的連結"></a></h3>
<p>接著我們直接請 AI 幫忙升級：</p>
<pre tabindex="0"><code>請幫我升級 [web-digest] 技能，在原本的流程後面加上：
1. 萃取完成後，先確認是否已經與 Notion 建立好連接
2. 若有建立連接，確認 Notion 是否已經建立好「manus-知識庫」頁面
3. 找到 manus 知識庫頁面後，根據類型於「知識庫、美食庫、其他收藏」頁面下新增資訊，需包含「建立日期、來源網址」
4. 最後回應要包含 Notion 頁面連結
</code></pre><p>稍等一段時間後，這個技能就完成了升級，不只有分析網址內容的功能，還可以直接儲存到 Notion 知識庫。</p>
<p>記得要點擊「更新」，並選擇「更新技能」才會生效喔。</p>
<h3 id="-驗證工具">驗證工具<a class="h-anchor" href="#-%e9%a9%97%e8%ad%89%e5%b7%a5%e5%85%b7" aria-label="這個段落的連結"></a></h3>
<p>在技能升級後，我們開一個新的聊天室來實測一下；我貼上一篇 Threads 的文章連結。</p>
<pre tabindex="0"><code>/web-digest 
https://www.threads.com/@_qqzy/post/Da1eQNcE33I
</code></pre><p>稍等一段時間，AI 判斷出這篇文章是[美食]類型，並把店名、地址、類型、評價全部讀取出來。</p>
<p><img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-23.webp" width="1190" height="697" alt="驗證工具（圖 23）" loading="lazy" decoding="async"></p>
<p>並且自動儲存到 Notion 當中，這邊我們點擊連結，可以看到有成功紀錄，欄位也都有填對。</p>
<p><img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-24.webp" width="1190" height="697" alt="驗證工具（圖 24）" loading="lazy" decoding="async"></p>
<p>第一次執行時，會花比較久的時間，這因為 AI 還不確定工具如何使用，所以在完成後，你可以跟他說</p>
<pre tabindex="0"><code>根據剛剛成功操作 Notion 的步驟，請幫我優化 [web-digest] 技能
</code></pre><p>這樣未來使用這個 Skill 時，會更有效率。</p>
<h3 id="-自動成長的知識庫">自動成長的知識庫<a class="h-anchor" href="#-%e8%87%aa%e5%8b%95%e6%88%90%e9%95%b7%e7%9a%84%e7%9f%a5%e8%ad%98%e5%ba%ab" aria-label="這個段落的連結"></a></h3>
<p>而這個知識庫會隨著時間持續成長，就像我用來記錄 AI 技術的知識庫已經成長的非常大了。</p>
<p>當然知識的價值並不在於紀錄，而是後續的使用；還記得上一集我們把 Notion 變成可以問答的 AI 嗎？</p>
<p>現在我們已經把這條路從讀取、寫入、彙整全部打通了，比如我們可以詢問</p>
<pre tabindex="0"><code>列出存在 Notion [manus-知識庫] 的北部下午茶美食資訊
</code></pre><p>儘管我們輸入的查詢條件很模糊，但最後 Manus 還是有成功查詢到我們剛剛儲存進去的資訊了。</p>
<p><img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-25.webp" width="1190" height="697" alt="自動成長的知識庫（圖 25）" loading="lazy" decoding="async"></p>
<hr>
<h2 class="h-nomark" id="-分享驗證過的技能與匯入實用的技能">④ 分享驗證過的技能，與匯入實用的技能<a class="h-anchor" href="#-%e5%88%86%e4%ba%ab%e9%a9%97%e8%ad%89%e9%81%8e%e7%9a%84%e6%8a%80%e8%83%bd%e8%88%87%e5%8c%af%e5%85%a5%e5%af%a6%e7%94%a8%e7%9a%84%e6%8a%80%e8%83%bd" aria-label="這個段落的連結"></a></h2>
<p>如果跟著教學操作，你已經建立了 web-digest 跟 proposal-refiner 兩個技能了。我覺得技能最棒的地方，就是你可以把它分享給其他人使用。</p>
<h3 id="-分享技能">分享技能<a class="h-anchor" href="#-%e5%88%86%e4%ba%ab%e6%8a%80%e8%83%bd" aria-label="這個段落的連結"></a></h3>
<p>這邊我們點擊左下的頭像，選擇設定，點擊技能的分頁；如果想分享自己建立的技能給朋友，點擊目標技能後，選擇右上角的「…」，按下載就會得到一個「xxx.zip」格式的壓縮檔。</p>
<p><img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-26.webp" width="1190" height="697" alt="分享技能（圖 26）" loading="lazy" decoding="async"></p>
<p>為了測試匯入，我們先把這個技能刪除；然後點擊右上角的「建立」，選擇上傳技能，匯入剛剛的「xxx.zip」壓縮檔，就可以看到技能重新建立嚕～</p>
<p><img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-27.webp" width="1190" height="697" alt="分享技能（圖 27）" loading="lazy" decoding="async"></p>
<p>了解分享技能的方式後，其實就代表資深員工的經驗，終於可以用檔案的形式交接，而不是口耳相傳。</p>
<p><strong>前輩驗證過的流程，可以直接發給整個部門，讓大家產出品質更一致的成果。</strong></p>
<p><strong>而新人報到，在匯入幾個技能後，就能更快上手公司的業務。</strong></p>
<p>這就幫我們解決開頭提到的痛點，流程不會只有某位員工知道，並且有了技能後，我們也不再需要重複貼上提示詞。</p>
<h3 id="-匯入第三方技能">匯入第三方技能<a class="h-anchor" href="#-%e5%8c%af%e5%85%a5%e7%ac%ac%e4%b8%89%e6%96%b9%e6%8a%80%e8%83%bd" aria-label="這個段落的連結"></a></h3>
<p>最後再跟大家示範一個匯入第三方技能的操作。</p>
<p>網路上有很多人分享自己建立好的技能，這邊我就跟大家分享一個自己設計 IG 圖卡的技能。</p>
<p>我把它放在 GitHub 這個平台上面，想嘗試的朋友我有把連結放在影片資訊欄，歡迎路過幫我按個 Star。</p>
<a class="linkcard" href="https://github.com/dean9703111/ig-card-generator" target="_blank" rel="noopener">
  <span class="lc-body">
    <span class="lc-title">GitHub - dean9703111/ig-card-generator: Agent Skill：把文章／筆記／逐字稿提煉成 IG 輪播知識圖卡。Markdown DSL → lint 把關…</span>
    <span class="lc-desc">Agent Skill：把文章／筆記／逐字稿提煉成 IG 輪播知識圖卡。Markdown DSL → lint 把關 → Puppeteer 產出 1080×1350 PNG，深淺主題一次搞定 …</span>
    <span class="lc-site"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M7 17 17 7M8.5 7H17v8.5"/></svg>github.com</span>
  </span>
  <span class="lc-thumb">
    <img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-card-01_hu_51a746490e23fb1b.webp" width="320" height="320" alt="" loading="lazy" decoding="async">
  </span>
</a>

<p><img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-28.webp" width="1190" height="697" alt="匯入第三方技能（圖 28）" loading="lazy" decoding="async"></p>
<p>這邊回到 Manus 頁面，我們選擇「從 GitHub 匯入」，然後貼上網址，建立完成後，我們開啟一個對話窗來測試看看。</p>
<pre tabindex="0"><code>/ig-card-generator 替換帳號:deanlin5288

```
今天想跟大家分享 Manus 的技能（Skill）如何幫我們解決職場以及 AI 使用的痛點
### 痛點：缺乏教育訓練
首先是新人的教育訓練
回想一下，當我們剛入職時，是不是需要公司前輩的帶領，你才知道做事的流程、報告的格式、專案的細節。
但並不是每間公司都有新人教育訓練，有些公司甚至沒有標準作業流程，全靠新人自行摸索。
在這樣的狀況下，會因為每個人對任務的理解不同，導致交付成果的品質差異很大。
### 痛點：業務沒有代理人
再來第二大痛點，複雜的業務流程只有某位員工知道
如果某項業務長期倚賴單一員工，那他通常請假也不得安寧，因為遇到狀況時沒有代理人能處理。
更慘的是，如果他一氣之下離職，可能連完整的交接文件都沒有，後續接手的人就只能從頭摸索。
### 痛點：複製貼上類似的提示詞（Prompt）
另外，如果你已經使用了一段時間的 AI
應該會發現自己最常用的提示詞大概就是那幾個
但這些指令可能散落在筆記本、Notion，甚至是聊天記錄中
真的要用時，搞不好還分不清楚哪個才是最後一版，而且還需要根據不同主題調整提示詞細節
### 技能＝給 AI 的 SOP 手冊
如果這些痛點讓你產生共鳴，那一定不能錯過今天 Manus 技能（Skill）的實戰教學。
他可以把我們驗證過可行的流程，變成 AI 能參考執行的 SOP 手冊。
教會 AI 一次，它永遠記得，未來遇到類似的任務，就知道如何應對。
這樣只要把公司做事的流程、報告的格式、專案要注意的細節設計成技能，新人就能在更短時間上手、交付的成果也會更穩定
另外，複雜的業務流程也可以封裝成技能，這樣同事可以在更短時間上手成為代理人
就算有人請假、甚至離職，任務也不會壓在同個人身上
```
</code></pre><p>在最上面的地方，我是放上自己的 IG 帳號，而下面就是今天影片開頭的逐字稿；稍等一段時間，我們就可以看到圖卡生成出來了！</p>
<p><img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-29.webp" width="1190" height="697" alt="匯入第三方技能（圖 29）" loading="lazy" decoding="async"></p>
<h3 id="-資安提醒">資安提醒<a class="h-anchor" href="#-%e8%b3%87%e5%ae%89%e6%8f%90%e9%86%92" aria-label="這個段落的連結"></a></h3>
<p>不過也趁這個機會提醒一下大家，匯入第三方的技能是有風險的；這邊把視角切回 GitHub，風險來自幾個地方，首先是 SKILL.md。</p>
<p><img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-30.webp" width="1192" height="698" alt="資安提醒（圖 30）" loading="lazy" decoding="async"></p>
<p>如果有心人士在這裡寫一些危險的提示詞，比如將你的一些個人資訊傳到某個網址之類，就可能造成隱私外洩的問題。</p>
<p>另外像這個 Skill 有設計程式腳本（Scripts），這裡也是有操作空間的；所以建議大家如果真的要使用第三方技能。</p>
<p><img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-31.webp" width="1192" height="698" alt="資安提醒（圖 31）" loading="lazy" decoding="async"></p>
<p>可以看一下這個發佈這個技能的人是否可信，以及專案獲得的 Star 數量來初步判斷。</p>
<hr>
<h2 class="h-nomark" id="-技能原理個人使用心得">⑤ 技能原理，個人使用心得<a class="h-anchor" href="#-%e6%8a%80%e8%83%bd%e5%8e%9f%e7%90%86%e5%80%8b%e4%ba%ba%e4%bd%bf%e7%94%a8%e5%bf%83%e5%be%97" aria-label="這個段落的連結"></a></h2>
<p>最後跟大家分享自己這段時間的實戰心得</p>
<h3 id="-增加觸發成功率">增加觸發成功率<a class="h-anchor" href="#-%e5%a2%9e%e5%8a%a0%e8%a7%b8%e7%99%bc%e6%88%90%e5%8a%9f%e7%8e%87" aria-label="這個段落的連結"></a></h3>
<p>首先，把技能建立完成後，如果你沒有使用「/技能名稱」的方式觸發；他可能與到相似情境時也未必觸發，如果想優化他，就需要在「描述」的部分下功夫。</p>
<p><img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-32.webp" width="1192" height="698" alt="增加觸發成功率（圖 32）" loading="lazy" decoding="async"></p>
<blockquote>
<p>描述要寫清楚使用時機與觸發關鍵字，而不是只寫功能。</p>
</blockquote>
<h3 id="-技能不是越多越好">技能不是越多越好<a class="h-anchor" href="#-%e6%8a%80%e8%83%bd%e4%b8%8d%e6%98%af%e8%b6%8a%e5%a4%9a%e8%b6%8a%e5%a5%bd" aria-label="這個段落的連結"></a></h3>
<p>另外，技能並不是裝越多 AI 就越強。</p>
<p>如果安裝了兩個以上功能相近的技能，在沒有明確指定要使用哪一個技能時，AI 可能會隨機觸發。</p>
<p>比如你今天有撰寫文案的需求，與其安裝多個同類型的技能，不如先進行測試，<strong>選擇其中最符合需求的一個，再根據實際使用情況持續優化</strong>。</p>
<h3 id="-搭配排程觸發技能">搭配排程觸發技能<a class="h-anchor" href="#-%e6%90%ad%e9%85%8d%e6%8e%92%e7%a8%8b%e8%a7%b8%e7%99%bc%e6%8a%80%e8%83%bd" aria-label="這個段落的連結"></a></h3>
<p>假使你有需要定時重複執行的任務，可以先讓 Manus 完整執行一次，在確認結果符合預期後，再將它設定到程任務中。</p>
<p>像我就設定了兩個排程，一個是在週一早搜尋 Mail 告訴我這禮拜的行程，另一個則是週末晚上幫我復盤這週儲存到 Notion 的筆記。</p>
<p><img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-33.webp" width="1192" height="698" alt="搭配排程觸發技能（圖 33）" loading="lazy" decoding="async"></p>
<p>這邊我有在排程的指令中要求他使用 Skill，來確保每次執行的流程與結果保持一致。</p>
<p><img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-34.webp" width="1400" height="810" alt="搭配排程觸發技能（圖 34）" loading="lazy" decoding="async"></p>
<hr>
<h2 id="結語建立專屬技能安裝必要技能">結語：建立專屬技能，安裝必要技能<a class="h-anchor" href="#%e7%b5%90%e8%aa%9e%e5%bb%ba%e7%ab%8b%e5%b0%88%e5%b1%ac%e6%8a%80%e8%83%bd%e5%ae%89%e8%a3%9d%e5%bf%85%e8%a6%81%e6%8a%80%e8%83%bd" aria-label="這個段落的連結"></a></h2>
<p>最後我們來回顧一下今天的教學：</p>
<ol>
<li>一開始我們用 <strong>Manus 內建的技能</strong>，用白話文就做出了「萃取網頁重點」的 web-digest 技能。</li>
<li>然後把過去需要多輪對話的引導流程，<strong>轉化為 proposal-refiner 的技能</strong>，這是想讓大家記住，最珍貴的不是別人的提示詞，而是你打磨成果的流程。</li>
<li>接著用白話文<strong>升級 web-digest 技能</strong>，讓它能搭配連接器把萃取的重點存進 Notion，變成會自動成長的知識庫。</li>
<li>最後示範<strong>技能的下載與匯入</strong>，讓好經驗可以用檔案交接，不再鎖在某個人的腦袋裡。</li>
</ol>
<p>好的，今天的分享就到這邊。</p>
<p>技能讓 AI「知道步驟」，那有沒有辦法讓 AI「知道事實」呢？</p>
<p>下一集，我會分享 Manus 的「專案（Project）」功能，解決每次對話都要重新交代背景的痛點。</p>
<p><strong>而且專案還能把我們學到的連接器、技能都加入進去，甚至讓同事一起維護。</strong></p>
<blockquote class="pullquote"><p>讓 AI 成為我們的第二大腦！</p>
</blockquote>
<figure class="figure"><img src="https://deanlin.net/blog/202608/manus-skills/images/manus-skills-35.webp" width="1400" height="914" alt="林鼎淵著作《工程師下班有約：企業內訓講師帶你認清職涯真相！》" loading="lazy" decoding="async">
  <figcaption><a href="https://www.tenlong.com.tw/products/9786264142083">https://www.tenlong.com.tw/products/9786264142083</a></figcaption>
</figure>

]]></content:encoded>
    </item>
    <item>
      <title>【ChatGPT Codex 實戰】Vibe Coding 速度很快，但用完就丟的東西，永遠不會變成你的</title>
      <link>https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/</link>
      <pubDate>Sat, 11 Apr 2026 12:23:28 +0800</pubDate>
      <guid>https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>AI 實戰</category>
      <description>前陣子我跟 Cake 合作，在台大分享怎麼把 AI 導入工程師日常的開發工作流。準備過程中，我腦中突然蹦出了一個想法。</description>
      <media:content url="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-og_hu_8bb900a10e4cdcc7.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-01.webp" width="1400" height="788" alt="【ChatGPT Codex 實戰】Vibe Coding 速度很快，但用完就丟的東西，永遠不會變成你的（圖 1）" fetchpriority="high" decoding="async"></p>
<p>前陣子我跟 Cake 合作，在台大分享怎麼把 AI 導入工程師日常的開發工作流。準備過程中，我腦中突然蹦出了一個想法。</p>
<p><strong>既然課程在講 AI 寫程式，那與其使用傳統的 PPT 做講義；不如嘗試用 Vibe Coding，打造一個屬於自己講義網站，這樣使用者介面可以完全根據自己的需求量身打造。</strong></p>
<blockquote class="pullquote"><p>然後花了一個晚上的時間，完成了模板的雛形設計。</p>
</blockquote>
<p>他不僅可以在電腦、平板、手機瀏覽，甚至還可以匯出 PDF。</p>
<p>為了讓設計可以被重複使用，我把他封裝成了一個 Agent Skill。</p>
<p>這樣未來我收到新需求時，只要提供講義初稿，AI 就會在分析內容後，直接生成一個講義網頁。</p>
<p>如果對產生結果不滿意，也可以調整 Markdown 文件修改細節。</p>
<p>今天這篇文章，我除了會分享如何<strong>用系統設計思維打造 Agent Skill 外，更會提醒過程中會遇到的陷阱與痛點。</strong></p>
<p>相信大家看完後，就<strong>不會只把 Vibe Coding 的成果當成免洗餐具，用完就丟；而是開始去思考，如何把它設計成可以長期使用、維護、擴增的工具。</strong></p>
<blockquote class="pullquote"><p>今天使用的 AI Agent 是 ChatGPT 的 Codex，目前免費版就可以使用。</p>
</blockquote>
<p>我會展示兩種操作方式，一種是在終端機輸入指令，另一種則是在程式碼編輯器安裝外掛，透過對話窗操作。</p>
<p>透過實際 Demo 讓大家更直觀的比對兩種使用方式的差異。</p>
<blockquote>
<p>完整的 Demo，可以觀看 YT 喔 👉</p>
<p>對 AI 應用感興趣的朋友，歡迎按下訂閱按鈕，未來我計畫分享一系列 AI 工具的應用教學。</p>
</blockquote>
<div class="yt" data-yt="0pZri5f_tfk" data-title="【ChatGPT Codex 實戰】將 Vibe Coding 成果從「用完就丟」，變成「可持續優化」的 Agent Skills">
  <a class="yt-link" href="https://www.youtube.com/watch?v=0pZri5f_tfk" target="_blank" rel="noopener" aria-label="播放影片：【ChatGPT Codex 實戰】將 Vibe Coding 成果從「用完就丟」，變成「可持續優化」的 Agent Skills">
    <img src="https://i.ytimg.com/vi/0pZri5f_tfk/hqdefault.jpg" alt="" width="480" height="360" loading="lazy" decoding="async">
    <span class="yt-play" aria-hidden="true"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M8 5.2v13.6L19 12z"/></svg></span>
    <span class="yt-title">【ChatGPT Codex 實戰】將 Vibe Coding 成果從「用完就丟」，變成「可持續優化」的 Agent Skills</span>
  </a>
</div>

<h3 id="-培養多個-ai-工具使用的能力">培養多個 AI 工具使用的能力<a class="h-anchor" href="#-%e5%9f%b9%e9%a4%8a%e5%a4%9a%e5%80%8b-ai-%e5%b7%a5%e5%85%b7%e4%bd%bf%e7%94%a8%e7%9a%84%e8%83%bd%e5%8a%9b" aria-label="這個段落的連結"></a></h3>
<p>如果你是頻道的老觀眾，也許看到這邊會有個疑惑：「為什麼我怎麼一直分享新的 AI 工具？」</p>
<p>其實會這麼做，是想培養自己「多個 AI 工具交替使用的能力」。</p>
<p><strong>因為只要某個 AI 被捧上天，通常在不久後就會開始限縮額度，歷史總是驚人的相似。</strong></p>
<p>所以我教學的目標從來不是強調「哪一款工具」最強，而是透過實際案例，讓大家了解如何解決痛點。</p>
<p>因為工具間的差異，並沒有你想像的那麼大；唯一要提醒的，就是不要為了折扣付年費，因為每個時期最好用的 AI 一直在改變。</p>
<hr>
<h2 class="h-nomark" id="-安裝-codex在終端機生成網頁">① 安裝 Codex，在終端機生成網頁<a class="h-anchor" href="#-%e5%ae%89%e8%a3%9d-codex%e5%9c%a8%e7%b5%82%e7%ab%af%e6%a9%9f%e7%94%9f%e6%88%90%e7%b6%b2%e9%a0%81" aria-label="這個段落的連結"></a></h2>
<p>今天這個教學，你可以使用自己熟悉的程式碼編輯器，不管是 VSCode、Cursor、Antigravity 都可以。</p>
<p>如果不知道使用哪一款，可以跟我一樣，使用 Google 推出的 AI 程式碼編輯器 <a href="https://antigravity.google">Antigravity</a>，登入 Google 帳號就能免費使用。</p>
<p>但這次，我們沒有要使用到編輯器內建的 AI 功能，使用他，只是為了方便檢視程式碼的變更。</p>
<h3 id="-給-ai-agent-工作區">給 AI Agent 工作區<a class="h-anchor" href="#-%e7%b5%a6-ai-agent-%e5%b7%a5%e4%bd%9c%e5%8d%80" aria-label="這個段落的連結"></a></h3>
<p>在開始前，我們要先準備一個空的資料夾（lecture-example），這是為了讓 AI Agent 有明確的工作區，你可以點擊 Open Folder，或是直接把資料夾拖曳進來都可以。</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-02.webp" width="1400" height="817" alt="給 AI Agent 工作區（圖 2）" loading="lazy" decoding="async"></p>
<h3 id="-安裝-nodejs">安裝 Node.js<a class="h-anchor" href="#-%e5%ae%89%e8%a3%9d-nodejs" aria-label="這個段落的連結"></a></h3>
<p>因為今天分享的 Codex 與實作的專案會使用到 Node.js，所以，我們要點擊上方的 Toggle Panel 打開終端機。</p>
<p>接著輸入「node -v」，來確認電腦是否有完成安裝，如果沒有顯示版號，而是出現沒有指令的錯誤訊息，就需要先去安裝 Node.js 才能執行後續步驟。</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-03.webp" width="1400" height="817" alt="安裝 Node.js（圖 3）" loading="lazy" decoding="async"></p>
<p>在安裝 Node.js 這塊，我建議大家透過 NVM 來安裝，因為 Node.js 有多個版本，而 NVM 這款工具可以幫你快速在不同版本間切換、更新。</p>
<p>如果你跟我一樣使用 Mac，執行下面的指令就可以安裝了：</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash
</span></span></code></pre></div><p>但如果你是 Windows，就需要下載 exe 檔來安裝： <a href="https://github.com/coreybutler/nvm-windows/releases">https://github.com/coreybutler/nvm-windows/releases</a></p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-04.webp" width="1400" height="817" alt="安裝 Node.js（圖 4）" loading="lazy" decoding="async"></p>
<p>nvm 安裝完成後，點擊上方的「+」開啟新的終端機，然後輸入 <code>nvm -v</code>，確認有成功安裝，接下來輸入 <code>nvm install &ndash;lts</code> 來安裝最新版本的 Node.js。</p>
<p>安裝完畢後，輸入 <code>node -v</code> 便可檢視現在使用的版本。</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-05.webp" width="1400" height="817" alt="安裝 Node.js（圖 5）" loading="lazy" decoding="async"></p>
<h3 id="-安裝-codex">安裝 Codex<a class="h-anchor" href="#-%e5%ae%89%e8%a3%9d-codex" aria-label="這個段落的連結"></a></h3>
<p>在 Node.js 安裝完成後，我們要來安裝 Codex，只要在終端機輸入下面的指令，便可以完成全局安裝：</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>npm i -g @openai/codex
</span></span></code></pre></div><p>在安裝完成後，於終端機輸入 <code>codex</code> ，這邊有提供三種登入方式：</p>
<ol>
<li><strong>Sign in with ChatGPT</strong>：第一種是透過 ChatGPT 帳號來登入，選擇後會獲得認證網址，接著登入自己的帳號即可，這是我最推薦的方案。</li>
<li><strong>Sign in with Device Code</strong>：但如果你想要在沒有瀏覽器、無使用者介面的虛擬機（VM）上登入，就要使用第二種方案；你可以在其他裝置貼上網址登入 ChatGPT，接著輸入終端機的驗證碼即可登入；但有一點要特別提醒，你需要先到 ChatGPT 的設定，於安全性的分頁將「啟用 Codex 裝置代碼授權」打勾，才能使用這個方案喔。</li>
<li><strong>Provide your own API key</strong>：最後一種方案則是輸入 OpenAI API Key，他會根據你實際的用量來計價；有興趣的觀眾可以到<a href="https://platform.openai.com/">OpenAI 的官方網站</a>，在「API keys」的頁面下就可以創建了；但這個方案如果沒有設計好用量限制，你可能在看到信用卡帳單時會爆哭。</li>
</ol>
<p>在成功登入後，他一開始會先詢問你是否信任這這個資料夾，選擇 Yes 才能繼續。</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-06.webp" width="1400" height="817" alt="安裝 Codex（圖 6）" loading="lazy" decoding="async"></p>
<p>接下來出現的輸入框，就可以把它當成過去與 AI 的對話視窗，兩者並沒有什麼差異。</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-07.webp" width="1400" height="817" alt="安裝 Codex（圖 7）" loading="lazy" decoding="async"></p>
<h3 id="-在終端機生成網頁">在終端機生成網頁<a class="h-anchor" href="#-%e5%9c%a8%e7%b5%82%e7%ab%af%e6%a9%9f%e7%94%9f%e6%88%90%e7%b6%b2%e9%a0%81" aria-label="這個段落的連結"></a></h3>
<p>這邊我先貼上一段 Prompt，請他幫我生成一個教學講義的網頁：</p>
<pre tabindex="0"><code>請扮演熟悉 AI 主題授課的講師，以「Agent Skills」為主題設計講義
講義用純 html 網頁（CSS/JS 都放裡面）呈現
日系風格的設計感，部分文字與背景可以搭配適當的漸層
開頭會根據內容呈現標題，然後下面有發人深省的標語
會根據不同層級與意圖呈現對應的區塊（ex: 大小標題、陳述、列點、流程）
最後放上社群連結鼓勵大家訂閱（FB/YouTube/Medium）
側邊欄會有對應的目錄，方便跳轉到對應位置
</code></pre><p>下面分享提示詞的幾個重點：</p>
<ol>
<li><strong>角色</strong>：請扮演熟悉 AI 主題授課的講師，以「Agent Skills」為主題設計講義 首先我讓他熟悉 AI 主題授課的講師，以「Agent Skills」為主題設計講義</li>
<li><strong>目標</strong>：講義用純 html 網頁（CSS/JS 都放裡面）呈現 然後說明產出的目標，這邊讓 AI 只生成單純的 html 網頁，這是為了讓日後部署更輕鬆</li>
<li><strong>風格</strong>：日系風格的設計感，部分文字與背景可以搭配適當的漸層 接著我說明自己想要的風格，如果沒想法也可以讓 AI 扮演設計師幫你想</li>
<li><strong>架構</strong>：開頭會根據內容呈現標題，然後下面有發人深省的標語 最後則是分階段提出我希望的網頁架構，包含開頭頁面如何呈現、網頁層級如何設計、社群連結要放在最後、側邊欄要有目錄這些</li>
</ol>
<p>在網站就生成出來後，打開存放網頁的資料夾，點擊兩下 html 檔案便可瀏覽成果：</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-08.webp" width="1400" height="817" alt="在終端機生成網頁（圖 8）" loading="lazy" decoding="async"></p>
<p>老實講，這個版本的完成度已經不錯了；也就是說，如果只是想要一份「看起來可以用」的講義網站，其實做到這步就夠了。</p>
<h3 id="-痛點細節調整困難">痛點：細節調整困難<a class="h-anchor" href="#-%e7%97%9b%e9%bb%9e%e7%b4%b0%e7%af%80%e8%aa%bf%e6%95%b4%e5%9b%b0%e9%9b%a3" aria-label="這個段落的連結"></a></h3>
<p>但如果你是追求細節的人，很快就會遇到問題。</p>
<p>因為 AI 生成的文字描述可能不符合你的期待，段落結構也未必是你要的。</p>
<p>此時我們有兩個選擇：</p>
<ol>
<li>第一，與 AI 對話調整細節</li>
<li>第二，直接修改 html 網頁</li>
</ol>
<p>但第一種方案隨機性太高，還可能會動到不該動的；而第二種方案，就算我本身是工程師，改起來都覺得痛苦。</p>
<blockquote class="pullquote"><p>假使在後續要花很大的力氣才能調整，那不管 AI 生成網頁的速度再快、畫面再漂亮；也很難應用到現實專案上。</p>
</blockquote>
<p>所以，我們不妨換一種思路；既然生成式 AI 的輸出注定充滿隨機性，那有什麼方式，可以在結果產生後，輕鬆調整細節。</p>
<blockquote class="pullquote"><p>我的答案是建立「可重複使用的模板」</p>
</blockquote>
<hr>
<h2 class="h-nomark" id="-將隨機的結果變成穩定的模板">② 將隨機的結果，變成穩定的模板<a class="h-anchor" href="#-%e5%b0%87%e9%9a%a8%e6%a9%9f%e7%9a%84%e7%b5%90%e6%9e%9c%e8%ae%8a%e6%88%90%e7%a9%a9%e5%ae%9a%e7%9a%84%e6%a8%a1%e6%9d%bf" aria-label="這個段落的連結"></a></h2>
<p>模板的核心概念，就是不要讓 AI 每次都從零開始生成， 而是先定義好「模板」規則，讓它只要填入內容，這樣就能產出穩定、一致的成果。</p>
<p>這邊我就拿自己當案例，受邀到企業內訓時，我每次都需要準備課程講義。假使都用 Vibe Coding 生成，那講義的內容與網頁風格會充滿隨機性。</p>
<p>但如果有一套模板，那只要替換內容，就能快速產出符合我需求的講義。</p>
<p><strong>不管你是做簡報、寫文件、還是建立網頁，只要是重複性的工作，這個概念都可以適用。</strong></p>
<p>這邊我做了一個嘗試，在對話視窗中跟 AI 說：</p>
<pre tabindex="0"><code>我希望剛剛生成出來的網頁，是可以透過 Markdown 格式編輯內容的
請幫我將網頁結構拆解（列點、步驟、圖片、表格、註解）、分層次（大標、中標、小標），並以常見的 Markdown 語法來設計規則
最後建立一個腳本，我只要編輯 Makdown 文件，網頁的 HTML 就會及時改變
操作方式寫在 README.md 文件中，並建立 package.json
</code></pre><ul>
<li><strong>期待目標</strong>：我希望剛剛生成出來的網頁，是可以透過 Markdown 格式編輯內容的</li>
<li><strong>設計架構</strong>：請幫我將網頁結構拆解（列點、步驟、圖片、表格、註解）、分層次（大標、中標、小標），並以常見的 Markdown 語法來設計規則</li>
<li><strong>渲染方式</strong>：最後建立一個腳本，我只要編輯 Makdown 文件，網頁的 HTML 就會及時改變</li>
<li><strong>說明文件</strong>：操作方式寫在 README.md 文件中，並建立 package.json</li>
</ul>
<p>這段提示詞，目標是把 HTML 逆向回 Markdown 語法結構。</p>
<p>因為想要對內容有掌控力，就應該把它設計在一個可編輯，方便維護的格式中，而不是放在最終輸出的 HTML 裡面。</p>
<p>而且我不只是把它變成 Markdown 而已，我還要求他建立一套可以執行的腳本，這樣我只要編輯 Markdown 文件，HTML 的內容就會及時調整。</p>
<p>稍等一段時間後，AI 就初步幫我們把模板建立完成了。</p>
<p>回到瀏覽器，你可以看到網頁有順利渲染，<strong>相比於先前透過靜態的 HTML 打開網站，現在則是透過啟動伺服器的方式來瀏覽。</strong></p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-09.webp" width="1400" height="817" alt="② 將隨機的結果，變成穩定的模板（圖 9）" loading="lazy" decoding="async"></p>
<p>所以我們就可以來驗證調整 Markdown 文件時，畫面是否會連動。</p>
<p>先回到程式碼編輯器，目前 AI 逆向回來的 Markdown 文件是 lecture.md，我們就嘗試在 Agent Skills 這個標題旁邊加上 Dean Lin 的文字。</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-10.webp" width="1400" height="817" alt="② 將隨機的結果，變成穩定的模板（圖 10）" loading="lazy" decoding="async"></p>
<p>儲存文件後，便會重新渲染網頁；然後回到瀏覽器，你就會發現剛剛加上的文字有渲染成功嚕！</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-11.webp" width="1400" height="817" alt="② 將隨機的結果，變成穩定的模板（圖 11）" loading="lazy" decoding="async"></p>
<h3 id="-建立-agent-skills-工作流">建立 Agent Skills 工作流<a class="h-anchor" href="#-%e5%bb%ba%e7%ab%8b-agent-skills-%e5%b7%a5%e4%bd%9c%e6%b5%81" aria-label="這個段落的連結"></a></h3>
<p>此時我們就可以把剛剛的工作流，設計成一個可重複使用的 Agent Skill 了。</p>
<blockquote>
<p>如果你是第一次接觸 Agent Skills，我過去有拍一隻影片分享安裝、使用、製作的技巧：<a href="https://youtu.be/xe00zJEtuMo">https://youtu.be/xe00zJEtuMo</a></p>
</blockquote>
<p>接下來我們在終端機輸入下面的 Prompt，我跟 AI 說：</p>
<pre tabindex="0"><code>根據下面需求在「.agents」資料夾建立 Skill：
- 參考模板：根據剛剛腳本設計的規格，建立明確的 Markdown 使用規範
- 觸發時機：使用者提供初步想法想建立網頁時，會觸發這個 Skill
- 設計架構：要在 Skill 內建立 scripts 資料夾存放執行腳本、references 資料夾存放參考文件資料
- 執行順序：這個 Skill 會先深入研究輸入的主題，再根據規範設計對應的 Markdown 文件；最後把 Markdown 文件透過腳本生成 html
- 特別提醒：預計會有多個主題，所以觸發時，請根據主題建立新資料夾（英文），裡面存放生成的 Markdown 與 HTML 檔案
</code></pre><p>稍等一段時間，AI 就根據需求製作好了對應的 Agent Skill，在左側我們可以看到一個「.agents」的資料夾，裡面有 SKILL.md 這個檔案。</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-12.webp" width="1400" height="817" alt="建立 Agent Skills 工作流（圖 12）" loading="lazy" decoding="async"></p>
<p>name 就是這個 Skill 的名稱，description 則是說明觸發的時機點與預計的執行成果。</p>
<p>references 資料夾放著 Markdown 格式的參考文件，而 scripts 則是存放模板編譯的程式腳本。</p>
<h3 id="-驗證-agent-skill">驗證 Agent Skill<a class="h-anchor" href="#-%e9%a9%97%e8%ad%89-agent-skill" aria-label="這個段落的連結"></a></h3>
<p>輸入下面的提示詞：</p>
<pre tabindex="0"><code>我想要建立深度介紹「ChatGPT 使用技巧」的課程講義網頁。
</code></pre><p>這邊你會看到他有成功觸發對應的 Agent Skill 來進行設計：</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-13.webp" width="1400" height="817" alt="驗證 Agent Skill（圖 13）" loading="lazy" decoding="async"></p>
<p>稍等一段時間，我們可以在左側資料夾下方，看到 chatgpt-usage-skill 的資料夾，對應的 Markdown 文件與 html 網頁有成功生成！</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-14.webp" width="1400" height="817" alt="驗證 Agent Skill（圖 14）" loading="lazy" decoding="async"></p>
<p>這邊我就直接打開 html 檔案來瀏覽，你可以看到網頁的版型樣式與先前建立的風格一致。</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-15.webp" width="1400" height="817" alt="驗證 Agent Skill（圖 15）" loading="lazy" decoding="async"></p>
<p>如果你有跟著教學走到這一步，恭喜你建立了屬於自己的模板，但…這只是開始而已。</p>
<hr>
<h2 class="h-nomark" id="-自由度高的背後是功能的不完善">③ 自由度高的背後，是功能的不完善<a class="h-anchor" href="#-%e8%87%aa%e7%94%b1%e5%ba%a6%e9%ab%98%e7%9a%84%e8%83%8c%e5%be%8c%e6%98%af%e5%8a%9f%e8%83%bd%e7%9a%84%e4%b8%8d%e5%ae%8c%e5%96%84" aria-label="這個段落的連結"></a></h2>
<p>儘管剛剛設計的 Agent Skill 搭配模板腳本可以輕鬆生成講義網頁。</p>
<p>但其實功能非常不完善，這邊跟大家舉例：</p>
<ol>
<li>首先像側邊欄雖然方便導覽，但他會佔掉講義的展示空間，我希望講課時可以自由收合</li>
<li>還有目前的網頁為「淺色」設計，但有時我授課場地是關燈的，如果螢幕是唯一光源，台下觀眾眼睛看久會不舒服</li>
<li>另外有些單位會希望講者提供 PDF 講義，如果使用網頁預設的 PDF 列印，那畫面會非常的醜</li>
</ol>
<blockquote class="pullquote"><p>這邊我只是舉出幾個常見痛點，雖然建立模板聽起來很厲害，但自由的背後，代表你是目前唯一的維護者。</p>
</blockquote>
<p>因為模板的細節是在實際使用後，你才知道哪裡要調整；儘管設計與程式撰寫可以交給 AI，但方向與美感還是要自己掌握。</p>
<p><strong>這就是自己設計模板的代價。你想要主控權，就得承擔客製化背後的複雜度。</strong></p>
<p><strong>老實講，如果只是要有一個線上簡報工具，市面上已經有很多現有工具，比如 Gamma 或 Marp，不一定要走自建模板這條路。</strong></p>
<blockquote class="pullquote"><p>而我選擇做這件事，與其說是建立一個更好的方案，不如說是在設計一套最符合自己需求的工具。</p>
</blockquote>
<hr>
<h2 class="h-nomark" id="-安裝-codex-外掛--體驗模板強大">④ 安裝 Codex 外掛 &amp; 體驗模板強大<a class="h-anchor" href="#-%e5%ae%89%e8%a3%9d-codex-%e5%a4%96%e6%8e%9b--%e9%ab%94%e9%a9%97%e6%a8%a1%e6%9d%bf%e5%bc%b7%e5%a4%a7" aria-label="這個段落的連結"></a></h2>
<p>這邊我就直接跟大家分享，剛剛 Agent Skill 我經過多次迭代後的版本，目前我已經使用這套模板講了 5 場 Vibe Coding 課程了。</p>
<blockquote>
<p>歡迎路過按個 Star，讓我知道自己的分享對大家有幫助: <a href="https://github.com/deancourse/agent-skill-lecture-builder">https://github.com/deancourse/agent-skill-lecture-builder</a></p>
</blockquote>
<p>我把它設計成一個 Agent Skill，大家可以直接 Fork 我的 Repository 來體驗，Fork 完成後，點擊 Code，從裡面複製專案網址。</p>
<p>然後回到程式碼編輯器，點擊 <code>Clone Repository</code>，貼上剛剛複製的網址來下載專案，指定下載路徑，完成後點擊 Open 便可跟著影片一起操作。</p>
<p>這邊要先安裝所需的套件，打開終端機，輸入 <code>npm install</code> 即可。</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-16.webp" width="1400" height="817" alt="④ 安裝 Codex 外掛 &amp; 體驗模板強大（圖 16）" loading="lazy" decoding="async"></p>
<p>這個指令會安裝 package.json 裡面 devDependencies 的套件，而 puppeteer 這款套件，我是用來截取網頁 Open Graph 預覽圖片用的。</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-17.webp" width="1400" height="817" alt="④ 安裝 Codex 外掛 &amp; 體驗模板強大（圖 17）" loading="lazy" decoding="async"></p>
<h3 id="-安裝-codex-外掛">安裝 Codex 外掛<a class="h-anchor" href="#-%e5%ae%89%e8%a3%9d-codex-%e5%a4%96%e6%8e%9b" aria-label="這個段落的連結"></a></h3>
<p>也趁這個機會，跟大家分享如何在程式碼編輯器，安裝 Codex 使用這介面的外掛，只要點擊左側的 Exetentions，輸入「chatgpt」。</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-18.webp" width="1400" height="817" alt="安裝 Codex 外掛（圖 18）" loading="lazy" decoding="async"></p>
<p>安裝完成後，點擊上方的 ChatGPT 圖示：</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-19.webp" width="1400" height="817" alt="安裝 Codex 外掛（圖 19）" loading="lazy" decoding="async"></p>
<p>這款外掛有提供登入 ChatGPT 帳號與使用 API Key 兩種使用模式，這邊我選擇登入 ChatGPT 帳號：</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-20.webp" width="1400" height="817" alt="安裝 Codex 外掛（圖 20）" loading="lazy" decoding="async"></p>
<p>登入後，就可以在與 AI 的對話視窗中體驗了，相比於終端機透過輸入指令溝通，透過外掛安裝的使用者介面更適合初學者。</p>
<h3 id="-認識-codex-介面">認識 Codex 介面<a class="h-anchor" href="#-%e8%aa%8d%e8%ad%98-codex-%e4%bb%8b%e9%9d%a2" aria-label="這個段落的連結"></a></h3>
<p>你可以更輕鬆地切換 GPT 模型、調整思考深度；如果把滑鼠符號打開，AI 就可以辨識你目前選中的區域和打開的檔案。</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-21.webp" width="1400" height="817" alt="認識 Codex 介面（圖 21）" loading="lazy" decoding="async"></p>
<p>如果你還想要做更多細微的設定，可以輸入「/」來了解：</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-22.webp" width="1400" height="817" alt="認識 Codex 介面（圖 22）" loading="lazy" decoding="async"></p>
<p>比如你打算讓 AI 複雜任務，可以把 Plan mode 打開，來獲得更加詳盡的規劃；假使想了解目前剩餘的額度，則可以透過 Status 來確認。</p>
<p>另外往下滑，會看到安裝好的指令（Commands）與技能（Skills），這邊會看見剛剛我們剛剛設計的 Course Page Generator 這個 Skill。</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-23.webp" width="1400" height="817" alt="認識 Codex 介面（圖 23）" loading="lazy" decoding="async"></p>
<blockquote>
<p><em>這邊補充一下，「/」也是可以在終端機當中使用，比如我們這邊打 status 一樣可以看到使用量，但需要你對關鍵字有一定的熟悉度。</em></p>
</blockquote>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-24.webp" width="1400" height="817" alt="認識 Codex 介面（圖 24）" loading="lazy" decoding="async"></p>
<h3 id="-提供主題生成講義">提供主題生成講義<a class="h-anchor" href="#-%e6%8f%90%e4%be%9b%e4%b8%bb%e9%a1%8c%e7%94%9f%e6%88%90%e8%ac%9b%e7%be%a9" aria-label="這個段落的連結"></a></h3>
<p>假使你今天想要根據指定主題來生成講義網頁，只要在與 AI 的對話視窗輸入自己想研究的主題就好，像我這邊就說：</p>
<pre tabindex="0"><code>扮演一位擅長用實際案例解說的資安專家，設計&#34;生成式 AI 資訊安全&#34;的講義並生成網頁
完成後直接啟動
</code></pre><p>接著稍等一段時間，網頁就建立完成了：</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-25.webp" width="1400" height="817" alt="提供主題生成講義（圖 25）" loading="lazy" decoding="async"></p>
<p>這邊可以看到側邊欄是可以自由收合的，而且在收合後下方會有進度條，讓我講課時可以掌握授課進度：</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-26.webp" width="1400" height="815" alt="提供主題生成講義（圖 26）" loading="lazy" decoding="async"></p>
<p>由於我的授課內容有很多地方需要複製指令，但講課時我可能只有一隻手能操作電腦，所以指令右側有一個複製的 icon，這樣我單手就能輕鬆複製，而不需要透過滑鼠選半天。</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-27.webp" width="1400" height="815" alt="提供主題生成講義（圖 27）" loading="lazy" decoding="async"></p>
<p>並且能夠根據場地自由切換淺色、深色模式；設定中也有多款主題可以使用。</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-28.webp" width="1400" height="815" alt="提供主題生成講義（圖 28）" loading="lazy" decoding="async"></p>
<p>當講課到一半，覺得需要中場休息時，點擊「休息一下」就能夠設定休息時間，而且還有倒數計時來提醒大家。</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-29.webp" width="1400" height="815" alt="提供主題生成講義（圖 29）" loading="lazy" decoding="async"></p>
<p>而前面提到的匯出 PDF，我也直接設計了對應的版面，而不是把網頁的結構直接搬過去，而是做了針對性的設計，這樣才會有更好的閱讀體驗。</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-30.webp" width="1400" height="815" alt="提供主題生成講義（圖 30）" loading="lazy" decoding="async"></p>
<p>甚至如果你想要用簡報模式呈現，右下角的「簡報模式」也可以使用喔，可以針對不同情境自由切換！</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-31.webp" width="1400" height="815" alt="提供主題生成講義（圖 31）" loading="lazy" decoding="async"></p>
<h3 id="-提供草稿生成講義">提供草稿生成講義<a class="h-anchor" href="#-%e6%8f%90%e4%be%9b%e8%8d%89%e7%a8%bf%e7%94%9f%e6%88%90%e8%ac%9b%e7%be%a9" aria-label="這個段落的連結"></a></h3>
<p>這次我要跟大家示範另一種生成網頁的方式，如果你已經準備好課程講義的草稿，這個 Agent Skill 也可以直接轉換。</p>
<p>我在專案的 exmaple 資料夾底下就有準備一個 Markdown 文件讓大家體驗：</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-32.webp" width="1400" height="815" alt="提供草稿生成講義（圖 32）" loading="lazy" decoding="async"></p>
<p>其實這個文件就是這隻影片的 Markdown 逐字稿，我開啟一個新的對話窗，直接跟 AI 說</p>
<pre tabindex="0"><code>轉換成網頁，並啟動專案
</code></pre><p>稍等一段時間，AI 就幫我們完成設計並啟動專案嚕～</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-33.webp" width="1400" height="815" alt="提供草稿生成講義（圖 33）" loading="lazy" decoding="async"></p>
<p>相比於提供主題來生成講義，提供詳盡的背景資訊來生成講義，你會對最終生成的結果有更高的掌握度。</p>
<h3 id="-讓-ai-學習模板語法">讓 AI 學習模板語法<a class="h-anchor" href="#-%e8%ae%93-ai-%e5%ad%b8%e7%bf%92%e6%a8%a1%e6%9d%bf%e8%aa%9e%e6%b3%95" aria-label="這個段落的連結"></a></h3>
<p>講到這邊，可能會有人好奇網頁背後的 Markdown 文件長什麼樣子，這邊我就回到程式碼編輯器展示給大家看，你會發現大部分都還是依照既有的 Markdown 語法來設計。</p>
<p>但由於這個模板是我建立的，所以我也能設計特殊的語法，像是指令的區塊，以及流程圖的區塊：</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-34.webp" width="1400" height="815" alt="讓 AI 學習模板語法（圖 34）" loading="lazy" decoding="async"></p>
<p>不過這些語法我不需要去背誦，因為我已經把它寫成了一個 Agent Skill。</p>
<p>你只需要提出自己想放進去講義的資訊，AI 就會辨識內容，並找到最合適的版型整合到講義中。</p>
<p>你需要做的，就是當文字不符預期時，手動做一些微調。</p>
<blockquote>
<p>雖然模板前期的建立有很多細節要處理，但建立好後，你就能根據自己的意志來優化細節，不再被平台綁架。</p>
<p>而且因為它不是一次性工具，所以你會願意花更多時間打磨細節。</p>
</blockquote>
<h3 id="-輕鬆部署">輕鬆部署<a class="h-anchor" href="#-%e8%bc%95%e9%ac%86%e9%83%a8%e7%bd%b2" aria-label="這個段落的連結"></a></h3>
<p>確認符合預期後，我們就可以打開 Source Control，接著點擊 Generate 自動生成 commit，並 Sync Changes 將內容更新到 GitHub 上面。</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-35.webp" width="1400" height="815" alt="輕鬆部署（圖 35）" loading="lazy" decoding="async"></p>
<p>接著來到 GitHub 頁面，如果你想要讓網頁被大家瀏覽，只要去 Settings 頁面，因為我們已經把 html 檔案生成完畢，所以選擇預設的 Deploy from a branch 即可，你只要把 Branch 切換到 main 就可以了。</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-36.webp" width="1400" height="815" alt="輕鬆部署（圖 36）" loading="lazy" decoding="async"></p>
<p>此時到 Actions 的頁面就會看到開始網站正在部署，順利的話，就會看到部署完成後的網址。</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-37.webp" width="1400" height="816" alt="輕鬆部署（圖 37）" loading="lazy" decoding="async"></p>
<p>但點開來後，你會發現頁面不存在，這是因為網頁檔是存在 example 資料夾底下，所以只要在網址後面加上 example 就可以順利顯示嚕～</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-38.webp" width="1400" height="816" alt="輕鬆部署（圖 38）" loading="lazy" decoding="async"></p>
<p>而更前面設計的資安網頁，也是複製資料夾路徑，替換上去就可以看到嚕～</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-39.webp" width="1400" height="816" alt="輕鬆部署（圖 39）" loading="lazy" decoding="async"></p>
<p>了解基礎的操作方式後，你就可以在不同的資料夾下建立對應的課程網頁。</p>
<h3 id="-專業對-vibe-coding-的幫助">專業對 Vibe Coding 的幫助<a class="h-anchor" href="#-%e5%b0%88%e6%a5%ad%e5%b0%8d-vibe-coding-%e7%9a%84%e5%b9%ab%e5%8a%a9" aria-label="這個段落的連結"></a></h3>
<p>這邊也提醒一下大家，雖然這個專案都是 Vibe Coding 出來的，但如果完全沒有技術背景，可能會設計出不合理的架構，或忽略細節。</p>
<p>比如 Open Graph，也就是 OG；如果你最終完成的成品打算公開分享，但沒有設定標題（title）、描述（description）、縮圖（image），那網址預覽畫面會很醜。</p>
<blockquote>
<p>如果想知道網頁有沒有設定，可以到這個網站：<a href="https://www.opengraph.xyz/">https://www.opengraph.xyz/</a></p>
</blockquote>
<p>這邊貼上剛剛部署的網址，就能看到 OG 是否有完成相關設定嚕～</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-40.webp" width="1400" height="816" alt="專業對 Vibe Coding 的幫助（圖 40）" loading="lazy" decoding="async"></p>
<h3 id="-設計共用資料夾">設計共用資料夾<a class="h-anchor" href="#-%e8%a8%ad%e8%a8%88%e5%85%b1%e7%94%a8%e8%b3%87%e6%96%99%e5%a4%be" aria-label="這個段落的連結"></a></h3>
<p>接著再回到程式碼編輯器，跟大家分享我的設計細節，如果有些資訊如果希望反覆利用，其實我們可以把它抽出來。</p>
<p>這裡我有設計一個 config 資料夾，裡面存放的設定可以在所有頁面被共用。</p>
<p>像這邊我就把講者介紹、頁面尾端的社群宣傳設計成一個 global.yaml 檔案，而講者圖片我則是放在 assets 資料夾中。</p>
<p><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-41.webp" width="1400" height="816" alt="設計共用資料夾（圖 41）" loading="lazy" decoding="async"></p>
<p>如果有文章想客製化調整的設定細節，則可以編輯 config.yaml 檔案來蓋過去。</p>
<h3 id="-模板易用性">模板易用性<a class="h-anchor" href="#-%e6%a8%a1%e6%9d%bf%e6%98%93%e7%94%a8%e6%80%a7" aria-label="這個段落的連結"></a></h3>
<p>我認為好的模板要盡可能減輕使用者操作的負擔；所以在設計上將時常變更的資訊放在 Markdown 文件方便修改，共用的資訊則設計成 config 來進行維護。</p>
<p>而 Markdown 文件、網頁，以及 OG 圖片的初始化，我則是設計對應的 Agent Skill 來處理。</p>
<p>這樣就能讓 AI 幫我快速完成第一版，而我也能在後續輕鬆調整細節。</p>
<p>我已經用 AI 寫了 3 年多的程式，最大的感觸是：</p>
<blockquote class="pullquote"><p>當我們開始思考專案架構的時候，Vibe Coding 的成果才會慢慢脫離 Demo，進入長期可用的狀態。</p>
</blockquote>
<hr>
<h2 id="結語從用完就丟到越用越好">結語：從「用完就丟」到「越用越好」<a class="h-anchor" href="#%e7%b5%90%e8%aa%9e%e5%be%9e%e7%94%a8%e5%ae%8c%e5%b0%b1%e4%b8%9f%e5%88%b0%e8%b6%8a%e7%94%a8%e8%b6%8a%e5%a5%bd" aria-label="這個段落的連結"></a></h2>
<p>回顧這隻影片，我們做了三件事：</p>
<ol>
<li>用 Codex 從零生成網頁</li>
<li>把 AI 的隨機輸出，轉成可用 Markdown 維護的模板</li>
<li>把模板打包成 Agent Skill，讓它可以重複使用。</li>
</ol>
<p>在走完這整個流程之後，我感觸最深的，<strong>是發現 AI 真的可以把自己腦中的工作流，一點一點變成一套系統。</strong></p>
<blockquote class="pullquote"><p>這個任務放在過去，是需要一個團隊，花好幾週的時間才有可能做到的。</p>
</blockquote>
<p>但這次我只是在備課的過程中突然靈光乍現，然後就透過 Vibe Coding 完成了模板的雛形。</p>
<p>當然現在的它還不夠完美，但我覺得最有價值的，反而不是它現在功能有多完整。</p>
<p>而是從這一刻開始，我不再只是使用別人的工具。我也開始有能力，慢慢把工具設計成更符合自己需求的樣子。</p>
<blockquote class="pullquote"><p>而就是讓 Vibe Coding 的成果，從玩具走向產品的過程。</p>
</blockquote>
<p><strong>我認為 AI 真正厲害的地方，從來都不是幫你省下一次工作的時間；而是它開始讓你有機會，把自己原有的工作流，設計成一套可以持續優化的模板。</strong></p>
<p>好的，今天的分享就到這邊，如果這篇文章對你有幫助，可以順手按個讚，並把文章分享給對 AI 主題感興趣的朋友們。</p>
<figure class="figure"><img src="https://deanlin.net/blog/202604/chatgpt-codex-agent-skills/images/chatgpt-codex-agent-skills-42.webp" width="1400" height="914" alt="林鼎淵著作《工程師下班有約：企業內訓講師帶你認清職涯真相！》" loading="lazy" decoding="async">
  <figcaption><a href="https://www.tenlong.com.tw/products/9786264142083">https://www.tenlong.com.tw/products/9786264142083</a></figcaption>
</figure>

]]></content:encoded>
    </item>
    <item>
      <title>讓 AI 把過去解決過的問題，變成未來可以重複使用的能力</title>
      <link>https://deanlin.net/blog/202604/reusable-ai-skills/</link>
      <pubDate>Thu, 09 Apr 2026 18:48:27 +0800</pubDate>
      <guid>https://deanlin.net/blog/202604/reusable-ai-skills/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>AI 實戰</category>
      <description>前陣子與朋友聚會時，我們交流了彼此用 AI 開發專案的心得。</description>
      <media:content url="https://deanlin.net/blog/202604/reusable-ai-skills/images/reusable-ai-skills-og_hu_13e9e6d745768da0.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<p><img src="https://deanlin.net/blog/202604/reusable-ai-skills/images/reusable-ai-skills-01.webp" width="1400" height="744" alt="讓 AI 把過去解決過的問題，變成未來可以重複使用的能力（圖 1）" fetchpriority="high" decoding="async"></p>
<p>前陣子與朋友聚會時，我們交流了彼此用 AI 開發專案的心得。</p>
<p>然後發現一個值得討論的議題：「同樣在用 AI，有些人花很少額度就完成一堆任務；但有些人額度燒光，卻連一個問題都沒有解決。」</p>
<blockquote class="pullquote"><p>這種落差，大到讓人懷疑，我們真的在用同一個工具嗎？</p>
</blockquote>
<hr>
<p>為了釐清問題，我們乾脆直接打開電腦，實際 Demo 彼此的操作方式。</p>
<p>看完之後，發現問題其實不在 AI，而在「使用方式」。</p>
<p>我把幾個最關鍵的操作整理給你 👇</p>
<h3 class="h-nomark" id="1-遇到問題就丟給-ai但每次都跑很久還不一定解得掉">1️⃣ 遇到問題就丟給 AI，但每次都跑很久、還不一定解得掉<a class="h-anchor" href="#1-%e9%81%87%e5%88%b0%e5%95%8f%e9%a1%8c%e5%b0%b1%e4%b8%9f%e7%b5%a6-ai%e4%bd%86%e6%af%8f%e6%ac%a1%e9%83%bd%e8%b7%91%e5%be%88%e4%b9%85%e9%82%84%e4%b8%8d%e4%b8%80%e5%ae%9a%e8%a7%a3%e5%be%97%e6%8e%89" aria-label="這個段落的連結"></a></h3>
<p>→ 因為沒有指定範圍，所以 AI 要掃描整個專案，過程不但浪費時間、消耗額度，還很容易改錯方向，衍生更多問題</p>
<h3 class="h-nomark" id="2-請-ai-新增功能但沒有考量到既有架構">2️⃣ 請 AI 新增功能，但沒有考量到既有架構<a class="h-anchor" href="#2-%e8%ab%8b-ai-%e6%96%b0%e5%a2%9e%e5%8a%9f%e8%83%bd%e4%bd%86%e6%b2%92%e6%9c%89%e8%80%83%e9%87%8f%e5%88%b0%e6%97%a2%e6%9c%89%e6%9e%b6%e6%a7%8b" aria-label="這個段落的連結"></a></h3>
<p>→ 在沒有足夠上下文與規格資訊的狀況下，AI 往往選擇「從頭做一份」，這種做法除了浪費額度外，還會讓專案越來越難維護</p>
<h3 class="h-nomark" id="3-每次調整功能都要重新提醒規則與習慣">3️⃣ 每次調整功能，都要重新提醒規則與習慣<a class="h-anchor" href="#3-%e6%af%8f%e6%ac%a1%e8%aa%bf%e6%95%b4%e5%8a%9f%e8%83%bd%e9%83%bd%e8%a6%81%e9%87%8d%e6%96%b0%e6%8f%90%e9%86%92%e8%a6%8f%e5%89%87%e8%88%87%e7%bf%92%e6%85%a3" aria-label="這個段落的連結"></a></h3>
<p>→ 在新的對話視窗中，AI 未必會記住你過去的使用習慣、判斷邏輯，所以要花很多時間在「資訊對齊」上面，甚至要自己手動調整細節</p>
<hr>
<p>老實說，這些問題真的很常見。</p>
<p>因為很多人即使用了 AI 程式碼編輯器，還是把它當成「問答工具」。</p>
<p>但我認為 AI 的價值，是在幫你建立一套「<strong>可重複使用的工作流</strong>」。</p>
<hr>
<p>而現在的 AI Agent 其實已經有對應的解決方案了</p>
<h3 class="h-nomark" id="-指定資料夾文件限定-ai-讀取範圍">✔ 指定資料夾、文件，限定 AI 讀取範圍<a class="h-anchor" href="#-%e6%8c%87%e5%ae%9a%e8%b3%87%e6%96%99%e5%a4%be%e6%96%87%e4%bb%b6%e9%99%90%e5%ae%9a-ai-%e8%ae%80%e5%8f%96%e7%af%84%e5%9c%8d" aria-label="這個段落的連結"></a></h3>
<p>💡 可以用「@」的方式，給予 AI 參考資料；當目的、方向明確後，AI 的效率與穩定性會大幅上升。</p>
<h3 class="h-nomark" id="-建立需求規格讓-ai-迭代功能時有文件依據">✔ 建立需求規格，讓 AI 迭代功能時有文件依據<a class="h-anchor" href="#-%e5%bb%ba%e7%ab%8b%e9%9c%80%e6%b1%82%e8%a6%8f%e6%a0%bc%e8%ae%93-ai-%e8%bf%ad%e4%bb%a3%e5%8a%9f%e8%83%bd%e6%99%82%e6%9c%89%e6%96%87%e4%bb%b6%e4%be%9d%e6%93%9a" aria-label="這個段落的連結"></a></h3>
<p>💡 無論新舊專案，都可以透過 OpenSpec 來輔助建立專案的需求規格；這不但能解決團隊專案缺乏文件的痛點，還能讓 AI 與人類在未來迭代功能時更有依據，減少重工的問題。</p>
<h3 class="h-nomark" id="-設計-rules--commands--agent-skills">✔ 設計 Rules / Commands / Agent Skills<a class="h-anchor" href="#-%e8%a8%ad%e8%a8%88-rules--commands--agent-skills" aria-label="這個段落的連結"></a></h3>
<p>💡 不管個人還是團隊，都一定會有自己的「使用習慣、判斷邏輯」，我們可以把通用規則寫在 Rules（不要說廢話、專注解決問題），特定情境的工作流放在 Commands（觸發多個 Skills 的固定流程），而希望 AI 使用的技能記錄到 Agent Skills（前端設計能力、撰寫 Commit、PR）。</p>
<hr>
<blockquote class="pullquote"><p>不要讓 AI 的「快」，變成未來的「債」。</p>
</blockquote>
<p>我自己現在更在意的，其實不是 AI 寫多快，而是：</p>
<ol>
<li>專案的規格是否足夠清晰，可以持續迭代</li>
<li>新增修改功能時，有沒有影響到既有功能</li>
<li>這次做出的成果，能否整理成 Agent Skill，讓下次直接使用</li>
</ol>
<p>這些，才是真正會拉開差距的地方。</p>
<p>我在 4/21（二）有一場線上說明會，將透過實際 Demo，分享如何從「用 AI 寫程式」，轉變成「用 AI 建立開發流程」，邀請你免費參加！</p>
<p>如果你希望 AI 不只幫忙寫幾段程式碼，而是真正融入需求拆解、規格整理、開發協作、測試驗證與任務交付，或是有問題想與我線上討論。</p>
<p>那千萬別錯過這場說明會！</p>
<p>👉 立即報名: <a href="https://tibame.tw/Rsc3G">https://tibame.tw/Rsc3G</a></p>
<figure class="figure"><img src="https://deanlin.net/blog/202604/reusable-ai-skills/images/reusable-ai-skills-02.webp" width="1280" height="1280" alt="讓 AI 把過去解決過的問題，變成未來可以重複使用的能力（圖 1）" loading="lazy" decoding="async">
  <figcaption><a href="https://tibame.tw/Rsc3G">https://tibame.tw/Rsc3G</a></figcaption>
</figure>

]]></content:encoded>
    </item>
    <item>
      <title>【Git Worktree 實戰】指揮 AI Agents 同時運作，搭配 Agent Skills 建立自動化協作體系</title>
      <link>https://deanlin.net/blog/202602/git-worktree-ai-agents/</link>
      <pubDate>Tue, 24 Feb 2026 17:10:50 +0800</pubDate>
      <guid>https://deanlin.net/blog/202602/git-worktree-ai-agents/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>AI 實戰</category>
      <description>最近與一群工程師朋友聚餐時，我們聊到公司導入 AI 加速開發後，遇到的各種問題。</description>
      <media:content url="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-og_hu_8005436eed5612fe.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-01.webp" width="1400" height="788" alt="【Git Worktree 實戰】指揮 AI Agents 同時運作，搭配 Agent Skills 建立自動化協作體系（圖 1）" fetchpriority="high" decoding="async"></p>
<p>最近與一群工程師朋友聚餐時，我們聊到公司導入 AI 加速開發後，遇到的各種問題。</p>
<p>其中討論最熱烈的點，就是大家 <strong>Code Review 的負擔大幅增加</strong>，畢竟 AI 寫程式的速度，實在太快了。</p>
<blockquote>
<p><strong>在過去，一天完成既定工作量就是好員工；但現在有了 AI 的幫助，有些公司會認為，一天要完成 3 倍工作量才算達到 KPI。</strong></p>
</blockquote>
<p>而這，就衍生了一系列的問題：</p>
<h3 class="h-nomark" id="-缺乏深度思考">① 缺乏深度思考<a class="h-anchor" href="#-%e7%bc%ba%e4%b9%8f%e6%b7%b1%e5%ba%a6%e6%80%9d%e8%80%83" aria-label="這個段落的連結"></a></h3>
<p>因為 KPI 大幅上升，大家為了追上進度，就會犧牲對需求的深度思考，或者說，直接讓 AI 代替思考。</p>
<h3 class="h-nomark" id="-懶得-code-review">② 懶得 Code Review<a class="h-anchor" href="#-%e6%87%b6%e5%be%97-code-review" aria-label="這個段落的連結"></a></h3>
<p>完成的功能增加，就會導致功能合併到主線時的 Code Review 負擔，以往會認真思考別人的設計是否合理，但如果要看的份量太多，很多人就放棄理解直接合併。</p>
<h3 class="h-nomark" id="-最終導致的結果">③ 最終導致的結果<a class="h-anchor" href="#-%e6%9c%80%e7%b5%82%e5%b0%8e%e8%87%b4%e7%9a%84%e7%b5%90%e6%9e%9c" aria-label="這個段落的連結"></a></h3>
<p>團隊集體責任感下降、專案理解力降低、程式碼品質降低、上線後錯誤增加。</p>
<hr>
<p>切記，我們雖然可以讓 AI 自己檢查、修改、寫測試程式，但這只是確保產品的底線。</p>
<blockquote class="pullquote"><p>假使用 AI 開發過中大型專案，就會理解全權交給 AI 有多麼的不切實際。</p>
</blockquote>
<p><strong>AI 產生的程式碼很多，但這不是你不檢查的原因，我們應該去想怎麼利用 AI 去優化檢查流程。</strong></p>
<blockquote class="pullquote"><p>別忘記，當你對 AI 產出的內容，按下同意的那一刻，所有的錯誤必須由人類來承擔。</p>
</blockquote>
<p>所以今天這篇文章，我要跟大家分享如何用 Git Worktree 搭配 Agent Skills，來解決前面提到的痛點：</p>
<h3 class="h-nomark" id="-爲什麼版本控制很重要">① 爲什麼版本控制很重要<a class="h-anchor" href="#-%e7%88%b2%e4%bb%80%e9%ba%bc%e7%89%88%e6%9c%ac%e6%8e%a7%e5%88%b6%e5%be%88%e9%87%8d%e8%a6%81" aria-label="這個段落的連結"></a></h3>
<p>我會先展示一個經典的錯誤案例，讓大家更直觀的理解，如果沒有基礎的版本控制概念，專案會遭遇哪些災難。</p>
<h3 class="h-nomark" id="-完成前置作業">② 完成前置作業<a class="h-anchor" href="#-%e5%ae%8c%e6%88%90%e5%89%8d%e7%bd%ae%e4%bd%9c%e6%a5%ad" aria-label="這個段落的連結"></a></h3>
<p>接著帶大家了解 Git Worktree 基礎操作，並安裝 pnpm 減少磁碟空間浪費，以及分享有哪些好用的擴充套件能增加我們操作效率。</p>
<h3 class="h-nomark" id="-agent-skills透過-git-worktree-拆分任務設計-spec">③ Agent Skills：透過 Git Worktree 拆分任務、設計 SPEC<a class="h-anchor" href="#-agent-skills%e9%80%8f%e9%81%8e-git-worktree-%e6%8b%86%e5%88%86%e4%bb%bb%e5%8b%99%e8%a8%ad%e8%a8%88-spec" aria-label="這個段落的連結"></a></h3>
<p>然後就要進入實作階段，這邊會先提出一個複雜功能，以此觸發 Agent Skills 執行 Git Worktree 拆分任務，讓每個功能都有自己的工作區，這樣 AI Agent 就可以同時執行。</p>
<h3 class="h-nomark" id="-agent-skills拆分-commit讓邏輯可被追蹤">④ Agent Skills：拆分 Commit，讓邏輯可被追蹤<a class="h-anchor" href="#-agent-skills%e6%8b%86%e5%88%86-commit%e8%ae%93%e9%82%8f%e8%bc%af%e5%8f%af%e8%a2%ab%e8%bf%bd%e8%b9%a4" aria-label="這個段落的連結"></a></h3>
<p>在確認功能符合預期後，我會請 AI 根據調整檔案分階段的 commit，讓邏輯在未來可以被追蹤。</p>
<h3 class="h-nomark" id="-降低-code-review-負擔">⑤ 降低 Code Review 負擔<a class="h-anchor" href="#-%e9%99%8d%e4%bd%8e-code-review-%e8%b2%a0%e6%93%94" aria-label="這個段落的連結"></a></h3>
<p>把修改推送上去後，我們要透過 Pull Request 將變更的內容合併到主分支，為了讓 Code Review 的人快速理解，我們可以請 AI 根據變更生成 PR 模板。</p>
<blockquote>
<p>如果你是第一次接觸 Agent Skills，我過去有拍一隻影片分享安裝、使用、製作的技巧：<a href="https://youtu.be/xe00zJEtuMo">https://youtu.be/xe00zJEtuMo</a></p>
</blockquote>
<p><strong>如果你剛接觸 Vibe Coding ，或是進入職場不久，相信這隻影片會讓你了解業界在導入 AI 開發時，遇到的實際狀況。</strong></p>
<blockquote>
<p>完整的 Demo，可以觀看 YT 喔 👉</p>
<p>對 AI 應用感興趣的朋友，歡迎按下訂閱按鈕，未來我計畫分享一系列 AI 工具的應用教學。</p>
</blockquote>
<div class="yt" data-yt="1VuLTQidbPM" data-title="【Git Worktree 實戰】指揮 AI Agents 同時運作，搭配 Agent Skills 建立自動化協作體系">
  <a class="yt-link" href="https://www.youtube.com/watch?v=1VuLTQidbPM" target="_blank" rel="noopener" aria-label="播放影片：【Git Worktree 實戰】指揮 AI Agents 同時運作，搭配 Agent Skills 建立自動化協作體系">
    <img src="https://i.ytimg.com/vi/1VuLTQidbPM/hqdefault.jpg" alt="" width="480" height="360" loading="lazy" decoding="async">
    <span class="yt-play" aria-hidden="true"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M8 5.2v13.6L19 12z"/></svg></span>
    <span class="yt-title">【Git Worktree 實戰】指揮 AI Agents 同時運作，搭配 Agent Skills 建立自動化協作體系</span>
  </a>
</div>

<hr>
<h2 class="h-nomark" id="-缺乏版控概念是災難的起點">① 缺乏版控概念，是災難的起點<a class="h-anchor" href="#-%e7%bc%ba%e4%b9%8f%e7%89%88%e6%8e%a7%e6%a6%82%e5%bf%b5%e6%98%af%e7%81%bd%e9%9b%a3%e7%9a%84%e8%b5%b7%e9%bb%9e" aria-label="這個段落的連結"></a></h2>
<p>現在輸入簡單的指令，AI 就可以根據需求完成功能，甚至一口氣完成 10 個功能都沒有問題。</p>
<p>從表面上來看，效率倍增，但實際上有非常多的隱患，這邊展示一個實際案例讓大家更能理解：</p>
<figure class="figure"><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-02.webp" width="1400" height="755" alt="參考 PR: https://github.com/deancourse/git-worktree-demo/pull/1" loading="lazy" decoding="async">
  <figcaption>參考 PR: <a href="https://github.com/deancourse/git-worktree-demo/pull/1">https://github.com/deancourse/git-worktree-demo/pull/1</a></figcaption>
</figure>

<p>在團隊合作時，如果想把自己的修改合併回主線，會先開一個 Pull Request，讓其他人幫你檢查程式碼、討論是否需要修改，確認沒問題後再合併。</p>
<p>以這個 Pull Request 舉例，標題寫著「新增 i18n 多語系、淺色深色主題設計、常見 QA 問答區…」等多個功能，感覺做了很多事。</p>
<blockquote class="pullquote"><p>但從專案管理的角度來看，其實每個功能都應該對應到不同的 feature branch，不要在一個分支中放多個功能。</p>
</blockquote>
<p>把視角切換到「Files changed」，你會對我說的話更有體會，像這個 Pull Request 涵蓋了 18 個檔案，有近千多行的程式變更；從 Code Review 的角度來看，你根本無法了解變更的功能要對應到哪些檔案。</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-03.webp" width="1400" height="755" alt="① 缺乏版控概念，是災難的起點（圖 3）" loading="lazy" decoding="async"></p>
<p>再來，我們看一下「Commits」的分頁，你會發現改了這麼多功能，竟然只有一個 commit，而且訊息也非常的簡單。</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-04.webp" width="1400" height="755" alt="① 缺乏版控概念，是災難的起點（圖 4）" loading="lazy" decoding="async"></p>
<p>這會導致未來發生問題時，我們無法追溯當時的設計邏輯，完全沒有參考價值。</p>
<p><strong>其實這邊所展示的問題，在過去就已經存在了，但在使用 AI 加速開發後，問題被成倍放大。</strong></p>
<p>因此接下來要跟大家分享，如何透過 Git Worktree 與 Agent Skills 來解決這些痛點。</p>
<hr>
<h2 class="h-nomark" id="-建立-git-worktree-環境git--pnpm--extensions">② 建立 Git Worktree 環境：Git + pnpm + Extensions<a class="h-anchor" href="#-%e5%bb%ba%e7%ab%8b-git-worktree-%e7%92%b0%e5%a2%83git--pnpm--extensions" aria-label="這個段落的連結"></a></h2>
<p>為了方便大家可以跟著影片操作，我在 GitHub 有上傳一個練習用的專案，歡迎大家路過按個 Star：</p>
<figure class="figure"><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-05.webp" width="1400" height="694" alt="【Git Worktree 實戰】指揮 AI Agents 同時運作，搭配 Agent Skills 建立自動化協作體系（圖 3）" loading="lazy" decoding="async">
  <figcaption><a href="https://github.com/deancourse/git-worktree-demo">https://github.com/deancourse/git-worktree-demo</a></figcaption>
</figure>

<p>這邊我建議大家點擊 fork，將專案複製到自己的帳號下：</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-06.webp" width="1400" height="753" alt="② 建立 Git Worktree 環境：Git &#43; pnpm &#43; Extensions（圖 6）" loading="lazy" decoding="async"></p>
<p>然後點擊 Code，從裡面複製專案網址：</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-07.webp" width="1400" height="753" alt="② 建立 Git Worktree 環境：Git &#43; pnpm &#43; Extensions（圖 7）" loading="lazy" decoding="async"></p>
<p>接著打開你熟悉的程式碼編輯器，這邊我以 Google 最近推出的 Antigravity 來示範，這是 Google 最新推出的 AI 程式碼編輯</p>
<p>目前登入 Google 帳號就可以使用，但如果付費升級到 Pro 會有更高的使用額度：</p>
<figure class="figure"><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-08.webp" width="1400" height="826" alt="【Git Worktree 實戰】指揮 AI Agents 同時運作，搭配 Agent Skills 建立自動化協作體系（圖 4）" loading="lazy" decoding="async">
  <figcaption><a href="https://antigravity.google/">https://antigravity.google/</a></figcaption>
</figure>

<p>但如果你熟悉的是 Cursor 或 Claude 等其他 AI 工具也沒關係，因為以 Agent Skills 的設定來說，只有路徑稍微不同而已。</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-09.webp" width="1400" height="826" alt="② 建立 Git Worktree 環境：Git &#43; pnpm &#43; Extensions（圖 9）" loading="lazy" decoding="async"></p>
<p>好的，我們再把注意力轉回 Antigravity，點擊 <code>Clone Repository</code>，貼上剛剛複製的網址來下載專案：</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-10.webp" width="1400" height="826" alt="② 建立 Git Worktree 環境：Git &#43; pnpm &#43; Extensions（圖 10）" loading="lazy" decoding="async"></p>
<p>接下來要先跟大家分享，安裝哪些工具可以更舒適的使用 Git Worktree 功能：</p>
<h3 id="-確認-git-版本">確認 Git 版本<a class="h-anchor" href="#-%e7%a2%ba%e8%aa%8d-git-%e7%89%88%e6%9c%ac" aria-label="這個段落的連結"></a></h3>
<p>首先，我們要確認電腦的 Git 版本。</p>
<blockquote>
<p>提醒一下大家，因為這隻影片會使用到 Node.js 與 Git 等技術，如果你是第一次接觸，我有專門錄一隻影片分享詳細的操作步驟喔！</p>
<p><a href="https://youtu.be/5DEV_K0JauQ">https://youtu.be/5DEV_K0JauQ</a></p>
</blockquote>
<p><a href="https://git-scm.com/">安裝好 Git 後</a>，點擊上方的 Toggle Panel 開啟終端機，輸入指令 <code>git -v</code> 確認有正確安裝。</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-11.webp" width="1400" height="826" alt="確認 Git 版本（圖 11）" loading="lazy" decoding="async"></p>
<p>另外提醒安裝過的朋友，<strong>如果你的版本低於 2.30，建議升級到最新版本，這樣 Git Worktree 功能會較為完整。</strong></p>
<h3 id="-安裝-pnpm">安裝 pnpm<a class="h-anchor" href="#-%e5%ae%89%e8%a3%9d-pnpm" aria-label="這個段落的連結"></a></h3>
<p>因為 Git Worktree 會建立多個工作目錄，而 Node.js 專案的 node_modules 動輒上百 MB。</p>
<p>如果用 <code>npm</code> 安裝會消耗大量硬碟資源，因此我推薦大家使用 <code>pnpm</code> 這款套件。</p>
<p>在終端機輸入 <code>npm install -g pnpm</code> 便可完成全局安裝。</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-12.webp" width="1400" height="826" alt="安裝 pnpm（圖 12）" loading="lazy" decoding="async"></p>
<p>pnpm 會將所有套件存放在電腦的一個共用儲存區，各專案的 node_modules 只是透過連結指向同一份套件。</p>
<p>雖然每個 Worktree 需要執行 pnpm install，但不會重新下載套件，非常適合搭配 Git Worktree 進行並行開發。</p>
<h3 id="-安裝-extensions">安裝 Extensions<a class="h-anchor" href="#-%e5%ae%89%e8%a3%9d-extensions" aria-label="這個段落的連結"></a></h3>
<p>然後我們把視角轉到左側選單，點擊「Extensions」的分頁，這邊推薦大家安裝兩款外掛。</p>
<p>第一款是「Git Worktree Manager」，他能讓你透過介面輕鬆的建立、切換、清理 Worktree。</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-13.webp" width="1400" height="826" alt="安裝 Extensions（圖 13）" loading="lazy" decoding="async"></p>
<p>第二款是「GitLens」，安裝好後，你把滑鼠移到對應的程式碼位置時，可以直接看到 Commit 的歷史。</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-14.webp" width="1400" height="826" alt="安裝 Extensions（圖 14）" loading="lazy" decoding="async"></p>
<blockquote>
<p>不過這邊要提醒一下大家，這些外掛大部分是由第三方開發的，安裝前請自行評估安全性。</p>
</blockquote>
<h3 id="-了解-git-worktree-工作模式">了解 Git Worktree 工作模式<a class="h-anchor" href="#-%e4%ba%86%e8%a7%a3-git-worktree-%e5%b7%a5%e4%bd%9c%e6%a8%a1%e5%bc%8f" aria-label="這個段落的連結"></a></h3>
<p>做好前置作業後，我們先在終端機輸入 <code>pnpm install</code> 安裝套件。</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-15.webp" width="1400" height="826" alt="了解 Git Worktree 工作模式（圖 15）" loading="lazy" decoding="async"></p>
<p>安裝完成後，輸入 <code>pnpm run dev</code> 便可啟動專案，下面就會有一個「localhost:3000」的網址。</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-16.webp" width="1400" height="826" alt="了解 Git Worktree 工作模式（圖 16）" loading="lazy" decoding="async"></p>
<p>確認專案可以順利啟動後，我們回到 Antigravity，點擊左側剛剛安裝好的「Git Worktree Manager」，然後點擊這個資料夾的符號來新增 Worktree。</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-17.webp" width="1400" height="826" alt="了解 Git Worktree 工作模式（圖 17）" loading="lazy" decoding="async"></p>
<p>因為我們要從現在的主分支，切換到其他分支，所以選擇第一個「Create new branch」</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-18.webp" width="1400" height="826" alt="了解 Git Worktree 工作模式（圖 18）" loading="lazy" decoding="async"></p>
<p>至於分支的名稱就打 <code>test</code>，主要是先讓大家了解 Git Worktree 概念；至於目錄，使用系統自動生成的就好了，最後點擊「Create」，就會直接把工作區的內容複製一份過去。</p>
<p>此時，你就會看到 test 出現在 Worktree List 當中：</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-19.webp" width="1400" height="826" alt="了解 Git Worktree 工作模式（圖 19）" loading="lazy" decoding="async"></p>
<p>點擊後便會開啟一個新的工作區，打開終端機後，要在輸入 <code>pnpm install</code> 來安裝套件；<strong>你會發現套件幾乎在瞬間安裝完畢，打開 node_modules 資料夾，你會發現有箭頭圖示「↩」。</strong></p>
<p>代表只是建立資料夾的連結，而非重新下載套件，這就是 pnpm 的運作方式，可以幫我們節省硬碟空間。</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-20.webp" width="1400" height="826" alt="了解 Git Worktree 工作模式（圖 20）" loading="lazy" decoding="async"></p>
<p>然後我們嘗試輸入 <code>pnpm run dev</code> 啟動專案，這次的網址變成了「localhost:3001」，點擊後，網頁也可以順利呈現。</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-21.webp" width="1400" height="826" alt="了解 Git Worktree 工作模式（圖 21）" loading="lazy" decoding="async"></p>
<p>這邊的示範，是想要讓大家了解<strong>每個 Worktree 都是獨立的工作目錄，所以可以同時跑不同的 dev server 跟 port</strong>。</p>
<p>當然，也代表我們可以<strong>同時指揮多個 AI Agent 並行開發不同功能。</strong></p>
<p>也跟大家說明一下，如何把 Worktree 刪除；在刪除前，請先把剛剛啟動的專案關閉。</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-22.webp" width="1400" height="826" alt="了解 Git Worktree 工作模式（圖 22）" loading="lazy" decoding="async"></p>
<p>然後回到 Git Worktree Manager 的介面，點擊右鍵，在 Worktree Action 當中選擇 Remove Worktree，就可以移除了。</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-23.webp" width="1400" height="826" alt="了解 Git Worktree 工作模式（圖 23）" loading="lazy" decoding="async"></p>
<hr>
<h2 class="h-nomark" id="-agent-skill自動建立分支與開發規格">③ Agent Skill：自動建立分支與開發規格<a class="h-anchor" href="#-agent-skill%e8%87%aa%e5%8b%95%e5%bb%ba%e7%ab%8b%e5%88%86%e6%94%af%e8%88%87%e9%96%8b%e7%99%bc%e8%a6%8f%e6%a0%bc" aria-label="這個段落的連結"></a></h2>
<p>前面有說到，不同的功能應該使用不同的 feature branch 來開發；但具體怎麼拆分功能，以及 branch 的名稱如何命名，我們可以直接設計一個 Agent Skill 來幫我們搞定。</p>
<p>如果你是 Fork 我的專案，在根目錄下方會有一個「.agent」的資料夾，我有放一些 Skills 讓大家跟著影片一起體驗：</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-24.webp" width="1400" height="826" alt="③ Agent Skill：自動建立分支與開發規格（圖 24）" loading="lazy" decoding="async"></p>
<p>像這邊我設計了一個 <code>git-worktree-design</code> 技能，把 Markdown 點開來後，跟大家說明一下設計的邏輯：</p>
<ol>
<li>首先會檢查目前專案分支的狀況，確認既有 Worktree，以及是否有沒提交的變更。</li>
<li>然後將複雜的需求拆成獨立的 feature branch 以及參考的規格後，用表格預覽，使用者確認後才會執行。</li>
<li>接下來就會根據 Skill 指定的格式建立 Worktree。</li>
<li>並順便安裝好每個 Worktree 的套件。</li>
<li>然後新增這個 feature 要執行的 SPEC，方便後續 AI Agent 的開發。</li>
<li>完成以上任務後，會再用表格像我們展示完成的結果。</li>
</ol>
<p>了解 Skill 的設計邏輯後，我們在右側與 AI 的對話視窗中，輸入指令</p>
<pre tabindex="0"><code>採用 Worktree，新增淺色深色主題設計、常見 QA 問答區、Cookie 同意彈窗
</code></pre><p>此時，你會發現 AI 判斷需要使用 Git Worktree 這個 Skill，並初步規劃了每個 Worktree 要參考的規格：</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-25.webp" width="1400" height="826" alt="③ Agent Skill：自動建立分支與開發規格（圖 25）" loading="lazy" decoding="async"></p>
<p>確認沒問題後，就可以讓 AI 幫我們執行下去，稍等一段時間後，AI 說他已經幫我們完成了對應的設計。</p>
<p>打開左側 Git Worktree Manager 的分頁，可以看到看到新增的 Worktree：</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-26.webp" width="1400" height="826" alt="③ Agent Skill：自動建立分支與開發規格（圖 26）" loading="lazy" decoding="async"></p>
<p>這邊點擊其中一個 Worktree，你可以看到 AI 有根據我們的指示，用 pnpm 來安裝套件，所以 node_modules 下面資料夾有這個箭頭符號。</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-27.webp" width="1400" height="826" alt="③ Agent Skill：自動建立分支與開發規格（圖 27）" loading="lazy" decoding="async"></p>
<p>並且根目錄的地方有存放給「git-Worktree-spec.md」這個給 AI Agent 參考的規格，確保執行的方向。</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-28.webp" width="1400" height="826" alt="③ Agent Skill：自動建立分支與開發規格（圖 28）" loading="lazy" decoding="async"></p>
<hr>
<h2 class="h-nomark" id="-指揮多個-ai-agents-同時執行">④ 指揮多個 AI Agents 同時執行<a class="h-anchor" href="#-%e6%8c%87%e6%8f%ae%e5%a4%9a%e5%80%8b-ai-agents-%e5%90%8c%e6%99%82%e5%9f%b7%e8%a1%8c" aria-label="這個段落的連結"></a></h2>
<p>但讓 AI 參考規格開發前，跟大家分享一個小技巧。先開啟與 AI 對話的視窗，點擊右上方的「…」選擇 Customizations，選擇 Workflows：</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-29.webp" width="1400" height="826" alt="④ 指揮多個 AI Agents 同時執行（圖 29）" loading="lazy" decoding="async"></p>
<p>我有設計一個自動化流程，這樣只要輸入快捷鍵，就可以讓 AI 知道讀取規格、執行實作、驗收結果的步驟：</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-30.webp" width="1400" height="826" alt="④ 指揮多個 AI Agents 同時執行（圖 30）" loading="lazy" decoding="async"></p>
<p>這邊我們先點開其中一個 Worktree，輸入「/」，選擇剛剛的那個 workflow，點擊「Enter」他就會開始執行了：</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-31.webp" width="1400" height="826" alt="④ 指揮多個 AI Agents 同時執行（圖 31）" loading="lazy" decoding="async"></p>
<p>以往我們開發功能因為在同一個工作區，所以需要一個完成後才能執行下一個。</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-32.webp" width="1400" height="826" alt="④ 指揮多個 AI Agents 同時執行（圖 32）" loading="lazy" decoding="async"></p>
<p>但用 Git Worktree 的好處，就是可以多個 AI Agent 同時執行。這邊我也把另外兩個 Worktree 打開，輸入「/」讓他們根據 workflow 來執行。</p>
<p>但如果如果要在多個視窗切換，來觀察不同 AI Agent 執行的進度有點麻煩。</p>
<p>所以我們可以點擊上方的「Open Agent Manager」，這樣就能知道 Agent 執行的過程是否需要我們介入。</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-33.webp" width="1400" height="826" alt="④ 指揮多個 AI Agents 同時執行（圖 33）" loading="lazy" decoding="async"></p>
<p>像這邊轉圈圈就是代表執行中，而稍等一段時間後，就會變成鈴鐺提醒的符號。</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-34.webp" width="1400" height="826" alt="④ 指揮多個 AI Agents 同時執行（圖 34）" loading="lazy" decoding="async"></p>
<p>稍等一段時間後，AI 就在不同的工作區，完成了各自的功能，這邊我們也可以從 SPEC 的修改中，看到他已經自我驗證了功能符合需求。</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-35.webp" width="1400" height="826" alt="④ 指揮多個 AI Agents 同時執行（圖 35）" loading="lazy" decoding="async"></p>
<blockquote class="pullquote"><p>但 AI 完成後，人類一定也要自行確認結果是否符合期待，這邊我先開啟各個 worktree 的瀏覽器。</p>
</blockquote>
<p>把所有服務都啟動後，也剛好趁這個機會，跟大家說明不同功能分 feature 開發的好處</p>
<p>首先是我們人類驗證功能會比較輕鬆，因為要確認的面向單一</p>
<ul>
<li>像 Cookie 的部分，就是下方在使用者進入時，會有彈窗提示</li>
</ul>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-36.webp" width="1400" height="826" alt="④ 指揮多個 AI Agents 同時執行（圖 36）" loading="lazy" decoding="async"></p>
<ul>
<li>而淺色深色主題這塊，則是上方多了一個按鈕，讓使用者自由切換主題</li>
</ul>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-37.webp" width="1400" height="826" alt="④ 指揮多個 AI Agents 同時執行（圖 37）" loading="lazy" decoding="async"></p>
<ul>
<li>至於常見問答，也有根據主題新增了對應的區塊</li>
</ul>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-38.webp" width="1400" height="826" alt="④ 指揮多個 AI Agents 同時執行（圖 38）" loading="lazy" decoding="async"></p>
<p>再確認修改符合預期後，先把 Agent Manager 關閉，我們要把 Worktree 的變更推送上去。</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-39.webp" width="1400" height="826" alt="④ 指揮多個 AI Agents 同時執行（圖 39）" loading="lazy" decoding="async"></p>
<p>比如我們來打開淺色深色主題的 Worktree，以往我們可能是人工手打，或是點擊「Generate」讓 AI 自動產生。</p>
<p>但人工手打不僅耗時，每個人的撰寫習慣也各不相同；但假使點擊 Generate 讓 AI 自動產生，他生成的訊息有時候是英文，有時是中文，而且長短很隨機。</p>
<blockquote class="pullquote"><p>所以 commit 這塊，我也有設計一個 Skill，讓 AI 根據我的指引生成。</p>
</blockquote>
<p>我們先回到專案的目錄，點擊「.agent」資料夾，在 skills 底下有一個「git-smart-commit」的技能：</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-40.webp" width="1400" height="826" alt="④ 指揮多個 AI Agents 同時執行（圖 40）" loading="lazy" decoding="async"></p>
<p>他的任務就是把雜亂的變更，拆分成有意義的 commit；<strong>畢竟請 AI 輔助開發時，很可能一口氣改了很多個檔案，如果全部放在一個 commit，那這個 commit 就跟沒寫一樣。</strong></p>
<p>這邊我們把左側的選單切換到 Source Control，你就會看到這個淺色深色主題有修改到多個檔案</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-41.webp" width="1400" height="826" alt="④ 指揮多個 AI Agents 同時執行（圖 41）" loading="lazy" decoding="async"></p>
<p>這邊我就在對話窗輸入</p>
<pre tabindex="0"><code>新增 commit
</code></pre><p>稍等一段時間，會看到 AI 根據變更的檔案，生成對應的 commit 訊息：</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-42.webp" width="1400" height="826" alt="④ 指揮多個 AI Agents 同時執行（圖 42）" loading="lazy" decoding="async"></p>
<p>commit 送出後，記得要點擊 Publish Branch 才會將檔案上傳喔！</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-43.webp" width="1400" height="826" alt="④ 指揮多個 AI Agents 同時執行（圖 43）" loading="lazy" decoding="async"></p>
<p>完成後可以把這個工作區關閉，另外兩個 Worktree 也是一樣操作即可。</p>
<p>都 Publish 之後，我們回到 GitHub 網頁，此時你會看到下拉選單中有剛剛上傳的 branch：</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-44.webp" width="1400" height="826" alt="④ 指揮多個 AI Agents 同時執行（圖 44）" loading="lazy" decoding="async"></p>
<p>隨便點擊一個，就可以看到剛剛撰寫的 commit 訊息：</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-45.webp" width="1400" height="826" alt="④ 指揮多個 AI Agents 同時執行（圖 45）" loading="lazy" decoding="async"></p>
<p>但目前的 feature 都在不同的 branch，所以接下來會帶大家透過 Pull Reqeust，將功能合併到主線。</p>
<hr>
<h2 class="h-nomark" id="-好的-pull-request讓-code-review-變輕鬆">⑤ 好的 Pull Request，讓 Code Review 變輕鬆<a class="h-anchor" href="#-%e5%a5%bd%e7%9a%84-pull-request%e8%ae%93-code-review-%e8%ae%8a%e8%bc%95%e9%ac%86" aria-label="這個段落的連結"></a></h2>
<p>這邊先點擊上方的「Pull Requests」：</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-46.webp" width="1400" height="826" alt="⑤ 好的 Pull Request，讓 Code Review 變輕鬆（圖 46）" loading="lazy" decoding="async"></p>
<p>選擇「New Pull Requests」：</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-47.webp" width="1400" height="826" alt="⑤ 好的 Pull Request，讓 Code Review 變輕鬆（圖 47）" loading="lazy" decoding="async"></p>
<p>如果你是 fork 我的專案，這邊要特別注意，base 要改成自己的帳號，然後 compare 要選擇想合併進來的 feature 分支：</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-48.webp" width="1400" height="826" alt="⑤ 好的 Pull Request，讓 Code Review 變輕鬆（圖 48）" loading="lazy" decoding="async"></p>
<p>建立 PR 後，你會看到要填寫標題與描述，根據我的工作經驗，PR 是決定專案品質的重要環節：</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-49.webp" width="1400" height="826" alt="⑤ 好的 Pull Request，讓 Code Review 變輕鬆（圖 49）" loading="lazy" decoding="async"></p>
<p>因為他是讓團隊成員 Code Review 時，理解你到底做了些什麼的文件</p>
<p><strong>如果隨便寫寫，那審核的人通常也是隨意看看；畢竟直接讀程式碼，去理解功能為何這樣設計，真的太消耗腦力了。</strong></p>
<blockquote class="pullquote"><p>我知道很多人嫌寫 PR 很麻煩，所以我也設計了一個 Skill，用來生成 Pull Request 的草稿。</p>
</blockquote>
<p>這邊我們把視角切換到 Antigravity，這個 Skill 一樣是放在「.agent/skills」底下，名稱叫做「git-pr-description」。</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-50.webp" width="1400" height="826" alt="⑤ 好的 Pull Request，讓 Code Review 變輕鬆（圖 50）" loading="lazy" decoding="async"></p>
<p>這邊跟大家簡述這個 Skill 的設計</p>
<ol>
<li>首先，預設合併的目標為 master 這個主線分支，如果你是用 main/develop 等其他的分支請自行調整。</li>
<li>接下來就會把當前的分支與目標分支進行比對，讀取差異的檔案與 commit 訊息，這邊也再次跟大家提醒 commit 訊息是很重要的，你不想寫，至少要讓 AI 幫你寫吧。</li>
<li>而後就是分析變更的內容，然後生成 Pull Request 的 Title 與 Description。</li>
<li>其中 Description 的部分，我是要求他參考「pr-template」的這個範例檔來撰寫，如果大家想把這個 Skill 導入目前的工作流，可以改寫這個檔案。</li>
</ol>
<p>講了這麼多，我直接示範給大家看比較快；一樣打開 Agent Manager，然後再各自的 Agent 輸入。</p>
<pre tabindex="0"><code>撰寫 PR
</code></pre><p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-51.webp" width="1400" height="826" alt="⑤ 好的 Pull Request，讓 Code Review 變輕鬆（圖 51）" loading="lazy" decoding="async"></p>
<p>稍等一段時間後，他就會根據 Skill 提供的格式生成 Pull Request 的草稿了：</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-52.webp" width="1400" height="826" alt="⑤ 好的 Pull Request，讓 Code Review 變輕鬆（圖 52）" loading="lazy" decoding="async"></p>
<p>這邊我們把它複製到 GitHub 後，我強烈建議大家至少要跟著測試案例執行過一遍。</p>
<p>如果是前端專案的話，建議附上對應的圖片，這樣可以減少別人 Code Review 時的負擔，同時也確認了功能符合預期。</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-53.webp" width="1400" height="826" alt="⑤ 好的 Pull Request，讓 Code Review 變輕鬆（圖 53）" loading="lazy" decoding="async"></p>
<p>如果專案是自己開發的，那就直接點擊 Merge 合併就好。</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-54.webp" width="1400" height="826" alt="⑤ 好的 Pull Request，讓 Code Review 變輕鬆（圖 54）" loading="lazy" decoding="async"></p>
<p>接下來回到 Antigravity，合併好的 Worktree，我個人會建議直接點擊右鍵，在 Worktree Action 當中選擇 Remove Worktree 將他移除，避免 Worktree 太多管理困難。</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-55.webp" width="1400" height="826" alt="⑤ 好的 Pull Request，讓 Code Review 變輕鬆（圖 55）" loading="lazy" decoding="async"></p>
<p>至於另外兩個 Worktree 也是一樣操作，先建立 Pull Request，接著用 AI 生成對應的 Review 草稿，確認沒問題後合併回主線，完成這一切後記得移除 Worktree。</p>
<p>但有一點要提醒一下大家，因為 Worktree AI Agent 同時開發，所以開發當下不會知道彼此的變更</p>
<p><strong>所以把功能合併回主線時，可能出現衝突</strong>；像常見問答跟淺色深色的分支在合併時，都遇到了這個問題：</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-56.webp" width="1400" height="826" alt="⑤ 好的 Pull Request，讓 Code Review 變輕鬆（圖 56）" loading="lazy" decoding="async"></p>
<p>點擊「Resolve conflicts」可以看到發生衝突的位置，但我個人並不建議在網頁上調整，因為你無法得知調整後的實際狀況：</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-57.webp" width="1400" height="826" alt="⑤ 好的 Pull Request，讓 Code Review 變輕鬆（圖 57）" loading="lazy" decoding="async"></p>
<p><strong>我建議回到程式碼編輯器上操作，本地解決完衝突，確認結果符合預期後再更新上去。</strong></p>
<p>這邊先回到 Antigravity 的頁面，我以切換淺色深色主題這個分支來做示範。</p>
<p>首先，我們要打開終端機，執行 <code>git fetch origin</code> 拉取遠端最新資料 然後再執行 <code>git merge origin/master</code> 來同步主線的更新。</p>
<p>執行後，你就會發現左側 Source Control 這個地方，在 Merge Changes 有一個衝突的檔案：</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-58.webp" width="1400" height="826" alt="⑤ 好的 Pull Request，讓 Code Review 變輕鬆（圖 58）" loading="lazy" decoding="async"></p>
<p>打開後就會看到產生衝突的位置，衝突通常分成「語法衝突」跟「邏輯衝突」。</p>
<blockquote>
<p>邏輯衝突較難處理，因為要考量到相容性或是改寫程式，這個之後有機會透過一個主題專門分享。</p>
</blockquote>
<p>而現在看到的這個是調整 CSS 網頁外型的語法衝突；只是括號位置撞到了而已，所以我選擇 Accept Current Change。</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-59.webp" width="1400" height="826" alt="⑤ 好的 Pull Request，讓 Code Review 變輕鬆（圖 59）" loading="lazy" decoding="async"></p>
<p>這邊也跟大家提一下前面安裝 Gitlens 外掛的好處，像這邊滑鼠移到程式碼時，你就可以看到當時是誰更新了這段程式、更新的目的是什麼：</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-60.webp" width="1400" height="826" alt="⑤ 好的 Pull Request，讓 Code Review 變輕鬆（圖 60）" loading="lazy" decoding="async"></p>
<p>處理完衝突後，按下「+」，然後輸入 commit</p>
<pre tabindex="0"><code>chore: sync with master
</code></pre><p>這是與主線同步的意思，然後點擊「Sync Changes」推送上去。</p>
<p>此時回到 GitHub，刷新一下網頁，就會發現可以順利合併嚕！</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-61.webp" width="1400" height="826" alt="⑤ 好的 Pull Request，讓 Code Review 變輕鬆（圖 61）" loading="lazy" decoding="async"></p>
<p>等所有 feature 都合併到主線後，我們可以在 master 的這個地方輸入 <code>git pull</code>，拉回變更。</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-62.webp" width="1400" height="826" alt="⑤ 好的 Pull Request，讓 Code Review 變輕鬆（圖 62）" loading="lazy" decoding="async"></p>
<p>然後輸入 <code>pnpm run dev</code>，來確認合併後的內容是否符合預期。</p>
<p><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-63.webp" width="1400" height="826" alt="⑤ 好的 Pull Request，讓 Code Review 變輕鬆（圖 63）" loading="lazy" decoding="async"></p>
<p>這邊把視角切到網頁，我們可以看到第一次進入時，下方會有 Cookie 的詢問視窗，上面可以切換淺色、深色主題，往下滑一點，常見問題的段落也有順利顯示。</p>
<p>如果文章看到這邊，先給自己拍拍手，然後別忘記幫忙點個讚。</p>
<blockquote>
<p>假使你有跟著教學做到這個步驟，歡迎留言，讓我知道觀眾裡面有狠人，因為這個主題真的不容易。</p>
</blockquote>
<hr>
<h2 id="結語人才是-ai-的瓶頸">結語：人，才是 AI 的瓶頸<a class="h-anchor" href="#%e7%b5%90%e8%aa%9e%e4%ba%ba%e6%89%8d%e6%98%af-ai-%e7%9a%84%e7%93%b6%e9%a0%b8" aria-label="這個段落的連結"></a></h2>
<p>完成這隻影片後，我不禁有個特別的感悟。</p>
<p>因為這隻影片不管是專案範例、Commit 訊息、Agent Skills，甚至連 Pull Request 都是 AI 生成的。</p>
<p>我從頭到尾一行程式都沒有寫，主要任務就是去 Review AI 給的建議、執行的成果。</p>
<blockquote class="pullquote"><p>我想未來絕大多數產品，背後也都是 AI 在進行開發與迭代。</p>
</blockquote>
<p>但這並不代表 AI 可以取代工程師，雖然現在人人都可以寫程式；<strong>但「團隊溝通、功能擴充、系統維護、問題解決」都是需要經驗的。</strong></p>
<p>就拿今天的影片來舉例好了，我是因為觀察到 Code Review 的速度，已經跟不上 AI 寫程式的速度。</p>
<blockquote class="pullquote"><p>當人成為 AI 的瓶頸時，就要去分析如何降低門檻。</p>
</blockquote>
<p>比如不同功能要建立各自的分支，以減少 Code Review 的認知負擔。又或者完成功能後，請 AI 分析程式碼分段 commit，並撰寫 Pull Request 草稿，讓團隊協作的資訊有一致性。</p>
<p><strong>雖然每一步都是 AI 在執行，但如果沒有業界的實戰經驗，大家對這些工具如何與 AI 協作是沒有概念的。</strong></p>
<p>但這些才是真正的痛點，只要設計好就能提升個人與團隊的工作效率。</p>
<p>當然，我相信一定還有很多更好的方案，歡迎大家留言分享。</p>
<blockquote class="pullquote"><p>最後提醒大家，不管 AI 多強大，總需要有個人按下同意按鈕。</p>
</blockquote>
<blockquote class="pullquote"><p>當你按下去的那刻，責任就歸屬於你，畢竟 AI 還不能幫人背鍋。</p>
</blockquote>
<p>如果這篇文章對你有幫助，可以順手按個讚，並把文章分享給對 AI 主題感興趣的朋友們。</p>
<figure class="figure"><img src="https://deanlin.net/blog/202602/git-worktree-ai-agents/images/git-worktree-ai-agents-64.webp" width="1400" height="914" alt="林鼎淵著作《工程師下班有約：企業內訓講師帶你認清職涯真相！》" loading="lazy" decoding="async">
  <figcaption><a href="https://www.tenlong.com.tw/products/9786264142083">https://www.tenlong.com.tw/products/9786264142083</a></figcaption>
</figure>

]]></content:encoded>
    </item>
    <item>
      <title>【Antigravity Agent Skills 教學】用實戰搞懂原理，讓 AI 從庸才變專家</title>
      <link>https://deanlin.net/blog/202602/antigravity-agent-skills/</link>
      <pubDate>Mon, 02 Feb 2026 13:36:34 +0800</pubDate>
      <guid>https://deanlin.net/blog/202602/antigravity-agent-skills/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>AI 實戰</category>
      <description>安裝專業技能、掌握客製化技巧、節省 Token 額度</description>
      <media:content url="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-og_hu_41535a75184a3199.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<p><img src="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-01.webp" width="1400" height="788" alt="【Antigravity Agent Skills 教學】用實戰搞懂原理，讓 AI 從庸才變專家（圖 1）" fetchpriority="high" decoding="async"></p>
<p>用 AI Agent 工具一段時間後，你可能會遇到下面幾個痛點：</p>
<h3 class="h-nomark" id="-不知如何下好指令">① 不知如何下好指令<a class="h-anchor" href="#-%e4%b8%8d%e7%9f%a5%e5%a6%82%e4%bd%95%e4%b8%8b%e5%a5%bd%e6%8c%87%e4%bb%a4" aria-label="這個段落的連結"></a></h3>
<p>前陣子收到觀眾私訊，他說：「我覺得 Google AI Studio 的美感比較好，Antigravity 的設計有點醜。」</p>
<p>但其實造成這個問題的關鍵原因，不是工具而是指令；如果你有給 AI 指定的風格、參考的設計，甚至是配色的引導，那肯定能獲得更理想的結果。</p>
<blockquote>
<p>不過大部分的人，並不具備這些專業知識。</p>
</blockquote>
<h3 class="h-nomark" id="-需要重複貼上提示詞">② 需要重複貼上提示詞<a class="h-anchor" href="#-%e9%9c%80%e8%a6%81%e9%87%8d%e8%a4%87%e8%b2%bc%e4%b8%8a%e6%8f%90%e7%a4%ba%e8%a9%9e" aria-label="這個段落的連結"></a></h3>
<p>比如寫程式時要 AI 遵守特定的 Coding Style、撰寫企劃時要 AI 參考指定的模板架構，就連現在大家看的這個影片，下面的字幕都是請 AI 執行特定流程優化的。</p>
<blockquote>
<p>儘管我根據不同情境設計對應的提示詞；但隨著提示詞數量增加，需要時都要找半天，甚至忘記自己設計過，浪費時間重寫一個。</p>
</blockquote>
<h3 class="h-nomark" id="-使用額度快速耗盡">③ 使用額度快速耗盡<a class="h-anchor" href="#-%e4%bd%bf%e7%94%a8%e9%a1%8d%e5%ba%a6%e5%bf%ab%e9%80%9f%e8%80%97%e7%9b%a1" aria-label="這個段落的連結"></a></h3>
<p>如果看過我過去幾篇文章，你可能已經根據自己的工作需求設定了 Rules。</p>
<p>如果你只是設定通用型的 Rule 那沒什麼問題，但如果每個情境都有設計對應的規則，那 Token 額度會消耗很快。</p>
<blockquote>
<p>因為 AI 開啟新對話時，會先載入這些 Rules，並在後續對話中檢查是否需要遵守；如果設計太多不僅會浪費額度，有時還會因為資訊過載導致忽略規則。</p>
</blockquote>
<p>而今天跟分享的 Skill，就是用來解決這些痛點的。</p>
<p>你可以把 Skill 想像成一個技能包，裡面有精心設計過的提示詞（Prompt）、程式腳本（Scripts）、參考資源（Reference）。</p>
<blockquote class="pullquote"><p>而現在的 AI Agent，有能力在收到你的指令後，透過閱讀技能包的描述，自行判斷使用時機。</p>
</blockquote>
<p><strong>所以我們只要安裝合適的技能包，並根據自己的需求建立技能，AI 就能夠從庸才走向專家。</strong></p>
<blockquote>
<p>完整的 Demo，可以觀看 YT 喔 👉</p>
<p>對 AI 應用感興趣的朋友，歡迎按下訂閱按鈕，未來我計畫分享一系列 AI 工具的應用教學。</p>
</blockquote>
<div class="yt" data-yt="xe00zJEtuMo" data-title="【Antigravity Agent Skills 教學】當別人還在複製貼上，你的 AI 已經自動搞定">
  <a class="yt-link" href="https://www.youtube.com/watch?v=xe00zJEtuMo" target="_blank" rel="noopener" aria-label="播放影片：【Antigravity Agent Skills 教學】當別人還在複製貼上，你的 AI 已經自動搞定">
    <img src="https://i.ytimg.com/vi/xe00zJEtuMo/hqdefault.jpg" alt="" width="480" height="360" loading="lazy" decoding="async">
    <span class="yt-play" aria-hidden="true"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M8 5.2v13.6L19 12z"/></svg></span>
    <span class="yt-title">【Antigravity Agent Skills 教學】當別人還在複製貼上，你的 AI 已經自動搞定</span>
  </a>
</div>

<h2 class="h-nomark" id="--ruleworkflowskill-的使用場景">① Rule/Workflow/Skill 的使用場景<a class="h-anchor" href="#--ruleworkflowskill-%e7%9a%84%e4%bd%bf%e7%94%a8%e5%a0%b4%e6%99%af" aria-label="這個段落的連結"></a></h2>
<p>為了方便大家了解 Skill 如何運作，我在 GitHub 有上傳一個練習用的專案：</p>
<p><a href="https://github.com/dean9703111/ai-agent-skill-for-video-workflow">https://github.com/dean9703111/ai-agent-skill-for-video-workflow</a></p>
<p>這篇文章使用 Antigravity 來做示範，但如果你熟悉的是 Cursor 或 Claude 等其他 AI 工具也沒關係，因為以 Skill 的設定來說，只有路徑稍微不同而已。</p>
<p><img src="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-02.webp" width="655" height="483" alt="① Rule/Workflow/Skill 的使用場景（圖 2）" loading="lazy" decoding="async"></p>
<p>接下來跟大家說明 Rule/Workflow/Skill 各自的使用場景：</p>
<h3 id="-rules--通用規則">Rules — 通用規則<a class="h-anchor" href="#-rules--%e9%80%9a%e7%94%a8%e8%a6%8f%e5%89%87" aria-label="這個段落的連結"></a></h3>
<p>在這邊填寫的內容，以「通用規則」為主，在大多數場景都能直接適用。</p>
<p>我並不建議大家把 Rule 的內容寫得太仔細，因為每次開啟新對話時，AI 都會把這份文件讀一遍。</p>
<p>換句話說，過多的 Rule 不僅會佔用上下文空間浪費 Token 額度，還可能載入一些不必要的資訊造成幻覺。</p>
<blockquote>
<p>如果想根據不同場景設計，建議使用後面提到的 Skill 方案。</p>
</blockquote>
<h3 id="-workflows--工作流">Workflows — 工作流<a class="h-anchor" href="#-workflows--%e5%b7%a5%e4%bd%9c%e6%b5%81" aria-label="這個段落的連結"></a></h3>
<p>相比於每次都會觸發的 Rule 規則，Workflow 就需要用「/」才能呼叫執行；通常會在這邊設計有明確步驟，邏輯較為複雜的工作流。</p>
<p>以這個範例來說，我就是在一個 Workflow 裡面根據不同情境使用多個 Skills：</p>
<p><img src="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-03.webp" width="1400" height="812" alt="Workflows — 工作流（圖 3）" loading="lazy" decoding="async"></p>
<p>這個工作流就是方便我在完成影片拍攝後，執行「上字幕、設計字卡、影片介紹」等後期工作。</p>
<p>你會發現每個步驟我都有讓他參考單獨的 Skill，而不是直接把完整邏輯寫在裡面，這個設計是讓我在未來擴充與維護上更有彈性。</p>
<h3 id="-skills--專業技能">Skills — 專業技能<a class="h-anchor" href="#-skills--%e5%b0%88%e6%a5%ad%e6%8a%80%e8%83%bd" aria-label="這個段落的連結"></a></h3>
<p>相比於 Rule 會閱讀完整份文件，Skill 則是在你送出提示詞後，根據需求來使用。</p>
<p><img src="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-04.webp" width="1400" height="812" alt="Skills — 專業技能（圖 4）" loading="lazy" decoding="async"></p>
<p>● <strong>Skill — Discovery</strong></p>
<p>比如我這邊建立了「音訊轉字幕（audio-to-srt）、優化字幕（srt-enhancer）、設計字卡（srt-card-annotator）、影片介紹（srt-social-summary）」的 Skills。</p>
<p>之所以用這些技能舉例，是想提醒大家，<strong>AI Agent 並不是只能用來寫程式，分析資源、內容創作的表現也是很棒的。</strong></p>
<p>這邊打開與 AI 的對話窗，把測試用的音訊檔案拖曳進去後，輸入<code>轉 SRT 字幕檔</code></p>
<p>他就會開始搜尋是否有跟任務相關的 Skill。</p>
<p><img src="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-05.webp" width="1400" height="812" alt="Skills — 專業技能（圖 5）" loading="lazy" decoding="async"></p>
<p><strong>● Skill — Activation</strong></p>
<p>像這裡，我們看到他匹配到了「audio-to-srt」這個 Skill，此時他才會完整閱讀整份 Markdown 文件。</p>
<p>在這之前 AI 只會先閱讀文件裡面的技能名稱與描述，可以大幅節省 Token。</p>
<p>從 AI 的視角來說，有點像是我們用 Google 搜尋時，會先看到標題與描述。</p>
<p><strong>● Skill — Execution</strong></p>
<p>接著 AI 就會跟著文件描述逐步執行，如果環境沒有設定好，AI 也會輔助你安裝所需資源；也提醒一下大家，如果你跟我一樣使用 Mac，但版本沒有升級到 Sonoma 以上，套件安裝可能會失敗。</p>
<blockquote>
<p>這邊警告一下大家，如果你找到的 Skill 底下有 scripts 要執行，請謹慎評估，因為你並不確定這些程式是否含有惡意程式。</p>
</blockquote>
<p>稍等一段時間，就可以看到 srt 字幕檔在 Skill 的幫助下生成完畢。</p>
<p><img src="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-06.webp" width="1400" height="812" alt="Skills — 專業技能（圖 6）" loading="lazy" decoding="async"></p>
<p>Skill 除了有 scripts 這個存放執行腳本的資料夾，還有一個存放參考資料的 references 資料夾。</p>
<p>這邊我以「srt-social-summary」這個用來做影片簡介的 Skill 舉例，為了讓影片被更多人看到，我需要到 Facebook、Thread、YouTube 等不同平台宣傳。</p>
<p>但不同平台都有自己的特性，<strong>而 references 的文件就是用來補充這些細節的參考資源。</strong>比如 HashTag 要如何標記、開頭怎麼吸引人、不同平台的內容要怎麼撰寫。</p>
<p>這些細節不用寫在「SKILL.md」裏面，讓 AI 判斷有需求的時候再去讀取就好，這是一個漸進式揭露（Progressive Disclosure）的技巧。</p>
<p><img src="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-07.webp" width="1400" height="812" alt="Skills — 專業技能（圖 7）" loading="lazy" decoding="async"></p>
<hr>
<h2 class="h-nomark" id="--站在巨人的肩膀使用設計好的-skill">② 站在巨人的肩膀，使用設計好的 Skill<a class="h-anchor" href="#--%e7%ab%99%e5%9c%a8%e5%b7%a8%e4%ba%ba%e7%9a%84%e8%82%a9%e8%86%80%e4%bd%bf%e7%94%a8%e8%a8%ad%e8%a8%88%e5%a5%bd%e7%9a%84-skill" aria-label="這個段落的連結"></a></h2>
<p>在初步理解 Skill 的運作原理後，接下來我會透過實戰，讓大家直觀的了解「不使用 Skill」與「使用 Skill」所帶來的差異。</p>
<h3 id="-不使用-skills">不使用 Skills<a class="h-anchor" href="#-%e4%b8%8d%e4%bd%bf%e7%94%a8-skills" aria-label="這個段落的連結"></a></h3>
<p>這邊先展示「不使用 Skills」的原始狀態，我準備了自己的個人簡歷與參考圖片，請他幫我客製化一個能呈現專業的個人品牌網頁。</p>
<p><img src="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-08.webp" width="1400" height="812" alt="不使用 Skills（圖 8）" loading="lazy" decoding="async"></p>
<pre tabindex="0"><code>參考來源履歷後，新增資料夾「personal-website」，設計一個有專業質感的中文個人品牌網頁
</code></pre><p>稍等一段時間後我們得到了一個網頁，打開後你會覺得這個畫面的配色有熟悉的藍紫色，排版也有種 AI 感，距離好看的網頁還有一段距離。</p>
<p><img src="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-09.webp" width="1400" height="812" alt="不使用 Skills（圖 9）" loading="lazy" decoding="async"></p>
<h3 id="-安裝-skills">安裝 Skills<a class="h-anchor" href="#-%e5%ae%89%e8%a3%9d-skills" aria-label="這個段落的連結"></a></h3>
<p>所以接下來我們要為專案新增一個 Skill，這邊推薦大家可以到 SkillsMP 這個網站: <a href="https://skillsmp.com/">https://skillsmp.com/</a></p>
<p><img src="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-10.webp" width="1400" height="756" alt="安裝 Skills（圖 10）" loading="lazy" decoding="async"></p>
<p>有些多人把自己建立好的 Skill 分享出來讓大家使用，你可以看到總數已經超過了 10 萬個。</p>
<p>你可以透過英文的關鍵字，來搜尋自己想要的 Skill；比如你如果想要設計個人形象網頁，你可以輸入「frontend-design」</p>
<p><img src="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-11.webp" width="1400" height="812" alt="安裝 Skills（圖 11）" loading="lazy" decoding="async"></p>
<p>這邊就會看到一個由 anthropics 官方建立的 Skill，如果想要安裝他，直接複製上面的指令就可以了。</p>
<p><img src="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-12.webp" width="1400" height="812" alt="安裝 Skills（圖 12）" loading="lazy" decoding="async"></p>
<blockquote>
<p>這邊提醒一下大家，如果沒安裝 Node.js 是無法執行這個指令的，我過去有把 Python、Node.js、Git 這些工具的安裝與使用，拍成教學影片: <a href="https://youtu.be/5DEV_K0JauQ">https://youtu.be/5DEV_K0JauQ</a></p>
</blockquote>
<p>接下來我們把畫面切回 Antigravity，開啟下方的終端機把指令貼上去後，這邊你就會看到 Claude 有提供的 Skills，你可以用鍵盤的「上下」滾動畫面，透過「空白鍵」來選擇。</p>
<p><img src="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-13.webp" width="1400" height="812" alt="安裝 Skills（圖 13）" loading="lazy" decoding="async"></p>
<p>這邊我就以「frontend-design」來做示範，安裝完成後，我們可以打開右側與 AI 的對話視窗。</p>
<h3 id="-使用-skills">使用 Skills<a class="h-anchor" href="#-%e4%bd%bf%e7%94%a8-skills" aria-label="這個段落的連結"></a></h3>
<p>然後輸入一樣的提示詞</p>
<pre tabindex="0"><code>參考來源履歷後，新增資料夾「personal-website-skill」，設計一個有專業質感的中文個人品牌網頁
</code></pre><p>此時你會發現他有先找到對應的 SKILL.md，然後再去做執行：</p>
<p><img src="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-14.webp" width="1400" height="812" alt="使用 Skills（圖 14）" loading="lazy" decoding="async"></p>
<p>稍等一段時間後，他就幫我們把網頁生成出來了。第一眼看上去，網頁整體的質感有稍微上升：</p>
<p><img src="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-15.webp" width="1400" height="812" alt="使用 Skills（圖 15）" loading="lazy" decoding="async"></p>
<p>但稍微往下瀏覽後你會發現，<strong>其實跟上一個沒使用 Skill 的相比，也許結構上有些微提升，但老實講差異沒有差太大。</strong></p>
<p><img src="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-16.webp" width="1400" height="812" alt="使用 Skills（圖 16）" loading="lazy" decoding="async"></p>
<p>透過這個範例，是想讓大家了解：</p>
<blockquote class="pullquote"><p>並不是有 Skill 就能得到好作品，他只是讓你有更好的起點</p>
</blockquote>
<p>整個看下來，這個網頁存在幾個問題：「首先是設計上沒有特色，再來是資訊只是平鋪直述，所以整體看下來並沒有什麼吸引力。」</p>
<h3 id="-使用-skills--完整提示詞">使用 Skills + 完整提示詞<a class="h-anchor" href="#-%e4%bd%bf%e7%94%a8-skills--%e5%ae%8c%e6%95%b4%e6%8f%90%e7%a4%ba%e8%a9%9e" aria-label="這個段落的連結"></a></h3>
<p>但如何讓網頁更有吸引力呢？接下來我就要跟大家分享，如何優化提示詞放大 Skill 能力。</p>
<pre tabindex="0"><code>請參考我的履歷後，新增一個資料夾「personal-website-skill-enhance」並依照以下步驟執行：
## STEP 1: 內容彙整
完整閱讀我的履歷後，整理成「個人品牌網站可用的內容模組」，**不可自行刪減重要資訊**。
請至少包含（若履歷中有）：
- 核心定位（一句話我在幫誰解決什麼問題）
- 專業角色與背景
- 授課 / 演講 / 企業內訓經歷（請完整保留）
- 專案或代表案例
- 媒體、著作、出版或公開曝光
- 可合作項目與服務形式
- 聯絡方式與行動引導（CTA）
## STEP 2: 敘事優化
請你將上述內容改寫為「適合放在個人品牌網站的版本」：
- 用專業但有人味的中文
- 避免履歷條列感
- 讓「企業、學校、合作夥伴」一看就懂我能帶來什麼價值
- 授課經歷請以「信任背書」角度呈現，而不是流水帳
此階段請只產出文字，不要有 HTML / CSS。
## STEP 3: 元件與版型決策
扮演「個人品牌網站 UX 設計師」的角色，判斷：
對每一段內容，請標示：
- 適合的呈現元件（例如：Hero 區塊、Timeline、Card Grid、Logo Wall、CTA Section、Sticky Contact）
- 為什麼用這個元件（目的與心理預期）
- 建議放在頁面的位置（上 / 中 / 下）
- 是否適合做成「強調區塊」
請用表格呈現。
## STEP 4: 網站生成
最後根據以下要點生成網頁（參考 SKILL 裡面的 frontend-design）：
- 單頁個人品牌網站
- 中文為主
- 強調專業、可信任、可合作
- 聯絡方式要「非常清楚、好行動」
- 請參考文字引用圖片（複製一份過去）
</code></pre><p>看完上面的提示詞後，可能有人會舉手發問：「老師！你這個提示詞也太複雜了吧！」</p>
<p><strong>是的，我的提示詞真的挺複雜，但如果你希望 AI 辦好事，你提出的需求就要足夠具體。</strong></p>
<p>假如你認為這些提示詞使用的頻率很高，你也可以把他們設計為 Skill。</p>
<p>但以剛剛的範例來說，因為有根據履歷這個情境特別設計，所以設計成 Workflow 這類需要主動觸發的工作流會更為合適。</p>
<p>等 AI 完成後，我們打開網頁瀏覽一下，此時你會發現不只設計感提升了，連裡面的描述都變得更加有吸引力：</p>
<p><img src="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-17.webp" width="1400" height="812" alt="使用 Skills &#43; 完整提示詞（圖 17）" loading="lazy" decoding="async"></p>
<p>而且前兩個生成的網頁都沒有圖片，而這個全部都有：</p>
<p><img src="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-18.webp" width="1400" height="812" alt="使用 Skills &#43; 完整提示詞（圖 18）" loading="lazy" decoding="async"></p>
<p>我想大家一看就知道，有 Skill 再加上精準的提示詞能得到更好的結果。</p>
<h3 id="-哪些地方有-skill">哪些地方有 Skill<a class="h-anchor" href="#-%e5%93%aa%e4%ba%9b%e5%9c%b0%e6%96%b9%e6%9c%89-skill" aria-label="這個段落的連結"></a></h3>
<p>了解如何安裝與應用 Skill 後，我再跟大家介紹幾個分享 Skill 的網站</p>
<p>比如 awesome-claude-skills 這個 GitHub Repository 裡面就有許多的 Skills 讓大家參考</p>
<a class="linkcard" href="https://github.com/ComposioHQ/awesome-claude-skills" target="_blank" rel="noopener">
  <span class="lc-body">
    <span class="lc-title">GitHub - ComposioHQ/awesome-claude-skills: A curated list of awesome Claude Skills, resources, and…</span>
    <span class="lc-desc">A curated list of awesome Claude Skills, resources, and tools for customizing Claude AI workflows …</span>
    <span class="lc-site"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M7 17 17 7M8.5 7H17v8.5"/></svg>github.com</span>
  </span>
  <span class="lc-thumb">
    <img src="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-card-01_hu_a7c6efa1e4d24ace.webp" width="320" height="320" alt="" loading="lazy" decoding="async">
  </span>
</a>

<p>除了撰寫程式的 Skills 外，內容也涵蓋了像是「文件處理、圖片優化、研究助理」這類型的技能。</p>
<p>這邊再介紹一個優化前端視覺的 Skill</p>
<a class="linkcard" href="https://ui-ux-pro-max-skill.nextlevelbuilder.io/" target="_blank" rel="noopener">
  <span class="lc-body">
    <span class="lc-title">UI UX Pro Max - Design Intelligence for Claude Code</span>
    <span class="lc-desc">Searchable database of UI styles, color palettes, font pairings, chart types, and UX guidelines for Claude Code skill.</span>
    <span class="lc-site"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M7 17 17 7M8.5 7H17v8.5"/></svg>ui-ux-pro-max-skill.nextlevelbuilder.io</span>
  </span>
</a>

<p>跟前面分享的 frontend-design 相比，他有根據不同網頁主題做優化；像這邊就有區分成教育類型的網頁、寵物服務的網頁、電子商務的網頁：</p>
<p><img src="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-19.webp" width="1400" height="812" alt="哪些地方有 Skill（圖 19）" loading="lazy" decoding="async"></p>
<p>如果你想使用這個 Skill，在終端機的地方輸入 <code>npm install -g uipro-cli</code> ，然後輸入 <code>uipro init — ai antigravity</code>，你就會看到它安裝完畢了。</p>
<p>因為剛剛指定安裝到 antigravity，所以技能會被存在「.agents/skills」底下。</p>
<p><img src="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-20.webp" width="1400" height="812" alt="哪些地方有 Skill（圖 20）" loading="lazy" decoding="async"></p>
<p>我們把資料夾展開看看，你會發現有一個「scripts」的資料夾，裡面有一些 Python 的程式，這些程式會在 SKILL 載入後，於不同的時機點被執行。</p>
<h3 id="-skill-安全問題">Skill 安全問題<a class="h-anchor" href="#-skill-%e5%ae%89%e5%85%a8%e5%95%8f%e9%a1%8c" aria-label="這個段落的連結"></a></h3>
<p>雖然前面已經說過了，但我還是要再次提醒大家，如果打算使用別人的 Skill，建議確認以下 3 點：</p>
<ol>
<li><strong>從信任的來源去安裝 Skills</strong>，如果是從 GitHub 上下載，可以透過他的 Star 數量來初步判斷。</li>
<li><strong>建議看一下 scripts 目錄下的程式有沒有危險的操作</strong>，像呼叫外部 URL、修改檔案、存取敏感資料這類的，如果看不懂程式，可以請 AI 幫你做初步的檢查。</li>
<li><strong>確認「SKILL.md」是否有敏感指令</strong>，比如把儲存隱私資訊的「.env」傳送到特定網址。</li>
</ol>
<p>希望大家在享受 AI 帶來便利的同時，也能對資安有更高的敏銳度。</p>
<h3 id="-skill-使用經驗">Skill 使用經驗<a class="h-anchor" href="#-skill-%e4%bd%bf%e7%94%a8%e7%b6%93%e9%a9%97" aria-label="這個段落的連結"></a></h3>
<p>最後提醒一下大家，Skill 並不是裝越多，AI 就越強；像這邊能處理前端的 Skill 我裝了兩個，因此請 AI 生成網頁時兩個都會觸發。</p>
<p><img src="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-21.webp" width="1400" height="812" alt="Skill 使用經驗（圖 21）" loading="lazy" decoding="async"></p>
<p><strong>而這所造成的問題除了 Token 的浪費外，還很容易讓 AI 執行到一半卡住。</strong></p>
<p><strong>因此同類型的技能，建議擇優安裝一個，或是合併成一個；在提示詞的世界，1+1 有可能會小於 1。</strong></p>
<p>另外網路上的 Skill 雖然很多，但並不是每個都能讓 AI 變強，有些描述的很猛，但實際體驗很差。</p>
<p>建議大家可以先用 Project 的方式，獨立測試 Skill 運作是否符合預期。真的有用，並且通用的再把他放到 Global Skill 裏面。</p>
<p>這個表格是常見工具的 Global Skill 路徑：</p>
<p><img src="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-22.webp" width="1400" height="619" alt="Skill 使用經驗（圖 22）" loading="lazy" decoding="async"></p>
<p>如果你希望安裝一次，就能在所有工具中生效，Mac 可以使用 <code>ln -s</code>，Windows 可以使用 <code>mklink</code> 的指令，將資料夾建立為 symlink 連結。</p>
<p>希望我的經驗，可以讓大家更高效地享受 Skill 帶來的好處。</p>
<hr>
<h2 class="h-nomark" id="--建立自己的-skill搞定繁瑣工作">③ 建立自己的 Skill，搞定繁瑣工作<a class="h-anchor" href="#--%e5%bb%ba%e7%ab%8b%e8%87%aa%e5%b7%b1%e7%9a%84-skill%e6%90%9e%e5%ae%9a%e7%b9%81%e7%91%a3%e5%b7%a5%e4%bd%9c" aria-label="這個段落的連結"></a></h2>
<p>儘管網路上有很多 Skill，但未必能符合自己實際的工作流，如果找不到合適的，那我們就自己建立！</p>
<h3 id="-安裝-skill-development">安裝 Skill Development<a class="h-anchor" href="#-%e5%ae%89%e8%a3%9d-skill-development" aria-label="這個段落的連結"></a></h3>
<p>不知道怎麼下手也別擔心，我們可以請 AI 幫忙生成初版，這邊我在終端機輸入剛剛用來安裝 frontend-design 的指令，<code>npx skills add anthropics/claude-code</code> ，不過這次我要安裝的是 Skill Development。</p>
<p><img src="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-23.webp" width="1400" height="812" alt="安裝 Skill Development（圖 23）" loading="lazy" decoding="async"></p>
<h3 id="-建立自己的-skill">建立自己的 Skill<a class="h-anchor" href="#-%e5%bb%ba%e7%ab%8b%e8%87%aa%e5%b7%b1%e7%9a%84-skill" aria-label="這個段落的連結"></a></h3>
<p>安裝完畢後，開一個新的對話窗，描述自己想建立的 Skill，這邊我是請 AI 建立一個用 Python 將音訊檔轉成 srt 字幕檔的 Skill。</p>
<pre tabindex="0"><code>我想要建立一個透過 Python 將音訊檔轉成 srt 逐字稿的 Skill
使用 openai-whisper 套件
我可以設定每行最多幾個字，若沒填寫預設最多 22 字，最少 4 個字
時間軸若不連續，當間隔小於 0.3s 時，後面需要往前補
執行時會先檢查環境與套件是否安裝，並確認有提供音訊檔
將最後輸出的 srt 檔命名為「origin.srt」
</code></pre><p>你這邊在 AI 執行的過程中看到，他是有參考剛剛安裝的 Skill Development：</p>
<p><img src="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-24.webp" width="1400" height="812" alt="建立自己的 Skill（圖 24）" loading="lazy" decoding="async"></p>
<p>稍等一段時間後，AI Agent 就用這個 Skill 幫我們建立了一個新的 Skill。</p>
<p>我們打開建立好的 SKILL.md，跟大家說明內容結構，<strong>上面這塊是 Meta Data，也就是 AI Agent 一開始會閱讀的資訊，其中最重要的是 description 的描寫，寫得越具體，AI 執行時會更容易找到。</strong></p>
<p><img src="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-25.webp" width="1400" height="812" alt="建立自己的 Skill（圖 25）" loading="lazy" decoding="async"></p>
<p>下面則是這個 Skill 的描述與執行步驟，像一開始會先確認環境，是否有安裝 Python 與對應的套件，沒問題後才會去執行 Python 腳本；這邊你會看到有一個 scripts 的資料夾，這就是 AI 幫我們寫好的 Python 腳本。</p>
<p><img src="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-26.webp" width="1400" height="812" alt="建立自己的 Skill（圖 26）" loading="lazy" decoding="async"></p>
<h3 id="-測試-skill">測試 Skill<a class="h-anchor" href="#-%e6%b8%ac%e8%a9%a6-skill" aria-label="這個段落的連結"></a></h3>
<p>得到 Skill 初版後，接下來最重要的是去驗證他的運作是否符合預期，這邊先開一個新的對話窗，提供一個音訊檔，然後輸入指令：</p>
<pre tabindex="0"><code>轉成字幕檔
</code></pre><p>稍等一段時間後，srt 字幕檔就產生了，我們來驗證一下他是否有根據規則設計：</p>
<ol>
<li>首先檔名是「origin.srt」符合預期</li>
<li>有遵守每行最長 22 字，最少 4 個字的規則</li>
<li>前後段時間軸會黏在一起</li>
</ol>
<p><img src="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-27.webp" width="1400" height="812" alt="測試 Skill（圖 27）" loading="lazy" decoding="async"></p>
<p>如果你跟著教學做到這一步，恭喜你完成了第一個 Skill。</p>
<p>這邊我再建立一個有關聯性的 Skill 示範給大家看，這個 Skill 的目標是請 AI 在 srt 字幕檔內，判斷適合增加字卡的位置，加快我後期剪輯的效率。</p>
<pre tabindex="0"><code>我想要建立一個在 srt 逐字稿文字下方補上「參考字卡」的 Skill
只能在每段字幕的「文字區塊」下方新增字卡行，不可更改原本的時間碼與原字幕文字。
我希望的結構是 `[字卡](word:xxx / type:yyy)`
- word：必須是從該段內容萃取出的「重點詞/短句」（10~16 字內，避免太長）
- type：必須從 references/*.yaml 定義的 type 之一選擇(金色重點、白色提醒、紅色警告、藍色列點)
每 10 段字幕內，至少要新增 2 個字卡，字卡必須「貼合情境」選型：
- 有風險、錯誤、踩雷 → 紅色警告
- 建議、提醒、注意事項 → 白色提醒
- 條列、步驟、清單感 → 藍色列點
- 核心結論、最關鍵一句 → 金色重點
將最後輸出的 srt 檔命名為「reference-cards.srt」
請勿使用 Python 之類的腳本，必須要用 AI 來判斷
</code></pre><p>在 Skill 完成後，我們開一個新的視窗，把上一步生成的「origin.srt」放進去，然後在提示窗輸入：</p>
<pre tabindex="0"><code>給我字卡重點
</code></pre><p>稍等一段時間後，可以看到「reference-cards.srt」的字幕檔出現了，點進去後，你會發現 AI 有在裡面設計一些參考插入字卡的位置。</p>
<p><img src="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-28.webp" width="1400" height="812" alt="測試 Skill（圖 28）" loading="lazy" decoding="async"></p>
<h3 id="-觸發多個-skill">觸發多個 Skill<a class="h-anchor" href="#-%e8%a7%b8%e7%99%bc%e5%a4%9a%e5%80%8b-skill" aria-label="這個段落的連結"></a></h3>
<p>確認 Skill 運作符合預期後，你也可以一個指令中觸發多個 Skill：</p>
<pre tabindex="0"><code>幫我將音檔轉成逐字稿後，再生成字卡
</code></pre><p>這邊你會看到他閱讀了兩個 Skill 的檔案，並且在最後成功生成「origin.srt、reference-cards.srt」的檔案。</p>
<p><img src="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-29.webp" width="1400" height="812" alt="觸發多個 Skill（圖 29）" loading="lazy" decoding="async"></p>
<h3 id="-優化-skill">優化 Skill<a class="h-anchor" href="#-%e5%84%aa%e5%8c%96-skill" aria-label="這個段落的連結"></a></h3>
<p>但我們發現這兩個檔案被放在「.agent/skills」的目錄底下，他應該要跟音訊檔在同個階層才對。</p>
<p>發現結果不如預期，請 AI 幫我們調整就好，這邊我就跟他說：</p>
<pre tabindex="0"><code>「origin.srt、reference-cards.srt」應該與音訊檔在同個階層，幫我優化 Skill，並移動檔案
</code></pre><p><img src="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-30.webp" width="1400" height="812" alt="優化 Skill（圖 30）" loading="lazy" decoding="async"></p>
<h3 id="-設計-workflow-觸發">設計 Workflow 觸發<a class="h-anchor" href="#-%e8%a8%ad%e8%a8%88-workflow-%e8%a7%b8%e7%99%bc" aria-label="這個段落的連結"></a></h3>
<p>確認 Skill 可以組合應用後，再介紹一個更偷懶的方式，我們可以設計 Worflow 讓他穩定觸發，名稱我打 <code>audio-to-srt-cards</code> ，描述這邊我寫「將音檔轉成逐字稿後，再生成字卡的工作流」，而內容清楚描述每一步要參考的 Skill 就可以了：</p>
<pre tabindex="0"><code>按造下面步驟執行
STEP 1: 使用「mp3-to-srt」的 Skill 將音檔轉成逐字稿
STEP 2: 使用「reference-cards」的 Skill 用逐字稿生成參考字卡
</code></pre><p><img src="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-31.webp" width="1400" height="812" alt="設計 Workflow 觸發（圖 31）" loading="lazy" decoding="async"></p>
<p>設定完成後，開一個新的對話窗，輸入「/」後，選擇剛剛建立的 Workflow，接著我們把先前產生的 srt 移除後，將音訊檔放進去。</p>
<p><img src="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-32.webp" width="1400" height="812" alt="設計 Workflow 觸發（圖 32）" loading="lazy" decoding="async"></p>
<p>稍等一段時間，就可以看到工作流有根據我們的指引，參考對應的 Skill 完成任務了！而且生成的字幕檔有跟音訊檔在同個階層：</p>
<p><img src="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-33.webp" width="1400" height="812" alt="設計 Workflow 觸發（圖 33）" loading="lazy" decoding="async"></p>
<blockquote>
<p>相信大家掌握 Skill 與 Workflow 搭配的技巧後，做任何事都會更加省力！</p>
</blockquote>
<hr>
<h2 id="結語把解決問題的經驗變成可重複使用的資產">結語：把解決問題的經驗，變成可重複使用的資產<a class="h-anchor" href="#%e7%b5%90%e8%aa%9e%e6%8a%8a%e8%a7%a3%e6%b1%ba%e5%95%8f%e9%a1%8c%e7%9a%84%e7%b6%93%e9%a9%97%e8%ae%8a%e6%88%90%e5%8f%af%e9%87%8d%e8%a4%87%e4%bd%bf%e7%94%a8%e7%9a%84%e8%b3%87%e7%94%a2" aria-label="這個段落的連結"></a></h2>
<p>使用生成式 AI 一段時間後，你會發現 AI 並沒有你想的那麼聰明。交給他的任務，往往要透過幾次來回對話，才能得到期待的結果。</p>
<p>但得到答案後，大部分人會習慣直接把對話視窗關閉；然後下次遇到類似的問題時，又要重頭開始與 AI 對話。</p>
<blockquote class="pullquote"><p>我覺得這件事非常可惜！</p>
</blockquote>
<p>建議大家下次與 AI 協作解決問題後，不要急著關閉對話框，嘗試用這個指令來彙整你們之間的對話：</p>
<pre tabindex="0"><code>請將上方對話整理成以下內容，並在最後設計一個可以重現結果的提示詞：
1. 起初怎麼提問
2. 中間如何引導與調整
3. 最終是如何得出這個成果的
</code></pre><p>得到提示詞後，你就可以用前面分享的方法，把它變成一個 Skill；之後遇到類似的問題時，AI 就知道要使用這個 Skill 來解決。</p>
<blockquote class="pullquote"><p>我認為過去解決過的問題，不應該再花時間解決第二次。</p>
</blockquote>
<p>當然一開始建立的 Skill 可能考量的不夠完善；但遇到結果不如預期的狀況時，不就是打磨 Skill，讓他更強大的時機嗎？</p>
<p><strong>這個技巧用得越久，你的 AI Agent 會越來越強大，成為別人難以跨越的護城河。</strong></p>
<blockquote class="pullquote"><p>Agent Skills 的出現，讓 AI 的價值可以持續累積；只要教會一次，他就永遠記得怎麼做！</p>
</blockquote>
<p>如果這篇文章對你有幫助，可以順手按個讚，並把文章分享給對 AI 主題感興趣的朋友們。</p>
<figure class="figure"><img src="https://deanlin.net/blog/202602/antigravity-agent-skills/images/antigravity-agent-skills-34.webp" width="1400" height="914" alt="林鼎淵著作《工程師下班有約：企業內訓講師帶你認清職涯真相！》" loading="lazy" decoding="async">
  <figcaption><a href="https://www.tenlong.com.tw/products/9786264142083">https://www.tenlong.com.tw/products/9786264142083</a></figcaption>
</figure>

]]></content:encoded>
    </item>
  </channel>
</rss>
