---
schemaVersion: 1
slug: gp-245-20260624-mattpocockuk-skill-no-op
ticketId: GP-245
lang: zh-tw
title: Skill 裡的 No-op：那些看起來很厲害但其實沒用的指令
summary: 打開任何一個 agent skill，裡面滿滿都是「請詳細一點」「請仔細一點」這種看起來很認真的指令。問題是它們根本沒在改變模型行為。Matt Pocock 點出 no-op 的陷阱，還有怎麼一眼分辨「廢指令」跟「真的有用的指令」。
originalDate: 2026-06-24
translatedDate: 2026-06-24
source: "@mattpocockuk on X"
sourceUrl: https://x.com/mattpocockuk/status/2069784839474032896
author: null
authorshipNote: null
canonicalUrl: https://gu-log.vercel.app/posts/gp-245-20260624-mattpocockuk-skill-no-op
status: published
replacementTicketId: null
replacementUrl: null
---

# Skill 裡的 No-op：那些看起來很厲害但其實沒用的指令

> **來源:** [@mattpocockuk on X](https://x.com/mattpocockuk/status/2069784839474032896)

打開任何一個 [agent](https://gu-log.vercel.app/glossary#agent) [skill](https://gu-log.vercel.app/glossary#skill) 檔案，搜尋這幾句話：

- 「commit 訊息要非常詳細」
- 「要徹底」
- 「實作要好讀」

這些句子有什麼共同點？

它們是 **no-op**——看起來很像在交代事情，實際上對模型行為零影響。[Agent](https://gu-log.vercel.app/glossary#agent) 本來就會寫好的 commit 訊息、本來就會盡量徹底、本來就會盡量讓實作好讀。這些是它的預設值，不需要特地寫一行去要求它。

> **Mogu 畫重點：**
>
> 插個冷知識：no-op 全名是 `no-operation`，借自組合語言那個叫 `NOP` 的指令——CPU 跑到它就佔一個週期、什麼都不做，純拿來湊時間或記憶體對齊。所以判一行 prompt 是不是 no-op，本質就是問：它到底有沒有真的「動到」什麼，還是只是個佔位仔w(ﾟДﾟ)w

測試方法很簡單：把那行刪掉，跑一次，看輸出有沒有變。沒變？那行就是純粹的擺設。

> **Mogu 偷偷說：**
>
> 這讓人想起考卷上印的「請務必認真作答」——有誰看到這句，會從「本來打算亂寫」切換成「好吧我認真」嗎？模型也一樣，它本來就在認真了。┐(￣ヘ￣)┌

## 怎麼一眼分辨「廢指令」跟「有用的指令」

兩種指令長得很像，但差別其實很清楚——關鍵是問：**這件事，模型沒被告知的話會不會做？**

刪了完全沒差的（no-op）：

- 「程式碼要好維護、好讀」
- 「要考慮 edge case」
- 「回答要準確」

刪了行為就變的（有用）：

- 「這個 repo 一律 named export，不要 default export」
- 「測試放 `__tests__/`，用 `vitest` 跑」
- 「commit 開頭加任務編號，例：`[GU-123]`」

看出來了嗎？no-op 要求的是模型「本來就會盡量做」的通用美德；有用的指令給的是它「猜不到」的具體事實——這個 repo 的慣例、用的工具鏈、要的格式。前者是廢話，後者才是它真正需要有人開口交代的地方。

## Agent 自己生成的 skill 是重災區

用 agent 產 skill 時，它會塞進大量「聽起來很專業、其實沒效果」的段落，整段整節都是擺設。這些廢指令帶來三個實際成本：

1. **難以評估**：分不清哪些指令真的在影響行為，哪些只是裝飾
2. **難以維護**：要改的時候，不知道哪行能刪、哪行刪了會壞
3. **浪費 [token](https://gu-log.vercel.app/glossary#token)**：每次執行都白燒 token，餵模型讀一堆沒用的字

## 延伸閱讀

- [GP-237: 把 Agent 當蒸汽火車開：大型專案的 Coding Agent 操作心法](https://gu-log.vercel.app/posts/gp-237-20260621-simonlast-agent-coding-agent/)
- [GP-195: Skill 賣不動，不是因為沒價值，而是因為收錢的位置錯了](https://gu-log.vercel.app/posts/gp-195-20260507-yage-skill-plugin-evolution/)
- [GP-186: OpenClaw 自動化全景：Task Flow 是多步驟工作的編排層](https://gu-log.vercel.app/posts/gp-186-20260428-article-openclaw-task-flow/)

> **Mogu 忍不住說：**
>
> 最諷刺的是，這個建議能套在它自己身上：如果一條 skill 規則，換成任何一個正常 agent 都會照做，那它就沒在工作。寫 [prompt](https://gu-log.vercel.app/glossary#prompt) 跟寫程式一樣，沒在作用的那幾行就是該清的累贅——下次手癢想多加一句，先問一次：這行刪掉，會怎樣？ (◍•ᴗ•◍)

> **Mogu 認真說：**
>
> 講完這篇，gu-log 自己手癢，真的做了一個 [`/trim` skill](https://github.com/chitienhsiehwork-ai/gu-log/blob/main/.claude/skills/trim/SKILL.md)——派一群 subagent 逐行對自家 skill 跑這篇講的 no-op test，把「換誰來都會照做」的廢話抓出來。第一次跑就在自己的一個 skill 裡挖出快 400 個 token 的純裝飾。寫一篇文順便電到自己，很 gu-log。(¬‿¬)

> **ShroomDog 插嘴：**
>
> 講個更好笑的：這個 `/trim` skill 第一版自己就犯了它要抓的錯。它把給 subagent 的整段審稿說明，直接寫死在 skill 檔裡——結果主 agent 每次一載入 skill，就把那串「本來是給別人讀的 prompt」整包吞進自己的 `context`。一把獵 no-op 的刀，刀身上自己長了一塊 no-op。
>
> 修法很單純：說明搬去一個獨立檔，主 agent 只遞路徑、叫 subagent 自己讀。主 agent 腦袋裡從此只剩「目標檔在哪、說明檔在哪」兩個路徑，prompt 一個字都不進來。
>
> [整段審稿說明塞進主 agent，還是只遞一條路徑？](https://gu-log.vercel.app/artifacts/gp-245-trim-noop/) — 互動小頁 — 一個開關看 skill 怎麼吃掉自己的 context · 無 API · 純瀏覽器內完成
>
> prompt 是寫給「要執行它的那個 agent」讀的，不是寫給「轉發它的人」背的。能用一條路徑遞過去的東西，就別整包搬進 context。
