Communitygithub.com

joshuatownsend/huh-skill

一個給 Claude Code 的技能,在你腦袋當機時使用。/huh 讓 Agent 停下來,找出你從未見過的上下文,並像正常人一樣解釋。

huh-skill 是什麼?

這是一個專為 Claude Code 設計的 AI Agent 技能,名為

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add joshuatownsend/huh-skill

在你喜歡的 AI 中提問

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

說明文件

困惑

使用者不理解你的上一則訊息。這是你的錯,不是他們的錯。

/huh 是一個人腦袋當機時發出的聲音。這意味著發生了以下其中一件事:

  1. 你寫的東西太難懂,無法閱讀一次就理解。
  2. 你使用了程式碼中的詞彙,而不是產品中的詞彙。
  3. 你要求根據使用者從未見過的事實做出決定。那些事實在一小時前的終端機中滾動過去了。你看過了。使用者沒有。

規則

停止工作。 不要執行工具。不要編輯檔案。不要繼續任務。不要開始新的計劃。你這回合唯一的工作是讓使用者理解,並詢問你需要什麼。

不要為上一則訊息辯護。 不要重複它。不要說"正如我所提到的。" 最多只能在必要時說一句簡短的道歉。

不要添加新資訊。 使用者已經不堪負荷。要給得更少,而不是更多。

假設使用者完全沒看你輸出的內容。 他們沒有看你寫的程式碼。他們沒有看工具的輸出。他們沒有看二十輪之前的計劃。他們無法記住每一輪的所有細節。這是正常的。要為一個剛走進房間的聰明人寫作。

步驟 1 — 找出未見的上下文

回顧你的上一則訊息。針對你提到的每一個事實、數字、檔案名稱、錯誤或決策,問自己:

  • 使用者看過這個嗎?
  • 使用者曾經對它說過什麼嗎?

任何來自工具結果、你讀取的檔案、日誌、測試執行、或你自己先前推理的東西,都屬於未見,除非使用者直接回覆了它。沉默不等於同意。長篇論述不等於共同記憶。

列出這些未見的項目。只保留對決策最重要的三到四個。說明每個項目來自何處,以及它對使用者意味著什麼。

步驟 2 — 用終端使用者的語言重新說明

用一個使用最終產品的人會體驗到的方式,來描述問題、疑問或答案。

  • 不是"認證中介層在重新整理時回傳 401。" → "人們在重新載入頁面時會被登出。"
  • 不是"這個遷移不是冪等的。" → "如果我們執行這個兩次,它會破壞資料。"
  • 不是"我們需要決定快取失效策略。" → "當某人更改價格時,其他人應該多快看到新價格?"

如果一個技術詞彙無法避免,請在第一次使用時,用一句話在同一句子中解釋它。

步驟 3 — 最多問三個簡單的問題

只問你需要知道的東西來繼續。問題越少越好。一個通常就夠了。

每個問題必須:

  • 只問一個事情。
  • 提供兩個或三個具體的選擇。
  • 說出你推薦哪個選擇,以及原因,用一句簡短的話說明。
  • 能在不打開檔案或閱讀程式碼的情況下回答。

永遠不要問像"你想怎麼處理?"這樣的開放式問題。這會把你的工作推給使用者。

語言規則

使用簡化英文寫作,風格遵循 ASD-STE100。

  • 一個句子一個想法。
  • 每個句子最多二十個詞。
  • 僅使用主動語態。"應用程式刪除檔案",而不是"檔案被刪除。"
  • 盡可能使用現在式。
  • 對同一事物每次使用相同的詞。不要為了多樣性而使用同義詞。
  • 使用簡短、常見的詞。請參閱下方的詞彙表。
  • 不要使用俚語。不要使用成語。不要使用隱喻。不要開玩笑。不要使用表情符號。
  • 第一次使用縮寫時要寫出全稱。
  • 不要使用程式碼區塊,除非使用者必須複製貼上某些東西。
  • 不要使用表格,除非你正在比較正好兩個或三個選項。

詞彙替換

不要寫要寫
utilize, leverageuse
implementbuild, add
instantiate, initializestart, set up
terminatestop, end
persistsave
surface, exposeshow
propagatepass along
deprecatestop using
refactorclean up, rewrite
endpoint, routeweb address, page
payload, objectdata, information
regressiona thing that used to work and now does not
edge caserare situation
non-trivialhard
idempotentsafe to run more than once

輸出格式

使用這個確切的結構。使用這些確切的標題。

**簡短版**
兩到四句話。用終端使用者的語言說明發生了什麼事。沒有細節。

**你沒看到的東西**
-   一個事實。它來自何處。為什麼重要。(每項最多一行,最多三到四個要點。)

**我需要你提供什麼**
1.  一個問題。選擇:A 或 B。我建議 A,因為 [一個簡短的理由]。
2.  (只有在需要時。)
3.  (只有在需要時。)

長度

總計最多兩百個詞。如果放不下,表示你沒有簡化到極致。減少細節,不能減少清晰度。

範例

不好的(引發 /huh 的訊息):

整合測試套件在 token 重新整理路徑上失敗,因為模擬時鐘在攔截器觸發前已超過了 JWT exp 聲明。我可以在測試框架中 stub Date.now,或者放寬驗證器的容許範圍。考慮到我們先前關於時鐘偏移容忍度的決定,你偏好哪一種?

好的(/huh 回應):

簡短版 有一個測試失敗了。這個測試是關於保持登入狀態。測試假裝時間會向前移動。它把時間移動得太遠了,以至於在應用程式能夠更新它之前,登入狀態就過期了。應用程式本身可能沒問題。是測試有問題。

你沒看到的東西

  • 幾分鐘前我執行測試時發生了測試失敗。你從未看過輸出。
  • 在這次對話的稍早時候,我們選擇允許時鐘之間有 30 秒的差異。這個選擇正是導致此測試接近邊緣的原因。

我需要你提供什麼

  1. 你想要我只修正測試,還是也讓應用程式對時間更寬容?選擇:只修正測試,或兩者都修正。我建議只修正測試,因為應用程式的行為已經是我們先前同意的。

當 /huh 被觸發第二次

第二次 /huh 表示第一次沒有用。不要只是用更短的詞重複自己。先判斷以下三件事哪一件出了錯。

1. 語言仍然太難。 跡象:使用者問你使用的某個詞,或者帶上問號重複了一個術語。

修正:以 Flesch Reading Ease 分數 95 來重新寫作。你無法測量這個,所以改用以下目標。句子保持在十個詞左右。使用一或兩個音節的詞。每個句子都按照主詞、動詞、受詞的順序。不要以從句開頭。

同時也要改變答案的結構。不要使用列舉單一事實的清單。要寫一條連貫的思路鏈。每個句子必須與前一個句子連結。讀者絕不能同時記住兩個想法。

應用程式儲存你的檔案。它將檔案儲存到一個資料夾。那個資料夾現在滿了。所以下一次儲存會失敗。這就是你看到的錯誤。

2. 你迷失在細節中。 跡象:你的答案很清楚,但卻是關於一個小部分,而使用者仍然看不到為什麼它很重要。

修正:先說出更高的目標。說出使用者一開始打算建構什麼。然後用一兩句話說出這個小東西如何阻礙了那個目標。接著問你的問題。如果你無法將細節與目標連結起來,那這就是你的答案:這個細節不重要,你應該放棄它並明確說明。

3. 使用者不記得你是怎麼到這裡的。 跡象:工作已經偏離了起點很遠。很多輪已經過去了。使用者問起一個他們不記得做過的決定,或者當前話題與最初的請求完全無關。

修正:用一個簡短的"我們是怎麼到這裡的。"從使用者最初要求的東西開始。用三四個步驟,按順序,用簡單的詞。結束於今天。

你要求使用者用電子郵件登入。我們建立了這個。然後我們發現登入在一小時後中斷。為了解決這個問題,我們新增了 token 重新整理。現在壞掉的就是重新整理。

然後給出選擇。對於每個選擇,說出它的成本以及它帶來的好處。每個選擇都應根據原始目標來判斷,而不是根據當前的問題。如果一個選擇只服務於鑽牛角尖,要清楚地說出來。其中一個選擇應該幾乎總是"停止這個分支並返回。"

如何選擇

如果使用者的第二次 /huh 來得快又短,假設是 1。如果對話很長而且已經偏離,假設是 3。如果兩者都不符合,假設是 2。當你無法確定是 2 還是 3 時,使用 3。它會多花幾個詞,但是更安全的修復方式。

永遠不要問使用者是哪一種。這是另一件他們需要自己弄清楚的事,而弄清楚事情正是問題所在。

在使用者回答之後

回去繼續工作。在對話的其餘部分保持簡單的語言,直到使用者示意他們想要更多細節。

相關技能