iT邦幫忙

2026 iThome 鐵人賽

DAY 20
0
Claude AI

買了 Claude Code,然後呢?系列 第 20 篇

Day 20|我能跑,別人拿到也能跑嗎?

  • 分享至 

  • xImage
  •  

我能跑,別人拿到也能跑嗎?原來作者一直在旁邊補上執行權限

我把 Skill、腳本和使用說明都準備好了。換到一個全新的環境,Claude 找得到 Skill,也知道該做什麼。

但它還是停下來了。

原來我平常在啟動 Claude Code 時另外給的執行權限,也是這套方法的一部分。只是準備的時候,我根本沒把它算進去。

帶團隊的人應該都遇過類似的事:資深同仁離職,人走了才發現很多「他知道怎麼查」的東西沒有留下來;高手請假,線上出事大家只能「等他回來再說」。我們常以為缺的是文件,但更常缺的是那些只在他身上、連他自己都沒意識到的東西。

這是第三幕「方法離開作者」的第四篇。前三天,我們把查法一步步從我身上拿下來:

Day 拿下來的東西 變成 解決什麼
17 怎麼查 可呼叫的 Skill 不用每次重新教 Claude 查法
18 系統背景 有來源、有版本的 Domain Wiki 同事不懂系統,也找得到依據
19 固定核對 不靠模型的檢查程式 每次都一樣的核對,不必再想一次

今天要問的是:拿掉我這個人之後,這套方法還剩多少能自己完成?

留下 Skill,就留下方法了嗎?

我先做最直覺的事:把 Day 17 的 Skill 給一個全新的 Claude Code,只給 SKILL.md。

它讀懂了每一步,卻停在第三步:「兩支腳本不存在」。它沒有自己補寫腳本,而是把缺的東西列成缺件,結果停在待查。

Anthropic 介紹 Agent Skills 時,把寫 Skill 比喻成替新人準備到職指南。這個比喻很貼切,也提醒了我:到職指南寫得再好,指南裡提到的工具不在,新人還是做不完。 方法不只是步驟,也包含步驟依賴的程式。

所以我把 Skill、查資料的腳本、檢查器與使用說明,整理成一套查核工具組,目的是讓同事拿到後知道怎麼用,也知道跑不過時怎麼處理:

內容 它是什麼 同事用它做什麼
SKILL.md 查核步驟與結果格式 讓 Claude 知道怎麼查、交什麼
scripts/collect.py 查資料的腳本 從資料取出可引用的紀錄
scripts/gate.py、check_result.py 轉換資料並呼叫檢查器的 gate.py,以及 Day 19 的檢查器 核對結果,不靠模型自己說
scripts/selftest.py 不呼叫模型的自測 確認自己裝好了沒
INSTALL.md、settings.template.json 使用說明與設定範本 知道要設什麼權限、跑不過找誰
VERSION、CHANGELOG.md 版本與改版紀錄 知道拿到的是哪一版、改過什麼

資料放在哪、Log server 怎麼連、用誰的帳號,屬於每位同事自己的環境,不能把我的帳號一起放進去。

把查法與腳本接起來時,Day 17 的收集腳本和 Day 19 的檢查器格式對不上。我沒有改檢查器(雜湊和 Day 19 一致),另外寫了 gate.py 轉換資料並呼叫檢查器;通知 ID 只取自工具收集到的紀錄,不取自 Claude 的回答。各自都驗過,接在一起仍要另外驗。

同事要怎麼取得這套工具?

同一個 repo 的團隊,把工具組放進 .claude/skills/,跟著 git 走就好;跨 repo、整個部門,就做成 plugin,放進團隊 marketplace,讓成員自己加入、安裝、更新。判斷只有一句:看用的人在哪裡。

Day 4 做 plugin 時,marketplace 只寫了範本,明寫「尚未執行這條安裝路徑」。今天把那條路走完:把查核工具組做成 plugin,放進本機的團隊 marketplace,在全新的目錄安裝。

claude plugin marketplace add <marketplace 目錄> --scope project
claude plugin install trace-notification@d20-team --scope project

--scope project 讓啟用設定放在專案範圍,方便團隊保存同一份設定。但 clone 到設定,不等於 plugin 已安裝,也不等於腳本已獲准執行。

安裝、載入都成功,自測也通過。但第一個隱藏依賴馬上出現:我的 SKILL.md 寫死了 .claude/skills/trace-notification/scripts/ 這個路徑。 在我的目錄結構裡它永遠成立,裝成 plugin 後腳本就不在那裡了。改用 ${CLAUDE_SKILL_DIR} 之後,不論放在哪裡都會指向 Skill 自己的目錄,升到 v2.1.0。

拿掉我的設定,Claude 還能完成嗎?

每個情境都在 repo 外開全新目錄,只放這套工具組和一筆案例資料。先跑自測,再開一個不帶原對話的 Claude Code(Sonnet 5.5),加上 --setting-sources project,不讀我自己的使用者設定和 Skill。

提示只寫「用 trace-notification 這個 Skill 查核」,沒提檢查器。Claude 跑完後,由操作者另外重跑一次 gate.py,不採信模型自己說的結果。表裡括號是當時的版本。

情境 回合/秒數/費用 操作者重跑的檢查 代表什麼
資料完整(repo 方式,v2.0.1) 14/36.7/US$0.158 交人核對 被退回一次,修正後通過
缺收據(v2.0.2) 10/34.5/US$0.135 待查 列出缺 receipts.json 與下一步,沒有硬猜
沒給 Bash 權限(v2.0.2) 12/34.6/US$0.141 操作者補跑:交人核對 「固定檢查未執行,不能說已通過」
只給 SKILL.md(v2.0.2) 8/42.0/US$0.098 無法執行 開場那一次
團隊 marketplace(v2.1.0) 13/44.5/US$0.141 待查 安裝成功,但收集腳本被擋
marketplace,加上啟動授權(v2.1.2) 11/36.1/US$0.137 交人核對 Claude 執行收集與檢查,操作者重跑也通過

卡住的情境都照實停下、列出缺件,沒有繞過檢查交一個看起來漂亮的答案。但表裡有一個我一開始沒注意的差別:資料完整、缺收據這兩次能跑腳本,是因為我在啟動時另外允許了教學腳本。

原來是我一直在旁邊補

marketplace 那次,我照同事會遇到的狀況,拿掉啟動時的授權。Skill 載入了,Claude 也知道下一步要跑收集腳本,但腳本被擋。

我前後換了五種給權限的寫法:寫在 SKILL.md、換萬用字元、寫進專案設定,五次都停在權限(每種寫法的原文放在附件)。被擋的根本原因還沒查清。

接著我做了一個對照:不改 Skill、不改案例資料,只在啟動 Claude Code 時,把我平常會給的授權明確加回去:

--allowedTools Read Grep Glob Skill "Write(out/**)" "Edit(out/**)" "Bash(python *collect.py *)" "Bash(python *gate.py *)" "Bash(python *selftest.py *)"

這是啟動指令裡的權限片段,用來允許三支教學腳本,不代表 Bash 因此只能執行這三支程式。這次 Claude 載入 marketplace 的 Skill,執行 collect.py、寫出結果,最後執行 gate.py:

{
  "state": "READY_FOR_REVIEW",
  "contract_passed": true,
  "errors": [],
  "approved": false,
  "action_executed": false
}

重點看兩行:contract_passed: true 代表結果通過程式檢查,approved: false 代表仍要人核對。操作者另外重跑,結果一致。**從安裝、載入到程式檢查,這條本機路徑跑完了。**過程中仍有三次被擋(切換到 plugin 目錄、兩段混合寫檔與執行的命令),Claude 改用 Write 寫結果、用單一 Python 命令執行檢查才完成。

同一條路徑,差別只在有沒有我替它補的那一段。這說明了:安裝成功、Skill 載入、腳本能執行,是三個不同的驗收。 我平常只看到第一和第三個都通過,是因為我自己默默補上了中間那一段。

安裝與載入通過,不代表腳本能執行;作者補上的啟動授權也是使用條件

三個關卡要分開驗:拿掉啟動授權時停在待查;本次明確授權後,已完成腳本與程式檢查。

回頭整理,這次一共找到四個原本藏在我環境裡的依賴:

隱藏依賴 在我的電腦上,誰補的 拿掉後發生什麼 現在怎麼處理
腳本執行權限 我啟動時給的授權 Skill 載入,腳本被擋,停在待查 INSTALL.md 寫明啟動授權;明確授權後,本機路徑已跑完
欄位的合法值 我腦中知道 sender_status 該填什麼 Claude 填錯被退回,只好去翻檢查程式找答案 使用說明補上合法值(v2.0.2)
腳本路徑 我的目錄結構 裝成 plugin 後找不到腳本 改用 ${CLAUDE_SKILL_DIR}(v2.1.0)
主控台編碼 我平常用的終端機 中文 Windows 主控台印不出「≥」,自測當掉 輸出改 UTF-8(v2.0.1)

第二列最值得多看一眼。檢查器退回時只說「發送端狀態不合法」:

{
  "state": "RETURN_FOR_EVIDENCE",
  "errors": ["SENDER_STATUS"],
  "approved": false
}

Claude 於是用 grep 和 sed 去讀 check_result.py,自己找出允許值,改對才通過。讀程式找答案是正常除錯;但同事要翻檢查器才知道怎麼填,代表我以為寫清楚的東西,其實只寫在我腦中。

跑不過時,誰處理、怎麼處理?

找出隱藏依賴之後,還要讓同事在卡住時不必回頭問我,否則又回到「等他回來再說」。所以檢查器的每一種結果,都對應一個下一步:

檢查結果 代表什麼 下一步由誰 要做什麼
交人核對(READY_FOR_REVIEW) 條件齊全 服務 Owner 核對結論與來源,決定是否補送
待查(NEEDS_FOLLOWUP) 接收端仍是 unknown,已列缺件 查核的同事 依缺件清單補查來源
退回補證(RETURN_FOR_EVIDENCE) 缺依據或前後不一致 查核的同事 依錯誤碼修正結論後重跑
輸入錯誤(INPUT_ERROR) 沒有結果檔,或通知 ID 不唯一 操作者 檢查案例資料與輸入

不論哪一種,approved 都是 false。通過檢查只代表條件齊全;補送或結案,仍要有權限的人決定。

這次沒驗到的

  • 都在同一台作者機,全新目錄加上不讀使用者設定,不是另一台機器,也不是真人同事;每個情境只跑一次,不估成功率。
  • 只靠 Skill 或專案設定的權限為什麼沒生效,還沒查清;互動模式下由使用者核准後能否完成,也尚未驗證。
  • Day 18 的 Wiki 沒有放進工具組;這次用 Day 17 的本機 Log 與收據,沒有重新接 Log server。
  • marketplace 是本機目錄,不是團隊的 git repo;用 --scope project 安裝會在本機 plugin 清單留下登記。

回到一開始:別人拿到也能跑嗎?

我原本以為,留下 Skill 就留下了方法;實跑發現缺了腳本,讀得懂也做不完。我以為安裝成功就能用;實跑發現載入了,執行仍被擋。我以為自己能跑,團隊就能跑;實跑發現我啟動時補的授權沒有跟過去,明確交代後才跑完。

所以答案是:把隱藏依賴交代清楚之後,可以。 在同一台機器上,從 marketplace 安裝到程式檢查的完整資料案例已經跑完。但能跑完,不等於交接完成:這仍是作者自己的演練,沒有真人同事試用;檢查通過也只是交人核對,不代表允許補送或結案。

方法能不能交出去,要看拿掉作者之後,還剩下多少能自己完成的工作。

這套工具組從 v2.0.0 改到 v2.1.2,每改一次,我都只驗了當下那個情境。下一步才有資格問:改了 Skill,怎麼知道原本會的沒有被改壞? 這是明天要回答的問題。


參考資料:


上一篇
Day 19|讓 Claude 專心判斷,把固定檢查交給程式
系列文
買了 Claude Code,然後呢? 共 20 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言